这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » AurixTC36x在配置SPI模块时,QSPI的时钟源怎么选择?

共2条 1/1 1 跳转至

AurixTC36x在配置SPI模块时,QSPI的时钟源怎么选择?

工程师
2024-02-28 19:17:54     打赏

问题1:在配置SPI模块时,QSPI的时钟源怎么选择,EB配置中,McuClockSettingConfig_0的General中有McuQspiClockSourceSelection 选项,但是McuClockReferencePoint中也有一个MCU_QSPI_FREQUENCY的可选项,这两个的区别是什么

问题2: TIDLEA,B 的怎么去测试,不太明白这个时间指的是什么,是不是我得发连续帧才能测出来   




关键词: Aurix     TC36x     SPI    

助工
2024-02-28 19:19:51     打赏
2楼

问题1:在配置SPI模块时,可以选择QSPI的时钟源。在EB配置中,McuClockSettingConfig_0的General部分有一个选项叫做McuQspiClockSourceSelection,它用于选择QSPI的时钟源。而McuClockReferencePoint中的MCU_QSPI_FREQUENCY选项则是用于定义QSPI的时钟频率,这两个选项的作用有所不同。

问题2:TIDLEA和TIDLEB是指SPI通信中的空闲时间。TIDLEA指的是主设备发送完一个字节数据后,到下一次发送一个新字节数据之间的时间。TIDLEB则是从从设备接收到一个字节数据后,到下一次接收一个新字节数据之间的时间。

测试TIDLEA和TIDLEB时,你需要发送一系列连续帧,然后通过测量接收到的数据的间隔时间来确定TIDLEA和TIDLEB的值。你可以通过改变发送数据的频率或者发送不同长度的数据来观察TIDLEA和TIDLEB的变化。 

可以参考iLLD里面如下代码:
IfxScuCcu_getQspiFrequency
这个函数里面有频率的选择
IfxQspi_SpiMaster_setChannelBaudrate
及IfxQspi_calcRealBaudrate
这个函数里面有计算方法(关于fQspi和ECON[cs].B.Q, A, B, C)


float calculateRealBaudrate(Ifx_QSPI *qspi, IfxQspi_ChannelId channelId){  

  // Extracting relevant parameters    int cs = channelId % 8;   

 float fQspi = IfxScuCcu_getQspiFrequency(); 

// Set fQspi to the base QSPI frequency (e.g., 200MHz)   

 // Configuring QSPI parameters:    

 // TQ is 0,   

 // Q is 24,   

 // A is 3,   

 // B is 3,   

 // and C is 1.    

// Adjusting fQspi for TQ    fQspi = fQspi / (qspi->GLOBALCON.B.TQ + 1);   

 // Adjusting fQspi for Q    

// Example: fQspi = 200M    fQspi = fQspi / (econ[cs].B.Q + 1);    

// Example: fQspi = 8M    

// Further adjustments for A, B, and C    fQspi = fQspi / ((econ[cs].B.A + 1) + econ[cs].B.B + econ[cs].B.C);    

// Example: fQspi = 1M    return fQspi;} 


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]