Loading...
Searching...
No Matches
periph_cpu.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015-2016 Freie Universität Berlin
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
17
18#include "cpu_conf.h"
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24#ifndef DOXYGEN
25
30#if defined(CPU_LINE_STM32F103xB) || defined(CPU_LINE_STM32F103xE)
31#define STM32_BOOTLOADER_ADDR (0x1FFFF000)
32#endif
33
37#define STM32_OPTION_BYTES ((uint32_t*) 0x1FFFF800)
38#define GET_RDP(x) (x & 0xFF)
39
40#endif /* ndef DOXYGEN */
41
46#define RTT_IRQ_PRIO 1
47
48#define RTT_DEV RTC
49#define RTT_IRQ RTC_IRQn
50#define RTT_ISR isr_rtc
51
52#define RTT_MAX_VALUE (0xffffffff)
53#define RTT_CLOCK_FREQUENCY (32768U) /* in Hz */
54#define RTT_MIN_FREQUENCY (1U) /* in Hz */
55/* RTC frequency of 32kHz is not recommended, see RM0008 Rev 20, p490 */
56#define RTT_MAX_FREQUENCY (RTT_CLOCK_FREQUENCY / 2) /* in Hz */
58
62#define ADC_DEVS (2U)
63
78enum {
79 GPIO_CRL_MODE0_INPUT = (0x0 << GPIO_CRL_MODE0_Pos),
80 GPIO_CRL_MODE0_OUTPUT_10MHZ = (0x1 << GPIO_CRL_MODE0_Pos),
81 GPIO_CRL_MODE0_OUTPUT_2MHZ = (0x2 << GPIO_CRL_MODE0_Pos),
82 GPIO_CRL_MODE0_OUTPUT_50MHZ = (0x3 << GPIO_CRL_MODE0_Pos),
83};
84
95enum {
96 GPIO_CRL_CNF0_INPUT_ANALOG = (0x0 << GPIO_CRL_CNF0_Pos),
97 GPIO_CRL_CNF0_INPUT_FLOATING = (0x1 << GPIO_CRL_CNF0_Pos),
98 GPIO_CRL_CNF0_INPUT_PULL = (0x2 << GPIO_CRL_CNF0_Pos),
99 GPIO_CRL_CNF0_OUTPUT_PUSH_PULL = (0x0 << GPIO_CRL_CNF0_Pos),
100 GPIO_CRL_CNF0_OUTPUT_OPEN_DRAIN = (0x1 << GPIO_CRL_CNF0_Pos),
101 GPIO_CRL_CNF0_AF_PUSH_PULL = (0x2 << GPIO_CRL_CNF0_Pos),
102 GPIO_CRL_CNF0_AF_OPEN_DRAIN = (0x3 << GPIO_CRL_CNF0_Pos),
103};
105
112typedef enum {
121 SWJ_CFG_NO_NJTRST = AFIO_MAPR_SWJ_CFG_NOJNTRST,
125 SWJ_CFG_NO_JTAG_DP = AFIO_MAPR_SWJ_CFG_JTAGDISABLE,
130 SWJ_CFG_DISABLED = AFIO_MAPR_SWJ_CFG_DISABLE,
132
133#ifndef CONFIG_AFIO_MAPR_SWJ_CFG
141#define CONFIG_AFIO_MAPR_SWJ_CFG SWJ_CFG_NO_JTAG_DP
142#endif
143
150static inline uint32_t afio_mapr_read(void)
151{
152 return AFIO->MAPR & (~(AFIO_MAPR_SWJ_CFG_Msk));
153}
154
162static inline void afio_mapr_write(uint32_t new_value)
163{
164 AFIO->MAPR = CONFIG_AFIO_MAPR_SWJ_CFG | new_value;
165}
166
167#ifdef __cplusplus
168}
169#endif
170
@ SWJ_CFG_NO_NJTRST
JTAG enabled, but NJTRST disabled and pin PB4 usable as GPIO.
Definition cpu_conf.h:56
static uint32_t afio_mapr_read(void)
Read the current value of the AFIO->MAPR register reproducibly.
Definition periph_cpu.h:150
afio_mapr_swj_cfg_t
Possible values of the SWJ_CFG field in the AFIO->MAPR register.
Definition periph_cpu.h:112
@ SWJ_CFG_NO_JTAG_DP
Only SW-DP enabled, JTAG pins usable as GPIOS.
Definition periph_cpu.h:125
@ SWJ_CFG_DISABLED
Neither JTAG-DP nor SW-DP enabled, JTAG and SWD pins usable as GPIOS.
Definition periph_cpu.h:130
@ SWJ_CFG_FULL_SWJ
Both JTAG-DP and SW-DP enabled, reset state.
Definition periph_cpu.h:116
#define CONFIG_AFIO_MAPR_SWJ_CFG
By default, disable JTAG and keep only SWD.
Definition periph_cpu.h:141
static void afio_mapr_write(uint32_t new_value)
Write to the AFIO->MAPR register apply the SWJ configuration specified via CONFIG_AFIO_MAPR_SWJ_CFG.
Definition periph_cpu.h:162