⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_12232f.c

📁 自己开发的uclinux下RT12232F液晶的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
         break;   
    case IOCTL_READ:                      //从LCD设备中读取内容到ioclt_param 地址所在的空间
    	   i = device_read(file, (char *)ioctl_param, 99, 0);
         put_user('\0', (char *)ioctl_param + i);     
         break; 
    case IOCTL_LCD_ON:   	     
    case IOCTL_LCD_OFF:
    	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF);   
         mdelay(1);   	     
         break;
    case IOCTL_LCD_CLEAR: 
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_CLEAR);   
         mdelay(2); 
         break;
    case IOCTL_LCD_RESET :
     	   WriteNios(ADR_LCD_COMMAND,LCD_COM_RESET);
         mdelay(5);
         break;
    case IOCTL_LCD_HOME:
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_HOME);
     	   mdelay(1);
     	   break;
    case IOCTL_LCD_CURSOR_LEFT:
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_MODES);
     	   mdelay(1); 
     	   break;
    case IOCTL_LCD_CURSOR_RIGHT:
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_MODES | LCD_CMD_MODES_SHIFT);
     	   mdelay(1); 
     	   break;
    case IOCTL_LCD_CURSOR_ON:
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF | LCD_CMD_ONOFF_CURSOR);
     	   mdelay(1); 
     	   break;     	   
    case IOCTL_LCD_DISP_SHOW_ON:
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF | LCD_CMD_ONOFF_DISP);
     	   mdelay(1); 
     	   break;      	   
    case IOCTL_LCD_CURSOR_GET:
     	   break;      	   
    case IOCTL_LCD_CURSOR_SET: 
     	   break;
    case IOCTL_LCD_GET_CURSOR_POS:
     	   break;      	   
    case IOCTL_LCD_SET_CURSOR_POS: 
     	   break;
    case IOCTL_LCD_CURSOR_BLINK:
     	   WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF | LCD_CMD_ONOFF_BLINK);
     	   mdelay(1);      	
     	   break;      	   
    case IOCTL_LCD_ROW1_BLINK:      	WriteNios(ADR_LCD_COMMAND,LCD_CMD_FUNC | LCD_CMD_FUNC_EXPANSION);
     	   mdelay(1);      	WriteNios(ADR_LCD_COMMAND,LCD_CMD_ROW1_BLINK);
     	   mdelay(1);  
     	   break;
    case IOCTL_LCD_DISP_LEFT:
     	   break;      	   
    case IOCTL_LCD_DISP_RIGHT: 
     	   break;     	      	   
    case IOCTL_LCD_DISP_ON: 
     	   break;
    case IOCTL_LCD_DISP_OFF:
     	   break;      	   
    case IOCTL_LCD_LINE1:                 WriteNios(ADR_LCD_COMMAND,ADR_LCD_LINE1_OFFSET);         line=1;
         udelay(50);    	 
     	   break;
    case IOCTL_LCD_LINE2:
         WriteNios(ADR_LCD_COMMAND,ADR_LCD_LINE2_OFFSET);         line=2;
         udelay(50);
  WriteNios(ADR_LCD_DATA,0xbb);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xb6);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xd3);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xad);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xc4);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xfa);
  udelay(50);  	 
     	   break;
    case IOCTL_LED_NORMAL:
         WriteNios(0x02010850,LED_STATE_NORMAL);
         udelay(50);    	 
     	   break;     	         	         	   
    case IOCTL_LCD_BACKGROUND_LED_OFF:
         WriteNios(0x02010850,0x02);
         udelay(50);    	 
     	   break;
    case IOCTL_LCD_WARNING_LED_ON:
         WriteNios(0x02010850,0x01);
         udelay(50);     	 
     	   break;     	        	        	
  }
  
  return SUCCESS;
}


/* Module Declarations */
struct file_operations Fops = {
  .read = device_read,
  .write = device_write,
  .ioctl = device_ioctl,
  .open = device_open,
  .release = device_release,	
};

/* 
 * Initialize the module - Register the character device 
 */
int init_module()
{
  int ret_val;
  ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, &Fops);
  if (ret_val < 0) {
    printk(KERN_ALERT "%s failed with %d\n",
	   "Sorry, registering the character device ", ret_val);
    return ret_val;
     }
  printk(KERN_INFO "Device %s registered\n", DEVICE_FILE_NAME);
  mdelay(20);     
  WriteNios(ADR_LCD_COMMAND,LCD_COM_RESET);
  mdelay(5);
  WriteNios(ADR_LCD_COMMAND,LCD_COM_RESET);
  udelay(200);
  WriteNios(ADR_LCD_COMMAND,LCD_COM_RESET);
  udelay(200);                                    //在此之前,不能检查BF标志
  WriteNios(ADR_LCD_COMMAND,LCD_NUMROWS | LCD_INTERFACE | LCD_CMD_FUNC);    //00111000
  udelay(50);
  WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF);   //显示状态开
  udelay(50);
  WriteNios(ADR_LCD_COMMAND,LCD_CMD_CLEAR);   //清屏
  mdelay(2);
  //WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF | LCD_CMD_ONOFF_DISP | LCD_CMD_ONOFF_CURSOR | LCD_CMD_ONOFF_BLINK);  WriteNios(ADR_LCD_COMMAND,LCD_CMD_ONOFF | LCD_CMD_ONOFF_DISP);
  udelay(50);  WriteNios(0x02010850,LED_STATE_NORMAL);  mdelay(200);
  WriteNios(ADR_LCD_DATA,0xb1);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xb1);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xbe);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xa9);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xbb);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xaa);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xc1);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xfa);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xcd);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xa8);
  udelay(50);
  WriteNios(ADR_LCD_COMMAND,ADR_LCD_LINE2_OFFSET);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xbb);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xb6);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xd3);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xad);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xc4);
  udelay(50);
  WriteNios(ADR_LCD_DATA,0xfa);
  udelay(50);
  return 0;
}

/* 
 * Cleanup - unregister the appropriate file from /proc 
 */
void cleanup_module()
{
  int ret; 
  ret = unregister_chrdev(MAJOR_NUM, DEVICE_NAME);
  
  if (ret < 0)
    printk(KERN_ALERT "Error: unregister_chrdev: %d\n", ret);
}

int WriteNios(unsigned long addr, unsigned long value)
{
  int ret = 0;
  unsigned long data;
  unsigned long *p = (unsigned long *)addr;
  data = (unsigned long)(value);
  ret = put_user(data, p);
  return ret;
}

int ReadNios(unsigned long addr, unsigned long * pValue)
{
  int ret = 0;
  unsigned long *p = (unsigned long *)addr;
  if (get_user(*pValue, p))
    return -EFAULT;
  return ret;
}

module_init(init_module);
module_exit(cleanup_module);


#define author "HLT of TCB: Department 2"
#define description "A driver for LCD12232F device of the satellite project."
MODULE_AUTHOR(author);
MODULE_DESCRIPTION(description);
MODULE_SUPPORTED_DEVICE(DEVICE_NAME);
MODULE_LICENSE("GPL");








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -