系统event 0~127(包含了eventCombiner的输出event 0~3)与CPU支持的12个可屏蔽中断是通过INTMUX寄存器进行映射的(不包含NMI.RESET).能够选择将系统event 0~127中的event通过INTMUX映射到某一个可屏蔽中断(INT4~15). TI C66x DSP每一个CPU有3个INTMUX寄存器(INTMUX 1~3),下图中的Interrupt selector的功能就是通过INTMUX寄存器实现的. watermark/2/text/aHR…
C66x DSP运行中断的简要流程: 1.使能了全局中断和子中断.假设硬件检測到中断发生,那么CPU就要跳转. 2.软件把CPU内部的A,B类寄存器的值等推入堆栈保存,把当前PC寄存器的值放入IRP寄存器中以备中断返回能找到当前被打断的位置. 3.CPU的PC指针读出中断向量表的地址,也就是把"ISTP寄存器的ISTB值+子中断向量偏移量"装入PC寄存器,这样就运行跳转. 4.在中断向量表里一般有就用跳转指令,这样就能够跳转到我们用C语言编写的中断服务子程序中.因为我们在一般的中断服务…
中断服务表指针ISTP(Interrupt Service Table Pointer)位置寄存器用于定位的中断服务例程,那ISTP去哪里找要运行的程序,ISTP(当中的ISTB字段)就是指向IST表的寄存器.ISTP中的一个字段ISTB确定IST的地址基数部分.还有一个字段HPEINT确定特定的中断并定位特定的取指包在IST中的位置.图6-4所看到的为ISTP的各字段.表6-2描写叙述了各字段及其怎样使用. 下图为ISTP寄存器,bit 0~4必须设置为0,即IST表的起始地址或者说获取包必须…
ISFP是服务中断的指令包,创建ISR的三种情况: 1.一个ISFP包的8条指令就能够满足ISR watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWl5ZWd1emhvdTEwMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 2,ISR能够占用多个连续的ISFP(前提是以下的中断没有使用) watermark/2/text/aHR0cDov…
以下解说在详细应用中,event与中断ISR的设置.以对QM的queue监控产生中断(不是EXCEP)为例,主要包含配置QM accumulator(用于监控QM queue)与配置ISR(ISR与event配置). 首先介绍QM accumulator的配置,QM模块中QMSS(包括QMSS Tx queue 800:831,Tx/Rx channel 0:31,RxChan,TxChan,Tx queue是一一相应的,如Tx queue是806,那么相应的TxChan与RxChan编号都是6…
当CPU開始处理一个中断(INT4~15)时,它将引用中断服务表(IST).IST是一个获取包括中断服务代码的包的表. IST包括16个连续的获取包.每个中断服务获取包(ISFP)包括最多14条指令(8个32bit nonheader-based 指令或者14个header-based 指令). 一个简单的中断服务程序能够放入一个独立的获取包中(也就是不用另外跳转到ISR了,14条指令足够了),若是一个ISFP不足以容纳ISR,须要再ISFP中设置跳转指令.使之跳转到ISR. 下图指示了IST的…
RESET中断的获取包必须位于0地址处,然后其它中断的获取包能够位于不论什么256字(1k字节边界)对齐的程序空间.IST的位置由ISTP寄存器中的ISTB字段决定. IST又一次定位举例: 1,将IST又一次定位到800h: 将地址0h~200h的源IST复制到800h~A00h中. 将800h写到ISTP寄存器中: MVK 800h,B2 MVC B2,ISTP 则ISTP = 800h = 1000 0000 0000b 2,ISTP引导CPU又一次定位的IST中去顶对应的ISFP(指令获…
CPU訪问corePac内部资源(L1.L2)时的内存保护(通过设置内存的訪问权限实现)等问题请參考以下两个blog.已经叙述的非常具体. "TI C66x DSP 系统events及其应用 - 2","TI C66x DSP 系统events及其应用 - 3".…
外设訪问corePac内部资源(L1,L2)时的内存保护等问题请參考以下两个blog.已经叙述的非常具体. "TI C66x DSP 系统events及其应用 - 2","TI C66x DSP 系统events及其应用 - 3".…
在代码维护中遇到过这种问题,CPU訪问了corePac的外部内存空间0x75510C55地址,即CPU向corePac的L2内存控制器发起了对该内存的訪问,然后L2内存控制器将该请求发给corePac的XMC模块,XMC模块依据配置好的寄存器(即32bit虚拟地址到36位物理地址的映射与内存权限寄存器,每一个大小为16M的内存段用一个寄存器设置,每一个CPU均有相同的多个此种寄存器)检查该地址是否合法.发现该地址没有在不论什么一个这种寄存器中设置,即XMC将该内存视为非法地址.然会会通过L2内存…