cancel
Showing results for 
Search instead for 
Did you mean: 

Community Translations

Esteemed Contributor

Hi,

I'd like to translate KBA222371 into Japanese.

moto

Original KBA: KBA222371

How to Use the Internal Interrupt of the SCB Component in PSoC 4 - KBA222371

Translated by: MoTa_728816

=============================

タイトル: PSoC 4  SCB コンポーネントの内部割込みの使用方法 - KBA222371

ヴァージョン:**

質問:

PSoC® 4 の UART (SCB) コンポーネントの内部割込み (Internal Interrupt) はどのように使用するのですか?

回答:

SCB の内部割込みが有効に設定されると、SCB_IRQ と呼ばれる内部 ISR コンポーネントが SCB コンポーネントに追加されます。PSoC Creator は自動的に、この ISR コンポーネント用の API を生成します。UART_SetCustomInterruptHandler(InterruptHandUart) API を使用して独自関数のベクタをこの割込みに設定することが可能です、ここで InterruptHandUart は独自割込み関数のユーザー定義ベクタです。

001-pastedImage_2.png

SCB コンポーネントの内部回路

同時に SCB_IRQ 割込みは UART コンポーネントの内部で使用されます。デバイスは SCB_IRQ 割込みの中でソフトウェアバッファ管理のような内部処理を行います

(コンポーネントデータシートによると:“割込みモードは自動的に内部(internal)に設定され、 RX FIFO not empty 割込みがデータを RX FIFO からソフトウェアによるリングバッファに移動するソフトウェアバッファ管理処理用に予約されます。”) 以下のコードを UART_SPI_UART_INT.c ファイル内の CY_ISR(UART_SPI_UART_ISR) 関数内に見ることができます。

#if (UART_CHECK_RX_SW_BUFFER)

    {

        if (UART_CHECK_INTR_RX_MASKED(UART_INTR_RX_NOT_EMPTY))

        {

            ……

            ……

UART_ClearRxInterruptSource(UART_INTR_RX_NOT_EMPTY);

        }

    }

#endif

#if (UART_CHECK_TX_SW_BUFFER)

    {

        if (UART_CHECK_INTR_TX_MASKED(UART_INTR_TX_NOT_FULL))

        {

            ……

            ……

UART_ClearTxInterruptSource(UART_INTR_TX_NOT_FULL);

        }

}

#endif

PSoC Creator で SCB UART コンポーネントの内部割込みを有効にすると、UART_SetCustomInterruptHandler(InterruptHandUart) API を使用して、割込みに独自の関数を追加することが可能です。この API はユーザー定義の関数をシステム定義の関数 (バッファ管理関数) の前に追加します。以下は UART_SPI_UART_INT.c ファイル内の CY_ISR(UART_SPI_UART_ISR) 関数内のコードです:

(UART_SPI_UART_ISR は SCB_ISR 割込みに内部で使用されている割込みハンドラです。 UART_customIntrHanler はユーザー定義の関数です。)

CY_ISR(UART_SPI_UART_ISR)

{

#if (UART_INTERNAL_RX_SW_BUFFER_CONST)

    uint32 locHead;

#endif /* (UART_INTERNAL_RX_SW_BUFFER_CONST) */

#if (UART_INTERNAL_TX_SW_BUFFER_CONST)

    uint32 locTail;

#endif /* (UART_INTERNAL_TX_SW_BUFFER_CONST) */

#ifdef UART_SPI_UART_ISR_ENTRY_CALLBACK

    UART_SPI_UART_ISR_EntryCallback();

#endif /* UART_SPI_UART_ISR_ENTRY_CALLBACK */

    if (NULL != UART_customIntrHandler)

    {

        UART_customIntrHandler();

}

   ……

   ……

}

UART_UART.c ファイル内で  UART_SPI_UART_ISR 割込みベクタが SCB_ISR 割込みに以下のコードで設定されます、それは UART_SCB_IRQ_StartEx(UART_SPI_UART_ISR) と同じ意味になります:

CyIntSetVector(UART_ISR_NUMBER, &UART_SPI_UART_ISR);

UART_SCB_IRQ_StartEx(InterruptHandUart) API は UART_SCB_IRQ.c ファイル内にあります。この API は PSoC Creator によって自動生成されます。UART_SCB_IRQ_StartEx(InterruptHandUART) API を使用して割込みハンドラを設定すると、システム定義の UART_SPI_UART_ISR はユーザー定義の関数 InterruptHandUart に置き換えられます。この状態ではバッファ管理機能は実行されないので UART の誤動作につながる可能性があります。

そのため、独自の機能を内部割込みに追加する場合には UART_SetCustomInterruptHandler(InterruptHandUart) API の使用が推奨されます。UART_SCB_IRQ_StartEx(InterruptHandUart) は使用しないでください。

この API の使用方法は SPI や I2C 等、他の SCB でも同様です。

より良い理解のために、以下のアプリケーションノートもご参照ください: http://www.cypress.com/documentation/application-notes/an90799-psoc-4-interrupts

=============================

28-Apr-2020

moto

0 Likes
Reply
2 Replies
Employee

Hello, Tanaka-san

We receive your translation, it will be published to KBA to Community.

After upload, You will receive the points as the word of KBA.

Due to the current delay of processed work, Please bear with me for the delayed the response.

It could be delayed, but it will be processed soon.

Thanks for your contribution to CDC!

Will keep you update the status.

Thanks,

Jenna Jo

Jenna Jo
0 Likes
Reply
Esteemed Contributor

Hi Jenna-san,

My 2nd review is done.

I picked up the part that would be fixed as follows:

> より良い理解のために、以下のアプリケーションノートもご参照ください:

< より深く理解するためは、以下のアプリケーションノートをご参照ください:

Thanks,

Kenshow

10-Nov-2020