串列埠收發資料1

2021-09-30 11:29:06 字數 2223 閱讀 2959

 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 串列埠初始化 定義如下變數 並將其初始化,因為使用需要,我將除了串口號之...