bf533 GPIO 学习
来源:互联网 发布:彩票开奖数据 编辑:程序博客网 时间:2024/06/06 00:03
很多参照opendsp bf533的用户手册
bf533_hwr_Rev3.4 (14 PROGRAMMABLE FLAGS章 PAGE 601)
和http://blog.csdn.net/jinn3/article/details/7282637 的博客
ADSP-BF53x处理器上有 16个 Programmable Flag接口,简称 PF接口,这些接口就是通常所有的 IO接口,通 过寄存器配置,可以输出电平和感知接口电平,每一个 PF接口都可以作为外部中断接口。 在单片机上,通常如果设置一个 IO 接口输出时,直接将输出信号值付给该接口,如果作为输入时,直接通过 该接口读取即可。Blackfin处理器的 IO使用与单片机不同,在使用前必须对该接口进行初始化,如告知接口的方向, 如配置为输出接口,则直接配置输出接口电平信号,如配置为输入接口,需打开输入使能开关,配置输出信号触发 方式,是否中断触发,是否双极性触发等等。初始化完成后,才能使用 PF 接口。
ADSP-BF531/2/3处理器有16个双向的通用目的可编程I/O引脚(PF[15:0])。每个引脚可以通过
方向寄存器
方向寄存器(FIO_DIR)
方向寄存器(FIO_DIR)独立配置为输入或者输出。当配置成输出时,可以通过直接写入此寄存器可以设置PFx引脚的输入、输出方向。此寄存器是一个可读、写寄存器,每一位对应着一个PFx引脚。逻辑1将PFx引脚配置为输出方式,逻辑0将PFx引脚配置为输入方式。复位时,其值为0X0000,此时所有的PFx引脚均被配置为输入方式。
注意:如果PFx引脚被配置为输入方式时,一定要设置FIO_INEN(输入使能寄存器)中相应的位。
数据寄存器 (注意改变不同的寄存器可以有相同的效果)
数据寄存器(FIO_FLAG_D)
置位寄存器(FIO_FLAG_S)
清零寄存器(FIO_FLAG_C)
翻转寄存器(FIO_FLAG_T)
数据寄存器(FIO_FLAG_D)来改变输出引脚的状态;
也可以通过置位寄存器(FIO_FLAG_S)、清零寄存器(FIO_FLAG_C)和翻转寄存器(FIO_FLAG_T)来控制PFx 引脚的状态。当配置成输入时,以上寄存器都可以返回PFx口的状态。
数据寄存器(FIO_FLAG_D)指定每个PFx引脚的输出状态,逻辑1代表输出高电平,逻辑0代表输出低电平。相应的位写入 0 时,引脚输出低电平,写入 1 时,引脚输出高电平。
置位寄存器(FIO_FLAG_S)清零寄存器,写入1时相应的端口清零,写入0是端口保持不变。这样我们就很方便的对某一位端口值单独清零而不影响其他端口的状态。
翻转寄存器(FIO_FLAG_T)翻转寄存器,写入1时相应的端口值翻转(原来为高则置低,原来为低则置高),写入0是端口保持不变。
电平描述寄存器
极性寄存器(FIO_POLAR)
边沿寄存器(FIO_EDGE)
双边沿寄存器(FIO_BOTH)
读取相应IO口上的电平状态、上升沿、下降沿的探测。这个功能其他处理器很少有。
极性寄存器(FIO_POLAR)为0时,代表高电平或者上升沿有效;为1时,代表低电平或者下降沿有效。
边沿寄存器(FIO_EDGE)为0时,代表高电平触发;为1时,代表边沿触发
双边沿寄存器(FIO_BOTH)为0时,代表单边沿触发;为1时,代表双边沿触发(上升沿和下降沿均触发)
FIO_DIR是一个16位的读写寄存器,每一个位控制一个PFx的IO口。当PFx被设置为1时,对应的端口被设置为输出;当PFx被设置为0时,对应的端口被设置成输入端口。而且该寄存器的复位值为0x0000,标志所有的IO口在复位时都会被设置成输入属性。
FIO_FLAG_D Register
When written, the Flag Data register ( FIO_FLAG_D), shown in Figure 14-2 ,
directly specifies the state of all PFx pins. When read, the register returns
the value of the PFx pins.
剩下的接口与上面已举例的FIO_DIR, FIO_FLAG_D类似,都是16位的寄存器,每一位对应一个pf端口。
中断寄存器(注意改变不同的寄存器可以有相同的效果)
可编程标志口的每个端口都可以产生中断,他们有两个中断向量,分别为可编程标志口中断A 和可编程标志口中断B。PF0~PF15可以任意向这两个中断向量中设置。值得注意的是,每个中断向量如果多于一个触发源(例如我们把PF0和PF1都设置指向中断向量A),则他们最终是以“或”的关系触发中断。
如果设置成电平中断(FIO_EDGE对应位设置成0),则只要引脚满足中断的电平条件(低电平或者高电平,取决于寄存器FIO_POLAR),就会触发中断,条件消失后,中断才不会触发;如果设置成边沿中断(FIO_EDGE对应位设置成1),边沿触发后立即触发中断,进入中断后,需要手动清除寄存器数值(可以通过写寄存器 FIO_FLAG_C的相应位清除)。
每个中断向量包含四个寄存器,他们分别为
中断掩码数据寄存器FIO_MASKA_D、
中断掩码设置寄存器FIO_MASKA_S、
中断掩码清除寄存器 FIO_MASKA_C
中断掩码翻转寄存器FIO_MASKA_T
中断掩码数据寄存器FIO_MASKA_D 对应位写入1使能中断,写入0时禁止中断
中断掩码设置寄存器FIO_MASKA_S 对应位写入1使能中断,写入0时保持原数据不变
中断掩码清除寄存器 FIO_MASKA_C 对应位写入1禁止中断,写入0时保持原数据不变
中断掩码翻转寄存器FIO_MASKA_T 对应位写入1数据翻转(原来使能则禁止、原来禁止则使能),写入0时保持原数据不变
四个寄存器设置可以达到同样的效果,如果对应位设定时,则使能中断,对应位清除时,则禁止中断。上电复位后,默认禁止所有中断。
中断的流程图
编程举例:
输入接口配置:
将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脚置低
- bf533 GPIO 学习
- ADSP-BF533 GPIO中断学习
- ADSP-BF533 GPIO初试
- BF533-GPIO和中断
- ADSP-BF533 GPIO初试
- BF533 LED学习(1):头文件
- gpio学习
- GPIO学习笔记
- LPC2103学习之GPIO
- STM32 GPIO入门学习
- Mini2440学习 GPIO
- STM32-GPIO学习笔记
- S3C6410 GPIO学习
- GPIO学习笔记
- 嵌入式学习之GPIO
- STM32F407学习之GPIO
- GPIO口控制学习
- GPIO 学习记录
- μC/OS-II学习之:任务,信号量、邮箱、队列及其区别
- leetcode Copy List with Random Pointer
- 输入a和b两个整数,按先大后小的顺序输出a和b
- 小明陪你编游戏系列(一)win32游戏开发快速入门
- 用window live writer无法离线编辑CSDN博客
- bf533 GPIO 学习
- 回顾
- Android中ListView下拉刷新的实现
- unity各平台路径,存放数据!
- IOS: UINavigationController 视图控制器
- 缓存和内存的区别
- hdu3067 小t的游戏
- MyBatis多参数传递之Map方式示例
- c++-类的static成员