From 0f7e688c2e031e1544e29853bcbcf43384aef582 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Fri, 2 Oct 2015 21:02:10 -0700 Subject: [PATCH] Add kernel configuration for SnadPIC MX795 board. For board documentation, see: http://www.microcontroller-board.com/snadpic-board-32/11-snadpic-pic32mx795f512l-development-board.html --- sys/pic32/Makefile | 3 +- sys/pic32/README | 2 + sys/pic32/snadpic/Config | 65 ++++++ sys/pic32/snadpic/Makefile | 362 ++++++++++++++++++++++++++++++++ tools/build/Makefile | 2 +- tools/build/skeleton/README.txt | 4 +- 6 files changed, 434 insertions(+), 4 deletions(-) create mode 100644 sys/pic32/snadpic/Config create mode 100644 sys/pic32/snadpic/Makefile diff --git a/sys/pic32/Makefile b/sys/pic32/Makefile index 5af89ad..4b24754 100644 --- a/sys/pic32/Makefile +++ b/sys/pic32/Makefile @@ -3,7 +3,8 @@ # SUBDIR = baremetal duinomite duinomite-emega explorer16 \ fubarino max32 maximite maximite-color mmb-mx7 \ - picadillo pinguino-micro sdxl starter-kit ubw32 wf32 + picadillo pinguino-micro sdxl snadpic starter-kit \ + ubw32 wf32 default: diff --git a/sys/pic32/README b/sys/pic32/README index e32461c..b8678e9 100644 --- a/sys/pic32/README +++ b/sys/pic32/README @@ -30,6 +30,8 @@ Build directories: sdxl/ - Majenko SDXL board. + snadpic/ - SnadPIC MX795 board. + starter-kit/ - Microchip PIC32MX USB or Ethernet Starter Kit, with I/O Expansion board and SD & MMC pictail. diff --git a/sys/pic32/snadpic/Config b/sys/pic32/snadpic/Config new file mode 100644 index 0000000..026ef56 --- /dev/null +++ b/sys/pic32/snadpic/Config @@ -0,0 +1,65 @@ +# +# SnadPIC MX795 board +# =================== +# Console on USB. +# +# To build the kernel, use: +# cd sys/pic32/snadpic +# kconfig Config +# make clean +# make +# +# Format of this file is described on page: +# http://retrobsd.org/wiki/doku.php/doc/kconfig +# +architecture "pic32" +cpu "PIC32MX7" # Processor variant +board "SNADPIC" # Board type +ldscript "maximite/bootloader.ld" # Linker script + +# Standard system options +options "CPU_KHZ=80000" # Oscillator frequency of CPU core +options "BUS_KHZ=80000" # Frequency of peripheral bus +options "BUS_DIV=1" # Bus clock divisor 1/2/4/8 + +# Root filesystem at /dev/sd0a, swap at /dev/sd0b +config unix root on sd0a + swap on sd0b + +# Console options +options "CONS_MAJOR=UARTUSB_MAJOR" # UARTUSB device + +# Virtual UART on USB +device uartusb +options "USB_MAX_EP_NUMBER=3" +options "USB_NUM_STRING_DESCRIPTORS=3" + +# UART ports +device uart2 # Pins RF4, RF5 + +# SPI ports +controller spi2 # SD card +controller spi3 # Pins RD1, RD2, RD3 + +# microSD card +device sd0 at spi2 pin RG9 # select pin + +# General purpose I/O ports +# Flags define a mask of available pins +# The following pins excluded: +# RG6, RG7, RG8, RG9 - spi2, SD card +# RD1, RD2, RD3 - spi3 +# RF4, RF5 - uart2 +device gpio0 flags 0xc6ff # port A +device gpio1 flags 0xffff # port B +device gpio2 flags 0xf01e # port C +device gpio3 flags 0xfff1 # port D +device gpio4 flags 0x03ff # port E +device gpio5 flags 0x310f # port F +device gpio6 flags 0xf00f # port G + +# ADC driver +device adc + +# PWM driver +device pwm diff --git a/sys/pic32/snadpic/Makefile b/sys/pic32/snadpic/Makefile new file mode 100644 index 0000000..4104a54 --- /dev/null +++ b/sys/pic32/snadpic/Makefile @@ -0,0 +1,362 @@ +PARAM = -DSNADPIC +PARAM += -DPIC32MX7 +PARAM += -DUARTUSB_ENABLED +PARAM += -DUART2_ENABLED +PARAM += -DSPI2_ENABLED +PARAM += -DSPI3_ENABLED +PARAM += -DSD_ENABLED +PARAM += -DGPIO_ENABLED +PARAM += -DGPIO1_ENABLED +PARAM += -DGPIO2_ENABLED +PARAM += -DGPIO3_ENABLED +PARAM += -DGPIO4_ENABLED +PARAM += -DGPIO5_ENABLED +PARAM += -DGPIO6_ENABLED +PARAM += -DADC_ENABLED +PARAM += -DPWM_ENABLED +PARAM += -DUSB_NUM_STRING_DESCRIPTORS=3 +PARAM += -DUSB_MAX_EP_NUMBER=3 +PARAM += -DCONS_MAJOR=UARTUSB_MAJOR +PARAM += -DBUS_DIV=1 +PARAM += -DBUS_KHZ=80000 +PARAM += -DCPU_KHZ=80000 +LDSCRIPT = "maximite/bootloader.ld" +# +# Makefile for RetroBSD, pic32 target +# +# DEBUG is set to -g by kconfig if debugging is requested (kconfig -g). +# +include ../gcc-config.mk + +AS = ${MIPS_GCC_PREFIX}as ${DEBUG} -mips32r2 -EL +CC = ${MIPS_GCC_PREFIX}gcc ${DEBUG} -mips32r2 -EL -nostdinc -fno-builtin -Werror -Wall +CPP = ${MIPS_GCC_PREFIX}cpp +LD = ${MIPS_GCC_PREFIX}gcc -mips32r2 -EL +LDFLAGS = -nostdlib -T ../${LDSCRIPT} -Wl,-Map=$(basename $@).map +SIZE = ${MIPS_GCC_PREFIX}size +OBJCOPY = ${MIPS_GCC_PREFIX}objcopy +OBJDUMP = ${MIPS_GCC_PREFIX}objdump + +ifneq (${MIPS_GCC_FORMAT},) + LDFLAGS += -Wl,--oformat=${MIPS_GCC_FORMAT} +endif + +# sources are located via $S relative to the compilation directory +S = ../.. + +DEPFLAGS = -MT $@ -MP -MD -MF .deps/$*.dep +DEFS = -I. ${PARAM} -DKERNEL $(DEPFLAGS) +CFLAGS = -O ${DEFS} + +# compile rules: rules are named COMPILE_${SUFFIX} +# SUFFIX is the file suffix, capitalized (e.g. C for a .c file). + +COMPILE_C = ${CC} -c ${CFLAGS} $< +COMPILE_S = ${CC} -c ${DEFS} $< + +OBJS = exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o \ + init_main.o init_sysent.o kern_clock.o kern_descrip.o \ + kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o \ + kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o \ + kern_subr.o kern_synch.o kern_sysctl.o kern_time.o subr_prf.o \ + subr_rmap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o \ + syscalls.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o \ + ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o \ + ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o \ + vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o clock.o cons.o devsw.o \ + exception.o machdep.o mem.o signal.o swap.o sysctl.o adc.o \ + gpio.o pwm.o sd.o spi.o spi_bus.o uart.o usb_device.o \ + usb_function_cdc.o usb_uart.o + +CFILES = $S/kernel/exec_aout.c $S/kernel/exec_conf.c $S/kernel/exec_elf.c \ + $S/kernel/exec_script.c $S/kernel/exec_subr.c \ + $S/kernel/init_main.c $S/kernel/init_sysent.c \ + $S/kernel/kern_clock.c $S/kernel/kern_descrip.c \ + $S/kernel/kern_exec.c $S/kernel/kern_exit.c \ + $S/kernel/kern_fork.c $S/kernel/kern_mman.c \ + $S/kernel/kern_proc.c $S/kernel/kern_prot.c \ + $S/kernel/kern_prot2.c $S/kernel/kern_resource.c \ + $S/kernel/kern_sig.c $S/kernel/kern_sig2.c $S/kernel/kern_subr.c \ + $S/kernel/kern_synch.c $S/kernel/kern_sysctl.c \ + $S/kernel/kern_time.c $S/kernel/subr_prf.c $S/kernel/subr_rmap.c \ + $S/kernel/sys_generic.c $S/kernel/sys_inode.c \ + $S/kernel/sys_pipe.c $S/kernel/sys_process.c \ + $S/kernel/syscalls.c $S/kernel/tty.c $S/kernel/tty_subr.c \ + $S/kernel/tty_tty.c $S/kernel/ufs_alloc.c $S/kernel/ufs_bio.c \ + $S/kernel/ufs_bmap.c $S/kernel/ufs_dsort.c $S/kernel/ufs_fio.c \ + $S/kernel/ufs_inode.c $S/kernel/ufs_mount.c \ + $S/kernel/ufs_namei.c $S/kernel/ufs_subr.c \ + $S/kernel/ufs_syscalls.c $S/kernel/ufs_syscalls2.c \ + $S/kernel/vfs_vnops.c $S/kernel/vm_sched.c $S/kernel/vm_swap.c \ + $S/kernel/vm_swp.c $S/pic32/clock.c $S/pic32/cons.c \ + $S/pic32/devsw.c $S/pic32/exception.c $S/pic32/machdep.c \ + $S/pic32/mem.c $S/pic32/signal.c $S/pic32/swap.c \ + $S/pic32/sysctl.c $S/pic32/adc.c $S/pic32/gpio.c $S/pic32/pwm.c \ + $S/pic32/sd.c $S/pic32/spi.c $S/pic32/spi_bus.c $S/pic32/uart.c \ + $S/pic32/usb_device.c $S/pic32/usb_function_cdc.c \ + $S/pic32/usb_uart.c swapunix.c + +# load lines for config "xxx" will be emitted as: +# xxx: ${SYSTEM_DEP} swapxxx.o +# ${SYSTEM_LD_HEAD} +# ${SYSTEM_LD} swapxxx.o +# ${SYSTEM_LD_TAIL} +SYSTEM_OBJ = startup.o ${OBJS} ioconf.o +ifeq (devcfg.c,$(wildcard devcfg.c)) + SYSTEM_OBJ += devcfg.o +endif +SYSTEM_DEP = Makefile ioconf.c machine sys .deps ${SYSTEM_OBJ} +SYSTEM_LD_HEAD = sh ../newvers.sh > vers.c; ${CC} $(CFLAGS) -c vers.c; rm -f $@ +SYSTEM_LD = -@echo ${LD} ${LDFLAGS} '$${SYSTEM_OBJ}' vers.o -o $@; \ + ${LD} ${LDFLAGS} ${SYSTEM_OBJ} vers.o -o $@ +SYSTEM_LD_TAIL = ${SIZE} $@; \ + $(OBJCOPY) -O ihex --change-addresses=0x80000000 $@ $(basename $@).hex; \ + $(OBJCOPY) -O binary -R .boot -R .config $@ $(basename $@).bin; \ + $(OBJDUMP) -d -S $@ > $(basename $@).dis + +unix: unix.elf + +unix.elf: ${SYSTEM_DEP} swapunix.o + ${SYSTEM_LD_HEAD} + ${SYSTEM_LD} swapunix.o + ${SYSTEM_LD_TAIL} + +swapunix.o: swapunix.c + ${COMPILE_C} + +all: unix + +clean: + rm -rf .deps *.elf *.o *.map *.dis *.bin machine sys + +clean-all: clean + rm -f *.h *.hex ioconf.c swap*.c vers.c + +reconfig ioconf.c: Config ../../../tools/kconfig/kconfig + ../../../tools/kconfig/kconfig Config + $(MAKE) clean + rm -f *.hex + +load: unix.elf + pic32prog unix.hex + +machine: + ln -s .. $@ + +sys: + ln -s ../../include $@ + +.deps: + mkdir .deps + +startup.o: ../startup.S + ${COMPILE_S} + +ioconf.o: ioconf.c + ${COMPILE_C} + +exec_aout.o: $S/kernel/exec_aout.c + ${COMPILE_C} + +exec_conf.o: $S/kernel/exec_conf.c + ${COMPILE_C} + +exec_elf.o: $S/kernel/exec_elf.c + ${COMPILE_C} + +exec_script.o: $S/kernel/exec_script.c + ${COMPILE_C} + +exec_subr.o: $S/kernel/exec_subr.c + ${COMPILE_C} + +init_main.o: $S/kernel/init_main.c + ${COMPILE_C} + +init_sysent.o: $S/kernel/init_sysent.c + ${COMPILE_C} + +kern_clock.o: $S/kernel/kern_clock.c + ${COMPILE_C} + +kern_descrip.o: $S/kernel/kern_descrip.c + ${COMPILE_C} + +kern_exec.o: $S/kernel/kern_exec.c + ${COMPILE_C} + +kern_exit.o: $S/kernel/kern_exit.c + ${COMPILE_C} + +kern_fork.o: $S/kernel/kern_fork.c + ${COMPILE_C} + +kern_mman.o: $S/kernel/kern_mman.c + ${COMPILE_C} + +kern_proc.o: $S/kernel/kern_proc.c + ${COMPILE_C} + +kern_prot.o: $S/kernel/kern_prot.c + ${COMPILE_C} + +kern_prot2.o: $S/kernel/kern_prot2.c + ${COMPILE_C} + +kern_resource.o: $S/kernel/kern_resource.c + ${COMPILE_C} + +kern_sig.o: $S/kernel/kern_sig.c + ${COMPILE_C} + +kern_sig2.o: $S/kernel/kern_sig2.c + ${COMPILE_C} + +kern_subr.o: $S/kernel/kern_subr.c + ${COMPILE_C} + +kern_synch.o: $S/kernel/kern_synch.c + ${COMPILE_C} + +kern_sysctl.o: $S/kernel/kern_sysctl.c + ${COMPILE_C} + +kern_time.o: $S/kernel/kern_time.c + ${COMPILE_C} + +subr_prf.o: $S/kernel/subr_prf.c + ${COMPILE_C} + +subr_rmap.o: $S/kernel/subr_rmap.c + ${COMPILE_C} + +sys_generic.o: $S/kernel/sys_generic.c + ${COMPILE_C} + +sys_inode.o: $S/kernel/sys_inode.c + ${COMPILE_C} + +sys_pipe.o: $S/kernel/sys_pipe.c + ${COMPILE_C} + +sys_process.o: $S/kernel/sys_process.c + ${COMPILE_C} + +syscalls.o: $S/kernel/syscalls.c + ${COMPILE_C} + +tty.o: $S/kernel/tty.c + ${COMPILE_C} + +tty_subr.o: $S/kernel/tty_subr.c + ${COMPILE_C} + +tty_tty.o: $S/kernel/tty_tty.c + ${COMPILE_C} + +ufs_alloc.o: $S/kernel/ufs_alloc.c + ${COMPILE_C} + +ufs_bio.o: $S/kernel/ufs_bio.c + ${COMPILE_C} + +ufs_bmap.o: $S/kernel/ufs_bmap.c + ${COMPILE_C} + +ufs_dsort.o: $S/kernel/ufs_dsort.c + ${COMPILE_C} + +ufs_fio.o: $S/kernel/ufs_fio.c + ${COMPILE_C} + +ufs_inode.o: $S/kernel/ufs_inode.c + ${COMPILE_C} + +ufs_mount.o: $S/kernel/ufs_mount.c + ${COMPILE_C} + +ufs_namei.o: $S/kernel/ufs_namei.c + ${COMPILE_C} + +ufs_subr.o: $S/kernel/ufs_subr.c + ${COMPILE_C} + +ufs_syscalls.o: $S/kernel/ufs_syscalls.c + ${COMPILE_C} + +ufs_syscalls2.o: $S/kernel/ufs_syscalls2.c + ${COMPILE_C} + +vfs_vnops.o: $S/kernel/vfs_vnops.c + ${COMPILE_C} + +vm_sched.o: $S/kernel/vm_sched.c + ${COMPILE_C} + +vm_swap.o: $S/kernel/vm_swap.c + ${COMPILE_C} + +vm_swp.o: $S/kernel/vm_swp.c + ${COMPILE_C} + +clock.o: $S/pic32/clock.c + ${COMPILE_C} + +cons.o: $S/pic32/cons.c + ${COMPILE_C} + +devsw.o: $S/pic32/devsw.c + ${COMPILE_C} + +exception.o: $S/pic32/exception.c + ${COMPILE_C} + +machdep.o: $S/pic32/machdep.c + ${COMPILE_C} + +mem.o: $S/pic32/mem.c + ${COMPILE_C} + +signal.o: $S/pic32/signal.c + ${COMPILE_C} + +swap.o: $S/pic32/swap.c + ${COMPILE_C} + +sysctl.o: $S/pic32/sysctl.c + ${COMPILE_C} + +adc.o: $S/pic32/adc.c + ${COMPILE_C} + +gpio.o: $S/pic32/gpio.c + ${COMPILE_C} + +pwm.o: $S/pic32/pwm.c + ${COMPILE_C} + +sd.o: $S/pic32/sd.c + ${COMPILE_C} + +spi.o: $S/pic32/spi.c + ${COMPILE_C} + +spi_bus.o: $S/pic32/spi_bus.c + ${COMPILE_C} + +uart.o: $S/pic32/uart.c + ${COMPILE_C} + +usb_device.o: $S/pic32/usb_device.c + ${COMPILE_C} + +usb_function_cdc.o: $S/pic32/usb_function_cdc.c + ${COMPILE_C} + +usb_uart.o: $S/pic32/usb_uart.c + ${COMPILE_C} + + +ifeq (.deps, $(wildcard .deps)) +-include .deps/*.dep +endif diff --git a/tools/build/Makefile b/tools/build/Makefile index 859486d..277689d 100644 --- a/tools/build/Makefile +++ b/tools/build/Makefile @@ -1,5 +1,5 @@ BOARD_LIST = duinomite fubarino max32 maximite maximite-color \ - picadillo pinguino-micro sdxl + picadillo pinguino-micro sdxl snadpic SKEL_SCRATCH = skeleton/linux32/pic32prog \ skeleton/linux64/pic32prog \ diff --git a/tools/build/skeleton/README.txt b/tools/build/skeleton/README.txt index d0f152e..832f6ce 100644 --- a/tools/build/skeleton/README.txt +++ b/tools/build/skeleton/README.txt @@ -63,8 +63,8 @@ serial port (COM port) on your computer, depending on your board type. Boards which use HID bootloader: Maximite, Color Maximite, -Duinomite, CGMMSTICK1. For these boards you do not need to -specify the -d option and device name. +Duinomite, CGMMSTICK1, SnadPIC. For these boards you do not +need to specify the -d option and device name. Boards which use a virtual serial port for bootloader: Fubarino SD, chipKIT Max32, Picadillo 35T, Majenko SDXL. For these