Added soclet with gpio banks to top
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#define GPIO_BASE 0x40000000u
|
||||
#define VOUT_BASE 0x40000004u
|
||||
|
||||
static volatile uint32_t * const gpio = (volatile uint32_t *)GPIO_BASE;
|
||||
static volatile uint32_t * const vout = (volatile uint32_t *)VOUT_BASE;
|
||||
|
||||
static void delay(volatile uint32_t ticks){
|
||||
while (ticks--) {
|
||||
@@ -15,8 +17,11 @@ int main(void)
|
||||
uint32_t v = 0;
|
||||
|
||||
for (;;) {
|
||||
*gpio = v;
|
||||
v++;
|
||||
delay(20000u);
|
||||
for(int i=0; i<1000; i++){
|
||||
*vout = v;
|
||||
v++;
|
||||
delay(5u);
|
||||
}
|
||||
*gpio ^= 0xffffffff;
|
||||
}
|
||||
}
|
||||
|
||||
56
sw/sweep/Makefile
Normal file
56
sw/sweep/Makefile
Normal file
@@ -0,0 +1,56 @@
|
||||
TOOLCHAIN_PREFIX ?= riscv64-elf-
|
||||
|
||||
CC := $(TOOLCHAIN_PREFIX)gcc
|
||||
OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
|
||||
OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
|
||||
SIZE := $(TOOLCHAIN_PREFIX)size
|
||||
|
||||
TARGET := sweep
|
||||
SRCS_C := sweep.c
|
||||
SRCS_S := start.s
|
||||
OBJS := $(SRCS_C:.c=.o) $(SRCS_S:.s=.o)
|
||||
|
||||
ARCH_FLAGS := -march=rv32i_zicsr -mabi=ilp32
|
||||
CFLAGS := $(ARCH_FLAGS) -Os -ffreestanding -fno-builtin -Wall -Wextra
|
||||
ASFLAGS := $(ARCH_FLAGS)
|
||||
LDFLAGS := $(ARCH_FLAGS) -nostdlib -nostartfiles -Wl,-Bstatic,-Tlink.ld,--gc-sections,-Map,$(TARGET).map
|
||||
|
||||
HEX_TO_COE := ../../scripts/hex_to_coe.py
|
||||
HEX_TO_MIF := ../../scripts/hex_to_mif.py
|
||||
|
||||
.PHONY: all clean disasm size
|
||||
|
||||
all: $(TARGET).elf $(TARGET).bin $(TARGET).hex $(TARGET).coe $(TARGET).mif $(TARGET).elf.asm
|
||||
|
||||
$(TARGET).elf: $(OBJS) link.ld
|
||||
$(CC) $(LDFLAGS) -o $@ $(OBJS)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: %.s
|
||||
$(CC) $(ASFLAGS) -c -o $@ $<
|
||||
|
||||
$(TARGET).bin: $(TARGET).elf
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
|
||||
$(TARGET).hex: $(TARGET).bin
|
||||
hexdump -v -e '1/1 "%02x\n"' $< > $@
|
||||
|
||||
$(TARGET).coe: $(TARGET).hex
|
||||
$(HEX_TO_COE) $< $@
|
||||
|
||||
$(TARGET).mif: $(TARGET).hex
|
||||
$(HEX_TO_MIF) $< $@
|
||||
|
||||
$(TARGET).elf.asm: $(TARGET).elf
|
||||
$(OBJDUMP) -d -S $< > $@
|
||||
|
||||
disasm: $(TARGET).elf.asm
|
||||
|
||||
size: $(TARGET).elf
|
||||
$(SIZE) $<
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET).elf $(TARGET).bin $(TARGET).hex $(TARGET).coe $(TARGET).mif \
|
||||
$(TARGET).elf.asm $(TARGET).map $(OBJS)
|
||||
33
sw/sweep/link.ld
Normal file
33
sw/sweep/link.ld
Normal file
@@ -0,0 +1,33 @@
|
||||
OUTPUT_ARCH("riscv")
|
||||
ENTRY(_start)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 8K
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
KEEP(*(.text.init))
|
||||
*(.text .text.*)
|
||||
*(.rodata .rodata.*)
|
||||
} > RAM
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data .data.*)
|
||||
} > RAM
|
||||
|
||||
.bss (NOLOAD) :
|
||||
{
|
||||
__bss_start = .;
|
||||
*(.bss .bss.*)
|
||||
*(COMMON)
|
||||
__bss_end = .;
|
||||
} > RAM
|
||||
|
||||
. = ALIGN(4);
|
||||
__stack_top = ORIGIN(RAM) + LENGTH(RAM);
|
||||
}
|
||||
23
sw/sweep/start.s
Normal file
23
sw/sweep/start.s
Normal file
@@ -0,0 +1,23 @@
|
||||
.section .text.init
|
||||
.globl _start
|
||||
.type _start, @function
|
||||
|
||||
_start:
|
||||
la sp, __stack_top
|
||||
|
||||
# Zero .bss
|
||||
la t0, __bss_start
|
||||
la t1, __bss_end
|
||||
1:
|
||||
bgeu t0, t1, 2f
|
||||
sw zero, 0(t0)
|
||||
addi t0, t0, 4
|
||||
j 1b
|
||||
|
||||
2:
|
||||
call main
|
||||
|
||||
3:
|
||||
j 3b
|
||||
|
||||
.size _start, .-_start
|
||||
14
sw/sweep/sweep.c
Normal file
14
sw/sweep/sweep.c
Normal file
@@ -0,0 +1,14 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#define GPIO_BASE 0x40000000u
|
||||
|
||||
static volatile uint32_t * const R_FREQ = (volatile uint32_t *)GPIO_BASE;
|
||||
|
||||
void main(){
|
||||
for(;;){
|
||||
for(int i=1000; i<10000; i++){
|
||||
*R_FREQ = i;
|
||||
for(int j=0; j<100; j++) asm volatile("nop");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user