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

📄 drvpwm.c

📁 cortex-m0 LCD1602程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    {
        if (s_i32Option)
            outp32(&PWMB->CCR2, inp32(&PWMB->CCR2) & (CCR_MASK | BIT4));
        else
            outp32(&PWMB->CCR2, inp32(&PWMB->CCR2) & ~BIT20);
                   
        if (g_sDrvPWMBHandler.pfnCAP2CallBack != NULL)
        {
            g_sDrvPWMBHandler.pfnCAP2CallBack();
        }
    }
    
    if (u32CapIntFlag1 & BIT20) 
    {
        if (s_i32Option)
            outp32(&PWMB->CCR2, inp32(&PWMB->CCR2) & (CCR_MASK | BIT20));
        else
            outp32(&PWMB->CCR2, inp32(&PWMB->CCR2) & ~BIT4);
                    
        if (g_sDrvPWMBHandler.pfnCAP3CallBack != NULL)
        {
            g_sDrvPWMBHandler.pfnCAP3CallBack();
        }
    }
}

/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPWM_IsTimerEnabled                                                                         */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*               u8Timer   - [in]       DRVPWM_TIMER0 / DRVPWM_TIMER1 / DRVPWM_TIMER2 / DRVPWM_TIMER3      */
/*                                      DRVPWM_TIMER4 / DRVPWM_TIMER5 / DRVPWM_TIMER6 / DRVPWM_TIMER7      */
/*                                                                                                         */
/* Returns:                                                                                                */
/*               0      disable                                                                            */
/*               1      enable                                                                             */
/* Description:                                                                                            */
/*               This function is used to get PWMA/PWMB specified timer enable/disable state               */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvPWM_IsTimerEnabled(uint8_t u8Timer)
{
    int32_t status;

    status = 0;
    
    switch (u8Timer)
    {
        case DRVPWM_TIMER0:
        case DRVPWM_TIMER1:
        case DRVPWM_TIMER2:
        case DRVPWM_TIMER3:
            status = ( inp32(&PWMA->PCR) & (1 << (u8Timer<<3) ) )? 1 : 0;
            break;      
        case DRVPWM_TIMER4:
        case DRVPWM_TIMER5:
        case DRVPWM_TIMER6:
        case DRVPWM_TIMER7:
            status = ( inp32(&PWMB->PCR) & (1 << ((u8Timer-DRVPWM_TIMER4)<<3) ) )? 1 : 0;
            break;  
    }
    return status;
}


/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPWM_SetTimerCounter                                                                        */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*               u8Timer        - [in]      DRVPWM_TIMER0 / DRVPWM_TIMER1 / DRVPWM_TIMER2 / DRVPWM_TIMER3  */
/*                                          DRVPWM_TIMER4 / DRVPWM_TIMER5 / DRVPWM_TIMER6 / DRVPWM_TIMER7  */
/*               u16Counter     - [in]      Timer counter : 0~65535                                        */
/* Returns:                                                                                                */
/*               None                                                                                      */
/* Description:                                                                                            */
/*               This function is used to set the PWM0~7 specified timer counter                           */
/* Note:         If the counter is set to 0, the timer will stop.                                          */
/*---------------------------------------------------------------------------------------------------------*/
void DrvPWM_SetTimerCounter(uint8_t u8Timer, uint16_t u16Counter)
{   
    u8Timer &= 0x0F;
    
    if (u8Timer >= DRVPWM_TIMER4)
    {
        *((__IO uint32_t *) (PWMB_CNR0 + (u8Timer - DRVPWM_TIMER4) * 12)) = u16Counter;
    }
    else
    {
        *((__IO uint32_t *) (PWMA_CNR0 + (u8Timer & 0x7) * 12)) = u16Counter;   
    }
}

/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPWM_GetTimerCounter                                                                        */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*               u8Timer        - [in]      DRVPWM_TIMER0 / DRVPWM_TIMER1 / DRVPWM_TIMER2 / DRVPWM_TIMER3  */
/*                                          DRVPWM_TIMER4 / DRVPWM_TIMER5 / DRVPWM_TIMER6 / DRVPWM_TIMER7  */
/*                                                                                                         */
/* Returns:                                                                                                */
/*               The specified timer counter value                                                         */
/*                                                                                                         */
/* Description:                                                                                            */
/*               This function is used to get the PWM0~7 specified timer counter value                     */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvPWM_GetTimerCounter(uint8_t u8Timer)
{
    uint32_t u32Reg = 0;
    
    u8Timer &= 0x0F;
    
    if (u8Timer >= DRVPWM_TIMER4)
    {
        u32Reg = *((__IO uint32_t *) (PWMB_PDR0 + (u8Timer - DRVPWM_TIMER4) * 12));
    }
    else
    {
        u32Reg = *((__IO uint32_t *) (PWMA_PDR0 + (u8Timer & 0x7) * 12));   
    }

    return u32Reg;
}


/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvPWM_EnableInt                                                                              */
/*                                                                                                         */
/* Parameters:                                                                                             */
/*               u8Timer        - [in]      DRVPWM_TIMER0 / DRVPWM_TIMER1 / DRVPWM_TIMER2 / DRVPWM_TIMER3  */
/*                                          DRVPWM_TIMER4 / DRVPWM_TIMER5 / DRVPWM_TIMER6 / DRVPWM_TIMER7  */
/*                                          DRVPWM_CAP0   / DRVPWM_CAP1   / DRVPWM_CAP2   / DRVPWM_CAP3    */
/*                                          DRVPWM_CAP4   / DRVPWM_CAP5   / DRVPWM_CAP6   / DRVPWM_CAP7    */
/*               u8Int          - [in]      DRVPWM_CAP_RISING_INT/DRVPWM_CAP_FALLING_INT/DRVPWM_CAP_ALL_INT*/
/*                                          (The parameter is valid only when capture function)            */
/*               pfncallback    - [in]      The call back function for specified timer / capture           */
/*                                                                                                         */
/* Returns:                                                                                                */
/*               None                                                                                      */
/*                                                                                                         */
/* Description:                                                                                            */
/*               This function is used to Enable the PWM0~7 timer/capture interrupt                        */
/*---------------------------------------------------------------------------------------------------------*/
void DrvPWM_EnableInt(uint8_t u8Timer, uint8_t u8Int, PFN_DRVPWM_CALLBACK pfncallback)
{
    int32_t Rflag, Fflag;   

    Rflag = u8Int & 0x01;
    Fflag = u8Int & 0x02;
        
    switch (u8Timer)
    {   
        case DRVPWM_TIMER0:
            PWMA->PIER.PWMIE0 = 1;
            g_sDrvPWMAHandler.pfnPWM0CallBack = pfncallback;
            break;
        case DRVPWM_CAP0:           
            if (Rflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & CCR_MASK) | BIT1);
                else
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & ~(BIT4 | BIT20)) | BIT1); 
            }
            if (Fflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & CCR_MASK) | BIT2);
                else
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & ~(BIT4 | BIT20)) | BIT2);
            }
            g_sDrvPWMAHandler.pfnCAP0CallBack = pfncallback;
            break;  
        case DRVPWM_TIMER1:
            PWMA->PIER.PWMIE1 = 1;
            g_sDrvPWMAHandler.pfnPWM1CallBack = pfncallback;
            break;
        case DRVPWM_CAP1:           
            if (Rflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & CCR_MASK) | BIT17);
                else
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & ~(BIT4 | BIT20)) | BIT17);            
            }
            if (Fflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & CCR_MASK) | BIT18);
                else
                    outp32(&PWMA->CCR0, (inp32(&PWMA->CCR0) & ~(BIT4 | BIT20)) | BIT18);            
            }
            g_sDrvPWMAHandler.pfnCAP1CallBack = pfncallback;
            break;
        case DRVPWM_TIMER2:
            PWMA->PIER.PWMIE2 = 1;
            g_sDrvPWMAHandler.pfnPWM2CallBack = pfncallback;
            break;
        case DRVPWM_CAP2:           
            if (Rflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & CCR_MASK) | BIT1);
                else
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & ~(BIT4 | BIT20)) | BIT1);             
            }
            if (Fflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & CCR_MASK) | BIT2);
                else
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & ~(BIT4 | BIT20)) | BIT2);         
            }
            g_sDrvPWMAHandler.pfnCAP2CallBack = pfncallback;
            break;
        case DRVPWM_TIMER3:
            PWMA->PIER.PWMIE3 = 1;
            g_sDrvPWMAHandler.pfnPWM3CallBack = pfncallback;
            break;
        case DRVPWM_CAP3:           
            if (Rflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & CCR_MASK) | BIT17);
                else
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & ~(BIT4 | BIT20)) | BIT17);                
            }
            if (Fflag)
            {
                if (s_i32Option)
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & CCR_MASK) | BIT18);
                else
                    outp32(&PWMA->CCR2, (inp32(&PWMA->CCR2) & ~(BIT4 | BIT20)) | BIT18);                
            }
            g_sDrvPWMAHandler.pfnCAP3CallBack = pfncallback;
            break;          
            
        case DRVPWM_TIMER4:
            PWMB->PIER.PWMIE0 = 1;
            g_sDrvPWMBHandler.pfnPWM0CallBack = pfncallback;
            break;
        case DRVPWM_CAP4:           
            if (Rflag)
            {
                if (s_i32Option)
                    outp32(&PWMB->CCR0, (inp32(&PWMB->CCR0) & CCR_MASK) | BIT1);
                else
                    outp32(&PWMB->CCR0, (inp32(&PWMB->CCR0) & ~(BIT4 | BIT20)) | BIT1); 
            }
            if (Fflag)
            {
                if (s_i32Option)

⌨️ 快捷键说明

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