在代码维护中遇到过这种问题,CPU訪问了corePac的外部内存空间0x75510C55地址,即CPU向corePac的L2内存控制器发起了对该内存的訪问,然后L2内存控制器将该请求发给corePac的XMC模块,XMC模块依据配置好的寄存器(即32bit虚拟地址到36位物理地址的映射与内存权限寄存器,每一个大小为16M的内存段用一个寄存器设置,每一个CPU均有相同的多个此种寄存器)检查该地址是否合法。发现该地址没有在不论什么一个这种寄存器中设置,即XMC将该内存视为非法地址。然会会通过L2内存控制器上报非法地址訪问。L2内存控制器通过system event 0x6E = 110来上报该错误(event 110与该类内存非法訪问MDMAError映射是固定的。參考corePac user guide 9.3节),用户能够在注冊给event 110的exception处理函数中做些自己的事情(如通常是主动将DSP的其它CPU也crash掉等,使整个DSP停止工作,这样保存了现场,易于问题的调查),系统会设置MDMAError寄存器,将错误类型在寄存器中显示给用户,如图中MDMAErr = 0x40000302,LSB 0x02就表示privilege error,即CPU对0x75510C55地址无权限訪问。
上述的检查机制由硬件实现。
以下解释下0x75510C55内存地址,当CPU要訪问corePac外部内存时。CPU发起的訪问均是32bit的虚拟地址。所以要想真正訪问到外部内存(如DDR)的物理地址,必须由前面提到的XMC模块映射为36bit物理地址。这里的0x75510C55就是CPU发起的32位虚拟地址,XMC会检測到该地址非法。同一时候由最后一张图可知(见TI C66x data manual table 2-2 Memory Map Summary。实际上该地址是reserved的,即CPU以及不论什么外设是不可以訪问reserved地址的,用户也不能拿这些reserved地址映射到物理地址上。当CPU訪问了这些reserved的地址,会报上面的错误的。
所以这里用户在XMC寄存器中没用映射0x75510C55地址。当然XMC检測时会觉得是非法地址。
|