CH32V307裸机汇编指南
点亮一颗LED
假设LED灯在GPIO PB4引脚上
CH32V307的GPIO控制器的clock默认是关闭的.
打开GPIO控制器的clock:
.equ RCC_BASE, 0x40021000
.equ R32_RCC_APB2PCENR, 0x18
.equ IOPBEN, (1 << 3)
li t0, RCC_BASE
lw t1, R32_RCC_APB2PCENR(t0)
ori t1, t1, IOPBEN // enable PORTB clock
sw t1, R32_RCC_APB2PCENR(t0)
配置GPIO PB4为输出模式,并设置高电平:
.equ GPIOB_BASE, 0x40010C00
.equ R32_GPIO_CFGLR, 0x00
.equ R32_GPIO_OUTDR, 0x0C
li t0, GPIOB_BASE
lw t1, R32_GPIO_CFGLR(t0)
// PB4 output push pull 2Mhz
li t2, ~(0xF << 16) // clean mode bits
and t1, t1, t2
li t2, (0x1 << 16) // set mode
or t1, t1, t2
sw t1, R32_GPIO_CFGLR(t0)
lw t1, R32_GPIO_OUTDR(t0)
ori t1, t1, (1 << 4) // LED2 ON
sw t1, R32_GPIO_OUTDR(t0)
SRAM的大小
CH32V307的SRAM大小是可以配置的, 默认为32KiB
如果不确定SRAM大小,可以先将sp寄存器设置在32KiB SRAM末尾位置:
0x7FFC + 4 / 1024 = 32
li sp, 0x20007FFC
获取SYSCLK
默认开机使用HSI 8Mhz作为SYSCLK,之后可以切换到HSE和PLL
获取HBCLK
SYSCLK分频得到HBCLK