This is a RS485 class that uses the second UART and was tested on a Nucleo F030R8. A main demo program howto use the class is included. This class control the direction pin on the transceiver buffer automatically, and used transmit and receive interrupts. Ring buffers (256 bytes) are implemented on both transmission and reception. It assumes a ADM3485 'type' buffer where pins 2 ans 3 are connected and seen as direction. This test program could easily be adapted as base for other programs.

Dependencies:   mbed

Committer:
creatron
Date:
Tue Nov 11 19:19:47 2014 +0000
Revision:
7:cfe1e0eafb7e
Parent:
6:70460dcbc43c
This version both the transmit and receive seem to operate

Who changed what in which revision?

UserRevisionLine numberNew contents of line
creatron 0:044dfba47660 1 #ifndef DLMS_COMMS_H
creatron 0:044dfba47660 2 #define DLMS_COMMS_H
creatron 0:044dfba47660 3
creatron 0:044dfba47660 4 #include "types.h"
creatron 0:044dfba47660 5
creatron 0:044dfba47660 6 class dlms_comms
creatron 0:044dfba47660 7 {
creatron 0:044dfba47660 8 public:
creatron 0:044dfba47660 9 dlms_comms (void);
creatron 0:044dfba47660 10 void initialise (INT_16 baudrate,
creatron 0:044dfba47660 11 UINT_8 bits,
creatron 0:044dfba47660 12 UINT_8 parity,
creatron 0:044dfba47660 13 UINT_8 stop_bits);
creatron 0:044dfba47660 14 public:
creatron 0:044dfba47660 15 void send_packet (const UINT_8 * ptr,
creatron 0:044dfba47660 16 const UINT_8 length);
creatron 0:044dfba47660 17 bool char_available (void);
creatron 0:044dfba47660 18 UINT_8 get_char (void);
creatron 0:044dfba47660 19 void init (RawSerial * parent_uart,
creatron 0:044dfba47660 20 Timer * parent_timer);
creatron 0:044dfba47660 21 bool get_dir485 (void);
creatron 3:29454cac7930 22 UINT_64 ret_tx_irq_count (void);
creatron 3:29454cac7930 23 UINT_64 ret_rx_irq_count (void);
creatron 6:70460dcbc43c 24 bool ret_dir_485 (void);
creatron 0:044dfba47660 25 private:
creatron 0:044dfba47660 26 void Rx_interrupt (void);
creatron 0:044dfba47660 27 void Tx_interrupt (void);
creatron 0:044dfba47660 28 // parent classes
creatron 0:044dfba47660 29 RawSerial * debug_uart;
creatron 0:044dfba47660 30 Timer * timer;
creatron 0:044dfba47660 31 UINT_8 rx_buffer[256];
creatron 0:044dfba47660 32 UINT_8 rx_head_ptr;
creatron 0:044dfba47660 33 UINT_8 rx_tail_ptr;
creatron 3:29454cac7930 34
creatron 7:cfe1e0eafb7e 35 volatile UINT_64 tx_irq_count;
creatron 7:cfe1e0eafb7e 36 volatile UINT_64 rx_irq_count;
creatron 0:044dfba47660 37 };
creatron 0:044dfba47660 38 #endif