OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9147|回复: 2

学习笔记 "中断" 第4季

[复制链接]

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2012-6-10 03:09:23 | 显示全部楼层 |阅读模式
 好了,今天来学学中断的优先的用法.

对于学过51的同学来说,以上的三季学到了,就可用ARM的中断了.下面只是好好学习,天天UP而已.说真的,我做电路还真没想过要做到抢先中断的,
就是原来的的中断正在执行,再来一个更高级别的中断请求,就会挂起正在执行的中断,来执行优先级更高的中断服务程序.STC有些型号的蕊片好象
有,但我从来没用过.但对于STC来说,ARM是超级单片机了.我来学这个主要将来用来做主控蕊片的.我来说说设计方面的题外话.我主要业务是设计
非标准生产设备的,当我设计一个系统的时候,很喜欢将各个功能分成一个个模块,每个模块都有两个单片机,一个用来做通信用的,为另一个主蕊片做
通信服务,主蕊片主力做实时处理,在空闲的时间将要发的数据和收到的数据和 通信 蕊片做个交换,我用的都是3.5元一个的44脚帖片封装的STC,很多
脚没有用就自己搞个并行通信的I8C(I2C的并行版,偶山寨的).各个模块之间由一个主蕊片汇总,将要显示的都显示出去,要做中转的中转出去.总之是一
个邮局的效果.总觉得人机介面没那么拉风,所以现在搞个ARM来做个拉风的人机介面.这就是我最初学ARM的目的.
跑题了,我们言归正传.
众所周知的原因,厂家的偷工减料的那些事.256个优先中断,128个抢先中断.最后我们只能得到8个抢先中断(我们学习板上的ARM蕊片).
那如何来使用呢?
是这样的.

首先:  (声明 一下,以下的X是二进制的0和1,不是骂人的哈)

第一种使用:

你看 这4位     XXXX  ,   第一种使用方法,我们将理解成我们常用的先到先得的原则,那个中断先执行,后到的在后边排队.如果超过一个中断在排队,
那么,数字小的先排前边,数字大的排后边,总之没执行之前,都在外边按数字的大小排队,数字越小,就越靠前.  如设成中断优先值为 0010 先排队,在排
队期间, 有一个中断优先值为 0001的中断到了, 那么系统会将中断优先值为 0001的排前边,等他执行完中断服务程序后才到中断优先值为 0010 的中
断.如后边不断的还有其它中断进来,就如些类推.


第二种使用:

我们将XXXX分开两档.  X  XXX    红色的X代表更高的优先级,蓝色的X的作用和第一种使用方法一样. 如果正在执行的中断优先值的最高位比后来到的
中断的中断优先值的最高位大,则后来的中断可以打断前边正在执行的中断,挂起原先的中断,先执行这个中断后再执行之前挂起的中断. 

如:    中断优先值 为  1  010  正在执行,现在中断优先值 为  0  010  的中断到了,则系统会先挂起中断优先值 为  1  010的中断,先执行中断优先值 为  0  010  的中断.

又如:   中断优先值 为  1  010  正在执行,现在中断优先值 为  1  000  的中断到了,则系统不会中断优先值 为  1  010的中断,而中断优先值 为  1  000 的中断则在外边排队.看到没有,蓝色的数字的都是排队的时候才用来定位置的前后的.而红色的字就牛B了,他能打断优先级底的中断而先执行他自己 的中断.

第三种使用:

和一边一样样,只是两档的位数不同了,   XX  X X   红X有两位了,蓝X只有一位了.红蓝X的用法和上边一样,只是我们可以设更多级的抢断优先级了,如 00,01,10,11 对了,可以有4种优先级了.只有中断优先值红X的数比之前正在执行的中断优先值红X的数更小就能打断之前的中断优先执行这个中断优先值红X小的.大家没明白??我打个比方

如:   中断优先值为1100中断正在执行,中断优先值为1000的中断到了,系统挂起中断优先值为1100的中断,执行中断优先值为1000的中断,正在执行间又来了个中断优先值为0100的中断,则系统又会挂起中断优先值为1000的中断,而执行中断优先值为0100的中断.当然如还有中断优先值为0000的中断到了,系统一样会挂起之前中断优先值为0100的中断,而执行中断优先值为0000的中断.他们叫这个叫做中断嵌套.

第四种使用方法:

和第三种使用方法一样. 只是全是红X多一个而已.蓝X的使用也和上边一样,只是只有一位而已.

第五种使用方法:
 
同第四种使用方法一样,只是这次全是红X而已,这样就是红X小的打断红X大的,同样的红X在外边排队.排队也是红X小的排前边.比正在执行的小就打断正在执行的中断转而执行自己的.

那么,这三X是放那个寄存器呢,在存在   IPR[0]~IPR[15].用法请看原子老大出的书<<例说STM32>>第68页的上半段 ,没有的找他买就是了.要注意的是,原子老大没写上去的(师博就是要留一手呀留一手):对应的8位中,只有高4位有用.其它的位是没用的.就是上边所说的只能填最高位的4个X.


你分好上边的各个中断的优先级后,最后用SCB->AIRCR 定义几个位是红X,几个位是蓝X. 
 SCB->AIRCR 的第8位到第10位. 
如填 111 就表示 没有红X,就是上边所说的第一种使用方法.如如填 110 就表示有1个红X,3个蓝X,就是第一种使用方法.    如填 101 就表示 有2个红X,2个蓝X 第二种方法.   如填 100 就表示  就表示 有3个红X,1个蓝X 第三种方法.  如填 011 就表示  就表示 有4个红X,没有蓝X 第4种方法.


好了,到些为止,中断就学完了.还有几个寄存器,到时写个程式读出来玩一下就明白了.到此,ARM32我们就能用了.不容易呀.一个字,学得好累.

明天,我来做个大总结,将中断要用的代码全部写出来.此刻有望原子大大斧正一下.有错就改,免得学歪了.
我的工作就是天天在玩
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-6-10 08:27:17 | 显示全部楼层
这个比上两篇好了~没有打炮!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-5-7
在线时间
8 小时
发表于 2012-6-16 21:17:22 | 显示全部楼层
呵呵,楼主受教了啊,写的很好,很容易理解,谢谢啊!
耐心做事,好好做人。O(∩_∩)O!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 07:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表