mirror of
https://github.com/AntKrotov/oberon-07-compiler.git
synced 2026-10-05 09:45:47 +00:00
MSP430: восстановление примеров
This commit is contained in:
1 parent
4ed91c19ba
commit
6249cb9ae0
6 files changed
+670
No files matched your search
@@ -0,0 +1,43 @@
|
||||
(*
|
||||
|
||||
Пример для LaunchPad MSP-EXP430G2 Rev1.5
|
||||
|
||||
Мигает красный светодиод.
|
||||
|
||||
*)
|
||||
MODULE Blink;
|
||||
|
||||
IMPORT SYSTEM, MSP430;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = {0};
|
||||
|
||||
(* регистры порта P1 *)
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
|
||||
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
BEGIN
|
||||
(* инициализация регистра P1DIR *)
|
||||
SYSTEM.PUT8(P1DIR, REDLED);
|
||||
|
||||
(* бесконечный цикл *)
|
||||
WHILE TRUE DO
|
||||
(* изменить состояние светодиода *)
|
||||
inv_bits(P1OUT, REDLED);
|
||||
(* задержка *)
|
||||
MSP430.Delay(800)
|
||||
END
|
||||
END Blink.
|
||||
@@ -0,0 +1,103 @@
|
||||
(*
|
||||
|
||||
Пример для LaunchPad MSP-EXP430G2 Rev1.5
|
||||
|
||||
Мигает зеленый светодиод.
|
||||
При нажатии на кнопку P1.3, включается/выключается красный светодиод.
|
||||
|
||||
*)
|
||||
|
||||
MODULE Button;
|
||||
|
||||
IMPORT SYSTEM, MSP430;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
BUTTON = {3};
|
||||
|
||||
(* регистры порта P1 *)
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
P1IFG = 23H;
|
||||
P1IE = 25H;
|
||||
P1REN = 27H;
|
||||
|
||||
|
||||
PROCEDURE test_bits (mem: INTEGER; bits: SET): SET;
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b)
|
||||
RETURN bits * BITS(b)
|
||||
END test_bits;
|
||||
|
||||
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE clr_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) - bits)
|
||||
END clr_bits;
|
||||
|
||||
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
(* обработчик прерываний *)
|
||||
PROCEDURE int (priority: INTEGER; interrupt: MSP430.TInterrupt);
|
||||
BEGIN
|
||||
IF priority = 18 THEN (* прерывание от порта P1 *)
|
||||
IF test_bits(P1IFG, BUTTON) = BUTTON THEN (* нажата кнопка *)
|
||||
inv_bits(P1OUT, REDLED); (* изменить состояние светодиода *)
|
||||
MSP430.Delay(500); (* задержка для отпускания кнопки *)
|
||||
clr_bits(P1IFG, BUTTON) (* сбросить флаг прерывания *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
|
||||
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация регистров порта P1 *)
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED); (* выход *)
|
||||
set_bits(P1REN, BUTTON); (* включить подтягивающий резистор *)
|
||||
set_bits(P1OUT, BUTTON); (* подтяжка к питанию *)
|
||||
set_bits(P1IE, BUTTON); (* разрешить прерывания от кнопки *)
|
||||
|
||||
MSP430.SetIntProc(int); (* назначить обработчик прерываний *)
|
||||
MSP430.EInt; (* разрешить прерывания *)
|
||||
|
||||
(* бесконечный цикл *)
|
||||
WHILE TRUE DO
|
||||
inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
|
||||
MSP430.Delay(800) (* задержка *)
|
||||
END
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END Button.
|
||||
@@ -0,0 +1,157 @@
|
||||
(*
|
||||
|
||||
Пример для LaunchPad MSP-EXP430G2 Rev1.5
|
||||
|
||||
Запись флэш-памяти.
|
||||
При успешном завершении, включается зеленый светодиод,
|
||||
иначе - красный.
|
||||
|
||||
*)
|
||||
|
||||
MODULE Flash;
|
||||
|
||||
IMPORT SYSTEM, MSP430;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
|
||||
(* регистры порта P1 *)
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
|
||||
FERASE = {1}; (* режим "стереть" *)
|
||||
FWRITE = {6}; (* режим "записать" *)
|
||||
|
||||
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE clr_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) - bits)
|
||||
END clr_bits;
|
||||
|
||||
|
||||
(*
|
||||
стирание и запись флэш-памяти
|
||||
adr - адрес
|
||||
value - значение для записи
|
||||
mode - режим (стереть/записать)
|
||||
*)
|
||||
PROCEDURE Write (adr, value: INTEGER; mode: SET);
|
||||
CONST
|
||||
(* сторожевой таймер *)
|
||||
WDTCTL = 0120H;
|
||||
WDTHOLD = {7};
|
||||
WDTPW = {9, 11, 12, 14};
|
||||
|
||||
(* регистры контроллера флэш-памяти *)
|
||||
FCTL1 = 0128H;
|
||||
ERASE = {1};
|
||||
WRT = {6};
|
||||
|
||||
FCTL2 = 012AH;
|
||||
FN0 = {0};
|
||||
FN1 = {1};
|
||||
FN2 = {2};
|
||||
FN3 = {3};
|
||||
FN4 = {4};
|
||||
FN5 = {5};
|
||||
FSSEL0 = {6};
|
||||
FSSEL1 = {7};
|
||||
|
||||
FCTL3 = 012CH;
|
||||
LOCK = {4};
|
||||
|
||||
FWKEY = {8, 10, 13, 15};
|
||||
|
||||
VAR
|
||||
wdt: SET;
|
||||
|
||||
BEGIN
|
||||
IF (mode = ERASE) OR (mode = WRT) THEN (* проверить заданный режим *)
|
||||
SYSTEM.GET(WDTCTL, wdt); (* сохранить значение регистра сторожевого таймера *)
|
||||
SYSTEM.PUT(WDTCTL, WDTPW + WDTHOLD); (* остановить сторожевой таймер *)
|
||||
SYSTEM.PUT(FCTL2, FWKEY + FSSEL1 + FN0); (* тактовый генератор контроллера флэш-памяти = SMCLK, делитель = 2 *)
|
||||
SYSTEM.PUT(FCTL3, FWKEY); (* сбросить флаг LOCK *)
|
||||
SYSTEM.PUT(FCTL1, FWKEY + mode); (* установить режим (записать или стереть) *)
|
||||
SYSTEM.PUT(adr, value); (* запись *)
|
||||
SYSTEM.PUT(FCTL1, FWKEY); (* сбросить режим *)
|
||||
SYSTEM.PUT(FCTL3, FWKEY + LOCK); (* установить LOCK *)
|
||||
SYSTEM.PUT(WDTCTL, WDTPW + wdt * {0..7}) (* восстановить сторожевой таймер *)
|
||||
END
|
||||
END Write;
|
||||
|
||||
|
||||
(* обработчик ошибок *)
|
||||
PROCEDURE trap (errno, ModName, line: INTEGER);
|
||||
BEGIN
|
||||
set_bits(P1OUT, REDLED) (* включить красный светодиод *)
|
||||
END trap;
|
||||
|
||||
|
||||
PROCEDURE main;
|
||||
CONST
|
||||
seg_adr = 0FC00H; (* адрес сегмента для стирания и записи (ДОЛЖЕН БЫТЬ СВОБОДНЫМ!) *)
|
||||
|
||||
VAR
|
||||
adr, x, i: INTEGER;
|
||||
|
||||
free: RECORD address, size: INTEGER END;
|
||||
|
||||
BEGIN
|
||||
(* инициализация регистров порта P1 *)
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED); (* выход *)
|
||||
|
||||
(* выключить светодиоды *)
|
||||
clr_bits(P1OUT, REDLED + GREENLED);
|
||||
|
||||
MSP430.SetTrapProc(trap); (* назначить обработчик ошибок *)
|
||||
|
||||
ASSERT(seg_adr MOD 512 = 0); (* адрес сегмента должен быть кратным 512 *)
|
||||
|
||||
MSP430.GetFreeFlash(free.address, free.size);
|
||||
|
||||
(* проверить, свободен ли сегмент *)
|
||||
ASSERT(free.address <= seg_adr);
|
||||
ASSERT(seg_adr + 511 <= free.address + free.size);
|
||||
|
||||
Write(seg_adr, 0, FERASE); (* стереть сегмент *)
|
||||
|
||||
(* записать в сегмент числа 0..255 (256 слов) *)
|
||||
adr := seg_adr;
|
||||
FOR i := 0 TO 255 DO
|
||||
Write(adr, i, FWRITE);
|
||||
INC(adr, 2)
|
||||
END;
|
||||
|
||||
(* проверить запись *)
|
||||
adr := seg_adr;
|
||||
FOR i := 0 TO 255 DO
|
||||
SYSTEM.GET(adr, x);
|
||||
ASSERT(x = i); (* если x # i, будет вызван обработчик ошибок *)
|
||||
INC(adr, 2)
|
||||
END;
|
||||
|
||||
(* если нет ошибок, включить зеленый светодиод *)
|
||||
set_bits(P1OUT, GREENLED)
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END Flash.
|
||||
@@ -0,0 +1,106 @@
|
||||
(*
|
||||
|
||||
Пример для LaunchPad MSP-EXP430G2 Rev1.5
|
||||
|
||||
При нажатии на кнопку P1.3, инкрементируется
|
||||
переменная-счетчик перезапусков и программа
|
||||
перезапускается.
|
||||
В зависимости от четности счетчика перезапусков,
|
||||
включается зеленый или красный светодиод.
|
||||
|
||||
*)
|
||||
|
||||
MODULE Restart;
|
||||
|
||||
IMPORT SYSTEM, MSP430;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
BUTTON = {3};
|
||||
|
||||
(* регистры порта P1 *)
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
P1IFG = 23H;
|
||||
P1IE = 25H;
|
||||
P1REN = 27H;
|
||||
|
||||
|
||||
VAR
|
||||
|
||||
count: INTEGER; (* счетчик перезапусков *)
|
||||
|
||||
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE clr_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) - bits)
|
||||
END clr_bits;
|
||||
|
||||
|
||||
PROCEDURE test_bits (mem: INTEGER; bits: SET): SET;
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b)
|
||||
RETURN bits * BITS(b)
|
||||
END test_bits;
|
||||
|
||||
|
||||
(* обработчик прерываний *)
|
||||
PROCEDURE int (priority: INTEGER; interrupt: MSP430.TInterrupt);
|
||||
BEGIN
|
||||
IF priority = 18 THEN (* прерывание от порта P1 *)
|
||||
IF test_bits(P1IFG, BUTTON) = BUTTON THEN (* нажата кнопка *)
|
||||
INC(count); (* увеличить счетчик *)
|
||||
MSP430.Delay(500); (* задержка для отпускания кнопки *)
|
||||
clr_bits(P1IFG, BUTTON); (* сбросить флаг прерывания *)
|
||||
MSP430.Restart (* перезапустить программу *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
|
||||
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация регистров порта P1 *)
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED); (* выход *)
|
||||
set_bits(P1REN, BUTTON); (* включить подтягивающий резистор *)
|
||||
set_bits(P1OUT, BUTTON); (* подтяжка к питанию *)
|
||||
set_bits(P1IE, BUTTON); (* разрешить прерывания от кнопки *)
|
||||
|
||||
(* выключить светодиоды *)
|
||||
clr_bits(P1OUT, REDLED + GREENLED);
|
||||
|
||||
MSP430.SetIntProc(int); (* назначить обработчик прерываний *)
|
||||
MSP430.EInt; (* разрешить прерывания *)
|
||||
|
||||
IF ODD(count) THEN
|
||||
set_bits(P1OUT, GREENLED) (* нечетное - вкл. зеленый *)
|
||||
ELSE
|
||||
set_bits(P1OUT, REDLED) (* четное - вкл. красный *)
|
||||
END
|
||||
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END Restart.
|
||||
@@ -0,0 +1,118 @@
|
||||
(*
|
||||
|
||||
Пример для LaunchPad MSP-EXP430G2 Rev1.5
|
||||
|
||||
Светодиоды мигают по сигналам от таймера A
|
||||
|
||||
*)
|
||||
|
||||
MODULE TimerA;
|
||||
|
||||
IMPORT SYSTEM, MSP430;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
|
||||
(* регистры порта P1 *)
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
|
||||
|
||||
(* регистры таймера A *)
|
||||
TACTL = 0160H;
|
||||
|
||||
(* биты регистра TACTL *)
|
||||
TAIFG = {0};
|
||||
TAIE = {1};
|
||||
TACLR = {2};
|
||||
MC0 = {4};
|
||||
MC1 = {5};
|
||||
ID0 = {6};
|
||||
ID1 = {7};
|
||||
TASSEL0 = {8};
|
||||
TASSEL1 = {9};
|
||||
|
||||
TAR = 0170H;
|
||||
|
||||
TACCTL0 = 0162H;
|
||||
|
||||
(* биты регистра TACCTL0 *)
|
||||
CCIE = {4};
|
||||
CAP = {8};
|
||||
|
||||
TACCR0 = 0172H;
|
||||
|
||||
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE clr_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) - bits)
|
||||
END clr_bits;
|
||||
|
||||
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
(* обработчик прерываний *)
|
||||
PROCEDURE int (priority: INTEGER; interrupt: MSP430.TInterrupt);
|
||||
VAR
|
||||
x: SET;
|
||||
|
||||
BEGIN
|
||||
IF priority = 24 THEN (* прерывание от таймера A *)
|
||||
SYSTEM.GET(TACTL, x); (* взять регистр TACTL *)
|
||||
IF TAIFG * x = TAIFG THEN (* прерывание было *)
|
||||
inv_bits(P1OUT, REDLED); (* изменить состояние светодиода *)
|
||||
inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
|
||||
SYSTEM.PUT(TACTL, x - TAIFG) (* сбросить флаг прерывания и обновить регистр TACTL *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
|
||||
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация регистра P1DIR *)
|
||||
SYSTEM.PUT8(P1DIR, REDLED + GREENLED);
|
||||
|
||||
(* начальное состояние светодиодов *)
|
||||
set_bits(P1OUT, GREENLED); (* включен *)
|
||||
clr_bits(P1OUT, REDLED); (* выключен *)
|
||||
|
||||
MSP430.SetIntProc(int); (* назначить обработчик прерываний *)
|
||||
MSP430.EInt; (* разрешить прерывания *)
|
||||
|
||||
(* инициализация регистров таймера A *)
|
||||
SYSTEM.PUT(TAR, 0);
|
||||
SYSTEM.PUT(TACCTL0, CCIE + CAP);
|
||||
SYSTEM.PUT(TACCR0, 1000);
|
||||
SYSTEM.PUT(TACTL, TAIE + MC0 + TASSEL0)
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END TimerA.
|
||||
@@ -0,0 +1,143 @@
|
||||
(*
|
||||
|
||||
Пример для LaunchPad MSP-EXP430G2 Rev1.5
|
||||
|
||||
Зеленый светодиод мигает по сигналам от таймера A,
|
||||
красный - по сигналам от сторожевого таймера в интервальном режиме
|
||||
|
||||
*)
|
||||
|
||||
MODULE TwoTimers;
|
||||
|
||||
IMPORT SYSTEM, MSP430;
|
||||
|
||||
|
||||
CONST
|
||||
|
||||
REDLED = {0};
|
||||
GREENLED = {6};
|
||||
|
||||
(* регистры порта P1 *)
|
||||
P1OUT = 21H;
|
||||
P1DIR = 22H;
|
||||
|
||||
|
||||
(* регистр разрешения прерываний 1 *)
|
||||
IE1 = 00H;
|
||||
|
||||
(* биты регистра IE1 *)
|
||||
WDTIE = {0};
|
||||
NMIIE = {4};
|
||||
|
||||
|
||||
(* регистр флагов прерываний 1 *)
|
||||
IFG1 = 02H;
|
||||
|
||||
(* биты регистра IFG1 *)
|
||||
WDTIFG = {0};
|
||||
NMIIFG = {4};
|
||||
|
||||
|
||||
WDTCTL = 0120H; (* регистр сторожевого таймера *)
|
||||
|
||||
(* биты регистра WDTCTL *)
|
||||
WDTIS0 = {0};
|
||||
WDTIS1 = {1};
|
||||
WDTSSEL = {2};
|
||||
WDTCNTCL = {3};
|
||||
WDTTMSEL = {4};
|
||||
WDTNMI = {5};
|
||||
WDTNMIES = {6};
|
||||
WDTHOLD = {7};
|
||||
WDTPW = {9, 11, 12, 14}; (* ключ защиты *)
|
||||
|
||||
|
||||
(* регистры таймера A *)
|
||||
TACTL = 0160H;
|
||||
|
||||
(* биты регистра TACTL *)
|
||||
TAIFG = {0};
|
||||
TAIE = {1};
|
||||
TACLR = {2};
|
||||
MC0 = {4};
|
||||
MC1 = {5};
|
||||
ID0 = {6};
|
||||
ID1 = {7};
|
||||
TASSEL0 = {8};
|
||||
TASSEL1 = {9};
|
||||
|
||||
TAR = 0170H;
|
||||
|
||||
TACCTL0 = 0162H;
|
||||
|
||||
(* биты регистра TACCTL0 *)
|
||||
CCIE = {4};
|
||||
CAP = {8};
|
||||
|
||||
TACCR0 = 0172H;
|
||||
|
||||
|
||||
PROCEDURE set_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) + bits)
|
||||
END set_bits;
|
||||
|
||||
|
||||
PROCEDURE inv_bits (mem: INTEGER; bits: SET);
|
||||
VAR
|
||||
b: BYTE;
|
||||
|
||||
BEGIN
|
||||
SYSTEM.GET(mem, b);
|
||||
SYSTEM.PUT8(mem, BITS(b) / bits)
|
||||
END inv_bits;
|
||||
|
||||
|
||||
(* обработчик прерываний *)
|
||||
PROCEDURE int (priority: INTEGER; interrupt: MSP430.TInterrupt);
|
||||
VAR
|
||||
x: SET;
|
||||
|
||||
BEGIN
|
||||
IF priority = 26 THEN (* прерывание от сторожевого таймера *)
|
||||
inv_bits(P1OUT, REDLED) (* изменить состояние светодиода *)
|
||||
ELSIF priority = 24 THEN (* прерывание от таймера A *)
|
||||
SYSTEM.GET(TACTL, x); (* взять регистр TACTL *)
|
||||
IF TAIFG * x = TAIFG THEN (* прерывание было *)
|
||||
inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
|
||||
SYSTEM.PUT(TACTL, x - TAIFG) (* сбросить флаг прерывания и обновить регистр TACTL *)
|
||||
END
|
||||
END
|
||||
END int;
|
||||
|
||||
|
||||
PROCEDURE main;
|
||||
BEGIN
|
||||
(* инициализация регистра P1DIR *)
|
||||
set_bits(P1DIR, REDLED + GREENLED);
|
||||
|
||||
(* начальное состояние светодиодов - включены *)
|
||||
set_bits(P1OUT, REDLED + GREENLED);
|
||||
|
||||
MSP430.SetIntProc(int); (* назначить обработчик прерываний *)
|
||||
MSP430.EInt; (* разрешить прерывания *)
|
||||
|
||||
(* инициализация регистров таймера A *)
|
||||
SYSTEM.PUT(TAR, 0);
|
||||
SYSTEM.PUT(TACCTL0, CCIE + CAP);
|
||||
SYSTEM.PUT(TACCR0, 1500);
|
||||
SYSTEM.PUT(TACTL, TAIE + MC0 + TASSEL0);
|
||||
|
||||
(* инициализация регистров сторожевого таймера *)
|
||||
set_bits(IE1, WDTIE);
|
||||
SYSTEM.PUT(WDTCTL, WDTPW + WDTIS1 + WDTSSEL + WDTCNTCL + WDTTMSEL)
|
||||
END main;
|
||||
|
||||
|
||||
BEGIN
|
||||
main
|
||||
END TwoTimers.
|
||||
Reference in new issue
Block a user