ARM学习之UART实验

/***************************************************
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值