工具/软件:Code Composer Studio
您好!
我的应用是 SPI 至 EDMA、
CS 28.
CLK 29.
MOSI 30.
MISO 31.
•将 EDMA 传输完成代码中断的中断映射到主机中断 、并 在中断上升时调用 ISR (回调)函数。
EDMA 初始化函数:-
ui32HostIntr = 9;
/*特定于器件的 API,用于打开 CPINTC 实例并返回所有后续调用中使用的句柄*/
hCpintcHandle = CSL_CPINTC_open (CSL_CIC);
/*禁用所有主机中断。*/
CSL_CPINTC_DisableAllHostInterrupt (hCpintcHandle);
/*在 CPINTC 模块中配置无嵌套支持*/
CSL_CPINTC_setNestingMode (hCpintcHandle、CPINTC_NO_Nesting);
/*清除 GPINT23系统中断编号7 */
CSL_CPINTC_clearSysInterrupt (hCpintcHandle、GPIO_INT23);
/*将系统中断映射到通道*/
CSL_CPINTC_mapSystemIntraToChannel (hCpintcHandle、GPIO_INT23、channel);
CSL_CPINTC_mapChannelToHostInterrupt (hCpintcHandle、channel、ui32HostIntr);
CSL_CPINTC_enableHostInterrupt (hCpintcHandle、ui32HostIntr);
/*在 CIC2上启用 GPINT23系统中断编号7 *
CSL_CPINTC_enableSysInterrupt (hCpintcHandle、GPIO_INT23);
/*启用主机中断*/
CSL_CPINTC_enableHostInterrupt (hCpintcHandle、ui32HostIntr);
CSL_CPINTC_enableAllHostInterrupt (hCpintcHandle);
/*模块初始化*/
if (CSL_edma3Init (&hContext)!= CSL_Sok)
{
System_printf ("错误:EDMA 模块初始化失败\n");
退出(1);
}
/*模块级别打开*/
hEdma_SPI = CSL_edma3Open (&stEdmaObj、CSL_EMDMACC_4、NULL、EStatus);
if ((hEdma_SPI == NULL)||(EStatus!= CSL_Sok))
{
System_printf ("错误:EDMA 模块打开失败\n");
退出(1);
}
/*启用在 DRAE/DRAEH 中传递的参数中指定的位。 *
stDraeAttr.region = CSL_EDMA3_REGION;
stDraeAttr.drae = 1 <<通道;
stDraeAttr.draeh = 0x00;
CSL_edma3 HwControl (hEdma_SPI、CSL_EDMA3_CMD_DMAREGION_ENABLE、&stDraeAttr);
/*信道打开*/
stChAttr.regionNum = CSL_EDMA3_REGION;
stChAttr.chaNum =通道;
EStatus = 0;
hChannel = CSL_edma3ChannelOpen (&stChObj、CSL_EMDMACC_4、&stChAttr、&EStatus);
if ((hChannel =NULL)||(EStatus!=CSL_SOK)){
System_printf ("错误:无法打开 EDMA 通道:%d\n"、通道);
退出(1);
}
/*设置 EDMA 事件队列0 */
EStatus = CSL_edma3 HwChannelSetupQue (hChannel、CSL_EDMA3_Q_0);
/*为此通道设置的参数*/
EStatus = CSL_edma3HwChannelSetupParam (hChannel、Param_NUM);
/*获取参数集的句柄*/
hParam = CSL_edma3GetParamHandle (hChannel、param_NUM、&E);
if ((hParam =NULL)||(EStatus!=CSL_Sok))
{
System_printf ("Error: EDMA get parameter entry failed for 2.\n").
退出(1);
}
我能够通过一个内核上的 EDMA 代码使用 SPI 进行 SPI 读取和写入。 但 EDMA 不能在多个内核上同时工作、这意味着通过 EDMA 的 SPI 无法在多个内核上同时读取和写入。
•SPI 读取和写入成功,当 SPI 通过 EDMA 代码在 core0和 core2上进行测试时,具有相同的 EDMA 初始化函数(相同的通道),
•在 具有相同 EDMA 初始化功能(相同通道)的 core0和 core2上、通过 EDMA 代码的 SPI 无法同时工作。 当我同时在 core0和 core2处测试 SPI 至 EDMA 代码时、
在 core0.- SPI 读取和写入 成功 、并且 EDMA TPCC_IPR 中断调用 ISR funion。
但 SPI 读取和写入失败、并且 EdmaTPCC_IPR 中断未调用 ISR 函数。
我有一些疑问
-在多个内核中,是否可以在 同一通道中使用相同的 EDMA 初始化函数和 EDMA 初始化函数?
-如何同时在多个内核上通过 EDMA API 使用 SPI?
我们需要 在多个内核上同时通过 EDMA API 实现 SPI。 请指导我。
此致、
Bhavani。