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
9#pragma once
10
20
21#include "cpu_conf_common.h"
22
23#include "vendor/QN908XC.h"
24#include "vendor/QN908XC_features.h"
25
26#ifdef __cplusplus
27extern "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
54
68
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 */
91
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 */
123
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 */
163
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
201
222
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
281
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