微處理器 - WCH CH32V003 (CH32V003) - Assembly - LED



參考資訊:
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是連接到D2


IOPDEN


暫存器位址


I/O Mode


Data


main.s

    .global _start
  
    .equ RCC_APB2PCENR,   0x40021018
    .equ R32_GPIOC_CFGLR, 0x40011000
    .equ R32_GPIOD_CFGLR, 0x40011400
    .equ R32_GPIOC_OUTDR, 0x4001100C
    .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 << 8)
    li a0, R32_GPIOD_CFGLR
    sw t0, 0(a0)
 
    li t0, 0
    li t1, (1 << 2)
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 flash --address 0x08000000 main.bin
    15:37:26 [INFO] Connected to WCH-Link v2.17(v37) (WCH-LinkE-CH32V305)
    15:37:26 [INFO] Attached chip: CH32V003 [CH32V003F4P6] (ChipID: 0x00300510)
    15:37:26 [INFO] Chip ESIG: FlashSize(16KB) UID(cd-ab-7f-8c-87-bc-d3-f4)
    15:37:26 [INFO] Flash protected: false
    15:37:26 [INFO] Read main.bin as Binary format
    15:37:26 [INFO] Flashing 842 bytes to 0x08000000
    15:37:26 [INFO] Read protected: false
    15:37:27 [INFO] Flash done
    15:37:27 [INFO] Now reset...

完成