こんにちは、
SPIを使用して外部フラッシュメモリからデータを読み取る場合、データ量が多いため、非同期SPI+DMA転送方式を採用しました。2つのチャネルが作成されました。1つ目のチャネルは4バイトの容量を持つフラッシュコマンダー用で、2つ目のチャネルは25600バイトの容量を持ち、フラッシュデータの読み出しに使用されます。DMAは4つのチャネルを使用します。ch0/ch1はUART用、ch2/ch3はこのように構成されたSPI用です。SPIを設定しない場合、UARTは正常に送信できますが、SPIを設定すると、UARTとSPIの両方が正常に機能しなくなります。
プラットフォーム モジュールは次のように構成されます。

Mcl モジュールの DMA 構成は次のとおりです。


Rm モジュールは次のように構成されています。

Spi モジュールは次のように構成されています。
チャンネルセクション


外部デバイスセクション

求人セクション

シーケンスセクション

一般およびPhyUnit

コードは次のとおりです。
#SPI_START_SEC_VAR_INIT_UNSPECIFIEDを定義します
#include "Spi_MemMap.h"
__attribute__ ((整列( 32 ) )) uint8_t nvmTxMsg [ 4 ] = { };
__attribute__ ((整列( 32 ) )) uint8_t nvmRxMsg [ NVM_DEV_NUM ] = { 0 };
#SPI_STOP_SEC_VAR_INIT_UNSPECIFIEDを定義します
#include "Spi_MemMap.h"
void Nvm_hal_Init ( void )
{
/* デバイスのハードウェア抽象化レイヤーを初期化します */
//Spi_SetHWUnitAsyncMode(2,SPI_INTERRUPT_MODE);
Spi_SetupEB ( NVMCMD_SPI_CHANNEL 、 nvmTxMsg、 NULL 、 4 );
Spi_SetupEB ( NVMDATA_SPI_CHANNEL 、 NULL 、 nvmRxMsg、 NVM_DEV_NUM );
}
void Nvm_SpiTransfer ( void )
{
/* SPI同期送信を実行する */
nvmTxMsg [ 0 ] = 0x03u ;
nvmTxMsg [ 1 ] = 0x00u ;
nvmTxMsg [ 2 ] = 0x00u ;
nvmTxMsg [ 3 ] = 0x00u ;
//Dio_WriteChannel(DioConf_DioChannel_SideMarkerEnableOut,0);
Spi_AsyncTransmit ( NVM_SPI_SEQUENCE );
}
uint32_t nvm ;
void NvmSpi_Callback ( void )
{
nvm ++ ;
//Dio_WriteChannel(DioConf_DioChannel_SideMarkerEnableOut,1);
}
こんにちは@ben_chin
添付されているのは、以前作成したSPI+DMAとUART+DMAのデモです。2つのデモのRTDバージョンはそれぞれRTD 5.0.0とRTD 5.0.0です。バージョン 4.0.0 の場合、比較と変更についてはこれら 2 つのデモを参照してください。