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

📄 main.c

📁 ARM9(S3C2410)的串口驱动原码
💻 C
字号:
/*C语言函数
*/

#define U32 unsigned int
#define U16 unsigned short
#define S32 int
#define S16 short int
#define U8  unsigned char
#define	S8  signed char

#include "2410addr.h"

/*定义接收缓冲区*/
volatile U8 RBuff[256];    
volatile U8 index;     
  
extern void delay(int time); /*声明汇编函数*/

/*串口发送子程序*/
void UART0_Tx(U8 data)
{
	if(rUTRSTAT0 & 0x2)   /*判断发送器buffer是否为空*/
	{
		rUTXH0=data;
	}
	while(!(rUTRSTAT0 & 0x4));   /*判断发送器buffer和串口移位寄存器是否为空,若不空,表明UART0还在发送数据,于是循环等待*/

}

/*串口接收子程序*/
U32 UART0_Rx(void)
{
	while(1)
	{
		if(rUTRSTAT0 & 0x1)
		{
			RBuff[index++]=rURXH0;
		}
		if((rGPFDAT&0x0002)==0 || (index==255))    //若按键4按下或者index=255,则退出串口接收子程序
			return 1;
		}
}
	





void Main()
{
	U8 i;
	rMPLLCON=0x00074012;   /*设置MPLL输出为124MHz*/
	rCLKCON=0x7fff0;		/*使能外围部件时钟,也就是UART0使用的时钟,其实0x7fff0是复位值*/
	rCLKDIVN=0x03;			/*设置HCLK=FCLK/2,PCLK=HCLK/2,由于寄存器CLKSLOW的默认值使得FCLK=MPLL输出,所以PCLK=124/4=31M */
		
	rGPFCON=0x0;      	  	/*设置I/O口的GPF1为输入*/
	rGPFUP=0xffff;    		/*禁止GPF端口的上拉*/
	rGPHCON=rGPHCON & (~(0xffff));
	rGPHCON=rGPHCON | (0xaaa0);
	rGPHUP=0xffff;

	rULCON0=0x03;           /*设置UART0传输模式:8位数据,一位停止位,无奇偶位*/
	rUCON0=0x0245;          /*设置UART0工作模式:串口时钟,中断OR DMA方式等等*/
	rUFCON0=0x0;            /*禁止FIFO*/
	rUMCON0=0x0;			/*禁止Auto Flow Control(AFC)*/
	//rUBRDIV0=0x0f;          /*设置UART0的波特率为115200bps */
	rUBRDIV0=( (int)(31000000/16./115200+0.5) -1 );

	index=0;
	while(1)				
 	{
		if((rGPFDAT&0x0002)==0)      /*若按键S4按下,则调用串口发送子程序*/		
		{
			for(i=0;i<20;i++)
			{
				UART0_Tx(i);
			}
			delay(0x3ffff);			
		}
		if((rGPFDAT&0x0001)==0)      /*若按键S2按下,则调用串口接收子程序*/		
		{
			index=0;
			UART0_Rx();
			delay(0x3ffff);
			i=index;
			index=0;
			while(i-- && index!=255)
			{
				UART0_Tx(RBuff[index]);
				index++;
			}
		}
	}
}

⌨️ 快捷键说明

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