S3C44B0X与C54X DSP的接口设计
符的OWERSHIP位设置为CPU所有,并将帧描述符指针寄存器HDMATxPTR中的内容更新为下一个未使用的发送BUFFER描述符地址。
3.2.2:HDLC通道数据发送中断处理过程
当一帧数据通过DMA方式发送完毕,或者发送过程中出现了可引起中断的异常情况,此时软件会进入中断处理程序。引起中断的情况中断控制寄存器的设置中已做了说明。在我们的编程中,HDLC通道发送中断处理过程主要完成以下一些功能:
1. 进入中断后,首先清除4510中断指示寄存器INTPEND中相应的标志位。
2. 如果DMA发送成功,则进行数据帧发送成功状态计数,并清除HDLC通道状态寄存器HSTAT中的相应状态位。
3. 如果发送出现异常,则完成相应的异常状态计数,并清除HDLC通道状态寄存器HSTAT中的相应位。其中有两个异常会影响以后的DMA操作,一:发送下冲异常(TxU),发生此异常时,处理器会自动禁止DMA发送功能,因此下一次发送时必须重新使能DMA发送功能;二:下一个发送帧描述符指针为空异常(DTxNL),发生此异常时,说明建立的DMA发送BUFFER描述符链表结构出现了错误,因此需要重新初始化DMA发送BUFFER描述符链表结构。
4. 做完上述处理可关闭HDLC通道的DMA发送功能,等待有数据需要发送时再重新打开,也可以不关闭。
3.3: HDLC通道数据接收工作原理及中断处理过程
3.3.1:HDLC通道数据接收工作原理
DMA方式下HDLC通道的数据接收工作主要在HDLC通道初始化和DMA接收中断处理中完成,这里主要分析HDLC通道接收工作原理,明白了数据接收原理,会给我们编程带来极大的方便。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设备软件中。通过对软件的调试,感觉在使用4510的HDLC通道时,需要注意下面的问题:
1. 发送和接收数据大端/小端模式要一致,否则收到的数据与发送的数据高字节和低字节颠倒。
2. 使用DMA模式收发数据时,正常状态下进入中断后,读取发送BUFFER描述符指针寄存器(HDMATxPTR)或接收BUFFER描述符指针寄存器(HDMARxPTR)的内容时,他们指向的都是下一个未用的BUFFER描述符。因此想处理接收到的数据或者初始化用过的发送BUFFER描述符时,需要指回到它们。
3. 使用DMA方式时,发送和接收BUFFER描述符在使用时的OWERSHIP位必须是DMA所有。因为发送是主动的,所以当把数据放进BUFFER描述符后,可以设置OWERSHIP位,然后启动DMA发送;而接收是被动的,因此数据到来前,将要使用的BUFFER描述符必须是DMA所有,这就是每次进入接收中断后需要重置接收BUFFER描
- U-Boot的编译与移植到QT-S3C44B0X开发板上(03-08)
- ARM S3C44B0X 之 看门狗定时器(11-20)
- S3C44B0X烧写flash 的经验(11-11)
- Flash与S3C44B0X连接时地址线为什么要偏移一位(11-11)
- uClinux在S3C44B0X上的移植(11-10)
- μC/OS-Ⅱ在ARM单片机S3C44B0x上的移植(10-31)