SM39R 系列 WDT 功能使用方法 SM39R 系列 WDT 功能使用方法 1 适用产品: 1.1 SM39R16A2/ SM39R12A2/ SM39R08A2 1.2 SM39R04G1/ SM39R02G1 1.3 SM39R2051/ SM39R4051 2 以下说明适用:SM39R08/12/16A2/ SM39R02/04G1/ SM39R4051/ SM39R2051: 2.1 WDT 模块之时钟源为 MCU 内部之 250KHz RC 振荡电路产生。 2.2 WDT 烧录时可设定 WDT 禁能、致能。当于烧录时设定 WDT 禁能,则不论 SFR WDTC^5(WDTE) 于程序中设定为 WDT 功能启动,WDT 模块仍然不会动作;当于烧录时设定 WDT 致能,则 WDT 模块由 WDTC^5(WDTE)于程序中设定为 WDT 功能为启动或停止。 2.3 WDT 启动或停止:当于烧录时设定 WDT 致能,由 WDTC^5(WDTE)决定,当设定为”1”,WDT 启动,设定为”0”,WDT 停止;WDTC SFR 之设定需先由 TAKEY SFR 连续写入 0x55H,0xAAH 及 0x55H 才可修改。 2.4 WDT 重置时间:由程序设定 WDTC^[3:0](WDTM[3:0])决定,共有 16 组可供选择。 2.5 WDT counter 清除可由外部重置,或由软件执行(写入 0x55 至 SFR WDTK 即可) 2.6 WDTK 须不断的执行清除,以确保 WDT counter 不会溢位 2.7 SM39R02/04G1、SM39R20/4051 : 当 WDT counter 溢位时,SFR WDTC^7(WDTF)由硬件设定 为”1”,并且重置 MCU,重置后 WDTC^7 (WDTF)由硬件清除为”0” 2.8 SM39R08/12/16A2 : 当 WDT counter 溢位时,SFR RSTS^3(WDTF)由硬件设定为”1”,并且重 置 MCU,重置后 RSTS^3(WDTF)由硬件清除为”0” 2.9 以下为 WDT reset time 计算方式: WDTCLK = 250KHz 2 WDTM Watchdog reset time = 256 WDTCLK Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 1 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 2.10 下表 WDT 重置时间: Divider WDTM [3:0] (250 KHz RC oscillator in) Time period @ 250KHz 0000 1 1.02ms 0001 2 2.05ms 0010 4 4.10ms 0011 8 8.19ms 0100 16 16.38ms (default) 0101 32 32.77ms 0110 64 65.54ms 0111 128 131.07ms 1000 256 262.14ms 1001 512 524.29ms 1010 1024 1.05s 1011 2048 2.10s 1100 4096 4.19s 1101 8192 8.39s 1110 16384 16.78s 1111 32768 33.55s Table 1 1 2WDTM Fig. Watchdog timer block diagram Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 2 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 2.11 SM39R02/04G1、SM39R20/4051 WDT 相关缓存器: Mnemoni c Description Direct Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 RESET Watchdog Timer TAKEY WDTC WDTK Time Access Key F7h register Watchdog timer B6h control register Watchdog timer - WDTF - WDTE B7h refresh key 00H TAKEY [7:0] 04H WDTM [3:0] 00H WDTK[7:0] 2.12 SM39R08/12/16A2 WDT 相关缓存器: Mnemoni c Description Direct Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 RESET Watchdog Timer TAKEY WDTC WDTK RSTS Time Access Key F7h register Watchdog timer B6h control register Watchdog timer - - - WDTE B7h refresh key Reset status - - - PDRF WDTF Mnemonic: TAKEY 7 6 04H WDTM [3:0] 00H WDTK[7:0] A1h register 00H TAKEY [7:0] SWRF LVRF PORF 00H Address: F7h 5 4 3 TAKEY [7:0] 2 1 0 Reset 00H 看门狗控制寄存器(WDTC) 默认是只读 ;程序必须连续对 TAKEY 寄存器写入特定数值 55h、AAh 和 5Ah,才 能对 WDTC 寄存器执行写入。范例如下: MOV TAKEY, #55h MOV TAKEY, #0AAh MOV TAKEY, #5Ah Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 3 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 Mnemonic: WDTK 7 6 Address: B7h 5 4 3 2 1 0 Reset 00h WDTK[7:0] WDTK: 看门狗定时器清除计数寄存器 想将看门狗计数值清除为零,须于程序中对 WDTK 寄存器写入 0x55 ¾ SM39R02/04G1、SM39R20/4051: Mnemonic: WDTC Address: B6h 7 6 5 4 WDTF - WDTE - 3 2 1 0 Reset 04H WDTM [3:0] WDTF: 看门狗定时器复位旗标 当看门狗重新复位 MCU 时,WDTF 旗标将被硬件设置为 1。 清除旗标可透过程序或外部复位或上电复位。 WDTE: 看门狗定时器致能控制位 此WDTE位需于软件烧录时(ICP或ISP)设定看门狗开启(出厂预设开启)后设置才有效,也就 是说若烧录时芯片组态设置看门狗是开启,则程序可选择开启或关闭,反之,烧录时关 闭(WDTEN=1)则程序开启看门狗也无效。 0︰使无能力WDT。 1︰使成为可能WDT。 WDTM [3:0]: WDT 重置时间选择位 请参考 Table 1 内的 WDT 重置时间。 ¾ SM39R08/12/16A2: Mnemonic: WDTC 7 - 6 Address: B6h 5 4 WDTE - 3 2 1 WDTM [3:0] 0 Reset 04H WDTE: 看门狗定时器致能控制位 此WDTE位需于软件烧录时(ICP或ISP)设定看门狗开启(出厂预设开启)后设置才有效,也就 是说若烧录时芯片组态设置看门狗是开启,则程序可选择开启或关闭,反之,烧录时关 闭(WDTEN=1)则程序开启看门狗也无效。 0︰使无能力WDT。 1︰使成为可能WDT。 Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 4 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 WDTM [3:0]: WDT 重置时间选择位 请参考 Table 1 内的 WDT 重置时间。 Mnemonic: RSTS Address: A1h 7 6 5 4 3 2 1 0 Reset - - - PDRF WDTF SWRF LVRF PORF 00H WDTF: 看门狗定时器复位旗标 当看门狗重新复位 MCU 时,WDTF 旗标将被硬件设置为 1。 清除旗标可透过程序或外部复位或上电复位。 范例: 开启 WDT 和选择 WDT 重置时间为 262.14ms. 首先,请确认烧录软件内芯片组态设置看门狗是开启(WDTEN = 0) 接着程序设定如下: MOV TAKEY, #55h MOV TAKEY, #0AAh MOV TAKEY, #5Ah ; enable WDTC write attribute. MOV WDTC, #28h ; Set WDTM [3:0] = 1000b. Set WDTE =1 to enable WDT . ; function. .. MOV WDTK, #55h ; Clear WDT timer to 0. 2.13 WDT 应用的范例程序 1. 烧录时先于芯片组态中设定 WDTE 致能及选择 WDTM 重置时间 Description 2. 当执行 user code 时,WDTK 须不断的执行清除 3. 量测 P1,若为 0x55 表示正确;将 P2.0 置低后 P1 若输出 0xaa,表示 WDT counter 溢位 Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 5 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 C 语言 //==================================================================== // SYNCMOS TECHNOLOGY //==================================================================== #include <SM39R16A2.h> #define d_WDTE 1 //WDT Enable Bit #define d_WDTM 0x04 //WDTM[3:0] WDT Clock Source Divider Bit (0~F) //---------------------------------------------------------------------// void WDT_initialize(void) //Initialize WDT { TAKEY=0x55; //**************************************// TAKEY=0xAA; //Set To Enable The WDTC Write Attribute// TAKEY=0x5A; //**************************************// WDTC=(d_WDTM)|(d_WDTE<<5); //Set WDT Reset Time and Enable WDT } //---------------------------------------------------------------------// void WDT_CountClear(void) { WDTK=0x55; //WDT Timer Clear To Zero } //---------------------------------------------------------------------// void WDT_Disable(void) { TAKEY=0x55; //**************************************// TAKEY=0xAA; //Set To Enable The WDTC Write Attribute// TAKEY=0x5A; //**************************************// WDTC=0x00; //Disable WDT Function } //---------------------------------------------------------------------// void main(void) //Main Function Start { if((RSTS&0x08)) // SM39RxxA2 Decision WDT Occur (WDTF=1) //if((WDTC&0x80)) // SM39RxxG1/SM39R20/4051 Decision WDT Occur { RSTS=RSTS&0xF7; //SM39RxxA2 Clear WDTF (WDT Timer Reset Flag) //WDTC=WDTC&0x7F //SM39RxxG1/SM39R20/4051 Clear WDTF WDT_CountClear(); //Clear WDT Count Subroutine WDT_Disable(); Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 6 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 P1=0xaa; //WDT Occur SM39RxxA2 // P3=0xaa; //WDT Occur SM39RxxG1/SM39R20/4051 while(1); } WDT_initialize(); //Call WDT Initial Subroutine P1=0x55; //SM39RxxA2 // P3=0x55; //SM39RxxG1/SM39R20/4051 if(P2_0==0) //SM39RxxA2 // if(P1_0==0) //SM39RxxG1/SM39R20/4051 { while(1); //WDT Overflow } WDT_CountClear(); //Clear WDT Count Subroutine } Description 1. 烧录时先于芯片组态中设定 WDT 致能及选择 WDTM 重置时间 262.14ms 2. 当执行 user code 时,WDTK 须不断的执行清除 3. 量测 P2,若为 0x00 表示正确;若 P2 不断的 Hi-Low 变化,表示 WDT counter 溢位 汇编 //==================================================================== // SYNCMOS TECHNOLOGY //==================================================================== P1_0 EQU 90h TAKEY EQU 0F7h WDTC EQU 0B6h WDTK EQU 0B7h ORG 0000h LJMP START MOV SP,#0x07 CALL WDT_INITIAL START: WDT_SUB: MOV P3,#55h MOV A,WDTC JB ACC.7, WDT_OVERFLOW CALL WDT_CLR Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 7 Ver. A 2010/08 SM39R 系列 WDT 功能使用方法 JB JMP P1_0, WDT_SUB $ //------------------------------------------------------------------// WDT_OVERFLOW: MOV P3,#0AAh ANL WDTC,#7Fh JMP $ //SM39RxxG1/SM39R20/4051 Clear WDTF //------------------------------------------------------------------// WDT_INITIAL: MOV TAKEY,#55h MOV TAKEY,#0AAh MOV TAKEY,#5Ah MOV WDTC,#28h //WDT ENABLE & SET WDT RESET TIME RET //------------------------------------------------------------------// WDT_CLR: MOV WDTK,#55h //WDT Timer Clear To Zero RET END 新茂国际科技希望能为客户减少开发的时间及辛劳,故提供 “Codzard 范例程序产生器" 可于 新茂网站首页>下载专区> 软件下载 内下载此软件 如有任何建议,请来信告知,谢谢! 销售客服 电子信箱: [email protected] 技术支持 电子信箱: [email protected] Specifications subject to change without notice, contact your sales representatives for the most recent information. ISSFA-0228 8 Ver. A 2010/08