/** ****************************************************************************** * @file fm33a0xxev_cmu.c * @author FM33A0XXEV Application Team * @version V1.0.0 * @date 16-April-2020 * @brief This file provides firmware functions to manage the following * functionalities of....: * */ /* Includes ------------------------------------------------------------------*/ #include "fm33a0xxev_cmu.h" /** @addtogroup fm33a0xxev_StdPeriph_Driver * @{ */ /** @defgroup CMU * @brief CMU driver modules * @{ */ void CMU_SYSCLKCR_SLP_ENEXTI_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->SYSCLKCR |= (CMU_SYSCLKCR_SLP_ENEXTI_Msk); } else { CMU->SYSCLKCR &= ~(CMU_SYSCLKCR_SLP_ENEXTI_Msk); } } FunState CMU_SYSCLKCR_SLP_ENEXTI_Getable(void) { if (CMU->SYSCLKCR & (CMU_SYSCLKCR_SLP_ENEXTI_Msk)) { return ENABLE; } else { return DISABLE; } } /* APBʱÖÓ·ÖÆµÑ¡Ôñ (APBbus clock Prescaler) 000/001/010/011£º²»·ÖƵ 100£º2·ÖƵ 101£º4·ÖƵ 110£º8·ÖƵ 111£º16·ÖƵ Ïà¹Øº¯Êý */ void CMU_SYSCLKCR_APBPRES_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->SYSCLKCR; tmpreg &= ~(CMU_SYSCLKCR_APBPRES_Msk); tmpreg |= (SetValue & CMU_SYSCLKCR_APBPRES_Msk); CMU->SYSCLKCR = tmpreg; } uint32_t CMU_SYSCLKCR_APBPRES_Get(void) { return (CMU->SYSCLKCR & CMU_SYSCLKCR_APBPRES_Msk); } /* AHBʱÖÓ·ÖÆµÑ¡Ôñ (AHB bus clock Prescaler) 000/001/010/011£º²»·ÖƵ 100£º2·ÖƵ 101£º4·ÖƵ 110£º8·ÖƵ 111£º16·ÖƵ Ïà¹Øº¯Êý */ void CMU_SYSCLKCR_AHBPRES_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->SYSCLKCR; tmpreg &= ~(CMU_SYSCLKCR_AHBPRES_Msk); tmpreg |= (SetValue & CMU_SYSCLKCR_AHBPRES_Msk); CMU->SYSCLKCR = tmpreg; } uint32_t CMU_SYSCLKCR_AHBPRES_Get(void) { return (CMU->SYSCLKCR & CMU_SYSCLKCR_AHBPRES_Msk); } /* CPUÄÚºËsystick¹¤×÷ʱÖÓÑ¡Ôñ (Systick clock select) 00£ºSCLK 01£ºLSCLK 10£ºRC4M 11£ºSYSCLK Ïà¹Øº¯Êý */ void CMU_SYSCLKCR_STCLKSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->SYSCLKCR; tmpreg &= ~(CMU_SYSCLKCR_STCLKSEL_Msk); tmpreg |= (SetValue & CMU_SYSCLKCR_STCLKSEL_Msk); CMU->SYSCLKCR = tmpreg; } uint32_t CMU_SYSCLKCR_STCLKSEL_Get(void) { return (CMU->SYSCLKCR & CMU_SYSCLKCR_STCLKSEL_Msk); } /* ϵͳʱÖÓÔ´Ñ¡Ôñ Ïà¹Øº¯Êý */ void CMU_SYSCLKCR_SYSCLKSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->SYSCLKCR; tmpreg &= ~(CMU_SYSCLKCR_SYSCLKSEL_Msk); tmpreg |= (SetValue & CMU_SYSCLKCR_SYSCLKSEL_Msk); CMU->SYSCLKCR = tmpreg; } uint32_t CMU_SYSCLKCR_SYSCLKSEL_Get(void) { return (CMU->SYSCLKCR & CMU_SYSCLKCR_SYSCLKSEL_Msk); } /* RCHFƵÂÊÑ¡Ôñ¼Ä´æÆ÷0000£º8MHz 0001£º16MHz 0010£º24MHz 0011£º32MHz 0111£º40MHz 1111£º48MHz ÆäËû£ºRFU Ïà¹Øº¯Êý */ void CMU_RCHFCR_FSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->RCHFCR; tmpreg &= ~(CMU_RCHFCR_FSEL_Msk); tmpreg |= (SetValue & CMU_RCHFCR_FSEL_Msk); CMU->RCHFCR = tmpreg; } uint32_t CMU_RCHFCR_FSEL_Get(void) { return (CMU->RCHFCR & CMU_RCHFCR_FSEL_Msk); } /* RCHFʹÄܼĴæÆ÷ (RCHF Enable) 1£ºÊ¹ÄÜRCHF 0£º¹Ø±ÕRCHF Ïà¹Øº¯Êý */ void CMU_RCHFCR_RCHFEN_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->RCHFCR |= (CMU_RCHFCR_RCHFEN_Msk); } else { CMU->RCHFCR &= ~(CMU_RCHFCR_RCHFEN_Msk); } } FunState CMU_RCHFCR_RCHFEN_Getable(void) { if (CMU->RCHFCR & (CMU_RCHFCR_RCHFEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* RCHFƵÂʵ÷У¼Ä´æÆ÷£¬8¡¯h00±íʾƵÂÊ×îµÍ£¬8¡¯hFF±íʾƵÂÊ×î¸ß£¬µ÷У·¶Î§ÎªÖÐÐÄÆµÂÊ+/-30%£¬µ÷У²½³¤ÎªÖÐÐÄÆµÂÊ0.25% ÉϵçºóоƬ×Ô¶¯´ÓLDT0¶ÁÈ¡8MHzµ÷Уֵ²¢Ð´Èë´Ë¼Ä´æÆ÷ Èí¼þʹÓÃÆäËûƵÂÊʱ£¬¿ÉÒÔ×ÔÐдÓLDT0Ö¸¶¨µØÖ·¶ÁÈ¡µ÷УÐÅÏ¢²¢Ð´Èë´Ë¼Ä´æÆ÷£¬´Ó¶øÈ·±£Êä³öƵÂÊ׼ȷ¡£ Ïà¹Øº¯Êý */ void CMU_RCHFTR_RCHFTRIM_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->RCHFTR; tmpreg &= ~(CMU_RCHFTR_RCHFTRIM_Msk); tmpreg |= (SetValue & CMU_RCHFTR_RCHFTRIM_Msk); CMU->RCHFTR = tmpreg; } uint32_t CMU_RCHFTR_RCHFTRIM_Get(void) { return (CMU->RCHFTR & CMU_RCHFTR_RCHFTRIM_Msk); } void CMU_PLLLCR_PLLDB_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->PLLLCR; tmpreg &= ~(CMU_PLLLCR_PLLDB_Msk); tmpreg |= (SetValue & CMU_PLLLCR_PLLDB_Msk); CMU->PLLLCR = tmpreg; } uint32_t CMU_PLLLCR_PLLDB_Get(void) { return (CMU->PLLLCR & CMU_PLLLCR_PLLDB_Msk); } /* PLL_LËø¶¨±êÖ¾ 1£ºPLL_LÒÑËø¶¨ 0£ºPLL_LÎ´Ëø¶¨ Ïà¹Øº¯Êý */ FlagStatus CMU_PLLLCR_LOCKED_Chk(void) { if (CMU->PLLLCR & CMU_PLLLCR_LOCKED_Msk) { return SET; } else { return RESET; } } /* PLLʹÄܼĴæÆ÷ 1£ºÊ¹ÄÜPLL 0£º¹Ø±ÕPLL Ïà¹Øº¯Êý */ void CMU_PLLLCR_PLLEN_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->PLLLCR |= (CMU_PLLLCR_PLLEN_Msk); } else { CMU->PLLLCR &= ~(CMU_PLLLCR_PLLEN_Msk); } } FunState CMU_PLLLCR_PLLEN_Getable(void) { if (CMU->PLLLCR & (CMU_PLLLCR_PLLEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* PLLH±¶Æµ±È£¬²Î¿¼Ê±ÖÓ1Mhz 0000011111£ºÊä³ö32±¶Æµ 0101111£ºÊä³ö48±¶Æµ Ïà¹Øº¯Êý */ void CMU_PLLHCR_PLLHDB_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->PLLHCR; tmpreg &= ~(CMU_PLLHCR_PLLHDB_Msk); tmpreg |= (SetValue & CMU_PLLHCR_PLLHDB_Msk); CMU->PLLHCR = tmpreg; } uint32_t CMU_PLLHCR_PLLHDB_Get(void) { return (CMU->PLLHCR & CMU_PLLHCR_PLLHDB_Msk); } /* PLLHËø¶¨±êÖ¾£¬Èí¼þͨ¹ý²éѯ´Ë¼Ä´æÆ÷È·ÈÏPLLÒѾ­´¦ÓÚËø¶¨×´Ì¬ 1£ºPLLÒÑËø¶¨ 0£ºPLLÎ´Ëø¶¨ Ïà¹Øº¯Êý */ FlagStatus CMU_PLLHCR_LOCKED_Chk(void) { if (CMU->PLLHCR & CMU_PLLHCR_LOCKED_Msk) { return SET; } else { return RESET; } } /* PLLH²Î¿¼Ê±ÖÓÔ¤·ÖƵ£¨Ä¿±êÊDzúÉú1MHz²Î¿¼Ê±ÖÓ¸øPLL£© 000£º²»·ÖƵ 001£º2·ÖƵ 010£º4·ÖƵ 011£º8·ÖƵ 100£º12·ÖƵ 101£º16·ÖƵ 110£º24·ÖƵ 111£º32·ÖƵ Ïà¹Øº¯Êý */ void CMU_PLLHCR_REFPRSC_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->PLLHCR; tmpreg &= ~(CMU_PLLHCR_REFPRSC_Msk); tmpreg |= (SetValue & CMU_PLLHCR_REFPRSC_Msk); CMU->PLLHCR = tmpreg; } uint32_t CMU_PLLHCR_REFPRSC_Get(void) { return (CMU->PLLHCR & CMU_PLLHCR_REFPRSC_Msk); } /* PLLHÊä³öÑ¡Ôñ¼Ä´æÆ÷ 0£ºÑ¡ÔñPLLHÒ»±¶Êä³ö×÷ΪÊý×Öµç·ÄÚµÄPLLʱÖÓ 1£ºÑ¡ÔñPLLHÁ½±¶Êä³ö×÷ΪÊý×Öµç·ÄÚµÄPLLʱÖÓ Ïà¹Øº¯Êý */ void CMU_PLLHCR_OSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->PLLHCR; tmpreg &= ~(CMU_PLLHCR_OSEL_Msk); tmpreg |= (SetValue & CMU_PLLHCR_OSEL_Msk); CMU->PLLHCR = tmpreg; } uint32_t CMU_PLLHCR_OSEL_Get(void) { return (CMU->PLLHCR & CMU_PLLHCR_OSEL_Msk); } /* PLLHÊäÈëÑ¡Ôñ¼Ä´æÆ÷ 0£ºRCHF 1£ºXTHF */ void CMU_PLLHCR_INSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->PLLHCR; tmpreg &= ~(CMU_PLLHCR_INSEL_Msk); tmpreg |= (SetValue & CMU_PLLHCR_INSEL_Msk); CMU->PLLHCR = tmpreg; } uint32_t CMU_PLLHCR_INSEL_Get(void) { return (CMU->PLLHCR & CMU_PLLHCR_INSEL_Msk); } /* PLLHʹÄܼĴæÆ÷ 1£ºÊ¹ÄÜPLLH 0£º¹Ø±ÕPLLH Ïà¹Øº¯Êý */ void CMU_PLLHCR_EN_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->PLLHCR |= (CMU_PLLHCR_EN_Msk); } else { CMU->PLLHCR &= ~(CMU_PLLHCR_EN_Msk); } } FunState CMU_PLLHCR_EN_Getable(void) { if (CMU->PLLHCR & (CMU_PLLHCR_EN_Msk)) { return ENABLE; } else { return DISABLE; } } /* XTHFÕñµ´Ç¿¶ÈÅäÖà 000£º×îÈõ 111£º×îÇ¿ Ïà¹Øº¯Êý */ void CMU_XTHFCR_XTHF_CFG_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->XTHFCR; tmpreg &= ~(CMU_XTHFCR_XTHF_CFG_Msk); tmpreg |= (SetValue & CMU_XTHFCR_XTHF_CFG_Msk); CMU->XTHFCR = tmpreg; } uint32_t CMU_XTHFCR_XTHF_CFG_Get(void) { return (CMU->XTHFCR & CMU_XTHFCR_XTHF_CFG_Msk); } /* XTHFʹÄܼĴæÆ÷ 0£º¹Ø±ÕXTHF 1£ºÊ¹ÄÜXTHF Ïà¹Øº¯Êý */ void CMU_XTHFCR_XTHFEN_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->XTHFCR |= (CMU_XTHFCR_XTHFEN_Msk); } else { CMU->XTHFCR &= ~(CMU_XTHFCR_XTHFEN_Msk); } } FunState CMU_XTHFCR_XTHFEN_Getable(void) { if (CMU->XTHFCR & (CMU_XTHFCR_XTHFEN_Msk)) { return ENABLE; } else { return DISABLE; } } void CMU_IER_SYSCSE_IE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->IER |= (CMU_IER_SYSCSE_IE_Msk); } else { CMU->IER &= ~(CMU_IER_SYSCSE_IE_Msk); } } FunState CMU_IER_SYSCSE_IE_Getable(void) { if (CMU->IER & (CMU_IER_SYSCSE_IE_Msk)) { return ENABLE; } else { return DISABLE; } } void CMU_IER_HFDET_IE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->IER |= (CMU_IER_HFDET_IE_Msk); } else { CMU->IER &= ~(CMU_IER_HFDET_IE_Msk); } } FunState CMU_IER_HFDET_IE_Getable(void) { if (CMU->IER & (CMU_IER_HFDET_IE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¸ßƵ¾§ÌåÍ£Õñ¼ì²âÄ£¿éÊä³ö 1£ºXTHFδͣÕñ 0£ºXTHFÍ£Õñ Ïà¹Øº¯Êý */ FlagStatus CMU_ISR_HFDETO_Chk(void) { if (CMU->ISR & CMU_ISR_HFDETO_Msk) { return SET; } else { return RESET; } } /* SYSCLKʱÖÓÑ¡Ôñ´íÎóÖжϱêÖ¾¼Ä´æÆ÷£»µ±±»Ñ¡ÖеÄʱÖÓԴûÓÐʹÄÜʱ£¬´ËÖжϱêÖ¾ÖÃ룬Èí¼þд1ÇåÁã¡£ Ïà¹Øº¯Êý */ void CMU_ISR_SYSCSE_IF_Clr(void) { CMU->ISR = CMU_ISR_SYSCSE_IF_Msk; } FlagStatus CMU_ISR_SYSCSE_IF_Chk(void) { if (CMU->ISR & CMU_ISR_SYSCSE_IF_Msk) { return SET; } else { return RESET; } } /* ¸ßƵͣÕñ¼ì²âÖжϱêÖ¾¼Ä´æÆ÷£¬XTHFÍ£ÕñʱӲ¼þÒì²½ÖÃ룬Èí¼þд1ÇåÁ㣻ֻÓÐÔÚFFDETO²»Îª0µÄÇé¿öϲÅÄܹ»Çå³ý´Ë¼Ä´æÆ÷ Ïà¹Øº¯Êý */ void CMU_ISR_HFDET_IF_Clr(void) { CMU->ISR = CMU_ISR_HFDET_IF_Msk; } FlagStatus CMU_ISR_HFDET_IF_Chk(void) { if (CMU->ISR & CMU_ISR_HFDET_IF_Msk) { return SET; } else { return RESET; } } /* EXTI¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR1_EXTICKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_EXTICKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_EXTICKE_Msk); } } FunState CMU_OPCCR1_EXTICKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_EXTICKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* EXTIÖжϲÉÑùʱÖÓÑ¡Ôñ */ void CMU_OPCCR1_EXTICKSEL_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_EXTICKSEL_Msk); tmpreg |= (SetValue & CMU_OPCCR1_EXTICKSEL_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_EXTICKSEL_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_EXTICKSEL_Msk); } /* LPUART1¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR1_LPUART1CKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_LPUART1CKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_LPUART1CKE_Msk); } } FunState CMU_OPCCR1_LPUART1CKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_LPUART1CKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* LPUART0¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR1_LPUART0CKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_LPUART0CKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_LPUART0CKE_Msk); } } FunState CMU_OPCCR1_LPUART0CKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_LPUART0CKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* LPUART1¹¤×÷ʱÖÓÑ¡Ôñ 00£ºLSCLK 01£ºRCHF·ÖƵ£¨¸ù¾ÝRCHFµµÎ»×Ô¶¯·ÖƵµ½32768Hz¸½½ü£© 10£ºRFU 11£ºRFU Ïà¹Øº¯Êý */ void CMU_OPCCR1_LPUART1CKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_LPUART1CKS_Msk); tmpreg |= (SetValue & CMU_OPCCR1_LPUART1CKS_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_LPUART1CKS_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_LPUART1CKS_Msk); } /* LPUART0¹¤×÷ʱÖÓÑ¡Ôñ 00£ºLSCLK 01£ºRCHF·ÖƵ£¨¸ù¾ÝRCHFµµÎ»×Ô¶¯·ÖƵµ½32768Hz¸½½ü£© 10£ºRFU 11£ºRFU Ïà¹Øº¯Êý */ void CMU_OPCCR1_LPUART0CKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_LPUART0CKS_Msk); tmpreg |= (SetValue & CMU_OPCCR1_LPUART0CKS_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_LPUART0CKS_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_LPUART0CKS_Msk); } /* I2C1¹¤×÷ʱÖÓʹÄÜ Ïà¹Øº¯Êý */ void CMU_OPCCR1_I2C1CKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_I2C1CKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_I2C1CKE_Msk); } } FunState CMU_OPCCR1_I2C1CKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_I2C1CKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* I2C0¹¤×÷ʱÖÓʹÄÜ Ïà¹Øº¯Êý */ void CMU_OPCCR1_I2C0CKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_I2C0CKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_I2C0CKE_Msk); } } FunState CMU_OPCCR1_I2C0CKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_I2C0CKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* I2C1Ö÷»ú¹¤×÷ʱÖÓÑ¡Ôñ 00£ºAPBCLK 01£ºRCHF 10£ºSYSCLK 11£ºAPBCLK Ïà¹Øº¯Êý */ void CMU_OPCCR1_I2C1CKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_I2C1CKS_Msk); tmpreg |= (SetValue & CMU_OPCCR1_I2C1CKS_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_I2C1CKS_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_I2C1CKS_Msk); } /* I2C0Ö÷»ú¹¤×÷ʱÖÓÑ¡Ôñ 00£ºAPBCLK 01£ºRCHF 10£ºSYSCLK 11£ºAPBCLK Ïà¹Øº¯Êý */ void CMU_OPCCR1_I2C0CKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_I2C0CKS_Msk); tmpreg |= (SetValue & CMU_OPCCR1_I2C0CKS_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_I2C0CKS_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_I2C0CKS_Msk); } /* UART1¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR1_UART1CKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_UART1CKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_UART1CKE_Msk); } } FunState CMU_OPCCR1_UART1CKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_UART1CKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* UART0¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR1_UART0CKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR1 |= (CMU_OPCCR1_UART0CKE_Msk); } else { CMU->OPCCR1 &= ~(CMU_OPCCR1_UART0CKE_Msk); } } FunState CMU_OPCCR1_UART0CKE_Getable(void) { if (CMU->OPCCR1 & (CMU_OPCCR1_UART0CKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* UART1¹¤×÷ʱÖÓÑ¡Ôñ 00£ºAPBCLK 01£ºRCHF 10£ºSYSCLK 11£ºRFU Ïà¹Øº¯Êý */ void CMU_OPCCR1_UART1CKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_UART1CKS_Msk); tmpreg |= (SetValue & CMU_OPCCR1_UART1CKS_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_UART1CKS_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_UART1CKS_Msk); } /* UART0¹¤×÷ʱÖÓÑ¡Ôñ 00£ºAPBCLK 01£ºRCHF 10£ºSYSCLK 11£ºRFU Ïà¹Øº¯Êý */ void CMU_OPCCR1_UART0CKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR1; tmpreg &= ~(CMU_OPCCR1_UART0CKS_Msk); tmpreg |= (SetValue & CMU_OPCCR1_UART0CKS_Msk); CMU->OPCCR1 = tmpreg; } uint32_t CMU_OPCCR1_UART0CKS_Get(void) { return (CMU->OPCCR1 & CMU_OPCCR1_UART0CKS_Msk); } /* Ëæ»úÊý·¢ÉúÆ÷¹¤×÷ʱÖÓ·ÖÆµ 000£º²»·ÖƵ 001£º2·ÖƵ 010£º4·ÖƵ 011£º8·ÖƵ 100£º16·ÖƵ 101£º32·ÖƵ 110, 111£ºRFU Ïà¹Øº¯Êý */ void CMU_OPCCR2_RNGPRSC_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR2; tmpreg &= ~(CMU_OPCCR2_RNGPRSC_Msk); tmpreg |= (SetValue & CMU_OPCCR2_RNGPRSC_Msk); CMU->OPCCR2 = tmpreg; } uint32_t CMU_OPCCR2_RNGPRSC_Get(void) { return (CMU->OPCCR2 & CMU_OPCCR2_RNGPRSC_Msk); } /* Flash²ÁдʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR2_NVMCKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR2 |= (CMU_OPCCR2_NVMCKE_Msk); } else { CMU->OPCCR2 &= ~(CMU_OPCCR2_NVMCKE_Msk); } } FunState CMU_OPCCR2_NVMCKE_Getable(void) { if (CMU->OPCCR2 & (CMU_OPCCR2_NVMCKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* Ëæ»úÊý·¢ÉúÆ÷¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR2_RNGCKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR2 |= (CMU_OPCCR2_RNGCKE_Msk); } else { CMU->OPCCR2 &= ~(CMU_OPCCR2_RNGCKE_Msk); } } FunState CMU_OPCCR2_RNGCKE_Getable(void) { if (CMU->OPCCR2 & (CMU_OPCCR2_RNGCKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* _¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR2_LPTCKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR2 |= (CMU_OPCCR2_LPTCKE_Msk); } else { CMU->OPCCR2 &= ~(CMU_OPCCR2_LPTCKE_Msk); } } FunState CMU_OPCCR2_LPTCKE_Getable(void) { if (CMU->OPCCR2 & (CMU_OPCCR2_LPTCKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* _¹¤×÷ʱÖÓÑ¡Ôñ 00£ºAPBCLK 01£ºLSCLK 10£ºRCLP 11£ºPLL_L Ïà¹Øº¯Êý */ void CMU_OPCCR2_LPTCKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR2; tmpreg &= ~(CMU_OPCCR2_LPTCKS_Msk); tmpreg |= (SetValue & CMU_OPCCR2_LPTCKS_Msk); CMU->OPCCR2 = tmpreg; } uint32_t CMU_OPCCR2_LPTCKS_Get(void) { return (CMU->OPCCR2 & CMU_OPCCR2_LPTCKS_Msk); } /* BSTIM¹¤×÷ʱÖÓʹÄÜ£¬¸ßÓÐЧ Ïà¹Øº¯Êý */ void CMU_OPCCR2_BSTCKE_Setable(FunState NewState) { if (NewState == ENABLE) { CMU->OPCCR2 |= (CMU_OPCCR2_BSTCKE_Msk); } else { CMU->OPCCR2 &= ~(CMU_OPCCR2_BSTCKE_Msk); } } FunState CMU_OPCCR2_BSTCKE_Getable(void) { if (CMU->OPCCR2 & (CMU_OPCCR2_BSTCKE_Msk)) { return ENABLE; } else { return DISABLE; } } /* BSTIM¹¤×÷ʱÖÓÔ´Ñ¡Ôñ 00£ºAPBCLK 01£ºLSCLK 10£ºRCLP 11£ºSYSCLK Ïà¹Øº¯Êý */ void CMU_OPCCR2_BSTCKS_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = CMU->OPCCR2; tmpreg &= ~(CMU_OPCCR2_BSTCKS_Msk); tmpreg |= (SetValue & CMU_OPCCR2_BSTCKS_Msk); CMU->OPCCR2 = tmpreg; } uint32_t CMU_OPCCR2_BSTCKS_Get(void) { return (CMU->OPCCR2 & CMU_OPCCR2_BSTCKS_Msk); } void CMU_Deinit(void) { //CMU->SYSCLKCR = ; //CMU->RCHFCR = 0x00000000; //CMU->RCHFTR = 0x00000000; //CMU->PLLLCR = ; //CMU->PLLHCR = 0x00000000; //CMU->XTHFCR = 0x00000000; //CMU->IER = ; //CMU->ISR = ; //CMU->PCLKCR1 = 0x00000058; //CMU->PCLKCR2 = 0x00000000; //CMU->PCLKCR3 = 0x00000000; //CMU->PCLKCR4 = ; //CMU->OPCCR1 = 0x00000000; //CMU->OPCCR2 = 0x00000000; } //Code_End /******************************** »ñȡоƬÒÑÉèÖõIJ»Í¬Ê±ÖÓÆµÂʺ¯Êý ¹¦ÄÜ:»ñȡоƬÒÑÉèÖõIJ»Í¬Ê±ÖÓÆµÂÊ RCHF_Frequency PLL_H_Frequency SYSCLK_Frequency AHBCLK_Frequency APBCLK_Frequency ********************************/ void CMU_GetClocksFreq(CMU_ClocksType* para) { uint32_t tmp32 = 0; para->RCHF_Frequency = 0; para->PLL_H_Frequency = 0; para->SYSCLK_Frequency = 0; para->AHBCLK_Frequency = 0; para->APBCLK_Frequency = 0; /* Get RCHF FSEL */ if(ENABLE == CMU_RCHFCR_RCHFEN_Getable()) { tmp32 = CMU_RCHFCR_FSEL_Get(); tmp32 = tmp32 >> CMU_RCHFCR_FSEL_Pos; /* RCHF clock frequency */ para->RCHF_Frequency = __RCHF_INITIAL_CLOCK * (tmp32 + 1); } if(ENABLE == CMU_PLLHCR_EN_Getable()) { /* PLLH±¶Æµ±È */ tmp32 = CMU_PLLHCR_PLLHDB_Get(); tmp32 = tmp32 >> CMU_PLLHCR_PLLHDB_Pos; para->PLL_H_Frequency = (tmp32 + 1) * 1000000; /* PLLHÊä³öÑ¡Ôñ¼Ä´æÆ÷ */ if( CMU_PLLHCR_OSEL_X2 == CMU_PLLHCR_OSEL_Get() ) { para->PLL_H_Frequency = (para->PLL_H_Frequency)*2; } } /* Get SYSCLK source */ tmp32 = CMU_SYSCLKCR_SYSCLKSEL_Get(); tmp32 = tmp32 >> CMU_SYSCLKCR_SYSCLKSEL_Pos; switch (tmp32) { case 0x00: /* RCHF used as system clock source */ para->SYSCLK_Frequency = para->RCHF_Frequency; break; case 0x01: /* XTHF used as system clock source */ para->SYSCLK_Frequency = __XTHF_CLOCK; break; case 0x02: /* PLL_H used as system clock source */ para->SYSCLK_Frequency = para->PLL_H_Frequency; break; case 0x03: /* LSCLK used as system clock source */ para->SYSCLK_Frequency = __XTLF_CLOCK; break; default: para->SYSCLK_Frequency = para->RCHF_Frequency; break; } /* Get AHB PRES */ tmp32 = CMU_SYSCLKCR_AHBPRES_Get(); tmp32 = tmp32 >> CMU_SYSCLKCR_AHBPRES_Pos; switch(tmp32) { case 0x04: //100:DIV2 para->AHBCLK_Frequency = para->SYSCLK_Frequency/2; break; case 0x05: //101:DIV4 para->AHBCLK_Frequency = para->SYSCLK_Frequency/4; break; case 0x06: //110:DIV8 para->AHBCLK_Frequency = para->SYSCLK_Frequency/8; break; case 0x07: //111:DIV16 para->AHBCLK_Frequency = para->SYSCLK_Frequency/16; break; default: //0XX:DIV1 para->AHBCLK_Frequency = para->SYSCLK_Frequency; break; } /* Get APB PRES */ tmp32 = CMU_SYSCLKCR_APBPRES_Get(); tmp32 = tmp32 >> CMU_SYSCLKCR_APBPRES_Pos; /* APB clock frequency */ switch(tmp32) { case 0x04: //100:DIV2 para->APBCLK_Frequency = para->AHBCLK_Frequency/2; break; case 0x05: //101:DIV4 para->APBCLK_Frequency = para->AHBCLK_Frequency/4; break; case 0x06: //110:DIV8 para->APBCLK_Frequency = para->AHBCLK_Frequency/8; break; case 0x07: //111:DIV16 para->APBCLK_Frequency = para->AHBCLK_Frequency/16; break; default: //0XX:DIV1 para->APBCLK_Frequency = para->AHBCLK_Frequency; break; } } /******************************** ÍâÉèʱÖÓʹÄܺ¯Êý ¹¦ÄÜ:¶ÔÍâÉèÄ£¿éËùÐèÒªµÄ¶ÔӦʱÖÓ½øÐÐʹÄÜ ÊäÈ룺periph_defÍⲿģ¿é±êºÅ NewStateʹÄÜλ ********************************/ void CMU_PERCLK_SetableEx(uint32_t periph_def, FunState NewState) { __IO uint32_t *p_reg = 0; uint32_t TempREG; switch((periph_def & 0x0F000000)) { case 0x01000000: p_reg = &(CMU->PCLKCR1); break; case 0x02000000: p_reg = &(CMU->PCLKCR2); break; case 0x03000000: p_reg = &(CMU->PCLKCR3); break; case 0x04000000: p_reg = &(CMU->PCLKCR4); break; default: break; } if(p_reg) { periph_def &= 0xFFFF; TempREG = (0x1U << periph_def); if (NewState != DISABLE) { *p_reg |= TempREG; } else { *p_reg &= ~TempREG; } } } /******************************** RCHF³õʼ»¯º¯Êý ¹¦ÄÜ:¶ÔRCHF½øÐгõʼ»¯ ÊäÈ룺RCHFƵÂʺÍʹÄÜ ********************************/ void CMU_RCHF_Init(CMU_RCHF_InitTypeDef* para) { CMU_RCHFCR_FSEL_Set(para->FSEL); CMU_RCHFCR_RCHFEN_Setable(para->RCHFEN); } /******************************** PLL H³õʼ»¯º¯Êý ¹¦ÄÜ:¶ÔPLL H½øÐгõʼ»¯ ÊäÈ룺¶ÔPLL HÉèÖõÄÏà¹Ø²ÎÊý ********************************/ void CMU_PLL_H_Init(CMU_PLL_H_InitTypeDef* para) { CMU_PLLHCR_PLLHDB_Set(para->PLLHDB); CMU_PLLHCR_REFPRSC_Set(para->REFPRSC); CMU_PLLHCR_OSEL_Set(para->PLLH_OSEL); CMU_PLLHCR_INSEL_Set(para->PLLH_INSEL); CMU_PLLHCR_EN_Setable(para->PLLH_EN); } /* ϵͳʱÖÓ³õʼ»¯ */ void CMU_SysClk_Init(CMU_SYSCLK_InitTypeDef* para) { CMU_SYSCLKCR_SYSCLKSEL_Set(para->SYSCLKSEL); CMU_SYSCLKCR_AHBPRES_Set(para->AHBPRES); CMU_SYSCLKCR_APBPRES_Set(para->APBPRES); CMU_SYSCLKCR_SLP_ENEXTI_Setable(para->SLP_ENEXTI); } /******************************** rchf³£ÎÂÐ£×¼ÖµÔØÈ뺯Êý ¹¦ÄÜ:rchf³£ÎÂÐ£×¼ÖµÔØÈë(rchf³£ÎÂÐ£×¼ÖµÔØÈë(оƬ¸´Î»ºó×Ô¶¯ÔØÈë8MµÄУ׼ֵ)) ÊäÈ룺ҪÉèÖõÄRCHFƵÂÊ ClkMode 1 = 8M ClkMode 2 = 16M ClkMode 3 = 24M ClkMode 4 = 32M ********************************/ void CMU_Init_RCHF_Trim( uint8_t ClkMode ) { uint32_t Temp32; if( ClkMode == 1 ) //8M { Temp32 = const_rchf_Trim8; } else if( ClkMode == 2 )//16M { Temp32 = const_rchf_Trim16; } else if( ClkMode == 3 )//24M { Temp32 = const_rchf_Trim24; } else if( ClkMode == 4 )//32M { Temp32 = const_rchf_Trim32; } else//ĬÈÏ8M { Temp32 = const_rchf_Trim8; } if( ((Temp32>>16)&0x0000FFFF) == ((~Temp32)&0x0000FFFF) ) //Õý·´ÂëУÑéÅÐ¶Ï { CMU_RCHFTR_RCHFTRIM_Set(Temp32&0x000000FF); } else { CMU_RCHFTR_RCHFTRIM_Set(0x0000006B); } } /******END OF FILE****/