技术专栏
海思35系列平台Tsensor驱动开发(1)驱动编写
1. 前言
3559平台芯片内部内置了温度传感器,可用于实时检测芯片内部温度;
温度的检测范围为-40~125℃,支持设置温度上下限阈值报警输出。内部温度传感器提供了单次采集模式和循环采集模式两种选择。
软件开发分为驱动和用户态软件开发。
2. 查看芯片datasheet
3. 驱动软件编写
这里使用混杂设备进行驱动编写;
misc_register(&hitsensor_dev);
以下就是具体功能实现,主要根据芯片datasheet转化过来;
(1)设置温度采集模式
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
SYS_READ(tsensor_reg_base+0x70); //MISC_CTRL28
if(hitsensor_info.value == 1)
{
reg_data |= 1 << 30;
}
else
{
reg_data &= ~(1 << 30);
}
SYS_WRITEL(tsensor_reg_base+0x70, reg_data);
(2)设置温度采集周期
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
tmp = (hitsensor_info.value >> 1) | 0x1;
tmp = tmp & 0xFF;
reg_data = SYS_READ(tsensor_reg_base+0x70); //MISC_CTRL28
reg_data &= 0xF0FFFFFF;
reg_data |= tmp << 20;
SYS_WRITEL(tsensor_reg_base+0x70, reg_data);
(3)设置温度报警上限阈值
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
reg_data = (hitsensor_info.value&0x3FF) << 10;
SYS_WRITEL(tsensor_reg_base+0x70, reg_data);
(4)设置温度报警下线阈值
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
reg_data = SYS_READ(tsensor_reg_base+0x70);
reg_data |= hitsensor_info.value&0x3FF;
SYS_WRITEL(tsensor_reg_base+0x70, reg_data);
(5)使能启动温度采集
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
reg_data = SYS_READ(tsensor_reg_base+0x70); //MISC_CTRL28
if(hitsensor_info.value == 1)
{
reg_data |= 1 << 31;
}
else
{
reg_data &= ~(1 << 31);
}
SYS_WRITEL(tsensor_reg_base+0x70, reg_data);
(6)读取CPU温度值
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
tmp = SYS_READ(tsensor_reg_base+0x78); //MISC_CTRL30
hitsensor_info.value = tmp & 0x3FF;
copy_to_user((void __user *)arg, &hitsensor_info, sizeof(Hi_Tsensor_info));
}
(7)读取温度报警上限标志
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
tmp = SYS_READ(tsensor_reg_base+0x74); //MISC_CTRL29
hitsensor_info.value = tmp & 0x1;
copy_to_user((void __user *)arg, &hitsensor_info, sizeof(Hi_Tsensor_info));
(8)读取温度报警下限标志
copy_from_user(&hitsensor_info, (Hi_Tsensor_info*)arg, sizeof(Hi_Tsensor_info));
tmp = SYS_READ(tsensor_reg_base+0x74); //MISC_CTRL29
hitsensor_info.value = (tmp >> 1) & 0x1;
copy_to_user((void __user *)arg, &hitsensor_info, sizeof(Hi_Tsensor_info));
至此驱动的具体功能都已实现
4. 驱动编译
这里驱动可以不放在内核编译;
可以参考35xx平台的驱动编译方式;
路径如下:
drv/interdrv/sysconfig 【以sysconfig驱动为例】
参考这个Makefile即可
指定内核路径:
KERNELDIR ?=/xxx/osdrv/opensource/kernel/linux-4.9.y_multi-core
指定交叉工具链:
CROSS_COMPILE ?=aarch64-himix100-linux-
完整Makefile如下
DRIVER_NAME = hi_tsensor
PWD = $(shell pwd)
export ARCH=arm64
CROSS_COMPILE ?=aarch64-himix100-linux-
#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
KERNELDIR ?=/xxx/xxx/osdrv/opensource/kernel/linux-4.9.y_multi-core
EXE = $(DRIVER_NAME).ko
obj-m := $(DRIVER_NAME).o
hi_tsensor-objs := Hi_Tsensor.o
.PHONY: all
all:
@echo " Making $@ ..."
ifneq ($(CROSS_COMPILE),)
$(MAKE) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERNELDIR) M=$(PWD) modules
else
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
ifneq ($(OUT),)
cp -f $(EXE) $(OUT)/
endif
ifneq ($(INC),)
cp -f *.h $(INC)/
endif
.PHONY: clean
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions modules.order Module.symvers *.ko.unsigned
depend .depend dep:
$(CC) $(CFLAGS) -M *.c > .depend
ifeq (.depend,$(wildcard .depend))
include .depend
endif
编译完成,生成驱动ko文件
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
1
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:3792次2020-09-18 11:40:42
-
浏览量:13462次2020-09-07 11:31:46
-
浏览量:2012次2020-08-04 20:24:33
-
浏览量:4990次2020-07-31 11:03:23
-
浏览量:849次2023-06-21 10:50:13
-
浏览量:870次2023-10-25 15:43:39
-
浏览量:8735次2020-09-08 19:26:12
-
浏览量:3509次2020-08-30 10:04:00
-
浏览量:9277次2020-12-22 15:50:36
-
浏览量:1881次2020-08-03 11:18:53
-
浏览量:2798次2020-08-04 20:08:51
-
浏览量:8730次2021-01-15 16:31:31
-
浏览量:7033次2020-09-10 09:46:52
-
浏览量:930次2024-01-05 10:33:11
-
浏览量:5706次2020-08-26 14:15:06
-
浏览量:9921次2020-08-30 15:32:16
-
浏览量:12023次2021-02-19 16:56:03
-
浏览量:3575次2020-07-27 15:12:15
-
浏览量:3567次2020-08-30 15:59:35
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注