|
我是这样设置的,参考了论坛里面的一些资料
void RfInitHw(void)
{
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x80);
SpiWriteAddressData((REG_WRITE | TXRampControl), 0x7F);
SpiWriteAddressData((REG_WRITE | AFCLoopGearshiftOverride), 0x00);
SpiWriteAddressData((REG_WRITE | FrequencyBandSelect), 0x53); //set frequency
SpiWriteAddressData((REG_WRITE | NominalCarrierFrequency1), 0x4b); //433HZ
SpiWriteAddressData((REG_WRITE | NominalCarrierFrequency0), 0x00);
SpiWriteAddressData((REG_WRITE | ModulationModeControl1), 0x00);
SpiWriteAddressData((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous mode FSK
SpiWriteAddressData((REG_WRITE | HeaderControl2), 0x02); //no head; sync word 3 and 2
SpiWriteAddressData((REG_WRITE | HeaderControl1), 0x00);
SpiWriteAddressData((REG_WRITE | PreambleLength), 0x04); //2byte
SpiWriteAddressData((REG_WRITE | PreambleDetectionControl), 0x10); //8bit
SpiWriteAddressData((REG_WRITE | SyncWord3), 0x2d);
SpiWriteAddressData((REG_WRITE | SyncWord2), 0xd4);
//SpiWriteAddressData((REG_WRITE | TransmitPacketLength), 0x40);
SpiWriteAddressData((REG_WRITE | DataAccessControl), 0x88); //enable TX handling
SpiWriteAddressData((REG_WRITE | IFFilterBandwidth), 0x03); //BW=90kHZ
SpiWriteAddressData((REG_WRITE | ClockRecoveryOversamplingRatio), 0xa1);
SpiWriteAddressData((REG_WRITE | ClockRecoveryOffset2), 0x20);
SpiWriteAddressData((REG_WRITE | ClockRecoveryOffset1), 0x4e);
SpiWriteAddressData((REG_WRITE | ClockRecoveryOffset0), 0xa5);
SpiWriteAddressData((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00);
SpiWriteAddressData((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x36);
SpiWriteAddressData((REG_WRITE | TXDataRate1), 0x02); //9600BPS
SpiWriteAddressData((REG_WRITE | TXDataRate0), 0x75);
SpiWriteAddressData((REG_WRITE | FrequencyDeviation), 0x48);
SpiWriteAddressData((REG_WRITE | ClockRecoveryGearshiftOverride), 0x13);
SpiWriteAddressData((REG_WRITE | GPIO0Configuration), 0x1f);
SpiWriteAddressData((REG_WRITE | GPIO1Configuration), 0x15); //GPIO_1 TX state
SpiWriteAddressData((REG_WRITE | GPIO2Configuration), 0x12); //GPIO_2 RX state
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x02);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
}
void RF_T(unsigned char *dat,unsigned char len)
{
unsigned char i;
SpiWriteAddressData((REG_WRITE | TXPower), 0x06);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x01);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
SpiWriteAddressData((REG_WRITE | TransmitPacketLength),len);
for(i=0;i<len;i++)
{
SpiWriteAddressData((REG_WRITE | FIFOAccess),*dat);
dat++;
}
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09); //TX
SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断
do
{
test=SpiWriteAddressData((REG_READ | InterruptStatus1), 0x00);
}while((test&0x04)==0);
SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05); //into manual receive mode
}
现在死到while((test&0x04)==0); 这里了,读出的始终是0x20,SPI读写这块应该没什么问题,因为我读了一些寄存器,例如0x00寄存器,读出是0x08,GPIO1Configuration,读出是0x15,证明spi读写应该没什么问题,现在为什么停在发射那块,始终包发送中断不能置位呢?哎! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|