TX- F01I81xx ATASHEET TX01I81xx www.xdssemi.com /001
目录 TX-F01l81-xx... 1 ATASHEET... 1 1. 特性... 5 1.1 程序存储器... 6 1.2 脚位图... 7 2. SFR... 8 2.1 地址映射... 8 2.1.1. SFR,BANK0... 8 2.1.2. SFR,BANK1... 9 2.1.3. TMR0, 地址 0x01... 10 2.1.4. STATUS 寄存器, 地址 0x03,0x83... 10 2.1.5. PORTA 寄存起, 地址 0x05... 11 2.1.6. INTCON 寄存器, 地址 0x0B... 11 2.1.7. PIR1 寄存器, 地址 0x0C... 12 2.1.8. TMR2, 地址 0x11... 13 2.1.9. T2CON 寄存器, 地址 0x12... 13 2.1.10. WTCON 寄存器, 地址 0x18... 14 2.1.11. MSCKCON 寄存器, 地址 0x1B... 14 2.1.12. SOSCPR 寄存器, 地址 0x1C,1... 15 2.1.13. OPTION 寄存器, 地址 0x81... 15 2.1.14. TRISA 寄存起, 地址 0x85... 16 2.1.15. PIE1 寄存器, 地址 0x8C... 17 2.1.16. OSCCON 寄存器, 地址 0x8F... 17 2.1.17. PR2 寄存器, 地址 0x92... 18 2.1.18. WPUA 寄存器, 地址 0x95... 18 2.1.19. IOCA 寄存器, 地址 0x96... 18 2.1.20. PCON 寄存器, 地址 0x8E... 19 2.1.21 EEAT 寄存器, 地址 0x9A... 19 2.1.22 EEAR 寄存器, 地址 0x9B... 19 2.1.23. EECON1 寄存器, 地址 0x9C... 19 2.1.24. EECON2 寄存器, 地址 0x9... 20 2.1.25. UCFG0 和 UCFG1... 20 2.1.26. PCL 和 PCLATH... 21 TX01I81xx www.xdssemi.com /002
2.1.27. INF 和 FSR 寄存器... 22 3. 系统时钟源... 22 4. 复位时序... 23 4.1. POR 上电复位... 23 4.2. 外部复位 MCLR... 24 4.3. PWRT( 上电计时器 )... 24 4.4. BOR 低电压复位... 24 4.5. 超时动作... 25 5. BOOT... 27 6. 烧录和控制串口... 27 7. 看门狗定时器... 27 7.1. 看门狗... 28 8. 定时器 0... 28 8.1. TIMER 0... 28 8.2. TIMER 0 定时器模式... 29 8.3. TIMER 0 计数器模式... 29 8.3.1. 软件可配置预分频电路... 29 8.3.2. 定时器 0 中断... 30 8.3.3. 用外部时钟驱动定时器 0... 30 9. 定时器 2... 30 9.1. TIMER2... 30 10. 数据 EEPROM... 31 10.1. 编程数据 EEPROM 步骤... 31 10.2. 读 EEPROM 步骤... 32 11. 慢时钟测量模式... 32 12. 中断模式... 33 12.1. 中断过程中的现场保存... 34 13. 睡眠省电模式... 35 13.1. 唤醒模式... 35 13.2. 看门狗唤醒... 35 14. I/O 端口... 36 14.1. PORTA 端口和 TRISA 寄存器... 36 14.2. 端口的其他功能... 36 14.2.1. 弱上拉... 36 14.2.2. 状态变化中断... 36 14.2.3. 端口描述... 37 TX01I81xx www.xdssemi.com /003
15. 芯片的电气特性... 44 15.1. 内置高频振荡器 (INTERNAL HIGH FREUENCY OSC)... 44 15.2. 内置低频振荡器 (INTERNAL LOW FREUENCY OSCILLATOR)... 44 15.3. 低电压侦测 / 复位电路 (LV/LVR)... 44 15.4. I/O PA 电路... 44 15.5. 总体工作电流 (IV)... 45 16. MCU 的指令架构... 46 16.1. 指令集列表... 46 17. 芯片封装信息... 48 附录 1, 文档版本历史... 49 TX01I81xx www.xdssemi.com /004
1. 特性 全自我知识产权 8 位指令集 8 层 10bit 硬件堆栈 1Kx14b 程序 FLASH 存储空间 (16bytes/page) 256x8b 数据 EEPROM(16bytes/page) 数据 EEPROM 可在应用编程 64x8b SRAM 1 x 带 8 位预分频的定时器 0 1 x 带 8 位预分频的定时器 2 带 7 位预分频的 WT, 溢出频率约为 16ms~2048ms 上电延迟计数器 PWRT 低功耗模式 SLEEP 4 个唤醒源,INT 端口变化中断 WT 数据 EEPROM 写完成 内置高速 RC 振荡器, 最高频率支持 16M 内置低速 RC 振荡器,32K 模式 最多 6 个通用 IO 端口变化中断,RA0~RA5 支持在系统编程 ISP 支持在线调试 程序空间保护 业界最宽工作电压范围 :1.8V~ 5.5V 最大时钟工作频率 :16MHz FSYS=8MHz: 1.8V~2.7V FSYS=16MHz: 2.7V~5.5V TX01I81xx www.xdssemi.com /005
......... PORRSTN BORRSTN FOSC SOSC CLKC IOCTRL SFR TMR/WT SFRBUS SRAM 64B RSTC/ PWRT/BOOT PAT CFG STALL EAT IO SCK SA SER CM s EPI PAR EEAR EEWAT CPU ata EEP 256B Prog FLASH 1Kx14b AR & WAT BUS CTRL BUS 图 1.1 数字功能框图 1.1 程序存储器 地址寄存器为 13 位 (0x0000 ~ 0x1FFF), 最多支持 8K 地址空间 程序存储器一共 1Kx14b (0x0000 ~ 0x03FF), 加上额外 I 和配置信息区, 共 32x14b, 它们由 FLASH 构成 一个 PAGE 是 16 个字, 一共有 66 个 PAGE 其中 0~0x03FF 对主程序区访问, 其中未实现部分 0x400~0x1FFF 保留 I 和配置信息区从 0x2000 开始, 到 0x201F 结束 0 Implemented 0x3FF 0x2000 0x2001 0x2002 0x2003 0x2008 0x2009 0x200A 0x2010 0x2011 0x201F UCFG0 UCFG1 UCFG2 UCFG3... UI0 UI1 UI2... FCFG0 FCFG1... EVI 0x1FFF 0x2000 0x201F Reserved Not Implemented Implemented Main Area I& CONF 图 1.2 程序空间地址映射 TX01I81xx www.xdssemi.com /006
1.2 脚位图 V PA2/T0CKI/INT PA1/ICSPAT PA3/MCLRB 1 8 2 7 TX-F01l81-3 6 xx 4 5 VSS PA4/CLKO PA5 PA0/ICSPCLK 图 1.3 TX-F01l81xx 封装,SOP-8 脚位图 以下为芯片管脚的详细描述 : 输入信输出信号管脚名功能名具体描述上下拉号类型类型 PA0 TTL CMOS GPIO with IOC and WPU 可配置上拉 ebug/ 烧录模式串口 clock 信号 ICSPCLK ST --- (Fmax=6MHz) PA0/ICSPCLK PA1/ICSPAT --- PA1 TTL CMOS GPIO with IOC and WPU 可配置上拉 ICSPAT TTL CMOS ebug/ 烧录模式串口 data 信号 (Fmax=6MHz) PA2/T0CKI/INT PA3/MCLRB PA2 TTL CMOS GPIO with IOC and WPU 可配置上拉 T0CKI TTL --- Timer 0 源头时钟输入 (Fmax=4MHz) INT TTL --- 外部中断输入 PA3 TTL --- Input only with IOC 可配置上拉 MCLRB TTL --- 外部复位输入 TX01I81xx www.xdssemi.com /007
PA4 TTL CMOS GPIO with IOC and WPU 可配置上拉 PA4/CLKO 测试时钟输出 CLKO --- CMOS (Fmax=10MHz) PA5 PA5 TTL CMOS GPIO with IOC and WPU 可配置上拉 注意 : 1. IOC:Interrupt on change, 通用 IO 2. WPU:Weak pullup 2. SFR 2.1 地址映射 2.1.1. SFR,BANK0 Address (HEX) BANK0 Name Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Reset, POR 0 INF 使用 FSR 的内容对数据存储器进行访问 ( 非物理寄存器 ) xxxx xxxx 1 TMR0 TIMER0 计数器 xxxx xxxx 2 PCL 程序计数器低 8 位 0000 0000 3 STATUS - - PAGE /TF /PF Z HC C --01 1xxx 4 FSR 间接寻址指针寄存器 xxxx xxxx 5 PORTA - - PA5 PA4 PA3 PA2 PA1 PA0 --00 x000 6 - - ---- ---- 7 - - ---- ---- 8 - - ---- ---- 9 - - ---- ---- A PCLATH - - - - - 程序计数器高 3 位锁存器 ---- -000 B INTCON GIE PEIE T0IE INTE PAIE T0IF INTF PAIF 0000 0000 C PIR1 EEIF CKMEAIF - - - - TMR2IF - 000-000- - - ---- ---- E - - ---- ---- F - - ---- ---- 10 - ---- ---- 11 TMR2 TIMER2[7-0] timer2 module register 0000 0000 12 T2CON - TOUTPS[3-0] TMR2ON T2CKPS -000 0000 13 - - ---- ---- 14 - - ---- ---- 15 - - ---- ---- 16 - - ---- ---- 17 - - ---- ---- 18 WTCON - - - WTPS3 WTPS2 WTPS1 WTPS0 SWTEN ---0 1000 TX01I81xx www.xdssemi.com /008
19 - - - - - - - - - ---- ---- 1A - ---- ---- 1B MSCKCON - - - SLVREN - CKMAVG CKCNTI - ---0-00- 1C SOSCPRL SOSCPR [7-0] 1111 1111 1 SOSCPRH - - - - SOSCPR [11-8] ---- 1111 1E - - ---- ---- 1F - - ---- ---- 40~7F SRAM,64Bytes (user usable) xxxx xxxx 注意 : 1. 未实现, 保留, 读 0 2.1.2. SFR,BANK1 Address (HEX) BANK1 Name Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Reset, POR 80 INF 使用 SFR 的内容对数据存储器进行访问 ( 非物理寄存器 ) xxxx xxxx 81 OPTION /PAPU INTEG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 82 PCL 程序计数器低 8 位 0000 0000 83 STATUS - - PAGE /TF /PF Z HC C --01 1xxx 84 FSR 间接寻址指针寄存器 xxxx xxxx 85 TRISA - - TRISA[5:4] - TRISA[2:0] --11-111 86 - - ---- ---- 87 - - ---- ---- 88 - - ---- ---- 89 - - ---- ---- 8A PCLATH 程序计数器高 3 位锁存器 ---- -000 8B INTCON GIE PEIE T0IE INTE PAIE T0IF INTF PAIF 0000 0000 8C PIE1 EEIE CKMEAIE - - - - TMR2IE - 000-000- 8 - - ---- ---- 8E PCON - - - - - - /POR /BOR ---- --qq 8F OSCCON LFMO IRCF[2:0] - HFIOFR LFIOFR - 0101-00- 90 - - ---- ---- 91 - - ---- ---- 92 PR2 PR2[7-0] timer2 period register 1111 1111 93 - - ---- ---- 94 - - ---- ---- 95 WPUA - - WPUA[5:4] - WPUA[2:0] --11-111 96 IOCA - - IOCA[5:0] --00 0000 97 - - ---- ---- 98 - - ---- ---- 99 - - ---- ---- 9A EEAT EEAT[7:0] 0000 0000 TX01I81xx www.xdssemi.com /009
9B EEAR EEAR[7:0] 0000 0000 9C EECON1 - - WREN3 WREN2 WRERR WREN1 - R --00 x0-0 9 EECON2 - - - - - - - WR ---- ---0 9E - - ---- ---- 9F - - ---- ---- A0~BF - ---- ---- C0~FF Access BANK0 SRAM,40~7F xxxx xxxx 注意 : 1. INF 不是物理寄存器 ; 2. 灰色部分表示没有实现 ; 3. 未实现的寄存器位不要写 1, 因为后续产品可能会使用到 2.1.3. TMR0, 地址 0x01 Bit 7 6 5 4 3 2 1 0 Name TMR0[7:0] Reset xxxx xxxx Bit Name Function 7:0 TMR0[7:0] Timer 0 计数结果寄存器 2.1.4. STATUS 寄存器, 地址 0x03,0x83 Bit 7 6 5 4 3 2 1 0 Name - - PAGE /TF /PF Z HC C Reset - - 0 1 1 x x x Bit Name Function 7:6 NA 没实现, 读 0 5 PAGE PAGE: Register Bank Select bit (used for direct addressing) 1 = Bank 1 (80h FFh) 4 /TF TF: Time-out bit 1 = After power-up,clrwt instruction or SLEEP instruction 0 = A WT time-out occurred 3 /PF PF: Power-down bit 1 = After power-up or by the CLRWT instruction 0 = By execution of the SLEEP instruction 2 Z Z: Zero bit 1 = The result of an arithmetic or logic operation is zero 0 = The result of an arithmetic or logic operation is not zero 1 HC HC: igit Carry/Borrow bit (AWF,ALW,SUBLW,SUBWF instructions),for Borrow,the polarity is reversed 1 = A carry-out from the 4th low-order bit of the result occurred TX01I81xx www.xdssemi.com /010
0 C 0 = No carry-out from the 4th low-order bit of the result C: Carry/Borrow bit(1) (AWF, ALW, SUBLW, SUBWF instructions) 1 = A carry-out from the Most Significant bit of the result occurred 0 = No carry-out from the Most Significant bit of the result occurred /TO /P 条件 1 1 上电或者低电压复位 0 U WT 复位 0 0 WT 唤醒 U U 正常运行下发生 MCLR 复位 1 0 睡眠状态下发生 MCLR 复位 2.1.5. PORTA 寄存起, 地址 0x05 Bit 7 6 5 4 3 2 1 0 Name - - PA5 PA4 PA3 PA2 PA1 PA0 Reset - - 0 0 x 0 0 0 Bit Name Function 7 - - 6 - - 5 PA[5] PORTA5 数据 4 PA[4] PORTA4 数据 3 PA[3] PA3 只有输入功能, 不存在相应的数据寄存器 2 PA[2] PORTA2 数据 1 PA[1] PORTA1 数据 0 PA[0] PORTA0 数据 2.1.6. INTCON 寄存器, 地址 0x0B Bit 7 6 5 4 3 2 1 0 Name GIE PEIE T0IE INTE PAIE T0IF INTF PAIF Reset 0 0 0 0 0 0 0 0 Bit Name Function GIE: Global Interrupt Enable bit 全局中断使能 7 GIE 1 = Enables all unmasked interrupts 0 = isables all interrupts 6 PEIE PEIE: Peripheral Interrupt Enable bit 外设中断使能 1 = Enables all unmasked peripheral interrupts 0 = isables all peripheral interrupts TX01I81xx www.xdssemi.com /011
5 T0IE 4 INTE 3 PAIE 2 T0IF 1 INTF 0 PAIF T0IE: Timer0 Overflow Interrupt Enable bit 定时器 0 溢出中断使能 1 = Enables the Timer0 interrupt 0 = isables the Timer0 interrupt INTE: RA2/INT External Interrupt Enable bit 外部中断使能 1 = Enables the RA2/INT external interrupt 0 = isables the RA2/INT external interrupt RAIE: PORTA Change Interrupt Enable bit(1) 1 = Enables the PORTA change interrupt 0 = isables the PORTA change interrupt T0IF: Timer0 Overflow Interrupt Flag bit(2) 定时器 0 溢出中断标志位 1 = Timer0 register has overflowed (must be cleared in software) 0 = Timer0 register did not overflow INTF: RA2/INT External Interrupt Flag bit 外部中断标志位 1 = The RA2/INT external interrupt occurred (must be cleared in software) 0 = The RA2/INT external interrupt did not occur RAIF: PORTA Change Interrupt Flag bit 1 = When at least one of the PORTA <5:0> pins changed state (must be cleared in software) 0 = None of the PORTA <5:0> pins have changed state 2.1.7. PIR1 寄存器, 地址 0x0C Bit 7 6 5 4 3 2 1 0 Name EEIF CKMEAIF - - - - TMR2IF - Reset 0 0 0 - - - 0 - Bit Name Function 7 EEIF EEIF: EE 写中断标志位 1 = EE 写操作完成 ( 必须软件清零 ) 0 = EE 写操作未完成 6 CKMEAIF CKMEAIF: 快时钟测量慢时钟操作完成中断标志位 1 = 快时钟测量慢时钟操作完成 ( 必须软件清零 ) 0 = 快时钟测量慢时钟未完成 5 - - 4 - - 3 - - 2 - - 1 TMR2IF TMR2IF: Timer2 与 PR2 比较相等中断标志位 1 = timer2 的值等于 PR2 ( 必须软件清零 ) 0 = timer2 的值不等于 PR2 TX01I81xx www.xdssemi.com /012
0 - - 2.1.8. TMR2, 地址 0x11 Bit 7 6 5 4 3 2 1 0 Name TMR2[7:0] Reset 0000 0000 Bit Name Function 7:0 TMR2[7:0] Timer 2 计数结果寄存器 2.1.9. T2CON 寄存器, 地址 0x12 Bit 7 6 5 4 3 2 1 0 Name - TOUTPS[3-0] TMR2ON T2CKPS[1-0] Reset NA 0000 0 00 Bit Name Function 7 - - 6:3 TOUTPS[3-0] TOUTPS<3:0>: Timer2 Output Postscaler Select bits 定时器 2 输出后分频比选择 0000 = 1:1 后分频比 0001 = 1:2 后分频比 0010 = 1:3 后分频比 0011 = 1:4 后分频比 0100 = 1:5 后分频比 0101 = 1:6 后分频比 0110 = 1:7 后分频比 0111 = 1:8 后分频比 1000 = 1:9 后分频比 1001 = 1:10 后分频比 1010 = 1:11 后分频比 1011 = 1:12 后分频比 1100 = 1:13 后分频比 1101 = 1:14 后分频比 1110 = 1:15 后分频比 1111 = 1:16 后分频比 2 TMR2ON TMR2ON: Timer2 On bit 打开定时器 2 1 = Timer2 is on 打开 0 = Timer2 is off 关闭 1:0 T2CKPS[1-0] T2CKPS<1:0>: Timer2 Clock Prescale Select bits 定时器 2 驱动时钟预分频比选择 TX01I81xx www.xdssemi.com /013
00 = Prescaler is 1 01 = Prescaler is 4 1x = Prescaler is 16 2.1.10. WTCON 寄存器, 地址 0x18 Bit 7 6 5 4 3 2 1 0 Name - - - WTPS3 WTPS2 WTPS1 WTPS0 SWTEN Reset - - - 0 1 0 0 0 Bit Name Function 7:5 N/A - 4:1 WTPS[3-0] WTPS<3:0>: 看门狗定时器周期选择 : Bit Value = 看门狗定时器驱动时钟之预分频比值 0000 = 1:32 0001 = 1:64 0010 = 1:128 0011 = 1:256 0100 = 1:512 ( 复位值 ) 0101 = 1:1024 0110 = 1:2048 0111 = 1:4096 1000 = 1:8192 1001 = 1:16384 1010 = 1:32768 1011 = 1:65536 1100 = 1:65536 1101 = 1:65536 1110 = 1:65536 1111 = 1:65536 0 SWTEN 软件打开 / 关闭看门狗定时器 : 1 = 打开 0 = 关闭 2.1.11. MSCKCON 寄存器, 地址 0x1B Bit 7 6 5 4 3 2 1 0 MSCKCON - - - SLVREN - CKMAVG CKCNTI - Reset - - - 0 0 0 0 - TX01I81xx www.xdssemi.com /014
Bit Name Function 7-5 - - 4 SLVREN 软件控制 LVR(BOR 复位 ) 使能位 1: 当 UCFG0<1:0> 为 00 时, 打开 LVR 0: 无论 UCFG0<1:0> 为何值, 禁止 LVR 3 - 保留位, 不要向此位写 1 2 CKMAVG 快时钟测量慢时钟周期的测量平均模式 1 = 打开平均模式 ( 自动测量 4 次, 并取其平均值 ) 0 = 关闭平均模式 1 CKCNTI Clock Count Init - 使能快时钟测量慢时钟周期 1 = 使能快时钟测量慢时钟周期 0 = 关闭快时钟测量慢时钟周期注 : 这一位在测量完毕后会自动归零 0 - 保留位, 不要向此位写 1 2.1.12. SOSCPR 寄存器, 地址 0x1C,1 SOSCPRL, 地址 0x1C Bit 7 6 5 4 3 2 1 0 Name SOSCPR[7-0] Reset 8 hff SOSCPRH, 地址 0x1 Bit 7 6 5 4 3 2 1 0 Name - - - - SOSCPR[11-8] Reset - - - - 4 hf Bit Name Function 0x1C:7-0 SOSCPR[11-0] 低速振荡器周期 ( 单位 : 快时钟周期数 ) 0x1:3-0 用于慢时钟测量功能 2.1.13. OPTION 寄存器, 地址 0x81 Bit 7 6 5 4 3 2 1 0 Name /PAPU INTEG T0CS T0SE PSA PS2 PS1 PS0 Reset 1 1 1 1 1 1 1 1 Bit Name Function TX01I81xx www.xdssemi.com /015
7 /PAPU PAPU: PORTA Pull-up Enable bit 1 = PORTA pull-ups are disabled 0 = PORTA pull-ups are enabled by individual PORT latch values 6 INTEG INTEG: Interrupt Edge Select bit 1 = Interrupt on rising edge of RA2/INT pin 0 = Interrupt on falling edge of RA2/INT pin 5 T0CS T0CS: Timer0 Clock Source Select bit 1 = Transition on RA2/T0CKI pin 0 = Internal instruction cycle clock (FOSC/4) 4 T0SE T0SE: Timer0 Source Edge Select bit 1 = Increment on high-to-low transition on RA2/T0CKI pin 0 = Increment on low-to-high transition on RA2/T0CKI pin 3 PSA PSA: Prescaler Assignment bit 1 = Prescaler is assigned to the WT 0 = Prescaler is assigned to the Timer0 module 2 PS2 PS<2:0>: Prescaler Rate Select bits 1 PS1 BIT VALUE TIMER0 RATE WT RATE 000 1 : 2 1 : 1 001 1 : 4 1 : 2 010 1 : 8 1 : 4 0 PS0 011 1 : 16 1 : 8 100 1 : 32 1 : 16 101 1 : 64 1 : 32 110 1 : 128 1 : 64 111 1 : 256 1 : 128 2.1.14. TRISA 寄存起, 地址 0x85 Bit 7 6 5 4 3 2 1 0 Name - - TRISA[5] TRISA[4] - TRISA[3] TRISA[2] TRISA[1] Reset - - 1 1-1 1 1 Bit Name Function 7:6 NA 没实现, 读 0 5:4 TRISA[5:4] TRISA<5:4>: RA<5:4> Port I/O Tri-State Control bits 1 = Port output driver is disabled 0 = Port output driver is enabled 3 - Note: input only port Read 1 2:0 TRISA[2:0] TRISA<2:0>: RA<2:0> Port I/O Tri-State Control bits 1 = Port output driver is disabled 0 = Port output driver is enabled TX01I81xx www.xdssemi.com /016
2.1.15. PIE1 寄存器, 地址 0x8C Bit 7 6 5 4 3 2 1 0 Name EEIE CKMEAIE - - - - TMR2IE - Reset 0 0 - - - - 0 - Bit Name Function 7 EEIE EEIE: EE 写中断使能位 1 = 使能 EE 写操作完成中断 0 = 关闭 EE 写操作完成中断 6 CKMEAIE CKMEAIE: 快时钟测量慢时钟操作完成中断使能位 1 = 使能快时钟测量慢时钟操作完成中断 0 = 关闭快时钟测量慢时钟操作完成中断 5:2 - - 1 TMR2IE TMR2IE: Timer2 与 PR2 比较相等中断使能位 1 = 使能 timer2 的值等于 PR2 中断 0 = 关闭使能 timer2 的值等于 PR2 中断 0 - - 2.1.16. OSCCON 寄存器, 地址 0x8F Bit 7 6 5 4 3 2 1 0 Name LFMO IRCF[2] IRCF[1] IRCF[0] - HFIOFR LFIOFR - Reset 0 3 b101-0 0 - Bit Name Function 7 LFMO 低频内振模式 : 1 = 256K 振荡频率模式 0 = 32K 振荡频率模式注意 : 目前此版本 LFMO 没有作用, 请保持此位为 0 不管此位为何值,WT 固定使用 32KHz 频率 6:4 IRCF[2-0] 内部振荡器频率选择 111 =16 MHz 110 =8 MHz 101 =4 MHz(default) 100 =2 MHz 011 =1 MHz 010 =500 khz 001 =250 khz 000 =32 khz (LFINTOSC) 3 - 保留位, 读 1 写无效 2 HFIOFR 高速内部时钟状态 TX01I81xx www.xdssemi.com /017
1 = HFINTOSC is ready 0 = HFINTOSC is not ready 1 LFIOFR 低速内部时钟状态 1 = LFINTOSC is ready 0 = LFINTOSC is not ready 0 - - 2.1.17. PR2 寄存器, 地址 0x92 Bit 7 6 5 4 3 2 1 0 Name PR2[7-0] Reset 1 1 1 1 1 1 1 1 Bit Name Function 7:0 PR2[7-0] Timer 2 周期 ( 比较 ) 寄存器 ( 详见 timer2 描述章节 ) 2.1.18. WPUA 寄存器, 地址 0x95 Bit 7 6 5 4 3 2 1 0 Name - - WPUA5 WPUA4 - WPUA2 WPUA1 WPUA0 Reset - - 1 1-1 1 1 Bit Name Function 7-6,3 NA 没实现, 读 0 Port A 弱上拉使能 5,4,2, WPUAx 1 = 使能 PORT A 端口弱上拉 1,0 0 = 断开 PORT A 端口弱上拉 2.1.19. IOCA 寄存器, 地址 0x96 Bit 7 6 5 4 3 2 1 0 Name - IOCA[5:0] Reset 6 h00 Bit Name Function 7-6 N/A - 5-0 IOCA[5:0] 端口状态触发中断设置 1 = 使能端口状态触发中断 0 = 关闭端口状态触发中断 TX01I81xx www.xdssemi.com /018
2.1.20. PCON 寄存器, 地址 0x8E Bit 7 6 5 4 3 2 1 0 Name - - - - - - /POR /BOR Reset - - - - - - q q Bit Name Function 7:2 - 保留位, 读 0 1 /POR 上电复位标志, 低有效 0: 发生了上电复位 1: 没发生上电复位或者由软件置 1 0 /BOR 低电压复位标志, 低有效 0: 发生了低电压复位 1: 没发生低电压复位或者由软件置 1 2.1.21 EEAT 寄存器, 地址 0x9A Bit 7 6 5 4 3 2 1 0 Name EEAT[7:0] Reset 0 0 0 0 0 0 0 0 2.1.22 EEAR 寄存器, 地址 0x9B Bit 7 6 5 4 3 2 1 0 Name EEAR[7:0] Reset 0 0 0 0 0 0 0 0 2.1.23. EECON1 寄存器, 地址 0x9C Bit 7 6 5 4 3 2 1 0 Name - - WREN3 WREN2 WRERR WREN1 - R Reset - - 0 0 x 0-0 Bit Name Function 7:4 - 保留位, 读 0 5 WREN3 数据 EEPROM 写使能 3 和 WREN2 WREN1 结合使用 4 WREN2 数据 EEPROM 写使能 2 和 WREN3 WREN1 结合使用 3 WRERR 数据 EEPROM 写错误标志位 TX01I81xx www.xdssemi.com /019
1: 在 EEPROM 编程周期发生了看门狗或者外部复位, 中止 0: 在 EEPROM 编程周期正常完成 2 WREN1 数据 EEPROM 写使能 1 WREN3-1=111: 允许软件对 EEPROM 编程, 编程完成后各位自动清 0 WREN3-1= 其他值 : 禁止软件对 EEPROM 编程 1 - 保留位, 读 0 0 R 数据 EEPROM 读控制位此位是只写, 读永远返回 0 写 1: 启动一次数据 EEPROM 读周期写 0: 不启动读 2.1.24. EECON2 寄存器, 地址 0x9 Bit 7 6 5 4 3 2 1 0 Name - - - - - - - WR Reset - - - - - - - 0 Bit Name Function 7:1 - 保留位, 读 0 0 WR 数据 EEPROM 写控制位读操作 : 1: 数据 EEPROM 编程周期进行中 0: 数据 EEPROM 不处于编程周期写操作 : 1: 启动一次数据 EEPROM 编程周期 0: 无意义 2.1.25. UCFG0 和 UCFG1 软件不能访问 UCFG0 UCFG1, 它们只在上电过程由硬件写入 UCFG0,PROM 地址 0x2000 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 NA CPB MCLRE PWRTEB WTE NA NA FOSC0 位 名称 描述 Bit[7] NA 保留位, 读 0 Bit[6] CPB 1:PROM 内容不保护 0: 启动 PROM 内容保护,MCU 能读, 串口不能读 Bit[5] MCLRE 1:PA3/MCLR 脚执行 MCLR 功能, 是复位脚 0:PA3/MCLR 脚执行 PA3 功能, 是数字输入引脚 Bit[4] PWRTEB 1:PWRT 禁止 TX01I81xx www.xdssemi.com /020
0:PWRT 使能注意 : 由于 PWRT 和看门狗复用了同一个计数器, 当 PWRT 计数溢出之后, 该计数器没有自动清 0 所以建议使能了 PWRT 的应用, 在系统初始化时先执行一下 CLRWT 指令, 以清该计数器 Bit[3] WTE 1:WT 使能, 程序不能禁止 0:WT 禁止, 但程序可通过设置 WTCON 的 SWTEN 位将 WT 使能 Bit[2:1] NA 保留位, 读 0 Bit[0] FOSC[0] 1:INTOSC 模式,PA4 输出系统时钟的 4 分频,PA5 为 IO 引脚 0:INTOSCIO 模式,PA4 为 IO 引脚,PA5 为 IO 引脚 UCFG1,PROM 地址 0x2001 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - RCTRL LVEN1 LVEN0 位 名称 描述 Bit[7:3] -- 保留 Bit[2] RCTRL 输出模式时读端口控制 1: 读数据端口返回的 PA 上的值 0: 读数据端口返回的 Latch 上的值 BIT[1:0] LVEN[1:0] 低电压复位选择 00: 低电压复位使能其它 : 禁止低电压复位 2.1.26. PCL 和 PCLATH 程序计数器 (PC) 为 10 位宽 其低 8 位来自可读写的 PCL 寄存器, 高 2 位 (PC<9:8>) 来自 PCLATH, 不能直接读写 只要发生复位,PC 就将被清 0 图显示了装载 PC 值的两种情形 注意图右边的 LCALL 和 LJUMP 指令, 由于指令中的操作码为 11 位, 而芯片的 PC 只有 10 位, 所以这时 PCLATH 并不需要用到 PCH PCL PCH PCL 9 8 7 0 9 8 7 0 2 8 ALU 结果 10 PCLATH<1:0> OPCOE<9:0> PCLATH 以 PCL 为目标的指令 PCLATH LJUMP, LCALL 指令 修改 PCL TX01I81xx www.xdssemi.com /021
执行任何以 PCL 寄存器为目标寄存器的指令将同时使程序计数器 PC<9:8> 位被 PCLATH 内容取代 这样 可通过将所需的高 2 位写入 PCLATH 寄存器来改变程序计数器的所有内容 计算 LJUMP 指令是通过向程序计数器加入偏移量 (AWR PCL) 来实现的 通过修改 PCL 寄存器跳转到查找表或程序分支表 ( 计算 LJUMP) 时应特别谨慎 假定 PCLATH 设置为表的起始地址, 如果表长度大于 255 条指令, 或如果存储器地址的低 8 位在表的中间从 0xFF 计满返回到 0x00, 那么在每次表起始地址与表内的目标地址之间发生计满返回时,PCLATH 必须均必须递增 注意 :PCLATH<3> 并没有使用 2.1.27. INF 和 FSR 寄存器 INF 不是物理存在的寄存器, 对 INF 进行寻址将产生间接寻址, 可寻址范围为 0~255 任何使用 INF 寄存器的指令, 实际上是对文件选择寄存器 FSR 所指向的单元进行存取 间接对 INF 进 行读操作将返回 0 间接对 INF 进行写将导致空操作 ( 可能会影响状态标志位 ) 3. 系统时钟源 INTOSC 16M Internal Osc ~ Prescaler 16M 8M 4M 2M 1M 500K 111 110 101 100 011 010 001 000 256K Internal Osc IRCF<2:0> (OSCCON Register) ~ /8 0 1 Power-up timer (PWRT) Watchdog timer (WT) LFMO 图 3.1 系统时钟源框图 本芯片包含 2 个振荡器作为各种时钟源 包括内部 16M 高速振荡器 (HFINTOSC), 内部 32K/256K(LFINTOSC) 低速振荡器 这些时钟或振荡器结合预分频器可以给系统提供各种频率的时钟源 系统时钟源的预分频器比例由 OPTION 寄存器里的 IRCF<2:0> 位控制 注意 : 看门狗 系统时钟源 (IRCF=000) 以及 PWRT 统一使用 8 分频之后的输出, 即 32KHz, 而不管 LFMO 为何值 TX01I81xx www.xdssemi.com /022
LVREN 4. 复位时序 TX-F01l81xx 有以下几种不同的复位 : A) 上电复位 POR B) WT( 看门狗 ) 复位 在常规运行期间 C) WT( 看门狗 ) 唤醒 在睡眠期间 ) /MCLR 管脚复位 在常规运行期间 E) /MCLR 管脚复位 在睡眠期间 F) 低电压 (BOR) 复位有些寄存器是不被任何复位影响的 ; 这些寄存器的状态在上电复位时是未知的, 也不受复位事件影响 大多数其它寄存器都会在以下复位事件时恢复到其 复位状态 : 上电复位 POR WT( 看门狗 ) 复位 在常规运行期间 WT( 看门狗 ) 复位 在睡眠期间 /MCLR 管脚复位 在常规运行期间 低电压 (BOR) 复位 WT( 看门狗 ) 睡眠唤醒不会造成和在常规运行状态下 WT( 看门狗 ) 超时所造成的复位 因为睡眠唤醒本身就是一种继续的意思, 而不是复位 /TO 和 /P 位的设置和清零在不同复位条件下的动作是不同的 具体可参考表 4.1 和 4.2 /MCLR 管脚背后的电路带有防抖功能, 能够滤除一些干扰造成的尖细脉冲信号 下图为复位电路的总体概述框图 /MCLR pin External Reset /Sleep WT Module WT Time-out Reset V V Rise etet Brown Out Reset S R Chip Reset LFINTOSC 11-bit ripple counter PWRT Enable PWRT 图 4.1 复位功能框图 4.1. POR 上电复位 片上的 POR 电路会将芯片保持在复位状态直到 V 电源电压达到足够高, 为充分利用片内复位电路的功 TX01I81xx www.xdssemi.com /023
能, 用户可以简单地直接在 V 和 /MCLR 之间结一个电阻 这样外部就无需任何 RC 复位电路 不过这要求 V 电压上升时间为最大 上电完成后, 系统复位不会立即释放, 还要等一个约 8ms 的延时, 期间数字电路保持在复位状态 4.2. 外部复位 MCLR 需要注意的是,WT 复位不会把 /MCLR 管脚拉低 在 /MCLR 管脚上施加超过指标的电压 ( 例如 ES 事 件 ) 会造成 /MCLR 复位, 而且在管脚上产生超标的大电流, 因此我们推荐用户不再直接用一个电阻将 /MCLR 和 V 连接起来, 而是采用以下电路 V 1K 100 /MCLR 0.1uF 在芯片的 CONFIG OPTION 寄存器中有一个 MCLRE 使能位, 将此位清零会使得复位信号由芯片内部产生 当此位为 1 时, 芯片的 PA3/MCLR 脚成为外部复位脚 在这个模式下,/MCLR 脚上有个对 V 的弱上拉 4.3. PWRT( 上电计时器 ) PWRT 为上电复位, 低电压复位提供一个固定的 64ms ( 正常情况下 ) 的定时 这个定时器由内部慢时钟驱动 芯片在定时器超时之前都是被保持在复位状态 这段时间能保证 V 上升到足够高的电压使得系统能正常工作 PWRT 也可以通过系统 CONFIG 寄存器来使能 在开启低电压复位功能时, 用户应该也打开 PWRT PWRT 定时是由 V 电压超过 VBOR 门限事件启动的 另外需要注意的是, 由于由内部慢时钟驱动, 定时的实际时间长度是随温度, 电压等条件变化而变化的 这个时间不是一个精准参数 4.4. BOR 低电压复位 低电压复位由 UCFG1<1:0> 位来控制 低电压复位就是指当电源电压低于 VBOR 门限电压时所产生的复位 不过当 V 电压低于 VBOR 不超过 TBOR 时间时, 低电压复位可能不会发生 VBOR 电压在芯片出货之前需要校准, 校准可通过串口写入内部校准寄存器来完成 如果 BOR( 低电压复位 ) 是使能 (UCFG1<1:0>=00) 的, 那么最大 V 电压上升时间的要求就不存在 BOR 电路会将芯片控制在复位状态, 一直到 V 电压达到 VBOR 门限电压以上 需要注意的是, 当 V 低于系统能正常工作的门限时,POR 电路并不会产生复位信号 如果要 POR 电路产 TX01I81xx www.xdssemi.com /024
生复位信号,V 电压必须在 VSS 电平上保持 100uS 以上 4.5. 超时动作 在上电过程中, 芯片内部的超时动作顺序按以下流程执行 : POR 结束后启动 PWRT 计时由于计时是由 POR 脉冲结束启动的, 如果 /MCLR 在低电平状态下保持足够长的时间, 超时事件就会发生 那么将 /MCLR 拉高会让 CPU 立即开始执行 这在测试或者需要多个 MCU 同步的情况下会很有用 Power Control Register (PCON) PCON 寄存器里有 2 位指示哪一种复位发生了 Bit0 是 /BOR 指示位, 其在上电复位是是未知态, 软件必须将其置 1, 然后检查其是否为 0 Bit1 是 /POR 指示位, 其在上电复位后为 0, 软件必须将其置 1 V 1 2 3 4 5 6 7 8 9 10 PORRSTN 8ms delay BOOTEN PWRTE BOOTEN PWRTOV PWRT, 64ms MCLRB SYSRSTN 图 4.2 上电复位, 使用了 MCLRB TX01I81xx www.xdssemi.com /025
V 1 2 3 4 5 6 7 8 9 10 PORRSTN 8ms delay BOOTEN PWRTE BOOTEN PWRTOV PWRT, 64ms MCLRB SYSRSTN 图 4.3 上电复位, 没使用 MCLRB V VBOR Internal reset TBOR 8ms 注意 : 图 4.4 BOR 复位 1. 上电复位或低电压复位后, 并且在 PWRTEB(UCFG0.4) 为低时,PWRT 有效 它是 2048 个内部 慢时钟周期, 约 64ms; 2. TBOR 时间约为 157us; 3. 电压恢复正常之后, 内部复位不会立即释放, 而是要等约为 8ms 的时间 振荡器配置 上电复位 低电压复位 睡眠醒来 /PWRTE=0 /PWRTE=1 /PWRTE=0 /PWRTE=1 INTOSC TPWRT - TPWRT - - 表 4.1 各种情况下的超时 /POR /BOR /TO /P 条件 TX01I81xx www.xdssemi.com /026
0 x 1 1 POR u 0 1 1 BOR u u 0 u WT 复位 u u 0 0 WT 唤醒 u u u u 常规运行下 /MCLR 复位 u u 1 0 睡眠下 /MCLR 复位 表 4.2 STATUS/PCON 位及其意义 (u- 没变化,x- 未知 ) 5. BOOT 系统复位要等 BOOT 结束后才能释放 6. 烧录和控制串口 TX-F01l81xx 具备一个烧录和控制串口 这个接口为用户和开发人员使用此芯片带来方便 具体请参考相关 调试文档 7. 看门狗定时器 From timer0 clock source To timer0 32KHz 16-bit WT Prescaler 0 1 Prescaler 8bit 1 WT Time-out PSA PS<2:0> PSA WTPS<3:0> WTE SWTEN 图 7.1 看门狗和定时器 0 框图 TX01I81xx www.xdssemi.com /027
7.1. 看门狗 看门狗的时钟源为内部慢时钟 (32KHz), 它是一个 16 位的计数器, 和定时器 0 共用一个 8 位的预分频器, 使能位位于配置寄存器 CONFIG OPTION0 的第 3 位,WTEN, 为 1 时表示使能看门狗, 为 0 时禁止, 由外部串口写入控制 清看门狗指令 CLRWT SLEEP 会清除看门狗计数器 在使能了看门狗的情况下,MCU 睡眠时看门狗溢出事件可以作为一个唤醒源, 而 MCU 正常工作时作为一个复位源 条件 WTE=0 CLRWT 指令进入 SLEEP 退出 SLEEP 时刻 看门狗状态 清零 8. 定时器 0 Fosc/4 T0CKI pin ata Bus 8bit T0SE T0CS Sync 2 cycles TMR0 Set flag bit T0IF on overflow WTE 8-bit Prescaler 8bit PSA SWTEN PSA PSA<2:0> WT Time-out PSA 32K INTOSC WT 16-bit Prescaler 16bit WTPS<3:0> 图 8.1 看门狗和定时器 0 框图 8.1. Timer 0 定时器 0 为 8 位, 可配置为计数器或定时器使用, 当作为外部事件 (T0CKI) 计数器时, 可以配置为上升 沿或者下降沿计数 作为定时器时, 其计数时钟为系统时钟的 4 分频, 即每一指令周期递增一次 有一个与 WT 共用的 8 位预分频器,PSA 为 0 时该预分频器分配给定时器 0 使用 TX01I81xx www.xdssemi.com /028
注意 : 1. 当改变 PSA 的值时, 硬件会自动把预分频器清 0 8.2. Timer 0 定时器模式 该模式下, 定时器 0 在每个指令周期加 1( 不带预分频 ) 软件可以清零 OPTION 寄存器里的 T0CS 位以进 入定时器模式 当软件对 TMR0 进行写操作时, 定时器在写后面 2 个周期内不会递增 8.3. Timer 0 计数器模式 该模式下, 定时器 0 由每个 T0CKI 管脚的上升沿或下降沿触发加 1( 不带预分频 ) 具体哪一钟沿触发由 OPTION 寄存器里的 T0SE 位决定 软件可以将 OPTION 寄存器里的 T0CS 位置 1 以进入计数器模式 8.3.1. 软件可配置预分频电路 芯片在定时器 0 和 watchdog 定时器前面有一个分频电路, 可以分配给 Timer0 或者 watchdog 定时器用, 但二者不能同时使用这个预分频电路 具体分配给 Timer0 还是 watchdog 由 OPTION 寄存器里的 PSA 位决定, PSA 为 0 时, 预分频分配给 Timer0 使用 在 Timer0 预分频模式下, 总共有 8 个预分频比 (1:2 到 1:256) 可以通过 OPTION 寄存器里的 PS[2:0] 位设置 预分频电路既不可读也不可写 任何对 TMR0 寄存器的写动作会清零预分频电路 当预分频电路分配给 watchdog 时,1 条 CLRWT 指令会清零预分频电路 8.3.1.1 在定时器和 watchdog 之间切换预分频电路 由于分频电路可以分配给 Timer0 或者 watchdog 定时器用, 在二者之间切换预分频器是有可能导致误复位 在将预分频电路从分配给 TMR0 切换到分配给 watchdog 时, 请务必执行以下指令顺序 : BANKSEL TMR0 ; CLRWT ;Clear WT CLRR TMR0 ;Clear TMR0 and ; prescaler BANKSEL OPTIONREG ; BSR OPTIONREG,PSA ;Select WT CLRWT ; ; LWI b 11111000 ;Mask prescaler ANWR OPTIONREG,W ; bits IORWI b 00000101 ;Set WT prescaler STR OPTIONREG ; to 1:32 在将预分频电路从分配给 watchdog 切换到分配给 TMR0 时, 请务必执行以下指令顺序 : CLRWT ;Clear WT and TX01I81xx www.xdssemi.com /029
;prescaler BANKSEL OPTIONREG ; LWI b 11110000 ;Mask TMR0 select and ANWR OPTIONREG,W ; prescaler bits IORWI b 00000011 ;Set prescale to 1:16 STR OPTIONREG ; 8.3.2. 定时器 0 中断 芯片在定时器 0 从 0xFF 溢出到 0x00 时会置起 T0IF 标志, 并产生中断 ( 如果使能了的话 ) 注意,timer0 中断无法唤醒 CPU 因为在睡眠状态下, 定时器是被冻结的 8.3.3. 用外部时钟驱动定时器 0 在计数其模式下,T0CKI 管脚输入和 Timer0 的寄存器之间的同步是由在 2,4 内部时钟相位采用预分 频输出实现的 所以外部时钟源的周期的高电平时间和低电平时间必须满足相关时序要求 9. 定时器 2 TMR2 Output Prescaler 1:1, 1:4, 1:16 TMR2 Reset Set Flag Bit TMR2IF T2CKPS<1:0> Comparator E Postscaler 1:1 ~ 1:16 PR2 TOUTPS<3:0> 图 9.1 定时器 2 框图 9.1. Timer2 定时器 2 为 8 位定时器包含以下功能 : - 8 位计数寄存器 - 8 位周期寄存器 - TMR2 值等同 PR2 时产生中断 - 1:1,1:4,1:16 预分频比 TX01I81xx www.xdssemi.com /030
- 1:1~1:16 后分频比 - 图 9.1 为 Timer2 的整体框图 当 TMR2 等于 PR2 时,TMR2 会在下一个时钟周期归零, 后分频开始起作用 后分频结果会用来设置 TMR2IF 标志位 TMR2 和 PR2 都是可读写寄存器 在复位时, 他们的值分别是 0 和 0xFF 预分频和后分频计数器会在写以下寄存器时清零 : 写 TMR2 写 T2CON 任何 reset 动作 注 : 写 T2CON 并不会清零 TMR2 寄存器 10. 数据 EEPROM 片内集成有 256 个字节的 EEPROM, 通过 EEAR 进行寻址访问 软件可通过 EECON1 和 EECON2 对 EEPROM 进行编程操作, 硬件实现了擦除和编程的自定时功能, 无需软件查询, 节省有限的代码空间, 同时利 用此特性, 启动编程周期之后可以进入睡眠模式, 以降低功耗 数据 EEPROM 在使用 ( 无论是读还是写 ) 之前必须进行以下初始化操作 : 在未使用到的 EEPROM 某个单元写两次 0xAA, 后续程序不要对此单元操作 如 : SYSTEMINIT: LWI 0x55 STR EEPROMAR LWI 0xAA STR EEPROMATA LCALL EEPROMwrite LCALL EEPROMwrite 10.1. 编程数据 EEPROM 步骤 a. 把 INTCON 的 GIE 位清 0; b. 判断 GIE 是否为 1, 是则重复 a 步骤, 否则可以进行下一步 ; c. 往 EEAR 写入目标地址 ; d. 往 EEAT 写入目标数据 ; e. 把位 WREN3/WREN2/WREN1 全部置 1; f. 把位 WR 置 1(EECON2.0, 此后 WR 会维持高 ); g. 写过程不能改变 WREN3/2/1 的值, 否则编程终止 ; TX01I81xx www.xdssemi.com /031
h. 等大概 2ms 之后编程自动完成,WR 自动清 0,WREN3 WREN2 WREN1 自动清 0; i. 如果想再次编程, 重复步骤 c~h 即可 ; 注意 : 1. 编程过程中读操作无效 10.2. 读 EEPROM 步骤 要读取数据存储单元, 用户必须将地址写入 EEAR 寄存器, 然后将 EECON1 寄存器的控制位 R 置 1 在紧接着的下一周期,EEAT 寄存器就被 EEPROM 数据写入 因此该数据可由下一条指令读取 EEAT 将 保持这个值直到用户下一次从该单元读取或向该单元写入数据时 ( 在写操作过程中 ) 下面是读取 EEPROM 的一段示例程序 : BANKSEL EEAR LWI destaddr STR EEAR BSR EECON1, R LR EEAT, W 11. 慢时钟测量模式 此功能可以比较精准的测量内部慢时钟周期 在此模式下,TIMER2 的预分频 后分频自动变为 1:1, 组成一个 16 位的定时器, 其时钟源为系统时钟, 启动测量后在 1 个或 4 个慢时钟周期进行计数 计数结束后结果自动存到 SOSCPR 寄存器 CLK32K 1 2 3 SYSCLK CNTEN TMR2 SOSCPR LOA CKMEAIF 图 11.1 慢时钟测量时序图 操作步骤 : 1. 把 T2CON.2 置 1, 使能 TIMER2; 2. 如果选择 4 次平均, 则把 MSCKCON.2 置 1, 否则把它清 0; 3. 置位 MSCKCON.1, 开始测量 ; 4. 测量结束后 MSCKCON.1 自动清 0, 中断标志置 1; TX01I81xx www.xdssemi.com /032
5. 可以用查询中断标志位 CKMEAIF 或中断的方式等待结果, 此时,SOSCPR 的值即为测量结果 注意 : 1. 做慢时钟测量时, 最好把系统时钟选择为 16M, 这样分辨率更高, 测量结果也更接近实际 ; 2. 当 MSCKCON.1 为 1 时, 表示将测量 4 个慢时钟周期, 硬件没有做移位操作 故软件应对其右移 2 位以得到 1 个慢时钟周期的结果 12. 中断模式 CM8M02x 总共有 6 种中断源 : RA1/INT 管脚进来的外部中断 Timer0 溢出中断 PORTA 变化中断 Timer2 比对相等中断 EEPROM 数据写中断 慢时钟测量中断中断控制寄存器 (INTCON) 和外围中断请求寄存器 (PIR1) 记录了中端标志位 INTCON 同时也包含全局中断使能位 GIE 当中断被服务后, 以下动作自动发生 : GIE 被清零, 从而关闭中断 返回地址被推上堆栈 程序指针被加载 0004h 地址 中断返回指令,RETFIE, 退出中断函数时同时设置 GIE 位, 重新使能未屏蔽的中断 INTCON 寄存器包含以下中断标志位 : INT 管脚中断 PORTA 变化中断 Timer0 溢出中断 TX01I81xx www.xdssemi.com /033
PIR1 中包含着外围中断标志位 PIE1 中包含着其对应的中断使能位 外部中断包括 INT 管脚进来的或者 PORTA 变化中断的延时一般为 3 到 4 个指令周期 具体视中断发生的实际 情况而定 IOC-RA0 IOCA0 IOC-RA1 IOCA1 IOC-RA2 IOCA2 IOC-RA3 IOCA3 IOC-RA4 IOCA4 IOC-RA5 IOCA5 T0IF T0IE Wakeup (if in sleep mode) TMR2IF TMR2IE INTF INTE RAIF RAIE Interrupt to CPU EEIE EEIF PEIE GIE CKMEAIE CKMEAIF 图 12.1 中断产生电路架构框图 12.1. 中断过程中的现场保存 在中断过程中, 只有返回 PC 被自动保存在堆栈上 一般来说, 用户可能需要保存重要的寄存器值在堆栈 上, 例如 W,STATUS 寄存器等 这些必须由软件来完成 临时寄存器 WTEMP 和 STATUSTEMP 应该被放 置在 GPR 的最后 64byte 里 这 64 个 GPR 落在两个页区间, 因此可以稍微节省代码 TX01I81xx www.xdssemi.com /034
13. 睡眠省电模式 芯片在执行完 SLEEP 指令后进入睡眠状态 为了达到最低睡眠功耗, 软件应该将所有 IO 置高或低, 而且没有外部电路从 IO 耗电 I/O 作为输入的, 外部电路应将其拉高或拉低, 避免翻转耗电 /MCLR 应该在高电平 13.1. 唤醒模式 以下事件可以唤醒芯片 : /MCLR 管脚上有外部复位 WT 超时 RA2/INT 管脚上有中断,PORTA 变化或其他外围中断清看门狗指令 CLRWT SLEEP 会清除看门狗计数器 在使能了看门狗的情况下,MCU 睡眠时看门狗溢出事件可以作为一个唤醒源, 而 MCU 正常工作时作为一个复位源 13.2. 看门狗唤醒 看门狗工作在内部慢时钟 (32KHz), 它是一个 10 位的计数器, 和定时器 0 共用一个 8 位的预分频器, 使能位位于配置寄存器 UCFG0 的第 3 位,WTEN, 为 1 时表示使能看门狗, 为 0 时禁止 清看门狗指令 CLRWT SLEEP 会清除看门狗计数器 在使能了看门狗的情况下,MCU 睡眠时看门狗溢出事件可以作为一个唤醒源, 而 MCU 正常工作时作为一个复位源 TX01I81xx www.xdssemi.com /035
14. I/O 端口 本芯片共包含 6 个 GPIO 这些 IO 除了作为普通输入 / 输出端口以外还通常具备一些与内核周边电路通讯的功能, 具体见下 14.1. PORTA 端口和 TRISA 寄存器 PORTA 是一个 6 位双向端口 与其相应的进出方向寄存器就是 TRISA 寄存器 ( 不过注意到这里第 3 位没有用到, 因为 PORTA[3] 为单输入方向端口 在 TRIASA 寄存器中将某一位设置为 1 会将该对应 PORTA 端口设置为输入端口 ( 此时, 输出驱动电路会被关断 ) 反之, 将某一位设置为 0 会将该对应 PORTA 端口设置为输出端口 在置为输出端口时, 输出驱动电路会被打开, 输出寄存器里的数据会被放置到输出端口 在 PORTA 上进行读动作时,PORTA 内容会是反映输入端口的状态 在 PORTA 上进行写动作时,PORTA 内容会被写入输出寄存器 所有的写操作都是 读 - 更改 - 写 这样一个微流程, 即数据被读, 然后更改, 再写入输出寄存器的过程 当 MCLRE 为 1 时,PORTA[3] 读的值为 0 14.2. 端口的其他功能 芯片在 PORTA 的每个端口都一个状态变化中断选项和弱上拉选项 14.2.1. 弱上拉 PORTA 的每个端口 ( 除了 PORTA[3]) 都有一个可以单独设置的内部弱上拉功能 控制 WPUAx 寄存器里的位就可使能或关断这些弱上拉电路 当 GPIO 被设置为输出时, 这些弱上拉电路会被自动关断 弱上拉电路在上电复位期间可以被置为关断 这是由 OPTION 寄存器中的 /PAPU 位决定的 PORTA[3] 内部也有弱上拉功能, 它是在将 PORTA[3] 设置为 /MCLR 功能时自动使能的 当 PORTA[3] 被设置为 GPIO 时, 该弱上拉电路被自动关断 14.2.2. 状态变化中断 PORTA 的每个端口都可以被单独设置成一个中断源 ( 端口状态变化触发中断 ) 控制 IOCAx 寄存器里的位就可使能或关断这些端口的中断功能 端口状态变化触发中断的功能在上电复位时是无效的 当端口状态变化触发中断的功能被使能时, 当前端口电平值会被与上次读动作所读取数据寄存器的旧值作对比 所有错误匹配结果会被或在一起形成中断标志位 INTCON 寄存器中的 RAIF 标志位 该中断可以将芯片从睡眠状态中唤醒 用户需要在中断服务程序中执行以下程序来清除该标志位 : A) 对 PORTA 进行一次读或写得动作, 这将结束任何错误匹配的状态 B) 清零 RAIF 标志位 错误匹配的条件会一直设置 RAIF 位 对 PORTA 做一次读就可以结束任何错误匹配的状态, 使得 RAIF 能 TX01I81xx www.xdssemi.com /036
被清零 数据寄存器里保持的上一次读的值不会被 /MCLR 或低电压复位所影响 只要错误匹配状态存在,RAIF 位就会被置 1 14.2.3. 端口描述 PORTA 的每个端口都包含着不同的复用功能 其具体功能和控制在这一节里描述 14.2.3.1. PORTA[0] 图 14.1 描述了此端口的内部电路结构 PA[0] 可以被配置为以下功能端口 : GPIO 调试串口时钟 V ata Bus WR WPUA CLK /RAPU R WPUA V WR PORT A CLK WR TRISA CLK R TRISA R PORT A 3 WR IOCA R IOCA CLK R PORTA Interrupt on change TX01I81xx www.xdssemi.com /037
图 14.1 PA0 架构框图 14.2.3.2. PORTA[1] 图 14.2 描述了此端口的内部电路结构 PA[1] 可以被配置为以下功能端口 : GPIO 调试串口数据 TX01I81xx www.xdssemi.com /038
V ata Bus WR WPUA CLK /RAPU R WPUA V WR PORTA CLK WR TRISA CLK R TRISA R PORTA 3 WR IOCA R IOCA CLK R PORTA Interrupt on change 图 14.2 PA1 架构框图 14.2.3.3. PORTA[2] 图 14.3 描述了此端口的内部电路结构 PA[2] 可以被配置为以下功能端口 : GPIO TX01I81xx www.xdssemi.com /039
外部中断输入 TIMER0 外部时钟源 V ata Bus WR WPUA CLK /RAPU R WPUA V WR PORTA CLK WR TRISA CLK R TRISA R PORTA 3 WR IOCA R IOCA CLK R PORTA Interrupt on change T0CKI 图 14.3 PA2 架构框图 14.2.3.4. PORTA[3] 图 14.4 描述了此端口的内部电路结构 PA[3] 可以被配置为以下功能端口 : TX01I81xx www.xdssemi.com /040
数字输入 外部复位 V MCLRE Weak MCLRE ata Bus Reset MCLRE R TRISA R PORTA 3 WR IOCA CLK R IOCA R PORTA Interrupt on change 图 14.4 PA3 架构框图 14.2.3.5. PORTA[4] 图 14.5 描述了此端口的内部电路结构 PA[4] 可以被配置为以下功能端口 : TX01I81xx www.xdssemi.com /041
GPIO 指令时钟输出 模拟测试信号输入输出 Analog Input Mode V ata Bus WR WPUA CLK /RAPU TO EEPROM R WPUA Fosc/4 V WR PORTA CLK CLKOUT Enable CLKOUT Enable CLKOUT Enable WR TRISA CLK INTOSC Analog Input Mode R TRISA R PORTA 3 WR IOCA R IOCA CLK R PORTA Interrupt on change 图 14.5 PA4 架构框图 TX01I81xx www.xdssemi.com /042
14.2.3.6. PORTA[5] 图 14.6 描述了此端口的内部电路结构 PA[5] 可以被配置为以下功能端口 : GPIO V ata Bus WR WPUA CLK /RAPU R WPUA V WR PORTA CLK WR TRISA CLK R TRISA R PORTA 3 WR IOCA R IOCA CLK R PORTA Interrupt on change 图 14.6 PA5 架构框图 TX01I81xx www.xdssemi.com /043
15. 芯片的电气特性 15.1. 内置高频振荡器 (Internal High Frequency Osc) Symbol 特性最小值典型最大值单位条件 / 备注 Fosc ( 校准 ) 频率 (1) 15.84 16 16.16 MHz 校准偏差 频率容差 ±1%* -- 1.8 ~ 5.5V, 27C ±3%* -- 0~70 C, 3v * 设计参考值 注 1: 为了确保振荡器的容差, 必须尽量靠近器件在 V 和 VSS 之间连接去耦电容 建议并联一个 1uF 电容 15.2. 内置低频振荡器 (Internal Low Frequency Oscillator) 此低频振动器有双模模式, 一种模式下振动频率为 32KHz, 另一种模式下振动频率为 256KHz 振荡频率模式由 OSCCON 寄存器中的 LFMO 位控制,0 为 32KHz 模式,1 为 256KHz 模式 由于 WT 固定使用 32KHz, 固此位并无实际意义 Symbol 特性最小值典型最大值单位条件 / 备注 Sosc 慢时钟频率 32 KHz 芯片偏差 ±5%* -- 1.8 ~ 5.5V, 27C ±15%* -- 0~70 C, 3V 15.3. 低电压侦测 / 复位电路 (LV/LVR) 电气参数最小值典型最大值单位条件 / 备注 1.6 1.8 2.0 LVR * 设计参考值 1.8 2.0 2.2 2.0 2.2 2.4 2.6 2.8 3.0 V 15.4. I/O PA 电路 电气参数最小值典型最大值单位条件 / 备注 VIL 0 0.3*V V TX01I81xx www.xdssemi.com /044
VIH 0.7*V V V IOL 14 20 26 ma V =5V V OL=0.5V IOH 14 20 26 ma V =5V V OH=4.5V 上拉电阻 R PH 25 5V kω 35 3.3V 15.5. 总体工作电流 (Ivdd) 电气参数 最小值 典型 最大值 单位 条件 / 备注 正常模式 330 ua 4MHz@3.3V 休眠模式 (Sleep,WT ON) 3 ua 3.3V 休眠模式 (Sleep,WT OFF) 0.85 ua 3.3V TX01I81xx www.xdssemi.com /045
16. MCU 的指令架构 本芯片采用精简指令集架构 16.1. 指令集列表 以下是各指令的描述 汇编语法 功能 运算 状态位 BCR R, b Bit clear 0-> R(b) NONE BSR R, b Bit set 1-> R(b) NONE BTSC R, b Bit test, skip if 0 Skip if R(b)=0 NONE BTSS R, b Bit test, skip if 1 Skip if R(b)=1 NONE NOP No operation None NONE CLRWT Clear WT 0-> WT /PF, /TF SLEEP ENTER SLEEP MOE 0-> WT, STOP OSC /PF, /TF STTM Store W TO TMOE W-> TMOE NONE CTLIO R Control IO direction reg W-> IOIRr NONE STR R(MOVWF) Store W to reg W-> R NONE LR R, d(movf) Load reg to d R-> d Z SWAPR R,d Swap halves reg [R(0-3)R(4-7)]-> d NONE INCR R, d Increment reg R+ 1-> d Z INCRSZ R, d Increment reg, skip if 0 R+ 1-> d NONE AWR R, d Add W and reg W+ R-> d C, HC, Z SUBWR R, d Sub W from reg R- W-> d R+ /W+ 1-> d C, HC, Z ECR R, d ecrement reg R- 1-> d Z ECRSZ R, d ecrement reg, skip if 0 R- 1-> d NONE ANWR R, d AN W and reg R& W-> d Z IORWR R, d Inclu.OR W and reg W R-> d Z XORWR R, d Exclu.OR W and reg W^ R-> d Z COMR R, d Complement reg /R-> d Z RRR R, d Rotate right reg R(n)-> R(n-1), C-> R(7), R(0)-> C C RLR R, d Rotate left reg R(n)-> R(n+1), C-> R(0), R(7)-> C C CLRW Clear working reg 0-> W Z CLRR R Clear reg 0-> R Z TX01I81xx www.xdssemi.com /046
RETI Return from interrupt Stack-> PC,1-> GIE NONE RET Return from subroutine Stack-> PC NONE LCALL N Long CALL subroutine N-> PC, PC+1-> Stack NONE LJUMP N Long JUMP address N-> PC NONE 注意 : LWI I(MOVLW) Load immediate to W I-> W NONE ANWI I AN W and imm W& I-> W Z IORWI I Inclu.OR W and imm W I-> W Z XORWI I Exclu.OR W and imm W^ I-> W Z RETW I Return, place imm to W Stack-> PC, I-> W NONE AWI I Add imm to W W+I-> W C, HC, Z SUBWI I Subtract W from imm I-W-> W C, HC, Z 1. 在 TX-F01l81xx 系列芯片里,TMOE 寄存器是指 OPTION, 即 STTM 指令的操作是把 W 存到 OPTION; Table1, OP Code Field escription Field escription R(F) SFR/GPR address W Working register b Bit address within the 8-bit register/ram I/Imm(k) Immediate data X on t care, may be 0 or 1 estination select d 0: store result in W 1: store result in register/ram N Immediate program address PC Program counter TMOE SFR TMOE IOIRr SFR IOIR, r can be A, B, C C Carry bit HC Half carry Z Zero flag /PF Power down flag /TF Time out flag TX01I81xx www.xdssemi.com /047
17. 芯片封装信息 本芯片采用 SOP-8 封装方式, 具体封装尺寸信息如下 : SOP-8 封装尺寸如下 : Symbol imensions In Millimeters imensions In Inches Min Max Min Max A 1.350 1.750 0.053 0.069 A1 0.100 0.250 0.004 0.010 A2 1.350 1.550 0.053 0.061 b 0.330 0.510 0.013 0.020 c 0.170 0.250 0.006 0.010 4.700 5.100 0.185 0.200 E 3.800 4.000 0.150 0.157 E1 5.800 6.200 0.228 0.244 e 1.270 (BSC) 0.050 (BSC) L 0.400 1.270 0.016 0.050 TX01I81xx www.xdssemi.com /048
θ 0 8 0 8 附录 1, 文档版本历史 日期 版本 内容 2015-6-24 0.97 初版 2015-9-10 0.98 去掉多余寄存器 PR0 更新图 3.1 添加了 LFMO 描述,WT/PWRT 固定使用 32KHz 频率添加图 11.1 2015-9-15 0.99 更新脚位图,SOT-6 2015-9-16 1.00 删除 MSCKCON 的 REMO 位 2015-10-14 1.01 修改 15.3 小节 LVR 电压为 3 档 :2.0V, 2.2V, 2.8V 2015-11-10 1.02 修改 15.3 小节 LVR 电压为 4 档 :1.8/2.0/2.2/2.8V 更新图 4.4,BOR 复位时序 2015-11-12 1.03 加入 10.2,EEPROM 读步骤程序 EEPROM 改为 FLASH 修改 RAPU 为 PAPU 更新了 2.1.26 小节,PCL 增加 TX-F01l81xx 脚位图 - 1.04-2016-5-12 1.05 修改了数据 EEPROM 的写流程删掉 红外 相关字眼添加 TMOE 说明到指令列表明确说明 WT 固定使用 32K 时钟 2016-7-5 1.06 工作电流描述由 330uA 1MIPS@3.3V 改为 330uA 4MHz@3.3V 2016-7-28 1.07 加入系统时钟频率对应的电压范围 F SYS=8MHz: 1.8V~2.7V: F SYS=16MHz: 2.7V~5.5V 2016-11-15 1.08 添加 EEPROM 的初始化操作到第 10 节 TX01I81xx www.xdssemi.com /049
TX01I81xx www.xdssemi.com /050