feat(pit): add pit functions
This commit is contained in:
		
							parent
							
								
									26bdf84db4
								
							
						
					
					
						commit
						416b4337c7
					
				@ -36,6 +36,7 @@ OBJS	= \
 | 
				
			|||||||
	  isr.o \
 | 
						  isr.o \
 | 
				
			||||||
	  pic/pic.o \
 | 
						  pic/pic.o \
 | 
				
			||||||
	  pic/keyboard.o \
 | 
						  pic/keyboard.o \
 | 
				
			||||||
 | 
						  pic/pit.o \
 | 
				
			||||||
	  utils/ring_buffer.o
 | 
						  utils/ring_buffer.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										24
									
								
								k/pic/pit.c
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								k/pic/pit.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					#include "io.h"
 | 
				
			||||||
 | 
					#include "pit.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint64_t counter = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pit_handler(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    counter++;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void init_pit(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // write to control register
 | 
				
			||||||
 | 
					    outb(PIT_CONTROL_REG, PIT_SET_COUNTER_0 | PIT_MODE_2 | PIT_RW_LSB_MSB);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // write frequency
 | 
				
			||||||
 | 
					    outb(PIT_COUNTER_0, DIVIDER_LO);
 | 
				
			||||||
 | 
					    outb(PIT_COUNTER_0, DIVIDER_HI);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint64_t gettick(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return counter * 10;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										38
									
								
								k/pic/pit.h
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										38
									
								
								k/pic/pit.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					#ifndef PIT_H
 | 
				
			||||||
 | 
					#define PIT_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BCD_SET 0x1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PIT_MODE_0 (0x0 << 1)
 | 
				
			||||||
 | 
					#define PIT_MODE_1 (0x1 << 1)
 | 
				
			||||||
 | 
					#define PIT_MODE_2 (0x2 << 1)
 | 
				
			||||||
 | 
					#define PIT_MODE_3 (0x3 << 1)
 | 
				
			||||||
 | 
					#define PIT_MODE_4 (0x4 << 1)
 | 
				
			||||||
 | 
					#define PIT_MODE_5 (0x5 << 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PIT_RW_SPECIAL (0x0 << 4)
 | 
				
			||||||
 | 
					#define PIT_RW_LSB     (0x1 << 4)
 | 
				
			||||||
 | 
					#define PIT_RW_MSB     (0x2 << 4)
 | 
				
			||||||
 | 
					#define PIT_RW_LSB_MSB (0x3 << 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PIT_SET_COUNTER_0 (0x0 << 6)
 | 
				
			||||||
 | 
					#define PIT_SET_COUNTER_1 (0x1 << 6)
 | 
				
			||||||
 | 
					#define PIT_SET_COUNTER_2 (0x2 << 6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// port definition
 | 
				
			||||||
 | 
					#define PIT_COUNTER_0   0x40
 | 
				
			||||||
 | 
					#define PIT_COUNTER_1   0x41
 | 
				
			||||||
 | 
					#define PIT_COUNTER_2   0x42
 | 
				
			||||||
 | 
					#define PIT_CONTROL_REG 0x43
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// to get 100Hz
 | 
				
			||||||
 | 
					#define DIVIDER_LO (11931 & 0xff)
 | 
				
			||||||
 | 
					#define DIVIDER_HI (11931 >> 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void pit_handler(void);
 | 
				
			||||||
 | 
					void init_pit(void);
 | 
				
			||||||
 | 
					uint64_t gettick(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user