00. 目录

文章目录

  • 00. 目录
  • 01. 控制原理
  • 02. 配置寄存器
  • 03. 程序示例一
  • 04. 程序示例二
  • 05. 程序示例三
  • 06. 附录

01. 控制原理

咱们的蜂鸣器在底板上,所以需要看底板的原理图

打开底板原理图(Tiny4412SDK-1506-Schematic.pdf)

由上图可知,Tiny4412有1个蜂鸣器,控制它们四个引脚分别是GPD0_0,由原理可知,当IO引脚为高电平时,蜂鸣器就响,当IO引脚为低电平时蜂鸣器就不响了。我们要做的工作就是设置GPD0_0为输出功能,且控制且输出电平高低即可。

02. 配置寄存器

由原理图可知,程序只进行了两步操作。

第一步:GPD0功能配置寄存器,地址为0x11400000+0x000000A0=0x114000A0,每四位控制一个引脚,0输入,1输出等等,这里我们用到的是输出功能,相应位(GPDCON[1])配置为1

第二步:GPD0数据寄存器,输出时相应位赋值0/1,可以输出高低电平,引脚配置为输入,读取相应引脚可以获取IO状态,地址为0x11400000+0x000000A4=0x114000A4

03. 程序示例一

蜂鸣器开

gpio.h文件

#ifndef __GPIO_H__
#define __GPIO_H__typedef volatile unsigned int U32;
typedef volatile unsigned short U16;
typedef volatile unsigned char U8;//LED
#define GPM4CON *(U32*)0x110002e0
#define GPM4DAT *(U32*)0x110002e4//Key
#define GPX3CON *(U32*)0x11000c60
#define GPX3DAT *(U32*)0x11000c64//Buzzer
#define GPD0CON *(U32*)0x114000a0
#define GPD0DAT *(U32*)0x114000a4//LED初始化
int led_init(void);
//LED 全亮
int led_allon(void);
//LED 全灭
int led_alloff(void);#endif/*__GPIO_H__*/

lib.c文件

int delay(unsigned int i)
{while(--i);
}int delay1()
{unsigned int i = 0xfffff;while(--i);
}

test.c文件

#include "gpio.h"int main(void)
{bell_init();bell_on();return 0;
}

bell.c文件

#include "gpio.h"//Buzzer初始化
int bell_init(void)
{GPD0CON &= ~0xf;GPD0CON |= 0x1;return 0;
}//Buzzer 开
int bell_on(void)
{GPD0DAT |= 0x1;return 0;
}//Buzzer 关
int bell_off(void)
{GPD0DAT &= ~0x1;return 0;
}

Makefile

CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
CC_FLAGS = -c -I ./
LD = $(CROSS_COMPILE)ld
LD_FLAGS = -T start.lds -Ttext 0x40000000
OBJCOPY = $(CROSS_COMPILE)objcopy
COPY_FLAGS = -O binary
OBJDUMP=$(CROSS_COMPILE)objdump
DUMP_FLAGS=-D
TARGET=test
OBJS=start.o led.o lib.o test.o bell.oall: $(OBJS)$(LD) $(LD_FLAGS) $(OBJS) -o $(TARGET)$(OBJCOPY) $(COPY_FLAGS) $(TARGET) $(TARGET).bin$(OBJDUMP) $(DUMP_FLAGS) $(TARGET) > $(TARGET).disrm -rf *.o%.o:%.s$(CC) $(CC_FLAGS) $<
%.o:%.S$(CC) $(CC_FLAGS) $<
%.o:%.c$(CC) $(CC_FLAGS) $<.PHONY:clean
clean:rm -rf *.o $(TARGET).bin $(TARGET).dis $(TARGET)

04. 程序示例二

蜂鸣器关

#include "gpio.h"int main(void)
{bell_init();bell_off();return 0;
}

05. 程序示例三

蜂鸣器开1秒 关1秒 如此循环

#include "gpio.h"int main(void)
{bell_init();while(1){bell_on();delay1();bell_off();delay1();}return 0;
}

06. 附录

Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf

【ARM】Tiny4412裸板编程之蜂鸣器(C语言)相关推荐

  1. 【ARM】Tiny4412裸板编程之蜂鸣器

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  2. 【ARM】Tiny4412裸板编程之按键(C语言)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  3. 【ARM】Tiny4412裸板编程之异常(软中断)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...

  4. 【ARM】Tiny4412裸板编程之异常(中断向量表)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...

  5. 【ARM】Tiny4412裸板编程之异常

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...

  6. 【ARM】Tiny4412裸板编程之协处理器

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...

  7. 【ARM】Tiny4412裸板编程之静态库(libc.a)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...

  8. 【ARM】Tiny4412裸板编程之按键

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  9. 【ARM】Tiny4412裸板编程之LED(C语言)

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 程序实例四 07. 附录 01. 控制原理 咱们的LED ...

最新文章

  1. Operations on Numbers Strings
  2. RequestDispatcher
  3. 【推荐系统】KDD2021推荐系统论文集锦
  4. how Kyma connection is established for the first time
  5. Eclipse导入Solr源码Version5.5.3
  6. java常用算法_五分钟记住Java常用的八种排序算法与代码实现
  7. Spark2.1.0——运行环境准备
  8. zepto-创建dom
  9. 学好WindowsServer技术的几大秘籍
  10. IDC:大数据——数字化转型时代的大商机
  11. title()、upper()、lower()的用法
  12. centos 修改root密码_Ubuntu、Redhat、Kali、CentOS重置root密码方法汇总
  13. 前端一键复制粘贴插件——clipboard.js的使用
  14. 1. 英语邮件中经常用到的单句 (每次10句)
  15. X5内核视频之问答汇总
  16. CMD命令关闭指定PID进程
  17. 如何编辑pdf文件内容
  18. excel VBA会说话的工作表
  19. 【我的Android进阶之旅】 高效的设计稿标注及测量工具Markman介绍
  20. 【python】数据挖掘分析清洗——离群点(异常值)处理方法汇总

热门文章

  1. C# 反射中的GetType
  2. sql server 2008 报表部署:提示输入用户名密码
  3. c语言多线编程程序,C语言之多线编程 来看看?
  4. java 压缩汉字字节_java中计算汉字的字节数
  5. wordpress php7 mysql_WordPress可以使用PHP7的MySQLi扩展
  6. Java黑皮书课后题第5章:**5.34(游戏:石头、剪刀、布)编程练习题3.17给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续玩这个游戏,直到用户或者计算机赢对手两次以上为止
  7. C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
  8. Linux shell去除字符串中所有空格
  9. [转载]线上应用故障排查之一:高CPU占用
  10. java快速寻找一个数组的最大值或最小值, min, max,三种方法