#define base_stepping_frequency_checksum CHECKSUM("base_stepping_frequency")
#define microseconds_per_step_pulse_checksum CHECKSUM("microseconds_per_step_pulse")
+#define acceleration_ticks_per_second_checksum CHECKSUM("acceleration_ticks_per_second")
Kernel* Kernel::instance;
this->serial = new SerialConsole(USBTX, USBRX, DEFAULT_SERIAL_BAUD_RATE);
// Config next, but does not load cache yet
- this->config = new Config();
+ this->config = new Config();
// Pre-load the config cache, do after setting up serial so we can report errors to serial
this->config->config_cache_load();
delete this->serial;
this->serial= NULL;
- this->streams = new StreamOutputPool();
+ this->streams = new StreamOutputPool();
this->current_path = "/";
this->add_module( this->serial );
// HAL stuff
- add_module( this->slow_ticker = new SlowTicker());
- this->step_ticker = new StepTicker();
- this->adc = new Adc();
+ add_module( this->slow_ticker = new SlowTicker());
+
+ this->step_ticker = new StepTicker();
+ this->adc = new Adc();
// TODO : These should go into platform-specific files
// LPC17xx-specific
NVIC_SetPriorityGrouping(0);
NVIC_SetPriority(TIMER0_IRQn, 2);
NVIC_SetPriority(TIMER1_IRQn, 1);
- NVIC_SetPriority(TIMER2_IRQn, 3);
+ NVIC_SetPriority(TIMER2_IRQn, 4);
+ NVIC_SetPriority(PendSV_IRQn, 3);
+ NVIC_SetPriority(RIT_IRQn, 3); // we make acceleration tick the same prio as pendsv so it can't be pre-empted by end of block
// Set other priorities lower than the timers
- NVIC_SetPriority(ADC_IRQn, 4);
- NVIC_SetPriority(USB_IRQn, 4);
+ NVIC_SetPriority(ADC_IRQn, 5);
+ NVIC_SetPriority(USB_IRQn, 5);
// If MRI is enabled
if( MRI_ENABLE ){
- if( NVIC_GetPriority(UART0_IRQn) > 0 ){ NVIC_SetPriority(UART0_IRQn, 4); }
- if( NVIC_GetPriority(UART1_IRQn) > 0 ){ NVIC_SetPriority(UART1_IRQn, 4); }
- if( NVIC_GetPriority(UART2_IRQn) > 0 ){ NVIC_SetPriority(UART2_IRQn, 4); }
- if( NVIC_GetPriority(UART3_IRQn) > 0 ){ NVIC_SetPriority(UART3_IRQn, 4); }
+ if( NVIC_GetPriority(UART0_IRQn) > 0 ){ NVIC_SetPriority(UART0_IRQn, 5); }
+ if( NVIC_GetPriority(UART1_IRQn) > 0 ){ NVIC_SetPriority(UART1_IRQn, 5); }
+ if( NVIC_GetPriority(UART2_IRQn) > 0 ){ NVIC_SetPriority(UART2_IRQn, 5); }
+ if( NVIC_GetPriority(UART3_IRQn) > 0 ){ NVIC_SetPriority(UART3_IRQn, 5); }
}else{
- NVIC_SetPriority(UART0_IRQn, 4);
- NVIC_SetPriority(UART1_IRQn, 4);
- NVIC_SetPriority(UART2_IRQn, 4);
- NVIC_SetPriority(UART3_IRQn, 4);
+ NVIC_SetPriority(UART0_IRQn, 5);
+ NVIC_SetPriority(UART1_IRQn, 5);
+ NVIC_SetPriority(UART2_IRQn, 5);
+ NVIC_SetPriority(UART3_IRQn, 5);
}
// Configure the step ticker
- this->base_stepping_frequency = this->config->value(base_stepping_frequency_checksum )->by_default(100000)->as_number();
- float microseconds_per_step_pulse = this->config->value(microseconds_per_step_pulse_checksum )->by_default(5 )->as_number();
+ this->base_stepping_frequency = this->config->value(base_stepping_frequency_checksum)->by_default(100000)->as_number();
+ float microseconds_per_step_pulse = this->config->value(microseconds_per_step_pulse_checksum)->by_default(5)->as_number();
+ this->acceleration_ticks_per_second = THEKERNEL->config->value(acceleration_ticks_per_second_checksum)->by_default(1000)->as_number();
// Configure the step ticker ( TODO : shouldnt this go into stepticker's code ? )
- this->step_ticker->set_reset_delay( microseconds_per_step_pulse / 1000000L );
+ this->step_ticker->set_reset_delay( microseconds_per_step_pulse );
this->step_ticker->set_frequency( this->base_stepping_frequency );
+ this->step_ticker->set_acceleration_ticks_per_second(acceleration_ticks_per_second); // must be set after set_frequency
// Core modules
- this->add_module( this->gcode_dispatch = new GcodeDispatch() );
+ this->add_module( new GcodeDispatch() );
this->add_module( this->robot = new Robot() );
this->add_module( this->stepper = new Stepper() );
this->add_module( this->conveyor = new Conveyor() );
}
-// Add a module to Kernel. We don't actually hold a list of modules, we just tell it where Kernel is
+// Add a module to Kernel. We don't actually hold a list of modules we just call its on_module_loaded
void Kernel::add_module(Module* module){
module->on_module_loaded();
}