LPC824専用プログラム

Dependencies:   Ping SDFileSystem mbed-src

Committer:
lilac0112_1
Date:
Sun Jan 24 15:16:26 2016 +0000
Revision:
9:7f98d4415425
Parent:
8:a2eadba03040
Child:
10:641da47d4a14
utilized interrupt on chip select.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 0:2f48b11b154f 1 #include "mbed.h"
lilac0112_1 0:2f48b11b154f 2 #include "extern.h"
lilac0112_1 0:2f48b11b154f 3
lilac0112_1 0:2f48b11b154f 4 #ifdef SD_CARD
lilac0112_1 0:2f48b11b154f 5 void Sd_System(void){
lilac0112_1 0:2f48b11b154f 6
lilac0112_1 0:2f48b11b154f 7 char buf[BUFSIZE];
lilac0112_1 0:2f48b11b154f 8 uint16_t FileData[FDATA_NUM]={0}, num, data;
lilac0112_1 2:9a51bb2694aa 9 uint8_t spi_num, h_byte, l_byte, val, packet;
lilac0112_1 0:2f48b11b154f 10 int i;
lilac0112_1 0:2f48b11b154f 11 FILE *fp;
lilac0112_1 1:7070fb876a2c 12 char *fname="/sd/mydir/sdtest.txt";
lilac0112_1 1:7070fb876a2c 13 char *dname="/sd/mydir";
lilac0112_1 1:7070fb876a2c 14
lilac0112_1 1:7070fb876a2c 15 mkdir(dname, 0777);
lilac0112_1 1:7070fb876a2c 16
lilac0112_1 0:2f48b11b154f 17 pc.printf("Hello World!\n");
lilac0112_1 0:2f48b11b154f 18
lilac0112_1 1:7070fb876a2c 19 fp = fopen(fname, "r");
lilac0112_1 0:2f48b11b154f 20 if(fp == NULL) {
lilac0112_1 0:2f48b11b154f 21 error("Could not open file for read\n");
lilac0112_1 0:2f48b11b154f 22 }
lilac0112_1 0:2f48b11b154f 23 while(fgets(buf, sizeof(buf), fp) != NULL){
lilac0112_1 0:2f48b11b154f 24 if(buf[0] == '#') continue;
lilac0112_1 0:2f48b11b154f 25
lilac0112_1 0:2f48b11b154f 26 num = atol(strtok(buf, ","));
lilac0112_1 0:2f48b11b154f 27 data = atol(strtok(NULL, "\r\n\0"));
lilac0112_1 0:2f48b11b154f 28
lilac0112_1 2:9a51bb2694aa 29 if(num<FDATA_NUM){
lilac0112_1 0:2f48b11b154f 30 FileData[num] = data;
lilac0112_1 0:2f48b11b154f 31 pc.printf("%d, %ld\n", num, FileData[num]);
lilac0112_1 0:2f48b11b154f 32 }
lilac0112_1 0:2f48b11b154f 33 else{
lilac0112_1 0:2f48b11b154f 34 continue;
lilac0112_1 0:2f48b11b154f 35 }
lilac0112_1 0:2f48b11b154f 36 }
lilac0112_1 0:2f48b11b154f 37 fclose(fp);
lilac0112_1 0:2f48b11b154f 38
lilac0112_1 1:7070fb876a2c 39 while(1){
lilac0112_1 1:7070fb876a2c 40
lilac0112_1 1:7070fb876a2c 41 val = nucleo.receive();
lilac0112_1 1:7070fb876a2c 42 if(!val) continue;
lilac0112_1 1:7070fb876a2c 43
lilac0112_1 2:9a51bb2694aa 44 spi_num = nucleo.read();
lilac0112_1 2:9a51bb2694aa 45 h_byte = nucleo.read();
lilac0112_1 2:9a51bb2694aa 46 l_byte = nucleo.read();
lilac0112_1 1:7070fb876a2c 47
lilac0112_1 1:7070fb876a2c 48 if((spi_num&0x80)>>7 == 1){//writing to sd
lilac0112_1 1:7070fb876a2c 49 spi_num = spi_num & 0x7F;
lilac0112_1 2:9a51bb2694aa 50 if(spi_num<FDATA_NUM){
lilac0112_1 1:7070fb876a2c 51 FileData[spi_num] = (h_byte<<8) | l_byte;
lilac0112_1 1:7070fb876a2c 52 //pc.printf("%d, %ld\n", num, FileData[num]);
lilac0112_1 1:7070fb876a2c 53 fp = fopen(fname, "w");
lilac0112_1 1:7070fb876a2c 54 for(i=0; i<FDATA_NUM; i++) fprintf(fp, "%d, %ld\n", i, FileData[i]);
lilac0112_1 1:7070fb876a2c 55 fclose(fp);
lilac0112_1 1:7070fb876a2c 56 }
lilac0112_1 1:7070fb876a2c 57 }
lilac0112_1 1:7070fb876a2c 58 else{//reading from sd
lilac0112_1 1:7070fb876a2c 59 spi_num = spi_num & 0x7F;
lilac0112_1 2:9a51bb2694aa 60 if(spi_num<FDATA_NUM){
lilac0112_1 1:7070fb876a2c 61 h_byte = (FileData[spi_num] & 0xFF00)>>8;
lilac0112_1 1:7070fb876a2c 62 l_byte = (FileData[spi_num] & 0x00FF);
lilac0112_1 1:7070fb876a2c 63
lilac0112_1 1:7070fb876a2c 64 packet = h_byte;
lilac0112_1 1:7070fb876a2c 65 nucleo.reply(packet);
lilac0112_1 1:7070fb876a2c 66
lilac0112_1 1:7070fb876a2c 67 packet = l_byte;
lilac0112_1 1:7070fb876a2c 68 nucleo.reply(packet);
lilac0112_1 1:7070fb876a2c 69 }
lilac0112_1 1:7070fb876a2c 70 }
lilac0112_1 0:2f48b11b154f 71 //pc.printf("Goodbye World!\n");
lilac0112_1 0:2f48b11b154f 72 }
lilac0112_1 0:2f48b11b154f 73 }
lilac0112_1 0:2f48b11b154f 74 #endif /*SD_CARD*/
lilac0112_1 0:2f48b11b154f 75
lilac0112_1 0:2f48b11b154f 76 #ifdef ULTRA_SONIC
lilac0112_1 8:a2eadba03040 77
lilac0112_1 9:7f98d4415425 78
lilac0112_1 9:7f98d4415425 79 uint16_t packet, val, order;
lilac0112_1 9:7f98d4415425 80 uint16_t front_dis=0, rear_dis=0;
lilac0112_1 9:7f98d4415425 81
lilac0112_1 9:7f98d4415425 82 void emergency(void){
lilac0112_1 9:7f98d4415425 83 led[1]=1;
lilac0112_1 9:7f98d4415425 84 //front_dis = 0xAA;
lilac0112_1 9:7f98d4415425 85 //rear_dis = 0xBB;
lilac0112_1 8:a2eadba03040 86 val = nucleo.receive();
lilac0112_1 8:a2eadba03040 87 if(val==1){
lilac0112_1 8:a2eadba03040 88 order = nucleo.read();
lilac0112_1 8:a2eadba03040 89 if(order == 0xABCD){
lilac0112_1 9:7f98d4415425 90 packet = ((front_dis<<8)|(rear_dis))&0xFFFF;nucleo.reply(packet);
lilac0112_1 8:a2eadba03040 91 }
lilac0112_1 8:a2eadba03040 92 else{
lilac0112_1 9:7f98d4415425 93 packet = 0xFFFF;nucleo.reply(packet);
lilac0112_1 8:a2eadba03040 94 }
lilac0112_1 9:7f98d4415425 95 //pc.printf("SSSSSSSSSSSSSSSSS%d\r\n", order);
lilac0112_1 8:a2eadba03040 96 }
lilac0112_1 8:a2eadba03040 97 else{
lilac0112_1 9:7f98d4415425 98 //pc.printf("FFFF\r\n");
lilac0112_1 8:a2eadba03040 99 }
lilac0112_1 9:7f98d4415425 100 led[1]=0;
lilac0112_1 8:a2eadba03040 101 }
lilac0112_1 0:2f48b11b154f 102 void Usw_System(void){
lilac0112_1 0:2f48b11b154f 103
lilac0112_1 8:a2eadba03040 104 nucleo.format(16, 3);
lilac0112_1 8:a2eadba03040 105 nucleo.frequency(1000000);
lilac0112_1 8:a2eadba03040 106 nucleo.reply(0x0000);
lilac0112_1 9:7f98d4415425 107
lilac0112_1 9:7f98d4415425 108 call.fall(&emergency);
lilac0112_1 8:a2eadba03040 109
lilac0112_1 9:7f98d4415425 110 //led[0]=led[1]=1;
lilac0112_1 0:2f48b11b154f 111 while(1){
lilac0112_1 9:7f98d4415425 112
lilac0112_1 9:7f98d4415425 113 led[0]=1;
lilac0112_1 0:2f48b11b154f 114 front.Send();
lilac0112_1 0:2f48b11b154f 115 wait_ms(30);
lilac0112_1 0:2f48b11b154f 116 front_dis = front.Read_cm();
lilac0112_1 9:7f98d4415425 117 if(front_dis>0xFE) front_dis=0xFE;
lilac0112_1 9:7f98d4415425 118
lilac0112_1 0:2f48b11b154f 119
lilac0112_1 0:2f48b11b154f 120 rear.Send();
lilac0112_1 0:2f48b11b154f 121 wait_ms(30);
lilac0112_1 0:2f48b11b154f 122 rear_dis = rear.Read_cm();
lilac0112_1 9:7f98d4415425 123 if(rear_dis>0xFE) rear_dis=0xFE;
lilac0112_1 9:7f98d4415425 124 led[0]=0;
lilac0112_1 8:a2eadba03040 125
lilac0112_1 9:7f98d4415425 126 pc.printf("%d\t%d\t\r\n", front_dis, rear_dis);
lilac0112_1 9:7f98d4415425 127
lilac0112_1 9:7f98d4415425 128 //emergency();
lilac0112_1 0:2f48b11b154f 129 }
lilac0112_1 0:2f48b11b154f 130 }
lilac0112_1 0:2f48b11b154f 131 #endif /*ULTRA_SONIC*/
lilac0112_1 0:2f48b11b154f 132
lilac0112_1 0:2f48b11b154f 133 #ifdef COLOR_SENSOR
lilac0112_1 0:2f48b11b154f 134 void Color_System(void){
lilac0112_1 1:7070fb876a2c 135 uint8_t val, order, packet;
lilac0112_1 1:7070fb876a2c 136 uint16_t data;
lilac0112_1 1:7070fb876a2c 137
lilac0112_1 0:2f48b11b154f 138 while(1){
lilac0112_1 1:7070fb876a2c 139 while(1){
lilac0112_1 1:7070fb876a2c 140 val = nucleo.receive();
lilac0112_1 1:7070fb876a2c 141 if(val){
lilac0112_1 1:7070fb876a2c 142 order = nucleo.read();
lilac0112_1 1:7070fb876a2c 143 order %= SENSOR_X_COLOR;
lilac0112_1 2:9a51bb2694aa 144 data = ColorSensor[order].read_u16();
lilac0112_1 1:7070fb876a2c 145 packet = (data & 0xFF00)>>8;
lilac0112_1 1:7070fb876a2c 146 nucleo.reply(packet);
lilac0112_1 1:7070fb876a2c 147 }
lilac0112_1 1:7070fb876a2c 148 else{
lilac0112_1 1:7070fb876a2c 149 break;
lilac0112_1 1:7070fb876a2c 150 }
lilac0112_1 1:7070fb876a2c 151 }
lilac0112_1 0:2f48b11b154f 152 }
lilac0112_1 0:2f48b11b154f 153 }
lilac0112_1 0:2f48b11b154f 154 #endif /*COLOR_SENSOR*/
lilac0112_1 0:2f48b11b154f 155
lilac0112_1 0:2f48b11b154f 156 #ifdef IR_SENSOR
lilac0112_1 9:7f98d4415425 157 uint8_t ir_notice=0;//4bit
lilac0112_1 9:7f98d4415425 158 uint8_t ir_key=0;//4bit
lilac0112_1 9:7f98d4415425 159 uint8_t ir_position[2]={0};//4bit*2
lilac0112_1 9:7f98d4415425 160
lilac0112_1 9:7f98d4415425 161 uint8_t i;//ic
lilac0112_1 9:7f98d4415425 162 uint8_t j;//ch
lilac0112_1 9:7f98d4415425 163 uint8_t ch_num[3]={8, 8, 4};
lilac0112_1 9:7f98d4415425 164 uint16_t ir_data[IC_NUM][IR_NUM]={0};
lilac0112_1 9:7f98d4415425 165 uint16_t order,packet,val;
lilac0112_1 9:7f98d4415425 166 void emergency(void){
lilac0112_1 9:7f98d4415425 167 //ir_key=0xA;
lilac0112_1 9:7f98d4415425 168 //ir_notice=0xC;
lilac0112_1 9:7f98d4415425 169 //ir_position[1]=0xE;
lilac0112_1 9:7f98d4415425 170 //ir_position[0]=0xF;
lilac0112_1 9:7f98d4415425 171 val = nucleo.receive();
lilac0112_1 9:7f98d4415425 172 if(val==1){
lilac0112_1 9:7f98d4415425 173 order = nucleo.read();
lilac0112_1 9:7f98d4415425 174 if(order == 0xABCD){
lilac0112_1 9:7f98d4415425 175 //key/notice/long/short
lilac0112_1 9:7f98d4415425 176 packet = ((ir_key<<12)|(ir_notice<<8)|(ir_position[1]<<4)|(ir_position[0]<<0))&0xFFFF;nucleo.reply(packet);
lilac0112_1 9:7f98d4415425 177 }
lilac0112_1 9:7f98d4415425 178 else{
lilac0112_1 9:7f98d4415425 179 packet = 0xFFFF;nucleo.reply(packet);
lilac0112_1 9:7f98d4415425 180 }
lilac0112_1 9:7f98d4415425 181 //pc.printf("SSSSSSSSSSSSSSSSS%d\r\n", order);
lilac0112_1 9:7f98d4415425 182 }
lilac0112_1 9:7f98d4415425 183 else{
lilac0112_1 9:7f98d4415425 184 //pc.f("FFFF\r\n");
lilac0112_1 9:7f98d4415425 185 }
lilac0112_1 9:7f98d4415425 186 }
lilac0112_1 7:9b1ac6fbf32c 187 void Ir_System(void){
lilac0112_1 9:7f98d4415425 188 nucleo.format(16, 3);
lilac0112_1 8:a2eadba03040 189 nucleo.frequency(1000000);
lilac0112_1 9:7f98d4415425 190 nucleo.reply(0x0000);
lilac0112_1 8:a2eadba03040 191
lilac0112_1 7:9b1ac6fbf32c 192 ir.format(8, 3);
lilac0112_1 6:79dc74e4926a 193 ir.frequency(1000000);
lilac0112_1 9:7f98d4415425 194
lilac0112_1 9:7f98d4415425 195 call.fall(&emergency);
lilac0112_1 6:79dc74e4926a 196
lilac0112_1 6:79dc74e4926a 197 for(i=0; i<IC_NUM; i++) cs[i]=1;
lilac0112_1 6:79dc74e4926a 198 while(1) {
lilac0112_1 6:79dc74e4926a 199 for(i=0; i<IC_NUM; i++){//IC
lilac0112_1 6:79dc74e4926a 200 for(j=0; j<ch_num[i]; j++){//Ch
lilac0112_1 7:9b1ac6fbf32c 201 ir_data[i][j] = read_input(i, j);
lilac0112_1 6:79dc74e4926a 202 }
lilac0112_1 6:79dc74e4926a 203 }
lilac0112_1 6:79dc74e4926a 204 pc.printf("%Value is ");
lilac0112_1 7:9b1ac6fbf32c 205 pc.printf("%d\t", ir_data[1][0]);
lilac0112_1 7:9b1ac6fbf32c 206 pc.printf("%d\t", ir_data[1][1]);
lilac0112_1 6:79dc74e4926a 207 pc.printf("%d\t", ir_data[1][2]);
lilac0112_1 7:9b1ac6fbf32c 208 pc.printf("%d\t", ir_data[1][3]);
lilac0112_1 6:79dc74e4926a 209 pc.printf("%d\t", ir_data[1][4]);
lilac0112_1 7:9b1ac6fbf32c 210 pc.printf("%d\t", ir_data[1][5]);
lilac0112_1 7:9b1ac6fbf32c 211 pc.printf("%d\t", ir_data[1][6]);
lilac0112_1 7:9b1ac6fbf32c 212 pc.printf("%d\t", ir_data[1][7]);
lilac0112_1 6:79dc74e4926a 213 pc.printf("\r\n");
lilac0112_1 9:7f98d4415425 214 //emergency();
lilac0112_1 6:79dc74e4926a 215 }
lilac0112_1 6:79dc74e4926a 216 }
lilac0112_1 7:9b1ac6fbf32c 217 int read_input(int ic, int channel)
lilac0112_1 7:9b1ac6fbf32c 218 {
lilac0112_1 0:2f48b11b154f 219
lilac0112_1 7:9b1ac6fbf32c 220 int command_high = START_BIT | MODE_SINGLE | ((channel & 0x04) >> 2);
lilac0112_1 7:9b1ac6fbf32c 221 int command_low = (channel & 0x03) << 6;
lilac0112_1 0:2f48b11b154f 222
lilac0112_1 7:9b1ac6fbf32c 223 cs[ic] = 0;
lilac0112_1 0:2f48b11b154f 224
lilac0112_1 7:9b1ac6fbf32c 225 ir.write(command_high);
lilac0112_1 7:9b1ac6fbf32c 226 int high_byte = ir.write(command_low) & 0x0F;
lilac0112_1 7:9b1ac6fbf32c 227 int low_byte = ir.write(0);
lilac0112_1 0:2f48b11b154f 228
lilac0112_1 8:a2eadba03040 229
lilac0112_1 8:a2eadba03040 230 wait_us(1);
lilac0112_1 7:9b1ac6fbf32c 231 cs[ic] = 1;
lilac0112_1 0:2f48b11b154f 232
lilac0112_1 7:9b1ac6fbf32c 233 return (high_byte << 8) | low_byte;//0x0000...0xFFFF
lilac0112_1 0:2f48b11b154f 234 }
lilac0112_1 9:7f98d4415425 235 void BubbleSort(uint16_t *data, uint8_t n)
lilac0112_1 9:7f98d4415425 236 {
lilac0112_1 9:7f98d4415425 237 bool flag;
lilac0112_1 9:7f98d4415425 238 uint8_t i;//inclement
lilac0112_1 9:7f98d4415425 239 uint16_t temp;//temporary
lilac0112_1 9:7f98d4415425 240
lilac0112_1 9:7f98d4415425 241 do{
lilac0112_1 9:7f98d4415425 242 flag=0;
lilac0112_1 9:7f98d4415425 243 for (i=0; i<n-1; i++) {
lilac0112_1 9:7f98d4415425 244 if (data[i]>data[i+1]) {
lilac0112_1 9:7f98d4415425 245 /* 左右の並びがおかしければ入れ替える */
lilac0112_1 9:7f98d4415425 246 flag=1;
lilac0112_1 9:7f98d4415425 247 temp=data[i];
lilac0112_1 9:7f98d4415425 248 data[i]=data[i+1];
lilac0112_1 9:7f98d4415425 249 data[i+1]=temp;
lilac0112_1 9:7f98d4415425 250 }
lilac0112_1 9:7f98d4415425 251 }
lilac0112_1 9:7f98d4415425 252 } while (flag==1); /* 入れ替えがある間,繰り返す.*/
lilac0112_1 9:7f98d4415425 253 }
lilac0112_1 0:2f48b11b154f 254 #endif /*IR_SENSOR*/
lilac0112_1 0:2f48b11b154f 255
lilac0112_1 0:2f48b11b154f 256
lilac0112_1 0:2f48b11b154f 257
lilac0112_1 0:2f48b11b154f 258