Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "robot_tests"]
path = robot_tests
url = git@github.com:Ell-i/ELL-i-PyBot-Tests.git
url = https://github.com/asifsardar26/ELL-i-PyBot-Tests.git
45 changes: 45 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
FROM 32bit/ubuntu:14.04

MAINTAINER Asif Sardar <engr.asif.sardar@gmail.com>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y \
make \
gcc \
g++ \
git \
python2.7 \
python2.7-dev \
python-setuptools \
wget \
zip \
unzip \
bridge-utils \
valgrind \
nano

ADD https://launchpad.net/gcc-arm-embedded/4.9/4.9-2014-q4-major/+download/gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2 /home/Downloads/
WORKDIR /home/Downloads/
RUN tar xvjf gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2

ENV PATH /home/Downloads/gcc-arm-none-eabi-4_9-2014q4/bin:$PATH

RUN easy_install -Z robotframework
RUN easy_install -Z docutils

RUN git clone https://github.com/asifsardar26/Runtime.git /home/Runtime
RUN git --git-dir /home/Runtime/.git --work-tree /home/Runtime checkout feature-encX24J600-wip

RUN git clone https://github.com/asifsardar26/ELL-i-PyBot-Tests /home/Runtime/robot_tests/

RUN git clone git://github.com/RIOT-OS/RIOT /home/RIOT

#WORKDIR /home/Runtime/stm32/tests/robot_library/
#RUN make PLATFORM=emulator

VOLUME ["/home"]

WORKDIR /home

CMD ["/bin/bash"]
33 changes: 26 additions & 7 deletions stm32/emulator/inc/FLASH.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,41 @@
* along with ELL-i software. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* @author Pekka Nikander <pekka.nikander@ell-i.org> 2014
*/

#include <Register.h>
#include <Register_FLASH_ACR.h>
#include <Register_FLASH_KEYR.h>
#include <Register_FLASH_OPTKEYR.h>
#include <Register_FLASH_SR.h>
#include <Register_FLASH_CR.h>

class Flash {
public:
DEFINE_REGISTER(32, FLASH, ACR, 0x0000000);
DEFINE_REGISTER(32, FLASH, KEYR, 0x0000000);
DEFINE_REGISTER(32, FLASH, OPTKEYR, 0x0000000);
DEFINE_REGISTER(32, FLASH, SR, 0x0000000);
DEFINE_REGISTER(32, FLASH, CR, 0x0000080);
//DEFINE_REGISTER(32, FLASH, ACR, 0x0000000);
//DEFINE_REGISTER(32, FLASH, KEYR, 0x0000000);
//DEFINE_REGISTER(32, FLASH, OPTKEYR, 0x0000000);
//DEFINE_REGISTER(32, FLASH, SR, 0x0000000);
//DEFINE_REGISTER(32, FLASH, CR, 0x0000080);
Register_FLASH_ACR ACR;
Register_FLASH_KEYR KEYR;
Register_FLASH_OPTKEYR OPTKEYR;
Register_FLASH_SR SR;
Register_FLASH_CR CR;
protected:
Flash()
: ACR()
, CR()
: CR(0x0000080)
{}
public:
static Flash FLASH;

void FLASH_ACR_VALUES( Flash *const flash, CALLBACK(FLASH_ACR_CALLBACK) );
void FLASH_KEYR_VALUES( Flash *const flash, CALLBACK(FLASH_KEYR_CALLBACK) );
void FLASH_OPTKEYR_VALUES( Flash *const flash, CALLBACK(FLASH_OPTKEYR_CALLBACK) );
void FLASH_SR_VALUES( Flash *const flash, CALLBACK(FLASH_SR_CALLBACK) );
void FLASH_CR_VALUES( Flash *const flash, CALLBACK(FLASH_CR_CALLBACK) );
};

Flash *const FLASH = &Flash::FLASH;
43 changes: 43 additions & 0 deletions stm32/emulator/inc/GPIO.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
* along with ELL-i software. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* @author Pekka Nikander <pekka.nikander@ell-i.org> 2014
*/

#include <Register.h>
#include <Register_GPIO_MODER.h>
//#include <Register_GPIO_OTYPER.h>
Expand Down Expand Up @@ -72,6 +76,7 @@ class GeneralPurposeInputOutput {
# error "Unknown MCU die. Please define."
#endif
{}

public:
static GeneralPurposeInputOutput GPIOA;
static GeneralPurposeInputOutput GPIOB;
Expand All @@ -82,6 +87,23 @@ class GeneralPurposeInputOutput {
static GeneralPurposeInputOutput GPIOG;
static GeneralPurposeInputOutput GPIOH;
static GeneralPurposeInputOutput GPIOI;

void GPIO_MODER_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_MODER_CALLBACK) );
void GPIO_PUPDR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_PUPDR_CALLBACK) );
void GPIO_ODR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_ODR_CALLBACK) );
void GPIO_IDR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_IDR_CALLBACK) );
#if defined(__STM32F407__) || defined(__STM32F334__)
void GPIO_BSRRL_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_BSRRL_CALLBACK) );
void GPIO_AFR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_AFR_CALLBACK) );
void GPIO_BSRRH_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_BSRRH_CALLBACK) );
#elif defined(__STM32F051__)
void GPIO_BSRR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_BSRR_CALLBACK) );
void GPIO_AFR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_AFR_CALLBACK) );
void GPIO_BRR_VALUES( GeneralPurposeInputOutput *const gpioPort, CALLBACK(GPIO_BRR_CALLBACK) );
#else
# error "Unknown MCU die. Please define."
#endif

};

GeneralPurposeInputOutput *const GPIOA = &GeneralPurposeInputOutput::GPIOA;
Expand All @@ -93,3 +115,24 @@ GeneralPurposeInputOutput *const GPIOF = &GeneralPurposeInputOutput::GPIOF;
GeneralPurposeInputOutput *const GPIOG = &GeneralPurposeInputOutput::GPIOG;
GeneralPurposeInputOutput *const GPIOH = &GeneralPurposeInputOutput::GPIOH;
GeneralPurposeInputOutput *const GPIOI = &GeneralPurposeInputOutput::GPIOI;

/*
* Define macro for GPIO array index calculation from const char* string
* for table based approach and code readability
*/
#define IDX(port) (port[0] - 'A')

/*
* An array of GPIO ports, the index of which is calculated according to
* the GPIO port for the board
*/
GeneralPurposeInputOutput *const GPIOPORT[] = { GPIOA
, GPIOB
, GPIOC
, GPIOD
, GPIOE
, GPIOF
, GPIOG
, GPIOH
, GPIOI
};
19 changes: 17 additions & 2 deletions stm32/emulator/inc/PWR.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,35 @@
* along with ELL-i software. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* @author Pekka Nikander <pekka.nikander@ell-i.org> 2014
*/

#ifndef _PWR_H_
#define _PWR_H_

#include <Register.h>
#if defined(__STM32F407__)
# include <Register_PWR_CR.h>
#endif

class PowerController {
public:
#if defined(__STM32F407__)
DEFINE_REGISTER(32, PWR, CR, 0x00004000); // XXX Check, set to reset value
//DEFINE_REGISTER(32, PWR, CR, 0x00004000); // XXX Check, set to reset value
Register_PWR_CR CR;
#endif
protected:
PowerController() {}
PowerController()
#if defined(__STM32F407__)
: CR(0x00004000)
#endif
{}
public:
static PowerController PWR;
#if defined(__STM32F407__)
void PWR_CR_VALUES( PowerController *const pwr, CALLBACK(PWR_CR_CALLBACK) );
#endif
};

PowerController *const PWR = &PowerController::PWR;
Expand Down
142 changes: 123 additions & 19 deletions stm32/emulator/inc/RCC.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,54 +17,158 @@
* along with ELL-i software. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* @author Pekka Nikander <pekka.nikander@ell-i.org> 2014
*/

#ifndef _RCC_H_
#define _RCC_H_

#include <Register.h>
#include <Register_RCC_CR.h>
#if defined(__STM32F407__)
# include <Register_RCC_PLLCFGR.h>
#endif
#include <Register_RCC_CFGR.h>
#include <Register_RCC_CIR.h>
#include <Register_RCC_APB1RSTR.h>
#if defined(__STM32F407__)
# include <Register_RCC_AHB1ENR.h>
#elif defined(__STM32F051__) || defined(__STM32F334__)
# include <Register_RCC_AHBENR.h>
#else
# error "Unknown MCU die. Please define."
#endif
#include <Register_RCC_APB2ENR.h>
#include <Register_RCC_APB1ENR.h>
#include <Register_RCC_APB2RSTR.h>
#include <Register_RCC_BDCR.h>
#include <Register_RCC_CSR.h>
#include <Register_RCC_AHBRSTR.h>
#include <Register_RCC_CFGR2.h>
#include <Register_RCC_CFGR3.h>
#include <Register_RCC_CR2.h>

class ResetClockControl {
public:

/*
#if defined(__STM32F407__) || defined(__STM32F334__)
DEFINE_REGISTER(32, RCC, CR, 0x0202FF83); // HSERDY set for SetSysClock
//DEFINE_REGISTER(32, RCC, CR, 0x0202FF83); // HSERDY set for SetSysClock
#elif defined(__STM32F051__) || defined(__STM32F334__)
DEFINE_REGISTER(32, RCC, CR, 0x0200FF83); // PLL set for SetSysClock
//DEFINE_REGISTER(32, RCC, CR, 0x0200FF83); // PLL set for SetSysClock
#else
# error "Unknown MCU die. Please define."
#endif
#if defined(__STM32F407__)
DEFINE_REGISTER(32, RCC, PLLCFGR, 0x24003010); // XXX Check, set to reset value
//DEFINE_REGISTER(32, RCC, PLLCFGR, 0x24003010); // XXX Check, set to reset value
#endif
#if defined(__STM32F407__)
Register_RCC_CFGR CFGR;
//Register_RCC_CFGR CFGR;
#elif defined(__STM32F051__) || defined(__STM32F334__)
DEFINE_REGISTER(32, RCC, CFGR, 0x00000008); // PLL set for SetSysClock
//DEFINE_REGISTER(32, RCC, CFGR, 0x00000008); // PLL set for SetSysClock
#else
# error "Unknown MCU die. Please define."
#endif
DEFINE_REGISTER(32, RCC, CIR, 0x00000000);
DEFINE_REGISTER(32, RCC, APB1RSTR, 0x00000000);
//DEFINE_REGISTER(32, RCC, CIR, 0x00000000);
//DEFINE_REGISTER(32, RCC, APB1RSTR, 0x00000000);
#if defined(__STM32F407__)
DEFINE_REGISTER(32, RCC, AHB1ENR, 0x00000014 /* XXX CHECK ME */);
//DEFINE_REGISTER(32, RCC, AHB1ENR, 0x00000014 /* XXX CHECK ME /);
#elif defined(__STM32F051__) || defined(__STM32F334__)
DEFINE_REGISTER(32, RCC, AHBENR, 0x00000014);
//DEFINE_REGISTER(32, RCC, AHBENR, 0x00000014);
#else
# error "Unknown MCU die. Please define."
#endif
DEFINE_REGISTER(32, RCC, APB2ENR, 0x00000000);
DEFINE_REGISTER(32, RCC, APB1ENR, 0x00000000);
DEFINE_REGISTER(32, RCC, APB2RSTR, 0x00000000);
DEFINE_REGISTER(32, RCC, BDCR, 0x00000018);
DEFINE_REGISTER(32, RCC, CSR, 0x0C000000);
DEFINE_REGISTER(32, RCC, AHBRSTR, 0x00000000);
DEFINE_REGISTER(32, RCC, CFGR2, 0x00000000);
DEFINE_REGISTER(32, RCC, CFGR3, 0x00000000);
DEFINE_REGISTER(32, RCC, CR2, 0x0000FF80);
//DEFINE_REGISTER(32, RCC, APB2ENR, 0x00000000);
//DEFINE_REGISTER(32, RCC, APB1ENR, 0x00000000);
//DEFINE_REGISTER(32, RCC, APB2RSTR, 0x00000000);
//DEFINE_REGISTER(32, RCC, BDCR, 0x00000018);
//DEFINE_REGISTER(32, RCC, CSR, 0x0C000000);
//DEFINE_REGISTER(32, RCC, AHBRSTR, 0x00000000);
//DEFINE_REGISTER(32, RCC, CFGR2, 0x00000000);
//DEFINE_REGISTER(32, RCC, CFGR3, 0x00000000);
//DEFINE_REGISTER(32, RCC, CR2, 0x0000FF80);
//########################################
*/
Register_RCC_CR CR;
#if defined(__STM32F407__)
Register_RCC_PLLCFGR PLLCFGR;
#endif
Register_RCC_CFGR CFGR;
Register_RCC_CIR CIR;
Register_RCC_APB1RSTR APB1RSTR;
#if defined(__STM32F407__)
Register_RCC_AHB1ENR AHB1ENR;
#elif defined(__STM32F051__) || defined(__STM32F334__)
Register_RCC_AHBENR AHBENR;
#else
# error "Unknown MCU die. Please define."
#endif
Register_RCC_APB2ENR APB2ENR;
Register_RCC_APB1ENR APB1ENR;
Register_RCC_APB2RSTR APB2RSTR;
Register_RCC_BDCR BDCR;
Register_RCC_CSR CSR;
Register_RCC_AHBRSTR AHBRSTR;
Register_RCC_CFGR2 CFGR2;
Register_RCC_CFGR3 CFGR3;
Register_RCC_CR2 CR2;
protected:
ResetClockControl() {}
ResetClockControl()
#if defined(__STM32F407__) || defined(__STM32F334__)
: CR(0x0202FF83) // HSERDY set for SetSysClock
#elif defined(__STM32F051__) || defined(__STM32F334__)
: CR(0x0200FF83) // PLL set for SetSysClock
#else
# error "Unknown MCU die. Please define."
#endif
#if defined(__STM32F407__)
, PLLCFGR(0x24003010) // XXX Check, set to reset value
#endif
#if defined(__STM32F407__)
, CFGR(0)
#elif defined(__STM32F051__) || defined(__STM32F334__)
, CFGR(0x00000008) // PLL set for SetSysClock
#else
# error "Unknown MCU die. Please define."
#endif
#if defined(__STM32F407__)
, AHB1ENR(0x00000014 /* XXX CHECK ME */)
#elif defined(__STM32F051__) || defined(__STM32F334__)
, AHBENR(0x00000014)
#else
# error "Unknown MCU die. Please define."
#endif
, BDCR(0x0C000000)
, CSR(0x0C000000)
, CR2(0x0000FF80)
{}
public:
static ResetClockControl RCC;

void RCC_CR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CR_CALLBACK) );
#if defined(__STM32F407__)
void RCC_PLLCFGR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_PLLCFGR_CALLBACK) );
#endif
void RCC_CFGR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CFGR_CALLBACK) );
void RCC_CIR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CIR_CALLBACK) );
void RCC_APB1RSTR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_APB1RSTR_CALLBACK) );
#if defined(__STM32F407__)
void RCC_AHB1ENR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_AHB1ENR_CALLBACK) );
#elif defined(__STM32F051__) || defined(__STM32F334__)
void RCC_AHBENR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_AHBENR_CALLBACK) );
#else
# error "Unknown MCU die. Please define."
#endif
void RCC_APB2ENR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_APB2ENR_CALLBACK) );
void RCC_APB1ENR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_APB1ENR_CALLBACK) );
void RCC_APB2RSTR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_APB2RSTR_CALLBACK) );
void RCC_BDCR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_BDCR_CALLBACK) );
void RCC_CSR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CSR_CALLBACK) );
void RCC_AHBRSTR_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_AHBRSTR_CALLBACK) );
void RCC_CFGR2_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CFGR2_CALLBACK) );
void RCC_CFGR3_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CFGR3_CALLBACK) );
void RCC_CR2_VALUES( ResetClockControl *const rcc, CALLBACK(RCC_CR2_CALLBACK) );
};

ResetClockControl *const RCC = &ResetClockControl::RCC;
Expand Down
Loading