LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作

2023-10-28 01:36

本文主要是介绍LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常量

常量

类型

解释

mcu.UART

number

外设类型-串口

mcu.I2C

number

外设类型-I2C

mcu.SPI

number

外设类型-SPI

mcu.PWM

number

外设类型-PWM

mcu.GPIO

number

外设类型-GPIO

mcu.I2S

number

外设类型-I2S

mcu.LCD

number

外设类型-LCD

mcu.CAM

number

外设类型-CAM

mcu.setClk(mhz)

设置主频,单位MHZ

参数

传入值类型

解释

int

主频,根据设备的不同有不同的有效值,请查阅手册

返回值

返回值类型

解释

bool

成功返回true,否则返回false

例子

--  请注意,主频与外设主频有关联性, 例如主频2M时SPI的最高只能1M
-- 设置到80MHZ
mcu.setClk(80)
sys.wait(1000)
-- 设置到240MHZ
mcu.setClk(240)
sys.wait(1000)
-- 设置到2MHZ
mcu.setClk(2)
sys.wait(1000)

mcu.getClk()

获取主频,单位MHZ

参数

返回值

返回值类型

解释

int

若失败返回-1,否则返回主频数值,若等于0,可能处于32k晶振的省电模式

例子

local mhz = mcu.getClk()
print("Boom", mhz)

mcu.unique_id()

获取设备唯一id. 注意,可能包含不可见字符,如需查看建议toHex()后打印

参数

返回值

返回值类型

解释

string

设备唯一id.若不支持, 会返回空字符串.

例子

local unique_id = mcu.unique_id()
print("unique_id", unique_id)

mcu.ticks()

获取启动后的tick数,注意会出现溢出会出现负数

参数

返回值

返回值类型

解释

int

当前tick值

例子

local tick = mcu.ticks()
print("ticks", tick)

mcu.hz()

获取每秒的tick数量

参数

返回值

返回值类型

解释

int

每秒的tick数量,通常为1000

例子

local hz = mcu.hz()
print("mcu.hz", hz)

mcu.reg32(address, value, mask)

读写mcu的32bit寄存器或者ram,谨慎使用写功能,请熟悉mcu的寄存器使用方法后再使用

参数

传入值类型

解释

int

寄存器或者ram地址

int

写入的值,如果没有,则直接返回当前值

int

位掩码,可以对特定几个位置的bit做修改, 默认0xffffffff,修改全部32bit

返回值

返回值类型

解释

int

返回当前寄存的值

例子

local value = mcu.reg32(0x2009FFFC, 0x01, 0x01) --对0x2009FFFC地址上的值,修改bit0为1

mcu.x32(value)

转换10进制数为16进制字符串输出

参数

传入值类型

解释

int

需要转换的值

返回值

返回值类型

解释

string

16进制字符串

例子

local value = mcu.x32(0x2009FFFC) --输出"0x2009fffc"

mcu.tick64()

获取启动后的高精度tick,如果支持bit64库,可以直接输出转换好的bit64结构

参数

传入值类型

解释

boolean

是否输出bit64结构,true是,其他都是false,留空也是false,用于兼容旧的demo

返回值

返回值类型

解释

string

当前tick值,8个字节的uint64,如果支持64bit库,同时要求输出64bit结构的话,会输出9字节的string

int

1us有几个tick,0表示未知

例子

local tick_str, tick_per = mcu.tick64()
print("ticks", tick_str, tick_per)

mcu.dtick64(tick1, tick2, check_value)

计算2个64bit tick的差值

参数

传入值类型

解释

string

64bit的string

string

64bit的string

int

参考值,可选项,如果为0,则返回结果中第一个项目为true

返回值

返回值类型

解释

boolean

与参考值比较,如果大于等于为true,反之为false

int

差值tick1 - tick2,如果超过了0x7fffffff,结果可能是错的

例子

local result, diff_tick = mcu.dtick64(tick1, tick2)
print("ticks", result, diff_tick)

mcu.setXTAL(source_main, source_32k, delay)

选择时钟源,当前仅air105支持

参数

传入值类型

解释

boolean

高速时钟是否使用外部时钟源,如果为空则不改变

boolean

低速32K是否使用外部时钟源,如果为空则不改变

int

PLL稳定时间,在切换高速时钟的时候,根据硬件环境,需要delay一段时间等待PLL稳定,默认是1200,建议不小于1024

返回值

例子

mcu.setXTAL(true, true, 1248)	--高速时钟使用外部时钟,低速32K使用外部晶振, delay1248

mcu.hardfault(mode)

mcu死机时处理模式,目前只有EC618平台适用

参数

传入值类型

解释

int

处理模式,0死机停机,1死机后重启,2死机后尽量将错误信息提交给外部工具后重启

返回值

例子

mcu.hardfault(0)	--死机后停机,一般用于调试状态
mcu.hardfault(1)	--死机后重启,一般用于正式产品
mcu.hardfault(2)	--死机后尽量将错误信息提交给外部工具后重启,一般用于压力测试或者正式产品

mcu.iomux(type, channel, value)

在外设打开前,将外设IO复用到非默认配置上,目前只支持Air780E的部分外设复用到其他配置,这是一个临时接口,如果后续有更合适的api,本接口将不再更新

参数

传入值类型

解释

int

外设类型,目前只有mcu.UART,mcu.I2C

int

总线序号,0~N,

int

新的配置,这个需要根据具体平台决定

返回值

例子

mcu.iomux(mcu.UART, 2, 1)	-- Air780E的UART2复用到gpio12和gpio13(Air780EG默认是这个复用,不要动)
mcu.iomux(mcu.UART, 2, 2)	-- Air780E的UART2复用到gpio6和gpio7
mcu.iomux(mcu.I2C, 0, 1)	-- Air780E的I2C0复用到gpio12和gpio13
mcu.iomux(mcu.I2C, 0, 2)	-- Air780E的I2C0复用到gpio16和gpio17
mcu.iomux(mcu.I2C, 1, 1)	-- Air780E的I2C1复用到gpio4和gpio5

mcu.altfun(type, sn, pad_index, alt_fun, is_input)

IO外设功能复用选择,注意普通MCU是以GPIO号为序号,但是专用SOC,比如CAT1的,是以PAD号为序号。本函数不是所有平台适用

参数

传入值类型

解释

int

外设类型,目前有mcu.UART,mcu.I2C,mcu.SPI,mcu.PWM,mcu.GPIO,mcu.I2S,mcu.LCD,mcu.CAM,具体需要看平台

int

总线序号,0~N,如果是mcu.GPIO,则是GPIO号。具体看平台的IOMUX复用表

int

pad号,如果留空不写,则表示清除配置,使用平台的默认配置。具体看平台的IOMUX复用表

int

复用功能序号,0~N。具体看平台的IOMUX复用表

boolean

是否是输入功能,true是,留空是false

返回值

例子

mcu.altfun(mcu.GPIO, 46, 32, 1, 0)
mcu.altfun(mcu.GPIO, 46)

这篇关于LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289801

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

BUUCTF(34)特殊的 BASE64

使用pycharm时,如果想把代码撤销到之前的状态可以用 Ctrl+z 如果不小心撤销多了,可以用 Ctrl+Shift+Z 还原, 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串,想到base64的变表 这里用的c++的标准程序库中的string,头文件是#include<string> 这是base64的加密函数 std::string

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu