/      English

AHI互換関数

TWENETライブラリ、AHI互換レイヤーの解説
AHI互換関数全般の話題及び特定のペリフェラル等に属さないAHI関数の解説です。

AHI互換関数

AHI 関数群の一部について、ソースコードの互換を目的として実装しています。

以下には AHI 互換関数について記載しています。SPI, I2C などは別ファイルに記載しているものもあります。

一般関数

u32AHI_Init()

uint32 u32AHI_Init();

本来AHIライブラリの初期化を行いますが、本ライブラリでは一部の変数の初期化のみを実施します。

bAHI_SetClockRate(), u8AHI_GetSystemClkRate()

bool_t bAHI_SetClockRate(uint8 u8clk_code);
uint8 u8AHI_GetSystemClkRate();

CPUのクロック速度を設定または設定値の取得を行います。

設定されるクロックは以下のようになります。TWELITE BLUE/REDの設定とは大きく異なるため注意が必要です。

u8clk_codeTWELITE BLUE/REDTWELITE GOLD
04Mhz12Mhz
18Mhz12Mhz
216Mhz32Mhz
332Mhz48Mhz
4..設定有り無視される
  • kFROM1M_to_MAIN_CLKといったクロックも fsl ライブラリ内では設定可能ですが、動作に大きな難があるため設定できないようにしています。
  • デバッガを利用するような場合は、クロック変更に支障が出る場合があります。
  • 規定値は 2、32Mhz (TWELITE GOLD) です。(参考:TWELITE BLUE/REDでは 16MHz)

bAHI_Set32KhzClockMode()

bool_t bAHI_Set32KhzClockMode(uint8 u8mode);

なにもしません。

vAHI_CpuDoze()

static inline void vAHI_CpuDoze() { __WFI(); }

割り込み待ち低電力待機 DOZE 状態に入ります。TWELITE-GOLD では WFI (割り込み待ち) を発効します。

vAHI_SwReset()

static inline void vAHI_SwReset() { NVIC_SystemReset(); }

リセットを行います。

電源関係

u16AHI_PowerStatus()

uint16 u16AHI_PowerStatus();

本関数では、以下のビットマップを報告します。

ビット解説
bit0スリープからの復帰時に 1
bit1RAMが保持されていた場合に 1

POR 時は 0、通常のRAM保持スリープからの復帰は 3 になります。

vAHI_BrownOutConfigure()

static inline void vAHI_BrownOutConfigure(
    uint8       const u8VboSelect,
    bool_t      const bVboRstEn,
    bool_t      const bVboEn,
    bool_t      const bVboIntEnFalling,
    bool_t      const bVboIntEnRising) { ; } // DUMMY FUNC

コンパイルエラー回避のための定義です。この関数は何もしません。

スリープについて

void ToCoNet_vSleep(uint8 u8Device, uint32 u32Periodms, bool_t bPeriodic, bool_t bRamOff)

スリープは TWENET C ライブラリでは ToCoNet_vSleep() 関数を用います。

※ mwxライブラリでは the_twelite.sleep() を用います。

  • bRamOffはTRUEを指定した場合、全てのRAMセグメントを保持しない形でスリープを行います。なお、この場合もJN518x FSL ライブラリ定義のPM_POWER_DOWNを用いPM_DEEP_DOWNは使用しません。

スリープの失敗について(TWELITE GOLD)

TWELITE GOLD では、スリープ遷移の半導体ライブラリ中の手続き(POWER_EnterPowerMode())が稀に失敗し、スリープが行われません。そのため以下の対処を行っています。

  • 半導体ライブラリの手続き失敗時は関数呼び出しからそのまま抜けてしまうが、100usec 相当(DelayLoopN(100))のループ待ちを行った後、再度スリープの手続きを実行します。
  • 上記を3回試行して失敗した場合は ToCoNet_vSleep() は無限ループを呼び出し、通常はウォッチドッグタイマーによるリセットが発生します。当社では、2回または3回の再試行は確認されていませんが、念のため3回までとしています。
  • 上記スリープ手続きが行われた場合、スリープ復帰後 extern uint8 g_twenet_power_down_fails; の値が0以外であれば、上記の再試行が行われていたことを示します。但し、ウォッチドッグタイマーによるリセット時はこの変数は初期化されます。

内部処理用

u32AppApiInit()

uint32
u32AppApiInit(PR_GET_BUFFER prMlmeGetBuffer,
              PR_POST_CALLBACK prMlmeCallback,
              void *pvMlmeParam,
              PR_GET_BUFFER prMcpsGetBuffer,
              PR_POST_CALLBACK prMcpsCallback,
              void *pvMcpsParam);

AppQAPIの初期化処理を行います。

vAHI_RegEvMgr_MW()

void vAHI_RegEvMgr_MW();

TWENETmwfライブラリでのクラスオブジェクトを管理するための管理オブジェクト(mwf::the_sys_ev_manager)を構築します。

vAHI_OnWakeup_MW(), vAHI_OnWakeupRamOff_MW()

void vAHI_OnWakeup_MW(bool_t b_init_2nd);
void vAHI_OnWakeupRamOff_MW(bool_t b_init_2nd);

起床時に実施する手続きです。TWENETmcuのtwenet_main.cの処理を参照してください。

  • TWENETmwf ライブラリ内のクラスオブジェクトの起床時処理mwf::the_sys_ev_manager->on_wakeup()を行います。
  • vAHI_DioOnWakeup_MW()を呼び出します。起床要因のピンを保存します。
  • b_init_2ndがFALSEの場合は始動初期の段階の呼び出しで、TRUEの場合はある程度の初期化が終わった時点(cbAppWarmStart(TRUE)呼び出し前)での呼び出しになります。

vAHI_OnWakeupRamOff_MW()はRAM非保持スリープ復帰時に呼び出されます。

  • b_init_2ndがFALSEの場合は始動初期の段階の呼び出しで、TRUEの場合はある程度の初期化が終わった時点(cbAppWarmStart(TRUE)呼び出し後)での呼び出しになります。

vAHI_OnSleep_MW()

vAHI_OnSleep_MW();

スリープ前に実施する手続きです。

  • TWENETmwf ライブラリ内のクラスオブジェクトのスリープ前処理mwf::the_sys_ev_manager->on_sleep()を行います。
  • vAHI_DioOnSleep_MW()を呼び出します。DIO起床ピンの設定をします。

vAHI_DMAEnable_MW(), vAHI_DMADisable_MW()

void vAHI_DMAEnable_MW();
void vAHI_DMADisable_MW();

DMA機能の有効化と無効化を行います。

vAHI_DMADisable_MW()は何も実行しません。