各位大大:
以下是我的source code ,照理說當我調整 TA1CCR1 的數據時頻寬就會隨之改變,但是不管我數值改多少一直都是一樣的情況,會是我clock選擇的問題嗎?
在麻煩各位前輩幫幫我看一下了>< 謝謝.
int main(void)
{
// Stop watchdog
WDTCTL = WDTPW + WDTHOLD;
UCS_init();
P8DIR |= BIT4;
P8SEL |= BIT4;
InitSystemCLK();
TA1CCR1 = 0;
__enable_interrupt();
// LPM0 (shut down the CPU) with interrupts enabled
__bis_SR_register(CPUOFF | GIE);
}
// This will be called when timer counts to TACCR1.
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
int new_ccr1 = 2000;
// Clear interrupt flag
TA1CCTL1 &= ~CCIFG;
TA1CCR1 = new_ccr1 ;
}
void UCS_init(void)
{
// Set Vcore to accomodate for max. allowed system speed
PMM_setVCore(PMM_BASE,PMMCOREV_3); // Used PMM_CORE_LEVEL_3
// Initialize LFXT1
UCSCTL6 &= ~(XT1OFF); // Enable XT1
UCSCTL6 |= XCAP_3; // Internal load cap 12pF
// Loop until XT1 fault flag is cleared
do
{
UCSCTL7 &= ~XT1LFOFFG; // Clear XT1 fault flags
} while (UCSCTL7 & XT1LFOFFG); // Test XT1 fault flag
// Use 32.768kHz XTAL as reference
// LFXT_Start(XT1DRIVE_3);
// Setup UCS
UCSCTL3 |= SELREF_0; // Set DCO FLL reference = REFO
UCSCTL4 |= SELA_0; // Set ACLK = REFO
// Initialize DCO to 2.45MHz
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_7; // Set RSELx for DCO = 24 MHz
UCSCTL2 = FLLD_0 | 611; // Set DCO Multiplier for 20MHz
// (N + 1) * FLLRef = Fdco
// (611 + 1) * 32768 = 20MHz
// Set FLL Div = fDCOCLK/2
__bic_SR_register(SCG0); // Enable the FLL control loop
// Worst-case settling time for the DCO when the DCO range bits have been
// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
// UG for optimization.
// 32 x 32 x 12 MHz / 32,768 Hz = 375000 = MCLK cycles for DCO to settle
__delay_cycles(625000);
// Loop until XT1, XT2 & DCO fault flag is cleared
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
__no_operation();
}
void InitSystemCLK(void)
{
// Setup TA1
// PWM period
TA1CCR0 = 4500;
TA1CTL = TASSEL_2 | MC_1 ; // SMCLK, upmode, clear TAR
TA1CCTL0 = OUTMOD_7 | CCIE; // CCR0 interrupt enabled
}
居然有那么多用繁体提问的。。。
说说你的程序思路吧,一样的情况是怎么个一样法?
好的
就是不管TA1CCR1調整多少 她的duty cycle都是固定不變的....
我之前大部分都是用G2553來寫 clock選擇比較單純 功能也是正常的
第一次用F6736來寫 clock複雜蠻多的 所以才會想說是不是clock我沒有寫好的問題
我一般也是用G2553来写,我感觉和clock没什么关系,既然能够输出pwm,那么clock就是正常的。
CCR0一般是周期,CCR1或者CCR2是占空比。
会不会你改错一个量了?比如你的输出是由CCR2控制占空比,你却一直修改的CCR1?或者你用的是TimerA1输出,实际修改的却是TimerA0的CCR1?
我觉得应该从这方面去检查。从你的描述看来,已经输出PWM了,说明定时器已经正确配置了,修改不了占空比,很有可能就是改错一个寄存器了。