天天看點

get_gpio_attr()和read_gpio()

get_gpio_attr()和read_gpio()都可以用來對射頻闆的gpio進行讀取,隻不過get_gpio_attr()處于比較頂層的位置,而read_gpio()更靠近底層。get_gpio_attr()在multi_usrp.hpp中聲明;read_gpio()在sbx_commom.hpp中聲明。

要讀取gpio的輸出,get_gpio_attr()中提供了兩種方式:out和readback。out隻讀取由使用者控制的引腳輸出;readback則全部讀出。

read_gpio()讀取gpio的結果與get_gpio_attr()的readback讀取結果相同,都是全部讀取。

舉例說明:

假設已經定義了usrp裝置指針usrp和射頻闆接口iface,并将gpio的第6bit和第7bit設定為使用者控制:

iface->set_pin_ctrl(dboard_iface::unit_tx,txio_mask);

iface->set_gpio_ddr(dboard_iface::unit_tx,(txio_mask|rx_led_io));

并對發送單元的gpio作了如下設定(第6bit為1,第7bit為0,此時射頻闆led tx/rx亮):

iface->set_gpio_out(dboard_iface::unit_tx,tx_led_ld,tx_led_io);

用上述兩種方法去讀取gpio的值:

boost::uint32_t out=iface->read_gpio(dboard_iface::unit_tx);

std::cout<<out<<std::endl;

boost::uint32_t out1=usrp->get_gpio_attr("txrx","out");

std::cout<<out1<<std::endl;

boost::uint32_t out2=usrp->get_gpio_attr("txrx","readback");

std::cout<<out2<<std::endl

輸出的結果分别為:16459(二進制0100000001001011)、64(二進制0000000001000000)和16459(二進制0100000001001011)