hal_mac_cfg.h

来自「ZigBee Pro协议栈。该协议栈是基于CC2520+MSP430F2618.」· C头文件 代码 · 共 284 行 · 第 1/2 页

H
284
字号


/* ------------------------------------------------------------------------------------------------
 *                                  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   :  8 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 + =
减小字号Ctrl + -
显示快捷键?