注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
强仔00001的个人空间 https://home.eeworld.com.cn/space-uid-525008.html [收藏] [复制] [分享] [RSS]
日志

【R7F0C809】引脚外部中断

已有 1055 次阅读2015-10-17 00:23 |个人分类:我的分享

中断是单片机常用的功能之一,中断分为内部中断和外部中断两种。在R7f0c8096中有7个人外部中断和13个内部中断,注意这只是可屏蔽的中断。不算上不可屏蔽的中断。如下图就罗列了4款系列芯片的中断情况:
下图是几个中断类型的框图:
今天我就用R7f0c8096的引脚输入边沿检测中断来写个简单按键中断的程序。

这里官方给出了各中断请求源对应的中断请求标志、中断屏蔽标志和优先级指定标志的名称的列表:
关于中断寄存器不多。就只有4个寄存器。分别为:
(1)中断请求标志寄存器
(2)中断屏蔽标志寄存器
(3)优先级指定标志寄存器
(4)外部中断上升沿允许寄存器 0EGP0)和外部中断下降沿允许寄存器 0EGN0
当我们要使用引脚输入边沿检测中断时,我们可以按以下流程:
(1)首先把IO口设置为输入。
(2)设置引脚输入边沿检测的类型
(3)设置中断优先级
(4)打开中断,编写中断程序任务

首先设置IO口输入这里我可以参考端口功能这里的说明把IO设置为输入:
接着我们就要设置引脚输入边沿检测的类型了,这个是由两个寄存器(EGP0, EGN0)设置,详细的可以看下图的表格。

接着我们就要设置优先级了,优先级我们可以设定4个等级,如下图的表格:
还有的剩下就是打开相关的中断请求的标志和屏蔽标志了。

现在我使用板子上的按键控制,板子的按键接了P1.1,默认是没有引脚中断的功能,但可以通过重定向的功能,把PIOR21就可以了,板子上丝印写着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 中断请求 */
      

}
效果图:

源代码:


本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章