日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XIo的实现原理

發布時間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XIo的实现原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?在IICEEPRO.c文件中發現:

??????? old_reg = XIo_In32(adr);
??????? XIo_Out32(adr, old_reg & 0xFFFFFFFC);

不知Xio_In32()和Xio_Out32()的實現機理,于是研究了一下。

在生成硬件的bitstream之后,需要選擇Software菜單下的Generate Liberay and BSPs選項,它將生成一個目錄ppc405_0,其中的/include目錄中有一個文件xio.h,它實現了Xio_In32()和Xio_Out32()兩個函數的功能。代碼如下:

#define XIo_In32(InputPtr) (*(volatile Xuint32 *)(InputPtr)); SYNCHRONIZE_IO;
#define XIo_Out32(OutputPtr, Value) /
??? { (*(volatile Xuint32 *)(OutputPtr) = Value); SYNCHRONIZE_IO; }

可以看出,Xio_In32()就是取數據,Xio_Out32()就是寫數據到一個地址空間。volatile的意思簡單講就是指明它是外設地址,至于SYNCHRONIZE_IO宏的意義見下面的代碼:

/* The following macro is specific to the GNU compiler and PowerPC family. It
?* performs an EIEIO instruction such that I/O operations are synced correctly.
?* This macro is not necessarily portable across compilers since it uses
?* inline assembly.
?*/
#if defined __GNUC__
#? define SYNCHRONIZE_IO __asm__ volatile ("eieio")
#elif defined __DCC__
#? define SYNCHRONIZE_IO __asm volatile(" eieio")
#else
#? define SYNCHRONIZE_IO
#endif

上面的注釋寫的很清楚,主要是加了匯編語句eieio,使IO操作可以實時的進行。

?

?


總結

以上是生活随笔為你收集整理的XIo的实现原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。