打印

在贴 MDK FOR ARM 2440 启动 注解请教2级中断地址

[复制链接]
楼主: itelectron
手机看帖
扫描二维码
随时随地手机跟帖
21
不要打击人哦,呵呵

使用特权

评论回复
22
itelectron|  楼主 | 2009-12-11 19:28 | 只看该作者
偶现在是明白了 但是还是不干十分确定 关键是不好调试 在 看 MMU 换缓存!弄明白只是时间问题 关键是时间
偶E文太差 不然 ....
我以为   ISR的地址 固定的  如果没有 配置过 协处理器 和 MMU 的话他的地址是0X18
如果发生中断 硬件自动 跳到 ISR的地址0X18处 然后 根据0x18处的内容 跳到_ISR_STARTADDRESS+rINTOFFSET 处执行中断处理函数
所以 _ISR_STARTADDRESS 这个地址是可以 自己定
(另外_ISR_STARTADDRESS 要和 汇编中启动代码的哪个IntVTAddress相同)

使用特权

评论回复
23
itelectron|  楼主 | 2009-12-11 19:30 | 只看该作者
真正起到2级中断的 判定 是rINTOFFSET 这个寄存器.

使用特权

评论回复
24
itelectron|  楼主 | 2009-12-11 19:32 | 只看该作者
---------------------------------------------
IRQ_Entry
                sub    sp,sp,#4       ;预留返回指针的存储位置
                stmfd  sp!,{r8-r9}            ;存指针
                ldr    r9,=INTOFFSET        ;
                ldr    r9,[r9]                ;载入INTOFFSET
                ldr    r8,=HandleEINT0        ;加载2级中断向量表基地
                add    r8,r8,r9,lsl #2    ;计算中断处理表的入口地址 ??装载中断处理函数的指针??
                ldr    r8,[r8]                ;装载中断处理函数的地址
                str    r8,[sp,#8]                ;将中断处理函数的地址存入刚才预留的位置,r8和r9的上面
                ldmfd  sp!,{r8-r9,pc}    ;出栈后,pc指向的既是中断处理函数的地址         
                ENDIF
-------------------------------------------------------------------------------------

上面的哪个代码是 一个加载 2级中断向量表的 过程

使用特权

评论回复
25
itelectron|  楼主 | 2009-12-11 19:33 | 只看该作者
本帖最后由 itelectron 于 2009-12-11 19:38 编辑

2440 的2级中断 可以这么 理解
类似 51 外扩中断
假设51外扩一个 38译码器(用于外扩中断)   3根进入  IO 口 相或  然后给51外部中断
当中断产生 51硬件响应中断  然后查询那3个IO  来判定是哪个 扩展中断.
至于那3个IO 用户字定.

使用特权

评论回复
26
xinzha| | 2009-12-11 21:11 | 只看该作者
楼主的勤奋好学令人钦佩啊。

使用特权

评论回复
27
itelectron|  楼主 | 2009-12-12 10:09 | 只看该作者
本帖最后由 itelectron 于 2009-12-12 11:18 编辑

TO 18楼这个是 MDK 下的 裸奔的代码 是基与QQ2440+nec lcd开发板的如果要实现中断的话 还要 下把启动代码部分烧些 NAND启始地址

MDK 2440.rar

767.72 KB

使用特权

评论回复
28
itelectron|  楼主 | 2009-12-12 10:11 | 只看该作者
目前 缺少 一个 系统 可科学的 学习方法!

使用特权

评论回复
29
xinzha| | 2009-12-12 11:21 | 只看该作者
一起学习吧,我也是今年才开始接触的arm。

使用特权

评论回复
30
itelectron|  楼主 | 2009-12-12 13:03 | 只看该作者
郁闷 开了MMU 后 一进中断 程序 就跑飞了
4 : Test Touchpanel
5 : Test TFT-LCD or VGA1024x768 module
4ADC touch screen test

Type any key to exit!!!

Stylus Down, please......
Undefined instruction exception!!!

使用特权

评论回复
31
itelectron|  楼主 | 2009-12-12 13:05 | 只看该作者


2440test04.rar (862.27 KB) T

使用特权

评论回复
32
itelectron|  楼主 | 2009-12-12 13:10 | 只看该作者
T 29楼 一起交流:handshake

使用特权

评论回复
33
itelectron|  楼主 | 2009-12-12 13:15 | 只看该作者
脚本

使用特权

评论回复
34
xinzha| | 2009-12-12 15:05 | 只看该作者
不开MMU就没问题?
在MMU_Init中有这么一句   
MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);   //bank6-3
这个起始和结束相等,不知道会发生什么。
而代码中设置的中断向量表就在这个区域内。可以在打开mmu的情况下,监视一下0x33ffff00开始的地址的值是否正确来判断到底发生了什么。

使用特权

评论回复
35
itelectron|  楼主 | 2009-12-12 15:11 | 只看该作者
//MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
    //MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB);  //bank0
    MMU_SetMTT(0x00000000,0x03ffffff,0x30000000,RW_CB);  //bank0
    MMU_SetMTT(0x04000000,0x07f00000,0x04000000,RW_NCNB);                          //bank0

    //MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB);  //bank1
    //MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
    //MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
    //MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CB); //bank4
    //MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CNB); //bank4 for STRATA Flash
    //MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
    //30f00000->30100000, 31000000->30200000
    //MMU_SetMTT(0x30000000,0x30100000,0x30000000,RW_CB);          //bank6-1
    //MMU_SetMTT(0x30200000,0x33e00000,0x30200000,RW_NCNB); //bank6-2
    //
    //MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);   //bank6-3
    //MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
   
    //MMU_SetMTT(0x40000000,0x47f00000,0x40000000,RW_NCNB); //SFR
    //MMU_SetMTT(0x48000000,0x5af00000,0x48000000,RW_NCNB); //SFR
    //MMU_SetMTT(0x5b000000,0x5b000000,0x5b000000,RW_NCNB); //SFR
    MMU_SetMTT(0x5b100000,0xfff00000,0x5b100000,RW_FAULT);//not used

使用特权

评论回复
36
itelectron|  楼主 | 2009-12-12 15:12 | 只看该作者
这样设置
然后在把  启动代码 下载到NAND的前4K 就正常了

使用特权

评论回复
37
itelectron|  楼主 | 2009-12-12 15:14 | 只看该作者
本帖最后由 itelectron 于 2009-12-12 15:28 编辑

如果不下载启动代码到NAND还是不行
也就是说在设置为NAND启动的时候    不接NAND FLASH(NAND模式会自动复制前4K)  
且只接RAM (0X30000000-0X34000000) 的话 是不可以调试中断的?????

使用特权

评论回复
38
itelectron|  楼主 | 2009-12-12 15:15 | 只看该作者
4 : Test Touchpanel
5 : Test TFT-LCD or VGA1024x768 module
4ADC touch screen test

Type any key to exit!!!

Stylus Down, please......
count=000  XP=0582, YP=0637
count=001  XP=0460, YP=0604
count=002  XP=0629, YP=0385

使用特权

评论回复
39
itelectron|  楼主 | 2009-12-12 15:17 | 只看该作者
头晕了
我从 ADS1.2 下的 代码    移植到MDK的
因为我用的是ULINK2

使用特权

评论回复
40
itelectron|  楼主 | 2009-12-12 15:23 | 只看该作者
2440ADS.rar (1.29 MB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则