- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。
先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的:
七个中断优先级
每一个中断源都有一个可以设置的级别
高优先级中断的可以嵌套低优先级中断
复位后可屏蔽中断默认优先级为1
同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应
注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断
下面直接进入正题,看看怎么设置中断优先级:
XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。
分组的规则是这样的:中断地址位7到位3相同的中断为一组,比如MC9SX128.h中
这些中断的位7到位3都为D,他们就被分成了一组。0~F正好16个组。
INT_CFADDR就是上面说到的用来设置组别的寄存器:
我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。
设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为
这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。对应规则是这样的:中断地址的低四位除以2
比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3
往INT_CFDATAx中写入0~7就能设置相应的中断优先级了
拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。因此中断优先级要SCI0PORTHPIT0。
我们先要从头文件中找出相应中断的地址:
PIT0【7:4】位为7,选择中断组:
INT_CFADDR=0x70;
【3:0】为A,A/2=5,设置为第5优先级那么
INT_CFDATA5=5;
porth【7:4】位为C,选择中断组:
INT_CFADDR=0xC0;
【3:0】为C,C/2=6,设置为第6优先级那么
INT_CFDATA6=6;
Sci0【7:4】位为D,选择中断组:
INT_CFADDR=0xD0;
【3:0】为6,6/2=3,设置为第7优先级那么
INT_CFDATA3=7;
最终程序为:
void Interrupt_Priority_Set(void){
INT_CFADDR=0x70;
INT_CFDATA5=0x05;
INT_CFADDR=0xC0;
INT_CFDATA6=0x06;
INT_CFADDR=0xD0;
INT_CFDATA3=0x07;
}
还要注意一点,如果要实现中断嵌套,需要在低级中断中再开一次总中断,比如
这样才能实现中断的嵌套
QufuNormalUniversity
SonicTeam2011
原创力文档


文档评论(0)