当前位置:文档之家› RF2401无线收发模块EASYARM1138调试程序

RF2401无线收发模块EASYARM1138调试程序

#include "systemInit.h"
#include "uartGetPut.h"
#include
#include
#include "buzzer.h"

//*-----------定义KEY------------------------
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5

void buzzer00()
{
unsigned int x;
buzzerInit(); // 蜂鸣器初始化
for(x=6666;x>6333;x--)
{buzzerSound(x);
SysCtlDelay(1 * (TheSysClock / 6000));}
for(x=6333;x<6666;x++)
{buzzerSound(x);
SysCtlDelay(1 * (TheSysClock / 3000));}
//GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_2, 0x00);
buzzerQuiet();
}

void buzzer11()
{
buzzer00();
buzzer00();
buzzer00();
buzzerSound(200);
SysCtlDelay(100 * (TheSysClock / 3000));
buzzerQuiet();
}
void buzzer1()
{
unsigned int x;
buzzerInit(); // 蜂鸣器初始化
for(x=1333;x>888;x--)
{buzzerSound(x);
SysCtlDelay(1 * (TheSysClock / 6000));}
for(x=888;x<1333;x++)
{buzzerSound(x);
SysCtlDelay(1 * (TheSysClock / 3000));}
//GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_2, 0x00);
buzzerQuiet();
}
//-----------临时--------------------------*/

// 定义RF905收发缓存
unsigned char DATA_BUF;
#define DATA7 ((DATA_BUF&0x80) != 0)
#define DATA0 ((DATA_BUF&0x01) != 0)

//------------发送数据缓冲区-------------------------------------------------
#define Tx_Buf_Len 32
unsigned char Tx_Buf[Tx_Buf_Len]={0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31};

//------------接收数据缓冲区-------------------------------------------------
#define Rx_Buf_Len 32
unsigned char Rx_Buf[Rx_Buf_Len]={0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,
0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,
0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,
0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65};

//------------NRF905控制IO--------------------输出型----------------------------
#define TXEN_PERIPH SYSCTL_PERIPH_GPIOA
#define TXEN_PORT GPIO_PORTA_BASE
#define TXEN_PIN GPIO_PIN_0 //sbit TXEN=P1^0;

#define TRX_CE_PERIPH SYSCTL_PERIPH_GPIOA
#define TRX_CE_PORT GPIO_PORTA_BASE
#define TRX_CE_PIN GPIO_PIN_1 //sbit TRX_CE=P3^2;

#define PWR_PERIPH SYSCTL_PERIPH_GPIOA
#define PWR_PORT GPIO_PORTA_BASE
#define PWR_PIN GPIO_PIN_2 //sbit PWR=P1^1;

//-----------NRF905 SPI接口------------------------------------------------------
#define MISO_PERIPH S

YSCTL_PERIPH_GPIOD
#define MISO_PORT GPIO_PORTD_BASE
#define MISO_PIN GPIO_PIN_3 //sbit MISO=P1^6;

#define MOSI_PERIPH SYSCTL_PERIPH_GPIOD
#define MOSI_PORT GPIO_PORTD_BASE
#define MOSI_PIN GPIO_PIN_2 //sbit MOSI=P1^5;

#define SCK_PERIPH SYSCTL_PERIPH_GPIOA
#define SCK_PORT GPIO_PORTA_BASE
#define SCK_PIN GPIO_PIN_3 //sbit SCK=P1^7;

#define CSN_PERIPH SYSCTL_PERIPH_GPIOA
#define CSN_PORT GPIO_PORTA_BASE
#define CSN_PIN GPIO_PIN_4 //sbit CSN=P1^3;

//------------nrf905状态标志-----------------读入型--------------------------
#define AM_PERIPH SYSCTL_PERIPH_GPIOA
#define AM_PORT GPIO_PORTA_BASE
#define AM_PIN GPIO_PIN_5 //sbit AM=P1^4;

#define DR_PERIPH SYSCTL_PERIPH_GPIOA
#define DR_PORT GPIO_PORTA_BASE
#define DR_PIN GPIO_PIN_6 //sbit DR=P3^3;

#define CD_PERIPH SYSCTL_PERIPH_GPIOA
#define CD_PORT GPIO_PORTA_BASE
#define CD_PIN GPIO_PIN_7 //sbit CD=P1^2;

//-------------nrf905控制指令------------------------------------------------
#define WC 0x00
#define RC 0x10
#define WTP 0x20
#define RTP 0x21
#define WTA 0x22
#define RTA 0x23
#define RRP 0x24

//--------------NRF905寄存器配置------------------------------------------------
unsigned char RFConf[10]=
{
//0x00, //配置命令//
0x4C, //CH_NO,配置频段在430MHZ
0x0C, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x20,0x20, //接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
char TxAddress[4]={0xCC,0xCC,0xCC,0xCC};
char tf;

//---------------延时------------------------------------------------------------
void Delay(unsigned char tms)
{
SysCtlDelay(tms * (TheSysClock / 3000)); // 延时约tms ms
}

//---------------SPI读函数--------------------------------------------------------
unsigned char SpiRead(void)
{
SysCtlPeriEnable(SCK_PERIPH); // 使能SCK所在的GPIO端口
GPIOPinTypeOut(SCK_PORT, SCK_PIN); // 设置SCK所在的管脚为输出
SysCtlPeriEnable(MISO_PERIPH); // 使能MISO所在的GPIO端口
GPIOPinTypeIn(MISO_PORT, MISO_PIN); // 设置MISO所在管脚为输入

unsigned char j;

for (j=0;j<8;

j++)
{
DATA_BUF=DATA_BUF<<1;
GPIOPinWrite(SCK_PORT, SCK_PIN, SCK_PIN); //SCK=1
if (GPIOPinRead(MISO_PORT, MISO_PIN) & MISO_PIN ) //读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=0x01;
}
else
{
DATA_BUF&=0xFE;
}
GPIOPinWrite(SCK_PORT, SCK_PIN, 0x00); //SCK=0
}
return DATA_BUF;
}

//---------------SPI写函数----------------------------------------------------------
void SpiWrite(unsigned char send)
{
SysCtlPeriEnable(SCK_PERIPH); // 使能SCK所在的GPIO端口
GPIOPinTypeOut(SCK_PORT, SCK_PIN); // 设置SCK所在的管脚为输出
SysCtlPeriEnable(MOSI_PERIPH); // 使能MISI所在的GPIO端口
GPIOPinTypeOut(MOSI_PORT, MOSI_PIN); // 设置MISI所在管脚为输出

unsigned char i;
DATA_BUF=send;
for (i=0;i<8;i++)
{
if (DATA_BUF&0x80) //总是发送最高位
{
GPIOPinWrite(MOSI_PORT, MOSI_PIN, MOSI_PIN); //MOSI=1;
}
else
{
GPIOPinWrite(MOSI_PORT, MOSI_PIN, ~MOSI_PIN); //MOSI=0;
}
GPIOPinWrite(SCK_PORT, SCK_PIN, SCK_PIN); //SCK=1
DATA_BUF=DATA_BUF<<1;
GPIOPinWrite(SCK_PORT, SCK_PIN, ~SCK_PIN); //SCK=0
}
}
//-----------------初始化寄存器-----------------------------------------------
void Config905(void)
{
SysCtlPeriEnable(CSN_PERIPH); // 使能CSN所在的GPIO端口
GPIOPinTypeOut(CSN_PORT, CSN_PIN); // 设置CSN所在管脚为输出

unsigned char i;
GPIOPinWrite(CSN_PORT, CSN_PIN, ~CSN_PIN); //CSN=0 // Spi enable for write a spi command
SpiWrite(WC); // Write config command写放配置命令
for (i=0;i<10;i++) // Write configration words 写放配置字
{
SpiWrite(RFConf[i]);
o=RFConf[i];
}
GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN); //CSN=1 // Disable Spi
}

//-------------初始化nRF905------------------------------------------------------
void nRF905Init(void)
{
SysCtlPeriEnable(SCK_PERIPH); // 使能SCK所在的GPIO端口
GPIOPinTypeOut(SCK_PORT, SCK_PIN); // 设置SCK所在的管脚为输出
SysCtlPeriEnable(CSN_PERIPH); // 使能CSN所在的GPIO端口
GPIOPinTypeOut(CSN_PORT, CSN_PIN); // 设置CSN所在管脚为输出
SysCtlPeriEnable(PWR_PERIPH); // 使能PWR所在的GPIO端口
GPIOPinTypeOut(PWR_PORT, PWR_PIN); // 设置PWR所在的管脚为输出
SysCtlPeriEnable(TRX_CE_PERIPH); // 使能TRX_CE所在的GPIO端口
GPIOPinTypeOut(TRX_CE_PORT, TRX_CE_PIN); // 设置TRX_CE

所在管脚为输出
SysCtlPeriEnable(TXEN_PERIPH); // 使能TXEN所在的GPIO端口
GPIOPinTypeOut(TXEN_PORT, TXEN_PIN); // 设置TXEN所在管脚为输出
/*SysCtlPeriEnable(AM_PERIPH); // 使能AM所在的GPIO端口
GPIOPinTypeOut(AM_PORT, AM_PIN); // 设置AM所在管脚为输出
SysCtlPeriEnable(DR_PERIPH); // 使能DR所在的GPIO端口
GPIOPinTypeOut(DR_PORT, DR_PIN); // 设置DR所在管脚为输出
SysCtlPeriEnable(CD_PERIPH); // 使能CD所在的GPIO端口
GPIOPinTypeOut(CD_PORT, CD_PIN); // 设置CD所在管脚为输出
GPIOPinWrite(DR_PORT, DR_PIN, 0x00); //DR=0; // Init DR for input
GPIOPinWrite(AM_PORT, AM_PIN, 0x00); //AM=0; // Init AM for input
GPIOPinWrite(CD_PORT, CD_PIN, 0x00); //CD=0; // Init CD for input*/
SysCtlPeriEnable(AM_PERIPH); // 使能AM所在的GPIO端口
GPIOPinTypeIn(AM_PORT, AM_PIN); // 设置AM所在管脚为输入
SysCtlPeriEnable(DR_PERIPH); // 使能DR所在的GPIO端口
GPIOPinTypeIn(DR_PORT, DR_PIN); // 设置DR所在管脚为输入
SysCtlPeriEnable(CD_PERIPH); // 使能CD所在的GPIO端口
GPIOPinTypeIn(CD_PORT, CD_PIN); // 设置CD所在管脚为输入

GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN); //CSN=1 // Spidisable
GPIOPinWrite(SCK_PORT, SCK_PIN, 0x00); //SCK=0 //Spi clock line init low

GPIOPinWrite(PWR_PORT, PWR_PIN, PWR_PIN); //PWR=1 // nRF905 power on
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, 0x00); //TRX_CE=0 // Set nRF905 in standby mode
GPIOPinWrite(TXEN_PORT, TXEN_PIN, 0x00); //TXEN=0 // set radio in Rx mode
}

//-------------发送数据打包---------------------------------------------------
void TxPacket() //unsigned char *Tx_Buf
{
SysCtlPeriEnable(CSN_PERIPH); // 使能CSN所在的GPIO端口
GPIOPinTypeOut(CSN_PORT, CSN_PIN); // 设置CSN所在管脚为输出
SysCtlPeriEnable(TRX_CE_PERIPH); // 使能TRX_CE所在的GPIO端口
GPIOPinTypeOut(TRX_CE_PORT, TRX_CE_PIN); // 设置TRX_CE所在管脚为输出

unsigned char i;
Config905();
GPIOPinWrite(CSN_PORT, CSN_PIN, ~CSN_PIN); //CSN=0
SpiWrite(WTP); // Write payload command
for (i=0;i<32;i++)
{
SpiWrite(0x38); // Write 32 bytes Tx data

}// Spi enable for write a spi command
GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN); //CSN=1
Delay(1); // Spi disable
GPIOPinWrite(CSN_PORT, CSN_PIN, ~CSN_PIN); //CSN=0 //

Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(TxAddress[i]);
}
GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN); //CSN=1 // Spi disable
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, TRX_CE_PIN); //TRX_CE=1 // Set TRX_CE high,start Tx data transmission
Delay(1); //

while (~GPIOPinRead(DR_PORT, DR_PIN) & DR_PIN);
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, ~TRX_CE_PIN); //TRX_CE=0 // Set TRX_CE low
}
//------------设置发送状态------------------------------------------------------
void SetTxMode(void)
{
SysCtlPeriEnable(TRX_CE_PERIPH); // 使能TRX_CE所在的GPIO端口
GPIOPinTypeOut(TRX_CE_PORT, TRX_CE_PIN); // 设置TRX_CE所在管脚为输出
SysCtlPeriEnable(TXEN_PERIPH); // 使能TXEN所在的GPIO端口
GPIOPinTypeOut(TXEN_PORT, TXEN_PIN); // 设置TXEN所在管脚为输出


GPIOPinWrite(TXEN_PORT, TXEN_PIN, TXEN_PIN); //TXEN=1;
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, ~TRX_CE_PIN); //TRX_CE=0
Delay(1); // delay for mode change(>=650us)
}
//------------设置接收状态------------------------------------------------------
void SetRxMode(void)
{
SysCtlPeriEnable(TRX_CE_PERIPH); // 使能TRX_CE所在的GPIO端口
GPIOPinTypeOut(TRX_CE_PORT, TRX_CE_PIN); // 设置TRX_CE所在管脚为输出
SysCtlPeriEnable(TXEN_PERIPH); // 使能TXEN所在的GPIO端口
GPIOPinTypeOut(TXEN_PORT, TXEN_PIN); // 设置TXEN所在管脚为输出

GPIOPinWrite(TXEN_PORT, TXEN_PIN, ~TXEN_PIN); //TXEN=0
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, TRX_CE_PIN); //TRX_CE=1

Delay(1); // delay for mode change(>=650us)
}

//---------------判断数据接收状态-----------------------------------------------------
unsigned char CheckDR(void) //检查是否有新数据传入 Data Ready
{
SysCtlPeriEnable(TRX_CE_PERIPH); // 使能DR所在的GPIO端口
GPIOPinTypeIn(TRX_CE_PORT, TRX_CE_PIN); // 设置DR所在管脚为输入
SysCtlPeriEnable(TXEN_PERIPH); // 使能DR所在的GPIO端口
GPIOPinTypeIn(TXEN_PORT, TXEN_PIN); // 设置DR所在管脚为输入
SysCtlPeriEnable(DR_PERIPH); // 使能DR所在的GPIO端口

SysCtlPeriEnable(AM_PERIPH); // 使能AM所在的GPIO端口
GPIOPinTypeIn(AM_PORT, AM_PIN); // 设置AM所在管脚为输入
SysCtlPeriEnable(DR_PERIPH); // 使能DR所在的GPIO端口
GPIOPinTypeIn(DR_PORT, DR_PIN); // 设置DR所在管脚为输入


//Delay(2);


if ((GPIOPinRead(AM_PORT, AM_PIN)||GPIOPinRead(DR_PORT, DR_PIN)) && (~GPIOPinRead(TXEN_PORT, TXEN_PIN) & TXEN_PIN))
{
Delay(50) ;
return 1;
}
else
{
return 0;
}
}

//----------------读NRF905接收数据-------------------------------------------------
void RxPacket(void)
{
SysCtlPeriEnable(TRX_CE_PERIPH); // 使能TRX_CE所在的GPIO端口
GPIOPinTypeOut(TRX_CE_PORT, TRX_CE_PIN); // 设置TRX_CE所在管脚为输出
SysCtlPeriEnable(CSN_PERIPH); // 使能CSN所在的GPIO端口
GPIOPinTypeOut(CSN_PORT, CSN_PIN); // 设置CSN所在管脚为输出
SysCtlPeriEnable(AM_PERIPH); // 使能AM所在的GPIO端口
GPIOPinTypeIn(AM_PORT, AM_PIN); // 设置AM所在管脚为输入
SysCtlPeriEnable(DR_PERIPH); // 使能DR所在的GPIO端口
GPIOPinTypeIn(DR_PORT, DR_PIN); // 设置DR所在管脚为输入
unsigned char i;
Delay(1);
// 判断TRX_CE=0; // Set nRF905 in standby mode
Delay(100);
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, ~TRX_CE_PIN); //TRX_CE=0
GPIOPinWrite(CSN_PORT, CSN_PIN, ~CSN_PIN); //CSN=0 // Spi enable for write a spi command
Delay(1);
SpiWrite(RRP);
for (i = 0 ;i < 32 ;i++)
{
Rx_Buf[i]=SpiRead(); // Read data and save to buffer
}
GPIOPinWrite(CSN_PORT, CSN_PIN, CSN_PIN); //CSN=1
while(GPIOPinRead(AM_PORT, AM_PIN)||GPIOPinRead(DR_PORT, DR_PIN));
GPIOPinWrite(TRX_CE_PORT, TRX_CE_PIN, TRX_CE_PIN); //TRX_CE=1
}

//--------------------------------------------------------数据接收------------------------------------------------
void RX(void)
{
SetRxMode(); // Set nRF905 in Rx mode
while (CheckDR()==0);

if(CheckDR()==1)
{
Delay(10);
RxPacket();

}
}





// 主函数(程序入口)
int main(void)
{
char s[100];
char i,pp;
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
uartInit(); // UART初始化

//Config905(); //初始化寄存器
nRF905Init(); //初始化nRF905
Config905(); //初始化寄存器
uartPuts("OK\r\n");

// SetTxMode(); // Set nRF905 in Tx mode
for (;;)
{
//uartPuts("cmd>");
//size = uartGets(s, sizeof(s)); // 从UART接收命令字符串----一直等待
RX();
for(i=0;i<32;i++)
{
//*s=Rx_Buf[i];


if(Rx_Buf[i]==0x65)
buzzer1();
if(Rx_Buf[i]==0x38)
buzzer11();
pp=Rx_Buf[i];
//Delay(200);
//uartPuts(s);
}
Delay(200);

//AM=GPIOPinRead(AM_PORT, AM_PIN);
//DR=GPIOPinRead(DR_PORT, DR_PIN);

//if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00)
//{

//SetTxMode(); // Set nRF905 in Tx mode
// TxPacket(); // Send data by nRF905
//Delay(200);
//uartPuts("OK\r\n");
//}
}
}


相关主题
文本预览
相关文档 最新文档