This program can detect the type(mbed or LPCXpresso) of platform. The sample recognizes mbed or LPCXpresso.
This program detects the LPCXpresso and mbed at run time.
There is a difference in the value of the CoreDebugRegister LPCXpresso and mbed.
The program check those bits and select platform type.
#include "mbed.h" #include "PlatformInfo.h" DigitalOut mbedled(LED1); DigitalOut lpcxled(P0_22); using namespace MiMic; int main(){ switch(PlatformInfo::getPlatformType()){ case PlatformInfo::PF_MBED: while(1) { mbedled = 1; wait(0.2); mbedled = 0; wait(0.2); } case PlatformInfo::PF_LPCXPRESSO: while(1) { lpcxled = 1; wait(0.1); lpcxled = 0; wait(0.1); } } }
If program run on mbed, LED1(blue) will be blinking. If it run on LPCXpresso, LED2(red) will be blinking.
PlatformInfo.cpp
- Committer:
- nyatla
- Date:
- 2013-05-05
- Revision:
- 0:ef577a5fd78f
File content as of revision 0:ef577a5fd78f:
#include "PlatformInfo.h" #define REG_HCSR 0xe000edf0 #define REG_DEMCR 0xE000EDFC #include "mbed.h" namespace MiMic { int PlatformInfo::_pftype=PF_UNKNOWN; void PlatformInfo::check() { #if PlatformInfo_DETECTION_MODE==PlatformInfo_DETECTION_MODE_MBED _pftype=PF_MBED; return; #elif PlatformInfo_DETECTION_MODE==PlatformInfo_DETECTION_MODE_LPCXPRESSO _pftype=PF_LPCXPRESSO; return; #elif PlatformInfo_DETECTION_MODE==PlatformInfo_DETECTION_MODE_AUTO //LPCXpresso is return S_RESET_ST==1 when standalone. wait_ms(200); unsigned int v; v=*(unsigned int*)REG_HCSR; //check Debug Halting Control and Status::S_RESET_ST sticky bit if((v & 0x02000000)!=0){ //may be LPC-Standalone _pftype=PF_LPCXPRESSO; return; } v=(*(unsigned int*)REG_DEMCR); if((v & 0x01000000)==0x0){ //may be mbed _pftype=PF_MBED; return; } _pftype=PF_LPCXPRESSO; return; #else #error "ERROR!" #endif } int PlatformInfo::getPlatformType() { if(_pftype==PF_UNKNOWN){ check(); } return _pftype; } }