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

📄 lib_at91.s79

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 S79
📖 第 1 页 / 共 2 页
字号:
        NAME lib_at91

        RTMODEL "__code_model", "small"
        RTMODEL "__cpu_mode", "arm"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "2"
        RTMODEL "__thumb_aware", "enabled"

        RSEG CSTACK:DATA:NOROOT(2)
        RSEG HUGE_I:HUGEDATA:SORT:NOROOT(2)
        RSEG HUGE_ID:HUGECONST:SORT:NOROOT(2)


        PUBWEAK `?*?HUGE_ID`
        PUBWEAK ?init?tab?HUGE_I
        PUBLIC PIO_DESC
        PUBLIC Pio
        PUBLIC TC0_DESC
        PUBLIC TC1_DESC
        PUBLIC TC2_DESC
        PUBLIC TCB_DESC
        PUBLIC USART0_DESC
        PUBLIC USART1_DESC
        PUBLIC at91_clock_close
        FUNCTION at91_clock_close,0203H
        PUBLIC at91_clock_get_status
        FUNCTION at91_clock_get_status,0203H
        PUBLIC at91_clock_open
        FUNCTION at91_clock_open,0203H
        PUBLIC at91_clock_set_mode
        FUNCTION at91_clock_set_mode,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC at91_default_fiq_handler
        FUNCTION at91_default_fiq_handler,0203H
        PUBLIC at91_default_irq_handler
        FUNCTION at91_default_irq_handler,0203H
        PUBLIC at91_pio_close
        FUNCTION at91_pio_close,0203H
        PUBLIC at91_pio_open
        FUNCTION at91_pio_open,0203H
        PUBLIC at91_pio_read
        FUNCTION at91_pio_read,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC at91_pio_set_mode
        FUNCTION at91_pio_set_mode,0203H
        PUBLIC at91_pio_write
        FUNCTION at91_pio_write,0203H
        PUBLIC at91_spurious_handler
        FUNCTION at91_spurious_handler,0203H
        PUBLIC at91_tc_close
        FUNCTION at91_tc_close,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC at91_tc_get_status
        FUNCTION at91_tc_get_status,0203H
        PUBLIC at91_tc_open
        FUNCTION at91_tc_open,0203H
        LOCFRAME CSTACK, 24, STACK
        PUBLIC at91_tc_read
        FUNCTION at91_tc_read,0203H
        PUBLIC at91_tc_set_mode
        FUNCTION at91_tc_set_mode,0203H
        PUBLIC at91_tc_trig_cmd
        FUNCTION at91_tc_trig_cmd,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC at91_tc_write
        FUNCTION at91_tc_write,0203H
        PUBLIC at91_usart_close
        FUNCTION at91_usart_close,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC at91_usart_get_status
        FUNCTION at91_usart_get_status,0203H
        PUBLIC at91_usart_open
        FUNCTION at91_usart_open,0203H
        LOCFRAME CSTACK, 24, STACK
        PUBLIC at91_usart_read
        FUNCTION at91_usart_read,0203H
        PUBLIC at91_usart_receive_frame
        FUNCTION at91_usart_receive_frame,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC at91_usart_send_frame
        FUNCTION at91_usart_send_frame,0203H
        LOCFRAME CSTACK, 4, STACK
        PUBLIC at91_usart_trig_cmd
        FUNCTION at91_usart_trig_cmd,0203H
        PUBLIC at91_usart_write
        FUNCTION at91_usart_write,0203H

        RSEG HUGE_I:HUGEDATA:SORT:NOROOT(2)
Pio:
	DS8 4
	REQUIRE `?<Initializer for Pio>`

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
PIO_DESC:
	DC32 0FFFF0000H
	DC8 8
	DC8 31
	DC8 0, 0

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
USART0_DESC:
	DC32 0FFFD0000H
	DC32 PIO_DESC
	DC8 15
	DC8 14
	DC8 13
	DC8 2

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
USART1_DESC:
	DC32 0FFFCC000H
	DC32 PIO_DESC
	DC8 22
	DC8 21
	DC8 20
	DC8 3

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
TC0_DESC:
	DC32 0FFFE0000H
	DC32 PIO_DESC
	DC8 4
	DC8 1
	DC8 2
	DC8 0

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
TC1_DESC:
	DC32 0FFFE0040H
	DC32 PIO_DESC
	DC8 5
	DC8 4
	DC8 5
	DC8 3

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
TC2_DESC:
	DC32 0FFFE0080H
	DC32 PIO_DESC
	DC8 6
	DC8 7
	DC8 8
	DC8 6

        RSEG HUGE_C:HUGECONST:SORT:NOROOT(2)
TCB_DESC:
	DC32 TC0_DESC
	DC32 TC1_DESC
	DC32 TC2_DESC

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        
        CFI Names cfiNames0
        CFI StackFrame CFA SP HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, SP:32, LR:32
        CFI VirtualResource RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 4
        CFI DataAlign 4
        CFI ReturnAddress RET CODE
        CFI CFA SP+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI LR Undefined
        CFI RET LR
        CFI EndCommon cfiCommon0
        
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function at91_pio_open
   CODE32   
at91_pio_open:
   AND      R3,R2,#+0xFF       ;; Zero extend
   TST      R3,#+0x1
   LDR      R3,[R0, #+0]
   STRNE    R1,[R3, #+16]
   STREQ    R1,[R3, #+20]
   AND      R3,R2,#+0xFF       ;; Zero extend
   TST      R3,#+0x2
   LDR      R3,[R0, #+0]
   STRNE    R1,[R3, #+32]
   STREQ    R1,[R3, #+36]
   AND      R3,R2,#+0xFF       ;; Zero extend
   TST      R3,#+0x4
   LDR      R3,[R0, #+0]
   STRNE    R1,[R3, #+80]
   STREQ    R1,[R3, #+88]
   AND      R2,R2,#+0xFF       ;; Zero extend
   TST      R2,#+0x8
   LDR      R2,[R0, #+0]
   LDRNE    R3,[R2, #+76]
   STRNE    R1,[R2, #+64]
   STREQ    R1,[R2, #+68]
   B        ??Subroutine0_0
        CFI EndBlock cfiBlock0

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function at91_pio_close
   CODE32   
at91_pio_close:
   LDR      R2,[R0, #+0]
   STR      R1,[R2, #+4]
   MOV      PC,LR              ;; return
        CFI EndBlock cfiBlock1

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function at91_pio_write
   CODE32   
at91_pio_write:
   CMP      R2,#+0x1
   LDR      R2,[R0, #+0]
   STREQ    R1,[R2, #+52]
   MOVEQ    PC,LR              ;; return
   STR      R1,[R2, #+48]
   MOV      PC,LR              ;; return
        CFI EndBlock cfiBlock2

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function at91_pio_read
   CODE32   
at91_pio_read:
   STMDB    SP!,{R4-R7,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R7 Frame(CFA, -8)
        CFI R6 Frame(CFA, -12)
        CFI R5 Frame(CFA, -16)
        CFI R4 Frame(CFA, -20)
        CFI CFA SP+20
   MOV      R4,R0
   MOV      R5,R4
   LDRB     R0,[R5, #+4]
   MVN      R1,#+0xF3
   SUB      R1,R1,#+0xBF00
   LDR      R2,[R1, #+0]
   MOV      R1,#+0x1
   AND      R7,R2,R1, LSL R0
   BL       at91_clock_open
   LDR      R0,[R5, #+0]
   LDR      R6,[R0, #+60]
   LDRB     R0,[R5, #+4]
   MOV      R1,#+0x1
   AND      R1,R7,R1, LSL R0
   CMP      R1,#+0x0
   BLEQ     at91_clock_close
   MOV      R0,R6
   LDMIA    SP!,{R4-R7,PC}     ;; return
        CFI EndBlock cfiBlock3

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function at91_pio_set_mode
   CODE32   
at91_pio_set_mode:
   AND      R3,R2,#+0xFF       ;; Zero extend
   TST      R3,#+0x2
   LDR      R3,[R0, #+0]
   STRNE    R1,[R3, #+32]
   STREQ    R1,[R3, #+36]
   AND      R2,R2,#+0xFF       ;; Zero extend
   TST      R2,#+0x4
   LDR      R2,[R0, #+0]
   STRNE    R1,[R2, #+80]
   MOVNE    PC,LR              ;; return
   STR      R1,[R2, #+88]
   MOV      PC,LR              ;; return
        CFI EndBlock cfiBlock4

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function at91_clock_set_mode
   CODE32   
at91_clock_set_mode:
   STMDB    SP!,{LR}           ;; Push
        CFI RET Frame(CFA, -4)
        CFI CFA SP+4
   CMP      R0,#+0x1
   BEQ      ??at91_clock_set_mode_0
   CMP      R0,#+0x2
   BEQ      ??at91_clock_set_mode_1
   CMP      R0,#+0x3
   BEQ      ??at91_clock_set_mode_2
   LDMIA    SP!,{PC}           ;; return
??at91_clock_set_mode_0:
   MOV      R0,#+0x1
   MVN      R1,#+0xFF
   B        ??at91_clock_set_mode_3
??at91_clock_set_mode_1:
   MVN      R0,#+0x0
   MVN      R1,#+0xFB
   B        ??at91_clock_set_mode_3
??at91_clock_set_mode_2:
   MVN      R0,#+0x0
   MVN      R1,#+0xF7
??at91_clock_set_mode_3:
   SUB      R1,R1,#+0xBF00
   STR      R0,[R1, #+0]
   LDMIA    SP!,{PC}           ;; return
        CFI EndBlock cfiBlock5

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function at91_clock_open
   CODE32   
at91_clock_open:
   MOV      R1,#+0x1
   AND      R0,R0,#+0xFF       ;; Zero extend
   MOV      R0,R1, LSL R0
   MVN      R1,#+0xFB
   B        ??Subroutine1_0
        CFI EndBlock cfiBlock6

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function at91_clock_close
   CODE32   
at91_clock_close:
	REQUIRE ??Subroutine1_0
   MOV      R1,#+0x1
   AND      R0,R0,#+0xFF       ;; Zero extend
   MOV      R0,R1, LSL R0
   MVN      R1,#+0xF7
        CFI EndBlock cfiBlock7

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock8 Using cfiCommon0
        CFI NoFunction
??Subroutine1_0:
   SUB      R1,R1,#+0xBF00
??Subroutine1_1:
   STR      R0,[R1, #+0]
   MOV      PC,LR              ;; return
        CFI EndBlock cfiBlock8

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock9 Using cfiCommon0
        CFI Function at91_clock_get_status
   CODE32   
at91_clock_get_status:
   MVN      R1,#+0xF3
   SUB      R1,R1,#+0xBF00
   LDR      R2,[R1, #+0]
   MOV      R1,#+0x1
   AND      R0,R0,#+0xFF       ;; Zero extend
   AND      R0,R2,R1, LSL R0
   MOV      PC,LR              ;; return
        CFI EndBlock cfiBlock9

        RSEG NEARFUNC_A:CODE:NOROOT(2)
        CFI Block cfiBlock10 Using cfiCommon0
        CFI Function at91_usart_open
   CODE32   
at91_usart_open:
   STMDB    SP!,{R4-R8,LR}     ;; Push
        CFI RET Frame(CFA, -4)
        CFI R8 Frame(CFA, -8)
        CFI R7 Frame(CFA, -12)
        CFI R6 Frame(CFA, -16)
        CFI R5 Frame(CFA, -20)
        CFI R4 Frame(CFA, -24)
        CFI CFA SP+24
   MOV      R4,R0
   MOV      R5,R1
   MOV      R6,R2
   MOV      R7,R3
   MOV      R8,R4
   LDRB     R0,[R8, #+11]
   BL       at91_clock_open
   MOV      R0,#+0x20
   ADD      R0,R0,#+0x40000
   TST      R5,R0
   MOV      R0,#+0x1
   LDRB     R1,[R8, #+9]
   MOV      R2,R0

⌨️ 快捷键说明

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