📄 cc1100_ii.c
字号:
/*********************************************************/
/*函数名字:Spi_Read_Packet */
/*输入参数:接收缓冲区首址,最大长度 */
/*输出参数:校验标志 */
/*功能描述:数据存入缓冲区 */
/*建造日期;2008年03月30日 */
/*********************************************************/
unsigned char Spi_Read_Packet(unsigned char *Rx_buffer,unsigned char length)
{
Spi_Read_Burst(CC_RXFIFO,Rx_buffer,length); //接收数据
Spi_Write_Strobe(CC_SFRX); //清缓冲区
return 1;
}
/*********************************************************/
/*函数名字:WriteRfSettings */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:模块寄存器配置 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void WriteRfSettings(void)
{
Spi_Write_Byte (CC_IOCFG2,IOCFG2); //
Spi_Write_Byte (CC_IOCFG0,IOCFG0); //
Spi_Write_Byte (CC_FIFOTHR,FIFOTHR); //
Spi_Write_Byte (CC_PKTLEN,PKTLEN); //
Spi_Write_Byte (CC_PKTCTRL1,PKTCTRL1); //
Spi_Write_Byte (CC_PKTCTRL0,PKTCTRL0); //
// Spi_Write_Byte (CC_ADDR,ADDR); //
Spi_Write_Byte (CC_CHANNR,CHANNR); //
Spi_Write_Byte (CC_FSCTRL1,FSCTRL1); //
Spi_Write_Byte (CC_FSCTRL0,FSCTRL0); //
Spi_Write_Byte (CC_FREQ2,FREQ2); //
Spi_Write_Byte (CC_FREQ1,FREQ1); //
Spi_Write_Byte (CC_FREQ0,FREQ0); //
Spi_Write_Byte (CC_MDMCFG4,MDMCFG4); //
Spi_Write_Byte (CC_MDMCFG3,MDMCFG3); //
Spi_Write_Byte (CC_MDMCFG2,MDMCFG2); //
Spi_Write_Byte (CC_MDMCFG1,MDMCFG1); //
Spi_Write_Byte (CC_MDMCFG0,MDMCFG0); //
Spi_Write_Byte (CC_DEVIATN,DEVIATN); //
Spi_Write_Byte (CC_MCSM0,MCSM0); //
Spi_Write_Byte (CC_FOCCFG,FOCCFG); //
Spi_Write_Byte (CC_BSCFG,BSCFG); //
Spi_Write_Byte (CC_AGCCTRL2,AGCCTRL2); //
Spi_Write_Byte (CC_AGCCTRL1,AGCCTRL1); //
Spi_Write_Byte (CC_AGCCTRL0,AGCCTRL0); //
Spi_Write_Byte (CC_FREND1,FREND1); //
Spi_Write_Byte (CC_FREND0,FREND0); //
Spi_Write_Byte (CC_FSCAL3,FSCAL3); //
Spi_Write_Byte (CC_FSCAL2,FSCAL2); //
Spi_Write_Byte (CC_FSCAL1,FSCAL1); //
Spi_Write_Byte (CC_FSCAL0,FSCAL0); //
// Spi_Write_Byte (CC_FSTEST,FSTEST); //
Spi_Write_Byte (CC_TEST2,TEST2); //
Spi_Write_Byte (CC_TEST1,TEST1); //
Spi_Write_Byte (CC_TEST0,TEST0); //
}
/*********************************************************/
/*函数名字:RX_ACK */
/*输入参数:无 */
/*输出参数:应答标志 */
/*功能描述:等待从机应答,返回应答标志 */
/*建造日期;2008年03月30日 */
/*********************************************************/
unsigned char RX_ACK(void)
{
unsigned char *buffer = Rx_data;
unsigned int size,i=0;
size = sizeof(Rx_data); //最大长度
while (i <10000) //限时应答
{
delay_ns(15);
i++;
if (GDO0_H) //等待应答
{
if (Spi_Read_Packet(Rx_data,size)) //应答出现
{
if (!(buffer[0] ^= buffer[1])) //
{
if ((buffer[2] == (~(buffer[3])))) //
{
return 1; //成功应答
}
}
}
}
}
return 0; //没有应答
}
/*********************************************************/
/*函数名字:TX_ACK */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:接收成功发送应答 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void TX_ACK(void)
{
unsigned char PA;
PA = Rx_data[4]; //获取功率
Spz_delay(50); //成功接收
Spi_Write_Byte (CC_FREND0,PA); //功率配置
Spi_Write_Packet(Tx_data,4); //发送应答
}
/*********************************************************/
/*函数名字:Tx_cc1100 */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:发送数据,应答失败从发 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void Tx_cc1100(void)
{
unsigned char PA,i;
unsigned char ACK,Tx_Size;
Tx_Size = sizeof(Tx_data); //数组长度
Tx_data[4] = PA = 0x10; //最大功率
for (i=0; i<2; i++)
{
Spi_Write_Byte (CC_FREND0,PA); //功率配置
Spi_Write_Packet(Tx_data,Tx_Size); //开始发送
ACK = RX_ACK();
if (ACK) //是否应答
{
break; //应答退出
}
Tx_data[4] = PA = 0x17; //降低功率
}
delay_nms(1);
Spi_Write_Strobe(CC_SIDLE); //进入空闲
Spi_Write_Strobe(CC_SRX); //进入接收
}
void Data_Out(unsigned char Data)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(Data&0x80)
{
S_OUT=0;
__delay_cycles(100);
S_OUT=1;
__delay_cycles(300);
}
else
{
S_OUT=0;
__delay_cycles(300);
S_OUT=1;
__delay_cycles(100);
}
Data<<=1;
}
}
/*********************************************************/
/*函数名字:Rx_cc1100 */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:接收数据,成功发送应答 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void Rx_cc1100(void)
{
unsigned char i,size;
for (i = 0; i <7; i++)
Rx_data[i] = 0;
//size = Spi_Read_Byte(CC_RXBYTES); //数据长度
if( (Spi_Read_Status(CC_RXBYTES)&0x7F) ) //数据长度
{
size=Spi_Read_Byte(0x3F);
if(size<62)
{
Spi_Read_Packet(Rx_data,size+2); //接收数据
}
}
Spi_Write_Strobe(CC_SFRX); //清缓冲区
}
unsigned char buffer[]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
/*********************************************************/
/*函数名字:nain */
/*输入参数:无 */
/*输出参数:无 */
/*功能描述:主程序 */
/*建造日期;2008年03月30日 */
/*********************************************************/
void main(void)
{
PORT_Init();
Init_Devices();
Init_cc1100();
LED=1;
__delay_cycles(200000);//Init finished
LED=0;
//===============================以下为发送程序=====================
while(1) //循环程序
{
Spi_Write_Byte (CC_FREND0,0x16); //功率配置
// Spi_Write_Byte(CC_TXFIFO,size);//长度
Spi_Write_Burst(CC_TXFIFO,buffer,sizeof(buffer));
Spi_Write_Strobe(CC_STX);
while(GDO0_L)
;
while(GDO0_H)
;
LED=1;
__delay_cycles(200000);//
LED=0;
Spi_Write_Strobe(CC_SFTX); //清缓冲区
Spi_Write_Strobe(CC_SIDLE); //进入空闲
__delay_cycles(300000);//
}
//===============================以下为发送程序完毕=====================
//===============================以下为接收程序=====================
/* while(1) //循环程序
{
Spi_Write_Strobe(CC_SRX); //进入接收
while(GDO0_L) ;
while(GDO0_H) ;
LED=1;
__delay_cycles(200000);//Init finished
LED=0;
__delay_cycles(200000);//Init finished
Rx_cc1100(); //接收数据
delay_nms(1);
Spi_Write_Strobe(CC_SIDLE); //进入空闲
__delay_cycles(30000);//Init finished
} */
//===========================接收程序完毕===============================
}
/*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -