MSP430 SPI接口DMA模式通信
来源:互联网 发布:纳税人网络敲诈 编辑:程序博客网 时间:2024/05/17 01:00
因为在tinyos系统下,节点写flash的速度过慢,开始怀疑是不是SPI的速度有问题,所以后来就直接在IAR上裸机读写FLASH,看看速度可以去到多少。用到了430的SPI的DMA模式
DMA模式之所以会更快,是因为所要传输的数据省去了要经过CPU处理这一步,直接在内部总线传输到DMA寄存器,然后DMA寄存器在根据情况通过总线传输到目标寄存器。这里的总线,我也还没搞清楚。在DMA传输数据的时候,虽然说CPU可以继续干自己的活,但是如果CPU要使用总线的话,而总线被DMA占用了,这时候该怎么办?
void SpiDmaSend(uint8_t cmd,uint8_t *tx_addr, uint8_t *rx_addr,uint16_t len){ DMACTL0 =DMA2TSEL_3 + DMA0TSEL_4; IFG1 &= ~( UTXIFG0 | URXIFG0 ); //Clear interrupt flag DMA2SA = (unsigned int)&U0RXBUF; // Src address = UART RX Buffer DMA2DA = (unsigned int) rx_addr; // Dst address = rbuf DMA2SZ = len; DMA2CTL = DMADT_0 + DMASBDB ; cmd==SPI_READ ? (DMA2CTL|=DMADSTINCR_3):(DMA2CTL|=DMADSTINCR_0); DMA0SA = (unsigned int) tx_addr; DMA0DA = (unsigned int)&U0TXBUF; DMA0SZ = len ; DMA0CTL = DMASBDB; cmd==SPI_WRITE? (DMA0CTL|=DMASRCINCR_3):(DMA0CTL|=DMASRCINCR_0,DMA0SZ+=1); DMA2CTL|= DMAEN; DMA0CTL|= DMAEN; IFG1 |= UTXIFG0; while((DMA0CTL & DMAIFG)==0); DMA1CTL&=~ DMAEN; DMA2CTL&=~ DMAEN; IFG1 &=~UTXIFG0; DMA1CTL &= ~DMAIFG;}
使用DMA模式,首先就是选好通道,MSP430里面,有三个DMA通道。因为用到SPI双工通信,所以发送和接收各用一个通道。然后,就是配置通道的触发方式,各通道要传输的字节数,还有,通道的传输方式,是单字节传输(single)还是块传输(block)。同时,配置好,源地址和目的地址的地址指针是否要递增。
关于Single和Block传输方式的区别,我当时看datasheet也是看不懂,后来上网查,就连作者本人也说了文档的说明看上去会让人产生迷惑,呵呵。那时候我忽然觉得,原来不全是我太笨才看不懂呀。关于传输模式的区别,大家还是看看参考手册,俺也说不清楚。MPS430参考手册
- MSP430 SPI接口DMA模式通信
- MSP430 SPI硬件接口
- STM32 SPI DMA通信
- STM32的使用之SPI通信DMA模式
- NRF24L01实现msp430单片机通信(SPI)
- 基于MSP430之间的SPI通信
- MSP430+DMA
- 基于UCOSII的DMA-SPI通信
- SPI通信接口
- SPI总线 SPI接口 SPI协议 SPI模式 SPI通讯
- SPI总线 SPI接口 SPI协议 SPI模式 SPI通讯
- s3c2440 spi驱动DMA模式
- s3c2440 spi驱动DMA模式
- spi+dma
- 15.2 单片机SPI通信接口
- STC89C52MCU--串行通信接口SPI
- msp430之DMA控制器
- MSP430 DMA程序库
- VB mschart控件的使用
- wifi无线网卡 移植
- 用JFreeChart 生成报表
- Java String对象的经典问题(new String())
- 集体与个人
- MSP430 SPI接口DMA模式通信
- Lucene3.0.1 学习笔记
- 14 Web相关
- Compass2.2 学习笔记
- iOS开发:Objective-C精确的货币计算
- 2012 IT热门人才需求类型盘点
- 第九章中位数与顺序统计学之“同时找出最小值和最大值”
- Extended WPF Toolkit
- 我心中的12306