uart.c

来自「一个网卡的应用」· C语言 代码 · 共 43 行

C
43
字号
#include "at91rm9200.h"
#include "uart.h"

inline void dbgu_init(){
	int value;
	pio_reg_p pioa  = (pio_reg_s  *)PIOA_BASE;
	dbgu_reg_p dbgu = (dbgu_reg_s *)DBGU_BASE;
/* pin multiplexing */
	value = DRXD | DTXD;
	pioa->pio_asr = value;
	pioa->pio_bsr = 0;
	pioa->pio_pdr |= value;
	pioa->pio_per &= ~value;
/* setup configuration */
	dbgu->dbgu_cr = (1<<UART_RSTRX) | (1<<UART_RSTTX) | (1<<UART_RXDIS) | (1<<UART_TXDIS) | (1<<UART_RSTSTA);
	dbgu->dbgu_mr = (0x4<<9) | (0x3<<6);			//8bit, no parity, 1 stop-bit
	dbgu->dbgu_idr = (unsigned) -1;
	dbgu->dbgu_brgr = 0x14;					//cd=20, baudrate=36M/(16*20)=115200
	dbgu->pdc.periph_ptcr = (1<<1) | (1<<9);		//disable the pdc channel
	dbgu->dbgu_cr = (1<<UART_RXEN) | (1<<UART_TXEN);
}

void put_char(char c){
	dbgu_reg_p dbgu = (dbgu_reg_s *)DBGU_BASE;
	while( !(dbgu->dbgu_sr & (USART_TXRDY)) );
	dbgu->dbgu_thr = c;
}

void put_s(char *s){
	int i=0;
	while(s[i]!='\0')
		put_char(s[i++]);
}

char get_char(){
	char c;
	dbgu_reg_p dbgu = (dbgu_reg_s *)DBGU_BASE;
	while( !(dbgu->dbgu_sr & (USART_RXRDY)) );
	c = (char)(dbgu->dbgu_rhr & 0xff);
	return c;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?