Toggle navigation
Documentation
The friendly Operating System for the Internet of Things
cpu_conf.h
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2020 iosabi
3
* SPDX-License-Identifier: LGPL-2.1-only
4
*/
5
6
#pragma once
7
18
#include "cpu_conf_common.h"
19
20
#include "vendor/QN908XC.h"
21
#include "vendor/QN908XC_features.h"
22
23
#ifdef __cplusplus
24
extern
"C"
{
25
#endif
26
31
#define CPU_DEFAULT_IRQ_PRIO (1U)
37
#define CPU_IRQ_NUMOF (NUMBER_OF_INT_VECTORS - 16)
45
#define CPU_FLASH_BASE (QN908X_ROM_START_ADDR)
49
#define CPU_HAS_BITBAND 1
69
#if !defined(CONFIG_BOARD_HAS_XTAL32K) || DOXYGEN
70
#define CONFIG_BOARD_HAS_XTAL32K 0
71
#endif
72
77
#ifdef DOXYGEN
81
#define CONFIG_CPU_CLK_32K_XTAL
85
#define CONFIG_CPU_CLK_32K_RCO
86
#endif
/* def DOXYGEN */
89
/* Default 32K clock selector config. */
90
#if !defined(CONFIG_CPU_CLK_32K_XTAL) && !defined(CONFIG_CPU_CLK_32K_RCO)
91
#if CONFIG_BOARD_HAS_XTAL32K
92
#define CONFIG_CPU_CLK_32K_XTAL 1
93
#else
94
#define CONFIG_CPU_CLK_32K_RCO 1
95
#endif
96
#endif
97
102
#ifndef CONFIG_BOARD_HAS_XTAL
103
#define CONFIG_BOARD_HAS_XTAL 0
104
#endif
105
109
#ifdef DOXYGEN
113
#define CONFIG_CPU_CLK_XTAL_16M
117
#define CONFIG_CPU_CLK_XTAL_32M
118
#endif
/* def DOXYGEN */
121
/* Default XTAL setting. */
122
#if CONFIG_BOARD_HAS_XTAL && \
123
!defined(CONFIG_BOARD_HAS_XTAL_16M) && !defined(CONFIG_BOARD_HAS_XTAL_32M)
124
#define CONFIG_BOARD_HAS_XTAL_32M 1
125
#endif
126
130
#ifndef CONFIG_CPU_CLK_OSC32M_DIV
131
#define CONFIG_CPU_CLK_OSC32M_DIV 0
132
#endif
133
137
#ifndef CONFIG_CPU_CLK_XTAL_DIV
138
#define CONFIG_CPU_CLK_XTAL_DIV 0
139
#endif
140
145
#ifdef DOXYGEN
149
#define CONFIG_CPU_CLK_SYS_XTAL
153
#define CONFIG_CPU_CLK_SYS_OSC32M
157
#define CONFIG_CPU_CLK_SYS_32K
158
#endif
/* def DOXYGEN */
161
/* Default system clock configuration selector */
162
#if !defined(CONFIG_CPU_CLK_SYS_XTAL) && !defined(CONFIG_CPU_CLK_SYS_OSC32M) && \
163
!defined(CONFIG_CPU_CLK_SYS_32K)
164
#if CONFIG_BOARD_HAS_XTAL
165
#define CONFIG_CPU_CLK_SYS_XTAL 1
166
#else
167
#define CONFIG_CPU_CLK_SYS_OSC32M 1
168
#endif
169
#endif
170
181
#ifndef CONFIG_CPU_CLK_AHB_DIV
182
#define CONFIG_CPU_CLK_AHB_DIV 1u
183
#endif
184
193
#ifndef CONFIG_CPU_CLK_APB_DIV
194
#define CONFIG_CPU_CLK_APB_DIV 1u
195
#endif
196
230
#define QN908X_CRP_PROTECT_PAGES(X) (255 - (X))
231
235
#define QN908X_CRP_MASS_ERASE_ALLOW (0x800)
239
#define QN908X_CRP_MASS_ERASE_DISALLOW (0x400)
240
244
#define QN908X_CRP_PAGE_ERASE_WRITE_ALLOW (0x2000)
248
#define QN908X_CRP_PAGE_ERASE_WRITE_DISALLOW (0x1000)
249
253
#define QN908X_CRP_FLASH_READ_ALLOW (0x8000)
257
#define QN908X_CRP_FLASH_READ_DISALLOW (0x4000)
258
262
#define QN908X_CRP_ISP_ENTRY_ALLOW (0x20000)
266
#define QN908X_CRP_ISP_ENTRY_DISALLOW (0x10000)
267
271
#define QN908X_CRP_EXTERNAL_ACCESS_ALLOW (0x80000)
275
#define QN908X_CRP_EXTERNAL_ACCESS_DISALLOW (0x40000)
276
282
#ifndef QN908X_CRP
283
#define QN908X_CRP \
284
(QN908X_CRP_PROTECT_PAGES(0) \
285
| QN908X_CRP_MASS_ERASE_ALLOW \
286
| QN908X_CRP_PAGE_ERASE_WRITE_ALLOW \
287
| QN908X_CRP_FLASH_READ_ALLOW \
288
| QN908X_CRP_ISP_ENTRY_ALLOW \
289
| QN908X_CRP_EXTERNAL_ACCESS_ALLOW)
290
#endif
/* QN908X_CRP */
291
297
#define CORTEXM_VECTOR_RESERVED_0X20 QN908X_CRP
298
299
/* Safety checks that the QN908X_CRP value is valid. */
300
#if !(QN908X_CRP & QN908X_CRP_MASS_ERASE_ALLOW) == \
301
!(QN908X_CRP & QN908X_CRP_MASS_ERASE_DISALLOW)
302
#error "Must select exactly one of QN908X_CRP_MASS_ERASE_* in the QN908X_CRP"
303
#endif
304
#if !(QN908X_CRP & QN908X_CRP_PAGE_ERASE_WRITE_ALLOW) == \
305
!(QN908X_CRP & QN908X_CRP_PAGE_ERASE_WRITE_DISALLOW)
306
#error \
307
"Must select exactly one of QN908X_CRP_PAGE_ERASE_WRITE_* in the QN908X_CRP"
308
#endif
309
#if !(QN908X_CRP & QN908X_CRP_FLASH_READ_ALLOW) == \
310
!(QN908X_CRP & QN908X_CRP_FLASH_READ_DISALLOW)
311
#error "Must select exactly one of QN908X_CRP_FLASH_READ_* in the QN908X_CRP"
312
#endif
313
#if !(QN908X_CRP & QN908X_CRP_ISP_ENTRY_ALLOW) == \
314
!(QN908X_CRP & QN908X_CRP_ISP_ENTRY_DISALLOW)
315
#error "Must select exactly one of QN908X_CRP_ISP_ENTRY_* in the QN908X_CRP"
316
#endif
317
#if !(QN908X_CRP & QN908X_CRP_EXTERNAL_ACCESS_ALLOW) == \
318
!(QN908X_CRP & QN908X_CRP_EXTERNAL_ACCESS_DISALLOW)
319
#error \
320
"Must select exactly one of QN908X_CRP_EXTERNAL_ACCESS_* in the QN908X_CRP"
321
#endif
322
323
#ifdef __cplusplus
324
}
325
#endif
326
Generated on Wed Oct 1 2025 21:55:43 by
1.9.1