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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> nios2 на ките Cyclone II для чайников, простейший проект
Vasily_A
сообщение Feb 7 2008, 18:30
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



пытаюсь собрать свой процессор, пока не получается...

почему такой чуть странный выбор - dsp-задачка на fpga-ките: не смог найти ни одного дсп-кита с аудиокодеком за вменяемую цену и быстро покупаемого.

аэрозольный факел - примерно как на автомойке струя распыленной воды летит, только послабей.
обучаемость алгоритма примерна такая: смотрим спектр сигнала в заведомо "пустой" области (там всякие шумы и собственные резонансы, причем непостоянные - механика стенда неидеальная) и по изменению спектра принимаем решене о том, что по струне начала бить струя микрокапелек.

еще один момент - уже не обязательный, но желательный - на этом ките вга выход есть, можно визуализацию спектра сделать в реальном времени для отладки, и вспомогательную индикацию на рабом экземпляре.

изделий всего порядка десятка ожидается, вот киты в них и поставлю, как покупное изделие... насколько меньше бумажек оформлять!!!
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 9 2008, 07:56
Сообщение #17


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

Группа: Свой
Сообщений: 139
Регистрация: 12-10-07
Пользователь №: 31 308



Цитата
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
....
{
IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,i);
delay();
printf("n=%d\r\n",n);
n++;
}
......
откомпилировал, залил - результат порадовал: в ком-порт на скорости 115200 выдается все что ожидается, светодиодики моргают.

И где в твоем коде обращение к ком порту?
К примеру, мне нужно было из платы передавать данные в компьютер по компорту. Сделал простенькую программу, там фактически нужна одна строчка IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, данные);, и данные можно передать в компьютер.
#include <stdio.h>
#include "altera_avalon_uart_regs.h"
#include "alt_types.h"
#include"system.h"
#include <io.h>
char sh;
int main()
{


while (1)
{


IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, 0x3);
sh=IORD_ALTERA_AVALON_UART_TXDATA(UART_0_BASE);
printf("sh=%d",sh);


}

return 0;
}

Число 0x3 передается из платы в компьютер. На экране Hyper Terminala видим знак в виде сердечки. А printf("sh=%d",sh); печатает это же число в окне nios2ide. Теперь надо прикрутить этот процессор к той программе, что в квартусе написано, и выводить числа по компорту в компьютер. Пока руки еще не дошли, времени не было. Но думаю, проблем не должно возникнуть, главное канал передачи данных есть.
Вообще для работы с компортом можно еще использовать апноту 459 (an459.pdf и плюс пример кода an459_bit_bang_uart.rar), изложено все подробно. Остается только читать.

Цитата
аэрозольный факел - примерно как на автомойке струя распыленной воды летит, только послабей.
обучаемость алгоритма примерна такая: смотрим спектр сигнала в заведомо "пустой" области (там всякие шумы и собственные резонансы, причем непостоянные - механика стенда неидеальная) и по изменению спектра принимаем решене о том, что по струне начала бить струя микрокапелек.

Интересная задача. А есть ссылки на какие нибудь статьи по данной тематике?
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 9 2008, 10:12
Сообщение #18


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



Цитата(prog_sun @ Feb 9 2008, 10:56) *
И где в твоем коде обращение к ком порту?
А printf("sh=%d",sh); печатает это же число в окне nios2ide.


просто надо переназначить stdin\stdout на uart вместо джитага (в свойствах проекта), и все работает именно по шнурку rs232 в терминал.

Цитата(prog_sun @ Feb 9 2008, 10:56) *
Вообще для работы с компортом можно еще использовать апноту 459 (an459.pdf и плюс пример кода an459_bit_bang_uart.rar), изложено все подробно. Остается только читать.
Интересная задача. А есть ссылки на какие нибудь статьи по данной тематике?


вопрос у меня теперь такой (собирать свой проц уже получается, в файле лицензий проблема была):

какой синтаксис у обработчика прерывания? самый простой вариант, например таймер.

может кто делал чтение с аудиокодека в память по дма?
Go to the top of the page
 
+Quote Post
RHnd
сообщение Feb 9 2008, 10:50
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Цитата(Vasily_A @ Feb 9 2008, 13:12) *
какой синтаксис у обработчика прерывания? самый простой вариант, например таймер.

Вам же уже сказали - читайте мануал и смотрите примеры. Среди стандартных примеров есть обработка прерывания таймера.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 9 2008, 11:50
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



Цитата(RHnd @ Feb 9 2008, 13:50) *
Вам же уже сказали - читайте мануал и смотрите примеры. Среди стандартных примеров есть обработка прерывания таймера.


<<Вам надо читать главу 5 Quartus HandBook - встроенная переферия. И смотреть примеры.>>

в 5-й главе quartusii_handbook.pdf практически нет описания по части синтаксиса этой конкретной реализации "С", а как писать\читать\останавливать\запускать таймер мне и так понятно. какие именно примеры имеются в ввиду?

читал. смотрел. как работать с таймером - понятно, там ничего нового по сравнению с микроконтороллерами нет. примеры перерыл все (те что с китом идут) - там с прерываниями есть работа в примере по определению летентности прерываний, но несколько неочевидным образом.
у меня проблема именно в синтаксисе...

может где есть именно описание платформо-зависимых расширений языка?
о чем я говорю: например от версии к версии в avr-gcc менялись макросы по чтению программной памяти, и не имея примера или докуметации по этим изменениям, можно было убить много времени. там это все документировано, а в случае ниоса - даже описаний китовых примеров почти нет...

неужели сложно написать 2-3 строчки? далее я по ним найду все...

конкретный вопрос - есть timer_0 с 4-м irq, нужны сторочка:

тип_функции имя_функции(параметры) { мой_код; возможный_код_завершения_прерывания; };
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 9 2008, 12:00
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Без разницы какое прерывание обрабатывать, от таймера или о уарта.
Скачайте с сайта altera документик Nios II Software Developer's Handbook или архив со всей документацией. В разделе Exception Handling найдете примеры работы с прерываниями.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 9 2008, 12:26
Сообщение #22


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



Цитата(vetal @ Feb 9 2008, 15:00) *
Без разницы какое прерывание обрабатывать, от таймера или о уарта.
Скачайте с сайта altera документик Nios II Software Developer's Handbook или архив со всей документацией. В разделе Exception Handling найдете примеры работы с прерываниями.


уже нашел... минут 20 как уже. сразу после написания предыдущего письма, читаю...

а примеры\аппноты кроме китовых для ниоса существуют? в принципе можно по библиотечным функциям пытаться разобраться, но хочется легкого пути.
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 9 2008, 12:33
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
а примеры\аппноты кроме китовых для ниоса существуют?

Примеры использования в хэндбуке есть.
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 9 2008, 17:01
Сообщение #24


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

Группа: Свой
Сообщений: 139
Регистрация: 12-10-07
Пользователь №: 31 308



Цитата
а примеры\аппноты кроме китовых для ниоса существуют? в принципе можно по библиотечным функциям пытаться разобраться, но хочется легкого пути.



Поищи здесь http://www.altera.com/literature/lit-an.jsp может что найдешь. Некоторые апноты с design example идут.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 10 2008, 18:35
Сообщение #25


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



Мой работающий код - все совсем просто оказалось...
может кому пригодится.

#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "basic_io.h"

#include "sys/alt_irq.h"
#include "altera_avalon_timer.h"
#include "altera_avalon_timer_regs.h"

void timerinit_int( void );

volatile int i_cnt;

//-------------------------------------------------------
void ISR_timer_0( void * context, alt_u32 irqnum )
{
i_cnt++;
IOWR_ALTERA_AVALON_TIMER_STATUS (TIMER_0_BASE, 0);
}
//-------------------------------------------------------
//-------------------------------------------------------
int main()
{
int i;
int n=0;
i_cnt=0;

printf("Hello from Nios II!\r\n");
printf("init timer_0\r\n");
timerinit_int();
printf("Go!\r\n");

while(1)
{
for(i=0;i<256;i++)
{
IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,i);
printf("n=%d i_cnt=%d\r\n",n,i_cnt);
IOWR(SEG7_BASE,0,n);
n++;
usleep(100000);
}
}
return 0;
}
//-------------------------------------------------------
void timerinit_int( void )
{
// Stop the Timer
IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_0_BASE,
ALTERA_AVALON_TIMER_CONTROL_STOP_MSK);
// Register ISR
alt_irq_register (TIMER_0_IRQ, (void*)TIMER_0_BASE, ISR_timer_0);
// Start timer
IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_0_BASE,
ALTERA_AVALON_TIMER_CONTROL_ITO_MSK |
ALTERA_AVALON_TIMER_CONTROL_CONT_MSK |
ALTERA_AVALON_TIMER_CONTROL_START_MSK);
}
//-------------------------------------------------------
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 17 2008, 09:20
Сообщение #26


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

Группа: Свой
Сообщений: 139
Регистрация: 12-10-07
Пользователь №: 31 308



Цитата
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
void delay(void);
//-------------------------------------------------------
int main()
{
int i;
int n=0;
printf("Hello from Nios II!\r\n");
while(1)
{
for(i=0;i<256;i++)
{
IOWR_ALTERA_AVALON_PIO_DATA(LEDG_BASE,i);
delay();
printf("n=%d\r\n",n);
n++;
}
}
return 0;
}
//-------------------------------------------------------
void delay(void)
{
volatile int i;
i=0;
while (i<500000) i++;
}
//-------------------------------------------------------

откомпилировал, залил - результат порадовал: в ком-порт на скорости 115200 выдается все что ожидается, светодиодики моргают.

Цитата
(prog_sun @ Feb 9 2008, 10:56)

И где в твоем коде обращение к ком порту?
А printf("sh=%d",sh); печатает это же число в окне nios2ide.



просто надо переназначить stdin\stdout на uart вместо джитага (в свойствах проекта), и все работает именно по шнурку rs232 в терминал.

Для обращения к Uartу достаточно написать IOХХ_ALTERA_AVALON_UART_XXDATA(address,data); а в вашем коде нет вообще обращения к UARTy. В коде как понял идет пересчет светодиодов на pio.

Цитата
просто надо переназначить stdin\stdout на uart вместо джитага (в свойствах проекта)

причем тут джитаг? Вы передаете данные по Jtag-Uart ? Вообще ничего не понял. И как конфигурируется stdout device.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 17 2008, 10:11
Сообщение #27


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



Цитата(prog_sun @ Feb 17 2008, 12:20) *
Для обращения к Uartу достаточно написать IOХХ_ALTERA_AVALON_UART_XXDATA(address,data); а в вашем коде нет вообще обращения к UARTy. В коде как понял идет пересчет светодиодов на pio.
причем тут джитаг? Вы передаете данные по Jtag-Uart ? Вообще ничего не понял. И как конфигурируется stdout device.


чесное пионерское smile.gif , работает именно по rs232 шнурку, могу принт-скрин с терминала прислать smile.gif

в свойствах проекта, на закладке с системной библиотекой выбирается через что работает stdin, stdout и stderror. по умолчанию там стоит джитаг-варт, надо поставить просто варт (если он в системе есть, в демо-примере есть).
по сути, это задает реализацию putchar (как и описано в стандарте "С"). можете сделать свой putchar, и у вас printf хоть морзянкой черех аудиокодек заработает.

IOХХ_ALTERA_AVALON_UART_XXDATA(address,data) просто передаст data на порт, но не отследит завершение и не преобразует в нужный формат. на мелких процах (avr, x51, pic и подобное) имеет смысл реализовать свою библиотеку ввода-вывода в ком - получается быстрее и короче, но на "жирных" (арм, ниос) стоит этим заниматься, если совсем сильно прижмет (например отладочный вывод в прерываниях, чтоб с реентабельностью не сражаться)

вот на VGA stdout сделать - это я пока не смог... но пытаюсь - причем в графике.
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 17 2008, 11:24
Сообщение #28


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

Группа: Свой
Сообщений: 139
Регистрация: 12-10-07
Пользователь №: 31 308



Цитата(Vasily_A @ Feb 17 2008, 13:11) *
чесное пионерское smile.gif , работает именно по rs232 шнурку, могу принт-скрин с терминала прислать smile.gif

в свойствах проекта, на закладке с системной библиотекой выбирается через что работает stdin, stdout и stderror. по умолчанию там стоит джитаг-варт, надо поставить просто варт (если он в системе есть, в демо-примере есть).
по сути, это задает реализацию putchar (как и описано в стандарте "С"). можете сделать свой putchar, и у вас printf хоть морзянкой черех аудиокодек заработает.

Да, нашел в апноте459, (в прикрепленном файле показано, что у меня jtag-uart установлено в stdout stdin). Кстати у меня таймер не установлен там, а во вкладке нет вообще никакого таймера, только none.

Цитата
IOХХ_ALTERA_AVALON_UART_XXDATA(address,data) просто передаст data на порт, но не отследит завершение

Почему? сижу сейчас разбираюсь с этим читаю про статус регистр и там бит TRDY. Написано, что когда txdata регистр пуст и готов для передачи данных TRDY=1. Когда txdata регистр заполнен TRDY=0.
У меня такая проблема к примеру надо передать число b71b00(hex), так вот он передает только b7. Еще много других битов есть, сижу читаю их.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
torik
сообщение Feb 17 2008, 11:48
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



может проблема с типом переменых?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 17 2008, 11:49
Сообщение #30


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 1-03-05
Из: Калуга, СССР
Пользователь №: 2 957



Цитата(prog_sun @ Feb 17 2008, 14:24) *
Да, нашел в апноте459, (в прикрепленном файле показано, что у меня jtag-uart установлено в stdout stdin). Кстати у меня таймер не установлен там, а во вкладке нет вообще никакого таймера, только none.
Почему? сижу сейчас разбираюсь с этим читаю про статус регистр и там бит TRDY. Написано, что когда txdata регистр пуст и готов для передачи данных TRDY=1. Когда txdata регистр заполнен TRDY=0.
У меня такая проблема к примеру надо передать число b71b00(hex), так вот он передает только b7. Еще много других битов есть, сижу читаю их.


открываешь в квартусе проект из китовой папки с ниосом (копию на всякий случай сделай), в сопс-билдере добавляешь таймер (ну и что еще по вкусу), генеришь. потом делаешь билд-олл для всего проекта. естественно, нужен правильный файл лицензии и правленные длл.

на основе собранного проекта делаешь проект в ниос2, выбирая для системной библиотеки собранный в квартусе проект, и все появится.

Цитата(prog_sun @ Feb 17 2008, 14:24) *
IOХХ_ALTERA_AVALON_UART_XXDATA(address,data) просто передаст data на порт, но не отследит завершение

Почему? сижу сейчас разбираюсь с этим читаю про статус регистр и там бит TRDY. Написано, что когда txdata регистр пуст и готов для передачи данных TRDY=1. Когда txdata регистр заполнен TRDY=0.
У меня такая проблема к примеру надо передать число b71b00(hex), так вот он передает только b7. Еще много других битов есть, сижу читаю их.


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

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

 


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


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