APPLICATION NOTE AT07337: SAM4 Real-Time Clock (RTC) ASF PROGRAMMERS MANUAL SAM4 Real-Time Clock (RTC) This driver for SAM4C/SAM4E/SAMG/SAM4N/SAM4S devices provides an interface for the configuration and management of the device's Real-Time Clock functionality and for the configuration and retrieval of the current time and date as maintained by the RTC module. The RTC provides a full Binary-Coded Decimal (BCD) clock that includes century (19/20), year (with leap years), month, day, hour, minute , and second for Gregorian or Persian calendars. The time format can be in 24-hour or 12-hour mode with an AM/PM indicator. The following peripherals are used by this module: ● RTC (Real-Time Clock) The outline of this documentation is as follows: ● Prerequisites ● Module Overview ● Special Considerations ● Extra Information ● Examples ● API Overview 42284A-MCU-05/2014 Table of Contents SAM4 Real-Time Clock (RTC) ........................................................... 1 Software License ................................................................................ 4 1. Prerequisites ................................................................................. 5 2. Module Overview .......................................................................... 6 2.1. 2.2. 2.3. 2.4. 2.5. Time/Date Field Validation ............................................................ Timing ...................................................................................... Alarm ........................................................................................ Reference Clock ......................................................................... Accurate Clock Calibration ............................................................ 6 6 6 6 6 3. Special Considerations ................................................................. 7 3.1. 3.2. 3.3. 3.4. Crystal Selection ......................................................................... Waveform Generation .................................................................. Year Limit .................................................................................. The Year 1900 ........................................................................... 7 7 7 7 4. Extra Information .......................................................................... 8 5. Examples ...................................................................................... 9 6. API Overview .............................................................................. 10 6.1. Function Definitions ................................................................... 10 6.1.1. Function rtc_clear_date_alarm() ...................................... 10 6.1.2. Function rtc_clear_status() ............................................. 10 6.1.3. Function rtc_clear_time_alarm() ...................................... 10 6.1.4. Function rtc_disable_interrupt() ....................................... 10 6.1.5. Function rtc_enable_interrupt() ....................................... 11 6.1.6. Function rtc_get_date() ................................................. 11 6.1.7. Function rtc_get_hour_mode() ........................................ 11 6.1.8. Function rtc_get_interrupt_mask() ................................... 12 6.1.9. Function rtc_get_status() ............................................... 12 6.1.10. Function rtc_get_tamper_date() ...................................... 12 6.1.11. Function rtc_get_tamper_event_counter() ......................... 13 6.1.12. Function rtc_get_tamper_source() ................................... 13 6.1.13. Function rtc_get_tamper_time() ....................................... 14 6.1.14. Function rtc_get_time() ................................................. 15 6.1.15. Function rtc_is_tamper_occur_in_backup_mode() ............... 15 6.1.16. Function rtc_set_calendar_mode() ................................... 16 6.1.17. Function rtc_set_calibration() .......................................... 16 6.1.18. Function rtc_set_date() ................................................. 16 6.1.19. Function rtc_set_date_alarm() ........................................ 17 6.1.20. Function rtc_set_hour_mode() ........................................ 17 6.1.21. Function rtc_set_pulse_parameter() ................................. 18 6.1.22. Function rtc_set_time() .................................................. 18 6.1.23. Function rtc_set_time_alarm() ......................................... 19 6.1.24. Function rtc_set_waveform() .......................................... 19 6.1.25. Function rtc_set_writeprotect() ........................................ 20 7. Extra Information for Real-Time Clock Driver ............................. 21 7.1. 7.2. 7.3. 7.4. Acronyms ................................................................................ Dependencies ........................................................................... Errata ...................................................................................... Module History ......................................................................... 21 21 21 21 8. Examples for Real-Time Clock Driver ........................................ 22 AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 2 8.1. 8.2. 8.3. Quick Start guide for SAM RTC driver ........................................... 8.1.1. Basic Use Case ............................................................ 8.1.2. Setup Steps ................................................................. 8.1.3. Usage Steps ................................................................ Real-Time Clock (RTC) Example .................................................. 8.2.1. Purpose ...................................................................... 8.2.2. Requirements ............................................................... 8.2.3. Description ................................................................... 8.2.4. Main Files .................................................................... 8.2.5. Compilation Information .................................................. 8.2.6. Usage ......................................................................... Real-Time Clock (RTC) Tamper Example ...................................... 8.3.1. Purpose ...................................................................... 8.3.2. Requirements ............................................................... 8.3.3. Description ................................................................... 8.3.4. Main Files .................................................................... 8.3.5. Compilation Information .................................................. 8.3.6. Usage ......................................................................... 22 22 22 23 23 23 23 23 24 24 24 25 25 25 25 25 25 25 Index ................................................................................................. 27 Document Revision History .............................................................. 28 AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 3 Software 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. AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 4 1. Prerequisites There are no prerequisites for this module. AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 5 2. Module Overview The RTC provides a full binary-coded decimal (BCD) clock that includes century (19/20), year (with leap years), month, day, hours, minutes, and seconds. The RTC can operate in 24-hour mode or in 12-hour mode with an AM/ PM indicator. Automatic corrections for leap years are included (all years divisible by four being leap years). 2.1 Time/Date Field Validation To avoid unwanted side effects, verification is performed on user application writes to the century, year, month, day, hours, minutes, seconds, and alarms. If any field fails its check the new data is not loaded into the destination register/counter and a flag is set in the validity register. When the user application programs acceptable time/date fields the validity flag is cleared. Note 2.2 Refer to "Error Checking when Programming" located in the RTC section of the device's datasheet for more information on each field's validation criteria. Timing The RTC is updated in real time at one-second intervals in normal mode for the counters of seconds, at one-minute intervals for the counter of minutes and so on. Due to the asynchronous operation of the RTC with respect to the rest of the chip, to be certain that the value read in the RTC registers (century, year, month, date, day, hours, minutes, seconds) are valid and stable, it is necessary to read these registers twice and perform a comparison. 2.3 Alarm The RTC Alarm has five programmable fields: month, day, hours, minutes, and seconds. Each of these fields can be enabled or disabled individually to match the alarm condition: Depending on the combination of fields enabled, a large number of possibilities are available to the user application ranging from minutes to 365/366 days. 2.4 Reference Clock The reference clock is Slow Clock (SLCK). It can be driven internally or by an external 32.768kHz crystal and also runs during the low power modes of the processor. 2.5 Accurate Clock Calibration The crystal oscillator that drives the RTC may not be as accurate as expected mainly due to temperature variation. The RTC module is equipped with circuitry able to correct slow clock crystal drift. AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 6 3. Special Considerations 3.1 Crystal Selection The external crystal selection used by the RTC module in the final system design must take into account: 3.2 ● Current consumption to achieve the best power savings in low power operating modes ● Frequency drift (due to temperature effects on the circuit) for the best time accuracy Waveform Generation Waveforms can be generated on the RTC module's RTCOUT0 and RTCOUT1 outputs. The low power operating modes of the device do not affect their operation which allows them to be used as periodic or alarm based stimulus to external devices, peripherals or subsystems. 3.3 Year Limit The RTC module has a year range between 1900 and 2099 in Gregorian mode (1300 to 1499 in Persian mode). Dates outside the calendar mode's specified range will need software adjustment. 3.4 The Year 1900 th If the user application attempts to configure the RTC to the 29 of February 1900 the date will fail the RTC module's field validation checks. AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 7 4. Extra Information For extra information, see Extra Information for Real-Time Clock Driver. This includes: ● Acronyms ● Dependencies ● Errata ● Module History AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 8 5. Examples For a list of examples related to this driver, see Examples for Real-Time Clock Driver. AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 9 6. API Overview 6.1 Function Definitions 6.1.1 Function rtc_clear_date_alarm() Clear the RTC date alarm setting. void rtc_clear_date_alarm( Rtc * p_rtc) Table 6-1. Parameters 6.1.2 Data direction Parameter name Description [out] p_rtc Module hardware register base address pointer Data direction Parameter name Description [out] p_rtc Module hardware register base address pointer [in] ul_clear Some flag bits which will be cleared Data direction Parameter name Description [out] p_rtc Module hardware register base address pointer Function rtc_clear_status() Set the RTC SCCR to clear status bits. void rtc_clear_status( Rtc * p_rtc, uint32_t ul_clear) Table 6-2. Parameters 6.1.3 Function rtc_clear_time_alarm() Clear the RTC time alarm setting. void rtc_clear_time_alarm( Rtc * p_rtc) Table 6-3. Parameters 6.1.4 Function rtc_disable_interrupt() Disable RTC interrupts. void rtc_disable_interrupt( Rtc * p_rtc, AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 10 uint32_t ul_sources) Table 6-4. Parameters 6.1.5 Data direction Parameter name Description [out] p_rtc Module hardware register base address pointer [in] ul_sources Bitmask of interrupts to be disabled Data direction Parameter name Description [out] p_rtc Module hardware register base address pointer [in] ul_sources Bitmask of interrupts to be enabled Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer [out] pul_year Current year [out] pul_month Current month [out] pul_day Current day [out] pul_week Current day in current week Function rtc_enable_interrupt() Enable the RTC interrupts. void rtc_enable_interrupt( Rtc * p_rtc, uint32_t ul_sources) Table 6-5. Parameters 6.1.6 Function rtc_get_date() Get the RTC date value. void rtc_get_date( Rtc * p_rtc, uint32_t * pul_year, uint32_t * pul_month, uint32_t * pul_day, uint32_t * pul_week) Table 6-6. Parameters 6.1.7 Function rtc_get_hour_mode() Get the RTC hour mode. uint32_t rtc_get_hour_mode( AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 11 Rtc * p_rtc) Table 6-7. Parameters Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer Returns Current RTC hour mode setting. Table 6-8. Return Values 6.1.8 Return value Description 0 RTC is in 24-hour mode 1 RTC is in 12-hour mode Function rtc_get_interrupt_mask() Read RTC interrupt mask. uint32_t rtc_get_interrupt_mask( Rtc * p_rtc) Table 6-9. Parameters Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer Returns 6.1.9 The RTC interrupt mask value. Function rtc_get_status() Get the RTC status. uint32_t rtc_get_status( Rtc * p_rtc) Table 6-10. Parameters Returns 6.1.10 Status of the RTC. Function rtc_get_tamper_date() AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 12 Get the RTC tamper date. void rtc_get_tamper_date( Rtc * p_rtc, uint32_t * pul_year, uint32_t * pul_month, uint32_t * pul_day, uint32_t * pul_week, uint8_t reg_num) Note This function should be called before rtc_get_tamper_source() function call. Otherwise, the tamper date will be cleared. This function is only available on SAM4C devices. Table 6-11. Parameters 6.1.11 Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer [out] pul_year Current year [out] pul_month Current month [out] pul_day Current day [out] pul_week Current day in current week [in] reg_num Current tamper register set number Function rtc_get_tamper_event_counter() Get the RTC tamper event counter. uint32_t rtc_get_tamper_event_counter( Rtc * p_rtc) Note This function should be called before rtc_get_tamper_source() function call. Otherwise, the tamper event counter will be cleared. This function is only available on SAM4C devices. Table 6-12. Parameters Returns 6.1.12 Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer The RTC Tamper event counter. Function rtc_get_tamper_source() AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 13 Get the RTC tamper source. uint32_t rtc_get_tamper_source( Rtc * p_rtc, uint8_t reg_num) Note This function is only available on SAM4C devices. Table 6-13. Parameters Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer [in] reg_num Current tamper register set number Returns The RTC Tamper source. Table 6-14. Return Values 6.1.13 Return value Description 0 Tamper occurred on tamper pin TMP0 1 Tamper occurred on tamper pin TMP1 2 Tamper occurred on tamper pin TMP2 3 Tamper occurred on tamper pin TMP3 Function rtc_get_tamper_time() Get the RTC tamper time value. void rtc_get_tamper_time( Rtc * p_rtc, uint32_t * pul_hour, uint32_t * pul_minute, uint32_t * pul_second, uint8_t reg_num) Note This function should be called before rtc_get_tamper_source() function call. Otherwise, the tamper time will be cleared. This function is only available on SAM4C devices. Table 6-15. Parameters Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer [out] pul_hour Current hour, 24-hour mode [out] pul_minute Current minute AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 14 6.1.14 Data direction Parameter name Description [out] pul_second Current second [in] reg_num Current tamper register set number Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [out] pul_hour Current hour, 24-hour mode [out] pul_minute Current minute [out] pul_second Current second Function rtc_get_time() Get the RTC time value. void rtc_get_time( Rtc * p_rtc, uint32_t * pul_hour, uint32_t * pul_minute, uint32_t * pul_second) Table 6-16. Parameters 6.1.15 Function rtc_is_tamper_occur_in_backup_mode() Check the system is in backup mode when RTC tamper event happen. bool rtc_is_tamper_occur_in_backup_mode( Rtc * p_rtc, uint8_t reg_num) Note This function should be called before the function rtc_get_tamper_source() is called. Otherwise, the flag that indicates a tamper occurred in backup mode will be cleared. This function is only available on SAM4C devices. Table 6-17. Parameters Data direction Parameter name Description [in] p_rtc Module hardware register base address pointer [in] reg_num Current tamper register set number Returns RTC Tamper occurred in backup mode. Table 6-18. Return Values Return value Description false The system is different from backup mode AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 15 6.1.16 Return value Description true The system is in backup mode when the tamper event occurs Function rtc_set_calendar_mode() Set the RTC calendar mode. void rtc_set_calendar_mode( Rtc * p_rtc, uint32_t ul_mode) Table 6-19. Parameters 6.1.17 Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_mode 1 for Persian mode, 0 for Gregorian mode Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_direction_ppm Positive/negative correction [in] ul_correction Correction value [in] ul_range_ppm Low/high range correction Function rtc_set_calibration() Set the RTC calibration. void rtc_set_calibration( Rtc * p_rtc, uint32_t ul_direction_ppm, uint32_t ul_correction, uint32_t ul_range_ppm) Table 6-20. Parameters 6.1.18 Function rtc_set_date() Set the RTC date. uint32_t rtc_set_date( Rtc * p_rtc, uint32_t ul_year, uint32_t ul_month, uint32_t ul_day, uint32_t ul_week) AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 16 Table 6-21. Parameters Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_year Current year [in] ul_month Current month [in] ul_day Current day [in] ul_week Current day in current week Returns RTC date field validation result. Table 6-22. Return Values 6.1.19 Return value Description 0 RTC date configured correctly RTC_VER_NVCAL An RTC date field was not configured correctly Function rtc_set_date_alarm() Set the RTC alarm date value. uint32_t rtc_set_date_alarm( Rtc * p_rtc, uint32_t ul_month_flag, uint32_t ul_month, uint32_t ul_day_flag, uint32_t ul_day) Table 6-23. Parameters Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_month_flag 1 for setting, 0 for not setting [in] ul_month Alarm month value [in] ul_day_flag 1 for setting, 0 for not setting [in] ul_day Alarm day value Returns Alarm field validation result. Table 6-24. Return Values 6.1.20 Return value Description 0 Alarm date configured correctly RTC_VER_NVCALALR An alarm date field was not configured correctly Function rtc_set_hour_mode() AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 17 Set the RTC hour mode. void rtc_set_hour_mode( Rtc * p_rtc, uint32_t ul_mode) Table 6-25. Parameters 6.1.21 Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_mode 1 for 12-hour mode, 0 for 24-hour mode Function rtc_set_pulse_parameter() Set the pulse output waveform parameters. void rtc_set_pulse_parameter( Rtc * p_rtc, uint32_t ul_time_high, uint32_t ul_period) Note This function is only available on SAM3S8, SAM3SD8, SAM4S, and SAM4C devices. Table 6-26. Parameters 6.1.22 Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_time_high High duration of the output pulse [in] ul_period Period of the output pulse Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_hour Current hour, 24-hour mode [in] ul_minute Current minute Function rtc_set_time() Set the RTC time value. uint32_t rtc_set_time( Rtc * p_rtc, uint32_t ul_hour, uint32_t ul_minute, uint32_t ul_second) Table 6-27. Parameters AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 18 Data direction Parameter name Description [in] ul_second Current second Returns RTC time field validation result. Table 6-28. Return Values 6.1.23 Return value Description 0 RTC time configured correctly RTC_VER_NVTIM An Alarm time field was not configured correctly Function rtc_set_time_alarm() Set the RTC alarm time value. uint32_t rtc_set_time_alarm( Rtc * p_rtc, uint32_t ul_hour_flag, uint32_t ul_hour, uint32_t ul_minute_flag, uint32_t ul_minute, uint32_t ul_second_flag, uint32_t ul_second) Table 6-29. Parameters Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_hour_flag 1 for hour field update, 0 otherwise [in] ul_hour Alarm hour value, 24-hour mode [in] ul_minute_flag 1 for minute field update, 0 otherwise [in] ul_minute Alarm minute value [in] ul_second_flag 1 for second field update, 0 otherwise [in] ul_second Alarm second value Returns RTC Alarm field validation result. Table 6-30. Return Values 6.1.24 Return value Description 0 Alarm time configured correctly RTC_VER_NVTIMALR An Alarm time field was not configured correctly Function rtc_set_waveform() AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 19 Set the RTC output waveform. void rtc_set_waveform( Rtc * p_rtc, uint32_t ul_channel, uint32_t ul_value) Note This function is only available on SAM3S8, SAM3SD8, SAM4S, SAM4C, and SAMG devices. Table 6-31. Parameters 6.1.25 Data direction Parameter name Description [in, out] p_rtc Module hardware register base address pointer [in] ul_channel Output channel selection [in] ul_value Output source selection value Function rtc_set_writeprotect() Enable or disable write protection of RTC registers. void rtc_set_writeprotect( Rtc * p_rtc, uint32_t ul_enable) Note This function is only available on SAM3N, SAM3U, and SAM3XA devices. Table 6-32. Parameters Data direction Parameter name Description [out] p_rtc Module hardware register base address pointer [in] ul_enable 1 to enable, 0 to disable AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 20 7. Extra Information for Real-Time Clock Driver 7.1 Acronyms Below is a table listing the acronyms used in this module, along with their intended meanings. 7.2 Acronym Definition BCD Binary-Coded Decimal QSG Quick Start Guide Dependencies This driver has the following dependencies: ● 7.3 None Errata There are no errata related to this driver. 7.4 Module History An overview of the module history is presented in the table below, with details on the enhancements and fixes made to the module since its first release. The current version of this corresponds to the newest version in the table. Changelog Initial document release AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 21 8. Examples for Real-Time Clock Driver This is a list of the available Quick Start guides (QSGs) and example applications for SAM4 Real-Time Clock (RTC). QSGs are simple examples with step-by-step instructions to configure and use this driver in a selection of use cases. Note that QSGs can be compiled as a standalone application or be added to the user application. 8.1 ● Quick Start guide for SAM RTC driver ● Real-Time Clock (RTC) Example ● Real-Time Clock (RTC) Tamper Example Quick Start guide for SAM RTC driver This is the quick start guide for the SAM Real-Time Clock (RTC) driver, with step-by-step instructions on how to configure and use the driver in a selection of use cases. The use cases contain several code fragments. The code fragments in the steps for setup can be copied into a custom initialization function, while the steps for usage can be copied into, e.g., the main application function. 8.1.1 Basic Use Case In this basic use case, the RTC module is using 32kHz external crystal and configured for 24-hour mode. It will read the current date and time. 8.1.1.1 Prerequisites ● System Clock Management (Sysclock) 8.1.2 Setup Steps 8.1.2.1 Example Code Add this to the application C-file: * * * * * * * * 8.1.2.2 void rtc_setup(void) { pmc_switch_sclk_to_32kxtal(PMC_OSC_XTAL); while (!pmc_osc_is_ready_32kxtal()); rtc_set_hour_mode(RTC, 0); } Workflow Note Ensure that the external 32kHz crystal is available. 1. Enable the External 32kHz crystal: pmc_switch_sclk_to_32kxtal(PMC_OSC_XTAL); 2. Wait for the 32kHz crystal to be ready: while (!pmc_osc_is_ready_32kxtal()); 3. Set default RTC configuration, 24-hour mode: AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 22 rtc_set_hour_mode(RTC, 0); 8.1.3 Usage Steps 8.1.3.1 Example Code Add to, e.g., main loop in application C-file: * * * * * 8.1.3.2 uint32_t hour, minute, second; uint32_t year, month, day, week; rtc_get_time(RTC, &hour, &minute, &second); rtc_get_date(RTC, &year, &month, &day, &week); Workflow 1. Define the variables for the date and time: uint32_t hour, minute, second; uint32_t year, month, day, week; 2. Read current time: rtc_get_time(RTC, &hour, &minute, &second); 3. Read current date: rtc_get_date(RTC, &year, &month, &day, &week); 8.2 Real-Time Clock (RTC) Example 8.2.1 Purpose This basic example shows how to use the Real-Time Clock (RTC) peripheral available on SAM devices. The RTC enables easy time and date management and allows the user to monitor events like configurable alarm, second change, calendar change, and so on. 8.2.2 Requirements This example can be used with SAM4 evaluation kits such as the SAM4S Xplained, the SAM4N Xplained Pro, and other evaluation kits. Refer to the list of kits available for the actual device on http://www.atmel.com. 8.2.3 Description Upon startup, the program displays the currently set time and date and a menu to perform the following: * * * * * * * Menu: t d i m c w - Set time Set date Set time alarm Set date alarm Clear the alarm notification (only if it has been triggered) Generate Waveform AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 23 "w" is an additional option for SAM3S8, SAM3SD8, SAM4S, and SAM4C devices. An RTC output can be programmed to generate several waveforms, including a prescaled clock derived from the Slow Clock (SCLK). Setting the time, date, and time alarm is done by using Menu option, and the display is updated accordingly. The time alarm is triggered only when the second, minute, and hour match the preset values; the date alarm is triggered only when the month and date match the preset values. Generating waveform is done by using Menu option "w" and a menu to perform the following: * * * * * * * * * * Menu: 0 - No Waveform 1 - 1 Hz square wave 2 - 32 Hz square wave 3 - 64 Hz square wave 4 - 512 Hz square wave 5 - Toggles when alarm flag rise 6 - Copy of the alarm flag 7 - Duty cycle programmable pulse 8 - Quit Note The example is using RC oscillator by default. This would generate an accuracy problem for the RTC if not calibrated. It is recommended to use an external 32kHz crystal to get high accuracy. How to initialize RTC with external 32kHz crystal can be found at Quick Start guide for SAM RTC driver. On the sam4c_ek evaluation board, use SWD instead of JTAG for debugging the application because RTCOUT shares a pin with the JTAG interface. Otherwise there will be a debug issue when the waveform output is enabled. 8.2.4 8.2.5 Main Files ● rtc.c: Real-Time Clock driver ● rtc.h: Real-Time Clock driver header file ● rtc_example.c: Real-Time Clock example application Compilation Information ® ® This software is written for GNU GCC and IAR Embedded Workbench for Atmel . Other compilers may or may not work. 8.2.6 Usage 1. Build the program and download it into the evaluation board. 2. On the computer, open, and configure a terminal application (e.g., HyperTerminal on Microsoft Windows ) with these settings: 3. ® ● 115200 baud ● 8 bits of data ● No parity ● 1 stop bit ● No flow control ® Start the application. AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 24 4. In the terminal window, the following text should appear: * * * * * * * * * 5. -- RTC Example xxx --- xxxxxx-xx -- Compiled: xxx xx xxxx xx:xx:xx -Menu: t - Set d - Set i - Set m - Set time date time alarm date alarm Press one of the keys listed in the menu to perform the corresponding action. 8.3 Real-Time Clock (RTC) Tamper Example 8.3.1 Purpose This basic example shows how to use the Real-Time Clock (RTC) tamper function in SAM. 8.3.2 Requirements This example can be used with SAM4C evaluation kits. 8.3.3 Description Upon startup, the system sets the tamper pin TMP0 and TMP2 as wake-up sources. After any key press the system will enter Backup Low Power Mode. By pressing the BP3(TMP0) or BP6(TMP2) button, the system will wake-up and clear the GPBR0~7 register automatically and display the tamper event occurrence time/date. Note 8.3.4 8.3.5 This example uses the RTCOUT pin which is a common I/O with TDO on the device's JTAG interface. To debug the application normally select the SWD interface. Main Files ● rtc.c: Real-Time Clock driver ● rtc.h: Real-Time Clock driver header file ● rtc_tamper_example.c: Real-Time Clock tamper example application Compilation Information This software is written for GNU GCC and IAR Embedded Workbench for Atmel. Other compilers may or may not work. 8.3.6 Usage 1. Build the program and download it into the evaluation board. 2. On the computer, open, and configure a terminal application (e.g., HyperTerminal on Microsoft Windows) with these settings: ● 115200 baud ● 8 bits of data ● No parity ● 1 stop bit AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 25 ● No flow control 3. Start the application. 4. In the terminal window, the following text should appear: * * * -- RTC Tamper Example xxx --- xxxxxx-xx -- Compiled: xxx xx xxxx xx:xx:xx -- AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 26 Index F Function Definitions rtc_clear_date_alarm, 10 rtc_clear_status, 10 rtc_clear_time_alarm, 10 rtc_disable_interrupt, 10 rtc_enable_interrupt, 11 rtc_get_date, 11 rtc_get_hour_mode, 11 rtc_get_interrupt_mask, 12 rtc_get_status, 12 rtc_get_tamper_date, 12 rtc_get_tamper_event_counter, 13 rtc_get_tamper_source, 13 rtc_get_tamper_time, 14 rtc_get_time, 15 rtc_is_tamper_occur_in_backup_mode, 15 rtc_set_calendar_mode, 16 rtc_set_calibration, 16 rtc_set_date, 16 rtc_set_date_alarm, 17 rtc_set_hour_mode, 17 rtc_set_pulse_parameter, 18 rtc_set_time, 18 rtc_set_time_alarm, 19 rtc_set_waveform, 19 rtc_set_writeprotect, 20 AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 27 Document Revision History Doc. Rev. Date Comments 42284A 05/2014 Initial document release AT07337: SAM4 Real-Time Clock (RTC) [APPLICATION NOTE] 42284A-MCU-05/2014 28 Atmel Corporation 1600 Technology Drive, San Jose, CA 95110 USA T: (+1)(408) 441.0311 F: (+1)(408) 436.4200 | www.atmel.com © 2014 Atmel Corporation. All rights reserved. / Rev.: 42284A-MCU-05/2014 ® ® Atmel , Atmel logo and combinations thereof, Enabling Unlimited Possibilities , and others are registered trademarks or trademarks of Atmel Corporation or its ® subsidiaries. Windows is a registered trademark of Microsoft Corporation in U.S. and or other countries. Other terms and product names may be trademarks of others. Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.