S5PV210 | 裸机蜂鸣器实验

发布者:SparklingMoon最新更新时间:2024-12-05 来源: cnblogs关键字:S5PV210  裸机  蜂鸣器 手机看文章 扫描二维码
随时随地手机看文章
  • 电路原理

HW-BEEP

电路中通过一个NPN的三级管控制蜂鸣器的停止与蜂鸣。

GPIOGPD0_2输出高电平,蜂鸣器鸣叫;反之,停止鸣叫。

  • DATASHEET(相关寄存器设置详解)

2.2.7 GPD0控制寄存器组

GPD0控制寄存器组包含六组控制寄存器,分别叫做:GPD0CONGPD0DATGPD0PUDGPD0DRVGPD0CONPDN 和
GPD0PUDPDN

2.2.7.1 Port Group GPD0 Control Register (GPD0CON, R/W, Address = 0xE020_00A0)

GPD0CON

2.2.7.2 Port Group GPD0 Control Register (GPD0DAT, R/W, Address = 0xE020_00A4)

GPD0DAT

2.2.7.3 Port Group GPD0 Control Register (GPD0PUD, R/W, Address = 0xE020_00A8)

GPD0PUD

2.2.7.4 Port Group GPD0 Control Register (GPD0DRV, R/W, Address = 0xE020_00AC)

GPD0DRV

2.2.7.5 Port Group GPD0 Control Register (GPD0CONPDN, R/W, Address = 0xE020_00B0)

GPD0PUDPDN

2.2.7.6 Port Group GPD0 Control Register (GPD0PUDPDN, R/W, Address = 0xE020_00B4)

GPD0PUDPDN

代码编写

启动代码

/**********************************************************

 *   > File Name: start.S

 *   > Author: fly

 *   > Create Time: 2020年07月17日 星期五 07时56分19秒

 *********************************************************/

#define PS_HOLD_CONTORL 0xE010E81C

#define WTCON           0xE2700000

#define SVC_STACK       0xD0037D80

 

//#define CONFIG_SYS_ICACHE_OFF   1

.global _start

_start:

    // 给5v电源置锁

    // LDR指令:从内存中将1个32位的字读取到目标寄存器中

    // STR指令:将1个32位的字数据写入到指令中指定的内存单元中

    // ORR指令:逻辑或

// BIC指令:位清零

    ldr r0,=PS_HOLD_CONTORL     // r0 = 0xE010E81C

    ldr r1,[r0]                 // 将r0地址处的数据读出,保存到r1中(零偏移)

    orr r1,r1,#0x300            // 设置r1的第8、9位,其他位保持不变

    orr r1,r1,#0x1              // 设置r1的第1位,其他位保持不变

    str r1,[r0]                 // 将r1中的内容传输到r0中数指定的地址内存中去

 

    // 关看门狗

    ldr r0, =WTCON // r0 = 0xE2700000

    mov r1, #0 // r1 = 0

    str r1, [r0] // 将r1中的内容传输到r0中数指定的地址内存中去

 

    // 开/关iCache

    // MRC指令:从协处理器寄存器传数据到ARM寄存器

    // MCR指令:从ARM寄存器传数据到协处理器寄存器

    mrc p15, 0, r0, c1, c0, 0

    #ifdef CONFIG_SYS_ICACHE_OFF

    bic r0, r0, #0x00001000     @ clear bit 12 (I) I-Cache

    #else

    orr r0, r0, #0x00001000     @ set bit 12 (I) I-Cache

    #endif

    mcr p15, 0, r0, c1, c0, 0

 

    //设置栈,以便调用c函数

    ldr sp, =SVC_STACK

 

    bl main /* 跳转到main函数 */

 

    b . /* 死循环 */

BEEP控制代码

/******************************************************

 *   > File Name: beep.c

 *   > Author: fly

 *   > Create Time: 2021-07-01  4/26  14:52:31 +0800

 *==================================================*/

 

typedef struct{

    unsigned int GPD0CON;

    unsigned int GPD0DAT;

    unsigned int GPD0PUD;

    unsigned int GPD0DRV;

    unsigned int GPD0CONPDN;

    unsigned int GPD0PUDPDN;

}gpd0;

#define GPD0 (*(volatile gpd0*)0xE02000A0) 

 

void delay(volatile unsigned int i)

{

    while(i--);

}

 

void beep_init(void)

{

    GPD0.GPD0CON = (GPD0.GPD0CON & ~(0xf<<8)) | (0x1<<8);

    GPD0.GPD0DAT = (GPD0.GPD0DAT & ~(0x1<<2)) | (0x0<<2);

}

 

void beep_set(unsigned int value)

{

    if (value){  

        GPD0.GPD0DAT = (GPD0.GPD0DAT & ~(0x1<<2)) | (0x1<<2);//ON

    }else{

        GPD0.GPD0DAT = (GPD0.GPD0DAT & ~(0x1<<2)) | (0x0<<2);//OFF  

    }

}

 

void tester_beep(void)

{

    beep_init();

 

    for(;;){

        beep_set(1);

        delay(900000);

        beep_set(0);

        delay(900000);   

    }

}

 

int main(int argc, char* argv[])

{

    tester_beep();

    return 0;

}

Makefile文件

# 将所有的.o文件链接成.elf文件,“-Ttext 0x0”

# 表示程序的运行地址是0x0,由于目前编写的是位置

# 无关码,可以在任一地址运行

# 将elf文件抽取为可在开发板上运行的bin文件

# 将elf文件反汇编保存在dis文件中,调试程序会用

# 添加文件头

.PHONY: all clean tools

 

CROSS ?= arm-linux-

NAME := BEEP

LD := $(CROSS)ld

OC := $(CROSS)objcopy

OD := $(CROSS)objdump

CC := $(CROSS)gcc

MK := ../../tools/mk_image/mkv210_image

CFLAGS := -nostdlib -Wall

 

all:$(NAME).bin

 

$(NAME).bin : start.o beep.o

$(LD) -Ttext 0x0 -o $(NAME).elf $^

$(OC) -O binary $(NAME).elf $(NAME).bin

$(OD) -D $(NAME).elf > $(NAME)_elf.dis

$(MK) $(NAME).bin

 

# 将当前目录下存在的汇编文件及C文件编译成.o文件

%.o : %.S

$(CC) -o $@ $< -c $(CFLAGS)

%.o : %.c

$(CC) -o $@ $< -c $(CFLAGS)

 

clean:

$(RM) *.o *.elf *.bin *.dis *.sd

 

tools:

make -C ../../tools/mk_image/



关键字:S5PV210  裸机  蜂鸣器 引用地址:S5PV210 | 裸机蜂鸣器实验

上一篇:S5PV210 | 裸机LED灯呼吸实验
下一篇:S5PV210 | 裸机按键检测、控制外设实验

推荐阅读最新更新时间:2026-03-25 11:59

【ARM裸机s5pv210 】旧版本交叉编译工具链配置
旧版本交叉编译工具链的安装 1.cd /usr/local/ mkdir arm tar -jxvf arm-2009q3.tar.bz2 cd /usr/local/arm/arm-2009q3/bin bash mk-arm-linux-.sh sudo gedit ~/.bashrc 添加 export PATH=/usr/local/arm/arm-2009q3/bin:$PATH source ~/.bashrc 2.安装32位库 sudo apt-get update apt-get update sudo apt-get install lib32ncurses5-dev 3./usr/local/arm/arm
[单片机]
【ARM裸机s5pv210 】芯片初始化
#define GPJ0CON 0xE0200240 #define GPJ0DAT 0xE0200244 #define WTCON 0xE2700000 #define SVC_STACK 0xd0037d80 .global _start _start: // 第1步:关看门狗(向WTCON的bit5写入0即可) ldr r0, =WTCON ldr r1, =0x0 str r1, // 第2步:设置SVC栈    满减栈,满的意思是入栈先移动指针再填入数据,减的意思是栈从高到低用 ldr sp, =SVC_STACK // 第3步:开/关icache
[单片机]
S5PV210裸机驱动开发之led关开门狗(加汇编注示)
总结:   1.手动关看门狗,只需往寄存器WTCON写入0即可;   2.调手C函数实延时的功能,以测试IROM中的固化代码是否设置了栈,结果证明设置了栈; start.S中: .globl _start _start: //关闭看门狗 ldr r0, =0xE2700000 mov r1, #0 str r1, //设置GPJ2CON的bit ,配置GPJ2_0/1/2/3引脚为输出功能 ldr r1, =0xE0200280 //加载32位立即数0xE0200280到r1 ldr r0, =0x00001111 str r0, //把ro中的数据存储到地址0xE0200280中 mo
[单片机]
Tiny210裸机PWM控制蜂鸣器
start.S源码: .global _start _start: ldr sp, =0xD0030000 // 初始化栈,因为后面要调用C函数 bl clock_init // 初始化时钟 bl ddr_init // 初始化内存 bl nand_init // 初始化NAND ldr r0, =0x36000000 // 要拷贝到DDR中的位置 ldr r1, =0x0 // 从NAND的0地址开始拷贝 ldr r2, =bss_start // BSS段的开始地址 sub r2,r2,r0 // 要拷
[单片机]
s5pv210编译qt
编译tslib,执行make时提示undefined reference to `rpl_malloc' 是因为config.h.in文件中有 /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc 把#undef malloc注释掉重新make即可 requires installation of untrusted packages 一、在源里面加入软件下载地址; 二、直接用“sudo apt-get install 软件包名”这个命令安装。 在出现提示的时候按y,同意安装即可。 e
[单片机]
基于s5pv210嵌入式linux使用其他动态、静态库文件程序的交叉编译
刚刚移植了sqlite3迫切想测试一些,结果将原来在ubuntu系统下写好且测试通过的程序,重新编译就报错,无法找到已定义的函数 这是由于没有使用库或者使用了错误的就、库造成的结果。 正确做法为: arm-none-linux-gnueabi-gcc –o database-test –L 你需要的库文件地址 –I 你需要的头文件的地址 xxx.c –lsqlite3 -L 指定自己的库地址 -I 指定的头文件地址 好了可以使用文件了 如果指定需要的头文件和库.可以分别在-I和-L中指定。
[单片机]
基于<font color='red'>s5pv210</font>嵌入式linux使用其他动态、静态库文件程序的交叉编译
基于s5pv210嵌入式linux系统sqlite3数据库移植
1、下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2、解压 tar xvf XXXXX 3、配置编译环境 运行 ./configure –host=你的交叉编译工具的前缀 –prefix=你想编译安装的位置 我的host为arm-none-linux-gnueabi,prefix为/home/linux/sqlit3-arm 运行后会生成Makefile文件。 4、编译并安装 编译:make 安装:make install 安装完成后会在你设定的目录下生成安装好的文件: bin、include、lib、share bin:为编译完成的sqlite3可执行文件
[单片机]
基于<font color='red'>s5pv210</font>嵌入式linux系统sqlite3数据库移植
S5PV210时钟,看门狗定时器
晶振:时钟源(操作主要有两个,倍频,分频) A8的时钟源: 时钟域,每个时钟域(不同的最高频率和最低频率)管理着不同的电路模块: 不同的时钟域对应不同电路模块表 时钟电路:懂得看时钟电路(时钟源选择开关配置(MUX_apll),倍频的配置(APLL),分频的配置(DIV_apll)) 更具体可参看arm,007笔记 ----------------------------------------------------------------------------------------------- 看门狗定时器: 功能: 1、定时器:设置一个定时器基准频率,设置一个超时数据值,数据值根据频率来不断减1,减为0
[单片机]
<font color='red'>S5PV210</font>时钟,看门狗定时器
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved