补充终端与时钟部分.

Signed-off-by: chen.yang <chen.yang@yuzhen-iot.com>
This commit is contained in:
chen.yang 2022-04-21 19:29:23 +08:00
parent a495dd298e
commit c18e1aa512
1 changed files with 16 additions and 0 deletions

View File

@ -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 内的所有中断。
## 底半部机制