|
SI4463淘寶賣家教訓(xùn)少占魚之:SI4463模塊發(fā)送數(shù)據(jù)完畢后,IRQ中斷腳輸出0電平。最簡單可靠的就是,while(IRQ_Pin); 跳出等待,說明發(fā)送完畢了。然后 讀狀態(tài)寄存器可清除中斷。
RW_MultiReg_Ack(SI4463_Txd[1], LocationMac[0] ,LocationMac[1], LocationMac[2], LocationMac[3]); //發(fā)送輪詢命令
while(SI4463_IRQ_BIT);
SI446X_INT_STATUS( SI4463_Buf );
主函數(shù)中等待接收中斷,判斷命令后應(yīng)答發(fā)送。
while( 1 )
{
if(SI4463_IRQ_BIT==0x00)
{
//disableInterrupts();
SI446X_INT_STATUS( SI4463_Buf );
if( SI4463_Buf[3] & ( 1<<4 ) )
{
//收到一個數(shù)據(jù)包,翻轉(zhuǎn)LED
length = SI446X_READ_PACKET( SI4463_Buf );
if(modbus_cmd( SI4463_Buf , RW_Reg_Req_Len )==0)//檢查功能碼并計算校驗
{
LED_BIT=0;
//delay_ms(1000);
//delay_us(900);
if(SI4463_Buf[1] == MAC_SCAN_433M)
{
SI4463_Txd[1]=MAC_SCAN_433M;
RW_MultiReg_Ack(SI4463_Txd[1], LocationMac[0] ,LocationMac[1], LocationMac[2], LocationMac[3]); //發(fā)送輪詢命令
while(SI4463_IRQ_BIT);
SI446X_INT_STATUS( SI4463_Buf );
if(SI4463_IRQ_BIT)
{
delay_ms(100);
LED_BIT=1;
} }
//回到接收模式,繼續(xù)等待信號
SI446X_START_RX( 0, 0, PACKET_LENGTH,0,3,3 );
delay_ms(20);
//Get_ADC(4);//進行ADC轉(zhuǎn)換,獲得AD值
delay_ms(10);
}
} //end if( buffer[3] & ( 1<<4 ) )
} //end if
} //end while(1)
|
評分
-
查看全部評分
|