summaryrefslogtreecommitdiff
path: root/usb/stm32_usb_def.h
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) {}
};