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

 
 
> Cyclone V baremetal hellow world
RadiatoR
сообщение Jul 23 2017, 08:38
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Всем доброго дня.
Написал небольшое приложение, которое выводит значение кнопки Key в консоль (плата de0-nano-soc).
Кнопка висит на GPIO54 (J18), что находится в группе GPIO1 со сдвигом (1 << 25). Пытаюсь прочитать ее значение с регистра ext_port_a, но она всегда в одном и том же состоянии - выключена. Такое ощущение, что не включено тактирование (аля как в STM32). Но регистр ext_port_a для GPIO0 иногда меняется. Видимо я что-то упустил? Не могу понять.
Вот код:

CODE
#include
#include "Types.h"

#define GPIO_BASE 0xFF708000
#define GPIO_0 GPIO_BASE
#define GPIO_1 GPIO_0 + 0x1000
#define GPIO_2 GPIO_1 + 0x1000

#define GPIO_EXT_PORT_A 0x50

#define GPIO_0_EXT_PORT_A GPIO_0 + GPIO_EXT_PORT_A
#define GPIO_1_EXT_PORT_A GPIO_1 + GPIO_EXT_PORT_A
#define GPIO_2_EXT_PORT_A GPIO_2 + GPIO_EXT_PORT_A

void delay(unsigned long long delay)
{
while(delay--);
}

#define PIN 25

void main()//int argc, char** argv
{
unsigned int step = 0;
//scanf("%d", &step);
while(true)
{
if((*((uint *)GPIO_0_EXT_PORT_A) & ((uint)1 << PIN)) > 0) printf("ON! gpio_0 Iteration: %d\n", step);
else printf("OFF! gpio_0 Iteration: %d\n", step);

if((*((uint *)GPIO_1_EXT_PORT_A) & ((uint)1 << PIN)) > 0) printf("ON! gpio_1 Iteration: %d\n", step);
else printf("OFF! gpio_1 Iteration: %d\n", step);

if((*((uint *)GPIO_2_EXT_PORT_A) & ((uint)1 << PIN)) > 0) printf("ON! gpio_2 Iteration: %d\n", step);
else printf("OFF! gpio_2 Iteration: %d\n", step);

printf("\n");

step++;

delay(100000000);
}
}


Заранее спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RadiatoR
сообщение Jul 23 2017, 15:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



По поводу alt_gpio_init() есть проблема - не могу понять как заголовочные мне нужно подключить для работы с периферией hps.
У меня есть папка C:\intelFPGA\16.1\embedded\ip\altera\hps\altera_hps\hwlib\include и тут много заголовочных файлов, в том числе для gpio.
При добавлении в свойствах проекта

этой директории компилятор ругается на некоторые инклюды, например Error: #5: cannot open source input file "cstdbool": No such file or directory.

Вообще эклипс странный какой-то (запускаю через EDS shell - "eclipse &") просто в проекте не подтягивает cstdbool, более того при билде проекта не билдит его.
То есть если пожмакать в исходнике без ошибок кнопками просто в коде и забилдить - он напишет:
Код
17:17:10 **** Incremental Build of configuration Debug for project Altera-Cyclone-V_RAM ****
make all
make: Nothing to be done for 'all'.

17:17:10 Build Finished (took 73ms)
и типо нормально. Хотя ругаться на рандомный текст должен.
Хм, если сделать клин и опять билд, то он в консоли пишет, что билдит, все ок, но такого быть не может...
Что за идиотизм? Помогает перезагрузка... Странно очень.

Пока что не могу понять по исходникам что и где ресетится... Долго лазить, т.к. у меня они не подтягиваются... Сейчас буду бороться с эклипсом...

По поводу Qsys - раньше с ним дела не имел. Как я понял это планировщик ножек микросхемы?
А по дефолту ноги настроены на плис?

Открыл голд реф в квартусе. Тут есть верилог файл ghrd_top (видимо описание какая нога куда идет). Запустил qsys, появилось (графическое?) отображение



схемы соединения чего-то с чем-то. Есть блоки (instance?) hps_0, там есть hps_io, полагаю это блок GPIO и его нужно физически соединить с ногами.

Есть блоки button_pio и led_pio. Между hps_io и button_pio (external_connection) было уже какое-то серое (выключенное) соединение.
Я воткнул точки по этому соединению на обоих блоках. Сразу выскочило 13 ошибок. Видимо что-то пошло не так :D
Есть какой-то референс, где эти кнопки уже подключены?

А как в итоге заливается эта настройка ног? Через прошивку ПЛИС?
Или это всего лишь наглядное отображение, а потом на основе него генерируется верилоговский файл (ghrd_top.v), который уже компилируется квартусом и шьется?
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 23 2017, 23:40
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(RadiatoR @ Jul 23 2017, 19:02) *
компилятор ругается на некоторые инклюды, например Error: #5: cannot open source input file "cstdbool": No such file or directory.

Аналогично было.
Я не стал парится, а просто положил пустой файл с именем cstdbool в папку с исходниками и проблема ушла.
Нужные исходники hwlib тоже пришлось скопировать в отдельную папку проекта, чтобы они подключились и компилировались.

По поводу эклипса и билда - использую компилятор ARM, и в настройках C/C++ Build у меня включено Generate Makefiles Automatically.
Работает чётко, все изменения в проекте отслеживаются правильно, компилируются только модифицированные файлы.

Цитата
По поводу Qsys - раньше с ним дела не имел. Как я понял это планировщик ножек микросхемы?

Это интегратор системы, в котором задаются настройки модулей и их соединения.
В том числе QSys генерирует код, на основе которого загрузчик будет инициализировать процессор, настраивать пины, SDRAM, PLL и т.д.

К примеру, пины GPIO настраиваются в свойствах HPS на вкладке Peripheral Pins.

А планировщик ножек - это PinPlanner.

Вы бы матчасть поизучали получше.
Иначе SoC вам поднимать будет непросто sm.gif

Цитата
Есть какой-то референс, где эти кнопки уже подключены?

Вот в GHRD всё, что надо, подключено, изучайте его.

Цитата
А как в итоге заливается эта настройка ног? Через прошивку ПЛИС?

Загрузчиком - bootloader называется.
Тут было несколько тем, где подробнее разжёвано.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:40
Рейтинг@Mail.ru


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