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

📄 hal_mac_cfg.h

📁 Zigbee2007.rar
💻 H
字号:

/**************************************************************************************************
    Filename:
    Revised:        $Date: 2008-01-14 14:34:14 -0800 (Mon, 14 Jan 2008) $
    Revision:       $Revision: 16195 $

    Description:

    Describe the purpose and contents of the file.

    Copyright (c) 2006 by Texas Instruments, Inc.
    All Rights Reserved.  Permission to use, reproduce, copy, prepare
    derivative works, modify, distribute, perform, display or sell this
    software and/or its documentation for any purpose is prohibited
    without the express written consent of Texas Instruments, Inc.
**************************************************************************************************/


#ifndef HAL_MAC_CFG_H
#define HAL_MAC_CFG_H


/*
 *   Board Configuration File for low-level MAC
 *  --------------------------------------------
 *   Manufacturer : Texas Instruments
 *   Part Number  : MSP2618CC2520 on SmartRF05 EB
 *   Processor    : Texas Instruments MSP430F2618
 *
 */

/* ------------------------------------------------------------------------------------------------
 *                                           Includes
 * ------------------------------------------------------------------------------------------------
 */
#include "hal_mcu.h"
#include "hal_types.h"
#include "hal_defs.h"
#include "hal_board_cfg.h"


/* ------------------------------------------------------------------------------------------------
 *                                  Board Specific Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_VREG_SETTLE_TIME_USECS        50    /* microseconds */
#define HAL_MAC_RSSI_OFFSET                   -76   /* no units */

/* ------------------------------------------------------------------------------------------------
 *                                  FIFOP Pin / Interrupt Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_FIFOP_GPIO_BIT                  6
#define HAL_MAC_READ_FIFOP_PIN()                (P1IN & BV(HAL_MAC_FIFOP_GPIO_BIT))
#define HAL_MAC_CONFIG_FIFOP_PIN_AS_INPUT()     MAC_ASSERT(!(P1DIR & BV(HAL_MAC_FIFOP_GPIO_BIT)))

/* FIFOP interrupt macros */
#define HAL_MAC_FIFOP_INT_VECTOR()              PORT1_VECTOR
#define HAL_MAC_ENABLE_FIFOP_INT()              st( P1IE  |=  BV(HAL_MAC_FIFOP_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_DISABLE_FIFOP_INT()             st( P1IE  &= ~BV(HAL_MAC_FIFOP_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_CLEAR_FIFOP_INT_FLAG()          st( P1IFG &= ~BV(HAL_MAC_FIFOP_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_READ_FIFOP_INT_FLAG()           (P1IFG & BV(HAL_MAC_FIFOP_GPIO_BIT))
#define HAL_MAC_CONFIG_FIFOP_RISING_EDGE_INT()  st( P1IES &= ~BV(HAL_MAC_FIFOP_GPIO_BIT); ) /* atomic operation */


/* ------------------------------------------------------------------------------------------------
 *                                  SFD Pin / Interrupt Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_SFD_GPIO_BIT                    2
#define HAL_MAC_CONFIG_SFD_PIN_AS_INPUT()       st( P1DIR &= ~BV(HAL_MAC_SFD_GPIO_BIT); P1SEL |= BV(HAL_MAC_SFD_GPIO_BIT);)


/* SFD interrupt macros */
extern uint8 macMcuTimerProcessFallingEdgeSFDSync;
#define HAL_MAC_ENABLE_SFD_INT()                  st( macMcuTimerProcessFallingEdgeSFDSync = 1; )
#define HAL_MAC_DISABLE_SFD_INT()                 st( macMcuTimerProcessFallingEdgeSFDSync = 0; )
#define HAL_MAC_SFD_INT_IS_ENABLED()              ( macMcuTimerProcessFallingEdgeSFDSync )

#define HAL_MAC_CLEAR_SFD_INT_FLAG()   /* No action */


/* ------------------------------------------------------------------------------------------------
 *                                    FIFO Pin Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_FIFO_GPIO_BIT                   5
#define HAL_MAC_READ_FIFO_PIN()                 (P1IN & BV(HAL_MAC_FIFO_GPIO_BIT))
#define HAL_MAC_CONFIG_FIFO_PIN_AS_INPUT()      MAC_ASSERT(!(P1DIR & BV(HAL_MAC_FIFO_GPIO_BIT)))


/* ------------------------------------------------------------------------------------------------
 *                                    CCA Pin Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_CCA_GPIO_BIT                    1
#define HAL_MAC_READ_CCA_PIN()                  (P1IN & BV(HAL_MAC_CCA_GPIO_BIT))
#define HAL_MAC_CONFIG_CCA_PIN_AS_INPUT()       st( P1DIR &= ~BV(HAL_MAC_CCA_GPIO_BIT); \
                                                    P1SEL &= ~BV(HAL_MAC_CCA_GPIO_BIT); \
                                                    CAPD &= ~BV(HAL_MAC_CCA_GPIO_BIT);  );

/* ------------------------------------------------------------------------------------------------
 *                                TX_ACK_DONE Pin / Interrupt Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_TX_ACK_DONE_GPIO_BIT            3
#define HAL_MAC_READ_TX_ACK_DONE_PIN()           (P1IN & BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT))
#define HAL_MAC_CONFIG_TX_ACK_DONE_PIN_AS_INPUT()   st( P1DIR &= ~BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT); )
#define HAL_MAC_CONFIG_TX_ACK_DONE_PIN_AS_OUTPUT()  st( P1DIR |=  BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT); )

/* TX_ACK_DONE interrupt macros */
#define HAL_MAC_TX_ACK_DONE_INT_VECTOR()        PORT1_VECTOR
#define HAL_MAC_ENABLE_TX_ACK_DONE_INT()        st( P1IE  |=  BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_DISABLE_TX_ACK_DONE_INT()       st( P1IE  &= ~BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_TX_ACK_DONE_INT_IS_ENABLED()    (P1IE & BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT))
#define HAL_MAC_CLEAR_TX_ACK_DONE_INT_FLAG()    st( P1IFG &= ~BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_READ_TX_ACK_DONE_INT_FLAG()     (P1IFG & BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT))
#define HAL_MAC_CONFIG_TX_ACK_DONE_RISING_EDGE_INT() st( P1IES &= ~BV(HAL_MAC_TX_ACK_DONE_GPIO_BIT); ) /* atomic operation */


/* ------------------------------------------------------------------------------------------------
 *                                 VREG_EN Pin Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_VREG_EN_GPIO_BIT                0
#define HAL_MAC_DRIVE_VREG_EN_PIN_HIGH()        st( P1OUT |=  BV(HAL_MAC_VREG_EN_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_DRIVE_VREG_EN_PIN_LOW()         st( P1OUT &= ~BV(HAL_MAC_VREG_EN_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_CONFIG_VREG_EN_PIN_AS_OUTPUT()  st( P1DIR |=  BV(HAL_MAC_VREG_EN_GPIO_BIT); )


/* ------------------------------------------------------------------------------------------------
 *                                  RESETN Pin Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_RESETN_GPIO_BIT                 7
#define HAL_MAC_DRIVE_RESETN_PIN_HIGH()         st( P5OUT |=  BV(HAL_MAC_RESETN_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_DRIVE_RESETN_PIN_LOW()          st( P5OUT &= ~BV(HAL_MAC_RESETN_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_CONFIG_RESETN_PIN_AS_OUTPUT()   st( P5DIR |=  BV(HAL_MAC_RESETN_GPIO_BIT); )


/* ------------------------------------------------------------------------------------------------
 *                                  TRIGGER Pin Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_TRIGGER_GPIO_BIT                7
#define HAL_MAC_CONFIG_TRIGGER_PIN_AS_OUTPUT()  st( P1DIR |=  BV(HAL_MAC_TRIGGER_GPIO_BIT); \
                                                    P1SEL |=  BV(HAL_MAC_TRIGGER_GPIO_BIT);)

#define HAL_MAC_CONFIG_TRIGGER_PIN_AS_INTPUT()  st( P1DIR &= ~BV(HAL_MAC_TRIGGER_GPIO_BIT); \
                                                    P1SEL &= ~BV(HAL_MAC_TRIGGER_GPIO_BIT);)

/* ------------------------------------------------------------------------------------------------
 *                                      SPI Configuration
 * ------------------------------------------------------------------------------------------------
 */

/* CSn Pin Configuration */
#define HAL_MAC_SPI_CSN_GPIO_BIT                  0
#define HAL_MAC_SPI_SET_CHIP_SELECT_ON()          st( P5OUT &= ~BV(HAL_MAC_SPI_CSN_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_SPI_SET_CHIP_SELECT_OFF()         st( P5OUT |=  BV(HAL_MAC_SPI_CSN_GPIO_BIT); ) /* atomic operation */
#define HAL_MAC_SPI_CHIP_SELECT_IS_OFF()          (P5OUT & BV(HAL_MAC_SPI_CSN_GPIO_BIT))
#define HAL_MAC_SPI_CONFIG_CSN_PIN_AS_OUTPUT()    st( P5DIR |= BV(HAL_MAC_SPI_CSN_GPIO_BIT); )

/* SCLK Pin Configuration */
#define HAL_MAC_SPI_CONFIG_SCLK_PIN_AS_OUTPUT()   st( P5DIR |= BV(3); P5SEL |= BV(3); ) /* also selects SPI pin functionality */

/* SI Pin Configuration */
#define HAL_MAC_SPI_CONFIG_SI_PIN_AS_OUTPUT()     st( P5DIR |= BV(1); P5SEL |= BV(1); ) /* also selects SPI pin functionality */

/* SO Pin Configuration */
#define HAL_MAC_SPI_CONFIG_SO_PIN_AS_INPUT()      st( MAC_ASSERT(!(P5DIR & BV(2)));  P5SEL |= BV(2); )  /* also selects SPI pin functionality */
#define HAL_MAC_SPI_READ_SO_PIN()                 (P5IN & BV(2))

/* read/write macros */
#define HAL_MAC_SPI_WRITE_BYTE(x)                 st( UC1IFG &= ~UCB1RXIFG;  UCB1TXBUF = x; )
#define HAL_MAC_SPI_READ_BYTE()                   UCB1RXBUF
#define HAL_MAC_SPI_WAIT_DONE()                   while(!(UC1IFG & UCB1RXIFG));

/* SPI critical section macros */
typedef halIntState_t halMacSpiIntState_t;
#define HAL_MAC_SPI_ENTER_CRITICAL_SECTION(x)     HAL_ENTER_CRITICAL_SECTION(x)
#define HAL_MAC_SPI_EXIT_CRITICAL_SECTION(x)      HAL_EXIT_CRITICAL_SECTION(x)

/*
 *  Chipcon CC2520 SPI Specifications
 * -----------------------------------------------
 *    Max SPI Clock   :  10 MHz
 *    Data Order      :  MSB transmitted first
 *    Clock Polarity  :  low when idle
 *    Clock Phase     :  sample leading edge
 */

/* initialization macro */
#define HAL_MAC_SPI_INIT() \
st ( \
  UCB1CTL1 = UCSSEL1 | UCSWRST;                 \
  UCB1CTL0 = UCCKPH | UCMSB | UCMST | UCSYNC ;  \
  UCB1BR0  = 0;                                 \
  UCB1BR1  = 0;                                 \
  UCB1CTL1 &= ~UCSWRST;                         \
)


/* ------------------------------------------------------------------------------------------------
 *                                       Timer Configuration
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_TIMER_TICKS_PER_USEC                  HAL_CPU_CLOCK_MHZ

/* ---------------- Timer_A  --------------- */
#define HAL_MAC_TIMER_INIT()      st( TACCTL0 = 0; TACCTL1 = 0; TACCTL2 = 0;)

/* MCU chip bug when using mov instruction to modify TACTL
 * Make sure modifying TACTL results in bit set or clear assembly instead of
 * mov instruction. Otherwise use something like below...
 * st(asm("bis.w #0x210, &TACTL");)
 * st(asm("bic.w #0x10, &TACTL");)
 */
#define HAL_MAC_TIMER_START()     st( TACTL |= (TASSEL_2 | MC_1); )
#define HAL_MAC_TIMER_STOP()      st( TACTL &= ~(MC_1); )


/* ------------------------------------------------------------------------------------------------
 *                                  Rollover Macros
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_TIMER_SET_COUNT(x)                    st( TAR = x; )
#define HAL_MAC_TIMER_SET_ROLLOVER(x)                 st( TACCR0 = (x) - 1; )
#define HAL_MAC_TIMER_GET_ROLLOVER()                  ( TACCR0 )
#define HAL_MAC_TIMER_COUNT()                         TAR

#define HAL_MAC_TIMER_ROLLOVER_ISR_FUNCTION()         HAL_ISR_FUNCTION( macTimerRolloverIsr, TIMERA0_VECTOR )
#define HAL_MAC_TIMER_ROLLOVER_CLEAR_INTERRUPT()      st( TACCTL0 &= ~CCIFG; ) /* atomic operation */
#define HAL_MAC_TIMER_ROLLOVER_ENABLE_INTERRUPT()     st( TACCTL0 |=  CCIE;  ) /* atomic operation */
#define HAL_MAC_TIMER_ROLLOVER_DISABLE_INTERRUPT()    st( TACCTL0 &= ~CCIE;  ) /* atomic operation */
#define HAL_MAC_TIMER_ROLLOVER_FLAG()                 (TACCTL0 & CCIFG)
#define HAL_MAC_TIMER_ROLLOVER_FORCE_INTERRUPT()      st( TACCTL0 |= CCIFG; ) /* atomic operation */

/* ------------------------------------------------------------------------------------------------
 *                                  Compare Macros
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_TIMER_CAPTURE_COMPARE_ISR_FUNCTION()  HAL_ISR_FUNCTION( halMacTimerCaptureCompareIsr, TIMERA1_VECTOR )

#define HAL_MAC_TIMER_COMPARE_ENABLE_INTERRUPT()      st( TACCTL2 |=  CCIE;  ) /* atomic operation */
#define HAL_MAC_TIMER_COMPARE_DISABLE_INTERRUPT()     st( TACCTL2 &= ~CCIE;  ) /* atomic operation */
#define HAL_MAC_TIMER_COMPARE_INTERRUPT_IS_ENABLED()  (TACCTL2 & CCIE)

#define HAL_MAC_TIMER_SET_COMPARE(x)                  st( TACCR2 = x; )
#define HAL_MAC_TIMER_CLEAR_COMPARE_FLAG()            st( TACCTL2 &= ~CCIFG; ) /* atomic operation */
#define HAL_MAC_TIMER_COMPARE_FLAG()                  (TACCTL2 & CCIFG)

#define HAL_MAC_TIMER_ENABLE_OUTPUT_COMPARE()         st( TACCTL2 |= OUTMOD_1;) /* out mode = SET i.e. out = 1 when tar == taccr2 */
#define HAL_MAC_TIMER_DISABLE_OUTPUT_COMPARE()        st( TACCTL2 =  0x0;) /* sets out value = 0 and disables the interrupt */

/* ------------------------------------------------------------------------------------------------
 *                                  Capture Macros
 * ------------------------------------------------------------------------------------------------
 */
#define HAL_MAC_TIMER_CONFIGURE_INPUT_CAPTURE()       st( TACCTL1 =  0x0;     /* Clear the previous settings. */ \
                                                          TACCTL1 |= (CCIS_0 | CAP | SCS | CM_3 | CCIE);)
/* Select CCI-1A |  Capture Mode  | Synchronous capture | Capture on both edges | Enable Interrupt on capture */

#define HAL_MAC_TIMER_CAPTURED_INPUT_IS_HIGH()           (TACCTL1 & CCI)
#define HAL_MAC_TIMER_SFD_CAPTURE()                      (TACCR1)





/* ------------------------------------------------------------------------------------------------
 *                                       Prototypes
 * ------------------------------------------------------------------------------------------------
 */
void halMacInit(void);

/**************************************************************************************************
*/
#endif

⌨️ 快捷键说明

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