TQ210裸机编程——uart
来源:互联网 发布:增值税发票的税率算法 编辑:程序博客网 时间:2024/05/21 06:54
TQ210底板上引出了四个uart,实际上S5PV210只有4对独立的异步串行端口
其中UART1和UART2也被转为232接口
S5PV210的uart结构图如下
所有端口都可工作与中断模式或DMA模式,可提供3M的位速率,每个UART都有两个FIFO,分别用于接收和发送,但每组端口的FIFO大小不尽相同。
要使串口工作,可按如下操作进行相应的配置
1、配置时钟,选择时钟源。
2、配置ULCON寄存器,设置模式,校验位,停止位和数据位
3、配置UCON寄存器,设置数据接收和发送模式,以及时钟源等
4、配置UFCON寄存器,选择使用或禁用FIFO
5、配置UBRDIV和UDIVSLOT寄存器,用于配置波特率
对于学过M3/M4的人来说,这些并不难,但波特率的计算方式有些许差别
数据手册上有相应的计算公式
计算出来的小数部分需要进行查表
uart的配置代码如下
#include "stdio.h"#definepinaddr*((unsigned int*)0xE0200000)#define pindata *((unsigned int*)0xE0200004)#define ULCON0*((unsigned int*)0xE2900000)#define UCON0*((unsigned int*)0xE2900004)#define UFCON0*((unsigned int*)0xE2900008)#define UTRSTAT0*((unsigned int*)0xE2900010)#define UBRDIV0*((unsigned int*)0xE2900028)#define UDIVSLOT0*((unsigned int*)0xE290002C)#define UTXH0*((unsigned int*)0xE2900020)#define URXH0*((unsigned int*)0xE2900024)void uart_init(void){pinaddr = 0x00000022;ULCON0 = 0x03 | (0 << 2) | (0 << 3) | (0 << 6);UCON0 = 0X01 | (1 << 2) | (0 << 10);UFCON0 = 0;/*** 波特率计算:115200bps** PCLK = 66MHz** DIV_VAL = (66000000/(115200 x 16))-1 = 35.8 - 1 = 34.8** UBRDIV0 = 34(DIV_VAL的整数部分)** (num of 1's in UDIVSLOTn)/16 = 0.8** (num of 1's in UDIVSLOTn) = 12** UDIVSLOT0 = 0xDDDD (查表)*/UBRDIV0 = 34;UDIVSLOT0 = 0xDDDD;}char recv_byte(void){if((UTRSTAT0 & 0x01) == 0x01)return URXH0;elsereturn 0;}void send_byte(char c){while(!(UTRSTAT0 & (1 << 2)));UTXH0 = c;}char put_string(char* string){while(*string != '\0'){send_byte(*string);if(*string == '\r'){send_byte('\n');return 0;}string += 1;}}
再用led做一个指示灯
#include "stdio.h"#define CONADDR *((unsigned int*)0xE0200060)#defineDATADDR*((unsigned int*)0xE0200064)void led_init(void){CONADDR = 0x00011000;}void led1_toggle(void){unsigned int readdat=0;readdat = DATADDR;readdat^= 0x08;DATADDR = readdat;}void led2_toggle(void){unsigned int readdat=0;readdat = DATADDR;readdat^= 0x10;DATADDR = readdat;}现象:发送1,led1翻转;发送2,led2翻转
#include "stdio.h"void led1_toggle(void);void led2_toggle(void);char recv_byte(void);int main(void){char c = 0;put_string("TQ210 USART TEST\r\n" );put_string("--------------------\r\n" );put_string("auther:JESSE\r\n" );put_string("date :2017.11.7\r\n" );led1_toggle();while(1){c = recv_byte();if(c == 1)led1_toggle();if(c == 2)led2_toggle();}}再写个简单的脚本,编译一下就可以了
阅读全文
0 0
- TQ210裸机编程——uart
- TQ210裸机编程(8)——PWM
- TQ210裸机编程——按键点灯
- TQ210裸机编程——led
- TQ210裸机编程——printf
- TQ210裸机编程(4)——按键(中断法)
- TQ210裸机编程(1)——LED流水灯
- TQ210裸机编程(2)——按键(查询法
- TQ210裸机编程(4)——按键(中断法)
- TQ210裸机编程(4)——按键(中断法)
- TQ210裸机编程——按键点灯 (二)
- S5PV210(TQ210)裸机编程
- Exynos4412裸机开发 —— UART
- Exynos4412裸机开发 —— UART
- ARM裸机编程系列---UART
- TQ210的裸机编程(一)点亮一个LED灯
- ARM裸机——FS2410串口通信(UART)
- TQ210——常见问题
- 蒟蒻复习之—–对拍
- oracle定时任务
- Two Sum
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 三角形的判定
- TQ210裸机编程——uart
- install record
- 七大查找算法
- 图片压缩按质量压缩
- MVP的简单使用
- nginx upstream模块配置
- VMware Workstation12安装Ubuntu 16.04和VMware Tools教程
- HDU1052Tian Ji -- The Horse Racing
- 组建一台计算机1_硬件1 单位加法器