友善之臂第二个裸板驱动蜂鸣器程序

来源:互联网 发布:评论盖楼的数据库设计 编辑:程序博客网 时间:2024/06/05 21:20

这次文件稍比前一个程序要多要点,文件有:beep.c     beep.h     main.c     Makefile    mkv210_image.c    start.S    write2sd

beep.c     //主要是关于蜂鸣器的一些方法

#define GPD0CON(*(volatile unsigned long *)0xE02000A0)//接蜂鸣器的引脚的寄存器GPD0#define GPD0DAT(*(volatile unsigned long *)0xE02000A4)//void beep_init(void){GPD0CON |=1<<0;}void beep_on(void){GPD0DAT |=1<<0;}void beep_off(void){GPD0DAT &=~(1<<0);}
beep.h    //关联beep。c的头文件

#ifndef BEEP_H#define BEEP_H//beep.c里面的方法void beep_init(void);void beep_on(void);void beep_off(void);#endif
main.c

#include "beep.h"void delay(unsigned long count){volatile unsigned long i=count;while(i--);}void main(){beep_init();while(1){beep_on();delay(0x50000);beep_off();delay(0x50000);}}
Makefile

beep.bin: start.o main.o beep.oarm-linux-ld -Ttext 0x20000000 -o beep.elf $^arm-linux-objcopy -O binary beep.elf beep.binarm-linux-objdump -D beep.elf > beep_elf.disgcc mkv210_image.c -o mkmini210./mkmini210 beep.bin 210.bin%.o : %.Sarm-linux-gcc -o $@ $< -c%.o : %.carm-linux-gcc -o $@ $< -c clean:rm *.o *.elf *.bin *.dis *.exe -f
start.S   //启动并跳到main

.global _start_start:ldrr0, =0xE2700000movr1, #0strr1, [r0]ldrsp, =0xD0037D80//设个栈,这样可用解决当传递参数超过4位时的问题blmainhalt:b halt
write2sd

#!/bin/shsudo dd iflag=dsync oflag=dsync if=210.bin of=/dev/sdb seek=1

mkv210_image.c是三星给的校验源码,没有做过改动,详细分析,请看第一个驱动LED的分析


其实程序很简单,主要要讲遇到的烧写问题:

      我在sd还没挂载上时,就匆忙的运行了命令./write2sd,结果导致后面再重新运行./write2sd也没有用。重启虚拟机就解决了。

但原因并不清楚,希望了解的大神些可以透露一点

0 0