|
MSP430F5438A + IAR7.10.1
单片机与DSP之间使用dma + spi进行单工通讯,分为2步:
步骤1、单片机发送设置参数(仅发送)
...经过一段时间...
步骤2、DSP回传计算结果(仅接收)。
由于单片机总是作为主机,DSP总是作为从机,每次传输必须通过单片机来启动,且由单片机端提供通讯时钟。
针对上述步骤1,由于单片机只是发送数据,因此根本就不关心回传的数据,单片机是否可以只开发送dma(设置参数变量->spi buf)?
针对上述步骤2,由于单片机只是接收数据,因此DSP也不关心单片机发送数据,单片机是否只开启接收dma(spi buf -> 计算结果变量)?
如下给出我的dma初始化代码,如果有描述不详的情况,欢迎指正!谢谢!
- void dma01_init(uint8_t *const src, uint8_t *const dst, uint16_t len)
- {
- UCB0CTL1 |= UCSWRST;
-
- DMACTL0 = DMA1TSEL_18 + DMA0TSEL_19;
-
- /*
- * SPI0 TX
- */
- __data16_write_addr((unsigned short)&DMA0SA, (unsigned long)src);
- __data16_write_addr((unsigned short)&DMA0DA, (unsigned long)&UCB0TXBUF);
-
- DMA0SZ = len;
- DMA0CTL = DMADT_1 + DMASRCINCR_3 + DMASBDB + DMALEVEL;// + DMAEN;
- /*
- * SPI0 RX
- */
- __data16_write_addr((unsigned short)&DMA1SA, (unsigned long)&UCB0RXBUF);
- __data16_write_addr((unsigned short)&DMA1DA, (unsigned long)dst);
-
- DMA1SZ = len;
- DMA1CTL = DMADT_1 + DMADSTINCR_3 + DMASBDB + DMALEVEL;// + DMAEN;
- UCB0CTL1 &= ~UCSWRST;
- }
- void dma01_enable(void)
- {
- DMA0CTL |= DMAEN;
- DMA1CTL |= DMAEN;
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|