Toggle navigation
Documentation
The friendly Operating System for the Internet of Things
cpu_conf.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2020 iosabi
3
*
4
* This file is subject to the terms and conditions of the GNU Lesser General
5
* Public License v2.1. See the file LICENSE in the top level directory for more
6
* details.
7
*/
8
9
#pragma once
10
21
#include "cpu_conf_common.h"
22
23
#include "vendor/QN908XC.h"
24
#include "vendor/QN908XC_features.h"
25
26
#ifdef __cplusplus
27
extern
"C"
{
28
#endif
29
34
#define CPU_DEFAULT_IRQ_PRIO (1U)
40
#define CPU_IRQ_NUMOF (NUMBER_OF_INT_VECTORS - 16)
48
#define CPU_FLASH_BASE (QN908X_ROM_START_ADDR)
52
#define CPU_HAS_BITBAND 1
72
#if !defined(CONFIG_BOARD_HAS_XTAL32K) || DOXYGEN
73
#define CONFIG_BOARD_HAS_XTAL32K 0
74
#endif
75
80
#ifdef DOXYGEN
84
#define CONFIG_CPU_CLK_32K_XTAL
88
#define CONFIG_CPU_CLK_32K_RCO
89
#endif
/* def DOXYGEN */
92
/* Default 32K clock selector config. */
93
#if !defined(CONFIG_CPU_CLK_32K_XTAL) && !defined(CONFIG_CPU_CLK_32K_RCO)
94
#if CONFIG_BOARD_HAS_XTAL32K
95
#define CONFIG_CPU_CLK_32K_XTAL 1
96
#else
97
#define CONFIG_CPU_CLK_32K_RCO 1
98
#endif
99
#endif
100
105
#ifndef CONFIG_BOARD_HAS_XTAL
106
#define CONFIG_BOARD_HAS_XTAL 0
107
#endif
108
112
#ifdef DOXYGEN
116
#define CONFIG_CPU_CLK_XTAL_16M
120
#define CONFIG_CPU_CLK_XTAL_32M
121
#endif
/* def DOXYGEN */
124
/* Default XTAL setting. */
125
#if CONFIG_BOARD_HAS_XTAL && \
126
!defined(CONFIG_BOARD_HAS_XTAL_16M) && !defined(CONFIG_BOARD_HAS_XTAL_32M)
127
#define CONFIG_BOARD_HAS_XTAL_32M 1
128
#endif
129
133
#ifndef CONFIG_CPU_CLK_OSC32M_DIV
134
#define CONFIG_CPU_CLK_OSC32M_DIV 0
135
#endif
136
140
#ifndef CONFIG_CPU_CLK_XTAL_DIV
141
#define CONFIG_CPU_CLK_XTAL_DIV 0
142
#endif
143
148
#ifdef DOXYGEN
152
#define CONFIG_CPU_CLK_SYS_XTAL
156
#define CONFIG_CPU_CLK_SYS_OSC32M
160
#define CONFIG_CPU_CLK_SYS_32K
161
#endif
/* def DOXYGEN */
164
/* Default system clock configuration selector */
165
#if !defined(CONFIG_CPU_CLK_SYS_XTAL) && !defined(CONFIG_CPU_CLK_SYS_OSC32M) && \
166
!defined(CONFIG_CPU_CLK_SYS_32K)
167
#if CONFIG_BOARD_HAS_XTAL
168
#define CONFIG_CPU_CLK_SYS_XTAL 1
169
#else
170
#define CONFIG_CPU_CLK_SYS_OSC32M 1
171
#endif
172
#endif
173
184
#ifndef CONFIG_CPU_CLK_AHB_DIV
185
#define CONFIG_CPU_CLK_AHB_DIV 1u
186
#endif
187
196
#ifndef CONFIG_CPU_CLK_APB_DIV
197
#define CONFIG_CPU_CLK_APB_DIV 1u
198
#endif
199
233
#define QN908X_CRP_PROTECT_PAGES(X) (255 - (X))
234
238
#define QN908X_CRP_MASS_ERASE_ALLOW (0x800)
242
#define QN908X_CRP_MASS_ERASE_DISALLOW (0x400)
243
247
#define QN908X_CRP_PAGE_ERASE_WRITE_ALLOW (0x2000)
251
#define QN908X_CRP_PAGE_ERASE_WRITE_DISALLOW (0x1000)
252
256
#define QN908X_CRP_FLASH_READ_ALLOW (0x8000)
260
#define QN908X_CRP_FLASH_READ_DISALLOW (0x4000)
261
265
#define QN908X_CRP_ISP_ENTRY_ALLOW (0x20000)
269
#define QN908X_CRP_ISP_ENTRY_DISALLOW (0x10000)
270
274
#define QN908X_CRP_EXTERNAL_ACCESS_ALLOW (0x80000)
278
#define QN908X_CRP_EXTERNAL_ACCESS_DISALLOW (0x40000)
279
285
#ifndef QN908X_CRP
286
#define QN908X_CRP \
287
(QN908X_CRP_PROTECT_PAGES(0) \
288
| QN908X_CRP_MASS_ERASE_ALLOW \
289
| QN908X_CRP_PAGE_ERASE_WRITE_ALLOW \
290
| QN908X_CRP_FLASH_READ_ALLOW \
291
| QN908X_CRP_ISP_ENTRY_ALLOW \
292
| QN908X_CRP_EXTERNAL_ACCESS_ALLOW)
293
#endif
/* QN908X_CRP */
294
300
#define CORTEXM_VECTOR_RESERVED_0X20 QN908X_CRP
301
302
/* Safety checks that the QN908X_CRP value is valid. */
303
#if !(QN908X_CRP & QN908X_CRP_MASS_ERASE_ALLOW) == \
304
!(QN908X_CRP & QN908X_CRP_MASS_ERASE_DISALLOW)
305
#error "Must select exactly one of QN908X_CRP_MASS_ERASE_* in the QN908X_CRP"
306
#endif
307
#if !(QN908X_CRP & QN908X_CRP_PAGE_ERASE_WRITE_ALLOW) == \
308
!(QN908X_CRP & QN908X_CRP_PAGE_ERASE_WRITE_DISALLOW)
309
#error \
310
"Must select exactly one of QN908X_CRP_PAGE_ERASE_WRITE_* in the QN908X_CRP"
311
#endif
312
#if !(QN908X_CRP & QN908X_CRP_FLASH_READ_ALLOW) == \
313
!(QN908X_CRP & QN908X_CRP_FLASH_READ_DISALLOW)
314
#error "Must select exactly one of QN908X_CRP_FLASH_READ_* in the QN908X_CRP"
315
#endif
316
#if !(QN908X_CRP & QN908X_CRP_ISP_ENTRY_ALLOW) == \
317
!(QN908X_CRP & QN908X_CRP_ISP_ENTRY_DISALLOW)
318
#error "Must select exactly one of QN908X_CRP_ISP_ENTRY_* in the QN908X_CRP"
319
#endif
320
#if !(QN908X_CRP & QN908X_CRP_EXTERNAL_ACCESS_ALLOW) == \
321
!(QN908X_CRP & QN908X_CRP_EXTERNAL_ACCESS_DISALLOW)
322
#error \
323
"Must select exactly one of QN908X_CRP_EXTERNAL_ACCESS_* in the QN908X_CRP"
324
#endif
325
326
#ifdef __cplusplus
327
}
328
#endif
329
Generated on Mon Jun 30 2025 18:46:45 by
1.9.1