Files
Matthias b769685b66 edited bold-words in dictionary.odt
updated code files

git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@132 9fe90eed-be63-e94b-8204-d34ff4c2ff93
2009-01-15 11:59:37 +00:00

166 lines
5.5 KiB
C

/* ---------------------------------------------------------------------------
* rtc.c - v0.1 (c) 2007 Micro-key bv
* ---------------------------------------------------------------------------
* Micro-key bv
* Industrieweg 28, 9804 TG Noordhorn
* Postbus 92, 9800 AB Zuidhorn
* The Netherlands
* Tel: +31 594 503020
* Fax: +31 594 505825
* Email: support@microkey.nl
* Web: www.microkey.nl
* ---------------------------------------------------------------------------
* Description: Real time clock functionality
* ---------------------------------------------------------------------------
* Version(s): 0.1, 28-11-2007, fvds.
* Creation.
*
* Updates by MMi
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* System include files
* ---------------------------------------------------------------------------
*/
#include "LPC23xx.h"
#include "types.h"
/* FreeRTOS includes */
#include "FreeRTOS.h"
/* ---------------------------------------------------------------------------
* Application include files
* ---------------------------------------------------------------------------
*/
#include "rtc.h"
#include "dio.h"
#include "BusProtocol.h"
/* ---------------------------------------------------------------------------
* Local constant and macro definitions
* ---------------------------------------------------------------------------
*/
#define IMSEC 0x00000001
#define IMMIN 0x00000002
#define IMHOUR 0x00000004
#define IMDOM 0x00000008
#define IMDOW 0x00000010
#define IMDOY 0x00000020
#define IMMON 0x00000040
#define IMYEAR 0x00000080
#define AMRSEC 0x00000001 /* Alarm mask for Seconds */
#define AMRMIN 0x00000002 /* Alarm mask for Minutes */
#define AMRHOUR 0x00000004 /* Alarm mask for Hours */
#define AMRDOM 0x00000008 /* Alarm mask for Day of Month */
#define AMRDOW 0x00000010 /* Alarm mask for Day of Week */
#define AMRDOY 0x00000020 /* Alarm mask for Day of Year */
#define AMRMON 0x00000040 /* Alarm mask for Month */
#define AMRYEAR 0x00000080 /* Alarm mask for Year */
#define PREINT_RTC 0x000001C8 /* Prescaler value, integer portion, PCLK = 15Mhz */
#define PREFRAC_RTC 0x000061C0 /* Prescaler value, fraction portion,PCLK = 15Mhz */
#define ILR_RTCCIF 0x01
#define ILR_RTCALF 0x02
#define CCR_CLKEN 0x01
#define CCR_CTCRST 0x02
#define CCR_CLKSRC 0x10
/* ---------------------------------------------------------------------------
* Global variable definitions
* ---------------------------------------------------------------------------
*/
extern UINT32 interruptcounter;
/* ---------------------------------------------------------------------------
* Local variable definitions
* ---------------------------------------------------------------------------
*/
void rtcISR (void) __attribute__ ((naked));
/* ---------------------------------------------------------------------------
* Local function definitions
* ---------------------------------------------------------------------------
*/
/** \brief Initialize RTC interface.*/
void rtcInit(void)
{
/*--- Initialize registers ---*/
RTC_AMR = 0;
RTC_CIIR = 0;
//RTC_CCR = 0;
//RTC_PREINT = PREINT_RTC;
//RTC_PREFRAC = PREFRAC_RTC;
RTC_CCR = (CCR_CLKEN | CCR_CLKSRC);
/* Enable RTC interrupt and register it to the VIC */
//portENTER_CRITICAL();
// {
// VICIntSelect &= ~(VIC_CHAN_TO_MASK(VIC_CHAN_NUM_RTC));
// VICIntEnClr = VIC_CHAN_TO_MASK(VIC_CHAN_NUM_RTC);
// VICVectAddr13 = (void *)rtcISR;
// VICVectCntl3 = 0x06;
// VICIntEnable = VIC_CHAN_TO_MASK(VIC_CHAN_NUM_RTC);
// }
//portEXIT_CRITICAL();
//RTC_CIIR |= 0x01; /* Enable Interrupt every Second */
//RTC_CISS = 0x80; /* Enable SubSecond Interrupt (488u)*/
}
/** \brief Read real time clock.*/
void rtcRead(t_rtc * time)
{
time->sec = RTC_SEC;
time->min = RTC_MIN;
time->hour = RTC_HOUR;
time->day = RTC_DOM;
time->dom = RTC_DOM;
time->dow = RTC_DOW;
time->doy = RTC_DOY;
time->mon = RTC_MONTH;
time->year = RTC_YEAR;
}
/** \brief Write to real time clock.*/
void rtcWrite(t_rtc * time)
{
RTC_SEC = time->sec;
RTC_MIN = time->min;
RTC_HOUR = time->hour;
RTC_DOM = time->day;
RTC_DOW = time->dow;
RTC_DOY = time->doy;
RTC_MONTH = time->mon;
RTC_YEAR = time->year;
}
// Alarms
/* RTC INTERRUPT SERVICE ROUTINE */
void rtcISR ()
{
portSAVE_CONTEXT(); /* Save context of interrupted task */
{
if (RTC_ILR & 0x01) /* Check for Seconds Interrupt */
{
RTC_ILR = 0x1; /* Clear Seconds Interrupt */
}
if (RTC_ILR & 0x04) /* Check for SubSecond Interrupt */
{
RTC_ILR = 0x4; /* Clear SubSeconds Interrupt */
}
VICVectAddr = 0x00000000; /* clear Interrupts from the VIC */
}
/* Restore the context of whichever task is going to run once the interrupt
* completes.
*/
portRESTORE_CONTEXT();
}