Woody Home Page
 
   
简单串口
  
2007年11月19日
由于不断有用户对使用AR1688的串口实现不同于我们标准参考设计的VoIP功能感兴趣, 我们在目前的0.25测试软件中增加了对串口的软件支持.
AR1688的串口是最简单的, 只有一个RX管脚和一个TX管脚, 没有其他如硬件流量控制和状态管脚. 对发送和接收的数据内部各有8级8位硬件FIFO. 由于PLL的限制, 所有的波特率上都有0.16%的硬件误差.
串口软件可以用OEM_UART的选项编译. 由于2个串口管脚分别在ADC键盘(AR168F/AR168G/GF302/YWH201), 5x5键盘(GP1266)和5x6键盘(AR168K)中使用了, 我们需要在用串口的时候禁用这些键盘方案.
目前串口配置为19200bps波特率, 8位数据, 1位停止位, 无奇偶校验位. 需要的话波特率最高可以设置到115200bps.
接收数据时, Z80在接收FIFO半满后产生中断, 我们会把能够接收到的数据都读到一个255字节的循环缓冲区中等待主程序处理. 我们尽可能尽快出串口中断, 以防止串口中断阻碍DSP中断, 导致DSP性能下降.
发送数据的时候不采用中断. 我们把需要发送的数据保存在另外一个255字节的循环缓冲区中, 然后在主程序空闲时调用发送数据函数, 每次都一直写到发送FIFO满为止. 255字节看上去有点大, 但是可以在保证数据完整性的前提下不用死等发送FIFO有空闲, 从而避免主程序被阻塞, 妨碍其它关键任务如RTP的处理.
由于上层软件得不到接收或者发送的错误报告, 应用程序需要自己处理数据错误检测和重传.
在uart.c中我们实现了一个基于"字符串"的串口通信例子, 不带任何错误检测. 用'\0'区别开串口上传送的不同字符串. 为保证发送数据能被及时接收, 在每个字符串后我们多发了4个'\0', 这样Z80能在"半满"时进入中断及时收到全部字符串的数据.

本页面尚无任何评论.

更多选项? 请先登录或者注册. metropolitan-tundra