为什么 INT0 的向量数是 1 而不是 datasheet 中的 2?
why the number of vector of INT0 is 1 not 2 as datasheet?
我正在使用 ATmega32 做中断
当我尝试做外部中断 0 的驱动程序时,遇到了一个问题
ATmega32 中的中断向量Table
ISR(vector)中的中断向量代码
在 iom32.h 代码中,我们看到 ((INT0_vect " _VECTOR(1) ")) 它是数字 1 但在数据 sheet 中我们看到数字是 2 ,为什么?
数据sheet以重置向量开始编号。但是不需要为重置向量明确定义(如 RESET_vect),因为它不会与 ISR() 一起使用。所以在header/AVRGCC实现中省略了它。
如果你编译这个
ISR(INT0_vect) { }
并查看中断向量table
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end>
4: 0c 94 5f 00 jmp 0xbe ; 0xbe <__vector_1>
从数据sheet.
可以看到__vector_1放在字节地址4处,对应字地址2
我正在使用 ATmega32 做中断 当我尝试做外部中断 0 的驱动程序时,遇到了一个问题
ATmega32 中的中断向量Table
ISR(vector)中的中断向量代码
在 iom32.h 代码中,我们看到 ((INT0_vect " _VECTOR(1) ")) 它是数字 1 但在数据 sheet 中我们看到数字是 2 ,为什么?
数据sheet以重置向量开始编号。但是不需要为重置向量明确定义(如 RESET_vect),因为它不会与 ISR() 一起使用。所以在header/AVRGCC实现中省略了它。
如果你编译这个
ISR(INT0_vect) { }
并查看中断向量table
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end>
4: 0c 94 5f 00 jmp 0xbe ; 0xbe <__vector_1>
从数据sheet.
可以看到__vector_1放在字节地址4处,对应字地址2