技术专栏
海思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个
手气红包
暂无数据相关专栏
-
浏览量:5534次2020-09-18 11:40:42
-
浏览量:16564次2020-09-07 11:31:46
-
浏览量:3506次2020-08-04 20:24:33
-
浏览量:6579次2020-07-31 11:03:23
-
浏览量:2087次2023-06-21 10:50:13
-
浏览量:2514次2023-10-25 15:43:39
-
浏览量:11002次2020-12-22 15:50:36
-
浏览量:4825次2020-08-30 10:04:00
-
浏览量:10844次2020-09-08 19:26:12
-
浏览量:4171次2020-08-04 20:08:51
-
浏览量:7636次2020-08-26 14:15:06
-
浏览量:2908次2020-08-03 11:18:53
-
浏览量:11938次2020-08-30 15:32:16
-
浏览量:10363次2021-01-15 16:31:31
-
浏览量:2818次2024-01-05 10:33:11
-
浏览量:8582次2020-09-10 09:46:52
-
浏览量:5276次2020-08-30 15:59:35
-
浏览量:5178次2020-07-27 15:12:15
-
浏览量:2515次2023-10-26 15:18:07
切换马甲
上一页
下一页
打赏用户
共 1 位
我要创作
分享技术经验,可获取创作收益
分类专栏
-
178篇
热门专栏
- 预约直播:5G NB-IoT“亿”征程产业峰会
- 物联网传输协议基石 - TCP ( Transmission Control Protocol )下
- 中芯国际完成了其第一阶段7nm级等效节点的生产
- 美国打出“终极牌”以阻止对华为的供应,华为或将无芯可用
- 基于易百纳SS928或者欧拉派移植ubuntu20.04和ROS环境
- 针对Hi3519DV500的ISP开发说明——AIBNR算法应用
- HI3531DV200+LT6911C调试经验及资料分享
- 中国电信NB-IoT模组集采结果公布,海思Boudica 150获最大份额
- 纯国产化两通道脑电加两通道PPG脑电头环硬件方案
- ThingsBoard教程(十五):部件库的点击事件
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注

微信扫码分享
QQ好友