6025|11

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:我在src/common/intr.c里定义一个全局变量来保存中断号,怎样才能在我自己的驱动里引用这个变量? [复制链接]

我要写一个键盘驱动,
首先在src/common/intr.c里定义了一个全局变量“volatile UINT32 g_keyIntIrq”用来记录发生中断的引脚;
怎样才能在我自己的驱动程序文件platform\smdk2440a\src\drivers\keybd\kbdcommon\S3c2440kbd.cpp里使用这个变量?


现在链接时,出错信息为:
BUILD: [01:0000000069:ERRORE] S3C2440KBD.lib(s3c2440kbd.obj) : error LNK2001: unresolved external symbol "unsigned int volatile g_keyIntIrq" (?g_keyIntIrq@@3IC)
BUILD: [01:0000000070:ERRORE] D:\WINCE500\platform\smdk2440a\target\ARMV4I\retail\KbdS3C2440Jpn1.dll : fatal error LNK1120: 1 unresolved externals

最新回复

一、在Bsp_cfg.h定义一个系统终端号。 例如:     // Static SYSINTR Mapping for driver.     #define SYSINTR_OHCI            (SYSINTR_FIRMWARE+1)     #define SYSINTR_HSMMC            (SYSINTR_FIRMWARE+2)     #define SYSINTR_DM9000          (SYSINTR_FIRMWARE+3) 二、intr.h里面定义硬件终端号, 例如:      #define IRQ_EINT0           0           // Arbiter 0     #define IRQ_EINT1           1     #define IRQ_EINT2           2     #define IRQ_EINT3           3     #define IRQ_EINT4_7         4           // Arbiter 1     #define IRQ_EINT8_23        5     #define IRQ_CAM             6     #define IRQ_BAT_FLT         7     #define IRQ_TICK            8     #define IRQ_WDT_AC97        9     #define IRQ_TIMER0          10          // Arbiter 2     #define IRQ_TIMER1          11     #define IRQ_TIMER2          12     #define IRQ_TIMER3          13     #define IRQ_TIMER4          14     #define IRQ_UART2           15 三、在BSPIntrInit()函数里吧系统终端号和硬件中断号映射起来, 映射使用函数OALIntrStaticTranslate(SYSINTR_DM9000, IRQ_EINT11); 其中SYSINTR_DM9000为系统终端号,IRQ_EINT11为硬件终端号。 希望对你有帮助!!!!!!!!!!!  详情 回复 发表于 2009-5-11 21:22
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
或者这么问:ISR怎样传递数据给IST?
我知道一个中断会被转换为SYSINTR,并且发送事件给IST;
但是我想传递更细节的东西,比如可以在ISR里识别出是那个引脚引发这个中断(触发同一个中断的来源可能有多个),
这个引脚在ISR里可以轻易辨别,但是在IST里就比较麻烦,
ISR怎么把这个信息传给IST?
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
ISR和IST的中断号并不需要自己传递,
它的对应关系是通过SYSINTR和EVENT实现的。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
extern
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
你可以认为我要传递的不是“中断号”而是其他东西,
问题回到:ISR如果传递数据给IST

另:用extern的方法并不行
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 sunrain_hjb 的回复:
ISR和IST的中断号并不需要自己传递,
它的对应关系是通过SYSINTR和EVENT实现的。


我也觉得是,楼主没有必要这样吧。

如果楼主,一定,就在 物理中断号定义的地方加入即可,因为物理中断号是可以再OAL和驱动中使用的,所以是同一个道理。

good luck
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
不要执着于我要传递的是“中断号”,如果要传其他东西呢?
有高手告诉我:
“用IOCONTROL,自定义IOCONTROL函数”

哈,这应该是个好方法!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
如果是中断号,即使是多个不同的SYSITR也是可以用EVENT对应吧。

如果是其他的数据,IOCONTROL是个解决办法,它能实现OAL和内核之间的数据传递。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

9
 
intr.c定义的是:硬件中断号
bsp_cfg.h中定义的是:系统中断号

中断是映射机制,不是引用关系
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
如果要讨论中断,那么我就就说说我的情况:
1. 我做的是键盘驱动,它有10个中断引脚
2. 系统自带的键盘驱动,只使用一个中断引脚,对应一个SYSINTR,对应一个event
3. 我并不想大改驱动,所以在OEMInterruptHandler里面,如果发现发生了这“10个中断”,那么我就都只返回同一个SYSINTR
4. 在键盘处理程序里,再分辨发生了“10个中断”中的哪一个,转换键值
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
3.楼主,多个物理中断可以对应一个逻辑中断的。

 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

12
 
一、在Bsp_cfg.h定义一个系统终端号。
例如:
    // Static SYSINTR Mapping for driver.
    #define SYSINTR_OHCI            (SYSINTR_FIRMWARE+1)
    #define SYSINTR_HSMMC            (SYSINTR_FIRMWARE+2)
    #define SYSINTR_DM9000          (SYSINTR_FIRMWARE+3)

二、intr.h里面定义硬件终端号,
例如:
     #define IRQ_EINT0           0           // Arbiter 0
    #define IRQ_EINT1           1
    #define IRQ_EINT2           2
    #define IRQ_EINT3           3

    #define IRQ_EINT4_7         4           // Arbiter 1
    #define IRQ_EINT8_23        5
    #define IRQ_CAM             6
    #define IRQ_BAT_FLT         7
    #define IRQ_TICK            8
    #define IRQ_WDT_AC97        9

    #define IRQ_TIMER0          10          // Arbiter 2
    #define IRQ_TIMER1          11
    #define IRQ_TIMER2          12
    #define IRQ_TIMER3          13
    #define IRQ_TIMER4          14
    #define IRQ_UART2           15

三、在BSPIntrInit()函数里吧系统终端号和硬件中断号映射起来,
映射使用函数OALIntrStaticTranslate(SYSINTR_DM9000, IRQ_EINT11);
其中SYSINTR_DM9000为系统终端号,IRQ_EINT11为硬件终端号。

希望对你有帮助!!!!!!!!!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表