TI中文支持网
TI专业的中文技术问题搜集分享网站

G2553 Set DCO问题

P1OUT = 0x00; // Clear P1 output latches
P1SEL = 0x10; // P1.4 SMCLK output
P1DIR = 0x11; // P1.0,4 output

void Set_DCO(unsigned int Delta) // Set DCO to selected frequency
{
unsigned int Compare, Oldcapture = 0;

BCSCTL1 |= DIVA_3; // ACLK = LFXT1CLK/8
TACCTL0 = CM_1 + CCIS_1 + CAP; // CAP, ACLK
TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear

while (1)
{
while (!(CCIFG & TACCTL0)); // Wait until capture occured
TACCTL0 &= ~CCIFG; // Capture occured, clear flag
Compare = TACCR0; // Get current captured SMCLK
Compare = Compare – Oldcapture; // SMCLK difference
Oldcapture = TACCR0; // Save current captured SMCLK

if (Delta == Compare)
break; // If equal, leave "while(1)"
else if (Delta < Compare)
{
DCOCTL–; // DCO is too fast, slow it down
if (DCOCTL == 0xFF) // Did DCO roll under?
if (BCSCTL1 & 0x0f)
BCSCTL1–; // Select lower RSEL
}
else
{
DCOCTL++; // DCO is too slow, speed it up
if (DCOCTL == 0x00) // Did DCO roll over?
if ((BCSCTL1 & 0x0f) != 0x0f)
BCSCTL1++; // Sel higher RSEL
}
}
TACCTL0 = 0; // Stop TACCR0
TACTL = 0; // Stop Timer_A
BCSCTL1 &= ~DIVA_3; // ACLK = LFXT1CLK
}

你好,

       在G2553的例程里面有set DCO的程序如上,有些没看懂。

1.SMCLK和ACLK都设置为在管脚输出了,那timer从哪里捕获的呢?CCI2B是timer的输入,又是比较器的输出,但是比较器好像没有设置输入啊?请问timer是如何捕获ACLK的呢?

2.这个程序DCOCTL–这句话,因为DCOCTL的低位都是MOD,高位才是DCO,所以一般都只能修改MOD而到不了修改DCO。这样是否合理呢?

kqian0327:

你好,

我不太明白你的问题点,DCO时钟输出之后再给到Camture模块吗?

另外,一开始设置DCO时钟不太正常,你可以直接调用DCO校准参数,不需要自己设置:

BCSCTL1 = CALBC1_1MHZ; // use calibrated value for 1MHz operation first DCOCTL = CALDCO_1MHZ; // use calibrated value for 1MHz operation first

Ken Wang:

楼主,

   这段程序主要的目的是利用Timer的capture模式来捕捉我们外围提供的32.768K的晶振,然后8分频,最后得到相应的1Mhz,8Mhz,12Mhz….

这里选择了CCIxB来作为捕捉信号的输入,在每款芯片的datasheet里面有具体定义CCIxA和CCIxB对应的外部或是内部的时钟源。这里应该默认是的CCIxB连接了我们的XIN管脚,也就是TA0.1,捕捉它的时钟源,用来校正DCO的参数。

谢谢

xue liu:

回复 Ken Wang:

非常感谢你的回答。

但是我查了datasheet, ,如图,TA0.1引脚要么是作为timer compare output,要么作为晶振的input,应该不是从这里作为timer输入吧?另外,从程序上看

TACCTL0 = CM_1 + CCIS_1 + CAP; // CAP, ACLK TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear

程序应该使用的TA0.0,还是不太明白timer capture的输入到底是哪里?

麻烦再解释一下,谢谢

xue liu:

回复 Ken Wang:

非常感谢,这回明白了,其实就是一直没有看懂16页那张表,你这么解释一下我就清楚了。

还有一个就是我原帖中第二个问题,这个程序DCOCTL–这句话,因为DCOCTL的低位都是MOD,高位才是DCO,所以一般都只能修改MOD而到不了修改DCO。这样是否合理呢?在设置DCO的时候,是不是应该先设DCO寄存器和RSEL寄存器,最后再调整MOD,还是反过来?

赞(0)
未经允许不得转载:TI中文支持网 » G2553 Set DCO问题
分享到: 更多 (0)