原创 菜农对23xx的中断体系的10点请教意见

2006-12-31 12:48 5236 12 12 分类: MCU/ 嵌入式


hotpower 发表于 2006-12-31 12:34 ZLG-ARM ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

5楼: 一群倒塌的水友,连菜鸟和水鸟也不让当---晕!!!


我是想请教各位老鸟和大鸟:

1.21xx与23xx的中断体系具体有多大的变动.
2.3.03a的软仿真有什么bug,如何解决.

虽然各位不让当就算了吧...郁闷之中.

眼红大鸟们有机会玩的高深,菜菜鸟我就直接对Keil自带的demo程序进行了软仿真,
结果(因为没做具体的研究,有错之处望包含)如下:

对..\MCB2300\RTX_Blinky\Blinky进行了分析,发现:
1.少LPC230x.h头文件,不知各位大鸟是否有???
  无奈该为LPC23xx.h讲究着用.
2.快速IO访问错误,硬件应该能运行,软仿真估计有bug,或鬼子故意搞得鬼.
  无奈将FIO改为IO.
3.最只能的bug是引发中断后,VICVectAddr竟然不能接收VICVectAddrxx的地址值.
  VICVectAddr恒为0,这就导致了任何的向量中断都会复位到0地址.
  无奈又想起了非典对付这些恶人的手段~~~所以就建立了非典构架的中断防御体系,并得到了成功.
4.可能鬼子听到了农民的呼声~~~,将VICVectAddr的地址位置增大,"声援"了农民的非典防御体系~~~
  但菜农还是对其不太满意,并且十分倒塌!!!VICVectAddr=0xfffffffc-4*32该多好呀~~~
5.废除了DefVectAddr,不过为什么还出现os_def_interrupt()的身影???
  实在是倒塌呀~~~
6.难道23xx的中断体系也换人了,那为什么不起NXP23xx的名号???
  发现:
  #define OS_TINIT()      PCONP |= (1<                        TIMx(MR0) = OS_TRV;                                    \
                        TIMx(MCR) = 3;                                         \
                        TIMx(TCR) = 1;                                         \
                        VICVectAddrX = (U32)os_clock_interrupt;
  难道不要: VICVectCntX  = 0x20 | OS_TID_;
  LPC交班的人没对NXP说清楚???(搞笑)
7.LPC23xx.h虽然有些起色,但没头脑不为软件设计谋利益的地址分配要是我的尿童,早让他卷铺盖走人~~~
  VICVectAddr只能是当前中断引发向量的地址值,为何不再搞个VICVectNumber为菜农的非典做出点小贡献~~~
  哈哈~~~估计他们就瞧不起我们农村人~~~
8.软仿真的bug不得不逼者在debug下用:
                LDR     PC, IRQ_Addr
  在run下用:
                LDR     PC, [PC, #-0x0120]     ; Vector from VicVectAddr
  即只能自己做一个入口的中断服务程序IRQ_Addr().
  由于VICVectAddr恒为0,VICVectAddrxx在中断入口也无法分清,好在鬼子还有点"良心",留了VICIRQStatus
  让我们可以用case倒腾~~~,不过中断级别就别指望了,好在这种细微的差别不影响全局,先这样对付,耐心等待软件升级吧.
9.经过2个小时的研究,菜农终于建立了23xx下的非典框架及新的防御体系,并软件模拟成功.
Vectors         LDR     PC, Reset_Addr         
                LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, PAbt_Addr
                LDR     PC, DAbt_Addr
                NOP                            ; Reserved Vector
                LDR     PC, IRQ_Addr
;倒塌了
;                LDR     PC, [PC, #-0x0120]     ; Vector from VicVectAddr
                LDR     PC, FIQ_Addr
Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;               LPC23xx非典FLASHROM的中断向量表架构
                IMPORT  VIC_Vect_Addr0
IRQ_Handler     STMFD   SP!, {R11, R12, LR};真保护R11R12, 假保护LR(用于运算)
;//                LDR     R12, VIC_Vect_Addr   ;取VICVectAddr物理地址
;//                LDR     R12, [R12]        ;取出取VICVectAddr内实际向量中断号(非地址)
                LDR     R12, [PC , #-0x14c];取出取VICVectAddr内实际向量中断号(非地址)
                AND     R12, #0x1f      ;防止32个中断序号越界,在此可再做序号越界处理(可省略)
                LDR     R11, =VIC_Vect_Addr0
                LDR     R12, [R11, R12, LSL #2];散转到用户真正的向量中断地址
                STR     R12, [SP, #0x08];将中断向量地址R12写入事先保存的那个LR空间
                LDMFD   SP!, {R11, R12, PC};恢复R11R12,同时PC跳入中断向量地址执行
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  可以看出新体系比原先少一行程序,也意味着快了点.如果鬼子听农民的话,最多4条指令即可搞定.
10.因为无硬件仿真,菜鸟就梦游到此吧...
   祝各位老鸟们节日愉快~~~菜农会尽快给大家培养出来搞笑的蔬菜来的...
   新的LPC23xxdef.h将会很快出水,欢迎各位慢用.



20061231123435659.jpg

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条