📄 ut13_delay.c
字号:
/***************************************************************************
** File name : ut13_delay.c
** Author : x.cheng
** Create date :
**
** Comment:
** delay defined in this file...
**
** Revisions:
** $Log: ut13_delay.c,v $
**
***************************************************************************/
#include "const.h"
#include "type.h"
#define PIT_TICKS_PER_SEC 0x1234ddL
static unsigned long loopsPerSec = 0;
void __delay( unsigned long loops ) {
int d0;
__asm__ __volatile__ (
"\tjmp 1f\n"
".align 4 \n"
"1:\tjmp 2f\n"
".align 4 \n"
"2:\tdecl %0\n\tjns 2b":"=&a"(d0):"0"(loops));
}
inline void __const_udelay( unsigned long xloops ) {
int d0;
__asm__ ( "mull %0"
: "=d" ( xloops ), "=&a" ( d0 )
: "1" ( xloops ), "0" ( loopsPerSec ) );
__delay( xloops );
}
void UDelay( unsigned long ulLoops ) {
__const_udelay( ulLoops * 0x000010c6 );
}
void Delay( unsigned long ulLoops ) {
UDelay( ulLoops * 100 );
}
/*
int ReadPitTimer() {
int count;
outb( 0x43, 0x00 );
count = inb( 0x40 );
count += inb( 0x40 ) << 8;
return count;
}
void GetDelay() {
int loopBit;
int presicion = 8;
loopsPerSec = ( 1 << 12 );
while ( loopsPerSec <<= 1 ) {
outb( 0x43, 0x30 );
outb( 0x40, 0xFF );
outb( 0x40, 0xFF );
__delay( loopsPerSec );
if ( ReadPitTimer() < 64000 ) {
break;
}
}
loopsPerSec >>= 1;
loopBit = loopsPerSec;
while ( presicion-- && ( loopBit >>= 1 ) ) {
loopsPerSec |= loopBit;
outb( 0x43, 0x30 );
outb( 0x40, 0xFF );
outb( 0x40, 0xFF );
__delay( loopsPerSec ) ;
if ( ReadPitTimer() < 64000 ) {
break;
}
}
outb( 0x43, 0x34 );
outb( 0x40, 0x00 );
outb( 0x40, 0x00 );
loopsPerSec *= PIT_TICKS_PER_SEC / ( 65535 - 64000 );
kPrint( "%lu.%02lu BogoMIPS\n", ( loopsPerSec + 2500 ) / 500000,
( ( loopsPerSec + 2500 ) / 5000 ) % 100 );
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -