收藏 分享(赏)

第5章DSP片内外设.ppt

上传人:11xg27ws 文档编号:5831174 上传时间:2019-03-19 格式:PPT 页数:61 大小:1.47MB
下载 相关 举报
第5章DSP片内外设.ppt_第1页
第1页 / 共61页
第5章DSP片内外设.ppt_第2页
第2页 / 共61页
第5章DSP片内外设.ppt_第3页
第3页 / 共61页
第5章DSP片内外设.ppt_第4页
第4页 / 共61页
第5章DSP片内外设.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

1、第5章 DSP片内外设,片内外设概述 中断管理系统 数字I/O接口 事件管理器模块EV (Event Manager) 模/数转换模块ADC SCI串行通信接口模块 SPI串行外设接口模块 CAN控制器模块 看门狗定时器 WDT,片内外设概述,TMS320C2000 DSP 控制器可以被看成是一种高档32位单片计算机(单片解决方案:Single Chip Solution)。也是由CPU、存储器、接口等组成。C2000 DSP片内接口部件有数字I/O接口、事件管理器模块、模/数转换模块、各种通信模块(包括SCI串行通信接口、 SPI串行外设接口、CAN控制器模块)、看门狗定时器及中断管理系统等

2、。,2407 DSP功能框图,中断管理系统,2407 DSP中断管理系统,DSP内核中断: INT1-INT6。每个外设中断连接到内核中断。 支持软件中断与硬件中断软件中断是由指令INTR、NMI、TRAP请求的中断。硬件中断由硬件引起。 外部中断(由外部中断引脚引起)与内部中断(由片内外设动作事件引起) 可屏蔽中断(都是硬件中断,可以用指令屏蔽或允许)与不可屏蔽中断(包括所有软件中断和硬件复位中断RS。,CPU中断寄存器,CPU中断标志寄存器IFR (Interrupt Flag Register)地址0006HD15-6 Reserved 。D5 INT6 flag, D5=1 有INT6

3、中断申请。向该位写1,可清除中断请求。D4-D0 为INT5-INT1中断申请标志。 CPU中断屏蔽寄存器IMR ( Interrupt Maskable Register)地址0004HD15-6 Reserved 。D5 INT6 mask, D5=1 , 使能INT6中断。D5=0,屏蔽 INT6中断请求。D4-D0 为INT5-INT1中断屏蔽位。,外设中断寄存器,外设中断矢量寄存器 PIVR 地址 701EH包含外设中断的地址向量。 外设中断请求寄存器 PIRQ0 7010H, PIRQ1 7011H, PIRQ2 7012H某位为1,表示有相应的外设中断请求 外设中断应答寄存器 P

4、IACK0 7014H, PIACK1 7015H, PIACK2 7016H, 外设中断请求应答位。写1引起相应的外设中断应答,从而将相应的外设中断请求位清零。,定时器T1周期中断例子 (另有教材P183例9-3),0000h B _c_int0 ;复位中断 0004h B GISR2 ;INT2中断_c_int0: ;主程序CLRC INTM ;开放总中断 WAIT: NOP ;等中断B WAIT1000h GISR2: LACC EVIVA,1 ;读取外设中断向量ADD #EV_VECTORS;加上外设中断入口地址B ACC ;转到相应的中断服务子程序T1PINT_ISR: ; T1周期

5、中断服务子程序RET,数字I/O端口(教材P179例9-2),数字并行I/O端口概述2407 DSP有41个通用双向的数字I/O(GPIO)引脚,其中大多数都是基本功能和通用I/O复用引脚。 数字I/O端口寄存器引脚的功能可以通过如下9个16控制寄存器设置:I/O复用控制寄存器(MCRx, x=A,B,C): 用来选择I/O端口作为基本功能或通用I/O功能。1:基本功能 数据和方向控制寄存器(PxDATDIR, x=A, B, C, D, E, F):用来选择一般I/O的数据方向。1:输出方式;0:输入方式,数字I/O复用引脚方框图,事件管理器模块EVA/EVB,通用定时器 GPT (Gene

6、ral Purpose Timer) 比较单元与PWM发生器 (Pulse Width Modulation) 捕获单元Capture 正交脉冲编码电路QEP (Quadrature Encoder Pulse )240x DSP 提供两个完全相同的事件管理器模块EVA/EVB。而24x(240,243等)DSP有一个。事件管理器中断分为三组(INT2, INT3, INT4),每组分配一个中断。每组中断皆有多个中断源。,事件管理器结构图,事件管理器:通用定时器 GPT,通用定时器 GPT,通用定时器x包括以下部件: (EVA:x=1,2EVB:x=3,4) 16位可读写的定时器计数器 TxC

7、NT 16位可读写的定时器周期寄存器 TxPR 16位可读写的定时器比较寄存器 TxCMPR 16位可读写的定时器控制寄存器 TxCON,全局通用定时器控制寄存器GPTCONA/B,D15,12-11,5-4: Reserved D14:T2STAT 定时器2的状态。0:减计数 D13:T1STAT D10-9:T2TOADC 定时器2启动AD转换事件 D8-7:T1TOADC D6:TCOMOE 比较输出允许 D3-2:T2PIN 定时器2比较输出极性 D1-0:T1PIN,单个通用定时器控制寄存器TxCON,D15-14: Free, Soft 仿真控制位 D13: Reserved D1

8、2-11:TMOD1,TMODE0 计数模式选择 D10-8:TPS2-TPS0输入时钟预定标系数 D6:TENBLE 定时器2,4周期寄存器选择位 D5-4:TCLKS1,TCLKS0 时钟源选择 D3-2:TCLD1,TCLD0定时器比较寄存器的重载条件 D1:TECMPR定时器比较使能位 D0:SELT1PR 周期寄存器选择,通用定时器的四种工作模式,停止/保持模式 连续增计数模式 定向增/减模式 连续增/减模式,通用定时器 :连续增/减模式,事件管理器:通用定时器 GPT:比较输出,事件管理器:比较单元与PWM发生器,每个事件管理器有三个全比较单元。每个比较单元都有两个相关的PWM输出

9、。比较单元的时基由通用定时器提供。每个事件管理器模块的比较单元包括: 三个16位的比较器(EVA:CMPR1,2,3); 一个16位的比较控制寄存器(COMCONA); 一个16位的比较方式寄存器(ACTRA) 6个比较/PWM输出引脚(EVA: PWMy,y=1-6),比较控制寄存器A:COMCONA,D15: CENABLE 比较使能位 D14-13:CLD1/CLD0 比较寄存器重载条件 D12:SVENABLE 空间矢量PWM模式位 D11-10:ACTRLD1/ACTRLD0 方式控制寄存器重载条件 D9:FCOMPOE 比较输出使能位 D8:PDPINTA STATUS 当前PDP

10、INT引脚的状态 D7-0:保留位,比较方式寄存器:ACTRA,D15:SVDIR 空间矢量PWM旋转方向位 D14-12:D2-D0 基本的空间矢量位 D11-10:CMP6ACT1/0 引脚PWM6的比较输出方式选择位。00-强制低,01-低有效,10-高有效,11-强制高 D9-8:CMP5ACT1/0 D7-6:CMP4ACT1/0 D5-4: CMP3ACT1/0 D3-2: CMP2ACT1/0 D1-0: CMP1ACT1/0,事件管理器:比较单元框图,PWM电路框图,事件管理器:比较单元与PWM发生器 (教材P188例9-4),事件管理器:捕获单元(教材P193例9-5),捕获

11、单元用于捕获输入引脚电平的变化并记录其发生变化的时间。每个事件管理器有3个捕获单元。每个捕获单元有一个与之对应的捕获输入引脚。为了使捕获单元正常工作,应设置如下寄存器:1) 初始化捕获单元FIFO堆栈CAPFIFOx, 并将适当的状态位清零。2)初始化TxCON以设置所选择的通用定时器的一种操作模式。3)如果希望得到比较和周期中断,则应设置相应的通用定时器的比较器TxCMP和周期寄存器TxPR。4) 设置捕获控制器CAPCON。,事件管理器:捕获单元,事件管理器:正交脉冲编码电路QEP,正交编码脉冲(QEP: Quadrature Encoder Pulse )是两个频率相同且正交(相位差90

12、度即1/4个周期)的脉冲。在许多运动控制系统中,需要正反两个方向的运动,为了对位置、速度进行控制,必须检测出当前运动的方向、位置、速度等。EVA、EVB各有一个QEP电路。内部有4倍频电路。,事件管理器:正交脉冲编码电路QEP,模/数转换模块,240x DSP内部有一个10位模/数转换器ADC (Analog to Digital Conversion)。可有16路模拟输入信号。转换速度可以达到375ns以内。启动模/数转换有三种方式:软件触发、事件管理器触发、外部引脚启动。16个结果寄存器RESULT0-15存储转换结果。,模/数转换模块方框图,模/数转换模块方框图,AD转换实例(另有教材P

13、200例9-6),#include “DSP281x_Device.h“ / DSP281x Headerfile Include File #include “DSP281x_Examples.h“ / DSP281x Examples Include File / Prototype statements for functions found within this file. interrupt void adc_isr(void); / Global variables used in this example: Uint16 LoopCount; Uint16 Conversion

14、Count; Uint16 Voltage11024; Uint16 Voltage21024; main() InitSysCtrl();/初始化cpuDINT;/关中断InitPieCtrl();/初始化pie寄存器 IER = 0x0000;/禁止所有的中断IFR = 0x0000;InitPieVectTable();/初始化pie中断向量表 / Interrupts that are used in this example are re-mapped to / ISR functions found within this file. EALLOW; / This is neede

15、d to write to EALLOW protected register,AD转换实例,PieVectTable.ADCINT = / Setup ADCINA2 as 2nd SEQ1 conv.,AD转换实例,AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; / Enable EVASOC to start SEQ1AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; / Enable SEQ1 interrupt (every EOS) / Configure EVA / Assumes EVA Clock is already en

16、abled in InitSysCtrl();EvaRegs.T1CMPR = 0x0080; / Setup T1 compare valueEvaRegs.T1PR = 0x10; / Setup period registerEvaRegs.GPTCONA.bit.T1TOADC = 1; / Enable EVASOC in EVAEvaRegs.T1CON.all = 0x1042; / Enable timer 1 compare (upcount mode) / Wait for ADC interruptwhile(1)LoopCount+; interrupt void ad

17、c_isr(void) Voltage1ConversionCount = AdcRegs.ADCRESULT0 4;Voltage2ConversionCount = AdcRegs.ADCRESULT1 4;/ If 40 conversions have been logged, start over,AD转换实例,if(ConversionCount = 1023) ConversionCount = 0;else ConversionCount+;/ Reinitialize for next ADC sequenceAdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;

18、 / Reset SEQ1AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bitPieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Acknowledge interrupt to PIEreturn; ,SCI串行通信接口模块,串行通信的工作原理 SCI相关寄存器 串行通信接口模块SCI的结构 多机通信240x DSP的SCI(Serial Communication Interface)串行通信接口模块是一个标准的异步串行口(UART)。可以和RS232/485设备接口。半双工或全双工操作。可以通过波

19、特率选择寄存器设置波特率。数据格式:一个起始位、1-8位数据位、可选择的奇/偶/无校验位、一个或两个停止位。,SCI相关寄存器,SCI通信控制寄存器 SCICCR(见教材) SCI控制寄存器1: SCICTL1 波特率选择寄存器SCIHBAUD,SCILBAUD SCI控制寄存器2: SCICTL2 SCI接收状态寄存器SCIRXST SCI接收数据缓冲寄存器SCIRXBUF SCI发送数据缓冲寄存器SCITXBUF SCI优先级控制寄存器SCIPRI,SCI模块方框图,SCI串口通信实例(另有教材P206例9-7),/* 2812A板:使用直连的串口通信电缆;启动串口调试助手.exe;PC机

20、发送一个“.“为结束标志*/ #include “DSP281x_Device.h“ #include “DSP281x_Examples.h“ / Prototype statements for functions found within this file. void scia_loopback_init(void); void scia_fifo_init(void); void scia_xmit(int a); void error(int); void wait(int nWait); interrupt void scia_rx_isr(void); interrupt vo

21、id scia_tx_isr(void); / Global counts used in this example Uint16 LoopCount; Uint16 ErrorCount; char cString17= “Hello PC!,Over|“ ,cReceive,cBuffer17,cAnswer16=“Oh,you say“;,SCI串口通信实例,void main(void) char ReceivedChar; int i,k=0,nLen,bReceive=0; / Step 1. Initialize System Control registers, PLL, Wa

22、tchDog, Clocks to default state:/ This function is found in the DSP281x_SysCtrl.c file.InitSysCtrl(); / Step 2. Select GPIO for the device or for the specific application: / This function is found in the DSP281x_Gpio.c file./ InitGpio(); skip this as this is example selects the I/O for SCI in this f

23、ile itselfEALLOW;GpioMuxRegs.GPFMUX.all=0x0030; / Select GPIOs to be Sci pins / Port F MUX - x000 0000 0011 0000EDIS; / Step 3. Initialize PIE vector table:/ The PIE vector table is initialized with pointers to shell Interrupt / Service Routines (ISR). The shell routines are found in,SCI串口通信实例,DSP28

24、1x_DefaultIsr.c./ Insert user specific ISR code in the appropriate shell ISR routine in / the DSP28_DefaultIsr.c file./ Disable and clear all CPU interrupts:DINT;IER = 0x0000;IFR = 0x0000;/ Initialize Pie Control Registers To Default State:/ This function is found in the DSP281x_PieCtrl.c file./ Ini

25、tPieCtrl(); PIE is not used for this example/ Initialize the PIE Vector Table To a Known State:/ This function is found in DSP281x_PieVect.c./ This function populates the PIE vector table with pointers/ to the shell ISR functions found in DSP281x_DefaultIsr.c.InitPieVectTable(); / Enable CPU and PIE

26、 interrupts/ This example function is found in the DSP281x_PieCtrl.c file. EnableInterrupts();,SCI串口通信实例,/ Step 4. Initialize all the Device Peripherals to a known state:/ This function is found in DSP281x_InitPeripherals.c/ InitPeripherals(); skip this for SCI tests / Step 5. User specific function

27、s, Reassign vectors (optional), Enable Interrupts:LoopCount = 0;ErrorCount = 0; scia_fifo_init(); / Initialize the SCI FIFOscia_loopback_init(); / Initalize SCI for digital loop back / Note: Autobaud lock is not required for this example/ Send a character starting with 0 / Step 6. Send Characters fo

28、rever starting with 0x00 and going through / 0xFF. After sending each, check the recieve buffer for the correct valuefor ( i=0;i16;i+ )scia_xmit(cStringi);while(SciaRegs.SCIFFTX.bit.TXFFST !=0) /wait(1024); for(;),SCI串口通信实例, if ( bReceive=1 )for ( i=0;i10;i+ ) scia_xmit(cAnsweri);while(SciaRegs.SCIF

29、FTX.bit.TXFFST !=0) scia_xmit(“);for ( i=0;inLen;i+ )scia_xmit(cBufferi);while(SciaRegs.SCIFFTX.bit.TXFFST !=0) scia_xmit(“);wait(1024); for ( i=9;i16;i+ ) scia_xmit(cStringi);while(SciaRegs.SCIFFTX.bit.TXFFST !=0) ,SCI串口通信实例,k=0; bReceive=0; while(1)while(SciaRegs.SCIFFRX.bit.RXFIFST =0) / 如果接受寄存器不

30、为0则跳出ReceivedChar = SciaRegs.SCIRXBUF.all;cBufferk=ReceivedChar; if ( ReceivedChar=.)cBufferk+1=0;nLen=k+1;bReceive=1;break;k+; k%=16; / Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:,SCI串口通信实例,void error(int ErrorFlag) ErrorCount+; / Test 1,SCIA DLB, 8-bit word, baud

31、 rate 0x000F, default, 1 STOP bit, no parity void scia_loopback_init() / Note: Clocks were turned on to the SCIA peripheral/ in the InitSysCtrl() functionSciaRegs.SCICCR.all =0x0007; / 1 stop bit, No loopback / No parity,8 char bits,/ async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003; / ena

32、ble TX, RX, internal SCICLK, / Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.all =0x0003; SciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD =0x0001;,SCI串口通信实例,SciaRegs.SCILBAUD =0x00e7;SciaRegs.SCICCR.bit.LOOPBKENA =0; / disable loop back SciaRegs.SCICTL1.all =0x0

33、023; / Relinquish SCI from Reset / Transmit a character from the SCI void scia_xmit(int a) SciaRegs.SCITXBUF=a; / Initalize the SCI FIFO void scia_fifo_init() SciaRegs.SCIFFTX.all=0xE040;SciaRegs.SCIFFRX.all=0x204f;SciaRegs.SCIFFCT.all=0x0; void wait(int nWait) int i,j,k=0;for ( i=0;inWait;i+ )for (

34、 j=0;j64;j+ ) k+;,SPI串行外设接口模块,串行外设接口的结构与工作原理 SPI的多机通信 SPI引脚功能的选择SPI是一种串行总线的外设接口,它只需3根引脚线(发送,接收与时钟)就可以与外部设备相连。 SPI为同步通信接口,两台通信设备在同一个时钟下工作。采用SPI接口的芯片如A/D、D/A、移位寄存器、显示驱动器、日历时钟、I/O、E2PROM、语音电路等越来越多, 传输速度高达几十Mbps。例如MAX5121为带SPI接口的12位D/A转换器芯片。类似于I2C。对比并行接口。,SPI模块方框图,SPI相关寄存器,SPI配置控制寄存器 SPICCR SPI控制寄存器SPIC

35、TL SPI状态寄存器SPISTS SPI波特率寄存器SPIBRR SPI接收缓冲寄存器SPIRXBUF SPI发送缓冲寄存器SPITXBUF SPI 串行数据寄存器SPIDAT SPI优先级控制寄存器SPIPRI,SPI模块,CAN控制器模块,概述 邮箱 控制寄存器CAN(控制器局域网Controller Area Network) 总线最初是德国BOSH公司为实现汽车内部测量与执行部件之间的数据通信而设计的现场总线(Field Bus),它是一种多主机局部网络系统。它支持分布式控制和实时控制串行通信网络,带有CAN网卡的PC主机及其带有片内CAN控制器的硬件模块可以很方便地连接到同一CAN

36、总线上。,CAN总线的主要特性,能以多主方式工作。 能以点对点、一点对多点及全局广播等方式传送和接收数据。 网络上的节点可分成不同的优先级,以满足不同的实时要求。 CAN总线采用短帧结构,每帧字节数最多为8个,可满足通常工业领域中控制命令、工作状态及测试数据的要求。 采用不归零(NRZ)编码/解码方式。 采用循环冗余码校验(CRC)、帧检测、信号出错检测、总线监控、位填充等5种错误监测和纠错措施,从而达到很高的可靠性。 使用简单方便。 采用独特的位仲裁技术,具有很高的实时性。 传输速率可达1Mbps, 传输距离可达40m。速率5kbps时,距离可达10km。 配置灵活,系统可扩充性好。增删节点

37、不会对系统造成大的影响。 可采用廉价的双绞线作通讯介质,接口简单,安装方便。,CAN信息包格式,一个有效的CAN数据帧由帧起始、仲裁场、控制场、数据场、校验场、应答场和帧结束等7种位场构成。Field:场/域/字段 标准格式数据帧包括 1)帧起始SOF (Start of Frame)。 包含一个显性位,用于硬同步。 2)仲裁场(Arbitration Filed) 。包含11个报文标识位ID和一个RTR(Remote Transmission Request 远程发送请求) 位。 3)控制场(Control Field)。包括2位备用位和4位数据长度位DLC。 4)数据场(Data Fiel

38、d)。 5)循环冗余校验场(CRC Field)。包括15位CRC序列和1位界定符。 6)应答场(ACK Field)。包含应答间隙和应答界定符个1位,应答间隙为隐性位。 7)帧结束(EOF)。包括7个隐性位。,CAN模块方框图,C2000 DSP CAN控制器,CAN模块是一个完全的CAN控制 器。全面兼容 CAN2.0B协议。 CAN模块是一个16位的外设,对它的访问分成控制/状态寄存器的访问和邮箱的RAM访问。 有6个邮箱(MBOX05),其长度为08个字节。它们是4816的RAM区,CPU或CAN可按16位读或写。每个邮箱为816位的RAM,邮箱0、1只用作接收,邮箱4、5只用作发送,

39、而邮箱2、3可用作接收或发送。对邮箱0、1和2、3有局域接收屏蔽寄存器。 可编程的位定时器。中断配置可编程。 可编程的CAN总线唤醒功能。自动恢复远程请求。 当发送时出错或仲裁时丢失数据,CAN控制器有自动重发送功能。 总线错误诊断功能。 具有自测试模式和网络模式。,CAN模块,CAN模块,邮箱方向/使能寄存器MEER 发送控制寄存器TCR 接收控制寄存器RCR 主控制寄存器MCR 位配置寄存器BCR1,2 错误状态寄存器ESR 全局状态寄存器GSR CAN错误计数寄存器CEC 邮箱标识符寄存器MSID 邮箱控制域寄存器MSCTRLn 接收屏蔽寄存器LAM CAN中断标志寄存器CAN_IFR

40、CAN中断屏蔽寄存器CAN_IMR,看门狗定时器模块WD,240x DSP内置了一个看门狗定时器, 用来监视DSP的运行状况。当系统进入不可预知的状态而造成“死机”时,WD将产生一个复位操作,从而使DSP进入一个已知的起始位置重新运转。 8位WD计数寄存器 WDCTR WD复位钥匙寄存器 WDKEY WD定时器控制寄存器 WDCR,WD模块方框图,思考题与习题,1) 采用全比较电路, 编程序产生对称PWM波形(T1)PWM1-6。 2) 采用空间矢量状态机, 编程序产生SVPWM波形。 3) 编程检测从QEP输入的脉冲(用T2)。 4) 编程检测检测模拟量ADC5, ADC6。 5) SCI串行通信编程。 6) C24x DSP的中断是如何组织的?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报