DS原理基础及其设计 8_第1页
DS原理基础及其设计 8_第2页
DS原理基础及其设计 8_第3页
DS原理基础及其设计 8_第4页
DS原理基础及其设计 8_第5页
已阅读5页,还剩42页未读, 继续免费阅读

下载本文档

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

文档简介

DSP原理与应用PrincipleandApplicationofDSP长沙师范学院信息科学与工程学院05第五章TMS320C6748串行通信外设学容UART通信模块I2C通信模块123习内SPI通信模块第五章串行通信外设

1、串行通信:通过单条传输线按顺序逐位传输数据的通信方式,常用于嵌入式设备之间的信息交互与数据传输。与并行通信相比:串行通信具有连线简单、成本低、抗干扰能力强、易于长距离传输等优点。第五章串行通信基础2、串行通信按同步机制分为:同步通信与异步通信。同步通信:收发双方事先约定数据传输的时序和速率,用共同的时钟信号协调收发;数据以数据块(帧)形式传输,帧头包含同步字符,字符之间没有间隔,传输速率高;典型协议有SPI、I2C。异步通信:以字符为单位传输,字符之间没有固定时间间隔;收发双方使用独立时钟,靠约定字符格式中的起始位和停止位实现同步;硬件成本低、工作灵活、适合长距离和不规则数据传输,但传输效率较低;典型协议有UART、CAN。TMS320C6748内部集成了I2C、SPI和UART三种串行通信外设接口,可快速构建嵌入式系统之间的数据交互与通信方案。5.1I2C通信模块I2C(Inter-IntegratedCircuit)是一种基于两线制的串行数据通信总线:一条串行数据线(SDA)和一条串行时钟线(SCL)。I2C总线支持多主机和多从机架构,但同一时刻仅允许一个主机占用总线。每个连接到总线上的设备都有一个唯一的地址(7位或10位),便于主机访问。通常情况下总线上只有一个主机负责发起所有的数据传输请求;若连接多个主机,则通过仲裁机制解决总线数据传输冲突,决定哪个主机获得总线控制权。5.1.1I2C总线的工作原理总线空闲时SCL和SDA线上都保持高电平;主机需要发送或接收数据时,先发起起始信号通知所有从机总线上要开始数据传输。I2C总线以8位字节为单位传输,传输是高位在前,低位在后;数据字节的最后通常跟随一个确认位(ACK)。5.1.1I2C总线的工作原理

起始信号:在SCL线为高电平期间,SDA线从高电平向低电平跳变(下降沿),表明总线上将开始一次新的数据传输操作。停止信号:在SCL线为高电平期间,SDA线从低电平向高电平跳变(上升沿),表示当前数据传输已经结束。5.1.1.2寻址方式主机发起数据传输时首先传送的是地址字节,通知该地址从机建立通信;符合地址的从机发送ACK信号位之后,主机和该从机才能进行数据字节的传输。

7位地址模式:起始信号后跟随的第一个字节由7位从机地址以及一个R/W位构成。R/W=0表示主机向从机写入(发送)数据;R/W=1表示主机从从机读取(接收)数据。5.1.1.2寻址方式10位地址模式:从机地址由两个字节发送。第一个字节由地址的两个最高位和11110b以及R/W=0(写)组成;第二个字节由剩余的8位地址构成,每个地址字节发送完之后从机必须发送确认(ACK)信息。5.1.2I2C外设结构I2C外设主要由以下部分组成:数据寄存器、控制与状态寄存器、时钟同步器、预分频器、噪声滤波器、仲裁器、中断逻辑生成器、EDMA事件生成器和接口引脚。

发送模式:CPU或EDMA控制器将要发送的数据写入ICDXR,ICDXR的数据被复制到ICXSR并逐位移位到I2Cx_SDA引脚上发送。

接收模式:接收到的数据移位进入ICRSR并被复制到ICDRR中,CPU或EDMA控制器从ICDRR中读取数据。5.1.2I2C时钟生成C6748的I2C外设时钟生成模块由预分频模块和时钟分配器组成。输入时钟首先经过预分频模块降频,降频之后的时钟要保持在6.7~13.3MHz之间。

时钟分配器对预分频模块时钟信号再次进行分频,产生I2C串行时钟:高电平时间由ICCLKH寄存器中的ICCH位决定,低电平时间由ICCLKL寄存器中的ICCL位决定。当I2C外设配置为主机时,该串行时钟会出现在I2Cx_SCL引脚上。5.1.2I2C时钟生成串行时钟频率计算:IPSC=0时:频率=输入时钟/((ICCH+7)+(ICCL+7));IPSC=1时:频率=输入时钟/((ICCH+6)+(ICCL+6));IPSC>1时:频率=输入时钟/((IPSC+1)×((ICCH+5)+(ICCL+5)))。5.1.3I2C寄存器1、自身地址寄存器(IC0AR)2、时钟分配寄存器(ICCLKL和ICCLKH)5.1.3I2C寄存器3、接收数据寄存器(ICDRR)4、传输数据寄存器(ICDXR)5.1.3I2C寄存器5、模式寄存器(ICMDDR)5.1.4I2C应用实例

【例5-1】对EEPROMAT24C02C的数据读写

AT24C02C是Microchip公司容量为2K位(256字节)的串行EEPROM芯片,采用I2C总线接口,支持可编程的3位地址引脚(A0、A1、A2),允许多设备级联;本例从机地址为0x50(A0、A1、A2全部接地),SCL、SDA分别与C6748的I2C0_SCL、I2C0_SDA连接。

操作模式:字节写、页写(一次最多写入8字节)、当前地址读、随机读、顺序读。

写操作:产生起始信号后先发送从设备地址(7位地址,R/W=0主机发送数据),接着发送内存地址,然后发送数据,最后发送停止信号。

随机读操作:先执行写操作(R/W=0)向AT24C02C写入要读取的内存地址,再转为读操作(R/W=1)读取数据,最后发送停止信号。5.1.4【例5-1】I2C核心代码IICInit:先复位/禁用I2C0(I2CMasterDisable),再配置总线速度100kHz(输入时钟24MHz、预分频后8MHz)、设置从设备地址,最后使能(I2CMasterEnable)。IICSend:等待总线空闲→设置发送数据大小(ICCNT→配置主机发送模式并置停止位(I2C_CFG_MST_TX|I2C_CFG_STOP)→启动发送→逐字节写入ICDXR→发送停止信号。IICReceive:等待总线空闲→设置数据大小→配置主机接收模式(I2C_CFG_MST_RX|I2C_CFG_STOP)→启动→等待ICRRDY后从ICDRR读取数据。EEPROMByteWrite:先写内存地址再写数据(2字节);EEPROMRandomRead:先写内存地址(1字节),再读回1字节。/*******I2C初始化*******/voidIICInit(void){I2CMasterDisable(SOC_I2C_0_REGS);//IIC复位/禁用//总线速度100KHz(输入时钟24MHz,预分频后8MHz)I2CMasterInitExpClk(SOC_I2C_0_REGS,24000000,8000000,100000);I2CMasterSlaveAddrSet(SOC_I2C_0_REGS,ADDRESS);//从设备地址I2CMasterEnable(SOC_I2C_0_REGS);//IIC使能}/*******I2C发送数据*******/voidIICSend(unsignedintiic,unsignedintdataCnt){inti;while(I2CMasterBusBusy(iic));//等待I2C总线空闲I2CSetDataCount(iic,dataCnt);//设置发送数据大小//主机模式、发送模式、停止信号位I2CMasterControl(iic,I2C_CFG_MST_TX|I2C_CFG_STOP);I2CMasterStart(iic);//启动I2C总线数据发送for(i=0;i<dataCnt;i++){while(I2CMasterBusBusy(iic));I2CMasterDataPut(SOC_I2C_0_REGS,slaveData[i]);}I2CMasterStop(iic);//I2C总线停止信号}/*******EEPROM写一个字节到指定地址*******/voidEEPROMByteWrite(unsignedintAddress,unsignedcharData){slaveData[0]=Address;//内存地址slaveData[1]=Data;//待写数据IICSend(SOC_I2C_0_REGS,2);}5.1I2C小结①总线:两线制(SDA数据线、SCL时钟线);多主机多从机架构,同一时刻仅一个主机占用总线;每个设备有唯一地址(7位或10位),多主机冲突由仲裁机制解决。②时序:起始信号=SCL高电平期间SDA出现下降沿;停止信号=SCL高电平期间SDA出现上升沿;数据以8位字节为单位,高位在前,每字节后跟随ACK位。③寄存器:ICOAR(自身地址)、ICSAR(从机地址)、ICCNT(数据计数)、ICDXR/ICDRR(收发数据)、ICMDR(模式控制)、ICPSC(预分频)、ICCLKL/ICCLKH(SCL高低电平时间)、ICSTR(状态)。④编程流程:初始化(禁用→配置速度与从机地址→使能)→发送(配置MST_TX|STOP→启动→写ICDXR→停止)→接收(配置MST_RX→等待ICRRDY→读ICDRR)。⑤应用:读写EEPROM存储芯片AT24C02C(例5-1)。5.2SPI通信模块SPI(SerialPeripheralInterface,串行外设接口)总线是Motorola公司推出的高速、全双工、同步的串行通信接口协议,主要应用于MCU与各种外围设备之间的高速数据通信。

SPI总线是主从架构的同步串行通信接口,由主设备控制总线上的所有通信,同步时钟信号由主设备生成;主设备通过片选信号选择从设备建立通信,从设备之间无法直接通信。通常采用四线制,节约了芯片引脚,有效减小PCB布板面积:SCLK(SerialClock):时钟信号,由主设备生成;MOSI(MasterOutSlaveIn):主设备发送数据,从设备接收数据;MISO(MasterInSlaveOut):主设备接收数据,从设备发送数据;SS/CS(SlaveSelect/ChipSelect):片选信号,用于选择从设备。通过增加SS/CS数量或利用GPIO扩充片选信号,主设备能够在SPI总线上与更多的从设备建立通信。5.2.1SPI总线(1)SPI总线的工作流程①总线初始化:主设备配置SPI总线的相关参数,如时钟频率、时钟极性和相位、数据宽度等;②选择从设备:主设备通过控制SS/CS信号选择需要通信的从设备;③数据传输:主设备生成时钟信号,在时钟的每个周期内,主设备通过MOSI发送一个比特,同时通过MISO接收一个比特;SPI通信通常以字节为单位进行数据交互;④结束通信:主设备设置SS/CS信号为高电平释放从设备。要点:SPI是全双工同步总线——发送与接收同时进行,时钟由主设备提供。5.2.1SPI总线(2)SPI的四种时钟模式

SPI总线提供四种不同的时钟模式,数据的输入和输出沿取决于时钟极性(POLARITY)和时钟相位(PHASE)的值。POLARITY=0、PHASE=0:数据在SPIx_CLK上升沿输出,输入数据在下降沿锁存;POLARITY=0、PHASE=1:数据输出提前第一个SPIx_CLK的上升沿并保持到接下来的下降沿,输入数据在SPIx_CLK的上升沿锁存。5.2.1(2)SPI的四种时钟模式(二)POLARITY=1、PHASE=0:数据输出在SPIx_CLK的下降沿,输入数据在上升沿锁存;POLARITY=1、PHASE=1:数据输出提前第一个SPIx_CLK的下降沿并保持到接下来的下降沿,输入数据在SPIx_CLK的下降沿锁存。5.2.2SPI外设结构TMS320C6748SPI外设的移位寄存器、数据发送寄存器、数据接收寄存器都是16位,可编程的字符长度为2~16位。SPI使能(SPIx_ENA)引脚和多从片选(SPIx_SCS[n]),SPI外设可配置为SPI-3线模式、SPI-4线模式、SPI-5线模式;支持中断服务和DMA模式。模式与时钟生成逻辑模块产生时钟信号、SPI使能信号和多从片选信号。5.2.2主机/从机模式与数据格式1、主机/从机模式与数据格式(1)主机模式与从机模式设置:由SPI全局控制寄存器1(SPIGCR1)的MASTER位和CLKMOD位配置。两位同时设置为1时C6748为主机模式;同时设置为0时为从机模式。只有在SPIGCR1的ENABLE位为0的状态下才能改变MASTER和CLKMOD的值。(2)数据格式:SPI提供四种独立的可配置数据格式,通过编程相应的SPI数据格式寄存器(SPIFMTn)配置:·字符长度:2~16位,由SPIFMTn.CHARLEN字段配置;·移位方向(高位优先或低位优先):由SPIFMTn.SHIFTDIR位配置;·时钟极性:由SPIFMTn.POLARITY位配置;时钟相位:由SPIFMTn.PHASE位配置。(3)每次传输都要选择数据格式:在将传输数据写入SPI发送数据寄存器1(SPIDAT1)的同时,可以改变SPIDAT1中数据字格式选择(DFSEL)位,以指示下次传输使用哪种数据格式;如果数据格式配置之后不改变,则随后所有数据传输都采用当前格式。从模式下仅支持SPIFMT0。5.2.2SPI结构SPI初始化流程:①通过将SPI全局控制寄存器0(SPIGCR0)中的RESET位清零来重置SPI;②通过设置SPIGCR0.RESET为1,将SPI从复位状态中释放出来;③通过配置SPIGCR1中的CLKMOD和MASTER位,配置SPI为主机模式或从机模式;④通过配置SPI引脚控制寄存器0(SPIPC0),将SPI配置为3线、4线带有片选、4线带有使能或5线模式;⑤通过配置SPIDAT1中的DFSEL位选择用于SPI数据格式寄存器n(SPIFMTn)的配置(从模式下仅支持SPIFMT0);⑥通过使用第⑤步中选择的SPIFMTn配置SPI数据速率、字符长度、移位方向、相位、极性和其他格式选项;⑦如果是SPI主机模式,则通过SPI延迟寄存器(SPIDELAY)配置主延迟选项(从机模式下不相关);⑧通过配置SPI中断寄存器(SPIINT0)和SPI中断级别寄存器(SPILVL)选择错误中断通知;⑨通过将SPIGCR1.ENABLE设置为1来启用SPI通信。5.2.3SPI寄存器(1)全局控制寄存器0(SPIGCR0)(2)全局控制寄存器01(SPIGCR1)(3)标志寄存器(SPIFLG)(4)引脚控制寄存器0(SPIPC0)(5)传输数据寄存器1(SPIDAT1)(6)接收缓存寄存器(SPIBUF)(7)数据格式寄存器(SPIFMTn)5.2.4 SPI应用实例SPIFLASH芯片W25Q32是华邦公司(Winbond)推出的大容量SPIFLASH产品:存储容量32Mbit,最大时钟频率133MHz,接口类型SPI,数据总线宽度8bit。存储结构分为页(PAGE)、扇区(SECTOR)、块(BLOCK):·页:256字节,FLASH编程的最小单位,一次性编程1~256个字节;·扇区:4K字节,FLASH擦除的最小单位;·块:64K字节,每个块包含16个扇区,块擦除有32KB(半块)、64KB(整块)两种方式。常用指令:写使能0x06、读状态寄存器0x05、页写入0x02、扇区擦除0xD8、读数据0x03。5.2.4【例5-2】W25Q32读写任务【例5-2】:实现对SPIFLASHW25Q32的编程和读操作。电路连接:W25Q32的DI、DO、CLK引脚分别与C6748的SPI1_SIMO、SPI1_SOMI、SPI1_CLK连接;片选CS与C6748的SPI1_SCSn_0连接;W25Q32的WP和HOLD连接高电平。5.2.4【例5-2】SPI核心代码SPIInit:依次调用StarterWare内置函数完成复位、退出复位、主机模式配置、时钟配置、引脚控制、默认片选、数据格式配置与使能。SPIClkConfigure:函数参数中prescale=(moduleClk/spiClk)-1是预分频器值。SpiTransfer:逐个字符调用SPIDat1Config与SPITransmitData1写入SPIDAT1,再等待接收完成(查询SPIBUF最高位)后由SPIDataReceive读取数据。读状态寄存器判断忙状态:rx_data[1]&WRITE_IN_PROGRESS(0x01),直到写操作结束。/***************SPI初始化************************/voidSPIInit(void){unsignedcharcs=0x01,dcs=0x01;unsignedintval=SIMO_SOMI_CLK_CS;SPIReset(SOC_SPI_1_REGS);SPIOutOfReset(SOC_SPI_1_REGS);SPIModeConfigure(SOC_SPI_1_REGS,SPI_MASTER_MODE);//主机模式SPIClkConfigure(SOC_SPI_1_REGS,228000000,20000000,SPI_DATA_FORMAT0);SPIPinControl(SOC_SPI_1_REGS,0,0,&val);//引脚复用SPIDefaultCSSet(SOC_SPI_1_REGS,dcs);//配置SPI数据格式SPIDataFormatConfig(SPI_DATA_FORMAT0);//配置SPI数据格式及片选信号SPIDat1Config(SOC_SPI_1_REGS,(SPI_CSHOLD|SPI_DATA_FORMAT0),cs);//映射中断到INT1SPIIntLevelSet(SOC_SPI_1_REGS,SPI_RECV_INTLVL|SPI_TRANSMIT_INTLVL);SPIEnable(SOC_SPI_1_REGS);//使能SPI}/**************SPI数据传输***********************/voidSpiTransfer(void){p_tx=&tx_data[0];p_rx=&rx_data[0];while(tx_len){tx_len--;SPIDat1Config(SOC_SPI_1_REGS,(SPI_CSHOLD|SPI_DATA_FORMAT0),0x1);SPITransmitData1(SOC_SPI_1_REGS,*(p_tx+tx_len));//读SPI接收寄存器数据while((HWREG(SOC_SPI_1_REGS+SPI_SPIBUF)&0x80000000));rx_data[2-tx_len]=SPIDataReceive(SOC_SPI_1_REGS);}SPIDat1Config(SOC_SPI_1_REGS,(SPI_DATA_FORMAT0),0x1);}5.2SPI小结①总线:Motorola推出的高速、全双工、同步串行接口;四线制(SCLK、MOSI、MISO、SS/CS);主从架构,时钟由主设备生成,片选信号选通从设备。②时序(难点):四种时钟模式由POLARITY(时钟极性,决定空闲电平)与PHASE(时钟相位,决定采样沿)组合确定,需根据从设备手册选择。③寄存器:SPIGCR0/SPIGCR1(全局控制)、SPIPC0(引脚控制)、SPIDEF(默认片选)、SPIDAT1(发送数据)、SPIBUF(接收缓存)、SPIFMTn(数据格式)、SPIFLG(标志)。④编程:初始化九步(复位→退出复位→主从模式→引脚模式→数据格式选择与配置→延迟→中断→使能);数据收发通过SPIDAT1与SPIBUF;支持3/4/5线模式及中断、DMA。⑤应用:读写SPIFLASHW25Q32(例5-2);工程中常见于存储器、传感器、AD芯片等(多数只能工作在从模式)。5.3UART通信模块UART(UniversalAsynchronousReceiver-Transmitter)是采用全双工异步串行通信方式的通用异步收发传输器。发送数据时把并行数据转换成串行数据传输;接收数据时把接收到的串行数据转换成并行数据。UART接口通常由发送线(TX)和接收线(RX)组成。优点:硬件实现简单、成本低、支持远距离传输、不易受电磁干扰影响。应用领域:仪器仪表、单片机、工业控制、嵌入式系统等。5.3UART通信协议概述UART采用异步传输方式:发送和接收双方不需要共享时钟信号,而是通过设置双方的波特率和数据帧格式来保证数据通信的可靠性。数据帧中的起始位和停止位确定数据的开始与结束。波特率:每秒钟传输数据的位数,UART常用波特率包括2400、4800、9600、19200、38400、57600、115200、230400等。通信过程:发送方将待发送数据按UART协议的数据帧格式封装,通过TX线发送出去;接收方通过RX线接收数据,并按照同一数据格式解析,提取出有效数据。5.3.UART通信模块起始位(StartBit):1个数据位,逻辑“0”(低电平),表示数据帧的开始;数据位(DataBits):5~9个数据位,实际传输的数据,低位(LSB)在前,高位(MSB)在后;校验位(ParityBit):1个数据位,用来判断接收的数据位有无错误,可选“奇校验”“偶校验”或“无校验”;停止位(StopBits):1~2个数据位,逻辑“1”(高电平),表示数据帧的结束;空闲位(IdleBits):逻辑“1”(高电平),表示当前线路上没有数据传输。5.3.1.2UART的工作方式:数据发送与数据接收(1)数据发送:发送部分由发送保持寄存器(THR)和发送移位寄存器(TSR)组成。THR接收内部数据总线的数据,当TSR准备好时,UART把数据从THR移到TSR;TSR将并行数据转为串行数据,从UARTn_TXD引脚发送出去。在FIFO模式下,THR是多字节(C6748为16字节)的FIFO寄存器:传输FIFO为空时产生中断,加载字节到FIFO或读取IIR时中断被清除。(2)数据接收:接收部分由接收移位寄存器(RSR)和接收缓冲寄存器(RBR)组成。RSR接收UARTn_RXD引脚上的数据位并转换为并行数据,再移入RBR,CPU从RBR读取数据。在FIFO模式下,RBR是16字节的FIFO寄存器:填充数据量达到FIFO控制寄存器(FCR)设置的触发值产生中断;低于触发值中断自动清除。帧错误检测:UART接收时会对数据帧进行检测,保存三种帧错误状态——奇偶校验错误(ParityError)、帧错误(FramingError)和终止错误(BreakError)。5.3.1.3FIFO模式(3)FIFO模式:为提高UART通信效率,芯片为片内串口外设配置了发送FIFO单元和接收FIFO单元(C6748的FIFO深度为16字节)。发送过程:UART工作在FIFO模式时,THR是多字节FIFO寄存器,当传输FIFO为空时会产生中断;当加载字节到FIFO或读取IIR时,中断会被清除。接收过程:UART工作在FIFO模式时,RBR是多字节FIFO寄存器,当FIFO中填充数据量达到FCR内设置的触发值将产生一个中断;当FIFO内容低于触发值时中断将自动清除。FIFO查询模式:在中断模式被禁止的情况下,通过查询队列状态寄存器(LSR)的相应位可以判断发送保持寄存器(THR)是否为空、接收寄存器是否接收到数据。5.3.2UART外设结构TMS320C6748的UART外设基于行业标准的TL16C550异步通信元件,接收器和发送器具备16个字节的FIFO寄存器,通过缓存收发的数据字符可以减轻CPU的软件开销。UART外设对外部设备的数据进行串行到并行转换,对来自CPU的数据进行并行到串行转换后发送给外部设备。UART外设由三部分组成:波特率发生器:将UART输入时钟分频生成UART工作参考时钟,用于内部传输和接收逻辑;控制功能部分:用于数据发送与接收控制;中断系统:管理UART外设中断的生成与响应。5.3.2(1)UART时钟与波特率UART外设包含一个可编程的波特率生成器,它将接收到的系统输入时钟分频生成波特率时钟(BCLK),分频范围为1~65535。BCLK的频率是波特率的十六倍(16×,每个接收或发送的位持续16个BCLK周期)或十三倍(13×):16×过采样模式下位在第8个BCLK周期被采样,13×过采样模式下位在第6个BCLK周期被采样;16×或13×参考时钟通过在模式定义寄存器(MDR)中配置OSM_SEL位来选择。16位的分频因子保存在两个8位寄存器字段中:DLH保存高8位,DLL保存低8位。初始化UART时必须设置分频因子(除数)寄存器,以确保波特率发生器正常工作。向分频因子寄存器写入会导致在写入访问期间波特率发生器加载新值时插入两个等待状态。5.3.2(2)UART外设的中断支持UART外设有四个中断事件:·THR空条件(THREINT)——发送保持寄存器为空;·接收数据准备好(RDAINT);·接收超时(RTOINT);·接收队列错误(RLSINT)。四个中断事件请求都通过仲裁器复用一个UART中断向CPU发起中断请求。每个中断事件请求在中断使能寄存器(IER)都有对应的使能位,中断事件状态记录在中断鉴别寄存器(IIR)中。5.3.2(3)UART外设的初始化①设置引脚复用;②通过向分频因子寄存器(DLL和DLH)写入适当的数值来设置波特率;③如果将使用FIFO,向FIFO控制寄存器(FCR)写入触发值,并配置FCR中的相应位启用FIFO;④通过向Line控制寄存器(LCR)写入适当值来选择所需的协议设置(数据位、停止位、校验位);⑤通过配置FREE位并设置电源和仿真管理寄存器(PWREMU_MGMT)中的UTRST和URRST位来选择对仿真暂停事件的期望响应,以启用UART外设。5.3.3UART寄存器(1)接收缓冲寄存器(RBR)(2)发送保持寄存器(THR)(3)中断使能寄存器(IER)(4)中断识别寄存器(IIR)(5)FIFO控制器(FCR)(6)Line控制寄存器(LCR)(7)分频因子控制器(DLL和DLH)(8)模式定义寄存器(MDR)5.3.4UART应用实例【例5-3】:实现UART2中断方式数据收发功能。电路:SP3232是一款双路RS232接口收发器芯片,主要用于实现TTL/CMOS电平和RS232电平之间的相互转换;SP3232与TMS320C6748的UART1、UART2的TX引脚和RX引脚连接。配置要点:波特率115200、数据位8、停止位1、无校验位、16倍过采样;使能接收/发送FIFO并设置FIFO触发级别;中断映射到C674X_MASK_INT4。5.3.4UART应用实例UART核心代码(初始化)UARTConfigSetExpClk:配置UART的波特率和数据格式。baudrate=BAUD_115200;config=UART_WORDL_8BITS定义为“数据位8、停止位1、无校验位”;overSampRate=UART_OVER_SAMP_RATE_16(16倍过采样)。/*****************UART初始化********************************/voidUARTInit(void){//配置UART2参数:波特率115200数据位8停止位1无校验位UARTConfigSetExpClk(SOC_UART_2_REGS,UART_2_FREQ,BAUD_115200,UART_WORDL_8BITS,UART_OVER_SAMP_RATE_16);UARTEnable(SOC_UART_2_REGS);//使能UART2UARTFIFOEnable(SOC_UART_2_REGS);//使能接收/发送FIFO//设置FIFO级别UARTFIFOLevelSet(SOC_UART_2_REGS,UART_RX_TRIG_LEVEL_1);}/**************UART中断初始化**********************/voidUARTinterruptInit(void){IntRegister(C674X_MASK_INT4,UARTisr);IntEventMap(C674X_MASK_INT4,SYS_INT_UART2_INT);IntEnable(C674X_MASK_INT4);//使能中断unsignedintintFlags=0;intFlags|=(UART_INT_LINE_STAT|UART_INT_TX_EMPTY|UART_INT_RXDATA_CTI);UARTintEnable(SOC_UART_2_REGS,intFlags);}5.3.4UART应用实例UARTintStatus读取中断鉴别寄存器(IIR)确定中断源;IntEventClear清除UART2系统中断标志。发送中断(UART_INTID_TX_EMPTY):THR为空时写入下一字节;发送完毕后禁用发送中断,避免反复进入中断。接收中断(UART_INTID_RX_DATA):从接收缓冲寄存器RBR读取数据,并回显发送。接收错误(UART_INTID_RX_LINE_STAT):循环读取RBR清除错误状态(UARTRxErrorGet判断)。voidUARTisr(){staticunsignedintlength=sizeof(t

温馨提示

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

评论

0/150

提交评论