第 6 章: 数字输入 / 输出模块 (i/o)
DESCRIPTION
第 6 章: 数字输入 / 输出模块 (I/O). 6.1 数字 I/O 端口概述 6.2 数字 I/O 端口寄存器 6.3 I/O 端口应用. 6.1 数字 I/O 端口概述. 数字 I/O 脚有 专用 和 复用 之分。其功能可通过 9 个 16 位控制寄存器 来控制。 控制寄存器分为两类: I/O 复用 控制寄存器( MCRx) ,用来选择 I/O 脚是片内外设功能还是通用 I/O 功能; 数据方向 控制寄存器( PxDATDIR) :用来控制双向 I/O 脚的数据传送方向。 - PowerPoint PPT PresentationTRANSCRIPT
第 6 章: 数字输入 / 输出模块 (I/O)
6.1 数字 I/O 端口概述
6.2 数字 I/O 端口寄存器
6.3 I/O 端口应用
6.1 数字 I/O端口概述
数字 I/O 脚有专用和复用之分。其功能可通过 9个 16 位控制寄存器来控制。控制寄存器分为两类:① I/O 复用控制寄存器( MCRx) ,用来选择 I/O 脚是片内外设功能
还是通用 I/O 功能;
② 数据方向控制寄存器( PxDATDIR) :用来控制双向 I/O 脚的数据传送方向。
注意:上述数字 I/O 脚是通过控制寄存器(映射在数据存储器空间)来控制的,与器件的 I/O 空间无任何关系。
LF240x 系列 DSP 多达 41只 I/O 引脚,大部分是复用的。
6.2 数字 I/O寄存器 I/O复用引脚的结构见图 6.1。由图可看出复用 I/O
引脚如何来实现引脚功能选择和数据传送方向选择
的。
图 6.1 复用引脚配置图
I/O端口数据位(读/写) 基本功能
I/O端口方向位0=输入1=输出
上拉或下拉
MUX控制位0=I/O功能1=基本功能
引脚
输入 输出
0 1
基本功能或I/O引脚
6.2 数字 I/O寄存器
表 6.1( P97)列出了与 I/O模块有关的寄存器,地
址为: 7090h-709Fh
注意: 映射到数据存储器空间。 当复用 I/O脚无论是被配置为外设功能还是为通用 I/O时,
引脚的状态都可通过读 I/O数据寄存器来获取。
保留位是不可操作的,读出为 0,写入对它无影响。
6.2 数字 I/O寄存器
地址 寄存器 功能
7090h MCRA I/O 复用控制寄存器 A
7092h MCRB I/O 复用控制寄存器 B
7094h MCRC I/O 复用控制寄存器 C
7098h PADATDIR I/O 端口 A 数据和方向寄存器
709Ah PBDATDIR I/O 端口 B 数据和方向寄存器
709Ch PCDATDIR I/O 端口 C 数据和方向寄存器
709Eh PDDATDIR I/O 端口 D 数据和方向寄存器
7095h PEDATDIR I/O 端口 E 数据和方向寄存器
7096h PFDATDIR I/O 端口 F 数据和方向寄存器
表 6.1 数字 I/O 控制寄存器地址
6.2 数字 I/O寄存器
I/O 口复用输出寄存器
LF240x/240xA具有 3个 I/O端口复用控制寄存器:
MCRA、MCRB、MCRC。
( 1) I/O端口复用控制寄存器 A(MCRA),映射地
址: 7090h,其配置见表 6.2( P97)。
6.2 数字 I/O寄存器位 基本功能及描述( MCRA.n=1 ) 通用 I/O(MCRA.n=0
)MCRA.0 SCITXD : SCI 异步串行口发送数据 IOPA0
MCRA.1 SCIRXD : SCI 异步串行口接收数据 IOPA1
MCRA.2 XINT1 :外部用户中断 1 IOPA2
MCRA.3 CAP1/QEP1 :捕捉输入 1/ 正交编码脉冲输入 1(EVA) IOPA3
MCRA.4 CAP2/QEP2 :捕捉输入 2/ 正交编码脉冲输入 2(EVA) IOPA4
MCRA.5 CAP3 :捕捉输入 3(EVA) IOPA5
MCRA.6 PWM1 :比较 /PWM 输出引脚 1(EVA) IOPA6
MCRA.7 PWM2 :比较 /PWM 输出引脚 2(EVA) IOPA7
MCRA.8 PWM3 :比较 /PWM 输出引脚 3(EVA) IOPB0
MCRA.9 PWM4 :比较 /PWM 输出引脚 4(EVA) IOPB1
MCRA.10 PWM5 :比较 /PWM 输出引脚 5(EVA) IOPB2
MCRA.11 PWM6 :比较 /PWM 输出引脚 6(EVA) IOPB3
MCRA.12 T1PWM/T1CMP: TMR1 比较输出 (EVA) IOPB4
MCRA.13 T2PWM/T2CMP : TMR2 比较输出 (EVA) IOPB5
MCRA.14 TDIRA :通用定时器计数方向选择 (EVA); 1= 加计数; 0= 减计数 IOPB6
MCRA.15 TCLKINA :通用定时器 (EVA) 的外部时钟输入 IOPB7
6.2 数字 I/O寄存器
( 2) I/O端口复用控制寄存器 B,映射地址:
7092h,其配置见表 6.3( P98)。
注意: MCRB.9-MCRB.15 必须配置成 1 ,其为系统的专用引脚,用作与硬件仿真器接口 (JTAG) 相连,实现 DSP 的在线仿真功能。对其写 0 会引起不可预测的结果。
6.2 数字 I/O寄存器位 基本功能及描述( MCRA.n=1 ) 通用 I/O(MCRA.n=0
)MCRB.0 W/R :写 / 读选定; 0= 读; 1= 写 IOPC0
MCRB.1 BIO :分支控制输入; 0= 执行分支程序 IOPC1
MCRB.2 SPISIMO: SPI 从动输入、主动输出 IOPC2
MCRB.3 SPISOMI : SPI 从动输出、主动输入 IOPC3
MCRB.4 SPICLK: SPI 时钟 IOPC4
MCRB.5 SPISTE: SPI 从动发送使能 IOPC5
MCRB.6 CANTX: CAN 发送数据 IOPC6
MCRB.7 CANRX: CAN 接收数据 IOPC7
MCRB.8 XINT2/ADCSOC :外部用户中断 2/AD 转换开始输入 IOPD0
MCRB.9 EMU0 :带内部上拉仿真器 I/O 引脚 0 保留位
MCRB.10 EMU1 :带内部上拉仿真器 I/O 引脚 1 保留位
MCRB.11 TCK :带内部上拉 JTAG 测试时钟 保留位
MCRB.12 TDI :带内部上拉 JTAG 测试数据输入 保留位
MCRB.13 TDO :带内部上拉 JTAG 测试数据输出 保留位
MCRB.14 TMS :带内部上拉 JTAG 测试方式选择 保留位
MCRB.15 TMS2 :带内部上拉 JTAG 测试方式选择 2 保留位
6.2 数字 I/O寄存器
( 3) I/O端口复用控制寄存器 C(MCRC),映射地
址: 7094h,其配置见表 6.4( P99)。
6.2 数字 I/O寄存器位 基本功能( MCRA.n=1 ) 通用 I/O(MCRA.n=0
)MCRC.0 CLKOUT :时钟输出 IOPE0
MCRC.1 PWM7 :比较 /PWM 输出引脚 7(EVA) IOPE1
MCRC.2 PWM8 :比较 /PWM 输出引脚 8(EVA) IOPE2
MCRC.3 PWM9 :比较 /PWM 输出引脚 9(EVA) IOPE3
MCRC.4 PWM10 :比较 /PWM 输出引脚 10(EVA) IOPE4
MCRC.5 PWM11 :比较 /PWM 输出引脚 11(EVA) IOPE5
MCRC.6 PWM12 :比较 /PWM 输出引脚 12(EVA) IOPE6
MCRC.7 CAP4/QEP3 :捕捉输入 4/ 正交编码脉冲输入 3(EVA) IOPE7
MCRC.8 CAP5/QEP4 :捕捉输入 5/ 正交编码脉冲输入 4(EVA) IOPF0
MCRC.9 CAP6 :捕捉输入 6 IOPF1
MCRC.10 T3PWM/T3CMP : TMR3 比较输出 (EVA) IOPF2
MCRC.11 T4PWM/T4CMP; TMR4 比较输出 (EVA) IOPF3
MCRC.12 TDIRB :通用定时计数器方向选择 (EVB) IOPF4
MCRC.13 TCLKINB :通用定时器 (EVB) 的外部时钟输入 IOPF5
MCRC.14 保留 IOPF6
MCRC.15 保留 保留位
6.2 数字 I/O寄存器 I/O 口数据和方向寄存器
6个数据和方向控制寄存器( PXDATDIR),包含两个功能位。
( 1 ) I/O方向位:如果引脚被选择了通用 I/O,方向位决定了是
输入( 0)还是输出( 1)。
( 2 ) I/O数据位:如果引脚被选择了通用 I/O,当方向选为输
入,则可从该位上读取数据,当方向选为输出,则可向该位写
入数据。
如 I/O端口被选择作通用 I/O引脚,数据和方向控制寄存器可以控
制数据和 I/O引脚的数据方向。
如 I/O端口被选择作外设功能时,数据和方向控制寄存器的设置对
相应的引脚无影响。
6.2 数字 I/O寄存器( 1)端口 A数据和方向控制寄存器( PADATDIR),地址: 7098h
位 15-8: AnDIR PA7-PA0的数据方向 0:相应引脚配置为输入
1:相应引脚配置为输出
位 7-0: IOPA7-IOPA0
如果 AnDIR=0,引脚配置为输入
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果 AnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
如果 I/O端口用作通用 I/O,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。
6.2 数字 I/O寄存器
( 2 ) 端口 B数据和方向控制寄存器( PBDATDIR),地址:
709Ah
位 15-8: BnDIR PB7-PB0的数据方向 0-相应引脚配置为输入
1-相应引脚配置为输出
位 7-0: IOPBn
如果 BnDIR=0,引脚配置为输入方式。
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果 BnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
6.2 数字 I/O寄存器
( 3 )端口 C 数据和方向控制寄存器( PCDATDIR) ,地址:709Ch
位 15-8: CnDIR PC7-PC0的数据方向 0-相应引脚配置为输入
1-相应引脚配置为输出
位 7-0: IOPCn
如果 CnDIR=0,引脚配置为输入方式。
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果 CnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
6.2 数字 I/O寄存器
( 4 ) 端口 D 数据和方向控制寄存器( PDDATDIR) ,地址:709Eh
位 15-9:保留
位 8: D0DIR 0-相应引脚配置为输入 1-相应引脚配置为输出
位 7-1:保留 位 0: IOPD0
如果 D0DIR=0,引脚配置为输入方式。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平
如果 D0DIR=1,引脚配置为输出 0-设置相应引脚,使其输出信号为低电平时有效 1-设置相应引脚,使其输出信号为高电平时有效
6.2 数字 I/O寄存器
( 5 )端口 E 数据和方向控制寄存器( PEDATDIR) ,地址:7095h
位 15-8: EnDIR PE7-PE0的数据方向 0-相应引脚配置为输入
1-相应引脚配置为输出
位 7-0: IOPEn
如果 EnDIR=0,引脚配置为输入方式。
0-相应引脚的电平读为低电平
1-相应引脚的电平读为高电平
如果 EnDIR=1,引脚配置为输出
0-设置相应引脚,使其输出信号为低电平时有效
1-设置相应引脚,使其输出信号为高电平时有效
6.2 数字 I/O寄存器
( 6 ) 端口 F数据和方向控制寄存器( PFDATDIR),地址:7096h
位 15 :保留 位 14-8: FnDIR PF6-PF0的数据方向
0-相应引脚配置为输入 1-相应引脚配置为输出
位 7 :保留 位 7-0: IOPFn
如果 FnDIR=0,引脚配置为输入方式。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平
如果 FnDIR=1,引脚配置为输出 0-设置相应引脚,使其输出信号为低电平时有效 1-设置相应引脚,使其输出信号为高电平时有效
6.2 数字 I/O寄存器 数字 I/O端口配置实例配置:选择 I/O引脚的功能,且设置 I/O引脚的方向。
I/O配置实例程序:
MCRA .set 7090h ;可将这些映射语句放于 240x.h文件中
PADATDIR .set 7098h ;可将这些映射语句放于 240x.h文件中
PBDATDIR .set 709Ah ;可将这些映射语句放于 240x.h文件中
LDP #0E1h ;指向相应的数据页面
LACC #0h ; 设置 MCRA 所有位均为 0
SACL MCRA ; 配置为 I/O 脚,选择引脚 IOPA0-IOPA7和 IOPB0-IOPB7
SACL PADATDIR ; 引脚 IOPA0-IOPA7 配置为输入,低有效
LACC #0F00h ; 引脚 IOPB7-IOPB4 配置为输入
SACL PBDATDIR ; 引脚 IOPB3-IOPB0 配置为输出
LACC PBDATDIR ; 读取引脚 IOPB7-IOPB4 输入状态
AND #00F0h ;A 为输入状态
6.3 I/O端口应用 1、 I/O端口作为输出使用 I/O 端口输出 8 个信号,这 8 个信号分别连接到 8个 LED ,硬
件接口电路如图 6.2(P102) 所示。输出引脚与 LED 之间接一触发器 74HC273, 来实现对 LED 的驱动。在此使用 IOPB 作为输出信号来控制发光二极管的亮灭,而 IOPF2 作为选通 74HC273
的输出信号。
图 6.2 TMS320LF2407与 LED 接口电路
6.3 I/O端口应用下面的实例程序实现对 8个 LED 的循环驱动,即 LED 循环发光
LED1→LED2→LED3→LED4→LED5 →LED6→LED7→LED8→LED1 …… 。 ( 1 )主程序IOSFT_REG .usect ".data0", 1 ; 要显示的数据寄存器
.include "F2407REGS.H" ; 引用头部文件 .def _c_int0
.text
_c_int0 ; 相当于主程序的入口 CALL SYSINIT ; 调系统初始化程序 LDP #DP_PF2 ; 指向 7080h~ 7100h 区 LACL MCRA
AND #000FFH ;IOPB 口配置为一般 I/O 功能 SACL MCRA
LACL MCRC
AND #0FBFFH ;IOPF2 配置为一般 I/O 功能 SACL MCRC
LACL PBDATDIR
OR #0FF00H ;IOPB 口设置为输出方式 SACL PBDATDIR
OR #0FF00H ;IOPB 口设置为输出方式 SACL PBDATDIR
6.3 I/O端口应用LDP #5H ; 指向 0280h~ 0300h 区SPLK #01H, IOSFT_REG ; 给显示的数据赋初值
LOOP : LDP #DP_PF2
LACL PFDATDIR
OR #0404H ;IOPF2 设置为输出方式,且 IOPF2=1
SACL PFDATDIR ;开 74HC273 片选信号LDP #5H
LACL IOSFT_REG
LDP #DP_PF2
SACL PBDATDIR ; 送要显示的数据到 IOPB 口LACL PFDATDIR
AND #0FFFBH ;IOPF2=0
SACL PFDATDIR ;关 74HC273 片选信号CALL DELAY ; 调延时程序LDP #5H
LACL IOSFT_REG
SFL ; 左移一位SACL IOSFT_REG
BIT IOSFT_REG, BIT8 ; 判是否循环完一次,即已点亮第 8 个发光二极管BCND LOOP1, TC
B WAIT
LOOP1 : LDP #5H
SPLK #01H, IOSFT_REG ; 如循环完一次则显示数据赋初值WAIT : NOP
B LOOP
6.3 I/O端口应用 ( 2 )系统初始化程序SYSINIT :
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF ;B0 被配置为数据存储空间
LDP #0E0H
SPLK #81FEH, SCSR1 ;CLKIN=6
M, CLKOUT=24 M
SPLK #0E8H,WDCR ; 不使能 WDT
LDP #0
SPLK #0000H, IMR ; 不使能
SPLK #0FFFFH, IFR ; 清全部中断标志
RET
6.3 I/O端口应用 ( 3 )软件延时程序DELAY :
MAR *, AR4
LAR AR4, #0FFFEH
LAR AR0, #00H
DELAY1 : SBRK #1
NOP
CMPR00
BCND DELAY1, NTC
RET
6.3 I/O端口应用 1、 I/O端口作为输入和输出使用键盘的响应作为 I/O 端口的输入,用 I/O 端口的输出点亮发光二极管,
硬件接口电路如图 6.3(P104) 所示。用查询的方式读取键值,当 K1 键按下时,点亮发光二极管。 K1 键对应的 I/O 输入引脚为 IOPF3 ,在IOPF3 作通用 I/O 输入的情况下,如 K1 键按下则端口 F 数据和方向控制寄存器 (PFDATDIR) 的第 3 位为 0 。经过延时消抖动后如PFDATDIR .3 仍为 0 则表示 K1 键按下。
图 6.3 TMS320LF2407 与键盘、 LED 接口电路
6.3 I/O端口应用下面的实例程序实在前面程序的基础上添加了键盘输入程序,仅给
出通用 I/O 作为输入时的初始化和读键盘程序。
( 1 )初始化程序IOINIT : ; 添加在前面程序的大循环
;LOOP :之前就行了LDP #DP_PF2
LACL MCRC
AND #0F7FFH ;IOPF3 配置为一般的I/O 口
SACL MCRC
LACL PFDATDIR
AND #0F7FFH ;IOPF3 为输入方式SACL PFDATDIR
RET
6.3 I/O端口应用 ( 2 )读 K1 键程序READKEY : ; 添加在前面程序的大循环 LOOP :之后就行了
LDP #DP_PF2
LACL PFDATDIR ; 取出键值 PFDATDIR.3
SACL KEYDATA ; 存放键值LDP #DP_USER
BIT KEYDATA, 12 ;判 IOPF3 是否为 1
BCND K1_RET, TC ;如 IOPF3为 1则 K1 没有按下; 延时消抖动LDP #DP_PF2
LACL PFDATDIR ; 再次取出键值 PFDATDIR.3
SACL KEYDATA
LDP #DP_USER
BIT KEYDATA, 12 ;判 IOPF3 是否为 1 ,如为 0 则确实有 K1
键按下BCND K1_RET, TC
SPLK #0FFH, IOSFT_REG; 给显示的数据值K1_RET : RET