サブCPU2010のPICプログラム
ADデータ取得とGPS時刻付けを行いLinux部にデータを出力します。
Revisão | 5bcd41ca54bcf38ba507dd05b3a50834837deeab (tree) |
---|---|
Hora | 2011-12-20 10:32:57 |
Autor | Naoya Takamura <ntaka206@user...> |
Commiter | Naoya Takamura |
CNINT: リングバッファにデータがまだある時は再びDRDY=Lにする処理を追加
SPI1INT: 49個目のデータを取得したらGPS時刻をタイムスタンプとして記録する処理追加
@@ -474,9 +474,6 @@ void __attribute__((interrupt, no_auto_psv, shadow)) _INT0Interrupt(void) | ||
474 | 474 | // AD個数カウンタ=SAMP_FREQ-1 |
475 | 475 | adint_cnt = AD_SAMPLE - 1; |
476 | 476 | |
477 | - // ADバッファにタイムスタンプ付ける | |
478 | - adbuf_time_write(ring_write_get(), &gpsNow); | |
479 | - | |
480 | 477 | // AD START信号による同期 |
481 | 478 | if (sts_get() == STS_SYNCNOW0) { |
482 | 479 | // AD STARTピン=L |
@@ -519,6 +516,7 @@ void __attribute__((interrupt, no_auto_psv)) _INT1Interrupt(void) | ||
519 | 516 | spi1_int_enable(); |
520 | 517 | // 送信 |
521 | 518 | spi1_putc(0); |
519 | + | |
522 | 520 | } |
523 | 521 | /* |
524 | 522 | * AD SPI1 Interrupt Handler |
@@ -564,7 +562,10 @@ void __attribute__((interrupt, auto_psv)) _SPI1Interrupt(void) | ||
564 | 562 | if (adint_ch >= AD_CHNUM) { |
565 | 563 | // 全CHデータgetした |
566 | 564 | adint_cnt++; |
567 | - if (adint_cnt >= AD_SAMPLE) { | |
565 | + if (adint_cnt == AD_SAMPLE-1) { | |
566 | + // ADバッファにタイムスタンプ付ける | |
567 | + adbuf_time_write(ring_write_get(), &gpsNow); | |
568 | + } else if (adint_cnt >= AD_SAMPLE) { | |
568 | 569 | // 1secぶんのデータgetした |
569 | 570 | // DRDY->H DRDY=Lの時でもDRDYのエッジを作るため |
570 | 571 | DRDY_OUT = 1; |
@@ -676,6 +677,11 @@ void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void) | ||
676 | 677 | spi2_putc(SPI_HEAD_CHAR); |
677 | 678 | // リングバッファ読み込み位置+1 |
678 | 679 | ring_read1_plus(); |
680 | + // 送信データがリングバッファにあるとき | |
681 | + if (ring_num1_get() > 0) { | |
682 | + // DRDY->L | |
683 | + DRDY_OUT = 0; | |
684 | + } | |
679 | 685 | } else { |
680 | 686 | // CS=L |
681 | 687 | // リングバッファ読み込み位置get |