当前位置: 代码迷 >> WinCE >> 编写wince的底层驱动应该如果实现比较精确的uS、mS级延时呢?解决方案
  详细解决方案

编写wince的底层驱动应该如果实现比较精确的uS、mS级延时呢?解决方案

热度:209   发布时间:2016-04-28 13:48:01.0
编写wince的底层驱动应该如果实现比较精确的uS、mS级延时呢?
比如我想一个GPIO先设为高电平,2uS后就变成低电平。

------解决方案--------------------
用Winbase.h中的QueryPerformanceFrequency、QueryPerformanceCounter 试试看。
------解决方案--------------------
1. WinCE 下是沒有 us 等級的 delay function.
2. Sleep(X) 只能保證最短 delay X ms, 沒法保證一定是剛好是 X ms (與 thread priority 有關).
3. 用一個 for loop 做 delay, 建議在 loop 中加讀取 io 的程式碼, 它的 delay 時間較不會隨最佳化或是 core clock 變更而改變.
4. 若真是那麼 time critical, 建議用一個 hardware timer, 將其寫成 installable isr, 在 driver 中將資料準備好, 在 iisr 中將資料的每個 bit 送出, 待 packet 送完後再返回 sysintr, 通知 driver 的 ist 己將該 packet 送出完成.
5. 接收要怎麼做呢?? 直接拉 gpio 中斷好了.

Paul, Chao @ Techware


------解决方案--------------------
探讨
因为有些芯片既不是IIC控制方式,也不是SPI方式,这种情况我应该怎么样编写WinCE驱动呢。这样我就需要一个uS级的延时,当然延时时间太长和太短都不行。

------解决方案--------------------
探讨
1. WinCE 下是沒有 us 等級的 delay function.
2. Sleep(X) 只能保證最短 delay X ms, 沒法保證一定是剛好是 X ms (與 thread priority 有關).
3. 用一個 for loop 做 delay, 建議在 loop 中加讀取 io 的程式碼, 它的 delay 時間較不會隨最佳化或是 core clock 變更而改變.
4. 若真是那麼 time critical, 建議用一個 hardware timer, 將其寫成 installable isr, 在 driver 中將資料準備好, 在 iisr 中將資料的每個 bit 送出…
  相关解决方案