主题 : 6410 cp15一指令不明,请赐教 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 31364
精华: 0
发帖: 59
金钱: 295 两
威望: 59 点
贡献值: 0 点
综合积分: 118 分
注册时间: 2010-10-29
最后登录: 2017-09-13
楼主  发表于: 2012-03-02 18:30

 6410 cp15一指令不明,请赐教

;------------------------------------
;     Enable VIC Port
;------------------------------------
        mrc p15,0,r0,c1,c0,0
        orr r0,r0,#(1<<24)
        mcr p15,0,r0,c1,c0,0
将c1寄存器第24位置1,看了arm1176jzfs.pdf也搞不清楚在说什么,只好向大家求助了。

级别: 侠客
UID: 13690
精华: 0
发帖: 89
金钱: 445 两
威望: 89 点
贡献值: 0 点
综合积分: 178 分
注册时间: 2010-01-27
最后登录: 2015-10-28
1楼  发表于: 2012-03-05 16:34
这个值用来设定向量中断的。如果设置为0,中断方式跟arm9一样,中断发生,返回的0地址,读取中断服务程序地址,进入中断服务程序。如果设置为1,就用到向量中断,中断发生,可以不用调到中断向量表查中断了。可以直接接入中断服务程序。
级别: 侠客
UID: 31364
精华: 0
发帖: 59
金钱: 295 两
威望: 59 点
贡献值: 0 点
综合积分: 118 分
注册时间: 2010-10-29
最后登录: 2017-09-13
2楼  发表于: 2012-03-05 17:39
谢谢  那是不是这样  你看看我的理解对不
1、设置为0,IRQ发生以后,在IRQ服务程序里面需要二次查表进入相应的中断服务程序中,像2440test的处理一样。
2、设置为1,就使用VICxADDRESS 和 VICxVECTADDR[31:0]确定的地址,进入中断服务程序
级别: 新手上路
UID: 61955
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2012-01-11
最后登录: 2012-03-21
3楼  发表于: 2012-03-21 16:56
向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单。
         向量者,矢量也,即指方向,门路。
         向量中断——由硬件提供中断服务程序入口地址;
         非向量中断——由软件件提供中断服务程序入口地址
         向量中断模式用于RESET、NMI、异常处理。当向量中断产生时,控制器直接将PC赋值,如跳到0x0000000d处,而在0x0000000d地址处通常放置ISR服务程序地址LDR PC, =ISR_HANDLER。
        非向量中断模式,有一个寄存器标识位,跳转到统一的函数地址,此函数通过判别寄存器标识位和优先级关系进行中断处理。
        向量中断模式是当CPU读取位于0×18处的IRQ中断指令的时候,系统自动读取对应于该中断源确定地址上的指令取代0×18处的指令,通过跳转指令系统就直接跳转到对应地址函数中,节省了中断处理时间提高了中断处理速度。例如 ADC 中断的向量地址为0xC0,则在0xC0处放如下代码:ldr PC,=HandlerADC 当ADC中断产生的时候系统会自动跳转到HandlerADC函数中处理中断。
       非向量中断模式处理方式是一种传统的中断处理方法,当系统产生中断的时候,系统将INTPND寄存器中对应标志位置位,然后跳转到位于0×18处的统一中断函数中;该函数通过读取INTPND寄存器中对应标志位来判断中断源,并根据优先级关系再跳到对应中断源的处理代码中处理中断。其实,所有的非向量中断可以看成是一个向量中断