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.

[参考译文] CCS/TMS320F2.8027万F:SCI接收器

Guru**** 2333840 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/582307/ccs-tms320f28027f-sci-receiver

部件号:TMS320F2.8027万F

工具/软件:Code Composer Studio

先生我使用piccolo launchpad (TMS320F2.8027万F)进行SCI(UART)通信。 发射器部件工作正常。 但问题在于接收器部分。我正在将十六进制值从Raspberry PI发送到C2000 Rx引脚,  我在launchpad上没有得到任何值。

我在“indata”添加了监视点,以便查看收到的值。

计划:


#include "DSP28x_Project.h"    //设备头文件和示例包括文件

#include "F2802x_common/include/adc.h"
#include "F2802x_common/include/clk.h"
#include "F2802x_common/include/flash.h"
#include "F2802x_common/include/gPIC.h"
#include "F2802x_common/include/pie.h"
#include "F2802x_common/include/PLL.h"
#include "F2802x_common/include/sci.h"
#include "F2802x_common/include/wdog.h"

typedef无符号字符字节;
typedef uint8_t uint8;
typedef UINT32_t UINT32;
typedef uint16_t uint16;
typedef uint64_t uint64;


//本文件中找到的函数的prototype语句。
void scia_init(void);
void scia_fifo_init(void);
void scia_xmit (字节A);
void错误(void);
void scisend (字节A[],int长度);
void scireceive (uINT32 length,uint8 * data);
void scirs (字节数据);


//此示例中使用的全局计数
UINT16_t循环计数;
UINT16_t错误计数;
字节bBuf[10];
   字节长度=10;
   字节数据a1;
   字节indata=0;

adc_handle myAdc;
clk_handle myClk;
FLASH_HANDLE myFlash;
GPIO _手柄myGpio;
PIE_HANDLE myPIE;
Sci_Handle mySci;

Void主(void)

   cpu_handle myCpu;
   PLL_HANDLE myPll;
   WDOG_Handle myWDog;
   
   //初始化此应用程序所需的所有句柄    
   myAdc = adc_init((void *)adc_base_addr, sizeof(ADC_Obj);
   myClk = clk_init((void *)clk_base_addr, sizeof(clk_obj));
   myCpu = CPU_INIT ((void *) NULL,sizeof (CPU_Obj));
   myFlash = flash_init((void *)flash_base_addr, sizeof(flash_Obj));
   myGpio = gPIO_INIT ((void *) gPIO_BASE ADDR,sizeof (gPIO_Obj));
   myPie = PIE_INIT ((void *) PIE_base_ADDR,sizeof (PIE_Obj));
   myPll = PLL_INIT ((void *) PLL_base_ADDR,sizeof (PLL_Obj));
   mySci = SCI_INIT ((void *) SCIA_base_ADDR,sizeof(SCI_Obj));
   myWDog = WDOG_INIT ((void *) WDOG_base_ADDR,sizeof (WDOG_Obj));
   
   //执行基本系统初始化    
   WDOG_DISABLE (myWDog);
   clk_enableAdcClock(myClk);
   (*Device_cal)();
   
   //选择内部振荡器1作为时钟源
   CLK_setOscSrc (myClk,CLK_OscSrc_Internal);
   
   //为x10 /2设置PLL,其输出频率为50MHz =10MHz *10/ 2
   PLL_setup (myPll,PLL_Multiplier_10,PLL_DivideSelect_CLKIN_BY_2);
   
   //禁用PIE和所有中断
   PIE_DISABLE (myPie);
   PIE_DisableAllInts(myPie);
   CPU_disableGlobalInts (myCpu);
   CPU_clearIntFlags (myCpu);
   
   //如果从闪存复制运行,则RAM仅对RAM起作用   
#ifdef _flash
   memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
#endif   


   //设置GPIO
   GPIO设置上拉(myGpio,GPIO编号_28,GPIO _上拉_启用);
   GPIO设置上拉(myGpio,GPIO编号_29,GPIO _上拉_禁用);
   GPIO_setQualification (myGpio,GPIO编号_28,GPIO _Qual_Async);
   GPIO_setMode (myGpio,GPIO编号_28,GPIO _28_Mode_SCIRXDA);
   GPIO设置模式(myGpio,GPIO编号_29,GPIO _29_Mode_SCITXDA);


同时(1)

   while (SciaRegs.SCIRXST.bit.RXRDY!=0)
         {
       indata=SciaRegs.SCIRXBUF.ALL;
         }


}

 

}

//步骤7。 在此处插入所有本地中断服务例程(ISR)和函数:

作废错误(void)

     ErrorCount++;
   ASM(" ESTOP0"); //取消注释以在此处停止测试
   对于(;;){
   }

}

void scia_init()


   clk_enableSciaClock(myClk);

   // 1停止位, 无回送
   //无奇偶校验,8个字符位,
   //异步模式,空闲线路协议
   sci_disableParity (mySci);
   Sci_setNumStopBits (mySci,SCI_NumStopBits_One);
   Sci_setCharLength (mySci,SCI_CharLength_8_Bits);
   
   //启用TX,RX,内部SCICLK,
   //禁用RX ERR,睡眠,TXWAKE
   sci_enableTx (mySci);
   sci_enablerx (mySci);
   sci_enableTxInt(mySci);
   sci_enableRxInt(mySci);
   sci_enableLoopBack (mySci);
   Sci_setBaudRate (mySci,SCI_Baudrate_9_6_kBaud);

   // SCI BRR = LSPCLK/(SCI BAUDIX8)-1
#IF (CPU_FRQ_50MHz)
   Sci_setBaudRate (mySci,SCI_Baudrate_9_6_kBaud);
#Elif (CPU_FRQ_40MHz)
   Sci_setBaudRate (mySci,(SCI_bauderate_e) 129);
#endif

   Sci_enable (mySci);
   
   返回;
}



//===========================================================================================================================================
//没有更多。
//===========================================================================================================================================


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Indrajit,

    您是否已确认Raspberry Pi的传输信号出现在GPIO 29上?

    此致,
    科迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我已经检查了rpi2引脚上的信号,该引脚提供了正确的输出,我已经使用Arduino进行了检查。遵循sci发送和接收函数是否正确?
    void sciSend (UINT32长度,uint8 *数据)

    while (length--)>0U)

    while (SciaRegs.SCICTL2.bit.TXRDY=0)
    {}
    SciaRegs.SCITXBUF=*数据;
    *DATA++;

    }
    }

    void sciReceive(UINT32 length, uint8*data)

    while (length!=0)

    while (SciaRegs.SCIRXST.bit.RXRDY!=1)
    {}
    *data=(uint8)(SciaRegs.SCIRXBUF.all);
    *DATA++;
    }