富士通微电子 ( 上海 ) 有限公司应用笔记 MCU-AN-500009-Z-10 F²MC-8FX 家族 8 位微控制器 MB95200H/210H 系列 DBG 引脚的使用方法 应用笔记
变更履历 变更履历 日期作者修改记录 2008-03-18 Raven Peng V1.0, 第 1 版 本文档由 12 页构成 1. 本文档记载的产品信息及规格说明如有变动, 恕不预先通知 如需最新产品信息和 / 或规格说明, 联系富士通销售代表或富士通授权经销商 2. 基于本文档记载信息或示意图的使用引起的对著作权 工业产权或第三方的其他权利的侵害, 富士通不承担任何责任 3. 未经富士通明文批准, 不得对本文档的记载内容进行转让 拷贝 4. 本文档所介绍的产品并不旨在以下用途 : 需要极高可靠性的设备, 诸如航空航天装置 海底中继器 核控制系统或维系生命的医用设施 5. 本文档介绍的部分产品可能是 外汇及外贸管理法 规定的战略物资 ( 或专门技术 ), 出口该产品或其中部分元件前, 应根据该法获得正式批准 2008 富士通微电子 ( 上海 ) 有限公司版权所有 MCU-AN-500009-Z-10 Page 2
目录 目录 变更履历目录 1 概要 2 DBG 引脚的功能 变更履历... 2 目录... 3 概要... 4 引脚的功能... 5 2.1 DBG 引脚硬件连接 ( 调试模式 )... 5 2.2 调试模式下的性能... 5 2.3 自由运行模式下的性能... 5 引脚的使用方法... 6 3 DBG 引脚的使用方法 3.1 用作单线 UART 引脚 /P12 引脚... 6 3.2 用作 EC0 引脚... 6 引脚使用时的注意事项... 7 4 DBG 引脚使用时的注意事项 示例代码... 8 MCU-AN-500009-Z-10 Page 3
1 概要 1 概要 本应用笔记介绍 DBG 引脚的使用方法 调试模式下,DBG 引脚可用作单线 UART 通信端口 ; 自由运行模式下,DBG 引脚可用作 P12/EC0 MCU-AN-500009-Z-10 Page 4
2 DBG 引脚的功能 2 DBG 引脚的功能 本章介绍各个模式下 DBG 引脚的功能 2.1 DBG 引脚硬件连接 ( 调试模式 ) 2.2 调试模式下的性能 图 2-1 DBG 引脚硬件连接 ( 调试模式 ) 目标 MCU 进入调试模式时,DBG 引脚用作单线 UART 引脚 为保证和 BGM 适配器实时通信, 禁止该引脚的其他功能 禁止 P12 的功能 用户模式下,P12 的任何操作均无效 EC0 功能也被禁止, 但另一引脚可用作 EC0 引脚 向 SYSC [EC0SL] 写 1 可使 P04/EC0 引脚用作外部计数器时钟输入 切勿同时将 P04 设为 EC0 输入和 HCLK1 输入 2.3 自由运行模式下的性能 目标 MCU 进入自由运行模式时, 禁止单线 UART 功能 用户代码中支持 P12/EC0 功能, 但 DBG 引脚不能设为单线 UART 引脚 MCU-AN-500009-Z-10 Page 5
3 DBG 引脚的使用方法 3 DBG 引脚的使用方法 本章介绍各个模式下 DBG 引脚设定示例 3.1 用作单线 UART 引脚 /P12 引脚 调试模式下 DBG 引脚自动用作单线 UART 引脚 UART 处于空闲状态时,DBG 引脚保持高电平 自由运行模式下 DBG 引脚默认用作 P12 引脚 若写入以下用户代码, DDR1_D12 = 1; // set P12 as output pin PDR1_P12 = 0; // pull P12 to low. 调试模式下运行以上代码后,DBG 引脚仍保持高电平 但自由运行模式下运行这些代码后, DBG 引脚设为低电平 3.2 用作 EC0 引脚 调试模式下 DBG 引脚不能用作 EC0 引脚 为使能 8/16 位多功能定时器的外部时钟输入, 调试模式下 P04 引脚可设为 EC0 引脚 SYSC = 0xEB; // set P04 as EC0 pin, disable HCLK1 T00CR0 = 0x71; // interval timer, external clock source. TMCR0 = 0x43; // 8bit mode, output T00. T00DR = 0x08; // set counter. T00CR1 = 0x81; // enable output, start T00. 以上代码将 P04 设为 EC0 引脚并在连续间隔定时器模式下设定 T00 输入时钟信号到 P04 引脚 调试模式下运行这些代码 确认 T00 引脚, 执行以上操作后, 可看到输出时钟变为 8 分频输入时钟 SYSC = 0xE3; // set P12 as EC0 pin, disable HCLK1 T00CR0 = 0x71; // interval timer, external clock source. TMCR0 = 0x43; // 8 bit mode, output T00. T00DR = 0x08; // set counter. T00CR1 = 0x81; // enable output, start T00. 以上代码将 P12 设为 EC0 引脚并在连续间隔定时器模式下设定 T00 输入时钟信号到 P12 引脚 自由运行模式下运行这些代码 确认 T00 引脚, 执行以上操作后, 可看到输出时钟变为 8 分频输入时钟 MCU-AN-500009-Z-10 Page 6
4 DBG 引脚使用时的注意事项 4 DBG 引脚使用时的注意事项 本章介绍使用 DBG 引脚时的注意事项 1 使用 BGM 适配器调试时, 连接到 DBG 引脚的外围电路不应影响单线 UART 通信 设计用户电路板时, 参考图 2-1 2 调试时, 推荐用户代码中将 P12 设为输入引脚或输出低电平 切勿将 P12 设为输出高电平 若自由运行模式下目标 MCU 运行, 则目标电路板连接到 BGM 适配器 当目标 MCU 中将 DBG 引脚设为高电平时,BGM 适配器使用单线 UART 引脚传输 0 这种情况下, 大电流可能穿过 DBG 引脚 MCU-AN-500009-Z-10 Page 7
Start.asm //================================================================== // F 2 MC-8L Family SOFTUNE C Compiler sample startup routine, //ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1986 // LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED //================================================================== //Sample code for initialization //-----------------------------------------------------------------------.PROGRAM start.title start // Settings #set OFF 0 #set ON 1 # set STACKSIZE 64 // Stack size //Clock Mode Selection # set SUB 0 //Sub clock mode # set MAIN 2 // Main clock mode //DIV Clock Selection (Machine clock division ratio) # set CLK_0 0 // Original oscillator div 1 # set CLK_4 1 // Original oscillator div 4 # set CLK_8 2 //Original oscillator div 8 # set CLK_16 3 //Original oscillator div 16 // external declaration of symbols.export start.import _main //definition to stack area.section STACK, STACK, ALIGN=1.RES.B STACKSIZE STACK_TOP:.RES.B 2 //========= =============================================== // Start-Up Code //======================================================= // // / / \ \ // \ / // \ ---- \ MCU-AN-500009-Z-10 Page 8
// / \ //Begin of actual code section DBG 引脚操作 V10 //======================================================== //The Mode Byte is defined at the beginning of the start.asm ; code area start: ; set stack pointer.section.data.b 0.DATA.W RESVECT, CONST, LOCATE=H'FFFD start.section CODE, CODE, ALIGN=1 MOVW MOVW A, #STACK_TOP SP, A // Set Register bank Pointer 0 / set Direct bank Pointer 0 (0x80..0xFF) MOVW A, PS MOVW A, #0x00BF // RP=0, DP=0, I=0 ANDW MOVW // Set ILM to the lowest level(3) MOVW A PS, A A, PS MOVW A, #0x0030 ORW MOVW A PS, A MOV A, 0X0FE4 // READ CRTH AND A, #0X9F //CLEAR CRTH[6:5] OR A, #0X60 // 10MHz, 0X00: 1MHz //0X20: 12.5MHz // 0X40: 10MHz 0X60: 8MHz MOV 0X0FE4, A // WRITE SYSC // call main routine CALL _main end: JMP end.end start MCU-AN-500009-Z-10 Page 9
Vector.c /******************************vector.c*********************************/ THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR INFRINGEMENT FOR ANY PURPOSES. /********************************************************************/ // VECTORS.C Interrupt level (priority) setting - Interrupt vector definition #include "mb95200.h" void InitIrqLevels(void) { ILR0 = 0xEF; // IRQ0: external interrupt ch4 --> 01 } ILR1 = 0xFF; ILR2 = 0xFF; ILR3 = 0xFF; ILR4 = 0xFF; ILR5 = 0xFF; // Prototypes // IRQ1: external interrupt ch5 --> 01 // IRQ2: external interrupt ch2 ch6 --> 01 // IRQ3: external interrupt ch3 ch7 --> 01 // IRQ4: UART/SIO ch0 // IRQ5: 8/16-bit timer ch0 (lower) // IRQ6: 8/16-bit timer ch0 (upper) // IRQ7: LIN-UART (reception) // IRQ8: LIN-UART (transmission) // IRQ9: 8/16-bit PPG ch1 (lower) UART/SIO ch1 // IRQ10: 8/16-bit PPG ch1 (upper) I2C ch1 // IRQ11: 16-bit reload timer ch0 // IRQ12: 8/16-bit PPG ch0 (upper) // IRQ13: 8/16-bit PPG ch0 (lower) // IRQ14: 8/16-bit timer ch1 (upper) // IRQ15: 16-bit PPG ch0 + ch2 // IRQ16: 16-bit reload timer ch1 I2C ch0 // IRQ17: 16-bit PPG ch1 // IRQ18: 10-biat A/D-converter --> 01 // IRQ19: TB timer // IRQ20: Watch timer / counter // IRQ21: external interrupt ch 8-11 // IRQ22: 8/16-bit timer ch1 (lower) external interrupt ch 12-15 // IRQ23: Flash Custom ch1 //================================================================ //Add your prototypes, each vector definition needs a prototype. Either do it here or include a header file containing them. MCU-AN-500009-Z-10 Page 10
//=================================================================== //extern unsigned int delay_timer; interrupt void DefaultIRQHandler (void); // Vector definition // Use following statements to define vectors. // All resource related vectors are predefined. // Remaining software interrupts can be added hereas well. #pragma intvect DefaultIRQHandler 0 //IRQ0: external interrupt ch4 #pragma intvect DefaultIRQHandler 1 //IRQ1: external interrupt ch5 #pragma intvect DefaultIRQHandler 2 //IRQ2: external interrupt ch2 ch6 #pragma intvect DefaultIRQHandler 3 //IRQ3: external interrupt ch3 ch7 #pragma intvect DefaultIRQHandler 5 //IRQ5: 8/16-bit timer ch0 (lower) #pragma intvect DefaultIRQHandler 6 //IRQ6: 8/16-bit timer ch0 (upper) #pragma intvect DefaultIRQHandler 7 //IRQ7: LIN-UART (reception) #pragma intvect DefaultIRQHandler 8 //IRQ8: LIN-UART (transmission) #pragma intvect DefaultIRQHandler 14 //IRQ14: 8/16-bit timer ch1 (upper) #pragma intvect DefaultIRQHandler 18 //IRQ18: 10-biat A/D-converter #pragma intvect DefaultIRQHandler 19 //IRQ19: TB timer #pragma intvect DefaultIRQHandler 20 //IRQ20: Watch timer / counter #pragma intvect DefaultIRQHandler 22 //IRQ22: 8/16-bit timer ch1 (lower) // external interrupt ch 12-15 #pragma intvect DefaultIRQHandler 23 //IRQ23: Flash Custom ch1 interrupt void DefaultIRQHandler (void) { } DI(); While(1) Main.c // disable interrupts wait_nop(); // halt system //===================================================================== //following code created for DBG pin usage test #define DEBUGMODE //set DBG pin as P12 output void gpio_setting(void) { DDR1_P12 = 1; /* set P12 as output pin */ PDR1_P12 = 0; /* pull P12 to low. */ AIDRL_P04 = 1; /* port input enable */ MCU-AN-500009-Z-10 Page 11
} //set DBG pin as EC0 pin void p12_as_ec0(void) { } SYSC = 0xE3; // set P12 as EC0 pin, disable HCLK1 T00CR0 = 0x71; // interval timer, external clock source. TMCR0 = 0x43; // 8bit mode, output timer00. T00DR = 0x08; // set counter. T00CR1 = 0x81; // enable output, start timer00. //change EC0 pin to P04 void p04_as_ec0(void) { } SYSC = 0xEB; // set P04 as EC0 pin, disable HCLK1 T00CR0 = 0x71; // interval timer, external clock source. TMCR0 = 0x43; // 8bit mode, output timer00. T00DR = 0x08; // set counter. T00CR1 = 0x81; // enable output, start timer00. //main function void main(void) { gpio_setting(); //pull low P12 pin... #ifdef DEBUGMODE P04_as_ec0(); //set P04 as EC0 pin in debug mode #else P12_as_ec0(); //set P12 as EC0 pin in free run mode #endif } MCU-AN-500009-Z-10 Page 12