好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 UART驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。需要注意的是,本代码中,对GPIO的初始化放在了s3c2440.s中完成,采用keil自带的html方式进行配置。
该源码结构简单明了,原始工程下载地址:点击打开链接
UART控制器初始化:
void Uart_Init(void)
{
#define rULCON0 (*(volatile unsigned int*)0x50000000)
#define rUCON0 (*(volatile unsigned int*)0x50000004)
#define rUBRDIV0 (*(volatile unsigned int*)0x50000028)
#define PCLK 50000000
#define BUADRATE 115200
rULCON0 = 0x03; //No parity, One stop bit, 8-bits data
rUCON0 = 0x05; //Tx Enable, Rx Enable, PCLK as source clock
rUBRDIV0 = (int)(PCLK / (BUADRATE * 16)) - 1; //115200bps
}
字符发送函数:
void Uart_Putc(unsigned char c)
{
#define rUTRSTAT0 (*(volatile unsigned int*)0x50000010)
#define rUTXH0 (*(volatile unsigned int*)0x50000020)
#define BUFFER_EMPTY (1 << 1)
while(!(rUTRSTAT0 & BUFFER_EMPTY));
rUTXH0 = c;
}
字符接收函数:
unsigned char Uart_Getc(void)
{
#define rUTRSTAT0 (*(volatile unsigned int*)0x50000010)
#define rURXH0 (*(volatile unsigned int*)0x50000024)
#define BUFFER_READY (1 << 0)
while(!(rUTRSTAT0 & BUFFER_READY));
return rURXH0;
}
为了使用printf库函数,需要进行如下重映射:
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef'd in stdio.h. */
FILE __stdout;
int fputc(int ch, FILE *f)
{
Uart_Putc(ch);
return ch;
}
int ferror(FILE *f) {
/* Your implementation of ferror */
return EOF;
}
测试代码:
int main(void)
{
unsigned char ch;
//clock_init();
Uart_Init();
printf("%s, %d", __FILE__, __LINE__);
while(1)
{
ch = Uart_Getc();
Uart_Putc(ch);
}
}
上一篇:S3C2440之Camera驱动代码模板(RealView MDK)
下一篇:S3C2440之MMU驱动代码模板(RealView MDK)
推荐阅读最新更新时间:2024-03-16 16:04
设计资源 培训 开发板 精华推荐
- 工信部发布一批“冠军”名单,澜起科技、宁德时代、江苏
- 华为Mate 20系列竞争 分析师下调iPhone XR约3000万部预估出货量
- 为人工智能而生,英特尔公布Cascade Lake-AP处理器详细性能数
- 贸易战恐造成苹果供应链的台湾厂商最大规模迁徙
- 中国面板设备需求旺盛,盟立借此纯利润年增207%!
- 华为畅享 20 Plus官方渲染图解密:Mate 30式后摄+天玑720
- 首发屏下摄像头!中兴AXON 20 5G四色解密
- 华为Mate 40首次采用90Hz FHD+屏:面板开始量产
- 摩托罗拉Razr 5G或9月发布
- 苹果开售iPad 10.2英寸官翻机:A10处理器,蜂窝版售价3245元