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.

[参考译文] TMS320F28075:波特率设置问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/596325/tms320f28075-baud-rate-setting-problem

器件型号:TMS320F28075
主题中讨论的其他器件:C2000WARE

在 C2000Ware V1.00中 F28075的 SCI_LOOP_INTERRUPTS 示例"Example_2807xSCI_FFDLB_INT.c"中、SCI 波特率初始化如下:

//
//定义
//
#define CPU_FREQ 60E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 100E3
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1

SciaRegs.SCIHBAUD.ALL = 0x0000;
SciaRegs.SCILBAUD.ALL = SCI_PRD;

在某些情况下、SCI_PRD 变为大于8位的波特率较低的上述代码不起作用。 上8位应加载到 SCIHBAUD:

SciaRegs.SCIHBAUD.ALL = SCI_PRD>8;
SciaRegs.SCILBAUD.ALL = SCI_PRD;

另一个问题是、作为 C 编程的一般规则、整个 define 表达式、特别是当 contains +或-运算符时、应括在括号中:

#define SCI_PRD ((LSPCLK_FREQ/(SCI_FREQ*8))-1)

虽然原始代码工作正常、但如果您希望快速将周期加倍、则无法获得预期结果:

SciaRegs.SCILBAUD.ALL = SCI_PRD *2;

如果没有括号、则上述扩展为:

SciaRegs.SCILBAUD.ALL =(LSPCLK_FREQ/(SCI_FREQ*8))-1*2; //仅双精度-1

我注意到许多其他 Piccolo 示例代码中存在相同的问题。

mHg

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的反馈。 我将提交错误报告以改进这些示例。

    谢谢、
    惠特尼