PSoC® 3/4/5LP デバイスとコンパイラのエンディアンフォーマット - KBA91560 -  Community Translated (JA)

Version 2

    Community Translated by  Motoo Tanaka Expert      Version: *A

     

    Translation - English: Endian Format in a PSoC® 3/4/5LP Device Versus a Compiler – KBA91560

     

    質問:

    PSoC® 3 Keilコンパイラは 16-および32-bitの変数にビッグエンディアンを使用しています。PSoC 3 デバイスはマルチバイトのレジスタ (16-および32-bitレジスタ) にリトルエンディアンを使用しています。CPUとDMA経由でレジスタとアクセスするときに、バイトの順番の入れ替え方法を教えてください。これは GNU Compiler Collection (GCC) や Keil™ Microcontroller Development Kit (MDK) コンパイラを使用する PSoC 4/5LP にも適用できますか?

     

    回答:

     

    CPU アクセス:

    Keilコンパイラは内部でバイトスワッピングを制御するレジスタアクセス用のマクロ (cymem.a51 で定義されます) を提供します。PSoC 3デバイスの 8-, 16-, および32-bit レジスタにアクセスする場合に、これらのマクロを使用する必要があります。

     

    XDATAスペースの最初の 64Kにマップされるレジスタアクセスマクロ:

    • CY_GET_REG8(addr)
    • CY_SET_REG8(addr, value)
    • CY_GET_REG16(addr)
    • CY_SET_REG16(addr, value)
    • CY_GET_REG24(addr)
    • CY_SET_REG24(addr, value)
    • CY_GET_REG32(addr)
    • CY_SET_REG32(addr, value)

     

    XDATAスペースの最初の 64K以降にマップされるレジスタアクセスマクロ:

    • CY_GET_XTND_REG8(addr)
    • CY_SET_XTND_REG8(addr, value)
    • CY_GET_XTND_REG16(addr)
    • CY_SET_XTND_REG16(addr, value)
    • CY_GET_XTND_REG24(addr)
    • CY_SET_XTND_REG24(addr, value)
    • CY_GET_XTND_REG32(addr)
    • CY_SET_XTND_REG32(addr, value)

     

    DMA アクセス:

    ソースと宛先のデータが異なるエンディアンで編成されている場合、DMAトランザクションディスクリプターは転送中にバイトエンディアンをスワップするようにプログラムできます。

     

    PHUB.TDMEM[0..127].ORG_TDOレジスタの SWAP_EN ビットでエンディアンスワップが行われるかどうかを指定します。SWAP_EN が '1' の場合、エンディアンスワップが行われます。スワップのサイズは PHUB.TDMEM[0..127].ORG_TDOレジスタのSWAP_SIZE ビットで決定されます。

    • SWAP_SIZE = 0 の場合、スワップサイズは 2 バイトです。これは DMA転送中に 2 バイトごとにエンディアンスワップされることを意味します。
      下記は、2 バイトデータのバイトスワップを有効にするTD構成API のコードスニペットです。
      CyDmaTdSetConfiguration(myTd, 2, myTd, TD_TERMOUT0_EN | TD_SWAP_EN);

     

    • SWAP_SIZE = 1 の場合、スワップサイズは 4 バイトです。これは DMA転送中に 4 バイトごとにエンディアンスワップされることを意味します。
      下記は、4 バイトデータのバイトスワップを有効にするTD構成API のコードスニペットです。
      CyDmaTdSetConfiguration(myTd, 4, myTd, TD_TERMOUT0_EN | TD_SWAP_EN | TD_SWAP_SIZE4);

     

    PSoC 4/5LP:

    PSoC 4/5LP設計は、PSoC 3 Keilコンパイラとは異なり、リトルエンディアンに基づくGCCまたはMDKコンパイラを使用します。したがって、PSoC 5LPデバイスにコードを移植する場合、DMAバイトスワップを無効にする必要があります。PSoC 4はDMAをサポートしていないため、同じことはPSoC 4には適用されません。

     

    DMAの動作と使用法の詳細については、DMA component datasheet, PSoC 3 Technical Reference Manual, および PSoC 5LP Technical Reference Manual を参照してください。

     

    (DMAをサポートするPSoC 4デバイス用の) PSoC 4 DMAアーキテクチャーは、PSoC 3/5LPのDMAとは少し異なります。PSoC 4 DMAにはエンディアンスワップはありません。詳細については PSoC 4 DMA Component Datasheet を参照してください。