用频谱仪测试的输出功率是17个dbm,PA是RXF2401C增益22dbm,cc2530功率4.5dbm。理论上大约应该是24或者25dbm多,现在实际测试为17dbm。然后从cc2530输出经过巴伦电路输出测试为-6dbm。
测试程序:
#include "ioCC2530.h"
#include <stdio.h>
#include <string.h>
char un8Array[] = {0X47,0Xde,0Xb3,0X12,0X4d,0Xc8,0X43,0Xbb,0X8b,0Xa6,
0X1f,0X03,0X5a,0X7d,0X09,0X38,0X25,0X1f,0X5d,0Xd4,
0Xcb,0Xfc,0X96,0Xf5,0X45,0X3b,0X13,0X0d,0X89,0X0a}
void rf_send( char *pbuf , int len);
void rf_init()
{
TXPOWER = 0xF5; // 发射功率为4.5dBm
CCACTRL0 = 0xF8; // 推荐值 smartRF软件生成
FRMFILT0 = 0x0C; // 静止接收过滤,即接收所有数据包
FSCAL1 = 0x00; // 推荐值 smartRF软件生成
TXFILTCFG = 0x09;
AGCCTRL1 = 0x15;
AGCCTRL2 = 0xFE;
TXFILTCFG = 0x09; // 推荐值 smartRF软件生成
FREQCTRL = 0x12; // 选择通道11
RFIRQM0 |= (1<<6); // 使能RF数据包接收中断
IEN2 |= (1<<0); // 使能RF中断
RFST = 0xED; // 清除RF接收缓冲区 ISFLUSHRX
RFST = 0xE3; // RF接收使能 ISRXON
}
void rf_send( char *pbuf , int len)
{
RFST = 0xE3; // RF接收使能 ISRXON
// 等待发送状态不活跃 并且 没有接收到SFD
while( FSMSTAT1 & (( 1<<1 ) | ( 1<<5 )));
RFIRQM0 &= ~(1<<6); // 禁止接收数据包中断
IEN2 &= ~(1<<0); // 清除RF全局中断
RFST = 0xEE; // 清除发送缓冲区 ISFLUSHTX
RFIRQF1 = ~(1<<1); // 清除发送完成标志
// 填充缓冲区 填充过程需要增加2字节,CRC校验自动填充
RFD = len + 2;
for (int i = 0; i < len; i++)
{
RFD = *pbuf++;
}
RFST = 0xE9; // 发送数据包 ISTXON
while (!(RFIRQF1 & (1<<1))); // 等待发送完成
RFIRQF1 = ~(1<<1); // 清除发送完成标志位
RFIRQM0 |= (1<<6); // RX接收中断
IEN2 |= (1<<0);
}
void main(void)
{
P0DIR |= ( 1<< 0) | (1<<1 );//PA 设置为输出
P0_0 = 0;
P0_0 = 1;
P0_1 = 0;
EA = 0; // 暂时关闭全局中断
SLEEPCMD &= ~0x04; // 设置系统时钟为32MHz
while( !(SLEEPSTA & 0x40) );
CLKCONCMD &= ~0x47;
SLEEPCMD |= 0x04;
timer1_init(); // 定时器初始化 2ms 比较匹配
rf_init(); // RF初始化 无帧过滤
EA = 1; // 使能全局中断
while(1)
{
rf_send(un8Array , 30); // 直接转发串口数据
}
}