/***************************************************
Project: UATR实验
Writer: SHOW
Time: 2011/10/17
Hareware: 硬件平台:mini2440 , J-link.
Function: 通过终端SecureCRT输入数字,回显数字+1。比如输入1回显2.
Direction:
参考资料:韦东山《嵌入式linux应用开发完全手册》Page171.
***************************************************/
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "def.h"
#include "mmu.h"
#include "Option.h"
#define LED1_OFF (1<<5)
#define LED2_OFF (1<<6)
#define LED3_OFF (1<<7)
#define LED4_OFF (1<<8)
#define MPLL_200MHZ ((0x5c<<12) | (0x01<<4) | (0x02))
void Init_UART(void);
void Set_PCLK_50M(void);
void Send_Character(unsigned char c);
unsigned char Receive_Character(void);
//========================================================================
// 函数名称: 延时1ms子函数
// 功能描述: 延时
// 参数: times为延时的ms数。
// 返回值: void
//========================================================================
void Delay1ms(int times)
{
int i;
for( ; times > 0; times-- )
for(i=400; i>0 ; i--);
}
//========================================================================
// 函数名称: 主函数
// 功能描述: 函数入口
// 参数: void
// 返回值: void
//========================================================================
void Main(void)
{
unsigned char c;
Set_PCLK_50M();
Init_UART();
while(1)
{
c = Receive_Character();
Delay1ms(100);
Send_Character(c+1);
}
}
//========================================================================
// 函数名称: UART初始化子函数
// 功能描述:
// 参数: void
// 返回值: void
//========================================================================
void Init_UART(void)
{
rGPHCON |= ((1 << 7) | (1 << 5)); //设置 GPH2,GPH3 为TXD0,RXD0 口。
rGPHUP |= ((1 << 3) | (1 << 2));
rULCON0 = 0x03;
rUCON0 = 0x05; // UART时钟源为PCLK。Transmit与Receive都为查询或者中断模式
rUFCON0 = 0x00; // 不使用FIFO
rUMCON0 = 0x00; // 不使用流控
rUBRDIV0 = (50000000 / (115200 * 16)) - 1;
}
//========================================================================
// 函数名称: PCLK大小设置函数
// 功能描述 设置PCLk设置为50M,用于UART。
// 参数: void
// 返回值: void
//========================================================================
void Set_PCLK_50M(void)
{
rMPLLCON = 0;
rMPLLCON |= MPLL_200MHZ; // MPLL = FCLK
rCLKDIVN = 0x03; // FCLK:HCLK:PCLK = 1:2:4 => PCLK = 50MHz.
}
//========================================================================
// 函数名称: 发送字符函数
// 功能描述 如果UTRSTAT0位[2]为1则说明发送完毕,则可以向UTXH0写入要发送的字符。
// 参数: void
// 返回值: void
//========================================================================
void Send_Character(unsigned char c)
{
while(!(rUTRSTAT0 & (1<<2)));
rUTXH0 = c;
}
//========================================================================
// 函数名称: 接受字符函数
// 功能描述 如果UTRSTAT0位[0]为1则说明接受缓冲区有数据,读UTXH0则可以得到数据。
// 参数: void
// 返回值: void
//========================================================================
unsigned char Receive_Character(void)
{
while(!(rUTRSTAT0 & (1<<0)));
return rURXH0;
}
Project: UATR实验
Writer: SHOW
Time: 2011/10/17
Hareware: 硬件平台:mini2440 , J-link.
Function: 通过终端SecureCRT输入数字,回显数字+1。比如输入1回显2.
Direction:
参考资料:韦东山《嵌入式linux应用开发完全手册》Page171.
***************************************************/
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "def.h"
#include "mmu.h"
#include "Option.h"
#define LED1_OFF (1<<5)
#define LED2_OFF (1<<6)
#define LED3_OFF (1<<7)
#define LED4_OFF (1<<8)
#define MPLL_200MHZ ((0x5c<<12) | (0x01<<4) | (0x02))
void Init_UART(void);
void Set_PCLK_50M(void);
void Send_Character(unsigned char c);
unsigned char Receive_Character(void);
//========================================================================
// 函数名称: 延时1ms子函数
// 功能描述: 延时
// 参数: times为延时的ms数。
// 返回值: void
//========================================================================
void Delay1ms(int times)
{
int i;
for( ; times > 0; times-- )
for(i=400; i>0 ; i--);
}
//========================================================================
// 函数名称: 主函数
// 功能描述: 函数入口
// 参数: void
// 返回值: void
//========================================================================
void Main(void)
{
unsigned char c;
Set_PCLK_50M();
Init_UART();
while(1)
{
c = Receive_Character();
Delay1ms(100);
Send_Character(c+1);
}
}
//========================================================================
// 函数名称: UART初始化子函数
// 功能描述:
// 参数: void
// 返回值: void
//========================================================================
void Init_UART(void)
{
rGPHCON |= ((1 << 7) | (1 << 5)); //设置 GPH2,GPH3 为TXD0,RXD0 口。
rGPHUP |= ((1 << 3) | (1 << 2));
rULCON0 = 0x03;
rUCON0 = 0x05; // UART时钟源为PCLK。Transmit与Receive都为查询或者中断模式
rUFCON0 = 0x00; // 不使用FIFO
rUMCON0 = 0x00; // 不使用流控
rUBRDIV0 = (50000000 / (115200 * 16)) - 1;
}
//========================================================================
// 函数名称: PCLK大小设置函数
// 功能描述 设置PCLk设置为50M,用于UART。
// 参数: void
// 返回值: void
//========================================================================
void Set_PCLK_50M(void)
{
rMPLLCON = 0;
rMPLLCON |= MPLL_200MHZ; // MPLL = FCLK
rCLKDIVN = 0x03; // FCLK:HCLK:PCLK = 1:2:4 => PCLK = 50MHz.
}
//========================================================================
// 函数名称: 发送字符函数
// 功能描述 如果UTRSTAT0位[2]为1则说明发送完毕,则可以向UTXH0写入要发送的字符。
// 参数: void
// 返回值: void
//========================================================================
void Send_Character(unsigned char c)
{
while(!(rUTRSTAT0 & (1<<2)));
rUTXH0 = c;
}
//========================================================================
// 函数名称: 接受字符函数
// 功能描述 如果UTRSTAT0位[0]为1则说明接受缓冲区有数据,读UTXH0则可以得到数据。
// 参数: void
// 返回值: void
//========================================================================
unsigned char Receive_Character(void)
{
while(!(rUTRSTAT0 & (1<<0)));
return rURXH0;
}