在我的 Linux 桌面上进行设置(通过 USB 连接至 K2GEVM 电路板)
Code Composer Studio 版本 12.5.0.00007
处理器_sdk_rtos_k2g_6_03_00_106/
TI-PROCESSOR-SDK-LINUX-k2G-EVM-06.03.00.106
BIOS_6_76_03_01
pdk_k2g_1_0_16
我正在尝试从 PRU (任何 PRU、但在本例中具体为 PR0_PRU0)生成到 K2G SOC 上 DSP 的中断。
在这个简单的示例中、我使用 K2GEVM 作为目标创建了一个新项目。 我使用"Empty Project"(使用 main.c)模板创建了 ARM、DSP 和 PRU 项目。
我启动 K2G 目标配置(删除.gel 文件)、然后连接到 ARM 并加载 evmk2g_arm.gel 文件。
然后运行 Scripts->Generic Functions->Global Default Setup (脚本->通用功能->全局默认设置)以设置功耗/时钟等、以便连接 PRU 并加载代码。
我连接至 DSP、然后加载并运行该 DSP 代码。
#define EVTFLAG0 (0x01800000)
/**
* main.c
*/
int main (空)
{
unsigned int oldEventFlags = 0;
unsigned int newEventFlags = 0;
INT 运行= 1;
while (正在运行)
{
//查找事件标志0寄存器中的任何更改
newEventFlags =*((unsigned int*) EVTFLAG0);
if (oldEventFlags != newEventFlags)
{
oldEventFlags = newEventFlags;
}
}
返回0;
}
我连接到 PRU、并加载并运行以下 PRU 代码:
Volatile register unsigned int __R31;
空延迟()
{
Volatile unsigned long int i;
对于(I=0;I< 0xFFFFFF;I++)
{
//延迟一个位
}
}
#define PRUSS_INTC_EISR_PRU_ICSS_0 (0x20AA0028)
#define PRUSS_INTC_HIEISR_PRU_ICSS_0 (0x20AA0034)
/**
* main.c
*/
int main (空)
{
__R31 = 0x00;
/*启用主机中断0 */
*((unsigned int*) PRUSS_INTC_HIEISR_PRU_ICSS_0)= 0;
//启用要通过 INTC 传播的系统事件
*((unsigned int*) PRUSS_INTC_EISR_PRU_ICSS_0)= 0x10;
INT 运行= 1;
while (正在运行)
{
__R31 = 0x20;
delay();
}
返回0;
}
EVTFLAG0寄存器似乎始终为0x08、我从未获得预期的 PRU 中断的事件标志。
K2G TRM (SPRUHY8I)、表6-37指示第4个事件是 PRU-ICSS_0主机中断0、因此我希望设置 EVTFLAG0中的位4。
我已尝试了__R31寄存器写入的低4位中从0到15的所有值。
我还尝试了 EISR 和 HIEISR 寄存器中的其他值、但尚未偶然发现任何值起作用、尽管我不清楚、如果需要设置这些值或默认值应该起作用的话。
如何获得(甚至有可能)从 PRU 到此器件上的 DSP 的中断?
-大卫