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:帮助 Serial.begin () TMS320F28377S 与 Enegia

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/602954/ccs-tms320f28377s-help-serial-begin-tms320f28377s-with-enegia

器件型号:TMS320F28377S
主题中讨论的其他器件:EnergiaTMS320F28069TMS320F28027

工具/软件:Code Composer Studio

我正在使用 Code Composer Studio 中的 Energia Sketch、我想通过蓝线与 Launchpad 建立通信、但串行硬件的.cpp 将 GPIO 84和84配置为串行通信、但 LaunchPad 没有这些物理引脚。

有人可以帮帮我吗?

这是 HardwareSerial.cpp 代码:

*
(二
* HardwareSerial.cpp
*
*适用于 C2000的 Arduino 核心文件
*版权所有(c) 2012 Eric Ma。 保留所有权利。
*
*
(三
源自:
HardwareSerial.cpp -适用于 Wiring 的硬件串行库
版权所有(c) 2006 Nicholas Zambetti. 保留所有权利。

此库是免费软件;您可以重新分发和/或
根据 GNU Lesser General Public 的条款对其进行修改
免费软件基金会发布的许可证;或者
许可证2.1版或(您可以选择)任何更高版本。

发布该库的目的是希望它将有所帮助、
但没有任何保证;甚至没有的暗示保证
适销性或特定用途的适用性。 请参阅 GNU
较低一般公共许可证以了解更多详细信息。

您应该已经收到 GNU Lesser General Public 的副本
许可证以及此库;如果没有、请写入免费软件
Foundation、Inc.、51 Franklin St、Fifth Floor、Boston、 MA 02110-1301美国

2006年11月23日由 David A. Mellis 修改
2010年9月28日由 Mark Sproul 修改
*
#include
#include
#include
#include
#include "Energia.h"
#include "wiring_prive.h"
#include "sci_isr_handler.h"
#include "HardwareSerial.h"

HardwareSerial *SerialPtr;

#define serial_buffer_size 16.

struct ring_buffer

unsigned char buffer[serial_buffer_size];
volatile unsigned int head;
volatile unsigned int tail;
};

环形缓冲器 Rx_buffer ={0}、0、0};
环形缓冲器 TX_BUFFER ={0}、0、0};

内联 void store_char (unsigned char c、ring 缓冲区*缓冲区)

unsigned int i =(unsigned int)(buffer->head + 1)% serial_buffer_size;

//我们是否应该将接收到的字符存储到该位置
//在尾前面(意味着头将前进到
//尾的当前位置)、我们将溢出缓冲区
//这样我们就不会写字符或将头前移。
if (i!= buffer->tail){
Buffer->buffer[缓冲区->head]= c;
Buffer->Head = I;

void serialEvent();

void serialEvent(){}

void serialEventRun (void)

if (Serial.available ()) serialEvent();

//构造函数////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

硬件串行::硬件串行(ring 缓冲区* rx_buffer、ring 缓冲区* tx_buffer)

_Rx_buffer = Rx_buffer;
_TX_buffer = TX_buffer;

//公共方法////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef TMS320F28069
#define CPU_FREQ 90E6 //针对 F28069设置为90MHz
#Elif defed (TMS320F28027)
#define CPU_FREQ 60E6 //默认值= 60MHz。 对于50MHz 器件更改为50E6
#Elif Defined (TMS320F28377S)
#define CPU_FREQ 200E6 //针对 F28377S 设置为200MHz
其他
#define CPU_FREQ 60E6 //默认值= 60MHz。 对于50MHz 器件更改为50E6
#endif
#define LSPCLK_FREQ CPU_FREQ/4

空硬件串行::begin (无符号长波特)

EALLOW;
#ifdef TMS320F28377S
//将 GPIO84配置为 SCITXDA (输出引脚)
//将 GPIO85配置为 SCIRXDA (输入引脚)
GpioCtrlRegs.GPCGMUX2.bit.GPIO84 = 1;
GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 1;
GpioCtrlRegs.GPCGMUX2.bit.GPIO85=1;
GpioCtrlRegs.GPCMUX2.bit.GPIO85=1;

//将 GPIO85 (SCIRXDA)配置为异步引脚
GpioCtrlRegs.GPCQSEL2.bit.GPIO85=3;
其他
/*为所选引脚启用内部上拉*/
/*禁用所选输出引脚的内部上拉电阻
以降低功耗。 *
//用户可以启用或禁用上拉。

GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;//禁用 GPIO29的上拉(SCITXDA)

/*将所选引脚的限定条件设置为仅异步*/
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。

GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)

/*使用 GPIO 寄存器配置 SCI-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。

GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 操作配置 GPIO28
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;//为 SCITXDA 操作配置 GPIO29

#endif //TMS320F28377S
EDIS;

//此文件中的 ISR 函数。
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
#ifdef TMS320F28377S
PieVectTable.SCIA_RX_INT =&UART_Rx_ISR;
PieVectTable.SCIA_TX_INT =&UART_TX_ISR;
其他
PieVectTable.SCIRXINTA =&UART_Rx_ISR;
PieVectTable.SCITXINTA =&UART_TX_ISR;
#endif
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

//注意:SCIA 外设的时钟被打开
//在 InitSysCtrl()函数中
EALLOW;
#ifdef TMS320F28377S
CpuSysRegs.PCLKCR7.bit.SCI_A = 1;
ClkCfgRegs.LOSPP.bit.LSPCLKDIV = 1;
其他
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;// SCI-A
SysCtrlRegs.LOSPP.bit.LSPCLK = 1;//LSPCLK = SYSCLK/2
#endif
EDIS;

SciaRegs.SCICCR.all =0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all =0x0003;//启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
#ifdef TMS320F28377S
SciaRegs.SCIHBAUD.all =(unsigned int)((f_cpu/(ClkCfgRegs.LOSPP.bit.LSPCLKDIV * 2))/(*波特8)-1)>8;
SciaRegs.SCILBAUD.all =(unsigned int)((F_CPU/(ClkCfgRegs.LOSPP.bit.LSPCLKDIV * 2))/(*波特8)-1)&0x00FF;
其他
SciaRegs.SCIHBAUD =(unsigned int)((f_cpu/(SysCtrlRegs.LOSPP.bit.LSPCLK * 2))/(baud *8)-1)>8;
SciaRegs.SCILBAUD =(unsigned int)((F_CPU/(SysCtrlRegs.LOSPP.bit.LSPCLK * 2))/(BAUD*8)-1)&0x00FF;
#endif
//SciaRegs.SCICCR.bit.LOOPBKENA=0;//禁用回路
SciaRegs.SCIFFTX.All=0xC020;
SciaRegs.SCIFFRX.All=0x0021;
SciaRegs.SCIFFCT.All=0x0;

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


SciaRegs.SCIFFTX.bit.TXFIFORESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

//启用 sci 所需的中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
PieCtrlRegs.PIEIER9.bit.INTx1=1;// PIE 组9,INT1
PieCtrlRegs.PIEIER9.bit.INTx2=1;// PIE 组9,int2
IER |= 0x100;//启用 CPU INT
EINT;

空硬件串行:end()

//等待传出数据的传输
while (_TX_buffer->head!=_TX_buffer->tail);

rx_buffer->head =_rx_buffer->tail;

//禁用 FIFO 中断
SciaRegs.SCIFFTX.bit.TXFFIENA=0;
SciaRegs.SCIFFRX.bit.RXFFIENA=0;

内部硬件串行:可用(空)

return (unsigned int)(serial_buffer_size +_rx_buffer->head -_rx_buffer->tail)% serial_buffer_size;

硬件串行:operator bool()

返回 true;

内部硬件串行::peek (void)

if (_rx_buffer->head =_rx_buffer->tail){
返回-1;
}否则{
return _rx_buffer->buffer[_rx_buffer->tail];

内部硬件串行:读取(空)

//如果头不在尾前面,我们就没有任何字符
if (_rx_buffer->head =_rx_buffer->tail){
返回-1;
}否则{
unsigned char c =_rx_buffer->buffer[_rx_buffer->tail];
_rx_buffer->tail =(unsigned int)(_rx_buffer->tail + 1)% serial_buffer_size;
返回 c;

空硬件序列::flush()

while (_TX_buffer->head!=_TX_buffer->tail);

size_t 硬件串行::写入(uint8_t c)

unsigned int i =(_tx_buffer->head + 1)% serial_buffer_size;

//如果输出缓冲区已满,则除至之外没有任何其他缓冲区
//等待中断处理程序将其清空一个位
//返回0呢?
while (i =_TX_buffer->tail);

_tx_buffer->buffer[_TX_buffer->head]= c;
_tx_buffer->head = I;

//SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCIFFTX.bit.TXFFIENA=1;

返回1;

中断空 UART_Rx_ISR (空)

unsigned char c = SciaRegs.SCIRXBUF.all;
STORE_CHAR (c、&Rx_buffer);

SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志

PieCtrlRegs.PIEACX.All|=0x100;//发出 PIE ACK

中断空 UART_TX_ISR (空)

if (tx_buffer.head = tx_buffer.tail){
//缓冲器为空,所以禁用中断
//SciaRegs.SCICTL2.bit.TXINTENA=0;
SciaRegs.SCIFFTX.bit.TXFFIENA=0;
SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;//清除 SCI 中断标志
PieCtrlRegs.PIEACK.All|=0x100;
返回;

unsigned char c = TX_buffer.buffer[TX_buffer.tail];
tx_buffer.tail =(tx_buffer.tail + 1)% serial_buffer_size;
#ifdef TMS320F28377S
SciaRegs.SCITXBUF.all = c;
其他
SciaRegs.SCITXBUF = c;
#endif

SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;//清除 SCI 中断标志
PieCtrlRegs.PIEACX.All|=0x100;//发出 PIE ACK

//预实例化对象//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

硬件串行(&Rx_buffer、&TX_buffer);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我假设您正在讨论使用 LAUNCHXL-F28377S。
    GPIO42 J1-10和 GPIO43 J1-9可用作 SCITXDA 和 SCIRXDA

    您必须为 GPIO42和 GPIO43修改以下内容

    //将 GPIO84配置为 SCITXDA (输出引脚)
    //将 GPIO85配置为 SCIRXDA (输入引脚)
    GpioCtrlRegs.GPCGMUX2.bit.GPIO84 = 1;
    GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 1;
    GpioCtrlRegs.GPCGMUX2.bit.GPIO85=1;
    GpioCtrlRegs.GPCMUX2.bit.GPIO85=1;

    //将 GPIO85 (SCIRXDA)配置为异步引脚
    GpioCtrlRegs.GPCQSEL2.bit.GPIO85=3;
    --------------------------------------------------
    //进一步提示需要更改的内容
    //端口 B 多路复用器寄存器值
    //
    //引脚74 (GPIO43)到 SCIRXDA (模式15)
    //引脚73 (GPIO42)到 SCITXDA (模式15)
    #define GPBMUX1_VALUE0x00f00000
    #define GPBMUX2_VALUE0x00000000
    #define GPBGMUX1_VALUE0x00f00000
    #define GPBGMUX2_VALUE0x00000000
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我修改了引脚、但它会产生错误


    /*
    (二
    *HardwareSerial.cpp
    *
    *适用于 C2000的 Arduino 核心文件
    *版权所有(c) 2012 Eric Ma。 保留所有权利。
    *
    *
    (三
    源自:
    HardwareSerial.cpp -适用于 Wiring 的硬件串行库
    版权所有(c) 2006 Nicholas Zambetti. 保留所有权利。

    此库是免费软件;您可以重新分发和/或
    根据 GNU Lesser General Public 的条款对其进行修改
    免费软件基金会发布的许可证;或者
    许可证2.1版或(您可以选择)任何更高版本。

    发布该库的目的是希望它将有所帮助、
    但没有任何保证;甚至没有的暗示保证
    适销性或特定用途的适用性。 请参阅 GNU
    较低一般公共许可证以了解更多详细信息。

    您应该已经收到 GNU Lesser General Public 的副本
    许可证以及此库;如果没有、请写入免费软件
    Foundation、Inc.、51 Franklin St、Fifth Floor、Boston、 MA 02110-1301美国

    2006年11月23日由 David A. Mellis 修改
    2010年9月28日由 Mark Sproul 修改
    *
    #include
    #include
    #include
    #include
    #include "Energia.h"
    #include "wiring_prive.h"
    #include "sci_isr_handler.h"
    #include "HardwareSerial.h"

    HardwareSerial *SerialPtr;

    #define serial_buffer_size 16.

    struct ring_buffer

    unsigned char buffer[serial_buffer_size];
    volatile unsigned int head;
    volatile unsigned int tail;
    };

    环形缓冲器 Rx_buffer ={0}、0、0};
    环形缓冲器 TX_BUFFER ={0}、0、0};

    内联 void store_char (unsigned char c、ring 缓冲区*缓冲区)

    unsigned int i =(unsigned int)(buffer->head + 1)% serial_buffer_size;

    //我们是否应该将接收到的字符存储到该位置
    //在尾前面(意味着头将前进到
    //尾的当前位置)、我们将溢出缓冲区
    //这样我们就不会写字符或将头前移。
    if (i!= buffer->tail){
    Buffer->buffer[缓冲区->head]= c;
    Buffer->Head = I;



    void serialEvent();

    void serialEvent(){}

    void serialEventRun (void)

    if (Serial.available ()) serialEvent();

    //构造函数////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    硬件串行::硬件串行(ring 缓冲区* rx_buffer、ring 缓冲区* tx_buffer)

    _Rx_buffer = Rx_buffer;
    _TX_buffer = TX_buffer;


    //公共方法////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #ifdef TMS320F28069
    #define CPU_FREQ 90E6. // F28069设置为90MHz
    #Elif defed (TMS320F28027)
    #define CPU_FREQ 60E6. //默认= 60MHz。 对于50MHz 器件更改为50E6
    #Elif Defined (TMS320F28377S)
    #define CPU_FREQ200E6//针对 F28377S 设置为200MHz
    其他
    #define CPU_FREQ 60E6. //默认= 60MHz。 对于50MHz 器件更改为50E6
    #endif
    #define LSPCLK_FREQ CPU_FREQ/4

    空硬件串行::begin (无符号长波特)


    EALLOW;
    #ifdef TMS320F28377S
    //将 GPIO84配置为 SCITXDA (输出引脚)
    //将 GPIO85配置为 SCIRXDA (输入引脚)
    GpioCtrlRegs.GPCGMUX2.bit.GPIO42=1;
    GpioCtrlRegs.GPCMUX2.bit.GPIO42=1;
    GpioCtrlRegs.GPCGMUX2.bit.GPIO43=1;
    GpioCtrlRegs.GPCMUX2.bit.GPIO43=1;

    //将 GPIO85 (SCIRXDA)配置为异步引脚
    GpioCtrlRegs.GPCQSEL2.bit.GPIO43 = 3;
    其他
    /*为所选引脚启用内部上拉*/
    /*禁用所选输出引脚的内部上拉电阻
    以降低功耗。 *
    //用户可以启用或禁用上拉。

    GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
    GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1;//禁用 GPIO29的上拉(SCITXDA)

    /*将所选引脚的限定条件设置为仅异步*/
    默认情况下、//输入与 SYSCLKOUT 同步。
    //这将为所选引脚选择异步(无限定条件)。

    GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)

    /*使用 GPIO 寄存器配置 SCI-A 引脚*/
    //这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。

    GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 操作配置 GPIO28
    GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;//为 SCITXDA 操作配置 GPIO29

    #endif //TMS320F28377S
    EDIS;

    //此文件中的 ISR 函数。
    EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
    #ifdef TMS320F28377S
    PieVectTable.SCIA_RX_INT =&UART_Rx_ISR;
    PieVectTable.SCIA_TX_INT =&UART_TX_ISR;
    其他
    PieVectTable.SCIRXINTA =&UART_Rx_ISR;
    PieVectTable.SCITXINTA =&UART_TX_ISR;
    #endif
    EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

    //注意:SCIA 外设的时钟被打开
    //在 InitSysCtrl()函数中
    EALLOW;
    #ifdef TMS320F28377S
    CpuSysRegs.PCLKCR7.bit.SCI_A = 1;
    ClkCfgRegs.LOSPP.bit.LSPCLKDIV = 1;
    其他
    SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A
    SysCtrlRegs.LOSPPCP.bit.LSPCLK = 1; //LSPCLK = SYSCLK/2
    #endif
    EDIS;

    SciaRegs.SCICCR.all =0x0007;// 1停止位,无回路
    //无奇偶校验,8个字符位,
    //异步模式,空闲线协议
    SciaRegs.SCICTL1.all =0x0003;//启用 TX、RX、内部 SCICLK、
    //禁用 RX ERR、睡眠、TXWAKE
    SciaRegs.SCICTL2.all =0x0003;
    SciaRegs.SCICTL2.bit.TXINTENA=1;
    SciaRegs.SCICTL2.bit.RXBKINTENA=1;
    #ifdef TMS320F28377S
    SciaRegs.SCIHBAUD.all =(unsigned int)((f_cpu/(ClkCfgRegs.LOSPP.bit.LSPCLKDIV * 2))/(*波特8)-1)>8;
    SciaRegs.SCILBAUD.all =(unsigned int)((F_CPU/(ClkCfgRegs.LOSPP.bit.LSPCLKDIV * 2))/(*波特8)-1)&0x00FF;
    其他
    SciaRegs.SCIHBAUD =(unsigned int)((f_cpu/(SysCtrlRegs.LOSPP.bit.LSPCLK * 2))/(baud *8)-1)>8;
    SciaRegs.SCILBAUD =(unsigned int)((F_CPU/(SysCtrlRegs.LOSPP.bit.LSPCLK * 2))/(BAUD*8)-1)&0x00FF;
    #endif
    //SciaRegs.SCICCR.bit.LOOPBKENA=0;//禁用回路
    SciaRegs.SCIFFTX.All=0xC020;
    SciaRegs.SCIFFRX.All=0x0021;
    SciaRegs.SCIFFCT.All=0x0;

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


    SciaRegs.SCIFFTX.bit.TXFIFORESET=1;
    SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

    //启用 sci 所需的中断
    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
    PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE 组9,INT1
    PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE 组9,int2
    IER |= 0x100;//启用 CPU INT
    EINT;



    空硬件串行:end()

    //等待传出数据的传输
    while (_TX_buffer->head!=_TX_buffer->tail);

    rx_buffer->head =_rx_buffer->tail;

    //禁用 FIFO 中断
    SciaRegs.SCIFFTX.bit.TXFFIENA=0;
    SciaRegs.SCIFFRX.bit.RXFFIENA=0;



    内部硬件串行:可用(空)

    return (unsigned int)(serial_buffer_size +_rx_buffer->head -_rx_buffer->tail)% serial_buffer_size;


    硬件串行:operator bool()

    返回 true;


    内部硬件串行::peek (void)

    if (_rx_buffer->head =_rx_buffer->tail){
    返回-1;
    }否则{
    return _rx_buffer->buffer[_rx_buffer->tail];



    内部硬件串行:读取(空)

    //如果头不在尾前面,我们就没有任何字符
    if (_rx_buffer->head =_rx_buffer->tail){
    返回-1;
    }否则{
    unsigned char c =_rx_buffer->buffer[_rx_buffer->tail];
    _rx_buffer->tail =(unsigned int)(_rx_buffer->tail + 1)% serial_buffer_size;
    返回 c;



    空硬件序列::flush()

    while (_TX_buffer->head!=_TX_buffer->tail);


    size_t 硬件串行::写入(uint8_t c)

    unsigned int i =(_tx_buffer->head + 1)% serial_buffer_size;

    //如果输出缓冲区已满,则除至之外没有任何其他缓冲区
    //等待中断处理程序将其清空一个位
    //返回0呢?
    while (i =_TX_buffer->tail);

    _tx_buffer->buffer[_TX_buffer->head]= c;
    _tx_buffer->head = I;

    //SciaRegs.SCICTL2.bit.TXINTENA=1;
    SciaRegs.SCIFFTX.bit.TXFFIENA=1;

    返回1;




    中断空 UART_Rx_ISR (空)

    unsigned char c = SciaRegs.SCIRXBUF.all;
    STORE_CHAR (c、&Rx_buffer);

    SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
    SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志

    PieCtrlRegs.PIEACK.All|=0x100; //发出 PIE ACK



    中断空 UART_TX_ISR (空)

    if (tx_buffer.head = tx_buffer.tail){
    //缓冲器为空,所以禁用中断
    //SciaRegs.SCICTL2.bit.TXINTENA=0;
    SciaRegs.SCIFFTX.bit.TXFFIENA=0;
    SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;//清除 SCI 中断标志
    PieCtrlRegs.PIEACK.All|=0x100;
    返回;


    unsigned char c = TX_buffer.buffer[TX_buffer.tail];
    tx_buffer.tail =(tx_buffer.tail + 1)% serial_buffer_size;
    #ifdef TMS320F28377S
    SciaRegs.SCITXBUF.all = c;
    其他
    SciaRegs.SCITXBUF = c;
    #endif

    SciaRegs.SCIFFTX.bit.TXFFINTCLR=1;//清除 SCI 中断标志
    PieCtrlRegs.PIEACK.All|=0x100; //发出 PIE ACK


    //预实例化对象//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    硬件串行(&Rx_buffer、&TX_buffer);


    错误:

    ****为项目 lptms320f28377s_core 构建配置调试****

    "C:\\ti\\ccsv7\\utils\\bin\\gmake"-k -j 4 all -O
    '生成文件:C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp '
    '调用:C2000编译器'
    "c:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/bin/cl2000 -v28 -ml -mt --include_path="C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/F2837xS_common/include --include_path="C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/variants/launchpad_f28377S --include_path="C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000 --include_path="C:/Users/Fer_s/workspace_v7/lptms320f28377s_core --include_path="C:--include_path="C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/include --define=TMS320F28377S --define=F:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp -define=c_defination=gprob_define=g_subs=-super-defendorits=g=c_decuration=g=g_off-cc=gprobulation=g_off-board-super-defendorits=g=g=gprob_subs=g_off-c=gprob_subs=g_display-cn-guiding_da=g_subs=g_off-guides=g=-cn=-cn-cn-cn-cn=

    >>编译失败
    subdir_rules.mk:177:目标'HardwareSerial.obj'的配方失败
    "C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp "、第104行:错误#136:"GPCGMUX2_bits"类没有成员"GPIO42"
    "C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp、第105行:错误#136:"GPCMUX2_bits"类没有成员"GPIO42"
    "C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp "、第106行:错误#136:"GPCGMUX2_bits"类没有成员"GPIO43"
    "C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp、第107行:错误#136:"GPCMUX2_bits"类没有成员"GPIO43"
    "C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp "、第110行:错误#136:"GPCQSEL2_bits"类没有成员"GPIO43"
    在编译"C:/Users/Fer_s/Desktop/energia-0101E0017-windows/energia-0101E0017/hardware/c2000/cores/c2000/HardwareSerial.cpp "时检测到5个错误。
    gmake:***[HardwareSerial.obj]错误1.
    gmake:目标"全部"不会由于错误而重新生成。

    ****构建完成****
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您没有遵循提示

    //进一步提示需要更改的内容
    //端口 B 多路复用器寄存器值
    //
    //引脚74 (GPIO43)到 SCIRXDA (模式15)
    //引脚73 (GPIO42)到 SCITXDA (模式15)
    #define GPBMUX1_VALUE0x00f00000
    #define GPBMUX2_VALUE0x00000000
    #define GPBGMUX1_VALUE0x00f00000
    #define GPBGMUX2_VALUE0x00000000
    --------------------------------------
    GpioCtrlRegs.GPBGMUX1.bit.GPIO42 = 3;
    GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;
    GpioCtrlRegs.GPBGMUX1.bit.GPIO43 = 3;
    GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我没有实现必须在代码中进行修改、我是使用 code composer 的新用户
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题、很高兴为您提供帮助。
    我不知道这应该变为什么、但你会明白它。

    //将 GPIO85 (SCIRXDA)配置为异步引脚
    GpioCtrlRegs.GPCQSEL2.bit.GPIO85=3;