MSP430fr6989的串口DMA发送实验例程(从0写起,亲测可玩)

发布者:睿智之光最新更新时间:2020-03-05 来源: eefocus关键字:MSP430fr6989  串口  DMA  发送实验 手机看文章 扫描二维码
随时随地手机看文章

本例子选择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)里面发送太快,不延时数据错误

}; 

}

关键字:MSP430fr6989  串口  DMA  发送实验 引用地址:MSP430fr6989的串口DMA发送实验例程(从0写起,亲测可玩)

上一篇:MSP430关于LED的代码
下一篇:MSP430 捕获模式,定时器A连续计数模式

推荐阅读最新更新时间:2024-11-13 07:47

51单片机实现通讯协议的串口通讯编程
我们以51单片机为例。51中一般针对串口通讯编程,通常采取中断接受查询发送的方式。中断函数在接受数据到达时被重复调用,其实是个重复入栈的过程,所以不宜将函数写的太长,函数太长一般会导致栈太深占用系统资源,二是处理时间过长,可能导致通讯出错。为了防止在处理数据过程中不受干扰,通常在处理接受数据前关闭中断,处理完后再开。 通常的的编程方式如下: static void UartInterruptService(void) interrupt 4 { ES = 0; RI = 0; uart_process(SBUF); ES=1; } 下面重点介绍数据处理函数 uart_process(SBUF); 其实很多时候,对于通讯
[单片机]
51单片机实现通讯协议的<font color='red'>串口</font>通讯编程
第011课 Jz2400串口(UART)的使用
第001节硬件知识_UART硬件介绍 1.串口的硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。 串口在嵌入式中用途非常的广泛,主要的用途有: 打印调试信息; 外接各种模块:GPS、蓝牙; 串口因为结构简单、稳定可靠,广受欢迎。 通过三根线即可,发送、接收、地线。 通过TxD- RxD把ARM开发板要发送的信息发送给PC机。 通过RxD- TxD线把PC机要发送的信息发送给ARM开发板。 最下面的地线统一参考地。 2.串口的参数 波特率:一般选波特率都会有9600,19200,115200等选项。其实意思就是每
[单片机]
第011课 Jz2400<font color='red'>串口</font>(UART)的使用
STM32F103两种串口输出的方式
#include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_crc.h #include system_stm32f10x.h #include stdio.h void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data) { USART_SendData(USARTx, Data); while(USART_GetFlagStatus(USARTx, USA
[单片机]
MSP432驱动舵机串口输出角度
MSP432驱动舵机串口输出角度 备注:我用的TI官方launchpad的MSP432P401R开发板 1、舵机需要50Hz基准的PWM,占空比是0.025~0.125.如何产生PWM,当然是定时器了。查看MSP432P401R数据手册,有4个定时器。 2、要算出详细的具体PWM频率,就需要知道系统的时钟,定时器的时钟。MSP432时钟来源比较复杂。具体可以看手册。(上TI官网下载) 5个时钟源,这里我选择HFXTCLK外部高速时钟(48MHz) 3、定时器的时钟来源可以有4种选择 这里我选择SMCLK时钟,定时器和串口都是SMCLK时钟源。 4、定时器具体配置代码 1 、定义PWM结构并初始化 Timer_A_
[单片机]
MSP432驱动舵机<font color='red'>串口</font>输出角度
单片机串口编程的优劣
这些日子做项目,在串口上耽误了不少时间,原来一直使用中断接收和查询发送,程序代码合起来时,程序竟然死在串口发送上,程序在那里等待,过不去,一直在做这个事情,今天总结一个专题,和大家分享。 51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。 在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用“中断
[单片机]
MSP430串口接收控制LED
/********************************************** *程序描述:单片机的P3.4、P3.5作为串口接收字符,将接受到的字符再发送出去 *并且根据接受到的字符‘1’‘2’‘3’‘4’分别点亮LED1、LED2、LED3、LED4 P2.0- LED1 ,P2.1- LED2, P2.2- LED3 ,P2.3- LED4 *作者 :Zhenhua Liu *时间 :2017.11.02 18:00 ***********************************************/ #include msp430x14x.h void usartIni
[单片机]
基于STM32实现串口的两个分案解析
首先总结一下串口232,422,485 串口232:可双向传输,全双工,最大速率20Kbps,负逻辑电平,-15V~-3V逻辑“1”,+3V~+15V逻辑“0”。 串口422:可双向传输,4线全双工,2线单工。 串口485:可双向传输,4线全双工,2线单工,最大速率10Mb/s,差分信号,发送端:+2V~+6V逻辑“1”,-2V~-6V逻辑“0”,接收端:+200mV逻辑“1”,-200mV逻辑“0”。 对于串口的实现有以两个方案: 方案一,和原子的《例说STM32》一样,首先接收,然后处理,没有消息验证处理,这样就会出现消息覆盖,消息出错后死机,无法明确区分命令,无法及时应答握手信号。方案二,借鉴uC/OSII的消息队列,进
[单片机]
基于STM32实现<font color='red'>串口</font>的两个分案解析
13.Smart210串口驱动基于12的补充
上面的12节里,已经讲了2440有关串口的设置和操作。本来,2440,6410和210的串口操作应该是几乎一样的。在进行6410和210的设置的时候,发现在波特率的设置,6410和210的原理是一样的,但是跟2440有点不一样。所以下面以210为例子,说明6410和210波特率的设置。 寄存器: UBRDIV0=(int)(PCLK_PSYS/(BAUD*16)-1);//UBRDIV0保存该公式计算后的整数部分。 UBRDIV0=(int)(66000000/(115200*16)-1)=(int)(35.8-1)=(int)(34.8)=34。即取整数部分为34. //UDISLOT0=保存该公式计算后的小数部分*
[单片机]
13.Smart210<font color='red'>串口</font>驱动基于12的补充
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved