zoukankan      html  css  js  c++  java
  • hi3515 rtc驱动(ds1307/1339)驱动和示例

    将驱动放入/extdrv中编译

    部分驱动如下:

    #include <linux/module.h>

    #include <linux/miscdevice.h>
    #include <linux/init.h>
    #include <linux/slab.h>
    #include <linux/i2c.h>
    #include <linux/string.h>
    #include <linux/rtc.h>
    #include <linux/bcd.h>
    #include <linux/kernel.h>
    #include <linux/version.h>
    #include <linux/module.h>
    #include <linux/types.h>
    #include <linux/errno.h>
    #include <linux/fcntl.h>
    #include <linux/mm.h>
    #include <linux/miscdevice.h>
    #include <linux/proc_fs.h>
    #include <linux/fs.h>
    #include <linux/slab.h>
    #include <linux/smp_lock.h>
    #include <linux/init.h>
    #include <asm/uaccess.h>
    #include <asm/hardware.h>
    #include <asm/io.h>
    #include <asm/system.h>
    #include <linux/interrupt.h>
    #include <linux/ioport.h>
    #include <linux/string.h>
    #include <linux/list.h>
    #include <asm/semaphore.h>
    #include <asm/delay.h>
    #include <linux/timer.h>
    #include <linux/delay.h>
    #include <linux/proc_fs.h>
    #include <linux/poll.h>
    #include <asm/hardware.h>
    #include <asm/bitops.h>
    #include <asm/uaccess.h>
    #include <asm/irq.h>
    #include <linux/moduleparam.h>
    #include <linux/ioport.h>
    #include <linux/interrupt.h>
    #include "gpio_i2c.h"
    #include "gpio_i2c1.h"
    #include "rtc-ds1339.h"
    #define ENABLE_TEST

    #define DS1339_BIT_CENTURY 0x80/* in REG_MONTH */

    static unsigned char rtc1339_byte_read(unsigned char chip_addr, unsigned char addr);


    static unsigned char rtc1339_byte_write(unsigned char chip_addr,
                           unsigned char addr, unsigned char data) 
    {
        #ifdef ENABLE_TEST
        unsigned char reg_val;
        #endif
        
        gpio_i2c_write(chip_addr, addr, data);  
        #ifdef ENABLE_TEST
        reg_val = rtc1339_byte_read(chip_addr, addr);
        if(reg_val != data)
        {
            printk("ec6214_byte_write error: addr:%x, reg:%x, val:%x, read:%x ", chip_addr, addr, data, reg_val);
        }
        #endif
        return 0;
    }


    static unsigned char rtc1339_byte_read(unsigned char chip_addr, unsigned char addr)
    {   
        unsigned char reg_val;
        reg_val = gpio_i2c_read(chip_addr, addr);
        return reg_val;
    }




    ///////////////////////////////////////////////////////////////////////////////
    //***********open the ds1339*****************************************//
    int ds1339_open(struct inode * inode,struct file *file)
    {
     return 0;
    }
    ///////////////////////////////////////////////////////////////////////////////
    //***********close the ds1339*****************************************//
    int ds1339_close(struct inode * inode,struct file *file)
    {
     return 0;
    }

    ... ...

    示例如下:

    #include <stdio.h>
    #include <stdlib.h> /* getenv() */
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <error.h>
    #include <sys/time.h>
    #include <unistd.h>
    #include <time.h>
    #include <getopt.h>
    #include <linux/rtc.h>
    #include "rtc-ds1339.h"

    int Init()
    {
    int fd;
    //open device file
    fd = open("/dev/rtc-ds1339",O_RDWR);
    if(fd < 0)
    {
    printf("device open fail ");
    return -1;
    }


    return fd;
    }

    int main(int agc,char **agv)
    {
    int fd,ch;
    struct rtc_time 
    {
      unsigned int tm_sec;
      unsigned int tm_min;
      unsigned int tm_hour;
      unsigned int tm_wday;
      unsigned int tm_date;
      unsigned int tm_month;
      unsigned int tm_year;
    };
    struct rtc_time tm;


    tm.tm_year=2013;
    tm.tm_month=03;
    tm.tm_date=14;
    tm.tm_wday=4;
    tm.tm_hour=16;
    tm.tm_min=18;


    fd=Init();
    if (fd>0)
    {
    if (ioctl(fd,CMD_SET_TIME,&tm)<0)
    printf ("ioctl eo ");
    while(1)
    {
    ioctl(fd,CMD_GET_TIME,&tm);
    printf("%02d.%02d.%02d,%01d,%02d:%02d:%02d "
    ,tm.tm_year,tm.tm_month,tm.tm_date,tm.tm_wday,tm.tm_hour,tm.tm_min,tm.tm_sec);
    sleep(1);
    }
    close(fd);
    }


    return 0;
    }

    运行结果如下:

  • 相关阅读:
    pandas Dataframe filter
    process xlsx with pandas
    data manipulate in excel with easyExcel class
    modify registry in user environment
    add number line in vim
    java import webservice
    ctypes MessageBoxA
    music 163 lyrics
    【python实例】自动贩卖机
    【python基础】sys模块(库)方法汇总
  • 原文地址:https://www.cnblogs.com/subo_peng/p/5041244.html
Copyright © 2011-2022 走看看