Код
volatile alt_32 transmitdone=0;
void transmit_done()
{
transmitdone=1;
}
/* ************************************************** *********************** */
/* The following routines is for memory-to-Peripheral processing. */
/* ************************************************** *********************** */
void copy_mem_to_p(const char* dma_name,
void* start_addr, //Here,start_addr is the "Memory"
void* desti_addr, //and desti_addr is the "Peripheral"
alt_32 transfer_count,
alt_32 transfer_mode)
{
alt_32 flag;
alt_dma_txchan txchan;
if((txchan=alt_dma_txchan_open(dma_name))==NULL)
{
printf("\n Failed to open transmit channel(range-to-1)!\n");
exit(1);
}
alt_dma_txchan_ioctl(txchan,transfer_mode,NULL);
alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_ON,desti_addr);
if((flag=alt_dma_txchan_send(txchan,start_addr,transfer_count,transmit_done,NULL))<0)
{
printf("\n Failed to post transmit request(range-to-1)!\n");
exit(1);
}
while(!transmitdone);
transmitdone=0;
alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_OFF, NULL);
alt_dma_txchan_close(txchan);
}
//----------------
int main(void)
{
//в память записываю данные, которые хочу отправить по SPI
//....
//......
copy_mem_to_p(DMA_MEM2SPI_NAME,
(void*)DMA_DSP_MEMORY_BASE, //Here,start_addr is the "Memory"
(void*)SPI_FINISH_BASE, //and desti_addr is the "Peripheral"
4,
ALT_DMA_SET_MODE_32);
}
Проблема в том, что в transmit_done() захожу -флаг выставляю, а в окне памяти смотрю адрес SPI_FINISH_BASE - пусто.
Я правильно понимаю, что как только в tx_registr spi приходят данные он их сразу отправляет сам, не нужно больше никаких стимуляций? ))
Из spi в память через DMA у меня получилось передать - все хорошо, а тут не понимаю, что не так...