历史上的今天
今天是:2025年05月05日(星期一)
2018年05月05日 | MSP430fr6989的串口DMA发送实验例程(从0写起,亲测可玩)
2018-05-05 来源:eefocus
本例子选择MSP430fr6989的P2.0与P2.1作为串口UCA0TXD UCA0RXD ;(代码不多,主要对寄存器的操作,急于求成都写在main.c文件,做工程不建议这样做)
主要用到这两个寄存器:
DMACTL0用于选择DMA通道;比如ADC12,串口 ,IIC,SPI,此处多说一句:DMA是一种方式,而SPI,IIC,串口等属于外设,两者不是一类概念,嘿嘿嘿
DMAxCTL用于DMA详细设置;此为重点!!!DMAxCTL包括:
DMADT:选择传输方式是一个单字节还是一个块transfer;本例子选简单的单字节transfer;
DMADSTINCR:分解单词DMA dest increase 即数据传送目标地址增加方式;有0 1 2 3四个选择,0和1代表地址不改变,2为地址递减,3为地址递增;
DMASRCINCR:同样分解DMA src increase 即数据源地址增加方式 。此刻如果疑问为何DMA需要dest和src?因为DMA(Driect Menory Access)直接内存访问;
DMAEN:EN就不解释了;
剩下的DMAxSA DMAxDA DMAxSZ就简单了,分别是src的地址 dest的地址 数据的大小size ;
下面为源代码相关部分,写在while(1)里面
/**********************************************************************************************/
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
PMMCTL0_H = PMMPW_H;
PMMCTL0_L &= ~SVSHE;
PMMCTL0_H = 0;
//以上为电源管理不用理会
UART_Init();//此处需要先配置好UART的波特率,校验位,高低位等等常规配置
DMACTL0 |= DMA1TSEL__UCA0TXIFG;//选择UCA0作为DMA通道 即P2.0 P2.1复用功能
while(1)
{
uint8_t a[]={0x66,0x77,0x99};//dest 源数据一数组
HWREG16(uart_info.base_addr + OFS_UCAxCTLW0) |= UCSWRST;//关UCA0,把串口先关掉,否则下面地址配置不能实现
__data16_write_addr((unsigned short)&DMA1SA, (unsigned long) &a[0]);//设置a数组的首地址为源地址
__data16_write_addr((unsigned short)&DMA1DA, (unsigned long)(uart_info.base_addr + OFS_UCAxTXBUF) );//设置UCAxTXBUF(串口的buffer)为目标地址
DMA1SZ = 3;//这是需要transfer传送3个字节
DMA1CTL = DMADT_0 | DMADSTBYTE | DMASRCBYTE | DMASRCINCR_3 | DMADSTINCR_0 | DMAEN;
//传送单个字节//dest为byte // src为byte // 3代表传送完一个字节源数据地址依次增加 //目标地址不增加 //使能
HWREG16(uart_info.base_addr + OFS_UCAxCTLW0) &= ~(UCSWRST);//开启串口
while (0 == (DMA1CTL & DMAIFG))//等待DMA传完数据,DMAIFG=1
{
}
for(int i=10000;i>=0;i--);//延时,可能是在while(1)里面发送太快,不延时数据错误
};
}
史海拾趣
|
开启PB5.0出错unable to initialize the catalog 最近我在acer笔记本上面安装了PB5.0。安装完成以后,一打开就跳出unable to initialize the catalog的错误对话框。然后再PB的主界面打开manager catalog item,里面什么都没有。也不能创建工程。 请问各位大侠,有没有遇到此问题的?谢谢 … 查看全部问答> |
|
来到eeworld有三个月了 学到了很多东西 发了很多帖子 得到了很多朋友的帮助 看了很多牛人的博客 对我的帮助真的太大了 希望在eeworld上认识更多的朋友 共同学习,进步 元旦假期就要结束了 希望大家新的一年工作顺利 —————————— ...… 查看全部问答> |
|
新手的请进,报个名,以后好交流心得!!!我只学过1个多星期的M51就来学STM32绝对是个新手,幸好这里的高手和版主有教无虑,有问必答,在这里表示万分感激!!!!… 查看全部问答> |
|
问题描述:程序出自ST官方的LwIP例程,只是简单的ping,不采用DHCP,IP定义在netconf.c,为192, 168, 2, 30。 采用STM32F107VCT6芯片,去除开发板管脚相关的定义,RMII模式,使用的管脚 PB11 ETH_M ...… 查看全部问答> |
|
1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟 ...… 查看全部问答> |
|
我要用12864LCD显示一些2430的数据,就用了2430的IO口P1(接了上拉电阻)驱动LCD显示屏(型号:HJ12864ZW),采用的是串行连接方式,经示波器检测控制时序没有问题,可是显示屏就是对任何命令都没有响应,不 ...… 查看全部问答> |




