为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

第6章 数字输入输出

2011-05-17 40页 ppt 517KB 18阅读

用户头像

is_614309

暂无简介

举报
第6章 数字输入输出nullnull第6章 数字输入输出I/O 41只I/O引脚,大部分是复用的。 DSP复位时,大部分I/O引脚会被上拉为数字输入的模式。 数字I/O脚有专用和复用之分。其功能可通过9个16位控制寄存器来控制。 控制寄存器分为两类: (1)I/O复用控制寄存器(MCRx),用来选择I/O脚是片内外设功能还是通用I/O功能; (2)数据方向控制寄存器(PxDATDIR):用来控制双向nullI/O脚的数据传送方向。 注意:上述数字I/O脚是通过控制寄存器(映射在数据存储器空间)来控制的,与器件的I/O空间无任何关系。...
第6章 数字输入输出
nullnull第6章 数字输入输出I/O 41只I/O引脚,大部分是复用的。 DSP复位时,大部分I/O引脚会被上拉为数字输入的模式。 数字I/O脚有专用和复用之分。其功能可通过9个16位控制寄存器来控制。 控制寄存器分为两类: (1)I/O复用控制寄存器(MCRx),用来选择I/O脚是片内外设功能还是通用I/O功能; (2)数据方向控制寄存器(PxDATDIR):用来控制双向nullI/O脚的数据传送方向。 注意:上述数字I/O脚是通过控制寄存器(映射在数据存储器空间)来控制的,与器件的I/O空间无任何关系。 6.1 数字I/O寄存器简介 I/O复用引脚的结构见图6-1。由图可看出复用I/O引脚如何实现来引脚功能选择和数据传送方向选择的。 nullnull6-1(P65)列出了与I/O模块有关的寄存器,地址为:7090h-709Fh(映射在数据存储器空间) 表6-1 LF240x/240xA 的数字I/O控制寄存器 地址 寄存器 功能 7090h MCRA I/O复用控制寄存器A 7092h MCRB I/O复用控制寄存器B null地址 寄存器 功能 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数据和方向寄存器null保留位是不可操作的,读出为0,写入对它无影响。 注意:当复用I/O脚无论是被配置为外设功能还是为通用I/O时,引脚的状态都可通过读I/O数据寄存器来获取。 6.2 I/O 端口复用控制寄存器 LF240x/240xA具有3个I/O端口复用控制寄存器: MCRA、MCRB、MCRC。 (1) I/O端口复用控制寄存器A(MCRA),映射地址: 7090h,其配置见表6-2(P65)。 null(2)I/O端口复用控制寄存器B,映射地址:7092h ,其配置见表6-3(P66)。 表6-3 I/O端口复用控制寄存器B的配置null(3) I/O端口复用控制寄存器C(MCRC),映射地址:7094h I/O端口复用控制寄存器C的如下,其配置见表6-4 (P67)。null6.3 数据和方向控制寄存器 LF2407/2407A有6个数据和方向控制寄存器(PxDATDIR), 这些数据和方向控制寄存器包含控制引脚的两个功能位。 I/O方向位 如果引脚被选择通用I/O,方向位决定了该引脚是作输入(0)还是输出(1)。 I/O数据位 如果引脚被选择了通用I/O,当方向选为输入,则可从该位上读取数据,当方向选为输出,则可向该位写入数据 。null当I/O端口被选择作通用I/O引脚,数据和方向控制寄存器可以控制数据和I/O引脚的数据方向。 如果I/O端口被选择作外设功能时,数据和方向控制寄存器的设置对相应的引脚无影响。下面详细介绍数据和方向控制寄存器。 (1)I/O端口A数据和方向控制寄存器(PADATDIR),映射地址:7098h,格式如下。 位15-8:AnDIR PA7-PA0的数据方向 0-相应引脚配置为输入 1-相应引脚配置为输出null位7-0:IOPAn 如果AnDIR=0,引脚配置为输入: 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平 如果AnDIR=1,引脚配置为输出: 0-设置相应引脚,使其输出信号为低电平 1-设置相应引脚,使其输出信号为高电平 当引脚选择为通用I/O功能时,那么I/O端口A数据和方向控制寄存器(PADATDIR)的数据位与对应的I/O引脚如表6.5(P69)所示。 null 表6.5 寄存器PADATDIR的数据位与对应的I/O引脚 如果I/O端口用作通用I/O,则必须对数据和方向寄存器进行初始化设置,规定其为输入端口还是输出端口。null(2) I/O端口B数据和方向控制寄存器(PBDATDIR),映射地址:709Ah I/O端口B数据和方向控制寄存器的格式如下。 位15-8:BnDIR PB7-PB0的数据方向 0-相应引脚配置为输入 1-相应引脚配置为输出 位7-0:IOPBn 如果BnDIR=0,引脚配置为输入方式。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平null 如果BnDIR=1,引脚配置为输出 0-设置相应引脚,使其输出信号为低电平时有效 1-设置相应引脚,使其输出信号为高电平时有效 当引脚选择为通用I/O功能时,那么I/O端口B数据和方向控制寄存器(PBDATDIR)的数据位与对应的I/O引脚如表6.6所示。 null(3) I/O端口C数据和方向控制寄存器(PCDATDIR), 映射地址:709Ch I/O端口C数据和方向控制寄存器的格式如下。 位15-8:CnDIR PC7-PC0的数据方向 0-相应引脚配置为输入 1-相应引脚配置为输出 位7-0:IOPC7-IOPC0 如果CnDIR=0,引脚配置为输入。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平null 如果BnDIR=1,引脚配置为输出 0-设置相应引脚,使其输出信号为低电平 1-设置相应引脚,使其输出信号为高电平 当引脚选择为通用I/O功能时,那么I/O端口C数据和方向控制寄存器(PCDATDIR)的数据位与对应的I/O引脚如表6.7所示。 (4) I/O端口D数据和方向控制寄存器(PDDATDIR), 映射地址:709Eh I/O端口D数据和方向控制寄存器的格式如下。null 位15-9:保留位 位8: D0DIR 0-相应引脚配置为输入 1-相应引脚配置为输出 位7-1:保留 位0: IOPD0 如果D0DIR=0,引脚配置为输入。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平 null 如果D0DIR=1,引脚配置为输出 0-设置相应引脚,使其输出信号为低电平时有效 1-设置相应引脚,使其输出信号为高电平时有效 当引脚选择为通用I/O功能时,那么I/O端口D数据和方向控制寄存器(PDDATDIR)的数据位与对应的I/O引脚如表6.8所示。 (5) I/O端口E数据和方向控制寄存器(PEDATDIR),地址:7095h I/O端口E数据和方向控制寄存器的格式如下 null位15-8:EnDIR 0-相应引脚配置为输入 1-相应引脚配置为输出 位7-0:IOPEn 如果EnDIR=0,引脚配置为输入。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平 如果EnDIR=1,引脚配置为输出 0-设置相应引脚,使其输出信号为低电平时有效 null1-设置相应引脚,使其输出信号为高电平时有效 当引脚选择为通用I/O功能时,那么I/O端口E数据和方向控制寄存器(PEDATDIR)的数据位与对应的I/O引脚如表6.9所示。 (6) I/O端口F数据和方向控制寄存器(PFDATDIR),映射地址:7096h I/O端口E数据和方向控制寄存器的格式如下。 位15:保留位 位14-8:EnDIR 0-相应引脚配置为输入 1-相应引脚配置为输出 null位7-0:IOPFn 如果FnDIR=0,引脚配置为输入。 0-相应引脚的电平读为低电平 1-相应引脚的电平读为高电平 如果FnDIR=1,引脚配置为输出 0-设置相应引脚,使输出为低电平有效 1-设置相应引脚,使输出为高电平有效 当引脚选择为通用I/O功能时,那么I/O端口E数据和方向控制null寄存器(PFDATDIR)的数据位与对应的I/O引脚如表6.10所示。 6.4 数字I/O端口配置实例 在使用数字I/O之前,需用软件对数字I/O进行配置,选择I/O引脚的功能,且设置I/O引脚的数据方向,然后才可以读取数据或输出数据。 下面为一个基本的数字I/O配置实例的汇编源程序。读者可参照此程序,来配置其它的任何数目的数字I/O null MCRA .set7090h;可将这些映射语句放于240x.h文件中 PADATDIR .set7098h;可将这些映射语句放于240x.h文件中 PBDATDIR .set709Ah;可将这些映射语句放于240x.h文件中 LDP #0E1h ;指向相应的数据页面 LACC #0h ;设置MCRA所有位均为0 SACL MCRA ;将引脚IOPA0-7和IOPB0-7配置为I/O引脚 SACL PADATDIR ;引脚IOPA0-7配置为输入,低电平有效 LACC #0F00h ;引脚IOPB7-IOPB4配置为输入 SACL PBDATDIR ;引脚IOPB3-IOPB0配置为输出 LACC PBDATDIR ;读取引脚IOPB7-IOPB4的输入状态 AND #00F0h ;A为输入状态 null上面为一个数字I/O的实际配置程序,对于每个寄存器的定义可以参考前面的介绍,为了读者使用方便,表6.11(P74)列出了所有数字I/O定义的参考表。 6.5 数字I/O的应用实例 6.5.1 使用数字I/O查询输入信号 通常可以配置数字I/O为输入或输出,以便于与外设进行信息交换。本例为使用数字I/O端口来查询外界信号输入情况,硬件接口电路如图6.11所示 nullnull为抗干扰,外界输入信号需要加光耦隔离,以便获得符合LF2407/2407A要求的信号。本例使用PWM3/IOPB0、PWM4/IOPB1、PWM5/IOPB2和PWM6/IOPB3。 I/O初始化需设置引脚为I/O功能,且需要选择信号方向。下面为读取输入信号的例程。 ======================= * 文件名:INPUT.asm * .includ “240xA.h” ;变量和寄存器定义 .includ “vector.h” ;中断向量表定义,请参考4.9节null;――――――――――――――――――――――――― ;B2块的变量定义 ;――――――――――――――――――――――――― .bss INDATA,1 ;I/O输入值判断变量 .bss GPR0,1 ;通用目标寄存器 ;======================== ;主代码 ;======================== .text NOP START: SPLK #000Eh,IMR ;屏蔽除INT2-4以外的其它中断 LACC IFR ;读中断标志 SACL IFR ;清除中断标志null CLRC CNF ;配置块B0到数据存储空间 LDP #00E0h ;数据页指向7000h~707Fh SPLK #06Fh,WDCR ;如VCCP=5V,则禁止看门狗 LDP #SCSR1>>7 SPLK #0000,SCSR1 ; LDP #00E1h ;数据页指向7080h~70FFh SPLK #0F00h,MCRA ;配置I/O,选择IOPB0~IOPB3 SPLK #0000h,PBDATDIR ;配置为输入模式 LDP #0 SPLK #0,GPR0 ;为程序存储器空间设置 ; 0~7个等待状态 OUT GPR0,WSGR null KICK_DOG ;复位看门狗 CLRC INTM ;使能DSP中断 ST_LOOP1 LDP #00E1h LACC PBDATDIR LDP #INDATA SACL INDATA BIT INDATA,BIT0 ; 判断IOPB0是否有输入信号,如 ; 有则跳到ST_LOOP2 BCND ST_LOOP2,TC B ST_LOOP1 ST_LOOP2 LDP #00E1h LACC PBDATDIRnull LDP #INDATA SACL INDATA BIT INDATA,BIT1 ; 判断IOPB1是否有输入信号,如有 ;则跳到 ST_LOOP3 BCND ST_LOOP3,TC B ST_LOOP2 ST_LOOP3 LDP #00E1h LACC PBDATDIR LDP #INDATA SACL INDATA null BIT INDATA,BIT2 ;判IOPB2是否有输入信号,如有则 ;跳到ST_LOOP4 BCND ST_LOOP4,TC B ST_LOOP3 ST_LOOP4 LDP #00E1h LACC PBDATDIR LDP #INDATA SACL INDATA BIT INDATA,BIT3 ;判断IOPB3是否有输入信号,如有 ;则跳到MAIN null BCND MAIN,TC B ST_LOOP4 MAIN: NOP B MAIN .end 6.5.2 使用数字I/O输出信号 使用I/O端口输出4个信号,这4个信号分别连接到4个LED,硬件接口电路如图6.12(P78)所示。输出引脚与LED之间接一触发器SN74HCT273,来实现对LED的驱动。在此使用 PWM3/IOPB0、PWM4/IOPB1、nullPWM5/IOPB2和PWM6/IOPB3作为输出信号,而PWM7/IOPE1作为选通SN74HCT273的输出信号。下面的实例程序实现对4个LED的循环驱动,即LED循环发光,即DS0→DS1→DS2→DS3→DS0……。nullnull;========================= * 文件名:OUTPUT.asm * .include “240xA.h” ;变量和寄存器定义 .include “vector.h” ;中断向量表定义,请参考4.9节 ;――――――――――――――――――――――――― ;B2块的变量定义 ;――――――――――――――――――――――――― .bss OUTDATA,1 ;I/O输出值 .bss GRP0,1 ;通用目标寄存器 ;========================= ;主代码 ;=========================null.text NOP START: SPLK #000Eh,IMR ;屏蔽除INT2、INT3和INT4以外的 ;其它中断 LACC IFR ;读中断标志 SACL IFR ;清除中断标志 CLRC CNF ;配置块B0到数据存储空间 LDP #00E0h ;数据页指向7000h~707Fh SPLK #06Fh,WDCR ;如果VCCP=5V,则禁止看门狗 LDP #SCSR1>>7 SPLK #0000,SCSR1 null LDP #00E1h ;数据页指向7080h~70FFh SPLK #0F00h,MCRA ;配置I/O,选择IOPB0~IOPB3 SPLK #0F00h,PBDATDIR ;配置为输出模式 SPLK #0002h,MCRC ;配置I/O, 选择IOPE1 SPLK #0200h,PEDATDIR;配置为输出模式 LDP #0 SPLK #0h,GPR0 ;为程序存储器空间设置等待发生 ;器,0~7个等待状态 OUT GPR0,WSGR KICK_DOG ;复位看门狗 CLRC INTM ;使能DSP中断nullMAIN: LDP #0 SPLK #1,OUTDATA ;给输出变量赋值 LDP #00E1h LACC PEDATDIR OR #0202h ;输出到IOPE1,选通SN74HCT273 SACL PEDATDIR ST_LOOP LDP #0h LACL OUTDATA OR #0F00hnull LDP #00E1h SACL PBDATADIR ;输出信号到LED CALL DELAY ;延时 LACL OUTDATA SFL ;左移1位 SACL OUTDATA ; BIT OUTDATA,BIT4 ;判是否完成了一个循环,如 ;是则跳到MAIN,重复开始 BCND MAIN,TC B ST_LOOP .end nullDELAY: LAR AR0,#01h ;延时子程序 D_LOOP: RPT #FFh ;延时参数可按需要进行修改 NOP BANZ D_LOOP RET
/
本文档为【第6章 数字输入输出】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索