[原创] 【R7F0C809】引脚外部中断

强仔00001   2015-10-17 00:23 楼主
中断是单片机常用的功能之一,中断分为内部中断和外部中断两种。在R7f0c8096中有7个人外部中断和13个内部中断,注意这只是可屏蔽的中断。不算上不可屏蔽的中断。如下图就罗列了4款系列芯片的中断情况:
QQ截图20151013002432.jpg
下图是几个中断类型的框图:
QQ截图20151013002553.jpg QQ截图20151013002628.jpg
今天我就用R7f0c8096的引脚输入边沿检测中断来写个简单按键中断的程序。
这里官方给出了各中断请求源对应的中断请求标志、中断屏蔽标志和优先级指定标志的名称的列表:
QQ截图20151013002650.jpg
QQ截图20151013002524.jpg
关于中断寄存器不多。就只有4个寄存器。分别为:
(1)中断请求标志寄存器
(2)中断屏蔽标志寄存器
(3)优先级指定标志寄存器
(4)外部中断上升沿允许寄存器 0EGP0)和外部中断下降沿允许寄存器 0EGN0
当我们要使用引脚输入边沿检测中断时,我们可以按以下流程:
(1)首先把IO口设置为输入。
(2)设置引脚输入边沿检测的类型
(3)设置中断优先级
(4)打开中断,编写中断程序任务
首先设置IO口输入这里我可以参考端口功能这里的说明把IO设置为输入:
QQ截图20151013102410.jpg
接着我们就要设置引脚输入边沿检测的类型了,这个是由两个寄存器(EGP0, EGN0)设置,详细的可以看下图的表格。
QQ截图20151013003034.jpg
接着我们就要设置优先级了,优先级我们可以设定4个等级,如下图的表格:
QQ截图20151013002910.jpg
还有的剩下就是打开相关的中断请求的标志和屏蔽标志了。
现在我使用板子上的按键控制,板子的按键接了P1.1,默认是没有引脚中断的功能,但可以通过重定向的功能,把PIOR21就可以了,板子上丝印写着INTP0,明显印错了,应该是INTP1才对。
QQ截图20151015232222.jpg QQ截图20151015232517.jpg
源代码:
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 中断请求 */
}
效果图:
VID_20151017_000519.mp4_1445011622.gif
时间都过了一大半,看来进度要加快了,在画电路图中
源代码:
EXTI.zip (171.18 KB)
(下载次数: 17, 2015-10-17 00:22 上传)
本帖最后由 强仔00001 于 2015-10-17 00:25 编辑

回复评论 (2)

分享铸就美好未来。。。
点赞  2015-10-17 07:31

你又开始水了
点赞  2015-10-17 23:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复