master/slave dma seems to be working

This commit is contained in:
Nicolas Trimborn 2021-07-16 13:19:00 +02:00
parent 91269173aa
commit 76cd702edc
622 changed files with 263619 additions and 0 deletions

View File

@ -0,0 +1,240 @@
<package xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.0" xs:noNamespaceSchemaLocation="PACK.xsd">
<vendor>Atmel</vendor>
<name>My Project</name>
<description>Project generated by Atmel Start</description>
<url>http://start.atmel.com/</url>
<releases>
<release version="1.0.1">Initial version</release>
</releases>
<taxonomy>
<description Cclass="AtmelStart" generator="AtmelStart">Configuration Files generated by Atmel Start</description>
</taxonomy>
<generators>
<generator id="AtmelStart">
<description>Atmel Start</description>
<select Dname="ATSAME54P20A" Dvendor="Atmel:3"/>
<command>http://start.atmel.com/</command>
<files>
<file category="generator" name="atmel_start_config.atstart"/>
<file attr="template" category="other" name="AtmelStart.env_conf" select="Environment configuration"/>
</files>
</generator>
</generators>
<conditions>
<condition id="CMSIS Device Startup">
<description>Dependency on CMSIS core and Device Startup components</description>
<require Cclass="CMSIS" Cgroup="CORE" Cversion="5.1.2"/>
<require Cclass="Device" Cgroup="Startup" Cversion="1.1.0"/>
</condition>
<condition id="ARMCC, GCC, IAR">
<require Dname="ATSAME54P20A"/>
<accept Tcompiler="ARMCC"/>
<accept Tcompiler="GCC"/>
<accept Tcompiler="IAR"/>
</condition>
<condition id="GCC">
<require Dname="ATSAME54P20A"/>
<accept Tcompiler="GCC"/>
</condition>
<condition id="IAR">
<require Dname="ATSAME54P20A"/>
<accept Tcompiler="IAR"/>
</condition>
<condition id="ARMCC">
<require Dname="ATSAME54P20A"/>
<accept Tcompiler="ARMCC"/>
</condition>
</conditions>
<components generator="AtmelStart">
<component Cclass="AtmelStart" Cgroup="Framework" Cversion="1.0.0" condition="CMSIS Device Startup">
<description>Atmel Start Framework</description>
<RTE_Components_h>#define ATMEL_START</RTE_Components_h>
<files>
<file category="doc" condition="ARMCC, GCC, IAR" name="hal/documentation/evsys.rst"/>
<file category="doc" condition="ARMCC, GCC, IAR" name="hal/documentation/quad_spi_sync.rst"/>
<file category="doc" condition="ARMCC, GCC, IAR" name="hal/documentation/spi_master_dma.rst"/>
<file category="doc" condition="ARMCC, GCC, IAR" name="hal/documentation/usart_sync.rst"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_atomic.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_cache.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_delay.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_evsys.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_gpio.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_init.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_io.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_qspi_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_sleep.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_spi_m_dma.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_cmcc.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_core.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_delay.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_dma.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_evsys.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_gpio.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_i2c_m_async.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_i2c_m_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_i2c_s_async.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_i2c_s_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_init.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_irq.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_qspi.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_qspi_dma.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_qspi_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_ramecc.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_sleep.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_async.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_dma.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_usart.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_atomic.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_cache.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_delay.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_evsys.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_gpio.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_init.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_io.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_qspi_sync.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_sleep.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/compiler.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/err_codes.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/events.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/utils.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/utils_assert.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/utils_event.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/utils_increment_macro.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/utils_list.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/utils_repeat_macro.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/utils/src/utils_assert.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/utils/src/utils_event.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/utils/src/utils_list.c"/>
<file category="source" condition="GCC" name="hal/utils/src/utils_syscalls.c"/>
<file category="doc" condition="ARMCC, GCC, IAR" name="hpl/doc_lite/tc.rst"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_ac_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_adc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_aes_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_can_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_ccl_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_cmcc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_dac_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_dmac_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_dsu_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_eic_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_evsys_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_freqm_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_gclk_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_gmac_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_hmatrixb_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_i2s_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_icm_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_mclk_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_nvmctrl_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_osc32kctrl_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_oscctrl_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_pac_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_pcc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_pdec_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_pm_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_port_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_qspi_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_ramecc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_rstc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_rtc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_sdhc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_sercom_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_supc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_tc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_tcc_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_trng_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_usb_e54.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hri/hri_wdt_e54.h"/>
<file category="doc" condition="ARMCC, GCC, IAR" name="documentation/stdio.rst"/>
<file category="source" condition="GCC" name="stdio_redirect/gcc/read.c"/>
<file category="source" condition="GCC" name="stdio_redirect/gcc/write.c"/>
<file category="source" condition="IAR" name="stdio_redirect/iar/read.c"/>
<file category="source" condition="IAR" name="stdio_redirect/iar/write.c"/>
<file category="source" condition="ARMCC" name="stdio_redirect/keil/Retarget.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="stdio_redirect/stdio_io.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="stdio_redirect/stdio_io.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="main.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="driver_init.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="driver_init.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="atmel_start_pins.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="examples/driver_examples.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="examples/driver_examples.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hal_usart_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_missing_features.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_reset.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_m_async.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_m_dma.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_m_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_s_async.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_spi_s_sync.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_usart_async.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/include/hpl_usart_sync.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_spi_m_dma.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hal/src/hal_usart_sync.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hal/utils/include/parts.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/cmcc/hpl_cmcc.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/core/hpl_core_m4.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hpl/core/hpl_core_port.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/core/hpl_init.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/dmac/hpl_dmac.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/evsys/hpl_evsys.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/gclk/hpl_gclk.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hpl/gclk/hpl_gclk_base.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/mclk/hpl_mclk.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/osc32kctrl/hpl_osc32kctrl.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/oscctrl/hpl_oscctrl.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/pm/hpl_pm.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hpl/pm/hpl_pm_base.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hpl/port/hpl_gpio_base.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/qspi/hpl_qspi.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/ramecc/hpl_ramecc.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/sercom/hpl_sercom.c"/>
<file category="source" condition="ARMCC, GCC, IAR" name="hpl/tc/tc_lite.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="hpl/tc/tc_lite.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="stdio_start.c"/>
<file category="header" condition="ARMCC, GCC, IAR" name="stdio_start.h"/>
<file category="header" condition="ARMCC, GCC, IAR" name="atmel_start.h"/>
<file category="source" condition="ARMCC, GCC, IAR" name="atmel_start.c"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_cmcc_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_dmac_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_evsys_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_gclk_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_mclk_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_osc32kctrl_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_oscctrl_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_port_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_qspi_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/hpl_sercom_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/peripheral_clk_config.h"/>
<file attr="config" category="header" condition="ARMCC, GCC, IAR" name="config/stdio_redirect_config.h"/>
<file category="include" condition="ARMCC, GCC, IAR" name=""/>
<file category="include" condition="ARMCC, GCC, IAR" name="config"/>
<file category="include" condition="ARMCC, GCC, IAR" name="examples"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hal/include"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hal/utils/include"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/cmcc"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/core"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/dmac"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/evsys"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/gclk"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/mclk"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/osc32kctrl"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/oscctrl"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/pm"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/port"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/qspi"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/ramecc"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/sercom"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hpl/tc"/>
<file category="include" condition="ARMCC, GCC, IAR" name="hri"/>
<file category="include" condition="ARMCC, GCC, IAR" name=""/>
<file category="include" condition="ARMCC, GCC, IAR" name="config"/>
<file category="include" condition="ARMCC, GCC, IAR" name="stdio_redirect"/>
<file category="include" condition="ARMCC, GCC, IAR" name=""/>
</files>
</component>
</components>
</package>

View File

@ -0,0 +1,84 @@
/* Auto-generated config file hpl_qspi_config.h */
#ifndef HPL_QSPI_CONFIG_H
#define HPL_QSPI_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>
#include <peripheral_clk_config.h>
// <h> Basic settings
#ifndef CONF_CONF_QSPI_ENABLE
#define CONF_CONF_QSPI_ENABLE 1
#endif
// <o> Baud rate <1-150000000>
// <i> The SPI data transfer rate. Note: (fqspi_clock / baudrate) < 255
// <id> qspi_baud_rate
#ifndef CONF_QSPI_BAUD
#define CONF_QSPI_BAUD 6000000
#endif
// <o> Clock Polarity
// <0x0=>The inactive state value of SPCK is logic level zero.
// <0x1=>The inactive state value of SPCK is logic level one.
// <i> Determines the inactive state value of the serial clock (SPCK).
// <id> qspi_cpol
#ifndef CONF_QSPI_CPOL
#define CONF_QSPI_CPOL 0x0
#endif
// <o> Clock Phase
// <0x0=>Data is changed on the leading edge of SPCK and captured on the following edge of SPCK.
// <0x1=>Data is captured on the leading edge of SPCK and changed on the following edge of SPCK.
// <i> Determines which edge of SPCK causes data to change and which edge causes data to be captured.
// <id> qspi_cpha
#ifndef CONF_QSPI_CPHA
#define CONF_QSPI_CPHA 0x0
#endif
// </h>
// <e> Advanced Configuration
// <id> qspi_advanced
#ifndef CONF_QSPI_ADVANCED
#define CONF_QSPI_ADVANCED 0
#endif
// <o> Delay Before QSCK (ns) <0-255000>
// <i> This field defines the delay from QCS falling edge (activation) to the first valid QSCK transition (in ns).
// <id> qspi_dlybs
#ifndef CONF_QSPI_DLY_BS
#define CONF_QSPI_DLY_BS 0
#endif
// <o> Minimum Inactive QCS Delay (ns) <0-8160000>
// <i> This field defines the minimum delay between the deactivation and the activation of QCS (in ns).
// <id> qspi_dlycs
#ifndef CONF_QSPI_DLY_CS
#define CONF_QSPI_DLY_CS 0
#endif
// </e>
/* Calculate baud register value from requested baudrate value */
#ifndef CONF_QSPI_BAUD_RATE
#define CONF_QSPI_BAUD_RATE ((CONF_CPU_FREQUENCY / CONF_QSPI_BAUD) - 1)
#if CONF_QSPI_BAUD > CONF_CPU_FREQUENCY || CONF_QSPI_BAUD_RATE > 255
#warning Invalid baudrate, please check.
#endif
#endif
/* Calculates the value of the CSR DLYCS field given the desired delay (in ns) */
#ifndef CONF_QSPI_DLYCS
#define CONF_QSPI_DLYCS (((CONF_CPU_FREQUENCY / 1000000) * CONF_QSPI_DLY_CS) / 1000)
#endif
/* Calculates the value of the CSR DLYBS field given the desired delay (in ns) */
#ifndef CONF_QSPI_DLYBS
#define CONF_QSPI_DLYBS (((CONF_CPU_FREQUENCY / 1000000) * CONF_QSPI_DLY_BS) / 1000)
#endif
// <<< end of configuration section >>>
#endif // HPL_QSPI_CONFIG_H

View File

@ -0,0 +1,47 @@
/**
* \file
*
* \brief Application implement
*
* Copyright (c) 2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
/*
* Support and FAQ: visit <a href="https://www.microchip.com/support/">Microchip Support</a>
*/
#ifndef SPI_SLAVE_DMA_CONFIG_H
#define SPI_SLAVE_DMA_CONFIG_H
// <o> Delay in Micro Seconds <1-1000>
// <i> Delay in microseconds to hold CS low after data transfer completion by DMA
// <id> delay_in_us_cs_low
#ifndef CONF_DELAY_US
#define CONF_DELAY_US 10
#endif
#endif

View File

@ -0,0 +1,974 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>7.0</ProjectVersion>
<ToolchainName>com.Atmel.ARMGCC.C</ToolchainName>
<ProjectGuid>dce6c7e3-ee26-4d79-826b-08594b9ad897</ProjectGuid>
<avrdevice>ATSAME54P20A</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<AssemblyName>Master_Slave_IF_TestMaster</AssemblyName>
<Name>Master_Slave_IF_TestMaster</Name>
<RootNamespace>Master_Slave_IF_TestMaster</RootNamespace>
<ToolchainFlavour>Native</ToolchainFlavour>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<CacheFlash>true</CacheFlash>
<ProgFlashFromRam>true</ProgFlashFromRam>
<RamSnippetAddress />
<UncachedRange />
<preserveEEPROM>true</preserveEEPROM>
<OverrideVtorValue />
<BootSegment>2</BootSegment>
<ResetRule>0</ResetRule>
<eraseonlaunchrule>0</eraseonlaunchrule>
<EraseKey />
<AsfFrameworkConfig>
<framework-data xmlns="">
<options />
<configurations />
<files />
<documentation help="" />
<offline-documentation help="" />
<dependencies>
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.49.1" />
</dependencies>
</framework-data>
</AsfFrameworkConfig>
<Compiler>gcc</Compiler>
<atStartFilePath>.atmelstart\atmel_start_config.atstart</atStartFilePath>
<GpdscFilePath>.atmelstart\AtmelStart.gpdsc</GpdscFilePath>
<AcmeProjectConfig>
<AcmeProjectConfig>
<TopLevelComponents>
<AcmeProjectComponent IsAutoGenerated="false" CClass="AtmelStart" Cgroup="Framework" CVersion="1.0.0" />
<AcmeProjectComponent IsAutoGenerated="false" CClass="CMSIS" Cgroup="CORE" CVersion="5.1.2" />
<AcmeProjectComponent IsAutoGenerated="false" CClass="Device" Cgroup="Startup" CVersion="1.1.0" />
</TopLevelComponents>
<AcmeActionInfos>
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_atomic.h" IsConfig="false" Hash="dAg/XLzGqPqh12ZGWK6HLw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_cache.h" IsConfig="false" Hash="QZIIDRbUdkb2aDtNopQSOA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_delay.h" IsConfig="false" Hash="snalDV+S1QGquCV38zAdoA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_evsys.h" IsConfig="false" Hash="jT0K+r4kwAM8NXNsajf8mA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_gpio.h" IsConfig="false" Hash="3mBEQ9Ix28YOArddDes83Q" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_init.h" IsConfig="false" Hash="OrYSVpF3YA5XrOBImWpdSg" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_io.h" IsConfig="false" Hash="XZRSabc39WU/0MFBLYGLvQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_qspi_sync.h" IsConfig="false" Hash="4qiSjqQ6OSFtUrCffFwcHw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_sleep.h" IsConfig="false" Hash="KuZDwgrLdU+fuMG82ZFTqg" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_spi_m_dma.h" IsConfig="false" Hash="MRP9iaBaY97VrZIf+yI+nQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_cmcc.h" IsConfig="false" Hash="mDAHEzTxsniAe2HtqO43oA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_core.h" IsConfig="false" Hash="XeEtUlBSwXUmLA41hFYYWg" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_delay.h" IsConfig="false" Hash="3tgjyGPrs0ePCewpMUQPbQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_dma.h" IsConfig="false" Hash="C3XG0wWxKLSRQVHSNMCgIQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_evsys.h" IsConfig="false" Hash="J1SJ5Vr+eNue0yNmAXuVMg" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_gpio.h" IsConfig="false" Hash="kGeglKjrgbcKZDOsM+XTrw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_i2c_m_async.h" IsConfig="false" Hash="2YKSxDd++st93P4wS0x3sw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_i2c_m_sync.h" IsConfig="false" Hash="9PBv4UnwhtkmG2PaLCX74Q" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_i2c_s_async.h" IsConfig="false" Hash="rC7cV+Zqg8W12ys0twQG1w" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_i2c_s_sync.h" IsConfig="false" Hash="JNLMe72Fd6Uy3vXkh8HGxg" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_init.h" IsConfig="false" Hash="QtMCPnjBzySOYli3ce/dyQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_irq.h" IsConfig="false" Hash="n8mGC0gLHfUhVTjLflKVXw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_qspi.h" IsConfig="false" Hash="3pJJ6N4ADy/bJ+2DogLk4g" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_qspi_dma.h" IsConfig="false" Hash="lk4Jucsw6aNOKkh1omfXow" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_qspi_sync.h" IsConfig="false" Hash="4zf+sgXtmRMPXlmNh5HEAA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_ramecc.h" IsConfig="false" Hash="jEqIEhx0d2x1jduY0A9CFQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_sleep.h" IsConfig="false" Hash="JOXa2/KqNtt950+B1ZJfSQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi.h" IsConfig="false" Hash="wAxvxvj1p/CvWEoawsWIBw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_async.h" IsConfig="false" Hash="sUIART4unR3sm4AlXv5LlQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_dma.h" IsConfig="false" Hash="y9HmqskArpKzCF7kgcY+IQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_sync.h" IsConfig="false" Hash="Qr5slVYsVsngWiAyjLwx8A" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_usart.h" IsConfig="false" Hash="gkIcItnlv0v8NvwxEz9neA" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_atomic.c" IsConfig="false" Hash="jOsfB5ZnunjCPnUQXuXi9g" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_cache.c" IsConfig="false" Hash="edUfxCb3WSV4Uu3oKUakCg" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_delay.c" IsConfig="false" Hash="vZ+YYOpHjTcAZaAaTE3Izg" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_evsys.c" IsConfig="false" Hash="lNdxWuQaRyRL4TGcI12LBQ" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_gpio.c" IsConfig="false" Hash="wIzN9zQd1b8qd+RDoSkD7Q" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_init.c" IsConfig="false" Hash="bJvq8kpNbbOE2nZfChOGTQ" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_io.c" IsConfig="false" Hash="FYpavzYSxhFzVrBQtcH2ZA" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_qspi_sync.c" IsConfig="false" Hash="QXpQdsNQ9F+mMPT7W7RFuw" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_sleep.c" IsConfig="false" Hash="3ebghfB3jYLpnqoi3fhq3g" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/compiler.h" IsConfig="false" Hash="8BnWsmkWteo58vaF6VHKHA" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/err_codes.h" IsConfig="false" Hash="csatJsZ0ym9p7PojjaFNeQ" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/events.h" IsConfig="false" Hash="hUr+KA59XIxyEvCEHvqMfQ" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/utils.h" IsConfig="false" Hash="1IxXPPkdgxdipY/hgDJGvg" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/utils_assert.h" IsConfig="false" Hash="x4pgqiWbWCruSdQ+QA1P0A" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/utils_event.h" IsConfig="false" Hash="+TRsXNENvtynhMSI1iJPZA" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/utils_increment_macro.h" IsConfig="false" Hash="yV2DDykoVCXX+XgiNyG+Sw" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/utils_list.h" IsConfig="false" Hash="60r34J7DkHyqgr2iqa6aXg" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/utils_repeat_macro.h" IsConfig="false" Hash="yidXppbw9HriaIIl6gVfEQ" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/src/utils_assert.c" IsConfig="false" Hash="858+H2i44SFMGhFZ4+PSPw" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/src/utils_event.c" IsConfig="false" Hash="sR2eRthblYjlO/jHulP6aw" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/src/utils_list.c" IsConfig="false" Hash="rW6uwWgOnnMWzJjuYzxzZw" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/src/utils_syscalls.c" IsConfig="false" Hash="NaBnZufa6Sau3+tzlyR7Kw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_ac_e54.h" IsConfig="false" Hash="y6Jvvj/Cob45BC3nHprWHw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_adc_e54.h" IsConfig="false" Hash="NqwOa13FZwkE2Qmc67WaCA" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_aes_e54.h" IsConfig="false" Hash="zgIsmxwXwk18UEu/NgDuqg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_can_e54.h" IsConfig="false" Hash="/VLFnz5wT+Rk16Oh3pDRFg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_ccl_e54.h" IsConfig="false" Hash="Tb/xnJy74UP9wE6szds0QA" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_cmcc_e54.h" IsConfig="false" Hash="xbngy9Q1DPmApX5l8OBIfA" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_dac_e54.h" IsConfig="false" Hash="BC/+OLfyz840mcgsF0AQlw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_dmac_e54.h" IsConfig="false" Hash="vhLN9Xx4g0WPA8ajjgzzZw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_dsu_e54.h" IsConfig="false" Hash="BgRKuo/Em6HXxr6/VOqziQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_e54.h" IsConfig="false" Hash="OwK9iE7HHPGD1iW1ba2nkA" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_eic_e54.h" IsConfig="false" Hash="phCYLIuZs7KZ8kSBWzfjig" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_evsys_e54.h" IsConfig="false" Hash="+u7NNeyI6rs/iRrTj5jz6w" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_freqm_e54.h" IsConfig="false" Hash="AhOLLoJhnCWQVAApUA38wg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_gclk_e54.h" IsConfig="false" Hash="F9q2SDNt88kQgQ/oKtm1fQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_gmac_e54.h" IsConfig="false" Hash="wylm7wamnMXua6NQg26V1w" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_hmatrixb_e54.h" IsConfig="false" Hash="Xi+VCHtYc0uEyP4vwuDMTQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_i2s_e54.h" IsConfig="false" Hash="eBWMSsjJuFTsVY9+Px4MDQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_icm_e54.h" IsConfig="false" Hash="/jB+UsWaR9+5hxLiCpfMAw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_mclk_e54.h" IsConfig="false" Hash="QgKFDESLas7AG+W0YUQv0g" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_nvmctrl_e54.h" IsConfig="false" Hash="HECu2JR3HkIvS8X8yiA7YQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_osc32kctrl_e54.h" IsConfig="false" Hash="P+2P+0ROVbbcwmGrk4IAsg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_oscctrl_e54.h" IsConfig="false" Hash="beCrI5T3J734CKG/lzIQ5Q" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_pac_e54.h" IsConfig="false" Hash="zQqLMGI9YME0viRRWSKzvQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_pcc_e54.h" IsConfig="false" Hash="0EBnI8dDokiN54Vu2ICgmA" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_pdec_e54.h" IsConfig="false" Hash="Rf8drgs7AJcVKMWrN3ciUw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_pm_e54.h" IsConfig="false" Hash="mQi6Lv1HiADQEwpBZiSYYg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_port_e54.h" IsConfig="false" Hash="G68p7SqFWeKsgWxKOzsjag" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_qspi_e54.h" IsConfig="false" Hash="R/u45b9+gBYU33StsPjneQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_ramecc_e54.h" IsConfig="false" Hash="kWInw/FGxvx4LXeyFKzP6w" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_rstc_e54.h" IsConfig="false" Hash="+rd9opaj/AjYf/UdRTgVJg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_rtc_e54.h" IsConfig="false" Hash="oRK9sHMhu1obvU3rRy1fcA" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_sdhc_e54.h" IsConfig="false" Hash="wPVt7ZuDzYgUqP0sjlZ/sQ" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_sercom_e54.h" IsConfig="false" Hash="Ow3s/urk3meEjxlgeanaYw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_supc_e54.h" IsConfig="false" Hash="e78TEc/bBXnnZv+JLiMnNw" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_tc_e54.h" IsConfig="false" Hash="SBogVzcw9xnWaCSMRqRg9Q" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_tcc_e54.h" IsConfig="false" Hash="ZzT/VD/VBFBFT8eyDbsyhg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_trng_e54.h" IsConfig="false" Hash="R3m9qAqgpkl9Ay6TqH3M2A" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_usb_e54.h" IsConfig="false" Hash="I+Mpxa40hh4o1NE68Zi5Gg" />
<AcmeProjectActionInfo Action="File" Source="hri/hri_wdt_e54.h" IsConfig="false" Hash="CfZas1TGXPKWyHJU+xHJ7A" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/gcc/read.c" IsConfig="false" Hash="965gzdOr4sfKJQ4OpEJN/g" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/gcc/write.c" IsConfig="false" Hash="gCAVrSOZuCMZ84vNa/WFxA" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/iar/read.c" IsConfig="false" Hash="IpkgLxXTg/nDat19kCJ3gw" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/iar/write.c" IsConfig="false" Hash="JTD9ZyU1GAbpub8mamr/ZA" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/keil/Retarget.c" IsConfig="false" Hash="NzdDPGuEvGimitFm3wVXxw" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/stdio_io.c" IsConfig="false" Hash="Nx8PfIAymK/f5AjLql/CyQ" />
<AcmeProjectActionInfo Action="File" Source="stdio_redirect/stdio_io.h" IsConfig="false" Hash="4X02f8UL8cjBHeGJM3BnHw" />
<AcmeProjectActionInfo Action="File" Source="main.c" IsConfig="false" Hash="k0AH7j+BrmdFhBPzCCMptA" />
<AcmeProjectActionInfo Action="File" Source="driver_init.c" IsConfig="false" Hash="2sHYZTuLryCX1YMXh3fv4g" />
<AcmeProjectActionInfo Action="File" Source="driver_init.h" IsConfig="false" Hash="SmSCndG2nTv95r8KyRfSNw" />
<AcmeProjectActionInfo Action="File" Source="atmel_start_pins.h" IsConfig="false" Hash="pNsGGmxB0OdQao2WzlXw0w" />
<AcmeProjectActionInfo Action="File" Source="examples/driver_examples.h" IsConfig="false" Hash="9cKo3Ih/dVXg0EjRkS7NyA" />
<AcmeProjectActionInfo Action="File" Source="examples/driver_examples.c" IsConfig="false" Hash="NAOIehpMqYEt9b2+WS7H5A" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hal_usart_sync.h" IsConfig="false" Hash="ZzIGSRyjZuxRzFAtNNt7sw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_missing_features.h" IsConfig="false" Hash="XsAvpgfutzkw0Y5SydYFaw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_reset.h" IsConfig="false" Hash="WwLFRlBtuZ/qnD1JuDKnRQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_m_async.h" IsConfig="false" Hash="JyMw9jeJO0jGqfT03txHXQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_m_dma.h" IsConfig="false" Hash="OoU5yflSLAc5VbWSzixnvg" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_m_sync.h" IsConfig="false" Hash="s1GhyLjhjIsfqixooG3LFA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_s_async.h" IsConfig="false" Hash="ptPiaJ1lVqH5794NmOHDFQ" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_spi_s_sync.h" IsConfig="false" Hash="gEGr6GqKbsOQvxQYz2fotA" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_usart_async.h" IsConfig="false" Hash="tBfmk3BN3Q1WbYVoWDbsJw" />
<AcmeProjectActionInfo Action="File" Source="hal/include/hpl_usart_sync.h" IsConfig="false" Hash="Yj+PoPxG2CqDOy5XoIWkwg" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_spi_m_dma.c" IsConfig="false" Hash="KMrinO/3xx7qWxy2PsJB7g" />
<AcmeProjectActionInfo Action="File" Source="hal/src/hal_usart_sync.c" IsConfig="false" Hash="VBVlAmBFEYTTUMHeIRFSxg" />
<AcmeProjectActionInfo Action="File" Source="hal/utils/include/parts.h" IsConfig="false" Hash="THMC0T2wU10PzPgIVGK93g" />
<AcmeProjectActionInfo Action="File" Source="hpl/cmcc/hpl_cmcc.c" IsConfig="false" Hash="xrdKSj3ppVwQWgZ3zrlaRg" />
<AcmeProjectActionInfo Action="File" Source="hpl/core/hpl_core_m4.c" IsConfig="false" Hash="VG4QALndju794J3HSKhsEQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/core/hpl_core_port.h" IsConfig="false" Hash="RXrDMMracCeflR1F9jWiGg" />
<AcmeProjectActionInfo Action="File" Source="hpl/core/hpl_init.c" IsConfig="false" Hash="/W7xK3rVKLxPEwN+aiJq8Q" />
<AcmeProjectActionInfo Action="File" Source="hpl/dmac/hpl_dmac.c" IsConfig="false" Hash="hfo1VP6av1KthYmILu3PCg" />
<AcmeProjectActionInfo Action="File" Source="hpl/evsys/hpl_evsys.c" IsConfig="false" Hash="YFXyIZne7hxDvOF/5YjFTg" />
<AcmeProjectActionInfo Action="File" Source="hpl/gclk/hpl_gclk.c" IsConfig="false" Hash="5XO/19EedZQ0lq6yB8UTWQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/gclk/hpl_gclk_base.h" IsConfig="false" Hash="VnaHvu/VnbGvOxrehrp2mQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/mclk/hpl_mclk.c" IsConfig="false" Hash="XNSKHdNpSWfkSJUMnJUASA" />
<AcmeProjectActionInfo Action="File" Source="hpl/osc32kctrl/hpl_osc32kctrl.c" IsConfig="false" Hash="DhXWWfpRGQtwitQ9mkvXcw" />
<AcmeProjectActionInfo Action="File" Source="hpl/oscctrl/hpl_oscctrl.c" IsConfig="false" Hash="5M03DGDFwRTEFXtPRflGFA" />
<AcmeProjectActionInfo Action="File" Source="hpl/pm/hpl_pm.c" IsConfig="false" Hash="bcht9HqY6EFL6gVGYXeVfQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/pm/hpl_pm_base.h" IsConfig="false" Hash="KOec1StxUZxY/RKBDbMkpg" />
<AcmeProjectActionInfo Action="File" Source="hpl/port/hpl_gpio_base.h" IsConfig="false" Hash="tEjgvZ4kvfccSWnEgilG5Q" />
<AcmeProjectActionInfo Action="File" Source="hpl/qspi/hpl_qspi.c" IsConfig="false" Hash="kcTOrixin2H2Rt8x9WBNGQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/ramecc/hpl_ramecc.c" IsConfig="false" Hash="pMdmwVWBg16VG8HOwA3DPw" />
<AcmeProjectActionInfo Action="File" Source="hpl/sercom/hpl_sercom.c" IsConfig="false" Hash="hcMq5dgdlyb9xXr1YOQnMQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/tc/tc_lite.c" IsConfig="false" Hash="h3lF0y7cJM1yyFbWGx7QkQ" />
<AcmeProjectActionInfo Action="File" Source="hpl/tc/tc_lite.h" IsConfig="false" Hash="Gzd12xGkTZwkQmCYoTHN6Q" />
<AcmeProjectActionInfo Action="File" Source="stdio_start.c" IsConfig="false" Hash="WtwT7ld+0j4cPDj52v3y1A" />
<AcmeProjectActionInfo Action="File" Source="stdio_start.h" IsConfig="false" Hash="5j2k69zdoQpbzluEyr/rHQ" />
<AcmeProjectActionInfo Action="File" Source="atmel_start.h" IsConfig="false" Hash="TNU9VszFRFbDuMJ3vToUzg" />
<AcmeProjectActionInfo Action="File" Source="atmel_start.c" IsConfig="false" Hash="lom1/YOY9m/TDACgnyb3yA" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_cmcc_config.h" IsConfig="true" Hash="bmtxQ8rLloaRtAo2HeXZRQ" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_dmac_config.h" IsConfig="true" Hash="nSlPPTDdCwyMdzM7qvqVRQ" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_evsys_config.h" IsConfig="true" Hash="FBwzaeWRR0NEBkjPjrWnqA" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_gclk_config.h" IsConfig="true" Hash="qFfXbIiu7Skw/l5fYsEt7Q" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_mclk_config.h" IsConfig="true" Hash="pxBzoQXTG66x4dbzVzxteg" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_osc32kctrl_config.h" IsConfig="true" Hash="HgvzEqDUH4jq/syjj/+G+Q" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_oscctrl_config.h" IsConfig="true" Hash="uzEpFoaBTLlpyWknL/fmxg" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_port_config.h" IsConfig="true" Hash="5iQ/eeupKkHFkYA/g43bXQ" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_qspi_config.h" IsConfig="true" Hash="+GkCXfQc+hl3IqkWXgjL7A" />
<AcmeProjectActionInfo Action="File" Source="config/hpl_sercom_config.h" IsConfig="true" Hash="gJ8Gplj+AF/VaB/y7//74w" />
<AcmeProjectActionInfo Action="File" Source="config/peripheral_clk_config.h" IsConfig="true" Hash="9F6jT6g2yhmqyb5sOdX/8w" />
<AcmeProjectActionInfo Action="File" Source="config/stdio_redirect_config.h" IsConfig="true" Hash="CKmkBk12sfr7mb+HRQBuzg" />
</AcmeActionInfos>
<NonsecureFilesInfo />
</AcmeProjectConfig>
</AcmeProjectConfig>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>NDEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.directories.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\arm\CMSIS\5.4.0\CMSIS\Core\Include\</Value>
<Value>../Config</Value>
<Value>../</Value>
<Value>../examples</Value>
<Value>../hal/include</Value>
<Value>../hal/utils/include</Value>
<Value>../hpl/cmcc</Value>
<Value>../hpl/core</Value>
<Value>../hpl/dmac</Value>
<Value>../hpl/evsys</Value>
<Value>../hpl/gclk</Value>
<Value>../hpl/mclk</Value>
<Value>../hpl/osc32kctrl</Value>
<Value>../hpl/oscctrl</Value>
<Value>../hpl/pm</Value>
<Value>../hpl/port</Value>
<Value>../hpl/qspi</Value>
<Value>../hpl/ramecc</Value>
<Value>../hpl/sercom</Value>
<Value>../hpl/tc</Value>
<Value>../hri</Value>
<Value>../stdio_redirect</Value>
<Value>%24(PackRepoDir)\atmel\SAME54_DFP\1.1.134\include</Value>
</ListValues>
</armgcc.compiler.directories.IncludePaths>
<armgcc.compiler.optimization.level>Optimize for size (-Os)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -mfloat-abi=softfp -mfpu=fpv4-sp-d16</armgcc.compiler.miscellaneous.OtherFlags>
<armgcc.linker.general.UseNewlibNano>True</armgcc.linker.general.UseNewlibNano>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>%24(ProjectDir)\Device_Startup</Value>
</ListValues>
</armgcc.linker.libraries.LibrarySearchPaths>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsame54p20a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.general.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\arm\CMSIS\5.4.0\CMSIS\Core\Include\</Value>
<Value>../Config</Value>
<Value>../</Value>
<Value>../examples</Value>
<Value>../hal/include</Value>
<Value>../hal/utils/include</Value>
<Value>../hpl/cmcc</Value>
<Value>../hpl/core</Value>
<Value>../hpl/dmac</Value>
<Value>../hpl/evsys</Value>
<Value>../hpl/gclk</Value>
<Value>../hpl/mclk</Value>
<Value>../hpl/osc32kctrl</Value>
<Value>../hpl/oscctrl</Value>
<Value>../hpl/pm</Value>
<Value>../hpl/port</Value>
<Value>../hpl/qspi</Value>
<Value>../hpl/ramecc</Value>
<Value>../hpl/sercom</Value>
<Value>../hpl/tc</Value>
<Value>../hri</Value>
<Value>../stdio_redirect</Value>
<Value>%24(PackRepoDir)\atmel\SAME54_DFP\1.1.134\include</Value>
</ListValues>
</armgcc.assembler.general.IncludePaths>
<armgcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\arm\CMSIS\5.4.0\CMSIS\Core\Include\</Value>
<Value>../Config</Value>
<Value>../</Value>
<Value>../examples</Value>
<Value>../hal/include</Value>
<Value>../hal/utils/include</Value>
<Value>../hpl/cmcc</Value>
<Value>../hpl/core</Value>
<Value>../hpl/dmac</Value>
<Value>../hpl/evsys</Value>
<Value>../hpl/gclk</Value>
<Value>../hpl/mclk</Value>
<Value>../hpl/osc32kctrl</Value>
<Value>../hpl/oscctrl</Value>
<Value>../hpl/pm</Value>
<Value>../hpl/port</Value>
<Value>../hpl/qspi</Value>
<Value>../hpl/ramecc</Value>
<Value>../hpl/sercom</Value>
<Value>../hpl/tc</Value>
<Value>../hri</Value>
<Value>../stdio_redirect</Value>
<Value>%24(PackRepoDir)\atmel\SAME54_DFP\1.1.134\include</Value>
</ListValues>
</armgcc.preprocessingassembler.general.IncludePaths>
</ArmGcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<ArmGcc>
<armgcc.common.outputfiles.hex>True</armgcc.common.outputfiles.hex>
<armgcc.common.outputfiles.lss>True</armgcc.common.outputfiles.lss>
<armgcc.common.outputfiles.eep>True</armgcc.common.outputfiles.eep>
<armgcc.common.outputfiles.bin>True</armgcc.common.outputfiles.bin>
<armgcc.common.outputfiles.srec>True</armgcc.common.outputfiles.srec>
<armgcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>DEBUG</Value>
</ListValues>
</armgcc.compiler.symbols.DefSymbols>
<armgcc.compiler.directories.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\arm\CMSIS\5.4.0\CMSIS\Core\Include\</Value>
<Value>../Config</Value>
<Value>../</Value>
<Value>../examples</Value>
<Value>../hal/include</Value>
<Value>../hal/utils/include</Value>
<Value>../hpl/cmcc</Value>
<Value>../hpl/core</Value>
<Value>../hpl/dmac</Value>
<Value>../hpl/evsys</Value>
<Value>../hpl/gclk</Value>
<Value>../hpl/mclk</Value>
<Value>../hpl/osc32kctrl</Value>
<Value>../hpl/oscctrl</Value>
<Value>../hpl/pm</Value>
<Value>../hpl/port</Value>
<Value>../hpl/qspi</Value>
<Value>../hpl/ramecc</Value>
<Value>../hpl/sercom</Value>
<Value>../hpl/tc</Value>
<Value>../hri</Value>
<Value>../stdio_redirect</Value>
<Value>%24(PackRepoDir)\atmel\SAME54_DFP\1.1.134\include</Value>
</ListValues>
</armgcc.compiler.directories.IncludePaths>
<armgcc.compiler.optimization.level>Optimize debugging experience (-Og)</armgcc.compiler.optimization.level>
<armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</armgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<armgcc.compiler.optimization.DebugLevel>Maximum (-g3)</armgcc.compiler.optimization.DebugLevel>
<armgcc.compiler.warnings.AllWarnings>True</armgcc.compiler.warnings.AllWarnings>
<armgcc.compiler.miscellaneous.OtherFlags>-std=gnu99 -mfloat-abi=softfp -mfpu=fpv4-sp-d16</armgcc.compiler.miscellaneous.OtherFlags>
<armgcc.linker.general.UseNewlibNano>True</armgcc.linker.general.UseNewlibNano>
<armgcc.linker.libraries.Libraries>
<ListValues>
<Value>libm</Value>
</ListValues>
</armgcc.linker.libraries.Libraries>
<armgcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>%24(ProjectDir)\Device_Startup</Value>
</ListValues>
</armgcc.linker.libraries.LibrarySearchPaths>
<armgcc.linker.optimization.GarbageCollectUnusedSections>True</armgcc.linker.optimization.GarbageCollectUnusedSections>
<armgcc.linker.miscellaneous.LinkerFlags>-Tsame54p20a_flash.ld</armgcc.linker.miscellaneous.LinkerFlags>
<armgcc.assembler.general.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\arm\CMSIS\5.4.0\CMSIS\Core\Include\</Value>
<Value>../Config</Value>
<Value>../</Value>
<Value>../examples</Value>
<Value>../hal/include</Value>
<Value>../hal/utils/include</Value>
<Value>../hpl/cmcc</Value>
<Value>../hpl/core</Value>
<Value>../hpl/dmac</Value>
<Value>../hpl/evsys</Value>
<Value>../hpl/gclk</Value>
<Value>../hpl/mclk</Value>
<Value>../hpl/osc32kctrl</Value>
<Value>../hpl/oscctrl</Value>
<Value>../hpl/pm</Value>
<Value>../hpl/port</Value>
<Value>../hpl/qspi</Value>
<Value>../hpl/ramecc</Value>
<Value>../hpl/sercom</Value>
<Value>../hpl/tc</Value>
<Value>../hri</Value>
<Value>../stdio_redirect</Value>
<Value>%24(PackRepoDir)\atmel\SAME54_DFP\1.1.134\include</Value>
</ListValues>
</armgcc.assembler.general.IncludePaths>
<armgcc.assembler.debugging.DebugLevel>Default (-g)</armgcc.assembler.debugging.DebugLevel>
<armgcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>%24(PackRepoDir)\arm\CMSIS\5.4.0\CMSIS\Core\Include\</Value>
<Value>../Config</Value>
<Value>../</Value>
<Value>../examples</Value>
<Value>../hal/include</Value>
<Value>../hal/utils/include</Value>
<Value>../hpl/cmcc</Value>
<Value>../hpl/core</Value>
<Value>../hpl/dmac</Value>
<Value>../hpl/evsys</Value>
<Value>../hpl/gclk</Value>
<Value>../hpl/mclk</Value>
<Value>../hpl/osc32kctrl</Value>
<Value>../hpl/oscctrl</Value>
<Value>../hpl/pm</Value>
<Value>../hpl/port</Value>
<Value>../hpl/qspi</Value>
<Value>../hpl/ramecc</Value>
<Value>../hpl/sercom</Value>
<Value>../hpl/tc</Value>
<Value>../hri</Value>
<Value>../stdio_redirect</Value>
<Value>%24(PackRepoDir)\atmel\SAME54_DFP\1.1.134\include</Value>
</ListValues>
</armgcc.preprocessingassembler.general.IncludePaths>
<armgcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</armgcc.preprocessingassembler.debugging.DebugLevel>
</ArmGcc>
</ToolchainSettings>
</PropertyGroup>
<ItemGroup>
<Compile Include="atmel_start.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="atmel_start.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="atmel_start_pins.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_cmcc_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_dmac_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_evsys_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_gclk_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_mclk_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_osc32kctrl_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_oscctrl_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_port_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_qspi_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\hpl_sercom_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\peripheral_clk_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\RTE_Components.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Config\stdio_redirect_config.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="Device_Startup\startup_same54.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="Device_Startup\system_same54.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="driver_init.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="driver_init.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="ethercat\ethercat_qspi.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="ethercat\ethercat_qspi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="examples\driver_examples.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="examples\driver_examples.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_atomic.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_cache.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_delay.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_evsys.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_gpio.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_init.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_io.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_qspi_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_sleep.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_spi_m_dma.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hal_usart_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_cmcc.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_core.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_delay.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_dma.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_evsys.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_gpio.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_i2c_m_async.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_i2c_m_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_i2c_s_async.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_i2c_s_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_init.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_irq.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_missing_features.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_qspi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_qspi_dma.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_qspi_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_ramecc.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_reset.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_sleep.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_async.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_dma.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_m_async.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_m_dma.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_m_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_s_async.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_spi_s_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_usart.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_usart_async.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\include\hpl_usart_sync.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_atomic.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_cache.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_delay.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_evsys.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_gpio.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_init.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_io.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_qspi_sync.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_sleep.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_spi_m_dma.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\src\hal_usart_sync.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\compiler.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\err_codes.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\events.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\parts.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\utils.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\utils_assert.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\utils_event.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\utils_increment_macro.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\utils_list.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\include\utils_repeat_macro.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\src\utils_assert.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\src\utils_event.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\src\utils_list.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hal\utils\src\utils_syscalls.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\cmcc\hpl_cmcc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\core\hpl_core_m4.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\core\hpl_core_port.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\core\hpl_init.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\dmac\hpl_dmac.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\evsys\hpl_evsys.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\gclk\hpl_gclk.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\gclk\hpl_gclk_base.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\mclk\hpl_mclk.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\osc32kctrl\hpl_osc32kctrl.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\oscctrl\hpl_oscctrl.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\pm\hpl_pm.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\pm\hpl_pm_base.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\port\hpl_gpio_base.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\qspi\hpl_qspi.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\ramecc\hpl_ramecc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\sercom\hpl_sercom.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\tc\tc_lite.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="hpl\tc\tc_lite.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_ac_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_adc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_aes_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_can_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_ccl_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_cmcc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_dac_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_dmac_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_dsu_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_eic_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_evsys_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_freqm_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_gclk_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_gmac_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_hmatrixb_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_i2s_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_icm_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_mclk_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_nvmctrl_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_osc32kctrl_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_oscctrl_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_pac_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_pcc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_pdec_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_pm_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_port_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_qspi_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_ramecc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_rstc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_rtc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_sdhc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_sercom_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_supc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_tcc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_tc_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_trng_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_usb_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="hri\hri_wdt_e54.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="main.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="stdio_redirect\gcc\read.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="stdio_redirect\gcc\write.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="stdio_redirect\stdio_io.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="stdio_redirect\stdio_io.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="stdio_start.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="stdio_start.h">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="Config\" />
<Folder Include="Device_Startup\" />
<Folder Include="documentation\" />
<Folder Include="ethercat" />
<Folder Include="examples\" />
<Folder Include="hal\" />
<Folder Include="hal\documentation\" />
<Folder Include="hal\include\" />
<Folder Include="hal\src\" />
<Folder Include="hal\utils\" />
<Folder Include="hal\utils\include\" />
<Folder Include="hal\utils\src\" />
<Folder Include="hpl\" />
<Folder Include="hpl\cmcc\" />
<Folder Include="hpl\core\" />
<Folder Include="hpl\dmac\" />
<Folder Include="hpl\doc_lite\" />
<Folder Include="hpl\evsys\" />
<Folder Include="hpl\gclk\" />
<Folder Include="hpl\mclk\" />
<Folder Include="hpl\osc32kctrl\" />
<Folder Include="hpl\oscctrl\" />
<Folder Include="hpl\pm\" />
<Folder Include="hpl\port\" />
<Folder Include="hpl\qspi\" />
<Folder Include="hpl\ramecc\" />
<Folder Include="hpl\sercom\" />
<Folder Include="hpl\tc\" />
<Folder Include="hri\" />
<Folder Include="stdio_redirect\" />
<Folder Include="stdio_redirect\gcc\" />
</ItemGroup>
<ItemGroup>
<None Include="Device_Startup\same54p20a_flash.ld">
<SubType>compile</SubType>
</None>
<None Include="Device_Startup\same54p20a_sram.ld">
<SubType>compile</SubType>
</None>
<None Include="documentation\stdio.rst">
<SubType>compile</SubType>
</None>
<None Include="hal\documentation\evsys.rst">
<SubType>compile</SubType>
</None>
<None Include="hal\documentation\quad_spi_sync.rst">
<SubType>compile</SubType>
</None>
<None Include="hal\documentation\spi_master_dma.rst">
<SubType>compile</SubType>
</None>
<None Include="hal\documentation\usart_sync.rst">
<SubType>compile</SubType>
</None>
<None Include="hpl\doc_lite\tc.rst">
<SubType>compile</SubType>
</None>
</ItemGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
</Project>

View File

@ -0,0 +1,43 @@
/*
* Code generated from Atmel Start.
*
* This file will be overwritten when reconfiguring your Atmel Start project.
* Please copy examples or other code you want to keep to a separate file
* to avoid losing it when reconfiguring.
*/
#ifndef ATMEL_START_PINS_H_INCLUDED
#define ATMEL_START_PINS_H_INCLUDED
#include <hal_gpio.h>
// SAME54 has 14 pin functions
#define GPIO_PIN_FUNCTION_A 0
#define GPIO_PIN_FUNCTION_B 1
#define GPIO_PIN_FUNCTION_C 2
#define GPIO_PIN_FUNCTION_D 3
#define GPIO_PIN_FUNCTION_E 4
#define GPIO_PIN_FUNCTION_F 5
#define GPIO_PIN_FUNCTION_G 6
#define GPIO_PIN_FUNCTION_H 7
#define GPIO_PIN_FUNCTION_I 8
#define GPIO_PIN_FUNCTION_J 9
#define GPIO_PIN_FUNCTION_K 10
#define GPIO_PIN_FUNCTION_L 11
#define GPIO_PIN_FUNCTION_M 12
#define GPIO_PIN_FUNCTION_N 13
#define PA08 GPIO(GPIO_PORTA, 8)
#define PA09 GPIO(GPIO_PORTA, 9)
#define PA10 GPIO(GPIO_PORTA, 10)
#define PA11 GPIO(GPIO_PORTA, 11)
#define PB10 GPIO(GPIO_PORTB, 10)
#define PB11 GPIO(GPIO_PORTB, 11)
#define PB24 GPIO(GPIO_PORTB, 24)
#define PB25 GPIO(GPIO_PORTB, 25)
#define PB26 GPIO(GPIO_PORTB, 26)
#define PB27 GPIO(GPIO_PORTB, 27)
#define SPI_CS GPIO(GPIO_PORTB, 28)
#define PB29 GPIO(GPIO_PORTB, 29)
#endif // ATMEL_START_PINS_H_INCLUDED

View File

@ -0,0 +1,369 @@
/*
* Code generated from Atmel Start.
*
* This file will be overwritten when reconfiguring your Atmel Start project.
* Please copy examples or other code you want to keep to a separate file
* to avoid losing it when reconfiguring.
*/
#include "driver_init.h"
#include <peripheral_clk_config.h>
#include <utils.h>
#include <hal_init.h>
struct qspi_sync_descriptor QUAD_SPI_0;
struct usart_sync_descriptor TARGET_IO;
struct spi_m_dma_descriptor SPI_0;
void EVENT_SYSTEM_0_init(void)
{
hri_gclk_write_PCHCTRL_reg(GCLK, EVSYS_GCLK_ID_0, CONF_GCLK_EVSYS_CHANNEL_0_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_mclk_set_APBBMASK_EVSYS_bit(MCLK);
event_system_init();
}
void QUAD_SPI_0_PORT_init(void)
{
// Set pin direction to input
gpio_set_pin_direction(PB11, GPIO_DIRECTION_IN);
gpio_set_pin_pull_mode(PB11,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PB11, PINMUX_PB11H_QSPI_CS);
gpio_set_pin_direction(PA08,
// <y> Pin direction
// <id> pad_direction
// <GPIO_DIRECTION_OFF"> Off
// <GPIO_DIRECTION_IN"> In
// <GPIO_DIRECTION_OUT"> Out
GPIO_DIRECTION_OUT);
gpio_set_pin_level(PA08,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
false);
gpio_set_pin_pull_mode(PA08,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PA08,
// <y> Pin function
// <id> pad_function
// <i> Auto : use driver pinmux if signal is imported by driver, else turn off function
// <PINMUX_PA08H_QSPI_DATA0"> Auto
// <GPIO_PIN_FUNCTION_OFF"> Off
// <GPIO_PIN_FUNCTION_A"> A
// <GPIO_PIN_FUNCTION_B"> B
// <GPIO_PIN_FUNCTION_C"> C
// <GPIO_PIN_FUNCTION_D"> D
// <GPIO_PIN_FUNCTION_E"> E
// <GPIO_PIN_FUNCTION_F"> F
// <GPIO_PIN_FUNCTION_G"> G
// <GPIO_PIN_FUNCTION_H"> H
// <GPIO_PIN_FUNCTION_I"> I
// <GPIO_PIN_FUNCTION_J"> J
// <GPIO_PIN_FUNCTION_K"> K
// <GPIO_PIN_FUNCTION_L"> L
// <GPIO_PIN_FUNCTION_M"> M
// <GPIO_PIN_FUNCTION_N"> N
PINMUX_PA08H_QSPI_DATA0);
gpio_set_pin_direction(PA09,
// <y> Pin direction
// <id> pad_direction
// <GPIO_DIRECTION_OFF"> Off
// <GPIO_DIRECTION_IN"> In
// <GPIO_DIRECTION_OUT"> Out
GPIO_DIRECTION_OUT);
gpio_set_pin_level(PA09,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
false);
gpio_set_pin_pull_mode(PA09,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PA09,
// <y> Pin function
// <id> pad_function
// <i> Auto : use driver pinmux if signal is imported by driver, else turn off function
// <PINMUX_PA09H_QSPI_DATA1"> Auto
// <GPIO_PIN_FUNCTION_OFF"> Off
// <GPIO_PIN_FUNCTION_A"> A
// <GPIO_PIN_FUNCTION_B"> B
// <GPIO_PIN_FUNCTION_C"> C
// <GPIO_PIN_FUNCTION_D"> D
// <GPIO_PIN_FUNCTION_E"> E
// <GPIO_PIN_FUNCTION_F"> F
// <GPIO_PIN_FUNCTION_G"> G
// <GPIO_PIN_FUNCTION_H"> H
// <GPIO_PIN_FUNCTION_I"> I
// <GPIO_PIN_FUNCTION_J"> J
// <GPIO_PIN_FUNCTION_K"> K
// <GPIO_PIN_FUNCTION_L"> L
// <GPIO_PIN_FUNCTION_M"> M
// <GPIO_PIN_FUNCTION_N"> N
PINMUX_PA09H_QSPI_DATA1);
gpio_set_pin_direction(PA10,
// <y> Pin direction
// <id> pad_direction
// <GPIO_DIRECTION_OFF"> Off
// <GPIO_DIRECTION_IN"> In
// <GPIO_DIRECTION_OUT"> Out
GPIO_DIRECTION_OUT);
gpio_set_pin_level(PA10,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
false);
gpio_set_pin_pull_mode(PA10,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PA10,
// <y> Pin function
// <id> pad_function
// <i> Auto : use driver pinmux if signal is imported by driver, else turn off function
// <PINMUX_PA10H_QSPI_DATA2"> Auto
// <GPIO_PIN_FUNCTION_OFF"> Off
// <GPIO_PIN_FUNCTION_A"> A
// <GPIO_PIN_FUNCTION_B"> B
// <GPIO_PIN_FUNCTION_C"> C
// <GPIO_PIN_FUNCTION_D"> D
// <GPIO_PIN_FUNCTION_E"> E
// <GPIO_PIN_FUNCTION_F"> F
// <GPIO_PIN_FUNCTION_G"> G
// <GPIO_PIN_FUNCTION_H"> H
// <GPIO_PIN_FUNCTION_I"> I
// <GPIO_PIN_FUNCTION_J"> J
// <GPIO_PIN_FUNCTION_K"> K
// <GPIO_PIN_FUNCTION_L"> L
// <GPIO_PIN_FUNCTION_M"> M
// <GPIO_PIN_FUNCTION_N"> N
PINMUX_PA10H_QSPI_DATA2);
gpio_set_pin_direction(PA11,
// <y> Pin direction
// <id> pad_direction
// <GPIO_DIRECTION_OFF"> Off
// <GPIO_DIRECTION_IN"> In
// <GPIO_DIRECTION_OUT"> Out
GPIO_DIRECTION_OUT);
gpio_set_pin_level(PA11,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
false);
gpio_set_pin_pull_mode(PA11,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PA11,
// <y> Pin function
// <id> pad_function
// <i> Auto : use driver pinmux if signal is imported by driver, else turn off function
// <PINMUX_PA11H_QSPI_DATA3"> Auto
// <GPIO_PIN_FUNCTION_OFF"> Off
// <GPIO_PIN_FUNCTION_A"> A
// <GPIO_PIN_FUNCTION_B"> B
// <GPIO_PIN_FUNCTION_C"> C
// <GPIO_PIN_FUNCTION_D"> D
// <GPIO_PIN_FUNCTION_E"> E
// <GPIO_PIN_FUNCTION_F"> F
// <GPIO_PIN_FUNCTION_G"> G
// <GPIO_PIN_FUNCTION_H"> H
// <GPIO_PIN_FUNCTION_I"> I
// <GPIO_PIN_FUNCTION_J"> J
// <GPIO_PIN_FUNCTION_K"> K
// <GPIO_PIN_FUNCTION_L"> L
// <GPIO_PIN_FUNCTION_M"> M
// <GPIO_PIN_FUNCTION_N"> N
PINMUX_PA11H_QSPI_DATA3);
// Set pin direction to input
gpio_set_pin_direction(PB10, GPIO_DIRECTION_IN);
gpio_set_pin_pull_mode(PB10,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PB10, PINMUX_PB10H_QSPI_SCK);
}
void QUAD_SPI_0_CLOCK_init(void)
{
hri_mclk_set_AHBMASK_QSPI_bit(MCLK);
hri_mclk_set_AHBMASK_QSPI_2X_bit(MCLK);
hri_mclk_set_APBCMASK_QSPI_bit(MCLK);
}
void QUAD_SPI_0_init(void)
{
QUAD_SPI_0_CLOCK_init();
qspi_sync_init(&QUAD_SPI_0, QSPI);
QUAD_SPI_0_PORT_init();
}
void TARGET_IO_PORT_init(void)
{
gpio_set_pin_function(PB25, PINMUX_PB25D_SERCOM2_PAD0);
gpio_set_pin_function(PB24, PINMUX_PB24D_SERCOM2_PAD1);
}
void TARGET_IO_CLOCK_init(void)
{
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM2_GCLK_ID_CORE, CONF_GCLK_SERCOM2_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM2_GCLK_ID_SLOW, CONF_GCLK_SERCOM2_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_mclk_set_APBBMASK_SERCOM2_bit(MCLK);
}
void TARGET_IO_init(void)
{
TARGET_IO_CLOCK_init();
usart_sync_init(&TARGET_IO, SERCOM2, (void *)NULL);
TARGET_IO_PORT_init();
}
void SPI_0_PORT_init(void)
{
gpio_set_pin_level(PB27,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
false);
// Set pin direction to output
gpio_set_pin_direction(PB27, GPIO_DIRECTION_OUT);
gpio_set_pin_function(PB27, PINMUX_PB27D_SERCOM4_PAD0);
gpio_set_pin_level(PB26,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
false);
// Set pin direction to output
gpio_set_pin_direction(PB26, GPIO_DIRECTION_OUT);
gpio_set_pin_function(PB26, PINMUX_PB26D_SERCOM4_PAD1);
// Set pin direction to input
gpio_set_pin_direction(PB29, GPIO_DIRECTION_IN);
gpio_set_pin_pull_mode(PB29,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(PB29, PINMUX_PB29D_SERCOM4_PAD3);
}
void SPI_0_CLOCK_init(void)
{
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM4_GCLK_ID_CORE, CONF_GCLK_SERCOM4_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM4_GCLK_ID_SLOW, CONF_GCLK_SERCOM4_SLOW_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
hri_mclk_set_APBDMASK_SERCOM4_bit(MCLK);
}
void SPI_0_init(void)
{
SPI_0_CLOCK_init();
spi_m_dma_init(&SPI_0, SERCOM4);
SPI_0_PORT_init();
}
void TIMER_0_CLOCK_init(void)
{
hri_mclk_set_APBAMASK_TC0_bit(MCLK);
hri_mclk_set_APBAMASK_TC1_bit(MCLK);
hri_gclk_write_PCHCTRL_reg(GCLK, TC0_GCLK_ID, CONF_GCLK_TC0_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));
}
void system_init(void)
{
init_mcu();
// GPIO on PB28
gpio_set_pin_level(SPI_CS,
// <y> Initial level
// <id> pad_initial_level
// <false"> Low
// <true"> High
true);
// Set pin direction to output
gpio_set_pin_direction(SPI_CS, GPIO_DIRECTION_OUT);
gpio_set_pin_function(SPI_CS, GPIO_PIN_FUNCTION_OFF);
EVENT_SYSTEM_0_init();
QUAD_SPI_0_init();
TARGET_IO_init();
SPI_0_init();
TIMER_0_CLOCK_init();
TIMER_0_init();
}

View File

@ -0,0 +1,64 @@
/*
* Code generated from Atmel Start.
*
* This file will be overwritten when reconfiguring your Atmel Start project.
* Please copy examples or other code you want to keep to a separate file
* to avoid losing it when reconfiguring.
*/
#ifndef DRIVER_INIT_INCLUDED
#define DRIVER_INIT_INCLUDED
#include "atmel_start_pins.h"
#ifdef __cplusplus
extern "C" {
#endif
#include <hal_atomic.h>
#include <hal_delay.h>
#include <hal_gpio.h>
#include <hal_init.h>
#include <hal_io.h>
#include <hal_sleep.h>
#include <hal_evsys.h>
#include <hal_qspi_sync.h>
#include <hal_usart_sync.h>
#include <hal_spi_m_dma.h>
#include <tc_lite.h>
extern struct qspi_sync_descriptor QUAD_SPI_0;
extern struct usart_sync_descriptor TARGET_IO;
extern struct spi_m_dma_descriptor SPI_0;
void QUAD_SPI_0_PORT_init(void);
void QUAD_SPI_0_CLOCK_init(void);
void QUAD_SPI_0_init(void);
void TARGET_IO_PORT_init(void);
void TARGET_IO_CLOCK_init(void);
void TARGET_IO_init(void);
void SPI_0_PORT_init(void);
void SPI_0_CLOCK_init(void);
void SPI_0_init(void);
void TIMER_0_CLOCK_init(void);
int8_t TIMER_0_init(void);
/**
* \brief Perform system initialization, initialize pins and clocks for
* peripherals
*/
void system_init(void);
#ifdef __cplusplus
}
#endif
#endif // DRIVER_INIT_INCLUDED

View File

@ -0,0 +1,112 @@
/*
* ethercat_qspi.c
*
* Created: 15/07/2021 19:30:41
* Author: Nick-XMG
*/
#include "ethercat_qspi.h"
#define ECAT_SIZE_WR 64 //max fifo size
#define ECAT_SIZE_RD ECAT_SIZE_WR
#define ECAT_SIZE_WR_REG ECAT_SIZE_WR/4
#define ECAT_SIZE_RD_REG ECAT_SIZE_WR/4
#define SQI_READ (0x0B<<16)
#define SQI_WRITE (0x02<<16)
#define SQI_INC (0x40<<8)
#define SQI_DEC (0x80<<8)
#define ECAT_PRAM_RD_DATA 0x0000
#define ECAT_PRAM_WR_DATA 0x0020
#define HW_CFG 0x0074
#define BYTE_TEST 0x0064
#define ECAT_PRAM_RD_ADDR_LEN 0x0308
#define ECAT_PRAM_RD_CMD 0x030C
#define ECAT_PRAM_WR_ADDR_LEN 0x0310
#define ECAT_PRAM_WR_CMD 0x0314
#define LAN9252_RDY (1<<27)
#define PDRAM_RD_ADDRESS 0x1100
#define PDRAM_RD_LENGTH ECAT_SIZE_RD //do the math later to automatize. fixed to 64 for now.
#define PDRAM_WR_ADDRESS 0x1800
#define PDRAM_WR_LENGTH ECAT_SIZE_WR
#define PDRAM_LENGTH_MAX 64
#define PDRAM_LENGTH_SHORT 32
#define FIFO_DEPTH 16
#define PDRAM_REG_MAX PDRAM_LENGTH_SHORT/4
#define PRAM_X_ABORT (1<<30)
#define CSR_BUSY 0x80000000
#define buffer_size 3*ECAT_SIZE_WR_REG //changed to double
#define motor_buffer_size buffer_size/3
uint32_t QSPI_tx_buffer[buffer_size]={0};
uint32_t QSPI_rx_buffer[buffer_size]={0};
struct SPI_Slave S1 = {
.SPI_Sn = &SPI_0,
.state = 0,
.SS_pin = SPI_CS,
.tx_buffer = &QSPI_rx_buffer[0],
.rx_buffer = &QSPI_tx_buffer[0],
};
uint32_t QSPI_cmds[]= {0,PRAM_X_ABORT,0,PRAM_X_ABORT,
((PDRAM_LENGTH_MAX)<<16)+PDRAM_RD_ADDRESS, CSR_BUSY,(PDRAM_LENGTH_MAX<<16)+PDRAM_WR_ADDRESS,CSR_BUSY,
((PDRAM_LENGTH_MAX)<<16)+PDRAM_RD_ADDRESS+PDRAM_LENGTH_MAX, CSR_BUSY,(PDRAM_LENGTH_MAX<<16)+PDRAM_WR_ADDRESS+PDRAM_LENGTH_MAX,CSR_BUSY,
((PDRAM_LENGTH_MAX)<<16)+PDRAM_RD_ADDRESS+PDRAM_LENGTH_MAX*2, CSR_BUSY,(PDRAM_LENGTH_MAX<<16)+PDRAM_WR_ADDRESS+PDRAM_LENGTH_MAX*2,CSR_BUSY,
};
uint32_t zero[FIFO_DEPTH]={0};
struct _qspi_command rd_cmd = {
.inst_frame.bits.width = QSPI_INST4_ADDR4_DATA4,
.inst_frame.bits.inst_en = 0,
.inst_frame.bits.data_en = 1,
.inst_frame.bits.addr_en = 1,
.inst_frame.bits.dummy_cycles = 6,
.inst_frame.bits.tfr_type = QSPI_READMEM_ACCESS,
};
struct _qspi_command wr_cmd = {
.inst_frame.bits.width = QSPI_INST4_ADDR4_DATA4,
.inst_frame.bits.inst_en = 0,
.inst_frame.bits.data_en = 1,
.inst_frame.bits.addr_en = 1,
.inst_frame.bits.dummy_cycles = 0,
.inst_frame.bits.tfr_type = QSPI_WRITEMEM_ACCESS,
};
struct _qspi_command qspi_cmd = {
.inst_frame.bits.width = QSPI_INST1_ADDR1_DATA1,
.inst_frame.bits.inst_en = 1,
.inst_frame.bits.data_en = 0,
.inst_frame.bits.addr_en = 0,
.inst_frame.bits.dummy_cycles = 0,
.instruction = 0x38,
.inst_frame.bits.tfr_type = QSPI_WRITE_ACCESS,
};
volatile uint8_t SPI_S1_SS_state = 0;
volatile uint8_t* M1_tx_cnt = &QSPI_rx_buffer[0];
volatile uint8_t* M1_rx_cnt = &QSPI_tx_buffer[0];
uint8_t sync_rx_buffer[2*2*buffer_size/3]={0};
uint8_t sync_tx_buffer[2*2*buffer_size/3]={0xED};
volatile uint32_t status = 0;
struct _qspi_command *spi_cmd= &wr_cmd;
volatile uint8_t tx_complete=3;
volatile uint32_t *ECAT_BYTE_TEST = QSPI_AHB+BYTE_TEST+SQI_READ;
volatile uint32_t *ECAT_FIFO_RD_RD = QSPI_AHB+SQI_READ +ECAT_PRAM_RD_DATA;
volatile uint32_t *ECAT_FIFO_WR_WR = QSPI_AHB+SQI_WRITE+ECAT_PRAM_WR_DATA;
volatile uint32_t *ECAT_HW_CFG_RD = QSPI_AHB+SQI_READ+HW_CFG;
volatile uint32_t *ECAT_FIFO_RD_ADLEN_WR = QSPI_AHB+SQI_WRITE+SQI_INC+ECAT_PRAM_RD_ADDR_LEN;
volatile uint32_t *ECAT_FIFO_WR_ADLEN_WR = QSPI_AHB+SQI_WRITE+SQI_INC+ECAT_PRAM_WR_ADDR_LEN;
volatile uint32_t *ECAT_FIFO_WR_ADLEN_RD = QSPI_AHB+SQI_READ+SQI_INC+ECAT_PRAM_WR_ADDR_LEN;
volatile uint32_t *ECAT_FIFO_WR_CMD_RD = QSPI_AHB+SQI_READ+ECAT_PRAM_WR_CMD;
volatile uint32_t *ECAT_FIFO_WR_CMD_WR = QSPI_AHB+SQI_WRITE+ECAT_PRAM_WR_CMD;
volatile enum ecat_states ecat_state = wait;
volatile enum ecat_states next_ecat_state = wait;

View File

@ -0,0 +1,69 @@
/*
* ethercat_qspi.h
*
* Created: 15/07/2021 19:30:17
* Author: Nick-XMG
*/
#ifndef ETHERCAT_QSPI_H_
#define ETHERCAT_QSPI_H_
#include "atmel_start.h"
#include "math.h"
extern uint32_t QSPI_tx_buffer[];
extern uint32_t QSPI_rx_buffer[];
struct SPI_Slave {
struct spi_m_dma_descriptor *SPI_Sn;
uint8_t state;
uint32_t SS_pin;
uint32_t *tx_buffer;
uint32_t *rx_buffer;
};
COMPILER_ALIGNED(16)
DmacDescriptor dummy_rx_descriptor;
DmacDescriptor dummy_tx_descriptor;
volatile uint8_t SPI_S1_SS_state;
volatile uint8_t *M1_tx_cnt;
volatile uint8_t *M1_rx_cnt;
extern uint8_t sync_rx_buffer[];
extern uint8_t sync_tx_buffer[];
extern uint32_t QSPI_cmds[];
extern uint32_t zero[];
struct _qspi_command *spi_cmd;
volatile uint32_t *INPUT_ADDRESS ;
volatile uint32_t *OUTPUT_ADDRESS;
volatile uint32_t read_buffer =0;
volatile uint8_t ecat_length= 0;
struct io_descriptor *SPI_S1_io;
enum ecat_states {
abort_fifo,
dlt_rdram,
cf_dlt_rdram,
write_fifo,
config_fifo,
read_fifo,
wait,
wait2,
en_SQI,
temp,rd_rdy
};
volatile enum ecat_states ecat_state;
volatile enum ecat_states next_ecat_state;
volatile uint8_t wr_cnt = 0;
volatile uint8_t rd_cnt = 0;
volatile init_timer =0;
volatile bool run_ECAT = false;
#endif /* ETHERCAT_QSPI_H_ */

View File

@ -0,0 +1,72 @@
/*
* Code generated from Atmel Start.
*
* This file will be overwritten when reconfiguring your Atmel Start project.
* Please copy examples or other code you want to keep to a separate file
* to avoid losing it when reconfiguring.
*/
#include "driver_examples.h"
#include "driver_init.h"
#include "utils.h"
/**
* Example of using QUAD_SPI_0 to get N25Q256A status value,
* and check bit 0 which indicate embedded operation is busy or not.
*/
void QUAD_SPI_0_example(void)
{
uint8_t status = 0xFF;
struct _qspi_command cmd = {
.inst_frame.bits.inst_en = 1,
.inst_frame.bits.data_en = 1,
.inst_frame.bits.tfr_type = QSPI_READ_ACCESS,
.instruction = 0x05,
.buf_len = 1,
.rx_buf = &status,
};
qspi_sync_enable(&QUAD_SPI_0);
while (status & (1 << 0)) {
qspi_sync_serial_run_command(&QUAD_SPI_0, &cmd);
}
qspi_sync_deinit(&QUAD_SPI_0);
}
/**
* Example of using TARGET_IO to write "Hello World" using the IO abstraction.
*/
void TARGET_IO_example(void)
{
struct io_descriptor *io;
usart_sync_get_io_descriptor(&TARGET_IO, &io);
usart_sync_enable(&TARGET_IO);
io_write(io, (uint8_t *)"Hello World!", 12);
}
/**
* Example of using SPI_0 to write "Hello World" using the IO abstraction.
*
* Since the driver is asynchronous we need to use statically allocated memory for string
* because driver initiates transfer and then returns before the transmission is completed.
*
* Once transfer has been completed the tx_cb function will be called.
*/
static uint8_t example_SPI_0[12] = "Hello World!";
static void tx_complete_cb_SPI_0(struct _dma_resource *resource)
{
/* Transfer completed */
}
void SPI_0_example(void)
{
struct io_descriptor *io;
spi_m_dma_get_io_descriptor(&SPI_0, &io);
spi_m_dma_register_callback(&SPI_0, SPI_M_DMA_CB_TX_DONE, tx_complete_cb_SPI_0);
spi_m_dma_enable(&SPI_0);
io_write(io, example_SPI_0, 12);
}

View File

@ -0,0 +1,24 @@
/*
* Code generated from Atmel Start.
*
* This file will be overwritten when reconfiguring your Atmel Start project.
* Please copy examples or other code you want to keep to a separate file
* to avoid losing it when reconfiguring.
*/
#ifndef DRIVER_EXAMPLES_H_INCLUDED
#define DRIVER_EXAMPLES_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
void QUAD_SPI_0_example(void);
void TARGET_IO_example(void);
void SPI_0_example(void);
#ifdef __cplusplus
}
#endif
#endif // DRIVER_EXAMPLES_H_INCLUDED

View File

@ -0,0 +1,43 @@
The Quad SPI Synchronous Driver
=================================
The Quad SPI Interface (QSPI) is a synchronous serial data link that provides
communication with external devices in master mode.
The driver can be used for SPI serial memory middleware which support flash
earse, program and read.
Features
--------
* Initialization/de-initialization
* Enabling/disabling
* Execute command in Serial Memory Mode
Applications
------------
They are commonly used in an application for using serial flash memory operating
in single-bit SPI, Dual SPI and Quad SPI.
Dependencies
------------
Serial NOR flash with Multiple I/O hardware
Concurrency
-----------
N/A
Limitations
-----------
N.A
Known issues and workarounds
----------------------------
N/A

View File

@ -0,0 +1,122 @@
/**
* \file
*
* \brief Quad QSPI related functionality declaration.
*
* Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
#ifndef _HAL_QSPI_INCLUDED
#define _HAL_QSPI_INCLUDED
#include <hpl_qspi_sync.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* \addtogroup doc_driver_hal_quad_spi_sync
*
*@{
*/
/**
* \brief QSPI descriptor structure
*/
struct qspi_sync_descriptor {
struct _qspi_sync_dev dev;
};
/**
* \brief Initialize QSPI low level driver.
*
* \param[in] qspi Pointer to the QSPI device instance
* \param[in] hw Pointer to the hardware base
*
* \return Operation status.
* \retval ERR_NONE Success
*/
int32_t qspi_sync_init(struct qspi_sync_descriptor *qspi, void *hw);
/**
* \brief Deinitialize QSPI low level driver.
*
* \param[in] qspi Pointer to the QSPI device instance
*
* \return Operation status.
* \retval ERR_NONE Success
*/
int32_t qspi_sync_deinit(struct qspi_sync_descriptor *qspi);
/**
* \brief Enable QSPI for access without interrupts
*
* \param[in] qspi Pointer to the QSPI device instance
*
* \return Operation status.
* \retval ERR_NONE Success
*/
int32_t qspi_sync_enable(struct qspi_sync_descriptor *qspi);
/**
* \brief Disable QSPI for access without interrupts
*
* Disable QSPI. Deactivate all CS pins if it works as master.
*
* \param[in] qspi Pointer to the QSPI device instance
*
* \return Operation status.
* \retval ERR_NONE Success
*/
int32_t qspi_sync_disable(struct qspi_sync_descriptor *qspi);
/** \brief Execute command in Serial Memory Mode.
*
* \param[in] qspi Pointer to the HAL QSPI instance
* \param[in] cmd Pointer to the command structure
*
* \return Operation status.
* \retval ERR_NONE Success
*/
int32_t qspi_sync_serial_run_command(struct qspi_sync_descriptor *qspi, const struct _qspi_command *cmd);
/**
* \brief Retrieve the current driver version
*
* \return Current driver version.
*/
uint32_t qspi_sync_get_version(void);
/**@}*/
#ifdef __cplusplus
}
#endif
#endif /* _HAL_QSPI_INCLUDED */

View File

@ -0,0 +1,149 @@
/**
* \file
*
* \brief Quad SPI related functionality declaration.
*
* Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
#ifndef _HPL_QSPI_H_INCLUDED
#define _HPL_QSPI_H_INCLUDED
#include "compiler.h"
/**
* \addtogroup hpl_qspi HPL QSPI
*
*@{
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* \brief Qspi access modes
*/
enum qspi_access {
/* Read access */
QSPI_READ_ACCESS = 0,
/* Read memory access */
QSPI_READMEM_ACCESS,
/* Write access */
QSPI_WRITE_ACCESS,
/* Write memory access */
QSPI_WRITEMEM_ACCESS
};
/**
* \brief QSPI command instruction/address/data width
*/
enum qspi_cmd_width {
/** Instruction: Single-bit, Address: Single-bit, Data: Single-bit */
QSPI_INST1_ADDR1_DATA1,
/** Instruction: Single-bit, Address: Single-bit, Data: Dual-bit */
QSPI_INST1_ADDR1_DATA2,
/** Instruction: Single-bit, Address: Single-bit, Data: Quad-bit */
QSPI_INST1_ADDR1_DATA4,
/** Instruction: Single-bit, Address: Dual-bit, Data: Dual-bit */
QSPI_INST1_ADDR2_DATA2,
/** Instruction: Single-bit, Address: Quad-bit, Data: Quad-bit */
QSPI_INST1_ADDR4_DATA4,
/** Instruction: Dual-bit, Address: Dual-bit, Data: Dual-bit */
QSPI_INST2_ADDR2_DATA2,
/** Instruction: Quad-bit, Address: Quad-bit, Data: Quad-bit */
QSPI_INST4_ADDR4_DATA4
};
/**
* \brief QSPI command option code length in bits
*/
enum qspi_cmd_opt_len {
/** The option code is 1 bit long */
QSPI_OPT_1BIT,
/** The option code is 2 bits long */
QSPI_OPT_2BIT,
/** The option code is 4 bits long */
QSPI_OPT_4BIT,
/** The option code is 8 bits long */
QSPI_OPT_8BIT
};
/**
* \brief Qspi command structure
*/
struct _qspi_command {
union {
struct {
/* Width of QSPI Addr , inst data */
uint32_t width : 3;
/* Reserved */
uint32_t reserved0 : 1;
/* Enable Instruction */
uint32_t inst_en : 1;
/* Enable Address */
uint32_t addr_en : 1;
/* Enable Option */
uint32_t opt_en : 1;
/* Enable Data */
uint32_t data_en : 1;
/* Option Length */
uint32_t opt_len : 2;
/* Address Length */
uint32_t addr_len : 1;
/* Option Length */
uint32_t reserved1 : 1;
/* Transfer type */
uint32_t tfr_type : 2;
/* Continuous read mode */
uint32_t continues_read : 1;
/* Enable Double Data Rate */
uint32_t ddr_enable : 1;
/* Dummy Cycles Length */
uint32_t dummy_cycles : 5;
/* Reserved */
uint32_t reserved3 : 11;
} bits;
uint32_t word;
} inst_frame;
uint8_t instruction;
uint8_t option;
uint32_t address;
size_t buf_len;
const void *tx_buf;
void * rx_buf;
};
#ifdef __cplusplus
}
#endif
/**@}*/
#endif /* ifndef _HPL_QSPI_H_INCLUDED */

View File

@ -0,0 +1,146 @@
/**
* \file
*
* \brief Quad SPI dma related functionality declaration.
*
* Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
#ifndef _HPL_QSPI_DMA_H_INCLUDED
#define _HPL_QSPI_DMA_H_INCLUDED
#include <hpl_qspi.h>
#include "hpl_irq.h"
#include "hpl_dma.h"
/**
* \addtogroup hpl_qspi_dma HPL QSPI
*
*@{
*/
#ifdef __cplusplus
extern "C" {
#endif
/** The callback types */
enum _qspi_dma_cb_type {
/** Callback type for DMA transfer done */
QSPI_DMA_CB_XFER_DONE,
/** Callback type for DMA errors */
QSPI_DMA_CB_ERROR,
};
/**
* \brief QSPI DMA callback type
*/
typedef void (*_qspi_dma_cb_t)(struct _dma_resource *resource);
/**
* \brief The callbacks offered by QSPI driver
*/
struct _qspi_dma_callbacks {
_qspi_dma_cb_t xfer_done;
_qspi_dma_cb_t error;
};
/**
* QSPI dma driver instance.
*/
struct _qspi_dma_dev {
/** Pointer to private data or hardware base */
void *prvt;
/**
* Pointer to the callback functions so that initialize the driver to
* handle interrupts.
*/
struct _qspi_dma_callbacks cb;
/** DMA resource */
struct _dma_resource *resource;
};
/**
* \brief Initialize QSPI for access without interrupts
* It will load default hardware configuration and software struct.
* \param[in, out] dev Pointer to the QSPI device instance.
* \param[in] hw Pointer to the hardware base.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_dma_init(struct _qspi_dma_dev *dev, void *const hw);
/**
* \brief Deinitialize QSPI
* Disable, reset the hardware and the software struct.
* \param[in, out] dev Pointer to the QSPI device instance.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_dma_deinit(struct _qspi_dma_dev *dev);
/**
* \brief Enable QSPI for access without interrupts
* \param[in, out] dev Pointer to the QSPI device instance.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_dma_enable(struct _qspi_dma_dev *dev);
/**
* \brief Disable QSPI for access without interrupts
* \param[in, out] dev Pointer to the QSPI device instance.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_dma_disable(struct _qspi_dma_dev *dev);
/**
* \brief Execute command in Serial Memory Mode.
*
* \param[in] dev The pointer to QSPI device instance
* \param[in] cmd The pointer to the command information
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_dma_serial_run_command(struct _qspi_dma_dev *dev, const struct _qspi_command *cmd);
/**
* \brief Register the QSPI device callback
* \param[in] dev Pointer to the SPI device instance.
* \param[in] type The callback type.
* \param[in] cb The callback function to register. NULL to disable callback.
* \return Always 0.
*/
void _qspi_dma_register_callback(struct _qspi_dma_dev *dev, const enum _qspi_dma_cb_type type, _qspi_dma_cb_t cb);
#ifdef __cplusplus
}
#endif
/**@}*/
#endif /* ifndef _HPL_QSPI_DMA_H_INCLUDED */

View File

@ -0,0 +1,105 @@
/**
* \file
*
* \brief Quad SPI Sync related functionality declaration.
*
* Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
#ifndef _HPL_QSPI_SYNC_H_INCLUDED
#define _HPL_QSPI_SYNC_H_INCLUDED
#include <hpl_qspi.h>
/**
* \addtogroup hpl_qspi HPL QSPI
*
*@{
*/
#ifdef __cplusplus
extern "C" {
#endif
/** Quad SPI polling driver instance. */
struct _qspi_sync_dev {
/** Pointer to private data or hardware base */
void *prvt;
};
/**
* \brief Initialize QSPI for access without interrupts
* It will load default hardware configuration and software struct.
* \param[in, out] dev Pointer to the QSPI device instance.
* \param[in] hw Pointer to the hardware base.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_sync_init(struct _qspi_sync_dev *dev, void *const hw);
/**
* \brief Deinitialize QSPI
* Disable, reset the hardware and the software struct.
* \param[in, out] dev Pointer to the QSPI device instance.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_sync_deinit(struct _qspi_sync_dev *dev);
/**
* \brief Enable QSPI for access without interrupts
* \param[in, out] dev Pointer to the QSPI device instance.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_sync_enable(struct _qspi_sync_dev *dev);
/**
* \brief Disable QSPI for access without interrupts
* \param[in, out] dev Pointer to the QSPI device instance.
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_sync_disable(struct _qspi_sync_dev *dev);
/**
* \brief Execute command in Serial Memory Mode.
*
* \param[in] dev The pointer to QSPI device instance
* \param[in] cmd The pointer to the command information
* \return Operation status.
* \retval ERR_NONE Operation done successfully.
*/
int32_t _qspi_sync_serial_run_command(struct _qspi_sync_dev *dev, const struct _qspi_command *cmd);
#ifdef __cplusplus
}
#endif
/**@}*/
#endif /* ifndef _HPL_QSPI_SYNC_H_INCLUDED */

View File

@ -0,0 +1,89 @@
/**
* \file
*
* \brief Quad SPI related functionality implementation.
*
* Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries.
*
* \asf_license_start
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip
* software and any derivatives exclusively with Microchip products.
* It is your responsibility to comply with third party license terms applicable
* to your use of third party software (including open source software) that
* may accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
*
* \asf_license_stop
*
*/
#include "hal_qspi_sync.h"
#include <utils_assert.h>
#include <utils.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* \brief Driver version
*/
#define QSPI_SYNC_DRIVER_VERSION 0x00000001u
int32_t qspi_sync_init(struct qspi_sync_descriptor *qspi, void *const hw)
{
ASSERT(qspi && hw);
return _qspi_sync_init(&qspi->dev, hw);
}
int32_t qspi_sync_deinit(struct qspi_sync_descriptor *qspi)
{
ASSERT(qspi);
return _qspi_sync_deinit(&qspi->dev);
}
int32_t qspi_sync_enable(struct qspi_sync_descriptor *qspi)
{
ASSERT(qspi);
return _qspi_sync_enable(&qspi->dev);
}
int32_t qspi_sync_disable(struct qspi_sync_descriptor *qspi)
{
ASSERT(qspi);
return _qspi_sync_disable(&qspi->dev);
}
int32_t qspi_sync_serial_run_command(struct qspi_sync_descriptor *qspi, const struct _qspi_command *cmd)
{
ASSERT(qspi && cmd);
return _qspi_sync_serial_run_command(&qspi->dev, cmd);
}
uint32_t qspi_sync_get_version(void)
{
return QSPI_SYNC_DRIVER_VERSION;
}
#ifdef __cplusplus
}
#endif

Some files were not shown because too many files have changed in this diff Show More