RTEMS Timer problem

Joel Sherrill joel.sherrill at oarcorp.com
Tue Apr 3 15:23:26 UTC 2007


hwulf at et-inf.fho-emden.de wrote:
> Hi,
>
> I wanted to configure a timer, whose ISR sends an event to a user task.
> But unfortunately, the timer doesn't seem to expire.
> I already defined CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER and
> CONFIGURE_MAXIMUM_TIMERS 3 in the main module.
>
>   
The Timer driver is a benchmark timer.  You need the Clock driver not
the Timer driver.

--joel
> Are there some other configurations or processor-registers to set in
> order to get the timer started?
>
> Below is the code of the user task and the important functions from my
> timer module.
>
> I'm running the RTEMS program in TSIM.
>
> I thank you very much for every advice in advance!
>
> Kind regards,
>   Hank
>
>
> /******************************************************************************
>   *
>   * USER_TASK1
>   *
>   *  
> ****************************************************************************/
> rtems_task user_task_1(rtems_task_argument unused)
> {
> 	rtems_status_code status;
> 	rtems_event_set task1_event;
>
> 	printf("Task 1: Creating Timer\n");
> 	createTimer(&tTimer[0], Timer_name[0], TIMER_PERIODIC, 100);
> 	printf("Task 1: Activating Timer\n");
> 	activateTimer(tTimer[0]);
>
> 	while(TRUE)
> 	{
> 		int i = 0;
> 		waitForTimerEvent(task1_event, 2*TIMER_INTERVAL);
> 		i++;
> 		printf("Task 1: Event #%i received", i);
> 	}
>
> 	return(status);
> }
>
>
> ......
>
> rtems_timer_service_routine timerISR(rtems_id timer_id, void *user_data)
> {
> 	int i;
>
> 	/* restart timer with the same interval */
> 	rtems_timer_reset(timer_id);
>
> 	/* send event to particular task */
> 	for(i = 0; i < MAXIMUM_TIMER_TASKS; i++)
> 		if(Timer_id[i] == timer_id)
> 		{
> 			rtems_event_send(Task_id[i], RTEMS_EVENT_0);
> 			break;
> 		}
> }
>
> ......
>
> rtems_status_code createTimer(struct obdhtimer_t *tTimer, rtems_name  
> name, enum timer_mode mode, rtems_interval interval)
> {
> 	rtems_status_code status;
>
> 	tTimer->mode = mode;
> 	tTimer->interval = interval;
>
> 	status = rtems_timer_create(name, &(tTimer->id));
>
> 	return(status);
> }
>
> ......
>
> rtems_status_code activateTimer(struct obdhtimer_t tTimer)
> {
> 	rtems_status_code status;
>
> 	status = rtems_timer_fire_after(tTimer.id, tTimer.interval, timerISR, NULL);
>
> 	return(status);
> }
>
> ......
>
> rtems_status_code waitForTimerEvent(rtems_event_set *event_out,  
> rtems_interval timeout)
> {
> 	rtems_status_code status;
>
> 	status = rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT |  
> RTEMS_EVENT_ANY, timeout, event_out);
>
> 	return(status);
> }
>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
>   




More information about the users mailing list