搜索
bottom↓
回复: 8

28335 SCI做485通信时连续接受数据出现进不了中断现象

[复制链接]

出0入0汤圆

发表于 2015-8-2 21:54:59 | 显示全部楼层 |阅读模式
用28335的SCIA接个MAX3485,用GPIO40来控制收发位,来进行485通信。功能很简单,9600波特率,接受上位机指令,处理后进行回复相应指令。
编码下载程序后,一收一发都完全正常。但当上位机以30ms周期发送指令时,一开始收发也正常,但发送一会后发现串口进不了中断了,其他程序还正常(定时器0有个1s的闪灯程序)。
调试了几遍,有时收发1万多帧时出现进不了中断现象,有时是2万多帧出现,但都会出现问题。

////////////////////////////////////////////
SCI初始化,用普通收发模式,没有用FIFO,接受用中断
//////////////////////////////////////////
void InitScia()
{
  ScibRegs.SCICCR.all = 0x0007;
ScibRegs.SCICTL1.all = 0x0003;
ScibRegs.SCICTL2.all =0x0002;  //使能接受中断
   SciaRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 37.5MHz.
   SciaRegs.SCILBAUD    =0x00E7;
ScibRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
}
//////////////////////////////////////////
SCI的GPIO设置、中断设置应该都没问题,中断程序里PIEACK也都清了,否则一开始不会正常。程序在单位没拷过来,就不粘了。
//////////////////////////////////////////
发现问题后我在编译器里观察了SCI的寄存器,发现进不了中断后SCIRXST的 第4位(FE)和第7位(RX ERROR)为1,正常情况下应该为0

根据手册里显示FE位是因为在接受串口时没有收到停止位,从而出现了接受错误。
于是我想这出现错误时将错误标志位修改了,根据手册,要清标志位需要用清SW RESET寄存器((SCICTL1)的第5位)才可以。

于是我修改了InitScia函数,使发生接受错误时也能进接受中断函数,修改如下:
////////////////////////////////////////////
SCI初始化,接受错误中断
//////////////////////////////////////////
void InitScia()
{
  ScibRegs.SCICCR.all = 0x0007;
ScibRegs.SCICTL1.all = 0x0003;
ScibRegs.SCICTL1.bit.RXERRINTENA = 1; //接受错误中断
ScibRegs.SCICTL2.all =0x0002;  //使能接受中断
   SciaRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 37.5MHz.
   SciaRegs.SCILBAUD    =0x00E7;
ScibRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
}
///////////////////////////////////////////////
并在中断处理函数里增加请SW RESET寄存器程序
///////////////////////////////////////////////
interrupt void SCITXINTA_ISR(void)   
{
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
  if(SciaRegs.SCIRXST.bit.RXERROR == 1)
{
        SciaRegs.SCICTL1.bit.SWRESET = 0;
}       
……
……
下面是正常接受程序
……
……
}
修改后测试,上位机连续发送,发送一会的确进错误中断这代码里来了,SWRESET清零后也果然将FE和RX ERROR错误清零了,但是我继续发,还是进不了中断!
接下来又使其他几种方法,还是一样,而且发现跟上位机发送周期有关,发送周期为1s时就没出现过错误,发送周期为15ms时,马上就出现错误。
没办法继续研究手册,发现SWRESET 位置1时是直接复位SCI,于是又把上面中断函数里的代码修改了下
SciaRegs.SCICTL1.bit.SWRESET = 1;//复位SCI
测试后发现出现错误后,进中断,然后复位SCI后又可以继续工作了。

虽然最后通过修改代码可以工作了,但时还有不明白以下问题,看哪位知道的赐教下,谢谢
问题1:为什么会出现接受不到停止位的现象呢?DSP485的接线与上位机接线很紧,不到20cm?
问题2:为什么出现RX ERROR接受错误后就不能进中断了呢?
问题3:为什么将FE和RX ERROR错误清零后还是进不了中断,到底是什么原因导致进不了中断的呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2015-8-2 22:14:36 | 显示全部楼层
上位机每次给DSP发送几个字节呢?会不会比30ms多?

出0入0汤圆

 楼主| 发表于 2015-8-2 22:32:28 | 显示全部楼层
596142041 发表于 2015-8-2 22:14
上位机每次给DSP发送几个字节呢?会不会比30ms多?

就8个字节,不会大于30ms

出0入0汤圆

发表于 2015-8-2 22:38:04 | 显示全部楼层
zhoujun19860612 发表于 2015-8-2 22:32
就8个字节,不会大于30ms

你上位机在发送数据时是连续发送还是每个字节之间有一定的间隔时间呢。

出0入0汤圆

发表于 2015-8-3 09:24:54 | 显示全部楼层
楼主做了这么多的测试,不过我感觉是白做了。因为脑子还是糊涂的。

问题1:为什么会出现接受不到停止位的现象呢?DSP485的接线与上位机接线很紧,不到20cm?
-->你怎么确定就只是接收不到停止位?接线很近很紧就一定能保证通讯不出错?电源干扰呢?外部设备干扰呢?软件设置不当呢?

问题2:为什么出现RX ERROR接受错误后就不能进中断了呢?
-->要是还是跟错误发生前一个吊样,那,要这个错误提示干嘛用?

问题3:为什么将FE和RX ERROR错误清零后还是进不了中断,到底是什么原因导致进不了中断的呢?
-->你确定仔细读datasheet了吗?(1)已经清楚的写明RX Error是好几个ERROR的或逻辑。RX Error必须通过SW软件复位来清除。(2)SW复位后要退出复位才能正常工作。
BTW,单片机进入复位状态能正常运行代码吗?

出0入0汤圆

 楼主| 发表于 2015-8-3 10:47:52 来自手机 | 显示全部楼层
596142041 发表于 2015-8-2 22:38
你上位机在发送数据时是连续发送还是每个字节之间有一定的间隔时间呢。 ...

连续发的

出0入0汤圆

 楼主| 发表于 2015-8-3 11:04:51 来自手机 | 显示全部楼层
steaven2000 发表于 2015-8-3 09:24
楼主做了这么多的测试,不过我感觉是白做了。因为脑子还是糊涂的。

问题1:为什么会出现接受不到停止位的 ...

非常感谢认真的回答
1:错误码的其他位寄存器都看了,都是正常的。
2:错误发生前看了寄存器,没有错误
3:(1)跟1回答一样
(2)那如果还要复位SCI,为什么还要清sw呢,我直接复位不是也可以吗。

还有想知道是不是有了错误码后就不能进中断了,因为看官方和网上例程也都没有对错误码进行处理,那长时间通信下如果遇到了错误码不是就没法工作了嘛。谢谢

出0入0汤圆

发表于 2015-8-3 11:11:21 | 显示全部楼层
zhoujun19860612 发表于 2015-8-3 11:04
非常感谢认真的回答
1:错误码的其他位寄存器都看了,都是正常的。
2:错误发生前看了寄存器,没有错误

MCU厂家要是都有你这么聪明的话就好了,所有的MCU都无需复位引脚了,因为都可以接到VCC上,一上电自己就复位了是吧?

出0入0汤圆

发表于 2017-11-6 19:02:08 | 显示全部楼层
额,我也遇到了,感觉好蠢,TI就不能超时自动复位?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 07:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表