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

📄 1100.c

📁 无线模块cc1101学习资料
💻 C
📖 第 1 页 / 共 2 页
字号:
{
    INT8U i,temp;
	temp = addr | READ_BURST;		//写入要读的配置寄存器地址和读命令
    CSN = 0;
    while (MISO);
	SpiTxRxByte(temp);   
    for (i = 0; i < count; i++) 
	{
        buffer[i] = SpiTxRxByte(0);
    }
    CSN = 1;
}


//*****************************************************************************************
//函数名:INT8U halSpiReadReg(INT8U addr)
//输入:地址
//输出:该状态寄存器当前值
//功能描述:SPI读状态寄存器
//*****************************************************************************************
INT8U halSpiReadStatus(INT8U addr) 
{
    INT8U value,temp;
	temp = addr | READ_BURST;		//写入要读的状态寄存器的地址同时写入读命令
    CSN = 0;
    while (MISO);
    SpiTxRxByte(temp);
	value = SpiTxRxByte(0);
	CSN = 1;
	return value;
}
//*****************************************************************************************
//函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
//输入:无
//输出:无
//功能描述:配置CC1100的寄存器
//*****************************************************************************************
void halRfWriteRfSettings(void) 
{

	halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
    // Write register settings
    halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
    halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
    halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
    halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
    halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
    halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
    halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
    halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
    halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
    halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
    halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
    halSpiWriteReg(CCxxx0_DEVIATN,  rfSettings.DEVIATN);
    halSpiWriteReg(CCxxx0_FREND1,   rfSettings.FREND1);
    halSpiWriteReg(CCxxx0_FREND0,   rfSettings.FREND0);
    halSpiWriteReg(CCxxx0_MCSM0 ,   rfSettings.MCSM0 );
    halSpiWriteReg(CCxxx0_FOCCFG,   rfSettings.FOCCFG);
    halSpiWriteReg(CCxxx0_BSCFG,    rfSettings.BSCFG);
    halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
	halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
    halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
    halSpiWriteReg(CCxxx0_FSCAL3,   rfSettings.FSCAL3);
	halSpiWriteReg(CCxxx0_FSCAL2,   rfSettings.FSCAL2);
	halSpiWriteReg(CCxxx0_FSCAL1,   rfSettings.FSCAL1);
    halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
    halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
    halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
    halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
    halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
    halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
    halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);    
    halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
    halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
    halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
    halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
}

//*****************************************************************************************
//函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
//输入:发送的缓冲区,发送数据个数
//输出:无
//功能描述:CC1100发送一组数据
//*****************************************************************************************

void halRfSendPacket(INT8U *txBuffer, INT8U size) 
{
	halSpiWriteReg(CCxxx0_TXFIFO, size);
    halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);	//写入要发送的数据

    halSpiStrobe(CCxxx0_STX);		//进入发送模式发送数据

    // Wait for GDO0 to be set -> sync transmitted
    while (!GDO0);
    // Wait for GDO0 to be cleared -> end of packet
    while (GDO0);
	halSpiStrobe(CCxxx0_SFTX);
}


void setRxMode(void)
{
    halSpiStrobe(CCxxx0_SRX);		//进入接收状态
}

/*
// Bit masks corresponding to STATE[2:0] in the status byte returned on MISO
#define CCxx00_STATE_BM                 0x70
#define CCxx00_FIFO_BYTES_AVAILABLE_BM  0x0F
#define CCxx00_STATE_TX_BM              0x20
#define CCxx00_STATE_TX_UNDERFLOW_BM    0x70
#define CCxx00_STATE_RX_BM              0x10
#define CCxx00_STATE_RX_OVERFLOW_BM     0x60
#define CCxx00_STATE_IDLE_BM            0x00

static INT8U RfGetRxStatus(void)
{
	INT8U temp, spiRxStatus1,spiRxStatus2;
	INT8U i=4;// 循环测试次数
    temp = CCxxx0_SNOP|READ_SINGLE;//读寄存器命令
	CSN = 0;
	while (MISO);
	SpiTxRxByte(temp);
	spiRxStatus1 = SpiTxRxByte(0);
	do
	{
		SpiTxRxByte(temp);
		spiRxStatus2 = SpiTxRxByte(0);
		if(spiRxStatus1 == spiRxStatus2)
		{
			if( (spiRxStatus1 & CCxx00_STATE_BM) == CCxx00_STATE_RX_OVERFLOW_BM)
			{
               halSpiStrobe(CCxxx0_SFRX);
			   return 0;
			}
		    return 1;
		}
		 spiRxStatus1=spiRxStatus2;
	}
	while(i--);
	CSN = 1;
    return 0;	
}
 */
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) 
{
    INT8U status[2];
    INT8U packetLength;
	INT8U i=(*length)*4;  // 具体多少要根据datarate和length来决定

    halSpiStrobe(CCxxx0_SRX);		//进入接收状态
	//delay(5);
    //while (!GDO1);
    //while (GDO1);
	delay(2);
	while (GDO0)
	{
		delay(2);
		--i;
		if(i<1)
		   return 0; 	    
	}	 
    if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
	{
        packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
        if (packetLength <= *length) 		//如果所要的有效数据长度小于等于接收到的数据包的长度
		{
            halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
            *length = packetLength;				//把接收数据长度的修改为当前数据的长度
        
            // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
            halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); 	//读出CRC校验位
			halSpiStrobe(CCxxx0_SFRX);		//清洗接收缓冲区
            return (status[1] & CRC_OK);			//如果校验成功返回接收成功
        }
		 else 
		{
            *length = packetLength;
            halSpiStrobe(CCxxx0_SFRX);		//清洗接收缓冲区
            return 0;
        }
    } 
	else
 	return 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//            串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
                     //初始化串行口和波特率发生器 
SCON =0x58;          //选择串口工作方式,打开接收允许
TMOD =0x21;          //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
TL1 =0xfd;
TR1 =1;              //启动定时器T1
ET1 =0; 
ES=1;                //允许串行口中断
PS=1;                //设计串行口中断优先级
EA =1;               //单片机中断允许
}
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断处理函数
// 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
com_interrupt(void) interrupt 4 using 3
{
 // char  RECEIVR_buffer;
  if(RI)                                //处理接收中断
  {
  RI=0;                                //清除中断标志位
  KEY0=SBUF;
  SBUF=KEY0;
}
}
//*************************************************************************************
void main(void)
{
	INT8U i,leng =4;
	INT8U tf =0;
	INT8U TxBuf[4]={0};	 // 8字节, 如果需要更长的数据包,请正确设置
	INT8U RxBuf[4]={0};	
	CpuInit();
	POWER_UP_RESET_CC1100();
	halRfWriteRfSettings();
	halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);

	//TxBuf[0] = 8 ;
//	TxBuf[1] = 1 ;
//	TxBuf[2] = 1 ;
//	halRfSendPacket(TxBuf,8);	// Transmit Tx buffer data
	delay(6000);
	P0=0xBF;
	led0=0;led1=0;led2=0;led3=0;
	UART_init();
	while(1)
	{

if(KEY0==48)						//有键按下0
			{
				 TxBuf[0]=0x01;
				 TxBuf[1]=0x02;
				 TxBuf[2]=0x03;
				 TxBuf[3]=0x04;  
           		P0= seg[0];
				led0=1;
				led1=1;
				led2=1;
				led3=0;
for(i=0;i<2;i++)
{   
 	halRfSendPacket(TxBuf,leng);	// Transmit Tx buffer data
}

       	 TxBuf[1]=0;   
		//	Delay(250);
				}
		if(KEY0==49)						//有键按下1
			{
				 TxBuf[0]=0x11;
				 TxBuf[1]=0x12;
				 TxBuf[2]=0x13;
				 TxBuf[3]=0x14;  
           		P0= seg[1];
				led0=1;
				led1=1;
				led2=0;
				led3=1;
for(i=0;i<2;i++)
{
    
	halRfSendPacket(TxBuf,leng);	// Transmit Tx buffer data           
}
		 TxBuf[2]=0;	//	Delay(250);
				}
				 if(KEY0==50)						//有键按下2
			{
				 TxBuf[0]=0x21;
				 TxBuf[1]=0x22;
				 TxBuf[2]=0x23;
				 TxBuf[3]=0x24;    
        		P0= seg[2];
				led0=1;
				led1=0;
				led2=1;
				led3=1;
for(i=0;i<2;i++)
{
     	halRfSendPacket(TxBuf,leng);           
}
			//	Delay(250);
			}	
		if(KEY0==51)						//有键按下3
			{
				TxBuf[0]=0x31;
				TxBuf[1]=0x32;
				TxBuf[2]=0x33;
				TxBuf[3]=0x34;  
           		P0= seg[3];
				led0=0;
				led1=1;
				led2=1;
				led3=1;
for(i=0;i<2;i++)
{
    	halRfSendPacket(TxBuf,leng);         
}
		//	Delay(250);
				}
						if(KEY0==52)						//有键按下4
			{
				TxBuf[0]=0x41;
				TxBuf[1]=0x42;
				TxBuf[2]=0x43;
				TxBuf[3]=0x44;  
           		P0= seg[4];
				led0=1;
				led1=1;
				led2=1;
				led3=0;
for(i=0;i<2;i++)
{
    	halRfSendPacket(TxBuf,leng);           
}
		//	Delay(250);
				}
						if(KEY0==53)						//有键按下5
			{
				TxBuf[0]=0x51;
				TxBuf[1]=0x52;
				TxBuf[2]=0x53;
				TxBuf[3]=0x54;  
           		P0= seg[5];
				led0=1;
				led1=1;
				led2=0;
				led3=1;
for(i=0;i<2;i++)
{
  	halRfSendPacket(TxBuf,leng);	// Transmit Tx buffer data             
}
		//	Delay(250);
				}
						if(KEY0==54)						//有键按下6
			{
				TxBuf[0]=0x61;
				TxBuf[1]=0x62;
				TxBuf[2]=0x63;
				TxBuf[3]=0x64;  
           		P0= seg[6];
				led0=1;
				led1=0;
				led2=1;
				led3=1;
for(i=0;i<2;i++)
{
  	halRfSendPacket(TxBuf,leng);             
}
		//	Delay(250);
				}
						if(KEY0==55)						//有键按下7
			{
				TxBuf[0]=0x71;
				TxBuf[1]=0x72;
				TxBuf[2]=0x73;
				TxBuf[3]=0x74;  
           		P0= seg[7];
				led0=0;
				led1=1;
				led2=1;
				led3=1;
for(i=0;i<2;i++)
{
    	halRfSendPacket(TxBuf,leng);       
}
		//	Delay(250);
				}
						if(KEY0==56)						//有键按下8
			{
				TxBuf[0]=0x81;
				TxBuf[1]=0x82;
				TxBuf[2]=0x83;
				TxBuf[3]=0x84;  
           		P0= seg[8];
				led0=1;
				led1=1;
				led2=1;
				led3=0;
for(i=0;i<2;i++)
{
   	halRfSendPacket(TxBuf,leng);	// Transmit Tx buffer data           
}
		//	Delay(250);
				}
						if(KEY0==57)						//有键按下9
			{
				TxBuf[0]=0x91;
				TxBuf[1]=0x92;
				TxBuf[2]=0x93;
				TxBuf[3]=0x94;  
           		P0= seg[9];
				led0=1;
				led1=1;
				led2=0;
				led3=1;
		for(i=0;i<2;i++)
		{
			halRfSendPacket(TxBuf,leng);
		}
}
}
}

⌨️ 快捷键说明

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