编辑: 865397499 | 2016-08-04 |
034 2017-7-31 MCU Application Note [Rev 0.07] Churu.Huang 第2页共9页Rev 0.034 7/31/2017 1. 文档更改历史 日期 作者 版本 内容 2016-9-13 Milk.Chen 0.01 初版 2016-9-22 Milk.Chen 0.02 添加 IO 初始状态 2016-10-31 Milk.Chen 0.03 添加 2.6 2016-11-07 Churu Huang 0.04 修改 2.3 2017-05-11 Churu Huang 0.05 修改 2.7 2017-07-31 Churu Huang 0.07 修改 2.8 第3页共9页Rev 0.034 2017-7-31 2. 详细说明 2.1 复位时 IO 处于高阻态 ? 适用芯片型号: 所有版本. ? 问题描述: 任何复位后,GPIO 都处于输入状态且内部上拉关闭,外部电路看到的 IO 为高阻态. ? 解决方法: 应用方案应该要评估该特性会不会对电路其它部分造成影响,如果需要可在关键 IO 外挂上 拉或者下拉. 2.2 PA 端口(电平)变化中断标志位的清除 ? 适用芯片型号: 所有版本. ? 问题描述: 端口变化中断的清除在数据手册的 14.2 节提到: a) 读取 PORTA;
b) 清除 PAIF;
软件开发需要用到端口(电平)变化中断的,清除 PAIF 标志位必须按照以上步骤执行. 其中 a)步骤是清除不匹配条件,因为不匹配条件一直存在,PAIF 就不能被软件清除. ? 解决方法: 另外,初始化端口变化中断时建议按以下顺序操作: a) 设置 TRISA,把相关 PA 口设置为输入口;
b) 读PORTA;
c) 清PAIF;
d) 设置 IOCA 寄存器;
e) 设置 RAIE 位;
第4页共9页Rev 0.034 7/31/2017 2.3 Data EEPROM 编程 2.3.1 编程步骤 A. 把INTCON 的GIE 位清 0;
B. 判断 GIE 是否为 1,是则重复 A 步骤,否则可以进行下一步;
C. 往EEADR 写入目标地址;
D. 往EEDAT 写入目标数据;
E. 把位 WREN3/WREN2/WREN1 全部置 1;
F. 把位 WR 置1(EECON2.0,此后 WR 会维持高) ;
G. 写过程不能改变 WREN3/2/1 的值,否则编程终止;
H. 等大概 2ms 之后编程自动完成,WR 自动清 0,WREN
3、WREN
2、WREN1 清0;
注意: a) 以上步骤的 E、F 两步必须是连续的两条指令周期完成,不能错开,否则编程操作 不会启动;
b) F 步骤之后,根据应用需要,可以打开 GIE 全局中断使能位. 2.3.2 编程建议 在使用 EEPROM 之前需要对 EEPROM 进行初始化操作,在未使用到的 EEPROM 地址写入 两次"0xAA" ,后续程序不要操作到此地址数据.如: SYSTEM_INI: …… …… LDWI 0x55 STR EEPROM_ADDR LDWI 0xAA STR EEPROM_DATA LCALL EEPROM_Write ;
往0x55 地址写入数据 0xAA LCALL EEPROM_Write ;
写两次 …… …… RET 2.3.3 检查 WRERR 位 如果在 EEPROM 写过程中发生了外部复位、WDT 溢出复位、LVR 复位或者非法指令复位, 标志位 EECON1.WRERR 会被置 1.利用它,软件可以知道在前一次 EEPROM 写过程中有 没有发生异常情况,进而采取相应处理措施. 第5页共9页Rev 0.034 7/31/2017 2.3.4 检查写完成 EEPROM 编程时间大概为 2ms 左右,这过程可以通过检查 EECON2.WR 或者 PIR1.EEIF 位 来确定写结束. 如果应用允许,还可以启动编程后进入 SLEEP 状态,然后等待写完成的唤醒,需要把 EEIE 和PEIE 位置 1. 2.3.5 加入写校验步骤 根据应用情况, 将写入 EEPROM 的实际值和要写入的目标值做核对是一个很好的编程习惯, 即写完成后,软件读一下 EEPROM 与写目标值对比,相等则说明写成功,否则写失败,软 件可采取重写策略. 2.3.6 使能 LVR/LVD 模块 在发生欠压(VDD 低于 MCU 最低工作电压时.最低工作电压跟工作频率相关,如只有在 VDD>2.7V 时, MCU 才能跑 16M, 这时建议 LVR 设置 2.8V) 而MCU 没进入复位的状态下, 可能会发生偶发性的写入.可通过使能 LVR 或者外部复位电路让器件处于复位,以确保在 超出正常工作电压范围时,不发生数据 EEPROM 的写操作.另外,软件还有另外一个选择, LVD.当判断到有低电压标志时,不要执行写 EEPROM 的流程. 2.4 提高内部快时钟稳定性和降低工作电流 应用程序遵守以下建议能提高内部 16M 快时钟的稳定性,同时带来另一个好处是能降低工 作电流: 2.4.1 循环体内少用 NOP 指令 如果非要使用 NOP 指令,在应用允许的情况下,执行 NOP 的循环之前把工作寄存器 W 清0. 2.4.2 跳转指令 LJUMP 避开 0xFF 地址 使用 LJUMP label_xxx 指令时,在程序空间足够且应用允许的情况下,尽量避开 label_xxx 地址低