历史上的今天
今天是:2025年03月05日(星期三)
2020年03月05日 | MSP430fr6989的串口DMA发送实验例程(从0写起,亲测可玩)
2020-03-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)里面发送太快,不延时数据错误
};
}
上一篇:MSP430关于LED的代码
史海拾趣
|
前天我用木马克星杀了一次毒,等杀完以后,再点击按Ctrl+Alt+delete的键时,系统没有任何反应,不弹出任务管理器,请问这是什么问题 请各位高手给以解答 在此万分感谢!!!… 查看全部问答> |
|
测试WDK环境时出现这样的错误 出现这样的错误 errors in directory f:\\wdk\\wdkstudy\\first Do not assign include. 有人知道是为什么吗?… 查看全部问答> |
|
根据 ST 虚拟串口 的例子,改写了一个用USB与上位机通信的程序。现在的问题是,原程序 把 USB_Init();语句放在了 main 函数里面,这样如果插着USB线给 ARM 上电的话,就会导致 usb的初始化 ...… 查看全部问答> |
|
最近一个月多月,工作上的事情繁多,没能够及时的完成前期参与的论坛活动,深感抱歉!先开个帖子,我慢慢的补吧 本来打算做成这样的。 总体设计框图 实现的功能 1. 完成A/D转换,FFT变换 ...… 查看全部问答> |
|
两块闲置Altera DE2开发板+一块Terasic LTM 4.3寸触摸屏 筒子们好,目前手里有闲置的两块Altera DE2开发板,九成新,只做过一个project后闲置了一年,想以1500/块价格转让。 另外,还有一块Terasic LTM 4.3寸触摸屏,同样只做过一个project,如果需要的话500转让给需要的朋友(原价1700)。 如果有朋友 ...… 查看全部问答> |
|
这个是网站下载的程序,因为本人用的是F5529的板子,没有P6.0的端口输入插头,所以想改用P6.7端口输入,进行试验,中间除了一些问题,请教大神指点:用P6.7输入好像无作用! // ...… 查看全部问答> |




