This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LS3137 中断问题

Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137

你好!

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

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

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

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

 

谢谢

  • weibin,

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

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

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

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

    谢谢

  • ken,你好

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

     

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

       

  • weibin,

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

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

    你在确认一下哦。

    谢谢

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

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

  • yuyin,

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