微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Windows嵌入式疑难问题解答

Windows嵌入式疑难问题解答

时间:05-28 来源:互联网 点击:

问:我的用户态驱动和内核态ISR要对I/O设备协同操作才能完成, 但我的IO设备是这样工作的:
IO设备只有一个地址,内部有16个寄存器,
要对设备中的寄存器读写时, 要先往IO 端口中写寄存器号,再在这个端口读写,(有点像对COMS的操作)
这就要保证一个读写操作要两次IO,并且一定要成对出现,就是这两个操作要是原子的,不可拆分;
如果IST正刚往端口中写了寄存器号,还没来得及写数据,这时中断来了,ISR也要操作设备,那不是乱了,
这种问题怎么解决呢?有没有什么信号量、互斥量什么的可以用?
答:看看ISR 和 IST的协助方式,就知道如何解决这种问题,在网上也有人已经回答了这个问题:
1. IST 在操作时, 通常还没 call InterruptDone(dwSysIntr);, 故 ISR 不会产生中断, 就没有这个问题了.
2. ISR 先把 Index Register 读出後保存後再修改, 离开前再改回原值.
3. 将 IST 要读的值全部放在 ISR 内读完, 再用 Share Memory 的方式, 送给 IST.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top