RT-USB-9AXIS-00
MainFunction.c
[詳解]
1 
9 #include "LPC13xx.h"
10 #include "core_cm3.h"
11 #include "type.h"
12 
13 #include "timer.h"
14 #include "pwm.h"
15 #include "MainFunction.h"
16 #include "UserInterface.h"
17 #include "uart.h"
18 #include "SystemTickTimer.h"
19 
20 #include "mpu9250.h"
21 #include "debug.h"
22 #include "uart.h"
23 #include "tinyMathFunction.h"
24 #include "usbTransmission.h"
25 #include "EEPROM_24LC16BT_I.h"
26 
27 volatile static uint8_t flag_send_data_enable = 0; //タイマ割り込み関数の中でデータを送信するかのフラグ
28 volatile static uint8_t output_mode = 1; //データを出力する形式
29 volatile static uint32_t time; //起動してからの時間[msec]を格納するための変数
30 
40 {
41  startTimer32_1();
42 }
43 
53 {
54  stopTimer32_1();
55 }
56 
63 void setSendDataEnable(uint8_t en)
64 {
65  flag_send_data_enable = en;
66 }
67 
73 void writeEEPROMOutputMode(uint8_t mode){
74  write1byteEEPROM(1,0,mode);
75 }
76 
82 uint8_t readEEPROMOutputMode(void){
83  return read1byteEEPROM(1,0);
84 }
85 
92 void setOutputMode(uint8_t mode){
93  output_mode = mode;
94 
95  switch(mode){
96  case OUTPUT_MODE_57600_BINARY_9AXIS:
97  UARTInit(57600);
99  break;
100  case OUTPUT_MODE_USB_ASCII_9AXIS:
101  writeEEPROMOutputMode(mode);
102  break;
103  default:
104  output_mode = 0;
105  writeEEPROMOutputMode(OUTPUT_MODE_USB_ASCII_9AXIS);
106  break;
107  }
108 };
109 
118 {
119  GETDAT_T send_data;
120  static uint8_t timestamp;
121  float omega[3];
122  float acc[3];
123  float mag[3];
124  float temp;
125  //static uint32_t time;
126 
127  LPC_TMR32B1->IR=0x08; //clear interrupt flag
128 
129 
130  //myPrintfUSB("time:%d\n",time);
131 
132  time_count_start();
133 
134  //送信データ格納用変数のヘッダ
135  send_data.num = 28;
136  send_data.d[0] = 0xff;
137  send_data.d[1] = 0xff;
138  send_data.d[2] = 0x52;
139  send_data.d[3] = 0x54;
140  send_data.d[4] = 0x39;
141  send_data.d[5] = 0x41;
142  send_data.d[6] = 0x10; // 2016 version
143  send_data.d[7] = timestamp;
144 
145  if(timestamp == 0xff) timestamp = 0;
146  else timestamp++;
147 
148  //9軸センサのデータの更新
151 
152  //9軸センサの観測値を送信用配列に格納
153  getDataFromMPU9250( (uint8_t *)(&send_data.d[8]) );
154  getDataFromAK8963( (uint8_t *)(&send_data.d[22]) );
155 
156  //100Hzの周期でデータを送る
157  getOmega(&omega[0]);
158  getMag(&mag[0]);
159  getAcc(&acc[0]);
160  getTemp(&temp);
161 
162 
163  if(flag_send_data_enable == 1 )
164  {
165 
166  //UART経由でデータを送信
167  switch(output_mode){
168  case OUTPUT_MODE_57600_BINARY_9AXIS:
169  LPC_UART->IER = IER_THRE | IER_RLS; // Disable RBR
170  UARTSend(&send_data.d[0], send_data.num);
171  LPC_UART->IER = IER_THRE | IER_RLS | IER_RBR; // Re-enable RBR
172  break;
173  case OUTPUT_MODE_USB_ASCII_9AXIS:
174 
175  break;
176  }
177 
178  }
179 
180  if(isUSBConfig() == 1 && flag_send_data_enable == 1 ) //USB接続確立時
181  {
182  switch(output_mode){
183  case OUTPUT_MODE_57600_BINARY_9AXIS:
184  //USB経由でデータを送信
185  VCOM_SendData(send_data);
186  break;
187  case OUTPUT_MODE_USB_ASCII_9AXIS:
188 
189  myPrintfUSB("%d,%f,%f,%f,",timestamp,omega[0],omega[1],omega[2]);
190  myPrintfUSB("%f,%f,%f,", acc[0],acc[1],acc[2]);
191  myPrintfUSB("%f,%f,%f,%f\n",mag[0],mag[1],mag[2],temp);
192 
193 
194  break;
195  }
196  }
197  //time = time_count_end();
198 
199 }
200 
201 /******************************************************************************
202 ** End Of File
203 ******************************************************************************/
void TIMER32_1_IRQHandler(void)
Definition: MainFunction.c:117
uint8_t readEEPROMOutputMode(void)
Definition: MainFunction.c:82
void stopTimerInterruptMainFunction(void)
Definition: MainFunction.c:52
void setOutputMode(uint8_t mode)
Definition: MainFunction.c:92
void startTimerInterruptMainFunction(void)
Definition: MainFunction.c:39
CMSIS Cortex-M3 Core Peripheral Access Layer Header File.
void getDataFromMPU9250(uint8_t *dest_array)
Definition: mpu9250.c:370
LED,SW,電源電圧の監視等の機能の実装
void updateMPU9250Data(void)
Definition: mpu9250.c:195
void getAcc(float *vec)
Definition: mpu9250.c:481
void getOmega(float *vec)
Definition: mpu9250.c:457
void writeEEPROMOutputMode(uint8_t mode)
Definition: MainFunction.c:73
void getMag(float *vec)
Definition: mpu9250.c:469
void getDataFromAK8963(uint8_t *dest_array)
Definition: mpu9250.c:393
void updateAK8963Data()
Definition: mpu9250.c:285
void getTemp(float *temp)
Definition: mpu9250.c:493
void setSendDataEnable(uint8_t en)
Definition: MainFunction.c:63