在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > nRF24L01 MSP430 發(fā)送接收驅(qū)動程序

        nRF24L01 MSP430 發(fā)送接收驅(qū)動程序

        作者: 時間:2016-11-27 來源:網(wǎng)絡(luò) 收藏

        //Function:Nrf寄存器初始化
        void NrfInit(void)
        {
        GPIOPinWrite(CE,0x00);//芯片使能關(guān)閉
        GPIOPinWrite(CSN,0xFF);//片選關(guān)閉
        GPIOPinWrite(SCK,0x00);//SPI時鐘為低
        WriteBuf(W_REGISTER+TX_ADDR, TX_ADDRESS, TX_ADDR_WIDTH);//寫本地地址
        WriteBuf(W_REGISTER+RX_ADDR_P0, RX_ADDRESS, RX_ADDR_WIDTH);//寫接收端地址
        WriteReadReg(W_REGISTER+EN_AA, 0x01);//頻道0自動ACK應(yīng)答允許
        WriteReadReg(W_REGISTER+EN_RXADDR, 0x01);//允許接收地址只有頻道0
        WriteReadReg(W_REGISTER+RF_CH, 0x40);//設(shè)置信道工作為 GHZ,收發(fā)必須一致
        WriteReadReg(W_REGISTER+RX_PW_P0, RX_PLOAD_WIDTH);//設(shè)置接收數(shù)據(jù)長度
        WriteReadReg(W_REGISTER+RF_SETUP, 0x07);//設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB
        IntMasterEnable();//使能控制器中斷
        }
        //Function:IRQ(PA0)中斷處理函數(shù),判斷發(fā)送還是接收中斷,接收則讀出數(shù)據(jù)
        void GPIO_Port_A_ISR(void)
        {
        unsigned char temp;//端口中斷值
        temp=GPIOPinIntStatus(GPIO_PORTA_BASE,true);//讀取中斷
        GPIOPinIntClear(GPIO_PORTA_BASE,temp);//清除中斷
        flag=ReadReg(STATUS);//讀取STATUS寄存器值
        GPIOPinWrite(CE,0x00);//進入待機模式
        if((flag<<1)&0x80)//判斷是否為接收中斷
        {
        ReadBuf(R_RX_PAYLOAD,RXBuf,RX_PLOAD_WIDTH);//接收中斷則從Buf中讀出數(shù)據(jù)
        success=2;
        }
        if((flag<<2)&0x80)//判斷是否為發(fā)送完成中斷
        success=1;
        if((flag<<3)&0x80)//判斷是否為達到最多次重發(fā)中斷
        success=0;
        WriteReadReg(W_REGISTER+STATUS,flag);//清除中斷
        }
        nrf24l01.h
        [cpp] view plaincopy
        #ifndef _NRF24L01_H_
        #define _NRF24L01_H_
        #include
        #include
        #include
        #include
        #include
        #include
        #include
        #include
        //**********管腳定義************************************************************
        #define CE GPIO_PORTA_BASE,GPIO_PIN_5 //芯片使能
        #define CSN GPIO_PORTA_BASE,GPIO_PIN_4 //SPI片選,低電平使能
        #define SCK GPIO_PORTA_BASE,GPIO_PIN_3 //SPI時鐘
        #define MOSI GPIO_PORTA_BASE,GPIO_PIN_2 //SPI主器件輸出,從器件輸入
        #define MISO GPIO_PORTA_BASE,GPIO_PIN_1 //SPI主器件輸入,從器件輸出
        #define IRQ GPIO_PORTA_BASE,GPIO_PIN_0 //中斷輸出
        //**********NRF24L01寄存器指令**************************************************
        #define R_REGISTER 0x00 // 讀寄存器指令
        #define W_REGISTER 0x20 // 寫寄存器指令
        #define R_RX_PAYLOAD 0x61 // 讀取接收數(shù)據(jù)指令
        #define W_TX_PAYLOAD 0xA0 // 寫待發(fā)數(shù)據(jù)指令
        #define FLUSH_TX 0xE1 // 沖洗發(fā)送 FIFO指令
        #define FLUSH_RX 0xE2 // 沖洗接收 FIFO指令
        #define REUSE_TX_PL 0xE3 // 定義重復(fù)裝載數(shù)據(jù)指令
        #define NOP 0xFF // 保留
        //**********SPI(nRF24L01)寄存器地址*********************************************
        #define CONFIG 0x00 // 配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式
        #define EN_AA 0x01 // 自動應(yīng)答功能設(shè)置
        #define EN_RXADDR 0x02 // 可用信道設(shè)置
        #define SETUP_AW 0x03 // 收發(fā)地址寬度設(shè)置
        #define SETUP_RETR 0x04 // 自動重發(fā)功能設(shè)置
        #define RF_CH 0x05 // 工作頻率設(shè)置
        #define RF_SETUP 0x06 // 發(fā)射速率、功耗功能設(shè)置
        #define STATUS 0x07 // 狀態(tài)寄存器
        #define OBSERVE_TX 0x08 // 發(fā)送監(jiān)測功能
        #define CD 0x09 // 地址檢測
        #define RX_ADDR_P0 0x0A // 頻道0接收數(shù)據(jù)地址
        #define RX_ADDR_P1 0x0B // 頻道1接收數(shù)據(jù)地址
        #define RX_ADDR_P2 0x0C // 頻道2接收數(shù)據(jù)地址
        #define RX_ADDR_P3 0x0D // 頻道3接收數(shù)據(jù)地址
        #define RX_ADDR_P4 0x0E // 頻道4接收數(shù)據(jù)地址
        #define RX_ADDR_P5 0x0F // 頻道5接收數(shù)據(jù)地址
        #define TX_ADDR 0x10 // 發(fā)送地址寄存器
        #define RX_PW_P0 0x11 // 接收頻道0接收數(shù)據(jù)長度
        #define RX_PW_P1 0x12 // 接收頻道0接收數(shù)據(jù)長度
        #define RX_PW_P2 0x13 // 接收頻道0接收數(shù)據(jù)長度
        #define RX_PW_P3 0x14 // 接收頻道0接收數(shù)據(jù)長度
        #define RX_PW_P4 0x15 // 接收頻道0接收數(shù)據(jù)長度
        #define RX_PW_P5 0x16 // 接收頻道0接收數(shù)據(jù)長度
        #define FIFO_STATUS 0x17 // FIFO棧入棧出狀態(tài)寄存器設(shè)置
        #define TX_ADDR_WIDTH 5 //(發(fā)送)接收節(jié)點地址寬度(3-5字節(jié))
        #define RX_ADDR_WIDTH 5 //接收地址寬度(3-5字節(jié))
        #define TX_PLOAD_WIDTH 9 //發(fā)送數(shù)據(jù)有效寬度(1-32字節(jié))
        #define RX_PLOAD_WIDTH 9 //接收數(shù)據(jù)有效寬度(1-32字節(jié))
        extern unsigned char TX_ADDRESS[TX_ADDR_WIDTH]; //接收節(jié)點地址(0通道40位可任意配置)
        extern unsigned char RX_ADDRESS[RX_ADDR_WIDTH]; //接收地址(與接收地址相同)
        extern unsigned char flag;//狀態(tài)寄存器(STATUS)標(biāo)志
        extern unsigned char success;//發(fā)送接收成功與否標(biāo)志,0為失敗,1為發(fā)送成功,2為接收成功
        extern unsigned char TXBuf[];
        extern unsigned char RXBuf[];
        void Delayms(unsigned int t);//Function:延時t*ms
        void Delayus(unsigned int t);//Function:延時t*us
        void SystemInit(void);//Function:系統(tǒng)初始化
        void NrfInitPort(void);//Function:管腳配置初始化
        unsigned char SPIWriteRead(unsigned char c);//Function:SPI寫入一字節(jié),同時讀出一字節(jié)
        unsigned char ReadReg(unsigned char reg);//Function:從寄存器中讀取狀態(tài)字節(jié)
        unsigned char WriteReadReg(unsigned char reg,unsigned char value);//Function:向寄存器寫入一字節(jié),同時返回狀態(tài)字節(jié)
        unsigned char ReadBuf(unsigned char reg,unsigned char *pBuf,unsigned char num);//Function:從寄存器讀出num字節(jié)的數(shù)據(jù)(pBuf),同時返回狀態(tài)字節(jié)
        unsigned char WriteBuf(unsigned char reg,unsigned char*pBuf,unsigned char num);//Function:向寄存器寫入num字節(jié)的數(shù)據(jù)(pBuf),同時返回狀態(tài)字節(jié)
        void RXReady(void);//Function:接收啟動函數(shù)
        void TXReady(unsigned char *txBuf);//Function:發(fā)送啟動函數(shù)
        void NrfInit(void);//Function:Nrf寄存器初始化
        void GPIO_Port_A_ISR(void);//Function:IRQ(PA0)中斷處理函數(shù),判斷發(fā)送還是接收中斷,接收則讀出數(shù)據(jù) #endif

        上一頁 1 2 下一頁

        評論


        技術(shù)專區(qū)

        關(guān)閉