The current microblaze design only has a single timer. I want to use the 2nd timer on the microblaze to run some low level tasks.
Wondering if someone could see if i'm on the right track. Regarding the timer from the Xilinx api api """The interrupt service routine reads the timer control/status registers to determine the source of the interrupt.""" Also there is a interrupt controller on microblaze that has a single jump register. So the underlying logic is interrupt occurs, 32bit interrupt register is checked for what bits are set determining what interrupts have occured. if bit 0 is set then it is a clock interrupt. Then 2 clock register need checked for what timer caused the interrupt. Current RTEMS implementation only uses 1 of the timers. I added static ISR callbacks for the system and user callback at the top of the mb clock.c file. static rtems_interrupt_handler mblaze_clock_isr = 0x0; static rtems_interrupt_handler mblaze_user_isr = 0x0; I added a callback that checks both registers and calls the appropriate callback. static void microblaze_clock_handler( void * data){ volatile Microblaze_Timer *timer = _Microblaze_Timer; if ( ( timer->tcsr0 & MICROBLAZE_TIMER_TCSR0_T0INT ) == 0 ) { if(mblaze_clock_isr != 0x0){ mblaze_clock_isr(data); } } if ( ( timer->tcsr1 & MICROBLAZE_TIMER_TCSR0_T0INT ) == 0 ) { if(mblaze_user_isr != 0x0){ mblaze_user_isr(data); /* Clear the interrupt */ timer->tcsr1 |= MICROBLAZE_TIMER_TCSR0_T0INT; } } } I updated the ISR register to store the system clock, and replace the isr callback with mine. static void microblaze_clock_handler_install( rtems_interrupt_handler isr ) { rtems_status_code sc = RTEMS_SUCCESSFUL; mblaze_clock_isr = isr; <- Store the system ISR sc = rtems_interrupt_handler_install( 0, "Clock", RTEMS_INTERRUPT_UNIQUE, microblaze_clock_handler, <- Changed from ISR to my new handler. NULL ); if ( sc != RTEMS_SUCCESSFUL ) { bsp_fatal( MICROBLAZE_FATAL_CLOCK_IRQ_INSTALL ); } } To the microblaze bsp.h im adding my callback functions to register the users clock function. void microblaze_user_clock_handler_install(rtems_interrupt_handler isr); And the appropriate non static function to the mb clock.c file void microblaze_user_clock_handler_install(rtems_interrupt_handler isr){ mblaze_user_isr = isr; } Anyhow about to compile and see if it works. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel