diff --git a/samples/MSP430/Blink.ob07 b/samples/MSP430/Blink.ob07 deleted file mode 100644 index 0434b7e..0000000 --- a/samples/MSP430/Blink.ob07 +++ /dev/null @@ -1,43 +0,0 @@ -(* - -Пример для 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. diff --git a/samples/MSP430/Button.ob07 b/samples/MSP430/Button.ob07 deleted file mode 100644 index 2470ed4..0000000 --- a/samples/MSP430/Button.ob07 +++ /dev/null @@ -1,103 +0,0 @@ -(* - -Пример для 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. diff --git a/samples/MSP430/Flash.ob07 b/samples/MSP430/Flash.ob07 deleted file mode 100644 index 3d8f856..0000000 --- a/samples/MSP430/Flash.ob07 +++ /dev/null @@ -1,157 +0,0 @@ -(* - -Пример для 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. diff --git a/samples/MSP430/Restart.ob07 b/samples/MSP430/Restart.ob07 deleted file mode 100644 index 1f3f4c6..0000000 --- a/samples/MSP430/Restart.ob07 +++ /dev/null @@ -1,106 +0,0 @@ -(* - -Пример для 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. diff --git a/samples/MSP430/TimerA.ob07 b/samples/MSP430/TimerA.ob07 deleted file mode 100644 index e920908..0000000 --- a/samples/MSP430/TimerA.ob07 +++ /dev/null @@ -1,118 +0,0 @@ -(* - -Пример для 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. diff --git a/samples/MSP430/TwoTimers.ob07 b/samples/MSP430/TwoTimers.ob07 deleted file mode 100644 index 5dfcad1..0000000 --- a/samples/MSP430/TwoTimers.ob07 +++ /dev/null @@ -1,143 +0,0 @@ -(* - -Пример для 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.