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.
1、首先, “TMS320F28004x Real-Time Microcontrollers Technical Reference Manual 6.2.1”中是这样描述的:
2、其次,“TMS320F28004x Real-Time Microcontrollers Technical Reference Manual 6.2.2 Example-1”中例举了这样一个例子:
3、按照6.2.1的算式和6.2.2中的举例参数进行计算验证,结果和6.2.2中一致,过程如下:
FClk0 = 10M, FClk1 = Fsysclk = 100M, DCC Tolerance = 0.1%, Frequency Tolerance = 0.1%
Async.Error = 2+2*(Fsysclk / FClk0) = 22;
Digitization = 8;
DCC Error(in Clock0 Cycles) = 22 + 8 = 30;
Window (in Clock0 Cycles) = (DCC Error)/(0.01* DCC Tolerance) = 30 / ( 0.01 * 0.1) = 30000;
Frequency Error Allowed(in Clock0 Cycles) = Window * (Frequency Tolerance /100) = 30000 * (0.1/100) = 30;
Total Error (in Clock0 Cycles) = DCC Error + Frequency Error Allowed = 30 + 30 = 60;
所以:
Counter0(DCCCNTSEED0)= Window - Total Error = 30000 - 60 = 29940;
Valid0(DCCVALIDSEED0) = 2 * Total Error = 2 * 60 = 120;
Counter1(DCCCNTSEED1) = Window * (FClk1 / FClk0) = 30000 * (100 / 10) = 300000;
这个计算结果是与6.2.2中的举例结果一致的。
4、我们再来看C2000ware(我看的版本是C2000Ware_3_04_00_00)中的例程,任意一个C2000ware例程应用的参数都是一样的
C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f28004x\driverlib\sysctl.c和ysctl.h
C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f28004x\common\source\device.c和device.h四个文件
SysCtl_isPLLValid()函数内进行
Counter0(DCCCNTSEED0)、 Valid0(DCCVALIDSEED0)、 Counter1(DCCCNTSEED1)值的计算
从 FClk0 = 20M, FClk1 = Fsysclk = 200M,dccValidSeed0 = 24;
可以反算出 :
Async.Error = 2+2*(Fsysclk / FClk0) = 22;
Digitization = 8;
DCC Error(in Clock0 Cycles) = 22 + 8 = 30;
Total Error = dccValidSeed0 / 2 = 12;
问题是Total Error (in Clock0 Cycles) = DCC Error + Frequency Error Allowed;上面的计算Total Error已经小于DCC Error,Frequency Error Allowed不可能为负数。
这个怎么解释呢,是我哪里没有计算对吗?