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

📄 board._c

📁 chipcom公司CC1100无线模块底层驱动程序
💻 _C
📖 第 1 页 / 共 2 页
字号:
			DIS_RX_INT();		//禁止串口接收中断
		}
	}
}
/*
************************************************************
*Description:延时函数
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/

void Delay(INT16U dly)
{
	INT16U i;

	for(i=0;i<dly;i++);
}

/*
************************************************************
*Description:切换CC1100工作状态为接收
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void RF_Sts_ToRX(void)
{
	CC1100Strobe(CC1100_SIDLE);		//强制转为空闲状态
	Delay(1000);
	CC1100Strobe(CC1100_SFRX);		//清除接收缓存
	CC1100Strobe(CC1100_SRX);		//切换到接收模式,进入FS_WAKEUP
	CC1100Strobe(CC1100_SRX);       //进入CALIBRATE
	Delay(1000); 					//进入SETTLING
	CC1100Strobe(CC1100_SRX);		//进入RX
}
/*
************************************************************
*Description:切换CC1100工作状态为发送
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void RF_Sts_ToTX(void)
{
	CC1100Strobe(CC1100_SIDLE);		//强制转为空闲状态
	Delay(1000);
	CC1100Strobe(CC1100_SFTX);		//清除发送缓存
	CC1100Strobe(CC1100_STX);		//切换到发送模式,进入FS_WAKEUP
	CC1100Strobe(CC1100_STX);		//进入CALIBRATE
	Delay(1000);					//进入SETTLING
	CC1100Strobe(CC1100_STX);		//进入TX
}
void CC1100WriteRfSettings(void) {
    // Write register settings
    CC1100WriteReg(CC1100_IOCFG2,   rfSettings.IOCFG2);
	CC1100WriteReg(CC1100_IOCFG1,   rfSettings.IOCFG1);    
    CC1100WriteReg(CC1100_IOCFG0,   rfSettings.IOCFG0);    
    CC1100WriteReg(CC1100_FIFOTHR,  rfSettings.FIFOTHR);
    CC1100WriteReg(CC1100_SYNC1,    rfSettings.SYNC1);
    CC1100WriteReg(CC1100_SYNC0,    rfSettings.SYNC0);
    CC1100WriteReg(CC1100_PKTLEN,   rfSettings.PKTLEN);
    CC1100WriteReg(CC1100_PKTCTRL1, rfSettings.PKTCTRL1);
    CC1100WriteReg(CC1100_PKTCTRL0, rfSettings.PKTCTRL0);
    CC1100WriteReg(CC1100_ADDR,     rfSettings.ADDR);
	
    //CC1100WriteReg(CC1100_CHANNR,   rfSettings.CHANNR);
	CC1100WriteReg(CC1100_CHANNR,   Chno_Set_Num);
	
    CC1100WriteReg(CC1100_FSCTRL1,  rfSettings.FSCTRL1);
    CC1100WriteReg(CC1100_FSCTRL0,  rfSettings.FSCTRL0);
	
    CC1100WriteReg(CC1100_FREQ2,    rfSettings.FREQ2);
    CC1100WriteReg(CC1100_FREQ1,    rfSettings.FREQ1);
    CC1100WriteReg(CC1100_FREQ0,    rfSettings.FREQ0);
	
    //CC1100WriteReg(CC1100_MDMCFG4,  rfSettings.MDMCFG4);
	CC1100WriteReg(CC1100_MDMCFG4,  Sys_Set[Baud_Set_Num].mdcfg4_val);
    //CC1100WriteReg(CC1100_MDMCFG3,  rfSettings.MDMCFG3);
	CC1100WriteReg(CC1100_MDMCFG3,  Sys_Set[Baud_Set_Num].mdcfg3_val);
	
    CC1100WriteReg(CC1100_MDMCFG2,  rfSettings.MDMCFG2);
    CC1100WriteReg(CC1100_MDMCFG1,  rfSettings.MDMCFG1);
    CC1100WriteReg(CC1100_MDMCFG0,  rfSettings.MDMCFG0);
	
    //CC1100WriteReg(CC1100_DEVIATN,  rfSettings.DEVIATN);
	CC1100WriteReg(CC1100_DEVIATN,  Sys_Set[Baud_Set_Num].deviatn);
	
    CC1100WriteReg(CC1100_MCSM2 ,   rfSettings.MCSM2 );
	CC1100WriteReg(CC1100_MCSM1 ,   rfSettings.MCSM1 );
	CC1100WriteReg(CC1100_MCSM0 ,   rfSettings.MCSM0 );
    CC1100WriteReg(CC1100_FOCCFG,   rfSettings.FOCCFG);
    CC1100WriteReg(CC1100_BSCFG,    rfSettings.BSCFG);
    CC1100WriteReg(CC1100_AGCCTRL2, rfSettings.AGCCTRL2);
    CC1100WriteReg(CC1100_AGCCTRL1, rfSettings.AGCCTRL1);
    CC1100WriteReg(CC1100_AGCCTRL0, rfSettings.AGCCTRL0);
	CC1100WriteReg(CC1100_WOREVT1,  rfSettings.WOREVT1);
	CC1100WriteReg(CC1100_WOREVT0,  rfSettings.WOREVT0);
	CC1100WriteReg(CC1100_WORCTRL,  rfSettings.WORCTRL);
    CC1100WriteReg(CC1100_FREND1,   rfSettings.FREND1);
    CC1100WriteReg(CC1100_FREND0,   rfSettings.FREND0);
    CC1100WriteReg(CC1100_FSCAL3,   rfSettings.FSCAL3);
    CC1100WriteReg(CC1100_FSCAL2,   rfSettings.FSCAL2);
    CC1100WriteReg(CC1100_FSCAL1,   rfSettings.FSCAL1);
    CC1100WriteReg(CC1100_FSCAL0,   rfSettings.FSCAL0);	
}
void CC1100PinInit(void)
{
    CS_OUT;
	SCLK_OUT;
	SI_OUT;
	SO_IN;
	//GDO0_IN;
	GDO2_IN;
}
/*
************************************************************
*Description:初始化CC1100
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void CC1100Init (void)
{
	CC1100PinInit();
	CC1100Rst();
	CC1100WriteRfSettings();
    //CC1100WriteBurstReg(CC1100_IOCFG2, CC1100CfgReg, sizeof(CC1100CfgReg)); //写配置寄存器
    //CC1100WriteBurstReg(CC1100_IOCFG2, rfSettings, sizeof(rfSettings)); //写配置寄存器
	CC1100WriteBurstReg(CC1100_PATABLE, paTable, sizeof(paTable)); //配置发射功率10mW

	PCMSK2 |= BIT(PCINT18);
	PCICR  |= BIT(PCIE2);

	RF_Sts_ToRX();
}

/*
************************************************************
*Description:CC1100查看接收数据包
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void RF_ReceivePacket (void)
{
    INT8U status;

    if (RFState == CC1100_RX_STATE)
	{
	    RFReceiveLen = CC1100ReadReg(CC1100_RXFIFO);
		if (RFReceiveLen <= MAX_RF_BUFF)
		{
		    CC1100ReadBurstReg(CC1100_RXFIFO, RFReceive_Buf, RFReceiveLen);  //保证下标不越界
		}
		else
		{
			CC1100Init(); 			//保证CC1100出现异常,还能正常工作。为什么会出现异常,原因待查??
		}
		CC1100Strobe(CC1100_SFRX);	//清除接收缓存

		status = CC1100ReadStatus(CC1100_PKTSTATUS);
		if (status & CRC_OK)
		{
		    RFReceiveFlg = TRUE;  	//射频接收完一包数据,准备发送到串口
			return;
		}
	}
	else
	{
	    RFState = CC1100_RX_STATE;	//射频发送完毕,转换为接收状态
	}
	RF_Sts_ToRX();
}


/*
************************************************************
*Description:射频数据包发送函数
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void RF_SendPacket (INT8U *txBuffer, INT8U size)
{
    RFState = CC1100_TX_STATE;		//准备发送数据

	RF_Sts_ToTX();

	RFSend_Start=TRUE;

	CC1100WriteReg(CC1100_TXFIFO, size);
	CC1100WriteBurstReg(CC1100_TXFIFO, txBuffer, size);

	EN_RX(); 						//使能串口接收
	EN_RX_INT();					//使能串口接收中断
}


/*
************************************************************
*Description:启动串口发送中断函数
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void Uart_SendPacket (void)
{
	EN_TX_INT();

	RF_Sts_ToRX();
}
/*
************************************************************
*Description:打印系统信息
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void PrintSysInfo(void)
{
	printf("**************************\n");
	printf("*CC1100_TestBoard!\n");
	printf("*Build date : %s\n",__DATE__);
	printf("*Build time : %s\n",__TIME__);
	printf("*RF         : %d MHz\n",RF_CENTER);
	printf("*Baud rate  : %u BPS\n",Sys_Set[Baud_Set_Num].baud);
	printf("*Chanel     : %d\n",Chno_Set_Num);
	printf("**************************\n");
}
/*
************************************************************
*Description:按键扫描处理
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
INT8U Key_Scan(void)
{
	static INT8U key_old_val=POPE;
	INT8U	key_new_val;

	key_new_val=KEY_STATUS;

	if(key_new_val!=key_old_val)
	{
	 	key_old_val=key_new_val;
		if(key_new_val==POPE)
			return TRUE;
		else
			return FALSE;
	}
	else
	{
		return FALSE;
	}
}
/*
************************************************************
*Description:初始化系统各种参数,变量
*Arguments  :none
*Returns    :none
*Notes      :
************************************************************
*/
void InitSys (void)
{
	INT8U	work_mode;
	INT8U	cs_sel;

	port_init();

	work_mode=WORK_MODE;
	cs_sel=CS_SELECT;

	if(work_mode==WORK_TEST)
	{
		Chno_Set_Num=CHAN_SET_TEST;
		Baud_Set_Num=BAUD_TEST;
	}
	if(work_mode==WORK_DEMO)
	{
		Chno_Set_Num=CHAN_SET_DEMO;
		Baud_Set_Num=BAUD_SET;
	}

	uart0_init();
	timer0_init();
	PrintSysInfo();

	RFSendCnt = 0;        	//射频发送(串口接收)计数器,记录串口接收字节数
	RFReceiveCnt = 0;     	//射频接收(串口发送)计数器,记录串口发送字节数

	RFSendFlg = FALSE;    	//射频发送标志,串口已经接收完一包数据,准备射频发送
	RFReceiveFlg = FALSE; 	//射频接收标志,准备把空中数据发送到串口

	RXOTCnt = 0;          	//串口接收数据超时计数器
	RXOTFlg = FALSE;      	//串口接收数据超时标志

	CC1100Init(); 			//初始化CC1100

	RFState = CC1100_RX_STATE;
	CC1100IntLFlg = FALSE;
	CC1100IntHFlg = FALSE;

	SEI();
}


⌨️ 快捷键说明

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