请教在PXA270中添加一个中断服务程序的方法!!!

wyh121w   2009-6-18 23:56 楼主
我需要在BSP中加一个中断,中断引脚是GPIO36
BSP是WINCE42下的,也就是静态申请中断的那种

我的步骤:
1、在OALINTR.H中我加了#define SYSINTR_WIFI  (SYSINTR_FIRMWARE+19)

2、cfwBvd1.c中我分别在OEMInterruptEnable、OEMInterruptDisable、OEMInterruptDone
加了对应的   case SYSINTR_WIFI: ....
3、bvdisrs.c中我加了int SPI_WifiISR(unsigned int ra)函数,并return SYSINTR_WIFI;
4、ISRdefs.h中我注册了这个中断服务int SPI_WifiISR(unsigned int);
5、intbvd1.c中pFunc pIRQISR[MaxNumISRs] =
中我添加了这个中断服务函数SPI_WifiISR
6、由于多加了一个,MaxNumISRs的定义由34改为35

问题:
1、GPIO36怎么能被用做中断?
   在SPEC中:GPIO36的 IN: function1 :FFDCD       function2:sspsclk2     function3:KP_MKIN<7>
                      OUT:function1 :USB_P2_4    function2:sspsclk2     function3:NONE
   请问怎么能确定一个GPIO是否可用于中断?
2、#define SYSINTR_WIFI  (SYSINTR_FIRMWARE+19)请问这个中断号定义是否有要求需要跟芯片资料上定义一致
   我理解只要不重复、不超过64就可以
3、OEMInterruptEnable中:   
             case SYSINTR_WIFI:                          //OEMInterruptEnable
             INTC_WIFISPI_INT_EN(v_pICReg->icmr);
             break;
    OEMInterruptDisable中:
             case SYSINTR_WIFI:        //OEMInterruptDisable
             INTC_WIFISPI_INT_DIS(v_pICReg->icmr);
             break;
    OEMInterruptDone中:
             case SYSINTR_WIFI:       //OEMInterruptDone
             v_pGPIOReg->GPDR1 &= ~(0x01<<(36 % 32)) ;       //input
            v_pGPIOReg->GAFR1_L &=~(3u<<4) ;                //AF22 General I/O
             v_pGPIOReg->GFER1 |= (0x01<<(36 % 32)) ;        //enable detecting  falling edge
            v_pGPIOReg->GEDR1 |= (0x01<<(36 % 32));
            break;
4、int SPI_WifiISR(unsigned int ra)
   {
        volatile XLLP_GPIO_T        *v_pGPIOReg;
        v_pGPIOReg = (volatile XLLP_GPIO_T *)GPIO_BASE_U_VIRTUAL;
         if( v_pGPIOReg->GEDR1 & (0x01<<(36 % 32)) )                                        // GPIO36 wifi
         {   
                v_pGPIOReg->GFER1 &= ~(0x01<<(36 % 32));
           v_pGPIOReg->GRER1 &= ~(0x01<<(36 % 32));
                 //clear interrupt bit
            v_pGPIOReg->GEDR1 |= (0x01<<(36 % 32)) ;
              RETAILMSG(1,(TEXT("--------------SYSINTR_WIFI Interrupt----------\r\n")));
           return SYSINTR_WIFI;       
          }
   }  这个应该是中断服务程序吧??请问这个跟3中的OEMInterruptDone有什么关系呢?SPI_WifiISR的作用就是初始化
     中断引脚的寄存器吧?
5、MaxNumISRs的定义由34改为35,这个没有限制吧??

6、中断引脚在哪进行最早的初始化设置的呢?才能由SPI_WifiISR检测到中断?
谢谢各位!
   

回复评论 (5)

帮顶.
点赞  2009-6-19 09:01
帮顶!
点赞  2009-6-19 09:48
帮顶!
点赞  2009-6-19 11:29
帮顶!
点赞  2009-6-19 14:16
帮顶~
看起来没什么问题阿,除非这个GPIO36不能作为中断,或者没有配置对!
点赞  2009-6-19 14:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复