Timer- peripheral
Posted: Thu Aug 06, 2015 8:35 am
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
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