Application Note

Spansion® 模拟和微控制器产品
本文档包含有关 Spansion 模拟和微控制器产品的信息。尽管本文档内有原来开发该产品规格的公司名称
“富士通”或 “Fujitsu”, 该产品将由 Spansion 提供给现有客户和新客户。
规格的延续
本文档内容并不因产品供应商的改变而有任何修改。文档内容的其他更新,均为改善文档而进行,并已记录在文档
更改摘要。日后如有需要更改文档,其更改内容也将记录在文档更改摘要。
型号的延续
Spansion 将继续提供型号以“MB”开始的现有产品。如欲订购该类产品,敬请使用本文档内列出的产品型号。
查询更多信息
如欲查询更多关于 Spansion 存储器、模拟产品和微控制器产品及其解决方案的信息,请联系您当地的销售办事
处。
书末出版说明
本文档介绍的产品,其设计、开发和制造均基于一般用途,包括但不限于普通工业使用、普通办公使用、个人使用及家庭使用,不应用于:(1)
存在严重风险或危险,除非能够保证极高的安全性,否则可能对公众造成严重影响,甚至可能直接造成死亡、人员伤害、物品损坏或其他损失
的用途(如核设施的核反应控制、飞机飞行控制、空中交通控制、公共交通控制、医学生命支持系统、武器系统的导弹发射控制),或者(2) 不
允许出现故障的用途(如潜艇中继器和人造卫星)。请注意,对于您和 / 或任何第三方由于将产品用于上述用途而造成的任何索赔和损失,
Spansion 不承担任何责任。任何半导体设备都可能发生故障。您必须在自己的设施和装置中加入安全设计措施,如冗余、防火、防止电流过
载及其他异常运行情形等,以防由于此类故障而造成伤害、损坏或损失。如果根据日本 Foreign Exchange and Foreign Trade Law、美国US Export
Administration Regulations 或其他国家(地区)的适用法律的规定,本文档中介绍的任何产品是在出口方面受到特别限制的商品或技术,则这
些产品的出口必须预先得到相关政府的许可。
商标和声明
本文档的内容如有变更,恕不另行通知。本文档可能包含Spansion 正在开发的 Spansion 产品的相关信息。 Spansion 保留变更任何产品或停
止其相关工作的权利,恕不另行通知。本文档中的信息 “ 按原样 ” 提供,对于其精确性、完整性、可操作性、对特定用途的适用性、适销性、
不侵犯第三方权利等不提供任何担保或保证,也不提供任何明确的、隐含的或法定的其他担保。对于因使用本文档中的信息而造成的任何形式
的任何损失,Spansion 不承担任何责任。
版权所有© 2013 Spansion Inc. 保留所有权利。Spansion®、Spansion 标识、MirrorBit®、MirrorBit® Eclipse™、ORNAND™ 以及它们的组合,
是Spansion LLC 在美国和其他国家(地区)的商标和注册商标。使用的其他名称只是一般性参考信息,可能是其各自所有者的商标。
富士通半导体(上海)有限公司
应用笔记
MCU-AN-500002-Z-12
F²MC-8FX 家族
8 位微型控制器
MB95200H/210H 系列
基本固件设置
应用笔记
基本固件设置 V1.2
修改记录
修改记录
版本
日期
作者
修改记录
1.0
2008-03-26
Lori. Li
初稿
1.1
2008-07-21
Lori. Li
修改第五章时钟模式选择代码及注释
1.2
2010-02-26
Lori. Li
删除第 11,13,24 页中关于 12.5M CR 的描述
本手册包含49页。
1. 本文档记载的产品信息及规格说明如有变动,恕不预先通知。如需最新产品信息和/或规格说明,联系富士
通销售代表或富士通授权经销商。
2. 基于本文档记载信息或示意图的使用引起的对著作权、工业产权或第三方的其他权利的侵害,富士通不承
担任何责任。
3. 未经富士通明文批准,不得对本文档的记载内容进行转让、拷贝。
4. 本文档所介绍的产品并不旨在以下用途: 需要极高可靠性的设备,诸如航空航天装置、海底中继器、核控
制系统或维系生命的医用设施。
5. 本文档介绍的部分产品可能是“外汇及外贸管理法”规定的战略物资(或专门技术),出口该产品或其中部
分元件前,应根据该法获得正式批准。
版权©2008 富士通半导体(上海)有限公司
MCU-AN-500002-Z-12- 第2页
基本固件设置 V1.2
目录
目录
修改记录.................................................................................................................................. 2
目录 ......................................................................................................................................... 3
1 概要 .................................................................................................................................... 6
2 初始化程序 ......................................................................................................................... 7
2.1
初始化堆栈 ................................................................................................................ 7
2.2
SP和DP设置.............................................................................................................. 7
3 中断向量 ............................................................................................................................. 9
3.1
中断级别 .................................................................................................................... 9
3.2
中断处理程序函数原型 .............................................................................................. 9
3.3
向量定义 .................................................................................................................... 9
3.4
默认中断服务程序 ................................................................................................... 10
3.5
实例 ......................................................................................................................... 10
4 时钟控制器 ....................................................................................................................... 12
4.1
时钟控制器概要 ....................................................................................................... 12
4.2
时钟控制器的结构图 ................................................................................................ 12
4.3
寄存器 ..................................................................................................................... 13
5 时钟模式选择 .................................................................................................................... 15
5.1
介绍 ......................................................................................................................... 15
5.2
主要特性 .................................................................................................................. 15
5.3
主时钟 ..................................................................................................................... 15
5.4
副时钟 ..................................................................................................................... 17
5.5
主CR时钟 ................................................................................................................ 18
5.6
副CR时钟 ................................................................................................................ 19
MCU-AN-500002-Z-12 - 第3页
基本固件设置 V1.2
目录
5.7
时钟分频率 .............................................................................................................. 19
6 待机模式选择 .................................................................................................................... 20
6.1
主要特性 .................................................................................................................. 20
6.2
待机模式和时钟输入状态......................................................................................... 20
6.3
时钟模式和待机模式的组合 ..................................................................................... 20
6.4
休眠模式 .................................................................................................................. 22
6.5
6.6
6.7
6.8
6.4.1
介绍 ........................................................................................................... 22
6.4.2
休眠模式下的操作 ..................................................................................... 22
6.4.3
切换与退出 ................................................................................................ 22
停止模式 .................................................................................................................. 22
6.5.1
介绍 ........................................................................................................... 22
6.5.2
停止模式下的操作 ..................................................................................... 22
6.5.3
切换和退出 ................................................................................................ 22
时基定时器模式 ....................................................................................................... 23
6.6.1
介绍 ........................................................................................................... 23
6.6.2
时基定时器模式下的操作 ........................................................................... 23
6.6.3
切换和退出 ................................................................................................ 23
计时模式 .................................................................................................................. 24
6.7.1
介绍 ........................................................................................................... 24
6.7.2
计时模式下的操作 ..................................................................................... 24
6.7.3
切换和退出 ................................................................................................ 24
待机模式切换代码 ................................................................................................... 25
7 更多信息 ........................................................................................................................... 26
8 附录 .................................................................................................................................. 27
8.1
图表索引 .................................................................................................................. 27
8.2
代码范例 .................................................................................................................. 28
MCU-AN-500002-Z-12- 第4页
基本固件设置 V1.2
目录
8.2.1
工程 1: Basic_Initialization......................................................................... 28
8.2.2
工程 2: Clock_Change............................................................................... 34
8.2.3
工程 3: Mode_Change............................................................................... 42
MCU-AN-500002-Z-12 - 第5页
基本固件设置 V1.2
第 1 章概要
1 概要
本文档介绍了如何对 FUJITSU F2MC-8FX 家族 MB95200H/210H 系列进行固件设置。
本文档同时介绍了初始化程序,堆栈指针(SP),直接存储区指针(DP),时钟控制以及待
机控制。
MCU-AN-500002-Z-12- 第6页
基本固件设置 V1.2
第 2 章初始化程序
2 初始化程序
开始文件 startup.asm 是重置操作后的入口,包括针对编译器和设备操作的多种设置。它初始
化堆栈和变量的初始值。
2.1
初始化堆栈
启动 MCU 时,必须初始化堆栈,设置堆栈大小,并定义堆栈区。
初始化的代码示例
//Sample code for initialization
//definition to stack area
.SECTION
STACK,
STACK,
ALIGN=1
.RES.B 128-2
STACK_TOP:
.RES.B 2
注意:上述代码截取自 start.asm,参见附录。
2.2
SP和DP设置
SP 和 DP 是专用寄存器。
堆栈指针(SP)是一个 16 位的寄存器,它保存堆栈推动和弹出指令导致的中断或子程序调用
发生时引用的地址。重置后的的初始值为“0000H”。
DP 指直接存储区指针。DP 位于程序状态(PS)寄存器的第 10-8 位,用于指明直接地址要访
问的区域。
初始化的代码示例
MCU-AN-500002-Z-12 - 第7页
基本固件设置 V1.2
第 2 章初始化程序
.SECTION CODE,CODE,ALIGN=1
;-------------------------------------------;set stack pointer
;--------------------------------------------MOVW
MOVW
A , #STACK_TOP
SP, A
// Set Register bank Pointer 0 / set Direct bank Pointer 0 (0x80...0xFF)
//The PS register consists of the register bankpointer (RP), direct
// pointer (DP), and condition code register (CCR).
MOVW
A, PS
MOVW
A, #0x07FF// RP=0, DP=0, I=0 ANDW
A
MOVW
PS, A
注意:上述代码截取自 start.asm,参见附录。
MCU-AN-500002-Z-12- 第8页
基本固件设置 V1.2
第 3 章中断向量
3 中断向量
开始基本固件设置后,必须初始化中断向量。
用户可使用 C 文件 vector.c。该 C 文件公布了中断级别和数字,包括默认中断处理程序。相
应的中断控制寄存器也可被初始化。
3.1
中断级别
文件 vector.c 首先定义中断级别函数 void InitIrqLevels (void)。 void InitIrqLevels (void)
{
ILR0 = 0Xff
// IRQ0:
external interrupt ch.4
--> 01
// IRQ1:
external interrupt ch.5
--> 01
// IRQ2:
external interrupt ch.2/ch.6
--> 01
// IRQ3:
external interrupt ch.3/ch.7
--> 01
......
} 注意:上述代码截取自 vector.c,参见附录。
该函数初始化为每一个共享中断通道定义中断级别的中断控制寄存器。FF指最低优先级。
3.2
中断处理程序函数原型
中断处理程序的函数原型将在级别初始化后公布。 __interrupt void DefaultIRQHandler (void)
// Add your own prototypes here like above. 注意:上述代码截取自 vector.c,参见附录。
3.3
向量定义
向量数字与中断处理函数相关联。对于未使用的中断,请使用默认的中断处理程序。
MCU-AN-500002-Z-12 - 第9页
基本固件设置 V1.2
第 3 章中断向量
#pragma
intvect
DefaultIRQHandler 0//IRQ0: external interrupt ch.4
#pragma
intvect
DefaultIRQHandler 1//IRQ1: external interrupt ch.5 #pragma
intvect
DefaultIRQHandler 2 //IRQ2: external interrupt ch.2/ch.6 #pragma
intvect
DefaultIRQHandler 3 //IRQ3: external interrupt ch.3/ch.7
......
注意:上述代码截取自 vector.c,参见附录。
3.4
默认中断服务程序
默认中断服务程序在vector.c文件旁列出。该函数通过一个无限循环停止系统。对于调试来
说,有必要在此设置一个断点检测未初始化的中断。
默认中断处理程序的代码示例
//default interrupt handler
__interrupt void DefaultIRQHandler (void)
{
__DI(); // disable interrupts
While (1)
__wait_nop ();
// halt system
注意:上述代码截取自 vector.c,参见附录。
3.5
实例
如果需要在使用中断时修改中断向量,例如设置外部中断 ch4 as key_in,请修改 vector.c 中
的代码。
#pragma intvect Key_in
1
// IRQ0:
external interrupt ch4 注意:上述代码截取自 vector.c,参见附录。
中断级别的定义
MCU-AN-500002-Z-12- 第10页
基本固件设置 V1.2
第 3 章中断向量
// defines the interrupt levels
void InitIrqLevels (void)
{
ILR0=0xFC
// IRQ3:
......
// IRQ0:
external interrupt
ch.4
--> Level 00
// IRQ1:
external interrupt
ch.5
// IRQ2:
external interrupt ch.2 | ch.6
external interrupt ch.3 | ch.7
--> 01
--> 01
--> 01
//elide the following code
}
注意:上述代码截取自 vector.c,参见附录。
在文件 main.c 中,输入中断处理程序函数_interrupt void Key_Int (void)。
//interrupt response function
_interrupt voidKey_int (void)// key_int external interrupt ch.4 {
// enter your interrupt handler function(s) here
}
注意:上述代码截取自 main.c,参见附录。
MCU-AN-500002-Z-12 - 第11页
基本固件设置 V1.2
第 4 章时钟控制器
4 时钟控制器
本章介绍了时钟控制器的函数和操作。
4.1
时钟控制器概要
F2MC-8FX 家族有一个内置时钟控制器,用于优化功耗。它包括一个双外部时钟产品支持外部
主时钟和外部副时钟,以及一个单外部时钟产品仅支持外部主时钟。
时钟控制器启用-禁用时钟振荡,启用-禁用对内部电路的时钟信号输入,选择时钟源,以及控
制内部 CR 振荡器和分频电路。
4.2
时钟控制器的结构图
图4-1:时钟控制器结构图
MCU-AN-500002-Z-12- 第12页
基本固件设置 V1.2
第 4 章时钟控制器
4.3
寄存器
时钟控制器包括四个寄存器:系统时钟控制寄存器(SYCC),待机控制寄存器(STBC),
系统时钟控制寄存器 2(SYCC2)以及振荡稳定等待时间设置寄存器(WATR)。
参见 MCU MB95200H/210H 系列硬件手册的第六章了解更多信息。
图 4-1 显示了系统时钟控制寄存器(SYCC)的配置。该寄存器用于控制机械时钟分频率选
择。
Address
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
Initial value
0007H
-
-
-
-
SRDY
-
DIV1
DIV0
0000X011B
R0/WX
R0/WX
R0/WX
R0/WX
R/WX
R0/WX
R/W
R/W
图4-2:系统时钟控制寄存器的配置(SYCC)
图 4-3 显示了振荡稳定等待时间设置寄存器(WATR)的配置。该寄存器用于设置振荡稳定等
待时间。
Address
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
Initial value
0005H
SWT3
SWT2
SWT1
SWT0
MWT3
MWT2
MWT1
MWT0
11111111B
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
图4-3:振荡稳定等待时间设置寄存器(WATR)的配置
图 4-4 显示了待机控制寄存器(STBC)的配置。该寄存器用于控制从运行模式到休眠模式、
停止模式、时基定时器模式、计时模式的转换,在停止模式,时基定时器模式和计时模式中设
置引脚状态,以及控制软件重置的产生。
Address
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
Initial value
0008H
STP
SLP
SPL
SRST
TMD
SCRDY
MCRDY
MRDY
00000XXXB
R0/W
R0/W
R/W
R0/W
R0/W
R/WX
R/WX
R/WX
图4-4:待机控制寄存器(STBC)
图 4-5 显示了系统时钟控制寄存器 2(SYCC2)的配置。该寄存器用于指示和切换当前时钟
模式,以及控制副时钟、主时钟、副 CR 时钟,主 CR 时钟和主时钟振荡。
Address
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
Initial value
000DH
RCM1
RCM0
RCS1
RCS0
SOSCE
MOSCE
SCRE
MCRE
10100011B
R/WX
R/WX
R/W
R/W
R/W
R/W
R/W
R/W
图4-5:系统时钟控制寄存器 2 的配置(SYCC2)
MCU-AN-500002-Z-12 - 第13页
基本固件设置 V1.2
第 4 章时钟控制器
R/W:
R/WX:
R0/WX:
R0/W:
读/写(读取值与烧写值一致)
只读(可读,烧写无效)
未定义(读取“0”,烧写无效)
只写(可写,读取“0”)
MCU-AN-500002-Z-12- 第14页
基本固件设置 V1.2
第 5 章时钟模式选择
5 时钟模式选择
5.1
介绍
一共有四种时钟(主时钟,副时钟,主 CR 时钟,副 CR 时钟)可供选择(单外部时钟产品只
有三种时钟)。
5.2
主要特性
可选择的主时钟源
外部主时钟(频率高达32.5MHz,最大机械时钟频率为16.25 MHz)
主内部CR时钟(1/8/10 MHz)
可选择的副时钟源
外部副时钟(32.768 kHz)
副 OSC 时钟(32.768 kHz)
副内部CR时钟(典型值: 100 kHz,最小值: 50 kHz,最大值:200
kHz)
初始时钟为主CR时钟(8 MHz)
5.3
主时钟
主时钟为外部主时钟。外部时钟的最大频率为 32.5MHz,最大机械时钟频率为 16.25 MHz。
使用主时钟前,确认 SYSC_PFSEL 位为 0。该位用于选择 PF1/PF2 引脚的功能。如果该位
为 0,则 PF1/PF2 引脚用作主时钟振荡器引脚。
注意:参考硬件手册的第 23 章了关于 PFSEL 设置的更多信息。
更新 SYCC2_MOSCE 启用主时钟,更新 SYCC2_RCS 选择主时钟模式,更新 WATR 改变振
荡稳定等待时间,并检查 STBC_MRDY 指示主时钟振荡是否稳定。
如果设置 WATR 为 0x0F,振荡稳定等待时间为(214-2)/FCH:大约 4.10ms。
以下代码显示了如何操作主时钟,包括如何启用主时钟,切换至主时钟模式,更新振荡稳定等
待时间以及等待振荡稳定。
MCU-AN-500002-Z-12 - 第15页
基本固件设置 V1.2
第 5 章时钟模式选择
// enable the Main clock oscillation
SYCC2_MOSCE = 1;
//Clock Mode Selection,select the main clock mode
SYCC2_RCS0 = 0x01;
SYCC2_RCS1 = 0x01;
//update Oscillation Stabilization Wait Time
//when Main Oscillation Clock FCH=4MHz
WATR = 0X0F;
//Oscillation Stabilization Wait Timemean
// (214-2)/FCH About 4.10 ms
While(!STBC_MRDY);
//Indicates main clock oscillation being stable
注意:上述代码截取自工程 Clock_Change,参见附录。
MCU-AN-500002-Z-12- 第16页
基本固件设置 V1.2
第 5 章时钟模式选择
5.4
副时钟
副时钟是外部副时钟。外部副时钟的最大频率是 32.768 kHz,相应的副时钟频率为 32.768
kHz。使用副时钟前,确认 SYSC_PGSEL 位为 0。该位用于选择 PG1/PG2 引脚的功能。如
果该位为 0,PG1/PG2 引脚选作副时钟振荡器引脚。
注意:参考硬件手册的第 23 章了关于 PGSEL 设置的更多信息。
更新 SYCC2_SOSCE 启用副时钟,更新 SYCC2_RCS 选择副时钟模式,更新 WATR 改变振
荡稳定等待时间,并检查 SYCC_SRDY 指示主时钟振荡是否稳定。
如果设置 WATR 为 0xF0,振荡稳定等待时间为(215-2)/FCL:大约 1.00s。
以下代码显示了如何操作副时钟,包括如何启用副时钟,切换至副时钟模式,更新振荡稳定等
待时间以及等待振荡稳定。
// enable the sub-clock oscillation
SYCC2_SOSCE = 1;
//Clock Mode Selection,select the sub-clock mode
SYCC2_RCS0 = 0x01;
SYCC2_RCS1 = 0x00;
//Update the Oscillation Stabilization Wait Time
// when sub Oscillation ClockFCL=32.768kHz
WATR = 0xF0;
//(215-2)/FCL About 1.00s
while (!SYCC_SRDY);
//Indicates sub-clock oscillation being stable
注意:上述代码截取自工程 Clock_Change,参见附录。
MCU-AN-500002-Z-12 - 第17页
基本固件设置 V1.2
第 5 章时钟模式选择
5.5
主CR时钟
主 CR 时钟是主内部 CR 时钟,有三个时钟频率:1 MHz,8 MHz,10 MHz。更新 NVR 可改
变主 CR 时钟。
更新 SYCC2_MCRE 可启用主 CR 时钟,更新 SYCC2_RCS 选择主 CR 时钟模式,并检查
STBC_MCRDY 指示主 CR 时钟振荡是否稳定。
以下代码显示了如何操作主 CR 时钟,包括如何改变主 CR 时钟频率,启用主 CR 时钟,切换
至主 CR 时钟模式,更新振荡稳定等待时间以及等待振荡稳定。
;change the main CR clock frequency
MOV
A ,
0x0FE4
AND
A ,
#0x9F
OR
A ,
#0x60
;READ CRTH for NVR trimming value protect
;Just CLEAR CRTH [6:5]
; Main CR clock update to 8MHz
;Can update the Main CR clock as below setting
;0x00: 1MHz;
MOV
0x40: 10MHz;
0x0FE4 , A
0x60: 8MHz
;WRITE CRTH to enable the update
注意:上述代码截取自工程 1 start.asm,参见附录。
// enable the main CR clock oscillation
SYCC2_MCRE = 1;
// Clock Mode Selection, select the main CR clock mode
SYCC2_RCS0 = 0x00;
SYCC2_RCS1 = 0x01;
//update the Oscillation Stabilization Wait Time
//FCRHS represents the main clock frequency
//28/FCRHS = Main CR oscillation Stabilization Wait Time
while(!STBC_MCRDY);//Indicates main CR clock oscillation being stable
注意:上述代码截取自工程 Clock_Change,参见附录。振荡稳定等待时间根据 CR 启动时序
而改变。
主 CR 振荡稳定等待时间= 28/FCRHS。FCRHS 指 CR 时钟频率。
MCU-AN-500002-Z-12- 第18页
基本固件设置 V1.2
第 5 章时钟模式选择
5.6
副CR时钟
副 CR 时钟是单内部时钟,典型频率为 100 kHz,最小频率为 50 kHz,最大频率为 200
kHz。
更新 SYCC2_SCRE 可启用副 CR 时钟,更新 SYCC2_RCS 选择副 CR 时钟模式,并检查
STBC_SCRDY 指示副 CR 时钟振荡是否稳定。
以下代码显示了如何操作副 CR 时钟,包括如何启用副 CR 时钟,切换至副 CR 时钟模式,更
新振荡稳定等待时间以及等待振荡稳定。
// enable the Sub-CR Clock oscillation
SYCC2_SCRE = 1;
// Clock Mode Selection, select the Sub-CR Clock mode
SYCC2_RCS = 0x00;
//update the Oscillation Stabilization Wait Time
//FCRHS represents the main clock frequency
//24/FCRL = Sub-CR oscillation Stabilization Wait Time
while (!STBC_SCRDY); //Indicates sub-CR clock oscillation being stable
注意:上述代码截取自工程 Clock_Change,参见附录。振荡稳定等待时间根据 CR 启动的时
序改变。主 CR 振荡稳定等待时间= 24/FCRL。FCRL 指副 CR 时钟频率。
5.7
时钟分频率
机械时钟由源时钟根据分频率产生。设置 SYCC_DIV 划分源时钟。如果 SYCC_DIV 设置为
1,源时钟将被除以 16。
以下代码显示了如何设置时钟分频率。
//source clock can be main clock divided by 2, sub-clock divided by 2
//sub-CR clock divided by 2 or main CR clock no div
SYCC_DIV = 0x00;
// Source clock (No division)
// SYCC_DIV = 0x01 mean Source clock/4
// SYCC_DIV = 0x02 mean Source clock/8
// SYCC_DIV = 0x03 mean Source clock/16
注意:上述代码截取自工程 Clock_Change,参见附录。
MCU-AN-500002-Z-12 - 第19页
基本固件设置 V1.2
第 6 章待机模式选择
6 待机模式选择
待机模式一共有四种:休眠模式,时基定时器模式,计时模式和停止模式。时钟控制器根据每
种待机模式选择是否启用或禁用时钟振荡以及输入时钟至内部电路。
除时基定时器模式和计时模式外,待机模式可独立于时钟模式设置。
6.1
主要特性
¾ 低功耗模式(待机模式)
停止模式
休眠模式
计时模式
时基定时器模式
¾ 初始模式
正常操作情况
6.2
待机模式和时钟输入状态
待机模式
表6-1:待机模式和时钟输入状态
时钟提供状态
休眠模式
停止向CPU提供时钟,CPU停止操作,但其他外围资源继续操作。
时基定时
器模式
仅向时基定时器和计时预分频器提供时钟信号,停止向其他电路提供时钟。除时基定时器,计时预分
频器,外部中断,和低电压检测重置(可选)外的所有功能将停止。
时基定时器模式是主时钟模式或主CR时钟模式唯一的待机模式。
计时模式
停止主时钟振荡,仅向计时预分频器提供时钟信号,停止向其他电路提供时钟。除计时预分频器,外
部中断,和低电压检测重置(可选)外的所有功能将停止。
计时模式是副时钟模式或副CR时钟模式唯一的待机模式。
停止模式
停止主时钟振荡,副时钟振荡,并停止所有时钟信号的输入。除外部中断和低电压检测重置(可选)
外的所有功能将停止。
6.3
时钟模式和待机模式的组合
图 6-1 列出了时钟模式和待机模式的组合,以及他们各自内部电路的操作状态。
参见 MCU MB95200H/210H 系列硬件手册的第六章了解更多信息。
MCU-AN-500002-Z-12- 第20页
基本固件设置 V1.2
第 6 章待机模式选择
图6‐1:待机模式和时钟模式的组合以及内部操作状态
注意:在切换至时钟模式后设置待机模式。
MCU-AN-500002-Z-12 - 第21页
基本固件设置 V1.2
第 6 章待机模式选择
6.4
休眠模式
6.4.1 介绍
休眠模式停止 CPU 以及软件看门狗定时器的操作。
6.4.2 休眠模式下的操作
休眠模式停止 CPU 以及软件看门狗定时器的操作时钟。在该模式下,CPU 停止工作,同时保
留寄存器以及在切换至休眠模式前 RAM 中的内容,但是除看门狗定时器外,其他外围资源继
续操作。
6.4.3 切换与退出
烧写“1”至待机控制寄存器(STBC: SLP)的休眠位使设备进入休眠模式。
以下代码是从运行模式到休眠模式的 STBC 设置。
STBC_SLP = 1;
// Causes transition to sleep mode
注意:上述代码截取自工程 Mode_Change,参见附录。
重置或来自外围资源的中断将从休眠模式中释放设备。
6.5
停止模式
6.5.1 介绍
停止模式停止主时钟。
6.5.2 停止模式下的操作
停止模式停止主时钟,主CR时钟和副时钟。在该模式下,设备停止除外部中断和低电压间检
测重置外的所有的功能,同时保留寄存器以及在切换至停止模式前RAM中的内容。
6.5.3 切换和退出
烧写“1”至待机控制寄存器(STBC: STP)的停止位使设备进入停止模式。此时,如果待机
控制寄存器(STBC: SPL)的引脚状态设置位为“0”,保持外部引脚状态。如果该位为
“1”,外部引脚的状态变为高阻抗。
以下代码显示了如何切换至停止模式。
STBC_STP = 1;
//Causes transition to stop mode
注意:上述代码截取自工程 Mode_Change,参见附录。
MCU-AN-500002-Z-12- 第22页
基本固件设置 V1.2
第 6 章待机模式选择
重置或外部中断将从停止模式中释放设备。从停止模式中恢复后,如果有必要,初始化每个外
围资源。
6.6
时基定时器模式
6.6.1 介绍
时基定时器模式只允许主时钟振荡,副时钟振荡,时基定时器以及计时预分频器工作。CPU
和外围资源的操作时钟在该模式下停止。
6.6.2 时基定时器模式下的操作
在时基定时器模式下,除时基定时器外,主时钟供给停止。设备停止除时基定时器,外部中断
和低电压检测重置外的所有功能,同时保留寄存器以及在切换至时基定时器模式前 RAM 中的
内容。
6.6.3 切换和退出
切换至时基定时器模式:SYCC2_RCS 设置为 0x02 或 0x03,烧写“1”至待机控制寄存器
(STBC: TMD)的计时位。
以下代码显示了如何切换至时基定时器模式。
SYCC2_RCS0 = 0x00;
SYCC2_RCS1 = 0x01;
STBC_TMD = 1;
timer mode
// Causes the device to enter timebase
注意:上述代码截取自工程 Mode_Change,参见附录。
退出时基定时器模式:重置,时基定时器中断或外部中断将从时基定时器模式中释放设备。从
时基定时器模式中恢复后,如果有必要,初始化每个外围资源。
MCU-AN-500002-Z-12 - 第23页
基本固件设置 V1.2
第 6 章待机模式选择
6.7
计时模式
6.7.1 介绍
计时模式只允许副时钟,副CR时钟和计时预分频器工作。CPU和外围资源的操作时钟在该模
式下停止。
6.7.2 计时模式下的操作
在计时模式下,CPU和外围资源的的操作时钟停止工作。设备停止除计时预分频器外的所有
功能。低电压检测重置,同时保留寄存器以及在切换至计时模式前RAM中的内容。
6.7.3 切换和退出
切换至计时模式:设置 SYCC2_RCS 为 0x00 或 0x01,并烧写“1”至待机控制寄存器
(STBC: TMD)的计时位。
只有在时钟模式为副时钟模式或副 CR 时钟模式时,设备才能进入计时模式。
SYCC2_RCS0 = Ox00;
SYCC2_RCS1 = 0x00;
STBC_TMD = 1;
// Causes the device to enter watch mode
注意:上述代码截取自工程 Mode_Change,参见附录。
退出计时模式:重置,计时中断或外部中断将从计时模式中释放设备。从计时模式中恢复后,
如果有必要,初始化每个外围资源。
MCU-AN-500002-Z-12- 第24页
基本固件设置 V1.2
第 6 章待机模式选择
6.8
待机模式切换代码
以下代码可实现待机模式间的切换,如停止模式,计时模式等,可更新至任何想要的模式。
//The following code can realize the transition of the standby mode from //one
to another mode, such as a stop mode, a watch mode
//The following software is for demonstration purpose only
#define switchmode
normal //set transition to some standby modes
// Can define the switchmode to Stop, Sleep, Watch or Timebase
voidmain (void)
{
MCU_initialization();
while(1)
{
// choice standby mode what you want transition to
switch (switchmode)
{
case normal: break;
case stop:
STBC_STP = 1;
break;
case sleep:
//normal to stop mode
STBC_SLP = 1;
break;
case watch:
//normal to sleep mode
SYCC2_SOSCE = 1;
//Enable Sub Clock
SYCC2_RCS0 = 0x01;
//Select Sub Clock
SYCC2_RCS1 = 0x00;
//Select Sub Clock
WATR = 0xF0;
//About 1.00s Wait Time
while (!SYCC_SRDY); //Wait Clock stable
STBC_TMD = 1;
break;
case Timebase:
//normal to watch mode
SYCC2_MOSCE = 1;
//Enable Main Clock
SYCC2_RCS0 = 0x01;
//Select Main Clock
SYCC2_RCS1 = 0x01;
WATR = 0X0F;
// About 4.10ms Wait Time
while (!STBC_MRDY); //Wait Clock stable
STBC_TMD = 1;
break;
default:
//normal to timebase time mode
break;
}
vDelay(2000);
//delay the time
led_display();
//lighten three LED
}
}
注意:上述代码截取自工程 Mode_Change,参见附录。
MCU-AN-500002-Z-12 - 第25页
基本固件设置 V1.2
第 7 章更多信息
7 更多信息
关于富士通半导体更多的产品信息,请访问以下网站:
英文版本地址:
http://www.fujitsu.com/cn/fsp/services/mcu/mb95/application_notes.html
中文版本地址:
http://www.fujitsu.com/cn/fss/services/mcu/mb95/application_notes.html
MCU-AN-500002-Z-12- 第26页
基本固件设置 V1.2
第 8 章附录
8 附录
8.1
图表索引
表 6-1:待机模式和时钟输入状态 .......................................................................................... 20
图 4-1:时钟控制器结构图 ..................................................................................................... 12
图 4-2:系统时钟控制寄存器的配置(SYCC) ..................................................................... 13
图 4-3:振荡稳定等待时间设置寄存器(WATR)的配置 ...................................................... 13
图 4-4:待机控制寄存器(STBC) ........................................................................................ 13
图 4-5:系统时钟控制寄存器 2 的配置(SYCC2) ................................................................ 13
图 6-1:待机模式和时钟模式的组合以及内部操作状态 .......................................................... 21
MCU-AN-500002-Z-12 - 第27页
基本固件设置 V1.2
第 8 章附录
8.2
代码范例
8.2.1 工程 1: Basic_Initialization
NAME:
Start.asm
FUNCTION:
Initialization MCU
;==========================================================================
; F2MC-8FX Family SOFTUNE C Compiler sample startup routine,
; ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 2008
; LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
;==========================================================================
; Sample code for initialization
;-------------------------------------------------------------------------.PROGRAM
start
.TITLE
start
;-------------------------------------------------------------------------; variable define declaration
; #define HWD_DISABLE
; if define this, Hard Watchdog will disable.
; external declaration of symbols
;-------------------------------------------------------------------------.EXPORT __start
.IMPORT
_main
.IMPORT
LMEMTOMEM
.IMPORT
LMEMCLEAR
.IMPORT
_RAM_INIT
.IMPORT
_ROM_INIT
.IMPORT
_RAM_DIRINIT
.IMPORT
_ROM_DIRINIT
;-------------------------------------------------------------------------; definition to stack area
;------------------------------------------------------------------------- .SECTION
STACK,
.RES.B
128-2
STACK,
ALIGN=1
STACK_TOP:
.RES.B
2
;-------------------------------------------------------------------------; definition to start address of data, const and code section
;-------------------------------------------------------------------------.SECTION DIRDATA,
DIR,
ALIGN=1
.SECTION DIRINIT,
DIR,
ALIGN=1
.SECTION DATA, DATA, ALIGN=1
MCU-AN-500002-Z-12- 第28页
基本固件设置 V1.2
第 8 章附录
.SECTION INIT, DATA, ALIGN=1
;-------------------------------------------------------------------------; The Mode Byte is defined at the beginning of the start.asm
;------------------------------------------------------------------------- .SECTION
RESVECT,
.DATA.B
0
.DATA.W
__start
CONST,
LOCATE=H'FFFD
;-------------------------------------------------------------------------//code area
;------------------------------------------------------------------------- .SECTION
CODE, CODE, ALIGN=1
__start:
;-------------------------------------------------------------------------; set stack pointer
;-------------------------------------------------------------------------MOVW
A,
MOVW
SP,
#STACK_TOP
A
;-------------------------------------------------------------------------; Set Register bank Pointer 0
;------------------------------------------------------------------------- MOVW
A,
PS
MOVW
A,
#0x07FF ANDW
A
MOVW
PS,
// RP=0, DP=0, I=0 A
;-------------------------------------------------------------------------; Set ILM to the lowest level (3)
;------------------------------------------------------------------------- MOVW
A,
PS
MOVW
A,
#0x0030
ORW
A
MOVW
PS,
A
;change the main CR clock frequency
protect MOV A , 0x0FE4 ;READ CRTH for NVR trimming value
AND A , #0x9F ;Just CLEAR CRTH [6:5] OR A , #0x60 ; Main CR clock update to 8MHz ;Can update the Main CR clock as below setting
;0x00: 1MHz;
0x40: 10MHz;
MOV 0x0FE4 , A 0x60: 8MHz
;WRITE CRTH to enable the update
;-------------------------------------------------------------------------; copy initial value *CONST (ROM) section to *INIT(RAM) section
;-------------------------------------------------------------------------#macro
ICOPY src_addr,
dest_addr,
src_section
MCU-AN-500002-Z-12 - 第29页
基本固件设置 V1.2
第 8 章附录
MOVW
EP,
#\src_addr
MOVW
A,
#\dest_addr
MOVW
A,
#SIZEOF(\src_section)
CALL
LMEMTOMEM
#endm
ICOPY
_ROM_INIT,
_RAM_INIT,
ICOPY _ROM_DIRINIT,
INIT
_RAM_DIRINIT,
DIRINIT
;-------------------------------------------------------------------------; zero clear of *VAR section
;-------------------------------------------------------------------------#macro
FILL0 src_section
MOVW
A,
#\src_section
MOVW
A,
#SIZEOF (\src_section)
CALL
LMEMCLEAR
#endm
FILL0 DIRDATA
FILL0 DATA
;-------------------------------------------------------------------------; call main routine
;------------------------------------------------------------------------- CALL
_main
End:
JMP
end
;-------------------------------------------------------------------------; Hard Watchdog
;-------------------------------------------------------------------------#ifdef
HWD_DISABLE
.SECTION WDT,
CONST,
LOCATE=H'FFBE
.DATA.W 0xA596
#endif
;-------------------------------------------------------------------------; reset vector
;-------------------------------------------------------------------------.SECTION RESET,
CONST,
.DATA.B
0xFF
.DATA.B
0
.DATA.H
__start
.END
LOCATE=0xFFFC
__start
MCU-AN-500002-Z-12- 第30页
基本固件设置 V1.2
第 8 章附录
NAME:
vector.c
FUNCTION:
Interrupt level (priority) setting and Interrupt vector definition
;*************************************************************************
; ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 2008
; LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
/*************************************************************************
NAME: vector.c
FUNCTION:
Interrupt level (priority) setting
Interrupt vector definition
*************************************************************************/
#include"mb95200.h"
;----------------------------------------------------------------------//This function pre-sets all interrupt control registers. It can be used
//to set all interrupt priorities in static applications. If this file
// contains assignments to dedicated resources, verify that the appropriate
//controller is used.
//----------------------------------------------------------------------voidInitIrqLevels (void)
{ ILR0 = 0xFC;
// IRQ0:
external interrupt ch.4
--> Level
// IRQ1:
external interrupt ch.5
--> 01
// IRQ2:
external interrupt ch.2/ch.6
--> 01
00
// IRQ3:
external interrupt ch.3/ ch.7--> 01
ILR1 = 0xFF;
// IRQ4:
// IRQ5:
8/16-bit timer ch.0 (lower)
// IRQ6:
8/16-bit timer ch.0 (upper)
// IRQ7:
ILR2 = 0xFF;
UART/SIO ch.0
LIN-UART (reception)
// IRQ8:
LIN-UART (transmission)
// IRQ9:
8/16-bit PPG ch.1 (lower) / UART/SIO ch.1
// IRQ10: 8/16-bit PPG ch.1 (upper) / I2C ch.1
// IRQ11: 16-bit reload timer ch.0
ILR3 = 0xFF;
// IRQ12: 8/16-bit PPG ch.0 (upper)
// IRQ13: 8/16-bit PPG ch.0 (lower)
// IRQ14: 8/16-bit timer ch1 (upper)
// IRQ15: 16-bit PPG ch.0 + ch.2
ILR4 = 0xFF;
// IRQ16: 16-bit reload timer ch.1 / I2C ch.0
// IRQ17: 16-bit PPG ch.1
// IRQ18: 10-biat A/D-converter
// IRQ19: Timebase timer
ILR5 = 0xFF;
// IRQ20: Watch timer / counter
// IRQ21: external interrupt ch 8-11
MCU-AN-500002-Z-12 - 第31页
基本固件设置 V1.2
第 8 章附录
// IRQ22: 8/16-bit timer ch1 (lower) / external
//interrupt ch.12-15
// IRQ23: Flash | Custom ch.1
}
//----------------------------------------------------------------------//
Prototypes
// Add your own prototypes here. Each vector definition needed is a
//prototype. Either do it here or include a header file containing them.
//----------------------------------------------------------------------//extern unsigned int delay_timer;
__interrupt void DefaultIRQHandler (void);
__interrupt void Key_int (void);
//----------------------------------------------------------------------//Vector definition
//Use the following statements to define vectors.
//All resources related to the vectors are predefined.
//Remaining software interrupts can be added here as well.
//----------------------------------------------------------------------#pragma intvect Key_int 0
//IRQ0: external interrupt ch.4
#pragma intvect DefaultIRQHandler 1 //IRQ1: external interrupt ch.5
#pragma intvect DefaultIRQHandler 2 //IRQ2: external interrupt ch.2|ch.6
#pragma intvect DefaultIRQHandler 3 //IRQ3: external interrupt ch.3|ch.7
#pragma intvect DefaultIRQHandler 5 //IRQ5: 8/16-bit timer ch.0 (lower)
#pragma intvect DefaultIRQHandler 6 //IRQ6: 8/16-bit timer ch.0 (upper)
#pragma intvect DefaultIRQHandler 7 //IRQ7: LIN-UART (reception)
#pragma intvect DefaultIRQHandler 8 //IRQ8: LIN-UART (transmission)
#pragma intvect DefaultIRQHandler 14
(upper)
//IRQ14: 8/16-bit timer ch1
#pragma intvect DefaultIRQHandler 18
//IRQ18: 10-biat A/D-converter
#pragma intvect DefaultIRQHandler 19
//IRQ19: Timebase timer
#pragma intvect DefaultIRQHandler 20
//IRQ20:Watchtimer/ counter
#pragma intvect DefaultIRQHandler 22
//IRQ22: 8/16-bit timer ch.1
//(lower)/interrupt ch.12-15
#pragma intvect DefaultIRQHandler 23
//IRQ23: Flash / Custom ch.1
__interrupt void DefaultIRQHandler (void)
{
__DI ();
// disable interrupts
While (1)
__wait_nop ();
// halt the system
}
MCU-AN-500002-Z-12- 第32页
基本固件设置 V1.2
第 8 章附录
NAME: Main.c
Function:
external transition interrupt as key input
/* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS.*/
/*FUJITSU SEMICONDUCTOR ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY*/
/*ERRORS OR ELIGIBILITY FOR ANY PURPOSES.
*/
/*
(C) Fujitsu Semiconductor (Shanghai) Co., LTD.
/* Date: 20080320
Version: 1V0
*/
Author: Lori
*/
/* -------------------------------------------------------------------- -/*************************************************************************
NAME:
MAIN.C
FUNCTION:
The following code can realize initialization the MCU
The following software is for demonstration purpose only
*************************************************************************/
#include"mb95200.h"
#define switchmode stop
//set transition to some standby modes
void vSysInit (void)
{
//elide code
InitIrqLevels ();
__EI ();
}
__interrupt void Key_int (void)
{
//elide key functions
}
//include vSysInit(),__interrupt and other functions
voidmain (void)
{
vSysInit ();
while (1)
{
//enter other test codes
}
}
MCU-AN-500002-Z-12 - 第33页
基本固件设置 V1.2
第 8 章附录
8.2.2 工程 2: Clock_Change
NAME: Main.c
Function:
choose the clock, clock mode, clock divide ratio
/* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS.*/
/*FUJITSU SEMICONDUCTOR ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY*/
/*ERRORS OR ELIGIBILITY FOR ANY PURPOSES.
*/
/*
(C) Fujitsu Semiconductor (Shanghai) Co., LTD.
/* Date: 20080320
Version: 1V0
*/
Author: Lori
*/
/* -------------------------------------------------------------------- -/*************************************************************************
//The following code can realize choose the clock and clock mode
//The following software is for demonstration purposes only
/**************************************************************************
NAME:
MAIN.C
FUNCTION:
Change the system clock and lighten three LED
LED flicker frequency different in different clock
**************************************************************************/
#include"mb95200.h"
#define MAIN
0x00
#define SUB
0x01
#define MAIN_CR
0x02
#define SUB_CR
0x03
unsigned char switchclock = MAIN; //select the start clock
unsigned char toggle_status = 0; //LED change bit
unsigned char i;
/*************************************************************************
NAME:
MCU initialization
FUNCTION:
Initialization the IO port, system clock, interrupt level
*************************************************************************/
void MCU_initialization()
{
__DI();
SYSC = 0x03;
/*IO port*/
PDR0_P05=1;
DDR0_P05=1;
//Enable output
PDR6_P63=1;
PDR6_P64=1;
DDR6_P63=1;
//Enable output
DDR6_P64=1;
//Enable output
MCU-AN-500002-Z-12- 第34页
基本固件设置 V1.2
第 8 章附录
/*external interrupt*/
EIC30=0x55;
//INT06 INT07 enable falling edge
//source clock can be main clock divided by 2, sub-clock divided by 2
//sub-CR clock divided by 2 or main CR clock no div
SYCC_DIV = 0x00;
// Source clock (No division)
// SYCC_DIV = 0x01 mean Source
clock/4
// SYCC_DIV = 0x02 mean Source
clock/8
// SYCC_DIV = 0x03 mean Source
clock/16
/* initialise Interrupt level register and IRQ vector table*/
InitIrqLevels();
__EI();
}
/*************************************************************************
NAME:
led_display()
FUNCTION:
Set three LED light cycle one by one
*************************************************************************/
void led_display()
{
switch(toggle_status)
{
case 0: //lighten the PDR0_P05 (LED2)
{
PDR0_P05=0;
PDR6_P64=1;
PDR6_P63=1;
toggle_status=1;
break;}
case 1: //lighten the PDR6_P64 (LED3)
//lighten the PDR6_P63 (LED4)
{
PDR0_P05=1;
PDR6_P64=0;
PDR6_P63=1;
toggle_status=2;
break;}
case 2: {
PDR0_P05=1;
PDR6_P64=1;
PDR6_P63=0;
MCU-AN-500002-Z-12 - 第35页
基本固件设置 V1.2
第 8 章附录
toggle_status=0;
break;}
}
}
MCU-AN-500002-Z-12- 第36页
基本固件设置 V1.2
第 8 章附录
/*************************************************************************
NAME:
vDelay
FUNCTION:
Delay the fix time
*************************************************************************/
void vDelay (unsigned int uiCount)
{
while(uiCount--)
{
asm ("\tNOP");
}
}
/*************************************************************************
NAME:
__interrupt void external_int06(void)
FUNCTION:
Change the clock
*************************************************************************/
__interrupt void external_int06 (void)
{
EIC30_EIR0=0;
switch (++switchclock)
{
case MAIN:
// enable the Main clock oscillation
SYCC2_MOSCE = 1;
// Clock Mode Selection, select the main clock mode
SYCC2_RCS0 = 0x01;
SYCC2_RCS1 = 0x01;
//update Oscillation Stabilization Wait Time
//when Main Oscillation Clock FCH=4MHz
WATR = 0X0F;
// Oscillation Stabilization Wait Time mean
// (214-2)/FCH About 4.10 ms
while (!STBC_MRDY);
break;
case SUB:
// enable the sub-clock oscillation
SYCC2_SOSCE = 1;
// Clock Mode Selection, select the sub-clock mode
SYCC2_RCS0 = 0x01;
SYCC2_RCS1 = 0x00;
//Update the Oscillation Stabilization Wait Time
// when sub Oscillation Clock FCL=32.768 kHz
WATR = 0xF0;
//(215-2)/FCL About 1.00s
MCU-AN-500002-Z-12 - 第37页
基本固件设置 V1.2
第 8 章附录
//Indicates sub-clock oscillation being stable
while (!SYCC_SRDY);
break;
case MAIN_CR:
// enable the main CR clock oscillation
SYCC2_MCRE = 1;
// Clock Mode Selection, select the main CR clock mode
SYCC2_RCS0 = 0x00;
SYCC2_RCS1 = 0x01;
//update the Oscillation Stabilization Wait Time
//FCRHS represents the main clock frequency
//28/FCRHS = Main CR oscillation Stabilization Wait Time
//Indicates main CR clock oscillation being stable
while (!STBC_MCRDY);
break;
case SUB_CR:
// enable the Sub-CR Clock oscillation
SYCC2_SCRE = 1;
// Clock Mode Selection, select the Sub-CR Clock
mode
SYCC2_RCS = 0x00;
//update the Oscillation Stabilization Wait Time
//FCRHS represents the main clock frequency
//24/FCRL = Sub-CR oscillation Stabilization Wait
Time
//Indicates sub-CR clock oscillation being stable
while (!STBC_SCRDY);
break;
default:
switchclock = MAIN;
SYCC2=0x34;
//update Oscillation Stabilization Wait Time
WATR = 0X03;
//Indicates main-clock oscillation being stable
while (!STBC_MRDY);
break;
}
}
/*************************************************************************
NAME:
main ()
FUNCTION:
lighten three LED
*************************************************************************/
void main()
MCU-AN-500002-Z-12- 第38页
基本固件设置 V1.2
第 8 章附录
{
MCU_initialization();
while(1)
{
vDelay(10); //delay the time
led_display();
//lighten three LED
}
}
MCU-AN-500002-Z-12 - 第39页
基本固件设置 V1.2
第 8 章附录
NAME:
vector.c
FUNCTION:
Interrupt level setting and interrupt vector definition
//========================================================================
//ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 2008
// LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
/**************************************************************************
NAME: vector.c
FUNCTION:
Interrupt level (priority) setting
Interrupt vector definition
**************************************************************************/
#include"mb95200.h"
//-----------------------------------------------------------------------//This function pre-sets all interrupt control registers. It can be used
//to set all interrupt priorities in static applications. If this file
//contains assignments to dedicated resources, verify that the appropriate
//controller is used.
//-----------------------------------------------------------------------voidInitIrqLevels (void)
{
ILR0 = 0x1F;
// IRQ3:
// IRQ0:
external interrupt ch.4
// IRQ1:
external interrupt ch.5
// IRQ2:
external interrupt ch.2/ch.6
external interrupt ch.3/ch.7
//... ...
}
//-----------------------------------------------------------------------//
Prototypes
//Add your own prototypes here. Each vector definition needed is a
//prototype. Either do it here or include a header file containing them.
//-----------------------------------------------------------------------__interrupt void DefaultIRQHandler (void);
__interrupt void external_int06 (void);
//-----------------------------------------------------------------------//Vector definition
//Use the following statements to define vectors.
//All resources related to the vectors are predefined.
//Remaining software interrupts can be added here as well.
//-----------------------------------------------------------------------#pragma intvect DefaultIRQHandler 0 //IRQ0: external interrupt ch.4
#pragma intvect DefaultIRQHandler 1 //IRQ1: external interrupt ch.5
#pragma intvect external_int06 2
ch.2|ch.6
//IRQ2: external interrupt
//... ...
MCU-AN-500002-Z-12- 第40页
基本固件设置 V1.2
第 8 章附录
__interrupt void DefaultIRQHandler (void)
{
__DI ();
// disable interrupts
while (1)
__wait_nop ();
// halt the system
}
MCU-AN-500002-Z-12 - 第41页
基本固件设置 V1.2
第 8 章附录
8.2.3 工程 3: Mode_Change
NAME: Main.c
Function:
standby mode change
/* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS.*/
/*FUJITSU SEMICONDUCTOR ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY*/
/*ERRORS OR ELIGIBILITY FOR ANY PURPOSES.
*/
/*
(C) Fujitsu Semiconductor (Shanghai) Co., LTD.
/* Date: 20080320
Version: 1V0
*/
Author: Lori
*/
/* -------------------------------------------------------------------- -/*************************************************************************
//The following code can realization transition from normal mode to other
//mode, such as stop mode, watch mode
//The following software is for demonstration purposes only
//You can update the switchmode to the mode what you want
/**************************************************************************
NAME:
MAIN.C
FUNCTION:
Change the mode and lighten three LED to one fix light
Change the mode and LED light fixed
**************************************************************************/
#include"mb95200.h"
#define normal
0x00
#define stop
0x01
#define sleep
0x02
#define Timebase
0x03
#define watch
0x04
unsigned char switchmode = normal;
unsigned char toggle_status = 0;
//Select the start mode
//LED change bit
unsigned char i;
/*************************************************************************
NAME:
MCU initialization
FUNCTION:
Initialization the IO port, system clock, interrupt level
*************************************************************************/
void MCU_initialization()
{
__DI();
/*system clock*/
SYSC = 0x03;
SYCC2 = 0x34;
MCU-AN-500002-Z-12- 第42页
基本固件设置 V1.2
第 8 章附录
/*IO port*/
PDR0_P05=1;
DDR0_P05=1;
//Enable output
PDR6_P63=1;
PDR6_P64=1;
DDR6_P63=1;
//Enable output
DDR6_P64=1;
//Enable output
/*external interrupt*/
EIC30=0x55;
//INT06 enable falling edge
/*initialise Interrupt level register and IRQ vector table*/
InitIrqLevels();
__EI();
}
/*************************************************************************
NAME:
led_display()
FUNCTION:
Set three LED light cycle one by one
*************************************************************************/
void led_display()
{
switch(toggle_status)
{
case 0: //Lighten the PDR0_P05
(LED2)
{
PDR0_P05=0;
PDR6_P64=1;
PDR6_P63=1;
toggle_status=1;
break;
}
case 1:
//Lighten the PDR6_P64
(LED3)
{
PDR0_P05=1;
PDR6_P64=0;
PDR6_P63=1;
toggle_status=2;
break;
}
case 2: //Lighten the PDR6_P63
(LED4)
MCU-AN-500002-Z-12 - 第43页
基本固件设置 V1.2
第 8 章附录
{
PDR0_P05=1;
PDR6_P64=1;
PDR6_P63=0;
toggle_status=0;
break;
}
}
}
/*************************************************************************
NAME:
vDelay
FUNCTION:
Delay the fix time
*************************************************************************/
void vDelay (unsigned int uiCount)
{
while(uiCount--)
{
asm ("\tNOP");
}
}
/*************************************************************************
NAME:
__interrupt void external_int06(void)
FUNCTION:
Change the mode
*************************************************************************/
__interrupt void external_int06(void)
{
EIC30_EIR0=0;
if(switchmode <= 3)
switchmode++;
if(switchmode >= 4)
switchmode = 1;
}
/*************************************************************************
NAME:
FUNCTION:
__interrupt void external_int07(void)
Reset the mode to normal
*************************************************************************/
__interrupt void external_int07(void)
{
MCU-AN-500002-Z-12- 第44页
基本固件设置 V1.2
第 8 章附录
EIC30_EIR1 = 0;
switchmode = normal;
}
MCU-AN-500002-Z-12 - 第45页
基本固件设置 V1.2
第 8 章附录
/*************************************************************************
NAME:
main ()
FUNCTION:
Lighten three LED, when change the mode,
only one LED light
*************************************************************************/
void main()
{
MCU_initialization();
while(1)
{
switch (switchmode)
{
case normal:
case stop:
break;
STBC_STP = 1;//Causes transition to stop mode
break;
//Normal to stop mode
case sleep: STBC_SLP = 1;//Causestransition to sleepmode
break;
//Normal to sleep mode
case watch: SYCC2_SOSCE = 1;
//Enable Sub Clock
SYCC2_RCS0 = 0x01;
//Select Sub Clock
SYCC2_RCS1 = 0x00;
WATR = 0xF0;
//About 1.00s Wait Time
while (!SYCC_SRDY);
//Wait Clock
stable
STBC_TMD = 1;
//Causes the device to enter watch mode
break;
//normal to watch
mode
case Timebase:SYCC2_MOSCE = 1;
//Enable Main Clock
SYCC2_RCS0 = 0x01;
//Select Main
Clock
SYCC2_RCS1 = 0x01;
WATR = 0X0F;
// About 4.10 ms Wait Time
while (!STBC_MRDY);
//Wait Clock
stable
STBC_TMD = 1;
//Causes the device to enter timebase timer
mode
break;
//normal to timebase time mode
default:
break;
}
vDelay(2000);
//delay the time
led_display();
//lighten three LED
MCU-AN-500002-Z-12- 第46页
基本固件设置 V1.2
第 8 章附录
}
}
MCU-AN-500002-Z-12 - 第47页
基本固件设置 V1.2
第 8 章附录
NAME:
vector.c
FUNCTION:
Interrupt level setting and interrupt vector definition
//========================================================================
//ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 2008
// LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
/**************************************************************************
NAME: vector.c
FUNCTION:
Interrupt level (priority) setting
Interrupt vector definition
**************************************************************************/
#include"mb95200.h"
//-----------------------------------------------------------------//This function pre-sets all interrupt control registers. It can be used
//to set all interrupt priorities in static applications. If this file
//contains assignments to dedicated resources, verify that the appropriate
//controller is used.
//-----------------------------------------------------------------voidInitIrqLevels (void)
{
ILR0 = 0x1F;
// IRQ3:
// IRQ0:
external interrupt ch.4
// IRQ1:
external interrupt ch.5
// IRQ2:
external interrupt ch.2/ch.6
external interrupt ch.3/ch.7
//... ...
}
//-----------------------------------------------------------------//Prototypes
//Add your own prototypes here. Each vector definition needed is a
//prototype. Either do it here or include a header file containing them.
//-----------------------------------------------------------------__interrupt void DefaultIRQHandler (void);
__interrupt void external_int06 (void);
__interrupt void external_int07 (void);
//-----------------------------------------------------------------//Vector definition
//Use the following statements to define vectors.
//All resources related to the vectors are predefined.
//Remaining software interrupts can be added here as well.
//-----------------------------------------------------------------#pragma intvect DefaultIRQHandler 0 //IRQ0: external interrupt ch.4
#pragma intvect DefaultIRQHandler 1 //IRQ1: external interrupt ch.5
MCU-AN-500002-Z-12- 第48页
基本固件设置 V1.2
第 8 章附录
#pragma intvect external_int06 2
ch.2/ch.6
//IRQ2: external interrupt
#pragma intvect external_int07 3
ch.3/ch.7
//IRQ3: external interrupt
//... ...
__interrupt void DefaultIRQHandler (void)
{
__DI ();
// disable interrupts
while (1)
__wait_nop ();
// halt the system
}
‐‐ END ‐‐ MCU-AN-500002-Z-12 - 第49页