关键流程设计
26 Nov 2024
Read time: 1 minute(s)
初始化流程
TSensor 模块完全遵循 driver 的通用初始化流程,申请 regs 资源、clk、reset,另外需要使用 Thermal 子系统的注册接口
thermal_zone_device_register() 来注册 zone
设备。
struct thermal_zone_device *thermal_zone_device_register(const char *,
int, int, void *, struct thermal_zone_device_ops *,
struct thermal_zone_params *, int, int);
其中关键参数有:设备名称、zone 设备的 ops、以及私有数据等,ops 中我们暂时只提供 get_temp()
接口的定义:
static struct thermal_zone_device_ops tsen_cpu_ops = {
.get_temp = tsen_cpu_get_temp,
};
static struct thermal_zone_device_ops tsen_adc_ops = {
.get_temp = tsen_adc_get_temp,
};
中断处理流程
在中断处理函数中,可以通过私有数据来传递 zone 设备信息,从中获取到到该通道对应的寄存器基地址,就可以读到相应的报警状态。
TSensor 支持使用中断方式来读取数据,避免应用层的忙等待。
-
对于非周期模式的数据采集流程:
- 用户层触发 ops→fetch_data() 接口,就会启动一次硬件去读数据。
- 当硬件准备好数据,会产生一个中断,通知系统数据已经准备好可以读取。
- 中断处理函数会响应该中断信号。在中断处理函数中,用 INT Flag 来区分是哪个通道有数据。
- 中断处理函数会逐个通道扫描,将每个通道的数据读出,并将数据缓存到一个全局变量中,供后续的用户层应用访问和使用。
-
对于周期模式:
- TSensor 控制器自动按给定周期产生一次数据中断。例如,如果设定周期为 1 秒,则每 1 秒就会触发一次中断。
- 中断处理函数会响应该中断信号,并通过
INT Flag
来区分是哪个通道有数据。 - 中断处理函数会逐个通道扫描,将每个通道的数据读出,并缓存到全局变量中,供后续的用户层应用访问和使用。