[求助] 关于MSP430F5529的ADC数据读取问题

飞马君   2017-6-1 10:53 楼主
用的是430ware里的例程,但是我debug的时候,results数组的值全部都是0,也就是没有读取。直接看寄存器值是正常的。
我看到一条错误是说:cannot load from non-primitive location,意思是不能以非源类型(char,int之类的)加载。
无标题.png
求问大家应该如何解决,我是用TI的例程原封不动的,不知道为何出现这种情况。
  1. #include <msp430.h>

  2. #define   Num_of_Results   8
  3.   
  4. volatile unsigned int results[Num_of_Results];
  5.                                             // Needs to be global in this
  6.                                             // example. Otherwise, the
  7.                                             // compiler removes it because it
  8.                                             // is not used for anything.

  9. int main(void)
  10. {
  11.   WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  12.   P6SEL |= 0x01;                            // Enable A/D channel A0
  13.   ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC; // Turn on ADC12, set sampling time
  14.                                             // set multiple sample conversion
  15.   ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2;       // Use sampling timer, set mode
  16.   ADC12IE = 0x01;                           // Enable ADC12IFG.0
  17.   ADC12CTL0 |= ADC12ENC;                    // Enable conversions
  18.   ADC12CTL0 |= ADC12SC;                     // Start conversion
  19.   
  20.   __bis_SR_register(LPM4_bits + GIE);       // Enter LPM4, Enable interrupts
  21.   __no_operation();                         // For debugger
  22.   
  23. }


  24. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  25. #pragma vector=ADC12_VECTOR
  26. __interrupt void ADC12ISR (void)
  27. #elif defined(__GNUC__)
  28. void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12ISR (void)
  29. #else
  30. #error Compiler not supported!
  31. #endif
  32. {
  33.   static unsigned char index = 0;

  34.   switch(__even_in_range(ADC12IV,34))
  35.   {
  36.   case  0: break;                           // Vector  0:  No interrupt
  37.   case  2: break;                           // Vector  2:  ADC overflow
  38.   case  4: break;                           // Vector  4:  ADC timing overflow
  39.   case  6:                                  // Vector  6:  ADC12IFG0
  40.     results[index] = ADC12MEM0;             // Move results
  41.     index++;                                // Increment results index, modulo; Set Breakpoint1 here
  42.    
  43.     if (index == 8)
  44.     {
  45.       index = 0;
  46.     }
  47.   case  8: break;                           // Vector  8:  ADC12IFG1
  48.   case 10: break;                           // Vector 10:  ADC12IFG2
  49.   case 12: break;                           // Vector 12:  ADC12IFG3
  50.   case 14: break;                           // Vector 14:  ADC12IFG4
  51.   case 16: break;                           // Vector 16:  ADC12IFG5
  52.   case 18: break;                           // Vector 18:  ADC12IFG6
  53.   case 20: break;                           // Vector 20:  ADC12IFG7
  54.   case 22: break;                           // Vector 22:  ADC12IFG8
  55.   case 24: break;                           // Vector 24:  ADC12IFG9
  56.   case 26: break;                           // Vector 26:  ADC12IFG10
  57.   case 28: break;                           // Vector 28:  ADC12IFG11
  58.   case 30: break;                           // Vector 30:  ADC12IFG12
  59.   case 32: break;                           // Vector 32:  ADC12IFG13
  60.   case 34: break;                           // Vector 34:  ADC12IFG14
  61.   default: break;
  62.   }
  63. }

回复评论 (2)

好吧,发完贴之后问题就解决了,不知道什么回事,也许是玄学吧
点赞  2017-6-1 10:58
引用: 飞马君 发表于 2017-6-1 10:58
好吧,发完贴之后问题就解决了,不知道什么回事,也许是玄学吧

代码都没改就解决了?

以后请多发贴
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-6-1 11:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复