私はMC9S08JM60用のMODBUS RTU保持レジスタを読み取るためのコードを書いています。私は15個の保持レジスタを読み取っており、それによって35バイトのフレームが得られます。つまり、各バイトごとに1回の割り込みを受けることが期待されていますが、フレームの最初のバイトは1回、次の割り込みは次のフレームの最初のバイトに対してです。SO、残りの34バイトを失うことになります。これに関して何かご意見があればお聞かせください。
コードスニペットを添付します。
こんにちは、 @An95さん
投稿ありがとうございます!
S08にModbus RTUのドキュメントは存在します。
しかし、あなたが直面している問題はRDRFをクリアしていないことに関係している可能性があります。
RDRF(受信データレジスタ満杯)フラグは、SCI1S1を読み取った後にSCI1Dを読み取った場合にのみクリアされます。ISRでSCI1Dが読み取れない場合、割り込みは一度発生し、その後レシーバが停止します。
14.2.4を参照MC9S08JM60シリーズデータシートのSCIステータスレジスタ1(SCIxS1)。
コードがフラグを正しくクリアしていることを確認してください。
BR
こんにちは、 @carlos_o さん。
ご回答ありがとうございます。
RDRFフラグは、割り込みサービスルーチンのコールバック関数に入るとクリアされます。35バイトのフレームは、単一の割り込みで送られてきます。35バイトのバッファを使用しても、フレーム全体を読み込むことができません。
この件に関して、ご意見をお聞かせください。
BR
実装をベアメタルコードに変更しましたが、それでも1バイトしか受信できません。
ご意見をお聞かせください。
こんにちは、 @An95さん
SCIはRDRFがトリガーされるたびに1バイトしか受信できませんでした。つまり、送信する35バイトを読み取るために35回の割り込みをトリガーする必要があります。
14.3.3章「レシーバ機能説明」を参照すると良いでしょう
SCIモジュールには1つのSCIデータレジスタ(SCIxD)しかなく、毎回8ビットを節約できます。