3086|2

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

中断问题(AT91 A3)高手求救! [复制链接]

  (灯)LED 与PA相连   按钮(SW,一共四个按钮)与PB 相连
#define LED_MASK        (LED1|LED2|LED3|LED4)
#define SW_MASK         (SW1_MASK|SW2_MASK|SW3_MASK|SW4_MASK|SW5_MASK)
高手帮我看看,为什么我按了SW4 ,没有反映呀(好像进不了中断呀)
#include "Board.h"

__ramfunc void aic_software_interrupt(void)
{
    //* Read the output state
    if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & LED2 ) == LED2 )
    {
        AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2 );
    }
    else
    {
        AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2 );
    }
}

__ramfunc void pio_c_irq_handler ( void )
{
int dummy;                                                                                   
    //* Read the output state
    if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & LED4 ) == LED4 )
    {
       AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED4);
    }
    else
    {
          AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED4);
    }
    //* enable the next PIO IRQ
   dummy =AT91C_BASE_PIOA->PIO_ISR;
    //* suppress the compilation warning
   dummy =dummy;
    //* while SW3 is push wait
   while ( (AT91F_PIO_GetInput(AT91C_BASE_PIOB) & SW3_MASK ) != SW3_MASK );
}


int main( void )
//* Begin
{
    unsigned int   loop_count ;
    AT91PS_AIC     pAic;

        pAic = AT91C_BASE_AIC;


             loop_count = 0 ;

            AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
              AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ;
             AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ;


    //* open external PIO interrupt
        //* define switch SW3 at PIO input for interrupt IRQ loop
          AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOB ) ;
          AT91F_PIO_CfgInput(AT91C_BASE_PIOB, SW3_MASK | SW4_MASK);

          AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_PIOB,PIO_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_POSITIVE_EDGE , pio_c_irq_handler);
          AT91F_PIO_InterruptEnable(AT91C_BASE_PIOB,SW4_MASK);
        //* set the interrupt by software
         AT91F_AIC_EnableIt (pAic, AT91C_ID_PIOB);
      

for (;;)
    {
        AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1 );
        delay () ;
        AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1 );
        delay () ;

        loop_count ++ ;
    //* Set LED by software interrupt
        if (loop_count == 3)
        {
             loop_count=0;
         //* Software interrupt
             AT91F_AIC_Trig (pAic,AT91C_ID_SYS) ;
        }
    }

//* End
}

最新回复

这个程序在中断配置处有问题  详情 回复 发表于 2009-1-13 13:43
点赞 关注

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你跟踪一下,看看程序到哪停了?
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个程序在中断配置处有问题
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表