 |
s3c2410触摸屏在linux下的驱动分析二 |
|
 |
|
s3c2410触摸屏在linux下的驱动分析二 |
|
副标题:s3c2410触摸屏在linux下的驱动分析二 |
| 日期:2008-3-20 22:39:11 来源:雪竹的BLOG 编辑:51Touch |
|
接下来看一下A/D转换的中断处理函数: static void s3c2410_isr_adc(int irq, void *dev_id, struct pt_regs *reg) 其中参数irq 为中断号,dev_id 为申请中断时告诉系统的设备标识,regs 为中断发生时寄存器内容。该函数在中断产生时由系统来调用,调用时以上参数已经由系统传入。
在/kernel/include/linux/spinlock.h 文件中:
#define spin_lock_irq(lock) do{local_irq_disable();spin_lock(lock);}while (0) #define spin_unlock_irq(lock) do{spin_unlock(lock);local_irq_enable();}while(0)
#define DEBUG_SPINLOCKS 0 #if (DEBUG_SPINLOCKS < 1) typedef struct { } spinlock_t; #define SPIN_LOCK_UNLOCKED (spinlock_t) { } #define spin_lock_init(lock) do { } while(0) #define spin_lock(lock) (void)(lock) #define spin_unlock_wait(lock) do { } while(0) #define spin_unlock(lock) do { } while(0) 可见上面这四个宏函数都是空函数,这样的话spin_lock_irq(lock)和spin_unlock_irq(lock)这两个宏函数就相当于分别只调用了local_irq_disable();和local_irq_enable();两个宏函数。关于自旋锁的作用和概念可以参考一篇《Linux内核的同步机制》文章的相关章节。
在/kernel/include/asm-arm/system.h 文件中: #define local_irq_disable() __cli() #define local_irq_enable() __sti() 在/kernel/include/asm-arm/proc-armo/system.h 文件中:
#define __sti() \ do { \ unsigned long temp; \ __asm__ __volatile__( \ " mov %0, pc @ sti\n" \ " bic %0, %0, #0x08000000\n" \ " teqp %0, #0\n" \ : "=r" (temp) \ : \ : "memory"); \ } while(0)
#define __cli() \ do { \ unsigned long temp; \ __asm__ __volatile__( \ " mov %0, pc @ cli\n" \ " orr %0, %0, #0x08000000\n" \ " teqp %0, #0\n" \ : "=r" (temp) \ : \ : "memory"); \ } while(0)
|
|
|
| 对这篇文章您有更多的想法?
请去论坛发表意见吧
|
 |
“s3c2410触摸屏在linux下的驱动分析二” 的相关新闻 |
 |
|
|
|
|
|
 |
站内搜索 |
 |
|