summaryrefslogtreecommitdiff
path: root/radio/radio.h
blob: 010db431ffb4e4fa0918346f18ada6621798c0df (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#ifndef LAKS_RADIO_RADIO_H
#define LAKS_RADIO_RADIO_H

class RADIO_NRF_t {
	private:
		struct tasks_t {
			volatile uint32_t TXEN;
			volatile uint32_t RXEN;
			volatile uint32_t START;
			volatile uint32_t STOP;
			volatile uint32_t DISABLE;
			volatile uint32_t RSSISTART;
			volatile uint32_t RSSISTOP;
			volatile uint32_t BCSTART;
			volatile uint32_t BCSTOP;
			volatile uint32_t EDSTART;
			volatile uint32_t EDSTOP;
			volatile uint32_t CCASTART;
			volatile uint32_t CCASTOP;
		};
		
		struct events_t {
			volatile uint32_t READY;
			volatile uint32_t ADDRESS;
			volatile uint32_t PAYLOAD;
			volatile uint32_t END;
			volatile uint32_t DISABLED;
			volatile uint32_t DEVMATCH;
			volatile uint32_t DEVMISS;
			volatile uint32_t RSSIEND;
			uint32_t _reserved[2];
			volatile uint32_t BCMATCH;
			uint32_t _reserved_1;
			volatile uint32_t CRCOK;
			volatile uint32_t CRCERROR;
			volatile uint32_t FRAMESTART;
			volatile uint32_t EDEND;
			volatile uint32_t EDSTOPPED;
			volatile uint32_t CCAIDLE;
			volatile uint32_t CCABUSY;
			volatile uint32_t CCASTOPPED;
			volatile uint32_t RATEBOOST;
			volatile uint32_t TXREADY;
			volatile uint32_t RXREADY;
			volatile uint32_t MHRMATCH;
			uint32_t _reserved_2[3];
			volatile uint32_t PHYEND;
		};
		
		struct reg_t {
			volatile uint32_t SHORTS;
			uint32_t _reserved[63];
			volatile uint32_t INTEN;
			volatile uint32_t INTENSET;
			volatile uint32_t INTENCLR;
			uint32_t _reserved_1[61];
			volatile uint32_t CRCSTATUS;
			uint32_t _reserved_2;
			volatile uint32_t RXMATCH;
			volatile uint32_t RXCRC;
			volatile uint32_t DAI;
			volatile uint32_t PDUSTAT;
			uint32_t _reserved_3[59];
			volatile uint32_t PACKETPTR;
			volatile uint32_t FREQUENCY;
			volatile uint32_t TXPOWER;
			volatile uint32_t MODE;
			volatile uint32_t PCNF0;
			volatile uint32_t PCNF1;
			volatile uint32_t BASE[2];
			volatile uint32_t PREFIX[2];
			volatile uint32_t TXADDRESS;
			volatile uint32_t RXADDRESSES;
			volatile uint32_t CRCCNF;
			volatile uint32_t CRCPOLY;
			volatile uint32_t CRCINIT;
			uint32_t _reserved_4;
			volatile uint32_t TIFS;
			volatile uint32_t RSSISAMPLE;
			uint32_t _reserved_5;
			volatile uint32_t STATE;
			volatile uint32_t DATAWHITEIV;
			uint32_t _reserved_6[2];
			volatile uint32_t BCC;
			uint32_t _reserved_7[39];
			volatile uint32_t DAB[8];
			volatile uint32_t DAP[8];
			volatile uint32_t DACNF;
			volatile uint32_t MHRMATCHCONF;
			volatile uint32_t MHRMATCHMAS;
			uint32_t _reserved_8;
			volatile uint32_t MODECNF0;
			uint32_t _reserved_9[3];
			volatile uint32_t SFD;
			volatile uint32_t EDCNT;
			volatile uint32_t EDSAMPLE;
			volatile uint32_t CCACTRL;
			uint32_t _reserved_10[611];
			volatile uint32_t POWER;
		};
	
	public:
		tasks_t& tasks;
		events_t& events;
		reg_t& reg;
		
		RADIO_NRF_t(uint32_t reg_addr) :
			tasks(*(tasks_t*)(reg_addr + 0x0)),
			events(*(events_t*)(reg_addr + 0x100)),
			reg(*(reg_t*)(reg_addr + 0x200)) {}
};

static RADIO_NRF_t RADIO(0x40001000);

#endif