|
发表于 2009-9-7 15:54:42
|
显示全部楼层
我也是这样郁闷痛苦着过来的,给你一段例程,最简单的收发,这也是论坛上的兄弟救我于水深火热之中时给我的。
void IA4432_Init(void)
{
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x80);
IA4432_Register((REG_WRITE | TXRampControl), 0x7F);
IA4432_Register((REG_WRITE | AFCLoopGearshiftOverride), 0x00);
IA4432_Register((REG_WRITE | FrequencyBandSelect), 0x53); //set frequency
IA4432_Register((REG_WRITE | NominalCarrierFrequency1), 0x4b); //433HZ
IA4432_Register((REG_WRITE | NominalCarrierFrequency0), 0x00);
IA4432_Register((REG_WRITE | ModulationModeControl1), 0x00);
IA4432_Register((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous mode FSK
IA4432_Register((REG_WRITE | HeaderControl2), 0x02); //no head; sync word 3 and 2
IA4432_Register((REG_WRITE | HeaderControl1), 0x00);
IA4432_Register((REG_WRITE | PreambleLength), 0x04); //2byte
IA4432_Register((REG_WRITE | PreambleDetectionControl), 0x10); //8bit
IA4432_Register((REG_WRITE | SyncWord3), 0x2d);
IA4432_Register((REG_WRITE | SyncWord2), 0xd4);
//IA4432_Register((REG_WRITE | TransmitPacketLength), 0x40);
IA4432_Register((REG_WRITE | DataAccessControl), 0x88); //enable TX handling
IA4432_Register((REG_WRITE | IFFilterBandwidth), 0x03); //BW=90kHZ
IA4432_Register((REG_WRITE | ClockRecoveryOversamplingRatio), 0xa1);
IA4432_Register((REG_WRITE | ClockRecoveryOffset2), 0x20);
IA4432_Register((REG_WRITE | ClockRecoveryOffset1), 0x4e);
IA4432_Register((REG_WRITE | ClockRecoveryOffset0), 0xa5);
IA4432_Register((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00);
IA4432_Register((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x36);
IA4432_Register((REG_WRITE | TXDataRate1), 0x02); //9600BPS
IA4432_Register((REG_WRITE | TXDataRate0), 0x75);
IA4432_Register((REG_WRITE | FrequencyDeviation), 0x48);
IA4432_Register((REG_WRITE | ClockRecoveryGearshiftOverride), 0x13);
IA4432_Register((REG_WRITE | GPIO0Configuration), 0x1f);
IA4432_Register((REG_WRITE | GPIO1Configuration), 0x12); //GPIO_1 TX state
IA4432_Register((REG_WRITE | GPIO2Configuration), 0x15); //GPIO_2 RX state
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x02);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
IA4432_Register((REG_WRITE | InterruptEnable1), 0x02);
}
void RF_R(unsigend char *d)
{
unsigned char index,yyy,ttt;
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x02);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x05);
while(1)
{
yyy = IA4432_Register((REG_READ | InterruptStatus1),0x00);
if(yyy&0x02) break;
}
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x01);
ttt = IA4432_Register((REG_WRITE | ReceivedPacketLength), 0x00);
for(index=0;index<tt;index++)
{
d[index]=IA4432_Register((REG_READ | FIFOAccess),0x00);
}
}
void RF_T(unsigned char *d,unsigned char l)
{
unsigned char i;
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x01);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x01);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
IA4432_Register((REG_WRITE | InterruptEnable1), 0x00);
IA4432_Register((REG_WRITE | InterruptEnable2), 0x00);
IA4432_Register((REG_WRITE | TransmitPacketLength),l);
for(i=0;i<l;i++)
{
IA4432_Register((REG_WRITE | FIFOAccess),*d);
d++;
}
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x09);
IA4432_Register((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断
while((IA4432_Register((REG_READ | InterruptStatus1), 0x00)&0x04)==0);
} |
|