2381850_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2381850_ja-JP

2381850_ja-JP

S32K344の受信割り込みは機能しません

こんにちは、

私はS32K344のUARTについて研究しています。このチップのUART0/UART1/UART8を使用し、各UARTはRS485チップに接続され、A/Bピンを外部回路に引き出します。UART1のRS485のA端子をUART8のRS485のA端子に、UART1のRS485のB端子をUART8のRS485のB端子に接続します。UART1のRS485のDE/REを1、UART8のRS485のDE/REを0に設定します。UART1からUART8へデータを送信しようとしたところ、スコープ内でLPUART1_TXとLPUART8_RXに波形が観測されました。つまり、UART1からUART8へデータが送信されたということです。しかし、UART8には受信割り込みがないため、UART8の受信処理は実行できません。デバッグ中、UART8 CTRL の RE=1/RIE=1 は確認できますが、STAT の RDRF=0 となっています。UART8を送信、UART1を受信に切り替えてみましたが、現象は同じです。問題箇所を確認するのを手伝っていただけますか?プロジェクトファイルを添付します。ありがとう。

通信および制御(I3C | I2C | SPI | FlexCAN | イーサネット | FlexIO)S32K344's rx interrupt can't work

こんにちは、ジュリアンさん、

お返事ありがとうございます。はい、CANやPITなどの他の割り込みは問題ありません。コールバック内のすべてのコードをコメントアウトしました(つまり、tx および rx 割り込みではコールバック内の rx 関数は実行されません)が、それでもコードは受信機ステータスチェックループから抜け出せず、RDRF フラグを設定することができません(interrupt.png の赤い四角を参照)。私はRx FIFOを使用していないので、データを受信するとRDRFは1になるはずです。しかし、そうではない。UART1から文字「R」(ASCII=0x01010010)と「Q」(ASCII=0x01010001)を送信し、UART1のTXDとUART8のRXDを測定したところ、波形は正しいようです。この問題を引き起こす可能性のある他の原因はありますか?

SDKのバージョンも添付します。

Re: S32K344's rx interrupt can't work

こんにちは、 @Jimmybai さん

他の割り込みも問題なく動作すると思いますか?(PIT、CANなど)割り込みが発生しているかどうかを確認するために、コールバック関数内にブレークポイントを設定していますか?

コードを見ると、 Lpuart_Uart_Ip_SyncReceive とLpuart_Uart_Ip_AsyncReceive の両方を使用していることがわかります。SyncReceive はポーリングを使用しますが、 AsyncReceive 関数は受信を開始したらすぐに処理を終了します。アプリケーションは受信完了のタイミングを知るために、受信ステータスを取得する必要があります。受信が完了したら(指定されたバイト数を受信したら)、 AsyncReceive を再度呼び出して新しい受信を開始する必要があります。

ただし、コールバック内では、AsyncReceive を再度呼び出す代わりに、Lpuart_Uart_Ip_SyncReceive 関数を使用して受信をブロックします。UARTの受信機能を再度有効にしてはいけません。

私たちのコミュニティには、参考になる事例がいくつかあります。

よろしくお願いします、
ジュリアン

Re: S32K344's rx interrupt can't work

添付ファイルが見つからないのはなぜだろう。再び取り付けてください。

タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: