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

📄 uart.c

📁 9200测试串口程序
💻 C
字号:
//*uart1 test 115200.8.1.N
#include "uart.h"
#include "at91rm9200.h"
#include <string.h>

extern 	void AT91F_DBGU_Printk(char *);

void Uart_Init(void){

	AT91C_BASE_PIOA->PIO_PPUDR =AT91C_PB20_TXD1 | AT91C_PB21_RXD1;// Disable pullup
	AT91C_BASE_US1 -> US_IDR |= 0xFFFFFFFF;//Disable interupt
	AT91C_BASE_PIOB -> PIO_PDR |= 0x00300000;//Enable I/O peripheral
	AT91C_BASE_PMC -> PMC_PCER |= 0x00000080;//Enable  peripheral
	AT91C_BASE_US1 -> US_CR |= 0x00000030;//Reset rx/tx	
	AT91C_BASE_US1 -> US_MR |= 0x000008C0;//Set Uart Mode
	AT91C_BASE_US1 -> US_BRGR = (unsigned int)33;//Set Baud Rate
	AT91C_BASE_US1 -> US_CR |= 0x00000050;//Enable rx/tx
	AT91C_BASE_US1 -> US_PTCR = (1<<1) | (1<<9);//Disable PDC
	AT91C_BASE_US1 -> US_TPR = (unsigned int)0;
	AT91C_BASE_US1 -> US_TCR = 0;
	AT91C_BASE_US1 -> US_TNPR = (unsigned int)0;
	AT91C_BASE_US1 -> US_TNCR = 0;		
	AT91C_BASE_US1 -> US_PTCR = (1<<8);//Enable PDC Tx

}

void Uart_PutChar(char a){

	while(!(AT91C_BASE_US1 -> US_CSR & (unsigned int)2));
	AT91C_BASE_US1 -> US_THR = a;

}

void Uart_Printf(char *p){

	while(*p!='\0'){
		Uart_PutChar(*p);
		p++;
	}

}

char Uart_GetChar(void){

	while(!(AT91C_BASE_US1 -> US_CSR & (unsigned int)1));
	return(AT91C_BASE_US1 -> US_RHR);

}

char Uart_Pdc_SendFrame(
char *pBuffer,
unsigned int szBuffer,
char *pNextBuffer,
unsigned int szNextBuffer)
{

	if (!(AT91C_BASE_US1 -> US_TCR)) {
		//* Buffer and next buffer can be initialized
		AT91C_BASE_US1 -> US_TPR = (unsigned int)pBuffer;
		AT91C_BASE_US1 -> US_TCR = szBuffer;
		AT91C_BASE_US1 -> US_TNPR = (unsigned int)pNextBuffer;
		AT91C_BASE_US1 -> US_TNCR = szNextBuffer;		
		return 2;
	}
	else if (!(AT91C_BASE_US1 -> US_TNCR)) {
		//* Only one buffer can be initialized
		AT91C_BASE_US1 -> US_TPR = (unsigned int)pBuffer;
		AT91C_BASE_US1 -> US_TCR = szBuffer;		
		return 1;
	}
	else {
		//* All buffer are in use...
		return 0;
	}
	
}

void Uart_Test(void)
{

	char UartMessage1[] = "\
\n\n\r-I- ======================================\n\r\
-I- AT91RM9200 basic UART1 example\n\r\
-I- --------------------------------------\n\r\
-I- Set UART1 Port at 115200,8,N \n\r\
-I- ======================================\n\r";
	char UartMessage2[] = "\
\n\n\r-I- ======================================\n\r\
-I- Uart PDC Mode Test\n\r\
-I- --------------------------------------\n\r\
-I- UART PDC Mode Test Ok\n\r\
-I- ======================================\n\r";
	char tmp;

	Uart_Init();
	//PDC Tx Test
	AT91F_DBGU_Printk("\n\r***************Uart1 Test******************\n\r");
	AT91F_DBGU_Printk("Uart1 PDC Mode Test");
	Uart_Pdc_SendFrame(UartMessage1,strlen(UartMessage1),UartMessage2,strlen(UartMessage2));
	while ( !(AT91C_BASE_US1->US_CSR & (1<<11)) );	
	
	//Uart1 Normal Mode Test
	AT91F_DBGU_Printk("Uart1 Normal Mode Test");
	Uart_Printf("\n\rUart1 Normal Mode Test\n\r");	
	Uart_Printf("\n\rInput Any Key Display OK,Input 0 Quit Test\n\r");
	while(1)
	{
		tmp=Uart_GetChar();
		switch(tmp){
			case '0':
				Uart_Printf("\n\rUart1 Test Is Quit!\n\r");
				AT91F_DBGU_Printk("Uart1 Test Is Quit");
				return;
			default:
				Uart_Printf("OK\n\r");
				break;
		}
	}
	
}







⌨️ 快捷键说明

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