1.
在zigbee
協議棧中,
haluartcfg_t
結構體是如何定義的? 2.
串列埠是如何初始化的? 3.
傳送給串列埠的資料時如何接收的? 4.
串列埠是如何向pc
機傳送資料的?
這些問題涉及三個函式:haluartopen
()、haluartread
()、haluartwrite()
haluartopen()函式原型如下:
uint8 haluartopen(uint8 port, haluartcfg_t *config)
該函式實際上是呼叫了haluartopendma
函式,haluartopendma
函式原型如下:
static void haluartopendma(haluartcfg_t *config)
else
switch (config->baudrate)
// 8 bits/char; no parity; 1 stop bit; stop bit hi.
if (config->flowcontrol)
else
dmacfg.rxbuf[0] = *(volatile uint8 *)dma_udbuf; // clear the dma rx trigger.
hal_dma_clear_irq(hal_dma_ch_rx);
hal_dma_arm_ch(hal_dma_ch_rx);
osal_memset(dmacfg.rxbuf, (dma_pad ^ 0xff), hal_uart_dma_rx_max*2);
uxcsr |= csr_re;
// initialize that tx dma is not pending
dmacfg.txdmapending = false;
dmacfg.txshdwvalid = false; }
在zigbee
協議棧中,
ti採用的方法是將串列埠和
dma結合起來使用
該函式有個haluartcfg_t
型別的引數,定義如下:
typedef struct
haluartcfg_t;
typedef void (*haluartcback_t) (uint8 port, uint8 event);
在haluartopendma
()函式中對串列埠波特率進行了初始化,同時對
dma接收緩衝區進行了初始化
在zigbee
協議棧中,開闢了
dma傳送緩衝區和接收緩衝區:
使用者通過串列埠向串列埠傳送資料時,資料首先存放在dma
接收緩衝區中,然後使用者呼叫
haluartread
()函式進行讀取,實際上是讀取
dma緩衝區中的資料,
haluartread
()函式原型如下:
uint16 haluartread(uint8 port, uint8 *buf, uint16 len)
當使用者呼叫haluartwrite
()函式傳送資料時,實際上是將資料寫入
dma傳送緩衝區,然後
dma自動將傳送緩衝區中的資料通過串列埠傳送給pc機
uint16 haluartwrite(uint8 port, uint8 *buf, uint16 len)
pc與zigbee任意字串傳輸實驗
};
uartconfig.configured = true;
uartconfig.baudrate = hal_uart_br_115200;
uartconfig.flowcontrol = false;
uartconfig.flowcontrolthreshold = 64;
uartconfig.rx.maxbufsize = 128;
uartconfig.tx.maxbufsize = 128;
uartconfig.idletimeout =6;
uartconfig.intenable = true;
uartconfig.callbackfunc = rxcb;
haluartopen(0,&uartconfig);
}static void rxcb(uint8 port,uint8 event)}
串列埠非同步收發資料
以linux系統為例,建議從basedataendpoint建立乙個子類,同時實現epollproxy介面,比如serialport linux,在開啟裝置後把handle繫結到epoll上即可 class sdk ext class serialport linux public basedata...
C 串列埠收發資料
串列埠命名空間 using system.io.ports 例項化串列埠物件 串列埠引數 串口號,波特率,資料位,停止位 奇偶校驗位 例項1 只通過串口號新建例項 返回值 串口號集合 serialport.getportnames 判斷串列埠是否開啟 如果串列埠沒有開啟就開啟串列埠 port.iso...
QT 串列埠收發
1 新增第三方qextserialport庫 解壓複製貼上到工程路徑,在工程檔案pro檔案中新增工程 include pwd qextserialport qextserialport.pri 編譯後pri庫被載入到工程中。2 串列埠初始化 定義如下變數 並將其初始化,因為使用需要,我將除了串口號之...