📄 hdlc.h
字号:
#define DRxSTOP 0x04000000 // bit26
#define DRxABT 0x08000000 // bit27
#define DPLLTM 0x10000000 // bit28
#define DPLLOM 0x20000000 // bit29
// HDLC Interrupt Enable Register (HINTEN)
#define HDLCIE 0x00000001 // bit0
#define TxIE 0x00000002 // bit1
#define RxIE 0x00000004 // bit2
#define DTxIE 0x00000008 // bit3
#define DRxIE 0x00000010 // bit4
#define DPLLIE 0x00000020 // bit5
#define TxFCIE 0x00000100 // bit8
#define TxFAIE 0x00000200 // bit9
#define TxCTSIE 0x00000800 // bit11
#define TxUIE 0x00001000 // bit12
#define RxFAIE 0x00002000 // bit13
#define RxFAPIE 0x00004000 // bit14
#define RxFDIE 0x00008000 // bit15
#define RxDCDIE 0x00020000 // bit17
#define RxAERRIE 0x00040000 // bit18
#define RxFVIE 0x00080000 // bit19
#define RxIDLEIE 0x00100000 // bit20
#define RxABIE 0x00200000 // bit21
#define RxFERRIE 0x00400000 // bit22
#define RxOVIE 0x00800000 // bit23
#define DTxSTOPIE 0x01000000 // bit24
#define DTxABIE 0x02000000 // bit25
#define DRxSTOPIE 0x04000000 // bit26
#define DRxABIE 0x08000000 // bit27
#define DPLLTMIE 0x10000000 // bit28
#define DPLLOMIE 0x20000000 // bit29
// HDLC Tx Status Structure
typedef struct HdlcTxStatus {
U32 TxFrameComplete ;
U32 TxFIFOAvailable ;
U32 TxLevelOfCTS ;
U32 TxTransitionOfCTS ;
U32 TxUnderrun ;
U32 DMATxStop ;
U32 DMATxABT ;
} pHdlcTxStatus ;
// HDLC Rx Status Structure
typedef struct HdlcRxStatus {
U32 RxFIFOAvalable ;
U32 RxFIFOAddrPresent ;
U32 RxFlagDetected ;
U32 RxLevelOfDCD ;
U32 RxTransitionOfDCD ;
U32 RxAddressError ;
U32 RxLastFrameValid ;
U32 RxIdle ;
U32 RxAbort ;
U32 RxFrameError ;
U32 RxOverrun ;
U32 DMARxStop ;
U32 DMARxABT ;
} pHdlcRxStatus ;
// HDLC DPLL Status Structure
typedef struct HdlcDPLLStatus {
U32 DPLLOneClkMiss ;
U32 DPLLTwoClkMiss ;
} pHdlcDPLLStatus ;
// HDLC Frame Structure
typedef __packed struct HDLCHeader {
U8 Address[4] ;
U8 Control[1] ;
} sHDLCHeader;
typedef __packed struct HDLCFrame {
sHDLCHeader Header ;
U8 Information[HDLC_MTU-sizeof(sHDLCHeader)] ;
} sHDLCFrame;
// Tx/Rx Buffer descriptor structure
typedef struct BD {
U32 BufferDataPtr;
U32 StatusField ;
U32 LengthField ;
U32 NextBufferDescriptor ;
} sBufferDescriptor;
typedef struct HDLC_Device {
U32 HDLC_Port ; // HDLC port number
U32 HDLC_Baud ; // HDLC baudrate
U32 HDLC_Data_format ; // HDLC Data format, NRZ,NRZI,FM0,FM1,Menchester
U32 HDLC_Tx_Mode ; // HDLC Tx DMA or Interrupt mode
U32 HDLC_Rx_Mode ; // HDLC Rx DMA or Interrupt mode
U32 HDLC_Tx_Output_Clk ;// Tx clock PIN output source, Rx_Clock,BRGOUT1,2,3
// DPLLOUTT, DPLLOUTR
U32 HDLC_Tx_Clk ; // Tx clock source,TxC pin, RxC pin, DPLLOUTT, BRGOUT1,2,3
U32 HDLC_Rx_Clk ; // Rx clock source,TxC pin, RxC pin, DPLLOUTT, BRGOUT1,2,3
U32 HDLC_Tx_Clk_Pos ; // Tx clock polarity, only for KS32C5000A
U32 HDLC_Rx_Clk_Pos ; // Rx clock polarity, only for KS32C5000A
U32 HDLC_Station_Addr ;
} HDLC_Device_Entry ;
/* ================================================== *
* Declare Function Prototype *
* ================================================== */
/*
* HDLC initialize
*/
extern void HdlcInitialize(void) ;
extern int HdlcPortInit(HDLC_Device_Entry *Device) ;
/*
* Initialize Tx buffer descriptor area-buffers.
*/
extern void TxBDInitialize(U32 channel) ;
extern void RxBDInitialize(U32 channel) ;
/*
* HDLC DMA Initialize
*/
extern int HDLC_Rx_init(U32 channel) ;
extern void HDMA_Tx_init(U32 channel, U32 TxDB, int Size) ;
/*
* HDLC Send frame
*/
extern int SendHdlcFrame(U32 channel, U8 *Data, int Size) ;
extern int WriteDataToFifo(U32 channel) ;
extern void Transmit_Frame(void) ;
extern void Transmit_Multi_Frame(void) ;
/*
* HDLC Receive frame
*/
extern int ReceiveHdlcFrame(U32 channel) ;
extern int ReadDataFromFifo(U32 channel, U32 bcnt) ;
/*
* HDLC Interrupt service routine
*/
extern void HDLCA_isr(void) ;
extern void HDLCB_isr(void) ;
/*
* Utility
*/
extern void HDLC_Status(void) ;
extern void PrintHdlcRxFrame(U8 *pFramePtr, U32 Length) ;
extern char *PrintCM(int m) ;
/*
* Test Program
*/
extern void HDLCTest(void) ;
extern void HdlcFrameReceiveTest(void) ;
extern void HdlcFrameTransmitTest(void) ;
extern void HdlcLoopbackTest(void) ;
extern int HdlcInternalLoopback(void) ;
extern void HdlcExternalLoopback(U32 channel) ;
extern int HdlcLoopback(U32 channel, int cnt) ;
extern void RepHdlcLoopback(void) ;
extern void HdlcPingPongTest(void) ;
extern void HdlcPingPongTest_Server(void) ;
extern void HdlcPingPongTest_Client(void) ;
extern void HdlcFrameTx(void) ;
extern void HdlcFrameRx(void) ;
extern void ReceiveAndViewHdlcFrame(void) ;
#endif /* _HDLC_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -