diff options
author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2013-09-07 16:57:19 +0200 |
---|---|---|
committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2013-09-07 16:57:19 +0200 |
commit | 40c46f70a87d6020a212e866c1568e4bc2f7f223 (patch) | |
tree | b5e483fc0dc59832170df8543484f6963012ca83 | |
parent | 2942ea4465feab44ff89d57680614f47eb3c314b (diff) |
Updated GPIO code. Use PinArray for buttons and leds.
m--------- | laks | 0 | ||||
-rw-r--r-- | main.cpp | 69 |
2 files changed, 30 insertions, 39 deletions
diff --git a/laks b/laks -Subproject 7b584fbfb8cd9451ecb798c5f27c56b1216b9ca +Subproject 7d2486346aa40160c5d03b217f58fac3875b64b @@ -1,5 +1,5 @@ #include <rcc/rcc.h> -#include <gpio/pin.h> +#include <gpio/gpio.h> #include <timer/timer.h> #include <os/time.h> #include <usb/usb.h> @@ -153,9 +153,19 @@ auto conf_desc = configuration_desc(1, 1, 0, 0xc0, 0, desc_t dev_desc_p = {sizeof(dev_desc), (void*)&dev_desc}; desc_t conf_desc_p = {sizeof(conf_desc), (void*)&conf_desc}; -Pin& usb_dm = PA11; -Pin& usb_dp = PA12; -Pin& usb_pu = PA15; +static Pin usb_dm = GPIOA[11]; +static Pin usb_dp = GPIOA[12]; +static Pin usb_pu = GPIOA[15]; + +static PinArray button_inputs = GPIOB.array(0, 10); +static PinArray button_leds = GPIOC.array(0, 10); + +static Pin qe1a = GPIOA[0]; +static Pin qe1b = GPIOA[1]; +static Pin qe2a = GPIOA[6]; +static Pin qe2b = GPIOA[7]; + +static Pin led1 = GPIOB[14]; USB_f1 usb(USB, dev_desc_p, conf_desc_p); @@ -219,7 +229,7 @@ class USB_HID : public USB_class_driver { uint32_t buf; usb.read(ep, &buf, len); last_led_time = Time::time(); - GPIOC.reg.ODR = buf & 0x7ff; + button_leds.set(buf); } } }; @@ -253,32 +263,13 @@ int main() { usb_pu.set_mode(Pin::Output); usb_pu.on(); - PB0.set_pull(Pin::PullUp); - PB1.set_pull(Pin::PullUp); - PB2.set_pull(Pin::PullUp); - PB3.set_pull(Pin::PullUp); - PB4.set_pull(Pin::PullUp); - PB5.set_pull(Pin::PullUp); - PB6.set_pull(Pin::PullUp); - PB7.set_pull(Pin::PullUp); - PB8.set_pull(Pin::PullUp); - PB9.set_pull(Pin::PullUp); - PB10.set_pull(Pin::PullUp); + button_inputs.set_mode(Pin::Input); + button_inputs.set_pull(Pin::PullUp); - PC0.set_mode(Pin::Output); - PC1.set_mode(Pin::Output); - PC2.set_mode(Pin::Output); - PC3.set_mode(Pin::Output); - PC4.set_mode(Pin::Output); - PC5.set_mode(Pin::Output); - PC6.set_mode(Pin::Output); - PC7.set_mode(Pin::Output); - PC8.set_mode(Pin::Output); - PC9.set_mode(Pin::Output); - PC10.set_mode(Pin::Output); + button_leds.set_mode(Pin::Output); - PB14.set_mode(Pin::Output); - PB14.on(); + led1.set_mode(Pin::Output); + led1.on(); RCC.enable(RCC.TIM2); RCC.enable(RCC.TIM3); @@ -293,23 +284,23 @@ int main() { TIM3.SMCR = 3; TIM3.CR1 = 1; - PA0.set_af(1); - PA1.set_af(1); - PA0.set_mode(Pin::AF); - PA1.set_mode(Pin::AF); + qe1a.set_af(1); + qe1b.set_af(1); + qe1a.set_mode(Pin::AF); + qe1b.set_mode(Pin::AF); - PA6.set_af(2); - PA7.set_af(2); - PA6.set_mode(Pin::AF); - PA7.set_mode(Pin::AF); + qe2a.set_af(2); + qe2b.set_af(2); + qe2a.set_mode(Pin::AF); + qe2b.set_mode(Pin::AF); while(1) { usb.process(); - uint16_t buttons = (~GPIOB.reg.IDR & 0x7ff); + uint16_t buttons = button_inputs.get() ^ 0x7ff; if(Time::time() - last_led_time > 1000) { - GPIOC.reg.ODR = buttons; + button_leds.set(buttons); } if(usb.ep_ready(1)) { |