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

📄 at91.lst

📁 AT91M40800源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000070   001080E5           STR      R1,[R0, #+0]
    208            __TC_RCC0 = AT91_MCK / 32 / 1000; // Set RC (compare register), 1 ms interval.
   \   00000074   44009FE5           LDR      R0,??AT91InitTimer_0+0xC  ;; 0xfffffffffffe001c
   \   00000078   401EA0E3           MOV      R1,#+1024
   \   0000007C   001080E5           STR      R1,[R0, #+0]
    209            __TC_CCRC0 = 1; // Enable the clock.
   \   00000080   FF04A0E3           MOV      R0,#-16777216
   \   00000084   FE0880E3           ORR      R0,R0,#0xFE0000
   \   00000088   0110A0E3           MOV      R1,#+1
   \   0000008C   001080E5           STR      R1,[R0, #+0]
    210            __TC_CCRC0 = 5; // Software trigger.
   \   00000090   FF04A0E3           MOV      R0,#-16777216
   \   00000094   FE0880E3           ORR      R0,R0,#0xFE0000
   \   00000098   0510A0E3           MOV      R1,#+5
   \   0000009C   001080E5           STR      R1,[R0, #+0]
    211            __TC_CCRC0 = 1; // Clear trigger.
   \   000000A0   FF04A0E3           MOV      R0,#-16777216
   \   000000A4   FE0880E3           ORR      R0,R0,#0xFE0000
   \   000000A8   0110A0E3           MOV      R1,#+1
   \   000000AC   001080E5           STR      R1,[R0, #+0]
    212          }
   \   000000B0   1EFF2FE1           BX       LR               ;; return
   \                     ??AT91InitTimer_0:
   \   000000B4   2800FEFF           DC32     0xfffffffffffe0028
   \   000000B8   ........           DC32     heartbeat_irq
   \   000000BC   0400FEFF           DC32     0xfffffffffffe0004
   \   000000C0   1C00FEFF           DC32     0xfffffffffffe001c
    213          

   \                                 In segment CODE, align 4, keep-with-next
    214          void AT91StartTimer()
    215          {
    216          #if AT91_EB40 || AT91_EB40A
    217            __AIC_ICCR = 0x10; // Clears timer/counter 0 interrupt.
   \                     AT91StartTimer:
   \   00000000   D700E0E3           MVN      R0,#+215
   \   00000004   E00EC0E3           BIC      R0,R0,#0xE00
   \   00000008   1010A0E3           MOV      R1,#+16
   \   0000000C   001080E5           STR      R1,[R0, #+0]
    218          #else
    219            __AIC_ICCR = 0x40; // Clears timer/counter 0 interrupt.
    220          #endif
    221            __TC_SRC0; // Read timer/counter 0 status register to clear flags.
   \   00000010   ........           LDR      R0,??DataTable5  ;; 0xfffffffffffe0020
   \   00000014   000090E5           LDR      R0,[R0, #+0]
    222            __TC_IERC0_bit.cpcs = 1; // Interrupt on RC compare.
   \   00000018   10109FE5           LDR      R1,??AT91StartTimer_0  ;; 0xfffffffffffe0024
   \   0000001C   0C209FE5           LDR      R2,??AT91StartTimer_0  ;; 0xfffffffffffe0024
   \   00000020   002092E5           LDR      R2,[R2, #+0]
   \   00000024   102092E3           ORRS     R2,R2,#0x10
   \   00000028   002081E5           STR      R2,[R1, #+0]
    223          }
   \   0000002C   1EFF2FE1           BX       LR               ;; return
   \                     ??AT91StartTimer_0:
   \   00000030   2400FEFF           DC32     0xfffffffffffe0024
    224          
    225          
    226          //
    227          // Serial communication functions.
    228          //
    229          

   \                                 In segment CODE, align 4, keep-with-next
    230          void AT91UartInit()
    231          {
    232          // Don't use the serial port when run in Angel mode.
    233          #if !ANGEL
    234          #if AT91_EB40 || AT91_EB40A
    235            __PIO_PDR = 0x000c000; // Disable PIO control of P14/TXD and P15/RXD.
   \                     AT91UartInit:
   \   00000000   FB00E0E3           MVN      R0,#+251
   \   00000004   FF0CC0E3           BIC      R0,R0,#0xFF00
   \   00000008   C01CA0E3           MOV      R1,#+49152
   \   0000000C   001080E5           STR      R1,[R0, #+0]
    236          #endif
    237          #if AT91_EB42
    238            __PIO_PDR = 0x000000c0; // Disable PIO control of PA6/TXD0 and PA7/RXD0.
    239          #endif
    240          #if AT91_EB55 || AT91_EB63
    241            __PIO_PDR = 0x00018000; // Disable PIO control of PA15/TXD0 and PA16/RXD0.
    242          #endif
    243          
    244            __US_MR = 0x000008c0; // Normal mode, 1 stop bit, no parity, async mode, 8 bits, MCK.
   \   00000010   D0009FE5           LDR      R0,??AT91UartInit_0  ;; 0xfffffffffffd0004
   \   00000014   8C1EA0E3           MOV      R1,#+2240
   \   00000018   001080E5           STR      R1,[R0, #+0]
    245            __US_IDR = 0xffffffff; // Disable all USART interrupts.
   \   0000001C   C8009FE5           LDR      R0,??AT91UartInit_0+0x4  ;; 0xfffffffffffd000c
   \   00000020   0010E0E3           MVN      R1,#+0
   \   00000024   001080E5           STR      R1,[R0, #+0]
    246            __US_IER = 1; // Interrupt on RXRDY.
   \   00000028   C0009FE5           LDR      R0,??AT91UartInit_0+0x8  ;; 0xfffffffffffd0008
   \   0000002C   0110A0E3           MOV      R1,#+1
   \   00000030   001080E5           STR      R1,[R0, #+0]
    247            __US_TTGR = 5; // Transmit time guard in number of bit periods.
   \   00000034   B8009FE5           LDR      R0,??AT91UartInit_0+0xC  ;; 0xfffffffffffd0028
   \   00000038   0510A0E3           MOV      R1,#+5
   \   0000003C   001080E5           STR      R1,[R0, #+0]
    248            __US_BRGR = AT91_MCK / BAUD_RATE / 16; // Set baud rate.
   \   00000040   B0009FE5           LDR      R0,??AT91UartInit_0+0x10  ;; 0xfffffffffffd0020
   \   00000044   3510A0E3           MOV      R1,#+53
   \   00000048   001080E5           STR      R1,[R0, #+0]
    249          
    250            __AIC_SVR2 = (unsigned long)&usart0_rxrdy_interrupt; // Usart 0 interrupt vector.
   \   0000004C   7700E0E3           MVN      R0,#+119
   \   00000050   F00EC0E3           BIC      R0,R0,#0xF00
   \   00000054   A0109FE5           LDR      R1,??AT91UartInit_0+0x14  ;; usart0_rxrdy_interrupt
   \   00000058   001080E5           STR      R1,[R0, #+0]
    251            __AIC_SMR2 = 0x63; // SRCTYPE=1, PRIOR=3. USART 0 interrupt positive edge-triggered at prio 3.
   \   0000005C   F700E0E3           MVN      R0,#+247
   \   00000060   F00EC0E3           BIC      R0,R0,#0xF00
   \   00000064   6310A0E3           MOV      R1,#+99
   \   00000068   001080E5           STR      R1,[R0, #+0]
    252            __AIC_ICCR_bit.us0irq = 1; // Clears timer/counter 0 interrupt.
   \   0000006C   D700E0E3           MVN      R0,#+215
   \   00000070   E00EC0E3           BIC      R0,R0,#0xE00
   \   00000074   D710E0E3           MVN      R1,#+215
   \   00000078   E01EC1E3           BIC      R1,R1,#0xE00
   \   0000007C   001091E5           LDR      R1,[R1, #+0]
   \   00000080   041091E3           ORRS     R1,R1,#0x4
   \   00000084   001080E5           STR      R1,[R0, #+0]
    253            __AIC_IECR_bit.us0irq = 1; // Enable timer/counter 0 interrupt.
   \   00000088   DF00E0E3           MVN      R0,#+223
   \   0000008C   E00EC0E3           BIC      R0,R0,#0xE00
   \   00000090   DF10E0E3           MVN      R1,#+223
   \   00000094   E01EC1E3           BIC      R1,R1,#0xE00
   \   00000098   001091E5           LDR      R1,[R1, #+0]
   \   0000009C   041091E3           ORRS     R1,R1,#0x4
   \   000000A0   001080E5           STR      R1,[R0, #+0]
    254          
    255            __AIC_ICCR = 1 << US0IRQ; // Clears usart 0 interrupt.
   \   000000A4   D700E0E3           MVN      R0,#+215
   \   000000A8   E00EC0E3           BIC      R0,R0,#0xE00
   \   000000AC   0410A0E3           MOV      R1,#+4
   \   000000B0   001080E5           STR      R1,[R0, #+0]
    256          
    257            __US_CR = 0x000000a0; // Disable receiver, disable transmitter.
   \   000000B4   FF04A0E3           MOV      R0,#-16777216
   \   000000B8   FD0880E3           ORR      R0,R0,#0xFD0000
   \   000000BC   A010A0E3           MOV      R1,#+160
   \   000000C0   001080E5           STR      R1,[R0, #+0]
    258            __US_CR = 0x0000010c; // Reset status bits, reset rx/tx.
   \   000000C4   FF04A0E3           MOV      R0,#-16777216
   \   000000C8   FD0880E3           ORR      R0,R0,#0xFD0000
   \   000000CC   431FA0E3           MOV      R1,#+268
   \   000000D0   001080E5           STR      R1,[R0, #+0]
    259            __US_CR = 0x00000050; // Enable receiver, enable transmitter.
   \   000000D4   FF04A0E3           MOV      R0,#-16777216
   \   000000D8   FD0880E3           ORR      R0,R0,#0xFD0000
   \   000000DC   5010A0E3           MOV      R1,#+80
   \   000000E0   001080E5           STR      R1,[R0, #+0]
    260          #endif // ANGEL
    261          }
   \   000000E4   1EFF2FE1           BX       LR               ;; return
   \                     ??AT91UartInit_0:
   \   000000E8   0400FDFF           DC32     0xfffffffffffd0004
   \   000000EC   0C00FDFF           DC32     0xfffffffffffd000c
   \   000000F0   0800FDFF           DC32     0xfffffffffffd0008
   \   000000F4   2800FDFF           DC32     0xfffffffffffd0028
   \   000000F8   2000FDFF           DC32     0xfffffffffffd0020
   \   000000FC   ........           DC32     usart0_rxrdy_interrupt
    262          
    263          

   \                                 In segment CODE, align 4, keep-with-next
    264          int AT91UartGetchar()
    265          {
    266          // Don't use the serial port when run in Angel mode.
    267          #if ANGEL
    268            return '?';
    269          #else
    270            return __US_RHR;
   \                     AT91UartGetchar:
   \   00000000   04009FE5           LDR      R0,??AT91UartGetchar_0  ;; 0xfffffffffffd0018
   \   00000004   000090E5           LDR      R0,[R0, #+0]
   \   00000008   1EFF2FE1           BX       LR               ;; return
   \                     ??AT91UartGetchar_0:
   \   0000000C   1800FDFF           DC32     0xfffffffffffd0018
    271          #endif // ANGEL
    272          }
    273          
    274          

   \                                 In segment CODE, align 4, keep-with-next
    275          void AT91UartPutchar(int ch)
    276          {
    277          // Don't use the serial port when run in Angel mode.
    278          #if !ANGEL
    279            unsigned char status;
    280          
    281            do {
    282              status = __US_CSR;
   \                     AT91UartPutchar:
   \                     ??AT91UartPutchar_0:
   \   00000000   14109FE5           LDR      R1,??AT91UartPutchar_1  ;; 0xfffffffffffd0014
   \   00000004   001091E5           LDR      R1,[R1, #+0]
    283            } while ((status & 0x02) == 0); // Wait for TXRDY
   \   00000008   020011E3           TST      R1,#0x2
   \   0000000C   FBFFFF0A           BEQ      ??AT91UartPutchar_0
    284          
    285            __US_THR = ch;
   \   00000010   08109FE5           LDR      R1,??AT91UartPutchar_1+0x4  ;; 0xfffffffffffd001c
   \   00000014   000081E5           STR      R0,[R1, #+0]
    286          #endif // ANGEL
    287          }
   \   00000018   1EFF2FE1           BX       LR               ;; return
   \                     ??AT91UartPutchar_1:
   \   0000001C   1400FDFF           DC32     0xfffffffffffd0014
   \   00000020   1C00FDFF           DC32     0xfffffffffffd001c
    288          
    289          
    290          //
    291          // Parallel I/O functions.
    292          //
    293          

   \                                 In segment CODE, align 4, keep-with-next
    294          unsigned int AT91GetButtons()
    295          {
    296            unsigned long pa; // Port A value.
    297            unsigned long pb; // Port B value.
    298            unsigned int sw1; // SW1 button.
    299            unsigned int sw2; // SW2 button.
    300            unsigned int sw3; // SW3 button.
    301            unsigned int sw4; // SW4 button.
    302            unsigned int mask; // Bit mask of buttons.
    303          
    304          #if AT91_EB40
    305            // SW3 - P12, SW4 - P5, SW6 - P9
    306            pa = pb = ~__PIO_PDSRB; // Switch on P5, P9, P12
   \                     AT91GetButtons:
   \   00000000   C300E0E3           MVN      R0,#+195
   \   00000004   FF0CC0E3           BIC      R0,R0,#0xFF00
   \   00000008   000090E5           LDR      R0,[R0, #+0]
   \   0000000C   0010F0E1           MVNS     R1,R0
   \   00000010   0100B0E1           MOVS     R0,R1
    307            sw2 = !!(pb & 0x00000020); // p5
   \   00000014   200010E3           TST      R0,#0x20
   \   00000018   0100000A           BEQ      ??AT91GetButtons_0
   \   0000001C   0120A0E3           MOV      R2,#+1
   \   00000020   000000EA           B        ??AT91GetButtons_1
   \                     ??AT91GetButtons_0:
   \   00000024   0020A0E3           MOV      R2,#+0
    308            sw3 = !!(pb & 0x00000200); // p9
   \                     ??AT91GetButtons_1:
   \   00000028   800F10E3           TST      R0,#0x200
   \   0000002C   0100000A           BEQ      ??AT91GetButtons_2
   \   00000030   0130A0E3           MOV      R3,#+1
   \   00000034   000000EA           B        ??AT91GetButtons_3
   \                     ??AT91GetButtons_2:
   \   00000038   0030A0E3           MOV      R3,#+0
    309            sw1 = !!(pa & 0x00001000); // p12
   \                     ??AT91GetButtons_3:
   \   0000003C   400D11E3           TST      R1,#0x1000
   \   00000040   0100000A           BEQ      ??AT91GetButtons_4
   \   00000044   0100A0E3           MOV      R0,#+1
   \   00000048   000000EA           B        ??AT91GetButtons_5
   \                     ??AT91GetButtons_4:
   \   0000004C   0000A0E3           MOV      R0,#+0
    310            sw4 = 1;
   \                     ??AT91GetButtons_5:
   \   00000050   0110A0E3           MOV      R1,#+1
    311          #endif
    312          
    313          #if AT91_EB40A
    314            // SW1 - P12, SW2 - P9, SW3 - P1, SW4 - P2
    315            pa = pb = ~__PIO_PDSRB; // Switch on P5, P9, P12
    316            sw3 = !!(pa & 0x00000002); // p1
    317            sw4 = !!(pb & 0x00000004); // p2
    318            sw2 = !!(pb & 0x00000200); // p9
    319            sw1 = !!(pa & 0x00001000); // p12
    320          #endif
    321          
    322          #if AT91_EB42
    323            // As seen from card edge: SW4 - PB21, SW3 - PB6, SW2 - PA0, SW1 - PB7
    324            pa = ~__PIO_PDSR; // Switch on PA0
    325            pb = ~__PIO_PDSRB; // Switch on PB6, PB7, PB21
    326            sw2  = !!(pa & 0x00000001); // pa0
    327            sw3 = !!(pb & 0x00000040); // pb6
    328            sw1 = !!(pb & 0x00000080); // pb7
    329            sw4 = !!(pb & 0x00200000); // pb21
    330          #endif
    331          
    332          #if AT91_EB55
    333            // As seen from card edge: SW4 - PB19, SW3 - PB17, SW2 - PA9, SW1 - PB20
    334            pa = ~__PIO_PDSR; // Switch on PA9
    335            pb = ~__PIO_PDSRB; // Switch on PB17, PB19, PB20
    336            sw2  = !!(pa & 0x00000200); // pa9
    337            sw3 = !!(pb & 0x00020000); // pb17
    338            sw4 = !!(pb & 0x00080000); // pb19
    339            sw1 = !!(pb & 0x00100000); // pb20

⌨️ 快捷键说明

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