473 lines
13 KiB
C
473 lines
13 KiB
C
/******************************************************************************
|
||
*
|
||
* @brief SIM 驱动头文件.
|
||
*
|
||
******************************************************************************/
|
||
#ifndef SIM_H_
|
||
#define SIM_H_
|
||
|
||
typedef enum {
|
||
ID_TYPE_FAMID, /*!< NV32F100x系列 ID */
|
||
ID_TYPE_SUBFAMID, /*!< NV32F100x子系列 ID */
|
||
ID_TYPE_REVID, /*!< 器件版本 ID */
|
||
ID_TYPE_PINID /*!< 器件引脚 ID */
|
||
} IDType;
|
||
|
||
|
||
#if defined(CPU_NV32)
|
||
typedef struct{
|
||
struct{
|
||
uint32_t bEnableCLKOUT : 1; /*!< 1: 使能 , 0: 禁用 */
|
||
uint32_t bTXDME : 1; /*!< 1: 使能 TXDME, 0: 禁用 */
|
||
uint32_t bETMSYNC : 1; /*!< 1: 使能 ETM SYNC, 0: 未触发任何同步 */
|
||
uint32_t bRXDFE : 1; /*!< 1: 使能 RXD 滤波, 0: 无滤波 */
|
||
uint32_t bRXDCE : 1; /*!< 1: 使能 RXD 捕捉, 0: 无捕捉 */
|
||
uint32_t bACIC : 1; /*!< 1: ACMP0的输出通道连接到ETM1的输入通道0, 0: 无连接 */
|
||
uint32_t bRTCC : 1; /*!< 1: RTC溢出连接到ETM1输入通道1, 0: 无连接 */
|
||
uint32_t u8ADHWT : 2; /*!< 选择ADC转换硬件触发源 */
|
||
uint32_t bDisableSWD : 1; /*!< 1: 禁用SWD, 0: 使能 */
|
||
uint32_t bDisableRESET : 1; /*!< 1: 禁用复位引脚, 0: 使能 */
|
||
uint32_t bDisableNMI : 1; /*!< 1: 禁用NMI中断输入引脚, 0:使能 */
|
||
uint32_t bBusDiv : 1; /*!< 总线分频系数 */
|
||
} sBits;
|
||
uint8_t u8Delay; /*!< ETM触发ADC转换延时值 */
|
||
uint8_t u8BusRef; /*!< 总线参考 */
|
||
uint32_t u32PinSel; /*!< 引脚选择寄存器的值*/
|
||
uint32_t u32SCGC; /*!< 时钟选通寄存器的值 */
|
||
} SIM_ConfigType, *SIM_ConfigPtr; /*!< SIM模块配置结构体类型 */
|
||
#endif
|
||
|
||
|
||
#if defined(CPU_NV32)
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 设置ETM2触发ADC转换的延时时间
|
||
*
|
||
* @param[in] u8Delay 延时时间模数值,参考时钟采用总线时钟分频
|
||
*
|
||
* @return none
|
||
*
|
||
* @ Pass/ Fail criteria: none
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_DelayETM2Trig2ADC(uint8_t u8Delay)
|
||
{
|
||
SIM->SOPT = (SIM->SOPT & ~(SIM_SOPT_DELAY_MASK)) | SIM_SOPT_DELAY(u8Delay);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 使能总线时钟在PH2上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
* @ 参看 SIM_DisableClockOutput
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_EnableClockOutput(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_CLKOE_MASK);
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 禁用总线时钟输出在PH2上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
* @参看 SIM_EnableClockOutput
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_DisableClockOutput(void)
|
||
{
|
||
SIM->SOPT &= ~(SIM_SOPT_CLKOE_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 设置总线时钟输出分频.
|
||
*
|
||
* @param[in] u8Divide 分频系数 (3-bits)
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_SetClockOutputDivide(uint8_t u8Divide)
|
||
{
|
||
SIM->SOPT = (SIM->SOPT & ~(SIM_SOPT_BUSREF_MASK)) | SIM_SOPT_BUSREF(u8Divide & 0x07);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief UART0_RX输入信号连接到UART0模块和ETM0通道1
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_EnableUART0RXDConnectETMOCH1(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_RXDCE_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief UART0_TX输出在映射到引出线前由ETM0通道0调制
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_EnableUART0Modulation(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_TXDME_MASK);
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief UART0_TX输出直接连接到引出线上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_DisableUART0Modulation(void)
|
||
{
|
||
SIM->SOPT &= ~(SIM_SOPT_TXDME_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成ETM2模块的PWM同步触发
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
* @ Pass/ Fail criteria: none
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_GenerateSoftwareTrig2ETM2(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_ETMSYNC_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM2_CH3通道映射到PD1上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
* @ Pass/ Fail criteria: none
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM2CH3Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM2PS3_MASK;
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM2_CH2通道映射到PD0上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
* @ Pass/ Fail criteria: none
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM2CH2Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM2PS2_MASK;
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM0_CH1通道映射到PB3上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM0CH1Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM0PS1_MASK;
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM0_CH0通道映射到PB2上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM0CH0Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM0PS0_MASK;
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief UART0_RX和UART0_TX映射到PA2和PA3上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapUART0Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_UART0PS_MASK;
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief SPI0_SCK SPI0_MOSI SPI0_MISO和SPI0_PCS映射到PE0、PE1、PE2、PE3上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapSPI0Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_SPI0PS_MASK;
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief I2C0_SCL和I2C_SDA分别映射到PB7、PB6上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapI2CPin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_IICPS_MASK;
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief RXD0输入信号由ACPM0滤波,然后注入UART0
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_EnableUART0Filter(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_RXDFE_MASK);
|
||
}
|
||
/******************************************************************************!
|
||
*
|
||
* @brief RXD0输入信号直接连接到UARTO模块
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_DisableUART0Filter(void)
|
||
{
|
||
SIM->SOPT &= ~(SIM_SOPT_RXDFE_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 选择RTC溢出作为ADC硬件触发源
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_TriggerADCByRTC(void)
|
||
{
|
||
SIM->SOPT &= ~(SIM_SOPT_ADHWT_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 选择PIT溢出作为ADC硬件触发源
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_TriggerADCByPIT(void)
|
||
{
|
||
SIM->SOPT = (SIM->SOPT & ~(SIM_SOPT_ADHWT_MASK)) | SIM_SOPT_ADHWT(1);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 设置ETM2初始化作为ADC硬件触发源.ETM2初始化后经过一段时间延时触发ADC转换
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_TriggerADCByETM2Init(void)
|
||
{
|
||
SIM->SOPT = (SIM->SOPT & ~(SIM_SOPT_ADHWT_MASK)) | SIM_SOPT_ADHWT(2);
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 设置ETM2匹配作为ADC硬件触发源,ETM2匹配后经过一段时间的延时触发ADC转换
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_TriggerADCByETM2Match(void)
|
||
{
|
||
SIM->SOPT = (SIM->SOPT & ~(SIM_SOPT_ADHWT_MASK)) | SIM_SOPT_ADHWT(3);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief RTC溢出连接到ETM1输入通道1
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_EnableRTCCapture(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_RTCC_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief RTC溢出未连接到ETM1输入通道1
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_DisableRTCCapture(void)
|
||
{
|
||
SIM->SOPT &= ~(SIM_SOPT_RTCC_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ACMP0输出连接到ETM1输入通道0
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_EnableACMP0InputCapture(void)
|
||
{
|
||
SIM->SOPT |= (SIM_SOPT_ACIC_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ACMP0输出未连接到ETM1输入通道0
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_DisableACMP0InputCapture(void)
|
||
{
|
||
SIM->SOPT &= ~(SIM_SOPT_ACIC_MASK);
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief RTC0映射到PC5上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapRTCPin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_RTCPS_MASK;
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 设置总线时钟频率
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_SetBusDivide(uint8_t u8Divide)
|
||
{
|
||
SIM->BUSDIV = u8Divide;
|
||
}
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM2_CH1通道映射到PH1上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM2CH1Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM2PS1_MASK;
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM2_CH0通道映射到PH0上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM2CH0Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM2PS0_MASK;
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM1_CH1通道映射到PE7上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM1CH1Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM1PS1_MASK;
|
||
}
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief ETM1_CH0映射到PH2上
|
||
*
|
||
* @param none
|
||
*
|
||
* @return none
|
||
*
|
||
*****************************************************************************/
|
||
__STATIC_INLINE void SIM_RemapETM1CH0Pin(void)
|
||
{
|
||
SIM->PINSEL |= SIM_PINSEL_ETM1PS0_MASK;
|
||
}
|
||
|
||
#endif
|
||
|
||
/****************************************************************************/
|
||
|
||
void SIM_Init(SIM_ConfigType *pConfig);
|
||
void SIM_SetClockGating(uint32_t u32PeripheralMask, uint8_t u8GateOn);
|
||
uint32_t SIM_GetStatus(uint32_t u32StatusMask);
|
||
uint8_t SIM_ReadID(IDType sID);
|
||
|
||
#endif
|
||
|
||
|