summaryrefslogtreecommitdiff
path: root/chip/nrf51/registers.h
blob: daf014df728217850ea2ba03b5c3b54909b0212f (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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
/* Copyright 2013 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Register map for STM32 processor
 */

#ifndef __CROS_EC_REGISTERS_H
#define __CROS_EC_REGISTERS_H

#include "common.h"

/*
 *  Peripheral IDs
 *
 *  nRF51 has very good design that the peripheral IDs is actually the IRQ#.
 *  Thus, the following numbers are used in DECLARE_IRQ(), task_enable_irq()
 *  and task_disable_irq().
 */
#define NRF51_PERID_POWER   0
#define NRF51_PERID_CLOCK   0
#define NRF51_PERID_RADIO   1
#define NRF51_PERID_USART   2
#define NRF51_PERID_SPI0    3
#define NRF51_PERID_TWI0    3
#define NRF51_PERID_SPI1    4
#define NRF51_PERID_TWI1    4
#define NRF51_PERID_SPIS    4
#define NRF51_PERID_GPIOTE  6
#define NRF51_PERID_ADC     7
#define NRF51_PERID_TIMER0  8
#define NRF51_PERID_TIMER1  9
#define NRF51_PERID_TIMER2  10
#define NRF51_PERID_RTC     11
#define NRF51_PERID_TEMP    12
#define NRF51_PERID_RNG     13
#define NRF51_PERID_ECB     14
#define NRF51_PERID_CCM     15
#define NRF51_PERID_AAR     16
#define NRF51_PERID_WDT     17
#define NRF51_PERID_QDEC    18
#define NRF51_PERID_LPCOMP  19
#define NRF51_PERID_NVMC    30
#define NRF51_PERID_PPI     31

/*
 * The nRF51 allows any pin to be mapped to any function.  This
 * doesn't fit well with the notion of the alternate function table.
 * Implement an alternate function table.  See ./gpio.c.
 */

	/* UART */
#define NRF51_UART_ALT_FUNC_RTS        0
#define NRF51_UART_ALT_FUNC_TXD        1
#define NRF51_UART_ALT_FUNC_CTS        2
#define NRF51_UART_ALT_FUNC_RXD        3
	/* SPI1 (SPI Master) */
#define NRF51_SPI0_ALT_FUNC_SCK        4
#define NRF51_SPI0_ALT_FUNC_MOSI       5
#define NRF51_SPI0_ALT_FUNC_MISO       6
	/* TWI0 (I2C) */
#define NRF51_TWI0_ALT_FUNC_SCL        7
#define NRF51_TWI0_ALT_FUNC_SDA        8
	/* SPI1 (SPI Master) */
#define NRF51_SPI1_ALT_FUNC_SCK        9
#define NRF51_SPI1_ALT_FUNC_MOSI       10
#define NRF51_SPI1_ALT_FUNC_MISO       11
	/* TWI1 (I2C) */
#define NRF51_TWI1_ALT_FUNC_SCL        12
#define NRF51_TWI1_ALT_FUNC_SDA        13
	/* SPIS1 (SPI SLAVE) */
#define NRF51_SPIS1_ALT_FUNC_SCK       14
#define NRF51_SPIS1_ALT_FUNC_MISO      15
#define NRF51_SPIS1_ALT_FUNC_MOSI      16
#define NRF51_SPIS1_ALT_FUNC_CSN       17
	/* QDEC (ROTARY DECODER) */
#define NRF51_QDEC_ALT_FUNC_LED        18
#define NRF51_QDEC_ALT_FUNC_A          19
#define NRF51_QDEC_ALT_FUNC_B          20
	/* LPCOMP (Low Power Comparator) */
#define NRF51_LPCOMP_ALT_FUNC          21
#define NRF51_MAX_ALT_FUNCS            22

/*
 * Configuration Registers
 */

/*
 * FICR
 */
#define NRF51_FICR_BASE                0x10000000
#define NRF51_FICR_CODEPAGESIZE        REG32(NRF51_FICR_BASE + 0x010)
#define NRF51_FICR_CLENR0              REG32(NRF51_FICR_BASE + 0x014)
#define NRF51_FICR_PPFC                REG32(NRF51_FICR_BASE + 0x028)
#define NRF51_FICR_NUMRAMBLOCK         REG32(NRF51_FICR_BASE + 0x02C)
#define NRF51_FICR_SIZERAMBLOCK(n)     REG32(NRF51_FICR_BASE + 0x034 + ((n)*4))
#define NRF51_FICR_CONFIGID            REG32(NRF51_FICR_BASE + 0x05C)
#define NRF51_FICR_DEVICEID(n)         REG32(NRF51_FICR_BASE + 0x060 + ((n)*4))
#define NRF51_FICR_ER(n)               REG32(NRF51_FICR_BASE + 0x080 + ((n)*4))
#define NRF51_FICR_IR(n)               REG32(NRF51_FICR_BASE + 0x090 + ((n)*4))
#define NRF51_FICR_DEVICEADDRTYPE      REG32(NRF51_FICR_BASE + 0x0A0)
#define NRF51_FICR_DEVICEADDR(n)       REG32(NRF51_FICR_BASE + 0x0A4 + ((n)*4))
#define NRF51_FICR_OVERRIDEEN          REG32(NRF51_FICR_BASE + 0x0AC)
#define NRF51_FICR_BLE_1MBIT(n)        REG32(NRF51_FICR_BASE + 0x0EC + ((n)*4))

/* DEVICEADDRTYPE */
#define NRF51_FICR_DEVICEADDRTYPE_RANDOM      1

/* OVERRIDEEN */
#define NRF51_FICR_OVERRIDEEN_NRF_BIT_N       1
#define NRF51_FICR_OVERRIDEEN_BLE_BIT_N       8

/*
 * UICR
 */
#define NRF51_UICR_BASE                0x10001000
#define NRF51_UICR_CLENR0              REG32(NRF51_UICR_BASE + 0x000)
#define NRF51_UICR_RBPCONF             REG32(NRF51_UICR_BASE + 0x004)
#define NRF51_UICR_XTALFREQ            REG32(NRF51_UICR_BASE + 0x008)
#define NRF51_UICR_FWID                REG32(NRF51_UICR_BASE + 0x010)
#define NRF51_UICR_FWID_CUSTOMER(n)    REG32(NRF51_UICR_BASE + 0x080 + ((n)*4))

#define NRF51_UICR_XTALFREQ_16MHZ      0xFF
#define NRF51_UICR_XTALFREQ_32MHZ      0x00

/*
 * Devices
 */

/*
 *  Power
 */
#define NRF51_POWER_BASE    0x40000000
/* Tasks */
#define NRF51_POWER_CONSTLAT  REG32(NRF51_POWER_BASE + 0x078)
#define NRF51_POWER_LOWPWR    REG32(NRF51_POWER_BASE + 0x07C)
/* Events */
#define NRF51_POWER_POFWARN   REG32(NRF51_POWER_BASE + 0x108)
/* Registers */
#define NRF51_POWER_INTENSET  REG32(NRF51_POWER_BASE + 0x304)
#define NRF51_POWER_INTENCLR  REG32(NRF51_POWER_BASE + 0x308)
#define NRF51_POWER_RESETREAS REG32(NRF51_POWER_BASE + 0x400)
#define NRF51_POWER_SYSTEMOFF REG32(NRF51_POWER_BASE + 0x500)
#define NRF51_POWER_POFCON    REG32(NRF51_POWER_BASE + 0x510)
#define NRF51_POWER_GPREGRET  REG32(NRF51_POWER_BASE + 0x51C)
#define NRF51_POWER_RAMON     REG32(NRF51_POWER_BASE + 0x524)
#define NRF51_POWER_RESET     REG32(NRF51_POWER_BASE + 0x544)
#define NRF51_POWER_DCDCEN    REG32(NRF51_POWER_BASE + 0x578)

#define NRF51_POWER_RESETREAS_RESETPIN          0x00001
#define NRF51_POWER_RESETREAS_DOG               0x00002
#define NRF51_POWER_RESETREAS_SREQ              0x00004
#define NRF51_POWER_RESETREAS_LOCKUP            0x00008
#define NRF51_POWER_RESETREAS_OFF               0x10000
#define NRF51_POWER_RESETREAS_LPCOMP            0x20000
#define NRF51_POWER_RESETREAS_DIF               0x40000


/*
 *  Clock
 */
#define NRF51_CLOCK_BASE    0x40000000
/* Tasks */
#define NRF51_CLOCK_HFCLKSTART REG32(NRF51_CLOCK_BASE + 0x000)
#define NRF51_CLOCK_HFCLKSTOP  REG32(NRF51_CLOCK_BASE + 0x004)
#define NRF51_CLOCK_LFCLKSTART REG32(NRF51_CLOCK_BASE + 0x008)
#define NRF51_CLOCK_LFCLKSTOP  REG32(NRF51_CLOCK_BASE + 0x00C)
#define NRF51_CLOCK_CAL     REG32(NRF51_CLOCK_BASE + 0x010)
#define NRF51_CLOCK_CTSTART REG32(NRF51_CLOCK_BASE + 0x014)
#define NRF51_CLOCK_CTSTOP  REG32(NRF51_CLOCK_BASE + 0x018)
/* Events */
#define NRF51_CLOCK_HFCLKSTARTED REG32(NRF51_CLOCK_BASE + 0x100)
#define NRF51_CLOCK_LFCLKSTARTED REG32(NRF51_CLOCK_BASE + 0x104)
#define NRF51_CLOCK_DONE    REG32(NRF51_CLOCK_BASE + 0x10C)
#define NRF51_CLOCK_CCTO    REG32(NRF51_CLOCK_BASE + 0x110)
/* Registers */
#define NRF51_CLOCK_INTENSET  REG32(NRF51_CLOCK_BASE + 0x304)
#define NRF51_CLOCK_INTENCLR  REG32(NRF51_CLOCK_BASE + 0x308)
#define NRF51_CLOCK_HFCLKSTAT REG32(NRF51_CLOCK_BASE + 0x40C)
#define NRF51_CLOCK_LFCLKSTAT REG32(NRF51_CLOCK_BASE + 0x418)
#define NRF51_CLOCK_LFCLKSRC  REG32(NRF51_CLOCK_BASE + 0x518)
#define NRF51_CLOCK_CTIV      REG32(NRF51_CLOCK_BASE + 0x538)
#define NRF51_CLOCK_XTALFREQ  REG32(NRF51_CLOCK_BASE + 0x550)

/*
 *  Radio
 */
#define NRF51_RADIO_BASE    0x40001000
/* Tasks */
#define NRF51_RADIO_TXEN      REG32(NRF51_RADIO_BASE + 0x000)
#define NRF51_RADIO_RXEN      REG32(NRF51_RADIO_BASE + 0x004)
#define NRF51_RADIO_START     REG32(NRF51_RADIO_BASE + 0x008)
#define NRF51_RADIO_STOP      REG32(NRF51_RADIO_BASE + 0x00C)
#define NRF51_RADIO_DISABLE   REG32(NRF51_RADIO_BASE + 0x010)
#define NRF51_RADIO_RSSISTART REG32(NRF51_RADIO_BASE + 0x014)
#define NRF51_RADIO_RSSISTOP  REG32(NRF51_RADIO_BASE + 0x018)
#define NRF51_RADIO_BCSTART   REG32(NRF51_RADIO_BASE + 0x01C)
#define NRF51_RADIO_BCSTOP    REG32(NRF51_RADIO_BASE + 0x020)
/* Events */
#define NRF51_RADIO_READY     REG32(NRF51_RADIO_BASE + 0x100)
#define NRF51_RADIO_ADDRESS   REG32(NRF51_RADIO_BASE + 0x104)
#define NRF51_RADIO_PAYLOAD   REG32(NRF51_RADIO_BASE + 0x108)
#define NRF51_RADIO_END       REG32(NRF51_RADIO_BASE + 0x10C)
#define NRF51_RADIO_DISABLED  REG32(NRF51_RADIO_BASE + 0x110)
#define NRF51_RADIO_DEVMATCH  REG32(NRF51_RADIO_BASE + 0x114)
#define NRF51_RADIO_DEVMISS   REG32(NRF51_RADIO_BASE + 0x118)
#define NRF51_RADIO_RSSIEND   REG32(NRF51_RADIO_BASE + 0x11C)
#define NRF51_RADIO_BCMATCH   REG32(NRF51_RADIO_BASE + 0x128)
/* Registers */
#define NRF51_RADIO_SHORTS      REG32(NRF51_RADIO_BASE + 0x200)
#define NRF51_RADIO_INTENSET    REG32(NRF51_RADIO_BASE + 0x304)
#define NRF51_RADIO_INTENCLR    REG32(NRF51_RADIO_BASE + 0x308)
#define NRF51_RADIO_CRCSTATUS   REG32(NRF51_RADIO_BASE + 0x400)
#define NRF51_RADIO_RXMATCH     REG32(NRF51_RADIO_BASE + 0x408)
#define NRF51_RADIO_RXCRC       REG32(NRF51_RADIO_BASE + 0x40C)
#define NRF51_RADIO_DAI         REG32(NRF51_RADIO_BASE + 0x410)
#define NRF51_RADIO_PACKETPTR   REG32(NRF51_RADIO_BASE + 0x504)
#define NRF51_RADIO_FREQUENCY   REG32(NRF51_RADIO_BASE + 0x508)
#define NRF51_RADIO_TXPOWER     REG32(NRF51_RADIO_BASE + 0x50C)
#define NRF51_RADIO_MODE        REG32(NRF51_RADIO_BASE + 0x510)
#define NRF51_RADIO_PCNF0       REG32(NRF51_RADIO_BASE + 0x514)
#define NRF51_RADIO_PCNF1       REG32(NRF51_RADIO_BASE + 0x518)
#define NRF51_RADIO_BASE0       REG32(NRF51_RADIO_BASE + 0x51C)
#define NRF51_RADIO_BASE1       REG32(NRF51_RADIO_BASE + 0x520)
#define NRF51_RADIO_PREFIX0     REG32(NRF51_RADIO_BASE + 0x524)
#define NRF51_RADIO_PREFIX1     REG32(NRF51_RADIO_BASE + 0x528)
#define NRF51_RADIO_TXADDRESS   REG32(NRF51_RADIO_BASE + 0x52C)
#define NRF51_RADIO_RXADDRESSES REG32(NRF51_RADIO_BASE + 0x530)
#define NRF51_RADIO_CRCCNF      REG32(NRF51_RADIO_BASE + 0x534)
#define NRF51_RADIO_CRCPOLY     REG32(NRF51_RADIO_BASE + 0x538)
#define NRF51_RADIO_CRCINIT     REG32(NRF51_RADIO_BASE + 0x53C)
#define NRF51_RADIO_TEST        REG32(NRF51_RADIO_BASE + 0x540)
#define NRF51_RADIO_TIFS        REG32(NRF51_RADIO_BASE + 0x544)
#define NRF51_RADIO_RSSISAMPLE  REG32(NRF51_RADIO_BASE + 0x548)
/* NRF51_RADIO_STATE (0x550) is Broken (PAN 2.4) */
#define NRF51_RADIO_DATAWHITEIV REG32(NRF51_RADIO_BASE + 0x554)
#define NRF51_RADIO_BCC         REG32(NRF51_RADIO_BASE + 0x560)
#define NRF51_RADIO_DAB(n)      REG32(NRF51_RADIO_BASE + 0x600 + ((n) * 4))
#define NRF51_RADIO_DAP(n)      REG32(NRF51_RADIO_BASE + 0x620 + ((n) * 4))
#define NRF51_RADIO_DACNF       REG32(NRF51_RADIO_BASE + 0x640)
#define NRF51_RADIO_OVERRIDE(n) REG32(NRF51_RADIO_BASE + 0x724 + ((n) * 4))
#define NRF51_RADIO_POWER       REG32(NRF51_RADIO_BASE + 0xFFC)

/* Shorts */
#define NRF51_RADIO_SHORTS_READY_START                0x001
#define NRF51_RADIO_SHORTS_END_DISABLE                0x002
#define NRF51_RADIO_SHORTS_DISABLED_TXEN              0x004
#define NRF51_RADIO_SHORTS_DISABLED_RXEN              0x008
#define NRF51_RADIO_SHORTS_ADDRESS_RSSISTART          0x010
/* NRF51_RADIO_SHORTS_END_START (0x20) is Broken (PAN 2.4) */
#define NRF51_RADIO_SHORTS_ADDRESS_BCSTART            0x040
#define NRF51_RADIO_SHORTS_DISABLED_RSSISTOP          0x100

/* For RADIO.INTEN bits */
#define NRF51_RADIO_READY_BIT                         0
#define NRF51_RADIO_ADDRESS_BIT                       1
#define NRF51_RADIO_PAYLOAD_BIT                       2
#define NRF51_RADIO_END_BIT                           3
#define NRF51_RADIO_DISABLED_BIT                      4
#define NRF51_RADIO_DEVMATCH_BIT                      5
#define NRF51_RADIO_DEVMISS_BIT                       6
#define NRF51_RADIO_RSSIEND_BIT                       7
#define NRF51_RADIO_BCMATCH_BIT                       10

/* CRC Status */
#define NRF51_RADIO_CRCSTATUS_OK                      0x1

/* Frequency (in MHz) */
#define NRF51_RADIO_FREQUENCY_VAL(x)                  ((x) - 2400)

/* TX Power */
#define NRF51_RADIO_TXPOWER_POS_4_DBM                 0x04
#define NRF51_RADIO_TXPOWER_0_DBM                     0x00
#define NRF51_RADIO_TXPOWER_NEG_8_DBM                 0xFC
#define NRF51_RADIO_TXPOWER_NEG_12_DBM                0xF8
#define NRF51_RADIO_TXPOWER_NEG_16_DBM                0xF4
#define NRF51_RADIO_TXPOWER_NEG_20_DBM                0xEC
#define NRF51_RADIO_TXPOWER_NEG_30_DBM                0xD8

/* TX Mode */
#define NRF51_RADIO_MODE_BLE_1MBIT                    0x03

/*
 * PCNF0 and PCNF1 Packet Configuration
 *
 * The radio unpacks the packet for you according to these settings.
 *
 * The on-air format is:
 *
 * |_Preamble_|___Base___|_Prefix_|___S0____|_Length_,_S1_|__Payload__|___|
 * 0           <ba_bytes> <1 byte><s0_bytes>   <1 byte>    <max_bytes> <extra>
 *
 * The in-memory format is
 *
 * uint8_t s0[s0_bytes];
 * uint8_t length;
 * uint8_t s1;
 * uint8_t payload[max_bytes];
 *
 * lf_bits is how many bits to store in length
 * s1_bits is how many bits to store in s1
 *
 * If any one of these lengths are set to zero, the field is omitted in memory.
 */

#define NRF51_RADIO_PCNF0_LFLEN_SHIFT                 0
#define NRF51_RADIO_PCNF0_S0LEN_SHIFT                 8
#define NRF51_RADIO_PCNF0_S1LEN_SHIFT                 16

#define NRF51_RADIO_PCNF0_VAL(lf_bits, s0_bytes, s1_bits) \
	((lf_bits) << NRF51_RADIO_PCNF0_LFLEN_SHIFT | \
	 (s0_bytes) << NRF51_RADIO_PCNF0_S0LEN_SHIFT | \
	 (s1_bits) << NRF51_RADIO_PCNF0_S1LEN_SHIFT)

#define NRF51_RADIO_PCNF1_MAXLEN_SHIFT                0
#define NRF51_RADIO_PCNF1_STATLEN_SHIFT               8
#define NRF51_RADIO_PCNF1_BALEN_SHIFT                 16
#define NRF51_RADIO_PCNF1_ENDIAN_BIG                  0x1000000
#define NRF51_RADIO_PCNF1_WHITEEN                     0x2000000

#define NRF51_RADIO_PCNF1_VAL(max_bytes, extra_bytes, ba_bytes, whiten) \
	((max_bytes) << NRF51_RADIO_PCNF1_MAXLEN_SHIFT | \
	 (extra_bytes) << NRF51_RADIO_PCNF1_STATLEN_SHIFT | \
	 (ba_bytes) << NRF51_RADIO_PCNF1_BALEN_SHIFT | \
	 ((whiten) ? NRF51_RADIO_PCNF1_WHITEEN : 0))

/* PREFIX0 */
#define NRF51_RADIO_PREFIX0_AP0_SHIFT                 0
#define NRF51_RADIO_PREFIX0_AP1_SHIFT                 8
#define NRF51_RADIO_PREFIX0_AP2_SHIFT                 16
#define NRF51_RADIO_PREFIX0_AP3_SHIFT                 24

/* PREFIX1 */
#define NRF51_RADIO_PREFIX1_AP4_SHIFT                 0
#define NRF51_RADIO_PREFIX1_AP5_SHIFT                 8
#define NRF51_RADIO_PREFIX1_AP6_SHIFT                 16
#define NRF51_RADIO_PREFIX1_AP7_SHIFT                 24

/* CRCCNF */
#define NRF51_RADIO_CRCCNF_SKIP_ADDR                  0x100

/* TEST */
#define NRF51_RADIO_TEST_CONST_CARRIER_EN             0x01
#define NRF51_RADIO_TEST_PLL_LOCK_EN                  0x02

/* STATE */
#define NRF51_RADIO_STATE_DISABLED                    0
#define NRF51_RADIO_STATE_RXRU                        1
#define NRF51_RADIO_STATE_RXIDLE                      2
#define NRF51_RADIO_STATE_RX                          3
#define NRF51_RADIO_STATE_RXDISABLE                   4
#define NRF51_RADIO_STATE_TXRU                        9
#define NRF51_RADIO_STATE_TXIDLE                      10
#define NRF51_RADIO_STATE_TX                          11
#define NRF51_RADIO_STATE_TXDISABLE                   12

/* DACNF */
#define NRF51_RADIO_DACNF_ENA(n)                      (1 << (n))
#define NRF51_RADIO_DACNF_MAX                         8
#define NRF51_RADIO_DACNF_TXADD(n)                    (1 << ((n)+8))
#define NRF51_RADIO_TXADD_MAX                         8

/* OVERRIDE4 */
#define NRF51_RADIO_OVERRIDE_EN                       BIT(31)


/*
 *  UART
 */
#define NRF51_UART_BASE     0x40002000
/* Tasks */
#define NRF51_UART_STARTRX  REG32(NRF51_UART_BASE + 0x000)
#define NRF51_UART_STOPRX   REG32(NRF51_UART_BASE + 0x004)
#define NRF51_UART_STARTTX  REG32(NRF51_UART_BASE + 0x008)
#define NRF51_UART_STOPTX   REG32(NRF51_UART_BASE + 0x00C)
/* Events */
#define NRF51_UART_RXDRDY   REG32(NRF51_UART_BASE + 0x108)
#define NRF51_UART_TXDRDY   REG32(NRF51_UART_BASE + 0x11C)
#define NRF51_UART_ERROR    REG32(NRF51_UART_BASE + 0x124)
#define NRF51_UART_RXTO     REG32(NRF51_UART_BASE + 0x144)
/* Registers */
#define NRF51_UART_INTENSET REG32(NRF51_UART_BASE + 0x304)
#define NRF51_UART_INTENCLR REG32(NRF51_UART_BASE + 0x308)
#define NRF51_UART_ERRORSRC REG32(NRF51_UART_BASE + 0x480)
#define NRF51_UART_ENABLE   REG32(NRF51_UART_BASE + 0x500)
#define NRF51_UART_PSELRTS  REG32(NRF51_UART_BASE + 0x508)
#define NRF51_UART_PSELTXD  REG32(NRF51_UART_BASE + 0x50C)
#define NRF51_UART_PSELCTS  REG32(NRF51_UART_BASE + 0x510)
#define NRF51_UART_PSELRXD  REG32(NRF51_UART_BASE + 0x514)
#define NRF51_UART_RXD      REG32(NRF51_UART_BASE + 0x518)
#define NRF51_UART_TXD      REG32(NRF51_UART_BASE + 0x51C)
#define NRF51_UART_BAUDRATE REG32(NRF51_UART_BASE + 0x524)
#define NRF51_UART_CONFIG   REG32(NRF51_UART_BASE + 0x56C)
/* For UART.INTEN bits */
#define NRF55_UART_RXDRDY_BIT  ((0x108 - 0x100) / 4)
#define NRF55_UART_TXDRDY_BIT  ((0x11C - 0x100) / 4)

/*
 *  TWI (I2C) Instances
 */
#define NRF51_TWI_BASE(port)     (0x40003000 + ((port == 0) ? 0 : 0x1000))
/* Tasks */
#define NRF51_TWI_STARTRX(port)   REG32(NRF51_TWI_BASE(port) + 0x000)
#define NRF51_TWI_STARTTX(port)   REG32(NRF51_TWI_BASE(port) + 0x008)
#define NRF51_TWI_STOP(port)      REG32(NRF51_TWI_BASE(port) + 0x014)
#define NRF51_TWI_SUSPEND(port)   REG32(NRF51_TWI_BASE(port) + 0x01C)
#define NRF51_TWI_RESUME(port)    REG32(NRF51_TWI_BASE(port) + 0x020)
/* Events */
#define NRF51_TWI_STOPPED(port)   REG32(NRF51_TWI_BASE(port) + 0x104)
#define NRF51_TWI_RXDRDY(port)    REG32(NRF51_TWI_BASE(port) + 0x108)
#define NRF51_TWI_TXDSENT(port)   REG32(NRF51_TWI_BASE(port) + 0x11C)
#define NRF51_TWI_ERROR(port)     REG32(NRF51_TWI_BASE(port) + 0x124)
#define NRF51_TWI_BB(port)        REG32(NRF51_TWI_BASE(port) + 0x138)
/* Registers */
/* SHORTS not implemented for TWI (See nRF51822-PAN v2.4)  */
#define NRF51_TWI_INTEN(port)     REG32(NRF51_TWI_BASE(port) + 0x300)
#define NRF51_TWI_INTENSET(port)  REG32(NRF51_TWI_BASE(port) + 0x304)
#define NRF51_TWI_INTENCLR(port)  REG32(NRF51_TWI_BASE(port) + 0x308)
#define NRF51_TWI_ERRORSRC(port)  REG32(NRF51_TWI_BASE(port) + 0x4C4)
#define NRF51_TWI_ENABLE(port)    REG32(NRF51_TWI_BASE(port) + 0x500)
#define NRF51_TWI_PSELSCL(port)   REG32(NRF51_TWI_BASE(port) + 0x508)
#define NRF51_TWI_PSELSDA(port)   REG32(NRF51_TWI_BASE(port) + 0x50C)
#define NRF51_TWI_RXD(port)       REG32(NRF51_TWI_BASE(port) + 0x518)
#define NRF51_TWI_TXD(port)       REG32(NRF51_TWI_BASE(port) + 0x51C)
#define NRF51_TWI_FREQUENCY(port) REG32(NRF51_TWI_BASE(port) + 0x524)
#define NRF51_TWI_ADDRESS(port)   REG32(NRF51_TWI_BASE(port) + 0x588)
#define NRF51_TWI_POWER(port)     REG32(NRF51_TWI_BASE(port) + 0xFFC)

#define NRF51_TWI_100KBPS         0x01980000
#define NRF51_TWI_250KBPS         0x40000000
#define NRF51_TWI_400KBPS         0x06680000

#define NRF51_TWI_ENABLE_VAL      0x5
#define NRF51_TWI_DISABLE_VAL     0x0

#define NRF51_TWI_ERRORSRC_ANACK  BIT(1) /* Address NACK */
#define NRF51_TWI_ERRORSRC_DNACK  BIT(2) /* Data NACK */

/*
 *  TWI (I2C) Instance 0
 */
#define NRF51_TWI0_BASE     0x40003000
/* Tasks */
#define NRF51_TWI0_STARTRX   REG32(NRF51_TWI0_BASE + 0x000)
#define NRF51_TWI0_STARTTX   REG32(NRF51_TWI0_BASE + 0x008)
#define NRF51_TWI0_STOP      REG32(NRF51_TWI0_BASE + 0x014)
#define NRF51_TWI0_SUSPEND   REG32(NRF51_TWI0_BASE + 0x01C)
#define NRF51_TWI0_RESUME    REG32(NRF51_TWI0_BASE + 0x020)
/* Events */
#define NRF51_TWI0_STOPPED   REG32(NRF51_TWI0_BASE + 0x104)
#define NRF51_TWI0_RXDRDY    REG32(NRF51_TWI0_BASE + 0x108)
#define NRF51_TWI0_TXDSENT   REG32(NRF51_TWI0_BASE + 0x11C)
#define NRF51_TWI0_ERROR     REG32(NRF51_TWI0_BASE + 0x124)
#define NRF51_TWI0_BB        REG32(NRF51_TWI0_BASE + 0x138)
/* Registers */
/* SHORTS not implemented for TWI (See nRF51822-PAN v2.4)  */
#define NRF51_TWI0_INTENSET  REG32(NRF51_TWI0_BASE + 0x304)
#define NRF51_TWI0_INTENCLR  REG32(NRF51_TWI0_BASE + 0x308)
#define NRF51_TWI0_ERRORSRC  REG32(NRF51_TWI0_BASE + 0x4C4)
#define NRF51_TWI0_ENABLE    REG32(NRF51_TWI0_BASE + 0x500)
#define NRF51_TWI0_PSELSCL   REG32(NRF51_TWI0_BASE + 0x508)
#define NRF51_TWI0_PSELSDA   REG32(NRF51_TWI0_BASE + 0x50C)
#define NRF51_TWI0_RXD       REG32(NRF51_TWI0_BASE + 0x518)
#define NRF51_TWI0_TXD       REG32(NRF51_TWI0_BASE + 0x51C)
#define NRF51_TWI0_FREQUENCY REG32(NRF51_TWI0_BASE + 0x524)
#define NRF51_TWI0_ADDRESS   REG32(NRF51_TWI0_BASE + 0x588)

/* For TWI0.INTEN bits */
#define NRF55_TWI0_RXDRDY_BIT  ((0x108 - 0x100) / 4)
#define NRF55_TWI0_TXDRDY_BIT  ((0x11C - 0x100) / 4)

/*
 *  TWI (I2C) Instance 1
 */
#define NRF51_TWI1_BASE     0x40004000
/* Tasks */
#define NRF51_TWI1_STARTRX   REG32(NRF51_TWI1_BASE + 0x000)
#define NRF51_TWI1_STARTTX   REG32(NRF51_TWI1_BASE + 0x008)
#define NRF51_TWI1_STOP      REG32(NRF51_TWI1_BASE + 0x014)
#define NRF51_TWI1_SUSPEND   REG32(NRF51_TWI1_BASE + 0x01C)
#define NRF51_TWI1_RESUME    REG32(NRF51_TWI1_BASE + 0x020)
/* Events */
#define NRF51_TWI1_STOPPED   REG32(NRF51_TWI1_BASE + 0x104)
#define NRF51_TWI1_RXDRDY    REG32(NRF51_TWI1_BASE + 0x108)
#define NRF51_TWI1_TXDSENT   REG32(NRF51_TWI1_BASE + 0x11C)
#define NRF51_TWI1_ERROR     REG32(NRF51_TWI1_BASE + 0x124)
#define NRF51_TWI1_BB        REG32(NRF51_TWI1_BASE + 0x138)
/* Registers */
/* SHORTS not implemented for TWI (See nRF51822-PAN v2.4)  */
#define NRF51_TWI1_INTENSET  REG32(NRF51_TWI1_BASE + 0x304)
#define NRF51_TWI1_INTENCLR  REG32(NRF51_TWI1_BASE + 0x308)
#define NRF51_TWI1_ERRORSRC  REG32(NRF51_TWI1_BASE + 0x4C4)
#define NRF51_TWI1_ENABLE    REG32(NRF51_TWI1_BASE + 0x500)
#define NRF51_TWI1_PSELSCL   REG32(NRF51_TWI1_BASE + 0x508)
#define NRF51_TWI1_PSELSDA   REG32(NRF51_TWI1_BASE + 0x50C)
#define NRF51_TWI1_RXD       REG32(NRF51_TWI1_BASE + 0x518)
#define NRF51_TWI1_TXD       REG32(NRF51_TWI1_BASE + 0x51C)
#define NRF51_TWI1_FREQUENCY REG32(NRF51_TWI1_BASE + 0x524)
#define NRF51_TWI1_ADDRESS   REG32(NRF51_TWI1_BASE + 0x588)

/* For TWI1.INTEN bits */
#define NRF55_TWI1_RXDRDY_BIT  ((0x108 - 0x100) / 4)
#define NRF55_TWI1_TXDRDY_BIT  ((0x11C - 0x100) / 4)

/*
 *  GPIOTE - GPIO Tasks and Events
 */
#define NRF51_GPIOTE_BASE   0x40006000
/* Tasks */
#define NRF51_GPIOTE_OUT(n)    REG32(NRF51_GPIOTE_BASE + ((n) * 4))
/* Events */
#define NRF51_GPIOTE_IN(n)     REG32(NRF51_GPIOTE_BASE + 0x100 + ((n) * 4))
#define NRF51_GPIOTE_PORT      REG32(NRF51_GPIOTE_BASE + 0x17C)
/* Registers */
#define NRF51_GPIOTE_INTENSET  REG32(NRF51_GPIOTE_BASE + 0x304)
#define NRF51_GPIOTE_INTENCLR  REG32(NRF51_GPIOTE_BASE + 0x308)
#define NRF51_GPIOTE_CONFIG(n) REG32(NRF51_GPIOTE_BASE + 0x510 + ((n) * 4))
#define NRF51_GPIOTE_POWER     REG32(NRF51_GPIOTE_BASE + 0xFFC)

/* Number of IN events */
#define NRF51_GPIOTE_IN_COUNT  4

/* Bits */
/* For GPIOTE.INTEN */
#define NRF51_GPIOTE_IN_BIT(n) (n)
#define NRF51_GPIOTE_PORT_BIT  31
/* For GPIOTE.CONFIG */
#define NRF51_GPIOTE_MODE_DISABLED     (0<<0)
#define NRF51_GPIOTE_MODE_EVENT        BIT(0)
#define NRF51_GPIOTE_MODE_TASK         (3<<0)
#define NRF51_GPIOTE_PSEL_POS          (8)
#define NRF51_GPIOTE_POLARITY_LOTOHI   BIT(16)
#define NRF51_GPIOTE_POLARITY_HITOLO   (2<<16)
#define NRF51_GPIOTE_POLARITY_TOGGLE   (3<<16)
#define NRF51_GPIOTE_OUTINIT_LOW       (0<<20)
#define NRF51_GPIOTE_OUTINIT_HIGH      BIT(20)

/*
 *  Timer / Counter
 */
#define NRF51_TIMER0_BASE   0x40008000
#define NRF51_TIMER_BASE(n)   (NRF51_TIMER0_BASE + (n) * 0x1000)
#define NRF51_PERID_TIMER(n)  (NRF51_PERID_TIMER0 + (n))
/* Tasks */
#define NRF51_TIMER_START(n)  REG32(NRF51_TIMER_BASE(n) + 0x000)
#define NRF51_TIMER_STOP(n)   REG32(NRF51_TIMER_BASE(n) + 0x004)
#define NRF51_TIMER_COUNT(n)  REG32(NRF51_TIMER_BASE(n) + 0x008)
#define NRF51_TIMER_CLEAR(n)  REG32(NRF51_TIMER_BASE(n) + 0x00C)
#define NRF51_TIMER_CAPTURE(n, c)  REG32(NRF51_TIMER_BASE(n) + 0x040 + 4 * (c))
/* Events */
#define NRF51_TIMER_COMPARE(n, c)  REG32(NRF51_TIMER_BASE(n) + 0x140 + 4 * (c))
/* Registers */
#define NRF51_TIMER_SHORTCUT(n)  REG32(NRF51_TIMER_BASE(n) + 0x200)
#define NRF51_TIMER_INTENSET(n)  REG32(NRF51_TIMER_BASE(n) + 0x304)
#define NRF51_TIMER_INTENCLR(n)  REG32(NRF51_TIMER_BASE(n) + 0x308)
#define NRF51_TIMER_MODE(n)      REG32(NRF51_TIMER_BASE(n) + 0x504)
#define NRF51_TIMER_BITMODE(n)   REG32(NRF51_TIMER_BASE(n) + 0x508)
#define NRF51_TIMER_PRESCALER(n) REG32(NRF51_TIMER_BASE(n) + 0x510)
#define NRF51_TIMER_CC(n, c)     REG32(NRF51_TIMER_BASE(n) + 0x540 + 4 * (c))
/* For Timer.INTEN bits */
#define NRF51_TIMER_COMPARE_BIT(n)  (((0x140 - 0x100) / 4) + (n))
/* For Timer Shortcuts */
#define NRF51_TIMER_COMPARE_CLEAR(n)  (1 << (n))
#define NRF51_TIMER_COMPARE_STOP(n)   (1 << (8 + (n)))
/* Timer Mode (NRF51_TIMER_MODE) */
#define NRF51_TIMER_MODE_TIMER   0  /* reset default */
#define NRF51_TIMER_MODE_COUNTER 1
/* Prescaler */
#define NRF51_TIMER_PRESCALER_MASK (0xf)  /* range: 0-9, reset default: 4 */
/* Bit length (NRF51_TIMER_BITMODE) */
#define NRF51_TIMER_BITMODE_16  0  /* reset default */
#define NRF51_TIMER_BITMODE_8   1
#define NRF51_TIMER_BITMODE_24  2
#define NRF51_TIMER_BITMODE_32  3


/*
 *  Random Number Generator (RNG)
 */
#define NRF51_RNG_BASE               0x4000D000
/* Tasks */
#define NRF51_RNG_START              REG32(NRF51_RNG_BASE + 0x000)
#define NRF51_RNG_STOP               REG32(NRF51_RNG_BASE + 0x004)
/* Events */
#define NRF51_RNG_VALRDY             REG32(NRF51_RNG_BASE + 0x100)
/* Registers */
#define NRF51_RNG_SHORTS             REG32(NRF51_RNG_BASE + 0x200)
#define NRF51_RNG_INTENSET           REG32(NRF51_RNG_BASE + 0x304)
#define NRF51_RNG_INTENCLR           REG32(NRF51_RNG_BASE + 0x308)
#define NRF51_RNG_CONFIG             REG32(NRF51_RNG_BASE + 0x504)
#define NRF51_RNG_VALUE              REG32(NRF51_RNG_BASE + 0x508)
/* For RNG Shortcuts */
#define NRF51_RNG_SHORTS_VALRDY_STOP BIT(0)
/* For RNG Config */
#define NRF51_RNG_DERCEN             BIT(0)


/*
 *  Watchdog Timer (WDT)
 */
#define NRF51_WDT_BASE        0x40010000
/* Tasks */
#define NRF51_WDT_START       REG32(NRF51_WDT_BASE + 0x000)
/* Events */
#define NRF51_WDT_TIMEOUT     REG32(NRF51_WDT_BASE + 0x100)
/* Registers */
#define NRF51_WDT_INTENSET    REG32(NRF51_WDT_BASE + 0x304)
#define NRF51_WDT_INTENCLR    REG32(NRF51_WDT_BASE + 0x308)
#define NRF51_WDT_RUNSTATUS   REG32(NRF51_WDT_BASE + 0x400)
#define NRF51_WDT_REQSTATUS   REG32(NRF51_WDT_BASE + 0x404)
#define NRF51_WDT_CRV         REG32(NRF51_WDT_BASE + 0x504)
#define NRF51_WDT_RREN        REG32(NRF51_WDT_BASE + 0x508)
#define NRF51_WDT_CONFIG      REG32(NRF51_WDT_BASE + 0x50C)
#define NRF51_WDT_RR(n)       REG32(NRF51_WDT_BASE + 0x600 + ((n) * 4))
#define NRF51_WDT_POWER       REG32(NRF51_WDT_BASE + 0xFFC)
/* Bitfields */
#define NRF51_WDT_RUNSTATUS_RUNNING        1
#define NRF51_WDT_REQSTATUS_BIT(n)        (1<<(n))
#define NRF51_WDT_RREN_BIT(n)             (1<<(n))
#define NRF51_WDT_CONFIG_SLEEP_PAUSE       0
#define NRF51_WDT_CONFIG_SLEEP_RUN         1
#define NRF51_WDT_CONFIG_HALT_PAUSE       (0<<4)
#define NRF51_WDT_CONFIG_HALT_RUN         BIT(4)

#define NRF51_WDT_RELOAD_VAL             0x6E524635


/*
 *  GPIO
 */
#define NRF51_GPIO_BASE     0x50000000
#define NRF51_GPIO0_BASE    (NRF51_GPIO_BASE + 0x500)
#define NRF51_GPIO0_OUT     REG32(NRF51_GPIO0_BASE + 0x004)
#define NRF51_GPIO0_OUTSET  REG32(NRF51_GPIO0_BASE + 0x008)
#define NRF51_GPIO0_OUTCLR  REG32(NRF51_GPIO0_BASE + 0x00C)
#define NRF51_GPIO0_IN      REG32(NRF51_GPIO0_BASE + 0x010)
#define NRF51_GPIO0_DIR     REG32(NRF51_GPIO0_BASE + 0x014)  /* 1 for output */
#define NRF51_GPIO0_DIRSET  REG32(NRF51_GPIO0_BASE + 0x018)
#define NRF51_GPIO0_DIRCLR  REG32(NRF51_GPIO0_BASE + 0x01C)
#define NRF51_PIN_BASE      (NRF51_GPIO_BASE + 0x700)
#define NRF51_PIN_CNF(n)    REG32(NRF51_PIN_BASE + ((n) * 4))
#define GPIO_0              NRF51_GPIO0_BASE

#define NRF51_PIN_CNF_DIR_INPUT        (0)
#define NRF51_PIN_CNF_DIR_OUTPUT       (1)
#define NRF51_PIN_CNF_INPUT_CONNECT    (0<<1)
#define NRF51_PIN_CNF_INPUT_DISCONNECT BIT(1)
#define NRF51_PIN_CNF_PULL_DISABLED    (0<<2)
#define NRF51_PIN_CNF_PULLDOWN         BIT(2)
#define NRF51_PIN_CNF_PULLUP           (3<<2)
/*
 * Logic levels 0 and 1, strengths S=Standard, H=High D=Disconnect
 * for example, S0D1 = Standard drive 0, disconnect on 1
 */
#define NRF51_PIN_CNF_DRIVE_S0S1       (0<<8)
#define NRF51_PIN_CNF_DRIVE_H0S1       BIT(8)
#define NRF51_PIN_CNF_DRIVE_S0H1       (2<<8)
#define NRF51_PIN_CNF_DRIVE_H0H1       (3<<8)
#define NRF51_PIN_CNF_DRIVE_D0S1       (4<<8)
#define NRF51_PIN_CNF_DRIVE_D0H1       (5<<8)
#define NRF51_PIN_CNF_DRIVE_S0D1       (6<<8)
#define NRF51_PIN_CNF_DRIVE_H0D1       (7<<8)

#define NRF51_PIN_CNF_SENSE_DISABLED   (0<<16)
#define NRF51_PIN_CNF_SENSE_HIGH       (2<<16)
#define NRF51_PIN_CNF_SENSE_LOW        (3<<16)

#define UNIMPLEMENTED_GPIO_BANK     GPIO_0  /* for UNIMPLEMENTED() macro */

#define NRF51_PPI_BASE                 0x4001F000
#define NRF51_PPI_CHEN                 REG32(NRF51_PPI_BASE + 0x500)
#define NRF51_PPI_CHENSET              REG32(NRF51_PPI_BASE + 0x504)
#define NRF51_PPI_CHENCLR              REG32(NRF51_PPI_BASE + 0x508)
#define NRF51_PPI_EEP(channel)         REG32(NRF51_PPI_BASE + 0x510 + channel*8)
#define NRF51_PPI_TEP(channel)         REG32(NRF51_PPI_BASE + 0x514 + channel*8)
#define NRF51_PPI_CHG(group)           REG32(NRF51_PPI_BASE + 0x800 + group*4)

#define NRF51_PPI_NUM_PROGRAMMABLE_CHANNELS        16
#define NRF51_PPI_NUM_GROUPS                       4

#define NRF51_PPI_CH_TIMER0_CC0__RADIO_TXEN        20
#define NRF51_PPI_CH_TIMER0_CC0__RADIO_RXEN        21
#define NRF51_PPI_CH_TIMER0_CC1__RADIO_DISABLE     22
#define NRF51_PPI_CH_RADIO_BCMATCH__AAR_START      23
#define NRF51_PPI_CH_RADIO_READY__CCM_KSGEN        24
#define NRF51_PPI_CH_RADIO_ADDR__CCM_CRYPT         25
#define NRF51_PPI_CH_RADIO_ADDR__TIMER0CC1         26
#define NRF51_PPI_CH_RADIO_END_TIMER0CC2           27
#define NRF51_PPI_CH_RTC0_COMPARE0__RADIO_TXEN     28
#define NRF51_PPI_CH_RTC0_COMPARE0__RADIO_RXEN     29
#define NRF51_PPI_CH_RTC0_COMPARE0__TIMER0_CLEAR   30
#define NRF51_PPI_CH_RTC0_COMPARE0__TIMER0_START   31

#define NRF51_PPI_CH_FIRST NRF51_PPI_CH_TIMER0_CC0__RADIO_TXEN
#define NRF51_PPI_CH_LAST  NRF51_PPI_CH_RTC0_COMPARE0__TIMER0_START


/* These will be defined in their respective functions if/when they are used. */
#define NRF51_SPI0_BASE       0x40003000
#define NRF51_SPI0_PSELSCK    REG32(NRF51_SPI0_BASE + 0x508)
#define NRF51_SPI0_PSELMOSI   REG32(NRF51_SPI0_BASE + 0x50C)
#define NRF51_SPI0_PSELMISO   REG32(NRF51_SPI0_BASE + 0x510)
#define NRF51_SPI1_BASE       0x40004000
#define NRF51_SPI1_PSELSCK    REG32(NRF51_SPI1_BASE + 0x508)
#define NRF51_SPI1_PSELMOSI   REG32(NRF51_SPI1_BASE + 0x50C)
#define NRF51_SPI1_PSELMISO   REG32(NRF51_SPI1_BASE + 0x510)
#define NRF51_SPIS1_BASE      0x40004000
#define NRF51_SPIS1_PSELSCK   REG32(NRF51_SPIS1_BASE + 0x508)
#define NRF51_SPIS1_PSELMISO  REG32(NRF51_SPIS1_BASE + 0x50C)
#define NRF51_SPIS1_PSELMOSI  REG32(NRF51_SPIS1_BASE + 0x510)
#define NRF51_SPIS1_PSELCSN   REG32(NRF51_SPIS1_BASE + 0x514)
#define NRF51_QDEC_BASE       0x40012000
#define NRF51_QDEC_PSELLED    REG32(NRF51_QDEC_BASE + 0x51C)
#define NRF51_QDEC_PSELA      REG32(NRF51_QDEC_BASE + 0x520)
#define NRF51_QDEC_PSELB      REG32(NRF51_QDEC_BASE + 0x524)
#define NRF51_LPCOMP_BASE     0x40013000
#define NRF51_LPCOMP_PSEL     REG32(NRF51_LPCOMP_BASE + 0x504)

#endif /* __CROS_EC_REGISTERS_H */