打印

lpc2366的UART2口,死活都不行。

[复制链接]
3699|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tzg74500|  楼主 | 2010-6-17 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
KEIL版本,UVSION 4.03A,
程序如下,

#define uart2_c
#include "lpc23xx.h"
#include "uart2.h"
#include "ctrl.h"
#include "delay.h"

extern uint32 Fpclk;

void UART2_Init(uint32 baudrate)
{
        uint32 Fdiv=0;
       
        PCONP|=1<<24;

        PINSEL0&=~(1<<23);                                                                        //rxd2
        PINSEL0|=1<<22;

        PINSEL0&=~(1<<21);
        PINSEL0|=(1<<20);                                                                                //txd2

        U2LCR=0x83;                                                                                               
   Fdiv=(Fpclk/baudrate)/16 ;                                                       
   U2DLM=Fdiv / 256;                                                       
   U2DLL=Fdiv % 256;
        U2LCR=0x03;                                                                                               
   U2FCR=0x07;                                                                                               
   
   U2IER=1;                                                                                                        //打开接收中断
   U2FCR=0x01;                                                                                                //接收FIFO为1个字节深度就产生中断
   
        VICIntSelect&=~(1<<UART2_INT);         
        VICVectPri28  = 20;                                       
        VICVectAddr28 = (unsigned long)IRQ_UART2;       
        VICIntEnable |= 1<<UART2_INT;
}

void UART2_Send_Byte(uint8 dat)
{
        U2THR = dat;
        while ((U2LSR & 0x40) == 0);                        // 等待数据发送完毕
}

void UART2_Send_Buf(uint8 *dat,uint16 len)
{
        uint16 i=0;

        for(i=0;i<len;i++)
        {
                UART2_Send_Byte(*(dat+i));
        }
}

__irq void IRQ_UART2(void)
{
        uint32 IIR        = 0;
        uint8 temp=0;
        IIR=U2IIR;

        switch (IIR & 0x0e)
        {
                case 0x04:                                                                //接收中断
                        temp=U2RBR;
                        break;
                default:
                        break;
        }

        VICVectAddr = 0x00;                                               
}

#undef uart2_c



我测试过,把该程序里面的 UART2寄存器换成UART0和 UART1的,是可以的 ,,但UART2和UART3就是不行,妈妈的,不知道是怎么回事。。。。。。。。

相关下载

相关帖子

沙发
arm86| | 2010-6-17 18:14 | 只看该作者
本帖最后由 arm86 于 2010-6-17 20:17 编辑

NXP的官网上还没有该芯片的用户手册,莫非里面还有古怪?

使用特权

评论回复
板凳
mcu123AD| | 2010-6-17 18:39 | 只看该作者
程序应该是对的。
在主程序中可以主动发送一下,看看能否收到数据,或是看TXD2的波形。。。

使用特权

评论回复
地板
tzg74500|  楼主 | 2010-6-17 20:58 | 只看该作者
就是发送不了。。。。。看过了,

使用特权

评论回复
5
arm86| | 2010-6-17 22:12 | 只看该作者
我猜测一下:难道PCONP与PINSEL0在串口初始化之后还被重新赋值过,而且是用等号的赋值方式?当然,只是我的猜测。貌似我以前犯过这种低级错误。

另外,可以试一下PINSEL0的赋值,现在是0101的,可以试试1010或者1111。我没有找到LPC2366的用户手册,天知道有没有变动。

再不然,看看芯片上的尾缀与生产日期吧,啥版本的,是不是样片什么的,没准串口2串口3就是不行呢。

使用特权

评论回复
6
tzg74500|  楼主 | 2010-6-17 22:14 | 只看该作者
主要是软件仿真就通过不了,。。。。。。PINSEL0和PCONP都看过了,没问题。。。。
妈妈的,我用ADS做了多少UART2,3程序,从来不出问题,这才用KEIL UVSION4,2,3就是不行。。

使用特权

评论回复
7
arm86| | 2010-6-18 10:45 | 只看该作者
如果是编译器的问题,楼主应该较容易就测试出来吧?

使用特权

评论回复
8
jia_killer| | 2010-8-5 14:43 | 只看该作者
可以确信,LPC23xx的UART2模拟测试不行,但是实际测试OK!

使用特权

评论回复
9
ForNow| | 2013-3-31 16:28 | 只看该作者
:)

使用特权

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

本版积分规则

12

主题

25

帖子

1

粉丝