dbarrie
Posts: 2
Joined: Thu Sep 26, 2013 2:01 pm

DMA Interrupt?

Fri Oct 04, 2013 11:19 am

Reading the peripheral docs, I can't seem to figure out which bit of which IRQ pending register gets raised when a DMA interrupt is signaled. I realize that there is a register that is part of the DMA peripheral that contains a bit for each DMA controller that is raised when that controller's interrupt fires, but using that to determine whether or not ANY of the DMA controllers have signaled an interrupt seems to go against the correct way of handling interrupts, which is to use the IRQ pending registers to determine which "class" of interrupt has fired and then branch to a subroutine to handle that type (by checking that peripheral's registers to determine which interrupt needs to be handled).

Can anyone provide any insight here?

Thanks!

dwelch67
Posts: 967
Joined: Sat May 26, 2012 5:32 pm

Re: DMA Interrupt?

Fri Oct 04, 2013 6:44 pm

Poll the interrupt pending register and see what bit changes. That is how I found/verified a number of the interrupts...

David

dbarrie
Posts: 2
Joined: Thu Sep 26, 2013 2:01 pm

Re: DMA Interrupt?

Sat Oct 05, 2013 8:52 am

Unfortunately, without actually enabling the interrupt first, there is no way to determine if an interrupt is pending but not enabled! I tried enabling ALL the interrupts, but that didn't seem to work correctly and it appeared that my interrupt handler was continually entered and no progress through my test code was made.

Out of curiosity, which interrupts did you discover using this method and can you maybe elaborate more on how exactly you did it?

Thanks for the response!

dwelch67
Posts: 967
Joined: Sat May 26, 2012 5:32 pm

Re: DMA Interrupt?

Sat Oct 05, 2013 1:56 pm

You can absolutely monitor/poll the interrupts without having to actually service them, dont enable the interrupt in the arm. See my other posts in this forum and my examples (blinker07 or something?) at github.com/dwelch67/

Return to “Bare metal, Assembly language”