首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

对DMA 通道的操作分析之一(4)

对DMA 通道的操作分析之一(4)

/* Clear the 'DMA Pointer Flip Flop'.
    * Write 0 for LSB/MSB, 1 for MSB/LSB access.
    * Use this once to initialize the FF to a known state.
    * After that, keep track of it. :-)
    * --- In order to do that, the DMA routines below should ---
    * --- only be used while holding the DMA lock ! ---
    */
   static inline void clear_dma_ff(unsigned int dmanr)
   {
    if (dmanr <= 3)
     dma_outb(0, DMA1_CLEAR_FF_REG);
    else
     dma_outb(0, DMA2_CLEAR_FF_REG);
   }
   该函数清除DMA触发器(Filp flop),该触发器用来控制对16位寄存器的访问
可以通过两个连续的8位操作来访问这些寄存器,触发器被清除时用来选择低字节,
触发器被置位时用来选择高字节。在传输8位后,触发器会自动反转。
所以在访问DMA寄存器之前,必须清楚触发器--人为的将他设为某个已知的状态。
-----------------------------------------------------------
   相应的函数的定义我们可以在相应体系的kernel/dma.c找到  
继承事业,薪火相传
返回列表