Перейти к содержанию
    

SPI & NIOS

Доброе утро! Разбираюсь с NIOS, делаю управление сигнальным процессором ПЛИС по интерфейсу SPI.

До настоящего момента ни с МК, ни с процессорами не сталкивался.

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

Допустим для записи числа в регистр PIO существует макрос, о существовании которого узнал из примеров:

IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, led);

В каком файле искать доступные для конкретного ядра макросы и их описание?

PS: Сразу же скачал описание периферии(ug_embedded_ip.pdf), макросов и их описание там не обнаружил

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброе утро! Разбираюсь с 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подобный вопрос был в другой теме 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, но не уж то нет другого способа для понимания, что же этот макрос делает?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не обновите ссылку?

Ну Вы и ленивец... :(

Гугл в помощь :

https://www.altera.com/en_US/pdfs/literatur...pu_nii51017.pdf

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну Вы и ленивец... :(

А есть какой нибудь документ с описанием макросов вида:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А есть какой нибудь документ с описанием макросов вида:

1. Открываете доку на необходимое ядро, находите описание регистров (рисунок из доки на PIO core);

2. Смотрите файл *_regs.h (altera_avalon_pio_regs.h)

#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. Всё становится понятным

post-63539-1487849714_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...