ESP8266--学习笔记(八)串口源码分析
来源:互联网 发布:广东广播开放大学网络 编辑:程序博客网 时间:2024/06/05 17:47
我一直对ESP8266的串口传输的机制很好奇,没办法只得好好分析源码了。
ESP8266的中断系统是必须要了解的。我分析的源代码是分配有任务的,所以在任务函数中是无法看到中断的。我的分析如下:
代码实现如下:
串口接收中断处理函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
任务函数
- 1
- 2
- 3
- 4
- 5
- 6
如此这般,当串口接收中断发生时,FIFO满了或FIFO超时了,都会使得中断向任务发送消息,从而让任务中的接收任务事件跑起来。
串口中断函数分析:
首先UART的中断寄存器有:
- UART_INT_RAW 中断原始状态寄存器
- UART_INT_ENA 中断使能寄存器:表⽰示当前使能的uart中断。
- UART_INT_ST 中断状态寄存器:表⽰示当前有效的中断状态
- UART_INT_CLR 清除中断寄存器:置对应位来清除中断状态寄存器
然后UART的一些特殊的位:
- UART_RXFIFO_FULL_INT_ST :接收full中断位
- UART_RXFIFO_OVF_INT_ST:接收溢出中断位
- UART_RXFIFO_TOUT_INT_ST :接收超时中断位
- UART_TXFIFO_EMPTY_INT_ST:发送空中断位
然后UART的寄存器操作函数:
- READ_PERI_REG(addr) 读寄存器值的函数
- WRITE_PERI_REG(addr, val) 写寄存器函数
代码分析 uart.c–uart0_rx_intr_handler()
- 1
- 2
- 3
- 4
- 5
根据前面的各种各样的标识符分析
- 首先读uart0的中断状态寄存器
READ_PERI_REG(UART_INT_ST(UART0))
- 而 UART_FRM_ERR_INT_ST 是这么定义的
#define UART_FRM_ERR_INT_ST (BIT(3))
- 然后将这两个寄存器进行“和”运算再与UART_FRM_ERR_INT_ST进行判断
总结:
经过一系列的分析,所谓的串口接收中断函数就是:中断发生后,CPU首先查看串口中断位,然后在将查询到的值与那些特殊位进行比较,得出串口的当前状态:串口接收错误?串口接收FIFO满了?串口接收FIFO超时?…….然后根据不同的状态进行不同的操作。
如果加入了任务调控机制,就可以在串口发生中断的时候,给任务发送消息了。让任务进行操作。
————————————————————
下面这段代码首先分析标识符:
- READ_PERI_REG(…):读取tx/rx 队列内当前剩余的字节数
- UART_STATUS(…)
- UART_RXFIFO_CNT :0x000000FF (255)
- UART_RXFIFO_CNT_S :0
阅读全文
0 0
- ESP8266--学习笔记(八)串口源码分析
- ESP8266--学习笔记(八)串口源码分析
- ESP8266--学习笔记(八)-由AT固件源码分析一
- ESP8266--学习笔记(一)串口输出HelloWorld
- ESP8266--学习笔记(八)中断(一)GPIO中断
- ESP8266学习笔记(一)
- ESP8266--学习笔记(零)学习ESP8266常用软件
- redis源码分析(八)、redis数据结构之压缩ziplist--------ziplist.c ziplist.h学习笔记
- ESP8266 WiFi串口模块的学习与使用(一)
- ESP8266 WiFi串口模块的学习与使用(一)
- 串口学习笔记源码 VS2010
- STM32学习笔记:ESP8266模块(1)
- ESP8266--学习笔记(转载资料一)
- ESP8266--学习笔记(六)Http请求
- ESP8266--学习笔记(七)UART转发
- ESP8266--学习笔记(十一)任务
- ESP8266学习笔记——(1)
- ESP8266 学习笔记
- PAT (Basic Level) Practise (中文)1066. 图像过滤(15)
- DA1458x SDK Software Layout 随笔
- ubuntu14.04安装boost1.58.0
- 开始我的微信公众号
- Android 自动调整 TextView 文字大小仅显示一行
- ESP8266--学习笔记(八)串口源码分析
- TextView实现点击部分文字跳转,实现微信朋友圈评论Item的显示效果
- js遍历ajax回调函数返回值中的object对象
- linux下查看java虚拟机(JVM)GC情况
- 二叉树---(3)前序遍历,中序遍历,后序遍历
- [spark] Shuffle Read解析 (Sort Based Shuffle)
- (待解决) hdu HDU4539 郑厂长系列故事——排兵布阵 (状态压缩dp~)
- SQL float 类型相减为0时得1.11022e-016
- 小数组拷贝