原创
公布CC1110最简单的收发程序(转自emot)
2009-7-8 09:35
1539
6
6
分类:
通信
/**********************************************************************
*文件: wxl_radio.c
*功能: RF发送和接收(非DMA),初版,还可能有BUG
*作者: emot
*版本: v1.0
*说明:宏来源于TI的hal.h
*修订记录
----------------------------------------------------------------------
|时间 原因 修订人
|2009年4月05日 初写 emot
|
|
**********************************************************************/
/**********************************************************************
*头文件
*/
#include "includes.h"
#define
//----------------------------------------------------------------------
//发送函数
//----------------------------------------------------------------------
BYTE Transmit(BYTE __xdata *buff,BYTE bytes) //发送
{
BYTE i,BytesToSend; //
RFIF = 0;
RFTXRXIF = 0;
BytesToSend = bytes ;// 数据包长度就是byte,为方便实际应用中增加其他字节,定义了bytestosend变量
if(BytesToSend <= 64)
{
SIDLE(); // Exit RX / TX, turn off frequency synthesizer and exit
STX(); // Switch radio to TX
while(RFTXRXIF == 0); // 等待发送结束
RFTXRXIF = 0; // 清除发送标志
RFD = BytesToSend;
while(RFTXRXIF == 0); // 等待发送结束
RFTXRXIF = 0; // 清除发送标志
for(i=0;i<( BytesToSend-1);i++)
{
RFD = buff; // 发送数据
while(RFTXRXIF == 0); // 等待发送结束
RFTXRXIF = 0; // 清除发送标志
}
RFD = buff; // 发送最后一BYTE
while(RFIF&IRQ_DONE == 0); // 等待发送结束
RFIF &= ~IRQ_DONE; //清结束标志
RFIF &= ~IRQ_DONE; // Tx/Rx completed, clear interrupt flag
S1CON &= ~0x03; // Clear the general RFIF interrupt registers
return TRUE;
}
else
{
return FALSE;
}
}
//----------------------------------------------------------------------
//接收函数,不使用DMA的接收
//----------------------------------------------------------------------
# define WAIT_TIME 80 //unit ms
BYTE Receive(BYTE __xdata *buff,BYTE *bytes) //接收
{
BYTE BytesToReceive = 0;
BYTE address;
BYTE i;
RFIF = 0;
RFTXRXIF = 0;
SIDLE();
SRX();
resetTimer(APP_TIMER0);
while(RFTXRXIF == 0){if(readTimer(APP_TIMER0)>WAIT_TIME)return FALSE;}; // 等待接收结束,如超时则强退
BytesToReceive = RFD; // 读取数据包总长度
RFTXRXIF = 0; // 清除发送标志
while(RFTXRXIF == 0){if(readTimer(APP_TIMER0)>WAIT_TIME)return FALSE;}; // 等待接收结束
address = RFD; // 读取匹配地址
RFTXRXIF = 0; // 清除发送标志
if((BytesToReceive >= 64)||(BytesToReceive <= 0))
{
return FALSE;
}
if(address)address = address; //没用的语句,只是用来消除warning
for(i=0;i<(BytesToReceive - 1);i++)
{
while(RFTXRXIF == 0){if(readTimer(APP_TIMER0)>WAIT_TIME)return FALSE;}; // 等待接收结束
buff = RFD; // 读取数据包长度
RFTXRXIF = 0; // 清除发送标志
}
*bytes = (BytesToReceive);
SIDLE();
return TRUE;
}
//2009年5月25日
文章评论(0条评论)
登录后参与讨论