TIwilliam hill官网
直播中

张琳

7年用户 159经验值
私信 关注
[问答]

请问该如何直接对IPR寄存器进行操作从而查询EDMA传输是否完成呢?

本帖最后由 一只耳朵怪 于 2018-6-25 11:10 编辑

各位6678的专家们好:
      最近在调试EDMA相关的程序时,在查询它的IPR寄存器的时候遇到下面一个问题,还请专家们指教。我在代码中定义了下面的寄存器
    #define CHIP_LEVEL_REG  0x02620000
    #define KICK0   *(unsigned int*)(CHIP_LEVEL_REG + 0x0038)
    #define KICK1   *(unsigned int*)(CHIP_LEVEL_REG + 0x003C)
    #define KICK0_UNLOCK (0x83E70B13)
    #define KICK1_UNLOCK (0x95A4F1E0)
    #define KICK_LOCK    0
    #define E0IPR    *(unsigned int*)(0x02701068)  //用于查询传输是否完成  CC0 Global的IPR
    #define E0ICR    *(unsigned int*)(0x02701070)  //用于清除相应位            CC0 Global的ICR

    加入某个EDMA的传输完成码TCC设为2,我在程序轮询该EDMA是否完成时使用的是下面的语句
    while((E0IPR>>1)&0x1 != 1)
   [
     (" nop ");
   ]
    但是在单步调试的时候却发现,这段代码并没有起作用,就是说即便此时IPR的值不为2,单步调试时也没有进入nop等待。想请教各位专家,该如何直接对IPR寄存器进行操作从而查询EDMA传输是否完成呢?
    谢谢!!!
     

回帖(2)

杨娟

2018-6-25 01:04:57
将IPR寄存器定义为volatile unsigned int *试试看,还有一个建议就是可以用相关的CSL获取EDMA instance寄存器地址,然后可以用CSL进行配置查询。
                                                                          

举报

张琳

2018-6-25 01:22:44
引用: zbb9612 发表于 2018-6-25 01:04
将IPR寄存器定义为volatile unsigned int *试试看,还有一个建议就是可以用相关的CSL获取EDMA instance寄存器地址,然后可以用CSL进行配置查询。
                                                                          

Andy 你好:
      我将寄存器的变量类型修改后还是不起作用,但是后来查询IPR的值我改用了
  do [      
 CSL_edma3GetHwStatus(hModule_Core0,CSL_EDMA3_QUERY_INTRPEND,®ionIntr_Core0);    
] while (!(regionIntr_Core0.intr & 0x2));
    然后清除相应位则还是用KICK寄存器组,这样可以满足我的需求
   谢谢Andy!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分