- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断向量表
单片机的程序一般情况下上电之后是从0x0地址开始运行的,而0x0后面是关于硬件的一些对应的中断的入口地址。所以中断向量表其实就是硬件查表跳转表,相当于C语言的switch语句。如:
Switch(i)
{
Case 0: goto reset;
Case 1: goto int0 ;
….
}关于I的值就是硬件给出的中断向量。
2406中断向量表:
.ref _bad_trap
.ref _c_int0
.sect vectors ;自定义段名
_vector: ;向量表地址标识
RSVECT B _c_int0 ;C项目初始化入口地址
INT1 B _bad_trap ;没有用到的中断跳转到非法中断陷阱
INT2 B _bad_trap
INT3 B _PM6 ;有用到的中断,则写其实际中断的地址或标号
INT4 B _bad_trap ; PM 8 Int level 4 7
INT5 B _bad_trap ; PM A Int level 5 8
INT6 B _bad_trap ; PM C Int level 6 9
…….
.end
PAGE 0 : /* program memory */
VECS: origin = 00000h, length = 0007Fh
vectors : VECS PAGE = 0
这样就可以把中断向量表写到正确的地址。
.ref _bad_trap 这个标号外部没有定义,为什么还用.ref,而不是用..global?
因为_bad_trap在这里只是声明函数,它实际函数可能是.C文件里的bad_trap()函数。
CPU中断向量地址和外设中断向量PIV有什么不同?什么是外设中断向量PIV?
一个CPU中断包括好几个外设中断,如INT1包括了PDPINTA、PDPINTB、ADCINT、XINT1、XINT2、SPIINT、RXINT、TXINT、CANMBINT、CANERINT。其中任一一个外设发生中断请求并没有被蔽屏的话,都会进入INT1中断,然后再在INT1中断里判断是哪个外设发生了中断。
判断哪个外设发生中断有两种方式,一是查询各外设的中断标志位来判断是否发生了中断;另一种就是根据PIV的值查外设中断向量表跳转进相应的中断服务子程序。
中断的优先级是否固定不可变,还是说书中列出的是默认的优先级?
ADC、外部引脚、SPI、SCI、CAN邮箱、CAN错误有高低优先级选择,其它的优先级固定。
为什么同一个中断源里的中断还有不同的中断优先级?进的是同一个中断程序,不同优先级有什么作用?
这是为了同时发生中断时,决定CPU先响应哪个中断。
2008-2-27
前面的中断向量只是进入到CPU级中断跳转,可以对对应的中断标志位判断后再进对应的中断;其实硬件有个专门的外设中断PIV向量,从CPU级中断跳转进GSIR后,再根据外设中断PIV进相应中断。
用PIV中断向量来判断不同的外设中断时要两个中断向量表:
CPU中断向量表:0~40H地址的向量表,向量由硬件给出,跳转也由硬件完成。
外设中断向量表:可以存在程序区的任意区间,向量由PIV给出,跳转由程序计算后完成。
可以看出,CPU级中段主要是把中断分为不同的优先级,而PIV向量表主要是对应不同的外设的。
CPU级中断向量:
.sect vectors
_vector:
RSVECT B int0 ;复位
INT1 B GISR1 ;外部中断1通用服务子程序
INT2 B GISR2 ;外部中断2通用服务子程序
INT3 B GISR3 ;外部中断3通用服务子程序
INT4 B GISR4 ;外部中断4通用服务子程序
INT5 B GISR5 ;外部中断5通用服务子程序
INT6 B GISR6 ;外部中断6通用服务子程序
RESERVED B _bad_trap ;保留,分析中断用
SW_INT8 B _bad_trap ;软件中断8~16
SW_INT9 B _bad_trap ;
SW_INT10 B _bad_trap ;
SW_INT11 B _bad_trap ;
SW_INT12 B _bad_trap ;
SW_INT13 B
文档评论(0)