こんにちは、
現在、MCXN947マイクロコントローラを使って作業しています。
CTIMERのマッチ割り込みを介して、サンプルバッファへのDMA転送をトリガーしようとしています。
このアイデアは、サンプルバッファにGPIOレジスタの状態(特に一部のピンの入力値)をDMAを通じて、xタイマー間隔(具体的には10USごとに)に書き込むことです。
GPIOピンが正しく入力として設定されていることは確認できます。
タイマーは正しく動作しており、10セントごとにマッチがトリガーされていることを確認できます。
DMAの転送が正しく動作しているのは、バッファが値で満たされるからです。
DMA設定でソースアドレス(GPIO PDIRレジスター)が正しく設定されていることを確認できます。
DMA設定でも宛先アドレスは正しく設定されていることを確認できます。なぜなら、バッファの開始と終了のアドレスの間に常に位置しているからです(つまり、正しく増分・ラップアップします)。
しかし、何らかの理由で、間違った値がバッファにコピーされています。デバッガで転送しようとしているレジスタの値が 0x00020000 (ピン17はハイ、他は低)がわかります。しかし、私のバッファには0秒しか格納されていません。これは、すべて0xFFで初期化された512個の要素を持つuint32_t型のバッファです。DMA転送が増加するにつれて、バッファ全体が徐々に0x0で満たされ、期待される値である0x00020000 (これは変化しない - ピン17は常にハイ)には達しません。
これが原因だと思いますか?あるいは、私が何か見落としている可能性もあるでしょうか?
以下が私のドライバ設定です:
タイマー:
CTIMER0
kCTIMER_マッチ_1
CTIMER0_IRQn(割り込み時にコールバックをトリガーすることはオプションですが、デバッグ目的で私のコードでは使用しています)
DMA:
DMA0
kDma0RequestMuxCtimer0M1
kINPUTMUX_Ctimer0M1ToDma0Ch8Ena
EDMA_0_CH8_IRQn(割り込み時にコールバックをトリガーすることはオプションですが、デバッグ目的で私のコードでは使用しています)
GPIO:
GPIO3
ポート3
ピン17
サンプリングを開始する直前のレジスタの状態は以下のとおりです。
reg_gpio3.pngreg_gpio3.pngreg_gpio3.pngreg_gpio3.pngreg_gpio3.png
reg_port3.pngreg_port3.pngreg_port3.pngreg_port3.pngreg_port3.png
reg_edma0_ch8.pngreg_edma0_ch8.pngreg_edma0_ch8.pngreg_edma0_ch8.pngreg_edma0_ch8.png
reg_inputmux0_dma.pngreg_inputmux0_dma.pngreg_inputmux0_dma.pngreg_inputmux0_dma.pngreg_inputmux0_dma.png
reg_inputmux0_timer.pngreg_inputmux0_timer.pngreg_inputmux0_timer.pngreg_inputmux0_timer.pngreg_inputmux0_timer.png
reg_ctimer0.pngreg_ctimer0.pngreg_ctimer0.pngreg_ctimer0.pngreg_ctimer0.png
こんにちは、
知的財産のため、プロジェクト全体をお送りできません。ただし、小さなアプリケーションでセットアップしたcファイルをお渡しできます。GPIO、DMA、およびタイマーの設定は、私の側と同じです。ファイルは添付ファイルにあります。
こんにちは@jabitbe2_jcplc
ぜひあなたのプロジェクトを教えていただけますか?こちら側で問題を再現し、調査を試みたいと思います。
よろしくお願いします。
よろしくお願いします、
アリス
こんにちは@jabitbe2_jcplc
MCXN947はTrustZoneとセキュリティ帰属制御をサポートしています。
アクセスがピンのセキュリティ設定と一致しないセキュリティドメインから発信された場合、対応するGPIOレジスタへの読み書き操作が無効になることがあります。
GPIO3のピン17ビットが非安全アクセスを許可するように設定されているか確認して、再度テストしてもらえますか?
ビットが現在Secure-onlyに設定されている場合、予期しないGPIOの挙動はTrustZoneのセキュリティ設定に関連している可能性があります。
よろしくお願いします。
BR
アリス