TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS570LS3137 中断问题

你好!

      有关该开发板的串口中断问题。我重新看了手册和HALCoGen生产的sci的中断代码。   

      1、对于发送中断,我在HAL的SCI2中使能了发送中断,VIM中使能LIN1 High。我在main函数中调用sciSend()函数的话,程序没进入中断函数就把数据发送了,在主函数不调用sciSend()函数,没有进入中断,数据发不出去。

      2、对于接受中断的话,在HAL的SCI2中使能了接受中断,VIM中使能LIN1 High。我用串口调试助手向板子发数据,只用在main函数中调用sciReceive()函数才能进入中断,接受到数据。

      现在 还是搞不明白,希望能得到讲解。由于HAL中帮助文档中没有相关SCI中断的例程,希望能上传一个看看

 

谢谢

Ken Wang:

weibin,

  关于SCI模块中断功能的理解,我的看法是这样的:

1. 关于发送中断,首先你需要在主程序里面调用SciSend()函数,然后他会触发在sci.c里面定义的void linHighLevelInterrupt(void),如果你定义的是LIN1high的话,low对应的是另一个,这都是根据你的选择自动生成。进入到这个函数以后,系统会把你设置的需要发送的数据搬到SCI的TD的发送缓存寄存器中,然后SCI把数据立即发出,系统同时进入scinotification()函数。你所的进入函数之前就把数据发出了,指的是应该是在进入scinotification之前数据被发出。

2. 关于SCI的接收中断,在主程序中不需要调用SciReceive()函数,你只需要使能接收中断,然后保证SCI端口参数设置和你的超级终端的设置一样,无非就是波特率,停止位和校验位。这些都对了的话,你在终端上发送数据,系统是会自动跳进void linHighLevelInterrupt(void)函数,然后判断标志位,接着进入接收中断处理函数。

如果不清楚的地方,可以再讨论。

谢谢

weibin chi:

回复 Ken Wang:

ken,你好

        1、发送中断,在主函数中调用SciSend()函数,那么我认为就用HALCoGen生成的sci.c的代码来说,不需要进入scinotification()函数就可以发送数据了,那这不是没必要写scinotification()函数了。

 

        2、关于sci的接受中断,我实验了很多次,如果主函数中不调用SciReceive()函数的话,程序进不了接受中断函数,即收不到数据,只有主函数调用SciReceive()函数,才能将终端发来的数据接受。这个跟你说的不一样呀

   

Ken Wang:

回复 weibin chi:

weibin,

1. SCInotification()函数还是建议你加上去的,以为SCI的发送中断的本来就是在于你把数据发出去以后,系统给你一个中断做后续的操作。如果你觉得不需要做其他的操作,当然可以不用。

2. 我在你的另外一个帖子里面上传了一个关于3137做sci通信发送和接收中断的实验。里面很清楚的可以看到接收中断时,主程序不需要调用sciReceive函数的。

你在确认一下哦。

谢谢

Xiaomin Wang:

回复 weibin chi:

当你在sciInit中将sci2的rcv设定为中断模式后,再调用SciReceive(),则SciReceive()具有初始化g_sciTransfer[1]的作用,最重要是g_sciTransfer[1].length被赋了一个不为0的值,只有当g_sciTransfer[1].length>0时程序才可以在进入linhighlevelinterrupt后再进入scinotification。不知道这样说能不能解决你的疑问。

yuyin tan:

回复 Ken Wang:

不好意思,楼主,借用一下地盘,想劳驾 ken wang能去"TMS570ls3137的RAM ECC 初始化“的那个帖子回复一下吗?谢谢!

Ken Wang:

回复 yuyin tan:

yuyin,

不好意思,前段时间在休假,现在可以帮你解答。

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LS3137 中断问题
分享到: 更多 (0)