がある:
/*! @brief CAAMハンドル
* jobRing とオプションでユーザー コールバック関数を指定します。
* ユーザー コールバック関数は、ジョブリング割り込みがユーザーによって有効にされている場合にのみ呼び出されます。
* デフォルトでは、jobRing 割り込みは無効になっています (デフォルトのジョブ完了テストは CAAM 出力リングをポーリングします)。
*/
typedef 構造体 _caam_handle_t
{
caam_job_ring_t ジョブリング;
/* コールバック関数 */
caam_job_callback_t コールバック; /*!< コールバック関数 */
void *userData; /*!< CAAMジョブ完了コールバックのパラメータ */
} caam_handle_t;
SOコールバックを書いてcaam_handle_t*ハンドルにマッピングしました
静的void xpnd_CAAM_job_ring_1_complete_clb(void* args) {
BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(sem[ITF_1],
&pxHigherPriorityTaskWoken);
IRQ を無効にします(CAAM_IRQ1_IRQn);
}
最後に試したのは:
drv_res = CAAM_RNG_GetRandomDataNonBlocking(
ベース、ハンドル、kCAAM_RngStateHandle0、説明、データ、データサイズ、
kCAAM_RngDataAny、NULL);
if (drv_res == kStatus_Success) {
pdTRUE != xSemaphoreTake(sem[ITF_1], MS_TIMEOUT) の場合 {
PRINTF("CAAM 操作に失敗しました\r\n");
ST_FAILURE を返します。
}
} それ以外 {
PRINTF("ドライバ操作のセットアップに失敗しました、res %d\r\n", drv_res);
ST_FAILURE を返します。
}
セマフォからエラーを報告しなかったため、プログラムはすぐにクラッシュしたと思います。
他に何かする必要がありますか?
アセンブリ startup_mimxrt1176 には CAAM_IRQ0_IRQHandler のプロトタイプがありますが、定義されていない可能性があります。このような状況になるでしょうか?
また、ドライバ コードでは、カスタム コールバックが呼び出される場所がわかりません。
こんにちは@jslota13245さん、
弊社の製品にご興味をお持ちいただき、またコミュニティをご利用いただき誠にありがとうございます。
親愛なる@mayliu1様、
デモでは、ユーザー コールバックの使用方法、または実際の割り込みの使用方法は示されません。
完了時に CAAM ハードウェアからの割り込みが必要です。それについて手伝ってもらえますか?