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

📄 lpc11xx_syscon.c

📁 基于MDK的LPC1100处理器开发应用例程
💻 C
📖 第 1 页 / 共 3 页
字号:
        LPC_SYSCON->PDSLEEPCFG = reg | (block & SYSCON_ABLOCK_BITMASK);
    }   
}

/*********************************************************************//**
 * @brief      Indicate the state the chip must enter when 
 *             it is waking up from Deep-sleep mode.
 * @param[in]  block   Analog block, it can be
 *              - SYSCON_ABLOCK_IRCOUT : IRC oscillator output wake-up configuration
 *              - SYSCON_ABLOCK_IRC    : IRC oscillator power-down wake-up configuration 
 *              - SYSCON_ABLOCK_FLASH  : Flash wake-up configuration
 *              - SYSCON_ABLOCK_BOD    : BOD wake-up configuration
 *              - SYSCON_ABLOCK_ADC    : ADC wake-up configuration
 *              - SYSCON_ABLOCK_SYSOSC : System oscillator wake-up configuration
 *              - SYSCON_ABLOCK_WDTOSC : Watchdog oscillator wake-up configuration
 *              - SYSCON_ABLOCK_SYSPLL : System PLL wake-up configuration
 * @param[in]  NewState  power state, it can be:
 *              - ENABLE: Powered
 *              - DISABLE: Powered down
 *             
 * @return     None
 **********************************************************************/
void SYSCON_WakeupPowerCon (uint32_t block, FunctionalState NewState)
{
    uint32_t reg;

    reg = LPC_SYSCON->PDAWAKECFG & SYSCON_ABLOCK_BITMASK;
    reg |= 0x800;

    if (NewState == ENABLE) {
        LPC_SYSCON->PDAWAKECFG = reg & ((~block) & SYSCON_ABLOCK_BITMASK);
    } else if (NewState == DISABLE) {
        LPC_SYSCON->PDAWAKECFG = reg | (block & SYSCON_ABLOCK_BITMASK);
    }
}


/*********************************************************************//**
 * @brief      Get WDT oscillator freq
 * @param[in]  None
 *             
 * @return     WDT oscillator freq
 **********************************************************************/
uint32_t SYSCON_GetWDTOsc(void)
{
    uint32_t sel;
    uint32_t freq;

    sel = LPC_SYSCON->WDTOSCCTRL;

    switch ((sel>>5) & 0xF) {
    case 0x0:
        freq = 0; break;
    case 0x1:
        freq = 500000; break;
    case 0x2:
        freq = 800000; break;
    case 0x3:
        freq = 1100000; break;
    case 0x4:
        freq = 1400000; break;
    case 0x5:
        freq = 1600000; break;  
    case 0x6:
        freq = 1800000; break;  
    case 0x7:
        freq = 2000000; break;  
    case 0x8:
        freq = 2200000; break;  
    case 0x9:
        freq = 2400000; break;  
    case 0xA:
        freq = 2600000; break;  
    case 0xB:
        freq = 2700000; break;  
    case 0xC:
        freq = 2900000; break;  
    case 0xD:
        freq = 3100000; break;  
    case 0xE:
        freq = 3200000; break;  
    case 0xF:
        freq = 3400000; break;  
    }

    freq = freq / (((sel&0x1F)+1) * 2);

    return freq;
}


/*********************************************************************//**
 * @brief      Edge select for start logic input
 * @param[in]  pins the selected start logic inputs, it can be:
 *                    - START_LOGIC_PIO0_0
 *                    - START_LOGIC_PIO0_1
 *                    - START_LOGIC_PIO0_2
 *                    - START_LOGIC_PIO0_3
 *                    - START_LOGIC_PIO0_4
 *                    - START_LOGIC_PIO0_5
 *                    - START_LOGIC_PIO0_6
 *                    - START_LOGIC_PIO0_7
 *                    - START_LOGIC_PIO0_8
 *                    - START_LOGIC_PIO0_9
 *                    - START_LOGIC_PIO0_10
 *                    - START_LOGIC_PIO0_11
 *                    - START_LOGIC_PIO1_0
 * @param[in]  edge Falling or rising edge on the corresponding PIO 
 *                  input, it can be:
 *                    - START_LOGIC_EDGE_Falling : Falling edge
 *                    _ START_LOGIC_EDGE_Rising  : Rising edge
 *             
 * @return  None
 **********************************************************************/
void SYSCON_StartLogicEdge(uint32_t pins, START_LOGIC_INPUT_EDGE edge)
{
    if(edge == START_LOGIC_EDGE_Falling) {
        LPC_SYSCON->STARTAPRP0 &= (~pins) & PARAM_START_LOGIC_MASK;
    } else if(edge == START_LOGIC_EDGE_Rising){
        LPC_SYSCON->STARTAPRP0 |= pins & PARAM_START_LOGIC_MASK;
    }       
}


/*********************************************************************//**
 * @brief      Enable or disable start signal for start logic input
 * @param[in]  pins the selected start logic inputs, it can be:
 *                    - START_LOGIC_PIO0_0
 *                    - START_LOGIC_PIO0_1
 *                    - START_LOGIC_PIO0_2
 *                    - START_LOGIC_PIO0_3
 *                    - START_LOGIC_PIO0_4
 *                    - START_LOGIC_PIO0_5
 *                    - START_LOGIC_PIO0_6
 *                    - START_LOGIC_PIO0_7
 *                    - START_LOGIC_PIO0_8
 *                    - START_LOGIC_PIO0_9
 *                    - START_LOGIC_PIO0_10
 *                    - START_LOGIC_PIO0_11
 *                    - START_LOGIC_PIO1_0
 * @param[in]  cmd  Enable or disable start signal for start logic input
 *                  it can be:
 *                    - ENABLE  : Enable start signal for corresponding 
 *                                start logic input
 *                    _ DISABLE : Disable start signal for corresponding 
 *                                start logic input
 *             
 * @return  None
 **********************************************************************/
void SYSCON_StartLogicCmd(uint32_t pins, FunctionalState cmd)
{
    if(cmd == DISABLE) {
        LPC_SYSCON->STARTERP0 &= (~pins) & PARAM_START_LOGIC_MASK; 
    } else if(cmd == ENABLE) {
        LPC_SYSCON->STARTERP0 |= pins & PARAM_START_LOGIC_MASK;     
    }   
}

/*********************************************************************//**
 * @brief      Start signal reset for start logic input
 * @param[in]  pins the selected start logic inputs, it can be:
 *                    - START_LOGIC_PIO0_0
 *                    - START_LOGIC_PIO0_1
 *                    - START_LOGIC_PIO0_2
 *                    - START_LOGIC_PIO0_3
 *                    - START_LOGIC_PIO0_4
 *                    - START_LOGIC_PIO0_5
 *                    - START_LOGIC_PIO0_6
 *                    - START_LOGIC_PIO0_7
 *                    - START_LOGIC_PIO0_8
 *                    - START_LOGIC_PIO0_9
 *                    - START_LOGIC_PIO0_10
 *                    - START_LOGIC_PIO0_11
 *                    - START_LOGIC_PIO1_0
 *             
 * @return  None
 **********************************************************************/
void SYSCON_StartLogicReset(uint32_t pins)
{
    LPC_SYSCON->STARTRSRP0CLR = pins &  PARAM_START_LOGIC_MASK;
}


/*********************************************************************//**
 * @brief      Get start signal status for start logic input 
 * @param[in]  None
 *             
 * @return  the status of START_LOGIC_PIO0_0 - START_LOGIC_PIO1_0, it 
 *          reflects the status of the enabled start signal bits, The 
 *           bit assignment is
 *                    - Bit  0 : START_LOGIC_PIO0_0
 *                    - Bit  1 : START_LOGIC_PIO0_1
 *                    - Bit  2 : START_LOGIC_PIO0_2
 *                    - Bit  3 : START_LOGIC_PIO0_3
 *                    - Bit  4 : START_LOGIC_PIO0_4
 *                    - Bit  5 : START_LOGIC_PIO0_5
 *                    - Bit  6 : START_LOGIC_PIO0_6
 *                    - Bit  7 : START_LOGIC_PIO0_7
 *                    - Bit  8 : START_LOGIC_PIO0_8
 *                    - Bit  9 : START_LOGIC_PIO0_9
 *                    - Bit 10 : START_LOGIC_PIO0_10
 *                    - Bit 11 : START_LOGIC_PIO0_11
 *                    - Bit 12 : START_LOGIC_PIO1_0
 **********************************************************************/
uint32_t SYSCON_StartLogicStatus(void)
{
    return (LPC_SYSCON->STARTSRP0 & PARAM_START_LOGIC_MASK);
}

/*********************************************************************//**
 * @brief      Get WDT Clock
 * @param[in]  None
 *             
 * @return     WDT Clock
 **********************************************************************/
uint32_t SYSCON_GetWDTClock(void)
{
    uint32_t sel;
    uint32_t freq;   

    sel = LPC_SYSCON->WDTCLKSEL & 0x3;
    switch (sel) {
        case 0:     // IRC oscillator
            freq = IRC_OSC_FREQ; break;     
        case 1:     // Main clock
            freq = SystemFrequency; break;            
        case 2:     // Watchdog oscillator
            freq = SYSCON_GetWDTOsc(); break;   
        case 3:     // Reserved
            freq = 0;
    } 
   
    sel = SYSCON_GetWDTClockDiv();
    
    if(sel == 0) {
        freq = 0;
    } else {
        freq /= sel;
    }
    
    return freq;     
}

/*********************************************************************//**
 * @brief      Get SSP0 or SSP1 Clock
 * @param[in]  SSP number, it can be
 *               - 0 : SSP0
 *               - 1 : SSP1
 *             
 * @return     SSP Clock
 **********************************************************************/
uint32_t SYSCON_GetSSP0Clock(uint8_t sspNum)
{
    uint32_t div = 0;

    if(sspNum == 0) {
        div = SYSCON_GetSPI0ClockDiv();
    } else {
        div = SYSCON_GetSPI1ClockDiv();
    }

    if (div == 0) {
        return 0;
    } else {
        return (SystemFrequency/div);
    }
}

/*********************************************************************//**
 * @brief      Get UART Clock
 * @param[in]  None
 *             
 * @return     UART Clock
 **********************************************************************/
uint32_t SYSCON_GetUARTClock(void)
{
    uint32_t div = 0;

    div = SYSCON_GetUARTClockDiv();
   
    if (div == 0) {
        return 0;
    } else {
        return (SystemFrequency/div);
    }
}

/**
 * @}
 */

#endif

/**
 * @}
 */
/* --------------------------------- End Of File ------------------------------ */

⌨️ 快捷键说明

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