快捷搜索:

利用SC16C2550实现TS201S异步串行通信

1 引言

  ts20ls是adi公司tigersharc系列中集成了定点和浮点计算功能的高速dsp。处理器工作在600mhz,单周期能执行4条指令,每秒能进行3.4亿次乘累加和2.8亿次浮点操作,是面向通信和视频领域的高端dsp。ts201s包括24mbit的片内dram;1个14通道的dma控制器:4个链路口可用于和其他dsp进行无缝联接。以组成一个多dsp处理器系统,每个链路口的数据率可达1gb/s;集成sd-ram控制器最大支持256m32bit的内存容量,方便和外部sdram连接。ts20ls非常适合对大数据量数据处理实时性要求高的应用领域。

  方案采用美国adi公司tigersha-rc系列ts201s[1]作为处理器,选用菲利浦的sc16c2550ib48[2]作为通用异步收发器(uart)芯片实现将并行数据转换成串行数据,反之亦然。再配合其他外围器件,实现了嵌入式系统的异步串行通信。

2 硬件设计

  ts201s作为美国ad公司新近推出的一款32位高性能浮点dsp,采用静态超标量体系结构,支持32位、40位浮点运算,并支持8位、16位、32位以及64位定点运算。利用其单指令多数据的特点,工作在600mhz时,具体运算指标为3.6gflops和14.4gops。此外,该款dsp还具有24m位的片上存储空间,内部带宽高达33.6g字节/秒。独特的全双工链路口通信方式(lvds),和外部总线传输加在一起,总带宽可达5g字节/秒。同时,该款dsp片上还集成有sdram控制器,片上总线仲裁机构和14个dma通道,可以支持高达8片dsp的总线互联方案。另外,在adi的c语言库中,有很多应用于数字信号处理领域的函数,极大地方便了软件开发。可见,ts201s十分适合于大规模的信号处理以及通信基站的应用。

  因为ts201s无串行通信口,对于适于远距离传输的串行通信方式来说,必须进行串行信号与并行信号间的相互转换[3]。我们选择了菲利浦的sc16c2550ib48作为转换芯片完成此功能。菲利浦的sc16c2550ib48,采用lqfp48封装,处理速率高达5mbit/s的串行数据。sc16c2550通过fifo触发点和/txrdy和/rxrdy信号来实现dma模式数据传输。该器件可在5v,3.3v和2.5v的工作电压下工作。有2通道uarts,16字节的发送fifo,可降低外部cpu的带宽要求。独立的发送和接收uart控制,发送、接收、线状态和数据设置中断可单独控制。拥有完全可编程的字符格式:5-,6-, 7-或8-位字符,偶、奇或无奇偶格式,1-,1或2-停止位,波特率产生(dc到3mbit/s)。

  另外,还采用ti公司的sn65hv-d10qd[4]芯片(rs485芯片)用于ttl电平和rs485电平间的转换,并可通过芯片的收发使能引脚可选择收发模式。其采用soic8封装,该芯片具有3.3v的运行电压,符合eia485-a标准。具有驱动收发使能,-7~12v的共模输入电压范围,高达25mbps的传输速度。

  利用sc16c2550实现ts201s异步串行通信硬件连接如图1所示。在本系统方案中,通过cpld,ts201s分配地址给uart(sc16c2550)中各寄存器,2通道uart分为uarta和uartb,系统中都加以使用,这样它们也相应各配置一片rs485(sn65-hvd10qd)芯片,使两边互成独立体系。使用dsp的总线dma方式,可使数据的传输与内核的计算分开进行,并行工作,节省内核开销。将ts201s的4个总线dma中的前两个分配给uarta,后两个分配给uartb,并启动dma中断,以便进行接收或发送完的后续处理。

  设计中,将sc16c2550配置在ts201s片外寻址空间bank1处,因此sc16c2550片选信号线/cs与ts201s/ms1相连。由于作为uart的sc16c2550有两个独立的通道uarta和uartb,所以我们引入ts201s/a26并将其同ts201s/ms1一同引入cpld中,做逻辑运算后,再与两个片选信号csa和csb相连。两个独立的通道uarta和uartb各有一组寄存器,通过选通sc16c2550/a0~a2来选择寄存器,其与ts201s地址线/a0~a2直连,但因每组都有15个寄存器,所以选择寄存器时就需要先设定环境,再操作寄存器,这在后面的uart初始化时还将论述。

  sc16c2550读写信号线/ior与/iow分别与ts201s读写信号线/iord与/iowr相连。sc16c2550数据总线引脚/d7~d0与ts201数据总线引脚/d7~d0直连。sc16c2550中断请求引脚共有6个,其中/inta和/intb为高有效,其分别为uarta和uartb两个通道的外部中断;/rxrdya和/txrdya与/rxrdyb和/txrdyb都为低有效,其分别为uarta和uartb两个通道的发送和接收中断请求信号。在本设计方案中,两个高电平引脚取非后分别与dsp的两个外部中断/int0和/int1相连;dsp与sc16c2550之间是以dma方式传输数据的,所以以上四个低电平有效引脚分别与ts201s总线dma请求信号引脚/dmar0~dmar3相连。sc16c2550串行输入、输出引脚/rxa和/rxb与/txa和/txb分别与两片sn65hvd10qd芯片/r和/d引脚相连,用于ttl电平与rs-485电平间的转换。两片sn65hvd10qd的收发模式与dsp通用输入输出引脚/flag2和/flag3相连。在本方案中,我们将uarta作为发送通道,将uartb作为接收通道,也即将引脚/flag2置高电平,将引脚/flag3置低电平。

3 软件设计

  在本系统方案中,由于ts201s需要完成大量的运算工作,所以为了尽量减少内核资源被占用,我们采用dma方式进行数据传输,即先对ts201s和sc16c2550的寄存器进行配置,然后系统根据配置值自动传输,传输过程内核不必介入,传输结束后启动相应的dma中断。

  3.1 uart初始化

  uart初始化,是在系统上电后由dsp对uart某些寄存器赋初值,目的是为了启动uart并使其处于就绪状态,以便发送或接收数据。这里需注意的是sc16c2550所有寄存器都为8位寄存器。

  在进行波特率设置时应注意先将线控制寄存器的最高位lcr[7]置位,然后才能对波特率发生器寄存器msb和lsb进行配置,lsb配置低8位除数,msb配置高8位除数,将所用晶振频率16分频后再除以以上16位寄存器的值,便得出系统串行数据传输波特率。

  对sc16c2550,可对其两个通道各自实现片内诊断,modem控制寄存器第五位mcr[4]控制着环回诊断测试,但需先将线控制寄存器的最高位lcr[7]复位。在环回模式中,发送器输出tx和接收器输入rx断开与之相关的接口引脚的连接,在器件内部被连在一起。用户可将接收到的数据与最初发送的数据相比较来验证uart tx/rx电路操作是否无误。

  要使用增强型寄存器进行软件流控制,需先将线控制寄存器lcr置为0xbf,然后才能对增强特性寄存器xon1,2和xoff1,2进行设置,还需对增强特性控制寄存器的第五位efr[4]置位。

  在先将线控制寄存器的最高位lcr[7]复位的前提下,置位modem控制寄存器第四位mcr[3],即使能外部中断int;设定ier_a和ier_b分别为0x01,即设定外部中断inta和intb为接收中断,即uart中每接收到一个数据,相应中断引脚就会产生一个高电平,若系统开外部中断,每一个高电平将引发内核一次中断处理;设定fifo控制寄存器fcr为0x06,即设定dma0方式,并禁能fifo,直接使用rhr和thr做接收和发送数据保存寄存器;最后,设定线控制寄存器lcr为0x1b,即设定传输字节为8位数据,1位停止位,偶校验,无tx间隔条件,除数锁存禁能。uart初始化操作流程如图2所示。

  3.2 dma方式的设计

  在本系统方案中,采用ts201s的总线dma进行数据传输。ts201s的总线dma共有四个,为dma0~3,均可实现外部存储器与内部存储器之间的数据直接传输,且通道优先级由dma0向dma3依次增加。将dma0和dma1赋予uarta,分别为其接收和发送通道;将dma2和dma3赋予uartb,分别为其接收和发送通道。如前所述,为了防止信息丢失,我们将uarta作为发送通道,将uartb作为接收通道,即使用总线dma1和dma2。因为dma2优先级高于dma1,接收优先于发送。

  在程序中,使用两个函数data_re-cv和data_send分别对接收和发送dma进行配置。配置dma主要是对传输控制寄存器tcb[5]进行配置,dcs0~3和dcd0~3分别对应上述4个总线dma的源和目的tcb。tcb是一个128位的四字组寄存器,含有dma块传送所需的控制信息,它包含di、dx、dy、dp四个寄存器。在dma块发送时,四个字包含了源数据地址,将要发送的数据量,地址增量和控制位;同理,在dma块接收时,四个字包含了目的地址,将要接收的数据量,地址增量和控制位。在本设计中,对于担任发送任务的uarta,设定di_source为0x0010000,di_destin为thr_a,即发送从内存块block8的首地址开始,发送至uarta的数据保存寄存器thr_a;设定dx_source为0x05000001,dx_destin为0x05000000,即dsp每次发送0x500个字,步长为1,而uarta接收为0x500, 步长为0;设定dy_source为0,dy_destin为0,即设定一维dma;将dp_source中的tcb_intmem、tcb_hpriority、tcb_normal、tcb_int、tcb_dm -ar位置一,dp_destin中的tcb_extmem、tcb_hpriority、tcb_normal、tcb_int、tcb_dmar位置一,即除tcb_intmem和tcb_extmem各表示对内存和外存的操作外,其余位依次为置dma为高优先级,步长为1,允许dma完成中断,使用dma的请求控制信号dmar。同理,对于担任接收任务的uartb, 也类似上述处理,不再细述。dmatcb寄存器组成示意如图3所示。

  将发送和接收完成中断函数int_dma1和int_dma2的地址送入中断向量寄存器ivdma1和ivdma2中,并在中断使能寄存器imask中将int_dma1和int_dma2位置一,使能总线dma1和dma2完成中断;在程序控制寄存器sqctl中将sqctl_gie位置一,使能全局中断。这样,在发送和接收完成后,即可进入相应的中断服务程序。

4 结束语

  本文详细讨论了如何利用sc16c-2550实现ts201s异步串行通信。通过硬件设计与软件编程,可以实现dsp与外部的数据传输。该方案以其合理的设计与准确的论述,对工程设计实践具有较高的参考价值与指导意义。本方案已由作者软硬件实现,并成功应用于某课题的实验系统。

您可能还会对下面的文章感兴趣: