WXK
2024-12-16 78e84fcf264afd731cd66c807d9fcb690fe12126
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
/**
 *******************************************************************************
 * @FileName  : bb_def.h
 * @Author    : GaoQiu
 * @CreateDate: 2020-09-10
 * @Copyright : Copyright(C) GaoQiu
 *              All Rights Reserved.
 *
 *******************************************************************************
 *
 * The information contained herein is confidential and proprietary property of
 * GaoQiu and is available under the terms of Commercial License Agreement
 * between GaoQiu and the licensee in separate contract or the terms described
 * here-in.
 *
 * This heading MUST NOT be removed from this file.
 *
 * Licensees are granted free, non-transferable use of the information in this
 * file under Mutual Non-Disclosure Agreement. NO WARRENTY of ANY KIND is provided.
 *
 *******************************************************************************
 */
#ifndef BB_DEF_H_
#define BB_DEF_H_
 
#include "utils/defs_types.h"
 
/* BB Register Base Address. */
#define BB_BASE              0x50020000
#define RCC_BASE             0x40040000
 
 
#define BB_SEQ_RAM_BASE      (BB_BASE + 0x1000)
#define BB_LIST_RAM_BASE     (BB_BASE + 0x8000)  /* 512B */
//#define BB_TX_RX_BUF_BASE    (BB_BASE + 0x8200)  /* 7.5K  + 8K for BB TX/RX Buffer */
#define BB_TX_RX_BUF_BASE    (BB_BASE + 0x8100)  /* 7.5K  + 8K for BB TX/RX Buffer */
 
#define BB_REG32(addr)       (*((volatile uint32_t *)(BB_BASE + addr)))
#define RCC_REG32(addr)      (*((volatile uint32_t *)(RCC_BASE + addr)))
 
 
#define BB_REG_WRITE(addr, mask, pos, value) \
{\
    uint32_t v = BB_REG32(addr);\
    v &= ~(mask);\
    v |= ((value) << (pos)) & (mask);\
    BB_REG32(addr) = v;\
}
 
 
/* RCC Register */
#define RCC_RST0_ADDR         0x04
 
 
/* LL Register Address define. */
#define BB_VERSION_ADDR       0x0000
#define BB_CTRL_ADDR          0x0008
enum{
    BB_CTRL_BUS_CLK_EN_Pos    = 10,
    #define BB_CTRL_BUS_CLK_EN_Mask     (1<<BB_CTRL_BUS_CLK_EN_Pos)
 
    BB_CTRL_PM_PWR_STATE_Pos  = 4,
    #define BB_CTRL_PM_PWR_STATE_Mask   (0x3Ful<< BB_CTRL_PM_PWR_STATE_Pos)
 
    BB_CTRL_MEM_SOFT_RST_Pos  = 3,
    #define BB_CTRL_MEM_SOFT_RST_Mask   (0x1ul << BB_CTRL_MEM_SOFT_RST_Pos)
 
    BB_CTRL_PWR_MODE_Pos      = 0,
    #define BB_CTRL_PWR_MODE_Mask        (0x7ul << BB_CTRL_PWR_MODE_Pos)
};
 
#define BB_SLEEP_TIMER1_ADDR  0x000C
enum{
    BB_SLEEP_TIMER1_CMP_EN_Pos                 = 6,
    #define BB_SLEEP_TIMER1_CMP_EN_Mask         (1ul << BB_SLEEP_TIMER1_CMP_EN_Pos)
 
    BB_SLEEP_TIMER1_CMP_IRQ_MASK_Pos           = 5,
    #define BB_SLEEP_TIMER1_CMP_IRQ_MASK_Mask   (1ul << BB_SLEEP_TIMER1_CMP_IRQ_MASK_Pos)
 
    BB_SLEEP_TIMER1_CMP_IRQ_CLR_Pos            = 4,
    #define BB_SLEEP_TIMER1_CMP_IRQ_CLR_Mask    (1ul << BB_SLEEP_TIMER1_CMP_IRQ_CLR_Pos)
 
    BB_SLEEP_TIMER1_CMP_IRQ_STATE_Pos          = 3,
    #define BB_SLEEP_TIMER1_CMP_IRQ_STATE_Mask  (1ul << BB_SLEEP_TIMER1_CMP_IRQ_STATE_Pos)
 
    BB_SLEEP_TIMER1_EN_Pos                     = 1,
    #define BB_SLEEP_TIMER1_EN_Mask             (0x1ul << BB_SLEEP_TIMER1_EN_Pos)
 
    BB_SLEEP_TIMER1_CMP_EVENT_EN_Pos           = 0,
    #define BB_SLEEP_TIMER1_CMP_EVENT_EN_Mask   (1ul << BB_SLEEP_TIMER1_CMP_EVENT_EN_Pos)
};
 
#define BB_SLEEP_TIMER2_ADDR  0x0010
enum{
    BB_SLEEP_TIMER2_CMP_EVENT_DIN_Pos   = 0,
    #define BB_SLEEP_TIMER2_CMP_EVENT_DIN_Mask  0xFFFFFFFF
};
 
#define BB_SLEEP_TIMER3_ADDR  0x0014
enum{
    BB_SLEEP_TIMER3_CNT_Pos               = 0,
    #define BB_SLEEP_TIMER3_CNT_Mask      0xFFFFFFFF
};
 
#define BB_SLEEP_TIMER4_ADDR  0x0018
enum{
    BB_SLEEP_TIMER4_CMP_DIN_Pos            = 0,
    #define BB_SLEEP_TIMER4_CMP_DIN_Mask   0xFFFFFFFF
};
 
#define BB_IRQ_POLARITY_ADDR  0x001C
enum{
#ifdef IP_107
    BB_IRQ_POLARITY_PHY_RST_Pos            = 1,
    #define BB_IRQ_POLARITY_PHY_RST_Mask   (1ul << BB_IRQ_POLARITY_PHY_RST_Pos) //only 107 support
#endif
 
    BB_IRQ_POLARITY_IRQ_POL_Pos            = 0,
    #define BB_IRQ_POLARITY_IRQ_POL_Mask   (1ul << BB_IRQ_POLARITY_IRQ_POL_Pos)
};
 
 
/* BB FSM Register Address define. */
#define BB_FSM5_ADDR           0x404 // BB FSM Stop for scan/init
enum{
    BB_FSM5_FSM_STOP_Pos      = 6,  // stop LL scan/initiator initiating immediately
    #define BB_FSM5_FSM_STOP_Mask        (1<<BB_FSM5_FSM_STOP_Pos)
 
    BB_FSM5_FSM_TX_LATENCY_Pos = 0,
    #define BB_FSM5_FSM_TX_LATENCY_Mask   (0x3F << BB_FSM5_FSM_TX_LATENCY_Pos)
};
 
#define BB_FSM6_ADDR           0x408
enum{
    BB_FSM6_FSM_RX_LATENCY_Pos = 0,
    #define BB_FSM6_FSM_RX_LATENCY_Mask   (0x0F << BB_FSM5_FSM_TX_LATENCY_Pos)
};
 
#define BB_FSM13_ADDR          0x40C // Set RF Rx/TX Buffer address 0 [31:16]:RX; [15:0]:TX
#define BB_FSM14_ADDR          0x410 // Set RF Rx/TX Buffer address 1 [31:16]:RX; [15:0]:TX
#define BB_FSM15_ADDR          0x414 // Set RF Rx/TX Buffer address 2 [31:16]:RX; [15:0]:TX
#define BB_FSM16_ADDR          0x418 // Set RF Rx/TX Buffer address 3 [31:16]:RX; [15:0]:TX
#define BB_FSM17_ADDR          0x41C // Set RF Rx/TX Buffer address 4 [31:16]:RX; [15:0]:TX
#define BB_FSM18_ADDR          0x420 // Set RF Rx/TX Buffer address 5 [31:16]:RX; [15:0]:TX
#define BB_FSM19_ADDR          0x424 // Set RF Rx/TX Buffer address 6 [31:16]:RX; [15:0]:TX
enum{
    BB_FSM_RX_BUF_ADDR_Pos          = 16,
    #define BB_FSM_RX_BUF_ADDR_Mask   (0xfffful << BB_FSM_RX_BUF_ADDR_Pos)
 
    BB_FSM_TX_BUF_ADDR_Pos          = 0,
    #define BB_FSM_TX_BUF_ADDR_Mask   (0xfffful << BB_FSM_TX_BUF_ADDR_Pos)
};
 
 
/* BB PHY Register Address define. */
#define BB_PHY1_ADDR           0x428
enum{
    BB_PHY1_RSP_BUF_FULL_Pos           = 22,
    #define BB_PHY1_RSP_BUF_FULL_Mask    (1ul << BB_PHY1_RSP_BUF_FULL_Pos)
 
    BB_PHY1_RSP_BUF_EMPTY_Pos          = 21,
    #define BB_PHY1_RSP_BUF_EMPTY_Mask   (1ul << BB_PHY1_RSP_BUF_EMPTY_Pos)
 
    BB_PHY1_CFG_BUF_ERR_Pos            = 20,
    #define BB_PHY1_CFG_BUF_ERR_Mask     (1ul << BB_PHY1_CFG_BUF_ERR_Pos)
 
    BB_PHY1_CFG_BUF_FULL_Pos           = 19,
    #define BB_PHY1_CFG_BUF_FULL_Mask    (1ul << BB_PHY1_CFG_BUF_FULL_Pos)
 
    BB_PHY1_CFG_BUF_EMPTY_Pos          = 18,
    #define BB_PHY1_CFG_BUF_EMPTY_Mask   (1ul << BB_PHY1_CFG_BUF_EMPTY_Pos)
 
    BB_PHY1_CLK_PRESCALE_Pos           = 13,
    #define BB_PHY1_CLK_PRESCALE_Mask    (0x1Ful << BB_PHY1_CLK_PRESCALE_Pos)
 
    BB_PHY1_RSSI_ADDR_Pos              = 5,
    #define BB_PHY1_RSSI_ADDR_Mask       (0xFFul << BB_PHY1_RSSI_ADDR_Pos)
 
    BB_PHY1_CFG_TRIG_Pos               = 4,
    #define BB_PHY1_CFG_TRIG_Mask        (0x1ul << BB_PHY1_CFG_TRIG_Pos)
 
    BB_PHY1_CFG_REG_Pos                = 2,
    #define BB_PHY1_CFG_REG_Mask         (0x3ul << BB_PHY1_CFG_REG_Pos)
 
    BB_PHY1_RSP_BUF_FLUSH_Pos          = 1,
    #define BB_PHY1_RSP_BUF_FLUSH_Mask   (0x1ul << BB_PHY1_RSP_BUF_FLUSH_Pos)
 
    BB_PHY1_CFG_BUF_FLUSH_Pos          = 0,
    #define BB_PHY1_CFG_BUF_FLUSH_Mask   (0x1ul << BB_PHY1_CFG_BUF_FLUSH_Pos)
};
 
//
#define BB_PHY2_ADDR           0x42C
enum{
    BB_PHY2_RSP_BUF_ERR_Pos               = 28,
    #define BB_PHY2_RSP_BUF_ERR_Mask      (1ul << BB_PHY2_RSP_BUF_ERR_Pos)
 
    BB_PHY2_SEQ_RX_END_ADDR_Pos           = 21,
    #define BB_PHY2_SEQ_RX_END_ADDR_Mask  (0x7Ful << BB_PHY2_SEQ_RX_END_ADDR_Pos)
 
    BB_PHY2_SEQ_TX_END_ADDR_Pos           = 14,
    #define BB_PHY2_SEQ_TX_END_ADDR_Mask  (0x7Ful << BB_PHY2_SEQ_TX_END_ADDR_Pos)
 
    BB_PHY2_SEQ_RX_START_ADDR_Pos         = 7,
    #define BB_PHY2_SEQ_RX_START_ADDR_Mask (0x7Ful << BB_PHY2_SEQ_RX_START_ADDR_Pos)
 
    BB_PHY2_SEQ_TX_START_ADDR_Pos         = 0,
    #define BB_PHY2_SEQ_TX_START_ADDR_Mask (0x7Ful << BB_PHY2_SEQ_TX_START_ADDR_Pos)
};
 
//
#define BB_PHY3_ADDR           0x430
enum{
    BB_PHY3_CFG_BUF_DIN_Pos              = 0,
    #define BB_PHY3_CFG_BUF_DIN_Mask     (0xFFFFFFFF)
};
 
//
#define BB_PHY4_ADDR           0x434
enum{
    BB_PHY4_RSP_BUF_DOUT_Pos             = 0,
    #define BB_PHY4_RSP_BUF_DOUT_Mask    (0xFFFFFFFF)
};
 
//
#define BB_PHY5_ADDR           0x438
enum{
    BB_PHY5_CHN_REG_ADDR_Pos              = 0,
    #define BB_PHY5_CHN_REG_ADDR_Mask     (0xFFul << BB_PHY5_CHN_REG_ADDR_Pos)
};
 
 
/* BB Interrupt Register Address define. */
#define BB_INT_STAT_ADDR       0x444
enum{
    BB_INT_STAT_RNG_DONE_Pos               = 3,
    #define BB_INT_STAT_RNG_DONE_Mask      (0x1ul << BB_INT_STAT_RNG_DONE_Pos)
 
    BB_INT_STAT_SEC_DONE_Pos               = 2,
    BB_INT_STAT_TIMER_CAP_START_Pos        = 1,
 
    BB_INT_STAT_PHY_CFG_DONE_Pos           = 0,
    #define BB_INT_STAT_PHY_CFG_DONE_Mask  (0x1ul << BB_INT_STAT_PHY_CFG_DONE_Pos)
};
 
#define BB_INT_STAT_CLR_ADDR   0x448
enum{
    BB_INT_STAT_CLR_RNG_DONE_Pos = 3,
    #define BB_INT_STAT_CLR_RNG_DONE_Mask             (0x1ul << BB_INT_STAT_CLR_RNG_DONE_Pos)
 
    BB_INT_STAT_CLR_SEC_DONE_Pos = 2,
    #define BB_INT_STAT_CLR_SEC_DONE_Mask             (0x1ul << BB_INT_STAT_CLR_SEC_DONE_Pos)
 
    BB_INT_STAT_CLR_TIMER_CMP_START_EVT_Pos = 1,
    #define BB_INT_STAT_CLR_TIMER_CMP_START_EVT_Mask  (0x1ul << BB_INT_STAT_CLR_TIMER_CMP_START_EVT_Pos)
 
    BB_INT_STAT_CLR_PHY_CFG_DONE_Pos = 0,
    #define BB_INT_STAT_CLR_PHY_CFG_DONE_Mask         (0x1ul << BB_INT_STAT_CLR_PHY_CFG_DONE_Pos)
};
 
#define BB_INT_MASK_ADDR       0x44C
enum{
    BB_INT_MSK_RNG_DONE_Pos                  = 3,
    #define BB_INT_MSK_RNG_DONE_Mask         (1ul << BB_INT_MSK_RNG_DONE_Pos)
 
    BB_INT_MSK_SEC_DONE_Pos                  = 2,
    #define BB_INT_MSK_SEC_DONE_Mask         (1ul << BB_INT_MSK_SEC_DONE_Pos)
 
    BB_INT_MSK_TIMER_CAP_START_Pos           = 1,
    #define BB_INT_MSK_TIMER_CAP_START_Mask  (1ul << BB_INT_MSK_TIMER_CAP_START_Pos)
 
    BB_INT_MSK_PHY_CFG_DONE_Pos              = 0,
    #define BB_INT_MSK_PHY_CFG_DONE_Mask     (1ul << BB_INT_MSK_PHY_CFG_DONE_Pos)
};
 
#define BB_INT4_ADDR       0x450
enum{
    BB_INT4_IC_MODE_IRQ_Pos           = 4,
    #define BB_INT4_IC_MODE_IRQ_Mask  (1ul << BB_INT4_IC_MODE_IRQ_Pos)
};
 
/* BB 32M Timer Register Address define. */
#define BB_ACTTMR1_MAX_CMP_ADDR    0x458  //????   ACTTIMER1
#define BB_ACTTMR2_CTRL_ADDR       0x45C  //       ACTTIMER2
#define BB_ACTTMR6_START_CMP_ADDR  0x460  //???    ACTTIMER6 -- DIN
#define BB_ACTTMR7_CMP_ADDR        0x464  //???    ACTTIMER7 -- DOUT -- RX timestamp: unit:tick ??
 
 
/* BB Secure Register Address define. */
#define BB_SEC_CTRL_ADDR         0x46C  // SECURE1
enum{
    BB_SEC_CTRL_AES_EN_Pos           = 0,
    #define BB_SEC_CTRL_AES_EN_Mask    (1ul << BB_SEC_CTRL_AES_EN_Pos)
 
    BB_SEC_CTRL_MODE_Pos             = 1,
    #define BB_SEC_CTRL_MODE_Mask      (0x3ul << BB_SEC_CTRL_MODE_Pos)
 
    BB_SEC_CTRL_STATE_Pos            = 3,
    #define BB_SEC_CTRL_STATE_Mask     (0x7Ful << BB_SEC_CTRL_STATE_Pos)
 
    BB_SEC_CTRL_VALID_MIC_Pos        = 10,
    #define BB_SEC_CTRL_VALID_MIC_Mask (0x7Ful << BB_SEC_CTRL_VALID_MIC_Pos)
 
    BB_SEC_CTRL_MIC_LEN_Pos          = 17,
    #define BB_SEC_CTRL_MIC_LEN_Mask   (0x3ul << BB_SEC_CTRL_MIC_LEN_Pos)
 
    BB_SEC_CTRL_AD_LEN_Pos           = 19,
    #define BB_SEC_CTRL_AD_LEN_Mask    (0x7Ful << BB_SEC_CTRL_AD_LEN_Pos)
 
    BB_SEC_CTRL_DECRYPT_EN_Pos       = 26,
    #define BB_SEC_CTRL_DECRYPT_EN_Mask (1ul << BB_SEC_CTRL_DECRYPT_EN_Pos)
};
 
#define BB_SEC_IV_LO_ADDR        0x470  // SECURE2 - IV3 - IV0
#define BB_SEC_IV_HI_ADDR        0x474  // SECURE3 - IV7 - IV4
#define BB_SEC_KEY0_BUF_ADDR     0x478  // SECURE4 - key address for packet0-1
enum{
    BB_SEC_KEY0_BUF_ADDR_Pos   = 0,
    #define BB_SEC_KEY0_BUF_ADDR_Mask (0xFFFFul << BB_SEC_KEY0_BUF_ADDR_Pos)
 
    BB_SEC_KEY1_BUF_ADDR_Pos   = 16,
    #define BB_SEC_KEY1_BUF_ADDR_Mask  (0xFFFFul << BB_SEC_KEY1_BUF_ADDR_Pos)
};
 
#define BB_SEC_KEY1_BUF_ADDR     0x47C  // SECURE5  - key address for packet2-3
#define BB_SEC_KEY2_BUF_ADDR     0x480  // SECURE6  - key address for packet4-5
#define BB_SEC_KEY3_BUF_ADDR     0x484  // SECURE7  - key address for packet6 + Tx packet counter MSB [7:0]
enum{
    BB_SEC_KEY6_BUF_ADDR_Pos   = 8,
    #define BB_SEC_KEY6_BUF_ADDR_Mask (0xFFFFul << BB_SEC_KEY6_BUF_ADDR_Pos)
};
#define BB_SEC_TX_PKT_CNT1_ADDR  0x484  // SECURE7  - key address for packet6 + Tx packet counter MSB [7:0]
#define BB_SEC_TX_PKT_CNT2_ADDR  0x488  // SECURE8  - Tx packet counter LSB [31:0]
#define BB_SEC_RX_PKT_CNT1_ADDR  0x48C  // SECURE9  - Rx packet counter MSB [7:0]
#define BB_SEC_RX_PKT_CNT2_ADDR  0x490  // SECURE10 - Rx packet counter LSB [31:0]
 
/* BB RNG Register Address define. */
#define BB_RNG_CTRL_ADDR         0x49C
#define BB_RNG_VALUE_ADDR        0x4A0
 
 
/* BB LL MAC CTRL Register Address define. */
#define BB_LL_EN_ADDR            0x4A8  // Enable LL
enum{
    BB_LL_LL_EN_Pos = 0,
    #define BB_LL_LL_EN_Mask     (1ul << BB_LL_LL_EN_Pos)
};
 
#define BB_PRI0_ADDR         0x4C0  //PRI_R00  - AA length | CRC Enable  | RF Mode(BLE, Nordic) |
enum{
    BB_PRI0_CRC_INCLUDE_Pos = 15,
    #define BB_PRI0_CRC_INCLUDE_Mask  (1ul << BB_PRI0_CRC_INCLUDE_Pos)
 
    BB_PRI0_CRC24_EN_Pos    = 14,
    #define BB_PRI0_CRC24_EN_Mask     (1ul << BB_PRI0_CRC24_EN_Pos)
 
    BB_PRI0_AA_LEN_Pos      = 12,
    #define BB_PRI0_AA_LEN_Mask       (0x3ul << BB_PRI0_AA_LEN_Pos)
 
    BB_PRI0_AUTO_RX_LEN_Pos = 11,
 
    BB_PRI0_CRC_EN_Pos      = 10,
    #define BB_PRI0_CRC_EN_Mask       (1ul << BB_PRI0_CRC_EN_Pos)
 
    BB_PRI0_CRC16_EN_Pos    = 9, // CRC24_EN = 0, CRC16_EN = 1 -> CRC16 Or not CRC8
 
    BB_PRI0_PHY_MODE_Pos    = 5, // 1Mbps / 2Mbps
    #define BB_PRI0_PHY_MODE_Mask     (1ul << BB_PRI0_PHY_MODE_Pos)
 
    BB_PRI0_RF_MODE_Pos     = 3,  //BLE mode / nordic mode / 297 mode
    #define BB_PRI0_RF_MODE_Mask      (3ul << BB_PRI0_RF_MODE_Pos)
 
    BB_PRI0_RX_TX_CTRL_Pos  = 0,
};
 
#define BB_PRI1_ADDR         0x4C4  //PRI_R01  - Tx done irq | Rx done irq | Crc Error | Rx timeout |
enum{
    BB_PRI1_RX_PID_Pos  = 29,
    #define BB_PRI1_RX_PID_Mask    (0x3UL<<BB_PRI1_RX_PID_Pos)
 
    BB_PRI1_TX_PID_Pos  = 27,
    #define BB_PRI1_TX_PID_Mask    (0x3UL<<BB_PRI1_TX_PID_Pos)
};
 
#define BB_PRI2_ADDR         0x4C8  //PRI_R02  - Rx wait time | Tx wait time
#define BB_PRI3_ADDR         0x4CC  //PRI_R03  - Rx address
#define BB_PRI4_ADDR         0x4D0  //PRI_R04  - Rx header
#define BB_PRI5_ADDR         0x4D4  //PRI_R05  - Tx address
#define BB_PRI6_ADDR         0x4D8  //PRI_R06  - Tx header | whitening init(def:0x7F)
#define BB_PRI7_ADDR         0x4DC  //PRI_R07  - Rx/Tx RAM address
 
#define BB_FSM1_ADDR              0x80C // Get TX/RX PKT CNT | NESN | SN | PKT_PER_CONN | ADV CHN MAP | BLE FSM
enum{
    BB_FSM1_TX_PKT_NUM_Pos                = 29,
    #define BB_FSM1_TX_PKT_NUM_Mask       (0x07ul << BB_FSM1_TX_PKT_NUM_Pos) // the number of acknowledged transmitted packets in the current event.
 
    BB_FSM1_RX_PKT_NUM_Pos                = 14,
    #define BB_FSM1_RX_PKT_NUM_Mask       (0x7FFFul << BB_FSM1_RX_PKT_NUM_Pos) //  the number of unique correctly received packets in the current event.
 
    BB_FSM1_RX_NESN_Pos                   = 13,
    BB_FSM1_RX_SN_Pos                     = 12,
    BB_FSM1_RX_PKT_PER_CONN_Pos           = 9,
    #define BB_FSM1_RX_PKT_PER_CONN_Mask  (0x7ul << BB_FSM1_RX_PKT_PER_CONN_Pos)
 
    BB_FSM1_TX_NESN_Pos                   = 8,
    #define BB_FSM1_TX_NESN_Mask          (1ul << BB_FSM1_TX_NESN_Pos)
 
    BB_FSM1_TX_SN_Pos                     = 7,
    #define BB_FSM1_TX_SN_Mask            (1ul << BB_FSM1_TX_SN_Pos)
 
    BB_FSM1_ADV_CHN_MAP_Pos               = 4,
    #define BB_FSM1_ADV_CHN_MAP_Mask      (0x7ul << BB_FSM1_ADV_CHN_MAP_Pos)
 
    BB_FSM1_FSM_MODE_Pos                  = 0,  //!!!important.
    #define BB_FSM1_FSM_MODE_Mask         (0xFul << BB_FSM1_FSM_MODE_Pos)
};
 
#define BB_FSM2_ADDR              0x810
enum{
    BB_FSM2_PHY_TX_CFG_Pos             = 0,
    #define BB_FSM2_PHY_TX_CFG_Mask    (0xfful << BB_FSM2_PHY_TX_CFG_Pos)
};
 
#define BB_FSM4_ADDR              0x814
enum{
    BB_FSM4_PHY_RX_CFG_Pos            = 0,
    #define BB_FSM4_PHY_RX_CFG_Mask   (0xfful << BB_FSM4_PHY_RX_CFG_Pos)
};
 
#define BB_FSM8_ADDR              0x818 // DTM mode
#define BB_FSM9_ADDR              0x81C // Set First RX Timeout
enum{
    BB_FSM9_FISRT_RX_TIMEOUT_Pos           = 0,
    #define BB_FSM9_FISRT_RX_TIMEOUT_Mask  0xFFFFFFFF
};
 
#define BB_FSM11_ADDR             0x824 // Set RX Timeout
enum{
    BB_FSM11_RX_TIMEOUT_Pos = 0,
    #define BB_FSM11_RX_TIMEOUT_Mask   (0x1FFUL << BB_FSM11_RX_TIMEOUT_Pos)
};
 
#define BB_FSM12_ADDR             0x828 // Set BLE Whitening | CRC error 2 | PHY opt | BLE RX PHY | BLE Tx PHY | BLE data channel
enum{
    BB_FSM12_BLE_WHITENING_VAL_Pos             = 24,
    #define BB_FSM12_BLE_WHITENING_VAL_Mask    (0x7Ful << BB_FSM12_BLE_WHITENING_VAL_Pos)
 
    BB_FSM12_BLE_WHITENING_EN_Pos              = 23,
    #define BB_FSM12_BLE_WHITENING_EN_Mask     (0x1ul << BB_FSM12_BLE_WHITENING_EN_Pos)
 
    BB_FSM12_BLE_CRC_ERR_NUM_Pos               = 22,
    #define BB_FSM12_BLE_CRC_ERR_NUM_Mask      (0x1ul << BB_FSM12_BLE_CRC_ERR_NUM_Pos)
 
    BB_FSM12_BLE_CI_Pos                        = 14,
    #define BB_FSM12_BLE_CI_Mask               (0x7Ful << BB_FSM12_BLE_CI_Pos)
 
    BB_FSM12_BLE_RX_PHY_Pos                    = 12,
    #define BB_FSM12_BLE_RX_PHY_Mask           (0x3ul << BB_FSM12_BLE_RX_PHY_Pos)
 
    BB_FSM12_BLE_TX_PHY_Pos                    = 10,
    #define BB_FSM12_BLE_TX_PHY_Mask           (0x3ul << BB_FSM12_BLE_TX_PHY_Pos)
 
    BB_FSM12_PAUSE_NESN_UPD_Pos                = 6,
    #define BB_FSM12_PAUSE_NESN_UPD_Mask       (0x1ul << BB_FSM12_PAUSE_NESN_UPD_Pos)
 
    BB_FSM12_BLE_DATA_CHN_ID_Pos               = 0,
    #define BB_FSM12_BLE_DATA_CHN_ID_Mask      (0x3Ful << BB_FSM12_BLE_DATA_CHN_ID_Pos)
};
 
#define BB_PP1_ADDR               0x830 // PADV SYNC | RX CI | max Rx length |
#define BB_PP2_ADDR               0x834 // Access code
#define BB_PP3_ADDR               0x838 // CRC init
#define BB_PP4_ADDR               0x83C // ADV PDU Tx addr type + adv address(MSB)
#define BB_PP5_ADDR               0x840 // ADV address LSB
#define BB_PP6_ADDR               0x844 // Peer ADV address MSB //for direct adv
#define BB_PP7_ADDR               0x848 // Peer ADV address LSB //for direct adv
enum{
    BB_PP1_PERIOD_SYNC_EN_Pos             = 22,
    #define BB_PP1_PERIOD_SYNC_EN_Mask    (1ul << BB_PP1_PERIOD_SYNC_EN_Pos)
 
    BB_PP1_MAX_RX_LEN_Pos                 = 12,
    #define BB_PP1_MAX_RX_LEN_Mask        (0xFFul << BB_PP1_MAX_RX_LEN_Pos)
 
    BB_PP1_DTM_TX_LEN_Pos                 = 4,
    #define BB_PP1_DTM_TX_LEN_Mask        (0xFFul << BB_PP1_DTM_TX_LEN_Pos)
 
    BB_PP1_DTM_PKT_TYPE_Pos               = 0,
    #define BB_PP1_DTM_PKT_TYPE_Mask      (0xFul)
 
 
    BB_PP2_AA_Pos                         = 0,
    #define BB_PP2_AA_Mask                (0xFFFFFFFF)
 
    BB_PP3_CRC_INIT_Pos                   = 0,
    #define BB_PP3_CRC_INIT_Mask          (0xFFFFFF)
 
    BB_PP4_ADV_TX_ADDR_TYPE_Pos           = 16,
    #define BB_PP4_ADV_TX_ADDR_TYPE_Mask  (1ul << BB_PP4_ADV_TX_ADDR_TYPE_Pos)
 
    BB_PP4_ADV_TX_ADDR_MSB_Pos            = 0,
    #define BB_PP4_ADV_TX_ADDR_MSB_Mask   (0xFFFF)
 
    BB_PP5_ADV_TX_ADDR_LSB_Pos            = 0,
    #define BB_PP5_ADV_TX_ADDR_LSB_Mask   (0xFFFFFFFF)
 
    BB_PP6_ADV_RX_ADDR_MSB_Pos            = 0,
    #define BB_PP6_ADV_RX_ADDR_MSB_Mask   (0xFFFF)
 
    BB_PP7_ADV_RX_ADDR_LSB_Pos            = 0,
    #define BB_PP7_ADV_RX_ADDR_LSB_Mask   (0xFFFFFFFF)
};
 
// For BLE FSM Intterupt
#define BB_BLE_INT_STAT_ADDR      0x890 // Rx timeout | crc error | cmd done IRQ
#define BB_BLE_INT_CLR_ADDR       0x894
#define BB_BLE_INT_MASK_ADDR      0x898
 
#define BB_BLE_RX_TX_SETTLE_TIME  0x8AC // 150 + n
 
// For BLE ADV PDU filter module
#define BB_ADV_PDU_FLTR_CTRL_ADDR 0x940
#define BB_ADV_PDU_FLTR0_ADDR     0x944 // Format: ADV Data Type | AD Length
#define BB_ADV_PDU_FLTR1_ADDR     0x948 // Format: ADV Data Type | AD Length
#define BB_ADV_PDU_FLTR2_ADDR     0x94C // Format: ADV Data Type | AD Length
#define BB_ADV_PDU_FLTR3_ADDR     0x950 // Format: ADV Data Type | AD Length
 
// For whitlist / resolvelist / blacklist module
#define BB_LST1_ADDR           0x850
#define BB_LST2_ADDR           0x854
enum{
    BB_LST2_PERIODIC_SID_Pos                   = 11,
    #define BB_LST2_PERIODIC_SID_Mask          (0xFul << BB_LST1_PERIODIC_SID_Pos)
 
    BB_LST2_PERIODIC_FILT_POLICY_Pos           = 10,
    #define BB_LST2_PERIODIC_FILT_POLICY_Mask  (0x1ul << BB_LST1_PERIODIC_FILT_POLICY_Pos)
 
    BB_LST2_PERIODIC_FILT_ADDR_Pos             = 3,
    #define BB_LST2_PERIODIC_FILT_ADDR_Mask     (0x7Ful << BB_LST1_PERIODIC_FILT_ADDR_Pos)
 
    BB_LST2_FILT_POLICY_Pos                    = 0,
    #define BB_LST2_FILT_POLICY_Mask            (0x7ul << BB_LST2_FILT_POLICY_Pos)
};
 
#define BB_LST3_ADDR           0x858
#define BB_LST4_ADDR           0x85C
enum{
    BB_LST4_INITATOR_SYNC_ADDR_TYPE_Pos = 16,
    #define BB_LST4_INITATOR_SYNC_ADDR_TYPE_Mask  (1ul << BB_LST4_INITATOR_SYNC_ADDR_TYPE_Pos)
 
    BB_LST4_INITATOR_SYNC_ADDR_MSB_Pos = 0,
    #define BB_LST4_INITATOR_SYNC_ADDR_MSB_Mask   (0xFFFFul << BB_LST4_INITATOR_SYNC_ADDR_MSB_Pos)
};
 
#define BB_LST5_ADDR           0x860
enum{
    BB_LST5_INITATOR_SYNC_ADDR_LSB_Pos = 0,
    #define BB_LST5_INITATOR_SYNC_ADDR_LSB_Mask 0xFFFFFFFF
};
 
#define BB_LST6_ADDR           0x864
#define BB_LST7_ADDR           0x868
 
//For channel select module
#define BB_CS1_ADDR            0x870
#define BB_CS2_ADDR            0x874
#define BB_CS3_ADDR            0x878
#define BB_CS4_ADDR            0x87C
#define BB_CM1_ADDR            0x888
 
#ifdef IP_108
//AOA
#define BB_AOA_RECOGNIZE0_ADDR  0x954
enum{
    BB_SCAN_MD_SCAN_GO_ON_EN_Pos  = 13,
    #define BB_SCAN_MD_SCAN_GO_ON_EN_Mask  (1ul << BB_SCAN_MD_SCAN_GO_ON_EN_Pos)
};
#define BB_AOA_RECOGNIZE1_ADDR  0x958
#define BB_AOA_RECOGNIZE2_ADDR  0x95C
#define BB_AOA_RECOGNIZE3_ADDR  0x960
 
#elif defined(IP_107)
#define BB_SCAN_MORE_DATA_ADDR  0x954
enum{
    BB_SCAN_MD_SCAN_GO_ON_EN_Pos  = 4,
    #define BB_SCAN_MD_SCAN_GO_ON_EN_Mask  (1ul << BB_SCAN_MD_SCAN_GO_ON_EN_Pos)
 
    BB_SCAN_MD_SCAN_MD_EN_Pos     = 3,
    #define BB_SCAN_MD_SCAN_MD_EN_Mask     (1ul << BB_SCAN_MD_SCAN_MD_EN_Pos)
 
    BB_SCAN_MD_SCAN_MD_LEN_Pos    = 0,
    #define BB_SCAN_MD_SCAN_MD_LEN_Mask    (0x07ul << BB_SCAN_MD_SCAN_MD_LEN_Pos)
};
#endif
 
 
//RND
#define BB_RNG1_ADDR            0x49C
#define BB_RNG2_ADDR            0x4A0
 
 
 
//BB Debug
/* BB Test Mux Register Address define. */
#define BB_DBG_BASE_ADDR        (BB_BASE + 0x498)
 
#define BB_TEST_MUX0_ADDR        0x498
#define BB_TEST_MUX1_ADDR        0x4AC
#define BB_TEST_MUX2_ADDR        0x4B0
#define BB_TEST_MUX3_ADDR        0x4B4
 
enum{
    //MUX0
    BB_TEST_MUX_CHN0_Pos      = 0,
    BB_TEST_MUX_CHN1_Pos      = 6,
    BB_TEST_MUX_CHN2_Pos      = 12,
    BB_TEST_MUX_CHN3_Pos      = 18,
 
    //MUX1
    BB_TEST_MUX_CHN4_Pos      = 0,
    BB_TEST_MUX_CHN5_Pos      = 6,
    BB_TEST_MUX_CHN6_Pos      = 12,
    BB_TEST_MUX_CHN7_Pos      = 18,
 
    //MUX2
    BB_TEST_MUX_CHN8_Pos      = 0,
    BB_TEST_MUX_CHN9_Pos      = 6,
    BB_TEST_MUX_CHN10_Pos     = 12,
    BB_TEST_MUX_CHN11_Pos     = 18,
 
    //MUX3
    BB_TEST_MUX_CHN12_Pos     = 0,
    BB_TEST_MUX_CHN13_Pos     = 6,
    BB_TEST_MUX_CHN14_Pos     = 12,
    BB_TEST_MUX_CHN15_Pos     = 18,
};
 
#ifdef IP_108
    #define LL_DBG_TX_DATA_VAL          0x30
    #define LL_DBG_TX_ON_VAL            0x31
    #define LL_DBG_RX_ON_VAL            0x32
    #define LL_DBG_ACCESS_MATCH_VAL     0x33
    #define LL_DBG_RX_DATA_VAL          0x34
    #define LL_DBG_RX_CLK_VAL           0x35
#elif defined(IP_107)
    #define LL_DBG_TX_DATA_VAL          0x13
    #define LL_DBG_TX_ON_VAL            0x14
    #define LL_DBG_RX_ON_VAL            0x15
    #define LL_DBG_ACCESS_MATCH_VAL     0x16
    #define LL_DBG_RX_DATA_VAL          0x17
    #define LL_DBG_RX_CLK_VAL           0x18
#endif
 
#endif /* BB_DEF_H_ */