chen
2024-11-08 cc432b761c884a0bd8e9d83db0a4e26109fc08b1
keil/include/components/wsf/sources/platform/pal_sys.c
对比新文件
@@ -0,0 +1,219 @@
/*************************************************************************************************/
/*!
 *  \file
 *
 *  \brief  System hooks.
 *
 *  Copyright (c) 2013-2019 Arm Ltd. All Rights Reserved.
 *
 *  Copyright (c) 2019-2020 Packetcraft, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
/*************************************************************************************************/
#include "pal_sys.h"
#include "pal_uart.h"
#include "mk_common.h"
#include "mk_misc.h"
/**************************************************************************************************
  Macros
**************************************************************************************************/
/*! \brief      Starting memory location of free memory. */
#define FREE_MEM_START ((uint8_t *)palSysFreeMem)
/**************************************************************************************************
  Global Variables
**************************************************************************************************/
/*! \brief      Free memory for pool buffers (align to word boundary). */
static uint32_t palSysFreeMem[FREE_MEM_SIZE / sizeof(uint32_t)];
uint8_t *SystemHeapStart = (uint8_t *)palSysFreeMem;
uint32_t SystemHeapSize = FREE_MEM_SIZE;
/*! \brief      Number of assertions. */
static uint32_t palSysAssertCount;
/*! \brief      Trap enabled flag. */
static volatile bool_t PalSysAssertTrapEnable;
static volatile uint32_t palSysBusyCount;
/**************************************************************************************************
  Functions
**************************************************************************************************/
/*************************************************************************************************/
/*!
 *  \brief  Enter a critical section.
 */
/*************************************************************************************************/
uint32_t PalEnterCs(void)
{
    return int_lock();
}
/*************************************************************************************************/
/*!
 *  \brief  Exit a critical section.
 */
/*************************************************************************************************/
void PalExitCs(uint32_t lock)
{
    int_unlock(lock);
}
/*************************************************************************************************/
/*!
 *  \brief      Common platform initialization.
 */
/*************************************************************************************************/
void PalSysInit(void)
{
    palSysAssertCount = 0;
    PalSysAssertTrapEnable = TRUE;
    palSysBusyCount = 0;
#ifdef DEBUG
    /* Reset free memory. */
    memset(SystemHeapStart, 0, SystemHeapSize);
#endif
}
/*************************************************************************************************/
/*!
 *  \brief      System fault trap.
 */
/*************************************************************************************************/
void PalSysAssertTrap(void)
{
    palSysAssertCount++;
    while (PalSysAssertTrapEnable)
    {
    }
}
/*************************************************************************************************/
/*!
 *  \brief      Set system trap.
 *
 *  \param      enable    Enable assert trap or not.
 */
/*************************************************************************************************/
void PalSysSetTrap(bool_t enable)
{
    PalSysAssertTrapEnable = enable;
}
/*************************************************************************************************/
/*!
 *  \brief      Get assert count.
 */
/*************************************************************************************************/
uint32_t PalSysGetAssertCount(void)
{
    return palSysAssertCount;
}
/*************************************************************************************************/
/*!
 *  \brief      Count stack usage.
 *
 *  \return     Number of bytes used by the stack.
 */
/*************************************************************************************************/
uint32_t PalSysGetStackUsage(void)
{
    /* Not available; stub routine. */
    return 0;
}
/*************************************************************************************************/
/*!
 *  \brief      System sleep.
 */
/*************************************************************************************************/
void PalSysSleep(void)
{
    /* Clock management for low power mode. */
    /* CPU sleep. */
    __WFI();
}
/*************************************************************************************************/
/*!
 *  \brief      Check if system is busy.
 *
 *  \return     TRUE if system is busy.
 */
/*************************************************************************************************/
bool_t PalSysIsBusy(void)
{
    bool_t sysIsBusy = FALSE;
    uint32_t lock = PalEnterCs();
    sysIsBusy = ((palSysBusyCount == 0) ? FALSE : TRUE);
    PalExitCs(lock);
    return sysIsBusy;
}
/*************************************************************************************************/
/*!
 *  \brief      Set system busy.
 *
 *  \return     none.
 */
/*************************************************************************************************/
void PalSysSetBusy(void)
{
    uint32_t lock = PalEnterCs();
    palSysBusyCount++;
    PalExitCs(lock);
}
/*************************************************************************************************/
/*!
 *  \brief      Set system idle.
 */
/*************************************************************************************************/
void PalSysSetIdle(void)
{
    uint32_t lock = PalEnterCs();
    if (palSysBusyCount)
    {
        palSysBusyCount--;
    }
    PalExitCs(lock);
}
/*************************************************************************************************/
/*!
 *  \brief  Get the Systick elapse time in current tick period.
 *
 *  \return Elapse time in current tick period.
 */
/*************************************************************************************************/
uint32_t PalSysTickElapse(void)
{
    return sys_tick_elapse_ms();
}
uint32_t PalSysTickGet(void)
{
    return sys_tick_get();
}