diff --git a/platformio.ini b/platformio.ini index b133bed..2fb4226 100644 --- a/platformio.ini +++ b/platformio.ini @@ -24,7 +24,6 @@ upload_protocol = atmel-ice lib_deps = ${env.lib_deps} SparkFun External EEPROM Arduino Library -build_flags = -D ATSAMD21G [env:mega2560] platform = atmelavr @@ -33,7 +32,6 @@ framework = arduino lib_deps = ${env.lib_deps} DIO2 -build_flags = -D ATMEGA2560 [env:mega328] platform = atmelavr @@ -41,5 +39,4 @@ board = uno framework = arduino lib_deps = ${env.lib_deps} - DIO2 -build_flags = -D ATMEGA328 \ No newline at end of file + DIO2 \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 9a03cc4..10584d5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,34 +2,44 @@ #include #include -#define DCC_IRQ_MICROSECONDS 58 +#define DCC_IRQ_MICROSECONDS 29 //////////////////////////////////////////////////////////////// // Motor driver selection: // Comment out all but the two lines that you want to use -// DCC* mainTrack = DCC::Create_WSM_SAMCommandStation_Main(50); -// DCC* progTrack = DCC::Create_WSM_SAMCommandStation_Prog(2); +DCC* mainTrack = DCC::Create_WSM_SAMCommandStation_Main(50); +DCC* progTrack = DCC::Create_WSM_SAMCommandStation_Prog(2); // DCC* mainTrack = DCC::Create_Arduino_L298Shield_Main(50); // DCC* progTrack = DCC::Create_Arduino_L298Shield_Prog(2); -DCC* mainTrack = DCC::Create_Pololu_MC33926Shield_Main(50); -DCC* progTrack = DCC::Create_Pololu_MC33926Shield_Prog(2); +// DCC* mainTrack = DCC::Create_Pololu_MC33926Shield_Main(50); +// DCC* progTrack = DCC::Create_Pololu_MC33926Shield_Prog(2); //////////////////////////////////////////////////////////////// -void main_IrqHandler() { +void waveform_IrqHandler() { mainTrack->interruptHandler(); progTrack->interruptHandler(); } +#if defined(ARDUINO_ARCH_SAMD) +void SERCOM4_Handler() +{ + mainTrack->hdw.railcom_serial->IrqHandler(); +} +#endif + void setup() { + mainTrack->hdw.init(); + progTrack->hdw.init(); + // TimerA is TCC0 on SAMD21, Timer1 on MEGA2560, and Timer1 on MEGA328 // We will fire an interrupt every 58us to generate the signal on the track TimerA.initialize(); TimerA.setPeriod(DCC_IRQ_MICROSECONDS); - TimerA.attachInterrupt(main_IrqHandler); + TimerA.attachInterrupt(waveform_IrqHandler); TimerA.start(); #if defined (ARDUINO_ARCH_SAMD) @@ -41,12 +51,13 @@ void setup() { EEStore::init(); - StringParser::init(mainTrack, progTrack); // Set up the string parser to accept commands from the interfaces - CommManager::showInitInfo(); + JMRIParser::init(mainTrack, progTrack); // Set up the string parser to accept commands from the interfaces + CommManager::showInitInfo(); } void loop() { CommManager::update(); mainTrack->loop(); progTrack->loop(); -} \ No newline at end of file +} +