/** ****************************************************************************** * @file xl_uart.c * @author Kirk * @version 4.5.2 * @date Fri Mar 26 17:29:12 2021 * @brief This file provide function about NVIC firmware progreamme ****************************************************************************** * @attention * * 2019 by Chipways Communications,Inc. All Rights Reserved. * This software is supplied under the terms of a license * agreement or non-disclosure agreement with Chipways. * Passing on and copying of this document,and communication * of its contents is not permitted without prior written * authorization. * *

© COPYRIGHT 2019 Chipways

****************************************************************************** */ #if defined(__cplusplus) extern "C" { #endif /* __cplusplus */ /* Includes ---------------------------------------------------------------*/ #include "xl_nvic.h" /** @addtogroup XL6600_StdPeriph_Driver * @{ */ /** @defgroup NVIC NVIC Module * @brief NVIC Driver Modules Library * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /** @defgroup NVIC_Private_Functions * @{ */ /** * @brief ÅäÖÃÓÅÏȼ¶·Ö×é:ÏÈÕ¼ÓÅÏȼ¶ºÍ×ÓÓÅÏȼ¶. * @param NVIC_PriorityGroup: Ö¸¶¨ÓÅÏȼ¶·Ö×é볤¶È. * Õâ¸ö²ÎÊý¿ÉÒÔΪÒÔÏÂÖµ: * @arg NVIC_PriorityGroup_0: ÇÀÕ¼ÓÅÏȼ¶0λ * ×ÓÓÅÏȼ¶2λ * @arg NVIC_PriorityGroup_1: ÏÈÕ¼ÓÅÏȼ¶1λ * ÇÀÓÅÏȼ¶1λ * @arg NVIC_PriorityGroup_2: ÏÈÕ¼ÓÅÏȼ¶2λ * ÇÀÓÅÏȼ¶0λ * @retval None */ void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) { /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */ SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; } /** * @brief ¸ù¾ÝÔÚ NVIC_InitStructÖÐÖ¸¶¨²ÎÊý³õʼ»¯NVICÍâÉè. * @param NVIC_InitStruct: Ö¸Ïò°üº¬Ö¸¶¨NVICÍâÉèÅäÖÃÐÅÏ¢µÄNVIC_InitTypeDef½á¹¹. * @retval None */ void NVIC_Init(const NVIC_InitTypeDef* NVIC_InitStruct) { uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F; if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) { /* Compute the Corresponding IRQ Priority --------------------------------*/ tmppriority = ((uint32_t)0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> (uint8_t)0x08; tmppre = ((uint32_t)0x4 - tmppriority); tmpsub = tmpsub >> tmppriority; tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub; tmppriority = tmppriority << 0x04; NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = (uint8_t)tmppriority; /* Enable the Selected IRQ Channels --------------------------------------*/ NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); } else { /* Disable the Selected IRQ Channels -------------------------------------*/ NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); } } /** * @brief ÉèÖÃʸÁ¿±íµÄλÖÃºÍÆ«ÒÆ. * @param NVIC_VectTab: Ö¸¶¨Ê¸Á¿±íÊÇ·ñÔÚROM»òÉÁ´æÖÐ. * Õâ¸ö²ÎÊý¿ÉÒÔΪÒÔÏÂÖµ: * @arg NVIC_VectTab_RAM * @arg NVIC_VectTab_FLASH * @param Offset: ʸÁ¿±í»ùÓÚÆ«ÒÆ×Ö¶Î,¸ÃÖµ±ØÐëÊÇ 0x200µÄ±¶Êý. * @retval None */ void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) { SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); } /** * @brief Ñ¡Ôñϵͳ½øÈëµÍ¹¦ÂÊģʽµÄÌõ¼þ. * @param LowPowerMode: Ϊϵͳָ¶¨½øÈëµÍ¹¦ÂÊģʽµÄеÄģʽ. * Õâ¸ö²ÎÊý¿ÉÒÔΪÒÔÏÂÖµ: * @arg NVIC_LP_SEVONPEND * @arg NVIC_LP_SLEEPDEEP * @arg NVIC_LP_SLEEPONEXIT * @param NewState: µÍѹ״̬µÄÐÂ״̬. * Õâ¸ö²ÎÊý¿ÉÒÔΪÒÔÏÂÖµ: * @arg ENABLE * @arg DISABLE * @retval None */ void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState) { if (NewState != DISABLE) { SCB->SCR |= LowPowerMode; } else { SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode); } } /** * @brief ÅäÖÃSysTickʱÖÓÔ´. * @param SysTick_CLKSource: Ö¸¶¨SysTickʱÖÓÔ´. * Õâ¸ö²ÎÊý¿ÉÒÔΪÒÔÏÂÖµ: * @arg SysTick_CLKSource_HCLK_Div8: Ñ¡ÔñAHBʱÖÓ³ýÒÔ8×÷ΪϵͳʱÖÓÔ´. * @arg SysTick_CLKSource_HCLK: Ñ¡ÔñAHBʱÖÓ×÷ΪϵͳʱÖÓÔ´. * @retval None */ void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) { if (SysTick_CLKSource == SysTick_CLKSource_HCLK) { SysTick->CTRL |= (uint32_t)SysTick_CLKSource_HCLK; } else { SysTick->CTRL &= (uint32_t)SysTick_CLKSource_HCLK_Div8; } } /** * @} */ /** * @} */ /** * @} */ #ifdef __cplusplus } #endif /* __cplusplus */