您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53x技术支持专区 -> Blackfin入门教程---BF53x_GPIO_INTERRUPT
本帖共有1236个阅读者
发表帖子 发表投票 回复主题
Blackfin入门教程---BF53x_GPIO_INTERRUPT
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
Blackfin入门教程---BF53x_GPIO_INTERRUPT

接口功能介绍

ADSP-BF53x的16个PF接口都可以做为外部中断来使用。要使用PF的外部中断,需要为PF脚选择一个中断源,设置中断触发方式,为中断设置一个中断优先级,并且使能中断。

FIO_MASKA_D和FIO_MASKB_D:用来为PF管脚设置中断源,ADSP-BF53x共有PFA和PFB两个中断源,通过选择配置这两个寄存器,使用不同的中断源。

SIC_IARx:设置中断优先等级。每个中断源都有一个默认的优先等级,如不对该寄存器配置,则可以使用默认的中断优先等级配置中断源。

管脚相关的中断源PFA和PFB位于SIC_IAR2,其默认配置值都为5,根据其配置值,通过下表获知其对应的中断等级为IVG12,如将SIC_IAR2配置值改为下表中的数值,则中断等级变为该数值对应的中断等级。

SIC_IMASK:中断屏蔽寄存器,使能中断使用。

函数:

register_handler(ik_ivg12, FlagA_ISR);

       中断等级管理函数,该函数在头文件 “exception.h”中定义,定义该头文件后直接可以使用,其功能是告知中断管理器定义的中断标识符为FlagA_ISR和中断等级为12级。

EX_INTERRUPT_HANDLER(FlagA_ISR)

中断函数,该函数在头文件 “exception.h”中定义,当触发中断后,会进入该函数执行。

接口寄存器说明



寄存器

功能

SIC_IARx

中断等级设置寄存器

SIC_IMASK

中断屏蔽寄存器

例子代码分析

PF口设置使用外部中断:

       *pFIO_INEN         |= PF0|PF1;           //设置PF0,PF1输入使能

       *pFIO_DIR           &=~(PF0|PF1);      //设置PF0,PF1为输入接口

       *pFIO_EDGE        |= PF0|PF1;           //设置为沿触发

       *pFIO_MASKA_D |= PF0|PF1;           //使用中断源为PFA,使能PF外部中断

配置外部中断:

       *pSIC_IAR0 = 0xffffffff;            

       *pSIC_IAR1 = 0xffffffff;            

       *pSIC_IAR2 = 0xffff5fff;            //设置中断等级参数为5                    

       register_handler(ik_ivg12, FlagA_ISR); //告知中断管理器使用中断等级为12,中断标志为 FlagA_ISR

       *pSIC_IMASK = 0x00080000;            //使能外部中断

中断函数:

EX_INTERRUPT_HANDLER(FlagA_ISR)         //设置中断函数标志为FlagA_ISR

{

              if(*pFIO_FLAG_D == PF0)                //判断是否为PF0中断

              {

                     printf("interrupt is PF0!\n");        

              }

              else if(*pFIO_FLAG_D == PF1)          //判断是否为PF1中断

              {

                     printf("interrupt is PF1!\n");

              }    

              *pFIO_FLAG_C = PF0|PF1;               //清楚中断标志

}

代码实现功能

通过PF0和PF1接口作为外部中断信号触发管脚,当有下降沿出发时进入中断函数,在中断函数中判断是哪一个PF脚设置了中断,打印出中断PF脚信息。

测试结果

运行代码后,利用接地的导线触发PF0和PF1管脚,会进入相应的中断,打印出中断信息。


上传的附件
   20116819584652.rar [ 303.43 KB ]



「该帖子被 andy 在 2011-06-08 19:58:50 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/8 19:52:14
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154299 Call, 1 Queries, Processed in 0.000000 second(s),