搜索
bottom↓
回复: 1

MSP430F5 DMA+SPI,仅发送或者仅接收模式,需要同时开2路DMA嘛?

[复制链接]
(70907843)

出0入0汤圆

发表于 2019-1-12 16:10:27 | 显示全部楼层 |阅读模式
MSP430F5438A + IAR7.10.1

单片机与DSP之间使用dma + spi进行单工通讯,分为2步:
步骤1、单片机发送设置参数(仅发送)
...经过一段时间...
步骤2、DSP回传计算结果(仅接收)。

由于单片机总是作为主机,DSP总是作为从机,每次传输必须通过单片机来启动,且由单片机端提供通讯时钟。

针对上述步骤1,由于单片机只是发送数据,因此根本就不关心回传的数据,单片机是否可以只开发送dma(设置参数变量->spi buf)?

针对上述步骤2,由于单片机只是接收数据,因此DSP也不关心单片机发送数据,单片机是否只开启接收dma(spi buf -> 计算结果变量)?

如下给出我的dma初始化代码,如果有描述不详的情况,欢迎指正!谢谢!

  1. void dma01_init(uint8_t *const src, uint8_t *const dst, uint16_t len)
  2. {
  3.     UCB0CTL1 |= UCSWRST;
  4.    
  5.     DMACTL0 = DMA1TSEL_18 + DMA0TSEL_19;  
  6.                                              
  7.     /*
  8.      * SPI0 TX
  9.      */
  10.     __data16_write_addr((unsigned short)&DMA0SA, (unsigned long)src);
  11.     __data16_write_addr((unsigned short)&DMA0DA, (unsigned long)&UCB0TXBUF);
  12.                                             
  13.     DMA0SZ = len;                                
  14.     DMA0CTL = DMADT_1 + DMASRCINCR_3 + DMASBDB + DMALEVEL;// + DMAEN;  

  15.     /*
  16.      * SPI0 RX
  17.      */
  18.     __data16_write_addr((unsigned short)&DMA1SA, (unsigned long)&UCB0RXBUF);
  19.     __data16_write_addr((unsigned short)&DMA1DA, (unsigned long)dst);
  20.                                           
  21.     DMA1SZ = len;                           
  22.     DMA1CTL = DMADT_1 + DMADSTINCR_3 + DMASBDB + DMALEVEL;// + DMAEN;  

  23.     UCB0CTL1 &= ~UCSWRST;   
  24. }

  25. void dma01_enable(void)
  26. {
  27.     DMA0CTL |= DMAEN;
  28.     DMA1CTL |= DMAEN;
  29. }
复制代码
(66959479)

出0入0汤圆

发表于 2019-2-27 08:56:31 | 显示全部楼层
没发现问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-4-12 08:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表