// Delay for some usecs. void hal_delay_us(cyg_uint32 delay) { #if 0 int i; for( i = 0; i < delay; i++ ); #else cyg_uint32 now, last, diff, ticks; // The timer actually runs at 1.25 ticks per micrsecond. // Adjust the supplied delay to compensate. delay *= 4; delay /= 5; hal_clock_read(&last); diff = ticks = 0; while (delay > ticks) { hal_clock_read(&now); // Cope with wrap-around of timer if (now < last) diff = ((_period - last) + now); else diff = (now - last); last = now; ticks += diff; } #endif }
/* Delay for some number of useconds */ externC void hal_delay_us(cyg_uint32 us) { cyg_uint32 old_dec, new_dec; long ticks; cyg_uint32 diff, max; cyg_uint32 StatusReg = tmr->control; if (!(StatusReg & TIMER_ENABLE)) { hal_clock_initialize(CYGNUM_HAL_RTC_PERIOD); old_dec = 0; } else hal_clock_read(&old_dec); // Note: the system constant CYGNUM_HAL_RTC_PERIOD corresponds to 10,000us // Scale the desired number of microseconds to be a number of decrementer ticks ticks = ((long long)us * CYGNUM_HAL_RTC_PERIOD) / 10000; max = tmr->loadreg; while (ticks > 0) { do { hal_clock_read(&new_dec); } while (old_dec == new_dec); if (old_dec > new_dec) diff = (max - old_dec + new_dec + 2); else diff = (new_dec - old_dec); old_dec = new_dec; ticks -= diff; } }
void fastPoll( void ) { RANDOM_STATE randomState; BYTE buffer[ RANDOM_BUFSIZE ]; cyg_uint32 clockTicks; initRandomData( randomState, buffer, RANDOM_BUFSIZE ); hal_clock_read( &clockTicks ); endRandomData( randomState, 1 ); }
int main(void) { int i; FILE *f; //char s[] = "Hejsan!\n"; //fwrite(s,strlen(s),1,f) f = fopen("/dev/ser1", "w"); stdout = f; // Redirect stdout printf("Hello, eCos world!\n"); mount(CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1,"/","jffs2"); while(1) { i = hal_clock_read(); } fclose(f); return 0; }