亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lcd_d.c

?? lcd驅動報告,看完能有所幫助
?? C
字號:
#include<linux/kernel.h>
#include<linux/module.h>
#include<asm/uaccess.h>
#include<linux/init.h>
#include<asm/8xx_immap.h>
#include<linux/delay.h>

#include<linux/ioport.h>
#include<asm/io.h> 
#include<linux/fs.h>#ifndef KERNEL_VERSION#define KERNEL_VERSION(a,b,c) ((a)*65536+(b)*256+(c))#endif

volatile immap_t *immap;

//LCD相關寄存器定義
#define LCD_BASE        0x80000000
#define LCD_CONTROL    0x80000017
#define LCD_DATA_BASE  0x8000001d
//LED相關寄存器定義
#define LED_CONTROL    0x8000001b
#define LED_OFF         0xff
#define LED_ON          0x00
//LCD操作定義
#define LCD_ENH_INS    0x02
#define LCD_ENL_INS    0x00
#define LCD_ENH_DATA   0x03
#define LCD_ENL_DATA   0x01       
#define LCD_ON         0x70
#define LCD_OFF        0x10
#define LCD_FUNCSET    0x3c
#define LCD_INPUT_MODESET    0x60
#define LCD_CLEAR      0x80 
#define LCD_MODESET    0x1c
#define LCD_ROW2       0x03
#define MAJOR_NUM      200
#define GOODOPEN       1
// 設備名,將出現在 /proc/dev 
#define DEVNAME  "lcd_driver"// 設備正被打開嗎? 用于防止對同一設備的同時訪問 static int Device_Open = 0;

static int device_open(struct inode *,struct file*);
static int device_release(struct inode *,struct file*);
static ssize_t device_write(struct file *,const char *,size_t ,loff_t *);
struct file_operations lcd_ops=
{
 write:   device_write,
 open:    device_open,
 release: device_release,
};//僅定義相關的的結構,其它操作用不到//格式轉換
static unsigned char
char_change (unsigned char org_char)
{                                                                                                         unsigned char swap_char = '\0';
  swap_char |= ((org_char & 0x80) >> 7) | ((org_char & 0x40) >> 5)
    | ((org_char & 0x20) >> 3) | ((org_char & 0x10) >> 1)
    | ((org_char & 0x08) << 1) | ((org_char & 0x04) << 3)
    | ((org_char & 0x02) << 5) | ((org_char & 0x01) << 7);
  return swap_char;
}
//寫數據時序
static void lcd_data_write(char data)
{
 writeb(char_change(data),LCD_DATA_BASE);
 udelay(15);
 writeb(LCD_ENL_DATA,LCD_CONTROL);//set EN=1,RS=1
 udelay(1);
 writeb(LCD_ENH_DATA,LCD_CONTROL);//set EN=0,RS=1
 udelay(1);
 writeb(LCD_ENL_DATA,LCD_CONTROL);//set EN=1,RS=1
 udelay(40);
}//寫命令時序
static void lcd_cmd_write(char cmd)
{
 writeb(cmd,LCD_DATA_BASE);
 udelay(15);
 writeb(LCD_ENL_INS,LCD_CONTROL);//set EN =1,RS=0
 udelay(1);
 writeb(LCD_ENH_INS,LCD_CONTROL);//set EN=0 ,RS=0
 udelay(1);
 writeb(LCD_ENL_INS,LCD_CONTROL);//set EN=1,RS=0
 udelay(40);
}//LCD 初始化操作
static int __init lcd_init(void)
{  int err;
  immap=(immap_t *)(mfspr(IMMR)&0xFFFF0000);//取得IMMR 內容
  immap->im_memctl.memc_br7=0x80000401;//配置CS7相關寄存器
  immap->im_memctl.memc_or7=0xffff0FF4;

  err=register_chrdev(MAJOR_NUM,DEVNAME,&lcd_ops);//注冊設備
  if(err!=0)
    printk("<1> unable to get major 200 for LCD device\n");
 if(check_region(LCD_BASE,0x1ff))//檢測IO端口
   {
     printk("IO  is used already\n");return -1;
     
   }else
  {request_region(LCD_BASE,0x1ff,DEVNAME);//申請占用此端口//初始化 udelay(10);
 lcd_cmd_write(LCD_MODESET);/* set 8-bit mode*/
 udelay(4);
 lcd_cmd_write(LCD_MODESET); /*set 8-bit mode */
 udelay(1);
 lcd_cmd_write(LCD_MODESET);/* set 8-bit mode*/
 lcd_cmd_write(LCD_OFF);
 lcd_cmd_write(LCD_ON);
 lcd_cmd_write(LCD_INPUT_MODESET);
 lcd_cmd_write(LCD_CLEAR);return 1;}

} 
 


static int device_open(struct inode *rinode,struct file *rfile)
{/* 我們不想同時和兩個進程通話 */if (Device_Open)return -1;Device_Open++;
 MOD_INC_USE_COUNT;//rmmod 操作時用
 lcd_cmd_write(LCD_CLEAR);
 lcd_cmd_write(LCD_INPUT_MODESET);
 return 0;
}
static int device_release(struct inode *rinode,struct file *rfile)
{   
  MOD_DEC_USE_COUNT;
 //歸還端口
  release_region(LCD_BASE,0x1ff);
  return 0;
}

static ssize_t device_write(struct file *rfile,const char *buffer,size_t length,loff_t *offset)
{ int i;
  
  unsigned  char c;
 
 
 // lcd_init();
 //寫時序
  lcd_cmd_write(LCD_FUNCSET);
  lcd_cmd_write(LCD_OFF);
  lcd_cmd_write(LCD_ON);
  lcd_cmd_write(LCD_INPUT_MODESET);
  lcd_cmd_write(LCD_CLEAR);
  
 for(i=0;i<length;i++)
 {
  if(i==8)    lcd_cmd_write(LCD_ROW2);
   get_user(c,buffer+i);
  lcd_data_write(c);
 }
  return 0;
}


static void __exit  lcd_cleanup(void)
{
  int err;
  lcd_cmd_write(LCD_CLEAR);
  err=unregister_chrdev(MAJOR_NUM,DEVNAME);
 if(err!=0)
   printk("<1> Uninstall the %s failed!",DEVNAME);
  release_region(LCD_BASE,0x1ff);
 
}module_init(lcd_init);module_exit(lcd_cleanup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合欧美在线视频区| 亚洲欧洲精品一区二区三区不卡 | 欧美草草影院在线视频| 欧美日本一道本| 欧美人牲a欧美精品| 欧美电影一区二区三区| 欧美卡1卡2卡| 日韩精品专区在线| 日韩欧美成人午夜| 精品国产凹凸成av人网站| 日韩精品一区二区三区中文不卡| 日韩午夜精品视频| 日韩一级黄色片| 亚洲精品一区二区三区在线观看| 久久久精品tv| 国产精品久久久久aaaa樱花| 亚洲男人电影天堂| 午夜亚洲福利老司机| 青青草国产精品亚洲专区无| 狠狠色丁香久久婷婷综合_中 | 日韩欧美视频一区| 日韩欧美高清一区| 亚洲国产成人午夜在线一区| 综合欧美亚洲日本| 亚洲成av人片一区二区| 琪琪一区二区三区| 国产不卡免费视频| 99国产精品久久久| 色婷婷av一区二区三区软件| 欧美精品乱码久久久久久按摩| 欧美一级高清片在线观看| 久久九九久久九九| 夜夜嗨av一区二区三区网页| 日韩精品一二区| 国产精品18久久久久久久久久久久 | 国产精品一二三四| 91一区在线观看| 欧美在线免费播放| 精品国产乱码久久久久久图片 | 99久久国产综合精品麻豆| 欧美三级三级三级爽爽爽| 日韩欧美123| 国产精品乱码妇女bbbb| 一个色综合网站| 久久精工是国产品牌吗| 成人高清视频免费观看| 欧美日韩一区二区三区四区| 26uuu精品一区二区在线观看| 成人免费在线视频| 老司机免费视频一区二区| 99久久免费视频.com| 欧美另类久久久品| 国产精品久久久久久久第一福利 | 国产日产欧美一区| 一区二区三区欧美| 久草中文综合在线| 91免费在线看| 欧美大片拔萝卜| 亚洲欧美色综合| 国产一区二区在线观看免费| 91久久国产综合久久| 精品欧美一区二区久久| 一区二区三区国产豹纹内裤在线| 卡一卡二国产精品| 一本色道久久综合亚洲aⅴ蜜桃| 欧美精品一区在线观看| 天堂蜜桃一区二区三区| 成人黄色一级视频| 日韩免费高清视频| 亚洲中国最大av网站| 成人性视频免费网站| 欧美zozo另类异族| 日韩综合在线视频| 在线视频一区二区免费| 中文字幕欧美三区| 国产精品一区在线| 日韩午夜三级在线| 亚洲午夜激情网站| 一本色道亚洲精品aⅴ| 国产精品理伦片| 国产伦精品一区二区三区在线观看| 欧美久久一二区| 一区二区三区在线播| 成人丝袜高跟foot| 欧美精品一区二区三区一线天视频| 五月开心婷婷久久| 色狠狠综合天天综合综合| 中文字幕国产精品一区二区| 国产黄色91视频| 久久综合九色综合97_久久久| 日韩国产欧美在线视频| 在线观看免费一区| 亚洲乱码中文字幕综合| 99国产精品久久久久久久久久久| 亚洲国产成人在线| 成人毛片老司机大片| 中文字幕 久热精品 视频在线 | 99这里只有久久精品视频| 久久精品亚洲精品国产欧美kt∨| 久久精品国产第一区二区三区| 欧美日韩不卡在线| 日本午夜一区二区| 欧美一区二区福利在线| 麻豆国产欧美日韩综合精品二区| 欧美一区二区日韩一区二区| 蜜臀91精品一区二区三区| 日韩三级在线免费观看| 久久精品噜噜噜成人av农村| 日韩免费视频一区二区| 精品一区二区三区不卡| 久久综合九色综合欧美就去吻| 国产主播一区二区| 国产女人aaa级久久久级| 成人精品gif动图一区| 亚洲欧洲av在线| 在线看不卡av| 日本午夜一本久久久综合| 日韩欧美高清dvd碟片| 国产一区美女在线| 国产精品久久久久久久午夜片| 99精品国产视频| 亚洲国产裸拍裸体视频在线观看乱了 | 综合激情成人伊人| 91激情五月电影| 亚洲成人激情综合网| 91精品国产一区二区人妖| 久久精品国产99| 欧美国产日本韩| 欧美在线观看视频一区二区| 天天做天天摸天天爽国产一区| 欧美白人最猛性xxxxx69交| 国产91丝袜在线播放0| 亚洲精品日日夜夜| 欧美一区二区三区视频| 91亚洲永久精品| 亚洲综合久久av| 欧美va亚洲va香蕉在线| 成人av电影观看| 午夜精品福利视频网站| 久久精品夜夜夜夜久久| 在线视频综合导航| 久久国产精品99久久人人澡| 国产精品福利一区| 3d动漫精品啪啪1区2区免费| 国产成人综合亚洲91猫咪| 一区二区三区蜜桃| 久久众筹精品私拍模特| 色综合久久综合网97色综合| 美女网站在线免费欧美精品| 国产精品免费视频观看| 欧美日韩精品高清| 国产传媒一区在线| 亚洲成av人在线观看| 日本一区二区三区视频视频| 欧美日韩国产免费一区二区| 岛国精品在线观看| 日韩制服丝袜av| 中文字幕在线不卡国产视频| 日韩美女一区二区三区四区| av在线不卡免费看| 久久99精品国产| 亚洲国产日韩a在线播放| 国产日韩欧美在线一区| 欧美日韩卡一卡二| youjizz久久| 精品在线播放午夜| 一区二区三区资源| 欧美激情一二三区| 日韩手机在线导航| 色8久久精品久久久久久蜜| 国产福利一区二区三区在线视频| 调教+趴+乳夹+国产+精品| 综合中文字幕亚洲| 久久精品亚洲乱码伦伦中文| 在线不卡a资源高清| 91美女精品福利| 国产精品1区2区3区| 美女mm1313爽爽久久久蜜臀| 亚洲激情第一区| 国产精品高清亚洲| 国产欧美日产一区| 久久午夜国产精品| 欧美一区二区女人| 欧美日韩国产大片| 色欧美片视频在线观看| 不卡的av电影| 国产成人综合精品三级| 国产综合色在线视频区| 美国三级日本三级久久99| 亚洲mv在线观看| 亚洲第四色夜色| 亚洲一区在线观看免费| 专区另类欧美日韩| 国产精品人成在线观看免费| 国产亚洲1区2区3区| 久久在线观看免费| 精品伦理精品一区| 日韩精品专区在线影院重磅| 日韩一区二区影院| 欧美成人a在线|