Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

我的程式與 tlf35584 同步通信,並且能夠從緩衝區讀取資料。但是當我嘗試與中斷通信時,出現了一系列錯誤。 我理解非同步通訊的方式是中斷發送和中斷接收,我可以在中斷向量註冊表中看到。 但我不知道如何觸發它們。

我正在使用 cpu0 來觸發中斷。 我嘗試用 IfxQspi_SpiMaster_writeTransmitFifo 觸發,但 cpu_trap,總線錯誤已被觸發

這是我的程式中的基本配置91de706c64a4f5b675262166ba030cd.pngfde36214814c4f3716ae78006a41871.png 4e902aef3d1cf0f9eb5ed05e1890dc5.png 16e7537e2765c38eb69713e4a423d8c.png 78be26567b4615cc09e74d6db9c72ef.png 62269dc08482657db2039a83ac29e08.png

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/td-p/702376

1 解決方案
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

通常我們不支援客戶進行程式碼調試,除非可以透過可共享項目輕鬆地從我們這邊複製程式碼。 不確定這個範例是否對您有幫助,它具有帶有 TLF35584 的 QSPI:

KIT_A2G_TC387_MOTORCTR 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/703069

在原始文章中檢視解決方案

0
7 回應
Translation_Bot
Community Manager
Community Manager
Community Manager

我認為您應該在 TC397 TFT SPI TLF 範例中找到答案,甚至重複使用它,特別是在 iLLD 模組IfxQspi_SpiMaster中。 它應該透過正確設定初始化結構來支援相同的中斷甚至 DMA 使用。 如果您有 miniWiggler/evaluation COOLDIM_PRG_BOARD ,您也可以將其導入 ADS 並用它進行測試。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/702619

0
Translation_Bot
Community Manager
Community Manager
Community Manager

我使用的是KIT_A2G_TC387_MOTORCTR範例,但是它使用的是同步方式的spi。能告訴我具體使用範例的DEMO_5QR0680AG_42W1嗎? 另外ADS TC397在github上好像打不開。 `BTREF510S9A0MTH0L9F28U.png

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/702644

0
Translation_Bot
Community Manager
Community Manager
Community Manager

沒關係,我修好了。

新的問題是:

IfxQspi_SpiMaster_exchange的底線是呼叫IfxQspi_SpiMaster_writeLong或IfxQspi_SpiMaster_write,它從上述兩個寫函數寫入fifo。 我的問題是,我還在 IfxQspi_SpiMaster.h 中看到 IfxQspi_SpiMaster_writeTransmitFifo。 什麼情況下使用這個功能? 如果我使用中斷發送數據,我應該使用哪個函數?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/702871

0
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

Github 可以存取iLLD_TC3XX_ADS_DMA_CRC32請重新檢視您的網路環境。

Kunqiao_L_2-1709095720268.png

IfxQspi_writeTransmitFifo 是 IfxQspi_SpiMaster_write 的子函數,並且
IfxQspi_SpiMaster_writeTransmitFifo 也是呼叫函數IfxQspi_writeTransmitFifo。
 
請參閱
Kunqiao_L_0-1709095650536.pngKunqiao_L_1-1709095673543.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/702938

0
Translation_Bot
Community Manager
Community Manager
Community Manager

謝謝,我現在明白了。我無法使用目前的程式和設定存取中斷,請幫我看看問題出在哪裡。

IFX_INTERRUPT(masterTxISR, 0, ISR_PRIORITY_MASTER_TX); /* SPI Master ISR 用於發送資料 */
IFX_INTERRUPT(masterRxISR, 0, ISR_PRIORITY_MASTER_RX); /* SPI 主 ISR 用於接收資料 */

布林值 TX_DONE;
boolean RX_DONE;//設定標識符以決定執行哪個中斷
無效 masterTxISR()
{
IFXCPU _ 啟用中斷 ();
如果(1 == TX_DONE)
{
IfxQspi_SpiMaster_isrTransmit(&g_qspi.spiMaster);
}
否則
{
 
}
}
 
無效 masterRxISR()
{
IfxCpu_enableInterrupts();
如果(1==RX_DONE)
{
IfxQspi_SpiMaster_isrReceive(&g_qspi.spiMaster);
}
否則
{
 
}
}
無效 initQSPI2Master(無效)
{
IfxQspi_SpiMaster_Config spiMasterConfig; /* 定義主配置 */
 
IfxQspi_SpiMaster_initModuleConfig(&spiMasterConfig, QSPI2_MASTER); /* 使用預設值初始化 */
 
spiMasterConfig。 TLE9243QK_BASE_BOARD .mode = SpiIf_Mode_master; /* 配置模式 */
 
 
/* 選擇通訊的連接埠引腳 */
const IfxQspi_SpiMaster_Pins qspi2MasterPins = {
&IfxQspi2_SCLK_P15_3_OUT, IfxPort_OutputMode_pushPull, /* SCLK 腳位 (CLK) */
TESTBOARD_150PC_OUT , IfxPort_OutputMode_pushPull , /* MasterTransmitSlaveReceive 腳位 (MOSI) */
&IfxQspi2_MRSTB_P15_7_IN, IfxPort_InputMode_pullDown, /* MasterReceiveSlaveTransmit 腳位 (MISO) */
IfxPort_PadDriver_cmosAutomotiveSpeed1 /* 焊盤EVAL_BDPS_DRIVER模式 */
};
spiMasterConfig.pins = &qspi2MasterPins; /* 分配Master的連接埠引腳*/
 
/*DMA配置*/
// spiMasterConfig.dma.txDmaChannelId = IfxDma_ChannelId_1;
// spiMasterConfig.dma.rxDmaChannelId = IfxDma_ChannelId_2;
// spiMasterConfig.dma.useDma = 1;
 
/* 設定ISR優先權和服務提供者 */
spiMasterConfig。 TLE9243QK_BASE_BOARD .txPriority = ISR_PRIORITY_MASTER_TX;
spiMasterConfig。 TLE9243QK_BASE_BOARD .rxPriority = ISR_PRIORITY_MASTER_RX;
spiMasterConfig。 TLE9243QK_BASE_BOARD .erPriority = ISR_PRIORITY_MASTER_ER;
spiMasterConfig。 TLE9243QK_BASE_BOARD .isrProvider = IfxSrc_Tos_cpu0;
 
/*設定其他*/
spiMasterConfig.txFifoMode = IfxQspi_FifoMode_singleMove;
spiMasterConfig.rxFifoMode = IfxQspi_FifoMode_singleMove;
/* 初始化QSPI主模組 */
IfxQspi_SpiMaster_initModule(&g_qspi.spiMaster, &spiMasterConfig);
}

無效 initQSPI2MasterChannel(無效)
{
IfxQspi_SpiMaster_ChannelConfig spiMasterChannelConfig; /* 定義主通道配置 */

/* 使用預設值初始化配置 */
IfxQspi_SpiMaster_initChannelConfig(&spiMasterChannelConfig, &g_qspi.spiMaster);

spiMasterChannelConfig。 TLE9243QK_BASE_BOARD波特率 = 5000000; /* 將 SCLK 頻率設定為 5 MHz */
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD = 15;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.dataHeading = 1;//最高有效位
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.csTrailDelay = 2;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.csInactiveDelay =2;
// spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.csLeadDelay =1;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.shiftClock = SpiIf_ShiftClock_shiftTransmitDataOnTrailingEdge;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.clockPolarity = SpiIf_ClockPolarity_idleLow;
spiMasterChannelConfig.mode =IfxQspi_SpiMaster_Mode_short;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.parityCheck = 1;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.parityMode = Ifx_ParityMode_odd;
spiMasterChannelConfig。 TLE9243QK_BASE_BOARD .mode.autoCS = 1;
/* 選擇片選訊號的連接埠接腳 */
const IfxQspi_SpiMaster_Output qspi2SlaveSelect = { /* QSPI2 Master selects the QSPI3 Slave */
&IfxQspi2_SLSO1_P14_2_OUT, IfxPort_OutputMode_pushPull, /* Slave Select port pin (CS) */
IfxPort_PadDriver_cmosAutomotiveSpeed1 /* Pad driver mode */
};
spiMasterChannelConfig.sls.output = qspi2SlaveSelect;

/* 初始化QSPI主通道 */
IfxQspi_SpiMaster_initChannel(&g_qspi.spiMasterChannel, &spiMasterChannelConfig);
QSPI2_SSOC.B.OEN = 0;
}

uint8 SpiDrv_Qspi2DataExchange(spiCommandType Cmd,tlf35584RegAddr 位址,uint8 資料)
{
 
tlf35584SpiFrameType spiFrame = {0} ;
spiFrame.B.cmd = Cmd;
spiFrame.B.addr = 位址;
spiFrame.B.data = 資料;
 
// uint16 g_Qspi2TxData;
// g_Qspi2TxData = (uint16)(((uint16)Cmd << 15) | ((uint16)位址 << 9) | ((uint16)Data << 1) | (0x0000 << 0));
TX_DONE = 1;
RX_完成=0;
g_qspi.spiBuffers.spiMasterTxBuffer[0] = spiFrame.U;
ret3 = QSPI2_GLOBALCON1.B.TXEN;
ret4 = QSPI2_GLOBALCON1.B.RXEN;
while (IfxQspi_SpiMaster_getStatus(&g_qspi.spiMasterChannel) == SpiIf_Status_busy){};
IfxQspi_SpiMaster_exchange(&g_qspi.spiMasterChannel, &g_qspi.spiBuffers.spiMasterTxBuffer[0],&g_qspi.spiBuffers.spiMasterRxBuffer[0], SPI_BUFFER_SIZE);
while (IfxQspi_SpiMaster_getStatus(&g_qspi.spiMasterChannel) == SpiIf_Status_busy){};
 
返回(g_qspi.spiBuffers.spiMasterRxBuffer[0]);
}//調試時,執行交換前ret3和ret4都為1。
不知道是我配置或使用的資源有問題,還是發送過程有問題。 我需要去哪個暫存器去檢查。 另外,我不知道如何清除發送中斷和接受標誌位(稍後會介紹)。 如果你能幫我解決這個問題,我將非常感激

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/703061

0
Translation_Bot
Community Manager
Community Manager
Community Manager

此配置可以與tlf35584同步通訊,但不能中斷訪問

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/703065

0
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

通常我們不支援客戶進行程式碼調試,除非可以透過可共享項目輕鬆地從我們這邊複製程式碼。 不確定這個範例是否對您有幫助,它具有帶有 TLF35584 的 QSPI:

KIT_A2G_TC387_MOTORCTR 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/TC397-illd-library-Qspi-asynchronous-communication-demo/m-p/703069

0