Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

FX3 Complex GPIOのパルス– KBA228439 - Community Translated (JA)

FX3 Complex GPIOのパルス– KBA228439 - Community Translated (JA)

SivaK_96
Employee
Employee
50 questions asked 10 questions asked 5 questions asked

Community Translated by  NoTa_4591161        Version: **

Translation - English: Pulse on FX3 Complex GPIO – KBA228439

FX3 API関数CyU3PGpioComplexPulseNow()およびCyU3PGpioComplexPulse()を使用するにはどうすればよろしいでしょうか?

この記事では、これらのAPI関数(CyU3PGpioComplexPulseNow()およびCyU3PGpioComplexPulse())のいずれかが呼び出されたときにGPIOでパルスが生成されるように、複雑なGPIOを構成する方法について説明します。詳細については、FX3 SDKFX3 APIガイド(C\Program Files(x86)\Cypress\EZ-USB FX3 SDK \1.3\doc\firmware\FX3APIGuide.pdf)をご参照願います。

CyU3PGpioComplexPulseNow()

次のコードスニペットを使用します。

      / *複雑なGPIO構成* /

    CyU3PGpioComplexConfig_t gpioConfig;

    gpioConfig.outValue = CyFalse;

    gpioConfig.inputEn = CyFalse;

    gpioConfig.driveLowEn = CyTrue;

    gpioConfig.driveHighEn = CyTrue;

    gpioConfig.pinMode = CY_U3P_GPIO_MODE_STATIC;

    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

    gpioConfig.timerMode = CY_U3P_GPIO_TIMER_HIGH_FREQ;

    gpioConfig.timer = 0;

    gpioConfig.period = CY_FX_PWM_PERIOD_3MS;

    gpioConfig.threshold = 0;

    apiRetStatus = CyU3PGpioSetComplexConfig(50, &gpioConfig);

    if (apiRetStatus != CY_U3P_SUCCESS)

    {

                CyU3PDebugPrint (4, "CyU3PGpioSetComplexConfig failed, error code = %d\n", apiRetStatus);

        CyFxAppErrorHandler(apiRetStatus);

    }

      /* パルスを開始 */

      CyU3PGpioComplexPulseNow(50, CY_FX_PWM_25P_OF_3MS_THRESHOLD); // 3ms25%がしきい値セット

このスニペットは、複合GPIO 50を構成します(I / Oマトリックスの対応するビットが設定されていると想定されています)。

  1. gpioConfig.periodは、生成するパルスの周期を設定します(この例では、周期を3 msに設定します)。

CyU3PGpioComplexPulseNow()が呼び出されて、パルスが生成されます。FX3 APIガイド(C\Program Files(x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\firmware\FX3APIGuide.pdf)に記載されていますように、この関数は、指定された複雑なGPIOのパルスをすぐに開始するために使用されます。 このAPI関数の最初のパラメーターはGPIO IDで、2番目のパラメーターはパルスのしきい値になります。

パルスの構成された期間は3 msであり、しきい値は0.25 * 3 msに設定されているため、図1に示すように、生成されたパルスは0.75 msの間アサートされ、残りの期間はデアサートされます。CyU3PGpioComplexPulseNow()が再度呼び出されるまで、GPIOにパルスを送ります。

ファームウェアでCyU3PGpioComplexPulseNow()が呼び出されたときのタイムインスタンスを参照するために、GPIO Refが設定されてから、CyU3PGpioComplexPulseNow()が呼び出されます。

pastedImage_0.png

1

CyU3PGpioComplexPulseNow()は、パルスの生成が完了するまで戻るのを待機しないことに注意してください。しきい値の設定直後に戻ります。

注意:

gpioConfig.periodの計算と時間への変換方法は次のとおりです。

FX3ファームウェアのmain()では、システムクロックを構成するためにCyU3PDeviceInit(&clockConfig)が呼び出されます。パラメーターとしてNULLを使用してDeviceInitの呼び出しを行う場合、デフォルトでのシステムクロックは384 MHzになります。次の設定で呼び出された場合、システムクロックは403.2 MHzになります。

CyU3PSysClockConfig_t clockConfig;

clockConfig.setSysClk400 = CyTrue;  //システムクロック= 403.2MHz

clockConfig.cpuClkDiv = 2;  // CPUクロック= 201.6MHz

上記の例のように3ミリ秒の周期が必要な場合、必要なクロック数:(201600000 * 0.003 =  604800

  1. gpioConfig.periodに設定する値= CY_FX_PWM_PERIOD_3MS = 604800-1

期間の25%をしきい値として設定する場合、必要なクロック数:(604800 * 0.25 =  151200

CY_FX_PWM_25P_OF_3MS_THRESHOLD の値 = 151200-1

CyU3PGpioComplexPulse()

FX3 APIガイドで述べたように、このAPI関数は、CyU3PGpioComplexPulseNow()を使用して生成されたパルスの遅延バージョンを生成するために使用されます。これを実現するには、gpioConfig.timerを使用します。この関数が呼び出されると、複雑なGPIOのタイマーがgpioConfig.timerで指定された値から増分を開始し、タイマーが「0」にロールすると、パルス出力の開始が発生します。

複雑なGPIO構成を以下に示します。

        gpioConfig.outValue = CyFalse;

    gpioConfig.inputEn = CyFalse;

    gpioConfig.driveLowEn = CyTrue;

    gpioConfig.driveHighEn = CyTrue;

    gpioConfig.pinMode = CY_U3P_GPIO_MODE_STATIC;

    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;

    gpioConfig.timerMode = CY_U3P_GPIO_TIMER_HIGH_FREQ;

    gpioConfig.timer = CY_FX_PWM_PERIOD_1MS;

    gpioConfig.period = CY_FX_PWM_PERIOD_3MS;

    gpioConfig.threshold = 0;

    apiRetStatus = CyU3PGpioSetComplexConfig(50, &gpioConfig);

    if (apiRetStatus != CY_U3P_SUCCESS)

    {

                CyU3PDebugPrint (4, "CyU3PGpioSetComplexConfig failed, error code = %d\n", apiRetStatus);

        CyFxAppErrorHandler(apiRetStatus);

    }

    CyU3PGpioComplexPulse(50, CY_FX_PWM_25P_OF_3MS_THRESHOLD);

gpioConfig.periodは、上記の例と同じです。タイマーは1 msに設定されます(gpioConfig.timerの値 = CY_FX_PWM_PERIOD_1MS  = (上記のように(201600-1)))。

タイマー値は(201600-1)に設定されているため、周期が3 msであるため、2 ms後にタイマーの値は「0」になります。

したがって、図2に示すように、Complex GPIOは関数呼び出しの2 ms後にアサートされます。上記の例と同様に、図2の「Ref」という名前の単純なGPIOは、関数呼び出しが行われる前にアサートされます(これは、関数によって与えられた遅延を検証するためです)。

pastedImage_6.png

2

CyU3PGpioComplexPulse()2番目のパラメーターは上記の例と同じであるため、パルスのオン期間は0.75 msです。

別の例として、図3は、gpioConfig.timer = CY_FX_PWM_PERIOD_2MS =403200-1)で設定されたGPIOの動作を示し、GPIOタイマーの周期(3 ms)とパルスのしきい値(0.75 ms)を同じに維持します。

pastedImage_12.png

3

注意:

タイマー値が全期間(この例では3 ms)に設定されている場合、パルス開始前の遅延は期間値(この場合は3 ms)になります。

0 件の賞賛
161 件の閲覧回数
寄稿者