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.

MSP432跳不出定时器A中断为什么

/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
/* Statics */
const Timer_A_ContinuousModeConfig continuousModeConfig =
{
TIMER_A_CLOCKSOURCE_ACLK,
TIMER_A_CLOCKSOURCE_DIVIDER_8, 
TIMER_A_TAIE_INTERRUPT_ENABLE,
TIMER_A_DO_CLEAR // Clear Counter
};

int main(void)
{
/* Stop watchdog timer */
WDT_A_holdTimer();

/* Configuring P1.0 as output */
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);

/* Starting and enabling ACLK (32kHz) */
CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ);
CS_initClockSignal(CS_ACLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_4);

/* Configuring Continuous Mode */
Timer_A_configureContinuousMode(TIMER_A0_BASE, &continuousModeConfig);

/* Enabling interrupts and going to sleep */
Interrupt_enableSleepOnIsrExit();
Interrupt_enableInterrupt(INT_TA0_N);

/* Enabling MASTER interrupts */
Interrupt_enableMaster();

/* Starting the Timer_A0 in continuous mode */
Timer_A_startCounter(TIMER_A0_BASE, TIMER_A_CONTINUOUS_MODE);
int a;
while(1)
{
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);

}

}

void TA0_N_IRQHandler(void)
{
Timer_A_clearInterruptFlag(TIMER_A0_BASE);
GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);

}

跳不出去定时器A中断,没法执行主函数里面的程序。

调试的时候单步执行的时候可以跳出去。但是一运行就不行了

  • 是你中断函数里干的事情不明显,你应该是想翻转电平吧。你现在做的好像是拉高而已,然后第二次时候你就看不出来了。
  • 一般是这样的。
    /* --COPYRIGHT--,BSD_EX * Copyright (c) 2013, 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. * ******************************************************************************* * * MSP432 CODE EXAMPLE DISCLAIMER * * MSP432 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/.../mspdriverlib for an API functional * library & https://dev.ti.com/pinmux/ for a GUI approach to peripheral configuration. * * --/COPYRIGHT--*/ //****************************************************************************** // MSP432P401 Demo - Timer32 Example, One-shot and periodic mode // // Description: Timer 32 (module 0) is set up in 32-bit, periodic mode. Timer // is configured to count down from a pre-loaded value to 0. Interrupt triggers // when timer count is equal to 0. Timer32 interrupt service routine (ISR) // toggles P1.0 LED. // // MSP432P401x // --------------- // /|\| | // | | | // --|RST | // | | // | P1.0|-->LED // // William Goh // Texas Instruments Inc. // June 2016 (updated) | November 2013 (created) // Built with CCSv6.1, IAR, Keil, GCC //****************************************************************************** #include "msp.h" int main(void) { WDT_A->CTL = WDT_A_CTL_PW | // Stop WDT WDT_A_CTL_HOLD; // Configure GPIO P1->DIR |= BIT0; P1->OUT &= ~BIT0; // Timer32 set up in periodic mode, 32-bit, no pre-scale TIMER32_1->CONTROL = TIMER32_CONTROL_SIZE | TIMER32_CONTROL_MODE; // Load Timer32 counter with period = 0x20000 TIMER32_1->LOAD= 0x20000; // Enalbe the Timer32 interrupt in NVIC __enable_irq(); NVIC->ISER[0] = 1 << ((T32_INT1_IRQn) & 31); // Enable sleep on exit from ISR SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk; // Start Timer32 with interrupt enabled TIMER32_1->CONTROL |= TIMER32_CONTROL_ENABLE | TIMER32_CONTROL_IE; // Enter LPM0; __sleep(); // For the debugger when halt is asserted. This is only needed for // debug mode __no_operation(); } void T32_INT1_IRQHandler(void) { TIMER32_1->INTCLR |= BIT0; // Clear Timer32 interrupt flag P1->OUT ^= BIT0; // Toggle P1.0 LED }

  • GPIO_setOutputHighOnPin:

    This function sets output HIGH on the selected Pin.

    这个就是拉高了您现在所选的pin

    您现在想在中断服务程序中实现什么功能呢?
  • 我拿板子试了一下,我用的是register模式下的例程

    请您把下面的语句注释,是可以停在while(1)的

    /* Enabling interrupts and going to sleep */
    Interrupt_enableSleepOnIsrExit();