/*********************************************************************//** * @brief Get peripheral clock frequency * @param[in] Clock Peripheral type, should be: * - CGU_PERIPHERAL_ADC0 :ADC0 * - CGU_PERIPHERAL_ADC1 :ADC1 * - CGU_PERIPHERAL_AES :AES * - CGU_PERIPHERAL_APB1_BUS :APB1 bus * - CGU_PERIPHERAL_APB3_BUS :APB3 bus * - CGU_PERIPHERAL_CAN :CAN * - CGU_PERIPHERAL_CREG :CREG * - CGU_PERIPHERAL_DAC :DAC * - CGU_PERIPHERAL_DMA :DMA * - CGU_PERIPHERAL_EMC :EMC * - CGU_PERIPHERAL_ETHERNET :ETHERNET * - CGU_PERIPHERAL_GPIO :GPIO * - CGU_PERIPHERAL_I2C0 :I2C0 * - CGU_PERIPHERAL_I2C1 :I2C1 * - CGU_PERIPHERAL_I2S :I2S * - CGU_PERIPHERAL_LCD :LCD * - CGU_PERIPHERAL_M3CORE :M3 core * - CGU_PERIPHERAL_M3_BUS :M3 bus * - CGU_PERIPHERAL_MOTOCON :Motor control * - CGU_PERIPHERAL_QEI :QEI * - CGU_PERIPHERAL_RITIMER :RIT timer * - CGU_PERIPHERAL_SCT :SCT * - CGU_PERIPHERAL_SCU :SCU * - CGU_PERIPHERAL_SDIO :SDIO * - CGU_PERIPHERAL_SPIFI :SPIFI * - CGU_PERIPHERAL_SSP0 :SSP0 * - CGU_PERIPHERAL_SSP1 :SSP1 * - CGU_PERIPHERAL_TIMER0 :TIMER0 * - CGU_PERIPHERAL_TIMER1 :TIMER1 * - CGU_PERIPHERAL_TIMER2 :TIMER2 * - CGU_PERIPHERAL_TIMER3 :TIMER3 * - CGU_PERIPHERAL_UART0 :UART0 * - CGU_PERIPHERAL_UART1 :UART1 * - CGU_PERIPHERAL_UART2 :UART2 * - CGU_PERIPHERAL_UART3 :UART3 * - CGU_PERIPHERAL_USB0 :USB0 * - CGU_PERIPHERAL_USB1 :USB1 * - CGU_PERIPHERAL_WWDT :WWDT * @return Return frequently value **********************************************************************/ uint32_t CGU_GetPCLKFrequency (CGU_PERIPHERAL_T Clock){ uint32_t ClkSrc; if(Clock >= CGU_PERIPHERAL_WWDT && Clock <= CGU_PERIPHERAL_ADC0) return CGU_ERROR_INVALID_PARAM; if(CGU_PERIPHERAL_Info[Clock].PerBaseEntity != CGU_ENTITY_NONE){ /* Get Base Clock Source */ ClkSrc = (CGU_PER_BASE_CTRL(Clock) & CGU_CTRL_SRC_MASK) >> 24; /* GetBase Status*/ if(CGU_PER_BASE_CTRL(Clock) & 1) return 0; /* check Branch if it is enabled */ if((CGU_PERIPHERAL_Info[Clock].PerBranchOffset!= 0) && !(CGU_PER_BRANCH_STATUS(Clock) & CGU_BRANCH_STATUS_ENABLE_MASK)) return 0; }else{
/*********************************************************************//** * @brief Configure power for individual peripheral * @param[in] PPType peripheral type, should be: * - CGU_PERIPHERAL_ADC0 :ADC0 * - CGU_PERIPHERAL_ADC1 :ADC1 * - CGU_PERIPHERAL_AES :AES * - CGU_PERIPHERAL_APB1_BUS :APB1 bus * - CGU_PERIPHERAL_APB3_BUS :APB3 bus * - CGU_PERIPHERAL_CAN :CAN * - CGU_PERIPHERAL_CREG :CREG * - CGU_PERIPHERAL_DAC :DAC * - CGU_PERIPHERAL_DMA :DMA * - CGU_PERIPHERAL_EMC :EMC * - CGU_PERIPHERAL_ETHERNET :ETHERNET * - CGU_PERIPHERAL_GPIO :GPIO * - CGU_PERIPHERAL_I2C0 :I2C0 * - CGU_PERIPHERAL_I2C1 :I2C1 * - CGU_PERIPHERAL_I2S :I2S * - CGU_PERIPHERAL_LCD :LCD * - CGU_PERIPHERAL_M3CORE :M3 core * - CGU_PERIPHERAL_M3_BUS :M3 bus * - CGU_PERIPHERAL_MOTOCON :Motor control * - CGU_PERIPHERAL_QEI :QEI * - CGU_PERIPHERAL_RITIMER :RIT timer * - CGU_PERIPHERAL_SCT :SCT * - CGU_PERIPHERAL_SCU :SCU * - CGU_PERIPHERAL_SDIO :SDIO * - CGU_PERIPHERAL_SPIFI :SPIFI * - CGU_PERIPHERAL_SSP0 :SSP0 * - CGU_PERIPHERAL_SSP1 :SSP1 * - CGU_PERIPHERAL_TIMER0 :TIMER0 * - CGU_PERIPHERAL_TIMER1 :TIMER1 * - CGU_PERIPHERAL_TIMER2 :TIMER2 * - CGU_PERIPHERAL_TIMER3 :TIMER3 * - CGU_PERIPHERAL_UART0 :UART0 * - CGU_PERIPHERAL_UART1 :UART1 * - CGU_PERIPHERAL_UART2 :UART2 * - CGU_PERIPHERAL_UART3 :UART3 * - CGU_PERIPHERAL_USB0 :USB0 * - CGU_PERIPHERAL_USB1 :USB1 * - CGU_PERIPHERAL_WWDT :WWDT * @param[in] en status, should be: * - ENABLE: Enable power * - DISABLE: Disable power * @return Configure status, could be: * - CGU_ERROR_SUCCESS: successful * - Other: error **********************************************************************/ uint32_t CGU_ConfigPWR (CGU_PERIPHERAL_T PPType, FunctionalState en){ if(PPType >= CGU_PERIPHERAL_WWDT && PPType <= CGU_PERIPHERAL_ADC0) return CGU_ERROR_INVALID_PARAM; if(en == DISABLE){/* Going to disable clock */ /*Get Reg branch status */ if(CGU_PERIPHERAL_Info[PPType].RegBranchOffset!= 0 && CGU_REG_BRANCH_STATUS(PPType) & 1){ CGU_REG_BRANCH_CTRL(PPType) &= ~1; /* Disable branch clock */ while(CGU_REG_BRANCH_STATUS(PPType) & 1); } /* GetBase Status*/ if((CGU_PERIPHERAL_Info[PPType].RegBaseEntity!=CGU_ENTITY_NONE) && CGU_GetBaseStatus((CGU_ENTITY_T)CGU_PERIPHERAL_Info[PPType].RegBaseEntity) == 0){ /* Disable Base */ CGU_EnableEntity((CGU_ENTITY_T)CGU_PERIPHERAL_Info[PPType].RegBaseEntity,0); } /* Same for Peripheral */ if((CGU_PERIPHERAL_Info[PPType].PerBranchOffset!= 0) && (CGU_PER_BRANCH_STATUS(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK)){ CGU_PER_BRANCH_CTRL(PPType) &= ~1; /* Disable branch clock */ while(CGU_PER_BRANCH_STATUS(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK); } /* GetBase Status*/ if((CGU_PERIPHERAL_Info[PPType].PerBaseEntity!=CGU_ENTITY_NONE) && CGU_GetBaseStatus((CGU_ENTITY_T)CGU_PERIPHERAL_Info[PPType].PerBaseEntity) == 0){ /* Disable Base */ CGU_EnableEntity((CGU_ENTITY_T)CGU_PERIPHERAL_Info[PPType].PerBaseEntity,0); } }else{ /* enable */ /* GetBase Status*/ if((CGU_PERIPHERAL_Info[PPType].RegBaseEntity!=CGU_ENTITY_NONE) && CGU_REG_BASE_CTRL(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK){ /* Enable Base */ CGU_EnableEntity((CGU_ENTITY_T)CGU_PERIPHERAL_Info[PPType].RegBaseEntity, 1); } /*Get Reg branch status */ if((CGU_PERIPHERAL_Info[PPType].RegBranchOffset!= 0) && !(CGU_REG_BRANCH_STATUS(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK)){ CGU_REG_BRANCH_CTRL(PPType) |= 1; /* Enable branch clock */ while(!(CGU_REG_BRANCH_STATUS(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK)); } /* Same for Peripheral */ /* GetBase Status*/ if((CGU_PERIPHERAL_Info[PPType].PerBaseEntity != CGU_ENTITY_NONE) && (CGU_PER_BASE_CTRL(PPType) & 1)){ /* Enable Base */ CGU_EnableEntity((CGU_ENTITY_T)CGU_PERIPHERAL_Info[PPType].PerBaseEntity, 1); } /*Get Reg branch status */ if((CGU_PERIPHERAL_Info[PPType].PerBranchOffset!= 0) && !(CGU_PER_BRANCH_STATUS(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK)){ CGU_PER_BRANCH_CTRL(PPType) |= 1; /* Enable branch clock */ while(!(CGU_PER_BRANCH_STATUS(PPType) & CGU_BRANCH_STATUS_ENABLE_MASK)); } } if(CGU_PERIPHERAL_Info[PPType].next){ return CGU_ConfigPWR((CGU_PERIPHERAL_T)CGU_PERIPHERAL_Info[PPType].next, en); } return CGU_ERROR_SUCCESS; }