//----------------------------------------------------------------------------------------------------// // @func - hw_init //! @desc //! PPC405 hardware specific initialization //! - Initialize PPC exception handling mechanism //! - If an interrupt controller is present, register interrupt controller handler //! as the external interrupt handler. //! - Register PPC timer interrupt handler as the handler for the PPC PIT interrupt //! @param //! - none //! @return //! - nothing //! @note //! - none //----------------------------------------------------------------------------------------------------// void hw_init(void) { Xil_ExceptionInit(); // Initialize exception handling Xil_ExceptionDisable(); #ifdef CONFIG_INTC int_system_init(); #endif Xil_ExceptionRegisterHandler(PIT_INT, (Xil_ExceptionHandler)timer_int_handler, (void *)0); // Register PIT interrupt handler pit_initialize (SYSTMR_INTERVAL); // use SYSTMR_INTERVAL as configured in MSS }
int i386_pc_timer_initialize(void) { int err; pit_initialize(); err = interrupt_register(PIC_IRQ_PIT, INTERRUPT_CALLBACK, timer_handler); if (err < 0) { console_message(T_ERR, "Unable to register timer handler"); return err; } return 0; }
/* Initialize HAL */ int _cdecl HAL_Initialize() { GDT_Initialize(); IDT_Initialize(0x08); InitializePIC(); /* In InitializePIC I remap PIT to IRQ 0x20 */ pit_initialize(0x20, 0x08); pit_start_counter0(1000, PIT_CONTROLWORD_OPERATINGMODE_RATEGEN_MASK); EnableInterrupts(); return 0; }
void kernel_init(multiboot_info_t* mb_info, unsigned int magic) { terminal_initialize(); terminal_writestring("Project Omamori now starting...\n"); gdt_init(); idt_init(); initialize_vmem_allocator(); k_heap_init(); initialize_pageframes(mb_info); // do global constructor setup kprintf("Calling global constructors.\n"); size_t *current = (size_t*)((size_t)&__CTOR_LIST__+4); // skip the first function pointer int n_constructors_called = 1; while(true) { if(*current == 0) break; //kprintf("Calling constructor %u at address 0x%x.\n", (unsigned long long int)n_constructors_called, ((unsigned long long int)*current) ); void(*func)(void) = (void(*)(void))(*current); func(); current++; n_constructors_called++; } kprintf("Called %u global constructors.\n", (unsigned long long int)n_constructors_called); //system_halt; kprintf("Kernel begins at physical address 0x%x, corresponding to pageframe ID %u.\n", (unsigned long long int)(&kernel_start_phys), (unsigned long long int)(pageframe_get_block_from_addr( (size_t)&kernel_start_phys )) ); kprintf("Kernel ends at physical address 0x%x, corresponding to pageframe ID %u.\n", (unsigned long long int)(&kernel_end_phys), (unsigned long long int)(pageframe_get_block_from_addr( (size_t)&kernel_end_phys )) ); terminal_writestring("\nInitializing PICs.\n"); pic_initialize(PIC_IRQ_OFFSET_1, PIC_IRQ_OFFSET_2); set_all_irq_status(true); terminal_writestring("Initializing PIT.\n"); pit_initialize(PIT_DEFAULT_FREQ_DIVISOR); //system_halt }