?? hal.h
字號:
/******************************************************************************
* *
* ********** *
* ************ *
* *** *** *
* *** ++ *** *
* *** + + *** CHIPCON *
* *** + *
* *** + + *** *
* *** ++ *** *
* *** *** *
* ************ *
* ********** *
* *
*******************************************************************************
Filename: hal.h
Target: cc1110
Author: EFU/ KJA
Revised: 20/6-2006
Revision: 1.0
Description:
Hardware Abstraction Layer, Utility Library.
******************************************************************************/
#ifndef HAL_H
#define HAL_H
#include "ioCC2510.h"
/******************************************************************************
******************* Commonly used types *******************
******************************************************************************/
typedef unsigned char BOOL;
// Data
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
// Unsigned numbers
typedef unsigned char UINT8;
typedef unsigned char INT8U;
typedef unsigned short UINT16;
typedef unsigned short INT16U;
typedef unsigned long UINT32;
typedef unsigned long INT32U;
// Signed numbers
typedef signed char INT8;
typedef signed short INT16;
typedef signed long INT32;
//-----------------------------------------------------------------------------
// Common values
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef NULL
#define NULL 0
#endif
#ifndef HIGH
#define HIGH 1
#endif
#ifndef LOW
#define LOW 0
#endif
/*********************************************************************
//按鍵掃描
*********************************************************************/
//鍵值
#define K_UP 0X20
#define K_DOWN 0X21
#define K_LIFT 0X22
#define K_RIGHT 0X23
#define K_CANCEL 0X24
#define K_OK 0X25
//端口
#define KEY_ESC P0_2
#define KEY_OK P0_3
#define KEY_UP P0_5
#define KEY_DOWN P0_4
extern INT8U ScanKey(void);
extern BOOL stopApplication(void);
extern INT8U LanguageSel;
//-----------------------------------------------------------------------------
#define UPPER_BYTE(a) ((BYTE) (((WORD)(a)) >> 8))
#define HIBYTE(a) UPPER_BYTE(a)
#define LOWER_BYTE(a) ((BYTE) ( (WORD)(a)) )
#define LOBYTE(a) LOWER_BYTE(a)
#define SET_WORD(regH, regL, word) \
do{ \
(regH) = UPPER_BYTE((word)); \
(regL) = LOWER_BYTE((word)); \
}while(0)
#define READ_RFR16(reg) ((((WORD) ##reg##H) << 8) + ##reg##L)
#define WRITE_RFR16(reg, value) do { ##reg##H = HIBYTE(value); ##reg##L = LOBYTE(value); } while (0)
/******************************************************************************
******************* Port functions/macros *******************
******************************************************************************/
// Macros for simplifying access to I/O pin setup and usage
//*****************************************************************************
// Macros for configuring IO peripheral location:
// Example usage:
// IO_PER_LOC_TIMER1_AT_PORT0_PIN234();
// IO_PER_LOC_TIMER4_AT_PORT2_PIN03();
// IO_PER_LOC_USART1_AT_PORT0_PIN2345();
#define IO_PER_LOC_TIMER1_AT_PORT0_PIN234() do { PERCFG = (PERCFG&~0x40)|0x00; } while (0)
#define IO_PER_LOC_TIMER1_AT_PORT1_PIN012() do { PERCFG = (PERCFG&~0x40)|0x40; } while (0)
#define IO_PER_LOC_TIMER3_AT_PORT1_PIN34() do { PERCFG = (PERCFG&~0x20)|0x00; } while (0)
#define IO_PER_LOC_TIMER3_AT_PORT1_PIN67() do { PERCFG = (PERCFG&~0x20)|0x20; } while (0)
#define IO_PER_LOC_TIMER4_AT_PORT1_PIN01() do { PERCFG = (PERCFG&~0x10)|0x00; } while (0)
#define IO_PER_LOC_TIMER4_AT_PORT2_PIN03() do { PERCFG = (PERCFG&~0x10)|0x10; } while (0)
#define IO_PER_LOC_SPI1_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x02)|0x00; } while (0)
#define IO_PER_LOC_SPI1_AT_PORT1_PIN4567() do { PERCFG = (PERCFG&~0x02)|0x02; } while (0)
#define IO_PER_LOC_SPI0_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x00; } while (0)
#define IO_PER_LOC_SPI0_AT_PORT1_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x01; } while (0)
#define IO_PER_LOC_UART1_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x02)|0x00; } while (0)
#define IO_PER_LOC_UART1_AT_PORT1_PIN4567() do { PERCFG = (PERCFG&~0x02)|0x02; } while (0)
#define IO_PER_LOC_UART0_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x00; } while (0)
#define IO_PER_LOC_UART0_AT_PORT1_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x01; } while (0)
// Actual MCU pin configuration:
//
// Peripheral I/O signal Alt1 Alt2
// -------------------------------------------
// Timer1 channel0 P0.2 P1.2
// Timer1 channel1 P0.3 P1.1
// Timer1 channel2 P0.4 P1.0
// Timer3 channel0 P1.3 P1.6
// Timer3 channel1 P1.4 P1.7
// Timer4 channel0 P1.0 P2.0
// Timer4 channel1 P1.1 P2.3
// USART0 TXD/MOSI P0.3 P1.5
// USART0 RXD/MISO P0.2 P1.4
// USART0 RTS/SCK P0.5 P1.3
// USART0 CTS/SS_N P0.4 P1.2
// USART1 TXD/MOSI P0.4 P1.6
// USART1 RXD/MISO P0.5 P1.7
// USART1 RTS/SCK P0.3 P1.5
// USART1 CTS/SS_N P0.2 P1.4
// Macros for configuring IO direction:
// Example usage:
// IO_DIR_PORT_PIN(0, 3, IO_IN); // Set P0_3 to input
// IO_DIR_PORT_PIN(2, 1, IO_OUT); // Set P2_1 to output
#define IO_DIR_PORT_PIN(port, pin, dir) \
do { \
if (dir == IO_OUT) \
P##port##DIR |= (0x01<<(pin)); \
else \
P##port##DIR &= ~(0x01<<(pin)); \
}while(0)
// Where port={0,1,2}, pin={0,..,7} and dir is one of:
#define IO_IN 0
#define IO_OUT 1
// Macros for configuring IO input mode:
// Example usage:
// IO_IMODE_PORT_PIN(0,0,IO_IMODE_PUD);
// IO_IMODE_PORT_PIN(2,0,IO_IMODE_TRI);
// IO_IMODE_PORT_PIN(1,3,IO_IMODE_PUD);
#define IO_IMODE_PORT_PIN(port, pin, imode) \
do { \
if (imode == IO_IMODE_TRI) \
P##port##INP |= (0x01<<(pin)); \
else \
P##port##INP &= ~(0x01<<(pin)); \
} while (0)
// where imode is one of:
#define IO_IMODE_PUD 0 // Pull-up/pull-down
#define IO_IMODE_TRI 1 // Tristate
// Macro for configuring IO drive mode:
// Example usage:
// IIO_PUD_PORT(0, IO_PULLUP);
// IIO_PUD_PORT(1, IO_PULLDOWN);
// IIO_PUD_PORT(2, IO_PULLUP);
#define IO_PUD_PORT(port, pud) \
do { \
if (pud == IO_PULLDOWN) \
P2INP |= (0x01 << (port+5)); \
else \
P2INP &= ~(0x01 << (port+5));\
} while (0)
#define IO_PULLUP 0
#define IO_PULLDOWN 1
// Macros for function select (General purpose I/O / Peripheral function):
// Example usage:
// IO_FUNC_PORT0_PIN0(0, 0, IO_FUNC_PERIPH);
// IO_FUNC_PORT0_PIN1(0, 1, IO_FUNC_GIO);
// IO_FUNC_PORT2_PIN3(2, 3, IO_FUNC_PERIPH);
#define IO_FUNC_PORT_PIN(port, pin, func) \
do { \
if((port == 2) && (pin == 3)){ \
if (func) { \
P2SEL |= 0x02; \
} else { \
P2SEL &= ~0x02; \
} \
} \
else if((port == 2) && (pin == 4)){ \
if (func) { \
P2SEL |= 0x04; \
} else { \
P2SEL &= ~0x04; \
} \
} \
else{ \
if (func) { \
P##port##SEL |= (0x01<<(pin)); \
} else { \
P##port##SEL &= ~(0x01<<(pin));\
} \
} \
} while (0)
// where func is one of:
#define IO_FUNC_GIO 0 // General purpose I/O
#define IO_FUNC_PERIPH 1 // Peripheral function
// Macros for configuring the ADC input:
// Example usage:
// IO_ADC_PORT0_PIN(0, IO_ADC_EN);
// IO_ADC_PORT0_PIN(4, IO_ADC_DIS);
// IO_ADC_PORT0_PIN(6, IO_ADC_EN);
#define IO_ADC_PORT0_PIN(pin, adcEn) \
do { \
if (adcEn) \
ADCCFG |= (0x01<<pin); \
else \
ADCCFG &= ~(0x01<<pin); } \
while (0)
// where adcEn is one of:
#define IO_ADC_EN 1 // ADC input enabled
#define IO_ADC_DIS 0 // ADC input disab
/******************************************************************************
******************* Interrupt functions/macros *******************
******************************************************************************/
// Macros which simplify access to interrupt enables, interrupt flags and
// interrupt priorities. Increases code legibility.
//******************************************************************************
#define INT_ON 1
#define INT_OFF 0
#define INT_SET 1
#define INT_CLR 0
// Global interrupt enables
#define INT_GLOBAL_ENABLE(on) EA=(!!on)
#define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0x00)
#define INUM_RFTXRX 0
#define INUM_ADC 1
#define INUM_URX0 2
#define INUM_URX1 3
#define INUM_ENC 4
#define INUM_ST 5
#define INUM_P2INT 6
#define INUM_UTX0 7
#define INUM_DMA 8
#define INUM_T1 9
#define INUM_T2 10
#define INUM_T3 11
#define INUM_T4 12
#define INUM_P0INT 13
#define INUM_UTX1 14
#define INUM_P1INT 15
#define INUM_RF 16
#define INUM_WDT 17
#define NBR_OF_INTERRUPTS 18
// Macro used together with the INUM_* constants
// to enable or disable certain interrupts.
// Example usage:
// INT_ENABLE(INUM_RFERR, INT_ON);
// INT_ENABLE(INUM_URX0, INT_OFF);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -