因为在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&