реклама на сайте
подробности

 
 
> DMA+SPI, Как прогнать данные из памяти в SPI через DMA
prussta
сообщение Mar 30 2015, 13:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-12
Из: Екатеринбург
Пользователь №: 70 003



Добрый день, уважаемые!Помогите советом, пожалуйста! Хочу добиться чтобы данные из он-чип мемори через DMA поступали в spi. В Qsys подключаю read master DMA на control port on-chip memory, а write master на control port spi, также оба контрольных порта идут на NiosII. SPI - в режиме master. Функция передачи следующая
Код
  

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 у меня получилось передать - все хорошо, а тут не понимаю, что не так...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- prussta   DMA+SPI   Mar 30 2015, 13:26


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 09:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.0127 секунд с 7
ELECTRONIX ©2004-2016