先楫SDK学习笔记

CMAKE学习

B站视频学习:CMake管理工程-上_哔哩哔哩_bilibili

CMAKE函数:SDK CMake API Reference — HPMico Software Development Kit 文档

add_subdirectory:文件夹管理sdk_app_inc:添加头文件搜索路径sdk_app_src:添加源文件sdk_app_src_glob:以正则表达式方式添加源文件(*.c 直接选择所有源文件)sdk_compile_definitions:添加宏定义(-DUSE_MATH=1 :添加宏定义USE_MATH=1) sdk_compile_options:添加编译选项("-O3"开启优化等级3)sdk_ld_options:添加链接选项("-lm" 防止函数与头文件链接不上)sdk_link_libraries:添加库文件(添加自己生成的.a 或 .dll库 在IDE的设置 project - Linker -Additional Input Files能看到)sdk_linker_global_symbols:添加链接使用的全局变量sdk_raise_fatal_error_if_all_invaild:检查配置规则(FEATUREA 必须打开FEATUREA,否则报错)sdk_ses_compile_options:设置目标芯片架构(在IDE的设置 project - Code Generation -RISC-V 能看到)sdk_ses_options:预设SES配置(先在SES配置,再用记事本打开SES的项目文件,查看要配置项目的关键字是什么,通过加关键字进行修改)

#"$(OBJDUMP)" -S -d "$(OutDir)/demo$(EXE)" > "$(OutDir)/demo.asm" && "$(OBJCOPY)" -O ihex "$OutDir/demo$(EXE)" "$(OutDir)/demo.hex" 生成hex文件指令,加在IDE 的project -User Build Step -Post Build Command中

set(FEATUREA ON):打开宏定义FEATUREA

# 表示注释.yaml 文件里能看到每个板子的存储大小.icf 文件看空间地址分配

Pinmux学习笔记

外设边上可以调整颜色Function可以根据外设生成引脚初始化函数可以导出csv文件

SDK GUI

视频地址:Level 1 Lesson---基础外设_哔哩哔哩_bilibili

双image启动_哔哩哔哩_bilibili

Launch GDB Server:启动GDB调试功能Program Flash:下载程序到flashLocalize SDK for App:代码本地化(用到的所有文件复制到文件目录下)GCC Compile:GCC编译

建项目流程,代码本地化(修改cmake,将文件独立)

新建项目文件夹,文件夹下新建一个board和projectboard放入sdk里的板子hpm6e00,里面的yaml文件也修改,再加入hpm6e00evk.cfg文件(文件名需要统一修改);project放入相近的例程hello_world打开GUI,选中所用的板子和例程,路径选择项目文件夹,点击生成在CMAKEList(例程文件夹下)中添加JLINK调试选项 sdk_ses_opt_debug_connection(J-Link)点击代码本地化,生成修改项目设置 GDB Server的绝对路径为相对路径创建完成,可以随意更换路径

双核学习笔记

文章地址:玩转MCU双核(上) 先楫HPM6000系列双核怎么玩?答案超乎你想象!-技术文章-先楫半导体multicore_release_cpu(); //释放core1指令函数,让core1启动sec_core_img.c:core1镜像文件存储位置(编译后将core1的bin文件存入该文件的数组中)使用双核时,注意通用数据不建议放在cache区,可能导致数据异常,或者访问前后强制刷新cache;通用数据可以放在noncache区,使用noncache区需要初始化PMP建议基于SDK的双核例程去修改,不建议手搓双核;core1的项目配置中 User Build Step --Post Build Command放了控制core1 bin文件的指令

D:/APP_Download/HPMicro/sdk_env_v1.7.0/tools/python3/python3.exe

../../../../../../scripts/bin2c.py

$(OutDir)/demo.bin

sec_core_img >

D:/APP_Download/HPMicro/sdk_env_v1.7.0/hpm_sdk/samples/multicore/mbx/core1/../src/sec_core_img.c

&&

"$(OBJDUMP)" -S -d "$(OutDir)/demo$(EXE)" > "$(OutDir)/demo.asm"

执行Python指令将bin文件放入core0文件的sec_core_img数组中

建双核流程

放两个core0的例程到同一个文件夹,加入multicore/common文件夹,multicore/mbx/src/sec_core_img.c文件加入core0的例程.c文件下(同时修改cmake文件)生成core1项目,在core1的项目配置添加User Build Step --Post Build Command指令添加宏定义 RUNNING_CORE = HPM_CORE1生成core0项目,将mbx所需要的文件和函数都加进去将core1的icf文件改为ram_core1(在project -- Linker -- Linker Script File中)core1的Debugger的Target Device改成CPU1,GDB Server的port由3333改成3334core1修改Code Generation的RISC-V ISA为rv32imac在board.c中,需要区分好每个core所用的外设,防止外设冲突或core休眠关闭时钟

Cache学习笔记

视频地址:CACHE介绍及使用_哔哩哔哩_bilibili

cache解决CPU运算速度(816M)与内存读写速度(133M)不匹配问题(预加载和临时缓存)缓存最小单位为cache line,HPM6000系列是64byte;PMA设置地址需要对齐该字节数Dirty:cache line的数据与Memory不一致Invalidate:将地址范围的数据失效,让CPU直接从Memory读取数据Write-back:将cache内dirty的数据写入Memory,让数据保持一致Non-cacheable:数据不走缓存L1Cache(l1c):

l1c_dc_enable():打开cachel1c_dc_writeback():cache数据更新到Memoryhpm_common.h中,ATTR_PLACE_AT_NONCACHEABLE 有宏定义,将数据放入noncacheable区域 uint8_t ATTR_PLACE_AT_NONCACHEABLE temp;

ROM API学习

rom_xpi_nor_auto_config():根据提供的flash配置字自动配置XPI接口rom_xpi_nor_get_property():获取nor flash属性rom_xpi_nor_erase():擦除flashrom_xpi_nor_read():读取flashrom_xpi_nor_program():写入flashread_from_shadow():读取OTP影子寄存器的值read_from_ip():读取OTP的值program():对OTP值进行烧写(不建议使用,只有一次修改机会)rom_enter_bootloader():在APP中进入BootLoader程序board.c中,最开始位置写着对NOR FLASH的配置选项

先楫工具:

HPMicro Program:好像需要在BootLoader模式下连接

镜像烧写读取MCU OTP值

远程同乐|承上启下的关键五年 “十五五”如何科学谋划