Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS II
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Men
Начинаю осваивать NIOSII. Хочу начать с RS232.
Си только начал изучать(опять же на Ниосе).
Подкинте скриптик студенту!!!
Типа:
- принял байт(RS232)
- прибавил 1
- отправил байт
Kuzmi4
2 Men - скриптик ?? На сях ?? wacko.gif
Тема думаю в этот. раздел
Но если по сути:
Если не охота лезть глубоко - getchar/putchar вроде в сях есть - их можно заюзать..
Если охота лезть глубоко - пишется свои ф-ции для приёма и передачи (если работали ранее на каких либо МК и писали под GCC-> WinAVR,WinARM - портировать не составить труда, главное с архитектурой разберитесь).
Структурка проги прибл будет такова - есть интеррупт от уарта. Когда приходит байт вваливаемся в интерупт по приёму (там интерупт 1 на весб уарт , потому внутри интерупта надо битики смотерть - что собсно было причиной- приём или передача). записываем в массив и выставляем флаг - типа был приём и байт записан в обменник. НУ там сбрасываем флажок и выаливаемся из интерупта. В мэйне у нас цикл верится - ждём этого самого флага чтоб начать работать. Когда флаг выставился - делаем страшное дело с полученным байтом и отправляем назад. Тут можно по разному, но я б опять же заюзал интерупты - слал через них же.
Вот собсно и всё..
smile.gif
Men
Ну не работал я раньше с контроллерами я студент только осваиваю!!!
Ну нужен скрипт для НИОСА!!! crying.gif
Kuzmi4
2 Men - а не могли бы вы растолковать, что вы понимаете под скриптом для NIOSII ??
И какое отношение скрипты имеют к RS232 в ниосе ??
Men
Ну как я понял чтобы пользоваться RS232 нужно подключать спец функции от альтеры
RS232 UART Core for Altera’s
Kuzmi4
2 Men - посмотрите на сайте альтеры демки - как собрать систему - там вроде всё ясно и понятно объяснено.

А касательно

Цитата
подключать спец функции


-> есть SoPC Builder и в нём есть компонент RS323 в серийных устройствах. Он добавляется к системе и потом в NIOSII IDE - можно printf например всякие юзать...
Men
Цитата(Kuzmi4 @ Jul 2 2008, 18:03) *
2 Men - посмотрите на сайте альтеры демки - как собрать систему - там вроде всё ясно и понятно объяснено.

А касательно



-> есть SoPC Builder и в нём есть компонент RS323 в серийных устройствах. Он добавляется к системе и потом в NIOSII IDE - можно printf например всякие юзать...

Мне нужен простой пример работы с RS а не "можно printf например всякие юзать..."(Я начинающий!!!)
Уровень таков лампочки зажигать только научился!!! 01.gif
Kuzmi4
2 Men
Специально для вас как начинающего
ВОТ
Всё ж описано, лень было полезть посмотреть ?

(Про квартус на додачу )

А самый простой пример на С - в шаблонах NIOSII IDE -

Цитата
Hello World


называется..
Mik174
Цитата(Men @ Jul 3 2008, 10:09) *
Мне нужен простой пример работы с RS а не "можно printf например всякие юзать..."(Я начинающий!!!)
Уровень таков лампочки зажигать только научился!!! 01.gif


Если научились лампочки зажигать из НИОС, значит, как минимум должны были столкнуться с добавлением в SOPS Buildere параллельного порта.
А еще узнали бы что никаких скриптов для этого добавления не нужно, а делается добавление тыканием на пункты меню и указанием параметров добавляемого блока в программе.
Ну, и как минимум, простейшая программа должна быть написана.
Иначе лампочки не зажглись бы.

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


А вообще, в качестве совета, если и Си и НИОС пока не знаете, научитесь сначала программированию на Си, хотя бы основам.
Для этого можно использовать, например, старый добрый Turbo C 2.0, его легко можно найти в интернете.

Потом, уже ориентируясь в программировании переходите к НИОС.

Если же нужно просто получить готовое решение, не стоит маскировать его под желание разобраться, а четко сказать, что тема соответствует разделу "Предлагаю работу" и озвучить, сколько готовы заплатить за успешную сдачу зачета/экзамена/курсовой и т.д. где требуется показать программу.
Kuzmi4
2 Mik174 - возможно человек поставил счётчик с логикой - и вуаля - можно зажигать и гасить лампочки - тоже подходит под
Цитата
лампочки зажигать только научился!
.

Хотя действительно как то неясно - то ли автор хочет разобраться, но тогда за день уже можно было чтото посмотерть и начать формулировать поточней вопросы, то ли нет....
Men
Господа я прошел эту тему с параллелиными портами и мне надо разобратся как работать с RS.
SOPC вроде немного уже знаю.
Kuzmi4
2 Men - хммм..
Та а что непонятного?

пЫсЫ
Если вы
Цитата
прошли эту тему с параллелиными портами

То тогда при чём тут скрипты ????
Men
Цитата(Kuzmi4 @ Jul 3 2008, 13:01) *
2 Men - хммм..
Та а что непонятного?

пЫсЫ
Если вы

То тогда при чём тут скрипты ????

Ну спасибо ОГРОМНОЕ ЗА НЕОЦЕНИМУЮ ПОМОЩЬ!!!
Kuzmi4
2 Men - та пожалуста.
Я так и не врубился, если честно, что вы именно хотели..

Такого не бывает, чтоб человек разобрался как в SoPC добавлять PIO и писать что либо в IDE? по сгенерённому в билдЁре процюку, но вообсче не понимал как добавить и заюзать RS232 например..
Men
Если непонятно посмотрите в начале еще разок.


Делал по альтеровским примерам
608
Цитата(Men @ Jul 3 2008, 11:53) *
Господа я прошел эту тему с параллелиными портами и мне надо разобратся как работать с RS.
SOPC вроде немного уже знаю.

1. По RS прочтите в n2cpu_nii51010.pdf.
2. Настройки скорости и по протоколу - при вводе в SOPC, и больше ничего не надо.
3. Начните с выдачи байта из Ниоса, для этого достаточно выполнить команду:
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x55);
4. Когда примете в свой комп байт 0x55, то потом, можно поговорить и дальше...
Men
Цитата(608 @ Jul 3 2008, 15:31) *
1. По RS прочтите в n2cpu_nii51010.pdf.
2. Настройки скорости и по протоколу - при вводе в SOPC, и больше ничего не надо.
3. Начните с выдачи байта из Ниоса, для этого достаточно выполнить команду:
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x55);
4. Когда примете в свой комп байт 0x55, то потом, можно поговорить и дальше...

из какого документа вы взяли эту комонду
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x55);
608
Цитата(Men @ Jul 3 2008, 15:20) *
из какого документа вы взяли эту команду
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x55);

Для передачи через UART загружают в регистр TXDATA код, и выдача начинается автоматически. А это команда загрузки в данный регистр, а точнее макрос, предлагаемый в системном файле, который подключается через #include "system.h". В этом файле Вы и найдете данный макрос.
Идеология Ниоса и его С/С++ замысловата, но разобраться можно (если отступать некуда).
Kuzmi4
Хм.. На сколько я знаю в "system.h" находятся определения адресов приоритеты прерываний, ну и такое всякое..

А вот если вы взглянёте на "alt_sys_init.c " - там вы найдёте прибл такое содержание:
Код
/*
* device headers
*
*/

#include "altera_avalon_uart.h"

/*
* Allocate the device storage
*
*/

ALTERA_AVALON_UART_INSTANCE( UART, uart );

/*
* Initialise the devices
*
*/

void alt_sys_init( void )
{
    ALTERA_AVALON_UART_INIT( UART, uart );
}

инстансом мы создаём структуру типа UART и обзываем её uart, а в ините - мы инициализируем наше чЮдо - там прописано как раз регистрация прерывания про которое я говорил выше ну и другие всякие там настройки..

А на счёт
Цитата
IOWR_ALTERA_AVALON_UART_TXDATA

посичите в паках альтеры, где у вас есть "altera_avalon_uart.h" - где то в айпи валятся должен - там как раз вы и найдёте все интересные файлики smile.gif
vadimuzzz
макрос IOWR_ALTERA_AVALON_UART_TXDATA определен в "altera_avalon_uart_regs.h"
"altera_avalon_uart.h" - это для HAL, удобно если с printf/scanf работать.
"altera_avalon_uart_regs.h" - для работы с регистрами напрямую.
608
Цитата(vadimuzzz @ Jul 4 2008, 03:03) *
макрос IOWR_ALTERA_AVALON_UART_TXDATA определен в "altera_avalon_uart_regs.h"
"altera_avalon_uart.h" - это для HAL, удобно если с printf/scanf работать.
"altera_avalon_uart_regs.h" - для работы с регистрами напрямую.


Для Men
Все правильно, я поторопился по поводу IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x55);
Подключайте к своей программе

#include "system.h"
#include "altera_avalon_uart_regs.h"


в первом значение константы UART_BASE, что сгененрировано от SOPC, во втором макросы. Еще к ним добавить #include "alt_types.h"

Теперь, если без прерываний, то нужно периодически, например через 1 мс, выполнять функцию приема и выдачи, в соответствии с заданными в начале топика условиями:
void rs232 ()
{
alt_u16 word;
alt_u8 byte;
word=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
if (word & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
{byte=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
byte++;
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, byte);
};
}

Некоторые подобное делают без макросов, но можно и с ними. Удачи.
Men
Ну можем же когда захотим!!!
Огромное спасибо буду пробовать! yeah.gif

Ну вот начинаю генерить и вот что получается
Errors:

- /cygdrive/d/altera/72sp2/nios2eds/components/altera_hal/HAL/inc/sys/alt_errno.h Unable to reach errno (at 0x00001024) from the global pointer (at 0x0000aad4) because the offset (-39600) is out of the allowed range, -32678 to 32767.

- /cygdrive/d/altera/72sp2/nios2eds/components/altera_hal/HAL/src/alt_main.c undefined reference to `main'

- /cygdrive/d/altera/72sp2/qdesigns/UART_nios/RS232/RS232_syslib/Debug/libRS232_syslib.a(alt_main.o) In function `alt_main':

- /cygdrive/d/altera/72sp2/qdesigns/UART_nios/RS232/RS232_syslib/Debug/libRS232_syslib.a(altera_avalon_uart_read.o) In function `alt_get_errno':

- ld: region onchip_mem is full (RS232.elf section .rwdata). Region needs to be 2860 bytes larger.
- ld: region onchip_mem is full (RS232.elf section .text). Region needs to be 9336 bytes larger.
- ld: section .bss [00001020 -> 00001233] overlaps section .exceptions [00001020 -> 000011c7]
- ld: section .rodata [00001020 -> 0000105b] overlaps section .exceptions [00001020 -> 000011c7]
- ld: section .rwdata [0000105c -> 00002b2b] overlaps section .exceptions [00001020 -> 000011c7]

Наверное это какие то настройки компилятора!?
Kuzmi4
2 Men - просто вы стали ставить более точные вопросы..
Касательно
ld - так у вас там onchip_mem переполнен - он же так и пишет
Цитата
onchip_mem is full

Попробуйте с рам засунуть внешний.
А на счёт
Цитата
alt_main.c

вы похоже заюзали урезанный вариант мейна..

В обсчем приведите исходник - так проще будет..
Men
Цитата(Kuzmi4 @ Jul 4 2008, 11:59) *
2 Men - просто вы стали ставить более точные вопросы..
Касательно
ld - так у вас там onchip_mem переполнен - он же так и пишет

Попробуйте с рам засунуть внешний.
А на счёт

вы похоже заюзали урезанный вариант мейна..

В обсчем приведите исходник - так проще будет..

ИСХОДНИК выще взят у 608-го
onmem 4Кb
до этого пользовался обучающим пакетом от Альтеры
в нем все влазило а в IDE нет это касается даже элементарных скриптов типа

#include "system.h"
#define SW (volatile char *) 0x0003000
#define LED (char *) 0x0003010
void main()
{ while (1)
*LED = *SW;
}
ВОТ ТО ЧТО У МЕНЯ РЕАЛЬНО ПОЛУЧИЛОСЬ(скомпилировано с помощью Altera Debug Client)
Kuzmi4
2 Men -
И всё таки строка
Код
In function `alt_main':

На талкивает меня на мысль что не такой как у 608 smile.gif

Меняйте на обычное
Цитата
int main (void)
{
...
}

и памяти под программу выделите больше - вам решать как wink.gif
vadimuzzz
че-то много памяти сожрал, поди stdlib или stdio подключен?
собери новый проект File/New/New Nios II Application на основе Hello_led,
там все по минимуму. потом добавть свой код с UART.
ну еще в настройках System Library поставить крыжики Lightweight device driver API,
Small C library, Reduced device drivers. stderr,stdin,stdout в null.
System library имеет смысл собрать с
конфигурацией Release (секция Build в настройка System library).
Men
так выглядит мой скрипт

#include "system.h"
#include "altera_avalon_uart_regs.h"
#include "alt_types.h"

int main(void) //rs232 ()
{
alt_u16 word;
alt_u8 byte;
word=IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
if (word & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
{byte=IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
byte++;
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, byte);
};
}

и всеравно непонятно почму там компилится а здесь нет
vadimuzzz
должно компилиться. собери hello_led, убедись, что компилится и работет.
потом воткни свой код.
и это.. короче то,что ты привел-не скрипт,а исходник. не путай народ.
http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%...%B7%D1%8B%D0%BA
Men
Цитата(Kuzmi4 @ Jul 4 2008, 12:30) *
2 Men -
И всё таки строка
Код
In function `alt_main':

На талкивает меня на мысль что не такой как у 608 smile.gif

Меняйте на обычное

и памяти под программу выделите больше - вам решать как wink.gif

ну да вот и откомп-------сь

При заливке:

Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Pausing target processor: not responding.
Resetting and trying again: FAILED
Leaving target processor paused
Kuzmi4
2 Men - там эта.. у меня такие же глюки бывали - помогала перезагрузка и заново собирание ситемы - как то решил найти в чём прикол - вроде бы заливает не совсем то что надо wacko.gif , но почему не знаю. Работаю с девкитом на 2-м циклоне , 1-й (мной собраный) с байтбластером не глючит, что наталкивает на размышления...

Попробуйте пересобрать заново процюк, перезалит его в плиску и пересобрать,скомпилить и перезалить примерчик - мне помогало.
Men
Цитата(Kuzmi4 @ Jul 4 2008, 14:30) *
2 Men - там эта.. у меня такие же глюки бывали - помогала перезагрузка и заново собирание ситемы - как то решил найти в чём прикол - вроде бы заливает не совсем то что надо wacko.gif , но почему не знаю. Работаю с девкитом на 2-м циклоне , 1-й (мной собраный) с байтбластером не глючит, что наталкивает на размышления...

Попробуйте пересобрать заново процюк, перезалит его в плиску и пересобрать,скомпилить и перезалить примерчик - мне помогало.

Непомогает
Stewart Little
Цитата(Men @ Jul 4 2008, 16:28) *
Непомогает

Имеется ли JTAG Debug модуль у Вашего процессора? Загрузка кода происходит по JTAGу. И для этого FPGA уже должно быть сконфигурировано Вашим проектом, содержащим NiosII (с JTAGом).
Если JTAG'а у Вашего процессора нет, то для такой короткой программки можно сделать вот что.
Расположите память программ (сегмент .text) в Оn-Chip RAM. Убедитесь, что после компиляции в NiosII IDE в папке с квартусовским проектом появился файл onchip_memory.hex. Если он там есть, то перекомпилируйте проект в квартусе. При этом компилятор подхватит этот файл, и у Вас создастся sof, который будет содержать блок памяти уже инициированный Вашим исполняемым кодом. Заливайте этот sof в FPGA и проверяйте, чего оно там делает.

Ну и еще, мое личное имхо по теме.
Изучать что-либо "от Адама", задавая вопросы на форуме - это моветон. Ничего, кроме раздражения такой подход у большинства участников не вызывает smile.gif
Вся необходимая литература по NiosII и иже с ним (как по аппаратной, так и по софтверной части)имеется там : http://www.altera.com/literature/lit-nio2.jsp
и там : http://www.altera.com/literature/lit-sop.jsp
Изучайте!
А что будет непонятно, уточняйте здесь smile.gif
Kuzmi4
2 Stewart Little - золотые слова....
smile.gif
Postoroniy_V
Цитата(Men @ Jul 4 2008, 21:28) *
Непомогает

2 Moderator
предлагаю банить за такие ответы-уточнения-вопросы
ридонли на пару дней для прочтения документации biggrin.gif
LeonY
Цитата(Postoroniy_V @ Jul 7 2008, 07:08) *
2 Moderator
предлагаю банить за такие ответы-уточнения-вопросы
ридонли на пару дней для прочтения документации biggrin.gif

Полность согласен, но банить надо не только за подобные "ответы-уточнения-вопросы", но и за открытие подобных тем. Это в чистом виде борзость задавать безграмотные вопросы, не удосужившись хоть мельком посмотреть форум. Сколько раз говорилось, что RS232, RS422, RS485 и им подобные никакого отношения ни к одному из процессоров не имет - это спецификации физического протокола (уровни, фронты и тд и тп), а здесь еще и С приплетен, и SOPC Builder .... Чего челу надо - фиг поймешь
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.