打印

大问题:串口0接受中断

[复制链接]
1732|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skaler|  楼主 | 2007-11-7 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "config.h"
#define ledcon 0xf0000000
#define uart_bps  115200


uint8 rcv_data[8];          //UART0接受数据缓冲区
volatile uint8 rcv_new;    //接受新数据标志
/******************************
delay()
*******************************/
void delayns(uint32 dly)
{
// uint32 i;
  for(;dly>0;dly--)
           ;
}

/*
uart0_int()
*/
void uart0_init(void)
{
  uint16 fdiv;
  U0LCR=0x83;            //8bit enable 除数
  fdiv=(Fpclk/16)/uart_bps;
  U0DLM=fdiv/256;
  U0DLL=fdiv%256;
  U0LCR=0x03;          //8bit disable 除数
  }
  


#if 1
void   __irq IRQ_UART0(void)    //uart0接受中断
{
uint8 i;
if((U0IIR&0x0f)==0x04)  //判断UART0接受数据可用标志
   {
    rcv_new=1;
    for(i=0;i<8;i++)
     rcv_data=U0RBR;
    }
   
VICVectAddr=0;
}
#endif

#if 0
void uart0_rcvbyte(void)
{
uint8 i;
while((U0LSR&0x01)==0);
  rcv_new=1;
  for(i=0;i<8;i++)
      rcv_data=U0RBR;
}
#endif

int main (void)
{// add user source code 
   uint8 i;
   char disp_buf[30];
   volatile uint32 aAA;
   
   
PINSEL0=0x00000005;            //设置IO连接到UART0   ,p014为io
PINSEL2=PINSEL2&0xfffffff7;      //P1管脚选择设置    ,p16:25为IO
//选中电子开关
IO0DIR=0x4000;      //p014 output
IO1DIR=0x00e00000;  //p121:23 output
IO0CLR=0x4000;      //p014 output L
IO1CLR=0x00e00000;  //p121:23 output L选中电子开关X3Y3,及J4

   uart0_init();
#if 1
U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8字节
U0IER = 0x01;                        // 允许RBR中断,即接收中断

VICIntSelect=0x00000000;     //VIC_uart0中断初始化
VICVectCntl0=0x20|6;
VICVectAddr0 = (int)IRQ_UART0;
VICIntEnable=1<<6; 
#endif   
//uart0_rcvbyte();   
   IO2DIR=ledcon;
   T0PR=0;
   while(1)
   {
    if(rcv_new==1)   //接受中断等待
    {
     for(i=0;i<8;i++)
     disp_buf=rcv_data;
    }
    }
    return 0;
}

问题:
   我用的模板是周立功的ARM EXecutable image for lpac2200,并把修改设置系统模式堆栈处的代码为“MSRCPSR_c, #0x5f”也改了,即使能IRQ 中断。
   1)这个程序在接受数据时进不了中断,不知道问题出在哪里?
   (在LPC2214的RXT0脚上用示波器能检测到我发送的数据(数据>=8位),但是就是芯片里中断不处理。)
   2)我用查询方式时不管发送什么数据,都能收到两次,但是这个数据与我发的数据不一样。
   (比如说发送12345678,第一次接受为1F#D22#3,第二次接受34567888,“#”表示乱码)

相关帖子

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

本版积分规则

2

主题

4

帖子

0

粉丝