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_BASElw t1, R32_RCC_APB2PCENR(t0)ori t1, t1, IOPBEN // enable PORTB clocksw t1, R32_RCC_APB2PCENR(t0)
配置GPIO PB4为输出模式,并设置高电平:
.equ GPIOB_BASE, 0x40010C00.equ R32_GPIO_CFGLR, 0x00.equ R32_GPIO_OUTDR, 0x0Cli t0, GPIOB_BASElw t1, R32_GPIO_CFGLR(t0)// PB4 output push pull 2Mhzli t2, ~(0xF << 16) // clean mode bitsand t1, t1, t2li t2, (0x1 << 16) // set modeor t1, t1, t2sw t1, R32_GPIO_CFGLR(t0)lw t1, R32_GPIO_OUTDR(t0)ori t1, t1, (1 << 4) // LED2 ONsw 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