Example #1
0
//funzione che inizializza un'area con il gestore passato come parametro
void init_area(memaddr area, memaddr handler){	
//i parametri sono l'area da inizializzare e il gestore relativo
	state_t *newArea = (state_t*) area;
	STST(newArea);
	newArea->pc = handler;
	newArea->sp = RAM_TOP;
	//interrupt disabilitati e kernel-mode
	newArea->cpsr = STATUS_ALL_INT_DISABLE((newArea->cpsr) | STATUS_SYS_MODE);
}
Example #2
0
/*
@brief Populate a new processor state area.
@param area Physical address of the area.
@param handler Physical address of the handler.
@return Void.
*/
HIDDEN void populateArea(memaddr oldArea, memaddr handler)
{
	state_t *newArea;

	/* The new area points to the old area */
	newArea = (state_t *) oldArea;
	
	/* Save the current processor state */
	STST(newArea);
	
	/* Assign to Program Counter the Exception Handler address */
	newArea->pc = handler;
	newArea->sp = RAM_TOP;
	
	/* Masked interrupts; Virtual Memory off; Kernel Mode on */
	newArea->CP15_Control &= ~(0x1);
	newArea->cpsr = STATUS_ALL_INT_DISABLE(newArea->cpsr) | STATUS_SYS_MODE;
}
Example #3
0
void initExceptionHandlers() {
	state_t handler;
	// Processor Status Register
	handler.cpsr = STATUS_SYS_MODE;
	handler.cpsr = STATUS_ALL_INT_DISABLE(handler.cpsr);
	handler.cpsr = STATUS_DISABLE_TIMER(handler.cpsr);
	// System Control Register
	handler.CP15_Control = CP15_CONTROL_NULL;
	// Other registers
	handler.sp = RAM_TOP;
	handler.pc = (memaddr) excHandleInterrupt;
	memcpy((state_t *) INT_NEWAREA, &handler, sizeof(state_t));
	handler.pc = (memaddr) excHandleTLB;
	memcpy((state_t *) TLB_NEWAREA, &handler, sizeof(state_t));
	handler.pc = (memaddr) excHandlePGMT;
	memcpy((state_t *) PGMTRAP_NEWAREA, &handler, sizeof(state_t));
	handler.pc = (memaddr) excHandleSYSBP;
	memcpy((state_t *) SYSBK_NEWAREA, &handler, sizeof(state_t));
}