Loading...
Searching...
No Matches
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
17
18#include "cpu_conf_common.h"
19
20#include "vendor/QN908XC.h"
21#include "vendor/QN908XC_features.h"
22
23#ifdef __cplusplus
24extern "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
51
65
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 */
88
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 */
120
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 */
160
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
198
219
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
278
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