|
|
  |
NIOS II, RS232 |
|
|
|
Jul 3 2008, 11:31
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(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, то потом, можно поговорить и дальше...
|
|
|
|
|
Jul 3 2008, 12:20
|

Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 6-10-06
Из: Санкт-Петербург
Пользователь №: 21 039

|
Цитата(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);
|
|
|
|
|
Jul 3 2008, 12:32
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(Men @ Jul 3 2008, 15:20)  из какого документа вы взяли эту команду IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE, 0x55); Для передачи через UART загружают в регистр TXDATA код, и выдача начинается автоматически. А это команда загрузки в данный регистр, а точнее макрос, предлагаемый в системном файле, который подключается через #include "system.h". В этом файле Вы и найдете данный макрос. Идеология Ниоса и его С/С++ замысловата, но разобраться можно (если отступать некуда).
|
|
|
|
|
Jul 3 2008, 12:55
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
Хм.. На сколько я знаю в "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" - где то в айпи валятся должен - там как раз вы и найдёте все интересные файлики
|
|
|
|
|
Jul 4 2008, 05:34
|
Участник

Группа: Участник
Сообщений: 70
Регистрация: 8-05-07
Пользователь №: 27 604

|
Цитата(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); }; } Некоторые подобное делают без макросов, но можно и с ними. Удачи.
Сообщение отредактировал 608 - Jul 4 2008, 05:42
|
|
|
|
|
Jul 4 2008, 07:01
|

Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 6-10-06
Из: Санкт-Петербург
Пользователь №: 21 039

|
Ну можем же когда захотим!!! Огромное спасибо буду пробовать!  Ну вот начинаю генерить и вот что получается 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] Наверное это какие то настройки компилятора!?
|
|
|
|
|
Jul 4 2008, 07:59
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Men - просто вы стали ставить более точные вопросы.. Касательно ld - так у вас там onchip_mem переполнен - он же так и пишет Цитата onchip_mem is full Попробуйте с рам засунуть внешний. А на счёт Цитата alt_main.c вы похоже заюзали урезанный вариант мейна.. В обсчем приведите исходник - так проще будет..
|
|
|
|
|
Jul 4 2008, 08:26
|

Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 6-10-06
Из: Санкт-Петербург
Пользователь №: 21 039

|
Цитата(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)
|
|
|
|
|
Jul 4 2008, 08:30
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Men - И всё таки строка Код In function `alt_main': На талкивает меня на мысль что не такой как у 608 Меняйте на обычное Цитата int main (void) { ... } и памяти под программу выделите больше - вам решать как
|
|
|
|
|
Jul 4 2008, 10:09
|

Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 6-10-06
Из: Санкт-Петербург
Пользователь №: 21 039

|
Цитата(Kuzmi4 @ Jul 4 2008, 12:30)  2 Men - И всё таки строка Код In function `alt_main': На талкивает меня на мысль что не такой как у 608 Меняйте на обычное и памяти под программу выделите больше - вам решать как  ну да вот и откомп-------сь При заливке: Using cable "USB-Blaster [USB-0]", device 1, instance 0x00 Pausing target processor: not responding. Resetting and trying again: FAILED Leaving target processor paused
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|