Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI & NIOS
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
verali
Доброе утро! Разбираюсь с NIOS, делаю управление сигнальным процессором ПЛИС по интерфейсу SPI.
До настоящего момента ни с МК, ни с процессорами не сталкивался.
Начал разбираться с примерами, но никак не могу найти файл с описанием макросов.
Допустим для записи числа в регистр PIO существует макрос, о существовании которого узнал из примеров:
Код
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led);

В каком файле искать доступные для конкретного ядра макросы и их описание?
PS: Сразу же скачал описание периферии(ug_embedded_ip.pdf), макросов и их описание там не обнаружил
x66
Цитата(verali @ Feb 3 2015, 11:09) *
Доброе утро! Разбираюсь с NIOS, делаю управление сигнальным процессором ПЛИС по интерфейсу SPI.
До настоящего момента ни с МК, ни с процессорами не сталкивался.
Начал разбираться с примерами, но никак не могу найти файл с описанием макросов.
Допустим для записи числа в регистр PIO существует макрос, о существовании которого узнал из примеров:
Код
IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led);

В каком файле искать доступные для конкретного ядра макросы и их описание?
PS: Сразу же скачал описание периферии(ug_embedded_ip.pdf), макросов и их описание там не обнаружил


Подобный вопрос был в другой теме http://electronix.ru/forum/index.php?showtopic=125533
verali
Цитата(x66 @ Feb 3 2015, 09:13) *
Подобный вопрос был в другой теме http://electronix.ru/forum/index.php?showtopic=125533

Спасибо, тему я эту смотрел, но ответа на свой вопрос не нашел.
Допустим я хочу просмотреть макрос IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led).
1) PIO_0_BASE - я нахожу в system.h
2) IOWR_ALTERA_AVALON_PIO_DATA является макросом (могу ошибаться в терминологии) IOWR(BASE, REGNUM, DATA) - нахожу в io.h
3) IOWR(BASE, REGNUM, DATA) является макросом __builtin_stwio (__IO_CALC_ADDRESS_NATIVE ((BASE), (REGNUM)), (DATA))
А вот что делает функция __builtin_stwio я найти не могу.
Можно конечно додумать что макрос IOWR значит WRite data в BASE, но не уж то нет другого способа для понимания, что же этот макрос делает?
Kuzmi4
2 verali
NIOS2 Instruction Set Reference:
Цитата
stw / stwio : store word to memory or I/O peripheral
Operation: Mem32[rA + V (IMM16)] <- rB
Assembler Syntax: stw rB, byte_offset(rA) / stwio rB, byte_offset(rA)
Example: stw r6, 100(r5)
verali
Цитата(Kuzmi4 @ Feb 3 2015, 11:21) *

Спасибо
LAS9891
Цитата(Kuzmi4 @ Feb 3 2015, 13:21) *


Не обновите ссылку?
Stewart Little
Цитата(LAS9891 @ Feb 20 2017, 15:34) *
Не обновите ссылку?

Ну Вы и ленивец... sad.gif
Гугл в помощь :
https://www.altera.com/en_US/pdfs/literatur...pu_nii51017.pdf
LAS9891
Цитата(Stewart Little @ Feb 20 2017, 16:33) *
Ну Вы и ленивец... sad.gif

А есть какой нибудь документ с описанием макросов вида:
IOADDR_ALTERA_AVALON_PIO_DATA(base)
IORD_ALTERA_AVALON_PIO_DATA(base)
IOWR_ALTERA_AVALON_PIO_DATA(base, data)

Вообщем тех макросов которые объявлены в документе altera_avalon_pio_regs.h. Хотелось бы документ, в котором хотя бы на английском было написано, что делает макрос IOADDR_ALTERA_AVALON_PIO_DATA(base) (например) и пример использования. Чтобы не выяснять назначение каждого из них как это делает автор темы. Есть такой?

Вот что есть в документе My First Nios II Software Tutorial:
When you include the altera_avalon_pio_regs.h file, several useful functions that
manipulate the PIO core registers are available to your program. In particular, the
function IOWR_ALTERA_AVALON_PIO_DATA(base, data) can write to the PIO data
register, turning the LED on and off.
- вот такое описание есть где нибудь про остальные функции?
doom13
Цитата(LAS9891 @ Feb 21 2017, 08:33) *
А есть какой нибудь документ с описанием макросов вида:

1. Открываете доку на необходимое ядро, находите описание регистров (рисунок из доки на PIO core);
2. Смотрите файл *_regs.h (altera_avalon_pio_regs.h)
CODE

#ifndef __ALTERA_AVALON_PIO_REGS_H__
#define __ALTERA_AVALON_PIO_REGS_H__

#include <io.h>

#define IOADDR_ALTERA_AVALON_PIO_DATA(base) __IO_CALC_ADDRESS_NATIVE(base, 0)
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)

#define IOADDR_ALTERA_AVALON_PIO_DIRECTION(base) __IO_CALC_ADDRESS_NATIVE(base, 1)
#define IORD_ALTERA_AVALON_PIO_DIRECTION(base) IORD(base, 1)
#define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data) IOWR(base, 1, data)

#define IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base) __IO_CALC_ADDRESS_NATIVE(base, 2)
#define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base) IORD(base, 2)
#define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data) IOWR(base, 2, data)

#define IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base) __IO_CALC_ADDRESS_NATIVE(base, 3)
#define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base) IORD(base, 3)
#define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data) IOWR(base, 3, data)


#define IOADDR_ALTERA_AVALON_PIO_SET_BIT(base) __IO_CALC_ADDRESS_NATIVE(base, 4)
#define IORD_ALTERA_AVALON_PIO_SET_BITS(base) IORD(base, 4)
#define IOWR_ALTERA_AVALON_PIO_SET_BITS(base, data) IOWR(base, 4, data)

#define IOADDR_ALTERA_AVALON_PIO_CLEAR_BITS(base) __IO_CALC_ADDRESS_NATIVE(base, 5)
#define IORD_ALTERA_AVALON_PIO_CLEAR_BITS(base) IORD(base, 5)
#define IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(base, data) IOWR(base, 5, data)



/* Defintions for direction-register operation with bi-directional PIOs */
#define ALTERA_AVALON_PIO_DIRECTION_INPUT 0
#define ALTERA_AVALON_PIO_DIRECTION_OUTPUT 1

#endif /* __ALTERA_AVALON_PIO_REGS_H__ */


3. Всё становится понятным
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.