4DSP原理与应用教案数字IO.doc_第1页
4DSP原理与应用教案数字IO.doc_第2页
4DSP原理与应用教案数字IO.doc_第3页
4DSP原理与应用教案数字IO.doc_第4页
4DSP原理与应用教案数字IO.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DSP原理与应用教案(4)教学课时:4学时四、数字量I/O模块4.1 数字量I/O端口概述F2407系列有多达41个通用、双向的数字量I/O(GPIO)引脚,其中大多数都是基本功能和一般I/O复用引脚。大多数I/O引脚都可用来实现其他功能。数字量I/O端口模块采用了一种灵活的方法,可实现控制专用I/O和复用I/O引脚的功能。所有专用I/O和复用I/O引脚的功能都可通过9个16位控制寄存器来设置。可分为两类: I/O端口复用控制寄存器(MCRx) 用来控制选择I/O端口作为基本功能或一般I/O引脚功能。数据和方向控制寄存器(PxDATDIR) 当I/O端口用作一般I/O引脚功能时,用数据和方向控制寄存器可控制数据和双向I/O引脚的数据方向。这些寄存器直接与双向I/O引脚相连。4.2 数字量I/O端口寄存器图4-1给出了F2407系列I/O端口复用引脚配置简图。可见寄存器单元的配置与实际I/O引脚的内部结构之间的联系。表4-1列出了数字量I/O模块可用的寄存器单元。这些寄存器被储存器映射到数据空间,地址为7090h709Fh。寄存器单元中保留的位是无效的,读时为0,写对其无影响。图4-1 复用引脚配置简图表4-1 数字量I/O端口寄存器地址存储寄存器说明地址存储寄存器说明7090hMCRAI/O端口复用控制寄存器A709ChPCDATDIRI/O端口C数据和方向寄存器7092hMCRBI/O端口复用控制寄存器B709EhPDDATDIRI/O端口D数据和方向寄存器7094hMCRCI/O端口复用控制寄存器C7095hPEDATDIRI/O端口E数据和方向寄存器7098hPADATDIRI/O端口A数据和方向寄存器7096hPFDATDIRI/O端口F数据和方向寄存器709AhPBDATDIRI/O端口B数据和方向寄存器4.2.1 I/O端口复用输出控制寄存器 表4-2 I/O端口复用控制寄存器A(MCRA)配置表4-2 I/O端口复用控制寄存器A(MCRA)配置(续)表4-3 I/O端口复用控制寄存器B(MCRB)配置表4-3 I/O端口复用控制寄存器B(MCRB)配置(续)表4-4 I/O端口复用控制寄存器C(MCRC)配置4.2.2 I/O端口数据和方向寄存器 F2407系列共有6个数据和方向控制寄存器(PxDATDIR)。当I/O端口用作通用I/O功能时,用数据和方向控制寄存器可控制数据和到双向I/O引脚的数据方向。这些寄存器直接与I/O引脚相连。当I/O用作基本功能时,这些寄存器的设置对相应的引脚无影响。4.3 数字量I/O端口应用4.3.1 I/O端口作为输出下面的设计是一个F2407与发光二极管的接口电路及应用。用发光二极管作指示灯是控制系统中一种常用的方法。ABCOE1OE2AOE2BGNDGND74LVC138VccY0Y1Y2Y3Y4Y5Y6Y7GNDVccKEYCLEDCLK1615141312111097GND1236458GNDIOPA3IOPA4IOPA5VccGNDPWM3/IOPB0PWM4/IOPB1PWM5/IOPB2PWM6/IOPB3T1PWM/T1CMP/IOPB4T2PWM/T2CMP /IOPB5TDIRA/IOPB6TCLKINA/IOPB7CAP3/IOPA5CAP2/QEP2/IOPA4CAP1/QEP1/IOPA3TMS320LF2407757983ResetLEDCLK52 IOPB047 IOPB144 IOPB240 IOPB316 IOPB418 IOPB514 IOPB637 IOPB7CLRCLK1D2D3D4D5D6D7D8DGNDVccGNDY0Y1Y2Y3Y4Y5Y6Y7GNDVccGNDLED0LED1LED2LED3LED4LED5LED6LED72010256912151619GND111347813141718GND74HC273GNDR754.7KLED0LED1LED2LED3LED4LED5LED6LED7R76R77R78R79R80R81R82R83300300300300300300300300GNDS1S2S3S4S5S6S7S8KEYCVccA0A1A2A3A4A5A6A7EDIRGNDB0B1B2B3B4B5B6B7IOPB0IOPB1IOPB2IOPB3IOPB4IOPB5IOPB6IOPB7181716151413121111134781314191GND74LVC245R7410KVcc8键输入R684.7K S1K1R694.7K S2K2R704.7K S3K3R714.7K S4K4R724.7K S5K5R734.7K S6K6R744.7K S7K7R754.7K S8K8VccGND图4-2 F2407与键盘、LED接口电路设计电路如图4-2所示。74HC273用于驱动8个二极管,CLR接F2407的复位引脚,使在复位时74HC273输出为低电平,不点亮发光二极管。F2407的IOPCA3、IOPCA4及IOPCA5分别接74LVC138的A、B及C输入,通过其Y7选通CLK作为74HC273的控制信号。当Y7输出为高时,74HC273的输出有效(即输出信号反映输入的内容);当Y7输出为低时,输出无效(即输入变化时输出不变)。用IOPB端口来控制发光二极管的亮灭(某位为高则相应的LED发光,某位为低则相应的LED熄灭)。编制程序时,通常先向IOPB端口发送需要显示的数据,再通过Y7发送一个脉冲,循环点亮8个发光二极管。1、汇编程序设计 下面给出的程序用来循环点亮8个发光二极管。在此用软件延时的方法来调节发光二极管的延时间隔。源程序代码:IOSFT_REG.usect .data0,1;要显示的数据寄存器.include F2407REGS.H;引用头部文件 .def _c_int0 .text_c_int0: ;相当于主程序的入口CALL SYSINIT ;调系统初始化程序LDP#DP_PF2;指向7080h7100h区LACL MCRAAND#000FFH;IOPB口配置为一般I/O功能SACL MCRALACL MCRAAND#0FF00H;IOPA 配置为一般I/O功能SACL MCRA LACL PBDATDIROR#0FF00H;IOPB口设置为输出方式SACL PBDATDIR LACL PADATDIROR#0FF00H SACL PADATDIR ;IOPA 设置为输出方式LDP#5H;指向0280h0300h区SPLK #80H,IOSFT_REG;给显示的数据赋初值LOOP:LDP#DP_PF2LACL PADATDIRAND#0FFC7H;138 select ch0,ledclk=1 SACL PADATDIR ;开74HC273片选信号LDP#5HLACL IOSFT_REGLDP#DP_PF2 OR #0FF00HSACL PBDATDIR ;送要显示的数据到IOPB口 LACL PADATDIR OR#0038H ;138 select ch7,ledclk=0SACL PADATDIR ;关74HC273片选信号 CALL DELAY;调延时程序LDP#5HLACL IOSFT_REGBITIOSFT_REG,BIT0;判是否循环完一次,即已点亮第8个发光二极管ROR;左移一位SACL IOSFT_REGBCND LOOP1,TCBWAITLOOP1:LDP#5HSPLK #80H,IOSFT_REG;如循环完一次则显示数据赋初值WAIT:NOPBLOOP;(2)系统初始化程序SYSINIT:SETC INTM CLRC SXM CLRC OVMCLRC CNF;B0 被配置为数据存储空间 LDP #0E0HSPLK #81FEH, SCSR1 ;CLKIN=6 M,CLKOUT=24 M SPLK #0E8H, WDCR;不使能WDTLDP#0SPLK #0000H,IMR;不使能SPLK #0FFFFH,IFR;清全部中断标志RET;(3)软件延时程序DELAY:MAR *, AR4LARAR4, #0FFFEHLARAR0, #00HDELAY1:SBRK #1NOPCMPR 00BCND DELAY1,NTC RET2、C语言程序设计下面给出的程序用来循环点亮8个发光二极管。在此用软件延时的方法来调节发光二极管的延时间隔。关于该程序的几点说明如下:(1)该程序中所有与DSP硬件有关的寄存器都用指针方式寻址,这与文件register.h中DSP寄存器的定义相对应。(2)XSM、OVM、CNF和INTM等位于ST0或ST1寄存器中,而这两个寄存器在数据存储器中无直接映射地址,所以对这些位的操作应该嵌入汇编语句。(3)寄存器PBDATDIR的高8位是IOPB端口数据流动方向的设置,设置完成后一般不再改变;低8位是数据内容,在该程序中若改变其内容,则可实现LED的循环显示。若直接通过PBDATDIR移位的方式实现其数据内容的变化,则很不方便(因为移位时高8位也要移动),因此在程序中设置了另外一个寄存器led,其高8位为0,低8位存储需要显示的数据。用C语言指令“led=led1”实现数据右移一位。每次须改变LED的显示内容时,用指令“PBDATDIR= PBDATDIR&0x0FF00”屏蔽掉其数据位,再用指令“PBDATDIR= PBDATDIR | led”把需要显示的数据赋给IOPB端口即可。源程序代码:/ 该程序用于实验演示模板上的8个LED的循环显示#include register.h main() / 初始化子程序 int led; int i,k; asm( setcSXM);/ 抑制符号位扩展asm( clrcOVM);/ 累加器中结果正常溢出asm( clrcCNF);/ B0被配置为数据存储空间asm( setcINTM);/ 禁止所有中断SCSR1=0x81FE;/ CLKIN=10M,CLKOUT=4*CLKIN=40MWDCR=0x0E8;/ 不使能看门狗,因为SCSR2中的WDOVERRIDE / 可以用软件禁止看门狗IMR=0x0000;/ 禁止所有中断IFR=0x0FFFF;/ 清除全部中断标志,写1清0MCRA=MCRA&0x00c7;/ IOPA3,IOPA4,IOPA5,IOPB端口配置为一般的I/O功能,TMS320LF240x的/ 端口均为8位,MCRA为16位因此控制了IOPA和IOPB的设置 PBDATDIR=0x0FF00;/ IOPB端口设置为输出方式,熄灭全部的LED PADATDIR=PADATDIR&0x0FF00;PADATDIR=PADATDIR|0x0FF38;/ IOPA3,IOPA4,IOPA5 设置为输出方式,且LEDCLK=1while(1)for(led=0x0080,i=0;i1,i+) PBDATDIR=PBDATDIR&0x0FF00;/首先屏蔽B口的各位 PBDATDIR=PBDATDIR|led;/把需要显示的值给IOPB端口 PADATDIR=PADATDIR&0x0FF00; PADATDIR=PADATDIR|0x0FF38;/ LEDCLK=1 for(k=0;k0x0fffe;k+) k=k; / 直接返回中断服务程序void interrupt nothing( ) return;4.3.2 键盘与发光二极管配合使用程序下面的设计是一个F2407与键盘和发光二极管的接口电路及应用。有8个键和8个发光二极管,键盘的值先用IOPB端口直接读取,即相应的I/O用作输入方式;把IOPB端口作为输出方式,去点亮8个发光二极管。其电路如图4-2所示。键盘K1K8分别对应于I/O端口IOPB0IOPB7。如果按下8个键盘中的某个按键,则相应的发光二极管点亮。用查询的方式来读取键值。当S1键按下时,就点亮发光二极管LED0。S1键对应的输入I/O引脚为IOPB0。在IOPB0作为一般I/O输入的情况下,若S1键按下,则端口B数据和方向控制寄存器(PBDATDIR)的第0位为0。经过延时消抖动后,若PFDATDIR.0仍为0,则表示S1键按下。1、汇编程序设计KEYXS.usect .data0,1;LED显示的数据KEYDATA.usect .data0,1;前次LED显示的数据DP_USER.set5.include F2407REGS.H ;引用头部文件 .def _c_int0; ;(2)主程序 .text_c_int0 CALL SYSINIT;调系统初始化程序LDP#DP_USER;指向0280h0300h区SPLK #0000H,KEYXS ;给要显示的数据赋初值 B LED ;使LED全部熄灭LOOP:CALL KEY;调键盘程序,即扫描键盘LED: LDP#DP_PF2 ;选页LACL PADATDIR ;将PADATDIR装载到ACC的低16位OR#00038H;LEDCLK=0SACL PADATDIR ;开74HC273片选信号LDP#DP_USERLACL KEYXSOR#0FF00H;IOPB口为输出方式LDP#DP_PF2SACL PBDATDIR ;送要显示的数据到IOPB口LACL PADATDIROR#0ff10H;LEDCLK=1AND #0ff10HSACL PADATDIR ;关74HC273片选信号CALL KEYDELAYWAIT:RPT #7 ;延时 NOPBLOOP ;跳转,循环查键; ;(3)系统初始化程序SYSINIT:SETC INTM CLRC SXM SETC OVM CLRC CNF ;B0 被配置为数据存储空间 LDP #0E0H SPLK #81FEH,SCSR1 ;CLKIN=6 M,CLKOUT=24 M SPLK #0E8H,WDCR;Disable WDT LDP#0SPLK #0000H,IMR;不使能中断SPLK #0FFFFH,IFR;清全部中断标志RET; ;(4)键盘初始化程序KEYINIT:LDP#DP_PF2LACL MCRAAND#000c7H;IOPA3,IOPA4,IOPA5,IOPB端口配置为一般的I/O功能SACL MCRALACL PBDATDIRAND#0000H;IOPB端口设置为输入方式SACL PBDATDIRLACL PADATDIROR#0FF10H;IOPA3,IOPA4,IOPA5 设置为输出方式,且KEYC=1AND #0FF10HSACL PADATDIRRET; ;(5)键盘程序KEY:CALL READKEY;调读键程序LACL KEYXSBCND KEY,EQ ;没有键按下跳转到KEY,循环查键CALL KEYDELAY ;延时消抖动CALL READKEY;再一次读键值LACL KEYXSBCND KEY,EQ ;没有键按下跳转到KEY,循环查键 B LED ;有键按下,跳转到LED,进行显示; ;(6)读键子程序READKEY: CALL KEYINIT ;调键盘初始化程序 LDP#DP_PF2 LACL PBDATDIR ;取出键值PBDATDIR.0PBDATDIR.3 OR #0FF00H ;屏蔽高8位 CMPL ;取反 LDP#DP_USER SACL KEYXS ;存放键值 RET ;返回; ;(7)用软件延时30mS消抖动KEYDELAY: LACC #6000KEYD1: SUB #1 RPT #80 NOP BCND KEYD1,NEQ RET; ;(10)假中断程序PHANTOM KICK_DOG;复位看门狗RETEND2、C语言程序设计/ 该程序用于实验演示模板上的8个LED的显示#include register.h int j,k;main() / 初始化子程序 asm( setcSXM);/ 抑制符号位扩展asm( clrcOVM);/ 累加器中结果正常溢出asm( clrcCNF); / B0被配置为数据存储空间asm( setcINTM);/ 禁止所有中断SCSR1=0x81FE;/ CLKIN=10M,CLKOUT=4*CLKIN=40MWDCR=0x0E8; / 不使能看门狗,因为SCSR2中的WDOVERRIDE / 软件禁止看门狗IMR=0x0000;/ 禁止所有中断IFR=0x0FFFF;/ 清除全部中断标志,写1清0MCRA=MCRA&0x00c7; / IOPA3,IOPA4,IOPA5,IOPB端口配置为一般的I/O功能,TMS320LF240x的 / 端口均为8位,MCRA为16位因此控制了IOPA和IOPB的设置 PBDATDIR=0x0FF00; / IOPB端口设置为输出方式 PADATDIR=PADATDIR|0x0FF38;PADATDIR=PADATDIR&0x0FF00; /IOPA3,IOPA4,IOPA5 设置为输出方式,且LEDCLK=1 PADATDIR=PADATDIR|0x0FF10; / IOPA3,IOPA4,IOPA5 设置为输出方式,选通KEYCwhile(1) PBDATDIR=PBDATDIR&0x00ff; k=PBDATDIR&0x00FF; if(k=0x00FF) k=0; else k=1; if(k=1) for(j=0;j3000;j+) ; k=PBDATDIR&0x00FF; if(k=0x00FF) k=0; else k=1; if(k=1) k=PBDATDIR&0x00FF; switch(k) case 0x00FE:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF01; break; /按下S1点亮led1 case 0x00FD:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF02; break; /按下S2点亮led2 case 0x00FB:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF04; break; /按下S3点亮led3 case 0x00F7:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF08; break; /按下S4点亮led4 case 0x00EF:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF10; break; /按下S5点亮led5 case 0x00DF:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF20; break; /按下S6点亮led6 case 0x00BF:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF40; break; /按下S7点亮led7 case 0x007F:PBDATDIR=(PBDATDIR&0x0FF00)|0x0FF80; break; /按下S8点亮led8 default: PBDATDIR=PBDATDIR; PADATDIR=PADATDIR|0x0FF38; PADATDIR=PADATDIR&0x0FF00; /IOPA3,IOPA4,IOPA5 设置为输出方式,且LEDCLK=1 PADATDIR=PADATDIR|0x0FF10; / 直接返回中断服务程序void interrupt nothing( ) return;开始系统初始化:状态、控制位配置系统配置端口配置:IOPA、IOPB配置为一般I/O功能IOPA、IOPB配置为输出方式数据初始化:显示数据赋初值(80H)使LEDCLK=“0”即选通138的Y7送显示数据到PB口使LEDCLK=“1”即不选通138的Y7显示数据进入273到其输出软件延时显示数据位0到TC显示数据右移一位保存显示数据TC=1?显示数据赋初值(80H)NYAABB4.3.3 光电隔离的8路开关量输入与8路开关量输出电路下面的设计,利用DSP的I/O端口IOPB0IOPB7与74LVC245构成8路开关量输入通道。同时DSP的I/O端口IOPB07与74HC273锁存器构成8路开关量输出通道。其中DSP的I/O端口IOPA35这3个信号作为74LVC138的输入信号,经138译码器输出一个信号来使能74LVC245,从而控制I/O端口IOPB07输入8路开关量信号,或者经138译码器输出一个信号来控制74HC273锁存器,从而使I/O端口IOPB07输出8路开关量信号被锁存到74HC273的寄存器中。调试时,可以适当地选择连接光电耦合二极管串联的电阻值,使光电耦合器件可靠导通,实现不同电压等级下的电平匹配与电气隔离,从而模拟实际控制过程中的光电隔离型开关量输入。此时,光电耦合器件的Vin接5V电压,其IN07为8路开关量输入,OUT07为8路开关量输出。开关量输入为低电平时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论