主题 : 求解,最新的mini2440按键中断是不是已经换了 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 56100
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2011-09-29
最后登录: 2011-10-18
楼主  发表于: 2011-10-10 23:13

 求解,最新的mini2440按键中断是不是已经换了

最近在学习韦东山老师的《嵌入式Linux应用开发》。
在第9章节中,《中断体系结构》

K1,K2,K3,K4分别对应EINT19, EINT11,EINT2,EINT0.

GPIO分别对应K1->GPG11  K2 ->GPG3  K3 ->GPF2 K4 -> GPF0

但是在mini2440用户手册中确是如下所述:

K1                 K2                          K3                           K4                                 K5                              K6
EINT8           EINT11                 EINT13                   EINT14                        EINT15                     EINT19
GPG0           GPG3                    GPG5                      GPG6                           GPG7                       GPG11

难道这本书里面的板子不是mini2440,  这样不就可能使用按键来测试中断的priority了。  郁闷。



还有, 对里面有一行代码很是费解

/*
*
*  设定优先权
*  ARB_SEL0  = 00b, ARB_MODE0 = 0    REQ1 > REQ3,  也就是EINT0 > EINT2
*  仲裁器1, 6无需设置
*  最终
*   EINT0 > EINT2 > EINT11, EINT19, 也就是  K4 > K3 > K1, K2   EINT11与EINT19优先权相同。
*   因为EINT11与EINT19通过使用 ARBITER1的REQ1
*/

PRIORITY = (PRIORITY & ( (~0x01) | (0x3 << 7)))   |   (0x0 << 7);


PRIORITY[20:7]对应7个仲裁器的ARB_SEL位, [7:8]对应ARB_SEL0,以此类推。
PRIORITY[6:1]对应7个仲裁器的ARB_MODE位, [0]对应ARB_MODE0,以此类推。

既然按照他这么说, 我觉得安全可以设置成
PRIORITY = 0;

上面的我分析如下:

步骤1:0x01取反得到如下
  31.......................................................................0
0b11111111 11111111 11111111 11111110


步骤2:(~0x01) | (0x3 << 7)
  31.........................................................7.............0
0b11111111 11111111 11111111 11111110
0b00000000 00000000 00000001 10000000
或操作结果------------------------------------------------
0b11111111 11111111 11111111 11111110

这步就感觉多余了, 不就是想把PRIORITY中的[0]位设置成0么

步骤3:(PRIORITY & ( (~0x01) | (0x3 << 7)))  
从步骤2得到的结果相当于将PRIORITY[0]设置成0了。


步骤4:(PRIORITY & ( (~0x01) | (0x3 << 7)))   |   (0x0 << 7);
这步就更加荒唐了, 相当于什么都没有做。注视中明明说了要讲ARB_SEL0设置成0x00的。

我估计应该改成:
(PRIORITY & (~0x01) )   &   (~(0x3 << 7));

这样就保证了ARB_SEL0设置成了00,以及ARB_MODE0设置成了0

以上是个人理解,希望大家可以展开讨论,看我以上分析是否正确。




arm9论坛获取密码难。 建议使用邮箱获取密码!