zoukankan      html  css  js  c++  java
  • Tiny6410之蜂鸣器

      在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
    海阔凭鱼跃,天高任鸟飞。
  • 相关阅读:
    更好的处理 Python 多工程 import 依赖
    Django 前后台的数据传递
    Django传递数据给JS
    nodejs 设置跨域访问
    Node.js + Express
    前端用户输入校验--基于JQ
    git统计当前分支提交次数
    gitlab相关
    CentOS7使用firewalld打开关闭防火墙与端口
    puppeteer安装/爬取数据
  • 原文地址:https://www.cnblogs.com/chenshikun/p/6399120.html
Copyright © 2011-2022 走看看