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

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


Знающий
****

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



Если не путаю, то вроде кто-то из опытных писал на форуме, что приходится переписывать putchar и ряд других функций, так как имеющийся printf - сильно медленный.
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 17 2008, 14:25
Сообщение #32


Гуру
******

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



Цитата
Если не путаю, то вроде кто-то из опытных писал на форуме, что приходится переписывать putchar и ряд других функций, так как имеющийся printf - сильно медленный.

переписывать не надо - там есть быстрые аналоги этой функции(alt_printf и пр). Стандартный printf на всех платформах медленный, т.к. там заложен заведомо большой функционал smile.gif
Вся основа для программирования в sdk nios уже сделана - надо только подобрать из всего что имеется то, что вам нужно.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 17 2008, 15:06
Сообщение #33


Участник
*

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



Цитата(vetal @ Feb 17 2008, 17:25) *
переписывать не надо - там есть быстрые аналоги этой функции(alt_printf и пр). Стандартный printf на всех платформах медленный, т.к. там заложен заведомо большой функционал smile.gif
Вся основа для программирования в sdk nios уже сделана - надо только подобрать из всего что имеется то, что вам нужно.


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

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


Гуру
******

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



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

С alt_putchar, alt_printf и rediced device drivers это легко реализуется.И ничего писать не надо smile.gif
Как я уже и говорил - все уже есть, надо только найти и использовать!
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 17 2008, 15:52
Сообщение #35


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

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



Цитата
переписывать не надо - там есть быстрые аналоги этой функции(alt_printf и пр). Стандартный printf на всех платформах медленный, т.к. там заложен заведомо большой функционал

Изначально начал делать программу на основе small версии программы без этих всех принтов. В прошлых программах записав IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, 0x06); все передавалось без проблем и тут подумал что так будет. Но записав IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, 0xb74003); получил на выходе число 03. Так как пока еще не умею общаться с отладчиком, то решил использовать alt_putstr, printf не помогло. Это все проделывал со своим процессором. С подачи Vasily_A обратно перешел на демо процессор, все равно болячки остались. И вывод с использованием putchar тоже не помог. Тут torik подсказал поменять тип данных с int перешел на float. У Кернигана написано, что float - 32битное число, десять (плюс минус) 38 степени. Тоже не вышло. Даже, если использовать printf для вывода состояния status регистра, всегда получаю число 96. Это 1100000, т.е биты trdy и tmt установлены в 1. Это значит, что txdata регистр пуст и готов для передачи нового знака, так же сдвиговой регистр все что нужно передал, а не находится в процесе передачи. Т.е исходное состояние установлено. Ну и в чем дело у меня? Нашел на форуме альтеры сообщение "Need help for my RS232 in NIOS II"
Hey,

This is a function thats send one byte to the UART

void UART1_T(unsigned char ch)
{
while((IORD_ALTERA_AVALON_UART_STATUS(UART1_BASE) & 0x040) != 0x040){ ;}
IOWR_ALTERA_AVALON_UART_TXDATA(UART1_BASE,ch);
}

You only have to change UART1_BASE address to your UART address that you can find back in your system.h file

Good luck
Regards
Karel
Он честно написал, что это код для передачи одного байта. И этот код у меня работает и передает 0x03 вместо 0xb74003, т.е так же как и мой код.

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

С alt_putchar, alt_printf и rediced device drivers это легко реализуется.И ничего писать не надо
Как я уже и говорил - все уже есть, надо только найти и использовать!""

Так прога изначально использует on-chip memory, без внешней памяти. Все запихивается туда куда нужно :-) Передача хромает только.

Сообщение отредактировал prog_sun - Feb 17 2008, 16:09
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 17 2008, 16:14
Сообщение #36


Гуру
******

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



Цитата
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, 0xb74003)

Попробуйте найти 2 отличия между char и int, тогда поймете почему у вас передается 0x03.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 17 2008, 16:16
Сообщение #37


Участник
*

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



ком-порт работает с 8-ми битными посылками, и передать 32 бита сам не может.

просто для иллюстрации (вариант не оптимальный)

int i; //my var 32bit
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, (i & 0x000000FF));
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, ((i>>8) & 0x000000FF));
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, ((i>>16) & 0x000000FF));
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, ((i>>24) & 0x000000FF));

передаст 32 бита побайтно...
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 17 2008, 16:33
Сообщение #38


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

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



Цитата
Попробуйте найти 2 отличия между char и int, тогда поймете почему у вас передается 0x03.

Уважаемый Vetal ставил и char в самом начале :-) передается 03. char 8 битная, а int -16 битная.

Цитата(Vasily_A @ Feb 17 2008, 19:16) *
ком-порт работает с 8-ми битными посылками, и передать 32 бита сам не может.

просто для иллюстрации (вариант не оптимальный)

int i; //my var 32bit
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, (i & 0x000000FF));
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, ((i>>8) & 0x000000FF));
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, ((i>>16) & 0x000000FF));
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, ((i>>24) & 0x000000FF));

передаст 32 бита побайтно...


Это ясно что com порт работает с 8 битами достаточно посмотреть на регистр txdata что в Uart core.pdf
Весь вопрос в том как передать число. А код не понял, поймет ли ниос что i -длина разрядности числа?
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 17 2008, 17:00
Сообщение #39


Участник
*

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



Цитата(prog_sun @ Feb 17 2008, 19:33) *
Уважаемый Vetal ставил и char в самом начале :-) передается 03. char 8 битная, а int -16 битная.
Это ясно что com порт работает с 8 битами достаточно посмотреть на регистр txdata что в Uart core.pdf
Весь вопрос в том как передать число. А код не понял, поймет ли ниос что i -длина разрядности числа?


int - в общем случае, не 16бит. конкретно для ниос2 в нашей реализации - 32бит.

i это просто перменная типа "int"

мы о азыке "С" говорим? разве возможны разночтения для строки
int i; //my var 32bit
в "С"? единственно, что "//" это символ комментария, но я посчитал это очевидным

что можно не понять? берем, например 0х12345678, сдвигаем (например) на 16 бит - получаем 0х00001234, отгрызаем 8бит (& 0x000000FF) получаем 0х34
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 17 2008, 17:03
Сообщение #40


Гуру
******

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



Цитата
Уважаемый Vetal ставил и char в самом начале :-) передается 03. char 8 битная, а int -16 битная.

int 32 Бита для nios2. Cейчас практически везде принято брать int равным 4м байтам, хотя иногда встречается что int равен разрядности процессора.

из файла nios2.h :
Код
/**********************
* Layout of Source Language Data Types
**********************/
#define INT_TYPE_SIZE 32
#define SHORT_TYPE_SIZE 16
#define LONG_TYPE_SIZE 32
#define LONG_LONG_TYPE_SIZE 64
#define FLOAT_TYPE_SIZE 32
#define DOUBLE_TYPE_SIZE 64
#define LONG_DOUBLE_TYPE_SIZE DOUBLE_TYPE_SIZE


Цитата
А код не понял, поймет ли ниос что i -длина разрядности числа

nios сделает ровно то, что вы ему скажете. в примере последовательно передаются 4 байта 32разрядного числа. В какой последовательности их передавать - решает программист.
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 17 2008, 17:17
Сообщение #41


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

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



error: parse error before "__builtin_stwio" выдает такую ошибку на IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, (i & 0x000000FF));

Each Load and Store instruction has a version intended for accessing locations in I/O device interfaces. These instructions are:
• ldwio (LoadWord I/O)
• ldbio (Load Byte I/O)
• ldbuio (Load Byte Unsigned I/O)
• ldhio (Load Halfword I/O)
• ldhuio (Load Halfword Unsigned I/O)
stwio (StoreWord I/O)• stbio (Store Byte I/O)
• sthio (Store Halfword I/O)

"например, тип INT соответствует 16-битовому числу со знаком,
т.е. числу, лежащему между -32768 и +32767. Число типа FLOAT — это 32-битовое
число, имеющее около семи значащих цифр и лежащее в диапазоне от 10е-38 до
10е+38. В главе 2 приводится список размеров для других машин." - это цитата из Кернигана

Цитата
#define INT_TYPE_SIZE 32

спасибо, но то что int 32 разрядный не решает моей проблемы, поверьте и int и все что угодно ставил :-)
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 17 2008, 17:30
Сообщение #42


Гуру
******

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



Цитата
error: parse error before "__builtin_stwio" выдает такую ошибку на

Ошибка до указанной строки, видимо точку с запятой забыли где-то.
Go to the top of the page
 
+Quote Post
Vasily_A
сообщение Feb 17 2008, 19:00
Сообщение #43


Участник
*

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



вот это выводит в джитаг-варт "Hello from Nios II! (jtag UART)", а в rs232 4-ре символа "4321" (их хекс-коды 0х34 0х33 0х32 0х31)

проверил только что smile.gif
=================================================================
#include <stdio.h>
#include "system.h"
#include "altera_avalon_uart_regs.h"

void UART0_TX(unsigned char ch)
{
while((IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE) & 0x40) != 0x40);
IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE,ch);
}

int main()
{
printf("Hello from Nios II! (jtag UART) \n");
int i=0x31323334;
UART0_TX(i & 0xFF);
UART0_TX((i>>8) & 0xFF);
UART0_TX((i>>16) & 0xFF);
UART0_TX((i>>24) & 0xFF);
return 0;
}
=================================================================

P.S. задолбал меня квартус и ниос сложностью копирования\модификации проектов...
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Feb 18 2008, 06:25
Сообщение #44


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Vasily_A @ Feb 18 2008, 04:00) *
.....

P.S. задолбал меня квартус и ниос сложностью копирования\модификации проектов...

Да нет никаких сложностей как раз smile.gif
сложность только в 3-х вещах Лень читать доку, лень искать в доке ключевые слова и фразы, лень просто гуглить biggrin.gif
тут на форуме такое часто бывает...болезнь...имхо


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
prog_sun
сообщение Feb 18 2008, 15:48
Сообщение #45


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

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



Vasily_A,
Спасибо за код, все работает.
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 - 14:24
Рейтинг@Mail.ru


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