00. 目录
文章目录
01. 控制原理
咱们的蜂鸣器在底板上,所以需要看底板的原理图
打开底板原理图(Tiny4412SDK-1506-Schematic.pdf)
由上图可知,Tiny4412有1个蜂鸣器,控制它们四个引脚分别是GPD0_0,由原理可知,当IO引脚为高电平时,蜂鸣器就响,当IO引脚为低电平时蜂鸣器就不响了。我们要做的工作就是设置GPD0_0为输出功能,且控制且输出电平高低即可。
02. 配置寄存器
由原理图可知,程序只进行了两步操作。
第一步:GPD0功能配置寄存器,地址为0x11400000+0x000000A0=0x114000A0,每四位控制一个引脚,0输入,1输出等等,这里我们用到的是输出功能,相应位(GPDCON[1])配置为1
第二步:GPD0数据寄存器,输出时相应位赋值0/1,可以输出高低电平,引脚配置为输入,读取相应引脚可以获取IO状态,地址为0x11400000+0x000000A4=0x114000A4
03. 程序示例一
蜂鸣器开
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文件内容如下
.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}
04. 程序示例二
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文件内容如下:
.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}
05. 程序示例三
蜂鸣器开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}
06. 附录
Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf