第 6 章: 数字输入 / 输出模块 (i/o)

27
第6第 第第第第 / 第第第第 (I/O) 6.1 第第 I/O 第第第第 6.2 第第 I/O 第第第第第 6.3 I/O 第第第第

Upload: evelia

Post on 22-Jan-2016

189 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: 第 6 章: 数字输入 / 输出模块 (I/O)

第 6 章: 数字输入 / 输出模块 (I/O)

6.1 数字 I/O 端口概述

6.2 数字 I/O 端口寄存器

6.3 I/O 端口应用

Page 2: 第 6 章: 数字输入 / 输出模块 (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 引脚,大部分是复用的。

Page 3: 第 6 章: 数字输入 / 输出模块 (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引脚

Page 4: 第 6 章: 数字输入 / 输出模块 (I/O)

6.2 数字 I/O寄存器

表 6.1( P97)列出了与 I/O模块有关的寄存器,地

址为: 7090h-709Fh

注意: 映射到数据存储器空间。 当复用 I/O脚无论是被配置为外设功能还是为通用 I/O时,

引脚的状态都可通过读 I/O数据寄存器来获取。

保留位是不可操作的,读出为 0,写入对它无影响。

Page 5: 第 6 章: 数字输入 / 输出模块 (I/O)

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 控制寄存器地址

Page 6: 第 6 章: 数字输入 / 输出模块 (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)。

Page 7: 第 6 章: 数字输入 / 输出模块 (I/O)

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

Page 8: 第 6 章: 数字输入 / 输出模块 (I/O)

6.2 数字 I/O寄存器

( 2) I/O端口复用控制寄存器 B,映射地址:

7092h,其配置见表 6.3( P98)。

注意: MCRB.9-MCRB.15 必须配置成 1 ,其为系统的专用引脚,用作与硬件仿真器接口 (JTAG) 相连,实现 DSP 的在线仿真功能。对其写 0 会引起不可预测的结果。

Page 9: 第 6 章: 数字输入 / 输出模块 (I/O)

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 保留位

Page 10: 第 6 章: 数字输入 / 输出模块 (I/O)

6.2 数字 I/O寄存器

( 3) I/O端口复用控制寄存器 C(MCRC),映射地

址: 7094h,其配置见表 6.4( P99)。

Page 11: 第 6 章: 数字输入 / 输出模块 (I/O)

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 保留 保留位

Page 12: 第 6 章: 数字输入 / 输出模块 (I/O)

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端口被选择作外设功能时,数据和方向控制寄存器的设置对

相应的引脚无影响。

Page 13: 第 6 章: 数字输入 / 输出模块 (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,则必须对数据和方向寄存器进行初始化设置,为输入还是输出。

Page 14: 第 6 章: 数字输入 / 输出模块 (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-设置相应引脚,使其输出信号为高电平时有效

Page 15: 第 6 章: 数字输入 / 输出模块 (I/O)

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-设置相应引脚,使其输出信号为高电平时有效

Page 16: 第 6 章: 数字输入 / 输出模块 (I/O)

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-设置相应引脚,使其输出信号为高电平时有效

Page 17: 第 6 章: 数字输入 / 输出模块 (I/O)

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-设置相应引脚,使其输出信号为高电平时有效

Page 18: 第 6 章: 数字输入 / 输出模块 (I/O)

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-设置相应引脚,使其输出信号为高电平时有效

Page 19: 第 6 章: 数字输入 / 输出模块 (I/O)

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 为输入状态

Page 20: 第 6 章: 数字输入 / 输出模块 (I/O)

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 接口电路

Page 21: 第 6 章: 数字输入 / 输出模块 (I/O)

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

Page 22: 第 6 章: 数字输入 / 输出模块 (I/O)

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

Page 23: 第 6 章: 数字输入 / 输出模块 (I/O)

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

Page 24: 第 6 章: 数字输入 / 输出模块 (I/O)

6.3 I/O端口应用 ( 3 )软件延时程序DELAY :

MAR *, AR4

LAR AR4, #0FFFEH

LAR AR0, #00H

DELAY1 : SBRK #1

NOP

CMPR00

BCND DELAY1, NTC

RET

Page 25: 第 6 章: 数字输入 / 输出模块 (I/O)

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 接口电路

Page 26: 第 6 章: 数字输入 / 输出模块 (I/O)

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

Page 27: 第 6 章: 数字输入 / 输出模块 (I/O)

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