请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320C6748 我尝试运行一个简单的测试循环、但很明显、我不会清除中断、因为 PRU 以全速运行。 设置 PRU 的代码是
/*峰化 PRU 实例。 * PSCModuleControl (SOC_PSC_0_regs、HW_PSC_PRU、PSC_POWERDOMAIN_AYST_ON、 PSC_MDCTL_NEW_ENABLE); HWREG (SOC_PRUCORE_0_regs)= 0;//停止 PRU0 HWREG (SOC_PRUINTC_0_regs + PRU_INTC_CHANMAP0)= 3; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_CHANMAP1)= 12; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_HOSTMAP0)= 0x100; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_STATCLRINT0)=-1; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_HSTINTENIDXSET)= 0; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_HSTINTENIDXSET)= 1; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_GLBLEN)= 1; HWREG (SOC_PRUINTC_0_regs + PRU_INTC_ENABLESET0)= 0x1008; IRAM = SOC_PRUCORE_0_IRAM; 对于(i=0;i在 PRU 上加载(并运行)的代码如下:
* * INTC 和定时器0中断的简单测试 *最终将与 SPI 一起使用以收集数据 * .global main .text main: LDI R1、0x4024 ;指向 STATIDXCLR LDI R2的指针,3. ;定时器中断索引 LDI R3,30 ;要在 R31 LDI R4.w2、0x01c2中测试的位 ;定时器0 LDI R4.W0的高地址,0x0044 ;定时器0 INTCTLSTAT LDI R5的低地址,2. ;要写入 INTCTLSTAT 的值开始: qbbc start、R31、R3;R31中的位30是否置位? Sbbo &R1、R2、0、4 ;将3写入 STATIDXCLR sbbo &R4、R5、0、4 ;将2写入 INTCTLSTAT XOR r30.B3、r30.B3、4;切换 GPIO 6-8 JMP 启动 ;并等待下一个计时器中断 .end当我暂停处理器时、我可以通过直接写入 INTCTLSTAT 来清除中断、但 PRU 似乎不执行此操作。 我出了什么问题? Mike
编辑加法:
当我将0xffffffff 写入0x1c34200 (STATSETINT0)位置时、我 看到0xffffffff 结果(所有中断都被置位)。 然后、当我将0xffffffff 写入位置0x1c34280 (STATCLRINT0)时、位置0x1c34200会进入0x127ffff 而不是0x00000000。 PRU 是否有问题、或者这是否是其他寄存器未正确设置的良好线索??