_______________________________________

官方论坛:http://www.oshcn.com

深入讨论QQ    群:82344271    91524863

_______________________________________

 

一、   可编程标志口简介

可编程标志口即所谓的通用目的I/O口,这是CPU的最基本的外设,嵌入式系统中,任何一个CPU都会有通用目的I/O口,他们的属性都基本上相似,只是叫法不一样而已。

ADSP-BF531/2/3处理器有16个双向的通用目的可编程I/O引脚(PF[15:0])。每个引脚可以通过方向寄存器(FIO_DIR)独立配置为输入或者输出。当配置成输出时,可以通过直接写入数据寄存器(FIO_FLAG_D)来改变输出引脚的状态;也可以通过置位寄存器(FIO_FLAG_S)、清零寄存器(FIO_FLAG_C)和翻转寄存器(FIO_FLAG_T)来控制PFx 引脚的状态。当配置成输入时,以上寄存器都可以返回PFx口的状态。

值得注意的是,部分可编程标志口与其他外设复用,使用复用功能时,我们需要设置相应的外设寄存器。复用功能如表6-1。

表6-1 可编程标志口复用功能

PF 引脚

PPI复用功能

SPI 复用功能

定时器复用

0

-

SPISS 低电平有效

1

SPISEL1

输入时钟

2

SPISEL2

3

Frame Sync 3

SPISEL3

4

IO #15

SPISEL4

5

IO #14

SPISEL5

6

IO #13

SPISEL6

7

IO #12

SPISEL7

8

IO #11

9

IO #10

10

IO #9

11

IO #8

12

IO #7

13

IO #6

14

IO #5

15

IO #4

从上面我们可以看出,本来I/O口不多,偏偏又共享出去了那么多,如果我们使用PPI、SPI等外设,对用户来说,剩下的可用IO口更少了。不错,事实就是这样,作为一款 DSP芯片,较少的IO口也是可以理解的。一般情况下,如果我们的系统中控制部分如果太复杂、使用I/O口较多的情况下,则需要I/O扩展(通过74系列逻辑芯片、CPLD以及专用的I/O扩展芯片)。

二、   I / O相关寄存器

1、方向寄存器

顾名思义,此寄存器可以设置PFx引脚的输入、输出方向。此寄存器是一个可读、写寄存器,每一位对应着一个PFx引脚。逻辑1将PFx引脚配置为输出方式,逻辑0将PFx引脚配置为输入方式。复位时,其值为0X0000,此时所有的PFx引脚均被配置为输入方式。

注意:如果PFx引脚被配置为输入方式时,一定要设置FIO_INEN中相应的位。

表6-2 FIO_DIR(地址:0XFFC0 0730 复位值0x0000)

名称

描述

15:0

FIO_DIR

可编程标志口方向寄存器,16位分别可以设置FP0~PF15的方向,为0时,为输入;为1时,为输出。

2、数值操作寄存器

处理器包含了四个数值操作相关的寄存器,他们分别为数据寄存器(FIO_FLAG_D)、置位寄存器(FIO_FLAG_S)、清零寄存器(FIO_FLAG_C)和翻转寄存器(FIO_FLAG_T)。四个寄存器通过不同的模式来操作PFx口与外界数据的交换,他们可以用来:

  • 当设置为输入时,读取PFx口上的值;
  • 当设置为输出时,设置PFx口上的值;
  • 清除相应端口产生的中断。

我们不但可以读取PFx的状态,也可以通过设置极性寄存器(FIO_POLAR)、边沿寄存器(FIO_EDGE)和双边沿寄存器(FIO_BOTH)来读取相应IO口上的电平状态、上升沿、下降沿的探测。这个功能其他处理器很少有。

表6-3 数值寄存器注释

FIO_POLAR

FIO_EDGE

FIO_BOTH

说明

0

0

X

引脚为高电平时,读出为1;引脚为低电平时,读出为0

0

1

0

如果上升沿发生,读出为1;否则读出为0

1

0

X

引脚为低电平时,读出为1,;引脚为高电平时,读出为0

1

1

0

如果下降沿发生,读出为1,否则读出为0

X

1

1

如果上升沿或者下降沿发生,读出为1,否则读出为0

(1)数据寄存器(FIO_FLAG_D)

当PFx引脚设置为输入方式时,FIO_FLAG_D中的每一位对应着每个PFx的输入电平或者边沿值见表6-3。当PFx引脚为输出方式时,通过向FIO_FLAG_D中写数据,从而指定每个PFx引脚的输出状态,逻辑1代表输出高电平,逻辑0代表输出低电平。相应的位写入 0 时,引脚输出低电平,写入 1 时,引脚输出高电平。

表6-4 FIO_FLAG_D(地址:0XFFC0 0700 复位值0x0000)

名称

描述

15:0

FIO_DIR

可编程标志口方向寄存器,16位分别可以设置FP0~PF15的方向,为0时,为输入;为1时,为输出。

(2)置位寄存器(FIO_FLAG_S)

置位寄存器,写入1时相应的端口置位,写入 0 时端口值保持不变。这样我们就很方便的对某一位端口置位而不影响其他端口的状态。

表6-5 FIO_FLAG_S(地址:0XFFC0 0708 复位值0x0000)

名称

描述

15:0

FIO_FLAG_S

可编程标志口置位寄存器,16位分别对应FP0~PF15的置位操作,为0时,维持原值不变;为1时,设置输出为1。

(3)清零寄存器(FIO_FLAG_C)

清零寄存器,写入1时相应的端口清零,写入0是端口保持不变。这样我们就很方便的对某一位端口值单独清零而不影响其他端口的状态。

表6-6 FIO_FLAG_C(地址:0XFFC0 0704 复位值0x0000)

名称

描述

15:0

FIO_FLAG_S

可编程标志口置位寄存器,16位分别对应FP0~PF15的置位操作,为0时,维持原值不变;为1时,设置输出为1。

(4)翻转寄存器(FIO_FLAG_T)

翻转寄存器,写入1时相应的端口值翻转(原来为高则置低,原来为低则置高),写入0是端口保持不变。

表6-7 FIO_FLAG_T(地址:0XFFC0 0704 复位值0x0000)

名称

描述

15:0

FIO_FLAG_T

可编程标志口翻转寄存器,16位分别对应FP0~PF15的翻转操作,为0时,维持原值不变;为1时,对相应的端口进行翻转操作。

(5)其他寄存器

除了数据操作寄存器外,还包含了极性控制寄存器(FIO_POLAR)、边沿寄存器(FIO_EDGE)以及双边沿寄存器(FIO_BOTH)。他们用于设定读操作时,数据置1的条件。

表6-8 FIO_POLAR(地址:0XFFC0 0734 复位值0x0000)

名称

描述

15:0

FIO_POLAR

可编程标志口极性寄存器,16位分别对应FP0~PF15的极性,为0时,代表高电平或者上升沿有效;为1时,代表低电平或者下降沿有效,请参考表6-3。

表6-9 FIO_EDGE(地址:0XFFC0 0738 复位值0x0000)

名称

描述

15:0

FIO_EDGE

可编程标志口边沿寄存器,16位分别对应FP0~PF15的边沿设定,为0时,代表高电平触发;为1时,代表边沿触发,请参考表6-3。

表6-10 FIO_BOTH(地址:0XFFC0 073C 复位值0x0000)

名称

描述

15:0

FIO_BOTH

双边沿寄存器,16位分别对应FP0~PF15的双边沿设定,为0时,代表单边沿触发;为1时,代表双边沿触发(上升沿和下降沿均触发),请参考表6-3。

三、       中断

可编程标志口的每个端口都可以产生中断,他们有两个中断向量,分别为可编程标志口中断A 和可编程标志口中断B。PF0~PF15可以任意向这两个中断向量中设置。值得注意的是,每个中断向量如果多于一个触发源(例如我们把PF0和PF1都设置指向中断向量A),则他们最终是以“或”的关系触发中断。

如果设置成电平中断(FIO_EDGE对应位设置成0),则只要引脚满足中断的电平条件(低电平或者高电平,取决于寄存器FIO_POLAR),就会触发中断,条件消失后,中断才不会触发;如果设置成边沿中断(FIO_EDGE对应位设置成1),边沿触发后立即触发中断,进入中断后,需要手动清除寄存器数值(可以通过写寄存器 FIO_FLAG_C的相应位清除)。

每个中断向量包含四个寄存器,他们分别为中断掩码数据寄存器、中断掩码设置寄存器、中断掩码清除寄存器和中断掩码翻转寄存器。四个寄存器设置可以达到同样的效果,如果对应位设定时,则使能中断,对应位清除时,则禁止中断。上电复位后,默认禁止所有中断。

表6-11 FIO_MASKA_D(地址:0XFFC0 0710 复位值0x0000)

名称

描述

15:0

FIO_MASKA_D

可编程标志口中断向量A数据寄存器,0~15位分别对应PF0~PF15端口,对应位写入1使能中断,写入0时禁止中断。

表6-12 FIO_MASKA_S(地址:0XFFC0 0718 复位值0x0000)

名称

描述

15:0

FIO_MASKA_S

可编程标志口中断向量A置位寄存器,0~15位分别对应PF0~PF15端口,对应位写入1使能中断,写入0时保持原数据不变。

表6-13 FIO_MASKA_C(地址:0XFFC0 0714 复位值0x0000)

名称

描述

15:0

FIO_MASKA_C

可编程标志口中断向量A清除寄存器,0~15位分别对应PF0~PF15端口,对应位写入1禁止中断,写入0时保持原数据不变。

表6-14 FIO_MASKA_T(地址:0XFFC0 071C 复位值0x0000)

名称

描述

15:0

FIO_MASKA_T

可编程标志口中断向量A翻转寄存器,0~15位分别对应PF0~PF15端口,对应位写入1数据翻转(原来使能则禁止、原来禁止则使能),写入0时保持原数据不变。

表6-15 FIO_MASKB_D(地址:0XFFC0 0720 复位值0x0000)

名称

描述

15:0

FIO_MASKB_D

可编程标志口中断向量B数据寄存器,0~15位分别对应PF0~PF15端口,对应位写入1使能中断,写入0时禁止中断。

表6-16 FIO_MASKB_S(地址:0XFFC0 0728 复位值0x0000)

名称

描述

15:0

FIO_MASKB_S

可编程标志口中断向量B置位寄存器,0~15位分别对应PF0~PF15端口,对应位写入1使能中断,写入0时保持原数据不变。

表6-17 FIO_MASKB_C(地址:0XFFC0 0724 复位值0x0000)

名称

描述

15:0

FIO_MASKB_C

可编程标志口中断向量B清除寄存器,0~15位分别对应PF0~PF15端口,对应位写入1禁止中断,写入0时保持原数据不变。

表6-18 FIO_MASKB_T(地址:0XFFC0 072C 复位值0x0000)

名称

描述

15:0

FIO_MASKB_T

可编程标志口中断向量B翻转寄存器,0~15位分别对应PF0~PF15端口,对应位写入1数据翻转(原来使能则禁止、原来禁止则使能),写入0时保持原数据不变。

-----------------------------------小马哥派来的分割线------------------------------------

附录 一、可编程标志口相关例程,包括:

1、流水灯;

2、按键测试;

3、按键边沿检测测试;

4、可编程标志口中断测试。

所有例程通过 MS531-II 开发板验证;例程仅供学习之用!不承担商业应用带来的一切直接、间接后果。

http://files.cnblogs.com/xiaomagee/example.zip

附录 二、MS531-II 系统资源:
 
 
附录 三、MS531-II 靓照:
 

【黑金动力社区】【bf531 体验板教程】第六章 可编程标志口(八)相关推荐

  1. 【黑金动力社区】【BF531 体验板教程】 第二章 MS531介绍(二)

    黑金动力社区:http://www.heijin.org 一. 工程简介 即使BF531简单易用,但是由于其昂贵的开发工具,使很多初学者望而却步(此章有钱人可以绕道,哈哈).作者去年接了一个项目,摸索 ...

  2. Web前端开发精品课HTML CSS JavaScript基础教程第六章课后编程题答案

    编程题: 利用这样一章学到的知识,制作如图6-10所示的表格效果,并且要求代码语义化. 用VS2013新建ASP.NET空网站,添加新项,建立HTML文件,向其加入以下代码: <!DOCTYPE ...

  3. 【黑金动力社区】【531体验板教程】 第三章 开发环境(三)

    黑金动力社区:http://www.heijin.org 一. 引言 在建立工程之前,将我们的实验板通过USB线连接到电脑上,也许这个时候会弹出USB不能用的窗口,如果遇到这个问题,直接从群共享里下载 ...

  4. 【连载】【黑金动力社区原创力作】《液晶驱动与GUI 基础教程》 --序言(一)

    声明:本文为原创作品,版权归黑金动力社区(http://www.heijin.org)所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 大家好,我是XiaomaG ...

  5. 【黑金动力社区】【原创博文集锦】《液晶驱动与GUI 基础教程》导读

    [连载][黑金动力社区原创力作]<液晶驱动与GUI 基础教程> --序言(一) [连载][黑金动力社区原创力作]<液晶驱动与GUI 基础教程>--第一章 从这里开始(二) [连 ...

  6. 【黑金动力社区】【FPGA黑金开发板】Verilog HDL的礼物 - Verilog HDL扫盲文

    声明:本文为原创作品,版权归akuei2及黑金动力社区共同所有,如需转载,请注明出处http://www.cnblogs.com/kingst/ 目录 目录         02 第0章  Veril ...

  7. java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

    java程序设计基础教程第六章图形用户界面编辑.docx 还剩 27页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要 ...

  8. 2022版Maven教程 - 第六章 单一架构案例

    2022版Maven教程 - 第六章 单一架构案例 一.创建工程,引入依赖 1.架构 ①架构的概念 ②单一架构 2.创建工程 3.引入依赖 ①搜索依赖信息的网站 [1]到哪儿找? [2]怎么选择? ② ...

  9. Matlab AppDesigner编程教程第1章——面向对象编程

    Matlab AppDesigner编程教程第1章--面向对象编程 文章目录 Matlab AppDesigner编程教程第1章--面向对象编程 前言 一.什么是面向对象编程 二.使用步骤 1.新建类 ...

  10. matlab最基础教程(六):编程习惯

    matlab最基础教程(六):编程习惯 前言:matlab的基本使用方法差不多介绍完了,确定问题类型(数值/符号),编程(函数/脚本)并运行即可.但具体编程过程中,良好的习惯非常重要,一方面便于调试, ...

最新文章

  1. Redisson 分布式锁实现分析(一)
  2. bash下输入命令的几个常用快捷键
  3. pythonloop是什么意思_python loop 英文问题
  4. html5中如何实现跑马灯效果,h5_实现跑马灯效果
  5. 调用系统时间进行操作
  6. 触发效果当容器的可见性改变时
  7. php定时任务管理,Zebra-Crontab
  8. mysql连接字符串 .net_.net MYSQL连接字符串参数详细解析
  9. win7 安装SQL Server 2005 开发版 图文教程
  10. UG NX 12 草图
  11. 保险公司智能运营系统——软件需求规格说明
  12. 计算机组成原理——补码一位乘(Booth算法)+举例+小白理解
  13. Javafx Scene Builder使用教程
  14. 51学习(2):vscode+ Embedded IDE开发环境搭建
  15. 智能家居,在互联中看见全屋智能
  16. 2018年南京大学计算机专业录取分数线,南京大学2018年录取分数线
  17. 菜鸟的草缸 篇四:菜鸟的草缸:二氧化碳CO2
  18. VMware 安装Ubuntu22.04
  19. 详细设计说明书(转载)
  20. c语言switch逻辑用语,第一章 第二节用逻辑用语.doc

热门文章

  1. S2A哨兵数据的波段合成、镶嵌、TOA(大气表观反射率)和裁剪的操作
  2. linux中的shell脚本case,Shell编程之case语句与循环语句
  3. php 同时登录怎么办,php 实现同一个账号同时只能一个人登录
  4. Struts2-03-拦截器(BOS物流项目用户登录拦截)
  5. Flutter之MediaQuery详细分析
  6. vbyone接口引脚定义_FMC接口介绍
  7. css3中插入地图,CSS3 地图展开动画
  8. js 不相等 多次随机数_node.js静态\动态服务器
  9. 监督分类空白处也被分类了_如何兼容自训练与预训练:更高效的半监督文本分类模型...
  10. 数据分析的升级版本--excel数据对比--代码实现