jnlj

Dependencies:   mbed-rtos mbed

Fork of TFOX_CDMS_VR_1_0_WORKING by Team Fox

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers RTC.cpp Source File

RTC.cpp

00001 #include "mbed.h"
00002 #include "func_head.h"
00003 
00004 SPI rtc_spi(PTD6,PTD7,PTD5);      // MOSI,MISO, CLOCK microcontroller(in order)                                                       
00005 DigitalOut rtc_cs(PTD4);         //Slave Select pin 
00006 //Serial pc(USBTX,USBRX);
00007 
00008 void FUNC_INIT_RTC()
00009 {
00010     rtc_cs=1;
00011     rtc_spi.format(8,0);
00012     rtc_spi.frequency(1000000);
00013     //clearing the halt bit 
00014     rtc_cs=1;
00015     rtc_cs=0;
00016     rtc_spi.write(0x8C);
00017     rtc_spi.write(0x00);
00018      
00019     //clearing the OF bit 
00020     rtc_cs=1;
00021     rtc_cs=0;
00022     rtc_spi.write(0x8F);
00023     rtc_spi.write(0x00);
00024      
00025     //century bits
00026     rtc_cs=1;
00027     rtc_cs=0;
00028     rtc_spi.write(0x80|0x03);
00029     rtc_spi.write(0x00);
00030  
00031     //Kick starting the oscillator 
00032     rtc_cs=1;
00033     rtc_cs=0;
00034     rtc_spi.write(0x81); //register address with write flag
00035     rtc_spi.write(0x80);//enabling stop bit in the seconds register
00036 
00037     rtc_cs=1;
00038     rtc_cs=0;
00039     rtc_spi.write(0x81);
00040     rtc_spi.write(0x00);//disabling the stop bit to restart the oscillator 
00041 
00042     
00043     rtc_cs=1;
00044     rtc_cs=0;
00045     rtc_spi.write(0x80); 
00046     rtc_spi.write(0x01); // set milliseconds value to 00
00047     rtc_cs=1;
00048 
00049     rtc_cs=0;
00050     rtc_spi.write(0x81); 
00051     rtc_spi.write(0x01); //set seconds value to 00
00052     rtc_cs=1;
00053 
00054     rtc_cs=0;
00055     rtc_spi.write(0x82); 
00056     rtc_spi.write(0x01);//set minutes value to 00
00057     rtc_cs=1;
00058 
00059     rtc_cs=0;
00060     rtc_spi.write(0x83); 
00061     rtc_spi.write(0x23); //set the hours to 01
00062     rtc_cs=1;
00063     
00064     rtc_cs=0;
00065     rtc_spi.write(0x84); 
00066     rtc_spi.write(0x01); //set day of the week to 01
00067     rtc_cs=1;
00068     
00069     rtc_cs=0;
00070     rtc_spi.write(0x85); 
00071     rtc_spi.write(0x31); //set date of the month to 01
00072     rtc_cs=1;
00073     
00074     rtc_cs=0;
00075     rtc_spi.write(0x86); 
00076     rtc_spi.write(0x12); //set month to 01
00077     rtc_cs=1;
00078     
00079     rtc_cs=0;
00080     rtc_spi.write(0x87); 
00081     rtc_spi.write(0x01); //set year to 00(2000)
00082     rtc_cs=1;
00083     printf("\n\r rtc initalised \n");
00084 }
00085 
00086 void FUNC_CDMS_RD_RTC(uint8_t Time_stamp[8])
00087 
00088 {    
00089     uint8_t response;
00090     printf("\n\r Entered rtc\n");
00091     rtc_cs=1;
00092     rtc_cs=0;
00093     rtc_spi.write(0x00); //reading milliseconds register
00094     response = rtc_spi.write(0x00); // read the value by sending dummy byte
00095     uint8_t milliseconds =  (uint8_t(response&0xF0)>>4)*10+uint8_t(response&0x0F)*1;
00096     
00097     rtc_cs=1;
00098     rtc_cs=0;
00099     rtc_spi.write(0x01); //reading seconds register
00100     response =rtc_spi.write(0x01);
00101     uint8_t seconds =  ((response&0x70)>>4)*10+(response&0x0F)*1;
00102     
00103     rtc_cs=1;
00104     rtc_cs=0;
00105     rtc_spi.write(0x02); //reading minutes register
00106     response =rtc_spi.write(0x01);
00107     uint8_t minutes =  ((response&0xF0)>>4)*10+(response&0x0F)*1;
00108     
00109     rtc_cs=1;
00110     rtc_cs=0;
00111     rtc_spi.write(0x03); //reading hours register
00112     response=rtc_spi.write(0x01);
00113     uint8_t hours =  ((response&0x30)>>4)*10+(response&0x0F)*1;
00114     
00115     rtc_cs=1;
00116     rtc_cs=0;
00117     rtc_spi.write(0x04); //reading day's  register
00118     uint8_t day =rtc_spi.write(0x01);
00119     
00120     rtc_cs=1;
00121     rtc_cs=0;
00122     rtc_spi.write(0x05); //reading date register
00123     response =rtc_spi.write(0x01);
00124     uint8_t date =  ((response&0x30)>>4)*10+(response&0x0F)*1;
00125     
00126     rtc_cs=1;
00127     rtc_cs=0;
00128     rtc_spi.write(0x06); //reading month registe
00129     response =rtc_spi.write(0x01);
00130     uint8_t month =  ((response&0x10)>>4)*10+(response&0x0F)*1;
00131     
00132     rtc_cs=1;
00133     rtc_cs=0;
00134     rtc_spi.write(0x07); //reading year's registe
00135     response =rtc_spi.write(0x01);
00136     uint8_t year =  ((response&0xF0)>>4)*10+(response&0x0F)*1;
00137     rtc_cs=1;
00138     //sprintf(Time_stamp,"%02d%02d%02d%02d%02d%02d%02d%02d",year, month, date, day, hours, minutes, seconds, milliseconds );
00139     //Time_stamp[8] = {year, month, date, day, hours, minutes, seconds, milliseconds};
00140     Time_stamp[0] = year;
00141      Time_stamp[1] = month;
00142       Time_stamp[2] = date;
00143        Time_stamp[3] = day;
00144      Time_stamp[4] = hours;
00145       Time_stamp[5] = minutes;
00146      Time_stamp[6] = seconds;
00147      Time_stamp[7] = milliseconds;
00148     for(int i= 0; i<8;i++)
00149         printf("%d\t",Time_stamp[i]);
00150     printf("read\r\n");
00151     //time = Time_stamp;
00152 }