打印
[ZLG-ARM]

EINT的问题

[复制链接]
3399|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoyowodeai|  楼主 | 2010-6-23 21:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想实现的功能是,通过按下key1,key2中断EINT0,EINT1,
使led1和led2点亮。

修改的程序如下:
      
  void VICInit(void)
{
    extern void IRQ_Handler(void);
    extern void Timer0_Handler(void);
    extern void UART0_Handler(void);
    extern void EINT0_Handler(void);
    extern void EINT1_Handler(void);
   
    VICIntEnClr = 0xffffffff;
    VICDefVectAddr = (uint32)IRQ_Handler;
    VICIntSelect=0x00000000;
   
    VICVectAddr14 = (uint32)UART0_Handler;/*向量地址*/
    VICVectCntl14 = (0x20 | 0x06);/*优先级*/
    VICIntEnable = 1 << 6;/*中断使能*/

    VICVectAddr15 = (uint32)Timer0_Handler;
    VICVectCntl15 = (0x20 | 0x04);
    VICIntEnable = 1 << 4;
   
    VICVectAddr13 = (uint32)EINT0_Handler;
    VICVectCntl13=(0x20|0x0E);
    VICIntEnable=1<<14;
   
    VICVectAddr12 = (uint32)EINT1_Handler;
    VICVectCntl12=(0x20|0x0F);
    VICIntEnable=1<<15;      
}

EINT0和EINT1的中断程序为:

    void EINT0_Exception(void)
{
    uint32 i;
    uint8 cp1;
    OS_ENTER_CRITICAL();
    i=VICIRQStatus;
    VICVectAddr = 0;  
    OS_EXIT_CRITICAL();
    cp1=0x05;
    OSMboxPost(EintMbox,&cp1);  
}      
void EINT1_Exception(void)
{   
    uint32 i;
    uint8 cp2;
    OS_ENTER_CRITICAL();
    i=VICIRQStatus;
    VICVectAddr = 0;  
    OS_EXIT_CRITICAL();
    cp2=0x06;
   OSMboxPost(EintMbox,&cp2);
   
}
uint8 EintGet(void)
{
    uint8 err;
    uint8 *ok;
    ok=(uint8 *)OSMboxPend(EintMbox,0,&err);                           
    return *ok;

}

vectors.s中添加:
;通用串行口0中断
UART0_Handler  HANDLER UART0_Exception
EINT1_Handler  HANDLER EINT1_Exception
EINT0_Handler  HANDLER EINT0_Exception
主程序中添加:
cp1=EintGet();
可是永远得不到值。另外调试中断有没有经验呀,太不好调了。

相关帖子

沙发
金鱼木鱼| | 2010-6-23 21:55 | 只看该作者
中断服务函数中要向VICVectAddr寄存器写入0。在熟悉中断之前,建议先使用附带的示例了解中断的发生和处理过程。

使用特权

评论回复
板凳
bit6019| | 2010-6-23 21:56 | 只看该作者
在RTOS中如何用外部中断呢?我这段代码有没问题?
void VICInit(void)
{
    extern void IRQ_Handler(void);
    extern void Timer0_Handler(void);
    extern void I2c_Handler(void);
  VICIntEnClr = 0xffffffff;
    PINSEL1 = (PINSEL1 & 0xfffffff0) | 0x01;
    VICVectAddr10 = (uint32)IRQ_Handler;
    VICVectCntl10 = (0x20 | 14);
    EXTINT = 0x01;
    VICIntEnable = 1<<14;
...

   
void IRQ_Exception(void)
{   
     uint8 i = CLOSE;
            OS_ENTER_CRITICAL();
            if (i == OPEN)
                   i = CLOSE;
            else i = OPEN;
            OSMboxPost(KeyMbox1,(void *)i);
            EXTINT = 0x01;
            VICVectAddr = 0;  
            OS_EXIT_CRITICAL();
}

使用特权

评论回复
地板
米其林r| | 2010-6-23 21:56 | 只看该作者
为什么周公书上没有RTOS下的外部中断例程啊?书上只有中间件中用到中断.周工给个外部中断的例子吧,试了很久都不行啊.

使用特权

评论回复
5
huzixian| | 2010-6-23 21:57 | 只看该作者
EINT0和EINT1的中断程序中有VICVectAddr = 0EINT0和EINT1的中断程序中有VICVectAddr = 0啊?
不明白阿

使用特权

评论回复
6
北京户口| | 2010-6-23 21:58 | 只看该作者
我的ucos下的外部中断也不能运行.请周公和各位帮忙指导一下啊。上面程式有问题吗?为什么不能运行啊?特别在Fpclk=Fcclk=44mhz时。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

191

主题

1265

帖子

2

粉丝