XCore DevPlanInit

Files CCore/inc/dev/DevPlanInit.h CCore/src/dev/DevPlanInit.cpp

This part is a PlanInit node for the Dev subsystem and some extra initialization functions. Dev includes initialization the most important peripheral devices on the board, like interrupt controller.


/* DevPlanInit.h */

#ifndef CCore_inc_dev_DevPlanInit_h
#define CCore_inc_dev_DevPlanInit_h

#include <CCore/inc/PlanInit.h>

namespace CCore {
namespace Dev {

/* init/exit functions */

void Init_CPU();

void Exit_CPU();

/* GetPlanInitNode_...() */

PlanInitNode * GetPlanInitNode_Dev();

} // namespace Dev
} // namespace CCore

#endif

The typical implementation is:


/* DevPlanInit.cpp */

#include <CCore/inc/dev/DevPlanInit.h>

#include <CCore/inc/dev/DevIntHandle.h>

#include <__std_init.h>

namespace CCore {
namespace Dev {

/* Init_CPU() */

void Init_CPU()
 {
  // TODO
 }

void Exit_CPU()
 {
  // TODO
 }

/* GetPlanInitNode_...() */

namespace Private_DevPlanInit {

struct Empty
 {
  static const char * GetTag() { return "Dev"; }
 };

PlanInitObject<Empty,PlanInitReq<GetPlanInitNode_DevIntHandle> > Object CCORE_INITPRI_1 ;

} // namespace Private_DevPlanInit

using namespace Private_DevPlanInit;

PlanInitNode * GetPlanInitNode_Dev() { return &Object; }

} // namespace Dev
} // namespace CCore

Two special functions Init_CPU() and Exit_CPU() are used by the first stage initialization code to switch CPU into desired mode of operation and turn back.