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脚置低


0 0