Tiny4412之蜂鸣器驱动与led灯驱动
一:LED驱动编写
要编写LED驱动,首先的知道开发板的构造;开发板分为核心板与底板;编写驱动的第一步就是要看开发板,找到LED灯在开发板上的位置及所对应的名字;第一步就要查看核心板电路图,以及底板电路图;最后就是查看开发板手册,然后进行程序编写:
通过看开发板我们可以知道LED灯的位置的核心板上,在核心板上找到LED的电路图,Ctrl+F可以在文档中快捷查找:

通过电路图我们可以看出:LED灯的一端已经接高电平,只要给另一端加低电平LED就会被点亮。
然后查看LED在核心板上的引脚:

由上图我们可以看出,LED1对应的是GPM4_0
然后通过芯片数据手册可以查到它的具体用法:


通过手册我们可以看出:GPM4CON 置一输出,表示控制,置零输入,表示检测,GPM4DAT表示它的值和引脚的电压状态对于,值为一时表示高电平,值为零时表示底电平,下面贴出代码:
.global main
main:
mov ip, sp
sub sp, sp, #
stmdb sp!, {fp, ip, lr}
add fp, sp, # ldr r3, gpmcon
ldr r0, =0x1
str r0, [r3] ldr r3, gpmdat
ldr r0, =0x0
str r0, [r3] add sp, fp, #
ldmdb sp, {fp, sp, pc} gpmcon:
.word 0x110002e0 gpmdat:
.word 0x110002e4
下面的用C语言代码是实现四个LED灯的闪烁
#define GPM4CON (*(unsigned long *)0x110002e0)//宏定义
#define GPM4DAT (*(unsigned long *)0x110002e4) void (*udelay)(int) = 0xc3e25f90;
int main()
{
GPM4CON &= ~0xffff;
GPM4CON |= 0x1111; while() {
GPM4DAT |= 0xf;//led off
udelay();
GPM4DAT &= ~0xf;
udelay();//led on
}
}
跑马灯:
#define GPM4CON (*(unsigned long *)0x110002e0)
#define GPM4DAT (*(unsigned long *)0x110002e4) void (*udelay)(int) = 0xc3e25f90; int main()
{ GPM4CON &= ~0xffff;
GPM4CON |= 0x1111;
unsigned long tmp = 0xf; while() { if((tmp & 0xf) == ) {
tmp = 0xf;
} GPM4DAT = tmp << ;
tmp = GPM4DAT;
udelay(); } }
流水灯:
#define GPM4CON (*(unsigned long *)0x110002e0)
#define GPM4DAT (*(unsigned long *)0x110002e4) void (*udelay)(int) = 0xc3e25f90; int main()
{ GPM4CON &= ~0xffff;
GPM4CON |= 0x1111;
unsigned long i = ;
while() {
GPM4DAT = 0xf;
GPM4DAT &= ~( << i);//流水
udelay();//延时
i++;
if(i == ) {
i = ;
}
} }
上面程序总用到的延时函数udelay(),由于U-Boot作为嵌入式Linux系统的引导,不具有标准C库中的内容。要使用像printf函数,延时函数udelay(),就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中的System.map文件中。System.map文件是被内核所使用的符号表。符号表是一个在符号名称与它们的存储器位置间的查询表格。符号名称可能是变量的名称或是函数名称。当要查询符号名称的位置或是特定位置的符号名称时,就会需要System.map。找到函数的对应地址,就可以对它进行使用了;
二:蜂鸣器驱动编写:
通过开发板我们可以看出蜂鸣器位于底板:
查看电路图:


通过查看底板手册可知,当XpwmTOUT0处于高电平是蜂鸣器就会响起;通过XpwmTOUT0我们在核心板上找到它的引脚
然后查看芯片手册:


由图我们可以看出GPD0CON为0x1时控制控制:GPD0DAT为1为高电平:下面贴出汇编代码:
.global main
main:
mov ip, sp
sub sp, sp, #
stmdb sp!, {fp, ip, lr}
add fp, sp, # ldr r3, gpdcon
ldr r0, =0x1
str r0, [r3] ldr r3, gpmdat
ldr r0, =0x1
str r0, [r3] add sp, fp, #
ldmdb sp, {fp, sp, pc} gpdcon:
.word 0x114000a0 gpmdat:
.word 0x114000a4
C语言的代码:
#define GPD0CON (*(volatile unsigned long*)0x114000a0)
#define GPD0DAT (*(volatile unsigned long*)0x114000a4) void (*udelay)(int) = 0xc3e25f90;
int main(void)
{
GPD0CON = 0x0001;
while(){
GPD0DAT = 0x1;
udelay();
GPD0DAT = 0x0;
udelay();//延时
} return ;
}
Tiny4412之蜂鸣器驱动与led灯驱动的更多相关文章
- linux模块驱动之led(ioremap)
一:led内核驱动 (1)在编写led内核驱动时,我们首先要进行内核裁剪,因为友善之臂将LED灯的驱动默认加载到内核中,所以编写模块驱动程序前就要先把原先的LED灯驱动裁剪掉: led驱动在源码里面的 ...
- Linux内核的LED设备驱动框架【转】
/************************************************************************************ *本文为个人学习记录,如有错 ...
- TMS320VC5509总线驱动LED灯
1. 重新建立的工程,需要添加宏定义才行 CHIP_5509 2. 驱动LED用的是74LVC573锁存器,LE高电平时,Q1=D0,LE低电平时,Q1=之前的状态,下面是数据总线 看下地址总线 看下 ...
- stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo
前言 stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的. 本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入. STM ...
- 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯
灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...
- MM32F0020 GPIO驱动LED灯(MM32F0020 GPIO Toggle)
目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱 ...
- MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)
目录: 1.MM32F0140简介 2.MM32F0140系统时钟配置 3.MM32F0140的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0140 GPIO驱 ...
- 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
随机推荐
- FFMPEG列出DirectShow支持的设备
FFMPEG列出dshow支持的设备: ffmpeg -list_devices true -f dshow -idummy 举例: 采集摄像头和麦克风 ffmpeg -f dshow -i vide ...
- linux设备和驱动加载的先后顺序
点击打开链接 Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...
- 写一个dup2功能相同的函数,不能调用 fcntl 函数,并且要有出错处理
实现的时候用到系统原来的dup函数 // mydup2.c // 2015/08/17 Lucifer Zhang version1.0 // write my own dup2 function / ...
- HBase学习资源
教程 <HBase.Administration.Cookbook> 中文版<HBase管理指南> <HBase in action> <HBase权威指南 ...
- PS 滤镜算法原理——浮雕效果
clc; clear all; Image=imread('4.jpg');Image=double(Image);p=3; %% 控制浮雕的强度 %% 控制浮雕的方向 H=[0 0 p ...
- Treemap 有序的hashmap。用于排序
TreeMap:有固定顺序的hashmap.在需要排序的Map时候才用TreeMap. Map.在数组中我们是通过数组下标来对其内容索引的,键值对. HashMap HashMap 用哈希码快速定位一 ...
- 3 sum closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- java的老说三大框架
一直不明白java的老说三大框架,怎么就一个SSH,今天终于有了一点点的了解. 三大框架就是Spring框架,Struts框架,Hibernate框架. Spring提供了管理业务对象的一致方法并且鼓 ...
- Aop实现SqlSugar自动事务
http://www.cnblogs.com/jaycewu/p/7733114.html
- docker的安装和基础使用
Docker EE/Docker CE简介与版本规划 版本区别 Docker EE Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的.经过认 ...