S3C6410 UART0 简单配置
2016-02-16 23:22
453 查看
ULCON0 0x7F005000 R/W UART channel 0 line control register 0x00
UCON0 0x7F005004 R/W UART channel 0 control register 0x00
UFCON0 0x7F005008 R/W UART channel 0 FIFO control register 0x0
UMCON0 0x7F00500C R/W UART channel 0 Modem control register 0x0
UTRSTAT0 0x7F005010 R UART channel 0 Tx/Rx status register 0x6
UERSTAT0 0x7F005014 R UART channel 0 Rx error status register 0x0
UFSTAT0 0x7F005018 R UART channel 0 FIFO status register 0x00
UMSTAT0 0x7F00501C R UART channel 0 Modem status register 0x0
UTXH0 0x7F005020 W UART channel 0 transmit buffer register -
URXH0 0x7F005024 R UART channel 0 receive buffer register 0x00
UBRDIV0 0x7F005028 R/W UART channel 0 Baud rate divisior register 0x0000
UDIVSLOT0 0x7F00502C R/W UART channel 0 Dividing slot register 0x0000
UINTP0 0x7F005030 R/W UART channel 0 Interrupt Pending Register 0x0
UINTSP0 0x7F005034 R/W UART channel 0 Interrupt Source Pending Register 0x0
UINTM0 0x7F005038 R/W UART channel 0 Interrupt Mask Register 0x0
详细可查datasheet.
以上是所有控制S3C6410 串口通信的外设寄存器,一下用一个例子来说明串口通信的简单配置:
配置UART0:
首先配置ULCON0寄存器 0x7F005000
Normal模式,无奇偶校验,1stop bit,8bits word length
ULCON0=0x03
配置UCON0寄存器 0x7F005004
选PCLK时钟,中断类型选了Pulse,禁止超时使能,不产生接受错误中断,不使用loop-break模式,不send break signal,发送与接受模式为中断或轮询模式
UCON0=0x05 (0101)
配置UFCON0...0x7F005008
Rx trigger level 1byte ; Tx tr
8528
igger level Empty ; FIFO reset:nomal ; FIFO:enable
UFCON0=0x01
配置UMCON0 0x7F00500C
因为无流控,所以这个寄存器设置为0即可
UMCON0=0
最后配置波特率
通过设置两个寄存器
UBRDIV0和UDIVSLOT0
规则如下
假如 设置波特率为115200 此时PCLK为66.5MHz 根据公式算得
DIV_VAL=(66.5MHz/(bps*16))-1=36.07
再根据公式
DIV_VAL=UBRDIV0(整数部分)+UDIVSLOT0(小数部分)/16
则UBRDIV0为整数部分 36
小数部分(十分位)为 0
则UDIVSLOT0为 0个1 即0x000 ♥note : 假如小数部分(十分位)为 7 则为0.7*16=11.2 取整数部分 则11个1 则UDIVSLOT0=0xDDD5 1101 1101 1101 0101b
最终完成一个简单的UART0的配置
接着通过查询各种状态寄存器来进行发送与接受数据。
UCON0 0x7F005004 R/W UART channel 0 control register 0x00
UFCON0 0x7F005008 R/W UART channel 0 FIFO control register 0x0
UMCON0 0x7F00500C R/W UART channel 0 Modem control register 0x0
UTRSTAT0 0x7F005010 R UART channel 0 Tx/Rx status register 0x6
UERSTAT0 0x7F005014 R UART channel 0 Rx error status register 0x0
UFSTAT0 0x7F005018 R UART channel 0 FIFO status register 0x00
UMSTAT0 0x7F00501C R UART channel 0 Modem status register 0x0
UTXH0 0x7F005020 W UART channel 0 transmit buffer register -
URXH0 0x7F005024 R UART channel 0 receive buffer register 0x00
UBRDIV0 0x7F005028 R/W UART channel 0 Baud rate divisior register 0x0000
UDIVSLOT0 0x7F00502C R/W UART channel 0 Dividing slot register 0x0000
UINTP0 0x7F005030 R/W UART channel 0 Interrupt Pending Register 0x0
UINTSP0 0x7F005034 R/W UART channel 0 Interrupt Source Pending Register 0x0
UINTM0 0x7F005038 R/W UART channel 0 Interrupt Mask Register 0x0
详细可查datasheet.
以上是所有控制S3C6410 串口通信的外设寄存器,一下用一个例子来说明串口通信的简单配置:
配置UART0:
首先配置ULCON0寄存器 0x7F005000
Normal模式,无奇偶校验,1stop bit,8bits word length
ULCON0=0x03
配置UCON0寄存器 0x7F005004
选PCLK时钟,中断类型选了Pulse,禁止超时使能,不产生接受错误中断,不使用loop-break模式,不send break signal,发送与接受模式为中断或轮询模式
UCON0=0x05 (0101)
配置UFCON0...0x7F005008
Rx trigger level 1byte ; Tx tr
8528
igger level Empty ; FIFO reset:nomal ; FIFO:enable
UFCON0=0x01
配置UMCON0 0x7F00500C
因为无流控,所以这个寄存器设置为0即可
UMCON0=0
最后配置波特率
通过设置两个寄存器
UBRDIV0和UDIVSLOT0
规则如下
假如 设置波特率为115200 此时PCLK为66.5MHz 根据公式算得
DIV_VAL=(66.5MHz/(bps*16))-1=36.07
再根据公式
DIV_VAL=UBRDIV0(整数部分)+UDIVSLOT0(小数部分)/16
则UBRDIV0为整数部分 36
小数部分(十分位)为 0
则UDIVSLOT0为 0个1 即0x000 ♥note : 假如小数部分(十分位)为 7 则为0.7*16=11.2 取整数部分 则11个1 则UDIVSLOT0=0xDDD5 1101 1101 1101 0101b
最终完成一个简单的UART0的配置
接着通过查询各种状态寄存器来进行发送与接受数据。
相关文章推荐
- c++编译器何时会生成默认构造函数
- POJ 2774 Long Long Message 后缀数组/后缀自动机
- 下拉刷新SwipeRefreshLayout源码
- 联想手机打翻身仗的六大逻辑
- LeetCode 242. Valid Anagram
- 数学与程序员的关系以及哲学
- matlab GUI学习
- about 字节
- Centos下安装Discuz!
- (java) Unique Paths
- 今天折腾这么一个正则
- BZOJ 2251 Beijing WC 2010 外星联络 后缀数组
- Winedt常用配置
- Windows系统Stunnel客户端的配置
- Building Maintainable Software-java篇之 Write Clean Code
- 【hadoop】win7-32位下安装hadoop2.x
- java 设计模式之策略模式
- 删除Xcode中多余的证书provisioning profile
- 开发技术组件官网教程清单
- 2016给自己一个交代