⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 905.c

📁 tms320f2812与nrf905连接
💻 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 + -