Q:如何具體設計.c程序代碼訪問控制FPGA端外設?
A:以控制DE1-SoC開發板的LEDR為例的Linux .C程序代碼。頭文件fcntl.h和sys/mman.h用于使用/dev/mem文件,以及mmap和munmap內核函數;address_map_arm.h指定了DE1-SoC_Computer系統中所有FPGA I/O外設的地址偏移量;open_physical和close_physical函數用于打開和關閉/dev/mem設備文件,map_physical函數調用mmap內核函數創建物理到虛擬地址映射,unmap_physical函數用于關閉映射;
if (!(LW_virtual = map_physical (fd, LW_BRIDGE_BASE, LW_BRIDGE_SPAN)))? 將/dev/mem的部分文件映射到內;LEDR_ptr = (unsigned int *) (LW_virtual + LEDR_BASE)計算映射到LEDR端口的虛擬地址;
*LEDR_ptr = 0x2aa即讀取LEDR端口的data寄存器值。 ?
將該程序拷貝到SD卡插入DE1-SoC開發板,啟動DE1-SoC-UP Linux系統后,在系統中編譯程序并運行,可觀察到DE1-SoC開發板的10個LEDR的狀態:點亮、熄滅、點亮、熄滅、點亮、熄滅、點亮、熄滅、點亮、熄滅。