Page 1 of 1

System Timer for MPC56xx

Posted: Fri Jul 05, 2013 5:29 pm
by eugenskt
Hello,

The system timer of MPC56xx needs this defines: EE_DECREMENTER_LEVEL and EE_DECREMENTER_PRIORITY.

Code: Select all

CC    ee_system_timer.c
"D:\\Erika\\eclipse\\plugins\\CO1C02~1.201\\ee_files\\pkg\\cpu\\e200zx\\src\\ee_system_timer.c", line 78: error (dcc:1525): identifier EE_DECREMENTER_LEVEL not declared
"D:\\Erika\\eclipse\\plugins\\CO1C02~1.201\\ee_files\\pkg\\cpu\\e200zx\\src\\ee_system_timer.c", line 79: error (dcc:1525): identifier EE_DECREMENTER_PRIORITY not declared
make: *** [obj/pkg/cpu/e200zx/src/ee_system_timer.o] Error 1
How can I generate it via oil file?

Currently I make is this way:

Code: Select all

	COUNTER os_counter {
		 MINCYCLE = 1;
		 //MAXALLOWEDVALUE = 0xFFFFFFF;
		 MAXALLOWEDVALUE = 0xFFFFFFFF;
		 TICKSPERBASE = 1;

		 TYPE = HARDWARE{
		 	DEVICE = "DECREMENTER";
		 	SYSTEM_TIMER = TRUE;
		 	//PRIORITY = 15;
		 };
		 SECONDSPERTICK = 0.002; /* 2 ms tick duration */
Another question:
Why can not I take a U32_MAX value for MAXALLOWEDVALUE ?

Code: Select all

ERROR > Unable to load "D:\Erika\workspace\Test\conf.oil" caused by :The value '0xFFFFFFFF' is invalid. java.lang.NumberFormatException: For input string: "FFFFFFFF"
Thanks!

Best Regards, Eugen

Re: System Timer for MPC56xx

Posted: Mon Jul 08, 2013 10:16 am
by fesposito
Dear Eugen,

i suppose you are using the Dynamic ISR table approach, that means that in your .oil file you have something like this:

...
...
EE_OPT = "EE_ISR_DYNAMIC_TABLE";
EE_OPT="EE_SYSTEM_TIMER_DEVICE_DECREMENTER";
...
...

those errors are due to a missing definitions (sorry, it is our fault!). This depends on the fact that the ISR table Dynamic approach is not OSEK-oriented and most of our customers do not use this feature anymore. Hence we wrongly removed the generation of such definitions from RT-Druid missing our backward compatibility.

The preferable solution is the static ISR table (OSEK-like) approach that represents the default scenario. I noticed that you added the ee_vtable.c module in your porting, hence i suppose you already supported this feature. According with this assumption removing the "EE_ISR_DYNAMIC_TABLE" from your .oil file should solve your problem.

However, if you want to use the dynamic approach, please wait for our next commit on Erika repository, i will remove the cause of your fault on dynamic isr table management.

We really appreciate your extra-effort.

Regards

Francesco

Re: System Timer for MPC56xx

Posted: Mon Jul 08, 2013 10:19 am
by fesposito
Concerning the 0xFFFFFFFF value in the .oil file, please use this as max value:

MAXALLOWEDVALUE = 2147483647;

Ciao
Francesco

Re: System Timer for MPC56xx

Posted: Thu Sep 26, 2013 2:08 pm
by eugenskt
Hello,

I use options

Code: Select all

		EE_OPT = "ENABLE_SYSTEM_TIMER";
		EE_OPT = "EE_SYSTEM_TIMER_DEVICE_DECREMENTER";
for the system timer

Now IVOR10 calls directly EE_e200zx_system_timer_handle with counts the system timer. Is there a switch from ISR1 (IVOR10) and ISR2 (EE_e200zx_system_timer_handler)? Or is EE_e200zx_system_timer_handle handled as a ISR1?

//Eugen

Re: System Timer for MPC56xx

Posted: Wed Oct 02, 2013 8:22 am
by paolo.gai
The system timer should be a ISR2, because it will implement the alarm notifications linked to its counter... thus activating tasks, setting events, ...

PJ

Re: System Timer for MPC56xx

Posted: Wed Oct 02, 2013 9:01 am
by fesposito
Dear Eugen,

you can also remove the EE_OPT = "ENABLE_SYSTEM_TIMER"; if you have an updated kernel. It is not necessary anymore.

But according with the PJ's previous post, it must to be a ISR2. You can set it to ISR1 following your requirements but be aware to handle your ISR1 in a proper way.

Please notice that we use ISR2_INT because decrementer is a cpu-isr, you can try with ISR1_INT, references:

erika/pkg/cpu/e200zx/src/ee_system_timer.c
erika/pkg/cpu/e200zx/inc/ee_irq.h

but it is not guranteed, it is up to you managing the ISR1.

Francesco

Re: System Timer for MPC56xx

Posted: Wed Oct 02, 2013 1:36 pm
by fesposito
Dear Eugen,

i talked with my collegue in charge of generated part of Erika. If you want to develop your system timer this can be a solution without modifying the kernel:

1) remove each reference to system-timer from the oil file;
2) declare a new ISR1 in the oil file e provide the associated code in your project:

ISR your_system_timer {
CATEGORY = 1;
PRIORITY = XX;
ENTRY = "XXX";
};

3) BE AWARE that you cannot call kernel primitives from a ISR1, hence you have to provide your mechanism in order to have your app working fine if you decide to have your system timer based on ISR1.

Ciao
Francesco

Re: System Timer for MPC56xx

Posted: Wed Oct 02, 2013 2:33 pm
by paolo.gai
In other words, it cannot be used as the "system timer" as specified by the OSEK standard...

the System Timer ISR must be an ISR2...

PJ