当前位置: 技术问答>linux和unix
弱弱的问个问题
来源: 互联网 发布时间:2016-06-24
本文导语: 刚开始学习driver就遇到了困难,以下是一段代码,想问几个问题: 假设#define CONFIG_ARCH_IMX 1, (*((volatile u32 *)IO_ADDRESS(x))) 如何理解,是将IO_ADDRESS(x)转换为volatile u32类型,然后取这个地址上所存储的值吗? 2, 算得 x为0x0e01c...
刚开始学习driver就遇到了困难,以下是一段代码,想问几个问题:
假设#define CONFIG_ARCH_IMX
1, (*((volatile u32 *)IO_ADDRESS(x))) 如何理解,是将IO_ADDRESS(x)转换为volatile u32类型,然后取这个地址上所存储的值吗?
2, 算得 x为0x0e01c020, 函数打印GIUS(GPIO_PORTA)的值为0x80467ffe, 这两个值的关系是什么?是否是0x0e01c020地址上对应存储的值是0x80467ffe吗?
#define IMX_IO_BASE 0xe0000000
#define IO_ADDRESS(x) ((x) | IMX_IO_BASE)
#if defined(CONFIG_ARCH_IMX)
#define IMX_GPIO_BASE (0x1C000 + IMX_IO_BASE)
#elif defined(CONFIG_ARCH_IMX21)
#define IMX_GPIO_BASE (0x15000 + IMX_IO_BASE)
#endif
define __REG(x) (*((volatile u32 *)IO_ADDRESS(x)))
# define __REG2(x,y) (*(volatile u32 *)((u32)&__REG(x) + (y))) // x 为0x0e01c020, y为0?
#define GIUS(x) __REG2(IMX_GPIO_BASE + 0x20, ((x) & 7)
假设#define CONFIG_ARCH_IMX
1, (*((volatile u32 *)IO_ADDRESS(x))) 如何理解,是将IO_ADDRESS(x)转换为volatile u32类型,然后取这个地址上所存储的值吗?
2, 算得 x为0x0e01c020, 函数打印GIUS(GPIO_PORTA)的值为0x80467ffe, 这两个值的关系是什么?是否是0x0e01c020地址上对应存储的值是0x80467ffe吗?
#define IMX_IO_BASE 0xe0000000
#define IO_ADDRESS(x) ((x) | IMX_IO_BASE)
#if defined(CONFIG_ARCH_IMX)
#define IMX_GPIO_BASE (0x1C000 + IMX_IO_BASE)
#elif defined(CONFIG_ARCH_IMX21)
#define IMX_GPIO_BASE (0x15000 + IMX_IO_BASE)
#endif
define __REG(x) (*((volatile u32 *)IO_ADDRESS(x)))
# define __REG2(x,y) (*(volatile u32 *)((u32)&__REG(x) + (y))) // x 为0x0e01c020, y为0?
#define GIUS(x) __REG2(IMX_GPIO_BASE + 0x20, ((x) & 7)
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!