hpw422移植新的sdk
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
/*!
|
||||
* \file hal_mcu.h
|
||||
*
|
||||
* \brief The header of hal_mcu.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
#ifndef _HAL_MCU_H
|
||||
#define _HAL_MCU_H
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Includes
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
#include "hal_defs.h"
|
||||
#include "hal_types.h"
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Target Defines
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
// #define HAL_MCU_CC2530
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Compiler Abstraction
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ---------------------- IAR Compiler ---------------------- */
|
||||
#ifdef __IAR_SYSTEMS_ICC__
|
||||
#include <ioCC2530.h>
|
||||
#define HAL_COMPILER_IAR
|
||||
#define HAL_MCU_LITTLE_ENDIAN() __LITTLE_ENDIAN__
|
||||
#define _PRAGMA(x) _Pragma(#x)
|
||||
#define HAL_ISR_FUNC_DECLARATION(f,v) _PRAGMA(vector=v) __near_func __interrupt void f(void)
|
||||
#define HAL_ISR_FUNC_PROTOTYPE(f,v) _PRAGMA(vector=v) __near_func __interrupt void f(void)
|
||||
#define HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)
|
||||
|
||||
/* ---------------------- Keil Compiler ---------------------- */
|
||||
#elif defined __KEIL__ // TODO
|
||||
//#include <CC2530.h>
|
||||
//#define HAL_COMPILER_KEIL
|
||||
//#define HAL_MCU_LITTLE_ENDIAN() 0
|
||||
//#define HAL_ISR_FUNC_DECLARATION(f,v) void f(void) interrupt v
|
||||
//#define HAL_ISR_FUNC_PROTOTYPE(f,v) void f(void)
|
||||
//#define HAL_ISR_FUNCTION(f,v) HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)
|
||||
|
||||
/* ------------------ Unrecognized Compiler ------------------ */
|
||||
#else
|
||||
// #error "ERROR: Unknown compiler."
|
||||
#endif
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------
|
||||
* Interrupt Macros
|
||||
* ------------------------------------------------------------------------------------------------
|
||||
*/
|
||||
#define HAL_ENABLE_INTERRUPTS() __enable_irq()
|
||||
#define HAL_DISABLE_INTERRUPTS() __disable_irq()
|
||||
#define HAL_INTERRUPTS_ARE_ENABLED() \
|
||||
({ \
|
||||
uint32 primask; \
|
||||
__asm volatile("mrs %0, primask" : "=r"(primask)); \
|
||||
(primask == 0); \
|
||||
})
|
||||
|
||||
// typedef unsigned char halIntState_t;
|
||||
static uint32 criticalNesting = 0;
|
||||
#define HAL_ENTER_CRITICAL_SECTION() \
|
||||
do \
|
||||
{ \
|
||||
if (criticalNesting == 0) \
|
||||
{ \
|
||||
HAL_DISABLE_INTERRUPTS(); \
|
||||
} \
|
||||
criticalNesting++; \
|
||||
} while (0)
|
||||
|
||||
#define HAL_EXIT_CRITICAL_SECTION() \
|
||||
do \
|
||||
{ \
|
||||
if (criticalNesting > 0) \
|
||||
{ \
|
||||
criticalNesting--; \
|
||||
if (criticalNesting == 0) \
|
||||
{ \
|
||||
HAL_ENABLE_INTERRUPTS(); \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HAL_CRITICAL_STATEMENT(x) \
|
||||
do \
|
||||
{ \
|
||||
HAL_ENTER_CRITICAL_SECTION(); \
|
||||
x; \
|
||||
HAL_EXIT_CRITICAL_SECTION(); \
|
||||
} while (0)
|
||||
|
||||
#ifdef __IAR_SYSTEMS_ICC__
|
||||
/* IAR library uses XCH instruction with EA. It may cause the higher priority interrupt to be
|
||||
* locked out, therefore, may increase interrupt latency. It may also create a lockup condition.
|
||||
* This workaround should only be used with 8051 using IAR compiler. When IAR fixes this by
|
||||
* removing XCH usage in its library, compile the following macros to null to disable them.
|
||||
*/
|
||||
#define HAL_ENTER_ISR() { halIntState_t _isrIntState = EA; HAL_ENABLE_INTERRUPTS();
|
||||
#define HAL_EXIT_ISR() EA = _isrIntState; }
|
||||
#else
|
||||
// #define HAL_ENTER_ISR() // TODO
|
||||
// #define HAL_EXIT_ISR()
|
||||
#endif /* __IAR_SYSTEMS_ICC__ */
|
||||
|
||||
/* Dummy for this platform */
|
||||
// #define HAL_AES_ENTER_WORKAROUND() // TODO
|
||||
// #define HAL_AES_EXIT_WORKAROUND()
|
||||
|
||||
#ifdef POWER_SAVING
|
||||
// extern volatile __data uint8 halSleepPconValue;
|
||||
extern volatile uint8 halSleepPconValue; // TODO
|
||||
|
||||
/* Any ISR that is used to wake up the chip shall call this macro. This prevents the race condition
|
||||
* when the PCON IDLE bit is set after such a critical ISR fires during the prep for sleep.
|
||||
*/
|
||||
#define CLEAR_SLEEP_MODE() st( halSleepPconValue = 0; )
|
||||
#define ALLOW_SLEEP_MODE() st( halSleepPconValue = 1; ) // TODO
|
||||
#else
|
||||
#define CLEAR_SLEEP_MODE()
|
||||
#define ALLOW_SLEEP_MODE()
|
||||
#endif
|
||||
/**************************************************************************************************
|
||||
*/
|
||||
#endif
|
||||
Reference in New Issue
Block a user