主题中讨论的其他器件: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