マイレシーバがP1.1でデジタルデータを送信します。私はすでにタイマーを設定しているので、立ち下がりエッジまたは立ち上がりエッジが発生した場合に割り込みが発生します。私はどのように私はエッジ間の実際の時間を取得するか知っていると思う。その後、私はそれらを配列に保存したいと思います。MSP430 G2553 TimerA IRレシーバの比較モード
メイン:
// Stop watchdog timer
WDTCTL = WDTPW + WDTHOLD;
//1mhz = 0.000001
BCSCTL1 = CALBC1_1MHZ; // load calibrated data
DCOCTL = CALDCO_1MHZ;
//Define Outputs
P1DIR = green_led+red_led+IR_Send;
P2DIR = LED1+LED2+LED3;
//Define Inputs
P1DIR &= ~IR_Recv;
//Set IR_Recv as input for Timer (TA0.CCI0A)
P1SEL |= BIT1;
//Timer_A using SMCLK/8 = 0.000008s and Continuous mode
TACTL = TASSEL_2 | MC_2 | ID_3;
// falling edge and rising edge capture mode, CCI0A, enable IE
CCTL0 = CM_3 | CCIS_0 | CAP | CCIE;
//Enter LPM and enable Global Interrupts
__bis_SR_register(CPUOFF + GIE);
割り込みルーチン:
//gets called when falling or rising edge is detected on IR_Recv
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
if(edgeCount < 10){
rxData[edgeCount] = TACCR0;
TACCR0 = 0;
}
edgeCount++;
P2OUT ^= LED2;
//Clear interrupt Flag
TACCTL0 &= ~CCIFG;
//go back to LPM
__bic_SR_register_on_exit (CPUOFF);
}
あなたは 'rxData [0]'と 'rxData [1]'を持っていて、それらの間隔を知りたいですか? –
。 TACCR0は現在の「時間」を得るための正しいレジスタでもありますか?最初のエッジが受信されたときにタイマーを開始するにはどうすればよいですか? –
たとえば、 'rxData [0]'の値が '1010'で、' rxData [1] 'の値が' 1234'の場合、それらの間に何回のティックが経過したか知りたいですか? ( '224') –