1 QSPI特性
QSPI允许基于标准化的spi总线信号与外部设备进行任何同步串行通信:时钟、数据输入、数据输出和从属选择。
QSPI工作在全双工模式下,或作为主设备或从设备高达50 Mbit/s。
DMA模块通道可以配置为将数据从QSPI FIFOs从内部内存传输,而不需要任何CPU干预。
2 TLF35584 QSPI0配置
QSPI通过DMA进行主从数据传输通信。DMA传输好处:两个DMA通道用于实现RAM与SPI FIFOs之间的数据传输,而不需要CPU干预:
- DMA CH0配置为QSPI0 TX。
- DMA CH1配置为QSPI0 RX。
QDPI0配置为SPI主设备,TLF35584作为SPI从设备。主从交换遵循TLF35584数据传输格式要求,每次传输数据为16bit。
QSPI0引脚连接:
TC397 QSPI0 (Master) | WIRE | TLF35584(Slave) |
---|---|---|
P20.13(M,CS,OUT) | <-> | SCS |
P20.11(M,CLK,OUT) | <-> | SCL |
P20.14(M,DATA,OUT) | <-> | SDI |
P20.12(M,DATA,IN) | <-> | SDO |
2.1 QSPI0 Master Module initialization
1)调用IfxQspi_SpiMaster_initModuleConfig()函数,使用默认值初始化IfxQspi_SpiMaster_Config结构体。
2)配置主模式和最大波特率。(base.mode,base.maximumBaudrate)
- QSPI0 设置为主模式。
- TLF35584 SPI时钟频率 <= 10MHz。因此,波特率设置为10MHz。
3)配置QSPI0通信引脚。(pins)
4)配置DMA通道。(dma.useDma,dma.txDmaChannelId,dma.rxDmaChannelId)
5)配置QSPI0中断优先级。(base.txPriority,base.rxPriority,base.erPriority,base.isrProvider)
6)调用IfxQspi_SpiMaster_initModule()函数,使用IfxQspi_SpiMaster_Config结构体参数初始化QSPI0模块。
2.1.1 代码实现
static void SpiDrv_Qspi0ModuleInit(void)
{
// create module config
IfxQspi_SpiMaster_Config spiMasterConfig;
IfxQspi_SpiMaster_initModuleConfig(&spiMasterConfig, &MODULE_QSPI0);
// set the desired mode and maximum baudrate
spiMasterConfig.base.mode = SpiIf_Mode_master;
// pin configuration
const IfxQspi_SpiMaster_Pins pins =
{
&IfxQspi0_SCLK_P20_11_OUT, IfxPort_OutputMode_pushPull, // SCLK
&IfxQspi0_MTSR_P20_14_OUT, IfxPort_OutputMode_pushPull, // MTSR
&IfxQspi0_MRSTA_P20_12_IN, IfxPort_InputMode_pullDown, // MRST
IfxPort_PadDriver_cmosAutomotiveSpeed3 // pad driver mode
};
spiMasterConfig.pins = &pins;
// dma configuration.
spiMasterConfig.dma.txDmaChannelId = IfxDma_ChannelId_0;
spiMasterConfig.dma.rxDmaChannelId &