确保产业链不“断”,66家半导体企业率先复工复产
06-06
1.简介 由于UART串口的应用广泛,在传统的8位、16位处理器以及32位处理器中,一般都有一个UART串口。
传统的基于UART的数据通信,一般采用查询式和中断式两种方式。
查询模式下,CPU的负担较重,浪费了处理器的能力,无法很好地处理其他事件;在中断模式下,当接收到信息或需要发送数据时可以产生中断,数据接收在中断服务程序中完成。
并且寄出。
与查询模式相比,中断模式具有更高的CPU利用率。
在CPU任务简单的系统中,使用中断确实是一个很好的方法。
然而,在移动机器人等复杂系统中,处理器需要处理串口通信、多传感器数据采集与处理、实时轨迹生成、运动轨迹插补和位置闭环控制等,涉及多项任务。
中断优先级分配问题。
为了保证数据发送和接收的可靠性,需要将UART中断优先级设计得较高。
但系统可能还有其他需要更高优先级的中断,必须保证它们的时序。
这可能会导致串行通信中断无法及时响应,从而导致数据丢失。
为此,笔者在使用S3c44b0x设计移动机器人控制器时,为了保证串行通信数据的及时可靠接收,同时兼顾其他任务不受影响,提出了一种基于DMA结合的UART串行通信方法并采用中断方式。
DMA是Direct Memory Access的缩写,意思是“直接内存访问”。
它是一种高速数据传输操作,允许外部设备和内存之间直接读取/写入数据,即无需经过CPU或不需要CPU干预。
。
整个数据传输操作是在称为 DMA 控制器的控制下执行的。
CPU除了在数据传输开始和结束时做一点处理外,在传输过程中还可以进行其他工作。
这样,大多数时候,CPU和输入/输出设备是并行运行的。
基本原理可以在课本上找到,这里不再赘述。
这里我们只介绍S3c44c0x的DMA控制器。
2。
S3c44b0x 中 DMA 控制器和 UART 的特点 S3c44b0x 采用 ARM7TDMI 内核,有 4 通道 DMA 控制器,并有 4 个相应的中断。
其中两个 DMA 通道称为 ZDMA(通用 DMA),并连接到 SSB(系统总线)。
另外两个 DMA 通道称为 BDMA(桥 DMA),连接到 SSB 和 SPB(外设总线)之间的接口层。
。
连接到 SSB 的 ZDMA 控制器可用于从存储器到存储器、从存储器到固定目标 I/O 存储器以及从 I/O 设备到存储器传输数据。
另外两个BDMA控制器的主要功能是在外部存储器和内部外设之间传输数据。
这里的内部外设包括SIO、IIS、TIMER和UART。
BDMA和ZDMA可以通过软件或硬件启动。
本设计中我们使用UART0,其对应的DMA通道为BDMA0。
控制器框图如图1所示。
S3c44b0x的UART单元提供2个独立的异步串行I/O端口。
每个端口都可以工作在中断模式或DMA模式,即UART可以产生内部中断请求或DMA请求。
在CPU的串行I/O端口/O端口之间传输数据,支持高达0.2KBPS的传输速率。
每个UART通道包含两个16位FIFO通道,分别用于发送和接收。
3。
硬件电路设计 由于S3c44b0x自带了支持UART的DMA控制器,所以不需要在DMA硬件部分做任何工作。
S3C44B0X的I/O口电压为3.3V,PC机一端的串口采用RS电平,所以中间需要进行电平转换,这里使用SPE芯片。
连接电路如图2所示。
4。
基于DMA和中断相结合的通信软件设计 以S3C44B0X为核心组成的移动机器人中,采用3路PWM定时器来驱动3个直流电机,通用GPIO口和A/D口连接外部红外,超声波和激光传感器,并使用UART0完成与上位机(PC)的数据交换。
这些数据是单向的(从上位机发送到S3c44b0x),主要是从上位机发送到机器人控制器的各种数据。
命令信息,但命令信息的发送时间是不规则的,即间隔是可变的。
为了充分利用CPU并降低数据丢失的风险,我们使用UART的DMA模式来完成数据接收。

软件部分主要针对具体应用,正确初始化DMA控制器和UART。
UART的初始化比较简单,主要是通信数据格式、波特率等的设置,这些和其他控制器是一样的,只要设置好相关寄存器即可。
注意UART设置为不使用自动流控,也不使用红外传输模式。
需要注意的是,UART0 设置为 DMA 模式而不是中断模式,并且必须启用 FIFO 缓冲区(根据需要使用 16 字节接收缓冲区)。
这样,当接收缓冲区满时,将产生DMA请求而不是中断请求。
由于篇幅限制,具体的寄存器定义和串口初始化不再详细介绍。
可以参考文献[1][2]。
DMA控制器的初始化也比较简单,主要是相关寄存器的设置。
本系统中用到的与BDMA0相关的寄存器及相关定义如表1所示,具体寄存器的名称定义和物理地址可参见参考文献[1][2]。
表1 S3c44b0x的BDMA相关寄存器定义 初始化时,目标(缓冲区)首地址、数据传输方向、源寄存器首地址、地址指针是否递增以及增量方向和DMA必须正确设置。
柜台等等。
相关代码及注释如下: #define RAM_ADDRESS 0xc00 //定义接收数据的缓冲区,具体取决于硬件。
我们系统中扩展的SDRAM存储空间是从0x0C0~0x0C7fffff,占用S3c44b0x的bank 6。
#define size 16 //定义DMA计数器并根据需要设置。
可用选项有 4、8、2 和 16 char *Buf; Buf=(unsigned char*) RAM_ADDRESS; //指针指向起始地址 BDISRC0=(11<<28)+(int)(rURxH0); /*以字节为单位传输;由于 UART 寄存器中的数据是在 DMA 操作期间读取并放置到设置的缓冲区中,因此源寄存器的地址应固定为; UART的接收保存寄存器rURxH0,位[29:28]应设置为0b11。
*/ BDIDES0=(10<<30)+(01<<28)+Buf); /*传输方向模式设置为从内部设备(UART口)到外部存储器(SDRAM),目标存储器(SDRAM)使用地址递增的方向依次将数据放入缓冲区*/ BDICNT0= (10<<30)+(1<<26)+(3<<22)+(1<<21)+(0<<20)+size;/*设置UART0使用BDMA0通道。
当DMA计数达到0时,会自动重新加载并自动启动。
计数结束时将产生中断。
每个 DMA 操作将 16 个字节的数据移动到设定的位置。
Buffer */ BDICNT0 |= (1<<20);//启用DMA BDCON0 = 0x0<<2;//允许外部DMA请求 数据接收:这部分工作是初始化的后者的DMA控制器依靠硬件来完成。
当不定期接收数据时,将UART0的接收缓冲区初始化为16字节。
当接收缓冲区满时,会产生DMA请求,然后在DMA控制器的控制下,传输UART接收FIFO中的16字节数据。
到指定的缓冲区(SRAM)。
当数据传输完成(DMA计数到0)时,需要做两件事:一是自动重载和自动启动,即自动重置目标(缓冲区)首地址和源地址(UART接收寄存器)和DMA 计数器已准备好迎接下一个 DMA 请求;此外,还会产生 DMA 中断。
DMA中断服务程序要做的工作非常简单。
它只需要设置全局标志RECEIVE_FLAG来通知主程序有新的命令需要处理。
这样,主程序就可以直接处理RAM中的数据,而不需要花时间读取UART的接收缓冲区。
数据处理:当主程序查询全局标志RECEIVE_FLAG时,如果为1,则知道有新命令,可以直接读取命令缓冲区,同时清除RECEIVE_FLAG。
然后根据一定的算法对接收到的数据进行分析。
这部分不再详细讨论。
5。
测试与结论 为了验证基于DMA通信的有效性,作者进行了对比测试。
负责轨迹插补的定时中断的优先级设计为最高(中断时间间隔为50毫秒,中断服务程序的执行时间约为30毫秒)。
然后一台机器人采用中断方式接收上位机连续发送的组命令,另一台机器人采用基于DMA方式的中断方式接收上位机连续发送的组命令。
然后在机器人的主程序中,通过读取UART的状态寄存器来确定错误的数量(主要是数据溢出错误,即缓冲区接收到数据但没有及时读取,被新数据覆盖)。
软件采用C语言,用ADS1.2编译和调试。
测试结果如表2所示。
实验证明了第二种方法的有效性。
表2:对比测试结果 本文作者的创新之处在于,在UART通信中,采用DMA方式直接将UART接收到的数据传输到设定的RAM区域,然后对应的全局标志设置后,只需通知主程序数据可用即可。
开发人员无需从UART缓冲区读取数据,只需直接读取RAM即可。
与采用中断方式或查询方式的串口通信方式相比,不仅节省了CPU通信时接收数据的时间,而且可以防止UART接收到的数据因未及时读取而丢失,提高了性能。
沟通效率。
可靠性。
参考文献: (1)《嵌入式系统开发与应用》,田泽主编,北京航空航天大学出版社,5月第一版; (2)S3C44B0X RISC微处理器,三星电子 (3)ARM微控制器基础与实战,周立功等主编,北京航空航天大学出版社,11月第1版。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-06
06-18
06-18
06-17
06-18
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现