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

cross mob

PSoC 3/5LP SPI-DMA の 16-bit オペレーション - KBA223730 - Community Translated (JA)

PSoC 3/5LP SPI-DMA の 16-bit オペレーション - KBA223730 - Community Translated (JA)

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

Community Translated by  MoTa_728816        Version: **

Translation - English: PSoC 3/5LP SPI-DMA 16-bit Operation – KBA223730

質問:

PSoC® 3/5LP で 16-bit データの送受信を DMA で行うのにはどのようにしたら良いですか?

回答:

手始めに PSoC Creator の サンプルコード SPI Master with DMA と SPI Slave with DMA を使用してください。

PSoC Creator で、メニューから File > Code Example を選択します。図 1 のように Filer by のキーワードに “DMA” を指定することで関連するサンプルコードを検索することも可能です。PSoC 5LP と同様に PSoC 3 でも同じサンプルコードが用意されています。

001-pastedImage_1.png

図 1.  PSoC Creator SPI-DMA サンプルコード

サンプルコードではデータビットは 8-bits になっています。以下の手順に従って、SPI を 16-bit 転送モードに変更してください。

1. SPI のデータ長を 8 から 16 に変更する。図 2 参照

002-pastedImage_16.png

図 2. SPI Master のデータ長の設定

2. DMA のバースト長を1 バイトから 2 バイトに変更します。 main.c の 37 行目へ移動してください。既にある行を下記のように修正してください。

#define DMA_TX_BYTES_PER_BURST     (2u)

同様にして、すべての DMA チャネルのバースト長を変更してください。

3. 下記の定義を SPI TX と SPI RX にそれぞれ適用してください。

  

       main.c line 145

CyDmaTdSetAddress(txTD, LO16((uint32)txBuffer), LO16((uint32) SPIM_BSPIM_sR16_Dp_u0__16BIT_F0_REG));

   

      main.c line 179

CyDmaTdSetAddress(rxTD, LO16((uint32) SPIM_BSPIM_sR16_Dp_u0__16BIT_F1_REG), LO16((uint32)rxBuffer));

SPIM コンポーネントで提供されているポインタ定義は 16-bit オペレーションと互換性がありません。そのため、正常なオペレーションを行わせるためにはこれらのレジスタ定義を使用する必要があります。 SPIS_Example プロジェクトについても、このコードスニペットで SPIM コンポーネントに使用したものと同様に適切なポインタを使用してください。

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