http://www.analogcn.com/Article/wz3/201202/20120213114321.html
何为中断?举一个简单的例子:你正在家中看书,突然电话铃响了,你放下书,去接电话,和来电话的人交谈,通完电话,回来继续看你的书,这就是生活中的“中断”现象—就是正常的工作过程被外部的事件打断了,上面的例子其实已经包含了中断的两大要素:中断源和中断响应,中断源即是“电话铃响了”,中断响应即是“放下书去接电话,然后回来继续看书”。如果你学过其他的单片机嵌入式系统,像51、AVR、ARM等等,那么你对BF533的中断系统应该也会很快熟悉,因为原理基本上是一样的,只是程序及寄存器的控制不同而已。中断的目的是为了让CPU对内部或外部的突发事件及时地作出响应,并执行相应的程序,在嵌入式系统中,它有着相当重要的作用。
下面进入BF533 GPIO中断的学习,ADSP-BF53x 的16 个PF 接口都可以做为外部中断来使用。要使用PF 口的外部中断功能,分为下面几个步骤:
- 需要为PF 脚选择一个中断源;
- 设置中断触发方式;
- 为中断设置一个中断优先级;
- 并且使能中断。
首先是选择中断源,要使用BF533的16个PF口作为中断触发源,可以通过下图中的FIO_MASKA_D寄存器进行设置,当相应位设置为1时,该位对应的IO口中断被使能。例如要设置PF0和PF1作为中断源,设置语句如下:*pFIO_MASKA_D |= PF0|PF1;
接着是设置中断触发方式,通过下图中的FIO_EDGE寄存器进行设置,FIO_EDGE寄存器16位分别对应16个PF口,在图片的左上角,我们可以看到当某一位设置为0时,代表该位的触发方式为电平触发,当某一位设置为1时,代表该位的触发方式为边沿触发。例如要设置PF1和PF0端口为边沿触发,设置语句为:*pFIO_EDGE |= PF0|PF1;
第三步是为中断设置一个中断优先级,设置该功能的寄存器如下图:
该控制功能通过3个32位的寄存器来进行设置,通过查找,我们可以找到PF口对应的设置位在SIC_IAR2中的12~15位,其默认配置值为5,根据其配置值,再加上下表进行对照,我们就可以知道PF口的中断优先级默认配置为IVG12,通过改变SIC_IAR2上对应位的值,就可以改变PF口的中断优先级啦。例如要设置为IVG7,那么SIC_IAR2上的对应位就应设置为0000.
最后一步是中断使能,中断使能通过SIC_IMASK寄存器进行设置,同样是在图片的左上角,我们可以看到设置值对应的意义,0代表中断潜伏,1代表中断使能。我们可以看到PFA的中断使能位在第19位,设置该位为1使能PFA端口,如下语句:*pSIC_IMASK = 0x00080000;
好了,到此PF口中断设置的步骤就完成了,基本上了解了以上寄存器如何设置,你就可以熟悉地使用PF口的中断功能啦