搜索
bottom↓
回复: 5

DSP SCI串口接收和发送数据错误

[复制链接]

出0入0汤圆

发表于 2015-9-23 15:43:32 | 显示全部楼层 |阅读模式
本帖最后由 伍师傅32 于 2015-9-23 15:49 编辑

开开心心写完程序,结果发现竟然最简单的串口通信程序也一直调试通过不了,真是伤心啊。

用仿真器看,能够进入串口接收中断,可是接收的数据完全不对,用它发送数据,也不成功。

现把程序贴在下面,恳请论坛里的朋友帮忙找找原因。

  1. void main(void)
  2. {
  3.         InitSysCtrl();
  4.         DINT;
  5.         InitPieCtrl();
  6.        
  7.         /*初始化中断向量表*/
  8.         InitPieVectTable();
  9.        
  10.         EALLOW;                                                                       
  11.         PieVectTable.TINT0 = &cpu_timer0_isr;
  12.         PieVectTable.SCIRXINTA = &scia_rx_isr;
  13.         EDIS;
  14.        
  15.         /*初始化相关外设*/
  16.         SCI_Init(SCIA, B9600);
  17.         SCI_Send_One_Char(SCIA, 'h');
  18.         SCI_Send_One_Char(SCIA, 'e');
  19.         SCI_Send_One_Char(SCIA, 'l');
  20.         SCI_Send_One_Char(SCIA, 'l');
  21.         SCI_Send_One_Char(SCIA, 'o');
  22.         SCI_Send_One_Char(SCIA, '\n');

  23.         /*外设中断开关*/
  24.         IER |= M_INT9;
  25.         PieCtrlRegs.PIEIER9.bit.INTx1 = 1;                        //使能SCIARX中断
  26.        
  27.         /*使能全局中断*/
  28.         EINT;
  29.         ERTM;

  30.         while(1)
  31.         {
  32.                 MAX706_Feed_Dog();
  33.         }
  34. }

  35. /*
  36. * 说明:SCIA的接收中断
  37. */
  38. interrupt void scia_rx_isr()
  39. {
  40.         Uint16 cData;

  41.         cData = SciaRegs.SCIRXBUF.all;
  42.         SCI_Send_One_Char(SCIA, cData);

  43.         PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
  44. }

  45. /*

  46. * 说明: 配置串口
  47. * 输入:NO - 串口端号,可以选择SCIA、SCIB、SCIC
  48. *      baudrate - 串口的波特率
  49. * 注: TMS320F28335的串口输出引脚可以有多个选择,在引脚配置中进行对应设置即可
  50. */
  51. void SCI_Init(SCI_TypeDef NO, SCI_BaudrateTepeDef baudrate)
  52. {
  53.     volatile struct SCI_REGS *SCIx;


  54.     /*引脚配置*/

  55.         switch(NO)
  56.         {
  57.             case SCIA:
  58.             {
  59.                 EALLOW;
  60.                 GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;
  61.                 GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;     //设置端口上拉

  62.                 GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3;   //RX脚输入

  63.                 GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;    //选择为SCITXDA功能
  64.                 GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1;    //选择为SCIRXDA功能
  65.                 EDIS;

  66.                 SCIx = &SciaRegs;
  67.                 break;
  68.             }
  69.             case SCIB:
  70.             {
  71.                 EALLOW;
  72.                 GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;
  73.                 GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;     //设置端口上拉

  74.                 GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3;   //RX脚输入

  75.                 GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 2;     //选择为SCITXDB功能
  76.                 GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 2;    //选择为SCIRXDB功能
  77.                 EDIS;

  78.                 SCIx = &ScibRegs;
  79.                 break;
  80.             }
  81.             case SCIC:
  82.             {
  83.                 EALLOW;
  84.                 GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0;
  85.                 GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;     //设置端口上拉

  86.                 GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3;   //RX脚输入

  87.                 GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1;    //选择为SCITXDC功能
  88.                 GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1;    //选择为SCIRXDC功能
  89.                 EDIS;

  90.                 SCIx = &ScicRegs;
  91.                 break;
  92.             }
  93.         }
  94.        

  95.         (*SCIx).SCICTL1.all =0x0003;
  96.            (*SCIx).SCICCR.all = 0x0007;  

  97.            (*SCIx).SCICTL2.bit.RXBKINTENA =1;



  98.         /*波特率设置*/

  99.         switch(baudrate)
  100.         {
  101.             case B2400:
  102.             {
  103.                 (*SCIx).SCIHBAUD    = 0x0007;

  104.             (*SCIx).SCILBAUD    = 0x00A0;

  105.             break;
  106.         }
  107.         case B4800:
  108.             {
  109.                 (*SCIx).SCIHBAUD    = 0x0003;

  110.             (*SCIx).SCILBAUD    = 0x00D0;

  111.             break;
  112.         }
  113.         case B9600:
  114.             {
  115.                 (*SCIx).SCIHBAUD    = 0x0001;

  116.             (*SCIx).SCILBAUD    = 0x00E7;

  117.             break;
  118.         }
  119.         case B19200:
  120.             {
  121.                 (*SCIx).SCIHBAUD    = 0x0000;

  122.             (*SCIx).SCILBAUD    = 0x00F3;

  123.             break;
  124.         }
  125.         case B38400:
  126.             {
  127.                 (*SCIx).SCIHBAUD    = 0x0000;

  128.             (*SCIx).SCILBAUD    = 0x0079;

  129.             break;
  130.         }
  131.         case B115200:
  132.             {
  133.                 (*SCIx).SCIHBAUD    = 0x0000;

  134.             (*SCIx).SCILBAUD    = 0x0028;

  135.             break;
  136.         }
  137.     }                 



  138.     (*SCIx).SCICTL1.bit.SWRESET = 1;                     // Relinquish SCI from Reset

  139. }



  140. /*

  141. * 说明: 通过串口发送一个字符

  142. * 输入: NO - 串口端号,可以选择SCIA、SCIB、SCIC

  143. *       cdata - 需要发送的字符

  144. */

  145. void SCI_Send_One_Char(SCI_TypeDef NO, Uint16 cdata)

  146. {
  147.     volatile struct SCI_REGS *SCIx;
  148.    

  149.         switch(NO)
  150.         {
  151.             case SCIA: SCIx = &SciaRegs; break;
  152.             case SCIB: SCIx = &ScibRegs; break;
  153.             case SCIC: SCIx = &ScicRegs; break;
  154.         }

  155.         (*SCIx).SCITXBUF = cdata;

  156.         while((*SCIx).SCICTL2.bit.TXRDY == 0);

  157. }
复制代码

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

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

出0入0汤圆

 楼主| 发表于 2015-9-23 16:15:34 | 显示全部楼层
都快崩溃了。。。

出0入0汤圆

发表于 2015-9-24 23:50:30 来自手机 | 显示全部楼层
看官方例程

出0入0汤圆

发表于 2015-9-25 00:32:31 | 显示全部楼层
有木有可能是波特率设置有问题

出0入0汤圆

 楼主| 发表于 2015-9-25 15:42:02 | 显示全部楼层
596142041 发表于 2015-9-25 00:32
有木有可能是波特率设置有问题

最后各种断电重启、软件重启,然后就OK了,真是难过死了

出0入0汤圆

发表于 2015-9-25 22:05:03 | 显示全部楼层
伍师傅32 发表于 2015-9-25 15:42
最后各种断电重启、软件重启,然后就OK了,真是难过死了

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

本版积分规则

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

GMT+8, 2024-4-26 08:21

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

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