/*******************************************************************************
定义UART通道2的相关寄存器
*******************************************************************************/
#define ULCON2 (*(volatile unsigned *)(0x7F005800))
#define UCON2 (*(volatile unsigned *)(0x7F005804))
#define UFCON2 (*(volatile unsigned *)(0x7F005808))
#define UTRSTAT2 (*(volatile unsigned *)(0x7F005810))
#define UERSTAT2 (*(volatile unsigned *)(0x7F005814))
#define UFSTAT2 (*(volatile unsigned *)(0x7F005818))
#define UTXH2 (*(volatile unsigned *)(0x7F005820))
#define URXH2 (*(volatile unsigned *)(0x7F005824))
#define UBRDIV2 (*(volatile unsigned *)(0x7F005828))
#define UDIVSLOT2 (*(volatile unsigned *)(0x7F00582C))
#define INTP2 (*(volatile unsigned *)(0x7F005830))
#define UINTSP2 (*(volatile unsigned *)(0x7F005834))
#define UINTM2 (*(volatile unsigned *)(0x7F005838))
/*******************************************************************************
定义GPIO相关寄存器
*******************************************************************************/
#define GPBCON (*(volatile unsigned *)(0x7F008020))
#define GPBPUD (*(volatile unsigned *)(0x7F008028))
#define GPFCON (*(volatile unsigned *)(0x7F0080A0))
#define GPFDAT (*(volatile unsigned *)(0x7F0080A4))
/*******************************************************************************
定义看门狗相关寄存器
*******************************************************************************/
#define WTCON (*(volatile unsigned *)(0x7E004000))
/*******************************************************************************
定义系统控制器相关寄存器
*******************************************************************************/
#define APLLLOCK (*(volatile unsigned *)(0x7E00F000))
#define MPLLLOCK (*(volatile unsigned *)(0x7E00F004))
#define APLLCON (*(volatile unsigned *)(0x7E00F00C))
#define MPLLCON (*(volatile unsigned *)(0x7E00F010))
#define CLKSRC (*(volatile unsigned *)(0x7E00F01C))
#define CLKDIV0 (*(volatile unsigned *)(0x7E00F020))
#define OTHERS (*(volatile unsigned *)(0x7E00F900))
#define PCLKGATE (*(volatile unsigned *)(0x7E00F034))
unsigned char Dat;
/*******************************************************************************
函数名称:System_Init
功 能:设置系统时钟,禁止看门狗
输入参数:无
输出参数:无
*******************************************************************************/
static void System_Init(void)
{
APLLLOCK=0x0000FFFF; //设置ARM核的PLL_CLOCK为默认值
MPLLLOCK=0x0000FFFF; //设置系统的PLL_CLOCK为默认值
OTHERS=OTHERS&0xFFFFFF3F;
while((OTHERS&0xF00)!=0);
CLKDIV0 =0|(0<<4)|(1<<8)|(1<<9)|(3<<12);
APLLCON =1|(3<<8)|(266<<16)|(1<<31); //设置ARM核时钟为533MHz
MPLLCON=1|(3<<8)|(266<<16)|(1<<31); //设置系统时钟为533MHz
CLKSRC =0x00000003; //时钟源选择外部时钟模式
PCLKGATE=0x8;
WTCON=0; //关看门狗
}
/*******************************************************************************
函数名称:Uart_Init
功 能:设置Uart的相关参数
输入参数:无
输出参数:无
*******************************************************************************/
static void Uart_Init(void)
{
GPBCON &=~0xFF;
GPBCON |=0x22; //设置GPB0和GPB1分别为RXD引脚和TXD引脚
//GPBPUD &=~0xFF;
//GPBPUD |=0x0A;
ULCON2 =0x03; //数据位宽为8位,无校验,1位停止位
UCON2 =0x05; //选择PCLK作为UART的时钟源,禁止超时、出错、发送中断信号,
//发送和接收模式为查询方式
UFCON2 =0x01; //禁止FIFO
/****************************************************************************
波特率的设置,系统的PCLK为66.MHz,根据数据手册第1101页设置UART的波特率,本次实
验的波特率设置为115200,8n1,计算得DIV_VAL=36.08-1,最后得出UBRDIV2=35,0.08*16
=1.28 UDIVSLOT2中有1个1
****************************************************************************/
UBRDIV2=35;
UDIVSLOT2=0x1;
}
void Uart_SendByte(char val)
{
while ((UFSTAT2 & (1<<14)) ); //Wait until THR is empty.
UTXH2=val;
}
unsigned char Uart_GetKey(void)
{
while ((UFSTAT2& (1<<6)) == 0 && (UFSTAT2& 0x3f) == 0);
return URXH2;
}
/*******************************************************************************
函数名称:main
功 能:实现UART的发送与接收
输入参数:无
输出参数:无
*******************************************************************************/
void main(void)
{
System_Init();
Uart_Init();
while(1)
{
Dat=Uart_GetKey();
Uart_SendByte(Dat+1);
}
}
这是我的UART2的源代码,只能发送,不能接收,是怎么回事?