From 22987435fa01f4b671ef1972f39b84cc1a2c03ee Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 22 Jan 2017 22:38:24 +0800 Subject: [PATCH] softuart tx complete --- examples/softuart/main.c | 4 +++- extras/softuart/softuart.c | 46 +++++++++++++++++++++++++++++++++++--- extras/softuart/softuart.h | 6 +++-- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/examples/softuart/main.c b/examples/softuart/main.c index 350cde9..d684c69 100644 --- a/examples/softuart/main.c +++ b/examples/softuart/main.c @@ -25,6 +25,8 @@ void user_init(void) { if (!softuart_available()) continue; - printf("%c",softuart_read()); + char c = softuart_read(); + printf("input:%c\n",c); + softuart_puts("start\r\n"); } } diff --git a/extras/softuart/softuart.c b/extras/softuart/softuart.c index 05d5bcb..d1cd6c7 100644 --- a/extras/softuart/softuart.c +++ b/extras/softuart/softuart.c @@ -79,7 +79,43 @@ void handle_rx(uint8_t gpio_num) // Reenable interrupt gpio_set_interrupt(rx_pin, GPIO_INTTYPE_EDGE_NEG, handle_rx); } - +static uint8_t inline chbit(uint8_t data, uint8_t bit) +{ + if((data & bit) != 0) + { + return 1; + } else + { + return 0; + } +} +uint8_t softuart_putchar( char data) +{ + unsigned i; + unsigned start_time = 0x7FFFFFFF & sdk_system_get_time(); + gpio_write(tx_pin, 0); + for(i = 0; i <= 8; i++) + { + while((0x7FFFFFFF & sdk_system_get_time()) < (start_time + (s.bit_time*(i+1)))) + { + if((0x7FFFFFFF & sdk_system_get_time()) < start_time) { break;} + } + gpio_write(tx_pin, chbit(data, 1< 50 ) s.bit_time++; - + //Set Rx gpio_enable(rx_pin, GPIO_INPUT); gpio_set_pullup(rx_pin, true, false); // Set up the interrupt handler to get the startbit gpio_set_interrupt(rx_pin, GPIO_INTTYPE_EDGE_NEG, handle_rx); - + //Set Tx + gpio_enable(tx_pin, GPIO_OUTPUT); + gpio_set_pullup(tx_pin, true, false); + gpio_write(tx_pin, 1); + sdk_os_delay_us(100000); return true; } diff --git a/extras/softuart/softuart.h b/extras/softuart/softuart.h index dd7a268..fdd65be 100644 --- a/extras/softuart/softuart.h +++ b/extras/softuart/softuart.h @@ -28,7 +28,8 @@ extern "C" #endif // FIXME: for now you need to provide the gpio number for RX here -#define rx_pin 13 +#define rx_pin 4 +#define tx_pin 5 #define SOFTUART_MAX_RX_BUFF 64 #define SOFTUART_GPIO_COUNT 16 @@ -79,7 +80,8 @@ bool softuart_available(); * @return current byte */ uint8_t softuart_read(); - +uint8_t softuart_putchar(char data); +void softuart_puts(const char *c); #ifdef __cplusplus } #endif