別のマイクロコントローラから 2 バイト (16 ビット) のデータを受信する必要がある 40MHz で動作する PIC18F2680 マイクロコントローラの割り込みサービス ルーチンで SPI データを受信するコードを書いています。PIC はデータを受信する (受動的にリッスンする) だけで、送信者には何も送り返しません。デバイスで MISO と SCLK を使用する 2 つのデータ ライン。SPI 通信で使用されるスレーブ選択はなく、MOSI はコマンドをリッスンするために必要ではなく、スレーブの応答のみが必要です。
設計時には、SPI データ パケットが一度に 16 ビットで送信されることを認識していませんでした。そうでなければ、別のマイクロコントローラーを使用していたでしょう。
データを失うことなく、SPI ISR で 2 つの連続するバイトを読み取る方法があるかどうかを確認したかったのです。私の現在の実装:
OpenSPI(SLV_SSOFF,MODE_00,SMPMID);
//***********************************SPI ISR*********************************
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
//----------------------------------------------------------------------------
// High priority interrupt routine
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh () {
unsigned int next;
//the interrupt flag is set for SPI
if(PIR1bits.SSPIF ==1){
spiByte1 = SSPBUF;
while(SSPSTATbits.BF != 0);
spiByte2 = SSPBUF;
}
PIR1bits.SSPIF = 0;
}
ただし、これは正しいデータを取得しているように見えますが、他の多くのバイトが失われています。これを達成するためのより良い方法はありますか、それとも SOL は 8 ビット MCU を使用していますか?
ありがとうございました、
ジョン