三星ARM处理器S3C4510B的HDLC通道使用及编程
1. 通道初始化阶段,我们建立并初始化了HDLC接收BUFFER描述符链表结构,并将链表头节点的地址写入到HDLC接收BUFFER描述符指针寄存器HDMARxPTR,这是正确完成DMA方式接收的前提,下面的工作都是在这个前提下自动完成的。
2. 当有数据到来时,DMA机制会从HDMARxPTR指向的接收BUFFER描述符中找到接收BUFFER起始地址,然后把收到的数据写入到BUFFER中。
3. 如果接收无误,4510自动更新HDMARxPTR寄存器的值,使其指向下一个还未使用的接收BUFFER描述符,以备下一次接收使用。使用过的接收BUFFER描述符的OWERSHIP位将自动设置为CPU所有,因此为了能再次使用这个接收BUFFER描述符,必须将它的OWERSHIP位重置为DMA所有。
4. 可以对已存储在接收BUFFER中的数据作各种自定义的操作,实现自定义功能。
3.3.2:HDLC通道数据接收中断处理过程
DMA方式下HDLC通道接收完一帧数据,或者接收过程中出现了可引起中断的异常情况,此时软件会进入中断处理程序。引起中断的情况在HDLC通道初始化的步骤4,即中断控制寄存器的设置中已做了说明。在我们的编程中,HDLC通道接收中断处理过程主要完成以下一些功能:
1. 进入中断后,首先清除4510中断指示寄存器INTPEND中相应的标志位。
2. 如果DMA接收正确,则进行数据帧接收成功状态计数,并清除HDLC通道状态寄存器HSTAT中的相应状态位。对接收到的数据帧作相应的处理后,要重新将是用过的接收BUFFER描述符的OWERSHIP位设置为DMA所有。
3. 如果接收出现异常,则完成相应的异常状态计数,并清除HDLC通道状态寄存器HSTAT中的相应位。其中有两个异常会影响以后的DMA操作,一:DMA接收BUFFER描述符不属于DMA所有(DRxNO);二:DMA接收BUFFER描述符指针空(DRxNL)。发生这两个异常时,说明接收BUFFER描述符双向环形链表结构出现错误,处理器会自动禁止DMA发送功能,因此建议重构接收BUFFER描述符双向环形链表结构并重新使能DMA发送功能。
4:S3C4510B的HDLC通道使用中的注意事项
我们编写了4510的HDLC通道底层驱动程序,并应用在了我们的155M SDH设备软件中。通过对软件的调试,
《三星ARM处理器S3C4510B的HDLC通道使用及编程(第8页)》