Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of CDMS_CODE_samp_23SEP_DMA_flag by
cdms_rtc.h
- Committer:
- ee12b079
- Date:
- 2016-09-02
- Revision:
- 299:7c89a1e62458
- Parent:
- 289:9bd62b69874c
- Child:
- 297:7cc868888d56
- Child:
- 301:701ac67649b7
File content as of revision 299:7c89a1e62458:
void FCTN_CDMS_INIT_RTC()
{
if(EN_RTC == 0)
return;
wait_ms(4000);
SPI_mutex.lock();
gCS_RTC=1;
spi.format(8,0);
spi.frequency(1000000);
//Kick starting the oscillator
gCS_RTC=0;
spi.write(0x81); //register address with write flag
spi.write(0x80);//enabling stop bit in the seconds register
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x81);
spi.write(0x00);//disabling the stop bit to restart the oscillator
gCS_RTC=1;
//clearing the halt bit
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x8C);
spi.write(0x00);
gCS_RTC=1;
//clearing the OF bit
gCS_RTC=0;
spi.write(0x8F);
spi.write(0x00);
gCS_RTC=1;
//century bits
gCS_RTC=0;
spi.write(0x80|0x03);
spi.write(0x00);
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x80);
spi.write(0x00); // set milliseconds value to 00
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x81);
spi.write(0x00); //set seconds value to 00
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x82);
spi.write(0x00);//set minutes value to 00
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x83);
spi.write(0x00); //set the hours to 01
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x84);
spi.write(0x01); //set day of the week to 01
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x85);
spi.write(0x01); //set date of the month to 01
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x86);
spi.write(0x01); //set month to 01
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x87);
spi.write(0x00); //set year to 00(2000)
gCS_RTC=1;
gPC.puts("\n\r rtc initalised \n");
SPI_mutex.unlock();
}
uint64_t FCTN_CDMS_RD_RTC()
{
if(EN_RTC == 0)
return 0;
SPI_mutex.lock();
uint8_t response;
uint64_t time = 0;
gCS_RTC = 0;
spi.write(0x0F);
response = spi.write(0x00);
//gPC.printf("0x%02X",response);
gCS_RTC = 1;
gCS_RTC=0;
spi.write(0x00); //reading milliseconds register
response = spi.write(0x00); // read the value by sending dummy byte
uint8_t centiseconds = (uint8_t(response&0xF0)>>4)*10+uint8_t(response&0x0F)*1;
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x01); //reading seconds register
response =spi.write(0x01);
uint8_t seconds = ((response&0x70)>>4)*10+(response&0x0F)*1;
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x02); //reading minutes register
response =spi.write(0x01);
uint8_t minutes = ((response&0xF0)>>4)*10+(response&0x0F)*1;
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x03); //reading hours register
response=spi.write(0x01);
uint8_t hours = ((response&0x30)>>4)*10+(response&0x0F)*1;
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x04); //reading day's register
uint8_t day =spi.write(0x01);
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x05); //reading date register
response =spi.write(0x01);
uint8_t date = ((response&0x30)>>4)*10+(response&0x0F)*1;
gCS_RTC=1;
gCS_RTC=0;
spi.write(0x06); //reading month registe
response =spi.write(0x01);
uint8_t month = ((response&0x10)>>4)*10+(response&0x0F)*1;
gCS_RTC=1;
gCS_RTC=0;
response =spi.write(0x00);
uint8_t year = ((response&0xF0)>>4)*10+(response&0x0F)*1;
year = (year == 16)?0x00:(year == 17)?0x01:(year == 18)?0x02:(year == 19)?0x03:0x00;
gCS_RTC=1;
uint8_t Time_stamp[8] = {year, month, date, day, hours, minutes, seconds, centiseconds};
time = time|(((uint64_t)(centiseconds&0x7F)));
time = time|(((uint64_t)(seconds&0x3F))<<7);
time = time|(((uint64_t)(minutes&0x3F))<<13);
time = time|(((uint64_t)(hours&0x1F))<<19);
time = time|(((uint64_t)(day&0x1F))<<24);
time = time|(((uint64_t)(month&0x07))<<29);
time = time|(((uint64_t)(year&0x03))<<33);
time = (time&0x00000007FFFFFFFF);
SPI_mutex.unlock();
return time;
}
