You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
5.4 KiB
124 lines
5.4 KiB
//#############################################################################################################################################################################################################
|
|
#ifndef _IDIBUS_SERIAL_H_
|
|
#define _IDIBUS_SERIAL_H_
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
#include "IdiBusSystem.h"
|
|
#include "IdiBusSerialDefs.h"
|
|
#include "IdiBusInterruptsList.h"
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
enum IDIBUS_SERIAL_USARTN_NUMBER {
|
|
IDIBUS_SERIAL_USART0,
|
|
IDIBUS_SERIAL_USART1,
|
|
IDIBUS_SERIAL_USART2,
|
|
IDIBUS_SERIAL_USART3
|
|
};
|
|
enum IDIBUS_SERIAL_TIMER_NUMBER {
|
|
IDIBUS_TIMER_1 = 1,
|
|
IDIBUS_TIMER_3 = 3,
|
|
IDIBUS_TIMER_4,
|
|
IDIBUS_TIMER_5
|
|
};
|
|
enum IDIBUS_SERIAL_USARTN_CONFIG {
|
|
IDIBUS_SERIAL_8N1,
|
|
IDIBUS_SERIAL_8N2,
|
|
IDIBUS_SERIAL_8E1,
|
|
IDIBUS_SERIAL_8E2,
|
|
IDIBUS_SERIAL_8O1,
|
|
IDIBUS_SERIAL_8O2
|
|
};
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
typedef struct {
|
|
enum IDIBUS_SERIAL_USARTN_NUMBER USART_NUMBER;
|
|
enum IDIBUS_SERIAL_TIMER_NUMBER TIMER_NUMBER;
|
|
enum IDIBUS_SERIAL_USARTN_CONFIG CONFIG;
|
|
uint8_t RS485_DIR_PIN;
|
|
uint8_t BAUDRATE_DIPSW_S0_PIN;
|
|
uint8_t BAUDRATE_DIPSW_S1_PIN;
|
|
uint8_t BAUDRATE_DIPSW_S2_PIN;
|
|
} IDIBUS_SERIAL_INIT_TYPEDEF;
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
typedef struct {
|
|
enum IDIBUS_SERIAL_USARTN_NUMBER USART_NUMBER;
|
|
enum IDIBUS_SERIAL_TIMER_NUMBER TIMER_NUMBER;
|
|
enum IDIBUS_SERIAL_USARTN_CONFIG CONFIG;
|
|
IDIBUS_SERIAL_GPIO_INIT RS485_DIR_GPIO;
|
|
struct {
|
|
IDIBUS_SERIAL_GPIO_INIT S0;
|
|
IDIBUS_SERIAL_GPIO_INIT S1;
|
|
IDIBUS_SERIAL_GPIO_INIT S2;
|
|
} BAUDRATE_DIPSW;
|
|
} IDIBUS_SERIAL_ALTERNATIVE_INIT_TYPEDEF;
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
class IdiBusSerial : public IdiBusCallbackInterface {
|
|
|
|
public :
|
|
IdiBusSerial(void);
|
|
|
|
uint8_t Init(IDIBUS_SERIAL_INIT_TYPEDEF *InitT);
|
|
uint8_t Init(IDIBUS_SERIAL_ALTERNATIVE_INIT_TYPEDEF *InitT);
|
|
void SetBaudrate(enum IDIBUS_SERIAL_BAUDRATE Baudrate);
|
|
void UpdateBaudrateFromDipSwitch(void);
|
|
|
|
void Start (void); // Hold Line
|
|
void Stop (void); // TX/RX disable, Release Line
|
|
|
|
uint8_t SendRequestAsync(uint8_t *_TxBuf_, uint16_t _TxBufLength_);
|
|
uint8_t SendRequestSync (uint8_t *_TxBuf_, uint16_t _TxBufLength_);
|
|
|
|
uint8_t WriteSync (uint8_t *_TxBuf_, uint16_t _TxBufLength_);
|
|
uint8_t WriteAsync(uint8_t *_TxBuf_, uint16_t _TxBufLength_);
|
|
|
|
uint8_t IsTransferComplete(void);
|
|
uint16_t GetRxBufCounter(void);
|
|
IDIBUS_SERIAL_ERROR_STATUS_TYPE GetErrorStatus(void);
|
|
uint32_t GetBaudrate(void);
|
|
|
|
private :
|
|
IDIBUS_SERIAL_USART_HW_TYPE USARTN;
|
|
IDIBUS_SERIAL_USARTN_16BIT_TIMER TIMN;
|
|
|
|
IDIBUS_SERIAL_GPIO RS485_DIR_GPIO;
|
|
IDIBUS_SERIAL_BAUDRATE_DIPSW_TYPE BAUDRATE_DIPSW;
|
|
uint32_t BAUDRATE;
|
|
|
|
uint8_t TxBuf[IDIBUS_SERIAL_TX_BUF_SIZE];
|
|
uint16_t TxBufLength;
|
|
uint16_t TxBufCounter;
|
|
|
|
uint8_t RxBuf[IDIBUS_SERIAL_RX_BUF_SIZE];
|
|
uint16_t RxBufCounter;
|
|
IDIBUS_SERIAL_ERROR_STATUS_TYPE ERROR_STATUS;
|
|
|
|
uint16_t TimerInterFrameCompValue;
|
|
uint16_t TimerTimeoutCompValue;
|
|
uint16_t TimerTimeoutOverflow;
|
|
|
|
enum IDIBUS_SERIAL_REQUEST_TYPE RequestType;
|
|
volatile uint8_t TransferComplete;
|
|
uint16_t InitProtectionVar;
|
|
uint8_t InitState;
|
|
|
|
// Interrupt Vectors Pointers
|
|
virtual void USART_RxInterruptFunc(void) override;
|
|
virtual void USART_TxInterruptFunc(void) override;
|
|
virtual void TIM_COMPA_InterruptFunc(void) override;
|
|
virtual void TIM_COMPB_InterruptFunc(void) override;
|
|
|
|
// Routine
|
|
uint8_t BaseInit(enum IDIBUS_SERIAL_USARTN_NUMBER USART_NUM, enum IDIBUS_SERIAL_TIMER_NUMBER TIMER_NUM, enum IDIBUS_SERIAL_USARTN_CONFIG CONF);
|
|
uint8_t GetGpioParams(IDIBUS_SERIAL_GPIO_INIT *InitSTR, IDIBUS_SERIAL_GPIO *gpio);
|
|
uint8_t GetGpioParamsArduino(uint8_t PinNum, IDIBUS_SERIAL_GPIO *gpio);
|
|
void SetBaudrateLL(uint32_t Baudrate);
|
|
|
|
protected :
|
|
uint8_t *getTxBufPointer (void);
|
|
uint8_t *getRxBufPointer (void);
|
|
uint8_t SendRequestAsync(uint16_t DataLength);
|
|
uint8_t SendRequestSync(uint16_t DataLength);
|
|
uint8_t WriteAsync(uint16_t DataLength);
|
|
uint8_t WriteSync(uint16_t DataLength);
|
|
};
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
#endif //_IDIBUS_SERIAL_H_
|
|
//#############################################################################################################################################################################################################
|