test_code / Mbed 2 deprecated nucleo_test_soft_serial

Dependencies:   mbed

Fork of nucleo_test_soft_serial by Eric Nativel

Files at this revision

API Documentation at this revision

Comitter:
eric11fr
Date:
Fri Mar 05 09:35:03 2021 +0000
Parent:
0:a563059f0473
Commit message:
a tester

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
soft_uart.cpp Show annotated file Show diff for this revision Revisions of this file
soft_uart.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sun May 10 21:31:58 2020 +0000
+++ b/main.cpp	Fri Mar 05 09:35:03 2021 +0000
@@ -1,279 +1,31 @@
 #include "mbed.h"
- 
-// UART.C
-//
-// Generic software uart written in C, requiring a timer set to 3 times
-// the baud rate, and two software read/write pins for the receive and
-// transmit functions.
-//
-// * Received characters are buffered
-// * putchar(), getchar(), kbhit() and flush_input_buffer() are available
-// * There is a facility for background processing while waiting for input
-//
-// Colin Gittins, Software Engineer, Halliburton Energy Services
-//
-// The baud rate can be configured by changing the BAUD_RATE macro as
-// follows:
-//
-// #define BAUD_RATE            19200.0
-//
-// The function init_uart() must be called before any comms can take place
-//
-// Interface routines required:
-// 1. get_rx_pin_status()
-//    Returns 0 or 1 dependent on whether the receive pin is high or low.
-// 2. set_tx_pin_high()
-//    Sets the transmit pin to the high state.
-// 3. set_tx_pin_low()
-//    Sets the transmit pin to the low state.
-// 4. idle()
-//    Background functions to execute while waiting for input.
-// 5. timer_set( BAUD_RATE )
-//    Sets the timer to 3 times the baud rate.
-// 6. set_timer_interrupt( timer_isr )
-//    Enables the timer interrupt.
-//
-// Functions provided:
-// 1. void flush_input_buffer( void )
-//    Clears the contents of the input buffer.
-// 2. char kbhit( void )
-//    Tests whether an input character has been received.
-// 3. char getchar( void )
-//    Reads a character from the input buffer, waiting if necessary.
-// 4. void turn_rx_on( void )
-//    Turns on the receive function.
-// 5. void turn_rx_off( void )
-//    Turns off the receive function.
-// 6. void putchar( char )
-//    Writes a character to the serial port.
- 
-#include <stdio.h>
- 
-#define BAUD_RATE       9600
-#define IN_BUF_SIZE     256
- 
-#define TRUE 1
-#define FALSE 0
- 
-static unsigned char        inbuf[IN_BUF_SIZE];
-static unsigned char        qin = 0;
-static unsigned char        qout = 0;
- 
-static char             flag_rx_waiting_for_stop_bit;
-static char             flag_rx_off;
-static char             rx_mask;
-static char             flag_rx_ready;
-static char             flag_tx_ready;
-static char             timer_rx_ctr;
-static char             timer_tx_ctr;
-static char             bits_left_in_rx;
-static char             bits_left_in_tx;
-static char             rx_num_of_bits;
-static char             tx_num_of_bits;
-static int              internal_rx_buffer;
-static int              internal_tx_buffer;
-static int              user_tx_buffer;
- 
-DigitalOut TX(D4);
-DigitalIn RX(D3);
-Ticker ticker;
- 
+#include "soft_uart.h"
 Serial pc(USBTX, USBRX);
- 
- 
-//Background functions to execute while waiting for input.
-void idle(){
-    wait_us(0.2);
-}
- 
-//Sets the transmit pin to the high state.
-void set_tx_pin_high() {
-    TX = 1;
-}
- 
-//Sets the transmit pin to the low state.
-void set_tx_pin_low() {
-    TX = 0;
-}
- 
-//Returns 0 or 1 dependent on whether the receive pin is high or low
-int get_rx_pin_status() {
-    return RX.read();
-}
- 
-void timer_isr(void)
-    {
-    char            mask, start_bit, flag_in;
- 
- 
-// Transmitter Section
-    if ( flag_tx_ready )
-        {
-        
-        if ( --timer_tx_ctr<=0 )
-            {
-            mask = internal_tx_buffer&1;
-            internal_tx_buffer >>= 1;
-            if ( mask )
-                {
-                set_tx_pin_high();          
-                }
-            else
-                {
-                set_tx_pin_low();
-                }
-            timer_tx_ctr = 3;
-            if ( --bits_left_in_tx<=0 )
-                {
-                flag_tx_ready = FALSE;
-                }
-            }
-        }
-// Receiver Section
-    if ( flag_rx_off==FALSE )
-        {
-        if ( flag_rx_waiting_for_stop_bit )
-            {
-            if ( --timer_rx_ctr<=0 )
-                {
-                flag_rx_waiting_for_stop_bit = FALSE;
-                flag_rx_ready = FALSE;
-                internal_rx_buffer &= 0xFF;
-                if ( internal_rx_buffer!=0xC2 )
-                    {
-                    inbuf[qin] = internal_rx_buffer;
-                    if ( ++qin>=IN_BUF_SIZE )
-                        {
-                        qin = 0;
-                        }
-                    }
-                }
-            }
-        else        // rx_test_busy
-            {
-            if ( flag_rx_ready==FALSE )
-                {
-                start_bit = get_rx_pin_status();
-// Test for Start Bit
-                if ( start_bit==0 )
-                    {
-                    flag_rx_ready = TRUE;
-                    internal_rx_buffer = 0;
-                    timer_rx_ctr = 4;
-                    bits_left_in_rx = rx_num_of_bits;
-                    rx_mask = 1;
-                    }
-                }
-            else    // rx_busy
-                {
-                if ( --timer_rx_ctr<=0 )
-                    {               // rcv
-                    timer_rx_ctr = 3;
-                    flag_in = get_rx_pin_status();
-                    if ( flag_in )
-                        {
-                        internal_rx_buffer |= rx_mask;
-                        }
-                    rx_mask <<= 1;
-                    if ( --bits_left_in_rx<=0 )
-                        {
-                        flag_rx_waiting_for_stop_bit = TRUE;
-                        }
-                    }
-                }
-            }
-        }
-    }
- 
-void init_uart( void )
-    {
-    flag_tx_ready = FALSE;
-    flag_rx_ready = FALSE;
-    flag_rx_waiting_for_stop_bit = FALSE;
-    flag_rx_off = FALSE;
-    rx_num_of_bits = 8;//10
-    tx_num_of_bits = 8;//10
- 
-    set_tx_pin_low();
-    ticker.attach_us(&timer_isr, 1000000.0 / (BAUD_RATE * 3.0));
- 
-    }
- 
-char _getchar( void )
-    {
-    char        ch;
- 
-    do
-        {
-        while ( qout==qin )
-            {
-            idle();
-            }
-        ch = inbuf[qout] & 0xFF;
-        if ( ++qout>=IN_BUF_SIZE )
-            {
-            qout = 0;
-            }
-        }
-    while ( ch==0x0A || ch==0xC2 );
-    return( ch );
-    }
- 
-void _putchar( int ch )
-    {
-    while ( flag_tx_ready );
-    user_tx_buffer = ch;
- 
-// invoke_UART_transmit
-    timer_tx_ctr = 3;
-    bits_left_in_tx = tx_num_of_bits;
-    internal_tx_buffer = (user_tx_buffer<<1) | 0x200;;
-    flag_tx_ready = TRUE;
-    }
- 
-void flush_input_buffer( void )
-    {
-    qin = 0;
-    qout = 0;
-    }
- 
-char kbhit( void )
-    {
-    return( qin!=qout );
-    }
- 
-void turn_rx_on( void )
-    {
-    flag_rx_off = FALSE;
-    }
- 
-void turn_rx_off( void )
-    {
-    flag_rx_off = TRUE;
-    }
-    
-void printStr(char* str){
-    int i = 0;
-    int len = strlen(str); 
-    for(i = 0; i<len; i++){
-     wait(0.01);
-        _putchar(str[i]);
-    }
-}
- 
+char tmp;
 int main() {
  
     pc.baud(9600);
     pc.printf("test");
     init_uart();
- 
+    pc.printf("cpuclock:%d",SystemCoreClock);
     //printStr("d\n\r");
-    wait(0.01);
+    wait(1);
     //printStr("Voila!\n\r");
     //printStr("Voila!\n\r");
+    printStr("$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n");
+    printStr("$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n");
+   // printStr("$PMTK314,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n");
+     wait(1);
     while(1){
        // printStr("V");
-        pc.putc(  _getchar()  );
+     // printStr("$PMTK314,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*28\r\n");
+        //pc.putc(  _getchar()  );
+        do
+    {
+        tmp= _getchar();
+        pc.printf("%c",tmp);
+       
+    }while(tmp!='\r');
         //wait(0.1);
     }
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/soft_uart.cpp	Fri Mar 05 09:35:03 2021 +0000
@@ -0,0 +1,261 @@
+// UART.C
+//
+// Generic software uart written in C, requiring a timer set to 3 times
+// the baud rate, and two software read/write pins for the receive and
+// transmit functions.
+//
+// * Received characters are buffered
+// * putchar(), getchar(), kbhit() and flush_input_buffer() are available
+// * There is a facility for background processing while waiting for input
+//
+// Colin Gittins, Software Engineer, Halliburton Energy Services
+//
+// The baud rate can be configured by changing the BAUD_RATE macro as
+// follows:
+//
+// #define BAUD_RATE            19200.0
+//
+// The function init_uart() must be called before any comms can take place
+//
+// Interface routines required:
+// 1. get_rx_pin_status()
+//    Returns 0 or 1 dependent on whether the receive pin is high or low.
+// 2. set_tx_pin_high()
+//    Sets the transmit pin to the high state.
+// 3. set_tx_pin_low()
+//    Sets the transmit pin to the low state.
+// 4. idle()
+//    Background functions to execute while waiting for input.
+// 5. timer_set( BAUD_RATE )
+//    Sets the timer to 3 times the baud rate.
+// 6. set_timer_interrupt( timer_isr )
+//    Enables the timer interrupt.
+//
+// Functions provided:
+// 1. void flush_input_buffer( void )
+//    Clears the contents of the input buffer.
+// 2. char kbhit( void )
+//    Tests whether an input character has been received.
+// 3. char getchar( void )
+//    Reads a character from the input buffer, waiting if necessary.
+// 4. void turn_rx_on( void )
+//    Turns on the receive function.
+// 5. void turn_rx_off( void )
+//    Turns off the receive function.
+// 6. void putchar( char )
+//    Writes a character to the serial port.
+ #include "mbed.h"
+#include <stdio.h>
+ 
+#define BAUD_RATE       9600
+#define IN_BUF_SIZE     256
+ 
+#define TRUE 1
+#define FALSE 0
+ 
+static unsigned char        inbuf[IN_BUF_SIZE];
+static unsigned char        qin = 0;
+static unsigned char        qout = 0;
+ 
+static char             flag_rx_waiting_for_stop_bit;
+static char             flag_rx_off;
+static char             rx_mask;
+static char             flag_rx_ready;
+static char             flag_tx_ready;
+static char             timer_rx_ctr;
+static char             timer_tx_ctr;
+static char             bits_left_in_rx;
+static char             bits_left_in_tx;
+static char             rx_num_of_bits;
+static char             tx_num_of_bits;
+static int              internal_rx_buffer;
+static int              internal_tx_buffer;
+static int              user_tx_buffer;
+ 
+DigitalOut TX(PA_4);
+DigitalIn RX(PA_3);
+Ticker ticker;
+
+ 
+ 
+//Background functions to execute while waiting for input.
+void idle(){
+    wait_us(0.2);
+}
+ 
+//Sets the transmit pin to the high state.
+void set_tx_pin_high() {
+    TX = 1;
+}
+ 
+//Sets the transmit pin to the low state.
+void set_tx_pin_low() {
+    TX = 0;
+}
+ 
+//Returns 0 or 1 dependent on whether the receive pin is high or low
+int get_rx_pin_status() {
+    return RX.read();
+}
+ 
+void timer_isr(void)
+    {
+    char            mask, start_bit, flag_in;
+ 
+ 
+// Transmitter Section
+    if ( flag_tx_ready )
+        {
+        
+        if ( --timer_tx_ctr<=0 )
+            {
+            mask = internal_tx_buffer&1;
+            internal_tx_buffer >>= 1;
+            if ( mask )
+                {
+                set_tx_pin_high();          
+                }
+            else
+                {
+                set_tx_pin_low();
+                }
+            timer_tx_ctr = 3;
+            if ( --bits_left_in_tx<=0 )
+                {
+                flag_tx_ready = FALSE;
+                }
+            }
+        }
+// Receiver Section
+    if ( flag_rx_off==FALSE )
+        {
+        if ( flag_rx_waiting_for_stop_bit )
+            {
+            if ( --timer_rx_ctr<=0 )
+                {
+                flag_rx_waiting_for_stop_bit = FALSE;
+                flag_rx_ready = FALSE;
+                internal_rx_buffer &= 0xFF;
+                if ( internal_rx_buffer!=0xC2 )
+                    {
+                    inbuf[qin] = internal_rx_buffer;
+                    if ( ++qin>=IN_BUF_SIZE )
+                        {
+                        qin = 0;
+                        }
+                    }
+                }
+            }
+        else        // rx_test_busy
+            {
+            if ( flag_rx_ready==FALSE )
+                {
+                start_bit = get_rx_pin_status();
+// Test for Start Bit
+                if ( start_bit==0 )
+                    {
+                    flag_rx_ready = TRUE;
+                    internal_rx_buffer = 0;
+                    timer_rx_ctr = 4;
+                    bits_left_in_rx = rx_num_of_bits;
+                    rx_mask = 1;
+                    }
+                }
+            else    // rx_busy
+                {
+                if ( --timer_rx_ctr<=0 )
+                    {               // rcv
+                    timer_rx_ctr = 3;
+                    flag_in = get_rx_pin_status();
+                    if ( flag_in )
+                        {
+                        internal_rx_buffer |= rx_mask;
+                        }
+                    rx_mask <<= 1;
+                    if ( --bits_left_in_rx<=0 )
+                        {
+                        flag_rx_waiting_for_stop_bit = TRUE;
+                        }
+                    }
+                }
+            }
+        }
+    }
+ 
+void init_uart( void )
+    {
+    flag_tx_ready = FALSE;
+    flag_rx_ready = FALSE;
+    flag_rx_waiting_for_stop_bit = FALSE;
+    flag_rx_off = FALSE;
+    rx_num_of_bits = 8;//10
+    tx_num_of_bits = 10;//10
+ 
+    set_tx_pin_low();
+    ticker.attach_us(&timer_isr, 1000000.0 / (BAUD_RATE * 3.0));
+ 
+    }
+ 
+char _getchar( void )
+    {
+    char        ch;
+ 
+    do
+        {
+        while ( qout==qin )
+            {
+            idle();
+            }
+        ch = inbuf[qout] & 0xFF;
+        if ( ++qout>=IN_BUF_SIZE )
+            {
+            qout = 0;
+            }
+        }
+    while ( ch==0x0A || ch==0xC2 );
+    return( ch );
+    }
+ 
+void _putchar( int ch )
+    {
+    while ( flag_tx_ready );
+    user_tx_buffer = ch;
+ 
+// invoke_UART_transmit
+    timer_tx_ctr = 3;
+    bits_left_in_tx = tx_num_of_bits;
+    internal_tx_buffer = (user_tx_buffer<<1) | 0x200;;
+    flag_tx_ready = TRUE;
+    }
+ 
+void flush_input_buffer( void )
+    {
+    qin = 0;
+    qout = 0;
+    }
+ 
+char kbhit( void )
+    {
+    return( qin!=qout );
+    }
+ 
+void turn_rx_on( void )
+    {
+    flag_rx_off = FALSE;
+    }
+ 
+void turn_rx_off( void )
+    {
+    flag_rx_off = TRUE;
+    }
+    
+void printStr(char* str){
+    int i = 0;
+    int len = strlen(str);
+//     pc.printf(":%d",len);
+    for(i = 0; i<len; i++){
+     wait(0.01);
+        _putchar(str[i]);
+    }
+}
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/soft_uart.h	Fri Mar 05 09:35:03 2021 +0000
@@ -0,0 +1,31 @@
+
+ 
+#define BAUD_RATE       9600
+
+void idle();
+ 
+//Sets the transmit pin to the high state.
+void set_tx_pin_high();
+ 
+//Sets the transmit pin to the low state.
+void set_tx_pin_low();
+ 
+//Returns 0 or 1 dependent on whether the receive pin is high or low
+int get_rx_pin_status();
+void timer_isr(void);
+ 
+void init_uart( void );
+ 
+char _getchar( void );
+ 
+void _putchar( int ch );
+ 
+void flush_input_buffer( void );
+ 
+char kbhit( void );
+ 
+void turn_rx_on( void );
+ 
+void turn_rx_off( void );
+void printStr(char* str);
+ 
\ No newline at end of file