mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
e381317fbf
cpu, nrf5x_common: fix sign-compare in periph/flashpage drivers, periph_common: fix sign-compare in flashpage cpu, sam0_common: fix sign-compare error in periph/gpio cpu, cc2538: fix sign-compare in periph/timer cpu, sam3: fix sign-compare in periph/gpio cpu, stm32_common: fix sign-compare in periph/pwm cpu, stm32_common: fix sign-compare in periph/timer cpu, stm32_common: fix sign-compare in periph/flashpage cpu, nrf5x_common: fix sign-compare in radio/nrfmin cpu, samd21: fix sign-compare in periph/pwm cpu, ezr32wg: fix sign-compare in periph/gpio cpu, ezr32wg: fix sign-compare in periph/timer drivers, ethos: fix sign-compare sys, net: fix sign-compare cpu, atmega_common: fix sign-compare error cpu, msp430fxyz: fix sign-compare in periph/gpio boards, msb-430-common: fix sign-compare in board_init driver, cc2420: fix sign-compared sys/net: fix sign-compare in gnrc_tftp driver, pcd8544: fix sign-compare driver, pn532: fix sign-compare driver, sdcard_spi: fix sign-compare tests: fix sign_compare sys/net, lwmac: fix sign_compare pkg, lwip: fix sign-compare boards, waspmote: make CORECLOCK unsigned long to fix sign_compare error tests, sock_ip: fix sign compare tests, msg_avail: fix sign compare tests, sock_udp: fix sign compare boards: fix sign-compare for calliope and microbit matrix
166 lines
8.1 KiB
C
166 lines
8.1 KiB
C
/*
|
|
* Copyright (C) 2014 Loci Controls Inc.
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
|
|
/**
|
|
* @defgroup cpu_cc2538_sysctrl CC2538 System Control
|
|
* @ingroup cpu_cc2538_regs
|
|
* @{
|
|
*
|
|
* @file
|
|
* @brief CC2538 System Control interface
|
|
*
|
|
* @author Ian Martin <ian@locicontrols.com>
|
|
*/
|
|
|
|
#ifndef CC2538_SYS_CTRL_H
|
|
#define CC2538_SYS_CTRL_H
|
|
|
|
#include "cc2538.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief System Control component registers
|
|
*/
|
|
typedef struct {
|
|
|
|
/**
|
|
* @brief Clock control register
|
|
*/
|
|
union {
|
|
cc2538_reg_t CLOCK_CTRL; /**< Clock control register */
|
|
struct {
|
|
cc2538_reg_t SYS_DIV : 3; /**< System clock rate setting */
|
|
cc2538_reg_t RESERVED1 : 5; /**< Reserved bits */
|
|
cc2538_reg_t IO_DIV : 3; /**< I/O clock rate setting */
|
|
cc2538_reg_t RESERVED2 : 5; /**< Reserved bits */
|
|
cc2538_reg_t OSC : 1; /**< System clock oscillator selection */
|
|
cc2538_reg_t OSC_PD : 1; /**< Oscillator power-down */
|
|
cc2538_reg_t RESERVED3 : 3; /**< Reserved bits */
|
|
cc2538_reg_t AMP_DET : 1; /**< Amplitude detector of XOSC during power up */
|
|
cc2538_reg_t RESERVED4 : 2; /**< Reserved bits */
|
|
cc2538_reg_t OSC32K : 1; /**< 32-kHz clock oscillator selection */
|
|
cc2538_reg_t OSC32K_CADIS : 1; /**< Disable calibration 32-kHz RC oscillator */
|
|
cc2538_reg_t RESERVED5 : 6; /**< Reserved bits */
|
|
} CLOCK_CTRLbits;
|
|
} cc2538_sys_ctrl_clk_ctrl;
|
|
|
|
/**
|
|
* @brief Clock status register
|
|
*/
|
|
union {
|
|
cc2538_reg_t CLOCK_STA; /**< Clock status register */
|
|
struct {
|
|
cc2538_reg_t SYS_DIV : 3; /**< Current functional frequency for system clock */
|
|
cc2538_reg_t RESERVED6 : 5; /**< Reserved bits */
|
|
cc2538_reg_t IO_DIV : 3; /**< Current functional frequency for IO_CLK */
|
|
cc2538_reg_t RESERVED7 : 5; /**< Reserved bits */
|
|
cc2538_reg_t OSC : 1; /**< Current clock source selected */
|
|
cc2538_reg_t OSC_PD : 1; /**< Oscillator power-down */
|
|
cc2538_reg_t HSOSC_STB : 1; /**< HSOSC stable status */
|
|
cc2538_reg_t XOSC_STB : 1; /**< XOSC stable status */
|
|
cc2538_reg_t SOURCE_CHANGE : 1; /**< System clock source change */
|
|
cc2538_reg_t RESERVED8 : 1; /**< Reserved bits */
|
|
cc2538_reg_t RST : 2; /**< Last source of reset */
|
|
cc2538_reg_t OSC32K : 1; /**< Current 32-kHz clock oscillator selected */
|
|
cc2538_reg_t OSC32K_CALDIS : 1; /**< Disable calibration 32-kHz RC oscillator */
|
|
cc2538_reg_t SYNC_32K : 1; /**< 32-kHz clock source synced to undivided system clock (16 or 32 MHz) */
|
|
cc2538_reg_t RESERVED9 : 5; /**< Reserved bits */
|
|
} CLOCK_STAbits;
|
|
} cc2538_sys_ctrl_clk_sta;
|
|
|
|
cc2538_reg_t RCGCGPT; /**< Module clocks for GPT[3:0] when the CPU is in active (run) mode */
|
|
cc2538_reg_t SCGCGPT; /**< Module clocks for GPT[3:0] when the CPU is in sleep mode */
|
|
cc2538_reg_t DCGCGPT; /**< Module clocks for GPT[3:0] when the CPU is in PM0 */
|
|
cc2538_reg_t SRGPT; /**< Reset for GPT[3:0]. */
|
|
cc2538_reg_t RCGCSSI; /**< Module clocks for SSI[1:0] when the CPU is in active (run) mode */
|
|
cc2538_reg_t SCGCSSI; /**< Module clocks for SSI[1:0] when the CPU is insSleep mode */
|
|
cc2538_reg_t DCGCSSI; /**< Module clocks for SSI[1:0] when the CPU is in PM0 */
|
|
cc2538_reg_t SRSSI; /**< Reset for SSI[1:0]. */
|
|
|
|
/**
|
|
* @brief UART module clock register - active mode
|
|
*/
|
|
union {
|
|
cc2538_reg_t RCGCUART; /**< Module clocks for UART[1:0] when the CPU is in active (run) mode */
|
|
struct {
|
|
cc2538_reg_t UART0 : 1; /**< Enable UART0 clock in active (run) mode */
|
|
cc2538_reg_t UART1 : 1; /**< Enable UART1 clock in active (run) mode */
|
|
cc2538_reg_t RESERVED : 30; /**< Reserved bits */
|
|
} RCGCUARTbits;
|
|
} cc2538_sys_ctrl_unnamed1;
|
|
|
|
/**
|
|
* @brief UART module clock register - sleep mode
|
|
*/
|
|
union {
|
|
cc2538_reg_t SCGCUART; /**< Module clocks for UART[1:0] when the CPU is in sleep mode */
|
|
struct {
|
|
cc2538_reg_t UART0 : 1; /**< Enable UART0 clock in sleep mode */
|
|
cc2538_reg_t UART1 : 1; /**< Enable UART1 clock in sleep mode */
|
|
cc2538_reg_t RESERVED : 30; /**< Reserved bits */
|
|
} SCGCUARTbits;
|
|
} cc2538_sys_ctrl_unnamed2;
|
|
|
|
/**
|
|
* @brief UART module clock register - PM0 mode
|
|
*/
|
|
union {
|
|
cc2538_reg_t DCGCUART; /**< Module clocks for UART[1:0] when the CPU is in PM0 */
|
|
struct {
|
|
cc2538_reg_t UART0 : 1; /**< Enable UART0 clock in PM0 */
|
|
cc2538_reg_t UART1 : 1; /**< Enable UART1 clock in PM0 */
|
|
cc2538_reg_t RESERVED : 30; /**< Reserved bits */
|
|
} DCGCUARTbits;
|
|
} cc2538_sys_ctrl_unnamed3;
|
|
|
|
cc2538_reg_t SRUART; /**< Reset for UART[1:0]. */
|
|
cc2538_reg_t RCGCI2C; /**< Module clocks for I2C when the CPU is in active (run) mode */
|
|
cc2538_reg_t SCGCI2C; /**< Module clocks for I2C when the CPU is in sleep mode */
|
|
cc2538_reg_t DCGCI2C; /**< Module clocks for I2C when the CPU is in PM0 */
|
|
cc2538_reg_t SRI2C; /**< Reset for I2C. */
|
|
cc2538_reg_t RCGCSEC; /**< Module clocks for the security module when the CPU is in active (run) mode */
|
|
cc2538_reg_t SCGCSEC; /**< Module clocks for the security module when the CPU is in sleep mode */
|
|
cc2538_reg_t DCGCSEC; /**< Module clocks for the security module when the CPU is in PM0 */
|
|
cc2538_reg_t SRSEC; /**< Reset for the security module. */
|
|
cc2538_reg_t PMCTL; /**< Power mode. */
|
|
cc2538_reg_t SRCRC; /**< CRC on state retention. */
|
|
cc2538_reg_t RESERVED10[5]; /**< Reserved bits */
|
|
cc2538_reg_t PWRDBG; /**< Power debug register */
|
|
cc2538_reg_t RESERVED11[2]; /**< Reserved bits */
|
|
cc2538_reg_t CLD; /**< This register controls the clock loss detection feature. */
|
|
cc2538_reg_t RESERVED12[4]; /**< Reserved bits */
|
|
cc2538_reg_t IWE; /**< This register controls interrupt wake-up. */
|
|
cc2538_reg_t I_MAP; /**< This register selects which interrupt map to be used. */
|
|
cc2538_reg_t RESERVED13[3]; /**< Reserved bits */
|
|
cc2538_reg_t RCGCRFC; /**< This register defines the module clocks for RF CORE when the CPU is in active (run) mode */
|
|
cc2538_reg_t SCGCRFC; /**< This register defines the module clocks for RF CORE when the CPU is in sleep mode */
|
|
cc2538_reg_t DCGCRFC; /**< This register defines the module clocks for RF CORE when the CPU is in PM0 */
|
|
cc2538_reg_t EMUOVR; /**< This register defines the emulator override controls for power mode and peripheral clock gate. */
|
|
} cc2538_sys_ctrl_t;
|
|
|
|
#define SYS_CTRL ( (cc2538_sys_ctrl_t*)0x400d2000 ) /**< One and only instance of the System Control module */
|
|
|
|
/**
|
|
* @brief Compute the current system clock frequency based on the SYS_CTRL register states
|
|
*/
|
|
#define sys_clock_freq() ((uint32_t)\
|
|
(SYS_CTRL->cc2538_sys_ctrl_clk_ctrl.CLOCK_CTRLbits.OSC ? \
|
|
RCOSC16M_FREQ : XOSC32M_FREQ) >> \
|
|
SYS_CTRL->cc2538_sys_ctrl_clk_ctrl.CLOCK_CTRLbits.SYS_DIV)
|
|
|
|
#ifdef __cplusplus
|
|
} /* end extern "C" */
|
|
#endif
|
|
|
|
#endif /* CC2538_SYS_CTRL_H */
|
|
|
|
/** @} */
|