54 lines
3.3 KiB
C
54 lines
3.3 KiB
C
//-------------------------------------------------------------------
|
|
// Filename: hal_cc8051.h
|
|
//-------------------------------------------------------------------
|
|
//-------------------------------------------------------------------
|
|
//CONSTANTS
|
|
//-------------------------------------------------------------------
|
|
#define BIT0 0x01
|
|
#define BIT1 0x02
|
|
#define BIT2 0x04
|
|
#define BIT3 0x08
|
|
#define BIT4 0x10
|
|
#define BIT5 0x20
|
|
#define BIT6 0x40
|
|
#define BIT7 0x80
|
|
|
|
//-------------------------------------------------------------------
|
|
//MACROS
|
|
//-------------------------------------------------------------------
|
|
#define MCU_IO_TRISTATE 1 // Used as "func" for the macros below
|
|
#define MCU_IO_PULLUP 2
|
|
#define MCU_IO_PULLDOWN 3
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Macros for simple configuration of IO pins on TI LPW SoCs
|
|
//-----------------------------------------------------------------------------
|
|
#define MCU_IO_PERIPHERAL(port, pin) MCU_IO_PERIPHERAL_PREP(port, pin)
|
|
#define MCU_IO_INPUT(port, pin, func) MCU_IO_INPUT_PREP(port, pin, func)
|
|
#define MCU_IO_OUTPUT(port, pin, val) MCU_IO_OUTPUT_PREP(port, pin, val)
|
|
#define MCU_IO_SET(port, pin, val) MCU_IO_SET_PREP(port, pin, val)
|
|
#define MCU_IO_SET_HIGH(port, pin) MCU_IO_SET_HIGH_PREP(port, pin)
|
|
#define MCU_IO_SET_LOW(port, pin) MCU_IO_SET_LOW_PREP(port, pin)
|
|
#define MCU_IO_TGL(port, pin) MCU_IO_TGL_PREP(port, pin)
|
|
#define MCU_IO_GET(port, pin) MCU_IO_GET_PREP(port, pin)
|
|
#define MCU_IO_DIR_INPUT(port, pin) MCU_IO_DIR_INPUT_PREP(port, pin)
|
|
#define MCU_IO_DIR_OUTPUT(port, pin) MCU_IO_DIR_OUTPUT_PREP(port, pin)
|
|
#define MCU_PORT_SET_OUTPUT(port, val) MCU_PORT_SET_OUTPUT_PREP(port, val)
|
|
#define MCU_PORT_OUTPUT(port, val) MCU_PORT_OUTPUT_PREP(port, val)
|
|
|
|
//----------------------------------------------------------------------------------
|
|
// Macros for internal use (the macros above need a new round in the preprocessor)
|
|
//----------------------------------------------------------------------------------
|
|
#define MCU_IO_PERIPHERAL_PREP(port, pin) st( P##port##SEL |= BM(pin); )
|
|
#define MCU_IO_INPUT_PREP(port, pin, func) st( P##port##SEL &= ~BM(pin); P##port##DIR &= ~BM(pin); switch (func) { case MCU_IO_PULLUP: P##port##INP &= ~BM(pin); P2INP &= ~BM(port + 5); break; case MCU_IO_PULLDOWN: P##port##INP &= ~BM(pin); P2INP |= BM(port + 5); break; default: P##port##INP |= BM(pin); break; } )
|
|
#define MCU_IO_OUTPUT_PREP(port, pin, val) st( P##port##SEL &= ~BM(pin); P##port##_##pin## = val; P##port##DIR |= BM(pin); )
|
|
#define MCU_IO_SET_HIGH_PREP(port, pin) st( P##port##_##pin## = 1; )
|
|
#define MCU_IO_SET_LOW_PREP(port, pin) st( P##port##_##pin## = 0; )
|
|
#define MCU_IO_SET_PREP(port, pin, val) st( P##port##_##pin## = val; )
|
|
#define MCU_IO_TGL_PREP(port, pin) st( P##port##_##pin## ^= 1; )
|
|
#define MCU_IO_GET_PREP(port, pin) (P##port## & BM(pin))
|
|
#define MCU_IO_DIR_INPUT_PREP(port, pin) st( P##port##DIR &= ~BM(pin); )
|
|
#define MCU_IO_DIR_OUTPUT_PREP(port, pin) st( P##port##DIR |= BM(pin); )
|
|
#define MCU_PORT_SET_OUTPUT_PREP(port, val) st( P##port##SEL = 0x00; P##port## = val; P##port##DIR = 0xff; )
|
|
#define MCU_PORT_OUTPUT_PREP(port, val) st( P##port## = val; )
|