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:使用不同的 GPIOpin 作为 SCI/UART 传输

Guru**** 2526700 points
Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/885919/ccs-tms320f28379d-using-a-different-gpiopin-as-sci-uart-transmitt

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

您好!

我正在尝试使用 SCI/UART 将此 MCU 与蓝牙模块连接。  我已经使用 GPIO 18和19在 launchpad 上进行了测试、但当我尝试使用 GPIO42在控制卡上进行同样的传输时、我很难设置它。 我们使用示波器来探测 GPIO42 (HSEC 引脚93)、但没有看到任何东西。

提前感谢您、

金高

P.S.

以下代码是我们尝试引脚多路复用 GPIO42以使用 SCITXA 的方式。 我不确定  GpioCtrlRegs.GPBGMUX1.bit.GPIO42 = 15或3。 嗯、无论哪种方式、两者都不起作用。 其余代码与代码示例  TMS320F28379D>sci_loopback_CPU 相同。

//

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

//

//
DEVICE_initGPIO();

// GPIO19是 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_STD);
GPIO_setQualificationMode (19、GPIO_QUAL_异 步);

//
// GPIO42是 SCI Tx 引脚。
//
EALLOW;
GPIO_setMasterCore (42、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_42_SCITXDA);
GPIO_setDirectionMode (42、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (42、GPIO_PIN_TYPE_STD);
GPIO_setQualificationMode (42、GPIO_QUAL_异 步);

EALLOW;
GpioCtrlRegs.GPBGMUX1.bit.GPIO42 = 15;
GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 15;//多路复用器到 SCI

//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();

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

//
//启用 CPU 中断
//
interrupt_enableMaster();

//
//初始化计数
//
loopCount = 0;
错误计数= 0;

//
//初始化 SCIB
//
initSCIBFIFO();
initSCIALOopback ();

//
//注意:此示例不需要自动波特率锁定
//

//
//发送以0开头的字符
//
//sendChar =;
sendChar = 0;
float I = 0;
uint8_t dataID = 0;

//
//从0x00开始一直发送字符并经过0xFF。
//发送每个后,检查接收缓冲区的值是否正确。
//
for (;;)

/*
if (sendAT){
if (sendChar < 21){
xmitSCIB (ATCommands[sendChar]);

}否则{
if (sendChar < 2){
xmitSCIB (startAT[sendChar]);


*
if (k <= 5){
xmitSCIB (sendChar);

//
//等待 RRDY/RXFFST = 1、等待 FIFO 中有1个数据可用
//

/* while (SCI_getRxFIFOStatus (SCIB_BASE)=SCI_FIFO_RX0)



*

//
//检查接收到的字符
//
receivedChar = SCI_readCharBlockingFIFO (SCIB_BASE);

//
//接收到的字符不正确
//
if (receivedChar!= sendChar)

//error();

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

空错误()

错误计数++;
Example_Fail = 1;
//asm (" ESTOP0");//取消注释以在此处停止测试
适用于(;);

//
// initSCIBLoopback -配置 SCIB 设置
//
空 initSCIALOopback ()

//
//注意:SCIB 外设的时钟被打开
//在 Device_init()函数中
//

//
// 8个字符位,1个停止位,无奇偶校验。 波特率为9600。
//
SCI_setConfig (SCIB_BASE、DEVICE_LSPCLK_FREQ、9600、(SCI_CONFIG_WLEN_8 |
SCI_CONFIG_STOP_ONE |
SCI_CONFIG_PAR_NONE));
SCI_disableLoopback (SCIB_BASE);

SCI_enableFIFO (SCIB_BASE);
SCI_performSoftwareReset (SCIB_BASE);
SCI_disableInterrupt (SCIB_BASE、SCI_INT_RXERR);

SCI_enableInterrupt (SCIB_BASE、SCI_INT_TXRDY);
SCI_enableInterrupt (SCIB_BASE、SCI_INT_RXRDY_BRKDT);

//SCI_enableLoopback (SCIB_BASE);

//
//从复位中撤回 SCI
//
SCI_enableModule (SCIB_BASE);

//
// xmitSCIB -从 SCI 发送一个字符
//
void xmitSCIB (uint16_t a)

SCI_writeCharNonBlocking (SCIB_BASE、A);

//
// initSCIBFIFO -初始化 SCI FIFO
//
空 initSCIBFIFO()

SCI_clearInterruptStatus (SCIB_BASE、SCI_INT_TXFF);
SCI_resetTxFIFO (SCIB_BASE);
SCI_enableFIFO (SCIB_BASE);

SCI_setFIFOInterruptLevel (SCIB_BASE、SCI_FIFO_TX0、SCI_FIFO_RX4);
SCI_resetChannels (SCIB_BASE);

SCI_clearInterruptStatus (SCIB_BASE、SCI_INT_RXFF);

//
//文件结束
//

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

    您好、Jin、

    这两个块正尝试执行相同的操作:

    EALLOW;
    GPIO_setMasterCore (42、GPIO_CORE_CPU1);
    GPIO_setPinConfig (GPIO_42_SCITXDA);
    GPIO_setDirectionMode (42、GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig (42、GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode (42、GPIO_QUAL_异 步);

    EALLOW;
    GpioCtrlRegs.GPBGMUX1.bit.GPIO42 = 15;
    GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 15;//多路复用器到 SCI

    但我认为第二个问题是不正确的。  索引15是 GPxMUX 和 GPxGMUX 的组合、两者都只有0至3的单独范围:


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

    感谢您的回答。 仅为了阐明、为了将 GPIO42切换到 SCITXDA、我们所做的是:

    1.将 GPIO42设置为 CPU1

    GPIO_setMasterCore (42、GPIO_CORE_CPU1);

    2.为所需的引脚配置设置多路复用器

    GPIO_setPinConfig (GPIO_42_SCITXDA);

    3.将 GPIO 方向设置为输出

    GPIO_setDirectionMode (42、GPIO_DIR_MODE_OUT);

    4.将配置设置为异步模式

    GPIO_setQualificationMode (42、GPIO_QUAL_异 步);

    对问题表示歉意。 我们已经执行了上述代码、但没有任何输出(使用示波器进行了测试)。 当使用 GPIO29设置为 SCITXDA (不需要 MUX 设置)时、相同的代码(对于 TX 和 RX)起作用、因此我们认为代码的多路复用器设置部分不正确。 否则、如果此部件正常、您是否对可能出现的问题有任何其他建议?

    下面是我们使用的引脚分配:

    (这在 TMS320F2837xD 数据表的第25页上)

    谢谢~

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

    您好、Jin、

    是的、这似乎是正确的。

    请注意、使用 GPIO29还需要多路复用器选择(GPIO_setPinConfig)、因为(几乎)默认情况下所有 GPIO 都是 GPIO (而不是 SCI 等外设)。

    我认为下一步是验证引脚连接。  您可以切换到其中一个 GPIO 示例、看看是否可以专门让 GPIO42切换、以便验证您是否连接到了正确的引脚。   

    您还可以进入"Expressions"窗口并直接检查 GPIO 多路复用器寄存器、以确保按预期设置。