打印
[ZLG-ARM]

2220死在串口中断了?该死的RLS

[复制链接]
2041|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有意思|  楼主 | 2007-3-23 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
liujigan| | 2007-3-23 16:24 | 只看该作者

累了呗

使用特权

评论回复
板凳
有意思|  楼主 | 2007-3-23 18:45 | 只看该作者

???

什么意思

使用特权

评论回复
地板
有意思|  楼主 | 2007-3-25 11:44 | 只看该作者

死在中断里了

使用特权

评论回复
5
hotpower| | 2007-3-25 12:39 | 只看该作者

提高波特率或减小包长或增大字节发送间隔

使用特权

评论回复
6
有意思|  楼主 | 2007-3-25 14:09 | 只看该作者

和上位机联机

波特率协议定的是4800,不好改,
增加字节发送间隔,我是在收数据时死在中断里的
发数据不在中断中发送,
while((U0LSR & 0x40) == 0);
这样判断发送完成的
isr程序

  onled1;
  disableirq();
    ...
  offled1;  //放在这,灯一直都是灭的
  endableirq();
  offled1;  //放在这,运行N多小时后,就死机了,灯不灭,主要是在整点
            //调时时,数据包较长,

使用特权

评论回复
7
有意思|  楼主 | 2007-3-25 22:03 | 只看该作者

to hotpower

我提高波特率试过了,我用SSCOM向目标发送6字节长度的巡检帧,波特率38400,定时发送,间隔100ms,目标收到后回送一帧8字节的应答,运行了一个下午没问题,刚刚晚上10点多我发现他死机了,根据灯判断还是死在中断里了,很郁闷,感觉长时间运行到某个时刻就会死,
我刚刚变态的把SSCom中定时发送间隔调为10MS,一发,不到1s就死??

使用特权

评论回复
8
hotpower| | 2007-3-25 23:55 | 只看该作者

编程方法有问题~~~

最好不要这样:
while((U0LSR & 0x40) == 0);
否则应该配合看门狗。

如无狗,则应该用:
for(int i = 0;(i < 0x...) && ((U0LSR & 0x40) == 0);i++);

或:
for(int i = 0;i < 0x...;i ++) {
  if (U0LSR & 0x40) break;
}

我认为还是收发都用中断+FIFO+缓存较好。

4800要死机真是太有意思了~~~
1个字节收发几乎1ms时间,真是“抽袋烟”都不耽误事情~~~

使用特权

评论回复
9
有意思|  楼主 | 2007-3-26 14:23 | 只看该作者

死在中断返回前

问题是死在中断返回前
void UART0_ISR (void)
{
uint32 i;
uint32  bak;

ON_LED4();
    
Txd485_UART0();
disable_IRQ();
bak = VICIntEnable;
VICIntEnClr = (1 << 5) |(1 << 13) | (1 << 7) |(1 << 6));

/*
中断处理
*/

VICIntEnable = bak;
VICVectAddr = 0x00;
//OFF_LED4();    //放在此处,即使死机,led4也是灭的
enable_IRQ();
Rcv485_UART0();
OFF_LED4();      //放在此处,死机时,led4常亮,

使用特权

评论回复
10
liujigan| | 2007-3-26 14:56 | 只看该作者

re

(1)是不是2220吸收电流有点大,常在极限附近,建议加一些扩展IC解决。
(2)电源干扰,建议加兀形滤波

使用特权

评论回复
11
有意思|  楼主 | 2007-3-26 15:12 | 只看该作者

不是吧

不会是硬件上的问题吧,是485通信模式,

使用特权

评论回复
12
hotpower| | 2007-3-26 21:42 | 只看该作者

UART0_ISR()真是一团糟~~~不知你想干什么???

使用特权

评论回复
13
有意思|  楼主 | 2007-3-27 08:32 | 只看该作者

书上的

isr都是按照深入潜出书上的模式写的,
中间的良灯是自己调试加的,

使用特权

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

本版积分规则

79

主题

331

帖子

0

粉丝