From 6b01facc48e150781beeb1d42ad6436dc5e95af2 Mon Sep 17 00:00:00 2001 From: liangkangnan Date: Sun, 14 Jun 2020 10:45:55 +0800 Subject: [PATCH] example: gpio: add input usage Signed-off-by: liangkangnan --- tests/example/gpio/README.md | 2 +- tests/example/gpio/main.c | 11 +++++++++-- tests/example/include/gpio.h | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/example/gpio/README.md b/tests/example/gpio/README.md index 6f6e00a..3337f1b 100644 --- a/tests/example/gpio/README.md +++ b/tests/example/gpio/README.md @@ -1 +1 @@ -通过一个GPIO来控制板上的LED以1Hz频率闪烁。 \ No newline at end of file +两个GPIO,一个输入,一个输出。输出那个GPIO的输出电平等于输入那个GPIO的输入电平。 \ No newline at end of file diff --git a/tests/example/gpio/main.c b/tests/example/gpio/main.c index 97c8b22..2d4226b 100644 --- a/tests/example/gpio/main.c +++ b/tests/example/gpio/main.c @@ -6,8 +6,15 @@ int main() { + GPIO_REG(GPIO_CTRL) |= 0x1; // gpio0输出模式 + GPIO_REG(GPIO_CTRL) |= 0x1 << 3; // gpio1输入模式 + while (1) { - GPIO_REG(GPIO_DATA) ^= 0x1; - busy_wait(500 * 1000); // delay 500ms + // 如果GPIO1输入高 + if (GPIO_REG(GPIO_DATA) & 0x2) + GPIO_REG(GPIO_DATA) |= 0x1; // GPIO0输出高 + // 如果GPIO1输入低 + else + GPIO_REG(GPIO_DATA) &= ~0x1; // GPIO0输出低 } } diff --git a/tests/example/include/gpio.h b/tests/example/include/gpio.h index dbad864..f7f5829 100644 --- a/tests/example/include/gpio.h +++ b/tests/example/include/gpio.h @@ -2,6 +2,7 @@ #define _GPIO_H_ #define GPIO_BASE (0x40000000) +#define GPIO_CTRL (GPIO_BASE + (0x00)) #define GPIO_DATA (GPIO_BASE + (0x04)) #define GPIO_REG(addr) (*((volatile uint32_t *)addr))