跳转至

作者:孟伟

一、MCU 核心库功能概述

本教程演示如何使用 LuatOS 的 mcu 核心库进行芯片级功能测试,包括时钟频率获取、唯一 ID 读取、高精度计时、IO 复用配置等核心功能。

1.1 MCU 核心库有什么用?

mcu 核心库提供对芯片底层功能的访问能力,主要功能包括:

  • 时钟信息获取:读取当前主频和计时器信息
  • 芯片标识:获取设备唯一 ID
  • 高精度计时:微秒级精度的时间测量

二、演示功能概述

本教程将使用 Air8000 核心板演示 mcu 核心库的核心功能,主要包括:

(1)时钟频率与计时器测试

(2)芯片唯一 ID 读取

(3)高精度时间差计算

三、准备硬件环境

在介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。

Air8000核心板参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。

四、软件环境

在开始实践本示例之前,先筹备一下软件环境:

  1. 烧录工具: Luatools 工具
  2. 内核固件:Air8000 V2016 版本固件

3.LuatOS 需要的脚本和资源文件

脚本和资源文件:脚本和资源文件

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 开发板,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。

五、API 接口说明

详细 API 文档请参考:https://docs.openluat.com/osapi/core/mcu/

六、代码示例介绍

6.1 功能测试核心代码

function mcu_test()
    -- 测试MCU 死机时的处理模式
    -- 死机后重启,一般用于正式产品_
    mcu.hardfault(1)

    -- 测试唯一ID
    local unique_id = mcu.unique_id()
    if #unique_id > 0 then
        log.info("mcu", "Unique ID(hex):", unique_id:toHex())
    else
        log.warn("mcu", "Unique ID not supported")
    end

    -- 测试ticks相关函数
    -- 获取启动后的 tick 数
    log.info("mcu", "ticks:", mcu.ticks())
    -- 获取每秒的 tick 数量
    log.info("mcu", "获取每秒的tick数量:", mcu.hz())

    -- 测试64位tick
    local tick_str, tick_per = mcu.tick64()
    log.info("mcu", "tick64:", tick_str:toHex(), "ticks per us:", tick_per)
    -- 测试mcu.dtick64接口获取ticks差值计算
    local tick1 = mcu.tick64()
    sys.wait(100)
    local tick2 = mcu.tick64()
    local result, diff_tick = mcu.dtick64(tick1, tick2)
    log.info("mcu", "dtick64 result:", result, "diff:", diff_tick)

    -- 测试ticks2函数
    local us_h, us_l = mcu.ticks2(0)
    local ms_h, ms_l = mcu.ticks2(1)
    local sec_h, sec_l = mcu.ticks2(2)
    log.info("mcu", "us:", us_h, us_l)
    log.info("mcu", "ms:", ms_h, ms_l)
    log.info("mcu", "sec:", sec_h, sec_l)

    -- 测试 转换 10 进制数为 16 进制字符串输出
    local value = mcu.x32(0x2009FFFC) --输出"0x2009fffc"
    log.info("mcu", "string", value)
end

sys.taskInit(mcu_test)

6.2 功能验证

通过 luatools 工具查看相关日志:

七、总结

至此,本示例详细介绍了如何使用 mcu 核心库进行功能测试开发。mcu 核心库提供了对硬件底层的直接访问能力,是开发高级功能和系统调试的重要工具。