📄 905.c
字号:
/*******************************************************************************************/
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#define WC 0x00 // Write configuration register command
#define RC 0x10 // Read configuration register command
#define WTP 0x20 // Write TX Payload command
#define RTP 0x21 // Read TX Payload command
#define WTA 0x22 // Write TX Address command
#define RTA 0x23 // Read TX Address command
#define RRP 0x24 // Read RX Payload command
/*******************************************************************************************/
#define TX_EN_0 (GpioDataRegs.GPGDAT.bit.GPIOG5=0)
#define TX_EN_1 (GpioDataRegs.GPGDAT.bit.GPIOG5=1)
#define TRX_CE_0 (GpioDataRegs.GPFDAT.bit.GPIOF11=0)
#define TRX_CE_1 (GpioDataRegs.GPFDAT.bit.GPIOF11=1)
#define PWR_UP_0 (GpioDataRegs.GPDDAT.bit.GPIOD6=0)
#define PWR_UP_1 (GpioDataRegs.GPDDAT.bit.GPIOD6=1)
#define MOSI_0 (GpioDataRegs.GPFDAT.bit.GPIOF0=0)
#define MOSI_1 (GpioDataRegs.GPFDAT.bit.GPIOF0=1)
#define SCK_0 (GpioDataRegs.GPFDAT.bit.GPIOF2=0)
#define SCK_1 (GpioDataRegs.GPFDAT.bit.GPIOF2=1)
#define CSN_0 (GpioDataRegs.GPBDAT.bit.GPIOB13=0)
#define CSN_1 (GpioDataRegs.GPBDAT.bit.GPIOB13=1)
#define MISO (GpioDataRegs.GPFDAT.bit.GPIOF1==1)
#define DR (GpioDataRegs.GPBDAT.bit.GPIOB14==1)
#define AM (GpioDataRegs.GPFDAT.bit.GPIOF10==1)
#define size 2
unsigned char TxBuf[size]={1,2};
unsigned char RxBuf[size];
unsigned char DATA_BUF;
/*******************************************************************************************/
/*#define TX_EN GpioDataRegs.GPGDAT.bit.GPIOG5;
#define TRX_CE GpioDataRegs.GPFDAT.bit.GPIOF11;
#define PWR_UP GpioDataRegs.GPDDAT.bit.GPIOD6;
//sbit MISO =P2^3;
//sbit MOSI =P2^2;
//sbit SCK =P2^1;
#define CSN GpioDataRegs.GPBDAT.bit.GPIOB13;
#define AM GpioDataRegs.GPFDAT.bit.GPIOF10;
#define DR GpioDataRegs.GPBDAT.bit.GPIOB14;
#define CD GpioDataRegs.GPBDAT.bit.GPIOB15;*/
/*******************************************************************************************/
void Gpio_select(void);
void InitIO(void); // Initialize IO port
//void spi_init(void); // initialize 232 uart
//void spi_fifo_init();
void SpiWrite(unsigned char); // Write data to nRF905
unsigned char SpiRead(void); // Read data to nRF905
void SetTxMode(void); // Set nRF905 in Tx mode
void SetRxMode(void); // Set nRF905 in Rx mode
void Config905(void); // Config nRF905 module
void TxPacket(void); // Send data by nRF905
void RxPacket(void); // Recive data by nRF905
//void Delay(uchar n); // Delay 100us
//void delay_us(int);
void delay_ms(unsigned int);
//void Scankey(void); // Scan key
//void TxData (uchar x); // Send key_value to CRT display
/*******************************************************************************************/
//function main();
/*******************************************************************************************/
/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x0;
GpioMuxRegs.GPBMUX.all=0x0;
GpioMuxRegs.GPDMUX.all=0x0;
GpioMuxRegs.GPFMUX.all=0x0; // Select GPIOs to be SPI pins
GpioMuxRegs.GPEMUX.all=0x0;
GpioMuxRegs.GPGMUX.all=0x0;
GpioMuxRegs.GPADIR.all=0x0;
GpioMuxRegs.GPBDIR.all=0x0;
GpioMuxRegs.GPBDIR.bit.GPIOB13=1; //GPB13 output CSN
GpioMuxRegs.GPDDIR.all=0x0;
GpioMuxRegs.GPDDIR.bit.GPIOD6=1; //D6 output POWER_UP
GpioMuxRegs.GPFDIR.all=0x0;
GpioMuxRegs.GPFDIR.bit.GPIOF0=1; //MOSI
GpioMuxRegs.GPFDIR.bit.GPIOF2=1; //SCK
GpioMuxRegs.GPFDIR.bit.GPIOF11=1; //F11 output TRX_CE
GpioMuxRegs.GPEDIR.all=0x0;
GpioMuxRegs.GPGDIR.all=0x0;
GpioMuxRegs.GPGDIR.bit.GPIOG5=1; //G5 output TX_EN
GpioMuxRegs.GPAQUAL.all=0x0;
GpioMuxRegs.GPBQUAL.all=0x0;
GpioMuxRegs.GPDQUAL.all=0x0;
GpioMuxRegs.GPEQUAL.all=0x0;
EDIS;
}
void InitIO(void)
{
CSN_1;
SCK_0;
PWR_UP_1;
TRX_CE_0;
TX_EN_0;
}
/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
/*******************************************************************************************/
//function Delay100us();Delay 100us
/*******************************************************************************************/
void delay_us(int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<10;j++);
//EALLOW;12
//SysCtrlRegs.WDKEY=0x55;
//EDIS;14000
}
}
void delay_ms(unsigned int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<14000;j++);
}
}
/*******************************************************************************************/
//function SpiWrite();
/*******************************************************************************************/
void SpiWrite(unsigned char byte)
{
unsigned char i,j;
DATA_BUF=byte; // Put function's parameter into a bdata variable
for (i=0;i<8;i++) // Setup byte circulation bits
{
if (DATA_BUF&0x80) MOSI_1; // Put DATA_BUF.7 on data line
else MOSI_0;
for(j=0;j<10;j++);
SCK_1; // Set clock line high
for(j=0;j<10;j++);
DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
SCK_0; // Set clock line low
for(j=0;j<10;j++);
}
}
/*******************************************************************************************/
//function SpiRead();
/*******************************************************************************************/
unsigned char SpiRead(void)
{
unsigned char i,j;
DATA_BUF=0;
SCK_0; // Set clock line low
for(j=0;j<10;j++);
for (i=0;i<8;i++) // Setup byte circulation bits
{
DATA_BUF=DATA_BUF<<1; // Right shift DATA_BUF
SCK_1; // Set clock line high
if(MISO) DATA_BUF=DATA_BUF|0x01; // Read data
else DATA_BUF=DATA_BUF&0xfe;
SCK_0; // Set clock line low
}
return DATA_BUF; // Return function parameter
}
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)
{
TX_EN_1;
TRX_CE_0;
delay_ms(38); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
TX_EN_0;
TRX_CE_1;
delay_ms(38); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void TxPacket(void)
{
unsigned char i;
CSN_0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
for (i=0;i<size;i++)
{
SpiWrite(TxBuf[i]); // Write 2 bytes Tx data
}
CSN_1; // Spi disable
delay_ms(38);
CSN_0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
// Write 4 bytes address
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
CSN_1; // Spi disable
TRX_CE_1; // Set TRX_CE high,start Tx data transmission
delay_ms(38); // while (DR!=1);
TRX_CE_0; // Set TRX_CE low
}
/*******************************************************************************************/
//function RxPacket();
/*******************************************************************************************/
void RxPacket(void)
{
unsigned char i;
TRX_CE_0; // Set nRF905 in standby mode
CSN_0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
for (i=0;i<2;i++)
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
//display(RxBuf[i])
}
CSN_1; // Disable spi
while(DR||AM);
TRX_CE_1;
delay_ms(38);
}
void Config905(void)
{
CSN_0;
SpiWrite(WC);
SpiWrite(0x4d);
SpiWrite(0x2c);
SpiWrite(0x44);
SpiWrite(0x02);
SpiWrite(0x02);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0xcc);
SpiWrite(0x5d);
CSN_1;
}
void main(void)
{
unsigned int j;
InitSysCtrl();
DINT;
InitPieCtrl();
IER=0x0000;
IFR=0x0000;
InitPieVectTable();
Gpio_select();
InitIO();
delay_ms(100);
Config905();
for(j=0;j<10;j++);
SetTxMode();
for(j=0;j<10;j++);
//while(1)
for(;;)
{
delay_ms(5);
TxPacket();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -