- 积分
- 0
贡献0
飞刀0 FD
注册时间2016-5-6
在线时间0 小时
扫一扫,手机访问本帖
|
将编编译好的ucos文件,用u-boot的dnw命令下载到内存中区,go命令可以直接运行,但是这中间有个问题不明白,就是关于时钟中断的问题,看完了u-boot的源码没有发现使用中断。这样一来在ucos里面就要开中断,的确在time.c这个文件中看到了开time4中断,为IRQ中断,并且把中断向量表定义到了内存的最高位,那么就有一个问题了,中断发生后怎么处理的,按照以前的思路,当发生IRQ中断后,PC值强制为0x18,跳到那个地方去执行,而一般在内存0x18的地方有一条跳转命令跳到真正的中断处理程序。但是我们的内存中0x18处却没有指令,u-boot初始化的时候把自己搬到了内存的高位地址,即使开了MMU,我看到的u-boot源码是把虚拟地址0x00开始的地方映射到了物理地址0x50000000,也就是说物理地址0x50000000这个地址是没有异常向量表的。那么这样一来ucos程序是怎么处理这个中断的呢?
另外后来我看到网上有一篇文章讲的是6410的VIC port模式,可以开启向量中断。以前看LPC系列处理器的时候也有这个向量中断控制器,但是它也必须先跳到0x18处取指令,而在那个地址上放的指令是ldr pc,pc-#0xfe,好像是这么一条吧,计算一下这句程序刚好把向量中断控制器中的中断服务程序地址放到pc中,从而实现了pc一步跳到中断处理程序,另外说一下刚才说的向量中断控制器中的中断服务程序地址是VIC控制器自动送进去的,我们在使用中断的时候先将每个中断服务程序地址放到对应的专用中断地址寄存器,LPC系列一共16个专用的。当对应的中断发生的时候,这16个个专用地址寄存器中的值会被VIC控制器自动送到刚才所提到的那个通用的地址寄存器,这样每次pc中就总能装载正确的服务程序。网上的那篇文章说要使用这个功能就要操作p15协处理器的相应寄存器,在ucos中没找到这个操作,另外即使有了这样的操作,那么0x18这个地方还是没有跳转指令。或者还有一种可能就是6410的VIC更先进,也不需要到0x18地址上去跳转,而VIC控制器直接被送到了PC,这样说有点牵强,毕竟没有验证过。但是即使这样也没有见到操作p15的寄存器。请个位高手帮我解答这个问题,我在搞裸机程序,lcd移植到U-BOOT上成功了,但是触摸屏因为要中断,而现在就卡在中断这个地方没有往下做。 |
|