📄 board._c
字号:
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 + -