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

📄 cc1100_rx.c

📁 基于CC1100的配置程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//-----------------------------------------------------------------------------
// CC1100.c
//-----------------------------------------------------------------------------
// Copyright (C) 2005 Silicon Laboratories, Inc.
//
// AUTH: JS
// DATE: 03 JUL 02
//
// This program flashes the green LED on the C8051F31x target board about 
// five times a second using the interrupt handler for Timer2.
//
// Target: C8051F31x
//
// Tool chain: KEIL Eval 'c'
//

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f310.h>                    // SFR declarations
#include <intrins.h>
#include <string.h>
#include "CC1100.h"


#define		INT8U				unsigned char
#define		INT16U				unsigned int




#define 	WRITE_BURST     	0x40						//连续写入
#define 	READ_SINGLE     	0x80						//读
#define 	READ_BURST      	0xC0						//连续读
#define 	BYTES_IN_RXFIFO     0x7F  						//接收缓冲区的有效字节数
#define 	CRC_OK              0x80 						//CRC校验通过位标志



//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F30x
//-----------------------------------------------------------------------------

sfr16 TMR2RL   = 0xca;                    // Timer2 reload value
sfr16 TMR2     = 0xcc;                    // Timer2 counter

//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------

#define   SYSCLK       24500000             // SYSCLK frequency in Hz
	
#define	  BAUDRATE		   9600





//----------------------------------------------------------------------------------------------------------

//定义CC1100模块接口
sbit	SCK	      = P0^0;
sbit	MISO      = P0^1;

sbit	MOSI      = P0^6;
sbit	GDO0      = P0^7;
sbit	CS_CC1100 = P2^0;
sbit	GDO2      = P2^1;

//定义接口
sbit	TX	      = P0^4;
sbit	RX	      = P0^5;

sbit    LED       = P3^3;                          // LED='0' means ON



/****************************************************************************************
//全局变量定义
/****************************************************************************************/
INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};



//-----------------------------------------------------------------------------
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);


void UART0_Init(void);
void SendCh(INT8U c);


void  delay(unsigned int s);
INT8U SpiReadWrite(INT8U dat);
void  halSpiWriteReg(INT8U addr, INT8U value);
void  halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count);
void  halSpiStrobe(INT8U strobe);
INT8U halSpiReadReg(INT8U addr); 
void  halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count);
INT8U halSpiReadStatus(INT8U addr);



void halWait(INT16U timeout);
void RESET_CC1100(void);
void POWER_UP_RESET_CC1100(void);
void halRfWriteRfSettings(void);
void Init_CC1100(void);




void  halRfSendPacket(INT8U *txBuffer, INT8U size);
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U length); 

//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void) {

   
	INT8U arrTx[4];
	INT8U arrRx[4]={0x55,0x22,0x65,0xAA};
   

    PCA0MD &= ~0x40;                       //disable watchdog timer
    PORT_Init();
    SYSCLK_Init();
	UART0_Init(); 


   // Init_CC1100();

 
//	LED = 0;
//	delay(60000);
  //  SendCh(0x55);

	arrTx[0] = 0x55;
	arrTx[1] = 0x0A;
	arrTx[2] = 0xCC;
	arrTx[3] = 0x33;
	
	while(1)
	{
        //halRfSendPacket(arrTx, 4);
		
		//if(halRfReceivePacket(arrRx,4))
	//	{
		//	LED  = 1;
            LED =~LED;
			delay(60000);
		    SendCh(arrRx[0]);
            SendCh(arrRx[1]);
			SendCh(arrRx[2]);
            SendCh(arrRx[3]);
		  
	//	}	
     }


}




/*****************************************************************************************
//函数名:void PORT_Init (void)
//输入:无
//输出:无
//功能描述:
/*****************************************************************************************/
void PORT_Init (void)
{
   P0MDOUT = 0x51;
   P2MDOUT = 0x01;
   P3MDOUT = 0x08;
   XBR0 = 0x01;
   XBR1 = 0xC0;
   
   CS_CC1100 = 0;
   SCK       = 0;
   MISO      = 1;
   MOSI      = 0;
   GDO0      = 1;  
   GDO2      = 1;
   LED       = 1;  
   CS_CC1100 = 1;

}


void SYSCLK_Init(void)
{
   OSCICN = 0x83;
   CLKSEL = 0x00;

}


/*****************************************************************************************
//函数名:void UART0_Init(void)
//功能描述:初始化串口0,9600,8,N
/*****************************************************************************************/
void UART0_Init(void)
{
	SCON0 = 0x10;		//串口方式1,8,允许接收
	TMOD |= 0x20;		//定时器1工作方式1,8 autoload
	TH1 = 0x96;	
	TL1 = 0x96;	
    
	TR1 = 1;		    //启动定时器1
	ES0 = 0;
}

/*****************************************************************************************
//函数名:void SendCh(INT8U c)
//输入:无
//输出:无
//功能描述:串口发送一个字符
/*****************************************************************************************/
void SendCh(INT8U c)
{
    EA  = 0;

    TI0 = 0;
	SBUF0 = c;
	while(!TI0);
	TI0 = 0;
	EA = 1;
}




//*****************************************************************************************
//函数名:void delay(unsigned int s)
//输入:时间
//输出:无
//功能描述:普通廷时
//*****************************************************************************************		
void delay(unsigned int s)
{
	unsigned int i;
	for(i=0; i<s; i++);
	for(i=0; i<s; i++);
    for(i=0; i<s; i++);
}


//*****************************************************************************************
//函数名:INT8U SpiReadWrite(INT8U dat)
//输入:发送的数据
//输出:无
//功能描述:SPI发送一个字节
//*****************************************************************************************
INT8U SpiReadWrite(INT8U dat)
{
	INT8U i,temp;

	temp = 0;	
	SCK = 0;	
	_nop_();
	for(i=0; i<8; i++)
	{
		if(dat & 0x80)
		  {
			MOSI = 1;
		  }
		else MOSI = 0;
			
		dat <<= 1;

		SCK = 1; 
		_nop_();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -