这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » EINT EINT的问题,帮帮忙呀,先谢了

共2条 1/1 1 跳转至

EINT EINT的问题,帮帮忙呀,先谢了

院士
2006-09-17 18:14:16     打赏
EINT EINT的问题,帮帮忙呀,先谢了



关键词: 问题     帮帮忙     谢了    

院士
2006-12-22 22:43:00     打赏
2楼
问 想实现的功能是,通过按下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();
可是永远得不到值。另外调试中断有没有经验呀,太不好调了。 1: 中断服务函数中要向VICVectAddr寄存器写入0。在熟悉中断之前,建议先使用附带的示例了解中断的发生和处理过程。 2: 在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();
} 3: 为什么周公书上没有RTOS下的外部中断例程啊?书上只有中间件中用到中断.周工给个外部中断的例子吧,试了很久都不行啊. 4: EINT0和EINT1的中断程序中有VICVectAddr = 0EINT0和EINT1的中断程序中有VICVectAddr = 0啊?
不明白阿
5: 怎么不理我啊?怎么不理我啊? 6: 我的ucos下的外部中断也不能运行.请周公和各位帮忙指导一下啊。上面程式有问题吗?为什么不能运行啊?特别在Fpclk=Fcclk=44mhz时。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]