当前位置: 技术问答>linux和unix
关于中断共享的问题:ADC 与触摸屏的中断共享
来源: 互联网 发布时间:2016-09-14
本文导语: 在论坛中看到有个哥们敲了段中断共享的程序,我截取了关键的部位: static void adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg) { if(strcmp(dev_id,DEVICE_NAME)!=0) return -1; wake_up(&adcdev.wait); } int __init s3c2410_adc_i...
在论坛中看到有个哥们敲了段中断共享的程序,我截取了关键的部位:
static void adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg)
{
if(strcmp(dev_id,DEVICE_NAME)!=0)
return -1;
wake_up(&adcdev.wait);
}
int __init s3c2410_adc_init(void)
{
int ret;
/* normal ADC */
ADCTSC = 0; //XP_PST(NOP_MODE);
ret = request_irq(IRQ_ADC_DONE, adcdone_int_handler, SA_SHIRQ, DEVICE_NAME, s3c2410_isr_adc);
if (ret) {
return ret;
}
我不理解的是到底dev_id是谁来赋值的,是内核还是写程序的人,然后赋的到底是什么值?
还有就是在中断处理函数中,怎么可以用if(strcmp(dev_id, DEVICE_NAME) !=0)
return -1
来判断到底是哪个中断???
如果是这样的话,就说了dev_id中的值是设备名咯?那这哥们什么时候将设备名写入到dev_id中,我怎么没看到???????
希望哪些高手看到我的发帖能给我一个解答,谢谢啊!!!
static void adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg)
{
if(strcmp(dev_id,DEVICE_NAME)!=0)
return -1;
wake_up(&adcdev.wait);
}
int __init s3c2410_adc_init(void)
{
int ret;
/* normal ADC */
ADCTSC = 0; //XP_PST(NOP_MODE);
ret = request_irq(IRQ_ADC_DONE, adcdone_int_handler, SA_SHIRQ, DEVICE_NAME, s3c2410_isr_adc);
if (ret) {
return ret;
}
我不理解的是到底dev_id是谁来赋值的,是内核还是写程序的人,然后赋的到底是什么值?
还有就是在中断处理函数中,怎么可以用if(strcmp(dev_id, DEVICE_NAME) !=0)
return -1
来判断到底是哪个中断???
如果是这样的话,就说了dev_id中的值是设备名咯?那这哥们什么时候将设备名写入到dev_id中,我怎么没看到???????
希望哪些高手看到我的发帖能给我一个解答,谢谢啊!!!
|
首先adcdone_int_handler(int irq, void *dev_id, struct pt_regs *reg) 第三个参数reg在2.6.18之后的内核不再使用了,应该删掉以免warning
这个dev_id就是为了区分共享同一中断的多个设备用的,其内容是自定义的
request_irq的第四个参数既传递给第二个参数的dev_id
但是,这么做是没有意义的,肯定会匹配,还是要读寄存器判断
这个dev_id就是为了区分共享同一中断的多个设备用的,其内容是自定义的
request_irq的第四个参数既传递给第二个参数的dev_id
但是,这么做是没有意义的,肯定会匹配,还是要读寄存器判断