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.

关于SCI以DMA方式发送的疑问

Other Parts Discussed in Thread: TMS570LS3137

最近在验证SCI+DMA方式发送,参考了范例MIBSPI+DMA,以及在论坛上相关帖子,主要参考:www.deyisupport.com/.../45136.aspx      

首先我将要实现SCI+DMA通讯,使用的芯片是TMS570LS3137PGE,使用DMA的channel 0

我遇到的问题是,在DMA方式下,SCI发送不出数据

main函数如下:

其中senddata是一个有200个元素的数组,第67行的程序是让485处于发送状态

相关子函数如下:

子函数主要参范例MIBSPI+DMA和上面链接TI员工的回答

下面是TMS570LS3137的USER GUIDE:

USER GUIDE显示只要使能SET TX DMA和SET TX INT就可以进行DMA通讯了,我已按照上面说的去做,但通讯始终没能成功,这是为什么?帮我看看我的程序到底错在什么地方了,万分感谢。

注:之前我验证过用DMA方式将一个数组的数据传输到另外一个数组,并用SCI输出,这个程序就是在这个基础上改的。我程序以附件形式上传

UART.rar
  • TI的大哥,请尽快给我一个答复好吗,真的很急,谢谢~~~

  • Mu,

      不知道你的程序调出来了没有?我看你的程序里面DMA的channel选的是31,你用的是什么板子调试的?是我们的EVM还是自己做的板子?

    用的是SCI/LIN接口还是另外一个SCI?如果是SCI/LIN的,应该选channel29,如果是SCI的则选31.

    另外你可以试着将DMA发送接收数据设为32bit。

    谢谢

  • Hi Ken

            程序还是没有调试出来,我用的是自己的板子,用的是SCI,另外我将DMA发送接收数据改为32bit,出现一个很奇怪的现象,我通过DMA只传输了一个元素为200的数组,但SCI发送出的数据全部是0,并且会一直发送,不会停止。

            我还做过一个实验,同样的程序,我将 “源地址”设为一个变量地址,“目的地址设为”另一个变量地址,传输数量改为“1”,是可以将“源地址”的给“目标地址”的,我想这样是不是可以验证我的DMA配置的没有问题?如果是这样的话那就是说SCI模块配置的有问题,我看TMS570LS3137 USER GUIDE上说“只要使能SET TX DMA和SET TX INT就可以进行DMA通讯了”,我也按照这样做的,那问题出在哪里呢?

           期待您的答复,谢谢

  • Mu,

      你上传的文件我打开都是乱码,看不了。

    我上传了一个我以前做测试的例程,是基于SCI/LIN + DMA 的,你可以参考一下。

    由于我现在手头上没有3137的板子,没法新建项目测试。你先试试看。

    谢谢

    ken

  • Ken

            问题已经解决,我主要修改如下:

            1、将发送和接受数据设为32bit

            2、将frame count改为dsize,element count改为1

            3、数组定义的数据类型改为uint32

            以上供遇到同样问题的朋友参考。

            但问题并没有完全解决,新的问题又来了,我将数组的数据类型改为uint8,发送和接受数据设为8bit(因为SCI的发送和接受寄存器是8bit的,将来产品进行数据通讯的时候也是一位一位的传送的),结果没有数据从串口出来,这是为什么???如果我保持数组数据类型不变,发送和接受数据设为32bit,串口发出的数据所在数组的位置是4的整数倍(数组的第4个、8个、12个、16个。。。。。。),后面的一个问题很好理解,您能帮我分析一下第一个问题吗,为什么不能一个字节一个字节的传输???谢谢。

  • Ken

            我本来发送和接受数据设为8bit,你给我的建议是将发送和接受数据设为32bit,你为什么会给出这样的建议?我今天又看了一天还是没找到原因。。。晕死了,实在不知道该如何改程序。。。

  • Mu,

      说实话,当初我在调试SCI + DMA的程序是也遇到这个问题。我在RM48上面调试时,发送和接收都采用8bit是没有问题的,但是在TMS570上面,程序就一直不能正常工作,得把它改成32bit。

       后来我自己想了想,这个应该是和芯片的大端小端的存储模式有关。RM48是小端模式,TMS570是大端模式。不过这个也只是我自己的想法。仅供参考。

    谢谢