uart.c

来自「自己写的一个基于kb9202开发板的bootloader」· C语言 代码 · 共 42 行

C
42
字号
#include "at91rm9200.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 + -
显示快捷键?