8 个解决方案
#1
要看具体的soc的具体GPIO寄存器
找到可以查看GPIO LEVEL的寄存器,读取相应位即可。
找到可以查看GPIO LEVEL的寄存器,读取相应位即可。
#2
如果是做硬件的, 简单的测量一下那个管脚的电压(0伏还是3.3伏).
如果用软件的方法,则需要查找相应的Soc的DataSheet,找出何那个IO口状态对应的寄存器的物理地址,然后读这个物理地址,找出相应的bit位,看是0还是1即可.
如果用软件的方法,则需要查找相应的Soc的DataSheet,找出何那个IO口状态对应的寄存器的物理地址,然后读这个物理地址,找出相应的bit位,看是0还是1即可.
#3
这个当然没问题,,但问题是在WINCE下可不可以直接去读IO的地址?。。。一个是在应用程序里面去判断是否有IO口是0还是1
比如在音频驱动里面去可以直接读IO地址吗,,还是须要从虚拟地址去读物理地址
比如在音频驱动里面去可以直接读IO地址吗,,还是须要从虚拟地址去读物理地址
#4
------------直接读虚拟地址可以,物理地址不可以。其实GPIO已经和虚拟地址绑定了,一样的效果,程序员们为了让程序让人看懂,才绑定的。
#5
首先用MmMapIoSpace把IO口的物理地址映射到你驱动的虚拟地址,然后读这个虚拟地址就直接读到那个物理地址了.有一点是必须说明的,软件无法直接读IO口本身的状态,只是所有的SOC都会有一个状态寄存器,寄存器上某一bit的值就体现了IO口的状态,他们是一一对应的,我们只有读这个状态寄存器的值,然后找到对应的bit进行判断.
对应音频驱动,不知道你说的读那个的IO的地址,如果是Soc的IO口,应该是可以读的,如果是外围器件(比如WM9712)的IO,是无法读的
#6
mark下...不同的芯片感觉控制IO口的方式都不同的.有的做的好的给你留了接口.作的一般的就给你个寄存器让你去改.烂的干脆什么都不告诉你...GPIO口的控制是个好东西啊..
#7
用VIRTUALCOPY可以,先分配内存,然后读到对应的结构体状态,对应你要的那一路GPIO,去判断那个SFR的数据就可以了。
#8
嗯,,太感谢了
我们倒是直接去读IO的状态呢,,,应该是不可以直接读物理地址的。
没有那里有相关的书或者电子档哈
我们倒是直接去读IO的状态呢,,,应该是不可以直接读物理地址的。
没有那里有相关的书或者电子档哈
#1
要看具体的soc的具体GPIO寄存器
找到可以查看GPIO LEVEL的寄存器,读取相应位即可。
找到可以查看GPIO LEVEL的寄存器,读取相应位即可。
#2
如果是做硬件的, 简单的测量一下那个管脚的电压(0伏还是3.3伏).
如果用软件的方法,则需要查找相应的Soc的DataSheet,找出何那个IO口状态对应的寄存器的物理地址,然后读这个物理地址,找出相应的bit位,看是0还是1即可.
如果用软件的方法,则需要查找相应的Soc的DataSheet,找出何那个IO口状态对应的寄存器的物理地址,然后读这个物理地址,找出相应的bit位,看是0还是1即可.
#3
这个当然没问题,,但问题是在WINCE下可不可以直接去读IO的地址?。。。一个是在应用程序里面去判断是否有IO口是0还是1
比如在音频驱动里面去可以直接读IO地址吗,,还是须要从虚拟地址去读物理地址
比如在音频驱动里面去可以直接读IO地址吗,,还是须要从虚拟地址去读物理地址
#4
------------直接读虚拟地址可以,物理地址不可以。其实GPIO已经和虚拟地址绑定了,一样的效果,程序员们为了让程序让人看懂,才绑定的。
#5
首先用MmMapIoSpace把IO口的物理地址映射到你驱动的虚拟地址,然后读这个虚拟地址就直接读到那个物理地址了.有一点是必须说明的,软件无法直接读IO口本身的状态,只是所有的SOC都会有一个状态寄存器,寄存器上某一bit的值就体现了IO口的状态,他们是一一对应的,我们只有读这个状态寄存器的值,然后找到对应的bit进行判断.
对应音频驱动,不知道你说的读那个的IO的地址,如果是Soc的IO口,应该是可以读的,如果是外围器件(比如WM9712)的IO,是无法读的
#6
mark下...不同的芯片感觉控制IO口的方式都不同的.有的做的好的给你留了接口.作的一般的就给你个寄存器让你去改.烂的干脆什么都不告诉你...GPIO口的控制是个好东西啊..
#7
用VIRTUALCOPY可以,先分配内存,然后读到对应的结构体状态,对应你要的那一路GPIO,去判断那个SFR的数据就可以了。
#8
嗯,,太感谢了
我们倒是直接去读IO的状态呢,,,应该是不可以直接读物理地址的。
没有那里有相关的书或者电子档哈
我们倒是直接去读IO的状态呢,,,应该是不可以直接读物理地址的。
没有那里有相关的书或者电子档哈