From e8c57c4f18a785e4f057fecc1e73be79b5beb59e Mon Sep 17 00:00:00 2001 From: Thibaut VIARD Date: Sun, 27 Jan 2013 15:52:28 +0100 Subject: [PATCH] [SAM] updating libsam and CAN files --- hardware/arduino/sam/libraries/CAN/CAN.cpp | 129 ++++++++++++ hardware/arduino/sam/libraries/CAN/CAN.h | 0 hardware/arduino/sam/system/libsam/chip.h | 3 +- .../arduino/sam/system/libsam/include/can.h | 23 ++- .../arduino/sam/system/libsam/include/rstc.h | 78 +++++++ .../arduino/sam/system/libsam/source/can.c | 14 +- .../libsam/source/{emac.c.disabled => emac.c} | 13 +- .../arduino/sam/system/libsam/source/rstc.c | 193 ++++++++++++++++++ .../arduino_due_x/libsam_sam3x8e_gcc_rel.a | Bin 108544 -> 116418 bytes .../libsam_sam3x8e_gcc_rel.a.txt | 98 ++++++--- 10 files changed, 512 insertions(+), 39 deletions(-) create mode 100644 hardware/arduino/sam/libraries/CAN/CAN.cpp create mode 100644 hardware/arduino/sam/libraries/CAN/CAN.h create mode 100644 hardware/arduino/sam/system/libsam/include/rstc.h rename hardware/arduino/sam/system/libsam/source/{emac.c.disabled => emac.c} (98%) create mode 100644 hardware/arduino/sam/system/libsam/source/rstc.c diff --git a/hardware/arduino/sam/libraries/CAN/CAN.cpp b/hardware/arduino/sam/libraries/CAN/CAN.cpp new file mode 100644 index 000000000..639189f48 --- /dev/null +++ b/hardware/arduino/sam/libraries/CAN/CAN.cpp @@ -0,0 +1,129 @@ +#include "CAN.h" +#include "sn65hvd234.h" + +/*---------------------------------------------------------------------------- + * Variables + *----------------------------------------------------------------------------*/ + +/* CAN0 Transceiver */ +SSN65HVD234_Data gCanTransceiver0 ; +/* CAN1 Transceiver */ +SSN65HVD234_Data gCanTransceiver1 ; + +/* CAN0 Transfer */ +SCanTransfer gCanTransfer0 ; +/* CAN1 Transfer */ +SCanTransfer gCanTransfer1 ; + +/*---------------------------------------------------------------------------- + * Local functions + *----------------------------------------------------------------------------*/ + +uint32_t CAN_InitShieldHardware( uint32_t ) +{ + // Initialize CAN0 pins + PIO_Configure( + g_APinDescription[PINS_CAN0].pPort, + g_APinDescription[PINS_CAN0].ulPinType, + g_APinDescription[PINS_CAN0].ulPin, + g_APinDescription[PINS_CAN0].ulPinConfiguration); + + /* Initialize CAN0 Transceiver */ + SN65HVD234_Init( &gCanTransceiver0 ) ; + SN65HVD234_SetRs( &gCanTransceiver0, PIOB, PIO_PB20 ) ; + SN65HVD234_SetEN( &gCanTransceiver0, PIOB, PIO_PB21 ) ; + /* Enable CAN0 Transceiver */ + SN65HVD234_DisableLowPower( &gCanTransceiver0 ) ; + SN65HVD234_Enable( &gCanTransceiver0 ) ; + + // Initialize CAN1 pins + PIO_Configure( + g_APinDescription[PINS_CAN1].pPort, + g_APinDescription[PINS_CAN1].ulPinType, + g_APinDescription[PINS_CAN1].ulPin, + g_APinDescription[PINS_CAN1].ulPinConfiguration); + + /* Initialize CAN1 Transceiver */ + SN65HVD234_Init( &gCanTransceiver1 ) ; + SN65HVD234_SetRs( &gCanTransceiver1, PIOE, PIO_PB15 ) ; + SN65HVD234_SetEN( &gCanTransceiver1, PIOE, PIO_PB16 ) ; + /* Enable CAN1 Transceiver */ + SN65HVD234_DisableLowPower( &gCanTransceiver1 ) ; + SN65HVD234_Enable( &gCanTransceiver1 ) ; +} + +uint32_t CAN_DeInitShieldHardware( uint32_t ) +{ +} + + +/*---------------------------------------------------------------------------- + * Exported functions + *----------------------------------------------------------------------------*/ + +/** + * \brief Default interrupt handler for CAN 0. + */ +void CAN0_IrqHandler( void ) +{ + CAN_Handler( CAN0, &gCanTransfer0 ) ; +} + +/** + * \brief Default interrupt handler for CAN 1. + */ +void CAN1_IrqHandler( void ) +{ + CAN_Handler( CAN1, &gCanTransfer1 ) ; +} + + +/** + * main function + */ +extern int main( void ) +{ + + if ( ( CAN_Init( CAN0, BOARD_MCK, 1000, &gCanTransfer0 ) == 1 ) && + ( CAN_Init( CAN1, BOARD_MCK, 1000, &gCanTransfer1 ) == 1 ) ) + { + puts( "CAN initialization complete."STRING_EOL ) ; + + /* Run tests */ + puts( "Press any key to start test"STRING_EOL ) ; + UART_GetChar() ; + _Test1() ; + + puts( "Press any key to continue..."STRING_EOL ) ; + UART_GetChar() ; + _Test2() ; + + puts( "Press any key to continue..."STRING_EOL ) ; + UART_GetChar() ; + _Test3() ; + + puts( "Press any key to continue..."STRING_EOL ) ; + UART_GetChar() ; + _Test4() ; + + /* Disable CAN0 Controller */ + CAN_Disable(CAN0) ; + /* Disable CAN0 Transceiver */ + SN65HVD234_EnableLowPower( &gCanTransceiver0 ) ; + SN65HVD234_Disable( &gCanTransceiver0 ) ; + + /* Disable CAN1 Controller */ + CAN_Disable(CAN1) ; + /* Disable CAN1 Transceiver */ + SN65HVD234_EnableLowPower( &gCanTransceiver1 ) ; + SN65HVD234_Disable( &gCanTransceiver1 ) ; + + puts( "End of all test"STRING_EOL ) ; + } + else + { + puts( "ERROR CAN initialisation (synchro)"STRING_EOL ) ; + } + + return 0 ; +} diff --git a/hardware/arduino/sam/libraries/CAN/CAN.h b/hardware/arduino/sam/libraries/CAN/CAN.h new file mode 100644 index 000000000..e69de29bb diff --git a/hardware/arduino/sam/system/libsam/chip.h b/hardware/arduino/sam/system/libsam/chip.h index 298e48530..13bc36ebf 100644 --- a/hardware/arduino/sam/system/libsam/chip.h +++ b/hardware/arduino/sam/system/libsam/chip.h @@ -52,6 +52,7 @@ #include "include/pio.h" #include "include/pmc.h" #include "include/pwmc.h" +#include "include/rstc.h" #include "include/rtc.h" #include "include/rtt.h" #include "include/spi.h" @@ -67,7 +68,7 @@ #if (SAM3XA_SERIES) #include "include/can.h" -//#include "include/emac.h" +#include "include/emac.h" #include "include/trng.h" #include "include/uotghs_device.h" #include "include/uotghs_host.h" diff --git a/hardware/arduino/sam/system/libsam/include/can.h b/hardware/arduino/sam/system/libsam/include/can.h index 6a6d06d80..5cbc6f0b6 100644 --- a/hardware/arduino/sam/system/libsam/include/can.h +++ b/hardware/arduino/sam/system/libsam/include/can.h @@ -116,33 +116,54 @@ typedef struct { */ uint32_t can_init(Can *p_can, uint32_t ul_mck, uint32_t ul_baudrate); + void can_enable(Can *p_can); void can_disable(Can *p_can); + void can_disable_low_power_mode(Can *p_can); void can_enable_low_power_mode(Can *p_can); + void can_disable_autobaud_listen_mode(Can *p_can); void can_enable_autobaud_listen_mode(Can *p_can); + void can_disable_overload_frame(Can *p_can); void can_enable_overload_frame(Can *p_can); + void can_set_timestamp_capture_point(Can *p_can, uint32_t ul_flag); + void can_disable_time_triggered_mode(Can *p_can); void can_enable_time_triggered_mode(Can *p_can); + void can_disable_timer_freeze(Can *p_can); void can_enable_timer_freeze(Can *p_can); + void can_disable_tx_repeat(Can *p_can); void can_enable_tx_repeat(Can *p_can); + void can_set_rx_sync_stage(Can *p_can, uint32_t ul_stage); + void can_enable_interrupt(Can *p_can, uint32_t dw_mask); void can_disable_interrupt(Can *p_can, uint32_t dw_mask); + uint32_t can_get_interrupt_mask(Can *p_can); + uint32_t can_get_status(Can *p_can); + uint32_t can_get_internal_timer_value(Can *p_can); + uint32_t can_get_timestamp_value(Can *p_can); + uint8_t can_get_tx_error_cnt(Can *p_can); uint8_t can_get_rx_error_cnt(Can *p_can); + void can_reset_internal_timer(Can *p_can); + void can_global_send_transfer_cmd(Can *p_can, uint8_t uc_mask); void can_global_send_abort_cmd(Can *p_can, uint8_t uc_mask); + +/* + * Mailbox functions + */ void can_mailbox_set_timemark(Can *p_can, uint8_t uc_index, uint16_t us_cnt); uint32_t can_mailbox_get_status(Can *p_can, uint8_t uc_index); void can_mailbox_send_transfer_cmd(Can *p_can, uint8_t uc_index); @@ -154,7 +175,7 @@ uint32_t can_mailbox_tx_remote_frame(Can *p_can, can_mb_conf_t *p_mailbox); void can_reset_all_mailbox(Can *p_can); // from wilfredo -void reset_mailbox_conf(can_mb_conf_t *p_mailbox); +uint32_t can_reset_mailbox_data(can_mb_conf_t *p_mailbox); /** @} */ diff --git a/hardware/arduino/sam/system/libsam/include/rstc.h b/hardware/arduino/sam/system/libsam/include/rstc.h new file mode 100644 index 000000000..6edb0701a --- /dev/null +++ b/hardware/arduino/sam/system/libsam/include/rstc.h @@ -0,0 +1,78 @@ +/** + * \file + * + * \brief Reset Controller (RSTC) driver for SAM. + * + * Copyright (c) 2011-2012 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * \asf_license_stop + * + */ + +#ifndef RSTC_H_INCLUDED +#define RSTC_H_INCLUDED + +#include "../chip.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Definitions of Reset Controller Status */ +/** Reset cause */ +#define RSTC_GENERAL_RESET (0 << RSTC_SR_RSTTYP_Pos) +#define RSTC_BACKUP_RESET (1 << RSTC_SR_RSTTYP_Pos) +#define RSTC_WATCHDOG_RESET (2 << RSTC_SR_RSTTYP_Pos) +#define RSTC_SOFTWARE_RESET (3 << RSTC_SR_RSTTYP_Pos) +#define RSTC_USER_RESET (4 << RSTC_SR_RSTTYP_Pos) +/** NRST Pin Level */ +#define RSTC_NRST_LOW (LOW << 16) +#define RSTC_NRST_HIGH (HIGH << 16) + +void rstc_set_external_reset(Rstc* p_rstc, const uint32_t ul_length); +void rstc_enable_user_reset(Rstc* p_rstc); +void rstc_disable_user_reset(Rstc* p_rstc); +void rstc_enable_user_reset_interrupt(Rstc* p_rstc); +void rstc_disable_user_reset_interrupt(Rstc* p_rstc); +void rstc_start_software_reset(Rstc* p_rstc); +void rstc_reset_extern(Rstc *p_rstc); +uint32_t rstc_get_status(Rstc* p_rstc); +uint32_t rstc_get_reset_cause(Rstc* p_rstc); + +#ifdef __cplusplus +} +#endif + +#endif /* RSTC_H_INCLUDED */ diff --git a/hardware/arduino/sam/system/libsam/source/can.c b/hardware/arduino/sam/system/libsam/source/can.c index 7553e6ed7..5fed79a17 100644 --- a/hardware/arduino/sam/system/libsam/source/can.c +++ b/hardware/arduino/sam/system/libsam/source/can.c @@ -42,6 +42,7 @@ */ #include "../chip.h" +#include /// @cond 0 /**INDENT-OFF**/ @@ -765,8 +766,14 @@ void can_reset_all_mailbox(Can *p_can) } // from wilfredo -void reset_mailbox_conf(can_mb_conf_t *p_mailbox) +uint32_t can_reset_mailbox_data(can_mb_conf_t *p_mailbox) { + if ( p_mailbox == NULL ) + { + return 1U ; + } + +#if 0 p_mailbox->ul_mb_idx = 0; p_mailbox->uc_obj_type = 0; p_mailbox->uc_id_ver = 0; @@ -778,6 +785,11 @@ void reset_mailbox_conf(can_mb_conf_t *p_mailbox) p_mailbox->ul_fid = 0; p_mailbox->ul_datal = 0; p_mailbox->ul_datah = 0; +#else + memset( p_mailbox, 0, sizeof( can_mb_conf_t ) ) ; +#endif + + return 0U ; } #endif // SAM3XA_SERIES diff --git a/hardware/arduino/sam/system/libsam/source/emac.c.disabled b/hardware/arduino/sam/system/libsam/source/emac.c similarity index 98% rename from hardware/arduino/sam/system/libsam/source/emac.c.disabled rename to hardware/arduino/sam/system/libsam/source/emac.c index dfaa36dd1..c023fc2e6 100644 --- a/hardware/arduino/sam/system/libsam/source/emac.c.disabled +++ b/hardware/arduino/sam/system/libsam/source/emac.c @@ -42,7 +42,7 @@ */ #include "../chip.h" -//#include +#include /// @cond 0 /**INDENT-OFF**/ @@ -69,6 +69,11 @@ extern "C" { * @{ */ +#define EMAC_RX_BUFFERS 16 +#define EMAC_TX_BUFFERS 8 +#define MAC_PHY_RETRY_MAX 1000000 + + /** TX descriptor lists */ #ifdef __ICCARM__ /* IAR */ #pragma data_alignment=8 @@ -283,9 +288,9 @@ static uint8_t emac_init_mem(Emac* p_emac, emac_device_t* p_emac_dev, emac_reset_tx_mem(p_emac_dev); /* Enable Rx and Tx, plus the statistics register */ - emac_enable_transmit(p_emac, true); - emac_enable_receive(p_emac, true); - emac_enable_statistics_write(p_emac, true); + emac_enable_transmit(p_emac, 1); + emac_enable_receive(p_emac, 1); + emac_enable_statistics_write(p_emac, 1); /* Set up the interrupts for transmission and errors */ emac_enable_interrupt(p_emac, diff --git a/hardware/arduino/sam/system/libsam/source/rstc.c b/hardware/arduino/sam/system/libsam/source/rstc.c new file mode 100644 index 000000000..d911c1d3a --- /dev/null +++ b/hardware/arduino/sam/system/libsam/source/rstc.c @@ -0,0 +1,193 @@ +/** + * \file + * + * \brief Reset Controller (RSTC) driver for SAM. + * + * Copyright (c) 2011-2012 Atmel Corporation. All rights reserved. + * + * \asf_license_start + * + * \page License + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of Atmel may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * 4. This software may only be redistributed and used in connection with an + * Atmel microcontroller product. + * + * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * \asf_license_stop + * + */ + +#include "rstc.h" + +/// @cond 0 +/**INDENT-OFF**/ +#ifdef __cplusplus +extern "C" { +#endif +/**INDENT-ON**/ +/// @endcond + +/** + * \defgroup sam_drivers_rstc_group Reset Controller (RSTC) + * + * Driver for the RSTC (Reset Controller). This driver provides access to the main + * features of the Reset controller. + * + * @{ + */ + +#define RSTC_KEY 0xA5000000 + +/** + * \brief Set external reset length. + * + * \param p_rstc Pointer to an RSTC instance. + * \param ul_length The length of external reset. + */ +void rstc_set_external_reset(Rstc *p_rstc, const uint32_t ul_length) +{ + uint32_t mode = p_rstc->RSTC_MR; + + mode &= ~(RSTC_MR_ERSTL_Msk | RSTC_MR_KEY_Msk); + mode |= (RSTC_MR_ERSTL(ul_length) | RSTC_KEY); + + p_rstc->RSTC_MR = mode; +} + +/** + * \brief Enable user reset. + * + * \param p_rstc Pointer to an RSTC instance. + */ +void rstc_enable_user_reset(Rstc *p_rstc) +{ + uint32_t mode = p_rstc->RSTC_MR; + + mode &= ~RSTC_MR_KEY_Msk; + mode |= (RSTC_MR_URSTEN | RSTC_KEY); + + p_rstc->RSTC_MR = mode; +} + +/** + * \brief Disable user reset. + * + * \param p_rstc Pointer to an RSTC instance. + */ +void rstc_disable_user_reset(Rstc *p_rstc) +{ + uint32_t mode = p_rstc->RSTC_MR; + + mode &= ~(RSTC_MR_URSTEN | RSTC_MR_KEY_Msk); + mode |= RSTC_KEY; + + p_rstc->RSTC_MR = mode; +} + +/** + * \brief Enable user reset interrupt. + * + * \param p_rstc Pointer to an RSTC instance. + */ +void rstc_enable_user_reset_interrupt(Rstc *p_rstc) +{ + uint32_t mode = p_rstc->RSTC_MR; + + mode &= ~RSTC_MR_KEY_Msk; + mode |= (RSTC_MR_URSTIEN | RSTC_KEY); + + p_rstc->RSTC_MR = mode; +} + +/** + * \brief Disable user reset interrupt. + * + * \param p_rstc Pointer to an RSTC instance. + */ +void rstc_disable_user_reset_interrupt(Rstc *p_rstc) +{ + uint32_t mode = p_rstc->RSTC_MR; + + mode &= ~(RSTC_MR_URSTIEN | RSTC_MR_KEY_Msk); + mode |= RSTC_KEY; + + p_rstc->RSTC_MR = mode; +} + +/** + * \brief Perform software reset. + * + * \param p_rstc Pointer to an RSTC instance. + */ +void rstc_start_software_reset(Rstc *p_rstc) +{ + p_rstc->RSTC_CR = RSTC_KEY | RSTC_CR_PROCRST | RSTC_CR_PERRST; +} + +/** + * \brief Asserts the NRST pin for external resets. + * + * \param p_rstc Pointer to an RSTC instance. + */ +void rstc_reset_extern(Rstc *p_rstc) +{ + p_rstc->RSTC_CR = RSTC_KEY | RSTC_CR_EXTRST; +} + +/** + * \brief Get RSTC status. + * + * \param p_rstc Pointer to an RSTC instance. + * + * \return RSTC status. + */ +uint32_t rstc_get_status(Rstc *p_rstc) +{ + return p_rstc->RSTC_SR; +} + +/** + * \brief Get reset cause. + * + * \param p_rstc Pointer to an RSTC instance. + * + * \return The last reset cause. + */ +uint32_t rstc_get_reset_cause(Rstc *p_rstc) +{ + return (p_rstc->RSTC_SR & RSTC_SR_RSTTYP_Msk); +} + +//@} + +/// @cond 0 +/**INDENT-OFF**/ +#ifdef __cplusplus +} +#endif +/**INDENT-ON**/ +/// @endcond diff --git a/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a b/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a index 62572a465df8998f0b7318bbf06ee16b2c7e1046..3f65f836a5b0b77139b07f53f140541eac756a75 100644 GIT binary patch delta 22920 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 diff --git a/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a.txt b/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a.txt index d2adba75d..303eb3e5f 100644 --- a/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a.txt +++ b/hardware/arduino/sam/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a.txt @@ -99,14 +99,14 @@ pwmc.o: 00000000 T PWMC_SetSyncChannelUpdateUnlock 00000000 T PWMC_WriteBuffer U __assert_func -00000000 r __func__.6271 -00000000 r __func__.6282 -00000000 r __func__.6297 -00000000 r __func__.6308 -00000000 r __func__.6319 -00000000 r __func__.6326 -00000000 r __func__.6410 -00000000 r __func__.6416 +00000000 r __func__.6766 +00000000 r __func__.6777 +00000000 r __func__.6792 +00000000 r __func__.6803 +00000000 r __func__.6814 +00000000 r __func__.6821 +00000000 r __func__.6905 +00000000 r __func__.6911 rtc.o: 00000000 T RTC_ClearSCCR @@ -122,9 +122,9 @@ rtc.o: 00000000 T RTC_SetTime 00000000 T RTC_SetTimeAlarm U __assert_func -00000000 r __func__.6268 -00000000 r __func__.6277 -00000000 r __func__.6282 +00000000 r __func__.6763 +00000000 r __func__.6772 +00000000 r __func__.6777 rtt.o: 00000000 T RTT_EnableIT @@ -133,8 +133,8 @@ rtt.o: 00000000 T RTT_SetAlarm 00000000 T RTT_SetPrescaler U __assert_func -00000000 r __func__.6275 -00000000 r __func__.6283 +00000000 r __func__.6770 +00000000 r __func__.6778 spi.o: 00000000 T SPI_Configure @@ -160,9 +160,9 @@ tc.o: 00000000 T TC_Start 00000000 T TC_Stop U __assert_func -00000000 r __func__.6270 -00000000 r __func__.6276 -00000000 r __func__.6282 +00000000 r __func__.6765 +00000000 r __func__.6771 +00000000 r __func__.6777 timetick.o: 00000000 T GetTickCount @@ -189,18 +189,18 @@ twi.o: 00000000 T TWI_TransferComplete 00000000 T TWI_WriteByte U __assert_func -00000000 r __func__.6635 -00000000 r __func__.6650 -00000000 r __func__.6654 -00000000 r __func__.6661 -00000000 r __func__.6665 -00000000 r __func__.6670 -00000000 r __func__.6678 -00000000 r __func__.6692 -00000000 r __func__.6697 -00000000 r __func__.6701 -00000000 r __func__.6706 -00000000 r __func__.6710 +00000000 r __func__.7130 +00000000 r __func__.7145 +00000000 r __func__.7149 +00000000 r __func__.7156 +00000000 r __func__.7160 +00000000 r __func__.7165 +00000000 r __func__.7173 +00000000 r __func__.7187 +00000000 r __func__.7192 +00000000 r __func__.7196 +00000000 r __func__.7201 +00000000 r __func__.7205 usart.o: 00000000 T USART_Configure @@ -219,7 +219,7 @@ usart.o: 00000000 T USART_Write 00000000 T USART_WriteBuffer U __assert_func -00000000 r __func__.6556 +00000000 r __func__.7051 wdt.o: 00000000 T WDT_Disable @@ -467,8 +467,10 @@ can.o: 00000000 T can_mailbox_write 00000000 T can_reset_all_mailbox 00000000 T can_reset_internal_timer +00000000 T can_reset_mailbox_data 00000000 T can_set_rx_sync_stage 00000000 T can_set_timestamp_capture_point + U memset efc.o: 00000000 T efc_disable_frdy_interrupt @@ -479,12 +481,12 @@ efc.o: 00000000 T efc_get_wait_state 00000000 T efc_init 00000000 T efc_perform_command -0000006c T efc_perform_fcr +00000068 T efc_perform_fcr 00000000 T efc_perform_read_sequence 00000000 T efc_set_flash_access_mode 00000000 T efc_set_wait_state -00000068 T efc_write_fmr -00000000 b iap_perform_command.6537 +00000064 T efc_write_fmr +00000000 b iap_perform_command.7032 gpbr.o: 00000000 T gpbr_read @@ -536,3 +538,35 @@ trng.o: 00000000 T trng_get_interrupt_mask 00000000 T trng_get_interrupt_status 00000000 T trng_read_output_data + +rstc.o: +00000000 T rstc_disable_user_reset +00000000 T rstc_disable_user_reset_interrupt +00000000 T rstc_enable_user_reset +00000000 T rstc_enable_user_reset_interrupt +00000000 T rstc_get_reset_cause +00000000 T rstc_get_status +00000000 T rstc_reset_extern +00000000 T rstc_set_external_reset +00000000 T rstc_start_software_reset + +emac.o: +00000000 t circ_inc +00000000 T emac_dev_get_tx_load +00000000 T emac_dev_init +00000000 T emac_dev_read +00000000 T emac_dev_reset +00000000 T emac_dev_set_rx_callback +00000000 T emac_dev_set_tx_wakeup_callback +00000000 T emac_dev_write +00000000 T emac_handler +00000000 T emac_phy_read +00000000 T emac_phy_write +00000000 t emac_reset_rx_mem +00000000 t emac_reset_tx_mem +00000000 b gs_rx_desc +00000000 b gs_tx_callback +00000000 b gs_tx_desc +00000000 b gs_uc_rx_buffer +00000000 b gs_uc_tx_buffer + U memcpy