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.
我用TA0的计数模块1试图输出脉冲波,现在的问题是,程序似乎进入不了中断了,是我的中断向量写错了,还是因为没有正确的开中断呢?
我觉得溢出中断应该是会产生的啊
#include <msp430.h>
/*
* main.c
*/
int i;
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P8DIR |=BIT1;
P8OUT&=~BIT1;
TA0CTL|=MC_1+TASSEL_2+ID_0;//定时器TA0设置为增量计数模式,SMCLK为时钟,无分频
//TA0CCR0=62914-1;
TA0CCR0=512-1;
TA0CCR1=384;
TA0CTL|=TAIE; //允许TA0溢出中断
TA0CCTL1|=CCIE; //允许比较捕获模块1的中断
_EINT();
LPM0;
while(1){
}
return 0;
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void){
P8OUT|=BIT1;
//delay(1000);
for(i=0;i<65535;i++){
;
}
switch(TA0IV){
case 2:
//P7OUT &=~BIT3;
//POUT|=BIT0;
break;
case 10:
//P7OUT|=BIT3;
//P1OUT|=BIT0;
break;
}
}
sfesly sfesly ,
关于你的程序,有以下几个建议:
1. 试着用__bis_SR_register(LPM0_bits + GIE);代码代替_EINT(); LPM0;试试;
2. 请问你的CCR1是用作什么功能的?是想输出脉冲吗?如果是的话,需要设置TA0CCTL1寄存器中的OUTMOD形式。
3. 关于中断,CCR0单独享有一个中断向量TIMER0_A0_VECTOR,CCR2, CCR3……,共享另一个中断向量TIMER0_A1_VECTOR,可查看user guide和头文件。
4. 在初始化Timer时,最好clear 一下TAR.
下面是相关Timer0_A5, Toggle P1.0, CCR0 Up Mode ISR, DCO SMCLK的例子,你参考一下。
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
TA0CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CCR0 = 50000;
TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
__no_operation(); // For debugger
}
// Timer0 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
P1OUT ^= 0x01; // Toggle P1.0
}
另外你可以参考一下附件中输出PWM的code example.
希望对你有帮助!O(∩_∩)O~
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************* * * MSP430 CODE EXAMPLE DISCLAIMER * * MSP430 code examples are self-contained low-level programs that typically * demonstrate a single peripheral function or device feature in a highly * concise manner. For this the code may rely on the device's power-on default * register values and settings such as the clock configuration and care must * be taken when combining code from several examples to avoid potential side * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware * for an API functional library-approach to peripheral configuration. * * --/COPYRIGHT--*/ //******************************************************************************* // MSP430F552x Demo - Timer0_A5, PWM TA1.1-2, Up Mode, DCO SMCLK // // Description: This program generates two PWM outputs on P1.2,P1.3 using // Timer1_A configured for up mode. The value in CCR0, 512-1, defines the PWM // period and the values in CCR1 and CCR2 the PWM duty cycles. Using ~1.045MHz // SMCLK as TACLK, the timer period is ~500us with a 75% duty cycle on P1.2 // and 25% on P1.3. // ACLK = n/a, SMCLK = MCLK = TACLK = default DCO ~1.045MHz. // // MSP430F552x // ------------------- // /|\| | // | | | // --|RST | // | | // | P1.2/TA0.1|--> CCR1 - 75% PWM // | P1.3/TA0.2|--> CCR2 - 25% PWM // // Bhargavi Nisarga // Texas Instruments Inc. // April 2009 // Built with CCSv4 and IAR Embedded Workbench Version: 4.21 //****************************************************************************** #include <msp430.h> int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= BIT2+BIT3; // P1.2 and P1.3 output P1SEL |= BIT2+BIT3; // P1.2 and P1.3 options select TA0CCR0 = 512-1; // PWM Period TA0CCTL1 = OUTMOD_7; // CCR1 reset/set TA0CCR1 = 384; // CCR1 PWM duty cycle TA0CCTL2 = OUTMOD_7; // CCR2 reset/set TA0CCR2 = 128; // CCR2 PWM duty cycle TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, up mode, clear TAR __bis_SR_register(LPM0_bits); // Enter LPM0 __no_operation(); // For debugger }