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

📄 skyeye硬件模拟平台,第三部分 硬件仿真实现之五.htm

📁 你想没有硬件就跑μc OS吗
💻 HTM
📖 第 1 页 / 共 4 页
字号:
void lcd_disable(ARMul_State *state)
{
int i;
	
	if (skyeye_config.no_lcd)
		return;

	//chy 2004-03-11
        *(state->mach_io.lcd_is_enable)=0;

   if(lcd_depth<=8){
	   for (i = 0; i <2^lcd_depth ; i++) {
		   if (gc[i]) {
			  gdk_gc_destroy(gc[i]);
			  gc[i] = NULL;
		   }
	   }
}//释放GdkGC(Gdk图形设备上下文)

	if (window) {
		gtk_widget_destroy(window);
		window = NULL;
	}//关闭模拟lcd屏幕的gtk window
}


lcd_cycle(ARMul_State *state)
{
	gtk_main_iteration_do(FALSE);
}
/*无阻塞地检查gtk模拟出的lcd window中是否有事件需要相应的事件回调函数处理(如expose_event,
motion_notify_event,button_press_event等),这些事件是在lcd_enable中注册的。
SkyEye模拟ep7312时,本函数在skyeye_mach_ep7312.c的函数ep7312_io_do_cycle中被调用,
最终是被armio.c中的io_do_cycle调用,也就是每个时钟执行一次。

当对lcd显示内存进行写操作时,lcd_write会被调用,将相应的象素画到lcd屏幕仿真窗口上*/
void lcd_write(ARMul_State *state, ARMword addr, ARMword data)
{
	ARMword offset;
	int pixnum, x, y, bit;
	
	int pix;
	GdkColor color;	

	//如果不使用lcd,则返回
	if (skyeye_config.no_lcd)
		return;
   //根据象素所在的4字节的地址,计算该4字节所包含的第一个象素对应于在lcd仿真屏幕上的坐标
	offset = (addr & ~3) - LCD_BASE;
	pixnum = offset * 8/ lcd_depth;
	x = pixnum % lcd_width;
	y = pixnum / lcd_width;
	
	assert(y < lcd_height);
	//调用gdk画点函数gdk_draw_point画出该4字节所包含的所有象素点
   //当颜色深度等于 1时,要画32个点
   //当颜色深度等于 2时,要画16个点
//当颜色深度等于 4时,要画8个点
//当颜色深度等于 8时,要画4个点
//当颜色深度等于16时,要画2个点
//当颜色深度等于32时,要画1个点
	for (bit = 0; bit < 32; bit += lcd_depth) {
		switch (lcd_depth) {
                //当颜色深度<=8时,已经根据相应的调色板调出RGB值
                case 1:
                case 2:
                case 4:
                case 8:
                        pix = (data >> bit) % (1 << lcd_depth);
                        gdk_draw_point(LCD->window, gc[pix], x, y);
		                 x++;                        
                        break;
                case 15:
                       break;
//当颜色深度大于8时,可以直接根据象素值调出RGB值
                case 16:
                        pix = (data >> bit) % (1 << lcd_depth);
		                 color.red =   (short)((pix&0x00007c00)<<1);  //rgb--->1555
		        			color.green = (short)((pix&0x000003e0)<<6);
		       			color.blue =  (short)((pix&0x0000001f)<<11);	
		       			gdk_color_alloc (colormap, &color);
		        			mygc = gdk_gc_new(LCD->window);
		        			gdk_gc_set_foreground(mygc, &color);
		                 gdk_draw_point(LCD->window, mygc, x, y);
                        x++;
                        break;
                 case 24: 
                        break;
                 case 32:
                        color.red =   ((data&0x00ff0000)>>8);
		        			color.green = ((data&0x0000ff00));
		        			color.blue =  ((data&0x000000ff)<<8);	
		        			gdk_color_alloc (colormap, &color);
		        			mygc = gdk_gc_new(LCD->window);
		        			gdk_gc_set_foreground(mygc, &color);
		        			gdk_draw_point(LCD->window, mygc, x, y);
                        break;              
               default:
                        break;
                }
          	}
}
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P><A name=IDA0FQTB><SPAN class=atitle3>4. 
      TouchScreen模拟模块的设计与实现概述</SPAN></A><BR>TouchScreen模拟模块的设计思路将与LCD模拟窗口同样大小的GTK+组件置于LCD组件容器中,并为该组件注册鼠标键按下,释放及移动三种事件,当鼠标在组件窗口有键按下,释放或移动的动作,则在相应的事件回调函数种记录其在窗口上的坐标及键的状态,并产生修改中断寄存器中的相应位置1,在SkyEye上运行的嵌入式OS检测到中断寄存器的数据变化就产生中断,TouchScreen驱动程序中注册了该中断的中断服务程序ISR则复制所记录的数据供应用程序使用,这一思路简单说来就是,完成GTK+的鼠标事件到TouchScreen事件的映射。</P>
      <P>因此TouchScreen模拟模块只需要关注GTK+鼠标事件的发生,记录事件数据并在*_io_do_cycle 
      函数中对I/O模拟模块所模拟的中断状态寄存器进行置数操作,即为嵌入式操作系统内核产生中断信号的条件。</P>
      <P>下图就是SkyEye模拟器的TouchScreen模拟的流程图(包括与真实硬件的比较):</P>
      <P><A name=IDADGQTB><B>图 0-3 SkyEye的TouchScreen模拟流程图</B></A><BR><IMG 
      height=305 alt="图 0-3 SkyEye的TouchScreen模拟流程图" 
      src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files/image007.jpg" width=642 border=0 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
      <P>TouchScreen模拟模块的实现采用了与模拟采用DragonBall开发板的Xcopilot模拟器相类似的简化方式。在实际的TouchScreen硬件中,为了定位动作发生的坐标,要先先经过一个12位的A/D转换器分别转换X,Y坐标对应12位数字量,然后由驱动程序通过SPI串行总线串行接收。SkyEye作为一个指令级的模拟器,无需保证与真实时钟节拍在时序上的一致,因此允许对TouchScreen这样的外设的模拟进行简化。</P>
      <P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
      <UL>
        <LI>本文节自<A 
        href="http://www.china-pub.com/computers/common/info.asp?id=21879" 
        target=_blank 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">《源码开放的嵌入式系统软件分析与实践--基于SkyEye和ARM开发平台》</A>一书的第三章,对 
        SkyEye 开源项目感兴趣的可以阅读本书。<BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part1/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台, 
        第一部分: SkyEye 介绍</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part2/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第二部分: 
        安装与使用</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s1/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第三部分: 
        硬件仿真实现之一</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s2/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第三部分: 
        硬件仿真实现之二</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s3/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye 
        硬件模拟平台,第三部分: 硬件仿真实现之三</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s4/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye 
        硬件模拟平台,第三部分: 硬件仿真实现之四</A><BR><BR>
        <LI>在 <A href="http://www-900.ibm.com/developerworks/cn/linux/" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks 
        Linux 专区</A> 可以找到更多为 Linux 开发者准备的参考资料。<BR></LI></UL>
      <P></P>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>
            <P>陈渝, 清华大学,通过 <A href="mailto:yuchen@tsinghua.edu.cn" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">yuchen@tsinghua.edu.cn</A> 
            可以和他联系。</P></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(1).gif" width=100 
      border=0><BR>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR vAlign=top>
          <TD align=right width="100%"><A 
            href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s5/index.shtml#top">到页首</A></TD>
          <TD width=5><IMG height=1 alt="" 
            src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files/c.gif" width=5 border=0></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#000000 colSpan=2><IMG height=1 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(1).gif" width=100 
            border=0></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#ffffff colSpan=2><IMG height=8 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(1).gif" width=100 
            border=0></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 
      xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <TBODY>
        <TR vAlign=top>
          <TD>
            <FORM 
            action=/developerworks/cn/cnratings.nsf/RateArticle?CreateDocument 
            method=post><INPUT type=hidden value="SkyEye硬件模拟平台,第三部分: 硬件仿真实现之五" 
            name=ArticleTitle><INPUT type=hidden value=Linux name=Zone><INPUT 
            type=hidden 
            value=/developerworks/cn/thankyou/thankyou_feedback.shtml 
            name=RedirectURL>
            <SCRIPT language=javascript>document.write('<input type="HIDDEN" name="url" value="'+location.href+'">');</SCRIPT>
            <A name=rating><SPAN class=atitle2>对本文的评价</SPAN></A>
            <P>您对这篇文章的看法如何?</P>
            <TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
              <TBODY>
              <TR>
                <TD colSpan=5><IMG height=8 alt="" 
                  src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(1).gif" 
                  width=100 border=0></TD></TR>
              <TR vAlign=top>
                <TD width="21%"><INPUT type=radio value=1 name=Rating>太差! 
                (1)</TD>
                <TD width="17%"><INPUT type=radio value=2 name=Rating>需提高 
                (2)</TD>
                <TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 
                (3)</TD>
                <TD width="17%"><INPUT type=radio value=4 name=Rating>好文章 
                (4)</TD>
                <TD width="21%"><INPUT type=radio value=5 
              name=Rating>真棒!(5)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#ffffff><IMG height=8 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(1).gif" width=100 
            border=0></TD></TR></TBODY></TABLE></TD>
    <TD width=1><IMG height=1 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(1).gif" width=1 
    border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD><IMG height=1 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之五.files\c(2).gif" width=1></TD></TR>
  <TR vAlign=top>
    <TD class=bbg height=21>&nbsp;&nbsp;<A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/index.shtml">关于 IBM</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/privacy/index.shtml">隐私条约</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/legal/index.shtml">使用条款</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/contact/index.shtml">联系 
  IBM</A></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

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