一: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灯驱动的更多相关文章

  1. linux模块驱动之led(ioremap)

    一:led内核驱动 (1)在编写led内核驱动时,我们首先要进行内核裁剪,因为友善之臂将LED灯的驱动默认加载到内核中,所以编写模块驱动程序前就要先把原先的LED灯驱动裁剪掉: led驱动在源码里面的 ...

  2. Linux内核的LED设备驱动框架【转】

    /************************************************************************************ *本文为个人学习记录,如有错 ...

  3. TMS320VC5509总线驱动LED灯

    1. 重新建立的工程,需要添加宏定义才行 CHIP_5509 2. 驱动LED用的是74LVC573锁存器,LE高电平时,Q1=D0,LE低电平时,Q1=之前的状态,下面是数据总线 看下地址总线 看下 ...

  4. stm32开发笔记(三):stm32系列的GPIO基本功能之输出驱动LED灯、输入按键KEY以及Demo

    前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用GPIO引脚功能驱动LED灯和接收Key按钮输入.   STM ...

  5. 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯

    灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...

  6. MM32F0020 GPIO驱动LED灯(MM32F0020 GPIO Toggle)

    目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱 ...

  7. MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)

    目录: 1.MM32F0140简介 2.MM32F0140系统时钟配置 3.MM32F0140的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0140 GPIO驱 ...

  8. 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  9. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

随机推荐

  1. 【61】git项目实战的步骤总结

    1.新建分支的步骤 git pull git checkout -b 分支号(task的后面的代号) 2.提交代码到远程仓库的步骤 git add . git commit -m "分支号+ ...

  2. ServletRequest

    /** * Defines an object to provide client request information to a servlet. The * servlet container ...

  3. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  4. linux进程的介绍和管理

    概述 -   在linux 中,每个执行的程序都称为一个进程,每一个进程都分配一个ID号 -   每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器 -   每个进程都可 ...

  5. PS 图像特效算法— —渐变

    这个特效利用图层的混合原理,先设置一个遮罩层,然后用遮罩层与原图进行相乘,遮罩层不同,图像最后呈现的渐变效果也不一样. clc;clear all;close all;addpath('E:\Phot ...

  6. mac os x下的程序快速切换快捷键

    按下command + tab键正向切换程序 按下command + shift + tab键反向切换程序 按下command + tab键选择程序后,仍然按下command键不放,然后按下optio ...

  7. 从Windows角度看Mac OS X上的软件开发

    如果原来从事Windows软件开发,想跨足或转换至Mac OS X环境,需要知道那些东西?有什么知识技能可以快速运用在Mac OS X环境上的?这两个问题应该是Windows开发者进入Mac OS X ...

  8. WPF如何得到一个在用户控件内部的元素的坐标位置

    例如有这样一个用户控件: <UserControl d:DesignHeight="100" d:DesignWidth="200" ...> &l ...

  9. MongoDB学习笔记(三)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  10. 2018年,请不要再使用OLE生成EXCEL文件

    输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...