Tiny6410之蜂鸣器

it2025-02-13  9

  在Tiny6410开发板上有一个蜂鸣器,本次的实验就是驱动板子上的蜂鸣器,相当于测试一下板子上的蜂鸣器是否能够正常工作。

一、查看原理图

  通用查看Tiny6410的原理图如下图一(a)所示,通过分析该电路图可知:

1、三极管的基极(B)为高电平时三极管导通,此时蜂鸣器就会响。

2、三极管的基极(B)的状态又PWM0决定。

故只要设置PWM0的状态即可让蜂鸣器鸣叫。由下图一(b)可知PWM0对应的寄存器为GPF14(即GPF寄存器)。

图一(a)

图一(b)

二、查看数据手册

  根据以往的经验可知,GPF14对应的配置寄存器必为GPFCON,对应的数据寄存器必为GPFDAT。故要启动启动蜂鸣器就必须配置GPF寄存器。

1、配置GPFCON、GPFDAT寄存器的地址。由图二(a)可知GPFCON寄存器的地址位0xF0080A0、GPFDAT寄存器的地址位0xF0080A4。

2、由于蜂鸣器属于输出设备,故配置GPF14位输出。由图二(b)可知01表示输出即GPFCON寄存器的[29:28]设置为01。

3、由图二(c)可知当端口作为输出端口时,管脚状态于相应位的状态相同。即当GPFDAT的14位设置为高(低)电平时就意味着PWM0为高(低)电平。

图二(a)

 图二(b)

图二(c)

三、代码编写

Tiny6410Adde.h文件

#ifndef _Tiny6410Addr_H #define _Tiny6410Addr_H //GPF #define GPFCON (*((volatile unsigned long *)0x7F0080A0)) #define GPFDAT (*((volatile unsigned long *)0x7F0080A4)) #endif Tiny6410Addr.h

buzzer.h文件

void buzzer_on(); void buzzer_off(); void buzzer_init(void); buzzer.h

buzzer.c文件

#include "Tiny6410Addr.h" #include "buzzer.h" void buzzer_on() { GPFDAT |= 1<<14; } void buzzer_off() { GPFDAT &= ~(1<<14); } void buzzer_init(void) { // set GPF14 as output GPFCON |= 1<<28; GPFCON &= ~(1<<29); } buzzer.c

main.c文件

#include "stdio.h" #include "buzzer.h" int main() { buzzer_init();// 初始化buzzer while (1) { int n = 1000; buzzer_on();// 开启蜂鸣器 while(n--); buzzer_off();// 关闭蜂鸣器 } return 0; } main.c

Makefile文件

CC = arm-linux-gcc LD = arm-linux-ld AR = arm-linux-ar OBJCOPY = arm-linux-objcopy OBJDUMP = arm-linux-objdump CFLAGS := -Wall -g -c -O2 objs := buzzer.o main.o buzzer.bin: $(objs) ${LD} -Ttext 0x50000000 -o buzzer.elf $^ ${OBJCOPY} -O binary -S buzzer.elf $@ ${OBJDUMP} -D buzzer.elf > buzzer.dis %.o:%.c ${CC} $(CFLAGS) -o $@ $< %.o:%.S ${CC} $(CFLAGS) -o $@ $< clean: make clean -C lib rm -f *.bin *.elf *.dis *.o Makefiel

 

转载于:https://www.cnblogs.com/chenshikun/p/6399120.html

相关资源:arm--按键控制灯和蜂鸣器
最新回复(0)