📄 lpc11xx_syscon.c
字号:
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 + -