おはようございます、NAKAといいます。NAKAはハード畑からマイコンに入ったので、あまりソフトに明るくありません。
表題の件について、まずマイコン内部の通信機能を使った場合(説明がややこしいので、仮にUARTの受信とします。)受信割込み(受信レジスタFULL)が発生した場合、受信レジスタの内容を自分で用意した受信バッファにどんどん貯めていくという処理にして、マイコンの定期処理の空いた部分で受信バッファから取り出し解析処理(受信データを解析して、必要な処理を行う)をするような使い方をしています。この場合の割込みの役目は、受信データを他の処理をやってる最中にも取りこぼさないことにあると思います。今回は外部の通信コントローラをマイコンとのI/FをSPIで行うパターンで、外部コントローラにはFIFOバッファがあり、受信データをFIFOバッファに勝手に貯めてくれる機能があり、FIFOバッファが空じゃなくなった時(データを1つでも受信した時)や50%まで貯まった時などに、外部コントローラからマイコンに対し割込みが発生する機能を持ってます。現在、この割込み(外部割込み)が発生した場合、内臓通信機能を使った場合と同じく外部通信コントローラからSPIで受信データをもらいに行き、自分で用意した受信バッファに貯めていくという処理にしてあります。ですが、なんか外部コントローラにもバッファがあり、またいちいちマイコンの中のバッファに移し替えるといったことが、非効率に感じます。定期処理以外の空いた時にポーリングで外部コントローラから受信データをもらいに行くだけでいいような気がしますが、外部コントローラからの割込みを使うことにどのようなメリットがあるのでしょうか?外部コントローラのFIFOバッファの容量には限りがあり、マイコンのバッファはRAMが許す限り増やせるというメリットはありますが、外部コントローラから読んだ受信データをもう一度マイコンのバッファから読まないといけないので、速度的にはデメリットになると思います。
皆さんからご意見を頂けると嬉しいです。