您的位置 首页 编程

ARM入门笔记(7)

串口DMA控制实验一.背景DMA是DirectMemoryAccess的缩写,即存储器直接访问。它是指一种高速的数据传输操作,允许在外部设备和存储

串口DMA操控试验

一.布景

DMA是Direct Memory Access的缩写,即“存储器直接拜访”。它是指一种高速的数据传输操作,答应在外部设备和存储器之间直接读写数据,即不通过CPU,也不需要CPU干涉。整个数据传输操作在一个称为“DMA操控器”的操控下进行的。CPU除了在数据传输开端和结束时作一点处理外,在传输进程中CPU能够进行其它的作业。这样,在大部分时刻里,CPU和输入输出都处在并行操作。因而,使整个计算机体系的功率大大进步。

AT91SAM7S64串口外围DAM操控器的作业进程:即将发送的数据缓冲区的开端地址赋给串口DMA操控器的发送指针寄存器,再即将发送的字节个数赋给PDC的发送计数寄存器,然后无须 CPU的干涉,DMA主动起动串口发送操作,发送完这些数据后又主动中止;同理,只要将接纳数据缓冲区的开端地址赋给串口DMA操控器的接纳指针寄存器,再即将接纳的字节个数赋给PCD的接纳计数值,DMA将主动发动串口接纳数据,接纳完这些数据后,再告诉CPU。

二.试验意图

验证上述所描绘的串口DMA操控器的作业进程,可用串口调试软件进行验证。

三.试验程序和参数设置

1>连接器选项设置和发动代码都与上个试验相同
2>C言语的代码

#i nclude “AT91SAM7S64.h”
#i nclude “Board.h”
unsigned char RxBuff[256],TxBuff[256];
int main(void)
{
unsigned int i;
*AT91C_CKGR_MOR = 0x701; //使能主振荡器和设置起振时刻
*AT91C_PMC_MCKR = 0x01;//挑选Mster Clock is main clock, divided by 0
*AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能体系时钟寄存器的处理器时钟
*AT91C_PMC_PCER = AT91C_ID_US0; //使能USART0时钟
*AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN;//制止该两个管脚的I/O口功用
*AT91C_PIOA_ASR= US_RXD_PIN | US_TXD_PIN;//将该两个I/O口分配给外围A
*AT91C_US0_CR = 0x1ac;//复位接纳器和发送器,使能接纳与发送,复位状况位
*AT91C_US1_MR =0x8c0;//正常形式,时钟为MCK,8位长度,无校验,1位中止位,
*AT91C_US0_IDR= 0xf3fff; //制止一切UART相关的中止
*AT91C_US0_BRGR = 30;//设置波特率为38400Hz,AT91C_US0_BRGR为CD值
*AT91C_US0_CR = 0x50; //使能发送与接纳
*AT91C_US0_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;//使能US0的PDC 发送与接纳
for (i = 0; i //给发送缓冲区覆值
TxBuff = i;
} //下面可用单步履行,来调查现象
*AT91C_US0_TPR = (unsigned int)TxBuff;//覆发送缓冲区开端地址
*AT91C_US0_TCR = 256; //起动PDC发送256个字节
*AT91C_US0_RPR = (unsigned int)RxBuff;//覆接纳缓冲区开端地址
*AT91C_US0_RCR = 256; //开端PDC接纳
while (1);
}

四.总结

咱们在用51等单片机的串口进行收发数据时,由于发送与接纳共用一个Buffer,所以在发送一字节数据后,一般都要加“while(!TI);”句子,来等候数据发送结束;在接纳数据时都要运用中止来处理,每逢接纳到一个字节数据后都要中止一次CPU。有了DMA这个功用,就不必这样糟蹋CPU的时刻,可大大的进步CPU的实时功能。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/254316.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部