Example #1
0
uint8_t cc1101_rcv_packet(uint8_t *rxBuffer, uint8_t *length) 
{
#if 0
	uint8_t marc=read_cc1101(CCxxx0_MARCSTATE,RT_NULL,0,TYPE_REG)&0x1f;
	DEBUG("marc %x\r\n",marc);
	if(marc==0x11)
	{
		write_cc1101(CCxxx0_SIDLE,RT_NULL,0,TYPE_STROBE_STATUS);     // Enter IDLE state
		write_cc1101(CCxxx0_SFRX,RT_NULL,0,TYPE_STROBE_STATUS);       // Flush Tx FIFO		
	}
	else{
		marc=read_cc1101(CCxxx0_RXBYTES,RT_NULL,0,TYPE_REG)&0x7f;
		DEBUG("rxbytes %x\r\n",marc);
		if(marc!=0)
		{
			DEBUG("read %d bytes\r\n",read_cc1101(CCxxx0_RXBYTES,RT_NULL,0,TYPE_REG)&0x7f);
			*length=read_cc1101(CCxxx0_RXFIFO,RT_NULL,0,TYPE_STROBE_STATUS);
			read_cc1101(CCxxx0_RXFIFO, rxBuffer, *length,TYPE_BURST); 
		}
		}
	return *length;
	#endif
	uint8_t i,status[2];
	write_cc1101(CCxxx0_SRX,RT_NULL,0,TYPE_STROBE_STATUS);  
	wait_int(RT_TRUE);
	wait_int(RT_FALSE);
	uint8_t marc=read_cc1101(CCxxx0_RXBYTES,RT_NULL,0,TYPE_REG)&0x7f;
	//DEBUG("rxbytes %x\r\n",marc);
	if(marc!=0)
		{
			uint8_t len=read_cc1101(CCxxx0_RXFIFO,RT_NULL,0,TYPE_STROBE_STATUS);
			DEBUG("len is %d\r\n",len);
			if(len<=*length)
				{
					read_cc1101(CCxxx0_RXFIFO, rxBuffer, len,TYPE_BURST);
					for(i=0;i<len;i++)
						DEBUG("%x ",rxBuffer[i]);
					DEBUG("cc1101 receive ok\r\n");
					*length=len;
					read_cc1101(CCxxx0_RXFIFO,status,2,TYPE_BURST);
					return status[1]&CRC_OK;
				}
			else
				{
					*length=len;
					write_cc1101(CCxxx0_SIDLE,RT_NULL,0,TYPE_STROBE_STATUS);     // Enter IDLE state
					write_cc1101(CCxxx0_SFRX,RT_NULL,0,TYPE_STROBE_STATUS); 
				}
		}
	return 0;
}
Example #2
0
uint8_t cc1101_rcv_packet(uint8_t *rxBuffer, uint8_t *length) 
{
    uint8_t status[2];
    uint8_t packetLength;
    uint8_t i=(*length)*4;  // 具体多少要根据datarate和length来决定

    write_cc1101(CCxxx0_SRX,RT_NULL,0,TYPE_STROBE_STATUS);		//进入接收状态
    wait_int(RT_FALSE);

    if ((read_cc1101(CCxxx0_RXBYTES,RT_NULL,0,TYPE_STROBE_STATUS) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
    {

        packetLength = read_cc1101(CCxxx0_RXFIFO,RT_NULL,0,TYPE_STROBE_STATUS);//读出第一个字节,此字节为该帧数据长度

        if (packetLength <= *length) 		//如果所要的有效数据长度小于等于接收到的数据包的长度
        {

            read_cc1101(CCxxx0_RXFIFO, rxBuffer, packetLength,TYPE_BURST); //读出所有接收到的数据
            *length = packetLength;				//把接收数据长度的修改为当前数据的长度

            // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
            read_cc1101(CCxxx0_RXFIFO, status, 2,TYPE_BURST); 	//读出CRC校验位

            write_cc1101(CCxxx0_SFRX,RT_NULL,0,TYPE_STROBE_STATUS);		//清洗接收缓冲区
            DEBUG("cc1101 read \r\n");
            for(i=0;i<*length;i++)
                DEBUG("%x ",rxBuffer[i]);
            write_cc1101(CCxxx0_STX,RT_NULL,0,TYPE_STROBE_STATUS);
            return (status[1] & CRC_OK);			//如果校验成功返回接收成功
        }
        else 
        {
            *length = packetLength;
            write_cc1101(CCxxx0_SFRX,RT_NULL,0,TYPE_STROBE_STATUS);		//清洗接收缓冲区
            DEBUG("rx buffer is not enough ,need %d bytes\r\n",packetLength);
            write_cc1101(CCxxx0_STX,RT_NULL,0,TYPE_STROBE_STATUS);
            return 0;
        }
    } 
    else
    {
        write_cc1101(CCxxx0_STX,RT_NULL,0,TYPE_STROBE_STATUS);
        return 0;
    }
}
Example #3
0
void cc1101_send_packet(uint8_t *txBuffer, uint8_t size) 
{
	int i;
	DEBUG("cc1101 write \r\n");
    	for(i=0;i<size;i++)
        		DEBUG("%x ",txBuffer[i]);
	write_cc1101(CCxxx0_TXFIFO, &size,1,TYPE_REG);
    	write_cc1101(CCxxx0_TXFIFO, txBuffer, size,TYPE_BURST);
	
	write_cc1101(CCxxx0_STX,RT_NULL,0,TYPE_STROBE_STATUS);
	
	wait_int(RT_TRUE);
    	wait_int(RT_FALSE);
	//rt_thread_delay(1);
	write_cc1101(CCxxx0_SRX,RT_NULL,0,TYPE_STROBE_STATUS);  
	if((read_cc1101(CCxxx0_TXBYTES,RT_NULL,0,TYPE_REG)&0x7f)==0)
	{
		rt_kprintf("cc1101 send ok\r\n");
		return ;
	}
	rt_kprintf("cc1101 send failed 2\r\n");
}
Example #4
0
void cc1101_read_reg(uint8_t reg)
{
    uint8_t val=read_cc1101(reg, RT_NULL, 0,2);
    DEBUG("reg %x , val is %x\r\n",reg,val);
}