Ignore:
Timestamp:
Jun 29, 2017, 1:40:15 PM (5 years ago)
Author:
alain
Message:

hal_special: replace hal_time_stamp() by hal_get_cycles()
hal_remote : remove hal_remove_unc()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/tsar_mips32/core/hal_special.c

    r62 r95  
    4242
    4343/////////////////////////
    44 uint32_t hal_time_stamp()
    45 {
    46         uint32_t cycles;
    47  
    48         asm volatile ("mfc0   %0,  $9  " : "=&r" (cycles));
    49  
     44uint64_t hal_get_cycles()
     45{
     46        uint64_t cycles;                // absolute time to be returned
     47    uint32_t last_count;            // last registered cycles count
     48    uint32_t current_count;         // current cycles count
     49        uint32_t elapsed;
     50
     51    core_t * core = CURRENT_THREAD->core;
     52
     53    // get last registered time stamp
     54        last_count = core->time_stamp;
     55
     56    // get current time stamp from hardware register
     57        asm volatile ("mfc0   %0,  $9  " : "=&r" (current_count));
     58
     59        // compute number of elapsed cycles, taking into account 32 bits register wrap
     60        if(current_count < last_count) elapsed = (0xFFFFFFFF - last_count) + current_count;
     61        else                           elapsed = current_count - last_count;
     62
     63    // compute absolute time
     64        cycles = core->cycles + elapsed;
     65
     66        // update core time
     67        core->time_stamp = current_count;
     68        core->cycles     = cycles;
     69
     70        hal_wbflush();
     71
    5072        return cycles;
    5173}
Note: See TracChangeset for help on using the changeset viewer.