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;
}
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;
}
相关文章推荐
- 【ARM学习笔记】实验三:S3C2440A与内存SDRAM连接实验
- ARM底层学习笔记-裸板实验程序解析-点亮LED
- ARM裸机篇--串口UART实验
- 【ARM学习笔记】实验四:内存管理单元MMU的虚拟地址映射实验
- 【iCore4 双核心板_ARM】例程三十二:UART_IAP_ARM实验——更新升级STM32
- [置顶] ARM开发(5)基于STM32的UART串口通信实验
- 学习 ARM 系列 -- FS2410 开发板上的内存搬移实验
- ble学习笔记十二---------------协议栈之UART实验
- ARM学习之ADC实验
- 【iCore1S 双核心板_ARM】例程二十:UART_IAP_ARM实验——更新升级STM32
- ble学习笔记十二---------------协议栈之UART实验
- 【iCore4 双核心板_FPGA】例程十二:基于UART的ARM与FPGA通信实验
- ARM学习之LCD实验
- ARM裸机实验 UART串口(S3C2440A) TQ2440
- ARM底层学习笔记-裸板实验程序解析-点亮LED
- ARM课程实验二 UART 串口通信实验
- ARM学习之触摸屏实验
- Linux独立中断栈学习笔记及验证实验(ARM、x86)
- 【ARM学习笔记】实验一:S3C2440A的GPIO输出实验
- ARM学习之KEY_ENT实验