X-Git-Url: https://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/a2078944b50e951a3770d89c9d31c5421d8e0643..4dfd2dce60e2e4090903ae9d60926843361a31b0:/src/libs/Kernel.cpp diff --git a/src/libs/Kernel.cpp b/src/libs/Kernel.cpp index f3a73836..3167582a 100644 --- a/src/libs/Kernel.cpp +++ b/src/libs/Kernel.cpp @@ -34,6 +34,7 @@ #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; @@ -46,7 +47,7 @@ Kernel::Kernel(){ 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(); @@ -55,7 +56,7 @@ Kernel::Kernel(){ delete this->serial; this->serial= NULL; - this->streams = new StreamOutputPool(); + this->streams = new StreamOutputPool(); this->current_path = "/"; @@ -88,41 +89,46 @@ Kernel::Kernel(){ 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( new GcodeDispatch() ); @@ -135,7 +141,7 @@ Kernel::Kernel(){ } -// 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(); }