qink2008 发表于 2010-11-18 15:59:10

悬赏人民币了!!!lpc2106的中断进不了的问题

用的是zlg的lpc210X的工程模板,中断进不去,有经验的同志给指正指正。
还有我看到网上有的例程有EnableIRQ();这个函数,我加上去后就编译错误。
/****************************************************************************
* File:SENDSTR.C
* 功能:串口发送数据。
* 说明:将跳线器JP2短接。
*           使用外部11.0592MHz晶振,不使用PLL,Fpclk = 1/4 Fcclk。
****************************************************************************/
#include"config.h"
char flag=0;

/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly                延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
voidDelayNS(uint32dly)
{uint32i;

   for(; dly>0; dly--)
      for(i=0; i<50000; i++);
}


/****************************************************************************
* 名称:UART0_Ini()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
* 入口参数:无
* 出口参数:无
****************************************************************************/
voidUART0_Ini(void)
{U0LCR = 0x83;                            // DLAB = 1,可设置波特率
   U0DLL = 0x12;
   U0DLM = 0x00;
   U0LCR = 0x03;
}
                               

/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data                要发送的数据
* 出口参数:无
****************************************************************************/
voidUART0_SendByte(uint8 data)
{U0THR = data;                                  // 发送数据

   while( (U0LSR&0x40)==0 );          // 等待数据发送完毕

}



/****************************************************************************
* 名称:UART0_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt                要发送的字符串的指针
* 出口参数:无
****************************************************************************/
voidUART0_SendStr(uint8 const *str)
{while(1)
   {if( *str == '\0' ) break;
      UART0_SendByte(*str++);          // 发送数据
   }
}

void __irq IRQ_UART0 (void)
{
        uint8 i;
        i=U0IIR;
        switch(i & 0x0f)       
        {
                case 0x04:
                        flag=1;
                        //rcv0_buf= U0RBR;
                        break;
                default:
                        break;
        }
        VICVectAddr = 0x00;                        // 中断处理结束
}

/****************************************************************************
* 名称:main()
* 功能:向串口UART0发送字符串"Hello World!"
****************************************************************************/
intmain(void)
{uint8 constSEND_STRING[] = "Hello World!\r\n";
        uint8 const aa[]="abcd\r\n";

   PINSEL0 = 0x00000005;                  // 设置I/O连接到UART0
   PINSEL1 = 0x00000000;
   
   UART0_Ini();
   U0IER = 0x01;                                                // 允许RBR中断,即接收中断
   U0FCR = 0x01;
       
//        IRQEnable();                                                // 使能IRQ中断
/* 使能UART0、UART1中断 */
        VICIntSelect = 0x00000000;                        // 设置所有的通道为IRQ中断
        VICVectCntl0 = 0x20 | 0x06;                        // UART0分配到IRQ slot0,即最高优先级
        VICVectAddr0 = (uint32)IRQ_UART0;        // 设置UART0向量地址
        VICIntEnable = 1 << 0x06;                        // 使能UART0中断       

   while(1)       
   
   {
           if(1==flag)
        {
                flag=0;          
                   UART0_SendStr(SEND_STRING);
        }       
      UART0_SendStr(aa);
      DelayNS(50);
      
   }
   return(0);
}

我的工程帮看看啊
lpcourdev_598859H2XTI3.rar(文件大小:85K) (原文件名:xin2.rar)

Clinging 发表于 2010-11-18 16:26:13

MSR   CPSR_c, #0x1f;//0xdf,只所以用0x1f替换0xdf,是为了开启IRQ和FIQ,花了一天时间找出原因的,靠,靠,靠...
LDR   SP, =StackUsr


Startup.s文件中 把 0xdf 改成 0x1f 就可以了,我刚学时也遇到这个问题,好不容易弄明白原因

qink2008 发表于 2010-11-18 16:35:03

回复【1楼】Clinging 哆拉C梦
----------------------------------------------------------------------
我试试看啊,回头再一起讨论下

yondyanyu 发表于 2010-11-18 16:47:39

悬赏多少啊?

qink2008 发表于 2010-11-18 16:51:05

悬赏只是一块砖,目的是要引出您这样的玉!

vipeinstein 发表于 2010-11-25 20:39:10

不要瞎承诺!
页: [1]
查看完整版本: 悬赏人民币了!!!lpc2106的中断进不了的问题