|
初学者编程调试中遇到一些不好理解的问题,请大侠们不吝赐教。调试工具:MSP430F5438A开发板 + IAR。
#include "msp430.h" #include "adc.h" #include "flash.h"
long i,j; int temp[2][1000]; unsigned long Flash_Addr;
double accX[1000]; double accY[1000];
#pragma dataseg = default
void main(void) { WDTCTL = WDTPW + WDTHOLD; i=0; initADC(); while (1) { ADC12CTL0 |= ADC12ENC + ADC12SC; _EINT(); //问题1: 执行完此句后,查看Register SR发现GIE为1,但是,并没有立即进入ADC中断程序,而是又执行了下一句i=i+1才进入中断。更为诡异的是从中断退出后,又执行了一遍i=i+1,这个中断进入和退出应该是这样的吗? i=i+1; i++; _DINT(); } }
#pragma vector = ADC12_VECTOR __interrupt void ADC12_ISR(void) { // ADC12IFG=0; // 问题2: 进入中断后,查看register SR发现GIE已经为0,此处并没有复位GIE,为何为0?难道进入中断后GIE自动会变为0??? 奇怪的是在GIE为0的情况下,执行完中断函数里最后一句,并没有退出中断,而是继续重头执行,这是为何? temp[0] = ADC12MEM1; temp[1] = ADC12MEM2; i++; if (i==1000) { ADC12IFG = 0; //问题3: 运行此句后查看ADC12IFG发现无效,该是1的还是1,我的ADC模式为repeat multichannel, 是不是这种模式下对IFG复位是无效的? ADC12CTL0 &= ~ADC12ENC; _DINT(); } }
希望能够得到各位的帮助。谢谢!
[ 本帖最后由 zeng.43 于 2012-5-13 06:03 编辑 ]
|
|