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.

[参考译文] TMS320F28055:SCI-X 单字符接收

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1117788/tms320f28055-sci-x-single-character-receive

器件型号:TMS320F28055

您好!

在 SCI-A/SCI-B/SCI-C 模块中、我们需要从外部源发送两个字符以通过中断获取数据。 是否有任何设置可接收单字符数据? 我的代码如下所示。   

____________________________________________________________________________________________
void scia_Interrupt_Config (void)

EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.SCIRXINTA =&sciaRxFifoIsr;
PieVectTable.SCITXINTA =&sciaTxFifoIsr;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的

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;

____________________________________________________________________________________________
void scia_Port_Config (void)

EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;//为 GPIO29启用上拉(SCITXDA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)
GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 配置 GPIO28
GpioCtrlRegs.GPAMUX2.bit.GPIO29=1;//为 SCITXDA 配置 GPIO29
EDIS;


EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO9=0;
GpioCtrlRegs.GPADIR.bit.GPIO9=1;
EDIS;

____________________________________________________________________________________________
void scia_Module_config (void)

SciaRegs.SCICCR.all = 0x0007;// 1停止位、无环回、无奇偶校验、8个字符位、异步模式、空闲线协议
SciaRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、禁用 RX ERR、 睡眠、TXWAKE
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
Set_Baud_rate (9600);
SciaRegs.SCICCR.bit.LOOPBKENA=0;// 1;//启用回路
SciaRegs.SCIFFTX.ALL = 0xC022;
SciaRegs.SCIFFRX.ALL = 0x0022;
SciaRegs.SCIFFCT.all = 0x00;

SciaRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI
// SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;

____________________________________________________________________________________________
中断空 sciaTxFifoIsr (空)

if (SerialA.scia_BFR_PTR_TX<SerialA.scia_TX_count+1)

SciaRegs.SCITXBUF=SerialA.scia_BFR_TX[SerialA.scia_BFR_PTR_TX];
SerialA.scia_BFR_PTR_TX++;
SciaRegs.SCITXBUF=SerialA.scia_BFR_TX[SerialA.scia_BFR_PTR_TX];
SerialA.scia_BFR_PTR_TX++;

其他

SciaRegs.SCIFFTX.bit.TXFIFOXRESET =0;
SCIA_SET_RX();

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

____________________________________________________________________________________________
中断空 sciaRxFifoIsr (空)

SerialA.scia_BFR_Rx[SerialA.scia_BFR_PTR_Rx]= SciaRegs.SCIRXBUF.all;//读取数据
if (SerialA.scia_BFR_PTR_Rx<scia_BFR_count) SerialA.scia_BFR_PTR_Rx++;
SerialA.scia_BFR_Rx[SerialA.scia_BFR_PTR_Rx]= SciaRegs.SCIRXBUF.all;//读取数据
if (SerialA.scia_BFR_PTR_Rx<scia_BFR_count) SerialA.scia_BFR_PTR_Rx++;

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

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

____________________________________________________________________________________________

此致-

Sudip

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

    您好、Sudip、

    [~ userid="452796" URL"μ C/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1117788/tms320f28055-sci-x-single-character-receive"]是否有任何设置可接收单字符数据? 我的代码如下所示。   [/报价]

    单个字符意味着仅8位? 我看到您正在使用 FIFO。 如果您在应用中启用了 FIFO、请务必将 RXFILL 更改为适当的值、以便在每8位或每2个8位接收一次中断。  

    此致、

    Marlyn

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

    大家好、Marlyn

    非常感谢您的提示响应。实际上、我的目标是、当内部模块接收8位数据时、将通过中断从 Rx 缓冲器中拾取并保持到应用 Rx 缓冲器中。 我修改了基于 FIFO 的示例代码。 您能否提供 修改后的代码来在不使用 FIFO 的情况下接收8位数据?

    此致-

    Sudip

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

    您好、Sudip、

    [引用 userid="452796" URL"~μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1117788/tms320f28055-sci-x-single-character-receive/4143634#4143634"]您是否可以提供 修改后的代码来接收8位数据而不使用 FIFO[引用]

    我目前没有任何代码来显示此功能、但您不需要禁用 FIFO。 使用深度为1 (一个字符)的 FIFO 就足以接收单个字符并触发中断。 有关  如何配置相应电平的说明、请参阅技术参考手册(TRM)中 SCIFFRx 寄存器的 RXFFIL 位。  

    此致、

    Marlyn

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

    您好、Marlyn、

    我的问题可以通过您提供的方式得到解决。 非常感谢您的帮助。

    此致-

    Sudip