请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMDSEVM6678 工具/软件:TI-RTOS
我有这个需要处理 EDMA3中断的 SYS/BIOS 应用。 我有一个使用 CSL 的单独 SPI EDMA 示例、该示例工作正常。 我尝试为 EDMA3添加 Hwi、我猜 Hwi 和 CSL 之间存在冲突、但我没有足够的知识来解决这一问题。
EDMA 似乎在这里工作、ISR 首次运行、但即使重新启动同一应用程序、它也不会通过 ISR、除非我复位电路板。 但是、我看到数据正在传输到存储器。
以下是应用程序:
void main()
{
int i = 0;
//初始化 EDMA 以进行 SPI 传输
Setup_EDMA_Init();
Setup_SPI_Init();
BIOS_start(); /*启用中断并启动 SYS/BIOS */
}
void master_main ()
{
int16 k、i、CoreID、status;
Task_Handle 任务;
ERROR_Block EB;
Task_Params 参数;
int time1、time2、delta;
ERROR_INIT (&EB);
CoreID = CSL_chipReadReg (CSL_CHIP_DNUM);
System_printf ("内核 ID %d\n"、CoreID);
if (CoreID ==0)
{
Hwi_Params_init (hwiParams);
hwiParams.EventID = 3;
hwiParams.arg = 1;
hwiParams.enableInt = false;
//不允许此中断嵌套自身
hwiParams.maskSetting = Hwi_MaskingOption_self;
myHwi = Hwi_create (15、EdmaISR、&hwiParams、&EB);
if (myHwi = NULL){
system_printf ("hwi_creat()失败!\n");
}
//为 SPI 传输设置 EDMA
Setup_EDMA_Init();
//配置 SPI 并启用 DMA 中断支持
Setup_SPI_Init();
Hwi_enableInterrupt (15);
//为 SPI 传输启用 EDMA
Setup_EDMA_Params_TX ((UReg32) srcBuf);Setup_EDMA_Parfor_SPIC0
(*_SPIC_EN_SP_TRK~)*(u_SPIC_SP_INTRK)<* 0)*_SP_INTRK (u_INTRK (u_SP_SDK_INTRK (u_SP_SDK_INTRK)*)*(u_INTRK (u_SDK_INTRK)* SPIINT0 |= CSL_SPI_SPIINT0_DMAREQEN_ENABLE<<CSL_SPI_SPIINT0_DMAREQEN_SHIFT; }
Task_Params_init (¶ms);
for (i=0;i "task_create()="" failed!\n");="" bios_exit(0);="" }="" void="" enable_edma_channels(void)="" enable="" channel="" csl_edma3hwchannelcontrol(hchannel0,csl_edma3_cmd_channel_enable,null);="" csl_edma3hwchannelcontrol(hchannel1,csl_edma3_cmd_channel_enable,null);="" setup_edma_init="" (void)="" edma="" module="" initialization="" csl_edma3init(null);="" open="" hmodule="CSL_edma3Open(&moduleObj,CSL_TPCC_1,NULL,&EdmaStat);" spi="" tx="" -="" 2="" for="" (spixevt)="" chparam.regionnum="CSL_EDMA3_REGION_GLOBAL;" chsetup.que="CSL_EDMA3_QUE_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);="" rx="" 3="" (spirevt)="" hchannel1="CSL_edma3ChannelOpen(&ChObj1," csl_edma3_cha_3;="" csl_edma3hwchannelsetupparam(hchannel1,chsetup.paramnum);="" enable_edma_channels();="" setup_spi_init="" *="" reset="" ((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_SCS0FUN1_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|
0x8<<CSL_SPI_SPIFMT_CHARLEN_SHIFT| 0x3f<
SPIDELAY=
0x0F< SPIDEF=
//<CSL_SPI_SPIDEF_CSDEF0_SHIFT;
CSL_SPI_SPIDEF_CSDEF0_HIGH<1;
((CSL_SpiRegsOvly) CSL_SPI_regs)->SPIINT0 =
CSL_SPI_SPIINT0_ENABLEHIGZ_ENABLE_ENABSPI_SPIINT_SPI_SHIFT_SPINT_SPICT_SPI_0_SPICT_SPINT_SPICT_SPICT_SPICT_SPINT_SPICT_SPI__SPICT_SPICT_SPT_SPICT_SPICT_SPT_SPICT_ENA|<CSII_SPIN_SP_SP_SP_SPIN_SP_SP_SPINT_SPINT_SPINT_SPICT_SPT_SPICT_SPICT_SPT_SPT_SPICT_SPICT_SPICT_SPICT_SPT_SPICT_SPT_SPICT_SPICT_SPICT_SP_ENA|<SP_SPT_SPT_SPT_SPICT_SPICT_SPICT_SPICT_SPT_SPICT_SPT_SPICT_SPICT_SPICT_SPICT_SP_SPICT_SPIC
SPIGCR1|=
CSL_SPI_SPIGCR1_ENABLE_ENABLE< 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 close_edma()
{
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 EdmaISR (UARg arg0)
{
static uint16 i;
regionIpr.region = CSL_EDMA3_region_global;
regionIpr.intr = 0;
regionIpr.intrh = 0;
System_printf ("输入的 EDMA ISR!\n");
//清除暂挂中断*/CSL_edma3HwControl
(hModule、CSL_EDMA3_CMD_INTRPEND_CLEAR、®ionIpr);
HW_WR_REG32 (EDMA_U_BASE_GLOBAL + EDMA_TReg_ICR_RN、0x000c);
//关闭 CSAM_REG32 (EDMA_SDK_REG0
)~*禁用 SPIC_SPIC_SPIC_SPICR_DR_R*(SPIC_SPIC_SPIC_SPIC_SPIC_SPIC_SPIC_RESTOR_SPIC_SPIC_SPIC_SPIC_SPIC_SPIC_RESTR_TRIPR);//*(*_SPIC_SPIC_SPIC_SPIC_ SPIGCR1 &=~Ω(CSL_SPI_SPIGCR1_ENABLE_ENABLE<<CSL_SPI_SPIGCR1_ENABLE_SHIFT); }
请告诉我如何更改我的代码、以免发生冲突!
我感谢你的任何帮助。