硬件说明
蜂鸣器用过三级管开关驱动,连到s3c6410的GPF15脚,且高电平蜂鸣器响。
GPF配置寄存器GPFCON地址为0x7F0080A0,且[31:30]配置为01时,表示GPF15脚用于输出。
GPF数据寄存器GPFDAT地址为0x7F0080A4,且[15]配置为1时,表示GPF15脚为高电平。
GPF上拉控制寄存器GPFPUD地址为0x7F0080A8。
代码文件buzzer.S
.text .global main main: stmfd sp!, {r0-r12, lr} @ mov r0, #1 @ mov r0, r0, lsl #30 ldr r0, =(1 << 30) ldr r1, GPFCON str r0, [r1] beep: @ mov r0, #1 @ mov r0, r0, lsl #15 ldr r0, =(1 << 15) ldr r1, GPFDAT str r0, [r1] b beep ldmfd sp!, {r0-r12, pc} GPFCON: .word 0x7F0080A0 GPFDAT: .word 0x7F0080A4 GPFPUD: .word 0x7F0080A8
连接脚本buzzer.lds
获取lds模板
修改为# arm-none-linux-gnueabi-ld --verbose > buzzer.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(main) SECTIONS { . = 0x50008000 ; .text : { *(.text) ; } .align = 4 ; }
编译代码
# arm-none-linux-gnueabi-gcc -c buzzer.S -o buzzer.o # arm-none-linux-gnueabi-ld -T buzzer.lds buzzer.o -o buzzer # arm-none-linux-gnueabi-objcopy -O binary buzzer /tftpboot/buzzer.bin
运行代码
在u-boot命令状态
$ tftp 0x50008000 buzzer.bin $ go 0x50008000
运行结果
蜂鸣器长响不停