PSoC 4 で BOD Reset を検出する - Community Translated (JA)

Version 1

    Community Translated by  MoTa_728816          Version: **

     

    BOD (ブラウンアウトディテクト) 回路は電源電が危な可能性がある態のときにデバイスにリセットを作動させて動作の保護やロジックの保持を行います。BOD 回路は VCCD を監視して、もし電レベルが安全な動作を行うための最小 VCCD よりも下がった場合にリセットを生させます。システムは再び電源電が有になるまではリセットを解除しません。BOD のイベントによっては、VCCD は最小ロジック動作電よりも下がってはいますが、最小ロジック保持電よりも高いところで留まる場合があります

     

    もし VCCD が最小ロジック動作電より下がり、しかし最小ロジック保持電を割っていない場合、BOD リセットが生します;しかしレジスタの値は保持されます。もし VCCD が最小ロジック動作電と最小保持電のどちらよりも下がった場合、レジスタ値が保持されない BOD リセットが生します。このレジスタ値の保持はスペシャルレジスタ、PWR_BOD_KEY を使用して出することが可能です。PWM_BOD_KEY

     

    レジスタの値はファムウェアからの書みか非保持 BOD リセット、XRESPOR のような非保持リセットイベントが生した場合だけ更されます

     

    ブラウンアウトリセットはアプリケションに以下のコを追加することで出することが可能です

     

    int Check_BOD(void)

    {

        // CYREG_PWR_BOD_KEY レジスタの現在の値をチェックす

        uint32 key = CY_GET_REG32(CYREG_PWR_BOD_KEY);

     

        // CYREG_PWR_BOD_KEY レジスタを 0x3A71 にセットす

        CY_SET_REG32(CYREG_PWR_BOD_KEY,0x3A71);

     

        // もし key 0x3A71 であれば, プログラムはブラウンアウトによってリセットされたことが示され

        return (key == 0x3A71);

     

    }

     

    int main (void)

    {

     

        if(Check_BOD())

        {

            //BOD Detected.

        }

     

        for(;;)

        {

            /* Place your application code here. */

        }

    }

     

    しかし、CYREG_PWR_BOD_KEY はハイバネトからの復でも保持されています。そのため、リセットコンディションもチェックする必要があります

    ハイバネトによるリセットコンディション

    CySysPmGetResetReason() == CY_PM_RESET_REASON_WAKEUP_HIB

    を使用してチェックできます

     

    もしこのコンディションが TRUE を返えした場合、それはリセットの原因がハイバネトであり、BOD をチェックする必要はないことを示します

     

    考資

    1. PSoC 4100/4200 Family PSoC® 4 Architecture TRM
    2. PSoC 4100/4200 Family PSoC 4 Registers TRM (Technical Reference Manual)