📄 apuart.h
字号:
//
// =======================
#ifndef _UART_H
#define _UART_H
#define FALSE 0
#define TRUE 1
//-----------------------------------------------------------
// UART controller Support
// UART base addresses
#define UART0_BASE 0x20030000
#define UART1_BASE 0x20031000
#define UART2_BASE 0x20032000
#define UART3_BASE 0x20033000
// Reference clocks
//#define UART_REF_CLK012 (15125000*2) // 242M
#define UART_REF_CLK012 (15125000) // 121M
//#define UART_REF_CLK012 (16625000) // 133M
#define UART_REF_CLK3 24000000 // 24MHz
//-----------------------------------------------------------
// Structure containing each UARTs state
typedef struct _UART_State
{
unsigned int base;
unsigned int ref_clk;
int interrupt;
int overrun_errors;
int break_errors;
int parity_errors;
int framing_errors;
} UART_t;
// Bit control macros
#define HW_REG(base,offset) *((volatile unsigned int *)((base) + (offset)))
#define EXTRACT_BIT(arg, bit) ((arg >> (bit)) & 1)
#define SET_BIT(arg, bit) ((arg) |= (1 << (bit)))
#define CLEAR_BIT(arg, bit) ((arg) &= ~(1 << (bit)))
#define TEST_BIT(arg, bit) ((arg) & (1 << (bit)))
#define UART_M_ENABLE_FIFO (1 << 0)
#define UART_M_ENABLE_IRDA (1 << 1)
#define UART_M_RAW (1 << 2)
#define UART_RX_FIFO_EMPTY 0
#define UART_TX_FIFO_FULL 1
#define UART_M_RTS (1 << 0)
#define UART_M_CTS (1 << 1)
#define UART_M_DTR (1 << 2)
#define UART_M_DSR (1 << 3)
#define UART_M_DCD (1 << 4)
#define UART_M_RI (1 << 5)
// UART registers list
#define DR 0x0
#define RSR 0x4
#define ECR 0x4
#define FR 0x18
#define ILPR 0x20
#define IBRD 0x24
#define FBRD 0x28
#define LCRH 0x2C
#define CR 0x30
#define IFLS 0x34
#define IMSC 0x38
#define RIS 0x3C
#define MIS 0x40
#define ICR 0x44
#define DMACR 0x48
// Data read/write register bits
#define DR_OE 11
#define DR_BE 10
#define DR_PE 9
#define DR_FE 8
//#define DR_ERRORS_MSB 11
//#define DR_ERRORS_LSB 8
//#define DR_DATA_MSB 7
//#define DR_DATA_LSB 0
// Line control HIGH register bits
#define LCRH_SPS 7
#define LCRH_WLEN_MSB 6
#define LCRH_WLEN_LSB 5
#define LCRH_FEN 4
#define LCRH_STP2 3
#define LCRH_EPS 2
#define LCRH_PEN 1
#define LCRH_BRK 0
// Control register bits
#define CR_CTSEN 15
#define CR_RTSEN 14
#define CR_OUT2 13
#define CR_OUT1 12
#define CR_RTS 11
#define CR_DTR 10
#define CR_RXE 9 //enable RX
#define CR_TXE 8 //enable TX
#define CR_LBE 7
#define CR_SIRLP 2
#define CR_SIREN 1
#define CR_UARTEN 0 //enable UART
// Flag register bits
#define FR_RI 8
#define FR_TXFE 7
#define FR_RXFF 6
#define FR_TXFF 5
#define FR_RXFE 4
#define FR_BUSY 3
#define FR_DCD 2
#define FR_DSR 1
#define FR_CTS 0
//-----------------------------------------------------------
// Timer Support
// Timers 0/1
#define TIMER01_BASE 0x20022000
#define TIMER0_LOAD ((volatile unsigned int *)(TIMER01_BASE + 0x00))
#define TIMER0_VALUE ((volatile unsigned int *)(TIMER01_BASE + 0x04))
#define TIMER0_CTRL ((volatile unsigned int *)(TIMER01_BASE + 0x08))
#define TIMER0_CLR ((volatile unsigned int *)(TIMER01_BASE + 0x0C))
// Misc defines
#define SLEEP_TIMEOUT 1000 // Maximum time for timer to be loaded
void drv_UART_initialize(unsigned int *handle, unsigned int cmd, unsigned int *argument);
void drv_UART_finalize(unsigned int *handle);
void drv_UART_read(unsigned int *handle, unsigned int *request, unsigned int *obuffer);
void drv_UART_write(unsigned int *handle, unsigned int *request, unsigned int *ibuffer);
void drv_UART_stat(unsigned int *handle, unsigned int *obuffer);
void drv_UART_ctrl(unsigned int *handle, unsigned int cmd, unsigned int *argument);
void apUART_Init (UART_t *uart,unsigned int speed, unsigned long flags);
void apUART_PutChar (UART_t *uart, int c);
void apSleepus(unsigned int usec);
void apUART_SetSpeed (UART_t *uart, unsigned int speed);
void UART_printf(int n,char *str);
void UART_scanf(int n,char *str);
void timer_set(unsigned count)
{
*TIMER0_CTRL = 0xE3; // enable interrupt
// one shot mode
// prescale 1
// size 32 bits
*TIMER0_LOAD = count;
return;
}
unsigned long timer_get(void)
{
unsigned long dwRet = 0;
dwRet = *TIMER0_VALUE;
return dwRet;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -