Mercurial > flash_v2
comparison packages/kernel/current/src/common/clock.cxx @ 34:29bc183297e1 ecos-sw-1999-09-02
Merge from eCos master repository on 1999-09-02-16:26:10-BST
| author | jlarmour |
|---|---|
| date | Thu, 02 Sep 1999 16:11:22 +0000 |
| parents | 7253dcc42a09 |
| children | c38311975d4f |
comparison
equal
deleted
inserted
replaced
| 33:7a567ebab069 | 34:29bc183297e1 |
|---|---|
| 658 interrupt.unmask_interrupt(CYGNUM_HAL_INTERRUPT_RTC); | 658 interrupt.unmask_interrupt(CYGNUM_HAL_INTERRUPT_RTC); |
| 659 | 659 |
| 660 Cyg_Clock::real_time_clock = this; | 660 Cyg_Clock::real_time_clock = this; |
| 661 } | 661 } |
| 662 | 662 |
| 663 #ifdef HAL_CLOCK_LATENCY | 663 #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY) && defined(HAL_CLOCK_LATENCY) |
| 664 cyg_tick_count total_clock_latency, total_clock_interrupts; | 664 cyg_tick_count total_clock_latency, total_clock_interrupts; |
| 665 cyg_int32 min_clock_latency = 0x7FFFFFFF; | 665 cyg_int32 min_clock_latency = 0x7FFFFFFF; |
| 666 cyg_int32 max_clock_latency = 0; | 666 cyg_int32 max_clock_latency = 0; |
| 667 bool measure_clock_latency = false; | 667 bool measure_clock_latency = false; |
| 668 #endif | 668 #endif |
| 669 | 669 |
| 670 #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY) | |
| 671 cyg_tick_count total_clock_dsr_latency, total_clock_dsr_calls; | |
| 672 cyg_int32 min_clock_dsr_latency = 0x7FFFFFFF; | |
| 673 cyg_int32 max_clock_dsr_latency = 0; | |
| 674 cyg_int32 clock_dsr_start = 0; | |
| 675 #endif | |
| 676 | |
| 670 // ------------------------------------------------------------------------- | 677 // ------------------------------------------------------------------------- |
| 671 | 678 |
| 672 cyg_uint32 Cyg_RealTimeClock::isr(cyg_vector vector, CYG_ADDRWORD data) | 679 cyg_uint32 Cyg_RealTimeClock::isr(cyg_vector vector, CYG_ADDRWORD data) |
| 673 { | 680 { |
| 674 // CYG_REPORT_FUNCTION(); | 681 // CYG_REPORT_FUNCTION(); |
| 675 | 682 |
| 676 #ifdef HAL_CLOCK_LATENCY | 683 #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY) && defined(HAL_CLOCK_LATENCY) |
| 677 if (measure_clock_latency) { | 684 if (measure_clock_latency) { |
| 678 cyg_int32 delta; | 685 cyg_int32 delta; |
| 679 HAL_CLOCK_LATENCY(&delta); | 686 HAL_CLOCK_LATENCY(&delta); |
| 680 // Note: Ignore a latency of 0 when finding min_clock_latency. | 687 // Note: Ignore a latency of 0 when finding min_clock_latency. |
| 681 if (delta > 0) { | 688 if (delta > 0) { |
| 691 CYG_INSTRUMENT_CLOCK( ISR, 0, 0); | 698 CYG_INSTRUMENT_CLOCK( ISR, 0, 0); |
| 692 | 699 |
| 693 HAL_CLOCK_RESET( CYGNUM_HAL_INTERRUPT_RTC, CYGNUM_KERNEL_COUNTERS_RTC_PERIOD ); | 700 HAL_CLOCK_RESET( CYGNUM_HAL_INTERRUPT_RTC, CYGNUM_KERNEL_COUNTERS_RTC_PERIOD ); |
| 694 | 701 |
| 695 Cyg_Interrupt::acknowledge_interrupt(CYGNUM_HAL_INTERRUPT_RTC); | 702 Cyg_Interrupt::acknowledge_interrupt(CYGNUM_HAL_INTERRUPT_RTC); |
| 696 | 703 |
| 704 #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY) | |
| 705 HAL_CLOCK_READ(&clock_dsr_start); | |
| 706 #endif | |
| 697 return Cyg_Interrupt::CALL_DSR|Cyg_Interrupt::HANDLED; | 707 return Cyg_Interrupt::CALL_DSR|Cyg_Interrupt::HANDLED; |
| 698 } | 708 } |
| 699 | 709 |
| 700 // ------------------------------------------------------------------------- | 710 // ------------------------------------------------------------------------- |
| 701 | 711 |
| 702 void Cyg_RealTimeClock::dsr(cyg_vector vector, cyg_ucount32 count, CYG_ADDRWORD data) | 712 void Cyg_RealTimeClock::dsr(cyg_vector vector, cyg_ucount32 count, CYG_ADDRWORD data) |
| 703 { | 713 { |
| 704 // CYG_REPORT_FUNCTION(); | 714 // CYG_REPORT_FUNCTION(); |
| 715 | |
| 716 #if defined(CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY) | |
| 717 if (measure_clock_latency) { | |
| 718 cyg_int32 delta; | |
| 719 HAL_CLOCK_READ(&delta); | |
| 720 delta -= clock_dsr_start; | |
| 721 // Note: Ignore a latency of <= 0 when finding min_clock_latency. | |
| 722 if (delta > 0 ) { | |
| 723 // Valid delta measured | |
| 724 total_clock_dsr_latency += delta; | |
| 725 total_clock_dsr_calls++; | |
| 726 if (min_clock_dsr_latency > delta) min_clock_dsr_latency = delta; | |
| 727 if (max_clock_dsr_latency < delta) max_clock_dsr_latency = delta; | |
| 728 } | |
| 729 } | |
| 730 #endif | |
| 705 | 731 |
| 706 Cyg_RealTimeClock *rtc = (Cyg_RealTimeClock *)data; | 732 Cyg_RealTimeClock *rtc = (Cyg_RealTimeClock *)data; |
| 707 | 733 |
| 708 CYG_INSTRUMENT_CLOCK( TICK_START, | 734 CYG_INSTRUMENT_CLOCK( TICK_START, |
| 709 rtc->current_value_lo(), | 735 rtc->current_value_lo(), |
