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 + -
显示快捷键?