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

这次文件稍比前一个程序要多要点,文件有: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.o
	arm-linux-ld -Ttext 0x20000000 -o beep.elf $^
	arm-linux-objcopy -O binary beep.elf beep.bin
	arm-linux-objdump -D beep.elf > beep_elf.dis
	gcc mkv210_image.c -o mkmini210
	./mkmini210 beep.bin 210.bin
%.o : %.S
	arm-linux-gcc -o $@ $< -c

%.o : %.c
	arm-linux-gcc -o $@ $< -c 

clean:
	rm *.o *.elf *.bin *.dis *.exe -f
start.S   //启动并跳到main

.global _start

_start:

	ldr	r0, =0xE2700000				
	mov	r1, #0
	str	r1, [r0]

	ldr	sp, =0xD0037D80//设个栈,这样可用解决当传递参数超过4位时的问题

	bl	main			

halt:
	b halt
write2sd

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

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


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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值