2 * mbed project: Simple_Square_Wave
3 * mbed board: FRDM-KL46Z
4 * Generate square waves using DigitalOut.
9 #include "serial_irq.h"
12 #define N_ELEM(x) (sizeof(x)/sizeof((x)[0]))
14 // Push-button IRQ handler
18 void Empty_Task(void);
19 void Receive_Event(void);
20 void Generate_Event(void);
23 int START_STOP_FLAG = 0;
24 float period_s = 0.0001;
25 DigitalOut Square_Wave(PTD3); // Used PWM output is PTD3
26 InterruptIn Control_Testing(PTC12); // SW3
36 extern serial_t stdio_uart;
43 { "null", Empty_Task },
44 { "generate", Generate_Event },
45 { "receive", Receive_Event },
51 int main(int arc, char **argv)
53 // Set debug baud rate
54 serial_init(&stdio_uart, USBTX, USBRX);
55 serial_baud(&stdio_uart, 115200);
57 // Setup BBB uart port
58 Sirq_Bbb = sirq_open(SIRQ_UART1, PTE0, PTE1, 115200, 0);
61 Tdma_Mbed1 = tdma_open(TDMA_CHAN2, 3, PTD2, PullUp); // TODO -- Should be on PTC
62 Tdma_Mbed2 = tdma_open(TDMA_CHAN3, 3, PTD3, PullUp); // TODO -- Should be on PTD
65 //msg_register(&parser_bbb, MSG_ID_INIT, (handler_t)serial_handle_init);
68 tdma_start(Tdma_Mbed1);
69 tdma_start(Tdma_Mbed2);
71 // Enable push-button controlling
72 Control_Testing.rise(&Control_T); // Enable getMode interrupt handler
77 // Recieve serial data
78 while (sirq_ready(Sirq_Bbb)) {
79 int byte = sirq_getc(Sirq_Bbb);
80 msg_receive(&Parser_Bbb, byte);
84 task_table[task_index].func();
94 void Receive_Event(void)
97 if (tdma_stamp(Tdma_Mbed1, &event))
98 printf("event received - rcv\r\n");
99 if (tdma_stamp(Tdma_Mbed2, &event))
100 printf("event received - xmt\r\n");
103 void Generate_Event(void)
105 if (START_STOP_FLAG == 1)
107 Square_Wave.write(0);
109 Square_Wave.write(1);
113 Square_Wave.write(0);
116 // Interrupt handlers
119 if(START_STOP_FLAG == 0)
127 Square_Wave.write(0);
130 // Implement task cycling
131 // task_index = (task_index + 1) % N_ELEM(task_table);