您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF53x技术支持专区 -> BF533/BF531入门教程1-GPIO和中断
本帖共有2094个阅读者
发表帖子 发表投票 回复主题
BF533/BF531入门教程1-GPIO和中断
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
精华主题 精华帖子
BF533/BF531入门教程1-GPIO和中断

http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='500' height='400'>$2

GPIO

开发板链接:http://item.taobao.com/item.htm?spm=a1z10.3.17.23.aada0b&id=10663122452

仿真器链接:http://item.taobao.com/item.htm?spm=a1z10.3.17.17.8ac47e&id=8842330668

接口功能介绍

ADSP-BF53x 处理器上有16 个Programmable Flag 接口,简称PF 接口,这些接口就是通常所有的IO 接口,通过寄存器配置,可以输出电平和感知接口电平,每一个PF 接口都可以作为外部中断接口。在单片机上,通常如果设置一个 IO 接口输出时,直接将输出信号值付给该接口,如果作为输入时,直接通过该接口读取即可。Blackfin 处理器的IO 使用与单片机不同,在使用前必须对该接口进行初始化,如告知接口的方向,如配置为输出接口,则直接配置输出接口电平信号,如配置为输入接口,需打开输入使能开关,配置输出信号触发方式,是否中断触发,是否双极性触发等等。初始化完成后,才能使用PF 接口。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/9/14 21:45:47
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

接口寄存器说明

PF 接口主要寄存器功能与使用方法:

上传的图片
  201291421472654.jpg [ 152.80 KB 828×377 ] (缩略时请点击查看原图)

 

例子代码分析

输入接口配置:
        将 PF0 接口配置为输入接口,并且读出接口电平状态。
        *pFIO_DIR &= ~PF0; //设置PF0 为输入
        *pFIO_INEN |= PF0; //输入使能
         i = *pFIO_FLAG_D; //读取数据
输出接口配置:
        将 PF0 接口配置为输出接口,使用两种方式设置PF0 输出高低电平。
        *pFIO_DIR |= PF0; //设置PF0 为输出
        *pFIO_FLAG_S |= PF0; //PF0 脚置高
        *pFIO_FLAG_C |= PF0; //PF0 脚置低
        *pFIO_FLAG_D |= PF0; //PF0 脚置高
        *pFIO_FLAG_D &= ~PF0; //PF0 脚置低

代码实现功能

工程 BF53x_GPIO_IN.dpj 实现了读取PF0 接口状态并打印出PF 接口状态数据。

上传的图片
  201291421491254.jpg [ 9.22 KB 109×207 ] (缩略时请点击查看原图)

 

工程 BF53x_GPIO_OUT.dpj 实现了通过PF0 接口不断的输出高低变化的电平。

测试结果

工程 BF53x_GPIO_IN.dpj:运行代码后将PF0 接口的电平状态打印在VDSP 上。
工程 BF53x_GPIO_OUT.dpj: 运行代码后PF0 将不断变换高低电平。



我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/9/14 21:49:44
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

GPIO_INTERRUPT

接口功能介绍

ADSP-BF53x 的16 个PF 接口都可以做为外部中断来使用。要使用PF 的外部中断,需要为PF 脚选择一个中断源,设置中断触发方式,为中断设置一个中断优先级,并且使能中断。FIO_MASKA_D 和FIO_MASKB_D:用来为PF 管脚设置中断源,ADSP-BF53x 共有PFA 和PFB 两个中断源,通过选择配置这两个寄存器,使用不同的中断源。SIC_IARx:设置中断优先等级。每个中断源都有一个默认的优先等级,如不对该寄存器配置,则可以使用默认的中断优先等级配置中断源。

上传的图片
  201291421523754.jpg [ 67.87 KB 579×585 ] (缩略时请点击查看原图)

 

上传的图片
  201291421531254.jpg [ 33.29 KB 577×272 ] (缩略时请点击查看原图)

 

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

上传的图片
  201291421541254.jpg [ 12.62 KB 363×306 ] (缩略时请点击查看原图)

 

SIC_IMASK:中断屏蔽寄存器,使能中断使用。
函数:
        register_handler(ik_ivg12, FlagA_ISR);
        中断等级注册函数,该函数在头文件“exception.h”中定义,定义该头文件后直接可以使用,其功能是告知中断管理器定义的中断标识符为FlagA_ISR 和中断等级为12 级。
        EX_INTERRUPT_HANDLER(FlagA_ISR);
        中断函数,该函数在头文件“exception.h”中定义,当触发中断后,会进入该函数执行。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/9/14 21:54:52
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

接口寄存器说明

上传的图片
  20129142156154.jpg [ 10.69 KB 538×96 ] (缩略时请点击查看原图)

 

例子代码分析

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 管脚,会进入相应的中断,打印出中断信息。

上传的图片
  201291421575854.jpg [ 12.02 KB 538×109 ] (缩略时请点击查看原图)

 




我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/9/14 21:58:08
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154297 Call, 1 Queries, Processed in 0.031250 second(s),