|
運(yùn)行程序時,采用儀器截獲RFID讀卡器和卡之間的數(shù)據(jù),發(fā)現(xiàn)卡片沒有回復(fù)讀卡器數(shù)據(jù),問題需要進(jìn)一步細(xì)化,是卡片沒有收到數(shù)據(jù)還是卡片收到數(shù)據(jù)沒有回復(fù)。采用的方法是,讀卡器發(fā)送數(shù)據(jù)時,其中一個數(shù)據(jù)每次加一,而卡片收到讀卡器的數(shù)據(jù)時,從串口輸出接收的數(shù)據(jù)和發(fā)送的數(shù)據(jù),觀察到的現(xiàn)象是:讀卡器發(fā)出數(shù)據(jù)等待回復(fù),而卡片沒有回復(fù)?ㄆ@邊觀察到的現(xiàn)象時,卡片沒有收到數(shù)據(jù)因?yàn)榻邮諛?biāo)志寄存器沒有置位。增加一條讀卡片F(xiàn)IFO的測試指令,一旦報錯,馬上讀取FIFO的數(shù)據(jù)和標(biāo)志,檢查一下FIFO的空標(biāo)志位是否為1,為1則說明確實(shí)沒收到數(shù)據(jù),反之則表明有數(shù)據(jù)并讀出數(shù)據(jù)和卡片數(shù)據(jù)對比,讀取的結(jié)果是卡片收到了數(shù)據(jù)。
問題就出現(xiàn)在下面的語句
iqflag=TypeA_Flag;讀取中斷寄存器標(biāo)志
TypeA_Flag = 0;//清中斷標(biāo)志
卡片在輪詢該中斷寄存器時,會出現(xiàn)一種情況,寄存器的值讀出來了,然后清寄存器,在這期間又來了中斷,該中斷就會被清掉。
改為如下語句后問題解決:
iqflag =TypeA_Flag;
TypeA_Flag &=(~iqflag);
編寫代碼時還是要嚴(yán)謹(jǐn)嚴(yán)謹(jǐn)再嚴(yán)謹(jǐn)呀!
|
|