Loading...
Searching...
No Matches
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
28extern "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 */