From 40c46f70a87d6020a212e866c1568e4bc2f7f223 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sat, 7 Sep 2013 16:57:19 +0200 Subject: Updated GPIO code. Use PinArray for buttons and leds. --- laks | 2 +- main.cpp | 69 ++++++++++++++++++++++++++++------------------------------------ 2 files changed, 31 insertions(+), 40 deletions(-) diff --git a/laks b/laks index 7b584fb..7d24863 160000 --- a/laks +++ b/laks @@ -1 +1 @@ -Subproject commit 7b584fbfb8cd9451ecb798c5f27c56b1216b9ca2 +Subproject commit 7d2486346aa40160c5d03b217f58fac3875b64b3 diff --git a/main.cpp b/main.cpp index 8a093b0..cd8a78f 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -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)) { -- cgit v1.2.3