S3C2440 LED驱动

2020-01-15来源: eefocus关键字:S3C2440  LED驱动  I  0配置

//头文件

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

//定义设备名称
#define DEVICE_NAME "leds"

//led与ARM硬件连接

static unsigned long led_table [] = {
 S3C2410_GPB(5),
 S3C2410_GPB(6),
 S3C2410_GPB(7),
 S3C2410_GPB(8),
};

//ARM I/0配置为输出

static unsigned int led_cfg_table [] = {
 S3C2410_GPIO_OUTPUT,
 S3C2410_GPIO_OUTPUT,
 S3C2410_GPIO_OUTPUT,
 S3C2410_GPIO_OUTPUT,
};

//file operations 结构体的ioctl()函数

static int sbc2440_leds_ioctl(
 struct inode *inode, 
 struct file *file, 
 unsigned int cmd, 
 unsigned long arg)
{
 switch(cmd) {
 case 0: case 1:
  if (arg > 4) return -EINVAL;
  s3c2410_gpio_setpin(led_table[arg], !cmd);
  return 0;
 default: return -EINVAL;
 }
}

static struct file_operations dev_fops = {
 .owner = THIS_MODULE,
 .ioctl = sbc2440_leds_ioctl,
};

static int __init dev_init(void)
{
 int i,ret;
 for (i = 0; i < 4; i++) {
  s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
  s3c2410_gpio_setpin(led_table[i], 0);
 }

 ret = misc_register(&misc);

 printk (DEVICE_NAME"tInitializedn");

 return ret;
}

static void __exit dev_exit(void)
{
 misc_deregister(&misc);
}

module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");

/////////////////////////////////////////////////////////////////////////////////

//Makefile

DEVICE = led
ifneq ($(KERNELRELEASE),)
obj-m := ${DEVICE}.o
else
CC = arm-linux-gcc
KERNELDIR = /opt/linux-2.6.32.2
PWD       := $(shell pwd)
modules:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) LDDINC=$(KERNELDIR)/include modules

endif

clean:
 rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers *~ modules.order

depend .depend dep:
 $(CC) $(CFLAGS) -M *.c > .depend


ifeq (.depend,$(wildcard .depend))
include .depend
endif

////////////////////////////////////////////////////////////////////////////////////////////

//API

#include
#include
#include
#include

int main(int argc, char **argv)
{
 int on;
 int led_no;
 int fd;
 if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
     on < 0 || on > 1 || led_no < 0 || led_no > 3) {
  fprintf(stderr, "Usage: leds led_no 0|1n");
  exit(1);
 }
 fd = open("/dev/leds0", 0);
 if (fd < 0) {
  fd = open("/dev/leds", 0);
 }
 if (fd < 0) {
  perror("open device leds");
  exit(1);
 }
 ioctl(fd, on, led_no);
 close(fd);
 return 0;
}

////////////////////////////////////////////////////////////////

//Makefile

CROSS=arm-linux-

all: led

led: led.c
 $(CROSS)gcc -o led led.c

clean:
 @rm -vf led *.o *~

关键字:S3C2440  LED驱动  I  0配置 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic485749.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM地址空间
下一篇:S3C2440 Timer初始化方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

S3C6410移植u-boot(一)
)board/samsung/smdk6410/config.tmp;/    fi    @$(MKCONFIG) smdk6410 arm arm1176 smdk6410 samsung s3c64xx    @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk步骤41、从U-boot根目录,进入nand_spl/board/samsung/cd nand_spl/board/samsung/2、新建目录smdk6410并将smdk6400下的所有
发表于 2020-01-15
S3C2440 Timer初始化方法
s3c2410提供了5个16位的Timer(Timer0~Timer4),其中Timer0~Timer3支持Pulse Width Modulation—— PWM(脉宽调制 )。Timer4是一个内部定时器(internal timer),PCLK是Timer的信号源,我们通过设置每个Timer相应的Prescaler和Clock Divider把PCLK转换成输入时钟信号传送给各个Timer的逻辑控制单元(Control Logic),事实上每个Timer都有一个称为输入时钟频率(Timer input clock Frequency)的参数,这个频率就是通过PCLK,Prescaler和Clock Divider确定
发表于 2020-01-15
S3C2440 Timer初始化方法
ARM S3C2410学习手记
1.S3C2410处理器介绍2410是三星公司的一款基于ARM920T内核的16/32位RISC嵌入式系统微处理器,主要面向手持设备和低功耗、高性价比的应用。频率达到203Mhz。ARM920T核由ARM9TDMI内核、存储管理单元(MMU)和高速缓存三部分组成。高速缓存由独立的16KB地址和16KB数据高速缓存组成。ARM920T有两个协处理器,CP14和CP15。CP14用于调试控制而CP15用于存储系统控制以及测试控制。资源包括有:◆1个LCD控制器(支持STN和TFT屏)。◆1个SDRAM控制器,1个NAND Flash控制器。◆3个通道的UART。◆4个通道的DMA。◆4个具有PWM功能的计时器和一个内部时钟。◆8通道
发表于 2020-01-13
S3C2410 bootloader ----VIVI阅读笔记
首先在移植前应该熟悉了解vivi的架构,启动过程,了解了原理性的东西之后,再去做移植比较好吧,我也新手进来公司的第1件事就是弄VIVI, 不过我是剪裁,移植主要部分是改bootload分区和kernel MTD分区,保证一致,其他的记不得了,GOOGLE里有非常丰富的关于vivi -0.1.4到s3c2410移植或者启动过程分析的资料. S3C2410 bootloader ----VIVI阅读笔记 (转)上 2007-06-14 13:06 建议读一读《嵌入式系统Boot Loader技术内幕》(詹荣开著),google一下就会找到一片。什么是Bootloader就不再这里废话了,看看
发表于 2020-01-09
BootLoader —— S3C2440
的流程图放上来:先从全局对整个工程有个大体的了解很重要,这样局部一条条的看更容易懂。由于程序实在太长,这里分几个部分逐步说明。一:串口配置。整个bootloader的交互环境全部是通过串口显示的,那么怎么样才能准确无误的显示出想要的字符呢?首先要知道的是:串口的CLK是挂在PCLK上的。波特率与PCLK有着密切的关系,因此正确设置PCLK,是和正确设置波特率有着千丝万缕的联系的。S3C2440内置两个PLL电路,即MPLL和UPLL。MPLL给FCLK,HCLK,PCLK提供时钟,UPLL给USB提供时钟。MPLL=FCLK=(2*m*Fin)/(p*2^s);m=M+8;p=P+2;M,P由寄存器MPLLCON设置。确定了FCLK
发表于 2019-12-26
Diodes全新车规级降压 LED驱动器问市,可简化回馈回路
Diodes 公司 宣布推出 AL8843Q 与 AL8862Q 两款符合汽车规格的直流对直流 (DC-DC) 降压转换器,适用于驱动汽车内外部单一的 LED 或多重 LED 灯条。产品应用包含目前许多制造商已设为标准配备的日行灯 (DRL),亦包含雾灯、方向灯、煞车/停止灯。 AL8843Q 与 AL8862Q 的供应电压皆从 4.5V 到至少 40V (AL8862Q 达 55V),可承受相当严重的电压变动,例如怠速启动或熄火/启动操作时的负载突降,不会产生对应的 LED 驱动器电流衰减问题。 高整合度不仅带来高效能,亦减少物料清单。两款皆内建功率 MOSFET:AL8843Q 为 40V/0.2
发表于 2020-01-07
Diodes全新车规级降压 LED驱动器问市,可简化回馈回路
小广播
何立民专栏 单片机及嵌入式宝典

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

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