TMS320C54X DSP实现UART的技术
扫描二维码
随时随地手机看文章
1 采用软件模拟
TMS320C54x DSP软件模拟实现LJART无需额外硬件开销,仅需通用I/(BIO和XF)、外部中断INTO以及一个定时器就可实现,硬件连接如图l所示。
图l中,XF引脚用于发送数据,BIO脚和INTO脚用于接收数据。此方法可以模拟半双工通信与全双工通信。软件模拟IJART技术允许用户设置:数据位数(1~16)、奇偶校验(奇校验或偶校验)或无奇偶校验、停止位(1~2)和波特率。每秒传输比特数计算公式为:
改变寄存器TDDR和PRD的设置值,可以获得不同的波特率。BaudRate最大值是:
其中,clkfreq是DSP系统时钟,#cycles是子程序执行周期,bit是完成UART功能限定条件(1/2或1)。
另外,需要两个存储单元分别用作UART状态寄存器和计数器,以便控制软件完成接收与发送任务。
1.1 接收功能
要正确接收数据流,首先要检测起始位。由于百BIO和INTO连在一起,一旦低电平有效则启动INTO中断。首次响应中断,定时器设置定时周期为1/2码元宽度,以便保证在起始位中间位置定时中断采样BIO引脚。如果采样电平为高,起始位就是虚假信号,定时器立即停止定时并退出子程序。如果为低,则认为检测到起始位,关闭外部中断INTO以免数据流中的O再被误认为是起始位。接收后续数据时,每次定时器没置定时周期为一个码元宽度,保证在码元中间采样,从而减少误码。当收到若干个(数据位数可根据需要设定为1~16)数据后,再检测停止位和奇偶校验位。若数据接收正确,则格式化输出数据(去掉起始位、停止位和奇偶校验位)。同时计数器清零,复位RCV(接收标志位.在LJART状态寄存器中设定)标志位,并开中断为下一次检测数据流的起始位做好准备。
1.2 发送功能
一旦发送数据,并且发送子程序被调用,必须先将发送数据格式化(加上起始位、停止位和奇偶校验位)存在某个存储单元以备发送。然后,检测TX位是否被置位(即有无数据正在发送)。若是,则循环等待直到TX(发送标志位,在UART状态寄存器中设定)被复位为止。要知道何时开始发送下一个数据,需要定时器定时中断来控制,同时还需要一个发送计数器控制程序流程。由于发送和接收是独立进行的,它们共用唯一的一个定时器,如果UART在接收数据过程中定时器突然被发送功能占用,则必然会破坏数据。发送数据前必须检测RCU标志位,确认没有正在接收数据后才能开始发送数据,否则发送程序等待。因此,准确来讲,这种发送接收方式只是一种半双工方式,发送和接收不能同时进行。如果要实现全双工通信,则无论是否正在接收数据,发送都延迟一段时间等待下一次接收,然后与其同步进行。
2 增加专用UART接口
利用TLl6C550C和MAX3238分别实现协议转换和电平转换。增加专用UART接口的硬件框图如图2所示。
主机通过并行方式访问TIJl6C550C的寄存器,寄存器的设定将控制其内部的控制逻辑模块,实现对其工作方式的设定(如波特率、校验位等),同时,访问寄存器也可以实现对数据的操作(读取和写入数据)。RS232数据接口可大致分为三部分;接收模块、发送模块和Modem控制逻辑。接收模块将从SIN引脚输入的串行数据,按照规定格式取出其数据部分并作校验,数据接收部分被送入接收寄存器或接收FIFO中,校验的结果反映在状态位上。发送模块将发送寄存器或发送FIF0中的数据按照规定格式加入起始位、停止位和校验位,并以RS232的串行方式发送至SOUT引脚。Modem控制逻辑通过接收和发送引脚信号,实现对收发操作的控制。
对DSP而言,TLl6C550C是一系列寄存器,它们映射在I/0空间中,通过译码电路使它的起始地址为0x4000,那么对其操作即是对其某段地址的I/O进行访问。LIART的每个寄存器都是8位的,大多数寄存器只能工作在一种模式下(读或写)。
2.1 串行传输
异步串行数据格式的设置通过线路控制寄存器(LCR)来完成的。除了数据格式外,另外一个指标是波特率,它是通过除数寄存器来设置的,实际的波特率为输入时钟信号进行分频后获得,其公式如下:
2.2 数据接收
从SIN输入的数据首先进入接收移位寄存器(RSR),一个字符接收完成后,数据移人接收缓冲寄存器(RBR)。RBR实际是一个16字节的FIFO,当中断设置时,UART会根据FIFO中接收数据的数目产生中断,主机设备从RBR中读取数据后,中断会自动清除。
2.3 数据发送
发送操作和接收操作相反,主机数据写入发送保持寄存器(THR),THR是一个16字节的FIFO,然后数据移入发送移位寄存器(TSR),之后送人SOUT。当中断设置时,UART会根据FIFO中发送数据的数目产生中断,主机设备可根据中断来决定是否继续发送数据。
除了收发操作外,TLl6C550C还可以产生其他类型的中断,但它只有一根中断信号引脚INTRPT,因此主机接收到中断后必须判决产生中断的信号源。
FIFO的操作通过FCR来设置。当使用FIFO时,UART中最多可存放16字节数据,反之则只能存放一个数据,即相当于FIF0只有一个字节大小。有两种工作方式:中断方式和查询方式。
UART中还有Modem控制寄存器(MClR)和Modem状态寄存器(MSR),它们用于控制一些信号引脚,能把UART的工作状态通过硬件的方式表达出来。
2.4部分LIART汇编编程
测试程序:
ST #0x55,*SP(var_reg) ;用来确定LJART设备是存在的
PORTW*SP(vat_reg),ADDR_SPR
PORTR ADDR_SPR.*SP(vaLr_reg)
LD *SP(var_reg),A
SUB #0x55,A,B
BC rs232_no_errclr,BEQ
设置特率程序:
ST #0x83,*SP(vaL_reg)
PORTW*SP(var_reg),ADDK_LCR
ST #0xOO,*SP(var_reg) ;设置波特率为9600
PORTW*SP(var_reg),ADDR_DIV_MSB
ST #0x18,*SP(van_reg)
PORTW*SP(vaLreg),ADDR_DUV_LSB
ST #0x03,*SP(var_reg)
PORTW*SP(var_reg).ADDR_LCR
3 总 结
利用软件模拟的方法,缺点是DSP将长时间处于对IJART的中断和处理中,无法全速参与运算,而且占用了外部中断0和一个定时器(有些TMS320C54XDSP只有一个定时器);优点是在DSP和带UART的外设之间除了电平转换部分外不需要另外的硬件,可以节约产品的成本。利用外部接口芯片组的方法,缺点是增加了额外的硬件开销,从而增加了产品成本;优点是收发数据快,可以和数据处理同步进行,能够实现系统的实时性。