您的位置:首页 > 其它

ARM学习之UART实验

2011-10-19 10:30 375 查看
/***************************************************

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: