zynq中PL部分的物理地址操作函数.doc
《zynq中PL部分的物理地址操作函数.doc》由会员分享,可在线阅读,更多相关《zynq中PL部分的物理地址操作函数.doc(6页珍藏版)》请在三一文库上搜索。
1、zynq中PL部分的物理地址操作函数1、 背景介绍在zynq中,由于有PL部分的存在,操作系统需要对PL部分的物理地址进行操作,也就是对操作相关IP核的寄存器。除了在驱动中进行映射外(参看前一篇文章点击打开链接),可以直接在用户态进行地址映射访问。2、 IO接口头文件如果做过裸奔的应用程序,可以看到用户app最终调用的接口无非是下面以下这一类函数:u8 Xil_In8(INTPTR Addr);u16 Xil_In16(INTPTR Addr);u32 Xil_In32(INTPTR Addr);void Xil_Out8(INTPTR Addr, u8 Value);void Xil_Out
2、16(INTPTR Addr, u16 Value);void Xil_Out32(INTPTR Addr, u32 Value);u16 Xil_In16BE(INTPTR Addr);u32 Xil_In32BE(INTPTR Addr);void Xil_Out16BE(INTPTR Addr, u16 Value);void Xil_Out32BE(INTPTR Addr, u32 Value);在访问物理地址方面,没有比这一类函数更底层的了。当在Linux下对这一类函数加以实现,用户app便可直接访问PL部分物理地址。实现这一类函数需要进行物理映射,不过由于不是驱动,这种映射可以直接
3、放在应用层实现。下面是xil_in32()和xil_out32()的具体实现,映射时只需要对/dev/mem映射即可。#include#include#include#include#include#include#include#include#include#define PAGE_SIZE (size_t)getpagesize()#define PAGE_MASK (uint64_t) (long)(PAGE_SIZE - 1)void Xil_Out32(uint64_t phyaddr, uint32_t val)int fd;volaTIle uint8_t *map_base;
4、uint64_t base = phyaddr PAGE_MASK;uint64_t pgoffset = phyaddr (PAGE_MASK);if(fd = open(/dev/mem, O_RDWR | O_SYNC) = -1)perror(open /dev/mem:);map_base = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,fd, base);if(map_base = MAP_FAILED)perror(mmap:);*(volaTIle uint32_t *)(map_base + pgoffse
5、t) = val;close(fd);munmap(void *)map_base, PAGE_SIZE);int Xil_In32(uint64_t phyaddr)int fd;uint32_t val;volaTIle uint8_t *map_base;uint64_t base = phyaddr PAGE_MASK;uint64_t pgoffset = phyaddr (PAGE_MASK);/open /dev/memif(fd = open(/dev/mem, O_RDWR | O_SYNC) = -1)perror(open /dev/mem:);/mmapmap_base
6、 = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,fd, base);if(map_base = MAP_FAILED)perror(mmap:);val = *(volaTIle uint32_t *)(map_base + pgoffset);close(fd);munmap(void *)map_base, PAGE_SIZE);return val;3、 应用层实现应用层中只需要指定起始物理地址,然后调用xil_in32()和xil_out32()进行操作,为了调用方便,可以封装一层。#ifndef SMARTCAR
7、MOVE_H#define SMARTCARMOVE_H#include#include#include#include#include#include#include#include#include#include move.hstatic int fd;#define MODE (O_WRONLY | O_TRUNC)/*static char *gpio_addr = /sys/class/gpio/export,/sys/class/gpio/gpio61/direction/,/sys/class/gpio/gpio61/value/,/sys/class/gpio/gpio62/d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- zynq PL 部分 物理地址 操作 函数
链接地址:https://www.31doc.com/p-3275582.html