📄 qbsl.cpp
字号:
/* \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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -