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

📄 硬件驱动编程.htm

📁 Vxwork的学习资料,对初学者有帮助 有关于BSP的说明介绍
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<TABLE cellSpacing=0 cellPadding=10 width="100%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%"><FONT 
      color=black>请高手指引:在C语言下EP7312,怎样将中断(比如:EINT1)与一段需要执行的程序挂钩。这里先谢谢啦!&nbsp;</FONT></P></TD></TR></TBODY></TABLE>
<TABLE width="96%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
  style="LINE-HEIGHT: 150%"><B>Re:请高手指引:EP7312的中断</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%">&nbsp;&nbsp;&nbsp;&nbsp;EP72xx定义IRQ的中断向量地址为0x18,你可以在该地址处放一跳转指令,跳到你的中断处理函数(IRQHandler),这个中断处理函数的主要作用是根据中断标志寄存器的标志位来分析IRQ中断类别(EINT1,EINT2...),然好根据中断的类别跳转到相应的中断服务程序(ISR)进行处理. 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;大概步骤基本如上,不过一般这些程序是操作系统已经有的,用相应的函数(如intConnect)直接使用即可. 
      <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;你不会是在写操作系统吧? 
      <BR><BR>&nbsp;&nbsp;&nbsp;另外,ARM的中断有FIQ和IRQ,FIQ的优先级总是高于IRQ的优先级,由于某些操作系统本身的问题,可能导致有时FIQ的中断屏蔽了IRQ的中断,使IRQ中断不能及时响应,这种情况下,可能需要从新写这些程序来进行替换. 
      <BR><BR>不知这些是否对你有所帮助.&nbsp;</P></TD></TR></TBODY></TABLE><!-- 文章内容显示 -->
<TABLE width="92%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
  style="LINE-HEIGHT: 150%"><B>Re:Re:请高手指引:EP7312的中断</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="92%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%">您好! 
      <BR><BR>我是个新手,资料也不全,您说的intConnect函数我没有查到,您能告诉我它的功能,基本用法吗?谢谢! 
  <BR></P></TD></TR></TBODY></TABLE>
<TABLE width="88%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
  style="LINE-HEIGHT: 150%"><B>Re:Re:Re:请高手指引:EP7312的中断</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="88%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P 
      style="LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intConnect()是VxWorks的函数,如果你的操作系统不是VxWorks,就不能用这个函数,你的操作系统也应该提供类似的函数,你可以找找看.这个函数主要是把中断和中断例程联系起来.就是解决你提到的问题.&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE width="84%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
    style="LINE-HEIGHT: 150%"><B>Re:Re:Re:Re:请高手指引:EP7312的中断</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="84%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%">谢谢您,<BR>我的操作系统是linux的,有类似的函数吗? 
      <BR>再问:怎样在EP72xx中断向量地址为0x18中放置一跳转指令(比如&nbsp;goto:),跳到中断处理函数呢?&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE width="80%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
      style="LINE-HEIGHT: 150%"><B>Re:Re:Re:Re:Re:请高手指引:EP7312的中断</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="80%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P 
      style="LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;linux操作系统下,函数应该是request_irq(),你可以查一下这个函数的具体用法. 
      <BR><BR>&nbsp;&nbsp;&nbsp;不过,我建议最好不要对中断的入口地址进行操作,因为系统已经做得很完善了,并提供了了接口函数,如果你对这个地址操作不当的话,会严重影响系统,会破环整个系统的中断响应. 
      <BR><BR>&nbsp;&nbsp;如果一定要重新写的话,可用memmove()将你的跳转函数放到0x18处,注意这个跳转函数不能大于4个字节,跳转在C程序中就是简单的函数调用,和goto是不一样的. 
      <BR> </P></TD></TR></TBODY></TABLE>
<TABLE width="76%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
      style="LINE-HEIGHT: 150%"><B>Re:Re:Re:Re:Re:Re:请高手指引:EP7312的中断</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="76%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P 
style="LINE-HEIGHT: 150%">真的谢谢您&nbsp;,您给我这么多知识。&nbsp;</P></TD></TR></TBODY></TABLE></DIV>
<TABLE width="100%" border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%"><FONT color=black 
      size=3><B>主题:怎样实现在程序中产生一个系统中断</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>怎样实现在程序中产生一个系统中断,比如向串口发一个中断?&nbsp;</FONT> 
</P></TD></TR></TBODY></TABLE>
<TABLE width="96%" border=0>
  <TBODY></TBODY></TABLE>
<TABLE width="96%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P 
  style="LINE-HEIGHT: 150%"><B>Re:怎样实现在程序中产生一个系统中断</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width=728 bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD width=688 colSpan=2>
      <P style="LINE-HEIGHT: 150%">一般中断的产生是由硬件定义的,如串口中断的定义: 
      <BR><BR>1.接收中断:当接收中断使能,接收数据存储器&nbsp;RxData&nbsp;存在有效数据,则产生中断. 
      <BR>2.发送中断:当发送中断使能,发送数据存储器&nbsp;TxData&nbsp;为空,则产生中断. <BR><BR></P></TD></TR>
  <TR>
    <TD width=312>
      <P style="LINE-HEIGHT: 150%" align=center><IMG height=226 
      alt="zhongduanT.gif (2609 字节)" src="硬件驱动编程.files/zhongduanT.gif" 
      width=290></P>
      <P style="LINE-HEIGHT: 150%" align=center>硬件发送中断产生逻辑示意</P></TD>
    <TD width=376>
      <P style="LINE-HEIGHT: 150%" align=center><IMG height=226 
      alt="zhongduan.gif (2531 字节)" src="硬件驱动编程.files/zhongduan.gif" 
      width=290></P>
      <P style="LINE-HEIGHT: 150%" align=center>硬件接收中断产生逻辑示意</P></TD></TR>
  <TR>
    <TD width=688 colSpan=2>
      <P style="LINE-HEIGHT: 150%"> 
      <P style="LINE-HEIGHT: 150%">所以要产生一个串口中断,主要有两步: 
      <BR><BR>1.使能这两个串口中断,RX&nbsp;Enable,TX&nbsp;Enable,函数intEnable(). 
      <BR>2.用intConnect()登记中断号,和相应的中断例程ISR. 
      <BR><BR>&nbsp;&nbsp;只要TX中断使能,什么都不必做,因为数据存储器&nbsp;TxData&nbsp;本身为空,就会有TX中断产生,自动执行你的中断程序. 
      <BR><BR>&nbsp;&nbsp;同样,RX中断产生,只要做程序向串口发送数据,使RxData中有数据,也会产生中断. 
  </P></TD></TR></TBODY></TABLE>
<TABLE width="96%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P style="LINE-HEIGHT: 150%"><B>好像不行</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%">vxworks也没有软中断。如果你知道了办法,请告诉我。&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE width="92%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P style="LINE-HEIGHT: 150%"><B>Re:好像不行</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="92%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P style="LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;为什么不行呢?能否说一下你的理由呢? 
      <BR>这里我没有用软中断,这是用程序来触发串口的硬件中断呀,RX中断我曾经用过多次. 
      <BR><BR>&nbsp;&nbsp;&nbsp;VxWorks中好像没有实现软中断的函数,一般硬件定义有软中断的(Software&nbsp;Interrupt或Program&nbsp;Interrupt),如PowerPC&nbsp;定义软中断向量地址为0x0700,由tw和twi指令来触发中断.ARM定义软中断向量地址为0x8,由SWI指令来触发中断. 
      <BR>&nbsp;&nbsp;&nbsp; 
      <BR>&nbsp;&nbsp;&nbsp;如果想在VxWorks中使用软中断的话,可能最好的办法是在BSP中写一个汇编程序,然后在其他地方调用. 
      <BR><BR>&nbsp;&nbsp;&nbsp;我猜测软件中断一般和系统联系紧密如系统错误等等,应用层和一般的系统编程基本上用不到,所以VxWorks没有提供这样的函数.</P></TD></TR></TBODY></TABLE>
<TABLE width="88%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P style="LINE-HEIGHT: 150%"><B>讨教</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="88%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P 
      style="LINE-HEIGHT: 150%">你的串口硬件中断的产生我没看明白。你是针对的哪种cpu或是cpu+外围芯片?860没有这样的机制。&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE width="84%" border=0>
  <TBODY>
  <TR>
    <TD class=t1>
      <P style="LINE-HEIGHT: 150%"><B>Re:讨教</B>&nbsp;</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="84%" bgColor=#eeeeee border=0>
  <TBODY>
  <TR>
    <TD>
      <P 
      style="LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;串口硬件中断的定义应该和CPU的种类没有关系,也和cpu或cpu+外围芯片形式无关. 

⌨️ 快捷键说明

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