请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR6922 主题中讨论的其他器件:MSP-FET
您好!
我想在连续模式下运行计时器@1000Hz 频率、并在计时器中断中进行一些比较、并获取 AD7190 ADC 数据值。 我将 在单独的 while 环路中传输该 ADC 的值。 连接 MSP-FET 时、计时器中断工作正常、并将正确的数据传输到 RPI。 但是、在刷写 MCU 中的 CDE 并断开仿真器与 MCU 计时 器 ADC 的值后、不会改变。 而环路数据传输到 RPI、即 ADC 值。 但这些值是不变的、不会改变。
问题出在哪。 我随附了您的参考代码
#include "common.h" int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT variable_Set_zero(); pin_init(); dev_init_16M(); // Microcontroller set on 16MHz RPI_UART(); Timer(); SPI_INT(); // SPI initialization AD7190_register_read(); __enable_interrupt(); // Re-enable all interrupts __bis_SR_register(GIE); // Enter LPM3, interrupts enabled while (1) { if(DelayStart==1) // For sample 1 send LC data after every 1 sec to tare the LC readings { // (DCO=MCLK=16MHZ )so, // Count/MCLK freq=Time // 16000000/16MHz=1sec __delay_cycles(16000000); // delay calculate on 16 MHz AD7190_CH1_setup(); //while(!((P1IN&BIT7)==0)){} // Wait until data ready CurrentLCValue=ReadData(); // Read load cell data CurrentLCValue1=CurrentLCValue&0x7FFF; LongtoInt.LongData=CurrentLCValue; // Split 3 byte data into single byte giTransmitBuffer[0]=LongtoInt.ByteSplit[1]; giTransmitBuffer[1]=LongtoInt.ByteSplit[0]; giTransmitBuffer[2]=0x00; for(i=0;i<3;i++) // Upto array from start to CRC lenth { while(!(UCA0IFG&UCTXIFG)); UCA0TXBUF = giTransmitBuffer[i]; } } if (DataStart==1) { __delay_cycles(16000); LongtoInt.LongData=CurrentLCValue;//LoadCellData is in 16 bit first 2 byte; giTransmitBuffer[0]=LongtoInt.ByteSplit[1]; giTransmitBuffer[1]=LongtoInt.ByteSplit[0]; giTransmitBuffer[2]=0x00; for(i=0;i<3;i++) // upto array from start to CRC lenth { while(!(UCA0IFG&UCTXIFG)); UCA0TXBUF =giTransmitBuffer[i]; } } /*******************************Test Stop if overload+***************************/ if (teststop==1) { //timer stop TA0CCTL0 &= ~CCIE; RTCCTL0_L &= ~RTCTEVIE; //rtc disabled // relay off P7OUT &=~BIT0; teststop=0; } } } void send_start_command(void) { giTransmitBuffer[0]=0xAA; giTransmitBuffer[1]=0xBB; giTransmitBuffer[2]=0xCC; giTransmitBuffer[3]=0xDD; giTransmitBuffer[4]=0xEE; giTransmitBuffer[5]=0xFF; for(i=0;i<6;i++) // Upto array from start to CRC lenth { while(!(UCA0IFG&UCTXIFG)); UCA0TXBUF = giTransmitBuffer[i]; } }
/* * Timer.c * * Created on: 09-Sep-2022 * Author: Admin */ #include "common.h" void Timer(void) { //Timer Period in Seconds = DIV x (TACCR0 + 1)/Input Clock in Hz //freq=1/timer period //TA0CCR0=(Input Clock in Hz/DIV*Freq)-1; //TA0CCTL0 = CCIE; // TACCR0 interrupt enabled TA0CCR0 = 4000; //(4MHz/4000=1000 Hz) TA0CTL = TASSEL__SMCLK | MC__CONTINUOUS; // SMCLK, continuous mode } // Timer0_A0 interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR (void) #elif defined(__GNUC__) void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) TIMER0_A0_ISR (void) #else #error Compiler not supported! #endif { if(Data==1) { send_start_command(); AD7190_CH1_setup(); //while(!((P1IN&BIT7)==0)){} // Wait until data ready CurrentLCValue=ReadData(); // Read load cell data DataStart=1; } Data=0; AD7190_CH1_setup(); //while(!((P1IN&BIT7)==0)){} // Wait until data ready CurrentLCValue=ReadData(); // Read load cell data CurrentLCValue3=CurrentLCValue&0x7FFF; if(CurrentLCValue3>=0x1F59) // if 9F5961=10443105=9.567mV=675 psi (90 percent of 10.63 mV means 750 psi) is reached test stop //9F59&7FFF=0x1F59 { Error[0]=0x10; Error[1]=0x10; Error[2]=0xAA; teststop=1; } TA0CCR0 += 4000; // Add Offset to TA0CCR0 }