微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM处理器的HDLC通信的DMA实现

基于ARM处理器的HDLC通信的DMA实现

时间:11-16 来源:互联网 点击:

有权:如果为DMA所用,应当退出;如果CPU拥有,则可按照HDLC帧的格式填入gpTxBDStart指向的BD对应的缓冲数据区,然后设置BD的控制信息,设置所有权关系为DMA和LASTF指示位,启动发送(使能Tx、TxDMA),并把gpTxBDStart移到下一个位置。

void HdlcTx_Isr(void);//发送中断服务程序,通常只做检测任务,生成错误统计报告

(3)HDMA接收过程及中断服务程序

HDMA接收过程及中断服务程序如图5所示。

void HdlcRx_Isr(void); //如果接收正常完成,调用

//HdlcFrameReceive ();

void HdlcFrameReceive(Hdle_End_Device *pDrvCtrl,U32 IntHDLCStatus);

void HdlcFrameDataGet(Hdlc_End_Device *pDrvCtrl,U8 *pFrameData,U32 len);

数据到达,进入接收中断服务程序。如果接收1帧完成标志位(RxFA)设置,可以进入数据接收程序,由HdlcFrameDataGet()负责把数据从接收缓冲数据区送用户数据区,进行处理;如果错误,生成错误类型报告。

数据接收完毕,应该把当前的BD交还给接收DMA控制器,设置对应的所有权为DMA,然后把gpRxBDStart移到BD链中的下一个位置。

2 操作系统(OS)设备驱动接口

虽然程序是在ARMstd251中编译,但是整个结构基本是按照驱动程序设计思路,可以通过局部更改转化为OS驱动程序。

在HDLC控制中,如何生成BD链和相应的数据缓存区,是一个关键的问题。通常在无操作系统开发的环境中,这些相应的存储器分配可以采用全局的方式,固定在相应的系统内存区域,并遇射到Noncache区,使用指针快速访问。

在使用OS的情况下,例如pSOS、VxWorks,相应的存储器分配采用动态(calloc())的方式,尤其需要注意的在退出前必须回收资源。驱动程序设计的目的要为OS提供一个透明(Transparent)的接口,实现OS的I/O例程和硬件驱动无缝衔接。

同时,构建一个良好的设备结构也是十分必要的,可以方便设置、加载和卸载处理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top