TC397 SPI_DMA_1_KIT_TC397_TFT 演示

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

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

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

请问 WHALSPI Master 或 slavefetranpetdata 时使用 ifxqspi_spimaster_getstatus到的状态为忙碌时,没有办法清理此状态? 2. 现在发送数据和接收数据的时候,有时正常,有时候处于忙碌状态状态,发送接收数据失败,出现此问题的原因是什么?

多谢!

0 点赞
6 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @Bertxu ,

1)如果xqspi_spimaster_getstatus到的状态为忙时,请问问主服务器或从属传输数据时使用 ifxqspi_spimaster_getstatus到的状态为忙碌时,没有办法清理此状态?

— 没有,因为这个信号量用于 comontrepteformentaingeperthecomentareNorpeformentin

2)你的意思是 TC397 SPI_DMA_1_KIT_TC397_TFT EngerewaringeRunlingeStargePecompecomengeOblingeorgHeackep

BR,

杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

TC397 SPI_DMA_1_KIT_TC397_TFT 使用此演示时,我们在代码中移除中移除,只留下主端,物理 连接也按下主端与从属端断开,此时让主端发送数据,现在spi的钟用示波器能量到,但mosi对应的pin只有能量到3v不行,理性数据上有发送应该能量到数据引脚的引脚,这是为什么因为人造的?

看日志没发现实异常:如下

08:55:22.884] 收益 ←◆1A 55 55 55 55 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 2A 77 77 77 77 77 77 FF FF FF FF F

1A,2A-----------TOUCHFENDING中断时发的(ifxqspi_spimaster_exchangeExchangeExchenture

55 55 55 55 为发送数据。

77 77 77 77 77 77...(SpiMaster 忙碌的等着等待)

FF FF FF FF FF 为 Masternaccred

对应的代码:


/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

" "
#include#include " ifxport.h "
#include " asclin_uart.H "
#include < qspi/spislave/ifxqspi_spislave.h >
#include " bsp.h "
/********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************SP
I2 /* SPI 主硬件模块 */ #define QSPI3_SLAVE MODULE_QSPI

&
& #define3 /* SPI 从属硬件模块*/

#define LED_D110 & MODULE_P13,3 /* LED D110 端口,引脚定义 */

#define ISR_PRIORITY_QSPI2_TX 1 /* 定义 QSPI2 传输中断优先级 */ #define ISR_PRIORITY_QSPI2_RX 2 /* 定义 QSPI2 接收中断优先级 */
#define ISR_PRIORITY_QSPI2_ER 10 /* 定义 QSPI2 错误中断优先级 */

#define ISR_PRIORITY_QSPI3_TX 3 /* 定义 QSPI3 传输中断优先级 */ #define ISR_PRIORITY_QSPI3_RX 4 /* 定义 QSPI3 接收中断优先级 */
#define ISR_PRIORITY_QSPI3_ER 11 /* 定义 QSPI3 错误中断优先级 */

#define ISR_PRIORITY_DMA_CH1 50 /* 定义 DMA 通道 1 中断优先级 */
#define ISR_PRIORITY_DMA_CH2 51 /* 定义 DMA 通道2 中断优先级 */ #define ISR_PRIORITY_DMA_CH3 52 /* 定义 DMA 通道3 中断优先级 */ #define ISR_PRIORITY_DMA_CH4 53 /* 定义 DMA channel4 中断优先级 */

#define ISR_PROVIDER_QSPI2 ifxsrc_tos_cpu0 /* 定义 QSPI2 中断提供程序 */ #define ISR_PROVIDER_QSPI3 ifxsrc_tos_CPU0 /* 定义 QSPI3 中断提供程序*/

#define ISR_PROVIDER_DMA_CH1 ifxsrc_tos_cpu0 /* 定义 DMA Channel1 中断提供程序 */
#define ISR_PROVIDER_DMA_CH2 ifxsrc_tos_cpu0 /* 定义 DMA Channel2 中断提供程序 */ #define ISR_PROVIDER_DMA_CH3 ifxsrc_tos_cpu0 /* 定义 DMA MA Channel3 中断提供程序 */ #define ISR_PROVIDER_DMA_CH4 ifxsrc_tos_cpu0 /* 定义 DMA Channel4 中断提供程序*/

#define MASTER_CHANNEL_BAUDRATE 1000000 /* 主通道波特率 */
#define gpiop220 MODULE_P22,0 /***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ qspidma g_qspidma;/* Global h & andle



用于 QSPI 通信 */
uint32 k;
/**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
static void initqspi2Master(void);static void initqspi2MasterChannel(void);静态空洞 initqspi2MasterBuffers(void);静态




initqspi3Slave (void);
static void initqspi3SlaveBuffers (void);静态空洞 initqspi (void);
static void initLed (void);

/********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************orisR,0,ISR_PRIORITY_QSPI2_ER);/* SPI 主错误中断定义 */ IFX_INTRUPT (qspi3ErrorisR,0,ISR_PRIORITY_QSPI3_ER);
/* SPI 从属错误中断


定义 */
IFX_INTRUPTION (dmachn1ISR,0,ISR_PRIORITY_DMA_CH1);/* DMA 通道 1 中断定义 */ IFX_INTRUPTION (dmachn2ISR、0、ISR_PRIORITY_DMA_CH2);/* DMA 通道 2 中断定义 */ IFX_INTRUPTION (dmachn3ISR、0、ISR_CH2);/* DMA 通道 2 中断定义 */
IFX_INTRUPTION (dmachn3ISR、0、ISR_CH2);/* DM_PRIORITY_DMA_CH3);/* DMA 通道 3 中断定义 */ IFX_INTRUPTION (dmachn4ISR,0,ISR_PRIORITY_DMA_CH4);/* DMA 通道 4 中断定义 */

/* 处理 QSPI2 错误中断 */
void qspi2ErrorisR (void)
{
IfxCpu_enableInterrupts();
IfxQspi_SpiMaster_isrError(&g_qspiDma.spiMaster);
}

/* 处理 QSPI3 错误中断 */
void qspi3ErrorisR (void)
{
IfxCpu_enableInterrupts();
IfxQspi_SpiSlave_isrError(&g_qspiDma.spiSlave);
}


/* 处理 DMA 频道 1 中断 */
void dmachn1ISR (void)
{
IfxCpu_enableInterrupts();
IfxQspi_SpiMaster_isrDmaTransmit(&g_qspiDma.spiMaster);
send_ASCLIN_UART_message(0x1a);
Arry_send_ASCLIN_UART_message(SPI_BUFFER_SIZE,&g_qspiDma.qspiBuffer.spiMasterTxBuffer[0]);
}


/* 处理 DMA 频道 2 中断 */
void dmachn2isr (void)
{
IfxCpu_enableInterrupts();
IfxQspi_SpiMaster_isrDmaReceive(&g_qspiDma.spiMaster);
send_ASCLIN_UART_message(0x2a);

}


/* 处理 DMA 频道 3 中断 */
void dmachn3isr (void)
{
IfxCpu_enableInterrupts();
IfxQspi_SpiSlave_isrDmaTransmit(&g_qspiDma.spiSlave);
send_ASCLIN_UART_message(0x33);
}


/* 处理 DMA 频道 4 中断 */
void dmachn4isr (void)
{
IfxCpu_enableInterrupts();
IfxQspi_SpiSlave_isrDmaReceive(&g_qspiDma.spiSlave);
send_ASCLIN_UART_message(0x44);
Arry_send_ASCLIN_UART_message(SPI_BUFFER_SIZE,&g_qspiDma.qspiBuffer.spiSlaveRxBuffer[0]);
}

/* 此函数在主模式下初始化 QSPI2 */ st
atic void initqspi2Master (void)
{ifxqspi_spimaster_config spimaster_config Spimaster_con
fig;/* 定义主配置 */

ifxqspi_spimaster_initModuleConfig(&SpimasterConfig,QSPI2_MASTER);/* 用默认值对其进行初始化*/

const ifxqspi_spimaster_Pins qspi2MasterPins =;spimasterConfig.pins = qspi2MasterPins;/* 分配主引脚 */ spimasterConfig.dma.usedma = TRUE;spimasterconfig.dmasterConfig.dmasterPins = TRUE {
&IfxQspi2_SCLK_P15_3_OUT, IfxPort_OutputMode_pushPull, /* SCLK Pin (CLK) */
&IfxQspi2_MTSR_P15_5_OUT, IfxPort_OutputMode_pushPull, /* Master Transmit Slave Receive Pin (MOSI) */
&IfxQspi2_MRSTA_P15_4_IN, IfxPort_InputMode_pullDown, /* Master Receive Slave Transmit Pin (MISO) */
IfxPort_PadDriver_cmosAutomotiveSpeed3 /* Pad driver mode */
};
&


= ifxdma_channelid_1;spimasterConfig.dma.rxdmachannelID
= ifxdma_channelid_2;spimasterConfig.base.txPriority = ISR_PRIORITY_DMA_CH1;spimasterConfig.base.rxPriority = ISR_PRIORITY_QSPI2_ER;spimasterConfig.base.isrPriority = ISR_PRIORITY_

QSPI2_ER;spimasterConfig.base.isrProvider = ISR_PROVIDER_CH2;spimasterConfig.base.isrPSPI2;


/* 使用用户配置初始化 QSPI 主模块 */
ifxqspi_spimaster_initModule (g_qspidma.spimaster,SpiMasterConfig);} & &

/* 此函数初始化 QSPI2 通道。 */ st
atic void initqspi2MasterChannel (void)
{i
fxqspi_spimaster_ChannelConfig spimaster_ChannelConfig;/* 定义主频道配置 */

ifxqspi_spimaster_initChannelConfig(SpimasterChannelConfig,g_qspidma.spimaster);&& /* 用默认值对其进行初始化*/

spimasterChannelConfig.base.baudrate = MASTER_CHANNEL_BAUDRATE;/* 将 SCLK 频率设置为 1 MHz */

const ifxqspi_spimaster_Output qspi2slaveSelectqspi3 =; spimasterChannelconfig.sls.Output = qspi2slaveSelectqspi3;//spimasterChannelconfig.mode=ifxqspi_spimaster_mode {
&IfxQspi2_SLSO0_P15_2_OUT, IfxPort_OutputMode_pushPull, /* Slave Select Pin (CS) */
IfxPort_PadDriver_cmosAutomotiveSpeed1 /* Pad driver mode */
}

 

/* 使用用户配置初始化 QSPI 主频道 */
ifxqspi_spimaster_initChannel(g_qspidma.spimasterChannel,SpimasterChannelConfig.mode == ifxqspi_spimaster_mode_longContinue;&&

}

/* 此函数初始化主软件缓冲区 */
静态 void initqspi2MasterBuffers (void)
{
for (uint32 i = 0;i < SPI_BUFFER_SIZE;i++)
{
/* Fill the SPI Master TX Buffer */
g_qspiDma.qspiBuffer.spiMasterTxBuffer[i] = 0x55;//(uint8)(i + 1);
/* Clear the SPI Master RX Buffer */
g_qspiDma.qspiBuffer.spiMasterRxBuffer[i] = 0;
}
}
/* 此函数初始化主软件缓冲区 */
静态 void clearqspi2MasterBuffers (void) {for (uint32 i = 0;i SPI_BUFFER_SIZE;i++) {/* 填满 SPI 主机 TX 缓冲区*/

<

/* 清除 SPI Master RX 缓冲区 */
g_qspidma.qspibuffer.spimasterrxBuffer [i] = 0;
}}
}
/* 此函数在从属模式下初始化 QSPI3 */ st
atic void initqspi3Slave (void)
{ifxqspi_spisLave_config spislave_config spislaveCon
fig;/* 定义从属配置 */

ifxqspi_spislave_initModuleconfig(spislaveConfig,QSPI3_SLAVE);/* 用默认值对其进行初始化 */ /* 启用 DMA 模式*/ & spislaveConfig.dma.usedma = TRUE;/* 设置 SPI 从属 DMA 频道 */ spislaveConfig.dma.txmachanneLid




= ifxdma_channelid_3;spislaveConfig.dma.rxdmachannelid
= ifxDMA_channelid_4;

/* 配置 SPI 从属中断 */ spislaveConfig.base.txPriority = ISR_PRIORITY_DMA_CH3;spislaveConfig_DMA_CH4;spislaveConfig.base.erPriority = ISR_PRIORITY_QSPI2_ER;spislaveConfig.base.erPriority = ISR_PRIORITY_QSPI2_ER;spislaveConfig.base.erPriority = ISR_PR
islaveConfig.base.isrProvider = ISR_PROVIDER_QSPI2;


const ifxqspi_spislave_Pins qspi3slavePins =; {
&IfxQspi3_SCLKA_P02_7_IN, IfxPort_InputMode_pullDown, /* SCLK Pin (CLK) */
&IfxQspi3_MTSRA_P02_6_IN, IfxPort_InputMode_pullDown, /* Master Transmit Slave Receive Pin (MOSI) */
&IfxQspi3_MRST_P02_5_OUT, IfxPort_OutputMode_pushPull, /* Master Receive Slave Transmit Pin (MISO) */
&IfxQspi3_SLSIA_P02_4_IN, IfxPort_InputMode_pullDown, /* Slave Select Pin (CS) */
IfxPort_PadDriver_cmosAutomotiveSpeed3 /* Pad driver mode */
}

/* 分配从属引脚 */
spislaveConfig.pins = qspi3SlavePins;&

/* 初始化 QSPI 从属模块 */
ifxqspi_spislave_initModule (g_qspidma.spisLave,spislaveConfig);} & &

/* 初始化从属软件缓冲区 */
static void initqspi3SlaveBuffers (void)
{
for (uint32 i = 0;i SPI_BUFFER_SIZE;i++)} <
{
/* Fill the SPI Slave TX Buffer */
g_qspiDma.qspiBuffer.spiSlaveTxBuffer[i] = (uint8)(i + 0x64);
/* Clear the SPI Slave RX Buffer */
g_qspiDma.qspiBuffer.spiSlaveRxBuffer[i] = 0;
}

/* 此函数初始化 LED */
静态 void initLED (void)
{
/* Set the port pin 13.3 (to which the LED D110 is connected) to output push-pull mode */
IfxPort_setPinModeOutput(LED_D110, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_general);
IfxPort_setPinModeOutput(GPIOp220, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_general);
/* Turn off the LED (LED is low-level active) */
// IfxPort_setPinLow(GPIOp220);
IfxPort_setPinHigh(LED_D110);
}

/* 这个函数初始化 QSPI 模块 */
static void initqspi (void)
{/* 首先初始化从站*/ //initqspi3Slave ();
//initqspi3SlaveBuffers ();

/* 其次初始化 Master */
initqspi2Master ();initqspi2MasterChannel ();
initqspi2MasterBuffers ();}

/* 此函数初始化 SPI 和从 Cpu0_Main 调用的 LED */
void initPearsels (void)
{init_asclin_uart ();initLED ();initQSPI ();
initQSPI ();

}


/* 此功能可确保主机和从站之间的 QSPI 通信并检查 * 数据传输是否正确

*/
void transferData (void) {

uint32 data=0x91929394;//=0x6762;uint32 i;uint32 错误 = 0;


ifxport_setpinHigh (gpiop220);
ifxqspi_spimaster_Exchange (g_qspidma.spimasterChannel,g_qspidma.qspibuffer.spimastertxBuffer [0],&&
&g_qspidma.qspibuffer.spimasterrxBuffer [0], SPI_BUFFER_SIZE);
//waitTime (ifxstm_getticksFromMilliseConds (BSP_DEFAULT_TIMER,1000);/* 等待 500 毫秒 *///同时 (ifxqspi_spimaster_getStatus (g_qspidma.spimasterChannel)

& == spiif_status_Busy) arry_send_asclin_uart_Message (SPI_BUFFER_SIZE、g_qspidma.qspibuffer.spibuffer.
{
send_ASCLIN_UART_message(0x77);
}
spimasterrxBuffer [0]);&
ifxport_setpinLOW (gpiop220);



/* 如果没有错误,请打开 LED D110(LED 处于低电平活动状态)*/ if(错误 == 0)}

{
IfxPort_setPinLow(LED_D110);
}

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

请帮忙看一下,在没有连接的奴隶时,测试主端的Clock和data信号(图片如附件),如下是否正常?

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @Bertxu ,

看起来黄色是时钟信号,绿色是数据信号,感知数据信号的电平有点怪怪的。

BR,

杰里米

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

是在 kit_tc397 的 evbsontestestit 的,slaveportnection,使用的演示代码,SPI 演示代码 spi的MasterSonfigurementesteise是:

const ifxqspi_spimaster_Pins qspi2MasterPins =; {
&IfxQspi2_SCLK_P15_3_OUT, IfxPort_OutputMode_pushPull, /* SCLK Pin (CLK) */
&IfxQspi2_MTSR_P15_5_OUT, IfxPort_OutputMode_pushPull, /* Master Transmit Slave Receive Pin (MOSI) */
&IfxQspi2_MRSTA_P15_4_IN, IfxPort_InputMode_pullDown, /* Master Receive Slave Transmit Pin (MISO) */
IfxPort_PadDriver_cmosAutomotiveSpeed3 /* Pad driver mode */
}

当我们使用例外组spi的配置大师,测试出来得波形图看起来比正常,波形图附件:这可能就是原因为人造的呢?

const ifxqspi_spimaster_Pins qspi2MasterPins =; {
&IfxQspi0_SCLK_P20_13_OUT, IfxPort_OutputMode_pushPull, /* SCLK Pin (CLK) */
&IfxQspi0_MTSR_P20_14_OUT, IfxPort_OutputMode_pushPull, /* Master Transmit Slave Receive Pin (MOSI) */
&IfxQspi0_MRSTA_P20_12_IN, IfxPort_InputMode_pullDown, /* Master Receive Slave Transmit Pin (MISO) */
IfxPort_PadDriver_cmosAutomotiveSpeed2 /* Pad driver mode */
}

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @Bertxu

我感觉到可能无法跟硬件有关,dencodepdingestersheaderningOrsike,同时将主和从属各引擎脚本连接后,用了 SEPIONPOSTER 或者 LOGIC 分析看一下MTSR脚本的变化过程。

BR,

杰里米

0 点赞