Tom Ramcigam (magicmarmot) wrote,
Tom Ramcigam

code geeking

The way this sting is structured, I have to pass a parameter in to an interrupt routine.

Because the OS handles all the interrupts at the kernel level, you have to "register" your interrupt handler based on the interrupt level. So you have to register two different interrupt handlers for level 3 and level 4 interrupts, even though it's the same handler... but this one handler has to handle interrupts from COM1, COM2, COM3, and COM4.
To do this, I have to pass a pointer to the serial parameter block in to the interrupt handler. Except that there are only two handler registries, and four parameter blocks.
SO when I initialize a com port, I'm initializing it by the parameter block. For example, COM1 and COM3 both share interrupt level 3. When I initialize the block for COM1, I register the interrupt handler for interrupt level 3 to point to the interrupt handler and the parameter block for COM1. However, when I get to COM3, I can't register a new interrupt handler, as one is already allocated.

Ideally I'd not pass in a parameter at all, and force the interrupt routine to poll the status of each port. Unfortunately at this level, I only know the base address of the UART associated with that port. I could cheat, but that would break the purpose of the hardware abstraction layer.


  • (no subject)

    It finally happened. It had to, really. I was in the bottom two cut from LJ-Idol this week. I made it to the top 50, from some rather larger…

  • Mayville

    "Too many bats in the belfry, eh?" The question came from a small man in the scrubs-and-robe garb of an inmate. He looked a little like a garden…

  • LJ-Idol

    Another batch of entries. Consistently amazed at how good the writing is. Voting is open for…

  • Post a new comment


    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.