AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
AG903_TIMRMgrSetIntHandler 関数

割込みハンドラの登録

  • @param handle [in] TIMRハンドル
  • @param func [in] 割込みハンドラの起動番地
  • @param param [in] パラメータ
  • @return 割り込みハンドラ登録結果
  • @retval AG903_ENONE 正常終了
  • @retval -AG903_EINVAL 引数異常
  • @retval -AG903_EFAULT 処理失敗 (ハンドラが登録出来ない).
  • @description 割り込みハンドラを登録します。 

  • paramはコールバック関数に引数として渡されます。void (*func)(void* param) 

  • ひとつのタイマに登録可能な割込みハンドラ数は AG903_TIMR_INTHDR_NUM で定義します。
  • @note 同一チャンネルに設定できる割り込みハンドラの最大数はAG903_OSWprCreIsrAutoでの
  • 実装の最大数とAG903_TIMR_INTHDR_NUMでの定義値の小さいほうになります。
  • (T-Kernelでは通常1つまでです)
  • @note 同一のハンドラを複数回登録した場合はその登録数だけコールバックされます。 

  • またその場合登録したハンドラを削除する場合は AG903_TIMRMgrDeleteIntHandler
  • 登録数と同じだけ実行して下さい。一部のハンドラだけ削除した場合は正常に動作しなくなることがあります。
  • @note AG903_TIMR_INTHDR_NUMは必要に応じて変更可能です(現在は2で動作を確認しています)
  • @note TIMRMgrが内部的に割り込みを制御しているため動作中はアプリから AG903_INTMgrDisableInt 等でタイマ割り込みに関する設定を変更しないで下さい。
  • @note この関数は割り込みハンドラの中から呼び出すことはできません。
Syntax
C++
int32_t AG903_TIMRMgrSetIntHandler(AG903_TIMRMgrHandle* handle, void* func, void* param);
1: int32_t AG903_TIMRMgrSetIntHandler(AG903_TIMRMgrHandle* handle, void* func, void* param) 2: { 3: AG903_INTMgrHdrPrm inthdr; 4: int32_t retval = AG903_ENONE; 5: int32_t result; 6: int32_t hdrid; 7: uint32_t loop; 8: uint8_t ch; 9: 10: result = TIMRMgr_CheckHandle(handle, &ch); 11: if(AG903_ENONE != result) { 12: return -AG903_EINVAL; 13: } 14: if(NULL == func) { 15: return -AG903_EINVAL; 16: } 17: for(loop=0; loop<AG903_TIMR_INTHDR_NUM; loop++) { 18: if(NULL == TimrChStat[ch].inthdr[loop].func) { 19: break; 20: } 21: } 22: if(AG903_TIMR_INTHDR_NUM <= loop) { 23: return -AG903_EFAULT; 24: } 25: 26: inthdr.atr = AG903_INT_HLNG; 27: inthdr.intno = AG903_IRQ0_TIM0+ch; 28: inthdr.func = func; 29: inthdr.exinf = param; 30: hdrid = AG903_INTMgrSetHandler(&inthdr); 31: if(0 >= hdrid) { 32: return -AG903_EFAULT; 33: } 34: AG903_INTMgrEnableInt(AG903_IRQ0_TIM0+ch); 35: TimrChStat[ch].inthdr[loop].hdrid = hdrid; 36: TimrChStat[ch].inthdr[loop].func = func; 37: 38: return retval; 39: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.