9. 中断
CH559芯片支持14组中断信号源,包括与标准MCS51兼容的6组中断:INT0、T0、INT1、T1、UART0、T2,以及扩展的8组中断:SPI0、TMR3、USB、ADC、UART1、PWM1、GPIO、WDOG,其中GPIO中断可以从7个I/O引脚中选择。
9.1 寄存器描述
表9.1.1 中断向量表
| 中断源 | 入口地址 | 中断号 | 描述 | 默认优先权顺序 |
|---|---|---|---|---|
| INT_NO_INT0 | 0x0003 | 0 | 外部中断0或LED控制卡中断: 当bLED_OUT_EN=0是外部中断0;当bLED_OUT_EN=1是LED控制卡中断 | 高优先权 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 低优先权 |
| INT_NO_TMR0 | 0x000B | 1 | 定时器0中断 | |
| INT_NO_INT1 | 0x0013 | 2 | 外部中断1 | |
| INT_NO_TMR1 | 0x001B | 3 | 定时器1中断 | |
| INT_NO_UART0 | 0x0023 | 4 | UART0中断 | |
| INT_NO_TMR2 | 0x002B | 5 | 定时器2中断 | |
| INT_NO_SPI0 | 0x0033 | 6 | SPI0中断 | |
| INT_NO_TMR3 | 0x003B | 7 | 定时器3中断 | |
| INT_NO_USB | 0x0043 | 8 | USB中断 | |
| INT_NO_ADC | 0x004B | 9 | ADC中断 | |
| INT_NO_UART1 | 0x0053 | 10 | UART1中断 | |
| INT_NO_PWM1 | 0x005B | 11 | PWM1中断 | |
| INT_NO_GPIO | 0x0063 | 12 | GPIO中断 | |
| INT_NO_WDOG | 0x006B | 13 | 看门狗定时器中断 |
表9.1.2 中断相关寄存器列表
| 名称 | Address | 描述 | 复位值 |
|---|---|---|---|
| IP_EX | E9h | 扩展中断优先级控制寄存器 | 00h |
| IE_EX | E8h | 扩展中断使能寄存器 | 00h |
| GPIO_IE | CFh | GPIO中断使能寄存器 | 00h |
| IP | B8h | 中断优先级控制寄存器 | 00h |
| IE | A8h | 中断使能寄存器 | 00h |
中断使能寄存器(IE):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | EA | RW | 全局中断使能控制位,该位为1并且E_DIS为0则允许中断;该位为0屏蔽所有中断请求 | 0 |
| 6 | E_DIS | RW | 全局中断禁用控制位,该位为1屏蔽所有中断请求;该位为0并且EA为1则允许中断。该位通常用于在flash-ROM操作期间临时禁止中断 | 0 |
| 5 | ET2 | RW | 定时器2中断使能位,该位为1允许T2中断;为0屏蔽 | 0 |
| 4 | ES | RW | 异步串口0中断使能位,该位为1允许UART0中断;为0屏蔽 | 0 |
| 3 | ET1 | RW | 定时器1中断使能位,该位为1允许T1中断;为0屏蔽 | 0 |
| 2 | EX1 | RW | 外部中断1使能位,该位为1允许INT1中断;为0屏蔽 | 0 |
| 1 | ET0 | RW | 定时器0中断使能位,该位为1允许T0中断;为0屏蔽 | 0 |
| 0 | EX0 | RW | 外部中断0和LED控制卡中断使能位,该位为1允许INT0/LED中断,由bLED_OUT_EN选择;为0屏蔽 | 0 |
扩展中断使能寄存器(IE_EX):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | IE_WDOG | RW | 看门狗定时器中断使能位,该位为1允许WDOG中断;为0屏蔽 | 0 |
| 6 | IE_GPIO | RW | GPIO中断使能位,该位为1允许GPIO_IE中使能的中断;为0屏蔽GPIO_IE中所有中断 | 0 |
| 5 | IE_PWM1 | RW | PWM1中断使能位,该位为1允许PWM1中断;为0屏蔽 | 0 |
| 4 | IE_UART1 | RW | 异步串口1中断使能位,该位为1允许UART1中断;为0屏蔽 | 0 |
| 3 | IE_ADC | RW | ADC模数转换中断使能位,该位为1允许ADC中断;为0屏蔽 | 0 |
| 2 | IE_USB | RW | USB中断使能位,该位为1允许USB中断;为0屏蔽 | 0 |
| 1 | IE_TMR3 | RW | 定时器3中断使能位,该位为1允许Timer3中断;为0屏蔽 | 0 |
| 0 | IE_SPI0 | RW | SPI0中断使能位,该位为1允许SPI0中断;为0屏蔽 | 0 |
GPIO中断使能寄存器(GPIO_IE):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bIE_IO_EDGE | RW | GPIO边沿中断模式使能: 该位为0选择电平中断模式,GPIO引脚输入有效电平则bIO_INT_ACT为1并一直请求中断,GPIO输入无效电平时 bIO_INT_ACT为0并取消中断请求;该位为1选择边沿中断模式,GPIO引脚输入有效边沿时产生中断标志bIO_INT_ACT并请求中断,该中断标志无法软件清零,只能在复位时或电平中断模式下或进入相应的中断服务程序时被自动清零 | 0 |
| 6 | bIE_RXD1_LO | RW | 该位为1使能UART1接收引脚中断(电平模式低电平有效,边沿模式下降沿有效);该位为0禁止。iRS485模式下选择XA/XB差分输入,非iRS485模式下根据bIER_PIN_MOD1=1/0选择RXD1或RXD1_引脚 | 0 |
| 5 | bIE_P5_5_HI | RW | 该位为1使能P5.5中断(电平模式高电平有效,边沿模式上升沿有效);该位为0禁止 | 0 |
| 4 | bIE_P1_4_LO | RW | 该位为1使能P1.4中断(电平模式低电平有效,边沿模式下降沿有效);该位为0禁止 | 0 |
| 3 | bIE_P0_3_LO | RW | 该位为1使能P0.3中断(电平模式低电平有效,边沿模式下降沿有效);该位为0禁止 | 0 |
| 2 | bIE_P5_7_HI | RW | 该位为1使能P5.7中断(电平模式高电平有效,边沿模式上升沿有效);该位为0禁止 | 0 |
| 1 | bIE_P4_1_LO | RW | 该位为1使能P4.1中断(电平模式低电平有效,边沿模式下降沿有效);该位为0禁止 | 0 |
| 0 | bIE_RXD0_LO | RW | 该位为1使能UART0接收引脚中断(电平模式低电平有效,边沿模式下降沿有效);该位为0禁止。根据bUART0_PIN_X=0/1选择RXD0或RXD0_引脚 | 0 |
中断优先级控制寄存器(IP):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | PH_FLAG | R0 | 高优先级中断正在执行标志位 | 0 |
| 6 | PL_FLAG | R0 | 低优先级中断正在执行标志位 | 0 |
| 5 | PT2 | RW | 定时器2中断优先级控制位 | 0 |
| 4 | PS | RW | UART0中断优先级控制位 | 0 |
| 3 | PT1 | RW | 定时器1中断优先级控制位 | 0 |
| 2 | PX1 | RW | 外部中断1的中断优先级控制位 | 0 |
| 1 | PT0 | RW | 定时器0中断优先级控制位 | 0 |
| 0 | PX0 | RW | 外部中断0和LED控制卡中断的中断优先级控制位 | 0 |
扩展中断优先级控制寄存器(IP_EX):
| 位 | 名称 | 访问 | 描述 | 复位值 |
|---|---|---|---|---|
| 7 | bIP_LEVEL | R0 | 当前中断嵌套等级标志位,该位为0则表示无中断或者嵌套2级中断;该位为1则表示当前嵌套1级中断 | 0 |
| 6 | bIP_GPIO | RW | GPIO中断优先级控制位 | 0 |
| 5 | bIP_PWM1 | RW | PWM1中断优先级控制位 | 0 |
| 4 | bIP_UART1 | RW | UART1中断优先级控制位 | 0 |
| 3 | bIP_ADC | RW | ADC中断优先级控制位 | 0 |
| 2 | bIP_USB | RW | USB中断优先级控制位 | 0 |
| 1 | bIP_TMR3 | RW | Timer3中断优先级控制位 | 0 |
| 0 | bIP_SPI0 | RW | SPI0中断优先级控制位 | 0 |
IP和IP_EX寄存器用于设定中断优先级,如果某位被置1,则对应的中断源被设定为高优先级;如果某位被清0,则对应的中断源被设为低优先级。对于同级中断源,系统有默认的优先权顺序,默认优先极顺序如表9.1.1所示。其中PH_FLAG和PL_FLAG组合表示当前中断的优先级。
表9.1.3 当前中断优先级状态指示
| PH_FLAG | PL_FLAG | 当前中断优先级状态 |
|---|---|---|
| 0 | 0 | 当前无中断 |
| 0 | 1 | 当前正在执行低优先级中断 |
| 1 | 0 | 当前正在执行高优先级中断 |
| 1 | 1 | 意外状态,未知错误 |