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

📄 lib_at91.s

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 S
字号:
	.file	"c:/at91/software/projects/bench/source/lib_at91.c"
	.option	svr4
	.option	arm_code
	.option	inter
	.ident	"hc4.5a -O7 \n"
	.option	noswst
	.seg	".rodata1",rodata
.L00STRING2:
	.align	4
	.global	PIO_DESC
PIO_DESC:
	.size	PIO_DESC,0x8
	.type	PIO_DESC, @object
	.long	0xffff0000
	.byte	0x8
	.byte	0x1f
	.block	 0x2
	.align	4
	.global	USART0_DESC
USART0_DESC:
	.size	USART0_DESC,0xc
	.type	USART0_DESC, @object
	.long	0xfffd0000
	.long	PIO_DESC
	.byte	0xf
	.byte	0xe
	.byte	0xd
	.byte	0x2
	.align	4
	.global	USART1_DESC
USART1_DESC:
	.size	USART1_DESC,0xc
	.type	USART1_DESC, @object
	.long	0xfffcc000
	.long	PIO_DESC
	.byte	0x16
	.byte	0x15
	.byte	0x14
	.byte	0x3
	.align	4
	.global	TC0_DESC
TC0_DESC:
	.size	TC0_DESC,0xc
	.type	TC0_DESC, @object
	.long	0xfffe0000
	.long	PIO_DESC
	.byte	0x4
	.byte	0x1
	.byte	0x2
	.byte	0x0
	.align	4
	.global	TC1_DESC
TC1_DESC:
	.size	TC1_DESC,0xc
	.type	TC1_DESC, @object
	.long	0xfffe0040
	.long	PIO_DESC
	.byte	0x5
	.byte	0x4
	.byte	0x5
	.byte	0x3
	.align	4
	.global	TC2_DESC
TC2_DESC:
	.size	TC2_DESC,0xc
	.type	TC2_DESC, @object
	.long	0xfffe0080
	.long	PIO_DESC
	.byte	0x6
	.byte	0x7
	.byte	0x8
	.byte	0x6
	.align	4
	.global	TCB_DESC
TCB_DESC:
	.size	TCB_DESC,0xc
	.type	TCB_DESC, @object
	.long	TC0_DESC
	.long	TC1_DESC
	.long	TC2_DESC
	.seg	".data",data
.L00DATA:
	.align	4
	.global	Pio
Pio:
	.size	Pio,0x4
	.type	Pio, @object
	.long	0xffff0000
	.seg	".text",text
	.option	code32,inter
.L00TEXT:
;-------------| at91_spurious_handler |-------------------
	.align	4
	.global	at91_spurious_handler
at91_spurious_handler:
	.cfa_bf	at91_spurious_handler
.L0014:
	b	.L0014
	.cfa_ef
	.type at91_spurious_handler, @function
	.size at91_spurious_handler, . - at91_spurious_handler
;-------------| at91_default_irq_handler |-------------------
	.align	4
	.global	at91_default_irq_handler
at91_default_irq_handler:
	.cfa_bf	at91_default_irq_handler
.L0024:
	b	.L0024
	.cfa_ef
	.type at91_default_irq_handler, @function
	.size at91_default_irq_handler, . - at91_default_irq_handler
;-------------| at91_default_fiq_handler |-------------------
	.align	4
	.global	at91_default_fiq_handler
at91_default_fiq_handler:
	.cfa_bf	at91_default_fiq_handler
.L0034:
	b	.L0034
	.cfa_ef
	.type at91_default_fiq_handler, @function
	.size at91_default_fiq_handler, . - at91_default_fiq_handler
;-------------| at91_pio_open |-------------------
	.align	4
	.global	at91_pio_open
at91_pio_open:
	.cfa_bf	at91_pio_open
	tsts	%r2,#1
	ldr	%ip,[%r0, #0]
	beq	.L0085
	tsts	%r2,#2
	str	%r1,[%ip, #16]
	bne	.L0087
.L0088:
	tsts	%r2,#4
	str	%r1,[%ip, #36]
	beq	.L00811
.L00810:
	tsts	%r2,#8
	str	%r1,[%ip, #0x50]
	bne	.L00813
.L00814:
	str	%r1,[%ip, #0x44]
	str	%r1,[%ip, #0]
	bx	%lr
.L0085:
	tsts	%r2,#2
	str	%r1,[%ip, #20]
	beq	.L0088
.L0087:
	tsts	%r2,#4
	str	%r1,[%ip, #32]
	bne	.L00810
.L00811:
	tsts	%r2,#8
	str	%r1,[%ip, #0x58]
	beq	.L00814
.L00813:
	ldr	%r3,[%ip, #0x4c]
	str	%r1,[%ip, #64]
	str	%r1,[%ip, #0]
	bx	%lr
	.cfa_ef
	.type at91_pio_open, @function
	.size at91_pio_open, . - at91_pio_open
;-------------| at91_pio_close |-------------------
	.align	4
	.global	at91_pio_close
at91_pio_close:
	.cfa_bf	at91_pio_close
	ldr	%ip,[%r0, #0]
	str	%r1,[%ip, #4]
	bx	%lr
	.cfa_ef
	.type at91_pio_close, @function
	.size at91_pio_close, . - at91_pio_close
;-------------| at91_pio_write |-------------------
	.align	4
	.global	at91_pio_write
at91_pio_write:
	.cfa_bf	at91_pio_write
	ldr	%ip,[%r0, #0]
	cmp	%r2,#1
	strne	%r1,[%ip, #48]
	streq	%r1,[%ip, #52]
	bx	%lr
	.cfa_ef
	.type at91_pio_write, @function
	.size at91_pio_write, . - at91_pio_write
;-------------| at91_pio_read |-------------------
	.align	4
	.global	at91_pio_read
at91_pio_read:
	.cfa_bf	at91_pio_read
	ldrb	%r3,[%r0, #4]
	mov	%ip,#1
	mvn	%r2,#255
	mov	%r3,%ip,lsl %r3
	sub	%r2,%r2,#0xbf00
	ldr	%ip,[%r2, #12]
	str	%r3,[%r2, #4]
	and	%r1,%ip,%r3
	ldr	%ip,[%r0, #0]
	cmp	%r1,#0
	ldr	%r0,[%ip, #60]
	streq	%r3,[%r2, #8]
	bx	%lr
	.cfa_ef
	.type at91_pio_read, @function
	.size at91_pio_read, . - at91_pio_read
;-------------| at91_pio_set_mode |-------------------
	.align	4
	.global	at91_pio_set_mode
at91_pio_set_mode:
	.cfa_bf	at91_pio_set_mode
	tsts	%r2,#2
	ldr	%ip,[%r0, #0]
	beq	.L0125
	str	%r1,[%ip, #32]
	tsts	%r2,#4
	streq	%r1,[%ip, #0x58]
	strne	%r1,[%ip, #0x50]
	bx	%lr
	str	%r1,[%ip, #0x58]
	bx	%lr
.L0125:
	str	%r1,[%ip, #36]
	tsts	%r2,#4
	streq	%r1,[%ip, #0x58]
	strne	%r1,[%ip, #0x50]
	bx	%lr
	str	%r1,[%ip, #0x50]
	bx	%lr
	.cfa_ef
	.type at91_pio_set_mode, @function
	.size at91_pio_set_mode, . - at91_pio_set_mode
;-------------| at91_clock_set_mode |-------------------
	.align	4
	.global	at91_clock_set_mode
at91_clock_set_mode:
	.cfa_bf	at91_clock_set_mode
	cmp	%r0,#1
	bne	.L0148
	mvn	%ip,#255
	mov	%r3,#1
	sub	%ip,%ip,#0xbf00
	str	%r3,[%ip, #0]
	b	.L01411
.L0145:
	mvn	%ip,#255
	mvn	%r3,#0
	sub	%ip,%ip,#0xbf00
	str	%r3,[%ip, #4]
	b	.L01411
.L0146:
	mvn	%ip,#255
	mvn	%r3,#0
	sub	%ip,%ip,#0xbf00
	str	%r3,[%ip, #8]
	b	.L01411
.L0148:
	cmp	%r0,#2
	beq	.L0145
	cmp	%r0,#3
	beq	.L0146
.L01411:
	bx	%lr
	.cfa_ef
	.type at91_clock_set_mode, @function
	.size at91_clock_set_mode, . - at91_clock_set_mode
;-------------| at91_clock_get_status |-------------------
	.align	4
	.global	at91_clock_get_status
at91_clock_get_status:
	.cfa_bf	at91_clock_get_status
	mvn	%ip,#255
	sub	%ip,%ip,#0xbf00
	ldr	%ip,[%ip, #12]
	mov	%r3,#1
	and	%r0,%ip,%r3,lsl %r0
	bx	%lr
	.cfa_ef
	.type at91_clock_get_status, @function
	.size at91_clock_get_status, . - at91_clock_get_status
;-------------| at91_clock_open |-------------------
	.align	4
	.global	at91_clock_open
at91_clock_open:
	.cfa_bf	at91_clock_open
	mov	%ip,#1
	mov	%r3,%ip,lsl %r0
	mvn	%ip,#255
	sub	%ip,%ip,#0xbf00
	str	%r3,[%ip, #4]
	bx	%lr
	.cfa_ef
	.type at91_clock_open, @function
	.size at91_clock_open, . - at91_clock_open
;-------------| at91_clock_close |-------------------
	.align	4
	.global	at91_clock_close
at91_clock_close:
	.cfa_bf	at91_clock_close
	mov	%ip,#1
	mov	%r3,%ip,lsl %r0
	mvn	%ip,#255
	sub	%ip,%ip,#0xbf00
	str	%r3,[%ip, #8]
	bx	%lr
	.cfa_ef
	.type at91_clock_close, @function
	.size at91_clock_close, . - at91_clock_close
;-------------| at91_usart_open |-------------------
	.align	4
	.global	at91_usart_open
at91_usart_open:
	.cfa_bf	at91_usart_open
	stmdb	%sp!,{%r8,%r9,%lr}
	.cfa_push	{%r8,%r9,%lr}
	ldrb	%ip,[%r0, #11]
	mov	%lr,#1
	mov	%r8,%lr,lsl %ip
	mvn	%ip,#255
	sub	%ip,%ip,#0xbf00
	str	%r8,[%ip, #4]
	mov	%ip,#32
	add	%ip,%ip,#0x40000
	tsts	%r1,%ip
	ldrb	%ip,[%r0, #9]
	ldr	%r9,[%r0, #4]
	mov	%r8,%lr,lsl %ip
	ldrb	%ip,[%r0, #8]
	orrne	%r8,%r8,%lr,lsl %ip
	ldrneb	%ip,[%r0, #10]
	orr	%lr,%r8,%lr,lsl %ip
	ldr	%ip,[%r9, #0]
	str	%lr,[%ip, #4]
	mov	%ip,#172
	ldr	%r0,[%r0, #0]
	str	%ip,[%r0, #0]
	mov	%ip,#0
	str	%ip,[%r0, #52]
	str	%ip,[%r0, #60]
	str	%r2,[%r0, #32]
	str	%r1,[%r0, #4]
	str	%r3,[%r0, #40]
	mov	%ip,#80
	str	%ip,[%r0, #0]
	.cfa_remember_state
	ldmia	%sp!,{%r8,%r9,%ip}
	.cfa_pop	{%r8,%r9,%ip}
	bx	%ip
	.cfa_restore_state
	.cfa_ef
	.type at91_usart_open, @function
	.size at91_usart_open, . - at91_usart_open
;-------------| at91_usart_close |-------------------
	.align	4
	.global	at91_usart_close
at91_usart_close:
	.cfa_bf	at91_usart_close
	stmdb	%sp!,{%r8,%lr}
	.cfa_push	{%r8,%lr}
	mov	%r8,%r0
	ldrb	%ip,[%r8, #11]
	mov	%r3,#1
	mov	%r2,%r3,lsl %ip
	mvn	%ip,#255
	sub	%ip,%ip,#0xbf00
	str	%r2,[%ip, #8]
	ldrb	%ip,[%r8, #9]
	ldr	%r0,[%r8, #4]
	mov	%r2,%r3,lsl %ip
	ldrb	%ip,[%r8, #8]
	orr	%r2,%r2,%r3,lsl %ip
	ldrb	%ip,[%r8, #10]
	orr	%r1,%r2,%r3,lsl %ip
	mov	%r2,#0
	bl	at91_pio_open
	mvn	%r3,#0
	ldr	%ip,[%r8, #0]
	str	%r3,[%ip, #12]
	mov	%r3,#0
	str	%r3,[%ip, #52]
	str	%r3,[%ip, #60]
	mov	%r3,#172
	str	%r3,[%ip, #0]
	.cfa_remember_state
	ldmia	%sp!,{%r8,%ip}
	.cfa_pop	{%r8,%ip}
	bx	%ip
	.cfa_restore_state
	.cfa_ef
	.type at91_usart_close, @function
	.size at91_usart_close, . - at91_usart_close
;-------------| at91_usart_get_status |-------------------
	.align	4
	.global	at91_usart_get_status
at91_usart_get_status:
	.cfa_bf	at91_usart_get_status
	ldr	%ip,[%r0, #0]
	ldr	%r0,[%ip, #20]
	bx	%lr
	.cfa_ef
	.type at91_usart_get_status, @function
	.size at91_usart_get_status, . - at91_usart_get_status
;-------------| at91_usart_trig_cmd |-------------------
	.align	4
	.global	at91_usart_trig_cmd
at91_usart_trig_cmd:
	.cfa_bf	at91_usart_trig_cmd
	ldr	%ip,[%r0, #0]
	str	%r1,[%ip, #0]
	bx	%lr
	.cfa_ef
	.type at91_usart_trig_cmd, @function
	.size at91_usart_trig_cmd, . - at91_usart_trig_cmd
;-------------| at91_usart_write |-------------------
	.align	4
	.global	at91_usart_write
at91_usart_write:
	.cfa_bf	at91_usart_write
	ldr	%ip,[%r0, #0]
	str	%r1,[%ip, #28]
	bx	%lr
	.cfa_ef
	.type at91_usart_write, @function
	.size at91_usart_write, . - at91_usart_write
;-------------| at91_usart_read |-------------------
	.align	4
	.global	at91_usart_read
at91_usart_read:
	.cfa_bf	at91_usart_read
	ldr	%ip,[%r0, #0]
	ldr	%ip,[%ip, #24]
	str	%ip,[%r1, #0]
	bx	%lr
	.cfa_ef
	.type at91_usart_read, @function
	.size at91_usart_read, . - at91_usart_read
;-------------| at91_usart_receive_frame |-------------------
	.align	4
	.global	at91_usart_receive_frame
at91_usart_receive_frame:
	.cfa_bf	at91_usart_receive_frame
	add	%ip,%r3,%r3,lsl #2
	ldr	%r3,[%r0, #0]
	mov	%ip,%ip,lsl #1
	mov	%ip,%ip,lsr #2
	str	%ip,[%r3, #36]
	mov	%ip,#0x800
	str	%ip,[%r3, #0]
	str	%r1,[%r3, #48]
	str	%r2,[%r3, #52]
	mov	%r0,#1
	bx	%lr
	.cfa_ef
	.type at91_usart_receive_frame, @function
	.size at91_usart_receive_frame, . - at91_usart_receive_frame
;-------------| at91_usart_send_frame |-------------------
	.align	4
	.global	at91_usart_send_frame
at91_usart_send_frame:
	.cfa_bf	at91_usart_send_frame
	ldr	%r3,[%r0, #0]
.L0364:
	ldr	%ip,[%r3, #20]
	tsts	%ip,#16
	beq	.L0364
	str	%r1,[%r3, #56]
	str	%r2,[%r3, #60]
	mov	%r0,#1
	bx	%lr
	.cfa_ef
	.type at91_usart_send_frame, @function
	.size at91_usart_send_frame, . - at91_usart_send_frame
;-------------| at91_tc_open |-------------------
	.align	4
	.global	at91_tc_open
at91_tc_open:
	.cfa_bf	at91_tc_open
	stmdb	%sp!,{%r8,%lr}
	.cfa_push	{%r8,%lr}
	ldrb	%lr,[%r0, #8]
	mov	%ip,#1
	mov	%r8,%ip,lsl %lr
	mvn	%lr,#255
	sub	%lr,%lr,#0xbf00
	str	%r8,[%lr, #4]
	ldrb	%lr,[%r0, #11]
	cmp	%r2,#1
	ldreqb	%r2,[%r0, #9]
	mov	%lr,%ip,lsl %lr
	orreq	%lr,%lr,%ip,lsl %r2
	cmp	%r3,#1
	ldreqb	%r3,[%r0, #10]
	orreq	%lr,%lr,%ip,lsl %r3
	ldr	%r3,[%r0, #4]
	ldr	%r3,[%r3, #0]
	str	%lr,[%r3, #4]
	ldr	%r2,[%r0, #0]
	mov	%r3,#2
	str	%r3,[%r2, #0]
	mvn	%r3,#0
	str	%r3,[%r2, #40]
	ldr	%r3,[%r2, #32]
	str	%r1,[%r2, #4]
	str	%ip,[%r2, #0]
	.cfa_remember_state
	ldmia	%sp!,{%r8,%ip}
	.cfa_pop	{%r8,%ip}
	bx	%ip
	.cfa_restore_state
	.cfa_ef
	.type at91_tc_open, @function
	.size at91_tc_open, . - at91_tc_open
;-------------| at91_tc_close |-------------------
	.align	4
	.global	at91_tc_close
at91_tc_close:
	.cfa_bf	at91_tc_close
	ldr	%r3,[%r0, #0]
	mov	%ip,#2
	str	%ip,[%r3, #0]
	mvn	%ip,#0
	str	%ip,[%r3, #40]
	mov	%ip,#1
	ldrb	%r3,[%r0, #8]
	mov	%r3,%ip,lsl %r3
	mvn	%ip,#255
	sub	%ip,%ip,#0xbf00
	str	%r3,[%ip, #8]
	bx	%lr
	.cfa_ef
	.type at91_tc_close, @function
	.size at91_tc_close, . - at91_tc_close
;-------------| at91_tc_get_status |-------------------
	.align	4
	.global	at91_tc_get_status
at91_tc_get_status:
	.cfa_bf	at91_tc_get_status
	ldr	%ip,[%r0, #0]
	ldr	%r0,[%ip, #32]
	bx	%lr
	.cfa_ef
	.type at91_tc_get_status, @function
	.size at91_tc_get_status, . - at91_tc_get_status
;-------------| at91_tc_trig_cmd |-------------------
	.align	4
	.global	at91_tc_trig_cmd
at91_tc_trig_cmd:
	.cfa_bf	at91_tc_trig_cmd
	cmp	%r1,#1
	bne	.L0467
	ldr	%ip,[%r0, #0]
	mov	%r3,#4
	str	%r3,[%ip, #0]
	b	.L0469
.L0465:
	ldr	%ip,[%r0, #0]
	and	%r3,%ip,#240
	mov	%ip,#1
	str	%ip,[%r3, #0xc0]
	b	.L0469
.L0467:
	cmp	%r1,#2
	beq	.L0465
.L0469:
	bx	%lr
	.cfa_ef
	.type at91_tc_trig_cmd, @function
	.size at91_tc_trig_cmd, . - at91_tc_trig_cmd
;-------------| at91_tc_set_mode |-------------------
	.align	4
	.global	at91_tc_set_mode
at91_tc_set_mode:
	.cfa_bf	at91_tc_set_mode
	ldr	%r3,[%r0, #0]
	cmp	%r2,#0
	ldr	%ip,[%r3, #4]
	beq	.L0475
	orr	%ip,%ip,%r1
	str	%ip,[%r3, #4]
	bx	%lr
.L0475:
	bic	%ip,%ip,%r1
	str	%ip,[%r3, #4]
	bx	%lr
	.cfa_ef
	.type at91_tc_set_mode, @function
	.size at91_tc_set_mode, . - at91_tc_set_mode
;-------------| at91_tc_read |-------------------
	.align	4
	.global	at91_tc_read
at91_tc_read:
	.cfa_bf	at91_tc_read
	ldr	%r3,[%r0, #0]
	ldr	%ip,[%r3, #20]
	str	%ip,[%r1, #0]
	ldr	%ip,[%r3, #24]
	str	%ip,[%r1, #4]
	ldr	%ip,[%r3, #28]
	str	%ip,[%r1, #8]
	ldr	%ip,[%r3, #16]
	str	%ip,[%r1, #12]
	bx	%lr
	.cfa_ef
	.type at91_tc_read, @function
	.size at91_tc_read, . - at91_tc_read
;-------------| at91_tc_write |-------------------
	.align	4
	.global	at91_tc_write
at91_tc_write:
	.cfa_bf	at91_tc_write
	ldr	%r3,[%r0, #0]
	ldr	%ip,[%r1, #0]
	str	%ip,[%r3, #20]
	ldr	%ip,[%r1, #4]
	str	%ip,[%r3, #24]
	ldr	%ip,[%r1, #8]
	str	%ip,[%r3, #28]
	bx	%lr
	.cfa_ef
	.type at91_tc_write, @function
	.size at91_tc_write, . - at91_tc_write
	.end

⌨️ 快捷键说明

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