Irda解读

来源:互联网 发布:电脑共享网络给手机 编辑:程序博客网 时间:2024/04/28 11:04

Irda(infrared data associastion),这个暑假就做这个了。我们所要研究的其实就是一个UART(Universal Asynchronous Receiver Transmitter)和一个解码器(encoder和decoder)。数据收发的任务由UART完成,而coder完成将数据站换成符合Irda协议的格式。

这样一来我们的任务就是要搞清楚UART得结构和工作原理。我们所要研究的UART由fifo完成receiver和transmitter中数据缓存的角色,传输的数据格式为start bit+data bit+parity bit +stop bit。其中的receiver负责把从外界接收到的信号经decoder解码后得到的串行数据转换成并行数据,然后交给cpu,而transmitter则是把cpu的数据进行并-串转换然后由encoder编码发送出去。

receiver有一个Receiver Buffer Register (RBR) and Receiver Shift Register(RSR)。因为接受的串行数据桢和接受clock不是同步的,所以从穿行接收端口过来的一个从1到0得跳边就被视为开始位,同时为了防止一般的干扰信号(毛刺),所以通常要求start bit(1 to 0)的长度必须至少为接受波特率时钟周期的50%。因为器件内部时钟频率是接受/发射器时钟频率得16倍(16clk),所以也就是说start bit 的长度最少要使内部时钟周期的8倍,即8clk 。一旦start bit 被接受后,就开始接受(其实是抽样,每16个内部时钟一次)data bit 和parity bit 。如果start bit正好是16clk长,那么后面每个bit都会在其中间被抽样。线性状态寄存器(lsr)会一直更新纪录又没有先行错误(Overrun error, Parity error, Framing error, Break)。一旦帧错误(framing error)被发现,那么UART会假设这个错误是由于下一个帧的start bit造成的,于是就重新同步这一帧——在一个接受周期(16clk)内抽样start bit 两次。如果两次抽样值都是0的话,UART就会接受这一帧得数据。如果帧错误是由中断(break)造成的,这一再同步的过程不会发生。当接受缓存(RBR)的数据可用是,RxRDYn会被置0,然后接收数据可用标志被置1,通知cpu数据可以读取了。