?? 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 + -