您好!
我正在尝试让 ADC 板在4线模式下通过 SPI 向评估板发送数据。 以 SPI DMA 环回为例、将其更改为只通过 SPI 向 ADC 发送一个字是行不通的、我无法找出原因。 运行代码后、我看不到任何时钟或片选信号、它会卡在"Test_EDMA"函数中来自 DMA 的发送中断的 while 环路中。 似乎什么都没有发生。 我不确定是应该在 SPICLK 引脚上看到连续时钟、还是只能看到一个时钟、但我仍然看不到任何东西、我不知道如何调试。 这是我正在运行的代码;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define TEST_ACNT 2
#define TEST_BCNT 1
#define TEST_CCNT 1
#define TEST_SYCTYPE_AB 1
#define TEST_SYCTYPE_A 0
#define BUF_SIZE TEST_BCNT
UINT16 dstBuf[2];
UINT16 srcBuf[2]={0、0x80};
typedef volatile CSL_SpiRegs * CSL_SpiRegsOvly;
void Trigger_EDMA_channels'(void)
{
//
触发通道 CSL_edma3nL
、UCC32_chtchtchine_chtch4、UCC32_chtine_tchtchine_tandtch4 (void);1、UCC32_chtchtchtchtchine_tchine_tchine_tchine_tchine_tand_chine_tandtandtchine_tand_deCM4 (void) 1、1、1、1、1、tinchinchinch
// EDMA 模块初始化
CSL_edma3Init (NULL);
// EDMA 模块打开
hModule = CSL_edma3Open (&moduleObj、CSL_TPCC_1、NULL、&EdmaStat);
// SPI Tx 信道打开- Tx (SPIXEVT)的通道2
chParam.regionNum = CSL_EDMA3_REGION;
chSetup.que = CSL_EDMA3_QE_0;
chParam.chaNum = CSL_EDMA3_CHA_2;
hChannel0 = CSL_edma3ChannelOpen (&ChObj0、CSL_TPCC_1、&chParam、&EdmaStat);
chSetup.paramNum = chParam.chaNum;/CSL_EDMA3_CHA_2;
CSL_edma3HwChannelSetupParam (hChannel0、chSetup.paramNum);
// SPI Rx 通道打开- Rx (SPIREVT)的通道3
chParam.regionNum = CSL_EDMA3_REGAL_GLOBAL;
chSetup.que = CSL_EDMA3_QE_0;
chParam.chaNum = CSL_EDMA3_Cha_3;
hChannel1 = CSL_edma3ChannelOpen (&ChObj1、CSL_TPCC_1、&chParam、&EdmaStat);
chSetup.paramNum = chParam.chaNum;/CSL_EDMA3_CHA_3;
CSL_edma3HwChannelSetupParam (hChannel1、chSetup.paramNum);
//参数句柄打开
//打开所有句柄并保持
其就绪 paramHandle0 = CSL_edma3GetParamHandle (hChannel0、CSL_EDMA3_Cha_2、&EdmaStat);
paramHandle1 = CSL_edma3GetParameterHandle (hChannel1、CSL_EDMA3_CHA_3、&EdmaStat);
paramSetup.aCntbCnt = CSL_EDMA3_CNT_make (test_ACNT、(test_BCNT));
paramSetup.srcDstBIDx = CSL_EDMA3_BIDX_make (test_ACNT、0);
paramSetup.srcDstCidx = CSL_EDMA3_paramX_make (0、Cnt);paramSetup
= test_CCNT;
paramSetup.option = CSL_EDMA3_OPT_make (false、false、false、true、CSL_EDMA3_CHA_2、CSL_EDMA3_TCC_NORMAL、\
CSL_EDMA3_FIFOWIDTH_NONE、false、CSL_EDMA3_SYNC_A、CSL_EDMA3_ADDRMODE_INCR、CSL_EDMA3_ADDRMODE_INCR);
paramSetup.srcAddr =(uint32)(srcBuf);
paramSetup.dstAddr =(uint32)&((((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIDAT0);
paramSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_make (CSL_EDMA3_LINK_NULL、0);paramL_edma3Setup
(paramHandle0);param0
paramSetup.aCntbCnt = CSL_EDMA3_CNT_make (test_acNT、test_bcNT);
paramSetup.srcDstBIDx = CSL_EDMA3_BIDX_make (0、test_ACNT);
ccsSetup.srcDstCidx = CSL_EDMA3_paramX_make (0、0、0);CIDESDP.Cnt.Setup.srcDstCidx = CSL_paramX.paramX_make
= test_CCNT;
paramSetup.option = CSL_EDMA3_OPT_make (false、false、false、true、CSL_EDMA3_CHA_3、CSL_EDMA3_TCC_NORMAL、\
CSL_EDMA3_FIFOWIDTH_NONE、false、CSL_EDMA3_SYNC_A、CSL_EDMA3_ADDRMODE_INCR、CSL_EDMA3_ADDRMODE_INCR);
paramSetup.srcAddr =(uint32)&((((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIBUF);
paramSetup.dstAddr =(uint32) dstBuf;
paramSetup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_make (CSL_EDMA3_LINK_NULL、0);
CSL_edma3ParamSetup (paramHandle1、¶mSetup);
Trigger_EDMA_channels ();
}
Test_EDMA (void
)等待中断/(void)
void Ipr.region = CSL_EDMA3_REGISE_GLOBAL;regionIpr.intr = 0;regionIpr.intrh = 0;// do{CSL_edma3GetHWStatus (hModule、CSL_EDMA3_QUEST_INTRPEND、®ionIpr);while (regionIpr.intr & 0x08)!= 0x08);// channel_EDMA3_QUEST_INTREND (0x04);while (regionIpr.intr
CSL_FINST (hModule->regs->TPCC_Secr、TPCC_TPCC_Secr_SECR2、RESETVAL);
CSL_FINST (hModule->regs->TPCC_Secr、TPCC_TPCC_Secr_SECR3、RESETVAL);CSL_FINN (h 模
块1);CSL_DMANE (3
void Setup_SPI (void)
{
/*重置 SPI */
(((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIGCR0=
CSL_SPI_SPIGCR0_RESET_IN_RESET< SPIGCR0=
CSL_SPI_SPIGCR0_RESET_OUT_ON_RESET< SPIGCR1=
<CSL_SPI_SPIGCR1_CLKMOD_SHIFT|
CSL_SPI_SPIGCR1_MASTER_MASTER< SPIPC0=
CSL_SPI_SPIPC0_SOMIFUN_SPI<<CSL_SPI_SPIPC0_SOMIFUN_SHIFT|
CSL_SPI_SPIPC0_SIMOFUN_SPI<<CSL_SPI_SPIPC0_SIMOFUN_SHIFT|
<CSL_SPI_SPIPC0_CLKFUN_SHIFT|
CSL_SPI_SPIPC0_SCS0FUN0_SPI< SPIGCR1 |=
CSL_SPI_SPIGCR1_LOOP_DISABLE< SPIDAT1=
CSL_SPI_SPIDAT1_DFSEL_FORMAT0< SPIFMT[0]=
<CSL_SPI_SPIFMT_WAITENA_SHIFT|
<CSL_SPI_SPIFMT_SHIFTDIR_SHIFT|
<CSL_SPI_SPIFMT_POLARITY_SHIFT|
<CSL_SPI_SPIFMT_PHASE_SHIFT|
0x1<<CSL_SPI_SPIFMT_PRESCALE_SHIFT|
0x10< SPIINT0 =
CSL_SPI_SPIINT0_ENABLEHIGHZ_ENABLEHIG0_ENABLEHIGHZ_SHIFT|CSL_SPIINT0_OVRNINT_SPINT_ENABLE_SPIC0_SPINT_SPIRINT_SPINT_SPICT_SPINT_SPINT_SPICT_SPINT_SPINT_SPINT_SPICT_SPINT_SPINT_SPICT_SPINT_SPINT_SPICT_SPINT_SPINT_SPICT_SPICT_ENA|_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPINT_SPICT_SPICT_SPINT_SPINT_SPINT_SPINT_SPICT_SPICT_SPINT_SPICT_SPINT_SPINT_SPICT_SPICT_SPICT_SPINT_SPINT_SPINT_SPICT_SPICT_SPICT_SPICT_SPICT_SPICT_
SPIGCR1|=
CSL_SPI_SPIGCR1_ENABLE_ENABLE< SPIINT0 |=
CSL_SPI_SPIINT0_DMAREQEN_ENABLE< SPIFLG & 0x00000200));
//while (!((((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIFLG & 0x00000100);
}
void main (void)
{
//设置 EDMA for SPI transfer
Setup_EDMA ((UINT32) srcBuf、(UINT32)
)/SPI
transfer status 和配置中断/tma/tma/dma/enable transfer completion
TEST_EDMA ();
//关闭 EDMA 通道/模块*/
close_EDMA ();
printf ("测试结束\n");
}
当我真的被骗了时,能有人帮我吗? 我感谢您的任何回应。