这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » EINT1 求求各位了,我已经迷惑了2个月了,关于EINT1

共2条 1/1 1 跳转至

EINT1 求求各位了,我已经迷惑了2个月了,关于EINT1

院士
2006-09-17 18:14:16     打赏
EINT1 求求各位了,我已经迷惑了2个月了,关于EINT1



关键词: EINT1     求求     各位     已经     迷惑     月了     关于    

院士
2006-12-22 22:43:00     打赏
2楼
问 问题是EINT0使用正常(key3),可是EINT1使用不正常(key1),没有反映。是不是p0.14有什么问题。
程序如下:
test.c
#include "config.h"

#define  TASK_STK_SIZE                  64
OS_STK        TaskStartStk[TASK_STK_SIZE];
#define      KEY1    (1 << 14)             /* P0.14为key1 */
#define      KEY2    (1 << 16)             /* P0.16为key3 */
#define      BEE    (1 << 7)              /* P0.07为蜂鸣器 */
#define   LED1CON   (1 << 10)           /* 指示灯1*/  
#define   LED2CON   (1 << 13)           /* 指示灯2*/

void  TaskStart(void *data);

int main (void)
{
    OSInit();
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1],2);
    OSStart();
    return 0;
    
}

void  TaskStart(void *pdata)
{
    uint8 *cp;
    //uint8 cpp;
    uint8 err;
    pdata = pdata;                                                  /* 避免编译警告 */

    TargetInit();                                                   /* 目标板初始化 */
   // IODIR &= ~KEY1;                                                 /* 设置KEY1为输入*/
   // IODIR &= ~KEY2;                                                 
    IOSET = BEE;                                                    /* 设置蜂鸣器为输出*/
    IOSET =(LED1CON | IOSET);
    IOSET =(LED2CON | IOSET);
    IODIR = BEE;
    IODIR =(LED1CON | IODIR);
    IODIR =(LED2CON | IODIR);                                                              
    //PINSEL0 = (PINSEL0 & 0x2fff3fff);
    PINSEL0 = (PINSEL0 & 0x20000000);
    PINSEL1 = 0x00000001;                             
    EXTINT=0x07;
     for (;;)
    {

        OSTaskSuspend(OS_PRIO_SELF);
        //cp=(uint8 *)OSMboxPend(leehwaMbox,0,&err);
    }

}    

extern void EINT1_Exception(void)
{   
  uint32  j;

   j = VICIRQStatus;                // 读出VICIRQStatus的值
   
   j = IOSET;                        // 读取当前LED2控制值
   if( (j&LED1CON)==0 )                // 控制LED2输出
   {  IOSET = LED1CON;
   }
   else
   {  IOCLR = LED1CON;
   }
   
   while( (EXTINT&0x02)!=0 )        // 等待外部中断信号恢复为高电平    
   {  EXTINT = 0x02;                // 清除EINT1中断标志
   }
   
   VICVectAddr = 0x00;
   
}  

     
extern void EINT0_Exception(void)
{
   uint32  i;

   i = VICIRQStatus;                // 读出VICIRQStatus的值
   
   i = IOSET;                        // 读取当前LED1控制值
   if( (i&LED2CON)==0 )                // 控制LED1输出
   {  IOSET = LED2CON;
   }
   else
   {  IOCLR = LED2CON;
   }
   
   while( (EXTINT&0x01)!=0 )        // 等待外部中断信号恢复为高电平    
   {  EXTINT = 0x01;                // 清除EINT0中断标志
   }
   
   VICVectAddr = 0x00;
   
}   
target.c 有:
  void VICInit(void)
{
    extern void IRQ_Handler(void);
    extern void Timer0_Handler(void);

    extern void EINT0_Handler(void);
    extern void EINT1_Handler(void);
    
    VICIntEnClr = 0xffffffff;
    VICDefVectAddr = (uint32)IRQ_Handler;
    VICIntSelect= 0x00000000;
    

    VICVectAddr15 = (uint32)Timer0_Handler;
    VICVectCntl15 = (0x20 | 0x04);
    VICIntEnable = 1 << 4;
    
    
    VICVectAddr7  = (uint32)EINT1_Handler;
   /*VICVectCntl7  = (0x20 | 0x0F);*/
    VICVectCntl7  = (0x2F);
    VICIntEnable=1 << 15;
    
    
    VICVectAddr6  = (uint32)EINT0_Handler;
    /*VICVectCntl6  = (0x20 | 0x0E);*/
    VICVectCntl6  = (0x2E);
    VICIntEnable=1 << 14;
    
    
}      

vectors.s 中添加
EINT1_Handler  HANDLER EINT1_Exception

EINT0_Handler  HANDLER EINT0_Exception    1: 要断开ISP 2: 我已经断开了,还是不行我已经断开了,还是不行 3: 最奇怪的是书中的例子可以用,就是IRQ的C语言的例子我只是移植到了us/soII下,就出了问题,不明白

共2条 1/1 1 跳转至

回复

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