CDMS integrated with pyld b4 checking
Dependencies: SDFileSystem mbed-rtos mbed-src mbed
Fork of cdms_i2csdrtc by
main.cpp@0:2e3d21e95c97, 2015-03-13 (annotated)
- Committer:
- sureshsusurla
- Date:
- Fri Mar 13 20:04:05 2015 +0000
- Revision:
- 0:2e3d21e95c97
- Child:
- 1:59da9694681e
cdms sd card and rtc working
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sureshsusurla | 0:2e3d21e95c97 | 1 | #include "mbed.h" |
sureshsusurla | 0:2e3d21e95c97 | 2 | #include "SDFileSystem.h" |
sureshsusurla | 0:2e3d21e95c97 | 3 | |
sureshsusurla | 0:2e3d21e95c97 | 4 | /************************Include the required Header files for the code *******************************/ |
sureshsusurla | 0:2e3d21e95c97 | 5 | #include "mbed.h" |
sureshsusurla | 0:2e3d21e95c97 | 6 | #include "string.h" |
sureshsusurla | 0:2e3d21e95c97 | 7 | |
sureshsusurla | 0:2e3d21e95c97 | 8 | /********************************** Function Prototypes declaration ***********************************/ |
sureshsusurla | 0:2e3d21e95c97 | 9 | int FUNC_CDMS_hex2int(int); // Need to convert the RTC time values to integers |
sureshsusurla | 0:2e3d21e95c97 | 10 | void FUNC_CDMS_Gettime(void); // Function to get the time values from RTC registers |
sureshsusurla | 0:2e3d21e95c97 | 11 | void FUNC_CDMS_init_values(void); // Function to initialize the registers in the RTC |
sureshsusurla | 0:2e3d21e95c97 | 12 | |
sureshsusurla | 0:2e3d21e95c97 | 13 | |
sureshsusurla | 0:2e3d21e95c97 | 14 | /***************** Configure the SPI1 of the CDMS uc as the data bus for the RTC***********************/ |
sureshsusurla | 0:2e3d21e95c97 | 15 | SPI spi(PTE1,PTE3, PTE2); // mosi, miso, sclk |
sureshsusurla | 0:2e3d21e95c97 | 16 | DigitalOut cs(PTE29); // PTE29 is used for chip select |
sureshsusurla | 0:2e3d21e95c97 | 17 | |
sureshsusurla | 0:2e3d21e95c97 | 18 | char ch; |
sureshsusurla | 0:2e3d21e95c97 | 19 | SDFileSystem sd(PTE1, PTE3, PTE2, PTE22, "sd"); // the pinout on the mbed Cool Components workshop board |
sureshsusurla | 0:2e3d21e95c97 | 20 | Serial pc(USBTX, USBRX); // tx, rx |
sureshsusurla | 0:2e3d21e95c97 | 21 | char time_stamp[15]; |
sureshsusurla | 0:2e3d21e95c97 | 22 | |
sureshsusurla | 0:2e3d21e95c97 | 23 | /***********************Initialization function of the RTC********************************************/ |
sureshsusurla | 0:2e3d21e95c97 | 24 | void FUNC_CDMS_init_values(void) |
sureshsusurla | 0:2e3d21e95c97 | 25 | { |
sureshsusurla | 0:2e3d21e95c97 | 26 | cs=0; |
sureshsusurla | 0:2e3d21e95c97 | 27 | spi.format(8,3); // Set the data bit with to be of 8 bits, |
sureshsusurla | 0:2e3d21e95c97 | 28 | // data tx mode is 3 |
sureshsusurla | 0:2e3d21e95c97 | 29 | spi.frequency(1000000); // Set Data rate to be 1 MHz |
sureshsusurla | 0:2e3d21e95c97 | 30 | |
sureshsusurla | 0:2e3d21e95c97 | 31 | cs = 0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 32 | spi.write(0x80); // Send the address of the Seconds register 0x80 |
sureshsusurla | 0:2e3d21e95c97 | 33 | spi.write(0x00); // Set seconds value to 0 |
sureshsusurla | 0:2e3d21e95c97 | 34 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 35 | |
sureshsusurla | 0:2e3d21e95c97 | 36 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 37 | spi.write(0x81); // Send the address of the Minutes register 0x81 |
sureshsusurla | 0:2e3d21e95c97 | 38 | spi.write(0x00); // Set minutes value to 0 |
sureshsusurla | 0:2e3d21e95c97 | 39 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 40 | |
sureshsusurla | 0:2e3d21e95c97 | 41 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 42 | spi.write(0x82); // Send the address of the Hours register 0x82 |
sureshsusurla | 0:2e3d21e95c97 | 43 | spi.write(0x00); // Set hours value to 0 |
sureshsusurla | 0:2e3d21e95c97 | 44 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 45 | |
sureshsusurla | 0:2e3d21e95c97 | 46 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 47 | spi.write(0x83); // Send the address of the Day register 0x83 |
sureshsusurla | 0:2e3d21e95c97 | 48 | spi.write(0x01); // Set the day to 01 |
sureshsusurla | 0:2e3d21e95c97 | 49 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 50 | |
sureshsusurla | 0:2e3d21e95c97 | 51 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 52 | spi.write(0x84); // Send the address of the date register 0x84 |
sureshsusurla | 0:2e3d21e95c97 | 53 | spi.write(0x01); // Set date of the month to 01 |
sureshsusurla | 0:2e3d21e95c97 | 54 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 55 | |
sureshsusurla | 0:2e3d21e95c97 | 56 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 57 | spi.write(0x85); // Send the address of the Month register 0x80 |
sureshsusurla | 0:2e3d21e95c97 | 58 | spi.write(0x01); // Set month to 01 |
sureshsusurla | 0:2e3d21e95c97 | 59 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 60 | |
sureshsusurla | 0:2e3d21e95c97 | 61 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 62 | spi.write(0x86); // Send the address of the year register 0x80 |
sureshsusurla | 0:2e3d21e95c97 | 63 | spi.write(0x00); // Set year to 00(2000) |
sureshsusurla | 0:2e3d21e95c97 | 64 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 65 | }// End of INIT Function |
sureshsusurla | 0:2e3d21e95c97 | 66 | |
sureshsusurla | 0:2e3d21e95c97 | 67 | |
sureshsusurla | 0:2e3d21e95c97 | 68 | /*********************************Function to read the RTC registers*********************************/ |
sureshsusurla | 0:2e3d21e95c97 | 69 | void FUNC_CDMS_Gettime() |
sureshsusurla | 0:2e3d21e95c97 | 70 | { |
sureshsusurla | 0:2e3d21e95c97 | 71 | |
sureshsusurla | 0:2e3d21e95c97 | 72 | spi.format(8,3); // Set the data bit with to be of 8 bits, |
sureshsusurla | 0:2e3d21e95c97 | 73 | // data tx mode is 3 |
sureshsusurla | 0:2e3d21e95c97 | 74 | spi.frequency(1000000); // Set Data rate to be 1 MHz |
sureshsusurla | 0:2e3d21e95c97 | 75 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 76 | |
sureshsusurla | 0:2e3d21e95c97 | 77 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 78 | spi.write(0x00); // Sending address of seconds register |
sureshsusurla | 0:2e3d21e95c97 | 79 | int seconds = spi.write(0x00); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 80 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 81 | |
sureshsusurla | 0:2e3d21e95c97 | 82 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 83 | spi.write(0x01); // Sending address of Minutes register |
sureshsusurla | 0:2e3d21e95c97 | 84 | int minutes =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 85 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 86 | |
sureshsusurla | 0:2e3d21e95c97 | 87 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 88 | spi.write(0x02); // Sending address of hours register |
sureshsusurla | 0:2e3d21e95c97 | 89 | int hours =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 90 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 91 | |
sureshsusurla | 0:2e3d21e95c97 | 92 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 93 | spi.write(0x03); // Sending address of day register |
sureshsusurla | 0:2e3d21e95c97 | 94 | int day =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 95 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 96 | |
sureshsusurla | 0:2e3d21e95c97 | 97 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 98 | spi.write(0x04); // Sending address of date register |
sureshsusurla | 0:2e3d21e95c97 | 99 | int date =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 100 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 101 | |
sureshsusurla | 0:2e3d21e95c97 | 102 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 103 | spi.write(0x05); // Sending address of month register |
sureshsusurla | 0:2e3d21e95c97 | 104 | int month =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 105 | cs=1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 106 | |
sureshsusurla | 0:2e3d21e95c97 | 107 | cs=0; // Set chip select pin to be 0: Activate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 108 | spi.write(0x06); // Sending address of year register |
sureshsusurla | 0:2e3d21e95c97 | 109 | int year =spi.write(0x01); // Read the value by sending dummy byte |
sureshsusurla | 0:2e3d21e95c97 | 110 | cs = 1; // Set chip select pin to be 1: DeActivate RTC chip |
sureshsusurla | 0:2e3d21e95c97 | 111 | |
sureshsusurla | 0:2e3d21e95c97 | 112 | // RTC sends in BCD format.. SO we convert the values generated by RTC to integers |
sureshsusurla | 0:2e3d21e95c97 | 113 | year = FUNC_CDMS_hex2int(year); |
sureshsusurla | 0:2e3d21e95c97 | 114 | month = FUNC_CDMS_hex2int(month); |
sureshsusurla | 0:2e3d21e95c97 | 115 | date = FUNC_CDMS_hex2int(date); |
sureshsusurla | 0:2e3d21e95c97 | 116 | day = FUNC_CDMS_hex2int(day); |
sureshsusurla | 0:2e3d21e95c97 | 117 | hours = FUNC_CDMS_hex2int(hours); |
sureshsusurla | 0:2e3d21e95c97 | 118 | minutes = FUNC_CDMS_hex2int(minutes); |
sureshsusurla | 0:2e3d21e95c97 | 119 | seconds = FUNC_CDMS_hex2int(seconds); |
sureshsusurla | 0:2e3d21e95c97 | 120 | |
sureshsusurla | 0:2e3d21e95c97 | 121 | // Print the obtained Time stamp |
sureshsusurla | 0:2e3d21e95c97 | 122 | //printf("The time is :%d %d %d %d %d %d %d \n\r",seconds,minutes,hours,day,date,month,year); |
sureshsusurla | 0:2e3d21e95c97 | 123 | sprintf(time_stamp,"%02d%02d%02d%02d%02d%02d",year,month,date,hours,minutes,seconds); |
sureshsusurla | 0:2e3d21e95c97 | 124 | printf(" \n\r Received HK data from BAE"); |
sureshsusurla | 0:2e3d21e95c97 | 125 | printf("\n HK_data stored in %s.txt",time_stamp); |
sureshsusurla | 0:2e3d21e95c97 | 126 | //puts(time_stamp); |
sureshsusurla | 0:2e3d21e95c97 | 127 | //printf(".txt"); |
sureshsusurla | 0:2e3d21e95c97 | 128 | }//End of Read Function |
sureshsusurla | 0:2e3d21e95c97 | 129 | |
sureshsusurla | 0:2e3d21e95c97 | 130 | /**************************Function to convert Hex values to Int values*****************************/ |
sureshsusurla | 0:2e3d21e95c97 | 131 | int FUNC_CDMS_hex2int(int a) |
sureshsusurla | 0:2e3d21e95c97 | 132 | { |
sureshsusurla | 0:2e3d21e95c97 | 133 | a=(a/16)*10+(a%16); //function to convert hex type to int type |
sureshsusurla | 0:2e3d21e95c97 | 134 | return a; |
sureshsusurla | 0:2e3d21e95c97 | 135 | }// End of convert function |
sureshsusurla | 0:2e3d21e95c97 | 136 | |
sureshsusurla | 0:2e3d21e95c97 | 137 | |
sureshsusurla | 0:2e3d21e95c97 | 138 | /******************************************END OF RTC CODE ****************************************/ |
sureshsusurla | 0:2e3d21e95c97 | 139 | |
sureshsusurla | 0:2e3d21e95c97 | 140 | char count = 10; |
sureshsusurla | 0:2e3d21e95c97 | 141 | void store_data() |
sureshsusurla | 0:2e3d21e95c97 | 142 | { |
sureshsusurla | 0:2e3d21e95c97 | 143 | FUNC_CDMS_Gettime(); |
sureshsusurla | 0:2e3d21e95c97 | 144 | |
sureshsusurla | 0:2e3d21e95c97 | 145 | char hk_data[25]; |
sureshsusurla | 0:2e3d21e95c97 | 146 | count++; |
sureshsusurla | 0:2e3d21e95c97 | 147 | strcpy(hk_data,"hk_Data "); |
sureshsusurla | 0:2e3d21e95c97 | 148 | strcat(hk_data,"!@@#"); |
sureshsusurla | 0:2e3d21e95c97 | 149 | hk_data[10] = count; |
sureshsusurla | 0:2e3d21e95c97 | 150 | //storedata(hk_data); |
sureshsusurla | 0:2e3d21e95c97 | 151 | mkdir("/sd/hk", 0777); |
sureshsusurla | 0:2e3d21e95c97 | 152 | char add[20]; |
sureshsusurla | 0:2e3d21e95c97 | 153 | strcpy(add,"/sd/hk/"); |
sureshsusurla | 0:2e3d21e95c97 | 154 | strcat(add,time_stamp); |
sureshsusurla | 0:2e3d21e95c97 | 155 | strcat(add,".txt"); |
sureshsusurla | 0:2e3d21e95c97 | 156 | |
sureshsusurla | 0:2e3d21e95c97 | 157 | FILE *fp = fopen(add, "w"); |
sureshsusurla | 0:2e3d21e95c97 | 158 | if(fp == NULL) { |
sureshsusurla | 0:2e3d21e95c97 | 159 | error("Could not open file for write\n"); |
sureshsusurla | 0:2e3d21e95c97 | 160 | } |
sureshsusurla | 0:2e3d21e95c97 | 161 | else |
sureshsusurla | 0:2e3d21e95c97 | 162 | { |
sureshsusurla | 0:2e3d21e95c97 | 163 | |
sureshsusurla | 0:2e3d21e95c97 | 164 | fprintf(fp, "%s ",hk_data); |
sureshsusurla | 0:2e3d21e95c97 | 165 | fclose(fp); |
sureshsusurla | 0:2e3d21e95c97 | 166 | printf("\n File stored in SD card\n"); |
sureshsusurla | 0:2e3d21e95c97 | 167 | //printf("\n Reading from the file .... \n Data is %s\n",hk_data); |
sureshsusurla | 0:2e3d21e95c97 | 168 | |
sureshsusurla | 0:2e3d21e95c97 | 169 | } |
sureshsusurla | 0:2e3d21e95c97 | 170 | } |
sureshsusurla | 0:2e3d21e95c97 | 171 | |
sureshsusurla | 0:2e3d21e95c97 | 172 | |
sureshsusurla | 0:2e3d21e95c97 | 173 | |
sureshsusurla | 0:2e3d21e95c97 | 174 | //void create_file() |
sureshsusurla | 0:2e3d21e95c97 | 175 | //{ |
sureshsusurla | 0:2e3d21e95c97 | 176 | |
sureshsusurla | 0:2e3d21e95c97 | 177 | /* |
sureshsusurla | 0:2e3d21e95c97 | 178 | fprintf(fp, "Hello fun SD Card World!\n"); |
sureshsusurla | 0:2e3d21e95c97 | 179 | fclose(fp); |
sureshsusurla | 0:2e3d21e95c97 | 180 | |
sureshsusurla | 0:2e3d21e95c97 | 181 | fp = fopen("/sd/mydir/sdtest.txt", "r"); |
sureshsusurla | 0:2e3d21e95c97 | 182 | if(fp == NULL) { |
sureshsusurla | 0:2e3d21e95c97 | 183 | error("Could not open file for write\n"); |
sureshsusurla | 0:2e3d21e95c97 | 184 | } |
sureshsusurla | 0:2e3d21e95c97 | 185 | //fprintf(fp, "Hello fun SD Card World!"); |
sureshsusurla | 0:2e3d21e95c97 | 186 | // fprintf("The contents of %s file are :\n", "/sd/mydir/sdtest.txt"); |
sureshsusurla | 0:2e3d21e95c97 | 187 | while( ( ch = fgetc(fp) ) != '\n' ) |
sureshsusurla | 0:2e3d21e95c97 | 188 | { |
sureshsusurla | 0:2e3d21e95c97 | 189 | pc.printf("%c",ch); |
sureshsusurla | 0:2e3d21e95c97 | 190 | } |
sureshsusurla | 0:2e3d21e95c97 | 191 | //fprintf(fp); |
sureshsusurla | 0:2e3d21e95c97 | 192 | fclose(fp); |
sureshsusurla | 0:2e3d21e95c97 | 193 | |
sureshsusurla | 0:2e3d21e95c97 | 194 | printf("Jai Mata Di..Goodbye World!\n");*/ |
sureshsusurla | 0:2e3d21e95c97 | 195 | //} |
sureshsusurla | 0:2e3d21e95c97 | 196 | |
sureshsusurla | 0:2e3d21e95c97 | 197 | Ticker t; |
sureshsusurla | 0:2e3d21e95c97 | 198 | |
sureshsusurla | 0:2e3d21e95c97 | 199 | int main() |
sureshsusurla | 0:2e3d21e95c97 | 200 | { |
sureshsusurla | 0:2e3d21e95c97 | 201 | printf("IITMSAT - CDMS\n"); |
sureshsusurla | 0:2e3d21e95c97 | 202 | |
sureshsusurla | 0:2e3d21e95c97 | 203 | FUNC_CDMS_init_values(); |
sureshsusurla | 0:2e3d21e95c97 | 204 | t.attach(&store_data, 20.0); |
sureshsusurla | 0:2e3d21e95c97 | 205 | while(1); |
sureshsusurla | 0:2e3d21e95c97 | 206 | |
sureshsusurla | 0:2e3d21e95c97 | 207 | } |