OK6410裸机开发之Beep

今天我们一起来看看OK6410的蜂鸣器操作,这个也比较简单,和控制LED差不多。

蜂鸣器原理图:

从图中我们可以看出,当PWM_TOUT1为高电平时,蜂鸣器就会响。而PWM_TOUT1接到了GPF15引脚上,下面我们就看看GPF PORT:

GPF相关寄存器:


GPF配置寄存器:


GPF数据寄存器:

既然是GPF15控制蜂鸣器,那么我们把GPF15设置为输出,即让GPFCON [31:30] = 0x00

beep.c源代码:

#define rGPFCON          (*(volatile unsigned *)(0x7F0080A0))
#define rGPFDAT          (*(volatile unsigned *)(0x7F0080A4))
#define rGPFPUD          (*(volatile unsigned *)(0x7F0080A8))



void msDelay(int time)
{
    	volatile unsigned int i,j;
    	for(i = 0; i < 2000000; i++)
    		for(j=0; j<time; j++);
}


void GPIO_Init(void)
{
    rGPFCON  = rGPFCON & (~(0x1<<(31)));/*GPFCON[31]=0*/
    rGPFCON  = rGPFCON | (0x1<<(30));/*GPFCON[30]=1*/
    rGPFPUD  = rGPFPUD & (~(0x3<<(30)));
    rGPFDAT  = rGPFDAT & 0x7fff;
}

void BeepOn(void)
{
	rGPFDAT = rGPFDAT | 0x8000;	/*GPF15置1*/
}

void BeepOff(void)
{
	rGPFDAT = rGPFDAT & 0x7fff;	/*GPF15置0*/
}

void BeepTest(void)
{
	while(1)
	{
		BeepOn();
		msDelay(10);
		BeepOff();
		msDelay(10);
	}
}

void main(void)
{
	GPIO_Init();
	BeepTest();
}

启动代码start.S(和LED的一样)

.globl _start
_start:

    /* Peri port setup */
    ldr r0, =0x70000000
    orr r0, r0, #0x13
    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)

	/* Disable Watchdog */
	ldr r0, =0x7E004000
	mov r1, #0
	str r1, [r0]

	/* 设置栈 */
	ldr sp, =8*1024

	bl main
halt:
	b halt

Makefile文件
all:beep.bin
led.bin: start.o beep.o
	arm-elf-ld -Ttext 0 -o beep.elf start.o beep.o
	arm-elf-objcopy -O binary beep.elf beep.bin
	arm-elf-objdump -D beep.elf > beep.dis  
  
start.o : start.S
	arm-elf-gcc -g -o start.o start.S -c  
  
led.o : led.c
	arm-elf-gcc -g -o beep.o beep.c -c  
  
clean:
	rm *.o beep.elf beep.bin beep.dis

编译完成后,用OpenJTAG调试程序,就会发现OK6410在“滴~滴~”的响。

编译和调试的图就不贴上来了,大家可以参考LED的去做。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值