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

📄 usart.c

📁 atmelsam7s64twi完美底层驱动
💻 C
字号:
#include "usart.h"

/************************************************************************
函数功能:	串口0初始化函数(非中断模式)
入口参数:	
出口参数:	
************************************************************************/
void uartinit(void)
{
	*AT91C_PMC_PCER|=0x00000040;		//PMC外设时钟使能
	*AT91C_PIOA_PDR|=0x00000060;		//Disable I/O,PA5=RXD0,PA6=TXD0
	*AT91C_PIOA_ASR|=0x00000060;		//PIO分配成UART
	*AT91C_US0_CR=0XAC;					//RESET UART
	*AT91C_US0_MR=0X8C0;				//8bit,No,1Bit Stop
	*AT91C_US0_IDR=0XF3FFF;				//Disable UART Interrupt
	//*AT91C_US0_BRGR=26;					//BARD RATE:38400(CD=30)
	*AT91C_US0_BRGR=30;
	*AT91C_US0_CR=0X50;					//SET UART
}

/************************************************************************
函数功能:	串口1初始化函数(非中断模式)
入口参数:	
出口参数:	
波特率=9600
************************************************************************/
void Usart1_Init(void)
{
	*AT91C_PMC_PCER=(unsigned int)1<<AT91C_ID_US1;		//PMC外设时钟使能
	*AT91C_PIOA_PDR=AT91C_PA21_RXD1 | AT91C_PA22_TXD1;		//Disable I/O,PA5=RXD0,PA6=TXD0
	*AT91C_PIOA_ASR=AT91C_PA21_RXD1 | AT91C_PA22_TXD1;		//PIO分配成UART
	*AT91C_US1_CR=0XAC;					//RESET UART
	*AT91C_US1_MR=0X8C0;				//8bit,No,1Bit Stop
	*AT91C_US1_IDR=0XF3FFF;				//Disable UART Interrupt
	//在MCK=18.432M时,波特率(MCK/16)/CD=9600					
	*AT91C_US1_BRGR=120;
	*AT91C_US1_CR=0X50;					//SET UART
}
/************************************************************************
函数功能:	串口0接收中断服务函数
入口参数:	
出口参数:	
************************************************************************/
void Uart0ISR(void) __irq
{
	unsigned int s=0;
	unsigned char ch=0;
	static unsigned char bI=0;

	s = AT91C_BASE_US0->US_CSR;

	if(s&0x01)    // RXRDY
	{
		ch = AT91C_BASE_US0->US_RHR;
		g_bpData[bI++] = AT91C_BASE_US0->US_RHR;
		if (bI==20)
		{
			bI = 0;
		}
	}
	/*
	if(s&0x02)    // TXRDY
	{
		;
	}*/
	AT91C_BASE_AIC->AIC_EOICR = 1;//End of Interrupt
}
/************************************************************************
函数功能:	串口0初始化函数(中断模式)
入口参数:	
出口参数:	
************************************************************************/
void uart0init(void)
{
	*AT91C_PMC_PCER|=0x00000040;		//PMC外设时钟使能
	*AT91C_PIOA_PDR|=0x00000060;		//Disable I/O,PA5=RXD0,PA6=TXD0
	*AT91C_PIOA_ASR|=0x00000060;		//PIO分配成UART
	*AT91C_US0_CR=0XAC;					//RESET UART
	*AT91C_US0_MR=0X8C0;				//8bit,No,1Bit Stop
	*AT91C_US0_IDR=0XF3FFF;				//Disable UART Interrupt
	//*AT91C_US0_BRGR=26;					//BARD RATE:38400(CD=30)
	*AT91C_US0_BRGR=30;
	*AT91C_US0_CR=0X50;					//SET UART
	/************************/
	AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE | 1;
	AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0]=(unsigned int) Uart0ISR;//赋中断服务函数指针  
	AT91C_BASE_US0->US_IDR=0xF3FFF;              // disable all interrupts
	AT91C_BASE_US0->US_IER=0x01;//允许接收中断
	AT91C_BASE_AIC->AIC_IECR = (unsigned int)1<<AT91C_ID_US0; 
	/************************/
}
unsigned char putcharme (unsigned char ch)
{										//Write Character to Serial Port
	if (ch == '\n')  
	{                            // Check for CR
		while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
		*AT91C_US0_THR = '\r';                      // Output CR
	}
	while (!((*AT91C_US0_CSR) & AT91C_US_TXRDY));   // Wait for Empty Tx Buffer
	return (*AT91C_US0_THR = ch);                 // Transmit Character
}


void helloworld(void)
{
	unsigned char hello[]={'h','e','l','l','o',' ','w','o','r','l','d','!','\n',};
	unsigned char i;
	for(i=0;i<13;i++)
	{
		putcharme(hello[i]);
	}
}

void USART0_send_string(unsigned char *bpSendData,unsigned int length)
{
	while(length--)
	{
		putcharme(*(bpSendData++));
	}
	putcharme(0x0a);
}
void Receivechar(void)
{
	if ((*AT91C_US0_CSR) & AT91C_US_RXRDY)
	{
		bpRBuff[g_bRBuffpiont] = *AT91C_US0_RHR;
		g_bRBuffpiont++;
	}
}
unsigned char Usart1_putchar (unsigned char ch)
{										//Write Character to Serial Port
	if (ch == '\n')  
	{                            // Check for CR
		while (!((*AT91C_US1_CSR) & AT91C_US_TXRDY)); // Wait for Empty Tx Buffer
		*AT91C_US1_THR = '\r';                      // Output CR
	}
	while (!((*AT91C_US1_CSR) & AT91C_US_TXRDY));   // Wait for Empty Tx Buffer
	return (*AT91C_US1_THR = ch);                 // Transmit Character
}

void hello_laogao(void)
{
	unsigned char hello1[]={'h','e','l','l','o',' ','L','a','o','g','a','o','\n',};
	unsigned char i;

	for(i=0;i<13;i++)
	{
		Usart1_putchar(hello1[i]);
	}
}

⌨️ 快捷键说明

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