mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-02 01:26:36 +08:00
bsp/atsam: Add RTC driver
This commit is contained in:
committed by
Sebastian Huber
parent
0057e38f9d
commit
137bd3747e
@@ -428,10 +428,14 @@ if HAS_NETWORKING
|
||||
libbsp_a_SOURCES += network/if_atsam.c
|
||||
endif
|
||||
|
||||
# i2c
|
||||
# I2C
|
||||
libbsp_a_SOURCES += i2c/atsam_i2c_bus.c
|
||||
libbsp_a_SOURCES += i2c/atsam_i2c_init.c
|
||||
|
||||
# RTC
|
||||
libbsp_a_SOURCES += ../../shared/tod.c
|
||||
libbsp_a_SOURCES += rtc/rtc-config.c
|
||||
|
||||
# Includes
|
||||
libbsp_a_CPPFLAGS += -I$(srcdir)/../shared/CMSIS/Include
|
||||
libbsp_a_CPPFLAGS += -I$(srcdir)/libraries/libboard
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2016 embedded brains GmbH
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <info@embedded-brains.de>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#include <libchip/chip.h>
|
||||
#include <libchip/rtc.h>
|
||||
|
||||
#include <bsp.h>
|
||||
|
||||
#define ARBITRARY_DAY_OF_WEEK 1
|
||||
|
||||
static void atsam_rtc_initialize(int minor)
|
||||
{
|
||||
Rtc *rtc = RTC;
|
||||
|
||||
RTC_DisableIt(rtc, 0x1F);
|
||||
}
|
||||
|
||||
static int atsam_rtc_get_time(int minor, rtems_time_of_day *tod)
|
||||
{
|
||||
Rtc *rtc = RTC;
|
||||
uint8_t hour;
|
||||
uint8_t minute;
|
||||
uint8_t second;
|
||||
uint16_t year;
|
||||
uint8_t month;
|
||||
uint8_t day;
|
||||
uint8_t week;
|
||||
|
||||
RTC_GetDate(rtc, &year, &month, &day, &week);
|
||||
RTC_GetTime(rtc, &hour, &minute, &second);
|
||||
|
||||
tod->ticks = 0;
|
||||
tod->second = second;
|
||||
tod->minute = minute;
|
||||
tod->hour = hour;
|
||||
tod->day = day;
|
||||
tod->month = month;
|
||||
tod->year = year;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atsam_rtc_set_time(int minor, const rtems_time_of_day *tod)
|
||||
{
|
||||
Rtc *rtc = RTC;
|
||||
uint8_t hour;
|
||||
uint8_t minute;
|
||||
uint8_t second;
|
||||
uint16_t year;
|
||||
uint8_t month;
|
||||
uint8_t day;
|
||||
uint8_t week;
|
||||
|
||||
second = (uint8_t) tod->second;
|
||||
minute = (uint8_t) tod->minute;
|
||||
hour = (uint8_t) tod->hour;
|
||||
day = (uint8_t) tod->day;
|
||||
month = (uint8_t) tod->month;
|
||||
week = ARBITRARY_DAY_OF_WEEK;
|
||||
year = (uint16_t) tod->year;
|
||||
|
||||
RTC_SetDate(rtc, year, month, day, week);
|
||||
RTC_SetTime(rtc, hour, minute, second);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool atsam_rtc_probe(int minor)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const rtc_fns atsam_rtc_ops = {
|
||||
.deviceInitialize = atsam_rtc_initialize,
|
||||
.deviceGetTime = atsam_rtc_get_time,
|
||||
.deviceSetTime = atsam_rtc_set_time
|
||||
};
|
||||
|
||||
rtc_tbl RTC_Table[] = {
|
||||
{
|
||||
.sDeviceName = "/dev/rtc",
|
||||
.deviceType = RTC_CUSTOM,
|
||||
.pDeviceFns = &atsam_rtc_ops,
|
||||
.deviceProbe = atsam_rtc_probe
|
||||
}
|
||||
};
|
||||
|
||||
size_t RTC_Count = RTEMS_ARRAY_SIZE(RTC_Table);
|
||||
Reference in New Issue
Block a user