blob: 5fdd2ffb7c18ef3e0cd4760a9eb81755b629496b (
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
66
67
68
69
70
71
|
#pragma once
#include <mmio/mmio.h>
struct STM32_USB_reg_v1_t {
volatile uint32_t EPR[16];
volatile uint32_t CNTR;
volatile uint32_t ISTR;
volatile uint32_t FNR;
volatile uint32_t DADDR;
volatile uint32_t BTABLE;
struct bufd_t {
volatile uint32_t ADDR_TX;
volatile uint32_t COUNT_TX;
volatile uint32_t ADDR_RX;
volatile uint32_t COUNT_RX;
};
using buf_t = volatile uint32_t;
};
struct STM32_USB_reg_v2_t {
volatile uint32_t EPR[16];
volatile uint32_t CNTR;
volatile uint32_t ISTR;
volatile uint32_t FNR;
volatile uint32_t DADDR;
volatile uint32_t BTABLE;
volatile uint32_t LPMCSR;
volatile uint32_t BCDR;
struct bufd_t {
volatile uint16_t ADDR_TX;
volatile uint16_t COUNT_TX;
volatile uint16_t ADDR_RX;
volatile uint16_t COUNT_RX;
};
using buf_t = volatile uint16_t;
};
struct STM32_USB_reg_v3_t {
volatile uint32_t EPR[16];
volatile uint32_t CNTR;
volatile uint32_t ISTR;
volatile uint32_t FNR;
volatile uint32_t DADDR;
uint32_t _reserved;
volatile uint32_t LPMCSR;
volatile uint32_t BCDR;
struct bufd_t {
volatile uint32_t TXRXBD;
volatile uint32_t RXTXBD;
};
using buf_t = volatile uint32_t;
};
template <typename T>
class STM32_USB_t : public mmio_ptr<T> {
public:
mmio_ptr<typename T::bufd_t> bufd;
mmio_ptr<typename T::buf_t> buf;
constexpr STM32_USB_t(uint32_t reg_addr, uint32_t buf_addr) :
mmio_ptr<T>(reg_addr),
bufd(buf_addr),
buf(buf_addr) {}
};
|