Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Msp430 port1_vector
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
flamigo
Всем доброй ночи.
Помогите пожалуйста разобраться. Не срабатывает прерывание от кнопки P1.3. Вроде все разрешил, обработчик прерывания присутствуют, а при нажатии на кнопку никакого результата.
CODE
#include "msp430g2231.h"
;******************************
ORG 0F800h
;******************************
RESETT MOV #0280h, SP
STOPWDT MOV.W #WDTPW+WDTHOLD, &WDTCTL
;******************************
MAIN

;******************************

BIS.B #BIT0+BIT6, &P1DIR ; as output
BIC.B #BIT3, &P1DIR ; as input
BIC.B #BIT6, &P1OUT ; off
BIC.B #BIT0, &P1OUT ; off

MOV.B #BIT3, &P1IE
MOV.B #BIT3, &P1IES

BIS.B #GIE, SR
EINT
JMP $
;******************************
; PORT 1 interrupted
;******************************
BUTTON:
BIC.B #BIT3, &P1IFG
XOR.B #BIT6, &P1OUT
RETI
;***Interrupts*****************
ORG 0FFFEh
DW RESETT

ORG PORT1_VECTOR
DW BUTTON

END
zhevak
Сложно сказать. Код вполне рабочий, должен работать. (Мелкая придирка только к повторному разрешению прерываний -- eint это и есть команда bis.b #GIE, SR) На сколько я понял, это у Вас Launchpad? Джамперы на ЛЭД-ы установлены? А если Вы свою схему собирали, то может быть не обратили внимания, что на плате Launchpad кнопочка подтянута внешним резистором к питанию. А если у вас этого резистора нет, и при включении питяния на лапке будет нуль, то хоть зазамыкайся кнопкой эту лапку на землю -- единице-то неоткуда взяться. Должен быть резистор либо внешний, либо внутренний.

Я немного переписал Вашу прогу, проверил. У меня на Launchpad-е все работает. Может это Вам как-то поможет.
CODE

.include "MSP430F2001.inc"

.org CODE

Reset:
mov #STACK, SP
mov #(WDTPW + WDTHOLD), &WDTCTL

mov.b #0x41, &P1DIR ; as output
mov.b #0x00, &P1OUT ; ЛЭДы выкл
mov.b #0x08, &P1IE
mov.b #0x08, &P1IES

eint

Loop:
bis.b #LPM3, SR
jmp Loop:

ISR_Button:
bic.b #0x08, &P1IFG
xor.b #0x40, &P1OUT

reti

.org 0xFFE4
DW ISR_Button

.org 0xFFFE
DW Reset

.end

Я использую naken430asm (Линуксовый), поэтому синтаксис немного отличается. И еще незначительное отличие, у меня воткнута MSP430F2001.

Ссылку на свой блог, где я расписываю как начать работу с MSP430 я кину Вам в Личку.

Update:
Нифига не получилось -- у Вас ящик отключен.
За публикации ссылок тут наказывают, поэтому придется Вам самому погулить по словам zhevak и msp430.
rezident
Если у топикстартера к P1.6 подключен светодиод, то его мерцания он может и не заметить потому, что устранения дребезга контактов кнопки в его программе нет.
zhevak
Цитата(rezident @ Dec 23 2011, 05:37) *
Если у топикстартера к P1.6 подключен светодиод, то его мерцания он может и не заметить потому, что устранения дребезга контактов кнопки в его программе нет.

Да, теоретически такое тоже может быть. Но, практически...
1. Дребезг контактов -- это времена миллисекундные. Даже короткую миллисекундную вспышку можно заметить.
2. Я не думаю, что ТС нажал на кнопку только один раз. И в этот раз произошло четное касание контактов. Скорее всего, ТС нажимал много раз. Таким образом в какой-то из них могло произойти нечетное касание контактов.
3. На плате Launchpad дребезг давится с помощью конденсатора, который подключен параллельно контактам кнопки.

Уж легче предположить, что либо светодиод не подключен джампером, либо кнопка сломана, либо ТС что-то делает не то. Там блудить-то -- совсем негде. Ждем-с его появления -- какие факты он еще вынесет на обсуждение. А так гадать ... может он после программирования питание с платы отключает. Кто его знает, что к него там!
flamigo
Добрый день. Спасибо всем, кто откликнулся.
Да, я использую launchpad. Вечером попробую ваш код, потом отпишу, как и что получилось.
flamigo
zhevak, к сожалению ваш код не заставил светится светодиод на моем контроллере. Светодиоды рабочие, кнопка тоже(по проверке бита BIT.B отлавливает нажатие кнопки). Уже и не знаю в чем дело.
ps: использую msp430 launchpad exp430g2, сам контроллер msp430g2231.
zhevak
Цитата(flamigo @ Dec 26 2011, 00:32) *
zhevak, к сожалению ваш код не заставил светится светодиод на моем контроллере. Светодиоды рабочие, кнопка тоже(по проверке бита BIT.B отлавливает нажатие кнопки). Уже и не знаю в чем дело.
ps: использую msp430 launchpad exp430g2, сам контроллер msp430g2231.

sm.gif Блин! Вы заставили меня найти MSP430G2231 и воткнуть в Launchpad.
У меня все работает.

Вот мой исходник button.asm:
CODE

.include "MSP430G2231.inc"

.org CODE

Reset:
mov #STACK, SP
mov #(WDTPW + WDTHOLD), &WDTCTL
mov.b #0x41, &P1DIR ; as output
mov.b #0x00, &P1OUT ; ЛЭДы выкл
mov.b #0x08, &P1IE
mov.b #0x08, &P1IES

eint
Loop:
bis.b #LPM3, SR
jmp Loop

ISR_Button:
bic.b #0x08, &P1IFG
xor.b #0x40, &P1OUT

reti

.org 0xFFE4
DW ISR_Button

.org 0xFFFE
DW Reset

.end


Вот строка запуска компиляции
CODE

$ naken430asm button.asm

naken430asm - by Michael Kohn
Web: http://www.mikekohn.net/
Email: mike@mikekohn.net

Version: September 21, 2011

Input file: button.asm
Output file: out.hex

Pass 1...
Pass 2...

Program Info:
Include Paths: .
/opt/msp430-naken/share/naken430asm/include
Instructions: 12
Code Bytes: 48
Data Bytes: 4
Low Address: f800 (63488)
High Address: ffff (65535)



Вот файл out.hex, который получился в результате:
CODE

:10F8000031408002B240805A2001F2404100220083
:10F81000C2432100F2422500F242240032D272D0CB
:10F82000D000FD3FF2C22300F2E0400021000013AF
:02FFE40024F8FF
:02FFFE0000F809
:00000001FF


Вот команда для его заливки в камень:
CODE

$ mspdebug --fet-force-id MSP430G2231 rf2500 "prog out.hex"
MSPDebug version 0.16 - debugging tool for MSP430 MCUs
Copyright © 2009-2011 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Trying to open interface 1 on 002
rf2500: warning: can't detach kernel driver: No data available
Initializing FET...
FET protocol version is 30066536
Configured for Spy-Bi-Wire
Set Vcc: 3000 mV
fet: FET returned error code 4 (Could not find device (or device not supported))
fet: command C_IDENT1 failed
fet: identify failed
Trying again...
Initializing FET...
FET protocol version is 30066536
Configured for Spy-Bi-Wire
Sending reset...
Set Vcc: 3000 mV
Device ID: 0xf201
Device: MSP430G2231
Code memory starts at 0xf800
Number of breakpoints: 1
Erasing...
Programming...
Writing 48 bytes to f800...
Writing 2 bytes to ffe4...
Writing 2 bytes to fffe...



Сделайте следующее:
1. Откомпилируйте свой исходник и сравните полученный секс-файл с моим.
2. Если они отличаются, попробуйте дизассемблировать и сравнить с исходниками -- все ли правильно ассемблировалось?
3. Попробуйте залить мой hex-файл в МК. Удалось его запустить?
3. Если не получилось, запустите mspdebug в интерактивном режиме и посмотрите, что у Вас реально находится в памяти

CODE

$ mspdebug rf2500
MSPDebug version 0.16 - debugging tool for MSP430 MCUs
Copyright © 2009-2011 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Trying to open interface 1 on 002
rf2500: warning: can't detach kernel driver: No data available
Initializing FET...
FET protocol version is 30066536
Configured for Spy-Bi-Wire
Set Vcc: 3000 mV
fet: FET returned error code 4 (Could not find device (or device not supported))
fet: command C_IDENT1 failed
fet: identify failed
Trying again...
Initializing FET...
FET protocol version is 30066536
Configured for Spy-Bi-Wire
Sending reset...
Set Vcc: 3000 mV
Device ID: 0xf201
Device: MSP430G2231
Code memory starts at 0xf800
Number of breakpoints: 1

Available commands:
= delbreak gdb load opt reset simio
alias dis help locka prog run step
break erase hexout md read set sym
cgraph exit isearch mw regs setbreak

Available options:
color gdb_loop iradix
fet_block_size gdbc_xfer_size quiet

Type "help <topic>" for more information.
Press Ctrl+D to quit.

(mspdebug)


Команда для просмотра содержимого памяти:
CODE
(mspdebug) md 0xf800
0f800: 31 40 80 02 b2 40 80 5a 20 01 f2 40 41 00 22 00 |1@...@.Z ..@A.".|
0f810: c2 43 21 00 f2 42 25 00 f2 42 24 00 32 d2 72 d0 |.C!..B%..B$.2.r.|
0f820: d0 00 fd 3f f2 c2 23 00 f2 e0 40 00 21 00 00 13 |...?..#...@.!...|
0f830: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
(mspdebug) md 0xffe0
0ffe0: ff ff ff ff 24 f8 ff ff ff ff ff ff ff ff ff ff |....$...........|
0fff0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 f8 |................|
(mspdebug)


А теперь ищите отличия своего от моего.

И да! Выход из mspdebug осуществляется командой exit или нажатием на Ctrl-D.

Если вообще ничего не получается, то разделите задачу на две -- вывод (моргание ЛЭД-ом) и ввод (получение данных с кнопки). Напишите сначала тупую прогу моргания ЛЭД-ом. Убедитеь, что у Вас хоть это работает. А потом наращивайте функциональность.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.