国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于i.MX6ULL的掉電檢測設計與軟件測試

發布時間:2023-11-9 11:08    發布者:武漢萬象奧科
關鍵詞: i.MX6ULL , 掉電檢測
基于i.MX6ULL的掉電檢測設計與軟件測試
基于i.MX6ULL平臺設計實現掉電檢測功能,首先選擇一路IO,利用IO電平變化觸發中斷,在編寫驅動時捕獲該路GPIO的中斷,然后在中斷響應函數中發送信號通知應用程序掉電發生了。
圖1.1掉電信號IO
       驅動代碼:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#include   
#include
#include


#definepower_MAJOR 200

staticstruct class *my_class;
staticstruct fasync_struct *fasync_queue; //異步通知隊列

#defineGPIO_NUM 1  //中斷引腳為:GPIO1_1
staticunsigned int irq_num;


/* 打開 */
intpower_open(struct inode *inode,struct file *filp){
         return 0;

}

/* 關閉 */
intpower_release(struct inode *inode,struct file *filp){
         return 0;
}

ssize_tpower_read(struct file *filp,char __user *buf,size_t count,loff_t *f_pos){

         return count;
}

ssize_tpower_write(struct file *file,const char __user *buf,size_t count,loff_t*f_pos){

         return count;
}

staticint my_fasync(int fd, struct file * filp, int on)
{
    int retval;
   retval=fasync_helper(fd,filp,on,&fasync_queue);
    /*將該設備登記到fasync_queue隊列中去*/
    if(retval<0)
      return retval;
    return 0;
}

staticconst struct file_operations simple_fops={
         .owner=THIS_MODULE,
         .open=power_open,
         .release=power_release,
    .read=power_read,
         .write=power_write,
    .fasync=my_fasync,
};

/* 在中斷服務函數中向應用層發送消息-異步通知 */
staticirqreturn_t irq_callback (int irqno, void *dev_id){
                  printk("irq power-detectworking !\n");
                  if (fasync_queue) {
            kill_fasync(&fasync_queue, SIGIO,POLL_IN);
                  }
         return IRQ_HANDLED;
}

intpower_init_module(void){
         int rtn;
         int ret;
         /* 注冊設備驅動 */
         ret =register_chrdev(power_MAJOR,"power-detect-test",&simple_fops);
         if(ret<0){
                  printk("Unable toregister character device %d!/n",ret);
                  return ret;
         }

         /* 自動創建設備節點 */
         my_class = class_create(THIS_MODULE,"my_class");
         device_create(my_class, NULL,MKDEV(power_MAJOR, 0), NULL,"powerdetect");

         /*gpio申請*/
         rtn = gpio_request(GPIO_NUM,"my_irq");
         if(rtn!=0){
                  printk("my_irq irq pinrequest io failed.\n");
         }
         rtn = gpio_direction_input(GPIO_NUM);
         if(rtn<0){
                  printk("gpio_direction_input()failed !\n");  
         }
         /*獲取gpio中斷號*/
         irq_num = gpio_to_irq(GPIO_NUM);

         /*GPIO中斷服務函數注冊,*/                    /*下降沿觸發*/               
         rtn = request_irq(irq_num,irq_callback,IRQF_TRIGGER_FALLING,"my_irq", NULL);
         if (rtn<0) {
                  printk("my_irq requestirq false\n");
         } else {
                  printk("my_irq requestirq success: %d\n",irq_num);
         }

    printk("module_initsucessful!!!\n");
         return 0;
}

/* 卸載 */
voidpower_cleanup_module(void){
         /* 卸載相應的設備驅動 */
         unregister_chrdev(power_MAJOR,"power-detect-test");     
         device_destroy(my_class,MKDEV(power_MAJOR,0));
         class_destroy(my_class);

         /*釋放GPIO*/
         gpio_free(GPIO_NUM);

    printk("module_exitsucessful!!!\n");
}

/* 宏實現 */
module_init(power_init_module);
module_exit(power_cleanup_module);

/* 開源許可聲明 */  
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Zou");
應用代碼:
#include
#include
#include
#include
#include
#include

staticint fd;

/* 內核產生異步通知,調用該應用層函數處理 */
voidsigterm_handler(int signo)
{
         printf("app irq work !!!\n");
}

intmain(void)
{
    int oflags;

   fd=open("/dev/powerdetect",O_RDWR);  //打開設備文件

    /* 啟動異步通知信號驅動機制 */
    signal(SIGIO, sigterm_handler);
    fcntl(fd, F_SETOWN, getpid());
    oflags = fcntl(fd, F_GETFL);
    fcntl(fd, F_SETFL, oflags | FASYNC);

    /*建立一個死循環,防止程序結束 */
    while(1)
    {
        printf("sleep\n");
        usleep(200000);  //2ms
    }

    close(fd);
    return 0;
}
將驅動編譯成模塊,上電加載并執行應用程序后,將電壓緩慢下調至掉電臨界點。觸發GPIO下降沿中斷,并提供應用程序掉電信號。
圖1..2掉電檢測







本文地址:http://m.qingdxww.cn/thread-845523-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲haose在线观看| 特一级毛片| 色综合久久综合网观看| 曰批全过程又爽又大又黄 | 2021国产精品| 日本三级黄色大片| 亚洲国产成人精品91久久久| 日韩一区二区三区免费视频| 天天干天天狠| www亚洲欲色成人久久精品| 日操夜操天天操| 亚洲福利天堂网福利在线观看| 深夜福利视频导航| 亚洲国产精品综合久久2007| 国产成人无码精品久久久免费69 | 午夜亚洲动漫精品AV网站| 一级毛片不卡免费看老司机| 亚洲国产精品久久精品成人| 一天能看三次的含羞草传媒| 久久亚洲精品AV成人无| 夜色成人网| 日韩在线国产精品| 亚洲 欧美 国产 综合久久| 国产精品俺来也在线观看| 亚洲视频第二页| 欧美亚洲图区| 熟睡中的麻麻大白屁股小说| 扒开女生尿口| 亚洲成人免费在线观看| 亚拍精品一区二区三区| 在线亚洲精品| 99精品视频在线观看免费播放| 色戒西瓜视频| 色操网| 亚洲一区二区三区精品影院| 1788vv视频| 丝袜足控免费网站xx91| 欧美激情一区二区亚洲专区| 亚洲视频中文字幕在线观看| 1级午夜影院费免区| 石原莉奈rbd806中文字幕|