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

📄 main.lst

📁 本程序为完成各种中断的演示
💻 LST
📖 第 1 页 / 共 3 页
字号:
     73          //*----------------------------------------------------------------------------
     74          //__ramfunc void pio_c_irq_handler ( void )

   \                                 In segment CODE, align 4, keep-with-next
     75           void pio_c_irq_handler ( void )
     76          {
   \                     pio_c_irq_handler:
   \   00000000   00B5               PUSH        {LR}
     77              int dummy;
     78              dummy = 135;
     79              AT91F_DBGU_Printk("-I- pio interrupt\n\r");
   \   00000002   0A48               LDR         R0,??pio_c_irq_handler_0  ;; `?<Constant "-I- pio interrupt\\n\\r">`
   \   00000004   ........           _BLF        AT91F_DBGU_Printk,AT91F_DBGU_Printk??rT
     80              //* Read the output state
     81              if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOB) & AT91B_LED2 ) == AT91B_LED2 )
   \   00000008   0948               LDR         R0,??pio_c_irq_handler_0+0x4  ;; 0xfffff63c
   \   0000000A   0168               LDR         R1,[R0, #+0]
   \   0000000C   8022               MOV         R2,#+0x80
   \   0000000E   5203               LSL         R2,R2,#+0xD        ;; #+0x100000
   \   00000010   1142               TST         R1,R2
   \   00000012   01D0               BEQ         ??pio_c_irq_handler_1
     82              {
     83                 AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91B_LED2);
   \   00000014   ....               LDR         R1,??DataTable3    ;; 0xfffff634
   \   00000016   00E0               B           ??pio_c_irq_handler_2
     84              }
     85              else
     86              {
     87                 AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91B_LED2);
   \                     ??pio_c_irq_handler_1:
   \   00000018   ....               LDR         R1,??DataTable4    ;; 0xfffff630
   \                     ??pio_c_irq_handler_2:
   \   0000001A   0A60               STR         R2,[R1, #+0]
     88              }
     89              //* enable the next PIO IRQ
     90              dummy =AT91C_BASE_PIOB->PIO_ISR;
   \   0000001C   0549               LDR         R1,??pio_c_irq_handler_0+0x8  ;; 0xfffff64c
   \   0000001E   0968               LDR         R1,[R1, #+0]
     91              //* suppress the compilation warning
     92              dummy =dummy;
     93              //* while SW3 is push wait
     94              while ( (AT91F_PIO_GetInput(AT91D_BASE_PIO_SW) & AT91B_SW3 ) != AT91B_SW3 );
   \                     ??pio_c_irq_handler_3:
   \   00000020   0168               LDR         R1,[R0, #+0]
   \   00000022   8900               LSL         R1,R1,#+0x2
   \   00000024   FCD5               BPL         ??pio_c_irq_handler_3
     95          }
   \   00000026   01BC               POP         {R0}
   \   00000028   0047               BX          R0                 ;; return
   \   0000002A   C046               NOP         
   \                     ??pio_c_irq_handler_0:
   \   0000002C   ........           DC32        `?<Constant "-I- pio interrupt\\n\\r">`
   \   00000030   3CF6FFFF           DC32        0xfffff63c
   \   00000034   4CF6FFFF           DC32        0xfffff64c
     96          
     97          //*----------------------------------------------------------------------------
     98          //* Function Name       : delay
     99          //* Object              : Wait
    100          //* Input Parameters    : none
    101          //* Output Parameters   : none
    102          //* Functions calAT91B_LED    : none
    103          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
    104          void delay ( void )
    105          {
   \                     delay:
   \   00000000   81B0               ADD         SP,#-4
    106          //* Set in Volatile for Optimisation
    107              volatile unsigned int    i ;
    108          //* loop delay
    109              for ( i = 0 ;(i < WAIT_TIME/100 );i++ ) ;
   \   00000002   0020               MOV         R0,#+0
   \   00000004   0090               STR         R0,[SP, #+0]
   \   00000006   0549               LDR         R1,??delay_0       ;; 0x75524
   \   00000008   02E0               B           ??delay_1
   \                     ??delay_2:
   \   0000000A   0098               LDR         R0,[SP, #+0]
   \   0000000C   401C               ADD         R0,R0,#+0x1
   \   0000000E   0090               STR         R0,[SP, #+0]
   \                     ??delay_1:
   \   00000010   0098               LDR         R0,[SP, #+0]
   \   00000012   8842               CMP         R0,R1
   \   00000014   F9D3               BCC         ??delay_2
    110          }
   \   00000016   08BC               POP         {R3}
   \   00000018   00B0               ADD         SP,#+0
   \   0000001A   7047               BX          LR                 ;; return
   \                     ??delay_0:
   \   0000001C   24550700           DC32        0x75524
    111          
    112          //*----------------------------------------------------------------------------
    113          //* Function Name       : main
    114          //* Object              : Main interrupt function
    115          //* Input Parameters    : none
    116          //* Output Parameters   : TRUE
    117          //*----------------------------------------------------------------------------

   \                                 In segment CODE, align 4, keep-with-next
    118          int main( void )
    119          //* Begin
    120          {
   \                     main:
   \   00000000   F0B5               PUSH        {R4-R7,LR}
    121              unsigned int   loop_count ;
    122              AT91PS_AIC     pAic;
    123              //* Load System pAic Base address
    124                  pAic = AT91C_BASE_AIC;
    125              Init_DBGU();
   \   00000002   ........           _BLF        Init_DBGU,Init_DBGU??rT
    126          
    127              AT91F_DBGU_Printk("-I- AT91SAM7X256 interrupt_demo\n\r");
   \   00000006   2C48               LDR         R0,??main_0        ;; `?<Constant "-I- AT91SAM7X256 inte...">`
   \   00000008   ........           _BLF        AT91F_DBGU_Printk,AT91F_DBGU_Printk??rT
    128          
    129              //* Enable User Reset and set its minimal assertion to 960 us
    130                  AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5<<24);
   \   0000000C   2B48               LDR         R0,??main_0+0x4    ;; 0xfffffd08
   \   0000000E   2C49               LDR         R1,??main_0+0x8    ;; 0xa5000401
   \   00000010   0160               STR         R1,[R0, #+0]
   \   00000012   0024               MOV         R4,#+0
    131          
    132              //* Init
    133               	loop_count = 0 ;
    134              // First, enable the clock of the PIOB
    135                  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOB ) ;
   \   00000014   0827               MOV         R7,#+0x8
   \   00000016   2B48               LDR         R0,??main_0+0xC    ;; 0xfffffc10
   \   00000018   0760               STR         R7,[R0, #+0]
    136          
    137             	//* then, we configure the PIO Lines corresponding to AT91B_LEDx
    138             	//* to be outputs. No need to set these pins to be driven by the PIO because it is GPIO pins only.
    139                  AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91B_LED_MASK ) ;
   \   0000001A   2B48               LDR         R0,??main_0+0x10   ;; 0xfffff600
   \   0000001C   F021               MOV         R1,#+0xF0
   \   0000001E   C903               LSL         R1,R1,#+0xF        ;; #+0x780000
   \   00000020   0160               STR         R1,[R0, #+0]
   \   00000022   2A4A               LDR         R2,??main_0+0x14   ;; 0xfffff610
   \   00000024   1160               STR         R1,[R2, #+0]
   \   00000026   ....               LDR         R2,??DataTable4    ;; 0xfffff630
   \   00000028   1160               STR         R1,[R2, #+0]
    140             	//* Clear the AT91B_LED's. On the EK we must apply a "1" to turn off AT91B_LEDs
    141             	AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91B_LED_MASK ) ;
    142             	//* Clear the AT91B_LED's. On the EK we must apply a "1" to turn off AT91B_LEDs
    143          
    144          
    145              // open external PIO interrupt
    146          	AT91F_PIO_CfgInput(AT91C_BASE_PIOB, AT91B_SW3 | AT91B_SW4);
   \   0000002A   C021               MOV         R1,#+0xC0
   \   0000002C   C905               LSL         R1,R1,#+0x17       ;; #+0x60000000
   \   0000002E   284A               LDR         R2,??main_0+0x18   ;; 0xfffff614
   \   00000030   1160               STR         R1,[R2, #+0]
   \   00000032   0160               STR         R1,[R0, #+0]
    147          
    148          	AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_PIOB, PIO_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, pio_c_irq_handler);
   \   00000034   274D               LDR         R5,??main_0+0x1C   ;; 0xfffff000
   \   00000036   2848               LDR         R0,??main_0+0x20   ;; pio_c_irq_handler
   \   00000038   01B4               PUSH        {R0}
   \   0000003A   0023               MOV         R3,#+0
   \   0000003C   0622               MOV         R2,#+0x6
   \   0000003E   0321               MOV         R1,#+0x3
   \   00000040   281C               MOV         R0,R5
   \   00000042   ........           _BLF        AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
    149          	AT91F_PIO_InterruptEnable(AT91C_BASE_PIOB,AT91B_SW4);
   \   00000046   2548               LDR         R0,??main_0+0x24   ;; 0xfffff640
   \   00000048   F906               LSL         R1,R7,#+0x1B
   \   0000004A   0160               STR         R1,[R0, #+0]
    150          	// set the interrupt by software
    151          	AT91F_AIC_EnableIt (pAic, AT91C_ID_PIOB);
   \   0000004C   244E               LDR         R6,??main_0+0x28   ;; 0xfffff120
   \   0000004E   3760               STR         R7,[R6, #+0]
    152          
    153          
    154              // Open the software interrupt on the AIC
    155                  AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_SYS, SOFT_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE,  aic_software_interrupt);
   \   00000050   2448               LDR         R0,??main_0+0x2C   ;; aic_software_interrupt
   \   00000052   01B4               PUSH        {R0}
   \   00000054   2023               MOV         R3,#+0x20
   \   00000056   0222               MOV         R2,#+0x2
   \   00000058   0121               MOV         R1,#+0x1

⌨️ 快捷键说明

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