SI4432,还是调不出来,请高人指点下(附程序)
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ FUNCTION NAME:void SPI_M8PortInit(void)
+
+ DESCRIPTION: Initialize the M8 SPI port
+
+ INPUT: data
+
+ RETURN: None
+
+ NOTES: Itcontrol the nSEL pin
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void SPI_M8PortInit(void)
{
SCK_OUT;
SCK_0;
SDI_OUT;
SDI_1;
SDO_IN;
SDO_1;
NSEL_OUT;
NSEL_1;
Set_NIRQin;
NIRQ_1;
SDN_OUT;
SDN_0;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME:uint16 MAKEUINT(uint8 data1,uint8 data2)
+
+ DESCRIPTION: makeuint8 to uint16
+
+ INPUT: data1 and data2
+
+ RETURN:
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
uint16 MAKEUINT(uint8 data1,uint8 data2)
{
uint16 WORD;
WORD=data1;
WORD=WORD<<8;
WORD=WORD|data2;
return WORD;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME:uint16 RFRegCon(uint8 reg,uint8 cmd)
+
+ DESCRIPTION: sends 16 length data to read or write register through the SPI port
+
+ INPUT: register and control data
+
+ RETURN: value of the register
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
uint16 RFRegCon(uint8 reg,uint8 cmd){
SDO_IN;
uint8 ri;
uint16 temp=0,value;
value=MAKEUINT(reg,cmd);
SCK_0;
NSEL_0;
for(ri=0;ri<16;ri++){
SCK_0;
if(0x8000&value){
SDI_1;
}
else{
SDI_0;
}
SCK_1;
value<<=1;
temp<<=1;
if(Read_SDO){
temp|=0x0001;
}
}
SCK_0;
SDO_OUT;
NSEL_1;
return temp;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME:voidRfChipInit(void)
+
+ DESCRIPTION:
+
+ INPUT:
+
+ RETURN: none
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
voidRfChipInit()
{
RFRegCon((REG_WRITE | OperatingFunctionControl1), 0x80);
RFRegCon((REG_WRITE | TXRampControl), 0x7F);
RFRegCon((REG_WRITE | AFCLoopGearshiftOverride), 0x00);
RFRegCon((REG_WRITE | FrequencyBandSelect), 0x53); //set frequency
RFRegCon((REG_WRITE | NominalCarrierFrequency1), 0x4b);//433HZ
RFRegCon((REG_WRITE | NominalCarrierFrequency0), 0x00);
RFRegCon((REG_WRITE | ModulationModeControl1), 0x00);
RFRegCon((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous modeFSK
RFRegCon((REG_WRITE | HeaderControl2), 0x02); //no head; sync word 3 and 2
RFRegCon((REG_WRITE | HeaderControl1), 0x00);
RFRegCon((REG_WRITE | PreambleLength), 0x04); //2byte
RFRegCon((REG_WRITE | PreambleDetectionControl), 0x10); //8bit
RFRegCon((REG_WRITE | SyncWord3), 0x2d);
RFRegCon((REG_WRITE | SyncWord2), 0xd4);
//RFRegCon((REG_WRITE | TransmitPacketLength), 0x40);
RFRegCon((REG_WRITE | DataAccessControl), 0x88); //enable TX handling
RFRegCon((REG_WRITE | IFFilterBandwidth), 0x03); //BW=90kHZ
RFRegCon((REG_WRITE | ClockRecoveryOversamplingRatio), 0xa1);
RFRegCon((REG_WRITE | ClockRecoveryOffset2), 0x20);
RFRegCon((REG_WRITE | ClockRecoveryOffset1), 0x4e);
RFRegCon((REG_WRITE | ClockRecoveryOffset0), 0xa5);
RFRegCon((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00);
RFRegCon((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x36);
RFRegCon((REG_WRITE | TXDataRate1), 0x02); //9600BPS
RFRegCon((REG_WRITE | TXDataRate0), 0x75);
RFRegCon((REG_WRITE | FrequencyDeviation), 0x48);
RFRegCon((REG_WRITE | ClockRecoveryGearshiftOverride), 0x13);
RFRegCon((REG_WRITE | GPIO0Configuration), 0x1f);
RFRegCon((REG_WRITE | GPIO1Configuration), 0x12); //GPIO_1 TX state
RFRegCon((REG_WRITE | GPIO2Configuration), 0x15); //GPIO_2 RX state
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x02);
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x00);
RFRegCon((REG_WRITE | InterruptEnable1), 0x02);
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME:voidRFTransmitByte(uint8 data)
+
+ DESCRIPTION:
+
+ INPUT:
+
+ RETURN: none
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
voidRFTransmitByte(uint8 data)
{
uint8ItStatus1,ItStatus2;
//release all IT flag
ItStatus1 = (uint8)(RFRegCon(InterruptStatus1,0));
ItStatus2 = (uint8)(RFRegCon(InterruptStatus2,0));
if((ItStatus1&0x04)==0x00)
{
/* */
//clear FIFO
RFRegCon(REG_WRITE | OperatingFunctionControl1, 0x01);
RFRegCon(REG_WRITE | OperatingFunctionControl2, 0x01);
RFRegCon(REG_WRITE | OperatingFunctionControl2, 0x00);
RFRegCon(REG_WRITE | InterruptEnable1, 0x00);
RFRegCon(REG_WRITE | InterruptEnable2, 0x00);
//set packet content
RFRegCon(REG_WRITE | TransmitPacketLength, 1);
//set data
RFRegCon(REG_WRITE | FIFOAccess, data);
//enable transmitter
RFRegCon(REG_WRITE | OperatingFunctionControl1, 0x09);
//enable the wanted ITs
RFRegCon(REG_WRITE | InterruptEnable1, 0x04); //发送完中断允许
RFRegCon(REG_WRITE |InterruptEnable2, 0x00);
}
while(Read_NIRQ==1)
{
;
}
ledO1_UP;
delay_nms(500);
ledO1_DOWN;
delay_nms(500);
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME:voidRFReceiveReady(void)
+
+ DESCRIPTION:
+
+ INPUT:
+
+ RETURN: none
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
uint8 RFReceiveReady()
{
uint8 index,yyy,ttt,data;
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x02);
RFRegCon((REG_WRITE | OperatingFunctionControl2), 0x00);
RFRegCon((REG_WRITE | OperatingFunctionControl1), 0x05);
while(1)
{
yyy = RFRegCon((REG_READ | InterruptStatus1),0x00);
if(yyy&0x02) break;
ledO1_UP;
delay_nms(500);
}
ledO1_DOWN;
delay_nms(500);
RFRegCon((REG_WRITE | OperatingFunctionControl1), 0x01);
RFRegCon((REG_WRITE | ReceivedPacketLength),1 );
data=RFRegCon((REG_READ | FIFOAccess),0x00);
return data;
} 两个模块不能互相通信,因为没有频谱仪,用示波器测了下TX有信号出来! www.moreway.net。下一个4432的应用手册看看吧。比较详细 呃 想问下REG_WRITE | OperatingFunctionControl1是什么意思 是在哪预定义的?
页:
[1]