⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal.h

📁 TI的CC1110、CC2510、CC2430射频SOC的驱动程序
💻 H
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************
+------------------------------------------------------------------------------
|   File:      hal.h
|   Target:    cc2430, cc2431, cc1110, cc2510, cc2511, cc1111
|   Author:    EFU/ KJA / TBR
|   Revised:   2007-09-21
|   Revision:  1.0
|   Description:
|   Hardware Abstraction Layer, Utility Library.
******************************************************************************/

#ifndef HAL_H
#define HAL_H

#if(chip == 2430)
#include "ioCC2430.h"
#endif

#if(chip == 2431)
#include "ioCC2431.h"
#endif

#if(chip == 1110)
#include "ioCC1110.h"
#endif

#if(chip == 1111)
#include "ioCC1111.h"
#endif

#if(chip == 2510)
#include "ioCC2510.h"
#endif

#if(chip == 2511)
#include "ioCC2511.h"
#endif

#include <stdbool.h>
#include <string.h>


/******************************************************************************
*******************              Chip revisions             *******************
******************************************************************************/
#define REV_A   0x00
#define REV_B   0x01
#define REV_C   0x02
#define REV_D   0x03
#define REV_E   0x04


/******************************************************************************
*******************              Commonly used types        *******************
******************************************************************************/
// Data
typedef unsigned char       byte;
typedef unsigned short      word;
typedef unsigned long       dword;

// Unsigned numbers
typedef unsigned char       uint8;
typedef unsigned short      uint16;
typedef unsigned long       uint32;

// 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

// Typedef void pointer
typedef void (*VFPTR)(void);

/******************************************************************************
*******************        Bit, byte and word macros        *******************
******************************************************************************/

// bit mask
#define BM( b )       ( 0x01 << ( b ))

#define HIBYTE(a)     (byte) ((word)(a) >> 8 )
#define LOBYTE(a)     (byte)  (word)(a)

#define SET_WORD(regH, regL, Word) \
   do{                             \
      (regH) = HIBYTE( Word );     \
      (regL) = LOBYTE( Word );     \
   }while(0)

#define GET_WORD(regH, regL, Word) \
   do{                             \
      Word = (word)regH << 8;      \
      Word |= regL;                \
   }while(0)

/******************************************************************************
*******************             Port functions/macros       *******************
*******************************************************************************

Macros for simplifying access to I/O pin setup and usage.

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 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_USART1_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x02)|0x00; } while (0)
#define IO_PER_LOC_USART1_AT_PORT1_PIN4567() do { PERCFG = (PERCFG&~0x02)|0x02; } while (0)

#define IO_PER_LOC_USART0_AT_PORT0_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x00; } while (0)
#define IO_PER_LOC_USART0_AT_PORT1_PIN2345() do { PERCFG = (PERCFG&~0x01)|0x01; } while (0)



// 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 |= BM( pin );      \
      else                               \
         P##port##DIR &= ~BM( 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 |= BM( pin );         \
      else                                  \
         P##port##INP &= ~BM( 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:
//   IO_PUD_PORT(0, IO_PULLUP);
//   IO_PUD_PORT(1, IO_PULLDOWN);
//   IO_PUD_PORT(2, IO_PULLUP);

#define IO_PUD_PORT(port, pud)        \
   do {                               \
      if (pud == IO_PULLDOWN)         \
         P2INP |= BM( port + 5 );     \
      else                            \
         P2INP &= ~BM( 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 |= BM( pin );     \
         } else {                          \
            P##port##SEL &= ~BM( 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 |= BM( pin );            \
    else                              \
      ADCCFG &= ~BM( 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)

#if(chip == 2430 || chip == 2431)
#define INUM_RFERR 0
#endif
#if(chip == 1110 || chip == 1111 || chip == 2510 || chip == 2511)
#define INUM_RFTXRX 0
#endif
#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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -