use mbed-src latest version and everything works well. RTC is also fine.
Dependencies: L3GD20 LIS3DH TextLCD mbed-rtos mbed
Use standard library mbed & mbed-rtos (GR-PEACH can run without mbed-src and special mbed-rtos).
main.cpp@5:dccdaaa1e57b, 2015-01-08 (annotated)
- Committer:
- kenjiArai
- Date:
- Thu Jan 08 13:03:16 2015 +0000
- Revision:
- 5:dccdaaa1e57b
- Parent:
- 4:76b3113c79ff
- Child:
- 6:f14cce59e7fe
modified more simple way
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 1:a399a743d109 | 1 | /* |
kenjiArai | 1:a399a743d109 | 2 | * mbed Application program for the mbed |
kenjiArai | 1:a399a743d109 | 3 | * Test program for GR-PEACH |
kenjiArai | 1:a399a743d109 | 4 | * |
kenjiArai | 1:a399a743d109 | 5 | * Copyright (c) 2014 Kenji Arai / JH1PJL |
kenjiArai | 1:a399a743d109 | 6 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 1:a399a743d109 | 7 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 1:a399a743d109 | 8 | * Created: November 29th, 2014 |
kenjiArai | 5:dccdaaa1e57b | 9 | * Revised: January 7th, 2015 |
kenjiArai | 1:a399a743d109 | 10 | * |
kenjiArai | 1:a399a743d109 | 11 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 1:a399a743d109 | 12 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 1:a399a743d109 | 13 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 1:a399a743d109 | 14 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 1:a399a743d109 | 15 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 1:a399a743d109 | 16 | */ |
kenjiArai | 1:a399a743d109 | 17 | |
kenjiArai | 4:76b3113c79ff | 18 | // Include --------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 19 | #include "mbed.h" |
kenjiArai | 4:76b3113c79ff | 20 | #include "rtos.h" |
kenjiArai | 4:76b3113c79ff | 21 | #include "L3GD20.h" |
kenjiArai | 4:76b3113c79ff | 22 | #include "LIS3DH.h" |
kenjiArai | 5:dccdaaa1e57b | 23 | #include "TextLCD.h" |
kenjiArai | 4:76b3113c79ff | 24 | #include "ST7565_SPI_LCD.h" |
kenjiArai | 2:3747397a1618 | 25 | |
kenjiArai | 4:76b3113c79ff | 26 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 4:76b3113c79ff | 27 | #define USE_COM // use Communication with PC(UART) |
kenjiArai | 5:dccdaaa1e57b | 28 | #define USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 29 | #define USE_I2C_SENSOR |
kenjiArai | 4:76b3113c79ff | 30 | |
kenjiArai | 4:76b3113c79ff | 31 | // Com |
kenjiArai | 4:76b3113c79ff | 32 | #ifdef USE_COM |
kenjiArai | 4:76b3113c79ff | 33 | #define BAUD(x) pcx.baud(x) |
kenjiArai | 4:76b3113c79ff | 34 | #define GETC(x) pcx.getc(x) |
kenjiArai | 4:76b3113c79ff | 35 | #define PUTC(x) pcx.putc(x) |
kenjiArai | 4:76b3113c79ff | 36 | #define PRINTF(...) pcx.printf(__VA_ARGS__) |
kenjiArai | 4:76b3113c79ff | 37 | #define READABLE(x) pcx.readable(x) |
kenjiArai | 4:76b3113c79ff | 38 | #else |
kenjiArai | 4:76b3113c79ff | 39 | #define BAUD(x) {;} |
kenjiArai | 4:76b3113c79ff | 40 | #define GETC(x) {;} |
kenjiArai | 4:76b3113c79ff | 41 | #define PUTC(x) {;} |
kenjiArai | 4:76b3113c79ff | 42 | #define PRINTF(...) {;} |
kenjiArai | 4:76b3113c79ff | 43 | #define READABLE(x) {;} |
kenjiArai | 0:a17b3cf2f466 | 44 | #endif |
kenjiArai | 0:a17b3cf2f466 | 45 | |
kenjiArai | 4:76b3113c79ff | 46 | #define TIMEBASE 12000 |
kenjiArai | 4:76b3113c79ff | 47 | #define FIXED_STEPS 100 |
kenjiArai | 4:76b3113c79ff | 48 | |
kenjiArai | 4:76b3113c79ff | 49 | #define PI 3.1415926536 |
kenjiArai | 4:76b3113c79ff | 50 | #define RAD_TO_DEG 57.29578 |
kenjiArai | 5:dccdaaa1e57b | 51 | #define TIME_BASE_S 0.02 |
kenjiArai | 4:76b3113c79ff | 52 | #define TIME_BASE_MS ( TIME_BASE_S * 1000) |
kenjiArai | 4:76b3113c79ff | 53 | #define RATE 0.1 |
kenjiArai | 4:76b3113c79ff | 54 | |
kenjiArai | 4:76b3113c79ff | 55 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 56 | // LED's |
kenjiArai | 4:76b3113c79ff | 57 | DigitalOut LEDs[4] = { |
kenjiArai | 4:76b3113c79ff | 58 | DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4) |
kenjiArai | 4:76b3113c79ff | 59 | }; |
kenjiArai | 4:76b3113c79ff | 60 | // Swiches |
kenjiArai | 4:76b3113c79ff | 61 | DigitalIn USER_SWITCH[2] = { |
kenjiArai | 5:dccdaaa1e57b | 62 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 4:76b3113c79ff | 63 | DigitalIn(P6_0), DigitalIn(P6_1) |
kenjiArai | 5:dccdaaa1e57b | 64 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F401RE) |
kenjiArai | 4:76b3113c79ff | 65 | DigitalIn(PC_13), DigitalIn(A0) |
kenjiArai | 5:dccdaaa1e57b | 66 | #endif |
kenjiArai | 4:76b3113c79ff | 67 | }; |
kenjiArai | 5:dccdaaa1e57b | 68 | |
kenjiArai | 5:dccdaaa1e57b | 69 | // OS check |
kenjiArai | 5:dccdaaa1e57b | 70 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 71 | DigitalOut task0(P1_8); |
kenjiArai | 5:dccdaaa1e57b | 72 | DigitalOut task1(P1_9); |
kenjiArai | 5:dccdaaa1e57b | 73 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F401RE) |
kenjiArai | 5:dccdaaa1e57b | 74 | DigitalOut task0(A0); |
kenjiArai | 5:dccdaaa1e57b | 75 | DigitalOut task1(A1); |
kenjiArai | 5:dccdaaa1e57b | 76 | #endif |
kenjiArai | 5:dccdaaa1e57b | 77 | |
kenjiArai | 4:76b3113c79ff | 78 | // com |
kenjiArai | 4:76b3113c79ff | 79 | #ifdef USE_COM |
kenjiArai | 4:76b3113c79ff | 80 | Serial pcx(USBTX, USBRX); // Communication with Host |
kenjiArai | 4:76b3113c79ff | 81 | #endif |
kenjiArai | 4:76b3113c79ff | 82 | I2C i2c(D14,D15); |
kenjiArai | 4:76b3113c79ff | 83 | // Gyro |
kenjiArai | 4:76b3113c79ff | 84 | L3GX_GYRO gyro(i2c, L3GD20_V_CHIP_ADDR, L3GX_DR_95HZ, L3GX_BW_HI, L3GX_FS_250DPS); |
kenjiArai | 4:76b3113c79ff | 85 | // Acc |
kenjiArai | 4:76b3113c79ff | 86 | LIS3DH acc(i2c, LIS3DH_G_CHIP_ADDR, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G); |
kenjiArai | 5:dccdaaa1e57b | 87 | #ifdef USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 88 | // LCD |
kenjiArai | 5:dccdaaa1e57b | 89 | TextLCD_I2C_N lcd0(&i2c, 0x7c, TextLCD::LCD16x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 5:dccdaaa1e57b | 90 | #endif |
kenjiArai | 4:76b3113c79ff | 91 | // SPI LCD |
kenjiArai | 4:76b3113c79ff | 92 | SPI spi_lcd(D11, D12, D13); // mosi, miso, sck |
kenjiArai | 4:76b3113c79ff | 93 | ST7565 lcd1(spi_lcd, D8, D9, D7, ST7565::AQM1248A); // spi,reset,a0,ncs, LCD(Akizuki AQM1248A) |
kenjiArai | 4:76b3113c79ff | 94 | // Mutex |
kenjiArai | 4:76b3113c79ff | 95 | Mutex i2c_mutex; |
kenjiArai | 0:a17b3cf2f466 | 96 | |
kenjiArai | 4:76b3113c79ff | 97 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 98 | Queue<uint32_t, 2> queue0; |
kenjiArai | 4:76b3113c79ff | 99 | float fa[3]; // Acc 0:X, 1:Y, 2:Z |
kenjiArai | 4:76b3113c79ff | 100 | float fg[3]; // Gyro 0:X, 1:Y, 2:Z |
kenjiArai | 4:76b3113c79ff | 101 | |
kenjiArai | 4:76b3113c79ff | 102 | /* Mail */ |
kenjiArai | 4:76b3113c79ff | 103 | typedef struct { |
kenjiArai | 4:76b3113c79ff | 104 | float voltage; /* AD result of measured voltage */ |
kenjiArai | 4:76b3113c79ff | 105 | float current; /* AD result of measured current */ |
kenjiArai | 4:76b3113c79ff | 106 | uint32_t counter; /* A counter value */ |
kenjiArai | 4:76b3113c79ff | 107 | } mail_t; |
kenjiArai | 4:76b3113c79ff | 108 | |
kenjiArai | 4:76b3113c79ff | 109 | Mail<mail_t, 16> mail_box; |
kenjiArai | 4:76b3113c79ff | 110 | |
kenjiArai | 4:76b3113c79ff | 111 | uint8_t show_flag; |
kenjiArai | 5:dccdaaa1e57b | 112 | uint32_t count; |
kenjiArai | 5:dccdaaa1e57b | 113 | |
kenjiArai | 5:dccdaaa1e57b | 114 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 115 | uint8_t big_data[4096*1024]; |
kenjiArai | 5:dccdaaa1e57b | 116 | uint32_t big_data_index = 0; |
kenjiArai | 5:dccdaaa1e57b | 117 | #endif |
kenjiArai | 4:76b3113c79ff | 118 | |
kenjiArai | 4:76b3113c79ff | 119 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 120 | |
kenjiArai | 4:76b3113c79ff | 121 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 122 | |
kenjiArai | 4:76b3113c79ff | 123 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 124 | extern int mon( void); |
kenjiArai | 4:76b3113c79ff | 125 | |
kenjiArai | 4:76b3113c79ff | 126 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 127 | // Control Program |
kenjiArai | 4:76b3113c79ff | 128 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 129 | void send_thread (void const *args) { |
kenjiArai | 4:76b3113c79ff | 130 | uint32_t i = 0; |
kenjiArai | 4:76b3113c79ff | 131 | while (true) { |
kenjiArai | 4:76b3113c79ff | 132 | i++; // fake data update |
kenjiArai | 4:76b3113c79ff | 133 | mail_t *mail = mail_box.alloc(); |
kenjiArai | 4:76b3113c79ff | 134 | mail->voltage = (i * 0.1) * 33; |
kenjiArai | 4:76b3113c79ff | 135 | mail->current = (i * 0.1) * 11; |
kenjiArai | 4:76b3113c79ff | 136 | mail->counter = i; |
kenjiArai | 4:76b3113c79ff | 137 | mail_box.put(mail); |
kenjiArai | 4:76b3113c79ff | 138 | Thread::wait(1000); |
kenjiArai | 4:76b3113c79ff | 139 | } |
kenjiArai | 4:76b3113c79ff | 140 | } |
kenjiArai | 4:76b3113c79ff | 141 | |
kenjiArai | 4:76b3113c79ff | 142 | void blink(void const *n) { |
kenjiArai | 4:76b3113c79ff | 143 | LEDs[(int)n] = !LEDs[(int)n]; |
kenjiArai | 4:76b3113c79ff | 144 | } |
kenjiArai | 4:76b3113c79ff | 145 | |
kenjiArai | 4:76b3113c79ff | 146 | // Read switch status |
kenjiArai | 4:76b3113c79ff | 147 | int read_sw(uint8_t n){ |
kenjiArai | 4:76b3113c79ff | 148 | if (USER_SWITCH[n] == 0){ return 1; |
kenjiArai | 4:76b3113c79ff | 149 | } else { return 0;} |
kenjiArai | 4:76b3113c79ff | 150 | } |
kenjiArai | 4:76b3113c79ff | 151 | |
kenjiArai | 4:76b3113c79ff | 152 | // Monitor program |
kenjiArai | 4:76b3113c79ff | 153 | void monitor(void const *args){ |
kenjiArai | 5:dccdaaa1e57b | 154 | Thread::wait(1000); |
kenjiArai | 4:76b3113c79ff | 155 | while (true){ |
kenjiArai | 4:76b3113c79ff | 156 | mon(); |
kenjiArai | 0:a17b3cf2f466 | 157 | } |
kenjiArai | 0:a17b3cf2f466 | 158 | } |
kenjiArai | 4:76b3113c79ff | 159 | |
kenjiArai | 4:76b3113c79ff | 160 | // Interrupt routine |
kenjiArai | 4:76b3113c79ff | 161 | void queue_isr0() { |
kenjiArai | 4:76b3113c79ff | 162 | queue0.put((uint32_t*)1); |
kenjiArai | 4:76b3113c79ff | 163 | } |
kenjiArai | 4:76b3113c79ff | 164 | |
kenjiArai | 4:76b3113c79ff | 165 | // Update sensor data |
kenjiArai | 4:76b3113c79ff | 166 | void update_angle(void const *args){ |
kenjiArai | 4:76b3113c79ff | 167 | while (true) { |
kenjiArai | 4:76b3113c79ff | 168 | osEvent evt = queue0.get(); |
kenjiArai | 4:76b3113c79ff | 169 | // ---->lock |
kenjiArai | 4:76b3113c79ff | 170 | i2c_mutex.lock(); |
kenjiArai | 5:dccdaaa1e57b | 171 | #ifdef USE_I2C_SENSOR |
kenjiArai | 4:76b3113c79ff | 172 | // read acceleration data from sensor |
kenjiArai | 4:76b3113c79ff | 173 | acc.read_data(fa); |
kenjiArai | 4:76b3113c79ff | 174 | // read gyroscope data from sensor |
kenjiArai | 4:76b3113c79ff | 175 | gyro.read_data(fg); |
kenjiArai | 5:dccdaaa1e57b | 176 | #else |
kenjiArai | 5:dccdaaa1e57b | 177 | fa[0] = fa[1] = fa[2] = 1.11f; |
kenjiArai | 5:dccdaaa1e57b | 178 | fg[0] = fg[1] = fg[2] = 1.11f; |
kenjiArai | 5:dccdaaa1e57b | 179 | #endif |
kenjiArai | 4:76b3113c79ff | 180 | // <----unlock |
kenjiArai | 4:76b3113c79ff | 181 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 182 | // debug |
kenjiArai | 5:dccdaaa1e57b | 183 | task0 = !task0; |
kenjiArai | 4:76b3113c79ff | 184 | } |
kenjiArai | 4:76b3113c79ff | 185 | } |
kenjiArai | 4:76b3113c79ff | 186 | |
kenjiArai | 4:76b3113c79ff | 187 | // Update sensor data |
kenjiArai | 4:76b3113c79ff | 188 | void display(void const *args){ |
kenjiArai | 5:dccdaaa1e57b | 189 | uint32_t n = 0; |
kenjiArai | 5:dccdaaa1e57b | 190 | |
kenjiArai | 4:76b3113c79ff | 191 | lcd1.cls(); |
kenjiArai | 4:76b3113c79ff | 192 | while (true) { |
kenjiArai | 5:dccdaaa1e57b | 193 | #ifdef USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 194 | i2c_mutex.lock(); |
kenjiArai | 5:dccdaaa1e57b | 195 | lcd0.locate(0, 0); // 1st line top |
kenjiArai | 5:dccdaaa1e57b | 196 | lcd0.printf("G=%7.1f ", sqrt(fa[0]*fa[0] + fa[1]*fa[1] + fa[2]*fa[2])); |
kenjiArai | 5:dccdaaa1e57b | 197 | lcd0.locate(0, 1); // 2nd line top |
kenjiArai | 5:dccdaaa1e57b | 198 | lcd0.printf("%8d",n); |
kenjiArai | 5:dccdaaa1e57b | 199 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 200 | #endif |
kenjiArai | 5:dccdaaa1e57b | 201 | lcd1.locate(0,0); |
kenjiArai | 5:dccdaaa1e57b | 202 | lcd1.printf("G:%+6.1f,%+6.1f,%+6.1f \r\n", fg[0], fg[1], fg[2]); |
kenjiArai | 5:dccdaaa1e57b | 203 | lcd1.printf("A:%+6.1f,%+6.1f,%+6.1f \r\n", fa[0], fa[1], fa[2]); |
kenjiArai | 5:dccdaaa1e57b | 204 | lcd1.printf("%d\r\n", n++); |
kenjiArai | 4:76b3113c79ff | 205 | Thread::wait(500); |
kenjiArai | 5:dccdaaa1e57b | 206 | // debug |
kenjiArai | 5:dccdaaa1e57b | 207 | task1 = !task1; |
kenjiArai | 4:76b3113c79ff | 208 | } |
kenjiArai | 4:76b3113c79ff | 209 | } |
kenjiArai | 4:76b3113c79ff | 210 | |
kenjiArai | 4:76b3113c79ff | 211 | // Thread definition |
kenjiArai | 5:dccdaaa1e57b | 212 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 213 | osThreadDef(update_angle, osPriorityNormal, 2048); |
kenjiArai | 5:dccdaaa1e57b | 214 | osThreadDef(monitor, osPriorityNormal, 2048); |
kenjiArai | 5:dccdaaa1e57b | 215 | osThreadDef(display, osPriorityAboveNormal, 2048); |
kenjiArai | 5:dccdaaa1e57b | 216 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F401RE) |
kenjiArai | 5:dccdaaa1e57b | 217 | osThreadDef(update_angle, osPriorityNormal, 1024); |
kenjiArai | 5:dccdaaa1e57b | 218 | osThreadDef(monitor, osPriorityNormal, 1024); |
kenjiArai | 5:dccdaaa1e57b | 219 | osThreadDef(display, osPriorityAboveNormal, 1024); |
kenjiArai | 5:dccdaaa1e57b | 220 | #endif |
kenjiArai | 4:76b3113c79ff | 221 | |
kenjiArai | 4:76b3113c79ff | 222 | int main(void) { |
kenjiArai | 5:dccdaaa1e57b | 223 | PRINTF("\r\nstep1\r\n"); |
kenjiArai | 4:76b3113c79ff | 224 | |
kenjiArai | 4:76b3113c79ff | 225 | RtosTimer led_1_timer(blink, osTimerPeriodic, (void *)0); |
kenjiArai | 4:76b3113c79ff | 226 | RtosTimer led_2_timer(blink, osTimerPeriodic, (void *)1); |
kenjiArai | 4:76b3113c79ff | 227 | RtosTimer led_3_timer(blink, osTimerPeriodic, (void *)2); |
kenjiArai | 4:76b3113c79ff | 228 | RtosTimer led_4_timer(blink, osTimerPeriodic, (void *)3); |
kenjiArai | 4:76b3113c79ff | 229 | |
kenjiArai | 4:76b3113c79ff | 230 | PRINTF("step2\r\n"); |
kenjiArai | 4:76b3113c79ff | 231 | led_1_timer.start(2000); |
kenjiArai | 4:76b3113c79ff | 232 | led_2_timer.start(1000); |
kenjiArai | 4:76b3113c79ff | 233 | led_3_timer.start(500); |
kenjiArai | 4:76b3113c79ff | 234 | led_4_timer.start(250); |
kenjiArai | 4:76b3113c79ff | 235 | |
kenjiArai | 4:76b3113c79ff | 236 | PRINTF("step3\r\n"); |
kenjiArai | 4:76b3113c79ff | 237 | Thread thread(send_thread); |
kenjiArai | 4:76b3113c79ff | 238 | |
kenjiArai | 4:76b3113c79ff | 239 | PRINTF("step4\r\n"); |
kenjiArai | 4:76b3113c79ff | 240 | |
kenjiArai | 4:76b3113c79ff | 241 | // IRQ |
kenjiArai | 4:76b3113c79ff | 242 | Ticker ticker0; |
kenjiArai | 4:76b3113c79ff | 243 | Ticker ticker1; |
kenjiArai | 4:76b3113c79ff | 244 | ticker0.attach(queue_isr0, TIME_BASE_S); |
kenjiArai | 4:76b3113c79ff | 245 | |
kenjiArai | 4:76b3113c79ff | 246 | PRINTF("step5\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 247 | // Starts threads |
kenjiArai | 5:dccdaaa1e57b | 248 | if (osThreadCreate(osThread(display), NULL) == NULL){ |
kenjiArai | 5:dccdaaa1e57b | 249 | PRINTF("ERROR4\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 250 | } |
kenjiArai | 5:dccdaaa1e57b | 251 | if (osThreadCreate(osThread(monitor), NULL) == NULL){ |
kenjiArai | 5:dccdaaa1e57b | 252 | PRINTF("ERROR3\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 253 | } |
kenjiArai | 5:dccdaaa1e57b | 254 | if (osThreadCreate(osThread(update_angle), NULL) == NULL){ |
kenjiArai | 5:dccdaaa1e57b | 255 | PRINTF("ERROR1\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 256 | } |
kenjiArai | 4:76b3113c79ff | 257 | |
kenjiArai | 5:dccdaaa1e57b | 258 | // SPI LCD |
kenjiArai | 5:dccdaaa1e57b | 259 | spi_lcd.frequency(100000); |
kenjiArai | 5:dccdaaa1e57b | 260 | lcd1.cls(); |
kenjiArai | 5:dccdaaa1e57b | 261 | lcd1.set_contrast(0x2a); |
kenjiArai | 5:dccdaaa1e57b | 262 | lcd1.printf("test\r\n" ); |
kenjiArai | 5:dccdaaa1e57b | 263 | lcd1.printf("Kenji Arai / JH1PJL\r\n" ); |
kenjiArai | 5:dccdaaa1e57b | 264 | lcd1.printf("ABCDEFG 1234567890\r\n" ); |
kenjiArai | 5:dccdaaa1e57b | 265 | lcd1.rect(5,30,120,62,1); |
kenjiArai | 5:dccdaaa1e57b | 266 | lcd1.circle(5,35,5,1); |
kenjiArai | 5:dccdaaa1e57b | 267 | lcd1.fillcircle(60,55,5,1); |
kenjiArai | 5:dccdaaa1e57b | 268 | lcd1.line(0,30,127,63,1); |
kenjiArai | 5:dccdaaa1e57b | 269 | // I2C LCD |
kenjiArai | 5:dccdaaa1e57b | 270 | #ifdef USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 271 | // ---->lock |
kenjiArai | 5:dccdaaa1e57b | 272 | i2c_mutex.lock(); |
kenjiArai | 5:dccdaaa1e57b | 273 | lcd0.locate(0, 0); // 1st line top |
kenjiArai | 5:dccdaaa1e57b | 274 | lcd0.printf("I2C test"); |
kenjiArai | 5:dccdaaa1e57b | 275 | lcd0.locate(0, 1); // 2nd line top |
kenjiArai | 5:dccdaaa1e57b | 276 | lcd0.puts(" JH1PJL "); |
kenjiArai | 5:dccdaaa1e57b | 277 | lcd0.setContrast(0x14); |
kenjiArai | 5:dccdaaa1e57b | 278 | // <----unlock |
kenjiArai | 5:dccdaaa1e57b | 279 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 280 | #endif |
kenjiArai | 5:dccdaaa1e57b | 281 | count = 0; |
kenjiArai | 4:76b3113c79ff | 282 | PRINTF("step6\r\n"); |
kenjiArai | 4:76b3113c79ff | 283 | while (true) { |
kenjiArai | 4:76b3113c79ff | 284 | osEvent evt = mail_box.get(); |
kenjiArai | 4:76b3113c79ff | 285 | if (evt.status == osEventMail) { |
kenjiArai | 4:76b3113c79ff | 286 | mail_t *mail = (mail_t*)evt.value.p; |
kenjiArai | 4:76b3113c79ff | 287 | if (show_flag){ |
kenjiArai | 4:76b3113c79ff | 288 | PRINTF("This is dummy!, "); |
kenjiArai | 4:76b3113c79ff | 289 | PRINTF("Volt: %.2f V, " , mail->voltage); |
kenjiArai | 4:76b3113c79ff | 290 | PRINTF("Current: %.2f A, " , mail->current); |
kenjiArai | 4:76b3113c79ff | 291 | PRINTF("# of cycles: %u\r\n", mail->counter); |
kenjiArai | 4:76b3113c79ff | 292 | } |
kenjiArai | 4:76b3113c79ff | 293 | mail_box.free(mail); |
kenjiArai | 4:76b3113c79ff | 294 | } |
kenjiArai | 5:dccdaaa1e57b | 295 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 296 | for (uint32_t i = 0; i < 100; i++){ |
kenjiArai | 5:dccdaaa1e57b | 297 | big_data[big_data_index] = ++big_data_index; |
kenjiArai | 5:dccdaaa1e57b | 298 | if (big_data_index == (4096 * 1024)){ |
kenjiArai | 5:dccdaaa1e57b | 299 | big_data_index = 0; |
kenjiArai | 5:dccdaaa1e57b | 300 | } |
kenjiArai | 5:dccdaaa1e57b | 301 | } |
kenjiArai | 5:dccdaaa1e57b | 302 | #endif |
kenjiArai | 4:76b3113c79ff | 303 | } |
kenjiArai | 4:76b3113c79ff | 304 | } |
kenjiArai | 5:dccdaaa1e57b | 305 | |
kenjiArai | 5:dccdaaa1e57b | 306 | void mbed_die(void) { |
kenjiArai | 5:dccdaaa1e57b | 307 | PRINTF("Error, came from os_error()!\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 308 | gpio_t led_1; gpio_init_out(&led_1, LED1); |
kenjiArai | 5:dccdaaa1e57b | 309 | gpio_t led_2; gpio_init_out(&led_2, LED2); |
kenjiArai | 5:dccdaaa1e57b | 310 | gpio_t led_3; gpio_init_out(&led_3, LED3); |
kenjiArai | 5:dccdaaa1e57b | 311 | gpio_t led_4; gpio_init_out(&led_4, LED4); |
kenjiArai | 5:dccdaaa1e57b | 312 | |
kenjiArai | 5:dccdaaa1e57b | 313 | while (1) { |
kenjiArai | 5:dccdaaa1e57b | 314 | gpio_write(&led_1, 1); |
kenjiArai | 5:dccdaaa1e57b | 315 | gpio_write(&led_2, 0); |
kenjiArai | 5:dccdaaa1e57b | 316 | gpio_write(&led_3, 0); |
kenjiArai | 5:dccdaaa1e57b | 317 | gpio_write(&led_4, 1); |
kenjiArai | 5:dccdaaa1e57b | 318 | wait_ms(100); |
kenjiArai | 5:dccdaaa1e57b | 319 | gpio_write(&led_1, 0); |
kenjiArai | 5:dccdaaa1e57b | 320 | gpio_write(&led_2, 1); |
kenjiArai | 5:dccdaaa1e57b | 321 | gpio_write(&led_3, 1); |
kenjiArai | 5:dccdaaa1e57b | 322 | gpio_write(&led_4, 0); |
kenjiArai | 5:dccdaaa1e57b | 323 | wait_ms(100); |
kenjiArai | 5:dccdaaa1e57b | 324 | } |
kenjiArai | 5:dccdaaa1e57b | 325 | } |