我们的蜂鸣器在底板上,因此须要看底板的原理图
web
打开底板原理图(Tiny4412SDK-1506-Schematic.pdf)
svg
由上图可知,Tiny4412有1个蜂鸣器,控制它们四个引脚分别是GPD0_0,由原理可知,当IO引脚为高电平时,蜂鸣器就响,当IO引脚为低电平时蜂鸣器就不响了。咱们要作的工做就是设置GPD0_0为输出功能,且控制且输出电平高低便可。code
由原理图可知,程序只进行了两步操做。xml
第一步:GPD0功能配置寄存器,地址为0x11400000+0x000000A0=0x114000A0,每四位控制一个引脚,0输入,1输出等等,这里咱们用到的是输出功能,相应位(GPDCON[1])配置为1blog
第二步:GPD0数据寄存器,输出时相应位赋值0/1,能够输出高低电平,引脚配置为输入,读取相应引脚能够获取IO状态,地址为0x11400000+0x000000A4=0x114000A4
图片
蜂鸣器开string
bell.s文件内容以下it
.section .text .align 2 .global bell_init bell_init: @GPD0_0 ldr r0, =0x114000A0 ldr r1, [r0] bic r1, r1, #0xf orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_on bell_on: ldr r0, =0x114000A4 ldr r1, [r0] orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_off bell_off: ldr r0, =0x114000A4 ldr r1, [r0] bic r1, r1, #0x1 str r1, [r0] mov pc, lr
test.s文件内容以下io
.section .rodata .align 2 .LC0: .string "led all off\n" .section .text .align 2 .global _start _start: stmfd sp!, {lr} bl bell_init bl bell_on ldmfd sp!, {pc}
bell.s文件内容以下class
.section .text .align 2 .global bell_init bell_init: @GPD0_0 ldr r0, =0x114000A0 ldr r1, [r0] bic r1, r1, #0xf orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_on bell_on: ldr r0, =0x114000A4 ldr r1, [r0] orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_off bell_off: ldr r0, =0x114000A4 ldr r1, [r0] bic r1, r1, #0x1 str r1, [r0] mov pc, lr
test.s文件内容以下:
.section .rodata .align 2 .LC0: .string "led all off\n" .section .text .align 2 .global _start _start: stmfd sp!, {lr} bl bell_init bl bell_off ldmfd sp!, {pc}
蜂鸣器开1秒 关1秒 如此循环
lib.s文件内容
.align 2 .global led_delay led_delay: stmfd sp!, {lr} mov lr, pc ldr pc, =0x43e26480 ldmfd sp!, {pc}
bell.s文件内容
.section .text .align 2 .global bell_init bell_init: @GPD0_0 ldr r0, =0x114000A0 ldr r1, [r0] bic r1, r1, #0xf orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_on bell_on: ldr r0, =0x114000A4 ldr r1, [r0] orr r1, r1, #0x1 str r1, [r0] mov pc, lr .align 2 .global bell_off bell_off: ldr r0, =0x114000A4 ldr r1, [r0] bic r1, r1, #0x1 str r1, [r0] mov pc, lr
test.s文件内容
.align 2 .LC0: .string "led all off\n" .section .text .align 2 .global _start _start: stmfd sp!, {lr} bl bell_init 1: bl bell_on ldr r0, =1000000 bl led_delay bl bell_off ldr r0, =1000000 bl led_delay b 1b ldmfd sp!, {pc}
Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf