2017-04-03 36 views
1

我想MSP430F5529的端口發送通過ADC讀一些傳感器值使用CC3100接入點。 我把getting_started_with_wlan_station例如,從CC3100SDK_1.2.0從slac300i添加MSP430F55xx_adc_01.c代碼。TI CC3100 getting_started_with_wlan_station例子給出了鏈接錯誤

這裏是如何看起來像: 該函數配置ADC

static void read_adc(void){ 
    ADC12CTL0 = ADC12SHT02 + ADC12ON;   // Sampling time, ADC12 on 
    ADC12CTL1 = ADC12SHP;      // Use sampling timer 
    ADC12IE = 0x01;       // Enable interrupt 
    ADC12CTL0 |= ADC12ENC; 
    P6SEL |= 0x01;       // P6.0 ADC option select 
    P1DIR |= 0x01;       // P1.0 output 
} 

主要功能有

read_adc(); 
while(1){ 
    /* Read ADC values*/ 
    ADC12CTL0 |= ADC12SC;     // Start sampling/conversion 
    adc_values = ADC12MEM0 & 0x0FFF; // keep only low 12 bits 
    CLI_Write((_u8 *) adc_values); 
    CLI_Write((_u8 *)"\n"); 
    __bis_SR_register(LPM0_bits + GIE);  // LPM0, ADC12_ISR will force exit 
    __no_operation();      // For debugger 
} 

在建設項目中,有一個鏈接錯誤

<Linking> 
error #10056: symbol "__TI_int54" redefined: first defined in "./main.obj"; redefined in "./board/board.obj" 
error #10010: errors encountered during linking; "getting_started_with_wlan_station.out" not built 

>> Compilation failure 
makefile:165: recipe for target 'getting_started_with_wlan_station.out' failed 
gmake: *** [getting_started_with_wlan_station.out] Error 1 
gmake: Target 'all' not remade because of errors. 

出現此錯誤是因爲在代碼中添加了以下部分,whi CH也從slac300i採取

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) 
#pragma vector = ADC12_VECTOR 
__interrupt void ADC12_ISR(void) 
#elif defined(__GNUC__) 
void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void) 
#else 
#error Compiler not supported! 
#endif 
{ 
    switch(__even_in_range(ADC12IV,34)) 
    { 
    case 0: break;       // Vector 0: No interrupt 
    case 2: break;       // Vector 2: ADC overflow 
    case 4: break;       // Vector 4: ADC timing overflow 
    case 6:         // Vector 6: ADC12IFG0 
     if (ADC12MEM0 >= 0x7ff)     // ADC12MEM = A0 > 0.5AVcc? 
      P1OUT |= BIT0;      // P1.0 = 1 
     else 
      P1OUT &= ~BIT0;      // P1.0 = 0 

     __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU 
    case 8: break;       // Vector 8: ADC12IFG1 
    case 10: break;       // Vector 10: ADC12IFG2 
    case 12: break;       // Vector 12: ADC12IFG3 
    case 14: break;       // Vector 14: ADC12IFG4 
    case 16: break;       // Vector 16: ADC12IFG5 
    case 18: break;       // Vector 18: ADC12IFG6 
    case 20: break;       // Vector 20: ADC12IFG7 
    case 22: break;       // Vector 22: ADC12IFG8 
    case 24: break;       // Vector 24: ADC12IFG9 
    case 26: break;       // Vector 26: ADC12IFG10 
    case 28: break;       // Vector 28: ADC12IFG11 
    case 30: break;       // Vector 30: ADC12IFG12 
    case 32: break;       // Vector 32: ADC12IFG13 
    case 34: break;       // Vector 34: ADC12IFG14 
    default: break; 
    } 
} 

不過,如果我評論了這一點,調試器卡在無限循環中board.c文件的以下部分,存在於項目

/* Catch interrupt vectors that are not initialized. */ 
#ifdef __CCS__ 
#pragma vector=WDT_VECTOR, ADC12_VECTOR, USCI_B1_VECTOR, \ 
    TIMER1_A1_VECTOR, TIMER0_A1_VECTOR, \ 
    TIMER2_A1_VECTOR, COMP_B_VECTOR, USB_UBM_VECTOR, UNMI_VECTOR,DMA_VECTOR, \ 
    TIMER0_B0_VECTOR, TIMER0_B1_VECTOR,SYSNMI_VECTOR, USCI_B0_VECTOR, RTC_VECTOR 
__interrupt void Trap_ISR(void) 
{ 
    while(1); 
} 

請建議我在中斷初始化時缺少的東西,這似乎是問題所在。還是我錯過了別的?

回答

0

__TI_int54是存儲器字,其中ADC12中斷處理程序的地址被存儲。

您正在嘗試定義兩個中斷處理程序相同的中斷,ADC12_ISR()Trap_ISR()。後者僅用於捕獲沒有實際處理程序的中斷,因此您必須從列表中刪除ADC12_VECTOR

+0

非常感謝!這工作! – Deepak

相關問題