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/TMS320F28379D:CCS/LAUNCHXL-F28379D:使用 SCIB -UART

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/913532/ccs-tms320f28379d-ccs-launchxl-f28379d-using-scib--uart

器件型号:TMS320F28379D
Thread 中讨论的其他器件:controlSUITEC2000WARE

工具/软件:Code Composer Studio

您好!

 我已经通过从示例代码中更改引脚尝试了 UART 通信代码、Tx 线 看起来根本不会传输。当我编辑 controlSUITE 代码时、SCI 模块无法通过 Launchpad 上的引脚输出任何内容时、我遇到了一些问题 它的工作很好。我在下面发布了我的代码、如果对我缺少的内容有任何建议、我将不胜感激。

//########################################################################################################################
//
//文件:  sci_ex3_echoback.c
//
//标题: SCI 回送示例。
//
//! \addtogroup driver_example_list
//!

SCI 回送


//!
//!  此测试通过 SCI-A 端口接收和回波数据。
//!
//!  可以使用"putty"等终端查看来自的数据
//!  SCI 并将信息发送到 SCI。 接收到的字符
//!  将被发送回主机。
//!
//!  b 正在运行\b 应用程序
//!  使用终端打开具有以下设置的 COM 端口:
//!  - 找到正确的 COM 端口
//!  - 每秒位数= 9600
//!  - 数据位= 8
//!   -奇偶校验=无
//!   -停止位= 1
//!  - 硬件控制=无
//!
//!  该程序将打印一条问候语、然后要求您
//!  输入将回显到终端的字符。
//!
//!  b 监视\b 变量\n
//!  -loopCounter-发送的字符数
//!
//! b 外部连接\n
//!  通过 USB 电缆将 SCI-A 端口连接到 PC。
//!  有关 UART/USB 连接器信息、请参阅硬件用户指南。
//
//########################################################################################################################
//$TI 发行版:F2837xD 支持库 v3.10.00.00 $
//$Release Date:Tue May 26 17:13:46 IST 2020 $
//版权所有:
//版权所有(C) 2013-2020 Texas Instruments Incorporated - http://www.ti.com/
//
//以源代码和二进制形式重新分发和使用,有无
//如果满足以下条件,则允许进行修改
//满足:
//
//  重新分发源代码必须保留上述版权
//  注意、此条件列表和以下免责声明。
//
//  二进制形式的重新分发必须复制上述版权
//  注意、中的条件列表和以下免责声明
//  随提供的文档和/或其他材料   
//  分布。
//
//  德州仪器公司的名称和的名称都不是
//  其贡献者可用于认可或推广衍生产品
//  未经特定的事先书面许可,从该软件下载。
//
//本软件由版权所有者和作者提供
//“原样”以及任何明示或暗示的保证,包括但不包括
//限于对适销性和适用性的暗示保证
//一个特定的目的是免责的。 在任何情况下、版权均不得
//所有者或贡献者应对任何直接、间接、偶然、
//特殊、典型或必然的损害(包括但不包括)
//仅限于采购替代货物或服务;
//数据或利润;或业务中断)
//责任理论,无论是合同责任、严格责任还是侵权行为
//(包括疏忽或其他)以任何方式因使用而产生
//此软件,即使已被告知可能会发生此类损坏。
//$
//########################################################################################################################

//
//包含的文件
//
#include "driverlib.h"
#include "device.h"

//
//定义
//
//定义自动波特以使用自动波特锁定功能
//#define autobaud

//
//全局
//
uint16_t loopCounter = 0;

//
//主函
//
void main (void)

   uint16_t receivedChar;
   unsigned char *msg;
   uint16_t rxStatus = 0U;

   //
   //配置 PLL、禁用 WD、启用外设时钟。
   //
   device_init();

   //
   //禁用引脚锁定并启用内部上拉。
   //
   DEVICE_initGPIO();


   //
       针对 SCI Tx 引脚的//配置。
       //
       GPIO_setMasterCore (18、GPIO_CORE_CPU1);
       GPIO_setPinConfig (GPIO_18_SCITXDB);
       GPIO_setDirectionMode (18、GPIO_DIR_MODE_OUT);
       GPIO_setPadConfig (18、GPIO_PIN_TYPE_STD);
       GPIO_setQualificationMode (18、GPIO_QUAL_异 步);

       EALLOW;
   //
   针对 SCI Rx 引脚的//配置。
   //
   GPIO_setMasterCore (19、GPIO_CORE_CPU1);
   GPIO_setPinConfig (GPIO_19_SCIRXDB);
   GPIO_setDirectionMode (19、GPIO_DIR_MODE_IN);
   GPIO_setPadConfig (19、GPIO_PIN_TYPE_PULLUP);
   GPIO_setQualificationMode (19、GPIO_QUAL_异 步);



   //
   //初始化中断控制器和矢量表。
   //
   interrupt_initModule();
   interrupt_initVectorTable();

   //
   //初始化 SCIB 及其 FIFO。
   //
   SCI_performSoftwareReset (SCIB_BASE);

   //
   //为回声配置 SCIB。
   //
   SCI_setConfig (SCIB_BASE、DEVICE_LSPCLK_FREQ、9600、(SCI_CONFIG_WLEN_8 |
                                                       SCI_CONFIG_STOP_ONE |
                                                       SCI_CONFIG_PAR_NONE));
   SCI_resetChannels (SCIB_BASE);
   SCI_resetRxFIFO (SCIB_BASE);
   SCI_resetTxFIFO (SCIB_BASE);
   SCI_clearInterruptStatus (SCIB_BASE、SCI_INT_TXFF | SCI_INT_RXFF);
   SCI_disableLoopback (SCIB_BASE);
   SCI_enableFIFO (SCIB_BASE);
   SCI_enableModule (SCIB_BASE);
   SCI_performSoftwareReset (SCIB_BASE);

#ifdef 自动波特率
   //
   //执行自动波特率锁定。
   // SCI 要求用'A'或'A'来锁定波特率。
   //
   SCI_LOCockAutobaud (SCIB_BASE);
#endif

   //
   //发送起始消息。
   //
   MSG ="您好";

   for (;;)
   {

       SCI_writeCharArray (SCIB_BASE、(uint16_t*) msg、6);

      

   }


//
//文件结束
//


提前感谢。

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

    您好!  

    感谢您发布代码。 代码看起来正常。 下面是一些问题

    [引用 user="Rani Loganthan"]当我编辑 controlSUITE 代码时、SCI 模块无法通过 Launchpad 上的引脚输出任何内容时、我遇到了一些问题、其工作正常[/quot]

    运行此代码时、您在 J1 Booster Pack 连接器上连接了什么?

    2、SCI 在另一侧连接到什么?

    3.您在另一边看到一些字符吗?

    4.由于您说过 controlSUITE 代码工作正常、它是否处于相同的设置中。   

    此致、

    Sudharsanan

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

    通过推荐论坛了解... 在预定义符号中添加了_LAUNCHXL_F28379D ... 现在正在传输... 但是,当我添加计时器中断和 SCI TX 中断时,它们都无法正常工作... 如果我禁用了任何一个剩余的中断功能、则其中一个可以正常工作... 关于我犯错之处的任何想法...

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

    您好!

    值得注意的是、您已经超越了这一步。 我不明白你的意思  

    [引用 USER="Rani Loganthan ]但当我添加计时器中断和 SCI TX 中断时,两者都无法正常工作... 如果我禁用其余的任何一个中断功能、则可以正常工作

    您可以参考中断示例:[C2000Ware 安装目录]\driverlib\f2837xd\examples\cpu1\interrupt_ex2_with_i2c_sci_spi_loopback.c.这是一个处理多个中断的示例。 如果您仍然遇到问题、请发布相关代码片段、并详细介绍您禁用的内容/操作方法。  

    此致、

    Sudharsanan

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

    sudharsanan、您好!

     我的应用使用带有 SCIB 发送中断的定时器0和 timer2。 当我不启用时、SCIB 中断 计时器0和计时器2都工作正常。 使能 SCIB 中断定时器2中断不起作用。

     我在这里附上了供您参考的片段。如果我犯了任何错误、请通知我。

     提前感谢。

    //########################################################################################################################
    //
    //文件:timer_ex1_cputimers.c
    //
    //标题:CPU 定时器示例
    //
    //! \addtogroup driver_example_list
    //!

    CPU 定时器


    //!
    //! 此示例配置 CPU Timer0、1和2并递增
    //! 每次定时器发出中断时计数器。
    //!
    //! b 外部连接\n
    //! -无
    //!
    //! b 监视\b 变量\n
    //! - cpuTimer0IntCount
    //! - cpuTimer1IntCount
    //! - cpuTimer2IntCount
    //!
    //
    //########################################################################################################################
    //$TI 发行版:F2837xD 支持库 v3.09.00.00 $
    //$Release Date:Thu Mar 19 07:35:24 IST 2020 $
    //版权所有:
    //版权所有(C) 2013-2020 Texas Instruments Incorporated - http://www.ti.com/
    //
    //以源代码和二进制形式重新分发和使用,有无
    //如果满足以下条件,则允许进行修改
    //满足:
    //
    //重新分发源代码必须保留上述版权
    //注意、此条件列表和以下免责声明。
    //
    //二进制形式的重新分发必须复制上述版权
    //注意、中的条件列表和以下免责声明
    //随提供的文档和/或其他材料
    //分布。
    //
    //德州仪器公司的名称和的名称都不是
    //其贡献者可用于认可或推广衍生产品
    //未经特定的事先书面许可,从该软件下载。
    //
    //本软件由版权所有者和作者提供
    //“原样”以及任何明示或暗示的保证,包括但不包括
    //限于对适销性和适用性的暗示保证
    //一个特定的目的是免责的。 在任何情况下、版权均不得
    //所有者或贡献者应对任何直接、间接、偶然、
    //特殊、典型或必然的损害(包括但不包括)
    //仅限于采购替代货物或服务;
    //数据或利润;或业务中断)
    //责任理论,无论是合同责任、严格责任还是侵权行为
    //(包括疏忽或其他)以任何方式因使用而产生
    //此软件,即使已被告知可能会发生此类损坏。
    //$
    //########################################################################################################################

    //
    //包含的文件
    //
    #include "driverlib.h"
    #include "device.h"
    #include "sci_B.h"
    #include "Timer0.h"

    //
    //主函
    //
    void main (void)

    //
    //初始化设备时钟和外设
    //
    device_init();

    //
    //将 GPIO 引脚配置为推挽输出
    //
    DEVICE_initGPIO();
    GPIO_setPinConfig (DEVICE_GPIO_CFG_LED1);
    GPIO_setMasterCore (DEVICE_GPIO_PIN_LED1、GPIO_CORE_CPU1);
    GPIO_setPadConfig (DEVICE_GPIO_PIN_LED1、GPIO_PIN_TYPE_STD);
    GPIO_setDirectionMode (DEVICE_GPIO_PIN_LED1、GPIO_DIR_MODE_OUT);
    SCI_Communication_CONF ();
    RS485enable();
    ModbusMaster_begin (1、19200);
    eCAP_PinConf ();
    //
    //初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
    //
    interrupt_initModule();

    //
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //
    interrupt_initVectorTable();

    //
    //每个 CPU 定时器中断的 ISR
    //

    INTERRUPT_REGTER (INT_TIMER0、&cpuTimer0ISR);
    interrupt_register (INT_TIMER2、&cpuTimer2ISR);
    interrupt_register (INT_SCIB_TX、&sciaTXFIFOISR);
    INTERRUPT_REGISTER (INT_ECAP1、&ecap1ISR);
    //
    //初始化设备外设。 对于本示例、仅初始化
    // CPU 定时器。
    //

    initCPUTimer();
    SCI_Communication_Int();
    initECAP();
    //
    //将 CPU 定时器0、1和2配置为每秒中断一次:
    // 1秒周期(以 μ 秒为单位)
    //
    configCPUTimer (CPUTIMER 0_BASE、DEVICE_SYSCLK_FREQ、1000000);
    configCPUTimer (CPUTIMER 2_base、DEVICE_SYSCLK_FREQ、1000000);


    //
    //为了确保精确的时序,请使用只写指令来写入
    //整个寄存器。 因此、如果任何配置位发生更改
    //在 configCPUTimer 和 initCPUTimers 中,还必须进行以下设置
    //更新。
    //
    CPUTimer_enableInterrupt (CPUTIMER0_BASE);
    CPUTimer_enableInterrupt (CPUTIMEer2_base);

    //启用连接到 CPU 定时器0的 CPU INT1、INT13和 INT14,
    //分别为 CPU 定时器1和 CPU 定时器2。
    //在 PIE 中启用 TINT0:组1中断7
    //
    INTERRUPT_ENABLE (INT_TIMER0);
    INTERRUPT_ENABLE (INT_TIMER2);
    INTERRUPT_ENABLE (INT_SCIB_TX);
    INTERRUPT_ENABLE (INT_ECAP1);
    //
    //启动 CPU 定时器0、CPU 定时器1和 CPU 定时器2。
    //
    CPUTimer_startTimer (CPUTIMER0_BASE);
    CPUTimer_startTimer (CPUTIMEer2_base);


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

    //空闲循环。 只需坐下来循环(可选)
    //
    while (1)

    NOP;

    #include "driverlib.h"
    #include "device.h"
    #include "Timer0.h"
    #include"RpmCal.h"
    #include "ecap_3.h"


    volatile uint16_t Start_Delay、Reset_Delay=0、cpuTimer0IntCount = 0、cpuTimer1IntCount、Pulse;
    //
    // initCPUTimers -此函数初始化所有三个 CPU 计时器
    //到已知状态。
    //

    //
    // configCPUTimer -此函数将所选的计时器初始化为
    //由"freq"和"period"参数指定的周期。 "freq"是
    //输入为 Hz,周期以 uSeconds 为单位。 定时器保持在已停止状态
    //配置后的状态。
    //
    空 initCPUTimers (空)

    //
    //将定时器周期初始化为最大值
    //
    CPUTimer_setPeriod (CPUTIME0_BASE、0xFFFFFFFF);
    CPUTimer_setPeriod (CPUTIMEer2_base、0xFFFFFFFF);


    //
    //初始化预分频计数器以进行1分频(SYSCLKOUT)
    //
    CPUTimer_setPrescaler (CPUTIMER 0_BASE、0);
    CPUTimer_setPreScaler (CPUTIMER 2_base、0);


    //
    //确保计时器停止
    //
    CPUTimer_stopTimer (CPUTIME0_BASE);
    CPUTimer_stopTimer (CPUTIMEer2_base);


    //
    //使用句点值重新加载所有计数器寄存器
    //
    CPUTimer_reloadTimerCounter (CPUTIMEER0_BASE);
    CPUTimer_reloadTimerCounter (CPUTIMEer2_base);

    void configCPUTimer (uint32_t cpuTimer、float freq、float period)

    uint32_t temp;

    //
    //初始化计时器周期:
    //
    temp =(uint32_t)(freq /1000000 * period);
    CPUTimer_setPeriod (cpuTimer、temp);

    //
    //将预分频计数器设置为1分频(SYSCLKOUT):
    //
    CPUTimer_setPreScaler (cpuTimer、0);

    //
    //初始化计时器控制寄存器。 计时器停止、重新加载、
    //自由运行被禁用,中断被启用。
    //此外,自由位和软位被置位
    //
    CPUTimer_stopTimer (cpuTimer);
    CPUTimer_reloadTimerCounter (cpuTimer);
    CPUTimer_setEmulationMode (cpuTimer、
    CPUTIME_EMULATIONMODE_STOPAFTERNEXTDECREMENT);
    CPUTimer_enableInterrupt (cpuTimer);

    //
    //重置三个 cpuTimer 的中断计数器
    //
    IF (cpuTimer =CPUTIME0_BASE)

    START_DELAY=RESET_DELAY=0;


    否则、如果(cpuTimer = CPUTIMEer2_base)

    PULSE_Sec = 0;

    //
    // cpuTimer0ISR - CpuTimer0的计数器
    //

    _interrupt void cpuTimer0ISR (void)

    START_DELAY_+;
    RESET_DELAY_++;

    //
    //确认此中断以从组1接收更多中断
    //
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);

    //
    // cpuTimer1ISR - CpuTimer1的计数器
    //
    uint16_t timer2;
    _interrupt void cpuTimer2ISR (void)

    PULSE_Sec++;

    timer2++;

    //禁用 SCIB 中断两个计时器都工作
    //文件结束

    启用 SCIB TImer2不起作用.....

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

    您好!  

    感谢您提供代码和屏幕截图。  

    您能告诉我这两种情况下的 IER 和 IFR 寄存器内容吗?  

    此致、

    Sudharsanan

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

    情况1:SCI 中断正在工作 IER= 0x2009、IFR=0x2100或0x 2101。 定时器2中断不起作用...

    情况2:SCI 中断被禁用 IER=0x2009,IFR=0x0000。 但计时器中断正常工作。

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

    同时使能除定时器2中断外、每个中断都正常工作。

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

    您好!  

    很抱歉耽误您的回答。 SCI B 中断在系统中发生的频率。 是否存在 SCIB 中断始终处于优先级并导致完全不处理计时器2的可能性? 它具有比 INT14更高的优先级 INT9。  

    此致、

    Sudharsanan

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

    是的、您回答正确... 当我使用轮询方法传输数据时、一切都可以正常工作...

    谢谢。