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.

[参考译文] TMS320F28069M:SCI 配置中的 Abd 位未设置

Guru**** 2524460 points
Other Parts Discussed in Thread: TMS320F28069M, LAUNCHXL-F28069M, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/698028/tms320f28069m-abd-bit-not-set-in-sci-configration

器件型号:TMS320F28069M
主题中讨论的其他器件: LAUNCHXL-F28069MC2000WARE

您好!

我正在尝试使用 SCI 自动波特配置在我的 Launchpad (TMS320F28069M)中接收字符。 微控制器未接收到任何我正在从串行端口终端传输的字符。 在调试期间、我发现 Abd 位没有被置位。 请支持我如何使用自动波特配置使 UART 工作。 以下是我的代码、

#include "DSP28x_Project.h"//器件头文件和示例 include 文件

//此文件中找到的函数的原型语句。
void scia_echoback_init (void);
void scia_fifo_init (void);
void scia_xmit (int a);
void scia_msg (char * msg);
void scia_Autobaud();

//此示例中使用的全局计数
uint16环计数;
UINT16错误计数;

void main (void)

uint16 ReceivedChar;
char *msg;

//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2806x_SYSCTRL.c 文件中。
InitSysCtrl();

//步骤2. 初始化 GPIO:
//此示例函数位于 F2806x_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio();针对此示例跳过

//对于这个示例、只初始化针对 SCI-A 端口的引脚。
//此函数位于 F2806x_Sci.c 文件中。
InitSciaGpio();

//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;

//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2806x_PIECTRL.c 文件中。
InitPieCtrl();

//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;

//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2806x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2806x_PieVect.c 中找到
InitPieVectTable();

//步骤4. 初始化所有器件外设:
//此函数可在 F2806x_InitPeripherals.c 中找到
// InitPeripherals ();//此示例不需要

//步骤5. 用户特定代码:

LoopCount = 0;
错误计数= 0;

scia_fifo_init();//初始化 SCI FIFO

scia_echoback_init();//初始化用于 echoback 的 SCI
scia_Autobaud();

MSG ="\r\n\n\nHello World!\0";
scia_msg (msg);

MSG ="\r\n 您将输入一个字符,DSP 将回显它! \n\n";
scia_msg (msg);

for (;;)

MSG ="\r\n 输入字符:\0";
scia_msg (msg);

//等待 inc 字符
while (SciaRegs.SCIFFRX.bit.RXFFST!=1){}//等待 XRDY =1为空状态

//获取字符
ReceivedChar = SciaRegs.SCIRXBUF.ALL;

//回显字符
MSG ="您已发送:\0";
scia_msg (msg);
scia_xmit (ReceivedChar);

LoopCount++;

//测试1、SCIA DLB、8位字、波特率0x0103、默认值、1个停止位、 无奇偶校验
void scia_echoback_init ()

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

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;

SciaRegs.SCIHBAUD = 0x0001;// 9600 baud @LSPCLK = 22.5MHz (90MHz SYSCLK)。
SciaRegs.SCILBAUD = 0x0024;

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

//从 SCI 发送一个字符
void scia_xmit (int a)

while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
SciaRegs.SCITXBUF=A;

void scia_msg (char * msg)

int i;
I = 0;
while (msg[i]!='\0')

scia_xmit (msg[i]);
i++;

//初始化 SCI FIFO
void scia_fifo_init()

SciaRegs.SCIFFTX.All=0xE040;
SciaRegs.SCIFFRX.All=0x2044;
SciaRegs.SCIFFCT.All=0x00;

void scia_Autobaud ()

uint16字节数据;
SciaRegs.SCICTL1.bit.SWRESET = 0;
SciaRegs.SCICTL1.bit.SWRESET = 1;


//必须使用大于1的主波特率寄存器
SciaRegs.SCILBAUD = 1;
//准备自动波特率检测
//设置 CDC 位以启用自动波特检测
//并清除 Abd 位
SciaRegs.SCIFFCT.bit.CDC = 1;
SciaRegs.SCIFFCT.bit.ABDCLR = 1;
//等待我们正确读取
//"A"或"A"并锁定
while (SciaRegs.SCIFFCT.bit.Abd!= 1){}
//自动波特率锁定后,清除 Abd 和 CDC 位
SciaRegs.SCIFFCT.bit.ABDCLR = 1;
SciaRegs.SCIFFCT.bit.CDC = 0;
while (SciaRegs.SCIRXST.bit.RXRDY!= 1){}
字节数据= SciaRegs.SCIRXBUF.bit.RXDT;
SciaRegs.SCITXBUF =字节数据;

返回;

谢谢、此致、

Srinivasan K.

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

    请参阅 LAUNCHXL-F28069M 概述用户指南 SPRUI11:

    www.ti.com/lit/SPRUI11

    在 LAUNCHXL-F28069M 上、请检查跳线 JP6和 JP7的设置。 请参阅第7页的第5.2节"串行连接"表1。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    Ken、

    非常感谢您的快速回复。

    希望我的硬件连接正确。 当我发送消息时、我能够在串行端口终端中看到数据。 但这里也有一个问题。 如果我从微控制器传输字符"z"、在串行端口终端中、它作为"h"接收。 我尝试使用不同的波特率配置、但无法解决问题。

    随附的是我的 Launchpad 的屏幕截图、其中包含跳线设置(JP6-未连接、JP7-已连接)、Rx 和 Tx 引脚取自 TP25和 TP26。

    -Srinivasan。

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

    您的代码与 C2000Ware 示例代码'example_2806xSci_Echoback.c'非常相似、只是包含了 scia_Autobaud ()函数以及启用 TXINTENA 和 RXBKINTENA。 此外、您的 scia_autobaud ()函数遵循第887页的 F2806x TRM 第13.1.1.10.3节中概述的步骤、除非您在第1步之前执行第2步(将波特寄存器初始化为1或更低)(为 SCI 启用自动波特检测模式)、但这可能无关紧要。

    请确保您使用主机中的字符"A"或"A"来设置所需的波特率。 然后检查 SCI 波特选择寄存器(SCIHBAUD 和 SCILBAUD)以查看它们是否具有预期值。 如果它们确实具有预期的值、则检查示波器上的数据位串以查看这是否符合预期。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    我们上次听说过您、已经有一段时间了。 因此、我们假设您能够解决您的问题。 如果情况并非如此,请拒绝此解决方案或回复此主题。 如果此主题被锁定、请制作一个描述问题当前状态的新主题。 谢谢你。

    - Ken