datasheet

Tiny210驱动之LED测试

2018-10-12来源: eefocus 关键字:Tiny210驱动  LED测试

first_drv.c驱动源码:

#include "linux/device.h"

#include "linux/module.h"

#include "linux/kernel.h"

#include "linux/fs.h"

#include "linux/init.h"

#include "linux/delay.h"

#include "asm/uaccess.h"

#include "asm/irq.h"

#include "asm/io.h"

static struct class *firstdrv_class;

volatile unsigned long *gpj2con = NULL;

volatile unsigned long *gpj2dat = NULL;

static int first_drv_open(struct inode *inode, struct file *file)

{

    // 配置GPJ2_0,GPJ2_1,GPJ2_2,GPJ2_3为输出 

    *gpj2con &= ~((0xf<<(0*4)) | (0xf<<(1*4)) | (0xf<<(2*4)) | (0xf<<(3*4)));

    *gpj2con |= ((0x1<<(0*4)) | (0x1<<(1*4)) | (0x1<<(2*4)) | (0x1<<(3*4)));

    return 0;

}

static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)

{

    int val;

    copy_from_user(&val, buf, count); //    copy_to_user();

    if (val == 1)

    {

        // 点灯

        *gpj2dat &= ~((1<<0) | (1<<1) | (1<<2) | (1<<3));

    }

    else

    {

        // 灭灯

        *gpj2dat |= (1<<0) | (1<<1) | (1<<2) | (1<<3);

    }

    

    return 0;

}

static struct file_operations first_drv_fops = {

    .owner  = THIS_MODULE,    // 这是一个宏,推向编译模块时自动创建的__this_module变量 

    .open   = first_drv_open,     

    .write  = first_drv_write,       

};

int major;

static int first_drv_init(void)

{

    major = register_chrdev(0, "first_drv", &first_drv_fops); // 注册, 告诉内核

    firstdrv_class = class_create(THIS_MODULE, "firstdrv");

    device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); // /dev/xyz 

    gpj2con = (volatile unsigned long *)ioremap(0xE0200280, 16);

    gpj2dat = gpj2con + 1;

    return 0;

}

static void first_drv_exit(void)

{

    unregister_chrdev(major, "first_drv"); // 卸载

    device_destroy(firstdrv_class, MKDEV(major, 0));

    class_destroy(firstdrv_class);

    iounmap(gpj2con);

}

module_init(first_drv_init);

module_exit(first_drv_exit);

MODULE_LICENSE("GPL");

====================================================================

firstdrvtest.c测试程序:

#include "sys/types.h"

#include "sys/stat.h"

#include "fcntl.h"

#include "stdio.h"

// firstdrvtest on

// firstdrvtest off

int main(int argc, char **argv)

{

    int fd;

    int val = 1;

    fd = open("/dev/xyz", O_RDWR);

    if (fd < 0)

    {

        printf("can't open!\n");

    }

    if (argc != 2)

    {

        printf("Usage :\n");

        printf("%s 《on|off》\n", argv[0]); //实际为"<"

        return 0;

    }

    if (strcmp(argv[1], "on") == 0)

    {

        val  = 1;

    }

    else

    {

        val = 0;

    }

    

    write(fd, &val, 4);

    return 0;

}


关键字:Tiny210驱动  LED测试

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

上一篇:Tiny210驱动之KEY测试
下一篇:S3C2440和S5PV210的声卡对比

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

推荐阅读

Tiny210驱动之KEY测试

second_drv.c驱动源码:#include "linux/device.h"#include "linux/module.h"#include "linux/kernel.h"#include "linux/fs.h"#include "linux/init.h"#include "linux/delay.h"#include "asm/uaccess.h"#include "asm/irq.h"#include "asm/io.h"stati
发表于 2018-10-12

Tiny210驱动之按键中断实验

[5] = {    {S5PV210_GPH2(3), 0x01},    {S5PV210_GPH3(0), 0x02},    {S5PV210_GPH3(1), 0x03},    {S5PV210_GPH3(2), 0x04},    {S5PV210_GPH3(3), 0x05},};// 确定按键值 static irqreturn_t buttons_irq(int irq, void *dev_id){ 
发表于 2018-10-12

Tiny210驱动之按键poll机制

;struct pin_desc pins_desc[5] = {    {S5PV210_GPH2(3), 0x01},    {S5PV210_GPH3(0), 0x02},    {S5PV210_GPH3(1), 0x03},    {S5PV210_GPH3(2), 0x04},    {S5PV210_GPH3(3), 0x05},};// 确定按键值static irqreturn_t buttons_irq(int
发表于 2018-10-12

Tiny210驱动之按键异步通知

, 0x84, 0x85 static unsigned char key_val;struct pin_desc pins_desc[5] = {    {S5PV210_GPH2(3), 0x01},    {S5PV210_GPH3(0), 0x02},    {S5PV210_GPH3(1), 0x03},    {S5PV210_GPH3(2), 0x04},    {S5PV210_GPH3(3), 0x05
发表于 2018-10-12

Tiny210按键互斥锁、原子变量驱动

, 0x84 static unsigned char key_val;// 键值: 按下时, 0x01, 0x02, 0x03, 0x04, 0x05 // 键值: 松开时, 0x81, 0x82, 0x83, 0x84, 0x85 static unsigned char key_val;struct pin_desc pins_desc[5] = {    {S5PV210_GPH2(3), 0x01},    {S5PV210_GPH3(0), 0x02},    {S5PV210
发表于 2018-10-12

高亮度LED的高精度高性价比测试

可见光发光二极管(LED)兼具高效率和长寿命的特点。目前,它们的应用十分广泛。制造商们通过对LED器件的深入研究已经研制出了具有更高光通量、更长寿命、更多色彩和更高每瓦流明数的新器件。精确而高性价比的测试对于确保器件的可靠性和质量至关重要。LED测试在生产的不同阶段具有不同类型的测试序列,例如设计研发阶段的测试、生产过程中的晶圆级测试、以及封装后的最终测试。尽管LED的测试一般包含电气和光学测量,本文着重探讨电气特征分析,只在适当的位置介绍部分光学测量技术。图1给出了典型二极管的电气I-V曲线。完整的测试应该包含大量 的电压值与对应的电流工作点,但是一般情况下有限的采样点就足以测试出器件的品质因数。图1. 典型LED的直流I-V
发表于 2017-08-28
高亮度LED的高精度高性价比测试

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">