Wed 22 Jan 12:17:36 CET 2025
This commit is contained in:
		
							parent
							
								
									d82f750d14
								
							
						
					
					
						commit
						5827e349b3
					
				|  | @ -11,18 +11,32 @@ See the file LICENSE for details. | ||||||
| 
 | 
 | ||||||
| // Minimum PIT frequency is 18.2Hz.
 | // Minimum PIT frequency is 18.2Hz.
 | ||||||
| #define CLICKS_PER_SECOND 20 | #define CLICKS_PER_SECOND 20 | ||||||
|  | #define CLICKS_MILLITIME 1/CLICKS_PER_SECOND | ||||||
| 
 | 
 | ||||||
| #define TIMER0		0x40 | #define TIMER0		    0x40 | ||||||
| #define TIMER_MODE	0x43 | #define TIMER_MODE	  0x43 | ||||||
| #define SQUARE_WAVE     0x36 | #define SQUARE_WAVE   0x36 | ||||||
| #define TIMER_FREQ	1193182 | #define TIMER_FREQ	  1193182 | ||||||
| #define TIMER_COUNT	(((unsigned)TIMER_FREQ)/CLICKS_PER_SECOND) | #define TIMER_COUNT	  (((unsigned)TIMER_FREQ)/CLICKS_PER_SECOND) | ||||||
| 
 | 
 | ||||||
| static uint32_t clicks = 0; | static uint32_t clicks = 0; | ||||||
| static uint32_t seconds = 0; | static uint32_t seconds = 0; | ||||||
| 
 | 
 | ||||||
| static struct list queue = { 0, 0 }; | static struct list queue = { 0, 0 }; | ||||||
| 
 | 
 | ||||||
|  | static unsigned long read_pit_counter(void) { | ||||||
|  | 	unsigned long count = 0; | ||||||
|  | 	// Disable interrupts
 | ||||||
|  | 	// cli();
 | ||||||
|  | 	// al = channel in bits 6 and 7, remaining bits clear
 | ||||||
|  | 	outb(0b0000000,TIMER_MODE); | ||||||
|  | 	 | ||||||
|  | 	count = inb(TIMER0);		// Low byte
 | ||||||
|  | 	count |= inb(TIMER0)<<8;		// High byte
 | ||||||
|  | 	 | ||||||
|  | 	return count; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void clock_interrupt(int i, int code) | static void clock_interrupt(int i, int code) | ||||||
| { | { | ||||||
| 	clicks++; | 	clicks++; | ||||||
|  | @ -67,6 +81,10 @@ void clock_wait(uint32_t millis) | ||||||
| 	} while(total < millis); | 	} while(total < millis); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef KERNEL_CLOCK_EXT | ||||||
|  |   #include "kernel_clock_ext.c" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| void clock_init() | void clock_init() | ||||||
| { | { | ||||||
| 	outb(SQUARE_WAVE, TIMER_MODE); | 	outb(SQUARE_WAVE, TIMER_MODE); | ||||||
|  | @ -76,5 +94,10 @@ void clock_init() | ||||||
| 	interrupt_register(32, clock_interrupt); | 	interrupt_register(32, clock_interrupt); | ||||||
| 	interrupt_enable(32); | 	interrupt_enable(32); | ||||||
| 
 | 
 | ||||||
| 	printf("clock: ticking\n"); | 
 | ||||||
|  | #ifdef KERNEL_CLOCK_EXT | ||||||
|  |   CLOCKINITMESSAGE | ||||||
|  | #else | ||||||
|  | 	printf("clock: ticking %d %% %d\n",read_pit_counter(),TIMER_COUNT); | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user