中断是单片机常用的功能之一,中断分为内部中断和外部中断两种。在R7f0c8096中有7个人外部中断和13个内部中断,注意这只是可屏蔽的中断。不算上不可屏蔽的中断。如下图就罗列了4款系列芯片的中断情况:
下图是几个中断类型的框图:
今天我就用R7f0c8096的引脚输入边沿检测中断来写个简单按键中断的程序。
这里官方给出了各中断请求源对应的中断请求标志、中断屏蔽标志和优先级指定标志的名称的列表:
关于中断寄存器不多。就只有4个寄存器。分别为:
(1)中断请求标志寄存器
(2)中断屏蔽标志寄存器
(3)优先级指定标志寄存器
(4)外部中断上升沿允许寄存器 0( EGP0)和外部中断下降沿允许寄存器 0( EGN0)
当我们要使用引脚输入边沿检测中断时,我们可以按以下流程:
(1)首先把IO口设置为输入。
(2)设置引脚输入边沿检测的类型
(3)设置中断优先级
(4)打开中断,编写中断程序任务
首先设置IO口输入这里我可以参考端口功能这里的说明把IO设置为输入:
接着我们就要设置引脚输入边沿检测的类型了,这个是由两个寄存器(EGP0, EGN0)设置,详细的可以看下图的表格。
接着我们就要设置优先级了,优先级我们可以设定4个等级,如下图的表格:
还有的剩下就是打开相关的中断请求的标志和屏蔽标志了。
现在我使用板子上的按键控制,板子的按键接了P1.1,默认是没有引脚中断的功能,但可以通过重定向的功能,把PIOR2置1就可以了,板子上丝印写着INTP0,明显印错了,应该是INTP1才对。
源代码:
void EXTI_Init(void)
{
PMK1 =1U; /* 关闭 INTP1 */
PIF1 =0U; /* 清除 INTP1 中断标志位 */
/*设置 INTP1 中断的优先级为2 */
PPR11 = 1U;
PPR10 = 1U;
EGN0 = 2U;
EGP0 = 0U;
}
void EXTI_Start(void)
{
PIF1 =0U; /* 清除 INTP1 中断标志位 */
PMK1 =0U; /* 启动 INTP1 中断 */
}
void EXTI_Stop(void)
{
PMK1 =1U; /* 关闭 INTP1 中断 */
PIF1 =0U; /* 清除 INTP1 标志位 */
}
__interrupt void INTP1_Interrupt(void)
{
P0 ^=0b00000010U;
PIF1 =0U; /* 清除 INTP1 中断请求 */
}
效果图:
源代码:
本文来自论坛,点击查看完整帖子内容。