qbsl.cpp

来自「针对嵌入式反应式系统开发的量子操作系统,见http://code.google.」· C++ 代码 · 共 84 行

CPP
84
字号
/* \file qbsl.cpp
 *		This part covers interrupt handling, power mangement
 *		and work done at system boot.
 */
#include <stdlib.h>
#include "qf/qfpkg.h"

DEFINE_THIS_FILE;

//...................................................................
/// store original global interrupt bit
static bool_t gie_;

//...................................................................
void cirticalsect()
{
	VIC *vic = VIC::instance();
	gie_ = (bool_t)vic->gie((bool)gie_);
}

//...................................................................
// interrupt vector table
void vectbl(int32_t vectnr)
{
	uint32_t irq = VEC_TO_IRQ(vectnr);	
	
	QLog(LEV_LOG, 
		"branch to vector table, irqnr = %d\n", irq);
	
	QIrq::doit(irq);
}

//...................................................................
void tickIsr(uint32_t irq, void *me)
{
	Qdbg("tick ISR\n");
	QF::tick();
}

//...................................................................
void QF::osInit() 
{	
	// interrupt vector table 
	VIC *vic = VIC::instance();
	vic->set_vectable(vectbl);

	// IRQ source channels to vector
	vic->map_vector(VEC_SYSTIMER,IRQ_SYSTIMER);
	vic->map_vector(VEC_ETHNIC, IRQ_ETHNIC);

	// interrupt handling framework
	QIrq::init();	

	// system heartbeat
	SYSTIMER *timer = SYSTIMER::instance();
	timer->map_irq(IRQ_SYSTIMER);	
	timer->reset(1000);
	QIrq::requestIrq(IRQ_SYSTIMER, NULL, tickIsr);
}

//...................................................................
void QF::osCleanup() 
{
	Qdbg("QF exited\n"); 
	exit(0);	
}

//...................................................................
void QF::osStart()
{
	gie_ = 0;

	VIC *vic = VIC::instance();
	vic->gie(true);
	vic->ie(IRQ_SYSTIMER, true);
	vic->ie(IRQ_ETHNIC, true);	
	
	SYSTIMER * timer = SYSTIMER::instance();
	timer->start();
}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?