摘要:
启动文件由汇编语言编写,是MCU上电复位后第一个执行的程序。主要执行以下内容: 初始化gp(global pointer)全局指针寄存器、sp(stack pointer)栈指针寄存器 将data数据从flash中加载至RAM中 清空bss段数据 初始化中断向量表 配置系统时钟 从Machine模式 阅读全文
摘要:
Keil MDK开发ARM 内核的MCU时,将常量定义到指定的Flash地址中,使用 _attribute_( at(绝对地址) )即可,如: const u32 myConstVariable_1[128] __attribute__((at(0x08001000))) = {0x12345678 阅读全文
摘要:
RISC-V MCU开发过程中,需要指定一些变量在MCU复位时能够保持当前变量的值, 以CH32V307为例,具体方法如下: 不更改ld文件,将变量添加((section(".noinit")))属性描述 __attribute__((section(".noinit"))) uint8_t tes 阅读全文
摘要:
以沁恒RISC-V MCU CH32V203C8T6为例, 当使用内部8MHz高频晶振时,其外接高频晶振的引脚可以配置为普通io。 引脚编号 主功能 (复位后) 重映射功能 5 OSC_IN PD0 6 OSC_OUT PD1 具体方法如下: l 打开io辅组功能模块时钟AFIO RCC_APB2P 阅读全文
摘要:
以沁恒RISC-V MCU CH32V203C8T6为例,其配备了两线仿真调试接口, 用于在线下载和仿真调试。 引脚编号主功能 (复位后)重映射功能 34 SWDIO PA13 37 SWCLK PA14 可以看出,上电复位后,PA13、PA14默认的功能为调试接口,方面工程师进行开发调试。 如果在 阅读全文
摘要:
1、volatile关键字 volatile 是易变的、不稳定的意思。和const一样是一种类型修饰符,volatile关键字修饰的变量,编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。以前只是听过这个关键词,知道它的存在,但从来没用过。用此文记录下在开发RISC-V MCU 阅读全文
摘要:
CH32V203系列是基于32位RISC-V内核设计的工业级增强型低功耗通用微控制器,高性能,最高支持144MHz系统主频,低功耗,运行功耗低至45uA/MHz。本文已CH32V203为例,聊聊MCU的低功耗及应用场景。 一、低功耗产品低功耗产品一般可配置为两类运行状态: 1.平时低功耗,使用时唤醒 阅读全文
摘要:
基于RISC-V MCU CH32V305/CH32V307系列MCU实现的USB2.0(480Mbps)转JTAG接口方案,可用于调试或下载CPU、DSP、FPGA和CPLD等器件。 方案构成上只需一颗CH32V305/307芯片,无需CPLD和USB PHY辅助芯片。 方案结构框图如下所示: 与 阅读全文
摘要:
1、什么是ld链接脚本? 通常,程序编译的最后一步就是链接,此过程根据“*.ld”链接文件将多个目标文件(.o)和库文件(.a)输入文件链接成一个可执行输出文件(.elf)。涉及到对空间和地址的分配以及符号解析与重定位。 而ld链接脚本控制这整个链接过程,主要用于规定各输入文件中的程序、数据等内容段 阅读全文
摘要:
gp,global pointer,全局指针寄存器,RISC-V 32个寄存器之一,为了优化±2KB内全局变量的访问。 gp寄存器在启动代码中加载为__global_pointer$的地址,并且之后不能被改变。 linker时使用__global_pointer$来比较全局变量的地址,如果在范围内, 阅读全文