📄 interrupts.html
字号:
<td class="leftalign">11 </td><td>General Interrupt 11</td><td class="leftalign">IVG11 </td> </tr> <tr> <td class="leftalign">12 </td><td>General Interrupt 12</td><td class="leftalign">IVG12 </td> </tr> <tr> <td class="leftalign">13 </td><td>General Interrupt 13</td><td class="leftalign">IVG13 </td> </tr> <tr> <td class="leftalign">14 </td><td>General Interrupt 14</td><td class="leftalign">IVG14 </td> </tr> <tr> <td class="leftalign">15 </td><td>General Interrupt 15</td><td class="leftalign">IVG15 </td> </tr></table><br /><p> For reference here is the default mapping by the SIC </p><table class="inline"> <tr> <th class="leftalign">Event </th><th>Event ID</th><th>Default Mapping</th> </tr> <tr> <td>Real-Time Clock</td><td class="leftalign">0 </td><td class="leftalign">IVG7 </td> </tr> <tr> <td class="leftalign">Reserved </td><td class="leftalign">1 </td><td class="rightalign"> </td> </tr> <tr> <td class="leftalign">USB </td><td class="leftalign">2 </td><td class="leftalign">IVG7 </td> </tr> <tr> <td class="leftalign">PCI Interrupt </td><td class="leftalign">3 </td><td class="leftalign">IVG7 </td> </tr> <tr> <td>SPORT 0 RX DMA </td><td class="leftalign">4 </td><td class="leftalign">IVG8 </td> </tr> <tr> <td>SPORT 0 TX DMA </td><td class="leftalign">5 </td><td class="leftalign">IVG8 </td> </tr> <tr> <td>SPORT 1 RX DMA </td><td class="leftalign">6 </td><td class="leftalign">IVG8 </td> </tr> <tr> <td>SPORT 1 TX DMA </td><td class="leftalign">7 </td><td class="leftalign">IVG8 </td> </tr> <tr> <td class="leftalign">SPI 0 DMA </td><td class="leftalign">8 </td><td class="leftalign">IVG9 </td> </tr> <tr> <td class="leftalign">SPI 1 DMA </td><td class="leftalign">9 </td><td class="leftalign">IVG9 </td> </tr> <tr> <td class="leftalign">UART 0 Rx </td><td class="leftalign">10 </td><td class="leftalign">IVG10 </td> </tr> <tr> <td class="leftalign">UART 0 Tx </td><td class="leftalign">11 </td><td class="leftalign">IVG10 </td> </tr> <tr> <td class="leftalign">UART 1 Rx </td><td class="leftalign">12 </td><td class="leftalign">IVG10 </td> </tr> <tr> <td class="leftalign">UART 1 Tx </td><td class="leftalign">13 </td><td class="leftalign">IVG10 </td> </tr> <tr> <td class="leftalign">Timer 0 </td><td class="leftalign">14 </td><td class="leftalign">IVG11 </td> </tr> <tr> <td class="leftalign">Timer 1 </td><td class="leftalign">15 </td><td class="leftalign">IVG11 </td> </tr> <tr> <td class="leftalign">Timer 2 </td><td class="leftalign">16 </td><td class="leftalign">IVG11 </td> </tr> <tr> <td class="leftalign">GPIO Int A </td><td class="leftalign">17 </td><td class="leftalign">IVG12 </td> </tr> <tr> <td class="leftalign">GPIO Int B </td><td class="leftalign">18 </td><td class="leftalign">IVG12 </td> </tr> <tr> <td class="leftalign">MEM DMA </td><td class="leftalign">19 </td><td class="leftalign">IVG13 </td> </tr> <tr> <td class="leftalign">SW Wdog </td><td class="leftalign">20 </td><td class="leftalign">IVG13 </td> </tr> <tr> <td class="leftalign">Reserved </td><td class="leftalign">21-26 </td><td class="rightalign"> </td> </tr> <tr> <td class="leftalign">SWI 1 </td><td class="leftalign">27 </td><td class="leftalign">IVG14 </td> </tr> <tr> <td class="leftalign">SWI 2 </td><td class="leftalign">28 </td><td class="leftalign">IVG15 </td> </tr></table><br /><p>Some brief notes</p><p>Interrupt priorities are all set up in <strong>linux-2.6.x/arch/blackfin/mach-bf533/ints-priority.c</strong></p><pre class="code c"> <span class="kw4">void</span> __init program_IAR<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="coMULTI">/* Program the IAR0 Register with the configured priority */</span> *pSIC_IAR0 = <span class="br0">(</span><span class="br0">(</span>CONFIG_PLLWAKE_ERROR<span class="nu0">-7</span><span class="br0">)</span> << PLLWAKE_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_DMA_ERROR <span class="nu0">-7</span><span class="br0">)</span> << DMA_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_PPI_ERROR <span class="nu0">-7</span><span class="br0">)</span> << PPI_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_SPORT0_ERROR<span class="nu0">-7</span><span class="br0">)</span> << SPORT0_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_SPI_ERROR <span class="nu0">-7</span><span class="br0">)</span> << SPI_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_SPORT1_ERROR<span class="nu0">-7</span><span class="br0">)</span> << SPORT1_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_UART_ERROR <span class="nu0">-7</span><span class="br0">)</span> << UART_ERROR_POS<span class="br0">)</span> | <span class="br0">(</span><span class="br0">(</span>CONFIG_RTC_ERROR <span class="nu0">-7</span><span class="br0">)</span> << RTC_ERROR_POS<span class="br0">)</span>; asm<span class="br0">(</span><span class="st0">"ssync;"</span><span class="br0">)</span>; <span class="br0">[</span>...<span class="br0">]</span> <span class="br0">}</span></pre></div><!-- SECTION [2982-6485] --><h3><a name="interrupt_discovery" id="interrupt_discovery">Interrupt Discovery</a></h3><div class="level3"><p> Each System interrupt is assigned to a number of possible uClinux interrupts. A vector table is set up for each possible system interrupt and the interrupt status register is checked to see if that interrupt has triggered. Following a successful match the correct linux interrupt can be determined. </p><pre class="code c"> <span class="kw1">if</span> <span class="br0">(</span>vec > IRQ_CORETMR<span class="br0">)</span> <span class="br0">{</span> <span class="kw4">struct</span> ivgx *ivg = ivg7_13<span class="br0">[</span>vec<span class="br0">]</span>.<span class="me1">ifirst</span>; <span class="kw4">struct</span> ivgx *ivg_stop = ivg7_13<span class="br0">[</span>vec<span class="br0">]</span>.<span class="me1">istop</span>; <span class="kw4">unsigned</span> <span class="kw4">long</span> sic_status; asm<span class="br0">(</span><span class="st0">"ssync;"</span><span class="br0">)</span>; sic_status = *pSIC_IMASK & *pSIC_ISR; <span class="kw1">for</span><span class="br0">(</span>;; ivg++<span class="br0">)</span> <span class="br0">{</span> <span class="kw1">if</span> <span class="br0">(</span>ivg >= ivg_stop<span class="br0">)</span> <span class="br0">{</span> <span class="coMULTI">/* printk("unregistered interrupt ivg=%d\n",vec);*/</span> <span class="kw1">return</span>; <span class="br0">}</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">(</span><span class="br0">(</span>sic_status & ivg->isrflag<span class="br0">)</span> != <span class="nu0">0</span><span class="br0">)</span> <span class="kw2">break</span>; <span class="br0">}</span> vec = ivg->irqno; <span class="br0">}</span></pre></div><!-- SECTION [6486-8290] --><h3><a name="blackfin_interrupt_set_up" id="blackfin_interrupt_set_up">Blackfin Interrupt Set up</a></h3><div class="level3"><p> The following code sets up the initial vectors</p><pre class="code c"> <span class="kw4">int</span> __init bfin_init_IRQ<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw4">int</span> i; <span class="kw4">unsigned</span> <span class="kw4">long</span> ilat = <span class="nu0">0</span>; <span class="coMULTI">/* Disable all the peripheral intrs - page 4-29 HW Ref manual */</span> *pSIC_IMASK = SIC_UNMASK_ALL; asm<span class="br0">(</span><span class="st0">"ssync;"</span><span class="br0">)</span>; local_irq_disable<span class="br0">(</span><span class="br0">)</span>; <span class="co2">#ifndef CONFIG_KGDB</span> *pEVT0 = evt_nmi; asm<span class="br0">(</span><span class="st0">"csync;"</span><span class="br0">)</span>; <span class="co2">#endif</span> *pEVT2 = evt_evt2; asm<span class="br0">(</span><span class="st0">"csync;"</span><span class="br0">)</span>; *pEVT3 = trap; asm<span class="br0">(</span><span class="st0">"csync;"</span><span class="br0">)</span>; *pEVT5 = evt_ivhw; asm<span class="br0">(</span><span class="st0">"csync;"</span><span class="br0">)</span>; *pEVT6 = evt_timer; asm<span class="br0">(</span><span class="st0">"csync;"</span><span class="br0">)</span>; *pEVT7 = evt_evt7; asm<span class="br0">(</span><span class="st0">"csync;"</span><span class="br0">)</span>; <span class="br0">[</span>...<span class="br0">]</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -