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

📄 uart.c

📁 用LPC2103(ARM7)操作SD卡代码。
💻 C
字号:
/****************************************Copyright (c)**************************************************
**
**											力天电子
**								     http://www.LT430.com
**作者:何呈 
**文件名称:UART.C
**功能:实现串口通信。向串口0发送的数据在上位机软件上显示。
**说明:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#define UART_BPS 9600
#include "config.h"
#include <stdarg.h>
/**********************串口0初始化****************************************/
void UART0_Init (void)		
{
   U16 Fdiv;
   
   PINSEL0 = 0x00000005;			// 设置I/O连接到UART0
   PINSEL1 = 0x00000000;
   
   U0LCR = 0x83;		            // DLAB = 1,可设置波特率
   Fdiv = (Fpclk / 16)/ UART_BPS;           // 设置波特率
   U0DLM = Fdiv / 256;							
   U0DLL = Fdiv % 256;	
   U0LCR = 0x03;
}


/***************************从串口0接收数据*********************************/
char UART0_GetChar ( void )
{
  U8 Rcv_Data;

  while((U0LSR&0x01)==0);                  //等待有效数据
  Rcv_Data=U0RBR;                          //读取数据
  return(Rcv_Data);
}

/***************************从串口0接收字符串*********************************/
void UART0_GetString ( U8 *s,U32 n )
{
  for(;n>0;n++)
  {
    *s++=UART0_GetChar();
  }
}

/***************************向串口0发送数据*********************************/

void UART0_PutChar ( U32 data)
{
  U0THR = data;			    // 发送数据
  while( (U0LSR&0x40)==0 );	    // 等待数据发送完毕
}

/***************************向串口0发送字符串*********************************/
void  UART0_PutString(char *str)
{
  while(*str !='\0')
  {
    UART0_PutChar(*str++);
  }
}
/*****************************PLL初始化**************************************/
void PLL_Init(void)
{
  /* 设置系统各部分时钟 */
	   PLLCON = 1;
	#if ((Fcclk / 4) / Fpclk) == 1
		VPBDIV = 0;
	#endif
	#if ((Fcclk / 4) / Fpclk) == 2
		VPBDIV = 2;
	#endif
	#if ((Fcclk / 4) / Fpclk) == 4
		VPBDIV = 1;
	#endif
	#if (Fcco / Fcclk) == 2
		PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
	#endif
	#if (Fcco / Fcclk) == 4
		PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
	#endif
	#if (Fcco / Fcclk) == 8
		PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
	#endif
	#if (Fcco / Fcclk) == 16
		PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
	#endif
		PLLFEED = 0xaa;
		PLLFEED = 0x55;
		while((PLLSTAT & (1 << 10)) == 0);
		PLLCON = 3;
		PLLFEED = 0xaa;
		PLLFEED = 0x55;	
}

/*标准输入输出方式(使用后会占用大量的存储空间)
#ifdef	__SDT_COMPILER
typedef char *__va_list[1];

#else
typedef int *__va_list[1];
#endif*/

//int vsprintf(char * /*s*/, const char * /*format*/, __va_list /*arg*/);
/*
void printf(char *fmt, ...)
{
	va_list ap;
    char string[256];    

    va_start(ap, fmt);
    vsprintf(string, fmt, ap);
    UART0_PutString(string);
    va_end(ap);
}*/

⌨️ 快捷键说明

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