⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic.html

📁 Atmel AT91SAM7S Interrupt example code
💻 HTML
📖 第 1 页 / 共 4 页
字号:
lang=EN-US style='mso-ansi-language:EN-US'>- SW4 :</span></b><span lang=EN-US
style='mso-ansi-language:EN-US'> (AT91C_PIO_PA16) Used in standard PIO for the 
    PIO interrupt<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt;text-indent:36.0pt'><b><span
lang=EN-US style='mso-ansi-language:EN-US'>- LED1 to LED4 :</span></b><span
lang=EN-US style='mso-ansi-language:EN-US'> Using in standard PIO output <o:p><br>
    <br>
    </o:p></span></p>
  <p class=MsoNormal><a name="Source_Files"><b><span lang=FR style='mso-ansi-language:
FR'><!-- ******* FILE  ********** !-->Source Files:</span></b></a><b><span
lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></b></p>
  <table border=1 cellspacing=1 cellpadding=0 width=554 style='width:415.5pt;
 mso-cellspacing:.7pt;mso-padding-alt:5.25pt 5.25pt 5.25pt 5.25pt'>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p class=MsoNormal><span lang=FR style='mso-ansi-language:FR'>&nbsp;<o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><b><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>Description 
          Files</span></b><span lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>srcxxx/SAM7Board.h</span><span
  lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>SAM7 
          evaluation board description</span><span lang=EN-US style='mso-ansi-language:
  EN-US'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>&nbsp;<o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><b><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>Startup 
          Files</span></b><span lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>srcxxx/Cstartup.xxx 
          </span><span lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><b><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>AT91SAM7Sxx</span></b><span
  lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'> microcontroller 
          reset entry point</span><span lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>srcxxx/Cstartup_SAM7.c</span><span
  lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><b><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>AT91SAM7Sxx</span></b><span
  lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'> initialization 
          called by the assembly code and by the Cstartup</span><span lang=EN-US style='mso-ansi-language:
  EN-US'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>&nbsp;<o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><b><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>C Files</span></b><span
  lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>../src/main.c</span><span
  lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>Main 
          entry point </span><span lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><i><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>ext_irq.c</span></i><span
  lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=EN-US style='font-size:10.0pt;mso-ansi-language:EN-US'>External 
          interrupt handler for the irq</span><span lang=EN-US style='mso-ansi-language:
  EN-US'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><i><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>interrupt_timer.c</span></i><span
  lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>Timer interrupt 
          management</span><span lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
    </tr>
    <tr> 
      <td width="34%" valign=top style='width:34.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>interrupt_Usart.c</span><span
  lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
      <td width="66%" valign=top style='width:66.0%;padding:5.25pt 5.25pt 5.25pt 5.25pt'> 
        <p><span lang=FR style='font-size:10.0pt;mso-ansi-language:FR'>USART Interrupt 
          Management</span><span lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></p>
      </td>
    </tr>
  </table>
  <br>
  <p class=MsoNormal><!-- ******* Description  ********** !--><a
name=Description><b><span lang=EN-US style='mso-ansi-language:EN-US'>Description:</span></b></a><b><span
lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></b></p>
  <p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>In background one led (LED1) is blinking simply 
    by writing directly in the PIO interface.<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>The LED2 is blinking by the software AIC interrupt 
    after ten blink of LED1.<br>
    <br>
    <o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><a name="Interrupt_Action"><b><span
lang=EN-US style='mso-ansi-language:EN-US'>Interrupt Action</span></b></a><b><span
lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></b></p>
  <p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>- When you push on SW4, the PIO interface is activated 
    and uses the PIO interrupt routine. This interrupt has the priority level 
    6. If you keep SW3 in position you maintain the interrupt handler and suppress 
    the lower interrupt task.<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>- When you push on SW2 (IRQ0), the IRQ0 is activated 
    and uses the IRQ0 interrupt routine. This interrupt has the priority level 
    2. If you keep SW3 in position you maintain the interrupt handler and suppress 
    the lower interrupt task.<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>- The timer interrupt increment the global variables 
    named count_timer0_interrupt and count_timer1_interrupt. Each timer manage 
    the corresponding LED (LED3 &amp; LED4). The following table describes the 
    interrupt level associated to the peripherals. <o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>- The USART interrupt is generated when the reception 
    register is full (status bit register RXRDY) or when a reception occurs with 
    an error, such as Overrun, Framing, Parity or Time out error.<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>T =&gt; US_TIMEOUT event<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>R =&gt; US_RXRDY event<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>E =&gt; US_ENDRX event<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>All Usart Interrupt events are listed in the interrupt_Usart.c 
    file<o:p><br>
    <br>
    </o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><a name="Interrupt_Implementation"><b><span
lang=EN-US style='mso-ansi-language:EN-US'>Interrupt Implementation</span></b></a><b><span
lang=EN-US style='mso-ansi-language:EN-US'><o:p><br>
    <br>
    </o:p></span></b></p>
  <p class=MsoNormal style='margin-left:36.0pt'><b><span lang=EN-US
style='mso-ansi-language:EN-US'>Interrupt initialization<o:p></o:p></span></b></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>- Initialization of the Interrupt stack. This 
    initialization is performed in the <b> Cstartup.xxx</b> file. The IRQ_ENTRY 
    macro used, needs only 2x32-bit stack level. The first 32-bit for the link 
    address and the second for the application status register<o:p>.</o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>IRQ_STACK_SIZE EQU (2*8*4) ; 2 words per interrupt 
    priority level<o:p><br>
    <br>
    </o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>The FIQ does not need specific stack as this interruption 
    is not interruptible by other interrupts.<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'><br>
    - Configure the Peripheral<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:108.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Enable the corresponding clock: see function named 
    AT91F_PMC_EnablePeriphClock<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:108.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Select the corresponding I/O in peripheral mode: 
    see function named AT91F_PIO_CfgPeriph<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:108.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Configure all peripheral register<o:p>s</o:p></span></p>
  <p class=MsoNormal style='margin-left:108.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Set and enable the peripheral interrupt: see function 
    named AT91F_US_EnableIt (for USART)<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Set the AIC: see function named AT91F_AIC_ConfigureIt<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Enable this interrupt in the AIC: see function 
    named AT91F_AIC_EnableIt<o:p><br>
    <br>
    </o:p></span></p>
  <p class=MsoNormal style='margin-left:36.0pt'><b><span lang=EN-US
style='mso-ansi-language:EN-US'>Interrupt Handling Entry</span></b><span
lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Save lr, spsr_irq and r0<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Get the vector address in the IVR Register<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Acknowledge the interrupt in the ACI vectoring<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>Switch in System Mode<o:p></o:p></span></p>
  <p class=MsoNormal style='margin-left:72.0pt'><span lang=EN-US
style='mso-ansi-language:EN-US'>- Only one link register saves the interrupt return 
    address<o:p></o:p></span></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -