/***************************************************************
 *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
 *文件名：  lib_scs.c
 *作  者：  Liut
 *版  本：  V1.00
 *日  期：  2017/07/14
 *描  述：  内核模块库函数
 *备  注：  适用于 ES8P508x芯片
 本软件仅供学习和演示使用，对用户直接引用代码所带来的风险或后果不承担任何法律责任。
 ***************************************************************/
#include "lib_scs.h"

/***************************************************************
  函数名：NVIC_Init
  描  述：NVIC初始化配置
  输入值：Channel：中断通道 、 Priority：中断优先级 、 Cmd：失能或使能
  输出值：无
  返回值：无
 ***************************************************************/
void NVIC_Init(NVIC_IRQChannel Channel, NVIC_IRQPriority Priority, TYPE_FUNCEN Cmd)
{
    uint32_t tmppriority = 0x00;

    if (Cmd != DISABLE)
    {
        /* Compute the Corresponding IRQ Priority */
        tmppriority = NVIC->IP[Channel >> 0x02];
        tmppriority &= (uint32_t)(~(((uint32_t)0xFF) << ((Channel & 0x03) * 8)));
        tmppriority |= (uint32_t)((((uint32_t)Priority << 6) & 0xFF) << ((Channel & 0x03) * 8));

        NVIC->IP[Channel >> 0x02] = tmppriority;

        /* Enable the Selected IRQ Channels */
        NVIC->ISER[0] = (uint32_t)0x01 << (Channel & (uint8_t)0x1F);
    }
    else
    {
        /* Disable the Selected IRQ Channels */
        NVIC->ICER[0] = (uint32_t)0x01 << (Channel & (uint8_t)0x1F);
    }
}

/***************************************************************
  函数名：SCB_SystemLPConfig
  描  述：配置系统休眠模式
  输入值：LowPowerMode：休眠模式 、 NewState：使能、使能
  输出值：无
  返回值：无
 ***************************************************************/
void SCB_SystemLPConfig(SCB_TYPE_SCR LowPowerMode, TYPE_FUNCEN NewState)
{
    if (NewState != DISABLE)
        SCB->SCR |= LowPowerMode;
    else
        SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
}

/***************************************************************
  函数名：SCB_GetCpuID
  描  述：获取CPUID
  输入值：无
  输出值：无
  返回值：32位ID值
 ***************************************************************/
uint32_t SCB_GetCpuID(void)
{
    return (SCB->CPUID);
}

/***************************************************************
  函数名：SysTick_Init
  描  述：SysTick初始化配置
  输入值：初始化配置结构体地址
  输出值：无
  返回值：无
 ***************************************************************/
void SysTick_Init(SYSTICK_InitStruType *SysT_InitStruct)
{
    uint32_t temp32 = 0;

    SysTick->LOAD = SysT_InitStruct->SysTick_Value;
    SysTick->VAL = (uint32_t)0;

    if (SysT_InitStruct->SysTick_ClkSource != SysTick_ClkS_Base)
        temp32 |= 0x00000004;
    else
        temp32 &= 0xFFFFFFFB;

    if (SysT_InitStruct->SysTick_ITEnable != DISABLE)
        temp32 |= 0x00000002;
    else
        temp32 &= 0xFFFFFFFD;

    SysTick->CTRL = temp32;
}

/*************************END OF FILE**********************/
