blob: 3ea82b8d176f4b1afd18d5e0636c776ab394d8d8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include "stm32.h"
#include "rcc.h"
#include "interrupt.h"
#include "thread.h"
#include "time.h"
#include "pin.h"
#include "usb.h"
static Pin& led_green = PD12;
static Pin& led_yellow = PD13;
static Pin& led_red = PD14;
static Pin& led_blue = PD15;
int main() {
// Initialize system timer.
STK.LOAD = 168000000 / 8 / 1000; // 1000 Hz.
STK.CTRL = 0x03;
RCC.enable(RCC.GPIOA);
RCC.enable(RCC.GPIOB);
RCC.enable(RCC.GPIOD);
led_green.set_mode(Pin::Output);
led_yellow.set_mode(Pin::Output);
led_red.set_mode(Pin::Output);
led_blue.set_mode(Pin::Output);
RCC.enable(RCC.OTGFS);
// USB configuration
OTG_FS.reg.GUSBCFG = (1 << 30) | (0xf << 10) | (1 << 9) | (1 << 8);
// FDMOD TRDT HNPCAP SRPCAP
// interrupt mask
OTG_FS.reg.GINTMSK = (1 << 13) | (1 << 12) | (1 << 11) | (1 << 10) | (1 << 3) | (1 << 2) | (1 << 1);
// ENUMDNEM USBRST USBSUSPM ESUSPM SOFM OTGINT MMISM
// device configuration
OTG_FS.dev_reg.DCFG = (1 << 2) | 3;
// NZLSOHSK DSPD
// core configuration
OTG_FS.reg.GCCFG = (1 << 19);
// 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();
Time::sleep(100);
led_blue.off();
}
}
|