我尝试将 ADC 连接到评估模块的 SPI、并通过 SPI DMA 将数据传输到存储器。 这是我的应用代码。 我在 SPI 回送模式下尝试过这完全相同的代码、似乎数据正从 srcBuf 正确传输到 dstBuf。 我无法使 ADC 正常工作、此时我甚至不确定它是否正常工作、但我有一些观察结果让我感到担忧。
我 看到时钟和从 DSP 生成的数据输出信号、但从 ADC 传入的数据始终为零。 无论 ADC 工作与否、我希望 DSP 从该线路读取0、但它始终读取0xFFFF。
2. 在 Test_EDMA 函数中、当我在清除 IPR 后放入断点时、我看不到它被清除。 我也看不到 Eer 寄存器被设置。
uint32_t pinDirection = GPIO_DIR_OUTPUT;
#define TEST_ACNT 2
#define TEST_BCNT 1
#define TEST_CCNT 1
#define RCVE_BCNT 100
#define TEST_SYCTYPE_AB 1
#define TEST_SYCTYPE_A 0
#pragma DATA_SECTION (dstBuf、".ddrData")
#pragma DATA_ALIGN (dstBuf、64)
UINT16 dstBuf[64];
#pragma DATA_SECTION (srcBuf、".ddrData")
#pragma DATA_ALIGN (srcBuf、 8)
uint16 srcBuf[40]={0x8、000、0x9、000、0x8、000、0x9、000、0x8、000、0x9、000、0x9、000、0x9、000、0x9、
000、000、0x9、000、000、0x9、
000、000、000、0x9、000、000、000、000、000、000、0x8、000、000、000、000、000、000、000、000、000、000、000、000、000、000、
000、000、0x9、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、0x1、000、000、0x1、000、000、0x1、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000、000
// EDMA 模块初始化
CSL_edma3Init (NULL);
// EDMA 模块打开
hModule = CSL_edma3Open (&moduleObj、CSL_TPCC_1、NULL、&EdmaStat);
if ((hModule =NULL)||(EdmaStat!=CSL_Sok))
{
printf ("错误:EDMA 模块打开失败\n");
return;
}
// SPI Tx 通道打开-通道2用于 Tx (SPIXEVT)
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;
if (CSL_edma3HwChannelSetupParam (hChannel0、chSetup.paramNum)!= CSL_Sok)
{
printf ("错误:EDMA 通道设置参数失败\n");
返回;
}
// 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);
ENABLE_EDMA_CHANNELS ();
}
void Setup_EDMA_Params_Rx (uint32 dstBuf)
{
//参数句柄打开
//打开所有句柄并使其保持就绪
paramHandle1 = CSL_edma3GetParamHandle (hChannel1、CSL_EDMA3_Cha_3、&EdmaStat);
paramHandle1_reload =(CSL_Edma3ParamHandle)(0x02724000);
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 (paramHandle1_reload、0);
CSL_edma3ParamSetup (
void Handle1、¶mSetup);CSL_edma3paramSetup (paramHandle1_reload、¶mSetup)
;paramsprams32}
参数保持打开/参数打开
= CSL_edma3GetParamHandle (hChannel0、CSL_EDMA3_Cha_2、&EdmaStat);
paramHandle0_reload =(CSL_Edma3ParamHandle)(0x02724080);
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、CSL_EDMA3_STATIC_DIS、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);paramSetup.linkBLD_param0
(param0);param3Handled_param0 (param0
);paramedHandel0 (param0);paramelHandel0 (param0) paramedHandel_param0 (param0
void Test_EDMA (void)
{
//等待中断
regionIpr.region = CSL_EDMA3_REGISE_GLOBAL;
regionIpr.intr = 0;
regionIpr.intrh = 0;
/CSL_edma3HwChannelControl (hChannel0、CSL_EDMA3_CMD_CHANGE_CLEARERR、NULL);
DO{CSL_edma3GetHwchStatus
(hModule、CSL_EDMA3_INTRIERR、NULL);QUERY{CSL_DETPREGERR
}while (((regionIpr.intr & 0x04)!= 0x04);//channel_2
do{
CSL_edma3GetHwStatus (hModule、CSL_EDMA3_query_INTRPEND、®ionIpr);
regionwhile ((regionIpr.intr & 0x08)!= 0x08);//channel_3//
清除暂挂中断*、CSTRIM_INDMAP3
;{_CLEAND_CLEANDR_CLE_INDMAP3}
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_Init (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_SPI< SPIGCR1 |=
CSL_SPI_SPIGCR1_LOOP_DISABLE< SPIDAT1=
<CSL_SPI_SPIDAT1_DFSEL_SHIFT| CSL_SPI_SPIDAT1_WDEL_ENABLE<<CSL_SPI_SPIDAT1_WDEL_SHIFT| 0x2<
<SPIFMT[0]=
<CSL_SPI_SPIFMT_SHIFTDIR_SHIFT|
<CSL_SPI_SPIFMT_POLARITY_SHIFT|
<CSL_SPI_SPIFMT_PHASE_SHIFT|
0xFF<<CSL_SPI_SPIFMT_PRESCALE_SHIFT|
0x10<<CSL_SPI_SPIFMT_CHARLEN_SHIFT| 0x41<
SPIDELAY=
0x0F< 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< SPIINT0 |=\
CSL_SPI_SPIINT0_DMAREQEN_ENABLE< SPIFLG & 0x00000200));
while (!(((((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIFLG & 0x00000100);
CSL_GPIO_setOutputData (hGpio、15);
}
void main (void)
{
int i;
//启动 GPIO 缓冲
区(dst_gpio+
);(0x64_gpio_gpio+)= 0xgpio+、gpio+(nuth);(nip+)
//为 SPI 传输设置 EDMA
Setup_EDMA_Init();
Setup_SPI_Init();
for (i=0;i<40;i++)
{
//为 SPI 传输启用 EDMA
Setup_EDMA_Params_TX (UINT32)(&srcBuf[i]);Setup_EDMA_Params_ats_TX (
UST_INT32)
;Setup_DR_[i_AUD32](/uint32])
//检查 EDMA 传输完成状态
Test_EDMA ();
}
//关闭 EDMA 通道/模块 */
Close_EDMA ();
((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIGCR1|=
<CSL_SPI_SPIGCR1_ENABLE_SHIFT; printf("end of test\n"); }
有人在我所做的工作中看到任何错误吗?
如果有任何意见、我将不胜感激。