您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF51X技术支持专区 -> BF518的GPIO详解
本帖共有1372个阅读者
发表帖子 发表投票 回复主题
BF518的GPIO详解
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5193
金钱:34791
积分:6375
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518的GPIO详解

接口功能介绍

ADSP-BF51x 处理器上有40 个GPIO 接口,分布在PF0~PF15,PG0~PG15,PH0~PH7 端口上,通过寄存器配置,这些接口可以输出电平和感知接口电平,并可作为外部中断接口使用。由于BF51x 处理器接口复用功能很多,在使用BF51x 端口之前,必须要对端口的功能作配置,以告知处理器使用的是什么接口。

在单片机上,通常如果设置一个 IO 接口输出时,直接将输出信号值付给该接口,如果作为输入时,直接通过该接口读取即可。Blackfin 处理器的IO 使用与单片机不同,在使用前必须对该接口进行初始化,如告知接口的方向,如配置为输出接口,则直接配置输出接口电平信号,如配置为输入接口,需打开输入使能开关,配置输出信号触发方式,是否中断触发,是否双极性触发等等。初始化完成后,才能使用IO 接口。



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

接口寄存器说明

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

上传的图片
  20126111234561.jpg [ 170.89 KB 1052×559 ] (缩略时请点击查看原图)

 


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

GPIO IN源码下载:

上传的附件
   20126111345561.rar [ 811.48 KB ]

GPIO OUT源码下载:

上传的附件
   20126111355061.rar [ 797.60 KB ]


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

源码分析

接口功能配置:
    将 PF0 接口配置为IO 功能。
    *pPORTF_FER &= ~PF0;
输入接口配置:
    将 PF0 接口配置为输入接口,并且读出接口电平状态。
    *pPORTFIO_DIR &= ~PF0; //设置PF0 为输入
    *pPORTFIO_INEN |= PF0; //输入使能
    i = *pPORTFIO; //读取数据
输出接口配置:
    将 PF0 接口配置为输出接口,使用两种方式设置PF0 输出高低电平。
    *pPORTFIO_DIR |= PF0; //设置PF0 为输出
    *pPORTFIO_SET |= PF0; //PF0 脚置高
    *pPORTFIO_CLEAR |= PF0; //PF0 脚置低
    *pPORTFIO |= PF0; //PF0 脚置高
    *pPORTFIO &= ~PF0; //PF0 脚置低


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

代码实现的功能

工程 BF51x_GPIO_IN.dpj 实现了读取PF0 接口状态并打印出PF 接口状态数据。
工程 BF51x_GPIO_OUT.dpj 实现了通过PF0 接口不断的输出高低变化的电平。


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

代码运行结果

工程 BF51x_GPIO_IN.dpj:运行代码后将PF0 接口的电平状态打印在VDSP 上。

工程 BF51x_GPIO_OUT.dpj: 运行代码后PF0 将不断变换高低电平。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/1 11:39:20
huaohui(论坛新手)
huaohui
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:125
积分:5
注册时间:2012/3/2
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

学习中,MARK


努力,加油!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/1 16:21:59
PPLLXZ(论坛新手)
PPLLXZ
头衔:社区公民
帮派:无帮无派
帖数:27
金钱:278
积分:32
注册时间:2012/5/25
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

学习学习,提出我的疑问

工程 BF51x_GPIO_OUT.dpj,这个试验我试过了

程序运行后,在PF0管脚输出方波,频率8.333MHz,幅度峰峰值4.2V(全是正值)

我发现:

(1)该程序中的这四句话原来是用了两种方式,我还以为两两重复,程序里就没写用了两种方式,弄得我迷糊了一阵才转过神来

     *pPORTFIO_SET |= PF0;     //PF0脚置高
        *pPORTFIO_CLEAR |= PF0;  //PF0脚置低
      *pPORTFIO |= PF0;      //PF0脚置高
        *pPORTFIO &= ~PF0;   //PF0脚置低      

(2)Init_EBIU()和Init_SDRAM()两个函数在这个例子里不是必须的吧?我删除了,仍然正常运行

(3)我把主程序改成

void main(void)
{
  Set_PLL(16,4);
  *pPORTF_FER   = 0x0000;//全部设置成GPIO模式
  *pPORTFIO_DIR = 0xFFFF;//全部设置成输出模式
    while(1)
    {
      *pPORTFIO = 0xffff;//PF0脚置高
      *pPORTFIO = 0x0000;//PF0脚置低      
    }
}

PF全部管脚输出方波了,频率是16.67MHz,波形峰峰值4.0V(全是正值)

但我发现PF11和PF13的峰峰值稍小,只有3.0V,尚未调查原因

另外在PG12发现12.5MHz波形,尚未调查原因



希望没给你的详解添乱


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/6/1 17:38:05
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

Init_EBIU()和Init_SDRAM()两个函数一个是初始化EBIU接口,一个是初始化SDRAM,在IO实验中不会用到。

BF518板卡上连接了其他的外设,所以可能会影响部分IO路口的工作情况,导致其点位拉不高。正常情况,IO的电平是3.3V ,你测量的4V是波形变化时产生的过冲。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/6/4 13:37:23
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.156065 Call, 1 Queries, Processed in 0.031250 second(s),