ESP8266 學習筆記(八)串列埠原始碼分析

2021-08-10 19:41:47 字數 1268 閱讀 5901

我一直對esp8266的串列埠傳輸的機制很好奇,沒辦法只得好好分析原始碼了。 

esp8266的中斷系統是必須要了解的。我分析的源**是分配有任務的,所以在任務函式中是無法看到中斷的。我的分析如下:

**實現如下:

串列埠接收中斷處理函式

local void

uart0_rx_intr_handler(void *para)

if(uart_rxfifo_full_int_st == (read_peri_reg(uart_int_st(uart_no)) & uart_rxfifo_full_int_st))

else

if(uart_rxfifo_tout_int_st == (read_peri_reg(uart_int_st(uart_no)) & uart_rxfifo_tout_int_st))

任務函式

void icache_flash_attr

at_init(void)

如此這般,當串列埠接收中斷發生時,fifo滿了或fifo超時了,都會使得中斷向任務傳送訊息,從而讓任務中的接收任務事件跑起來。

串列埠中斷函式分析:

首先uart的中斷暫存器有:

然後uart的一些特殊的位:

然後uart的暫存器操作函式:

**分析 uart.c–uart0_rx_intr_handler()

if(uart_frm_err_int_st == (read_peri_reg(uart_int_st(uart0)) & uart_frm_err_int_st))

根據前面的各種各樣的識別符號分析

經過一系列的分析,所謂的串列埠接收中斷函式就是:中斷發生後,cpu首先檢視串列埠中斷位,然後在將查詢到的值與那些特殊位進行比較,得出串列埠的當前狀態:串列埠接收錯誤?串列埠接收fifo滿了?串列埠接收fifo超時?…….然後根據不同的狀態進行不同的操作。 

如果加入了任務調控機制,就可以在串列埠發生中斷的時候,給任務傳送訊息了。讓任務進行操作。

下面這段**首先分析識別符號:

while(read_peri_reg(uart_status(uart0)) & (uart_rxfifo_cnt << uart_rxfifo_cnt_s))

ESP 8266 串列埠通訊 Serial

esp8266的串列埠通訊與傳統的arduino裝置完全一樣。除了硬體fifo 128位元組用於tx和rx 之外,硬體串列埠還有額外的 256位元組的tx和rx快取。傳送和接收全都由中斷驅動。當fifo 快取滿時,write函式會阻塞工程 的執行,等待空閒空間。當fifo 快取空時,read函式也會...

ESP8266學習筆記

因為此模式可控性高且方便,所以推薦此模式 測試指令 at 應用模式設定 at cwmode 3 ap 模式 1 esp8266模組作為熱點,實現手機或電腦直接與模組通訊,實現區域網無線控制。sta 模式 2 esp8266模組通過路由器連線網際網路,手機或電腦通過網際網路實現對裝置的遠端控制 sta...

esp8266學習筆記

上學以前買了一片esp8266 一直沒用 也是醉了 最近有時間拿出來鼓搗一下 發現功能很強大 是內嵌了 處理器有wifi功能的一款小晶元 還便宜 esp8266 我知道的開發方式 有 可能不全 1 arduino ide for esp8266 2 刷nodemcu 用esploader 進行lua...