Page 1 of 1

Timer- peripheral

Posted: Thu Aug 06, 2015 8:35 am
by anitasure123
Hello There,
This is simple code to print the "Hello" on astrobe terminal after delay of 2 seconds. Here to create a delay i am using Timer0 peripheral. But not generating the delay, following is the code:
////////////////////////////////////////////////////////////////////////////////
MODULE Timer_demo;
IMPORT Main,Out,In,MCU,SYSTEM,Timer,LinkOptions;

PROCEDURE Power_up();
VAR
s:SET;
s1,i:INTEGER;
BEGIN
SYSTEM.GET(MCU.PCONP,s);
SYSTEM.PUT(MCU.PCONP,s + {1}); (*enable power for Timer0*)
END Power_up;

PROCEDURE Timer_init(val:INTEGER);
VAR
s:SET;
s1,i,clk:INTEGER;
BEGIN
clk:=LinkOptions.Fosc DIV (4*1000000)-1;

Power_up();

SYSTEM.GET(MCU.T0TCR,s);
SYSTEM.PUT(MCU.T0TCR,s+{1});(*reset timer*)

SYSTEM.PUT(MCU.T0PR,0);
SYSTEM.PUT(MCU.T0MR0,val*clk);

SYSTEM.GET(MCU.T0MCR,s); (*stop on match0*)
SYSTEM.PUT(MCU.T0MCR,s+{2});

SYSTEM.GET(MCU.T0TCR,s);(*enable timer*)
SYSTEM.PUT(MCU.T0TCR,s+{0});

(*wait until time has elapsed
REPEAT UNTIL SYSTEM.BIT(MCU.T0TCR,1); *)
END Timer_init;

PROCEDURE delay_milli(sec:INTEGER);
BEGIN
Timer_init(sec);
END delay_milli;

PROCEDURE Hello;
BEGIN

Out.String("Hello"); Out.Ln;
delay_milli(2000000);

Out.String("Hello"); Out.Ln;
delay_milli(2000000);


END Hello;
BEGIN
Hello;
END Timer_demo.
//////////////////////////////////////////////////////////////////////////////////////////
What is mistake in this.

Please reply.

Thanks
Anita

Re: Timer- peripheral

Posted: Thu Aug 06, 2015 12:34 pm
by cfbsoftware
Hi Anita,

You shouldn't have to worry about the low-level details when you are performing general tasks like timer delays in Astrobe because we provide library modules to do that. What you are trying to do can be done much more simply like this:
Timer_demo.JPG
However, if you want to see how to write this sort of low-level code in Oberon you should refer to the source code of the library modules which is included with the Personal and Professional Editions of Astrobe.

Regards,
Chris

Re: Timer- peripheral

Posted: Thu Aug 20, 2015 6:47 am
by anitasure123
Thank You for reply.

Can you please give me Timer module definition. as I am using Starter edition i cant see its definition. I can use predefined Timer function, but after match i want to generate interrupt where my code has to perform some job.

In C language this statement is used - while(LPC_TIMER0->TCR & 0x01); ----> which is used to wait until time has elapsed. How can i do the same in oberon language?

Please reply,
Thanks
Anita

Re: Timer- peripheral

Posted: Thu Aug 20, 2015 12:21 pm
by cfbsoftware
The Timer library module definitions and descriptions are in the Astrobe documentation which is included in the Starter Edition or can be downloaded from our website.

The C statement:

Code: Select all

while(LPC_TIMER0->TCR & 0x01); 
means:
continue looping while bit 0 of LPC_TIMER0->TCR is set (i.e. bit 0 = 1)
In Oberon this is:

Code: Select all

WHILE SYSTEM.BIT(MCU.T0TCR, 0) DO END;
or, if you prefer:

Code: Select all

REPEAT UNTIL ~SYSTEM.BIT(MCU.T0TCR, 0);