summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2012-01-21 22:30:38 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2012-01-21 22:30:38 +0100
commit005e0ba51aafb6b26383fbd7df9000399c79098d (patch)
tree9b265a735276d7da262a6bd0851b2bf57776efff /main.cpp
parentd734fc168e94f0bdb42f6b28e702d5a909146cef (diff)
Added USB interrupt handler.
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp40
1 files changed, 25 insertions, 15 deletions
diff --git a/main.cpp b/main.cpp
index 3ea82b8..2898f2b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -13,6 +13,18 @@ static Pin& led_yellow = PD13;
static Pin& led_red = PD14;
static Pin& led_blue = PD15;
+static Pin& usb_dm = PA11;
+static Pin& usb_dp = PA12;
+static Pin& usb_vbus = PA9;
+
+template<>
+void interrupt<(Interrupt::IRQ)67>() {
+ led_blue.toggle();
+ led_red.toggle();
+
+ OTG_FS.reg.GINTSTS = 0xffffffff;
+}
+
int main() {
// Initialize system timer.
STK.LOAD = 168000000 / 8 / 1000; // 1000 Hz.
@@ -27,8 +39,19 @@ int main() {
led_red.set_mode(Pin::Output);
led_blue.set_mode(Pin::Output);
+ led_red.on();
+ led_blue.off();
+
+ usb_dm.set_mode(Pin::AF);
+ usb_dm.set_af(10);
+ usb_dp.set_mode(Pin::AF);
+ usb_dp.set_af(10);
+
RCC.enable(RCC.OTGFS);
-
+ Interrupt::enable((Interrupt::IRQ)67);
+
+ OTG_FS.reg.GAHBCFG = 1;
+
// USB configuration
OTG_FS.reg.GUSBCFG = (1 << 30) | (0xf << 10) | (1 << 9) | (1 << 8);
// FDMOD TRDT HNPCAP SRPCAP
@@ -46,20 +69,7 @@ int main() {
// VBUSBSEN
while(1) {
- led_green.on();
- Time::sleep(100);
- led_green.off();
-
- led_yellow.on();
- Time::sleep(100);
- led_yellow.off();
-
- led_red.on();
- Time::sleep(100);
- led_red.off();
-
- led_blue.on();
+ led_green.toggle();
Time::sleep(100);
- led_blue.off();
}
}