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

 
 
> Программирование FIFO, Вопросы по инициализации FIFO и использовании API
verali
сообщение Feb 27 2015, 12:17
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 6-11-14
Пользователь №: 83 540



Здравствуйте! Совершенно запутался из-за малого опыта работы с процессорами, но надеюсь разобраться!
Облазил кучу форумов, но так и не нашел ничего подобного.
Требуется слать управляющие сигналы (код частоты) от dsp процессора по spi на ip-ядро nco, а после NCO планируется уже использовать умножитель, блок фильтров и spi-master.
В предыдущей теме посоветовали самому написать мастер шины Avalon, но из-за непонимания что это такое и зачем нужно решил воспользоваться Ниосом(Nios требуется только для управления ) и по ходу дела начать разбираться с процессором, а так же подтянуть знания в программировании на Си.
Так как NIOS с NCO напрямую не соединить, требуется использовать “переход” AvMM-AvST, роль которого у меня выполняет fifo.
Начал разбираться с блоком fifo, и для начала собрал систему, которая из nios отправляет данное число в fifo_1 (AvMM-AvST), после это число отсылаю на внешние пины PIO(AvMM) благодаря второй fifo_2 (AvST-AvMM).
Интуитивно (так как не нашел примеров) использовал следующие API:
1) altera_avalon_fifo_init – инициализация фифо
2) altera_avalon_fifo_write_fifo – запись в фифо
3) altera_avalon_fifo_read_fifo – чтение из фифо

CODE
/***********************************************************************/
//Includes
#include "io.h"
#include "altera_avalon_pio_regs.h"
#include "altera_avalon_fifo_regs.h"
#include "altera_avalon_fifo_util.h"
#include "system.h"
#include "sys/alt_irq.h"
#include <stdio.h>
#include <stdlib.h>
#define ALMOST_EMPTY 2
#define ALMOST_FULL FIFO_0_IN_CSR_FIFO_DEPTH-3

int main(){
/*
//First FIFO (AvMM - AvST)
int a, b, c, d, e, g, h;
//initializes the FIFO

a = altera_avalon_fifo_init(FIFO_0_IN_CSR_BASE, //the base address of the FIFO control slave
0, //the value to write to the interruptenable register
ALMOST_EMPTY, //the value for the almost empty threshold (порог) level
ALMOST_FULL); //the value for the most full threshold level

//write a, b into fifo

b = 0xff;
c = altera_avalon_fifo_write_fifo(FIFO_0_IN_BASE, //the base address of the fifo write slave
FIFO_0_IN_CSR_BASE, //the base address of the fifo control slave
cool.gif; //value to write to address

//read a,b from fifo
d = altera_avalon_fifo_read_fifo(FIFO_0_IN_BASE, //the base address of the fifo read slave
FIFO_0_IN_CSR_BASE); //the base address of the fifo control slave




//Second FIFO (AvST - AvMM)

//initializes the FIFO
e = altera_avalon_fifo_init(FIFO_1_IN_CSR_BASE, //the base address of the FIFO control slave
0, //the value to write to the interruptenable register
ALMOST_EMPTY, //the value for the almost empty threshold (порог) level
ALMOST_FULL); //the value for the most full threshold level

//write d into fifo

g = altera_avalon_fifo_write_fifo(FIFO_1_OUT_BASE, //the base address of the fifo write slave
FIFO_1_IN_CSR_BASE, //the base address of the fifo control slave
d); //value to write to address

//read e,f from fifo
h = altera_avalon_fifo_read_fifo(FIFO_1_OUT_BASE, //the base address of the fifo read slave
FIFO_1_IN_CSR_BASE); //the base address of the fifo control slave

*/


// external PIO (AvMM)

IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, h);

return 0;
}


Моделирование провожу в ModelSim.
Прикрепленное изображение

По осциллограммам видно, что в fifo ничего не пишется. Есть предположение, что неправильно использую API (столкнулся впервые) или не до конца проинициализировал fifo (не могу найти четкой пошаговой инструкции как это сделать).
Буду рад любым замечаниям, предложениям и советам.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:54
Рейтинг@Mail.ru


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