bsp/atsam: New

Close #2529.
This commit is contained in:
Sebastian Huber
2016-01-14 16:03:51 +01:00
parent c354fac86a
commit f2e0f8e1a7
22 changed files with 2776 additions and 0 deletions

View File

@@ -4,6 +4,8 @@ AC_DEFUN([RTEMS_CHECK_BSPDIR],
case "$1" in
altera-cyclone-v )
AC_CONFIG_SUBDIRS([altera-cyclone-v]);;
atsam )
AC_CONFIG_SUBDIRS([atsam]);;
beagle )
AC_CONFIG_SUBDIRS([beagle]);;
csb336 )

View File

@@ -0,0 +1,439 @@
ACLOCAL_AMFLAGS = -I ../../../../aclocal
include $(top_srcdir)/../../../../automake/compile.am
###############################################################################
# Data #
###############################################################################
dist_project_lib_DATA = bsp_specs
noinst_LIBRARIES = libbspstart.a
libbspstart_a_SOURCES = ../shared/start/start.S
project_lib_DATA =
project_lib_DATA += start.$(OBJEXT)
project_lib_DATA += startup/linkcmds
project_lib_DATA += startup/linkcmds.memory
project_lib_DATA += startup/linkcmds.intsram
project_lib_DATA += startup/linkcmds.sdram
###############################################################################
# Header #
###############################################################################
include_HEADERS =
include_HEADERS += ../../shared/include/tm27.h
include_HEADERS += ../shared/CMSIS/Include/core_cm7.h
include_HEADERS += ../shared/CMSIS/Include/core_cmInstr.h
include_HEADERS += ../shared/CMSIS/Include/core_cmFunc.h
include_HEADERS += ../shared/CMSIS/Include/core_cmSimd.h
include_HEADERS += ../shared/CMSIS/Include/cmsis_gcc.h
include_HEADERS += include/bsp.h
nodist_include_HEADERS =
nodist_include_HEADERS += ../../shared/include/coverhd.h
nodist_include_HEADERS += include/bspopts.h
include_bspdir = $(includedir)/bsp
nodist_include_bsp_HEADERS =
nodist_include_bsp_HEADERS += ../../shared/include/bootcard.h
include_bsp_HEADERS =
include_bsp_HEADERS += ../../shared/include/utility.h
include_bsp_HEADERS += ../../shared/include/irq-generic.h
include_bsp_HEADERS += ../../shared/include/irq-info.h
include_bsp_HEADERS += ../../shared/include/stackalloc.h
include_bsp_HEADERS += ../shared/include/start.h
include_bsp_HEADERS += ../shared/armv7m/include/armv7m-irq.h
include_bsp_HEADERS += include/irq.h
include_bsp_HEADERS += include/pin-config.h
include_libchipdir = $(includedir)/libchip
include_libchip_HEADERS =
include_libchip_HEADERS += libraries/libchip/chip.h
include_libchip_HEADERS += libraries/libchip/compiler.h
include_libchip_includedir = $(includedir)/libchip/include
include_libchip_include_HEADERS =
include_libchip_include_HEADERS += libraries/libchip/include/acc.h
include_libchip_include_HEADERS += libraries/libchip/include/adc.h
include_libchip_include_HEADERS += libraries/libchip/include/aes.h
include_libchip_include_HEADERS += libraries/libchip/include/afec.h
include_libchip_include_HEADERS += libraries/libchip/include/afe_dma.h
include_libchip_include_HEADERS += libraries/libchip/include/chip.h
include_libchip_include_HEADERS += libraries/libchip/include/dac_dma.h
include_libchip_include_HEADERS += libraries/libchip/include/efc.h
include_libchip_include_HEADERS += libraries/libchip/include/exceptions.h
include_libchip_include_HEADERS += libraries/libchip/include/flashd.h
include_libchip_include_HEADERS += libraries/libchip/include/gmacd.h
include_libchip_include_HEADERS += libraries/libchip/include/gmac.h
include_libchip_include_HEADERS += libraries/libchip/include/hsmci.h
include_libchip_include_HEADERS += libraries/libchip/include/icm.h
include_libchip_include_HEADERS += libraries/libchip/include/isi.h
include_libchip_include_HEADERS += libraries/libchip/include/iso7816_4.h
include_libchip_include_HEADERS += libraries/libchip/include/mcan.h
include_libchip_include_HEADERS += libraries/libchip/include/mcid.h
include_libchip_include_HEADERS += libraries/libchip/include/mediaLB.h
include_libchip_include_HEADERS += libraries/libchip/include/mpu.h
include_libchip_include_HEADERS += libraries/libchip/include/pio_capture.h
include_libchip_include_HEADERS += libraries/libchip/include/pio.h
include_libchip_include_HEADERS += libraries/libchip/include/pio_it.h
include_libchip_include_HEADERS += libraries/libchip/include/pmc.h
include_libchip_include_HEADERS += libraries/libchip/include/pwmc.h
include_libchip_include_HEADERS += libraries/libchip/include/qspi_dma.h
include_libchip_include_HEADERS += libraries/libchip/include/qspi.h
include_libchip_include_HEADERS += libraries/libchip/include/rstc.h
include_libchip_include_HEADERS += libraries/libchip/include/rtc.h
include_libchip_include_HEADERS += libraries/libchip/include/rtt.h
include_libchip_include_HEADERS += libraries/libchip/include/sdramc.h
include_libchip_include_HEADERS += libraries/libchip/include/smc.h
include_libchip_include_HEADERS += libraries/libchip/include/spi_dma.h
include_libchip_include_HEADERS += libraries/libchip/include/spi.h
include_libchip_include_HEADERS += libraries/libchip/include/ssc.h
include_libchip_include_HEADERS += libraries/libchip/include/supc.h
include_libchip_include_HEADERS += libraries/libchip/include/tc.h
include_libchip_include_HEADERS += libraries/libchip/include/timetick.h
include_libchip_include_HEADERS += libraries/libchip/include/trace.h
include_libchip_include_HEADERS += libraries/libchip/include/trng.h
include_libchip_include_HEADERS += libraries/libchip/include/twid.h
include_libchip_include_HEADERS += libraries/libchip/include/twi.h
include_libchip_include_HEADERS += libraries/libchip/include/uart_dma.h
include_libchip_include_HEADERS += libraries/libchip/include/uart.h
include_libchip_include_HEADERS += libraries/libchip/include/usart_dma.h
include_libchip_include_HEADERS += libraries/libchip/include/usart.h
include_libchip_include_HEADERS += libraries/libchip/include/usbhs.h
include_libchip_include_HEADERS += libraries/libchip/include/video.h
include_libchip_include_HEADERS += libraries/libchip/include/wdt.h
include_libchip_include_HEADERS += libraries/libchip/include/xdmac.h
include_libchip_include_HEADERS += libraries/libchip/include/xdmad.h
include_libchip_include_HEADERS += libraries/libchip/include/xdma_hardware_interface.h
include_libchip_include_same70dir = $(includedir)/libchip/include/same70
include_libchip_include_same70_HEADERS =
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70j19.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70j20.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70j21.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70n19.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70n20.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70n21.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70q19.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70q20.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/same70q21.h
include_libchip_include_same70_HEADERS += libraries/libchip/include/same70/system_same70.h
include_libchip_include_same70_componentdir = $(includedir)/libchip/include/same70/component
include_libchip_include_same70_component_HEADERS =
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_acc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_aes.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_afec.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_chipid.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_dacc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_efc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_gmac.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_gpbr.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_hsmci.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_icm.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_isi.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_matrix.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_mcan.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_pio.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_pmc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_pwm.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_qspi.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_rstc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_rswdt.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_rtc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_rtt.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_sdramc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_smc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_spi.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_ssc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_supc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_tc.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_trng.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_twihs.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_uart.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_usart.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_usbhs.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_utmi.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_wdt.h
include_libchip_include_same70_component_HEADERS += libraries/libchip/include/same70/component/component_xdmac.h
include_libchip_include_same70_piodir = $(includedir)/libchip/include/same70/pio
include_libchip_include_same70_pio_HEADERS =
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70j19.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70j20.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70j21.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70n19.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70n20.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70n21.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70q19.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70q20.h
include_libchip_include_same70_pio_HEADERS += libraries/libchip/include/same70/pio/pio_same70q21.h
include_libchip_include_sams70dir = $(includedir)/libchip/include/sams70
include_libchip_include_sams70_HEADERS =
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70j19.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70j20.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70j21.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70n19.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70n20.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70n21.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70q19.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70q20.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/sams70q21.h
include_libchip_include_sams70_HEADERS += libraries/libchip/include/sams70/system_sams70.h
include_libchip_include_sams70_componentdir = $(includedir)/libchip/include/sams70/component
include_libchip_include_sams70_component_HEADERS =
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_acc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_aes.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_afec.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_chipid.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_dacc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_efc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_gpbr.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_hsmci.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_icm.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_isi.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_matrix.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_pio.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_pmc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_pwm.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_qspi.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_rstc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_rswdt.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_rtc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_rtt.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_sdramc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_smc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_spi.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_ssc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_supc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_tc.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_trng.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_twihs.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_uart.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_usart.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_usbhs.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_utmi.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_wdt.h
include_libchip_include_sams70_component_HEADERS += libraries/libchip/include/sams70/component/component_xdmac.h
include_libchip_include_sams70_piodir = $(includedir)/libchip/include/sams70/pio
include_libchip_include_sams70_pio_HEADERS =
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70j19.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70j20.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70j21.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70n19.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70n20.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70n21.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70q19.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70q20.h
include_libchip_include_sams70_pio_HEADERS += libraries/libchip/include/sams70/pio/pio_sams70q21.h
include_libchip_include_samv71dir = $(includedir)/libchip/include/samv71
include_libchip_include_samv71_HEADERS =
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71j19.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71j20.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71j21.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71n19.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71n20.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71n21.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71q19.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71q20.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/samv71q21.h
include_libchip_include_samv71_HEADERS += libraries/libchip/include/samv71/system_samv71.h
include_libchip_include_samv71_componentdir = $(includedir)/libchip/include/samv71/component
include_libchip_include_samv71_component_HEADERS =
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_acc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_aes.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_afec.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_chipid.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_dacc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_efc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_gmac.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_gpbr.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_hsmci.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_icm.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_isi.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_matrix.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_mcan.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_mlb.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_pio.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_pmc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_pwm.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_qspi.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_rstc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_rswdt.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_rtc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_rtt.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_sdramc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_smc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_spi.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_ssc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_supc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_tc.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_trng.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_twihs.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_uart.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_usart.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_usbhs.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_utmi.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_wdt.h
include_libchip_include_samv71_component_HEADERS += libraries/libchip/include/samv71/component/component_xdmac.h
include_libchip_include_samv71_piodir = $(includedir)/libchip/include/samv71/pio
include_libchip_include_samv71_pio_HEADERS =
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71j19.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71j20.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71j21.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71n19.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71n20.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71n21.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71q19.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71q20.h
include_libchip_include_samv71_pio_HEADERS += libraries/libchip/include/samv71/pio/pio_samv71q21.h
###############################################################################
# LibBSP #
###############################################################################
noinst_LIBRARIES += libbsp.a
libbsp_a_SOURCES =
libbsp_a_CPPFLAGS =
libbsp_a_LIBADD =
# Shared
libbsp_a_SOURCES += ../../shared/bootcard.c
libbsp_a_SOURCES += ../../shared/bspclean.c
libbsp_a_SOURCES += ../../shared/bspgetworkarea.c
libbsp_a_SOURCES += ../../shared/bsplibc.c
libbsp_a_SOURCES += ../../shared/bsppost.c
libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
libbsp_a_SOURCES += ../../shared/cpucounterread.c
libbsp_a_SOURCES += ../../shared/cpucounterdiff.c
libbsp_a_SOURCES += ../../shared/gnatinstallhandler.c
libbsp_a_SOURCES += ../../shared/sbrk.c
libbsp_a_SOURCES += ../../shared/src/stackalloc.c
# libchip
libbsp_a_SOURCES += libraries/libchip/source/acc.c
libbsp_a_SOURCES += libraries/libchip/source/aes.c
libbsp_a_SOURCES += libraries/libchip/source/afec.c
libbsp_a_SOURCES += libraries/libchip/source/afe_dma.c
libbsp_a_SOURCES += libraries/libchip/source/dac_dma.c
libbsp_a_SOURCES += libraries/libchip/source/efc.c
libbsp_a_SOURCES += libraries/libchip/source/exceptions.c
libbsp_a_SOURCES += libraries/libchip/source/flashd.c
libbsp_a_SOURCES += libraries/libchip/source/gmac.c
libbsp_a_SOURCES += libraries/libchip/source/gmacd.c
libbsp_a_SOURCES += libraries/libchip/source/hsmci.c
libbsp_a_SOURCES += libraries/libchip/source/icm.c
libbsp_a_SOURCES += libraries/libchip/source/isi.c
libbsp_a_SOURCES += libraries/libchip/source/mcan.c
libbsp_a_SOURCES += libraries/libchip/source/mediaLB.c
libbsp_a_SOURCES += libraries/libchip/source/mpu.c
libbsp_a_SOURCES += libraries/libchip/source/pio.c
libbsp_a_SOURCES += libraries/libchip/source/pio_capture.c
libbsp_a_SOURCES += libraries/libchip/source/pio_it.c
libbsp_a_SOURCES += libraries/libchip/source/pmc.c
libbsp_a_SOURCES += libraries/libchip/source/pwmc.c
libbsp_a_SOURCES += libraries/libchip/source/qspi.c
libbsp_a_SOURCES += libraries/libchip/source/qspi_dma.c
libbsp_a_SOURCES += libraries/libchip/source/rstc.c
libbsp_a_SOURCES += libraries/libchip/source/rtc.c
libbsp_a_SOURCES += libraries/libchip/source/rtt.c
libbsp_a_SOURCES += libraries/libchip/source/sdramc.c
libbsp_a_SOURCES += libraries/libchip/source/spi.c
libbsp_a_SOURCES += libraries/libchip/source/spi_dma.c
libbsp_a_SOURCES += libraries/libchip/source/ssc.c
libbsp_a_SOURCES += libraries/libchip/source/supc.c
libbsp_a_SOURCES += libraries/libchip/source/tc.c
libbsp_a_SOURCES += libraries/libchip/source/trng.c
libbsp_a_SOURCES += libraries/libchip/source/twi.c
libbsp_a_SOURCES += libraries/libchip/source/twid.c
libbsp_a_SOURCES += libraries/libchip/source/uart.c
libbsp_a_SOURCES += libraries/libchip/source/uart_dma.c
libbsp_a_SOURCES += libraries/libchip/source/usart.c
libbsp_a_SOURCES += libraries/libchip/source/usart_dma.c
libbsp_a_SOURCES += libraries/libchip/source/wdt.c
libbsp_a_SOURCES += libraries/libchip/source/xdmac.c
libbsp_a_SOURCES += libraries/libchip/source/xdmad.c
libbsp_a_SOURCES += libraries/libchip/source/xdma_hardware_interface.c
# libboard
libbsp_a_SOURCES += libraries/libboard/resources_v71/system_samv71.c
libbsp_a_SOURCES += libraries/libboard/source/board_lowlevel.c
libbsp_a_SOURCES += libraries/libboard/source/board_memories.c
libbsp_a_SOURCES += libraries/libboard/source/dbg_console.c
# Startup
libbsp_a_SOURCES += ../shared/startup/bsp-start-memcpy.S
libbsp_a_SOURCES += ../shared/armv7m/startup/bspreset.c
libbsp_a_SOURCES += startup/bspstart.c
libbsp_a_SOURCES += startup/bspstarthooks.c
libbsp_a_SOURCES += startup/pin-config.c
# IRQ
libbsp_a_SOURCES += ../../shared/src/irq-default-handler.c
libbsp_a_SOURCES += ../../shared/src/irq-generic.c
libbsp_a_SOURCES += ../../shared/src/irq-info.c
libbsp_a_SOURCES += ../../shared/src/irq-legacy.c
libbsp_a_SOURCES += ../../shared/src/irq-server.c
libbsp_a_SOURCES += ../../shared/src/irq-shell.c
libbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq.c
libbsp_a_SOURCES += ../shared/armv7m/irq/armv7m-irq-dispatch.c
# Console
libbsp_a_SOURCES += ../../shared/console-termios.c
libbsp_a_SOURCES += console/console.c
libbsp_a_SOURCES += console/debug-console.c
# Clock
libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
libbsp_a_SOURCES += ../shared/armv7m/clock/armv7m-clock-config.c
libbsp_a_SOURCES += clock/systick-freq.c
# Timer
libbsp_a_SOURCES += ../../shared/timerstub.c
# Cache
libbsp_a_SOURCES += ../../../libcpu/shared/src/cache_manager.c
libbsp_a_SOURCES += ../shared/armv7m/include/cache_.h
libbsp_a_CPPFLAGS += -I$(srcdir)/../shared/armv7m/include
# Includes
libbsp_a_CPPFLAGS += -I$(srcdir)/../shared/CMSIS/Include
libbsp_a_CPPFLAGS += -I$(srcdir)/libraries/libboard
libbsp_a_CPPFLAGS += -I$(srcdir)/libraries/libboard/include
libbsp_a_CPPFLAGS += -I$(srcdir)/libraries/libchip
libbsp_a_CPPFLAGS += -I$(srcdir)/libraries/libchip/include
###############################################################################
# Special Rules #
###############################################################################
DISTCLEANFILES = include/bspopts.h
include $(srcdir)/preinstall.am
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -0,0 +1,59 @@
Board support package for the Atmel SAM V71/V70/E70/S70 chip platform.
The BSP is customized to a particular board/chip variant by means of configure
command line options.
Use --enable-chip=XYZ to select the chip variant where XYZ is one of same70j19,
same70j20, same70j21, same70n19, same70n20, same70n21, same70q19, same70q20,
same70q21, sams70j19, sams70j20, sams70j21, sams70n19, sams70n20, sams70n21,
sams70q19, sams70q20, sams70q21, samv71j19, samv71j20, samv71j21, samv71n19,
samv71n20, samv71n21, samv71q19, samv71q20 and samv71q21. By default the BSP
uses the ATSAMV71Q21 chip. Not all variants are tested.
Use BOARD_MAINOSC=XYZ to set the main oscillator frequency in Hz (default
12MHz).
Use BOARD_MCK=XYZ to set the Master Clock (MCK) frequency in Hz (default
123MHz). The default value enables operation of an external SDRAM, e.g. 150MHz
would be too fast.
Use ATSAM_CONSOLE_BAUD=XYZ to set the initial baud for console devices (default
115200).
Use ATSAM_CONSOLE_DEVICE_TYPE=XYZ to set the device type for /dev/console, use
0 for USART and 1 for UART (default USART).
Use ATSAM_CONSOLE_DEVICE_INDEX=XYZ to set the device index for /dev/console
(default 1, e.g. USART1).
Use ATSAM_CONSOLE_USE_INTERRUPTS=XYZ to set the use interrupt driven mode for
console devices (used by default).
Use ATSAM_MEMORY_TCM_SIZE=XYZ to set the size of tightly coupled memories (TCM)
in bytes (default 0x00000000).
Use ATSAM_MEMORY_INTFLASH_SIZE=XYZ to set the size of internal flash in bytes
(default is derived from chip variant).
Use ATSAM_MEMORY_INTSRAM_SIZE=XYZ to set the size of internal SRAM in bytes
(default is derived from chip variant).
Use ATSAM_MEMORY_SDRAM_SIZE=XYZ to set the size of external SDRAM in bytes
(default 0x00200000).
The pins may be configured by the application at link-time. See
<bsp/pin-config.h>.
The clock driver uses the ARMv7-M Systick.
The console driver supports the USART and UART devices.
The default linker command file places the code into the internal flash. Use
"LDFLAGS += -qnolinkcmds -T linkcmds.sdram" to place the code into the external
SDRAM. Use "LDFLAGS += -qnolinkcmds -T linkcmds.intsram" to place the code
into the internal SRAM.
The fast text section uses the ITCM. The fast data section uses the DTCM.
Data and instruction cache are enabled during system start. The RTEMS cache
manager is supported with exception of the freeze functions.

View File

@@ -0,0 +1,13 @@
%rename endfile old_endfile
%rename startfile old_startfile
%rename link old_link
*startfile:
%{!qrtems: %(old_startfile)} \
%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
*link:
%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
*endfile:
%{!qrtems: %(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s }

View File

@@ -0,0 +1,31 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <bsp.h>
#include <chip.h>
uint32_t atsam_systick_frequency(void)
{
uint32_t mdiv = (PMC->PMC_MCKR & PMC_MCKR_MDIV_Msk) >> PMC_MCKR_MDIV_Pos;
uint32_t fclk;
if (mdiv == 3) {
fclk = BOARD_MCK * mdiv;
} else {
fclk = BOARD_MCK * (1 << mdiv);
}
return fclk;
}

View File

@@ -0,0 +1,85 @@
AC_PREREQ([2.69])
AC_INIT([rtems-c-src-lib-libbsp-arm-atsam],[_RTEMS_VERSION],[https://devel.rtems.org/newticket])
AC_CONFIG_SRCDIR([bsp_specs])
RTEMS_TOP(../../../../../..)
RTEMS_CANONICAL_TARGET_CPU
AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.12.2])
RTEMS_BSP_CONFIGURE
RTEMS_PROG_CC_FOR_TARGET
RTEMS_CANONICALIZE_TOOLS
RTEMS_PROG_CCAS
RTEMS_CHECK_NETWORKING
AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes")
RTEMS_BSP_CLEANUP_OPTIONS(0, 1)
AC_ARG_ENABLE(
[chip],
[AS_HELP_STRING([--enable-chip],[select a chip variant (default samv71q21)])],
[case "${enableval}" in
same70j19) AC_DEFINE([__SAME70J19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
same70j20) AC_DEFINE([__SAME70J20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
same70j21) AC_DEFINE([__SAME70J21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
same70n19) AC_DEFINE([__SAME70N19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
same70n20) AC_DEFINE([__SAME70N20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
same70n21) AC_DEFINE([__SAME70N21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
same70q19) AC_DEFINE([__SAME70Q19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
same70q20) AC_DEFINE([__SAME70Q20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
same70q21) AC_DEFINE([__SAME70Q21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
sams70j19) AC_DEFINE([__SAMS70J19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
sams70j20) AC_DEFINE([__SAMS70J20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
sams70j21) AC_DEFINE([__SAMS70J21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
sams70n19) AC_DEFINE([__SAMS70N19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
sams70n20) AC_DEFINE([__SAMS70N20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
sams70n21) AC_DEFINE([__SAMS70N21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
sams70q19) AC_DEFINE([__SAMS70Q19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
sams70q20) AC_DEFINE([__SAMS70Q20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
sams70q21) AC_DEFINE([__SAMS70Q21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
samv71j19) AC_DEFINE([__SAMV71J19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
samv71j20) AC_DEFINE([__SAMV71J20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
samv71j21) AC_DEFINE([__SAMV71J21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
samv71n19) AC_DEFINE([__SAMV71N19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
samv71n20) AC_DEFINE([__SAMV71N20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
samv71n21) AC_DEFINE([__SAMV71N21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
samv71q19) AC_DEFINE([__SAMV71Q19__],[1],[chip variant]) INTFLASH=0x00080000 ; INTSRAM=0x00004000 ;;
samv71q20) AC_DEFINE([__SAMV71Q20__],[1],[chip variant]) INTFLASH=0x00100000 ; INTSRAM=0x00006000 ;;
samv71q21) AC_DEFINE([__SAMV71Q21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000 ;;
*) AC_MSG_ERROR([bad value ${enableval} for chip variant]) ;;
esac],
[AC_DEFINE([__SAMV71Q21__],[1],[chip variant]) INTFLASH=0x00200000 ; INTSRAM=0x00006000])
RTEMS_BSPOPTS_SET([BOARD_MAINOSC],[*],[12000000])
RTEMS_BSPOPTS_HELP([BOARD_MAINOSC],[Main oscillator frequency in Hz (default 12MHz)])
RTEMS_BSPOPTS_SET([BOARD_MCK],[*],[123000000])
RTEMS_BSPOPTS_HELP([BOARD_MCK],[Master Clock (MCK) frequency in Hz (default 123MHz)])
RTEMS_BSPOPTS_SET([ATSAM_CONSOLE_BAUD],[*],[115200])
RTEMS_BSPOPTS_HELP([ATSAM_CONSOLE_BAUD],[initial baud for console devices (default 115200)])
RTEMS_BSPOPTS_SET([ATSAM_CONSOLE_DEVICE_TYPE],[*],[0])
RTEMS_BSPOPTS_HELP([ATSAM_CONSOLE_DEVICE_TYPE],[device type for /dev/console, use 0 for USART and 1 for UART (default USART)])
RTEMS_BSPOPTS_SET([ATSAM_CONSOLE_DEVICE_INDEX],[*],[1])
RTEMS_BSPOPTS_HELP([ATSAM_CONSOLE_DEVICE_INDEX],[device index for /dev/console (default 1, e.g. USART1)])
RTEMS_BSPOPTS_SET([ATSAM_CONSOLE_USE_INTERRUPTS],[*],[1])
RTEMS_BSPOPTS_HELP([ATSAM_CONSOLE_USE_INTERRUPTS],[use interrupt driven mode for console devices (used by default)])
AC_DEFUN([ATSAM_LINKCMD],[
AC_ARG_VAR([$1],[$2])dnl
[$1]=[$]{[$1]:-[$3]}
])
ATSAM_LINKCMD([ATSAM_MEMORY_TCM_SIZE],[size of tightly coupled memories (TCM) in bytes],[0x00000000])
ATSAM_LINKCMD([ATSAM_MEMORY_INTFLASH_SIZE],[size of internal flash in bytes],[${INTFLASH}])
ATSAM_LINKCMD([ATSAM_MEMORY_INTSRAM_SIZE],[size of internal SRAM in bytes],[${INTSRAM}])
ATSAM_LINKCMD([ATSAM_MEMORY_SDRAM_SIZE],[size of external SDRAM in bytes],[0x00200000])
AC_CONFIG_FILES([
Makefile
startup/linkcmds.memory
])
AC_OUTPUT

View File

@@ -0,0 +1,531 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <bsp.h>
#include <bsp/irq.h>
#include <bsp/fatal.h>
#include <rtems/termiostypes.h>
#include <chip.h>
typedef struct {
rtems_termios_device_context base;
Usart *regs;
rtems_vector_number irq;
uint32_t id;
bool console;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
bool transmitting;
#endif
} atsam_usart_context;
static atsam_usart_context atsam_usart_instances[] = {
{
.regs = USART0,
.irq = USART0_IRQn,
.id = ID_USART0
}
#ifdef USART1
, {
.regs = USART1,
.irq = USART1_IRQn,
.id = ID_USART1
}
#endif
#ifdef USART2
, {
.regs = USART2,
.irq = USART2_IRQn,
.id = ID_USART2
}
#endif
};
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
static void atsam_usart_interrupt(void *arg)
{
rtems_termios_tty *tty = arg;
atsam_usart_context *ctx = rtems_termios_get_device_context(tty);
Usart *regs = ctx->regs;
uint32_t csr = regs->US_CSR;
while ((csr & US_CSR_RXRDY) != 0) {
char c = (char) regs->US_RHR;
rtems_termios_enqueue_raw_characters(tty, &c, 1);
csr = regs->US_CSR;
}
if (ctx->transmitting && (csr & US_CSR_TXEMPTY) != 0) {
rtems_termios_dequeue_characters(tty, 1);
}
}
#endif
static bool atsam_usart_set_attributes(
rtems_termios_device_context *base,
const struct termios *term
)
{
atsam_usart_context *ctx = (atsam_usart_context *) base;
Usart *regs = ctx->regs;
rtems_termios_baud_t baud;
uint32_t mr;
baud = rtems_termios_baud_to_number(term->c_cflag);
regs->US_BRGR = (BOARD_MCK / baud) / 16;
if ((term->c_cflag & CREAD) != 0) {
regs->US_CR = US_CR_RXEN | US_CR_TXEN;
} else {
regs->US_CR = US_CR_TXEN;
}
mr = US_MR_USART_MODE_NORMAL | US_MR_USCLKS_MCK;
switch (term->c_cflag & CSIZE) {
case CS5:
mr |= US_MR_CHRL_5_BIT;
break;
case CS6:
mr |= US_MR_CHRL_6_BIT;
break;
case CS7:
mr |= US_MR_CHRL_7_BIT;
break;
default:
mr |= US_MR_CHRL_8_BIT;
break;
}
if ((term->c_cflag & PARENB) != 0) {
if ((term->c_cflag & PARODD) != 0) {
mr |= US_MR_PAR_ODD;
} else {
mr |= US_MR_PAR_EVEN;
}
} else {
mr |= US_MR_PAR_NO;
}
if ((term->c_cflag & CSTOPB) != 0) {
mr |= US_MR_NBSTOP_2_BIT;
} else {
mr |= US_MR_NBSTOP_1_BIT;
}
regs->US_MR = mr;
return true;
}
static bool atsam_usart_first_open(
rtems_termios_tty *tty,
rtems_termios_device_context *base,
struct termios *term,
rtems_libio_open_close_args_t *args
)
{
atsam_usart_context *ctx = (atsam_usart_context *) base;
Usart *regs = ctx->regs;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
rtems_status_code sc;
#endif
regs->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_RSTSTA;
regs->US_IDR = 0xffffffff;
PMC_EnablePeripheral(ctx->id);
rtems_termios_set_initial_baud(tty, ATSAM_CONSOLE_BAUD);
atsam_usart_set_attributes(base, term);
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
regs->US_IER = US_IDR_RXRDY;
sc = rtems_interrupt_handler_install(
ctx->irq,
"USART",
RTEMS_INTERRUPT_SHARED,
atsam_usart_interrupt,
tty
);
if (sc != RTEMS_SUCCESSFUL) {
return false;
}
#endif
return true;
}
static void atsam_usart_last_close(
rtems_termios_tty *tty,
rtems_termios_device_context *base,
rtems_libio_open_close_args_t *args
)
{
atsam_usart_context *ctx = (atsam_usart_context *) base;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
rtems_interrupt_handler_remove(ctx->irq, atsam_usart_interrupt, tty);
#endif
if (!ctx->console) {
PMC_DisablePeripheral(ctx->id);
}
}
static void atsam_usart_write(
rtems_termios_device_context *base,
const char *buf,
size_t len
)
{
atsam_usart_context *ctx = (atsam_usart_context *) base;
Usart *regs = ctx->regs;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
if (len > 0) {
ctx->transmitting = true;
regs->US_THR = buf[0];
regs->US_IER = US_IDR_TXEMPTY;
} else {
ctx->transmitting = false;
regs->US_IDR = US_IDR_TXEMPTY;
}
#else
size_t i;
for (i = 0; i < len; ++i) {
while ((regs->US_CSR & US_CSR_TXEMPTY) == 0) {
/* Wait */
}
regs->US_THR = buf[i];
}
#endif
}
#ifndef ATSAM_CONSOLE_USE_INTERRUPTS
static int atsam_usart_read(rtems_termios_device_context *base)
{
atsam_usart_context *ctx = (atsam_usart_context *) base;
Usart *regs = ctx->regs;
if ((regs->US_CSR & US_CSR_RXRDY) != 0) {
return (char) regs->US_RHR;
} else {
return -1;
}
}
#endif
static const rtems_termios_device_handler atsam_usart_handler = {
.first_open = atsam_usart_first_open,
.last_close = atsam_usart_last_close,
.write = atsam_usart_write,
.set_attributes = atsam_usart_set_attributes,
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
.mode = TERMIOS_IRQ_DRIVEN
#else
.poll_read = atsam_usart_read,
.mode = TERMIOS_POLLED
#endif
};
typedef struct {
rtems_termios_device_context base;
Uart *regs;
rtems_vector_number irq;
uint32_t id;
bool console;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
bool transmitting;
#endif
} atsam_uart_context;
static atsam_uart_context atsam_uart_instances[] = {
{
.regs = UART0,
.irq = UART0_IRQn,
.id = ID_UART0
}
#ifdef UART1
, {
.regs = UART1,
.irq = UART1_IRQn,
.id = ID_UART1
}
#endif
#ifdef UART2
, {
.regs = UART2,
.irq = UART2_IRQn,
.id = ID_UART2
}
#endif
#ifdef UART3
, {
.regs = UART3,
.irq = UART3_IRQn,
.id = ID_UART3
}
#endif
#ifdef UART4
, {
.regs = UART4,
.irq = UART4_IRQn,
.id = ID_UART4
}
#endif
};
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
static void atsam_uart_interrupt(void *arg)
{
rtems_termios_tty *tty = arg;
atsam_uart_context *ctx = rtems_termios_get_device_context(tty);
Uart *regs = ctx->regs;
uint32_t sr = regs->UART_SR;
while ((sr & UART_SR_RXRDY) != 0) {
char c = (char) regs->UART_RHR;
rtems_termios_enqueue_raw_characters(tty, &c, 1);
sr = regs->UART_SR;
}
if (ctx->transmitting && (sr & UART_SR_TXEMPTY) != 0) {
rtems_termios_dequeue_characters(tty, 1);
}
}
#endif
static bool atsam_uart_set_attributes(
rtems_termios_device_context *base,
const struct termios *term
)
{
atsam_uart_context *ctx = (atsam_uart_context *) base;
Uart *regs = ctx->regs;
rtems_termios_baud_t baud;
uint32_t mr;
baud = rtems_termios_baud_to_number(term->c_cflag);
regs->UART_BRGR = (BOARD_MCK / baud) / 16;
if ((term->c_cflag & CREAD) != 0) {
regs->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
} else {
regs->UART_CR = UART_CR_TXEN;
}
mr = UART_MR_FILTER_DISABLED | UART_MR_BRSRCCK_PERIPH_CLK;
if ((term->c_cflag & CSIZE) != CS8) {
return false;
}
if ((term->c_cflag & PARENB) != 0) {
if ((term->c_cflag & PARODD) != 0) {
mr |= UART_MR_PAR_ODD;
} else {
mr |= UART_MR_PAR_EVEN;
}
} else {
mr |= UART_MR_PAR_NO;
}
if ((term->c_cflag & CSTOPB) != 0) {
return false;
}
regs->UART_MR = mr;
return true;
}
static bool atsam_uart_first_open(
rtems_termios_tty *tty,
rtems_termios_device_context *base,
struct termios *term,
rtems_libio_open_close_args_t *args
)
{
atsam_uart_context *ctx = (atsam_uart_context *) base;
Uart *regs = ctx->regs;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
rtems_status_code sc;
#endif
regs->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RSTSTA;
regs->UART_IDR = 0xffffffff;
PMC_EnablePeripheral(ctx->id);
rtems_termios_set_initial_baud(tty, ATSAM_CONSOLE_BAUD);
atsam_uart_set_attributes(base, term);
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
regs->UART_IER = UART_IDR_RXRDY;
sc = rtems_interrupt_handler_install(
ctx->irq,
"UART",
RTEMS_INTERRUPT_SHARED,
atsam_uart_interrupt,
tty
);
if (sc != RTEMS_SUCCESSFUL) {
return false;
}
#endif
return true;
}
static void atsam_uart_last_close(
rtems_termios_tty *tty,
rtems_termios_device_context *base,
rtems_libio_open_close_args_t *args
)
{
atsam_uart_context *ctx = (atsam_uart_context *) base;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
rtems_interrupt_handler_remove(ctx->irq, atsam_uart_interrupt, tty);
#endif
if (!ctx->console) {
PMC_DisablePeripheral(ctx->id);
}
}
static void atsam_uart_write(
rtems_termios_device_context *base,
const char *buf,
size_t len
)
{
atsam_uart_context *ctx = (atsam_uart_context *) base;
Uart *regs = ctx->regs;
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
if (len > 0) {
ctx->transmitting = true;
regs->UART_THR = buf[0];
regs->UART_IER = UART_IDR_TXEMPTY;
} else {
ctx->transmitting = false;
regs->UART_IDR = UART_IDR_TXEMPTY;
}
#else
size_t i;
for (i = 0; i < len; ++i) {
while ((regs->UART_SR & UART_SR_TXEMPTY) == 0) {
/* Wait */
}
regs->UART_THR = buf[i];
}
#endif
}
#ifndef ATSAM_CONSOLE_USE_INTERRUPTS
static int atsam_uart_read(rtems_termios_device_context *base)
{
atsam_uart_context *ctx = (atsam_uart_context *) base;
Uart *regs = ctx->regs;
if ((regs->UART_SR & UART_SR_RXRDY) != 0) {
return (char) regs->UART_RHR;
} else {
return -1;
}
}
#endif
static const rtems_termios_device_handler atsam_uart_handler = {
.first_open = atsam_uart_first_open,
.last_close = atsam_uart_last_close,
.write = atsam_uart_write,
.set_attributes = atsam_uart_set_attributes,
#ifdef ATSAM_CONSOLE_USE_INTERRUPTS
.mode = TERMIOS_IRQ_DRIVEN
#else
.poll_read = atsam_uart_read,
.mode = TERMIOS_POLLED
#endif
};
rtems_status_code console_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
void *arg
)
{
size_t i;
rtems_termios_initialize();
for (i = 0; i < RTEMS_ARRAY_SIZE(atsam_usart_instances); ++i) {
char usart[] = "/dev/ttyUSARTX";
usart[sizeof(usart) - 2] = (char) ('0' + i);
rtems_termios_device_install(
&usart[0],
major,
minor,
&atsam_usart_handler,
NULL,
&atsam_usart_instances[i].base
);
#if ATSAM_CONSOLE_DEVICE_TYPE == 0
if (i == ATSAM_CONSOLE_DEVICE_INDEX) {
atsam_usart_instances[i].console = true;
rtems_io_register_name(CONSOLE_DEVICE_NAME, major, minor);
}
#endif
++minor;
}
for (i = 0; i < RTEMS_ARRAY_SIZE(atsam_uart_instances); ++i) {
char uart[] = "/dev/ttyUARTX";
uart[sizeof(uart) - 2] = (char) ('0' + i);
rtems_termios_device_install(
&uart[0],
major,
minor,
&atsam_uart_handler,
NULL,
&atsam_uart_instances[i].base
);
#if ATSAM_CONSOLE_DEVICE_TYPE == 1
if (i == ATSAM_CONSOLE_DEVICE_INDEX) {
atsam_uart_instances[i].console = true;
rtems_io_register_name(CONSOLE_DEVICE_NAME, major, minor);
}
#endif
++minor;
}
return RTEMS_SUCCESSFUL;
}

View File

@@ -0,0 +1,55 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <rtems/bspIo.h>
#include <rtems/sysinit.h>
#include <chip.h>
#include <include/dbg_console.h>
static void atsam_debug_console_out(char c)
{
if (c == '\n') {
DBG_PutChar('\r');
}
DBG_PutChar((uint8_t) c);
}
static void atsam_debug_console_init(void)
{
DBG_Configure(115200, BOARD_MCK);
BSP_output_char = atsam_debug_console_out;
}
static void atsam_debug_console_early_init(char c)
{
atsam_debug_console_init();
atsam_debug_console_out(c);
}
static int atsam_debug_console_in(void)
{
return (int) DBG_GetChar();
}
BSP_output_char_function_type BSP_output_char = atsam_debug_console_early_init;
BSP_polling_getchar_function_type BSP_poll_char = atsam_debug_console_in;
RTEMS_SYSINIT_ITEM(
atsam_debug_console_init,
RTEMS_SYSINIT_BSP_START,
RTEMS_SYSINIT_ORDER_LAST
);

View File

@@ -0,0 +1,45 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifndef LIBBSP_ARM_ATSAM_BSP_H
#define LIBBSP_ARM_ATSAM_BSP_H
#include <bspopts.h>
#include <bsp/default-initial-extension.h>
#include <rtems.h>
#include <rtems/console.h>
#include <rtems/clockdrv.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define BSP_FEATURE_IRQ_EXTENSION
#define BSP_ARMV7M_IRQ_PRIORITY_DEFAULT (13 << 4)
#define BSP_ARMV7M_SYSTICK_PRIORITY (14 << 4)
uint32_t atsam_systick_frequency(void);
#define BSP_ARMV7M_SYSTICK_FREQUENCY atsam_systick_frequency()
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* LIBBSP_ARM_ATSAM_BSP_H */

View File

@@ -0,0 +1,30 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifndef LIBBSP_ARM_ATSAM_ESV_70_IRQ_H
#define LIBBSP_ARM_ATSAM_ESV_70_IRQ_H
#include <bspopts.h>
#ifndef ASM
#include <rtems.h>
#include <rtems/irq.h>
#include <rtems/irq-extension.h>
#endif
#define BSP_INTERRUPT_VECTOR_MIN 0
#define BSP_INTERRUPT_VECTOR_MAX 64
#endif /* LIBBSP_ARM_ATSAM_ESV_70_IRQ_H */

View File

@@ -0,0 +1,36 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifndef LIBBSP_ARM_ATSAM_PIN_CONFIG_H
#define LIBBSP_ARM_ATSAM_PIN_CONFIG_H
#include <libchip/chip.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
extern const Pin atsam_pin_config[];
extern const size_t atsam_pin_config_count;
extern const uint32_t atsam_matrix_ccfg_sysio;
/** @} */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* LIBBSP_ARM_ATSAM_PIN_CONFIG_H */

View File

@@ -0,0 +1,10 @@
include $(RTEMS_ROOT)/make/custom/default.cfg
RTEMS_CPU = arm
CPU_CFLAGS = -mthumb -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard
CFLAGS_OPTIMIZE_V = -O2 -g
CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections
LDFLAGS = -Wl,--gc-sections

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <bsp.h>
#include <bsp/bootcard.h>
#include <bsp/irq.h>
#include <bsp/irq-generic.h>
#include <chip.h>
RTEMS_STATIC_ASSERT(
PERIPH_COUNT_IRQn <= BSP_INTERRUPT_VECTOR_MAX,
PERIPH_COUNT_IRQn
);
void bsp_start(void)
{
bsp_interrupt_initialize();
SCB_CleanDCache();
SCB_InvalidateICache();
}

View File

@@ -0,0 +1,53 @@
/*
* Copyright (c) 2016 embedded brains GmbH Huber. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <bsp.h>
#include <bsp/start.h>
#include <bsp/pin-config.h>
#include <chip.h>
#include <include/board_lowlevel.h>
#include <include/board_memories.h>
void BSP_START_TEXT_SECTION bsp_start_hook_0(void)
{
system_init_flash(BOARD_MCK);
SystemInit();
PIO_Configure(&atsam_pin_config[0], atsam_pin_config_count);
MATRIX->CCFG_SYSIO = atsam_matrix_ccfg_sysio;
if (!PMC_IsPeriphEnabled(ID_SDRAMC)) {
BOARD_ConfigureSdram();
}
if ((SCB->CCR & SCB_CCR_IC_Msk) == 0) {
SCB_EnableICache();
}
if ((SCB->CCR & SCB_CCR_DC_Msk) == 0) {
SCB_EnableDCache();
}
_SetupMemoryRegion();
}
void BSP_START_TEXT_SECTION bsp_start_hook_1(void)
{
bsp_start_copy_sections_compact();
SCB_CleanDCache();
SCB_InvalidateICache();
bsp_start_clear_bss();
WDT_Disable(WDT);
}

View File

@@ -0,0 +1,21 @@
INCLUDE linkcmds.memory
REGION_ALIAS ("REGION_START", INTFLASH);
REGION_ALIAS ("REGION_VECTOR", INTSRAM);
REGION_ALIAS ("REGION_TEXT", INTFLASH);
REGION_ALIAS ("REGION_TEXT_LOAD", INTFLASH);
REGION_ALIAS ("REGION_RODATA", INTFLASH);
REGION_ALIAS ("REGION_RODATA_LOAD", INTFLASH);
REGION_ALIAS ("REGION_DATA", INTSRAM);
REGION_ALIAS ("REGION_DATA_LOAD", INTFLASH);
REGION_ALIAS ("REGION_FAST_TEXT", ITCM);
REGION_ALIAS ("REGION_FAST_TEXT_LOAD", INTFLASH);
REGION_ALIAS ("REGION_FAST_DATA", DTCM);
REGION_ALIAS ("REGION_FAST_DATA_LOAD", INTFLASH);
REGION_ALIAS ("REGION_BSS", INTSRAM);
REGION_ALIAS ("REGION_WORK", INTSRAM);
REGION_ALIAS ("REGION_STACK", INTSRAM);
REGION_ALIAS ("REGION_NOCACHE", INTSRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", INTFLASH);
INCLUDE linkcmds.armv7m

View File

@@ -0,0 +1,23 @@
INCLUDE linkcmds.memory
bsp_vector_table_in_start_section = 1;
REGION_ALIAS ("REGION_START", INTSRAM);
REGION_ALIAS ("REGION_VECTOR", INTSRAM);
REGION_ALIAS ("REGION_TEXT", INTSRAM);
REGION_ALIAS ("REGION_TEXT_LOAD", INTSRAM);
REGION_ALIAS ("REGION_RODATA", INTSRAM);
REGION_ALIAS ("REGION_RODATA_LOAD", INTSRAM);
REGION_ALIAS ("REGION_DATA", INTSRAM);
REGION_ALIAS ("REGION_DATA_LOAD", INTSRAM);
REGION_ALIAS ("REGION_FAST_TEXT", ITCM);
REGION_ALIAS ("REGION_FAST_TEXT_LOAD", INTSRAM);
REGION_ALIAS ("REGION_FAST_DATA", DTCM);
REGION_ALIAS ("REGION_FAST_DATA_LOAD", INTSRAM);
REGION_ALIAS ("REGION_BSS", INTSRAM);
REGION_ALIAS ("REGION_WORK", INTSRAM);
REGION_ALIAS ("REGION_STACK", INTSRAM);
REGION_ALIAS ("REGION_NOCACHE", INTSRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", INTSRAM);
INCLUDE linkcmds.armv7m

View File

@@ -0,0 +1,7 @@
MEMORY {
ITCM : ORIGIN = 0x00000000, LENGTH = @ATSAM_MEMORY_TCM_SIZE@
INTFLASH : ORIGIN = 0x00400000, LENGTH = @ATSAM_MEMORY_INTFLASH_SIZE@
DTCM : ORIGIN = 0x20000000, LENGTH = @ATSAM_MEMORY_TCM_SIZE@
INTSRAM : ORIGIN = 0x20400000, LENGTH = @ATSAM_MEMORY_INTSRAM_SIZE@ - 2 * @ATSAM_MEMORY_TCM_SIZE@
SDRAM : ORIGIN = 0x70000000, LENGTH = @ATSAM_MEMORY_SDRAM_SIZE@
}

View File

@@ -0,0 +1,21 @@
INCLUDE linkcmds.memory
REGION_ALIAS ("REGION_START", SDRAM);
REGION_ALIAS ("REGION_VECTOR", INTSRAM);
REGION_ALIAS ("REGION_TEXT", SDRAM);
REGION_ALIAS ("REGION_TEXT_LOAD", SDRAM);
REGION_ALIAS ("REGION_RODATA", SDRAM);
REGION_ALIAS ("REGION_RODATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_DATA", SDRAM);
REGION_ALIAS ("REGION_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_FAST_TEXT", ITCM);
REGION_ALIAS ("REGION_FAST_TEXT_LOAD", SDRAM);
REGION_ALIAS ("REGION_FAST_DATA", DTCM);
REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
REGION_ALIAS ("REGION_BSS", SDRAM);
REGION_ALIAS ("REGION_WORK", SDRAM);
REGION_ALIAS ("REGION_STACK", SDRAM);
REGION_ALIAS ("REGION_NOCACHE", SDRAM);
REGION_ALIAS ("REGION_NOCACHE_LOAD", SDRAM);
INCLUDE linkcmds.armv7m

View File

@@ -0,0 +1,42 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#include <bsp/pin-config.h>
const Pin atsam_pin_config[] = {
/* Console */
{PIO_PA21A_RXD1, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT},
{PIO_PB4D_TXD1, PIOB, ID_PIOB, PIO_PERIPH_D, PIO_DEFAULT},
/* SDRAM */
/* D0_7 */ {0x000000FF, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT},
/* D8_13 */ {0x0000003F, PIOE, ID_PIOE, PIO_PERIPH_A, PIO_DEFAULT},
/* D14_15 */ {0x00018000, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT},
/* A0_9 */ {0x3FF00000, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT},
/* SDA10 */ {0x00002000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* CAS */ {0x00020000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* RAS */ {0x00010000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* SDCKE */ {0x00004000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* SDCK */ {0x00800000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* SDSC */ {0x00008000, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT},
/* NBS0 */ {0x00040000, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT},
/* NBS1 */ {0x00008000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* SDWE */ {0x20000000, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT},
/* BA0 */ {0x00100000, PIOA, ID_PIOA, PIO_PERIPH_C, PIO_DEFAULT}
};
const size_t atsam_pin_config_count = PIO_LISTSIZE(atsam_pin_config);
const uint32_t atsam_matrix_ccfg_sysio = 0x20400010;

View File

@@ -0,0 +1,144 @@
/*
* Copyright (c) 2016 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*/
#ifndef LIBBSP_ARM_ARMV7M_CACHE__H
#define LIBBSP_ARM_ARMV7M_CACHE__H
#include <rtems.h>
#include <chip.h>
#define CPU_DATA_CACHE_ALIGNMENT 32
#define CPU_INSTRUCTION_CACHE_ALIGNMENT 32
#define CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS
static inline void _CPU_cache_flush_data_range(
const void *d_addr,
size_t n_bytes
)
{
SCB_CleanInvalidateDCache_by_Addr(
RTEMS_DECONST(uint32_t *, (const uint32_t *) d_addr),
n_bytes
);
}
static inline void _CPU_cache_invalidate_data_range(
const void *d_addr,
size_t n_bytes
)
{
SCB_InvalidateDCache_by_Addr(
RTEMS_DECONST(uint32_t *, (const uint32_t *) d_addr),
n_bytes
);
}
static inline void _CPU_cache_freeze_data(void)
{
/* TODO */
}
static inline void _CPU_cache_unfreeze_data(void)
{
/* TODO */
}
static inline void _CPU_cache_invalidate_instruction_range(
const void *i_addr,
size_t n_bytes
)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_InvalidateICache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_freeze_instruction(void)
{
/* TODO */
}
static inline void _CPU_cache_unfreeze_instruction(void)
{
/* TODO */
}
static inline void _CPU_cache_flush_entire_data(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_CleanDCache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_invalidate_entire_data(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_InvalidateDCache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_enable_data(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_EnableDCache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_disable_data(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_DisableDCache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_invalidate_entire_instruction(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_InvalidateICache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_enable_instruction(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_EnableICache();
rtems_interrupt_enable(level);
}
static inline void _CPU_cache_disable_instruction(void)
{
rtems_interrupt_level level;
rtems_interrupt_disable(level);
SCB_DisableICache();
rtems_interrupt_enable(level);
}
#endif /* LIBBSP_ARM_ARMV7M_CACHE__H */

View File

@@ -121,6 +121,45 @@ BSP_START_TEXT_SECTION static inline void bsp_start_copy_sections(void)
);
}
BSP_START_TEXT_SECTION static inline void
bsp_start_memcpy_libc(void *dest, const void *src, size_t n)
{
if (dest != src) {
memcpy(dest, src, n);
}
}
/**
* @brief Copies the .data, .fast_text and .fast_data sections from the load to
* the runtime area using the C library memcpy().
*
* Works only in case the .start, .text and .rodata sections reside in one
* memory region.
*/
BSP_START_TEXT_SECTION static inline void bsp_start_copy_sections_compact(void)
{
/* Copy .data section */
bsp_start_memcpy_libc(
bsp_section_data_begin,
bsp_section_data_load_begin,
(size_t) bsp_section_data_size
);
/* Copy .fast_text section */
bsp_start_memcpy_libc(
bsp_section_fast_text_begin,
bsp_section_fast_text_load_begin,
(size_t) bsp_section_fast_text_size
);
/* Copy .fast_data section */
bsp_start_memcpy_libc(
bsp_section_fast_data_begin,
bsp_section_fast_data_load_begin,
(size_t) bsp_section_fast_data_size
);
}
BSP_START_TEXT_SECTION static inline void bsp_start_clear_bss(void)
{
memset(bsp_section_bss_begin, 0, (size_t) bsp_section_bss_size);