我们的蜂鸣器在底板上,因此须要看底板的原理图
linux
打开底板原理图(Tiny4412SDK-1506-Schematic.pdf)
web
由上图可知,Tiny4412有1个蜂鸣器,控制它们四个引脚分别是GPD0_0,由原理可知,当IO引脚为高电平时,蜂鸣器就响,当IO引脚为低电平时蜂鸣器就不响了。咱们要作的工做就是设置GPD0_0为输出功能,且控制且输出电平高低便可。svg
由原理图可知,程序只进行了两步操做。spa
第一步:GPD0功能配置寄存器,地址为0x11400000+0x000000A0=0x114000A0,每四位控制一个引脚,0输入,1输出等等,这里咱们用到的是输出功能,相应位(GPDCON[1])配置为1
3d
第二步:GPD0数据寄存器,输出时相应位赋值0/1,能够输出高低电平,引脚配置为输入,读取相应引脚能够获取IO状态,地址为0x11400000+0x000000A4=0x114000A4
code
蜂鸣器开xml
gpio.h文件blog
#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文件token
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.o all: $(OBJS) $(LD) $(LD_FLAGS) $(OBJS) -o $(TARGET) $(OBJCOPY) $(COPY_FLAGS) $(TARGET) $(TARGET).bin $(OBJDUMP) $(DUMP_FLAGS) $(TARGET) > $(TARGET).dis rm -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)
蜂鸣器关
#include "gpio.h" int main(void) { bell_init(); bell_off(); return 0; }
蜂鸣器开1秒 关1秒 如此循环
#include "gpio.h" int main(void) { bell_init(); while(1) { bell_on(); delay1(); bell_off(); delay1(); } return 0; }
Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf