串行端口驱动程序 - 卡在SerialISR()例程中

时间:2014-11-03 11:31:16

标签: c++ windows serial-port driver

我是第一次为多端口串口pci卡写Windows设备驱动程序。可能这是一个愚蠢的问题,但我卡住了。需要别人的帮助。让我先解释一下我做了什么。我有公共汽车创造孩子数(2/4/8/16)的驾驶员取决于卡。现在我必须为它编写函数驱动程序。总线驱动程序创建我必须使用的中断。现在我的驱动程序中有总线接口,在总线驱动程序中创建的中断和相关信息。我使用Serial Port Driver Sample作为参考。现在在SerialISR ()例程中,我的驱动程序陷入了循环。

  ServicedAnInterrupt = TRUE;
        do {

            InterruptIdReg &= (~SERIAL_IIR_FIFOS_ENABLED);
            switch (InterruptIdReg) {

                case SERIAL_IIR_RLS: {

                    READ_LINE_STATUS(Extension, Extension->Controller);

                    break;

                }

                case SERIAL_IIR_RDA:
                case SERIAL_IIR_CTI: {

                    READ_RECEIVE_BUFFER(Extension, Extension->Controller);

                    break;

                }

            case SERIAL_IIR_THR: {

                    //
                    // Alread clear from reading the iir.
                    //
                    // We want to keep close track of whether
                    // the holding register is empty.
                    //

                    Extension->HoldingEmpty = TRUE;
                    break;

                }

                case SERIAL_IIR_MS: {

                    READ_MODEM_STATUS(Extension, Extension->Controller);
                    break;

                }

                default: {

                    ASSERT(FALSE);
                    break;

                }

            }

        } while (!((InterruptIdReg =
                    READ_INTERRUPT_ID_REG(Extension, Extension->Controller))
                    & SERIAL_IIR_NO_INTERRUPT_PENDING));

每次进入case SERIAL_IIR_MS。这个过程持续一段时间约1分钟&然后测试电脑会崩溃。这可能是背后的原因。我应该怎么做才能克服这个问题?我已经完成了msdn library information。还可以在OSR网站上阅读有关此问题。

0 个答案:

没有答案