уставки*10
This commit is contained in:
138
Source/Internal/Include/RS485.h
Normal file
138
Source/Internal/Include/RS485.h
Normal file
@@ -0,0 +1,138 @@
|
||||
/****************************************************************/
|
||||
/* TMS320C32 */
|
||||
/* ====== BIOS, ÊËÀÈÍ, ÊËÂÑÏ ====== */
|
||||
/* ÖÍÈÈ ÑÝÒ (ñ) 1998-2000 ã. */
|
||||
/****************************************************************
|
||||
RS485.h
|
||||
****************************************************************
|
||||
* Ïðîöåäóðû ðàáîòû ñ UART *
|
||||
****************************************************************/
|
||||
#ifndef _RS485
|
||||
#define _RS485
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
//#include "DSP2833x_Sci.h"
|
||||
//#include "cntrl_adr.h"
|
||||
//#include "params.h"
|
||||
|
||||
#define COM_1 1
|
||||
#define COM_2 2
|
||||
|
||||
#define MAX_RECEIVE_LENGTH 400 // 80 //150
|
||||
#define MAX_SEND_LENGTH 400 //150
|
||||
|
||||
#define TIME_WAIT_RS_BYTE_OUT 1000
|
||||
#define TIME_WAIT_RS_LOST_BYTE 100
|
||||
#define RS_TIME_OUT (SECOND*10)
|
||||
|
||||
#define Rec_Bloc_Begin 0x200000
|
||||
#define Rec_Bloc_End 0x2F0000
|
||||
#define Rec_Bloc_Length (Rec_Bloc_End-Rec_Bloc_Begin)
|
||||
|
||||
/* Message RS declaration */
|
||||
typedef struct
|
||||
{
|
||||
volatile struct SCI_REGS *SciRegs;
|
||||
|
||||
unsigned int commnumber; // Íîìåð ïîðòà
|
||||
unsigned long RS_Length; // Äëèíà ïàêåòà
|
||||
|
||||
unsigned int *pRS_RecvPtr; // Áóôåð ïðèåìà
|
||||
unsigned int *pRS_SendPtr; // Áóôåð ïîñûëêè
|
||||
unsigned int *pRecvPtr;
|
||||
|
||||
unsigned int RS_PrevCmd; // Ïðåäûäóùàà êîììàíäà
|
||||
unsigned int RS_Cmd; // Òåêóùàà êîììàíäà
|
||||
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Çàãîëîâîê
|
||||
unsigned int flag_TIMEOUT_to_Send; // Ôëàã îæèäàíèà òàéìàóòà íà îòñûëêó
|
||||
unsigned int flag_TIMEOUT_to_Receive; // Ôëàã îæèäàíèà òàéìàóòà íà ïðèåì
|
||||
unsigned int RS_DataReady; // Ôëàã ãîòîâíîñòè RS äàííûõ
|
||||
unsigned int buffer[MAX_SEND_LENGTH]; // Áóôåð äëà îòñûëêè ïî RS
|
||||
|
||||
unsigned int addr_answer; // àäðåñ êóäà îòâå÷àòü â ðåæèìå âåäóùåãî
|
||||
unsigned int addr_recive; // àäðåñ ïî êîòîðîìó íàñ çàïðîñèëè
|
||||
unsigned int flag_LEADING; // Ôëàã ðåæèìà êîíòðîëëåðà (ïî óìîë÷àíèþ âåäîìûé)
|
||||
unsigned long RS_RecvLen;
|
||||
unsigned long RS_SLength; // Äëèíà ïàêåòà äëà ïîñûëêè
|
||||
unsigned long RS_SendLen; // Êîëè÷åñòâî áàéò óæå ïåðåäàëè
|
||||
char RS_SendBlockMode; // Ðåæèì ïåðåäà÷è
|
||||
char RS_Flag9bit; // äëà RS485????????
|
||||
int BS_LoadOK; // Ôëàã óñïåøíîñòè ïðèåìà áëîêà
|
||||
int RS_FlagBegin;
|
||||
int RS_HeaderCnt;
|
||||
int RS_FlagSkiping;
|
||||
unsigned long curr_baud;
|
||||
unsigned long time_wait_rs_out;
|
||||
|
||||
} RS_DATA;
|
||||
|
||||
extern RS_DATA rs_a,rs_b;
|
||||
|
||||
extern unsigned int
|
||||
RS_Len[70]; /* Äåéñòâèòåëüíàà äëèíà êîìàíäû (îòëàäî÷íîé) + 1 */
|
||||
|
||||
interrupt void RSA_RX_Handler(void);
|
||||
interrupt void RSA_TX_Handler(void);
|
||||
interrupt void RSB_RX_Handler(void);
|
||||
interrupt void RSB_TX_Handler(void);
|
||||
|
||||
/* èíèöèëèçàöèà ïåðåìåííûõ rs_a,rs_b*/
|
||||
void create_uart_vars(char size_cmd15);
|
||||
|
||||
/** Ïîâòîðíàà èíèöèàëèçàöèà ïîñëåäîâàòåëüíîãî ïîðòà, èñïîëüçóåòñà ïîñëå ïîäâèñà */
|
||||
/** Íàñòðîéêà ðåæèìà ïðèåìà/ïåðåäà÷è */
|
||||
void RS_SetBitMode(RS_DATA *rs_arr, int n);
|
||||
|
||||
/** Ïîñûëêà áëîêà áàéòîâ.
|
||||
Ïîñûëàåò ìàññèâà 32-áèòíûõ öåëûõ ÷èñåë ñòàðøèå áèòû äîëæíû áûòü 0.
|
||||
@precondition Ðàáîòà ô-öèè çàâèñèò îò ìàêðî RS_TRANSMIT_INTR
|
||||
@param buf àäðåñ ìàññèâà
|
||||
@param len êîëè÷åñòâî áàéò
|
||||
@see RS_BSend, RS_TRANSMIT_INTR
|
||||
*/
|
||||
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
|
||||
|
||||
/** Ïîñûëêà áëîêà óïàêîâàííûõ áàéòîâ.
|
||||
@precondition Ðàáîòà ô-öèè çàâèñèò îò ìàêðî RS_TRANSMIT_INTR
|
||||
@param buf àäðåñ ìàññèâà
|
||||
@param len êîëè÷åñòâî 8-áèòíûõ áàéò
|
||||
@see RS_Send, RS_TRANSMIT_INTR
|
||||
*/
|
||||
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
|
||||
|
||||
/** Èíèöèàëèçàöèà ïîñëåäîâàòåëüíîãî ïîðòà */
|
||||
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - ñêîðîñòü ëèíèè â áîäàõ */
|
||||
|
||||
void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop);
|
||||
void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
|
||||
|
||||
// Transmit a character from the SCI'
|
||||
#define SCI_send(x,y) x->SciRegs->SCITXBUF=(unsigned char)(y)
|
||||
|
||||
// Îæèäàíèå çàâåðøåíèà ïåðåäà÷è UART
|
||||
// wait for TRDY =1 for empty state
|
||||
#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY))
|
||||
|
||||
/** Ïåðåêëþ÷åíèå ëèíèè íà ïðèåì */
|
||||
#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;
|
||||
|
||||
/** Ïåðåêëþ÷åíèå ëèíèè íà ïåðåäà÷ó */
|
||||
#define RS_Line_to_send(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0;
|
||||
|
||||
/** Ðàçðåøåíèå ïðåðûâàíèé ïî ïîëó÷åíèþ ñèìâîëà è îøèáêàì îò UART */
|
||||
#define enableUARTInt(x) x->SciRegs->SCICTL2.all=2
|
||||
#define enableUARTIntW(x) x->SciRegs->SCICTL2.all=1
|
||||
|
||||
void clear_timer_rs_live(RS_DATA *rs_arr);
|
||||
void test_rs_live(RS_DATA *rs_arr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _RS485 */
|
||||
|
||||
Reference in New Issue
Block a user