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

📄 硬件驱动编程.htm

📁 Vxwork的学习资料,对初学者有帮助 有关于BSP的说明介绍
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) &gt;&gt;1);<BR><BR>if (net_debug &gt; 
  1) printk("Sending test packet ");<BR>/* wait a couple of jiffies for packet 
  to be received */<BR>for (timenow = jiffies; jiffies - timenow &lt; 60; ) 
  ;<BR>if (((event = readreg(dev, PP_TxEvent)) &amp; TX_SEND_OK_BITS) 
  ==TX_OK)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  if (net_debug &gt; 1) 
  printk("succeeded\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  return 1;<BR>}<BR>if (net_debug &gt; 1) printk("failed \n");<BR>return 
  0;<BR>}<BR></P>
  <BLOCKQUOTE>
    <P style="LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp; 
    这是一个测试程序,不仅过linux操作系统和上层TCP/IP,直接向网卡发数据包,来<BR>测试网卡是否工作正常,数组使用的标准的以太网帧格式(参见相关的RFC文档),不用管<BR>它,直接拿来就用的,这个数组的意思是向网络个点发包,网络点收到包好,进行回复.</P></BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><BR><STRONG>问题 3 
  :</STRONG>我在别的一些cs89x0.c文件中看到这个函数是被detect_aui,detect_bnc等这样<BR>的函数所调用,但在uCcs8900.c中的detect_tp中没有用到?</P>
  <BLOCKQUOTE>
    <P 
    style="LINE-HEIGHT: 150%">BNC基本上现在网络都不用了,一般是RJ45的插头,你可以看一下现在的网卡,没有BNC<BR>头.AUI类似串口通信,尽管现在网卡都支持,但很少用到.所以这里只用了detect_tp()来检测RJ45连线是否存在.</P></BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><BR><STRONG>问题 4 
  :</STRONG>这个函数里还用到了ETH_ALEN和ETH_ZLEN这两个宏,这两个宏的解释我看到过,但<BR>理解的不是很清楚,在这里test_packet,ETH_ALEN和ETH_ZLEN相互间是什么样的关系呢?<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  ETH_ZLEN时所发数据包的长度,ETH_ALEN应该是6,是MAC地址的字结数.<BR></P>
  <P style="LINE-HEIGHT: 150%"><STRONG>问题 5 
  :</STRONG>.驱动编译到内核里,生成映像文件当到目标板上让系统在目标板上运行起来后,<BR>该怎么测试我的驱动程序呢?需要再写相应的测试代码吗?<BR></P>
  <BLOCKQUOTE>
    <P style="LINE-HEIGHT: 150%">测试应该是两步:<BR>&nbsp; 
    1.底层硬件测试,可用它的send_test_pkt()来测,或自己写一个LOOPBACK测试程序,具体方法可参见CS89手册,test 
    mode.<BR><BR>2.上层网络测试,可用BSD写一个网络通信程序,开发板和PC及通信传送大量数据.<BR>或用linux上FTP服务来传送文件.<BR></P></BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%"><STRONG>问题 6 :</STRONG>request_irq(IRQ_MACHSPEC | 
  20,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  cs8900_interrupt,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  IRQ_FLG_STD,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  "CrystalLAN_cs8900a", 
  NULL))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  panic("Unable to attach cs8900 
  intr\n");<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  IRQ_MACHSPEC | 20, 
  该是硬件中断号,不知道为什么要这样写<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  IRQ_FLG_STD ,这个标志是要做些什么设置?中断共享等等?<BR></P>
  <BLOCKQUOTE>
    <P style="LINE-HEIGHT: 150%">IRQ_MACHSPEC | 20中20是硬件中断号, IRQ_MACHSPEC 
    应该是(0x10000000L),第一位1只是一个说明标志,说明是特殊设备中断.<BR>IRQ_FLG_STD是中断处理的一些属性设置,如快速,屏蔽等,我没有找到这个的定义,<BR>可能是标准中断处理吧.<BR></P>
    <P style="LINE-HEIGHT: 150%" align=center><A 
    href="http://www.embhelp.com/drew/mypage/driver.htm#returntop"><B>返回页首</B></A></P></BLOCKQUOTE></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"><A name=LCD></A><FONT color=black size=4><B>LCD 
与触摸屏</B></FONT></P>
<TABLE width="100%" border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%"><FONT color=black size=3><B>主题:LCD 
      与触摸屏分辨率不一样</B></FONT>&nbsp;</P></TD></TR></TBODY></TABLE>
<DIV align=right><!-- 文章内容显示 -->
<TABLE cellSpacing=0 cellPadding=10 width="100%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%"><FONT 
      color=black>我的LCD&nbsp;分辨率与触摸屏的分辨率不一样,&nbsp;但尺寸相同,&nbsp;在触摸屏 
      <BR>上点击的坐标与LCD显示的坐标不一致,&nbsp;请问有什么办法可 <BR>以解决(软件或硬件解决方案均可)。 
      <BR><BR>&nbsp;环境:&nbsp;CodeWarrior&nbsp;for&nbsp;68K,&nbsp;with&nbsp;PPSM 
      &nbsp;</FONT> </P></TD></TR></TBODY></TABLE>
<TABLE width="96%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P style="LINE-HEIGHT: 150%"><B>Re:LCD 
  与触摸屏分辨率不一样</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="96%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P 
      style="LINE-HEIGHT: 150%">LCD&nbsp;分辨率与触摸屏的分辨率一般来说是不一样,坐标也不一样,这需要做程序进行转换. 
      <BR>我曾做过这样的转换,我的LCD分辨率是320*240,坐标原点在右下角. <BR>触摸屏分辨率是900*900,坐标原点在左上角. 
      <BR>计算公式如下: <BR>&nbsp;&nbsp; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xLCD=320-[320*(x-x2)/(x1-x2)]; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yLCD=240-[240*(y-y2)/(y1-y2)]; 
      <BR><BR>其实就是中学学的坐标转换.这种方法肯定能行的,试试看吧.</P></TD></TR></TBODY></TABLE></DIV>
<P style="LINE-HEIGHT: 150%" align=left>LCD 编程要点</P>
<P style="LINE-HEIGHT: 150%" align=left> </P>
<P style="LINE-HEIGHT: 150%" align=center> </P>
<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%"> </P>
<P style="LINE-HEIGHT: 150%"><A name=MODEM></A><FONT color=black 
size=5><B>Modem拨号</B></FONT></P>
<P style="LINE-HEIGHT: 150%"><FONT color=black size=4><B>&nbsp; 
VxWorks下Modem拨号的主要实现过程</B></FONT></P>
<BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%">这里用到一些串口RS232的定义和AT命令,Modem串口采用ns16552.主要步骤如下</P>
  <P style="LINE-HEIGHT: 150%"><BR>1.&nbsp;off&nbsp;hook,发出摘机命令(ATH1\r), 
  <BR>&nbsp;&nbsp;&nbsp;等待modem返回状态,如果是"OK",则表示成功.进行第二步. 
  <BR>2.&nbsp;on&nbsp;hook&nbsp;发出挂机命令(ATH\r), 
  <BR>&nbsp;&nbsp;&nbsp;等待modem返回状态,如果是"OK",则表示成功.进行第三步. 
  <BR>3.&nbsp;off&nbsp;hook,dialing,摘机拨号(ATDT....\r), 
  <BR>&nbsp;&nbsp;&nbsp;等待modem返回状态,如果是"CONNECT",则表示成功.进行第四步. 
  <BR>4.&nbsp;send&nbsp;data,发送数据. <BR><BR>最好按上述步骤一步一步调,并要等待正确的返回值后再进行下一步. 
  <BR><BR>具体程序例子如下,拨号: <BR><BR>//&nbsp;清空接收FIFO 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;REG(FCR,&nbsp;nsChan)&nbsp;|=FCR_RXCLR; 
  <BR>//&nbsp;等待,直到清空为止 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;while((REG(FCR,&nbsp;nsChan)&nbsp;&amp;&nbsp;FCR_RXCLR)&nbsp;!=&nbsp;0x00); 
  <BR>//&nbsp;拨号&nbsp;&nbsp;&nbsp;&nbsp; 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;while(atdt1[i]!=0) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ 
  <BR>//&nbsp;检查发送FIFO是否准备好,为空 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
  while((REG(LSR,&nbsp;nsChan)&nbsp;&amp;&nbsp;LSR_THRE)&nbsp;==&nbsp;0x00); 
  <BR>//&nbsp;在发送FIFO中放入数据 <BR>REG(THR,&nbsp;nsChan)&nbsp;=&nbsp;atdt1[i]; 
  <BR>i++; <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
  <BR>//&nbsp;等待是否有数据到达,即modem返回数据. 
  <BR>while((REG(LSR,&nbsp;nsChan)&nbsp;&amp;&nbsp;LSR_DR)&nbsp;==&nbsp;0x00); 
  <BR>//&nbsp;接收数据并判断返回值 <BR>response[i-19]=REG(RBR,nsChan); 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;if(response[0]!=0x43) 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.................. 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;else 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;..................&nbsp;&nbsp;&nbsp;&nbsp; 
  <BR>//&nbsp;如果返回值是"connect",&nbsp;&nbsp;&nbsp;&nbsp; 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp;while(*data!=0) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ 
  <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
  while((REG(LSR,&nbsp;nsChan)&nbsp;&amp;&nbsp;LSR_THRE)&nbsp;==&nbsp;0x00); 
  <BR>REG(THR,&nbsp;nsChan)&nbsp;=&nbsp;*data++; <BR>&nbsp;&nbsp;&nbsp;&nbsp;} 
  <BR>其他步骤基本一样. <BR><BR></P>
  <P style="LINE-HEIGHT: 150%"><STRONG>附:</STRONG> <STRONG>RS232(9 
  PINS)的主要定义:</STRONG></P>
  <P style="LINE-HEIGHT: 150%" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pin 1: 
  DCD (Data Carrier Detect) Pin 2: RXD 
  (Receive)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pin 3: TXD (Transmit)</P>
  <P style="LINE-HEIGHT: 150%" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pin 4: 
  DTR (Data Terminal Ready) Pin 5: SG (Signal Grund)&nbsp;&nbsp; Pin 6: DSR 
  (Data Set Ready)</P>
  <P style="LINE-HEIGHT: 150%" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pin 7: 
  RTS (Request To Send) &nbsp;&nbsp;&nbsp;&nbsp; Pin 8: CTS (Clear To Send) Pin 
  9: RI (Ring Indicator)</P>
  <P style="LINE-HEIGHT: 150%" align=left>&nbsp;&nbsp;&nbsp; 
  其中:&nbsp;&nbsp;&nbsp; DTE for Data Terminal Equipment, such as computer, 
  printer &amp; terminal</P>
  <P style="LINE-HEIGHT: 150%" 
  align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  DCE for Data Communication Equipment, such as modems.</P>
  <P style="LINE-HEIGHT: 150%" 
  align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  +3 To +12 volts indicates On or O- state (space)</P>
  <P style="LINE-HEIGHT: 150%" 
  align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  -3 To -12 volts indicates Off</P>
  <P style="LINE-HEIGHT: 150%" 
  align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  Usually use swing between +12V~~-12V, dead area between +3V~~-3V</P>
  <P style="LINE-HEIGHT: 150%"> </P>
  <P style="LINE-HEIGHT: 150%" align=center><A 
  href="http://www.embhelp.com/drew/mypage/driver.htm#returntop"><B>返回页首</B></A></P></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"> </P>
<P style="LINE-HEIGHT: 150%"><A 
name=RTC></A><BIG><BIG><STRONG>RTC</STRONG></BIG></BIG></P>
<P style="LINE-HEIGHT: 150%"><FONT color=black size=3><B>怎样写PowerPc的Real-Time 
Clock(RTC)的BSP?</B></FONT></P>
<BLOCKQUOTE>
  <P style="LINE-HEIGHT: 150%">&nbsp;&nbsp; 
  PowerPC&nbsp;内部一般只有3个timer,没有内部RTC,PowerPC专门为外部RTC芯片设置了接口,一般外部RTC芯片是选择Dallas的,带有备用电源,通过SPI进行操作,可精确设置年月日时....&nbsp;RTC驱动总的来说是不复杂的,只是要注意一些数据格式的转换,如BCD码等.&nbsp; 
  </P>
  <P 
  style="LINE-HEIGHT: 150%">RTC一般有SPI接口和标准的三线接口,主要取决于管脚SERMODE,如果SERMODE接Vcc,则为SPI方式。SPI方式用到4个管脚:SDO,SDI,CE,SCLK.<BR><BR>三线制和SPI方式类似,只不过是用一个I/O管脚代替了SDO和SDI. 
  </P></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%" align=center> </P>
<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%"><STRONG><BIG><BIG>PCI</BIG></BIG><BIG><BIG>驱动<A 
name=PCI></A></BIG></BIG></STRONG></P>
<P style="LINE-HEIGHT: 150%"><FONT color=black size=3><B>PCI 
驱动编程步骤</B></FONT></P>
<BLOCKQUOTE>
  <P 
  style="LINE-HEIGHT: 150%">1。复制C:\Tornado\target\h\drv\pci目录下pciAutoConfigLib.h,pciConfigLib.h等PCI头文件文件和C:\Tornado\target\src\drv\pci目录下pciAutoConfigLib.c,pciConfigLib.c等PCI文件到BSP目录下。<BR><BR>2。根据实际的PCI硬件定义改写或从写这些PCI文件。<BR><BR>3。改写BSP配置文件<BR><BR>a. 
  在BSP 文件config.h中加入语句 #define INCLUDE_PCI (添加PCI模块)。<BR>b. 在BSP 文件sysLib.c中加入语句 
  #include "pci/pciConfigLib.c"(主要PCI初始化函数在这个文件中)。<BR>c。在BSP 文件sysLib.c中加入语句 
  IMPORT void sysOutLong(); (导入PCI需要的一些基本函数)。<BR>IMPORT char 
  sysInByte();<BR>IMPORT char 
sysOutByte();<BR>...................</P></BLOCKQUOTE>
<P style="LINE-HEIGHT: 150%"> </P>
<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></BODY></HTML>

⌨️ 快捷键说明

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