历史上的今天
返回首页

历史上的今天

今天是: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)里面发送太快,不延时数据错误
}; 
}


推荐阅读

史海拾趣

Cybernetic Micro Systems公司的发展小趣事

为了进一步拓展业务领域,CMS开始寻求跨界合作。他们与一家领先的汽车制造商达成战略合作,共同研发车载智能系统。CMS的芯片技术为车载系统提供了强大的计算能力和数据处理能力,使得车载系统更加智能化、便捷化。这一合作不仅为CMS带来了新的收入来源,也进一步提升了公司的品牌影响力。

EDAC公司的发展小趣事

面对数字化浪潮的冲击,ECS-D公司积极拥抱数字化转型,通过引入先进的信息技术和智能化设备,提升企业的运营效率和创新能力。公司建立了数字化管理平台,实现了生产、销售、财务等各个环节的信息化管理。同时,ECS-D公司还加强了对员工的数字化培训和教育,提升员工的数字化素养和创新能力。这些数字化转型的举措使ECS-D公司在激烈的市场竞争中保持了领先地位,也为公司的未来发展奠定了坚实的基础。

以上五个故事均以ECS公司的发展为主题,分别从不同角度描述了这些公司在电子行业中的成长历程和成功经验。这些故事旨在展示ECS公司如何通过技术创新、全球化战略、品质管理、绿色环保理念和数字化转型等方式实现持续发展和壮大。

迈翔科技(COILMX)公司的发展小趣事

进入21世纪后,迈翔科技面临了来自国内外同行的激烈竞争。为了保持竞争力,公司投入大量资源进行技术研发和创新。通过不懈努力,公司成功开发出了一系列高性能的贴片功率电感和大电流电感,这些产品凭借卓越的性能和稳定的品质,迅速获得了市场的认可。

DESOUTTER公司的发展小趣事

Desoutter公司成立于1914年,由Desoutter兄弟创立。起初,公司专注于气动工具的研发和生产,很快就以其高质量和可靠性在市场中获得了认可。随着工业革命的深入,气动工具的需求日益增长,Desoutter公司凭借技术优势和市场洞察,逐步扩大了生产规模,奠定了在气动工具领域的领先地位。

Efficient Power Conversion公司的发展小趣事

在追求自身发展的同时,EPC公司也积极寻求与行业内其他企业的合作。通过与全球知名的汽车制造商、通信设备制造商以及消费电子企业建立合作关系,EPC公司将其氮化镓技术广泛应用于各个领域,推动了整个电子行业的发展。同时,EPC公司也积极参与行业标准的制定和推广工作,为行业的健康发展做出了积极贡献。

Defense Supply Center Columbus公司的发展小趣事

Defense Supply Center Columbus公司自成立之初,就深知技术创新对于电子行业的重要性。公司投入大量资源,建立起一支专业的研发团队,专注于研发先进的军事电子设备和系统。通过不断的技术创新,公司成功开发出了一系列高性能、高可靠性的军事电子产品,为国防事业做出了重要贡献。这些产品的成功推出,不仅提升了公司的市场地位,也为公司赢得了众多客户的信赖和好评。

问答坊 | AI 解惑

开启PB5.0出错unable to initialize the catalog

最近我在acer笔记本上面安装了PB5.0。安装完成以后,一打开就跳出unable to initialize the catalog的错误对话框。然后再PB的主界面打开manager catalog item,里面什么都没有。也不能创建工程。 请问各位大侠,有没有遇到此问题的?谢谢 …

查看全部问答>

第一次散分,为感谢eeworld的朋友们

来到eeworld有三个月了 学到了很多东西 发了很多帖子 得到了很多朋友的帮助 看了很多牛人的博客 对我的帮助真的太大了 希望在eeworld上认识更多的朋友 共同学习,进步 元旦假期就要结束了 希望大家新的一年工作顺利 —————————— ...…

查看全部问答>

请问如何学习嵌入式

我现在是大一,什么都不懂,就学了个C还没学完,寒假我在论坛上看了很多,想确定一个目标,最后决定往嵌入式这方面发展,看中了驱动层人才少,想明确目标搞驱动层,我有信心,有干劲,但由于什么都不懂,无从下手,我觉得大学4年很快就过了,不想到 ...…

查看全部问答>

STM32新手的请进,报个名,以后好交流心得!!!

新手的请进,报个名,以后好交流心得!!!我只学过1个多星期的M51就来学STM32绝对是个新手,幸好这里的高手和版主有教无虑,有问必答,在这里表示万分感激!!!!…

查看全部问答>

请教:STM32F107采用RMII以太网的问题

问题描述:程序出自ST官方的LwIP例程,只是简单的ping,不采用DHCP,IP定义在netconf.c,为192, 168, 2, 30。       采用STM32F107VCT6芯片,去除开发板管脚相关的定义,RMII模式,使用的管脚 PB11    ETH_M ...…

查看全部问答>

SPI总线的特点、工作方式及常见错误解答

1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟 ...…

查看全部问答>

2430能直接驱动12864LCD吗

       我要用12864LCD显示一些2430的数据,就用了2430的IO口P1(接了上拉电阻)驱动LCD显示屏(型号:HJ12864ZW),采用的是串行连接方式,经示波器检测控制时序没有问题,可是显示屏就是对任何命令都没有响应,不 ...…

查看全部问答>

菜鸟想学FPGA

我是一名学生,想学FPGA,请问大家能给些指导吗?应该怎么入门,从哪边下手呢?…

查看全部问答>

一些初学者比较合适的简单例子(verilog)

自己学习时找到的一些简单例子,初学的朋友可以看看 [ 本帖最后由 dd987219 于 2013-1-22 18:04 编辑 ]…

查看全部问答>