|
我现在在做一耳机和喇叭切换的程序,操作系统是linux,cpu是我们公司产的基于arm9的芯片,耳机的插入检测和喇叭的打开关闭由两个gpio控制,假设是pa1和pa2,pa1检测耳机输入,如果耳机插入,pa1为高电平, 否则为低电平。如果采取中断的方式处理的话,需要设置pa1产生上升沿和下降沿的中断。但是由于这个cpu的gpio中断只支持单个边沿的中断产生,就是说,要么是上升沿中断,要么是下降沿中断。我尝试过两种方法:
1,设置上升沿中断触发,在上升沿中断处理程序(耳机插入)后,触发一个定时器,让这个定时器不断轮询pa1的状态,如果pa1变低(耳机拔出),则设置pa2为高使能喇叭。否则继续触发定时器。这个方法的问题是,上升沿中断到来,但是有时候定时器却不能运行。
2, 在中断处理中,更改gpio的中断产生方式。比如产生一个中断,在中断处理程序中,读取pa1的电平,如果为高,则设中断触发为下降沿中断。如果pa1的电平为低,则设置为中断方式为上升沿中断,并且根据pa1的值来设置pa2。这种方式在耳机插入和拔出的过程,中断处理程序并没有如期地被调用。
不知有没有其他很好的方法来检测中断的到来呢?
处理程序在公司,没有在身边,方便的话我会贴出来,不知我的问题有没有描述清楚,谢谢。
|
|