第3节 EPORT模块的解释
推荐给好友
打印
加入收藏
更新于2009-01-09 20:11:52

        利用M5213EVB开发板上 用于请求中断的三个按钮 ,实例代码展示了EPORT模块是如何工作的。代码示范了如何配置和使用flash模块,使得编程人员可以很快地把它包含到他们的项目中。
        MCF5213的EPORT其实就是7个外部中断引脚的集合体,每个引脚都可以独立地配置为低电平触发或边沿触发。如果选择边沿触发,还可以指定是上升沿、下降沿或两种都触发。施密特触发逻辑已经集成到该端口的设计中。如果配置为边沿触发,上升/下降过渡比较慢时可以避免产生假中断。
        在低功耗运行的DOZE或WAIT模式下,EPORT的功能仍是完整的。事实上,它们可以使处理器跳出这些模式。在STOP模式下也一样,只不过因为所有的内部时钟被禁止,导致EPORT失去与边沿触发中断同步的能力;因此在STOP模式下只能检测到电平触发的中断。
        为了将一个EPORT引脚用作外部中断请求源,必须通过GPIO引脚分配寄存器将该引脚配置为 EPORT功能并设置EPORT寄存器中 相应的输入 位。在EPORT模式下,不再需要GPIO输入/输出寄存器。在GPIO模式下,EPORT输入/输出寄存器也不会产生任何影响。
3.1 实例:EPORT模块的实例学习
        实例代码使用了M5213EVB上的以下外部硬件:
  • ● ABORT按钮
  • ● SW1按钮
  • ● SW2按钮
  • ● LED[1:4]
        可以根据以下方法按三个按钮中的任一个来测试实例代码: ABORT按钮的中断级别最高(level 7)。
  • ● 每次执行IRQ7中断服务例程(ISR)时,0x05在LED上显示一段时间。 SW2按钮的中断级别居中(level 5)。
  • ● 每次执行IRQ5中断服务例程(ISR)时,0x0C在LED上显示一段时间。 SW1按钮的中断level居中(level 4)。
  • ● 每次执行IRQ4中断服务例程(ISR)时,0x03在LED上显示一段时间。 表1给出了一些按钮组合。执行中断时会出现两种情况:
  • (1)当中断请求的IRQ级别高于当前ISR的级别时,当前中断被新的中断请求切换。新中断完成后,原来的中断从被切换前的那行代码处继续执行。
  • (2)当中断请求的IRQ级别低于当前ISR的级别时,当前中断继续执行完成后,才开始执行未处理中断。
表1  EPORT演示软件的实例


3.2 实例:配置CFM模块
        表2列出了EPORT的寄存器。
表2 EPORT寄存器

        在实例代码中,三个引脚都被设置为检测上升沿事件触发,并根据IRQ引脚中断源改变M5213EVB上LED的显示内容。

3.3 寄存器的配置
        本节介绍了会影响整个EPORT模块的寄存器配置,并给出了相关代码。

3.4 NQ口的引脚分配寄存器
        下面的代码是用来将PNQPAR配置为EPORT功能,参见图1所示。
                /* 使能该端口的IRQ信号 */
                MCF_GPIO_PNQPAR = 0
                | MCF_GPIO_PNQPAR_IRQ4_IRQ4
                | MCF_GPIO_PNQPAR_IRQ5_IRQ5
                | MCF_GPIO_PNQPAR_IRQ7_IRQ7;


图1 NQ口引脚分配寄存器(PNQPAR)
       
        3.4.1 EPORT引脚分配寄存器
        可使用以下代码配置EPPAR。对该寄存器的修改见图2所示。
                /* 设置EPORT为上升沿检测 */ MCF_EPORT_EPPAR = 0
                | MCF_EPORT_EPPAR_EPPA4_RISING
                | MCF_EPORT_EPPAR_EPPA5_RISING
                | MCF_EPORT_EPPAR_EPPA7_RISING;


图2 EPORT引脚分配寄存器

        3.4.2 EPORT中断使能寄存器
        为了写入图3所示的值,程序可使用以下代码配置EPPAR。
                /* 清空当前EPORT中触发的事件 */
                MCF_EPORT_EPIER = 0
                | MCF_EPORT_EPIER_EPIE4
                | MCF_EPORT_EPIER_EPIE5
                | MCF_EPORT_EPIER_EPIE7;


图3 EPORT端口中断使能寄存器

        3.4.3 中断屏蔽寄存器
        为了对IMRL写入图4所示的值,可使用以下代码。
                /* 在中断控制器内使能相应中断 */
                MCF_INTC_IMRL &= ~(0
                | MCF_INTC_IMRL_MASK4
                | MCF_INTC_IMRL_MASK5
                | MCF_INTC_IMRL_MASK7
                | MCF_INTC_IMRL_MASKALL);


图4 中断屏蔽寄存器高32位

        3.4.4 状态寄存器
        下面的代码根据图5配置状态寄存器。在修改SR[I]前必须先将SR[S]置位。
                /*
                * 修改5213的中断级别为0
                * 以允许所有中断级别高于0的请求
                */
                asm(move.w #0x2000,SR);


图5 状态寄存器

3.5 配置小结
        为了将IRQ引脚配置为利用边沿检测外部事件,步骤如下:
        1.修改vectors.s文件中提供的ISR(中断服务例程)地址。详细情况参加EPORT的SoftwareDemo软件中的vector.s。
        2.在引脚分配寄存器中配置EPORT为主要功能。
        3.写EPPAR寄存器,将每个引脚设置为边沿检测(上升、下降或两者都有)。
        4.利用EPIER寄存器,清空EPORT的当前触发事件。
        5.利用IMRL寄存器,使能中断控制器的相应中断。
        6. 将5213中断级别修改为0,允许中断级别大于0的所有中断请求。中断级别的默认值为7。
        7.对每个ISR:
                通过EPPDR寄存器读取IRQ引脚的状态,直到无效。
                根据相应的ISR执行具体操作。
                在离开ISR之前,通过设置EPFR寄存器的相应位来清除中断事件。


<<上一页    下一页>>
相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.