打印

大家来帮帮我吧!

[复制链接]
1675|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
e08610318|  楼主 | 2013-5-31 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近自己在写一个UART口的驱动,工程事先自己已经移植好了ucosii操作系统,芯片LPC1765的启动代码也是自己写的,PLL部分初始化已经完成,除此外,工程没有其他
的内容。

现开始写UART驱动,写完后,UART0工作是正常的,但是UART2怎么弄都不行。UART2是按照UART0模板,改改寄存器和相关变量写的,NVIC部分经过测试是正常的(自己在调试的时候人为修改相应 interrupt set pend寄存器的位后,是能够进入串口2中断服务程序的),此外,串口2引脚功能设置检查没问题,电源PCONP也开了。到底还有哪个地方我忽略了?我好郁闷啊....纠结了差不多一天了,还没调出来......

以下是代码


/************************************************************
*函数名  InitUart2
*
*
*描述                初始化串口2设备
*
*                                              【使用方法】
*                                 1.在lpc17xxconfig.h设置宏UART0_BPS
*                                         选择波特率有:2400、 4800、 9600、 115200
*                                 2.包含头文件include.h —— "../include.h"         
*                                 3.调用该语句
*
*参数
*
*
*返回
*
*************************************************************
*/
void InitUart2(void (*callback)(void))
{
#if UART2_USE == 0       
        while(TRUE);
#else       
  //数据初始
        INT16U ulFdiv;
        bspUart2Info.tail = 0;
        bspUart2Info.head = 0;
        bspUart2Info.rcvingData = 0;
        bspUart2Info.noDataCnt  = 0;
        bspUart2Info.maxBuffer         = UART2_FIFO_NUM;

        if(bspUart2Info.uartData != NULL)
          free(bspUart2Info.uartData);

        bspUart2Info.uartData = (byte*)malloc(UART2_FIFO_NUM*sizeof(byte));

        bspUart2Info.callBack = callback;  //回调函数地址赋值

        PCONP |= (1ul<<24);

  PINSEL0 = PINSEL0 & (~(0x0F000000));                         //相关位置清0
        PINSEL0 = PINSEL0 | (0x05000000);                                                                                                                 //设置UART功能

        //8个数据位,1个停止位,无校验
        U2LCR  = 0x83;                                               //允许设置波特率            
        ulFdiv = (PCLK_MHZ*1000000 / 16) / UART2_BPS;                //设置波特率                  
        U2DLM  = ulFdiv / 256;                                       //高8位
        U2DLL  = ulFdiv % 256;                                              //低8位
        U2LCR  = 0x03;                                               //锁定波特率                  
        U2FCR  = 0x07;                                               //使能FIFO,设置1个字节触发点
                                     
        ISRRemap(uart2Isr, UART2_EXCEPT_NUM, ISR_PRIO_7, ISR_EN);    //使能中断
        U2IER  = 0x01;                                               //使能接收中断
#endif
}



/***************************************************
*函数名   uart2Isr()
*
*描述           串口2中断处理程序
*                  
*
*
*
*参数
*
*返回
*
*****************************************************
*/
void uart2Isr(void)
{
#if UART2_USE == 1
  INT8U temp;
  OSIntEnter();
          
  while ((U2IIR & 0x01) == 0)                      //判断是否有中断挂起      
  {                                       
    switch (U2IIR & 0x0E)                                //判断中断标志                                                
          {                                             
      case 0x04:     
                          //有数据                                                              
        temp = U2RBR;                       //提取数据
              bspUart2Info.rcvingData = 1;        //标识正在接收数据
                                bspUart2Info.noDataCnt  = 0;                                 //无数据计时清0
        BspUartDataPush(&bspUart2Info, temp);
        break;

      case 0x0C:                            //字符超时中断               
        while ((U2LSR & 0x01) == 0x01)            //判断数据是否接收完毕                           
        temp = U2RBR;
        break;
                                    
      default:
        break;
      }
  }
        temp = temp;  //防止编译器警告
  OSIntExit();
#endif
}

相关帖子

沙发
e08610318|  楼主 | 2013-5-31 20:21 | 只看该作者
我勒个去,刚刚查出来了,, PINSEL搞错了,太粗心了.......
浪费了我这么多时间。
这些分就白送你们了....

使用特权

评论回复
板凳
SunFans| | 2013-6-2 09:24 | 只看该作者
哈哈,那我就接分来了……;P

使用特权

评论回复
地板
jlass| | 2013-6-3 09:34 | 只看该作者
接分

使用特权

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

本版积分规则

个人签名:你可能不知道今天所做的事情会对未来有多大的干预能力!

67

主题

310

帖子

12

粉丝