打印
[ZLG-ARM]

LPC2138的串口接收错误~~~撞墙~~

[复制链接]
2681|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dspinxd|  楼主 | 2007-2-10 17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仿照HotPower的《LPCARM串口无限FIFO应用举例及祥解》改写.
只有接收使用中断方式!我用UART1接modem。如果发送的PPP包为23bytes。
7E FF 7D 23 C0 21 7D 23 7D 21 7D 20 7D 28 7D 23 7D 24 C0 23 22 48 7E
接收到的也仅为23bytes。
7D 34 7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 7D 25 7D 26 52 7D 38 7D 30 
事实上不应该是23bytes,而是多于23bytes的。串口收不到所有,只能在下一次接收剩余的。
为什么不能完整接收缓冲中的字符呢?
郁闷死啦!
U1FCR = 0xc3;
U1IER = 0x05;    
    

void UART1_Exception(void)
{

    OS_ENTER_CRITICAL();
    switch (U1IIR & 0x0f)
    {

    case 0x06:
        switch (U1LSR)
        {
        case 0x03:
            break;
        }
        break;

    case 0x04:
    case 0x0c:
        while (U1LSR & 0x01)
        {
        p_Uart1Wr %= MAX_UART1_BUFFER;

        uart1_Buf[p_Uart1Wr++] = U1RBR;    
        uart1_Useful_Data++;
        if (uart1_Useful_Data > MAX_UART1_BUFFER)
        {
            uart1_Useful_Data = MAX_UART1_BUFFER;    
        }
        uart1_Interrupt = TRUE;
        }
    
    default:
        break;

    }

    VICVectAddr = 0x00;
    OS_EXIT_CRITICAL();
}

相关帖子

沙发
hotpower| | 2007-2-10 18:15 | 只看该作者

撞塌了~~~我闪开~~~

倒塌了~~~串口从不和我作对~~~

使用特权

评论回复
板凳
dspinxd|  楼主 | 2007-2-10 18:42 | 只看该作者

郁闷~为什么串口就是要和我作对~

使用特权

评论回复
地板
hotpower| | 2007-2-10 22:57 | 只看该作者

倒塌了~~~网上我的例程很多,拿来即用.改编肯定要有功力~~~

给你几个例程,都是源码,而且都是网上帖图.

LPCARM之GPS应用及使用状态机解码祥解

LPCARM之RTC应用举例及日期校验和星期自动调节祥解

以上2个例程都含有串口双向通讯,即接收命令和命令的执行.

本来想发个IAP全攻略版,这样就可以完成好些人的梦想~~~

1.flashrom的2次写入技术.
2."eeprom计数器","eeprom数据".
3.hex源码公开下的2次解密及还原技术.
4.远程注册并开放用户hex源码公开下的真正程序.
n.........

由于本源码包含和涉及的方面很多,故只准备公开发表一些最基本的~~~

使用特权

评论回复
5
hotpower| | 2007-2-10 23:11 | 只看该作者

倒塌了~~~我海量数据传送时把串口通都搞蒙噔了~~~

可菜农的"无限FIFO"还没倒塌~~~最后只好自己编上位机软件,而且也放弃了CVI~~~因为它的CPU占有率太高了~~~
哈哈,主要是菜农的"无限FIFO"水利过猛将其灌倒塌了~~~

使用特权

评论回复
6
hotpower| | 2007-2-10 23:14 | 只看该作者

注意上图的收发都是14039字节~~~

使用特权

评论回复
7
xiajiawen| | 2007-2-12 12:38 | 只看该作者

14039字节还显得小了

菜农有没有试过,上位机海量的发送上数至LPC2200,115200BPS的波特率,发送如下数据:00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff,发送周期设为10ms,LPC2200接收用FIFO(我跑UCOS),看多长时间会倒塌?

我用的串口工具:AccessPort V1.33,这个工具相当不错

我这塌得可是没有规律,问题正在查找中...

出现的情况一般是:
进入如下中断

;取指令中止
PrefetchAbort
        B       PrefetchAbort

;取数据中止
DataAbort
        B       DataAbort

;快速中断
FIQ_Handler
        STMFD   SP!, {R0-R3, LR}
        BL      FIQ_Exception
        LDMFD   SP!, {R0-R3, LR}
        SUBS    PC,  LR,  #4

使用特权

评论回复
8
xiajiawen| | 2007-2-12 13:46 | 只看该作者

关于串口FIFO接收处理时出现DataAbort的问题

程序不做任何修改,以上的测试条件不变,SmartARM2200换用不同的PACK(LPC2210,LPC2214,LPC2220),出现DataAbort的频率不同,LPC2210是原配的,最容易出现DataAbort,LPC2214稳定些(在调试LCD时亦出现过LPC2214比LPC2210要稳的现象,最终的解决方法是某些电路做了一定修改)

使用LPC2210,改变一下条件,计算机串口发送周期设改为100ms,测试接收几十万数据不再出现DataAbort

LPC22XX的脾气,还没有摸透......

使用特权

评论回复
9
hotpower| | 2007-2-12 17:54 | 只看该作者

快速中断没必要保护现场~~~

实际我也是发送的32KB.
发送间隔小出错几率肯定大,这估计和上位机也有很大关系.
在应用中界面和串口程序都是自己做的,海量传送就没问题.
CVI不能满足需要.

使用特权

评论回复
10
xiajiawen| | 2007-2-12 20:01 | 只看该作者

仔细看UART0相关的寄存器,做了修改,现有了很大改善,测试

使用特权

评论回复
11
xiajiawen| | 2007-2-12 20:07 | 只看该作者

已测试接收几百万数据没有问题,吃了饭再继续....

使用特权

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

本版积分规则

6

主题

18

帖子

1

粉丝