高手们,你们好。我在写驱动的时候,遇到了一个问题。
s3c44B0X 外部中断2 EINT2, 我想让他只在下降沿触发。
于是我翻看了S3C44B0X的手册,其中第8-15页 有个寄存器
Register * Address * R/W * Description * Reset Value
EXTINT * 0x01D20050 * R/W * External Interrupt control Register * 0x000000
这个寄存器是设置外部中断触发方式的呀。 手册上:
The 8 external interrupts can be requested by various signaling methods. The EXTINT register configures the
signaling method between the level trigger and edge trigger for the external interrupt request, and also configures the
signal polarity.
EINT2 [10:8]
Setting the signaling method of the EINT2.
000 = Low level interrupt
001 = High level interrupt
01x = Falling edge triggered
10x = Rising edge triggered
11x = Both edge triggered
根据红色语句,我就将 EXTINT 的第10,设为0,第九位设为1,第8位没有处理。
但是代码运行却出乎我的意料。 在 上升沿和下降沿都触发了中断。
我的实验是 触摸屏 中断 实验, 其中 触摸笔 点在屏上,中断为低电平, 抬起 中断为高电平。
照理说,触摸屏抬起的时候,是电平上升沿,应该不会触发中断的。但是事实却是触发了中断。 这是怎么回事?
以下是 打印LOG
ts Touch Screen Interrupt occured240 //中断函数里打印 printk(DEVICE_NAME " Touch Screen Interrupt occured%x\n", rEXTINT); rEXTINT 值为 0x240 第10位 0 第九位 1
ts Interrupt low240 //这里读取中断IO口状态为低电平 首先设置了中断IO口为IO 输入模式 rPCONG = (rPDATG & ~(0x3<<4))
ts Open irq240 // 重新设置中断IO口为中断模式 rPCONG = (rPDATG |(0x3<<4))
[user]:4,x= 145, y=97 //触摸屏数值
[user]:read the ts
ts Touch Screen Interrupt occured240 //触摸笔抬起引发另一次中断。。。。 |