⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drvsys.c

📁 cortex-m0 LCD1602程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/*               Please make sure that Register Write-Protection Function has been disabled before using   */
/*               this function to select WDT clock source.                                                 */
/*               User can check the status of Register Write-Protection Function                           */
/*               with DrvSYS_IsProtectedRegLocked().                                                       */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvSYS_SelectIPClockSource(E_SYS_IP_CLKSRC eIpClkSrc, uint8_t u8ClkSrcSel)
{
    
    switch(eIpClkSrc)
    {
        case E_SYS_FRQDIV_CLKSRC:  
            SYSCLK->CLKSEL2.FRQDIV_S = u8ClkSrcSel;
            break;
        case E_SYS_I2S_CLKSRC:
            SYSCLK->CLKSEL2.I2S_S = u8ClkSrcSel;
            break;
        case E_SYS_PWM67_CLKSRC:  
            SYSCLK->CLKSEL2.PWM67_S = u8ClkSrcSel;
            break;
        case E_SYS_PWM45_CLKSRC:
            SYSCLK->CLKSEL2.PWM45_S = u8ClkSrcSel;
            break;
        case E_SYS_PWM23_CLKSRC:  
            SYSCLK->CLKSEL1.PWM23_S = u8ClkSrcSel;
            break;
        case E_SYS_PWM01_CLKSRC:
            SYSCLK->CLKSEL1.PWM01_S = u8ClkSrcSel;
            break;
        case E_SYS_UART_CLKSRC:
            SYSCLK->CLKSEL1.UART_S = u8ClkSrcSel;
            break;
        case E_SYS_TMR3_CLKSRC:
            SYSCLK->CLKSEL1.TMR3_S = u8ClkSrcSel;
            break;
        case E_SYS_TMR2_CLKSRC:
            SYSCLK->CLKSEL1.TMR2_S = u8ClkSrcSel;
            break;
        case E_SYS_TMR1_CLKSRC:
            SYSCLK->CLKSEL1.TMR1_S = u8ClkSrcSel;
            break;
        case E_SYS_TMR0_CLKSRC:
            SYSCLK->CLKSEL1.TMR0_S = u8ClkSrcSel;
            break;
        case E_SYS_ADC_CLKSRC:
            SYSCLK->CLKSEL1.ADC_S = u8ClkSrcSel;
            break;
        case E_SYS_WDT_CLKSRC:
            SYSCLK->CLKSEL1.WDT_S = u8ClkSrcSel;
            break;
        default:
            return E_DRVSYS_ERR_IPSRC;
    }
    
    return E_SUCCESS;
}

/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvSYS_SetClockDivider                                                                        */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*           eIpDiv   - [in] E_SYS_ADC_DIV / E_SYS_UART_DIV / E_SYS_USB_DIV /E_SYS_HCLK_DIV                */
/*           i32value - [in] 0 ~ 255 for ADC, 0 ~ 15 for other IP or HCLK                                  */
/*                                                                                                         */
/* Returns:                                                                                                */
/*             0:  Success                                                                                 */
/*           < 0:  Incorrect value                                                                         */
/*                                                                                                         */
/* Description:                                                                                            */
/*               This function is used to set IP divider number from the corresponding clock source.       */
/*               The actual clock divide number is (i32value + 1)                                          */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvSYS_SetClockDivider(E_SYS_IP_DIV eIpDiv , int32_t i32value)
{
    if (eIpDiv == E_SYS_ADC_DIV)
    {
        SYSCLK->CLKDIV.ADC_N = i32value;
    }
    else if(eIpDiv == E_SYS_UART_DIV)
    {
        SYSCLK->CLKDIV.UART_N = i32value;
    }
    else if(eIpDiv == E_SYS_USB_DIV)
    {
        SYSCLK->CLKDIV.USB_N = i32value;
    }
    else if(eIpDiv == E_SYS_HCLK_DIV)
    {
        SYSCLK->CLKDIV.HCLK_N = i32value;
        SystemCoreClockUpdate();
    }
    else
        return E_DRVSYS_ERR_IPDIV;

    return E_SUCCESS;
}


/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvSYS_SetOscCtrl                                                                             */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*               eClkSrc     - [in]    E_SYS_XTL12M / E_SYS_XTL32K / E_SYS_OSC22M / E_SYS_OSC10K           */
/*               i32Enable   - [in]    1: Enable / 0: Disable                                              */
/*                                                                                                         */
/* Returns:                                                                                                */
/*                 0:  Success                                                                             */
/*               < 0:  Incorrect value                                                                     */
/*                                                                                                         */
/* Description:                                                                                            */
/*               This function is used to enable/disable internal oscillator or external crystal           */
/*                                                                                                         */
/* Note:                                                                                                   */
/*               Please make sure that Register Write-Protection Function has been disabled before using   */
/*               this function to enable/disable internal oscillator or external crystal.                  */
/*               User can check the status of Register Write-Protection Function                           */
/*               with DrvSYS_IsProtectedRegLocked().                                                       */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvSYS_SetOscCtrl(E_SYS_CHIP_CLKSRC eClkSrc, int32_t i32Enable)
{   
    switch(eClkSrc)
    {
        case E_SYS_XTL12M:
            SYSCLK->PWRCON.XTL12M_EN = i32Enable;
            break;
        case E_SYS_XTL32K:
            SYSCLK->PWRCON.XTL32K_EN = i32Enable;
            break;
        case E_SYS_OSC22M:
            SYSCLK->PWRCON.OSC22M_EN = i32Enable;
            break;
        case E_SYS_OSC10K:
            SYSCLK->PWRCON.OSC10K_EN = i32Enable;
            break;
        default:
            return E_DRVSYS_ERR_ARGUMENT;
    }
    
    return E_SUCCESS;
}

/*---------------------------------------------------------------------------------------------------------*/
/* Function:     <PWRWU_IRQHandler>                                                                        */
/*                                                                                                         */
/* Parameter:                                                                                              */
/*               None                                                                                      */
/* Returns:                                                                                                */
/*               None                                                                                      */
/*                                                                                                         */
/* Description:                                                                                            */
/*               ISR to handle Power Down Wake up interrupt event                                          */
/*---------------------------------------------------------------------------------------------------------*/
void PWRWU_IRQHandler(void)
{
    SYSCLK->PWRCON.PD_WU_STS = 1;
    if (PWRWU_callbackFn != NULL)
        PWRWU_callbackFn(); 
}

/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvSYS_SetPowerDownWakeUpInt                                                                  */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*               i32Enable      - [in]  1: Enable Power dowm Wake up interrup                              */
/*                                      0: Disable Power dowm Wake up interrup                             */
/*               pdwucallbackFn - [in]  Power Down Wake Up Call back function                              */
/*               i32enWUDelay   - [in]  1: Enable clock cycles delay                                       */
/*                                      0: Disable clock cycles delay                                      */
/*                                                                                                         */
/* Returns:                                                                                                */
/*               None                                                                                      */
/*                                                                                                         */
/* Description:                          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -