The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
Diff: TARGET_SDT32620B/TOOLCHAIN_IAR/mxc_sys.h
- Revision:
- 171:3a7713b1edbc
- Parent:
- 167:84c0a372a020
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_SDT32620B/TOOLCHAIN_IAR/mxc_sys.h Thu Nov 08 11:45:42 2018 +0000 @@ -0,0 +1,444 @@ +/******************************************************************************* + * 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_*/