一: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. NumberProgressBar开源项目学习

    1.概述 多看多学涨姿势, github真是个宝库 这个项目主要是实现数字进度条效果 github地址在https://github.com/daimajia/NumberProgressBar 感谢 ...

  2. MySql常用操作语句(2:数据库、表管理以及数据操作)

    本文主要内容转自一博文. 另外可供参考资源: SQL语句教程 SQL语法 1.数据库(database)管理  1.1 create 创建数据库 mysql> create database f ...

  3. Leetcode_198_House Robber

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47680663 You are a professional ...

  4. charles抓取https请求包

    说明: 用charles抓取https请求,会出现SSL Proxying disabled in Proxy Settings这样的提示,如下图.要通过charles抓取数据,还需要进行一些简单的设 ...

  5. Netfilter的使用和实现

    本文主要内容:Netfilter的原理和实现浅析,以及示例模块. 内核版本:2.6.37 Author:zhangskd @ csdn blog 概述 Netfilter为多种网络协议(IPv4.IP ...

  6. Linux内核中断和异常分析(中)

    在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机 ...

  7. OpenCV鼠标画图例程,鼠标绘制矩形

    鼠标画矩形: // An example program in which the // user can draw boxes on the screen. // /* License: Oct. ...

  8. git对远程分支和tag的操作

    技术 Git查看.删除.重命名远程分支和tag 11/17/2012zrong7条评论69,235 次查看 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转 ...

  9. CDH安装系统环境准备——系统版本和安装包下载地址指南

    由于Hadoop深受客户欢迎,许多公司都推出了各自版本的Hadoop,也有一些公司则围绕Hadoop开发产品.在Hadoop生态系统中,规模最大.知名度最高的公司则是Cloudera.接下来的日子里, ...

  10. decode ways(动态规划)

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...