每个队列可以是空(E),满(F),非空非满(N)。应用程序调用PutBuf()将缓冲区放到“to device”队列中。驱动程序立即将缓冲区放进外设,转移到状态“EFE”。当传送完毕,外设向驱动程序发中断信号,然后驱动中断处理程序将缓冲区从外设寄存器转移到“from device”队列,转移到状态“EEF”,接着调用应用程序的回调函数。回调函数调用GetBuf()从驱动程序的“from device”队列重新得到缓冲区,驱动程序返回起始状态。
如果驱动程序支持硬件排队,则当电感生产一个缓冲区正由外设传送时,“to device”队列能控制另一个缓冲区。与图2中状态转移不同,应用程序现在可能向“to device”队列增加另一个缓冲区。驱动程序将此缓冲区指针存进一个队列,此时状态为“FFE”,“to device”队列为满,外设正在传送一个缓冲区,“from device”队列为空。使用C数据结构实现这种状态机器的状态向量。
使用DMA全局重新加载寄存器来控制“to device”队列,状态结构如下所示。
Typed模压电感器ef struct drv_state{
Bool enabled;
Ptr currentBuffer;
Uns currentSize;
Ptr fullBuffer;
Uns fullSize;
LIO_TcallBack callback;
Arg calbackArg;
} LIO_Obj;
第一个字段“enabled”是一个布尔值,表示程序的开始或结束。下面两个字段“currentBuffer”“currentSize”控制当前传送缓冲区的起始地址和尺寸。当共模电感传送完毕,它们转移到“from device”队列。“fullBuffer”“fullSize”字段实现长度为1的“from device”队列。Callback()的地址和参数通过setCallback()存储在状态结构中。
驱程序对每个缓冲区只接收一个中断,而不是每个采样一个断。发生中断时,驱动程序已经知道缓冲区传送完毕,重新加载,DMA不需再重新编程。中断处理程序首先将currentBuffer内容移到fu工字型电感llBuffe绕行电感器r中。如果缓冲区已在“to device”队列中,即已使用重新加载的DMA,则新缓冲区指针和长度记录进currentBuffer字段中,然后调用callback()。一旦定义了基本的状态机器,相似硬件的新驱动程序就很容易写出。
关于LED电源次级恒流方案的总结随着LED照明现在越来越热,作为LED的生命支柱--LED驱动电源也越来越受到人们的关注。一直听到有很多人这么说:LED电源是个特殊的电源,跟普通电源有很大的不同,所以做LED电源要找专业的LED电源 电除尘电压采样相关问题电除尘高压输出采样遇到点问题,高压输出采用高压包,我想采样高压包的输出电压。高压包输出电压最高为20KV,我想采用电阻分压方式来采样(三个耐压值为5KV的1M玻璃釉电阻和一个1K 求教,mp1583 act4060 电感响 差模滤波后纹波反而power
最近做一个车上用的一个产品,12v降压输出3.3和1.8v,因为车上的电源噪声大,用了共模滤波和差模滤波,在稳压电源上测试,感觉纹波反而增大了;搭建一个迟滞比较器,控制mp1583的on
3/3 首页 上一页 1 2 3 |