參考資訊:
https://github.com/ch32-rs/wlink
file:///home/steward/Downloads/CH32V003RM.PDF
https://github.com/AdiHamulic/CH32V003-Bare-Metal
https://github.com/ch32-rs/wlink/blob/main/docs/references.md
https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/tag/v14.2.0-3
LED是連接到D6
IOPDEN
暫存器位址
I/O Mode
Data
main.s
.global _start .equ RCC_APB2PCENR, 0x40021018 .equ R32_GPIOD_CFGLR, 0x40011400 .equ R32_GPIOD_OUTDR, 0x4001140C .align 2 .option norvc .text j _start .org 0x0300 _start: li t0, (1 << 5) li a0, RCC_APB2PCENR sw t0, 0(a0) li t0, (1 << 24) li a0, R32_GPIOD_CFGLR sw t0, 0(a0) li t0, 0x0000 li t1, 0xffff 0: xor t0, t0, t1 li a0, R32_GPIOD_OUTDR sw t0, 0(a0) lui t2, 100 1: nop addi t2, t2, -1 bgtz t2, 1b j 0b .end
main.ld
MEMORY { RAM : ORIGIN = 0, LENGTH = 2K } SECTIONS { .text : { *(.text*) } > RAM .data : { *(.data*) } > RAM }
Makefile
all: riscv-none-elf-as -march=rv32ec -mabi=ilp32e -o main.o main.s riscv-none-elf-ld -T main.ld -o main.elf main.o riscv-none-elf-objcopy -O binary main.elf main.bin run: wlink flash --address 0x08000000 main.bin clean: rm -rf main.bin main.o main.elf
將VCC、SWDIO、GND連接到WCH-Link燒錄器,接著編譯、燒錄
$ make riscv-none-elf-as -march=rv32ec -mabi=ilp32e -o main.o main.s riscv-none-elf-ld -T main.ld -o main.elf main.o riscv-none-elf-objcopy -O binary main.elf main.bin $ make run wlink erase --method power-off --chip ch32v003 09:55:36 [INFO] Connected to WCH-Link v2.17(v37) (WCH-LinkE-CH32V305) 09:55:36 [INFO] Erase chip by PowerOff wlink flash --address 0x08000000 main.bin 09:55:36 [INFO] Connected to WCH-Link v2.17(v37) (WCH-LinkE-CH32V305) 09:55:36 [INFO] Attached chip: CH32V003 [CH32V003F4U6] (ChipID: 0x00310500) 09:55:36 [INFO] Chip ESIG: FlashSize(16KB) UID(cd-ab-a5-7e-0c-bc-7e-e6) 09:55:36 [INFO] Flash protected: false 09:55:36 [INFO] Read main.bin as Binary format 09:55:36 [INFO] Flashing 846 bytes to 0x08000000 09:55:36 [INFO] Read protected: false 09:55:37 [INFO] Flash done 09:55:37 [INFO] Now reset...
完成