你的位置:电子园51单片机学习网 >> 技术文章>> 详细内容 在线投稿

串口DMA控制实验(zhuan)

发布: 2010-2-26 16:30 |  作者: 来自网络 |   查看: 0次

一.背景电子园51单片机学习网5C,p4Dj(?Z2w
DMA是Direct Memory Access的缩写,即“存储器直接访问”。它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,即不通过CPU,也不需要CPU干 预。整个数据传输操作在一个称为“DMA控制器”的控制下进行的。CPU除了在数据传输开始和结束时作一点处理外,在传输过程中CPU可以进行其它的工 作。这样,在大部分时间里,CPU和输入输出都处在并行操作。因此,使整个计算系统的效率大大提高。
YY$v;R I|1{0AT91SAM7S64串口外围DAM控 制器的工作过程:将要发送的数据缓冲区的起始地址赋给串口DMA控制器的发送指针寄存器,再将要发送的字节个数赋给PDC的发送计数寄存器,然后无须 CPU的干预,DMA自动起动串口发送操作,发送完这些数据后又自动停止;同理,只要将接收数据缓冲区的起始地址赋给串口DMA控制器的接收指针寄存器, 再将要接收的字节个数赋给PCD的接收计数值,DMA将自动启动串口接收数据,接收完这些数据后,再通知CPU。电子园51单片机学习网CGv Y)Q)j~3x
二.实验目的电子园51单片机学习网&ghM1Z$~ o)U
验证上 述所描述的串口DMA控制器的工作过程,可用串口调试软件进行验证。
+`7^-q/W,@e r0三.实验程序和参数设置
!flR{R8Ai01>连接器选项设置和启动代码都与 上个实验相同电子园51单片机学习网 z:{W }+[0M
2>C语言的代码
4C esV}8`2S5{,B2[:g0#i nclude "AT91SAM7S64.h"电子园51单片机学习网 Q ie-\ }*sEH
#i nclude "Board.h"电子园51单片机学习网,q+Gmb/GD
unsigned char RxBuff[256],TxBuff[256];
"U-]|s_M%Gh0int main(void)电子园51单片机学习网3St|*J;qX
{电子园51单片机学习网U:K+f9O1n&j$b$F5u X
unsigned int i;电子园51单片机学习网$l*\:T5b vCA
*AT91C_CKGR_MOR = 0x701; //使能主振荡器和设置起振时间电子园51单片机学习网6u;s FHI o _N
*AT91C_PMC_MCKR = 0x01;//选择Mster Clock is main clock, divided by 0  
7\1\] Ws"qQ0*AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系统时钟寄存器的处理器时钟
q*e8V"M9EJ#t {!l0*AT91C_PMC_PCER = AT91C_ID_US0; //使能USART0时钟
q(p|*[U4dS0*AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN;//禁止该两个管脚的I/O口功能
)lj9q? RL0*AT91C_PIOA_ASR= US_RXD_PIN | US_TXD_PIN;//将该两个I/O口分配给外围A  电子园51单片机学习网 A6{.X9cK`Mn!m
*AT91C_US0_CR = 0x1ac;  //复位接收器和发送器,使能接收与发送,复位状态位
\0a+X{ msN\,p0*AT91C_US1_MR =0x8c0;  //正常模式,时钟为MCK,8位长度,无校验,1位停止位,
(F$r-Mu@r)k s9gy0*AT91C_US0_IDR  = 0xf3fff; //禁止所有UART相关的中断电子园51单片机学习网j [&Hwj b+l9_*k
*AT91C_US0_BRGR = 30;  //设置波特率为38400Hz,AT91C_US0_BRGR为CD值
G,IsL$T-w/H g0*AT91C_US0_CR   = 0x50; //使能发送与接收电子园51单片机学习网%h o E4QL9] v
*AT91C_US0_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;//使能US0的PDC 发送与接收
_0o.K~F R~&y0for (i = 0; i    //给发送缓冲区覆值
QP)r^1md[4L$z2t-|0TxBuff= i;   电子园51单片机学习网[8_ ?(nA:J
}//下面可用单步执行,来观察现象
f~'jzl0@R0*AT91C_US0_TPR = (unsigned int)TxBuff;//覆发送缓冲区起始地址电子园51单片机学习网 C;v Pcjc!v
*AT91C_US0_TCR = 256;    //起动PDC发送256个字节电子园51单片机学习网S4PD)lh\#B a
*AT91C_US0_RPR = (unsigned int)RxBuff;//覆接收缓冲区起始地址电子园51单片机学习网0ky9P'qqj
*AT91C_US0_RCR = 256;    //开始PDC接收电子园51单片机学习网3`E(cnJ
while (1);电子园51单片机学习网0kDzA3G6o&]w \Y
}
9t p tW'E0四.总结
X(D"U rmz!x o9Jg%ly0我们在用51等单片机的串口进行收发 数据时,因为发送与接收共用一个Buffer,所以在发送一字节数据后,通常都要加“while(!TI);”语句,来等待数据发送完毕;在接收数据时都 要使用中断来处理,每当接收到一个字节数据后都要中断一次CPU。有了DMA这个功能,就不用这样浪费CPU的时间,可大大的提高CPU的实时性能。
TAG: 串口 实验 DMA zhuan
打印 | 收藏此页 |  推荐给好友 | 举报
上一篇 下一篇
 

评分:0

发表评论
查看全部回复【已有0位网友发表了看法】

单片机开发板推荐

在线客服
在线客服系统