关键流程设计
4 Dec 2024
Read time: 1 minute(s)
初始化流程
CIR 模块的初始化流程如下:
-
释放 clock 和 reset 信号
-
调用 device 为 rc_dev 结构体分配空间
-
设置载波的占空比为 33%。读取 dts 中 linux,rc-map-name 的属性值。若为空,则默认使用内核中的空表
-
注册红外设备
-
读取 dts 中的 rx-level 属性值,设置 RX 空闲时的状态
-
设置噪声阈值,激活阈值,空闲阈值等底层配置
-
设置载波配置寄存器,驱动中默认配置的是 38K 载波(NEC 协议)
-
使能 CIR 中断,发送器,接收器
中断处理流程
CIR 模块使能 RX 的溢出中断、RXFIFO 可用中断、接收完成中断。
中断执行流程如下:
-
读取中断状态寄存器和接收状态寄存器
-
清空所有中断标志位
-
若为 RXFIFO 可用中断或接收完成中断,判断 RXFIFO 是否为空,非空则读取 RXFIFO 中数据个数,并逐个从 RXFIFO 中读取数据。若不是这两个中断,则跳转到 5
-
将每次从 RXFIFO 中读出的游码解析为正确的高低电平宽度,并调用 filter 将解析后的数据存储到 kfifo 中
-
若为接收溢出中断,则调用 reset,清空 kfifo 中的数据
-
若为接收完成中断,此处以完成对所有数据的接收,调用 handle 开始解码