User Tools

Site Tools


irq_controller

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
irq_controller [2025/04/13 20:26] arisoturairq_controller [2025/05/16 22:33] (current) arisotura
Line 91: Line 91:
  
 Some IRQ sources will not function correctly without the correct trigger type. For example, VBlank IRQs will only fire once if their trigger type is set to 5. Some IRQ sources will not function correctly without the correct trigger type. For example, VBlank IRQs will only fire once if their trigger type is set to 5.
 +
 +In practice, some IRQ lines likely stay active only for a very short time, while others will stay active as long as the underlying IRQ conditions are met (ie. from hardware components that have their own IRQ status registers; the IRQ line may stay active until the IRQ status register is cleared).
 +
 +IRQ trigger type 5 seems to fail to register an interrupt when the pulse is too short (ie. doesn't work for VBlank IRQ).
 +
 +The trigger type might also play a role in whether/how the IRQ line is buffered or treated? Values 0-7 are possible. Different values affect the different bits (8/12/13/14) in the IRQ enable registers. Some values don't work at all.
 +
 +Typically, it seems that 1 is used for IRQ sources that are "self-acknowledging" (ie. VBlank, timers, DMA, ...), and 5 is used for IRQ sources that need explicit acknowledgement (ie. SPI, I2C, audio, ...).
  
  
Line 122: Line 130:
 | 0x01      | 1       | Timer 1 | | 0x01      | 1       | Timer 1 |
 | 0x02      | 1       | SDIO | | 0x02      | 1       | SDIO |
-| 0x03      | 5       ??? +| 0x03      | 5       UART0 
-| 0x04      | 5       ??? +| 0x04      | 5       UART1 
-| 0x05      | 5       UART |+| 0x05      | 5       UART2 |
 | 0x06      | 5       | SPI | | 0x06      | 5       | SPI |
 | 0x07      | 5       | SPI related? | | 0x07      | 5       | SPI related? |
Line 136: Line 144:
 | 0x0F      | 5       | I2C | | 0x0F      | 5       | I2C |
 | 0x10      | 5       | vcapt/camera | | 0x10      | 5       | vcapt/camera |
-| 0x11      | 5       vcapt/camera +| 0x11      | 5       H264 encoder 
-| 0x12      | 5       vout |+| 0x12      | 5       H264 decoder |
 | 0x13      | 5       | ??? | | 0x13      | 5       | ??? |
-| 0x14      | 5       vcapt/camera |+| 0x14      | 5       Camera controller |
 | 0x15      | 1       | VBlank end | | 0x15      | 1       | VBlank end |
 | 0x16      | 1       | VBlank start | | 0x16      | 1       | VBlank start |
Line 155: Line 163:
 | 0x22      | 1?      | ??? | | 0x22      | 1?      | ??? |
 | 0x23      | 1?      | ??? | | 0x23      | 1?      | ??? |
-| 0x24      | 1?      | ??? |+| 0x24      | 1?      | ??? (video related, 0xF00094F8) |
 | 0x25      | 1?      | ??? | | 0x25      | 1?      | ??? |
-| 0x26      | 1?      | ??? |+| 0x26      | 1?      | ??? (video related, 0xF000940C) |
 | 0x27      | 1?      | ??? | | 0x27      | 1?      | ??? |
 +
 +Note: trigger type for IRQ 0x02 is set to 1, which can cause a SDIO IRQ to be missed if it fires while another SDIO IRQ is being processed. Changing it to 5 fixes that problem. The stock firmware doesn't have that problem because it only uses the SDIO IRQ for the wifi card IRQ, and uses busy-loop polling to sense the end of SDIO transfers.
  
 IRQ 0x20..0x27 are actually FIQ sources. Not known what they're all about. Also unknown how to acknowledge a FIQ? Register 0xF00013F0 reads as 0x80 during a FIQ. IRQ 0x20..0x27 are actually FIQ sources. Not known what they're all about. Also unknown how to acknowledge a FIQ? Register 0xF00013F0 reads as 0x80 during a FIQ.
  
 +The stock firmware doesn't use FIQs, and doesn't even have a FIQ handler (FIQ is redirected to the general exception handler).
irq_controller.1744576004.txt.gz · Last modified: 2025/04/13 20:26 by arisotura

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki