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 
19 #ifndef CPU_CONF_H
20 #define CPU_CONF_H
21 
22 #include "cpu_conf_common.h"
23 
24 #include "vendor/QN908XC.h"
25 #include "vendor/QN908XC_features.h"
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
35 #define CPU_DEFAULT_IRQ_PRIO (1U)
41 #define CPU_IRQ_NUMOF (NUMBER_OF_INT_VECTORS - 16)
49 #define CPU_FLASH_BASE (QN908X_ROM_START_ADDR)
53 #define CPU_HAS_BITBAND 1
73 #if !defined(CONFIG_BOARD_HAS_XTAL32K) || DOXYGEN
74 #define CONFIG_BOARD_HAS_XTAL32K 0
75 #endif
76 
81 #ifdef DOXYGEN
85 #define CONFIG_CPU_CLK_32K_XTAL
89 #define CONFIG_CPU_CLK_32K_RCO
90 #endif /* def DOXYGEN */
93 /* Default 32K clock selector config. */
94 #if !defined(CONFIG_CPU_CLK_32K_XTAL) && !defined(CONFIG_CPU_CLK_32K_RCO)
95 #if CONFIG_BOARD_HAS_XTAL32K
96 #define CONFIG_CPU_CLK_32K_XTAL 1
97 #else
98 #define CONFIG_CPU_CLK_32K_RCO 1
99 #endif
100 #endif
101 
106 #ifndef CONFIG_BOARD_HAS_XTAL
107 #define CONFIG_BOARD_HAS_XTAL 0
108 #endif
109 
113 #ifdef DOXYGEN
117 #define CONFIG_CPU_CLK_XTAL_16M
121 #define CONFIG_CPU_CLK_XTAL_32M
122 #endif /* def DOXYGEN */
125 /* Default XTAL setting. */
126 #if CONFIG_BOARD_HAS_XTAL && \
127  !defined(CONFIG_BOARD_HAS_XTAL_16M) && !defined(CONFIG_BOARD_HAS_XTAL_32M)
128 #define CONFIG_BOARD_HAS_XTAL_32M 1
129 #endif
130 
134 #ifndef CONFIG_CPU_CLK_OSC32M_DIV
135 #define CONFIG_CPU_CLK_OSC32M_DIV 0
136 #endif
137 
141 #ifndef CONFIG_CPU_CLK_XTAL_DIV
142 #define CONFIG_CPU_CLK_XTAL_DIV 0
143 #endif
144 
149 #ifdef DOXYGEN
153 #define CONFIG_CPU_CLK_SYS_XTAL
157 #define CONFIG_CPU_CLK_SYS_OSC32M
161 #define CONFIG_CPU_CLK_SYS_32K
162 #endif /* def DOXYGEN */
165 /* Default system clock configuration selector */
166 #if !defined(CONFIG_CPU_CLK_SYS_XTAL) && !defined(CONFIG_CPU_CLK_SYS_OSC32M) && \
167  !defined(CONFIG_CPU_CLK_SYS_32K)
168 #if CONFIG_BOARD_HAS_XTAL
169 #define CONFIG_CPU_CLK_SYS_XTAL 1
170 #else
171 #define CONFIG_CPU_CLK_SYS_OSC32M 1
172 #endif
173 #endif
174 
185 #ifndef CONFIG_CPU_CLK_AHB_DIV
186 #define CONFIG_CPU_CLK_AHB_DIV 1u
187 #endif
188 
197 #ifndef CONFIG_CPU_CLK_APB_DIV
198 #define CONFIG_CPU_CLK_APB_DIV 1u
199 #endif
200 
234 #define QN908X_CRP_PROTECT_PAGES(X) (255 - (X))
235 
239 #define QN908X_CRP_MASS_ERASE_ALLOW (0x800)
243 #define QN908X_CRP_MASS_ERASE_DISALLOW (0x400)
244 
248 #define QN908X_CRP_PAGE_ERASE_WRITE_ALLOW (0x2000)
252 #define QN908X_CRP_PAGE_ERASE_WRITE_DISALLOW (0x1000)
253 
257 #define QN908X_CRP_FLASH_READ_ALLOW (0x8000)
261 #define QN908X_CRP_FLASH_READ_DISALLOW (0x4000)
262 
266 #define QN908X_CRP_ISP_ENTRY_ALLOW (0x20000)
270 #define QN908X_CRP_ISP_ENTRY_DISALLOW (0x10000)
271 
275 #define QN908X_CRP_EXTERNAL_ACCESS_ALLOW (0x80000)
279 #define QN908X_CRP_EXTERNAL_ACCESS_DISALLOW (0x40000)
280 
286 #ifndef QN908X_CRP
287 #define QN908X_CRP \
288  (QN908X_CRP_PROTECT_PAGES(0) \
289  | QN908X_CRP_MASS_ERASE_ALLOW \
290  | QN908X_CRP_PAGE_ERASE_WRITE_ALLOW \
291  | QN908X_CRP_FLASH_READ_ALLOW \
292  | QN908X_CRP_ISP_ENTRY_ALLOW \
293  | QN908X_CRP_EXTERNAL_ACCESS_ALLOW)
294 #endif /* QN908X_CRP */
295 
301 #define CORTEXM_VECTOR_RESERVED_0X20 QN908X_CRP
302 
303 /* Safety checks that the QN908X_CRP value is valid. */
304 #if !(QN908X_CRP & QN908X_CRP_MASS_ERASE_ALLOW) == \
305  !(QN908X_CRP & QN908X_CRP_MASS_ERASE_DISALLOW)
306 #error "Must select exactly one of QN908X_CRP_MASS_ERASE_* in the QN908X_CRP"
307 #endif
308 #if !(QN908X_CRP & QN908X_CRP_PAGE_ERASE_WRITE_ALLOW) == \
309  !(QN908X_CRP & QN908X_CRP_PAGE_ERASE_WRITE_DISALLOW)
310 #error \
311  "Must select exactly one of QN908X_CRP_PAGE_ERASE_WRITE_* in the QN908X_CRP"
312 #endif
313 #if !(QN908X_CRP & QN908X_CRP_FLASH_READ_ALLOW) == \
314  !(QN908X_CRP & QN908X_CRP_FLASH_READ_DISALLOW)
315 #error "Must select exactly one of QN908X_CRP_FLASH_READ_* in the QN908X_CRP"
316 #endif
317 #if !(QN908X_CRP & QN908X_CRP_ISP_ENTRY_ALLOW) == \
318  !(QN908X_CRP & QN908X_CRP_ISP_ENTRY_DISALLOW)
319 #error "Must select exactly one of QN908X_CRP_ISP_ENTRY_* in the QN908X_CRP"
320 #endif
321 #if !(QN908X_CRP & QN908X_CRP_EXTERNAL_ACCESS_ALLOW) == \
322  !(QN908X_CRP & QN908X_CRP_EXTERNAL_ACCESS_DISALLOW)
323 #error \
324  "Must select exactly one of QN908X_CRP_EXTERNAL_ACCESS_* in the QN908X_CRP"
325 #endif
326 
327 #ifdef __cplusplus
328 }
329 #endif
330 
331 #endif /* CPU_CONF_H */