【ARM】Tiny4412裸板编程之蜂鸣器(C语言)
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语言)相关推荐
- 【ARM】Tiny4412裸板编程之蜂鸣器
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 【ARM】Tiny4412裸板编程之按键(C语言)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之异常(软中断)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...
- 【ARM】Tiny4412裸板编程之异常(中断向量表)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...
- 【ARM】Tiny4412裸板编程之异常
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...
- 【ARM】Tiny4412裸板编程之协处理器
00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...
- 【ARM】Tiny4412裸板编程之静态库(libc.a)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...
- 【ARM】Tiny4412裸板编程之按键
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之LED(C语言)
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 程序实例四 07. 附录 01. 控制原理 咱们的LED ...
最新文章
- Operations on Numbers Strings
- RequestDispatcher
- 【推荐系统】KDD2021推荐系统论文集锦
- how Kyma connection is established for the first time
- Eclipse导入Solr源码Version5.5.3
- java常用算法_五分钟记住Java常用的八种排序算法与代码实现
- Spark2.1.0——运行环境准备
- zepto-创建dom
- 学好WindowsServer技术的几大秘籍
- IDC:大数据——数字化转型时代的大商机
- title()、upper()、lower()的用法
- centos 修改root密码_Ubuntu、Redhat、Kali、CentOS重置root密码方法汇总
- 前端一键复制粘贴插件——clipboard.js的使用
- 1. 英语邮件中经常用到的单句 (每次10句)
- X5内核视频之问答汇总
- CMD命令关闭指定PID进程
- 如何编辑pdf文件内容
- excel VBA会说话的工作表
- 【我的Android进阶之旅】 高效的设计稿标注及测量工具Markman介绍
- 【python】数据挖掘分析清洗——离群点(异常值)处理方法汇总
热门文章
- C# 反射中的GetType
- sql server 2008 报表部署:提示输入用户名密码
- c语言多线编程程序,C语言之多线编程 来看看?
- java 压缩汉字字节_java中计算汉字的字节数
- wordpress php7 mysql_WordPress可以使用PHP7的MySQLi扩展
- Java黑皮书课后题第5章:**5.34(游戏:石头、剪刀、布)编程练习题3.17给出玩石头-剪刀-布游戏的程序。修改这个程序,让用户可以连续玩这个游戏,直到用户或者计算机赢对手两次以上为止
- C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
- Linux shell去除字符串中所有空格
- [转载]线上应用故障排查之一:高CPU占用
- java快速寻找一个数组的最大值或最小值, min, max,三种方法