Написал небольшое приложение, которое выводит значение кнопки 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);
}
}
#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);
}
}
Заранее спасибо!