mirror of https://github.com/ARMmbed/mbed-os.git
445 lines
14 KiB
C
445 lines
14 KiB
C
/*******************************************************************************
|
|
* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included
|
|
* in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
|
|
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* Except as contained in this notice, the name of Maxim Integrated
|
|
* Products, Inc. shall not be used except as stated in the Maxim Integrated
|
|
* Products, Inc. Branding Policy.
|
|
*
|
|
* The mere transfer of this software does not imply any licenses
|
|
* of trade secrets, proprietary technology, copyrights, patents,
|
|
* trademarks, maskwork rights, or any other form of intellectual
|
|
* property whatsoever. Maxim Integrated Products, Inc. retains all
|
|
* ownership rights.
|
|
*
|
|
* $Date: 2016-06-03 14:21:38 -0500 (Fri, 03 Jun 2016) $
|
|
* $Revision: 23194 $
|
|
*
|
|
******************************************************************************/
|
|
|
|
/**
|
|
* @file mxc_sys.h
|
|
* @brief System level header file.
|
|
*/
|
|
|
|
#ifndef _MXC_SYS_H_
|
|
#define _MXC_SYS_H_
|
|
|
|
#include "mxc_config.h"
|
|
#include "clkman.h"
|
|
#include "ioman.h"
|
|
#include "gpio.h"
|
|
#include "i2cm_regs.h"
|
|
#include "i2cs_regs.h"
|
|
#include "tmr_regs.h"
|
|
#include "pt_regs.h"
|
|
#include "wdt_regs.h"
|
|
#include "owm_regs.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/***** Definitions *****/
|
|
|
|
/** @brief System Configuration Object */
|
|
typedef struct {
|
|
clkman_scale_t clk_scale; /** desired clock scale value for the peripheral */
|
|
ioman_cfg_t io_cfg; /** IOMAN configuration object */
|
|
} sys_cfg_t;
|
|
|
|
/** @brief Watchdog System Configuration Object */
|
|
typedef struct {
|
|
clkman_wdt_clk_select_t clk; /** select the clock source for the watchdog */
|
|
clkman_scale_t clk_scale; /** desired clock scale value for the peripheral */
|
|
/** clk_scale is only applied if the system clock is used as the clk */
|
|
} sys_cfg_wdt_t;
|
|
|
|
/** @brief UART System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_uart_t;
|
|
|
|
/** @brief I2CM System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_i2cm_t;
|
|
|
|
/** @brief I2CS System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_i2cs_t;
|
|
|
|
/** @brief SPIM System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_spim_t;
|
|
|
|
/** @brief SPIX System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_spix_t;
|
|
|
|
/** @brief SPIS System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_spis_t;
|
|
|
|
/** @brief OWM System Configuration Object */
|
|
typedef sys_cfg_t sys_cfg_owm_t;
|
|
|
|
/** @brief Timer System Configuration Object */
|
|
typedef gpio_cfg_t sys_cfg_tmr_t;
|
|
|
|
/** @brief Pulse Train System Configuration Object */
|
|
typedef gpio_cfg_t sys_cfg_pt_t;
|
|
typedef clkman_scale_t sys_pt_clk_scale;
|
|
|
|
/***** Include Files *****/
|
|
/* These includes require the above types to be defined first */
|
|
#include "uart.h"
|
|
#include "spim.h"
|
|
|
|
/***** Function Prototypes *****/
|
|
|
|
/**
|
|
* @brief Get the frequency of a clock scaler
|
|
* @param clk_scale value of clk_scale field from clk_ctrl register
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_GetFreq(uint32_t clk_scale);
|
|
|
|
/**
|
|
* @brief Get the frequency of the CPU
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_CPU_GetFreq(void);
|
|
|
|
/**
|
|
* @brief System level initialization for ADC module.
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_ADC_Init(void);
|
|
|
|
/**
|
|
* @brief System level initialization for AES module.
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_AES_Init(void);
|
|
|
|
/**
|
|
* @brief System level initialization for GPIO module.
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_GPIO_Init(void);
|
|
|
|
/**
|
|
* @brief System level initialization for UART module.
|
|
* @param uart Pointer to UART module registers
|
|
* @param uart_cfg UART configuration object
|
|
* @param sys_cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_UART_Init(mxc_uart_regs_t *uart, const uart_cfg_t *uart_cfg, const sys_cfg_uart_t *sys_cfg);
|
|
|
|
/**
|
|
* @brief System level shutdown for UART module
|
|
* @param uart Pointer to UART module registers
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_UART_Shutdown(mxc_uart_regs_t *uart);
|
|
|
|
/**
|
|
* @brief Get the frequency of the UART module source clock
|
|
* @param uart Pointer to UART module registers
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_UART_GetFreq(mxc_uart_regs_t *uart);
|
|
|
|
/**
|
|
* @brief System level initialization for I2CM module.
|
|
* @param i2cm Pointer to I2CM module registers
|
|
* @param cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_I2CM_Init(mxc_i2cm_regs_t *i2cm, const sys_cfg_i2cm_t *cfg);
|
|
|
|
/**
|
|
* @brief System level shutdown for I2CM module
|
|
* @param i2cm Pointer to I2CM module registers
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_I2CM_Shutdown(mxc_i2cm_regs_t *i2cm);
|
|
|
|
/**
|
|
* @brief Get the frequency of the I2CM module source clock
|
|
* @param i2cm Pointer to I2CM module registers
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_I2CM_GetFreq(mxc_i2cm_regs_t *i2cm);
|
|
|
|
/**
|
|
* @brief System level initialization for I2CS module.
|
|
* @param i2cs Pointer to I2CS module registers
|
|
* @param cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_I2CS_Init(mxc_i2cs_regs_t *i2cs, const sys_cfg_i2cs_t *cfg);
|
|
|
|
/**
|
|
* @brief System level shutdown for I2CS module
|
|
* @param i2cs Pointer to I2CS module registers
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_I2CS_Shutdown(mxc_i2cs_regs_t *i2cs);
|
|
|
|
/**
|
|
* @brief Get the frequency of the I2CS module source clock
|
|
* @param i2cs Pointer to I2CS module registers
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_I2CS_GetFreq(mxc_i2cs_regs_t *i2cs);
|
|
|
|
/**
|
|
* @brief System level initialization for SPIM module.
|
|
* @param spim Pointer to SPIM module registers
|
|
* @param spim_cfg SPIM configuration object
|
|
* @param sys_cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_SPIM_Init(mxc_spim_regs_t *spim, const spim_cfg_t *spim_cfg, const sys_cfg_spim_t *sys_cfg);
|
|
|
|
/**
|
|
* @brief System level shutdown for SPIM module
|
|
* @param spim Pointer to SPIM module registers
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_SPIM_Shutdown(mxc_spim_regs_t *spim);
|
|
|
|
/**
|
|
* @brief Get the frequency of the SPIM module source clock
|
|
* @param spim Pointer to SPIM module registers
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_SPIM_GetFreq(mxc_spim_regs_t *spim);
|
|
|
|
/**
|
|
* @brief System level initialization for SPIX module.
|
|
* @param sys_cfg System configuration object
|
|
* @param baud Baud rate for clock divider configuration
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_SPIX_Init(const sys_cfg_spix_t *sys_cfg, uint32_t baud);
|
|
|
|
/**
|
|
* @brief System level shutdown for SPIX module
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_SPIX_Shutdown(void);
|
|
|
|
/**
|
|
* @brief Get the frequency of the SPIX module source clock
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_SPIX_GetFreq(void);
|
|
|
|
/**
|
|
* @brief System level initialization for SPIS module.
|
|
* @param sys_cfg System configuration object.
|
|
* @returns E_NO_ERROR if everything is successful.
|
|
*/
|
|
int SYS_SPIS_Init(const sys_cfg_spix_t *sys_cfg);
|
|
|
|
/**
|
|
* @brief System level shutdown for SPIS module
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_SPIS_Shutdown(void);
|
|
|
|
/**
|
|
* @brief Get the frequency of the SPIS module source clock
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_SPIS_GetFreq(void);
|
|
|
|
/**
|
|
* @brief System level initialization for OWM module.
|
|
* @param owm Pointer to OWM module registers
|
|
* @param owm_cfg OWM configuration object
|
|
* @param sys_cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_OWM_Init(mxc_owm_regs_t *owm, const sys_cfg_owm_t *sys_cfg);
|
|
|
|
/**
|
|
* @brief System level shutdown for OWM module
|
|
* @param owm Pointer to OWM module registers
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_OWM_Shutdown(mxc_owm_regs_t *owm);
|
|
|
|
/**
|
|
* @brief Get the frequency of the OWM module source clock
|
|
* @param owm Pointer to OWM module registers
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_OWM_GetFreq(mxc_owm_regs_t *owm);
|
|
|
|
/**
|
|
* @brief System level initialization for TMR module.
|
|
* @param tmr Pointer to TMR module registers
|
|
* @param cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_TMR_Init(mxc_tmr_regs_t *tmr, const sys_cfg_tmr_t *cfg);
|
|
|
|
/**
|
|
* @brief Get the frequency of the TMR module source clock
|
|
* @param spim Pointer to TMR module registers
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_TMR_GetFreq(mxc_tmr_regs_t *tmr);
|
|
|
|
/**
|
|
* @brief Get the frequency of the Pulse Train module source clock
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_PT_GetFreq(void);
|
|
|
|
/**
|
|
* @brief Initialize the global pulse train clock scale
|
|
* @param clk_scale scale the system clock for the PT clock
|
|
*/
|
|
void SYS_PT_Init(sys_pt_clk_scale clk_scale);
|
|
|
|
/**
|
|
* @brief System level initialization for Pulse Train module.
|
|
* @param pt Pointer to PT module registers
|
|
* @param cfg System configuration object
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_PT_Config(mxc_pt_regs_t *pt, const sys_cfg_pt_t *cfg);
|
|
|
|
/**
|
|
* @brief System level initialization for USB device.
|
|
* @param enable 1 to enable the peripheral, 0 to disable.
|
|
*/
|
|
void SYS_USB_Enable(uint8_t enable);
|
|
|
|
/**
|
|
* @brief System Tick Configuration Helper
|
|
*
|
|
* The function enables selection of the external clock source for the
|
|
* System Tick Timer. It initializes the System Timer and its interrupt,
|
|
* and starts the System Tick Timer. Counter is in free running mode to generate
|
|
* periodic interrupts.
|
|
|
|
* @param ticks Number of ticks between two interrupts.
|
|
* @param clk_src Selects between default SystemClock or External Clock.
|
|
* - 0 Use external clock source
|
|
* - 1 SystemClock
|
|
* @return E_NO_ERROR Function succeeded.
|
|
* @return E_INVALID Invalid reload value requested.
|
|
*
|
|
* @see CLKMAN_SetRTOSMode(uint8_t enable) if using the external clock source to drive the System Tick Timer
|
|
*
|
|
*/
|
|
int SYS_SysTick_Config(uint32_t ticks, int clk_src);
|
|
|
|
/**
|
|
* @brief Disable System Tick timer
|
|
*
|
|
*
|
|
*/
|
|
__STATIC_INLINE void SYS_SysTick_Disable(void)
|
|
{
|
|
SysTick->CTRL = 0;
|
|
}
|
|
|
|
/**
|
|
* @brief Delay a requested number of SysTick Timer Ticks.
|
|
* @param ticks Number of System Ticks to delay.
|
|
* @note This delay function is based on the clock used for the SysTick timer
|
|
* if the SysTick timer is enabled. If the SysTick timer is
|
|
* not enabled, the current SysTick registers are saved and the
|
|
* timer will use the SystemClock as the source for the delay.
|
|
* The delay is measured in clock ticks and is not based on the
|
|
* SysTick interval.
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_SysTick_Delay(uint32_t ticks);
|
|
|
|
/**
|
|
* @brief Get the frequency of the SysTick Timer
|
|
* @returns frequency in Hz
|
|
*/
|
|
uint32_t SYS_SysTick_GetFreq(void);
|
|
|
|
/**
|
|
* @brief Delay a requested number of microseconds.
|
|
* @param us Number of microseconds to delay.
|
|
* @note Calls SYS_SysTick_Delay.
|
|
*/
|
|
__STATIC_INLINE void SYS_SysTick_DelayUs(uint32_t us)
|
|
{
|
|
SYS_SysTick_Delay((uint32_t)(((uint64_t)SYS_SysTick_GetFreq() * us) / 1000000));
|
|
}
|
|
|
|
/**
|
|
* @brief System level initialization for RTC module.
|
|
* @returns E_NO_ERROR if everything is successful
|
|
*/
|
|
int SYS_RTC_Init(void);
|
|
|
|
/**
|
|
* @brief Select VDDIO for the specified GPIO pin.
|
|
*/
|
|
void SYS_IOMAN_UseVDDIO(const gpio_cfg_t *cfg);
|
|
|
|
/**
|
|
* @brief Select VDDIOH for the specified GPIO pin.
|
|
*/
|
|
void SYS_IOMAN_UseVDDIOH(const gpio_cfg_t *cfg);
|
|
|
|
/**
|
|
* @brief System level initialization for Watchdog module.
|
|
* @param wdt Pointer to Watchdog module registers
|
|
* @param cfg Watchdog System configuration object
|
|
*/
|
|
void SYS_WDT_Init(mxc_wdt_regs_t *wdt, const sys_cfg_wdt_t *cfg);
|
|
|
|
/**
|
|
* @brief System level initialization for PRNG module.
|
|
* Enable crypto clock and set divisors to 1 if disabled
|
|
*/
|
|
void SYS_PRNG_Init(void);
|
|
|
|
/**
|
|
* @brief System level initialization for MAA module.
|
|
* Enable crypto clock and set divisors to 1 if disabled
|
|
*/
|
|
void SYS_MAA_Init(void);
|
|
|
|
/*
|
|
* @brief Gets the size of the SRAM
|
|
* @returns size of SRAM in bytes
|
|
*/
|
|
uint32_t SYS_SRAM_GetSize(void);
|
|
|
|
/*
|
|
* @brief Gets the size of the Flash
|
|
* @returns size of Flash in bytes
|
|
*/
|
|
uint32_t SYS_FLASH_GetSize(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _MXC_SYS_H_*/
|