新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > nRF24L01 MSP430 發送接收驅動程序

        nRF24L01 MSP430 發送接收驅動程序

        作者: 時間:2016-11-27 來源:網絡 收藏
        nrf24l01.c
        智芯銳電子技術論壇:http://www.zhixinrui.com
        #include "nrf24l01.h"
        unsigned char flag=0;//狀態寄存器(STATUS)標志
        unsigned char success=0;//發送接收成功與否標志,0為失敗,1為發送成功,2為接收成功
        unsigned charTXBuf[TX_PLOAD_WIDTH]={0x68,0x86,0x00};
        unsigned char RXBuf[RX_PLOAD_WIDTH]={0x00,0x00,0x00};
        unsigned char TX_ADDRESS[TX_ADDR_WIDTH]={0x04,0x01,0x02,0x03,0x00}; //接收節點地址(0通道40位可任意配置)
        unsigned char RX_ADDRESS[RX_ADDR_WIDTH]={0x04,0x01,0x02,0x03,0x00}; //接收地址(與接收節點地址相同)
        //Function:延時t*ms
        void Delayms(unsigned int t)
        {SysCtlDelay(t*2000);}
        //Function:延時t*us
        void Delayus(unsigned int t)
        {SysCtlDelay(t*2);}
        //Function:系統初始化
        void SystemInit(void)
        {
        SysCtlLDOSet(SYSCTL_LDO_2_50V);//設置LDO輸出電壓為2.5v
        SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ);//系統時鐘設置,采用主振蕩器,外晶振6MHZ,不分頻
        }
        //Function:管腳配置初始化
        void NrfInitPort(void)
        {
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
        GPIOPinTypeGPIOOutput(CE);
        GPIOPinTypeGPIOOutput(CSN);
        GPIOPinTypeGPIOOutput(MOSI);
        GPIOPinTypeGPIOInput(MISO);//MISO配置為輸入
        GPIOPinTypeGPIOOutput(SCK);
        GPIOPinTypeGPIOInput(IRQ);
        GPIOIntTypeSet(IRQ,GPIO_LOW_LEVEL);//低電平觸發
        GPIOPinIntEnable(IRQ);//開啟端口引腳中斷
        IntEnable(INT_GPIOA);//開啟GPIOA總中斷
        }
        //Function:SPI寫入一字節,同時讀出一字節
        unsigned char SPIWriteRead(unsigned char c)
        {
        unsigned char i;
        for(i=0;i<8;i++)
        {
        GPIOPinWrite(MOSI,(0x80&c)>>5);//SPI寫
        c<<=1;
        GPIOPinWrite(SCK,0xFF);
        c|=(GPIOPinRead(MISO)>>1);//SPI讀
        GPIOPinWrite(SCK,0x00);
        }
        return c;
        }
        //Function:從寄存器中讀取狀態字節
        unsigned char ReadReg(unsigned char reg)
        {
        unsigned char regVal;
        GPIOPinWrite(CSN,0x00);//片選
        SPIWriteRead(R_REGISTER+reg);
        regVal=SPIWriteRead(0);//只讀,故參數值()內任意取char型值
        GPIOPinWrite(CSN,0xFF);
        return regVal;
        }
        //Function:向寄存器寫入一字節,同時返回狀態字節
        unsigned char WriteReadReg(unsigned char reg,unsigned char value)
        {
        unsigned char status;
        GPIOPinWrite(CSN,0x00);
        status=SPIWriteRead(reg);//選擇寄存器(寫指令)
        SPIWriteRead(value);//寫入值(配置寄存器)
        GPIOPinWrite(CSN,0xFF);
        return status;
        }
        //Function:從寄存器讀出num字節的數據(pBuf),同時返回狀態字節
        unsigned char ReadBuf(unsigned char reg,unsigned char *pBuf,unsigned char num)
        {
        unsigned char i,status;
        GPIOPinWrite(CSN,0x00);
        status=SPIWriteRead(reg);//選擇寄存器(寫指令)
        for(i=0;i
        pBuf[i]=SPIWriteRead(0);//讀取num字節數據
        GPIOPinWrite(CSN,0xFF);
        return status;
        }
        //Function:向寄存器寫入num字節的數據(pBuf),同時返回狀態字節
        unsigned char WriteBuf(unsigned char reg,unsigned char*pBuf,unsigned char num)
        {
        unsigned char i,status;
        GPIOPinWrite(CSN,0x00);
        status=SPIWriteRead(reg);//選擇寄存器(寫指令)
        for(i=0;i
        SPIWriteRead(pBuf[i]);//讀取num字節數據
        GPIOPinWrite(CSN,0xFF);
        return status;
        }
        //Function:接收啟動函數
        void RXReady(void)
        {
        WriteReadReg(W_REGISTER+CONFIG,0x0F);//IRQ收發完成中斷響應,16位CRC,PWR_UP上電,接收模式
        GPIOPinWrite(CE,0xFF);//CE置高使能接收模式
        Delayus(130);//待機模式->接收模式用時最長為130us
        }
        //Function:發送啟動函數
        void TXReady(unsigned char *txBuf)
        {
        GPIOPinWrite(CE,0x00);
        WriteBuf(W_TX_PAYLOAD,txBuf,TX_PLOAD_WIDTH);//裝載發送數據
        WriteReadReg(W_REGISTER + CONFIG, 0x0E);//IRQ收發完成中斷響應,16位CRC,PWR_UP上電,發送模式
        GPIOPinWrite(CE,0xFF);//啟動發送
        Delayus(10);//CE高電平保持時間至少10us
        }

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 抚远县| 玉门市| 隆子县| 外汇| 宁陕县| 开远市| 云霄县| 长沙县| 宝鸡市| 吴堡县| 五峰| 襄垣县| 苏州市| 南岸区| 临夏县| 双柏县| 伊宁市| 华阴市| 个旧市| 江油市| 芜湖县| 珲春市| 密云县| 乌什县| 汕头市| 漳平市| 富平县| 伊川县| 平湖市| 牟定县| 慈溪市| 拜城县| 峡江县| 平南县| 绍兴县| 揭西县| 渝北区| 库车县| 中超| 临西县| 如皋市|