第一个图是在arm裸机下,对总线操作的波形图,上面的是片选,低电平有效。下面为某一条数据线的数据。
第二个图是当我把相同的程序,写成字符设备驱动,加载进linux内核,并且对相同的信号进行测试时,出现的波形
请高手指点,为什么两个波形会不一样。而且,在裸机下可以实现要求的功能。相同的程序写成字符设备驱动的时候,功能无法实现。求指点
11 个解决方案
#1
写反了,第一个图是在操作系统下的图
第二个图是在裸机下。相同的程序。
第二个图是在裸机下。相同的程序。
#2
瞎猜的,跟中断有关。
#3
总线我也没写什么中断啊
#4
你不写,系统自己本身就有吧,而且你要求那么高,linux本就不是实时系统。
第二张图是你要的效果是吗?
第二张图是你要的效果是吗?
#5
第二章图我无法理解,蓝色的低电平是片选,黄色的高电平是数据,为什么会出现两个高电平。而且片选期间,数据高电平持续时间那么短。
#6
不知道是什么总线,严重怀疑程序正确性。
#7
同意,应该跟系统关系不大。
#8
两个波形没什么比较意义,感觉还是应该从驱动移植上入手。裸机能正确运行,说明驱动本身还是正确的,问题十有八九出在移植上。
#9
高级示波器啊
#10
linux启动后,对总线操作估计和你裸机的操作不一样,有些差异造成的,我猜
#11
问题解决,在驱动里面涉及到了1M的地址空间,都要映射成虚拟地址。最开始我映射的方法是直接映射1M的地址空间,其他的地址加个偏移量操作,结果总线出现了上述的问题。当我往总线上写数据的时候,发现读信号和写信号都有。后来无耐之下,尝试了,一个地址一个地址映射,结果驱动正常使用。但不知道ioremap()到底怎么了?还是加偏移量出现了什么问题.
#1
写反了,第一个图是在操作系统下的图
第二个图是在裸机下。相同的程序。
第二个图是在裸机下。相同的程序。
#2
瞎猜的,跟中断有关。
#3
总线我也没写什么中断啊
#4
你不写,系统自己本身就有吧,而且你要求那么高,linux本就不是实时系统。
第二张图是你要的效果是吗?
第二张图是你要的效果是吗?
#5
第二章图我无法理解,蓝色的低电平是片选,黄色的高电平是数据,为什么会出现两个高电平。而且片选期间,数据高电平持续时间那么短。
#6
不知道是什么总线,严重怀疑程序正确性。
#7
同意,应该跟系统关系不大。
#8
两个波形没什么比较意义,感觉还是应该从驱动移植上入手。裸机能正确运行,说明驱动本身还是正确的,问题十有八九出在移植上。
#9
高级示波器啊
#10
linux启动后,对总线操作估计和你裸机的操作不一样,有些差异造成的,我猜
#11
问题解决,在驱动里面涉及到了1M的地址空间,都要映射成虚拟地址。最开始我映射的方法是直接映射1M的地址空间,其他的地址加个偏移量操作,结果总线出现了上述的问题。当我往总线上写数据的时候,发现读信号和写信号都有。后来无耐之下,尝试了,一个地址一个地址映射,结果驱动正常使用。但不知道ioremap()到底怎么了?还是加偏移量出现了什么问题.