摘要:以ARM7TDMI为内核的Samsung公司S3C4510B网络微控制器(Networking MCU)为基础,重点论述如何通过DMA(直接内存访问)方式实现HDLC通信。对软件设计中缓冲描述符、DMA状态配置和控制、ISR服务程序设计以及相关的硬件配置进行详细的描述,并讨论如何编写在操作系统下的驱动程序。 关键词:HDLC 缓冲描述符 循环链表 中断服务程序 DMA 目前在嵌入式产品开发设计中,通常是在OS(Operating System)厂商提供的BSP基础上进行开发工作;对于底层硬件的操作,程序设计人员很少关注或只是少量的修改。实际上很多产品,我们完全可以抛开操作系统的模式,避免不必要的系统开销,而对底层的硬件直接进行处理。这样,可以节省资源提高利用率。当然,这样也会人为地增加系统开发设计的难度。但是从长远的角度看,进行这样的设计思考还是非常必要的。现在一些产品的设计开发中,所缺少的实际上就是深入了解底层操作,这样往往使我们丢失了创新的机会。 本文主要分析如何在硬件基础上直接进行程序设计,介绍如何在底层进行HDLC通信控制操作,以及如何处理数据结构等方面的问题。对于进行驱动程序的设计以及进行系统设计,都提供了良好的借鉴。 1 S3C4510B以及HDLC模块 S3C4510B是三星公司生产的以ARM(Advanced RISC Machines)16/32BITs的RISC ARM7TDMI微处理器为内核的一种网络微控制器(NETMCU,Networking MCU),主要用于网络产品(如MUB、Router、HomePNA、SOHO)的开发设计。这款MCU在ARM7TDMI处理器的基础上,外加2个通道的HDLC控制器、I2C总线和2个通道串行接口、1个MAC控制模块以及统一的MII界面,提供10MHz/100MHz以太网的自适应连接。对于网络产品的设计提供了灵活的支持。 在软件开发设计方面,NetMCU使用的是ARM7TDMI处理器内核,所以支持ARM的开发工具(如WindRiver的Tornado、ARM的ARMstd251等)都对其适用,方便用户开发设计,最大限度地获得支持资源。 1.1 S3C4510B中的HDLC模块 S3C4510B的HDLC(High-level Digital Link Controller)控制器拥有2个串行通道。HDLC模块支持符合SDLC标准和HDLC标准的CPU/数据通道接口,包含2个DMA引警;支持使用对应帧的缓冲区描述符结构,而且可以灵活地配置通道物理编码模式(NRZ,FM,MAN),选择本地或者外部时钟;支持通过锁相环路从接收数据流提取时钟信号。使用的HDLC的帧结构如表1所列。