|
|
  |
SPI & NIOS, общие вопросы по программированию |
|
|
|
Feb 3 2015, 08:09
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 6-11-14
Пользователь №: 83 540

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

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(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
|
|
|
|
|
Feb 3 2015, 10:05
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 6-11-14
Пользователь №: 83 540

|
Цитата(x66 @ Feb 3 2015, 09:13)  Спасибо, тему я эту смотрел, но ответа на свой вопрос не нашел. Допустим я хочу просмотреть макрос 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, но не уж то нет другого способа для понимания, что же этот макрос делает?
|
|
|
|
|
Feb 21 2017, 05:33
|
Местный
  
Группа: Участник
Сообщений: 206
Регистрация: 18-06-15
Пользователь №: 87 194

|
Цитата(Stewart Little @ Feb 20 2017, 16:33)  Ну Вы и ленивец...  А есть какой нибудь документ с описанием макросов вида: 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. - вот такое описание есть где нибудь про остальные функции?
Сообщение отредактировал LAS9891 - Feb 21 2017, 05:40
|
|
|
|
|
Feb 23 2017, 11:35
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(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. Всё становится понятным
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|