EM78P153A/EM78P131A Application Application Notes EM78P153A/131A EM78P153A/131A 应用设计注意事项 Original Date:2012/5/8 EM78P153A/131A 应用时有几项建议与要求汇整说明需特别注意,请参阅下表及接 续的各项详细说明内容。 。 1 2 3 应用注意事项 P63(/RST)當 IO 用時,反应不正常现象 对 策 P63(/RST) Pin 仅可当外部复位(/RST) 用 上电 IRC 频率不正常或 Code Option 反应 在电源端加大电容来改善 Power On 错误应注意 Reset 电路动作不正常的现象 使用 WDT Time Out 复位及 RESETB Pin 复 透过一 Stack 初始化程序达成 Stack 归 位应注意 零,使得往后使用 Stack 可以工作正常 【※1】 ※1 请参照附件之初始化程序 1. EM78P153A P63( P63(/RST) /RST)當 IO 用時反应不正常現象之注意事项 现象: 现象:当 P63(/RST) Pin 在當作成 IO 使用时,会有程序跑飞的现象。 原因: 原因:由于 P63(/RST) Pin 当作 IO 使用时,抗 Noise 能力较差,可能导致 IC 内部 运作之讯号被外部 Noise 干扰,而有致使程序跑飞之风险。 应用需求: 应用需求 :P63(/RST) Pin 仅可当外部复位(/RST)用,勿做一般 IO pin 使用 2. EM78P153A 上电 IRC 频率不正常或 Code Option 反应错误之注意事项 现象: 现象:当系统上电时,所反应的系统频率并非 Code Option 所设定的,其值为 Code Option 未烧录时的初始设定 原因: 原因 :系统在上电时,Power On Reset 电路并未正常动作,以致系统读取 Code Option 的参数时,读取错误。 解决办法: 解决办法 :在电源端加大电容来改善 Power On Reset 电路动作不正常的现象。 Power On Reset 电路会根据 VDD Pin 上电源的变化来来判断是否发送复位信号, 过快的电源变化会被 Power On Reset 电路视为噪声而忽略;进而未适时发出复位 信号,欲改善此一现象,可于 VDD 端对地并联一电容,并联电容会造成 VDD 上电速 度减缓,进而让 Power On Reset 电路正常工作。于是,Code Option 就可以顺利的 被读取,以完成系统正常初始化的工作。 Doc# AP-EM78P153A/131A-001C-V1 http://www.emc.com.tw Application Notes(v1.0)05.08.2012 • 1 EM78P153A/ EM78P131A Fig. POR 建议电路 3. EM78P153A 使用 WDT Time Out 复位及 RESETB Pin 复位应注意事项 现象:在 Stack 未妥善初始化的情形下,发生 WDT Time Out 复位及 RESETB Pin 复 现象 位时,程序会发生跑飞现象。 原因: 原因 :由于 Stack 需要做初始化的动作,而当发生 WDT Time Out 复位及 RESETB Pin 复位时,Stack 无法主动初始化,在未初始化的情形下使用 Stack(使用 CALL 及中断功能),会造成返回异常,进而使得程序失控。 解决办法: 解决办法 :透过一 Stack 初始化程序达成 Stack 归零,使得往后使用 Stack 可以工 作正常。 原厂提供一 Stack 初始化程序建议有需要的使用者放上,哪些是有需要的使用者: 1. 使用 WDT Time Out 复位者 2. 使用 RESETB Pin 复位者 Stack 初始化程序详细描述如下,由于使用 WDT Time Out 复位和 RESETB Pin 复位会干扰 CALL 和中断发生时 Stack 的运作,故需将 Stack 初始化程序放在系统 初始化程序中,并且是在使用及设定上述两种功能及开始使用 CALL 及中断功能之 前,如此才能产生作用。使用 Stack 初始化程序时,需要注意下列几项: 1. Stack 初始程序必須放置在位址 0x00D~0x0FF 之間,超過這個範圍會有運算錯 誤之虞,且勿修改 Stack 初始化程序本体。 2. Stack 初始化程序会改变两个寄存器的值,故需规划两个寄存器给 Stack 初始 化程序使用,但使用完毕即释放,不会持续占用。 程序共计需要 40 Words,所耗时间由使用者依当时所使用振荡器计算;原厂建 议将这个程序放在最先初始化的位置中。 2 • Application Notes(v1.0)05.08.2012 Doc# AP-EM78P153A/131A-001C-V1 http://www.emc.com.tw EM78P153A/EM78P131A ※ EM78P153A 推栈(Stack) 推栈(Stack) 仅有 5 层,中断功能发生时会占用掉 1 层。因此, 因此,若 程序中有使能中断功能, 程序中有使能中断功能,则程序中最大可用堆栈(Stack) 则程序中最大可用堆栈(Stack)为 (Stack)为 4 层,请特别关注。 请特别关注。 Stack initial 程序使用方式参考: 程序使用方式参考: 0x0000 JMP Stack_initial ;--------Interrup vector---------------0x0008 INT_SVR: . . RETI ;--------Stack initial------------------Stack_initial: . . Call main ;---------User code----------------Main: . . 程序流程图: 程序流程图: C=1 C=0 Doc# AP-EM78P153A/131A-001C-V1 http://www.emc.com.tw Application Notes(v1.0)05.08.2012 • 3 EM78P153A/ EM78P131A 程序及说明: 程序及说明: L_SADR == 0x21 SADR == 0x2F /* save last stack address /* save current stack address */ */ ORG 0X0 /* -------------- calibration stack pointer ---------------- */ JMP CAL_SP CAL_SP: CLR L_SADR ; CLEAR L_SADR CLR SADR ; CLEAR SADR CALL l1 MOV A, 0x2 ; Store Program Counter JMP CK_SP l1: CALL l2 MOV A, 0x2 ; Store Program Counter JMP CK_SP l2: CALL l3 MOV A, 0x2 ; Store Program Counter JMP CK_SP l3: CALL l4 MOV A, 0x2 ; Store Program Counter JMP CK_SP l4: CALL l5 MOV A, 0x2 ; Store Program Counter JMP CK_SP l5: CALL l6 MOV A, 0x2 ; Store Program Counter JMP CK_SP l6: CALL l7 MOV A, 0x2 ; Store Program Counter JMP CK_SP l7: CALL l8 MOV A, 0x2 ; Store Program Counter JMP CK_SP l8: RET CK_SP: MOV SUB JBC JMP Compliment: SADR, A A, L_SADR 0x3, 0 DIFF_LOOP 4 • Application Notes(v1.0)05.08.2012 ; ; A = (diff_value) = L_SADR – SADR ; ; C = 1, JMP DIFF_LOOP ; C = 0, A (diff_value) 做 2’s compliment Doc# AP-EM78P153A/131A-001C-V1 http://www.emc.com.tw EM78P153A/EM78P131A /*********************************************************/ /* 2's compliment */ /*********************************************************/ XOR A, @0XFF ADD A, @0X01 DIFF_LOOP: XOR A, @0x0C ; diff_value == 0xc JBC 0x3, 2 ; CALL MAIN ; Z = 1, CALL MAIN /*label of customer's 1st code*/ ; Z = 0, L_SADR <= SADR, RET STACK LEVEL MOV A, SADR MOV L_SADR, A RET Doc# AP-EM78P153A/131A-001C-V1 http://www.emc.com.tw Application Notes(v1.0)05.08.2012 • 5