楼主是个新手,最近在学msp432时遇到了一个问题,按照官网上下的ADC的程序设置,但是程序运行时总是进不了中断,这个问题已经困扰我很久了,希望大神能看一眼帮我解决一下,不胜感激。
ADC14CTL0 |= ADC14SHT0_2 | ADC14SHP | ADC14ON;// Sampling time, S&H=16, ADC14 on
ADC14CTL1 |= ADC14RES_2 ; // Use sampling timer, 12-bit conversion results
ADC14MCTL0 |= ADC14INCH_1; // A1 ADC input select; Vref=AVCC
ADC14IER0 |= ADC14IE0;
__enable_interrupt();//全局中断
NVIC_ISER0 = 1 << ((INT_ADC14 - 16) & 31); // Enable ADC interrupt in NVIC module
SCB_SCR &= ~SCB_SCR_SLEEPONEXIT; // Wake up on exit from ISR
我已经对照用户手册检验过其设置,都没有问题,求大神帮我看看是不是漏掉了什么没有设置。程序编译没有问题,仿真时在中断程序中设置断点,发现程序不进入中断而是进入一个无尽的循环不产生中断。下面是完整程序。
#include "msp.h"
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
// GPIO Setup
P1OUT &= ~BIT0; // Clear LED to start
P1DIR |= BIT0; // Set P1.0/LED to output
P5SEL1 |= BIT4; // Configure P5.4 for ADC
P5SEL0 |= BIT4;
__enable_interrupt();//全局中断
NVIC_ISER0 = 1 << ((INT_ADC14 - 16) & 31); // Enable ADC interrupt in NVIC module
SCB_SCR &= ~SCB_SCR_SLEEPONEXIT; // Wake up on exit from ISR
// Configure ADC14
ADC14CTL0 |= ADC14SHT0_2 | ADC14SHP | ADC14ON;
// Sampling time, S&H=16, ADC14 on,ADC14SHT0_2 =0x00000200,ADC14SHP=0x04000000;ADC14ON=0x
ADC14CTL1 |= ADC14RES_2 ;
// Use sampling timer, 12-bit conversion results,ADC14RES_2=0x00000020
ADC14MCTL0 |= ADC14INCH_1; // A1 ADC input select; Vref=AVCC
ADC14IER0 |= ADC14IE0;
// Enable ADC conv complete interrupt
while (1)
{
for (i = 20000; i > 0; i--); // Delay
ADC14CTL0 |= ADC14ENC | ADC14SC; // Start sampling/conversion
__sleep();
// __bis_SR_register(LPM0_bits | GIE); // LPM0, ADC14_ISR will force exit
__no_operation(); // For debugger
}
}
// ADC14 interrupt service routine
void ADC14IsrHandler(void) {
__no_operation();
if (ADC14MEM0 >= 0x7FF) // ADC12MEM0 = A1 > 0.5AVcc?
P1OUT |= BIT0; // P1.0 = 1
else
P1OUT &= ~BIT0; // P1.0 = 0
}