久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

有關(guān)ZigBee2006協(xié)議棧中使用硬件中斷函數(shù)的問(wèn)題

 幸福的樂(lè)土 2012-07-02
最近一直在研究ZigBee2006協(xié)議棧,,需要用到硬件,。有關(guān)硬件的頭文件和C文件基本上都在HAL文件夾里,這里面有各個(gè)硬件,,如鍵盤(pán),、LCD、串口等外設(shè)的頭文件,,在hal/target/2430BB,、2430DB、2340EB文件夾里有相應(yīng)的C文件,。如果你自己寫(xiě)了相關(guān)硬件的函數(shù),,那么請(qǐng)將這些函數(shù)及其定義放在相應(yīng)的hal_頭文件和C文件里。下面,,我以串口0中斷的應(yīng)用為例,,介紹如何在協(xié)議棧中添加中斷。
首先,,要對(duì)串口進(jìn)行初始化:使能相應(yīng)管腳,設(shè)定波特率,、串口工作模式等,。然后使能串口中斷和全部中斷,,即打開(kāi)串口中斷。
其次,,我們需要找到中斷函數(shù)的定義,,這個(gè)文件的名字叫做hal_mcu.h,在hal/target/2430BB,、2430DB,、2340EB文件夾里都有,可以在IAR的hal/target/2430BB/includes(hal/target/2430DB/includes和hal/target/2430EB/includes里也有)文件夾里找到,。雙擊打開(kāi),,我們可以看到很多宏定義,其中Compiler Abstraction部分代碼如下:
/* ------------------------------------------------------------------------------------------------
*                                     Compiler Abstraction
* ------------------------------------------------------------------------------------------------
*/

/* ---------------------- IAR Compiler ---------------------- */

#ifdef __IAR_SYSTEMS_ICC__     //條件定義
#include              //包含CC2430輸入輸出頭文件
#define HAL_COMPILER_IAR
     //定義IAR編譯器宏
#define HAL_MCU_LITTLE_ENDIAN()   __LITTLE_ENDIAN__    //定義MCU小端模式
#define _PRAGMA(x) _Pragma(#x)     //定義預(yù)處理指令宏
#define HAL_ISR_FUNC_DECLARATION(f,v)   _PRAGMA(vector=v) __near_func __interrupt void f(void)      //IAR中斷函數(shù)聲明
定義格式宏
#define HAL_ISR_FUNC_PROTOTYPE(f,v)     _PRAGMA(vector=v) __near_func __interrupt void f(void)
      //IAR中斷函數(shù)原型定義格式
#define HAL_ISR_FUNCTION(f,v)           HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)      //IAR中斷函數(shù)定義格式宏

/* ---------------------- Keil Compiler ---------------------- */
#elif defined __KEIL__
#include
#define HAL_COMPILER_KEIL
#define HAL_MCU_LITTLE_ENDIAN()   0
#define HAL_ISR_FUNC_DECLARATION(f,v)   void f(void) interrupt v
#define HAL_ISR_FUNC_PROTOTYPE(f,v)     void f(void)
#define HAL_ISR_FUNCTION(f,v)           HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)


/* ------------------ Unrecognized Compiler
------------------ */
#else
#error "ERROR: Unknown compiler."
#endif


這里定義了在不同編譯環(huán)境下的終端函數(shù),,我們可以看出ZigBee2006協(xié)議棧僅支持IAR和Keil兩種編譯環(huán)境,,其他的編譯器會(huì)當(dāng)做未識(shí)別的編譯器并報(bào)錯(cuò)("ERROR: Unknown compiler.")。我使用的是IAR編譯環(huán)境,,并對(duì)上面的代碼進(jìn)行注釋,。
紅色字體標(biāo)出的部分就是我們定義中斷函數(shù)的格式要求,這三個(gè)宏的意思表明了對(duì)中斷函數(shù)定義的規(guī)則:首先,,要在文件代碼頂端進(jìn)行函數(shù)聲明(格式:_PRAGMA(vector=v) __near_func __interrupt void f(void);),;然后,在相應(yīng)的C文件里定義中斷函數(shù)原型(格式:_PRAGMA(vector=v) __near_func __interrupt void f(void){...}),。其實(shí)和C語(yǔ)言中定義函數(shù)一模一樣,,但是格式要按照協(xié)議棧規(guī)定的來(lái)寫(xiě)。
例如:
#include "ioCC2430.h"
_PRAGMA(vector=URX0_VECTOR) __near_func __interrupt void UART0_ISR(void);
...
_PRAGMA(vector=URX0_VECTOR) __near_func __interrupt void UART0_ISR(void)
{
....  //函數(shù)體
}


例子中淺藍(lán)色的部分是可以自己來(lái)設(shè)定的,,其他格式都是確定的,,以上就是在協(xié)議棧中添加中斷函數(shù)的方法,希望能對(duì)你有所幫助,。

附:中斷向量表
/* ------------------------------------------------------------------------------------------------
 *                                        Interrupt Vectors
 * ------------------------------------------------------------------------------------------------
 */
#define  RFERR_VECTOR   VECT(  0, 0x03 )   /*  RF TX FIFO Underflow and RX FIFO Overflow   */
#define  ADC_VECTOR     VECT(  1, 0x0B )   /*  ADC End of Conversion       */
#define  URX0_VECTOR    VECT(  2, 0x13 )   /*  USART0 RX Complete        */
#define  URX1_VECTOR    VECT(  3, 0x1B )   /*  USART1 RX Complete        */
#define  ENC_VECTOR     VECT(  4, 0x23 )   /* AES Encryption/Decryption Complete */
#define  ST_VECTOR      VECT(  5, 0x2B )   /*  Sleep Timer Compare              */
#define  P2INT_VECTOR   VECT(  6, 0x33 )   /*  Port 2 Inputs                        */
#define  UTX0_VECTOR    VECT(  7, 0x3B )  
/*  USART0 TX Complete            */
#define  DMA_VECTOR     VECT(  8, 0x43 )   /*  DMA Transfer Complete        */
#define  T1_VECTOR      VECT(  9, 0x4B )   /*  Timer 1 (16-bit) Capture/Compare/Overflow   */
#define  T2_VECTOR      VECT( 10, 0x53 )   /*  Timer 2 (MAC Timer)              */
#define  T3_VECTOR      VECT( 11, 0x5B )   /*  Timer 3 (8-bit) Capture/Compare/Overflow    */
#define  T4_VECTOR      VECT( 12, 0x63 )   /*  Timer 4 (8-bit) Capture/Compare/Overflow    */
#define  P0INT_VECTOR   VECT( 13, 0x6B )   /*  Port 0 Inputs                    */
#define  UTX1_VECTOR    VECT( 14, 0x73 )   /*  USART1 TX Complete        */
#define  P1INT_VECTOR   VECT( 15, 0x7B )   /*  Port 1 Inputs                    */
#define  RF_VECTOR      VECT( 16, 0x83 )     /*  RF General Interrupts        */
#define  WDT_VECTOR     VECT( 17, 0x8B )  /*  Watchdog Overflow in Timer Mode  */

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多