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

📄 硬件驱动编程.htm

📁 Vxwork的学习资料,对初学者有帮助 有关于BSP的说明介绍
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.embhelp.com/drew/mypage/driver.htm -->
<HTML><HEAD><TITLE>硬件驱动编程</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3157" name=GENERATOR></HEAD>
<BODY>
<P>&gt;&gt;<BIG><A name=returntop></A><A 
href="http://www.embhelp.com/drew/">Drew的主页</A></BIG>----&gt;硬件驱动</P>
<DIV align=center>
<CENTER>
<TABLE borderColor=#88deea height=23 cellSpacing=1 borderColorDark=#88deea 
width=754 bgColor=#ffffff borderColorLight=#88deea 
background=硬件驱动编程.files/bg1.gif border=1>
  <TBODY>
  <TR>
    <TD align=middle width=75 height=1>
      <P align=center><A href="http://drew66.yeah.net/"><BIG>主页</BIG></A></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><A 
      href="http://www.embhelp.com/drew/mypage/VxWorks.htm"><FONT lang=ZH-CN 
      face=System>VxWorks</FONT></A></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><A 
      href="http://www.embhelp.com/drew/processor/arm.htm"><FONT lang=ZH-CN 
      face=System>ARM</FONT></A></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><A 
      href="http://www.embhelp.com/drew/processor/mpc860.htm"><FONT lang=ZH-CN 
      face=System>PowerPC</FONT></A></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><FONT lang=ZH-CN face=System>硬件驱动</FONT></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><A 
      href="http://www.embhelp.com/drew/mypage/network.htm"><FONT lang=ZH-CN 
      face=System>网络协议</FONT></A></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><A 
      href="http://www.embhelp.com/drew/mypage/sourcecode.htm"><FONT lang=ZH-CN 
      face=System>程序示例</FONT></A></P></TD>
    <TD align=middle width=75 height=1>
      <P align=center><A href="http://www.embhelp.com/download"><FONT lang=ZH-CN 
      face=System>下载</FONT></A></P></TD>
    <TD align=middle width=75 height=1><A 
      href="http://www.embhelp.com/drew/mypage/interest.htm"><FONT lang=ZH-CN 
      face=System>个人兴趣</FONT></A></TD></TR></TBODY></TABLE></CENTER></DIV>
<P align=center><SMALL><FONT color=#0000ff>&nbsp; </FONT></SMALL></P>
<P align=center><FONT 
color=#0000ff><BIG><BIG><BIG>硬件驱动编程</BIG></BIG></BIG></FONT></P>
<P style="LINE-HEIGHT: 150%"><STRONG><BIG>&nbsp;&nbsp;&nbsp; 
这里主要是涉及硬件驱动编程的问题,许多是drew在论坛和E-MAIL上和网友探讨过的一些问题,有些是个人编程经验.不一定全面.一些相关程序代码会陆续补到 
</BIG></STRONG><A href="http://www.embhelp.com/drew/mypage/sourcecode.htm" 
target=_blank><FONT lang=ZH-CN face=System>程序示例 
</FONT></A><BIG><STRONG>上.</STRONG></BIG></P>
<BLOCKQUOTE>
  <DIV align=left>
  <TABLE height=150 width=489 border=0>
    <TBODY>
    <TR>
      <TD width=238 height=31><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#INIT"><B>系统初始化</B></A></TD>
      <TD width=239 height=31><A 
        href="http://www.embhelp.com/drew/mypage/example/network_config.htm"><B>VxWorks网络配置及分析</B></A></TD></TR>
    <TR>
      <TD width=238 height=31><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#INT"><B>硬件中断</B></A></TD>
      <TD width=239 height=31><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#FLASH"><B>FlashROM 
        驱动</B></A></TD></TR>
    <TR>
      <TD width=238 height=31><U><B>文件系统</B></U></TD>
      <TD width=239 height=31><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#NIC"><B>网卡驱动(Linux)</B></A></TD></TR>
    <TR>
      <TD width=238 height=31><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#LCD"><B>LCD和触摸屏</B></A></TD>
      <TD width=239 height=31><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#MODEM"><B>MODEM 
        拨号</B></A></TD></TR>
    <TR>
      <TD width=238 height=32><B><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#RTC">实时时钟 RTC</A> 
        </B></TD>
      <TD width=239 height=32><A 
        href="http://www.embhelp.com/drew/mypage/driver.htm#PCI"><B>VxWorks 
        PCI驱动编程步骤</B></A></TD></TR>
    <TR>
      <TD width=238 height=32><A 
        href="http://www.embhelp.com/drew/mypage/example/scc_uart.htm">MPC860串口SCC 
        UART模式编程</A></TD>
      <TD width=239 height=32></TD></TR></TBODY></TABLE></DIV></BLOCKQUOTE>
<P> </P>
<P><A name=INIT></A><BIG><BIG><STRONG>系统初始化</STRONG></BIG></BIG></P>
<P style="LINE-HEIGHT: 150%">可参见 <A 
href="http://www.embhelp.com/drew/mypage/sourcecode.htm#INIT" 
target=_blank>PowerPC初始化示例</A> 和 <A 
href="http://www.embhelp.com/drew/mypage/example/ARM_Boot.htm" 
target=_blank>ARM_Boot示例</A></P>
<P style="LINE-HEIGHT: 150%"><FONT color=black 
size=3><B>Cache的初始化</B></FONT></P>
<BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><FONT 
  color=black>ARM9的BSP,在romInit()函数里对cache进行的操作为: <BR>1.设置几个cache区; 
  <BR>2.flush&nbsp;caches(通过以下代码实现: 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;R0,=0x00000000 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCR&nbsp;p15,0,R0,c7,c5,0 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCR&nbsp;p15,0,R0,c7,c6,0 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) 
  <BR><B>问题:</B> <BR>1.flush&nbsp;cache是什么意思? 
  <BR>2.在romInit()函数里一般对cache进行的操作是什么? <BR></FONT></P>
  <BLOCKQUOTE>
    <P style="LINE-HEIGHT: 150%">1.flush&nbsp;cache是什么意思?&nbsp; 
    <BR>&nbsp;&nbsp;&nbsp;使所有的&nbsp;IDC&nbsp;无效,这样CPU读取数据和指令时可以直接到原存储地址去读取,而不必从cache中得到,因为cache保留的是以前的数据,而当前原地址的数据可能发生了变化,这样保证了数据的正确性.使CPU得到最新的数据,当然,这样会降低CPU的处理速度. 
    <BR><BR>2.在romInit()函数里一般对cache进行的操作是什么?&nbsp; 
    <BR>&nbsp;&nbsp;在romInit()函数里,对cache主要的操作就是flush&nbsp;cache,因为对系统初始化前,必须要保证初始化过程的正确和连续,所以要有flush&nbsp;cache,disable&nbsp;interrupt&nbsp;等操作. 
    <BR></P></BLOCKQUOTE></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"><B>VxWorks系统装入ARM的过程 </B></P>
<BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><FONT color=black><B>问题:</B></FONT><FONT 
  color=black>开发基于ARM7和VxWorks的嵌入式系统,Tornado/VxWorks&nbsp;和一个基于ARM7TDMI的单板机是否足够了?VxWorks&nbsp;怎么样装入单板机运行?不用JEENI可以装入么? 
  <BR></FONT></P>
  <BLOCKQUOTE>
    <P 
    style="LINE-HEIGHT: 150%">把&nbsp;VXWORKS&nbsp;IMGAGE&nbsp;装入ARM&nbsp;的过程大体上是这样的: 
    <BR>ARM&nbsp;7&nbsp;内部有&nbsp;128&nbsp;BYTE&nbsp;的&nbsp;BOOT&nbsp;ROM,和&nbsp;2K&nbsp;的&nbsp;SRAM,当需要DOWNLOAD&nbsp;VXWORKS&nbsp;时&nbsp;ARM&nbsp;采用&nbsp;BOOT&nbsp;方式启动运行存在&nbsp;BOOTROM&nbsp;中的程序初始化&nbsp;ARM&nbsp;内部的&nbsp;COM&nbsp;口,从&nbsp;COM&nbsp;口接受数据到&nbsp;2K&nbsp;的&nbsp;SRAM,这&nbsp;2K&nbsp;程序是用来真正&nbsp;LOAD&nbsp;VXWORKS&nbsp;的,2K&nbsp;程序&nbsp;LOAD&nbsp;完毕后系统自动跳转到这&nbsp;2K&nbsp;程序执行它的作用是首先通过&nbsp;COM&nbsp;口接受&nbsp;VXWORKS&nbsp;到&nbsp;DRAM&nbsp;,然后由&nbsp;DRAM&nbsp;写入&nbsp;FLASH&nbsp;。 
    <BR><BR>写入完毕后,切换到&nbsp;NORMAL&nbsp;模式重新启动系统,系统自动跳到&nbsp;FLASH&nbsp;0X00000000&nbsp;开始运行&nbsp;VXWORKS。 
    <BR><BR>可以用&nbsp;PC&nbsp;机上的&nbsp;COM1&nbsp;与&nbsp;ARM&nbsp;内部的&nbsp;UART1(COM)&nbsp;通信来&nbsp;DOWNLOAD&nbsp;VXWORKS。</P></BLOCKQUOTE></BLOCKQUOTE>
<P 
style="LINE-HEIGHT: 150%"><B>B</B><B>ootloader怎么得到,如果对开发板有些改动,还能使用开发板的bootloader吗?bootloader起到什么作用?</B></P>
<BLOCKQUOTE>
  <P 
  style="LINE-HEIGHT: 150%">Bootloader相当于PC机主板上的BIOS,是最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备.</P>
  <P 
  style="LINE-HEIGHT: 150%">有些bootloader已经嵌在CPU内了,没有bootloader的CPU可以在片外的eeprom内做bootloader,也可以不要bootloader,直接通过JTAG口灌入程序,开发板改动基本上不会影响bootloader.</P></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"> </P>
<P style="LINE-HEIGHT: 150%"><FONT color=black size=3><B>VxWorks 
下的驱动的问题</B></FONT>&nbsp;</P>
<BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><FONT color=black><B>问题:</B></FONT><FONT 
  color=black>vxworks中有两种驱动模式,一个是是分层结构,特别对网络协议栈来说有network&nbsp;protocol/MUX/network&nbsp;driver(END,BSD).还有一种就是没有层次的概念,在应用程序中直接访问硬件的。比方说现在有两种类型的驱动,譬如USB&nbsp;和ATM,他们需要直接交换数据,不想走OS那一套标准的流程,也就是我们想用后面的一种(OS&nbsp;Independent)。应如何去做?&nbsp;</FONT> 
  </P>
  <BLOCKQUOTE>
    <P 
    style="LINE-HEIGHT: 150%">我没有做过&nbsp;ATM,USB&nbsp;的驱动,在&nbsp;VXWORKS&nbsp;上做过其它驱动,&nbsp;MODEM,SPI等,我认为如果&nbsp;VXWORKS&nbsp;不支持莫种协议的话,可以在&nbsp;VXWORKS&nbsp;上直接对硬件操作,自己按照相关协议标准封装数据包按照硬件定义放入相应的地址空间。这等于自己写协议和驱动。 
    <BR><BR>&nbsp;&nbsp;这种方法是可行的,当然如能找到&nbsp;VXWORKS&nbsp;下支持该协议的驱动更好。&nbsp;
    <P style="LINE-HEIGHT: 150%">这种程序和&nbsp;VXWORKS&nbsp;系统也是相关的: 
    <BR><BR>1。MMU&nbsp;对该硬件的地址映射正确&nbsp;(改&nbsp;BSP&nbsp;) 
    <BR>2。中断向量表(改&nbsp;BSP&nbsp;) 
    <BR>3。硬件中断登记&nbsp;(INTCONNECT&nbsp;),及&nbsp;ISR&nbsp; 
    <BR>4。系统任务协调,保证在该程序执行时,没有其它任务占用&nbsp;CPU <BR><BR>基本上和开发其它的驱动程序是一样的。 
  </P></BLOCKQUOTE></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"> </P>
<TABLE width="100%" border=0>
  <TBODY></TBODY></TABLE>
<P style="LINE-HEIGHT: 150%" align=center><A 
href="http://www.embhelp.com/drew/mypage/driver.htm#returntop"><B>返回页首</B></A></P>
<P style="LINE-HEIGHT: 150%" align=center> </P>
<P style="LINE-HEIGHT: 150%"><A name=INT></A><FONT color=black 
size=5><B>硬件中断</B></FONT></P>
<P style="LINE-HEIGHT: 150%">参见 <A 
href="http://www.embhelp.com/drew/mypage/sourcecode.htm#INT" 
target=_blank>硬件中断示例</A></P>
<P style="LINE-HEIGHT: 150%"> </P>
<P style="LINE-HEIGHT: 150%"><B>中断编程中应该注意的问题</B></P>
<BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><B>1.</B>中断程序的调试不能用单步执行,因为中断发生很快,无法跟踪。 </P>
  <P style="LINE-HEIGHT: 150%"><B>2.</B>中断例程中尽量不要用C,库函数.因为中断处理中所有的任务都被挂起。 </P>
  <P 
  style="LINE-HEIGHT: 150%"><B>3.</B>在中断调试过程中轮询方式简明,易于调试。在实时多任务程序中肯定用中断方式,不能用轮询。<BR></P></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"><B>中断出错时调试检查的方法(以ARM IRQ中断为例)</B></P>
<BLOCKQUOTE>
  <P 
  style="LINE-HEIGHT: 150%"><BR><B>1。</B>确定一下是否中断发生,在中断发生时,查中断标志寄存器INTST1中相应的IRQ为是否置1,或用示波器量该IRQ管脚。有中断产生且中断enable,就应该执行相应的ISR。</P>
  <P 
  style="LINE-HEIGHT: 150%"><B>2。</B>如上面没有问题,仍不执行,再查一下是否有比该IRQ等级更高的中断持续发生屏蔽了该IRQ中断。</P>
  <P 
  style="LINE-HEIGHT: 150%">特别要注意一些FIQ中断,在ARM中FIQ中断永远高于IRQ,可能会导致IRQ中断不被执行。<BR>在中断屏蔽寄存器INTMR1中屏蔽所有优先级高于该IRQ的FIQ,会disable这些FIQ.</P>
  <P style="LINE-HEIGHT: 150%"> </P></BLOCKQUOTE>
<TABLE width="100%" border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%"><FONT color=black 
      size=3><B>主题:请高手指引:EP7312的中断</B></FONT>&nbsp;</P></TD></TR></TBODY></TABLE>
<DIV align=right><!-- 文章内容显示 -->

⌨️ 快捷键说明

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