65

帖子

0

TA的资源

一粒金砂(初级)

61
 
谢谢分享!!!!!

回复

84

帖子

0

TA的资源

一粒金砂(初级)

62
 
这里好像只给出了动态加载新的中断,请问“旧”的中断是如何保存,或者恢复的。
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

63
 
驱动?这就是传说中的驱动?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

64
 
友情支持,三颗心关照,up~up~up~!!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

65
 
  1. 引用 63 楼 liuxmzc 的回复:
  2. 这里好像只给出了动态加载新的中断,请问“旧”的中断是如何保存,或者恢复的。
  3. [/quote]
  4. 正在看,
  5. 现在先调试wifi先了。呵呵,外部中断初始化。

  6. ///
  7. /// intr_init: Initialize the Interrupt
  8. /// Input:
  9. ///                pHC - Hard context
  10. ///        Output:
  11. ///                None
  12. ///        Return:
  13. ///                0 - success
  14. ///                -1 - fail
  15. static int intr_init(PSSP_HARDWARE_CONTEXT        pHC)
  16. {
  17.         int                result = 0;
  18.         int  irqreturn = 5;
  19.         ///DWORD        threadID;                         // thread ID

  20.         ENTERFUNC();
  21.         if (pHC == NULL) {
  22.                 result = -1;
  23.                 goto funcFinal;
  24.         }
  25. //#if 1
  26. // Setup EINT11 (GPG3)  
  27.     pHC->pGPIORegs->GPGCON &= ~(0x3 << 6);         // Clear GPG3
  28.     pHC->pGPIORegs->GPGCON |= (0x2 << 6);          // Set GPG3 to EINT11 for SPI interrupt

  29.     pHC->pGPIORegs->EXTINT1 &= ~(0x7 << 12);    // Clear EINT11
  30.     pHC->pGPIORegs->EXTINT1 |= (0x2 << 12);     // fallig edge triggered for EINT11

  31.      pHC->pGPIORegs ->GPGUP&=~(0x0008);


  32. //#else
  33. // Configure the interrupt pin
  34. // IRQ_EINT20
  35. //SPIINT
  36.          pHC->pGPIORegs->GPGCON &= ~(3<<24);        //clear
  37.          pHC->pGPIORegs->GPGCON |= (2<<24);  //set as eint20
  38.          pHC->pGPIORegs->EXTINT2 &= ~(0xf<<16);//clear eint20
  39.          pHC->pGPIORegs->EXTINT2 |= (0x2<<16);//set eint20 Falling edge triggered
  40.          
  41.          pHC->pGPIORegs->GPGUP&=~(1<<12);  //enable pullup

  42. //#endif
  43. //led4 on       
  44.         pHC->pGPIORegs->GPFCON &= ~(0x03 << 14);        // clear
  45.         pHC->pGPIORegs->GPFCON |= 0x01 << 14;   // set as out
  46.         pHC->pGPIORegs->GPFUP |= (0x00 << 7);  //enable pullup
  47.         pHC->pGPIORegs->GPFDAT &= ~(0x01 << 7);        // set as out
  48.         pHC->pGPIORegs->GPFDAT |= (0x00 << 7);        // set as out


  49.         pHC->pGPIORegs->GPBCON &= ~(0x03 << 12);        // clear
  50.         pHC->pGPIORegs->GPBCON |= 0x01 << 12;   // set as out
  51.         pHC->pGPIORegs->GPBUP |= (0x00 << 6);  //enable pullup
  52.         pHC->pGPIORegs->GPBDAT &= ~(0x01 << 6);        // set as out
  53.         pHC->pGPIORegs->GPBDAT |= (0x00 << 6);        // set as out

  54.        
  55.    //xxxxxxxxxxxxxxx
  56.    // pHC->pGPIORegs->EINTMASK &= ~(0x1 << 11);    // 11enable interrupt for EINT11   
  57.    
  58.     //pHC->DevIntrInfo.irq = IRQ_EINT8_23;
  59.     pHC->DevIntrInfo.irq = IRQ_EINT11;//20  11
  60.         pHC->DevIntrInfo.pIstFunc = (MYISTFUNC) dev_ist;
  61.         pHC->DevIntrInfo.param = (LPVOID)pHC;
  62.         #if (USE_DEVIRQ == 1)
  63.         ///Initialize the interrupt, IST
  64.         GSPIMSG(1, (TEXT("USE_DEVIRQ == 1\n")));
  65.         irqreturn = setupInterrupt(&pHC->DevIntrInfo);
  66.         RETAILMSG(1, (TEXT("irqreturn: %d!\n"), irqreturn));
  67.         ///Load the ISR
  68.         //installISR(&pHC->DevIntrInfo);
  69.         #else
  70.         {
  71.         GSPIMSG(1, (TEXT("USE_DEVIRQ == 0\n")));
  72.         MYINTRINFO*        pMyIntrInfo = &pHC->DevIntrInfo;
  73.         DWORD                threadID;
  74.        
  75.         if(!(pMyIntrInfo->hIntrEvent = CreateEvent( NULL, FALSE, FALSE, NULL))) {
  76.                 GSPIMSG(ERRMSG, (TEXT("CreateEvent(DevIntrInfo.hIntrEvent) FAILED!\n")));
  77.                 goto funcFinal;
  78.         }
  79.         pMyIntrInfo->hISTHandle = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
  80.                                                 0,
  81.                         
  82.                                           dev_isrpoll_func,
  83.                                           pHC,
  84.                                                 0,
  85.                                           &threadID);

  86.         if (pMyIntrInfo->hISTHandle == NULL) {
  87.                 GSPIMSG(ERRMSG, (TEXT("hSSPInterThread Create FAILED!\n")));
  88.                 goto funcFinal;
  89.         }
  90.         CeSetThreadPriority(pMyIntrInfo->hISTHandle, DEFAULT_IST_PRIORITY);

  91.         }
  92.         #endif ///USE_DEVIRQ
  93.    
  94.    
  95. /*
  96.        
  97. //        set_GPIO_mode(pHC->pGPIORegs, SSP_INTR|SSPIRQ_ATTR);                                        ///INTR
  98. //        set_GPIO_IRQ_edge(pHC->pGPIORegs, SSP_INTR, SIG_FALLING);

  99.         ///Initialize the device interrupt info
  100.         pHC->DevIntrInfo.irq = IRQ_GPIOXX_2;
  101.         pHC->DevIntrInfo.pIstFunc = (MYISTFUNC) dev_ist;
  102.         pHC->DevIntrInfo.param = (LPVOID)pHC;
  103.         #if (USE_DEVIRQ == 1)
  104.         ///Initialize the interrupt, IST
  105.         setupInterrupt(&pHC->DevIntrInfo);
  106.         ///Load the ISR
  107.         //installISR(&pHC->DevIntrInfo);
  108.         #else
  109.         {
  110.         MYINTRINFO*        pMyIntrInfo = &pHC->DevIntrInfo;
  111.         DWORD                threadID;
  112.        
  113.         if(!(pMyIntrInfo->hIntrEvent = CreateEvent( NULL, FALSE, FALSE, NULL))) {
  114.                 GSPIMSG(ERRMSG, (TEXT("CreateEvent(DevIntrInfo.hIntrEvent) FAILED!\n")));
  115.                 goto funcFinal;
  116.         }
  117.         pMyIntrInfo->hISTHandle = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
  118.                                                 0,
  119.                         
  120.                                           dev_isrpoll_func,
  121.                                           pHC,
  122.                                                 0,
  123.                                           &threadID);

  124.         if (pMyIntrInfo->hISTHandle == NULL) {
  125.                 GSPIMSG(ERRMSG, (TEXT("hSSPInterThread Create FAILED!\n")));
  126.                 goto funcFinal;
  127.         }
  128.         CeSetThreadPriority(pMyIntrInfo->hISTHandle, DEFAULT_IST_PRIORITY);

  129.         }
  130.         #endif ///USE_DEVIRQ
  131. */
  132. funcFinal:
  133.         EXITFUNC(result);
  134.        
  135.         return result;
  136. }
复制代码
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

66
 
还有一个问题,如果动态加载的新的中断不是在系统进程(或线程)中的话, 就可能不受系统调度了,这样会不会导致系统崩溃?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

67
 
做个标记先再看
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

68
 
引用 67 楼 liuxmzc 的回复:
还有一个问题,如果动态加载的新的中断不是在系统进程(或线程)中的话, 就可能不受系统调度了,这样会不会导致系统崩溃?

问的好。
动态加载卸载没有问题的,把句柄删除即可。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

69
 
奇怪,我在wifi注册表加入
"IsrDll"="giisr.dll"
"IsrHandler"="ISRHandler"

然后在platform.bib文件中加入
giisr.dll                $(_FLATRELEASEDIR)\giisr.dll               NK  SH

可是还是wifi还是不能启动,在打印信息有

xxxxxxxx>Can not load giisr.dll
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

70
 
引用 70 楼 laiqingxiong 的回复:
奇怪,我在wifi注册表加入
"IsrDll"="giisr.dll"
"IsrHandler"="ISRHandler"

然后在platform.bib文件中加入
giisr.dll $(_FLATRELEASEDIR)\giisr.dll NK SH

可是还是wifi还是不能启动,在打印信息有

xxxxxxxx>Can not load giisr.dll


各位做出来的请来说说看,谢谢。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

71
 
动态ISR:

Giisr.dll并没有加入common.bib因此加入platform.bib中,主要步骤:

① 加入platform.bib giisr.dll $(_FLATRELEASEDIR)\giisr.dll NK SHK;

② 驱动初始化时,首先读取该驱动注册表项,并从该项下的"IsrDll"="giisr.dll","IsrHandler"="ISRHandler"与Irq=N等子键得到IRQ等信息,调用LoadIntChainHandler()函数以安装一个ISR;

③ 与静态IST相似,进行事件与逻辑中断号关联,这里初始化结束,IST等待中断触发。

④ IRQ到来,OAL的OEMInterruptHandler调用NKCallIntChain()函数执行ISR来获得逻辑中断号sysIntr;

⑤ 这里跟静态ISR处理完全相同了。



本文来自eeworld博客,转载请标明出处:http://blog.eeworld.net/renpine/archive/2009/10/03/4628346.aspx
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

72
 
Built-in device drivers that do not export the stream interface must find a convenient time during initialization to register their ISRs and spawn ISTs. Drivers that expose the stream interface generally perform these activities in their XXX_Init (Device Manager) function, which Device Manager calls.

Note   Not all hardware platforms support sharable IRQs, and the binary image builder (.bib) file information for GIISR is not in the Common.bib file, so you may have to manually include the following .bib file information in your Platform.bib file.
;  @CESYSGEN IF CE_MODULES_GIISR
    GIISR.dll    $(_FLATRELEASEDIR)\GIISR.dll    NK    SHK;  @CESYSGEN ENDIF CE_MODULES_GIISR
The following list shows one way for a driver to install an ISR and wait for interrupt events:

The driver calls LoadIntChainHandler to install an ISR.
The default ISR, installed by the OAL, executes first in response to an interrupt.
The OAL calls NKCallIntChain to execute the ISR that the driver installed.
The driver spawns an IST, which registers to receive interrupt event notifications. The IST must call InterruptInitialize before the IST uses the hEvent parameter, which provides a link between the idInt parameter and the SYSINTR value return by an ISR.
The driver calls the WaitForSingleObject function to wait for interrupt events generated by the ISR.
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

73
 
giisr.dll 好像只能放在 FILES 段,而非 MODULES 段
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

74
 
GIISR.dll $(_FLATRELEASEDIR)\GIISR.dll NK SH
改成GIISR.dll $(_FLATRELEASEDIR)\GIISR.dll NK SHK
终于加载成功了,可是还是启动不了,咋回事?*********> loading agiisr.dll ok
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

75
 
mark
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

76
 
标记一下,以后有用
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

77
 
MARK....不错的东西
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

78
 
学习了
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

79
 
没看懂,但记住了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表