C51的中断号排序规则
来源:互联网 发布:snmp简单网络管理协议 编辑:程序博客网 时间:2024/06/06 09:42
在编写中断服务程序(ISR)的时候需要知道中断号,用于通知51内核,这个中断服务程序是为了响应哪个中断的。那么,从以上这句简单的描述可以看出,中断号必然对应于中断服务程序的入口地址,而入口地址又与中断向量(Interrupt Vector)有对应关系,所以:
(1)、中断号即是中断向量从小到大的编号,从0开始;
(2)、中断向量0x0000是上电复位,不计入中断向量的编号;
(3)、特别注意,有些中断源的默认中断优先级并不是中断向量从小到大的编号,所以默认的中断优先级并不能作为中断号使用。
什么是中断号
// Wake-up interrupt handlervoid resume_isr(void) interrupt WKUP_VECT{ EZUSB_CLEAR_RSMIRQ();}
↑,这是EZ-USB的唤醒中断的中断服务程序,其中”WKUP_VECT”就是Resume中断的中断号,中断号用关键词”interrupt”标记。
EZ-USB的中断号
在固件源代码中,中断号的声明是:
// 中断名称 中断号#define INT0_VECT 0#define TMR0_VECT 1#define INT1_VECT 2#define TMR1_VECT 3#define COM0_VECT 4#define TMR2_VECT 5#define WKUP_VECT 6#define COM1_VECT 7#define USB_VECT 8#define I2C_VECT 9#define INT4_VECT 10#define INT5_VECT 11#define INT6_VECT 12
文档中的描述:
可以看出,固件源码中的中断号和文档中的“Natural Priority”是不一致的,而和”Interrupt Vector”的从小到大的排列顺序是一致的。
这里,没有中断向量0x0000的中断,在标准的C51中他被用作上电复位,下面再举一个中断向量0x0000的例子。
C8051F34X的中断号
这是SILLICON LABS的C8051F34X芯片的中断号,他包含0x0000中断向量,但是不计入“排序”。官方给出的UART0的中断服务程序证明了这一点:
void UART0_Interrupt (void) interrupt 4{ if (RI0 == 1) { if( UART_Buffer_Size == 0) { // If new word is entered UART_Input_First = 0; } RI0 = 0; // Clear interrupt flag Byte = SBUF0; // Read a character from UART if (UART_Buffer_Size < UART_BUFFERSIZE) { UART_Buffer[UART_Input_First] = Byte; // Store in array UART_Buffer_Size++; // Update array's size UART_Input_First++; // Update counter } } if (TI0 == 1) // Check if transmit flag is set { TI0 = 0; // Clear interrupt flag if (UART_Buffer_Size != 1) // If buffer not empty { // If a new word is being output if ( UART_Buffer_Size == UART_Input_First ) { UART_Output_First = 0; } // Store a character in the variable byte Byte = UART_Buffer[UART_Output_First]; if ((Byte >= 0x61) && (Byte <= 0x7A)) { // If upper case letter Byte -= 32; } SBUF0 = Byte; // Transmit to Hyperterminal UART_Output_First++; // Update counter UART_Buffer_Size--; // Decrease array size } else { UART_Buffer_Size = 0; // Set the array size to 0 TX_Ready = 1; // Indicate transmission complete } }}
1 0
- C51的中断号排序规则
- C51 单片机的中断号以及中断向量
- 关于C51的中断编程
- C51中断
- C51中断
- C51编译器扩展的关键词 & C51中断函数的写法
- 51单片机外部中断的C51编程
- c51中断编程
- C51单片机中断定义
- c51外部中断
- C51外部中断
- C51中断函数格式
- 关于C51的中断函数要注意的几个问题
- 关于C51的中断函数要注意的几个问题
- 第1358篇:关于C51的中断编程
- c51单片机上的发送中断标志位
- 关于C51的中断函数要注意的几个问题 -----中断中调用函数参数错误问题
- C51中的中断服务程序
- mongodb的简单操作
- 时间,你好!
- 黑马程序员-[OC]学习之旅-NSFileManager、NSNumber、NSDate
- 【more effective c++读书笔记】【第1章】基础议题(1)
- CentOS_Linux搭建ftp服务器详细教程
- C51的中断号排序规则
- Android 背景模糊
- win+ubuntu双系统安装后无法进入win7解决方法
- 从视频文件提取音频并存储为MP3格式文件
- xpath提取多个标签下的text
- Ubuntu 12.10安装交叉编译器arm-none-linux-gnueabi-gcc
- Android 图片缓存处理
- [LeedCode OJ]#85 Maximal Rectangle
- 更新至OSX 10.10后MBA外接网卡无法使用的解决