123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- #ifndef _HAL_MCU_H
- #define _HAL_MCU_H
- #include "hal_defs.h"
- #include "hal_types.h"
- #define HAL_MCU_CC2530
- #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)
- #elif defined __KEIL__
- #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)
- #else
- #error "ERROR: Unknown compiler."
- #endif
- #define HAL_ENABLE_INTERRUPTS() st( EA = 1; )
- #define HAL_DISABLE_INTERRUPTS() st( EA = 0; )
- #define HAL_INTERRUPTS_ARE_ENABLED() (EA)
- typedef unsigned char halIntState_t;
- #define HAL_ENTER_CRITICAL_SECTION(x) st( x = EA; HAL_DISABLE_INTERRUPTS(); )
- #define HAL_EXIT_CRITICAL_SECTION(x) st( EA = x; )
- #define HAL_CRITICAL_STATEMENT(x) st( halIntState_t _s; HAL_ENTER_CRITICAL_SECTION(_s); x; HAL_EXIT_CRITICAL_SECTION(_s); )
- #ifdef __IAR_SYSTEMS_ICC__
-
- #define HAL_ENTER_ISR() { halIntState_t _isrIntState = EA; HAL_ENABLE_INTERRUPTS();
- #define HAL_EXIT_ISR() EA = _isrIntState; }
- #else
- #define HAL_ENTER_ISR()
- #define HAL_EXIT_ISR()
- #endif
- #define WD_EN BV(3)
- #define WD_MODE BV(2)
- #define WD_INT_1900_USEC (BV(0) | BV(1))
- #define WD_RESET1 (0xA0 | WD_EN | WD_INT_1900_USEC)
- #define WD_RESET2 (0x50 | WD_EN | WD_INT_1900_USEC)
- #define WD_KICK() st( WDCTL = (0xA0 | WDCTL & 0x0F); WDCTL = (0x50 | WDCTL & 0x0F); )
- #define HAL_SYSTEM_RESET() st( HAL_DISABLE_INTERRUPTS(); WDCTL = WD_RESET1; WDCTL = WD_RESET2; for(;;); )
- #define REV_A 0x00
- #define REV_B 0x11
- #define REV_C 0x20
- #define REV_D 0x21
- #define PCON_IDLE BV(0)
- #define OSC_PD BV(2)
- #define PMODE (BV(1) | BV(0))
- #define XOSC_STB BV(6)
- #define HFRC_STB BV(5)
- #define OSC_PD BV(2)
- #define OSC BV(6)
- #define TICKSPD(x) (x << 3)
- #define CLKSPD(x) (x << 0)
- #define CLKCONCMD_32MHZ (0)
- #define CLKCONCMD_16MHZ (CLKSPD(1) | TICKSPD(1) | OSC)
- #define LDRDY BV(0)
- #ifdef POWER_SAVING
- extern volatile __data uint8 halSleepPconValue;
- #define CLEAR_SLEEP_MODE() st( halSleepPconValue = 0; )
- #define ALLOW_SLEEP_MODE() st( halSleepPconValue = PCON_IDLE; )
- #else
- #define CLEAR_SLEEP_MODE()
- #define ALLOW_SLEEP_MODE()
- #endif
- #endif
|