Compile (but not link) cleanly on stm32
This commit is contained in:
parent
d38a9584c5
commit
a5e47cb3ff
|
@ -28,11 +28,19 @@ framework = energia
|
|||
board = lptm4c1294ncpdt
|
||||
lib_deps = EEPROM
|
||||
|
||||
[env:genericSTM32F103RB]
|
||||
[env:genericSTM32F103R8]
|
||||
platform = ststm32
|
||||
framework = arduino
|
||||
; framework-arduinoststm32
|
||||
board = genericSTM32F103RB
|
||||
board = genericSTM32F103R8
|
||||
lib_deps = EEPROM
|
||||
build_flags = -fpermissive -std=gnu++11
|
||||
|
||||
[env:bluepill_f103c8]
|
||||
platform = ststm32
|
||||
framework = arduino
|
||||
; framework-arduinoststm32
|
||||
board = bluepill_f103c8
|
||||
lib_deps = EEPROM
|
||||
build_flags = -fpermissive -std=gnu++11
|
||||
|
||||
|
@ -43,4 +51,5 @@ env_default = megaatmega2560
|
|||
;The following lines are for testing / experimentation only. Comment the line above to try them out
|
||||
;env_default = teensy35
|
||||
;env_default = LaunchPad_tm4c1294ncpdt
|
||||
;env_default = genericSTM32F103RB
|
||||
;env_default = genericSTM32F103R8
|
||||
;env_default = bluepill_f103c8
|
||||
|
|
|
@ -204,10 +204,13 @@ void sendValues(int packetlength, byte portNum)
|
|||
|
||||
if (portNum == 3)
|
||||
{
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //ATmega2561 does not have Serial3
|
||||
//CAN serial
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //ATmega2561 does not have Serial3
|
||||
Serial3.write("A"); //confirm cmd type
|
||||
Serial3.write(packetlength); //confirm no of byte to be sent
|
||||
#elif defined(CORE_STM32)
|
||||
Serial2.write("A"); //confirm cmd type
|
||||
Serial2.write(packetlength); //confirm no of byte to be sent
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
@ -271,6 +274,8 @@ void sendValues(int packetlength, byte portNum)
|
|||
if (portNum == 0) { Serial.write(response, (size_t)packetlength); }
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //ATmega2561 does not have Serial3
|
||||
else if (portNum == 3) { Serial3.write(response, (size_t)packetlength); }
|
||||
#elif defined(CORE_STM32)
|
||||
else if (portNum == 3) { Serial2.write(response, (size_t)packetlength); }
|
||||
#endif
|
||||
//sei();
|
||||
return;
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
#define CORE_STM32
|
||||
|
||||
inline unsigned char digitalPinToInterrupt(unsigned char Interrupt_pin) { return Interrupt_pin; } //This isn't included in the stm32duino libs (yet)
|
||||
#define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) ) //Seems to be missing from stm32duino. Not even sure it's correct yet
|
||||
#define portOutputRegister(port) (volatile byte *)( &(port->regs->ODR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value
|
||||
#define portInputRegister(port) (volatile byte *)( &(port->regs->IDR) ) //These are defined in STM32F1/variants/generic_stm32f103c/variant.h but return a non byte* value
|
||||
#endif
|
||||
|
||||
//Handy bitsetting macros
|
||||
|
|
|
@ -157,8 +157,56 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
|
||||
#elif defined(STM32_MCU_SERIES)
|
||||
//Placeholders ONLY!
|
||||
|
||||
//https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/STM32F4/cores/maple/libmaple/timer.h#L51
|
||||
#define MAX_TIMER_PERIOD 139808 // 2.13333333uS * 65535
|
||||
#define uS_TO_TIMER_COMPARE(uS) ((uS * 15) >> 5) //Converts a given number of uS into the required number of timer ticks until that time has passed.
|
||||
|
||||
#define FUEL1_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL2_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL3_COUNTER (TIMER2->regs).gen->CNT
|
||||
#define FUEL4_COUNTER (TIMER2->regs).gen->CNT
|
||||
|
||||
#define IGN1_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN2_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN3_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN4_COUNTER (TIMER3->regs).gen->CNT
|
||||
#define IGN5_COUNTER (TIMER1->regs).gen->CNT
|
||||
|
||||
#define FUEL1_COMPARE (TIMER2->regs).gen->CCR1
|
||||
#define FUEL2_COMPARE (TIMER2->regs).gen->CCR2
|
||||
#define FUEL3_COMPARE (TIMER2->regs).gen->CCR3
|
||||
#define FUEL4_COMPARE (TIMER2->regs).gen->CCR4
|
||||
|
||||
#define IGN1_COMPARE (TIMER3->regs).gen->CCR1
|
||||
#define IGN2_COMPARE (TIMER3->regs).gen->CCR2
|
||||
#define IGN3_COMPARE (TIMER3->regs).gen->CCR3
|
||||
#define IGN4_COMPARE (TIMER3->regs).gen->CCR4
|
||||
#define IGN5_COMPARE (TIMER1->regs).gen->CCR1
|
||||
|
||||
//https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/754bc2969921f1ef262bd69e7faca80b19db7524/STM32F1/system/libmaple/include/libmaple/timer.h#L444
|
||||
#define FUEL1_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define FUEL2_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define FUEL3_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define FUEL4_TIMER_ENABLE() (TIMER2->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
#define IGN2_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC2E
|
||||
#define IGN3_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC3E
|
||||
#define IGN4_TIMER_ENABLE() (TIMER3->regs).gen->CCER |= TIMER_CCER_CC4E
|
||||
#define IGN5_TIMER_ENABLE() (TIMER1->regs).gen->CCER |= TIMER_CCER_CC1E
|
||||
|
||||
#define FUEL1_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define FUEL2_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define FUEL3_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define FUEL4_TIMER_DISABLE() (TIMER2->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
|
||||
#define IGN1_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
#define IGN2_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC2E
|
||||
#define IGN3_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC3E
|
||||
#define IGN4_TIMER_DISABLE() (TIMER3->regs).gen->CCER &= ~TIMER_CCER_CC4E
|
||||
#define IGN5_TIMER_DISABLE() (TIMER1->regs).gen->CCER &= ~TIMER_CCER_CC1E
|
||||
|
||||
#endif
|
||||
|
||||
void initialiseSchedulers();
|
||||
|
|
|
@ -428,7 +428,7 @@ void setIgnitionSchedule5(void (*startCallback)(), unsigned long timeout, unsign
|
|||
//Timer3A (fuel schedule 1) Compare Vector
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER3_COMPA_vect, ISR_NOBLOCK) //fuelSchedules 1 and 5
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule1Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -450,7 +450,7 @@ static inline void fuelSchedule1Interrupt() //Most ARM chips can simply call a f
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER3_COMPB_vect, ISR_NOBLOCK) //fuelSchedule2
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule2Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -471,7 +471,7 @@ static inline void fuelSchedule2Interrupt() //Most ARM chips can simply call a f
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER3_COMPC_vect, ISR_NOBLOCK) //fuelSchedule3
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule3Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -492,7 +492,7 @@ static inline void fuelSchedule3Interrupt() //Most ARM chips can simply call a f
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER4_COMPB_vect, ISR_NOBLOCK) //fuelSchedule4
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule4Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -513,7 +513,7 @@ static inline void fuelSchedule4Interrupt() //Most ARM chips can simply call a f
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPA_vect) //ignitionSchedule1
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule1Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -537,7 +537,7 @@ static inline void ignitionSchedule1Interrupt() //Most ARM chips can simply call
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPB_vect) //ignitionSchedule2
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule2Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -561,7 +561,7 @@ static inline void ignitionSchedule2Interrupt() //Most ARM chips can simply call
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER5_COMPC_vect) //ignitionSchedule3
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule3Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -585,7 +585,7 @@ static inline void ignitionSchedule3Interrupt() //Most ARM chips can simply call
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER4_COMPA_vect) //ignitionSchedule4
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule4Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
@ -609,7 +609,7 @@ static inline void ignitionSchedule4Interrupt() //Most ARM chips can simply call
|
|||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER1_COMPC_vect) //ignitionSchedule5
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void ignitionSchedule5Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
|
|
@ -29,6 +29,8 @@ volatile uint16_t lastRPM_100ms; //Need to record this for rpmDOT calculation
|
|||
#if defined (CORE_TEENSY)
|
||||
IntervalTimer lowResTimer;
|
||||
void oneMSInterval();
|
||||
#elif defined(CORE_STM32)
|
||||
void oneMSInterval();
|
||||
#endif
|
||||
void initialiseTimers();
|
||||
|
||||
|
|
|
@ -37,6 +37,11 @@ void initialiseTimers()
|
|||
#elif defined (CORE_TEENSY)
|
||||
//Uses the PIT timer on Teensy.
|
||||
lowResTimer.begin(oneMSInterval, 1000);
|
||||
|
||||
#elif defined(CORE_STM32)
|
||||
Timer4.setChannel1Mode(TIMER_OUTPUTCOMPARE);
|
||||
Timer4.setPeriod(1000);
|
||||
Timer4.attachCompare1Interrupt(oneMSInterval);
|
||||
#endif
|
||||
|
||||
dwellLimit_uS = (1000 * configPage2.dwellLimit);
|
||||
|
@ -48,7 +53,7 @@ void initialiseTimers()
|
|||
//Executes every ~1ms.
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //AVR chips use the ISR for this
|
||||
ISR(TIMER2_OVF_vect, ISR_NOBLOCK)
|
||||
#elif defined (CORE_TEENSY)
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
void oneMSInterval() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
{
|
||||
|
|
|
@ -30,11 +30,31 @@ int freeRam ()
|
|||
|
||||
// The difference is the free, available ram.
|
||||
return (uint16_t)stackTop - heapTop;
|
||||
#elif defined(CORE_STM32)
|
||||
//Figure this out some_time
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void setPinMapping(byte boardID)
|
||||
{
|
||||
//This is dumb, but it'll do for now to get things compiling
|
||||
#if defined(CORE_STM32)
|
||||
#define A0 0
|
||||
#define A1 1
|
||||
#define A2 2
|
||||
#define A3 3
|
||||
#define A4 4
|
||||
#define A5 5
|
||||
#define A6 6
|
||||
#define A7 7
|
||||
#define A8 8
|
||||
#define A9 9
|
||||
#define A13 13
|
||||
#define A14 14
|
||||
#define A15 15
|
||||
#endif
|
||||
|
||||
switch (boardID)
|
||||
{
|
||||
case 0:
|
||||
|
|
Loading…
Reference in New Issue