补充终端与时钟部分.
Signed-off-by: chen.yang <chen.yang@yuzhen-iot.com>
This commit is contained in:
parent
a495dd298e
commit
c18e1aa512
|
@ -101,3 +101,19 @@ void free_irq(unsigned int irq, void *dev_id);
|
|||
1. 如果是采用非共享方式注册中断,则 request_irq 和 free 的最后一个参数都要为 NULL。
|
||||
2. 如果采用共享中断方式,所有使用 request_irq 注册的中断时 flags 都要加上 IRQF_SHARED 这个共享参数,表明其实共享中断。
|
||||
3. 对于共享中断,每一个申请共享的中断,申请和释放时都要给 request_irq 和 free_irq 的最后一个参数 dev 和 id_dev 传递一个指针,将来来中断的时候,将会传递这个指针到每个中断函数中,而中断函数就可以用来区分到底是不是它的中断,是则执行,不是则判断后直接退出中断处理函数即可。同时在 free_irq 时也会使用这个指针,查找这个贡献中断链表上了所有注册的 irq,只有在这个指针能对的上的时候,才会删除它所在的链表节点(如果是最后一个节点还要释放该中断)。所在在编写中断处理函数时该指针必须是唯一的,通常传的这个指针是该设备结构体的地址,这个每个设备不一样所以肯定是唯一的。
|
||||
|
||||
下列 3 个函数用于禁能/使能一个中断源。
|
||||
|
||||
```cpp
|
||||
// 禁能中断源
|
||||
void disable_irq(int irq);
|
||||
void disable_irq_nosync(int irq);
|
||||
// 使能中断源
|
||||
void enable_irq(int irq);
|
||||
```
|
||||
|
||||
disable_irq_nosync() 与 disable_irq() 的区别在于前者立即返回,而后者等待目前的中断处理完成。注意,这 3 个函数作用于可编程中断控制器,因此,对系统内的所有 CPU 都生效。
|
||||
|
||||
而 local_irq_save() 和 local_irq_disable() 系列函数只屏蔽本 CPU 内的所有中断。
|
||||
|
||||
## 底半部机制
|
||||
|
|
Loading…
Reference in New Issue