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/TMS320F28377S:SCI ISN#39;T 正常工作

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/598128/ccs-tms320f28377s-sci-isn-t-properly-working

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

通过 SCI TXDA 连接、LCD 显示器应如下图所示...

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

    请描述您的问题吗?

    请确保包含任何屏幕截图(如果有)。

    谢谢、

    Vince Rodriguez
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    是的,当然。 SCI-A TXDA 正在发出错误信号,而不是显示 ADC.RESULT 值。 我想通过 SCI-A TXDA 连接查看 LCD 监视器电压传感器值。 为此,我使用 ASCII 格式。 代码 main 为:


    /*
    * main.c
    *
    *创建日期:2017年。 5. 11.
    *
    *

    #include "F28x_Project.h"
    #include "math.h"
    #include "main.h"
    #include

    extern 中断 void adca1_isr (void);
    extern void InitEPwm (void);
    extern void ConfigureADC (void);
    extern void GPIO_setup (void);

    extern void InitSci (void);
    extern void InitSpi (void);
    extern void out_Display (void);

    extern void function_Init (void);
    extern void value_Init (void);
    extern void Control_filter_Init (void);

    extern void full_system_disable (void);
    void Sys_Init (void);

    extern void Write_mode (char 模式);
    extern void GLcd_clear (char n);
    extern void GLcd_Glayer (char n);
    extern void GLcd_curse_OnOff (char 模式);
    extern void GLcd_curse_mode (char 模式);
    extern void BL_OnOff (char 模式);
    extern void GLcd_FontStyle (void);

    extern void ValuetoAsii (long value、int digit、int Fract、char *str、char zero_fill);
    extern void GLcd_out (char *数据、char num);
    extern void GLcd_text_Loc (const char x、const char y);



    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    空 Memcopy (uint16 * SourceAddr、uint16* SourceEndAddr、uint16* DestAddr)

    while (SourceAddr < SourceEndAddr)

    *DestAddr++=*SourceAddr++;

    返回;


    void main (void)

    //
    //步骤1. 初始化系统控制:
    // PLL、安全装置、启用外设时钟
    //此示例函数位于 F2837xS_SYSCTRL.c 文件中。
    //
    InitSysCtrl();
    InitGpio();
    Dint;

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    InitPieCtrl();

    IER = 0x0000;
    IFR = 0x0000;

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;

    InitPieVectTable();

    DELAY_US (1000);
    ConfigureADC();
    SYS_Init();

    Function_Init();
    Value_Init();
    Control_filter_Init();

    EALLOW;
    PieVectTable.ADCA1_INT =&adca1_ISR;
    EDIS;

    PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
    PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // PIE 组9、INT1、SCI RX 中断
    PieCtrlRegs.PIEIER9.bit.INTx2 = 1; // PIE 组9、INT2、SCI TX 中断

    IER |= M_INT1;//启用组1中断// ePWM 和 ADC int……
    IER |= M_INT3;

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
    PieCtrlRegs.PIEACX.ALL = 0xFFFF;

    EINT;//启用全局中断 INTM
    ERTM;//启用全局实时中断 DBGM

    while (1)
    //针对(;);)

    OUT_Display ();// LCD 显示部件



    空 Sys_Init (空)

    GPIO_setup();
    InitEPwm();
    InitSci();
    InitSpi();

    WRITE_MODE (0);
    GLcd_clear (0);
    GLcd_Glayer (2);

    GLcd_curse_OnOff (0);
    GLcd_curse_mode (0);
    BL_OnOff (1);


    空 InitSci (空)

    #define USE_SCIA 1.
    #define USE_SCIB 0
    #define USE_SCIC 0
    #define USE_SCID 0

    #if USE_SCIA
    SCia();
    科学派奥;

    #endif

    #if USE_SCIB
    科学();
    #endif

    #if USE_SCIC
    SCIC();
    #endif

    #if USE_SCID
    SCID();
    #endif


    #if USE_SCIA
    空洞 SCia (空)
    {SCIA_EN = 2;
    //注:在 InitSysCtrl()函数 SCICHAR 中,时钟被打开到 SCIA 外设
    SciaRegs.SCICCR.all = 0x0007;// 1个停止位、无环回、无奇偶校验、8个字符位、异步模式、空闲线协议
    SciaRegs.SCICTL1.all = 0x0003;
    SciaRegs.SCICTL2.all = 0x0003;

    // SciaRegs.SCICTL2.bit.RXBKINTENA=1;
    // SCIA 为9600波特
    //@LSPCLK = 50MHz (200MHz SYSCLK) HBAUD = 0x02且 LBAUD = 0x8B。
    SciaRegs.SCIHBAUD.ALL = 0x02;
    SciaRegs.SCILBAUD.ALL = 0x145;////325十进制

    SciaRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI

    #endif

    void Sciagpio (void)(空)

    GpioCtrlRegs.GPCPUD.bit.GPIO84 = 0;//启用 GPIO84上的上拉
    GpioCtrlRegs.GPCGMUX2.bit.GPIO84 = 1;// GPIO84 =外设输出
    GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 1;// GPIO84 = SCI TXDA
    GpioCtrlRegs.GPCDIR.bit.GPIO84 = 1;// GPIO84 =输出

    GpioCtrlRegs.GPCPUD.bit.GPIO85 = 0;//启用 GPIO85上的上拉
    GpioCtrlRegs.GPCGMUX2.bit.GPIO85 = 1;// GPIO85 = SCI RXDA
    GpioCtrlRegs.GPCMUX2.bit.GPIO85=1;// GPIO84 = SCI RXDA
    GpioCtrlRegs.GPCDIR.bit.GPIO85 = 0;// GPIO85 =输入

    }//// main 的末尾()

    //////////// 这是 LCD 显示部件////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include "F28x_Project.h"
    #include "main.h"
    #include "math.h"
    #include "stdio.h"
    #include "string.h"

    #pragma CODE_SECTION (OUT_Display、".TI.ramfunc");

    void ValuetoAsii (long value、int digit、int Fract、char *str、char zero_fill);
    void GLcd_out (char *数据、char num);
    void GLcd_text_Loc (char x、char y);
    void out_Display (void);



    extern int16 ad_result_a[16]、ad_result_B[16];
    特性 cValue[10]、LCD_LINE_COUNT=0;
    uint16 LCD_MODE = 0、V_DCC_ref = 1542;
    内部32_t dataOut32;


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    void out_Display (void)

    开关(LCD_MODE)

    情况0:
    LCD_LINE_COUNT=0;
    GLCD_TEXT_LOC (0、LCD_LINE_COUNT);
    GLcd_out ("AD0:"、6);
    ValuetoAsii ((long) ad_result_a[0]、4、0、cValue、0); // ad_result_a[0]= ADC 电压传感器
    GLcd_out (cValue、4);

    GLcd_out (" ad1:"、6);
    ValuetoAsii ((long) ad_result_a[1]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" ad2:"、6);
    ValuetoAsii ((long) ad_result_a[2]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" ad3:"、6);
    ValuetoAsii ((long) ad_result_a[3]、4、0、cValue、0);
    GLcd_out (cValue、4);

    //行2显示
    LCD_LINE_COUNT++;
    GLCD_TEXT_LOC (0、LCD_LINE_COUNT);
    GLcd_out ("AD4:"、6);
    ValuetoAsii ((long) ad_result_a[4]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" ad5:"、6);
    ValuetoAsii ((long) ad_result_a[5]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" ad6:"、6);
    ValuetoAsii ((long) ad_result_a[6]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" ad7:"、6);
    ValuetoAsii ((long) ad_result_a[7]、4、0、cValue、0);
    GLcd_out (cValue、4);

    //行3显示
    LCD_LINE_COUNT++;
    GLCD_TEXT_LOC (0、LCD_LINE_COUNT);
    GLcd_out ("AD8:"、5);
    ValuetoAsii ((long) ad_result_a[8]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" ad9:"、6);
    ValuetoAsii ((long) ad_result_a[9]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" AD10:"、6);
    ValuetoAsii ((long) ad_result_a[10]、4、0、cValue、0);
    GLcd_out (cValue、4);

    GLcd_out (" AD11:"、6);
    ValuetoAsii ((long) ad_result_a[11]、4、0、cValue、0);
    GLcd_out (cValue、4);
    中断;
    }}

    void GLcd_text_Loc (const char x、const char y)
    { // GLCD_TEXT_Loc (0、LCD_LINE_COUNT);
    字符数据[5];
    数据[0]= 0x1B;
    DATA[1]= 0x4C;
    DATA[2]= 0x4F;
    数据[3]= x;// x 좌표(0 ~ 39)
    DATA[4]= y;// y 좌표(0 ~ 14)
    GLcd_out (数据、5);


    void GLcd_out (char *数据、char num)

    char ctemp、i;
    for (i=0;<num; i++){
    ctemp =* data++;
    SciaRegs.SCITXBUF.all = ctemp;
    while (SciaRegs.SCICTL2.bit.TXRDY!= 1){}//等待 XRDY =1表示空状态 TXDT


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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面的 LCD 显示器图片当前错误地以十进制格式显示 ADC 值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    文森特

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

    从液晶显示器上看,我不认为十进制到 ASCII 转换是唯一的问题。

    下面是一些调试步骤、我将执行这些步骤以查看我们是否可以隔离问题。

    1.检查您需要发送 LCD 显示器的数据包格式。 您可能不仅需要发送 ASCII 字符、还需要发送 ASCII 字符。
    2.在 ASCII 转换函数内设置断点,并检查以确保正确转换为 ASCII。

    让我知道这是怎么发生的。

    谢谢、

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

    仅发送 ASCII 字符值 LCD 显示器。
    2.我在 ASCII 转换函数中设置了断点,这是一个一定的延迟,但成功了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    edii、

    设置断点时、ASCII 转换函数的值是否正确?