test code

Dependencies:   mbed-rtos mbed

Fork of FRDM_serial_pc_board_pass_through by felipe manrique

Committer:
subtask
Date:
Thu May 01 02:07:51 2014 +0000
Revision:
1:4d30bb984196
Parent:
0:bab6dd4a9c11
test code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
felipeM 0:bab6dd4a9c11 1 #include "mbed.h"
subtask 1:4d30bb984196 2 #include "rtos.h"
felipeM 0:bab6dd4a9c11 3
felipeM 0:bab6dd4a9c11 4 Serial pc(USBTX, USBRX);
felipeM 0:bab6dd4a9c11 5 //TX RX pins, see https://mbed.org/handbook/mbed-FRDM-KL25Z
subtask 1:4d30bb984196 6 Serial uart(p9, p10);
felipeM 0:bab6dd4a9c11 7 //to test is you can use a hard bridge (piece of cable) between PTC4 and PTC3 open a terminal and write something :)
felipeM 0:bab6dd4a9c11 8 //you can integrate this to improve some interesting aplicattions like this:
felipeM 0:bab6dd4a9c11 9 //http://www.instructables.com/id/Temperature-sensor--weatherstation/http://www.instructables.com/id/Temperature-sensor--weatherstation/
felipeM 0:bab6dd4a9c11 10 DigitalOut pc_activity(LED1);
felipeM 0:bab6dd4a9c11 11 DigitalOut uart_activity(LED2);
subtask 1:4d30bb984196 12 DigitalIn receive(p10);
subtask 1:4d30bb984196 13
subtask 1:4d30bb984196 14 Timer t;
subtask 1:4d30bb984196 15 int state = 0;
subtask 1:4d30bb984196 16 int period = 0;
subtask 1:4d30bb984196 17 int baud_rate = 0;
felipeM 0:bab6dd4a9c11 18
subtask 1:4d30bb984196 19 void baud_thread(void const *args) {
subtask 1:4d30bb984196 20 while (true) {
subtask 1:4d30bb984196 21 uart.putc(0x55);
subtask 1:4d30bb984196 22 Thread::wait(1000);
subtask 1:4d30bb984196 23 if (period)
subtask 1:4d30bb984196 24 pc.printf("baud rate %d ", baud_rate);
subtask 1:4d30bb984196 25 }
subtask 1:4d30bb984196 26 }
subtask 1:4d30bb984196 27
subtask 1:4d30bb984196 28 void get_rate(int *baud_rate) {
subtask 1:4d30bb984196 29 if (*baud_rate > 90000 && *baud_rate < (int)(125200))
subtask 1:4d30bb984196 30 *baud_rate = 115200;
subtask 1:4d30bb984196 31 else if (*baud_rate > (int)0.9*9600 && *baud_rate < (int)1.1*9600)
subtask 1:4d30bb984196 32 *baud_rate = 9600;
subtask 1:4d30bb984196 33 else
subtask 1:4d30bb984196 34 *baud_rate = 0;
subtask 1:4d30bb984196 35 }
subtask 1:4d30bb984196 36
subtask 1:4d30bb984196 37
felipeM 0:bab6dd4a9c11 38 int main() {
subtask 1:4d30bb984196 39
subtask 1:4d30bb984196 40 int stop = 0;
subtask 1:4d30bb984196 41 int counter = 0;
subtask 1:4d30bb984196 42 uart.baud(115200);
subtask 1:4d30bb984196 43 Thread thread(baud_thread);
subtask 1:4d30bb984196 44
subtask 1:4d30bb984196 45 pc.printf("started \n");
felipeM 0:bab6dd4a9c11 46 while(1) {
subtask 1:4d30bb984196 47 if (state == 0)
subtask 1:4d30bb984196 48 if(receive) {
subtask 1:4d30bb984196 49 state = 1;
subtask 1:4d30bb984196 50 }
subtask 1:4d30bb984196 51
subtask 1:4d30bb984196 52 if (state == 1)
subtask 1:4d30bb984196 53 if(!receive) {
subtask 1:4d30bb984196 54 t.start();
subtask 1:4d30bb984196 55 state = 2;
subtask 1:4d30bb984196 56 }
subtask 1:4d30bb984196 57
subtask 1:4d30bb984196 58 if (state == 2)
subtask 1:4d30bb984196 59 if(receive) {
subtask 1:4d30bb984196 60 t.stop();
subtask 1:4d30bb984196 61 period = t.read_us();
subtask 1:4d30bb984196 62 baud_rate = (int)(1.0/((float)t.read_us()/1000000.0));
subtask 1:4d30bb984196 63 get_rate(&baud_rate);
subtask 1:4d30bb984196 64 uart.putc(0xAA);
subtask 1:4d30bb984196 65 t.reset();
subtask 1:4d30bb984196 66 state = 0;
subtask 1:4d30bb984196 67 }
subtask 1:4d30bb984196 68
felipeM 0:bab6dd4a9c11 69 if(pc.readable()) {
felipeM 0:bab6dd4a9c11 70 uart.putc(pc.getc());
felipeM 0:bab6dd4a9c11 71 pc_activity = !pc_activity;
felipeM 0:bab6dd4a9c11 72 }
subtask 1:4d30bb984196 73
felipeM 0:bab6dd4a9c11 74 if(uart.readable()) {
felipeM 0:bab6dd4a9c11 75 pc.putc(uart.getc());
felipeM 0:bab6dd4a9c11 76 uart_activity = !uart_activity;
felipeM 0:bab6dd4a9c11 77 }
felipeM 0:bab6dd4a9c11 78 }
felipeM 0:bab6dd4a9c11 79 }