第4章数字IO1.docx
《第4章数字IO1.docx》由会员分享,可在线阅读,更多相关《第4章数字IO1.docx(17页珍藏版)》请在冰豆网上搜索。
![第4章数字IO1.docx](https://file1.bdocx.com/fileroot1/2023-1/2/e683db6b-09f6-4ea3-9cb8-216965bcc675/e683db6b-09f6-4ea3-9cb8-216965bcc6751.gif)
第4章数字IO1
第4章数字输入/输出模块(I/O)
4.1数字I/O端口概述
LF2407A采用哈佛结构,有3个独立的空间:
程序空间、数据空间和I/O空间,均为64K字。
这3个空间对外共用一个16为地址总线和一个16位数据总线,并以3个片选线
、
和
区分为不同空间,其中,I/O空间可接外部设备,是LF2407与外部设备联系的接口。
本节介绍的数字I/O端口具有连接外部设备的功能,是LF2407A中除I/O空间外另一个与外部设备联系的接口。
数字I/O端口(GeneralPurposeDigitalI/O,GPIO)。
LF2407A有41个LF24数字I/O端口,其中绝大多数具有另一功能,这“另一个功能”都是SCI、SPI等片内外设模块的引脚功能。
例如PWM9/IOPE3引脚是数字I/O端口E的第3引脚,同时又是PWM9引脚。
其实,这一引脚是显着作为片内外设引脚的事件管理器B中产生PWM9的功能。
它是首先要完成的、基本功能。
在不使用PWM9功能的前提下,这一引脚才作为数字I/O端口。
这些复用的、共享的引脚是实现基本功能还是数字I/O端口功能呢?
这通过对控制寄存器的编程来确定。
当把这些共享引脚选定为数字I/O端口后,还将通过对相应控制寄存器的编程来确定数字I/O端口是输入还是输出。
I/O空间与数字I/O端口之间的共同点就是都可以与外部设备发生联系,都用于外部设备发生联系。
它们之间的区别在于I/O空间是通过16为地址总线和16位数据总线以及
与外部设备相联系,通过汇编语句IN、OUT读/写I/O空间中的某一地址上的数据,这个数是一个16位二进制数;而数字I/O口是片内外设模块之一,与定时器这样的片内外设功能等同,这一数字输入/输出(I/O)端口通过对片内控制寄存器进行读/写,以对数字I/O端口进行操作。
每一数字I/O口对应一位二进制数。
4.2数字I/O端口结构
从图中给出了LF2407A中一个数字I/O口共享引脚逻辑控制简图,表明了其内部结构和逻辑关系。
从图中可以看出,“引脚”既可以作为基本功能使用,也可以作为数字I/O使用。
其选择功能由I/O复用(MUX)控制寄存器(MCRX)的控制位来完成。
这里,该控制位仅是一个二进制数据位MCRx.n,当MCRx.n=1时,选择基本功能;当MCRx.n=0时,选择数字I/O功能。
当该“引脚”选择数字I/O功能后,将由“I/O端方向位”选定该端口是输入,还是输出。
当值为0时,选择输入功能;当值为1时,选择输出功能。
“I/O端口数据位”是数字I/O口数据位,当数字口作为输入使用时,从该位读数据;当数字口做输出使用时,向该位写数据。
注意:
数字I/O脚是通过映射在数据空间的控制寄存器来控制的,与器件的I/O空间无任何关系。
4.3数字I/O端口控制寄存器
数字输入/输出模块有两类,共9个控制寄存器。
与其他片内外设控制寄存器一样,这些寄存器被映射到数据空间,地址从7090h~709Fh。
对寄存器中所有保留位是不可操作的,读时位0,写对它无影响。
注意:
当复用I/O引脚被配置为外设功能或通用I/O(GPIO)输出时,引脚状态可以通过读I/O数据寄存器来获取。
表5-1列出了数字I/O端口模块所用的控制寄存器单元。
表5-1数字I/O端口模块控制器列表
地址
控制寄存器
说明
地址
控制寄存器
说明
7090h
MCRA
I/O端口复用控制寄存器A
709Ch
PCDATDIR
I/O端口C数据和方向寄存器
7092h
MCRB
I/O端口复用控制寄存器B
709Eh
PDDATDIR
I/O端口D数据和方向寄存器
7094h
MCRC
I/O端口复用控制寄存器C
7095h
PEDATDIE
I/O端口E数据和方向寄存器
7098h
PADATDIR
I/O端口复A数据和方向寄存器
7096h
PFDATDIR
I/O端口F数据和方向寄存器
709Ah
PBDATDIR
I/O端口B数据和方向寄存器
4.3.1I/O端口复用控制寄存器
LF2407共有3个I/O端口复用控制寄存器:
MCRA、MCRB、MCRC。
(1)I/O端口复用控制寄存器A地址:
7090h
表4-2数字I/O端口复用控制寄存器A(MCRA)的位定义
位
位名称
引脚功能选择
MCRA.n=1(基本功能)
MCRA.n=0(I/O口功能)
0
MCRA.0
SCITXD
IOPA0
1
MCRA.1
SCIRXD
IOPA1
2
MCRA.2
XINT1
IOPA2
3
MCRA.3
CAP1/QEP1
IOPA3
4
MCRA.4
CAP2/QEP2
IOPA4
5
MCRA.5
CAP3
IOPA5
6
MCRA.6
PWM1
IOPA6
7
MCRA.7
PWM2
IOPA7
8
MCRA.8
PWM3
IOPB0
9
MCRA.9
PWM4
IOPB1
10
MCRA.10
PWM5
IOPB2
11
MCRA.11
PWM6
IOPB3
12
MCRA.12
T1PWM/T1CMP
IOPB4
13
MCRA.13
T2PWM/T2CMP
IOPB5
14
MCRA.14
TDIRA
IOPB6
15
MCRA.15
TCLKINA
IOPB7
TMS320LF240x的端口均为8位,而MCRA为16位,因此控制了IOPA和IOPB两个I/O端口的设置。
(2)I/O端口复用控制寄存器B地址:
7092h
表4-3数字I/O端口复用控制寄存器B(MCRB)的位定义
位
位名称
引脚功能选择
MCRB.n=1(基本功能)
MCRB.n=0(I/O口功能)
0
MCRB.0
W/
IOPC0
1
MCRB.1
IOPC1
2
MCRB.2
SPISIMO
IOPC2
3
MCRB.3
SPISIMI
IOPC3
4
MCRB.4
SPICIK
IOPC4
5
MCRB.5
IOPC5
6
MCRB.6
CANTX
IOPC6
7
MCRB.7
CANRX
IOPC7
8
MCRB.8
XINT2/ADCSOC
IOPD0
9
MCRB.9
EMU0
保留
10
MCRB.10
EMU1
保留
11
MCRB.11
TCK
保留
12
MCRB.12
TDI
保留
13
MCRB.13
TDO
保留
14
MCRB.14
TMS
保留
15
MCRB.15
TMS2
保留
TMS320LF240x的端口均为8位,而MCRA为16位,因此控制了IOPC和IOPC两个I/O端口的设置。
(3)I/O端口复用控制寄存器C地址:
7094h
Notes:
1)DuetotheabsenceoftheW/R/IOPC0,BIO/IOPC1,andSPISTE/IOPC5pins,bits0,1,and5ofMCRBmustbetreatedasreservedinthe2402A.
2)DuetotheabsenceofSPIandCANmodules(in2402A),bits2,3,4,6,and7ofMCRBshouldalwaysbewrittenwith0.ThecorrespondingpinsworkasGPIOpinsonly.
3)DuetotheabsenceoftheCANmoduleandW/Rfunctionin2404A,bits0,6,and7ofMCRBshouldalwaysbewrittenwith0.ThecorrespondingpinsworkasGPIOpinsonly.
4)DuetotheabsenceoftheW/Rfunctionin2406A,bit0ofMCRBshouldalwaysbewrittenwith0.ThecorrespondingpinworksasaGPIOpinonly.
表4-3数字I/O端口复用控制寄存器C(MCRC)的位定义
位
位名称
引脚功能选择
MCRB.n=1(基本功能)
MCRB.n=0(I/O口功能)
0
MCRC.0
CLKOUT
IOPE0
1
MCRC.1
PWM7
IOPE1
2
MCRC.2
PWM8
IOPE2
3
MCRC.3
PWM9
IOPE3
4
MCRC.4
PWM10
IOPE4
5
MCRC.5
PWM11
IOPE5
6
MCRC.6
PWM12
IOPE6
7
MCRC.7
CAP4/QEP3
IOPE7
8
MCRC.8
CAP5/QEP4
IOPF
9
MCRC.9
CAP6
IOPF1
10
MCRC.10
T3PWM/T3CMP
IOPF2
11
MCRC.11
T4PWN/T4CMP
IOPF3
12
MCRC.12
TDIRB
IOPF4
13
MCRC.13
TCLKINB
IOPF5
14
MCRC.14
保留
IOPF6
15
MCRC.15
保留
保留
TMS320LF240x的端口均为8位,而MCRA为16位,因此控制了IOPE和IOPF两个I/O端口的设置。
4.4数据和方向控制寄存器
6个数据和方向控制寄存器(PXDATDIR),包含两个功能位。
(1)I/O方向位
如果引脚被选择了通用I/O,方向位决定了是输入(0)还是输出
(1)。
(2)I/O数据位
如果引脚被选择了通用I/O,当方向选为输入,则可从该位上读取数据,当方向选为输出,则可向该位写入数据。
如I/O端口被选择作通用I/O引脚,数据和方向控制寄存器可以控制数据和I/O引脚的数据方向。
如I/O端口被选择作外设功能时,数据和方向控制寄存器的设置对相应的引脚无影响。
(1)I/O端口A数据和方向控制寄存器(PADATDIR),
地址:
7098h
位15-8:
AnDIRPA7-PA0的数据方向
0:
相应引脚配置为输入
1:
相应引脚配置为输出
位7-0:
IOPA7-IOPA0
如果AnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果AnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
寄存器PADATDIR的数据位与对应I/O引脚
(2)I/O端口B数据和方向控制寄存器(PBDATDIR),
地址:
709Ah
位15-8:
BnDIR
0:
相应引脚配置为输入
1:
相应引脚配置为输出
位7-0:
IOPBn
如果BnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果BnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
寄存器PBDATDIR的数据位与对应I/O引脚
(3)I/O端口C数据和方向控制寄存器(PCDATDIR),
地址:
709Ch
位15-8:
CnDIR
0:
相应引脚配置为输入
1:
相应引脚配置为输出
位7-0:
IOPCn
如果CnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果CnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
寄存器PCDATDIR的数据位与对应I/O引脚
(4)I/O端口D数据和方向控制寄存器(PDDATDIR),
地址:
709Eh
位15~9:
保留位
位8DnDIR
0:
相应引脚配置为输入
1:
相应引脚配置为输出
位7-1:
保留位
位0:
IOPDn
如果DnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果DnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
寄存器PDDATDIR的数据位与对应I/O引脚
(5)I/O端口E数据和方向控制寄存器(PEDATDIR),
地址:
7095h
位15~8:
EnDIR
0:
相应引脚配置为输入
1:
相应引脚配置为输出
位7-0:
IOPEn
如果EnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果EnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
寄存器PEDATDIR的数据位与对应I/O引脚
(6)I/O端口F数据和方向控制寄存器(PFDATDIR),
地址:
7096h
位15:
保留位
位14~8:
EnDIR
0:
相应引脚配置为输入
1:
相应引脚配置为输出
位7:
保留位
位6-0:
IOPFn
如果FnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果FnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
寄存器PFDATDIR的数据位与对应I/O引脚
4.5数字I/O端口配置实例
配置:
选择I/O引脚的功能,且设置I/O引脚的方向。
I/O配置实例程序:
MCRA.set7090h;可将这些映射语句放于240x.h文件中
PADATDIR.set7098h;可将这些映射语句放于240x.h文件中
PBDATDIR.set709Ah;可将这些映射语句放于240x.h文件中
LDP#0E1h;指向相应的数据页面
LACC#0h;设置MCRA所有位均为0
SACLMCRA;配置为I/O脚,选择引脚IOPA0-IOPA7和IOPB0-IOPB7
SACLPADATDIR;引脚IOPA0-IOPA7配置为输入,低有效
LACC#0F00h;引脚IOPB7-IOPB4配置为输入
SACLPBDATDIR;引脚IOPB3-IOPB0配置为输出
LACCPBDATDIR;读取引脚IOPB7-IOPB4输入状态
AND#00F0h;A为输入状态
上为一个数字I/O的实际配置程序,对于每个寄存器的定义已介绍,对于所有数字I/O配置定义的参考表,见P81。
4.6数字I/O应用实例
4.6.1使用数字I/O查询输入信号
接口电路如下图所示。
在I/O初始化时,需设置引脚为I/O,且需要选择信号方向。
程序见参考书。
4.6.2使用数字I/O输出信号
本例为使用I/O端口输出4个信号,分别连接到4个LED。
输出脚与LED间接一触发器SN74HCT273,对LED驱动。
使用:
PWM3/IOPB0、PWM4/IOPB1、PWM5/IOPB2、PWM6/IOPB3作为输出。
PWM7/IOPE1作为SN74HCT273的选通信号。
如何实现对4个LED的循环驱动?
即DS0→DS1→DS2→DS2,参考程序见P86。