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页