更新硬件SDK

This commit is contained in:
kerwincui
2023-03-04 03:44:56 +08:00
parent dcdf6e1b7c
commit e39d3d2f03
1900 changed files with 663153 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
/*
* Copyright (c) 2022 OpenLuat & AirM2M
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "common_api.h"
#include "luat_rtos.h"
#include "luat_debug.h"
#include "luat_adc.h"
luat_rtos_task_handle adc_task_handle;
static void task_test_adc(void *param)
{
int val, val2;
// adc0和adc1的说明如下
// 1、adc引脚允许输入的最大电压是3.4V
// 2、如果采用内部分压外部不分压的方式软件上通过调用luat_adc_ctrl接口来设置量程支持1.2V、1.4V、1.6、1.9、2.4、2.7、3.2、3.8V几种量程;
// 3、如果采用外部分压内部不分压的方式软件上通过调用luat_adc_ctrl接口来设置量程为1.2V
// 4、不建议同时启动内部分压和外部分压的方式这样的误差会变大
// 外部输入电压超过3.4v的话:
// 只能采用外部分压内部不分压的方式软件上通过调用luat_adc_ctrl接口来设置量程为1.2V
// 外部输入电压不超过3.4V的话:
// 1、可以采用外部分压内部不分压的方式软件上通过调用luat_adc_ctrl接口来设置量程为1.2V
// 2、也可以采用内部分压外部不分压的方式软件上通过调用luat_adc_ctrl接口来设置量程设置的量程大于等于实际输入的最大电压选择最接近的量程即可
// 从硬件成本考虑推荐第2种
// 从测量精确度来看第2种方式12bit表示设置的最大量程最大量程/4096为测量精度第1种方式根据外部硬件电路自行计算对比下
// 内外部分压选择其中一种即可;不能外部分压时,才选择内部分压;
// 如果采用外部分压建议一步到位外部分压后输入电压在0.1-1.2V范围内部使用直通模式不再分压越靠近1.2V越好,精度越高。
// 如果采用内部分压在满足测量要求的前提下配置的量程越靠近1.2V越好,精度越高。
// adc默认打开了内部分压配置的量程为3.8V
// 以下三行注释掉的代码设置adc0的量程为1.2V,关闭了内部分压;建议用户采用外部分压;
// 如果采用外部分压方式,用户可根据自己的需要打开以下三行代码;
// luat_adc_ctrl_param_t ctrl_param;
// ctrl_param.range = LUAT_ADC_AIO_RANGE_1_2;
// luat_adc_ctrl(0, LUAT_ADC_SET_GLOBAL_RANGE, ctrl_param);
// LUAT_ADC_CH_CPU和LUAT_ADC_CH_VBAT的说明如下
// LUAT_ADC_CH_CPU被芯片内部用来检测温度仅支持软件上open、read和close操作用户不能做其他用途使用
// LUAT_ADC_CH_VBAT被芯片内部用来检测VBAT电压仅支持软件上open、read和close操作用户不能做其他用途使用
luat_adc_open(0 , NULL);
luat_adc_open(1 , NULL);
luat_adc_open(LUAT_ADC_CH_CPU, NULL);
luat_adc_open(LUAT_ADC_CH_VBAT, NULL);
while (1)
{
luat_rtos_task_sleep(1000);
luat_adc_read(0 , &val, &val2);
LUAT_DEBUG_PRINT("adc0: adc 原始值 %d, 电压 %d 微伏",val, val2);
luat_adc_read(1 , &val, &val2);
LUAT_DEBUG_PRINT("adc1: adc 原始值 %d, 电压 %d 微伏",val, val2);
luat_adc_read(LUAT_ADC_CH_CPU, &val, &val2);
LUAT_DEBUG_PRINT("temp: adc 原始值 %d, %d 摄氏度",val, val2);
luat_adc_read(LUAT_ADC_CH_VBAT, &val, &val2);
LUAT_DEBUG_PRINT("vbat: adc 原始值 %d, 电压 %d 毫伏",val, val2);
}
}
static void task_demo_adc(void)
{
luat_rtos_task_create(&adc_task_handle, 1024, 20, "adc", task_test_adc, NULL, NULL);
}
INIT_TASK_EXPORT(task_demo_adc,"1");