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.
您好!
在 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