⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apuart.h

📁 Z228 芯片的sdram_remap代码。很有参考意义。初始化sdram后可以直接烧写裸机程序
💻 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 + -