Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не заводится msp430
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Hugo Schmeisser
всем привет. решил попробовать продукцию ti. не могу запустить msp430f415.

такой код, -

CODE


//#include <msp430f415.h>
#include "msp430x41x.h"

#define TRUE 1
#define FALSE 0
#define XTALL 8.0 //
#define delay_us(us) __delay_cycles (XTALL * us);
#define delay_ms(ms) delay_us (1000 * ms)

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
// P6DIR |= 0xff; // 0 = input, 1 = output.
P6DIR = 0xff;
while(TRUE)
{
delay_us(100);
P6OUT = 0xff;
delay_us(100);
P6OUT = 0x00;
}
}



что ему не хватает?
KARLSON
что означает не запускается?
На выходе портов у Вас что? Осциллограф? Светодиоды?
Код компилируется? По мне так надо int main(void) заменить на void main(void).
В коде вроде проблем нет, кроме int.
Через что программируете?
Пошагово запускать программу пробовали?
Hugo Schmeisser
не запускается, это в смысле прошиваешь и никакой реакции. на выходе светодиоды.
код компилируется. прошиваю тхт из папки release/exe. программатор beeprog+ через jtag.
пошагово в иаровском симуляторе работает. там собственно не работать нечему sm.gif
не пойму почему в железе не работает. может что-то надо в опциях компилятора донастроить?
Сергей Борщ
QUOTE (Hugo Schmeisser @ May 7 2011, 00:49) *
программатор beeprog+ через jtag.
А он точно понимает формат ti-txt? Возможно он воспринимает файл как двоичный. Просто мысль вслух.
Hugo Schmeisser
Цитата(Сергей Борщ @ May 7 2011, 15:06) *
А он точно понимает формат ti-txt?

ну типа того sm.gif может там смещение задавать надо, или ещё чего?
Нажмите для просмотра прикрепленного файла

заработало. убрал галку с автоопределения и поставил ti txt. странно сделано, сначала грузишь ti txt, потом указываешь что это ti txt sm.gif
Hugo Schmeisser
почему-то в прерывании не могу отключить прерывания глобально. _DINT(); не работает. так задумано?
Dog Pawlowa
Цитата(Hugo Schmeisser @ May 9 2011, 21:31) *
в прерывании не могу отключить прерывания

Разве в прерывании прерывания не запрещены? wink.gif
Hugo Schmeisser
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
_DINT();
P1IFG = 0;
P6OUT = 0xff;
delay_ms(500);
P6OUT = 0;
delay_ms(500);
}

я так думаю по перепаду уровня должен выполниться код в функции. 500ms порт лог1, 500ms порт 0. а на практике если во время выполнения кода есть новый перепад, то код выполняется сначала.
вопрос такой, как сделать что-бы при выполнении кода, перепады не обрабатывались sm.gif
MrYuran
Цитата(Hugo Schmeisser @ May 9 2011, 23:18) *
я так думаю по перепаду уровня должен выполниться код в функции. 500ms порт лог1, 500ms порт 0. а на практике если во время выполнения кода есть новый перепад, то код выполняется сначала.
вопрос такой, как сделать что-бы при выполнении кода, перепады не обрабатывались sm.gif

1. Код ужасен. Задержки в прерываниях - это дурной стиль. Особенно на сотни мс.
2. При входе в прерывание остальные прерывания запрещаются автоматически, если только в теле обработчика не вставить EINT()
3. Ваша ситуация заключается в том, что DINT() в вашем случае не несёт никакой пользы - вложенные прерывания по умолчанию запрещены (уже упоминал). При выходе из прерывания восстанавливается из стека регистр статуса, в котором прерывания разрешены. Если были перепады на входе внешних прерываний, то в регистре порта P1IFG устанавливается флаг , который и вызывает повторное прерывание при выходе из предыдущего обработчика прерываний.

Ваши действия:
Самое простое (и неправильное) - переместить P1IFG = 0; в конец обработчика.
Более правильное - придумать (или срисовать) более изящную защиту от дребезга.
И никаких задержек в прерываниях!
Hugo Schmeisser
этот код просто для проверки.
если P1IFG = 0; ставим в конец обработчика, то порт на выход стоит всегда. постоянно вызывается обработчик и счётчик 500ms считает с начала.
как отключить этот вызов? странно почему в обработчике не отключаются прерывания глобально.
KARLSON
Что-то я совсем не пойму. Прерывание по порту P1, а обрабатываете шестой. Во-вторых, как оно вообще срабатывает? Где строчка разрешения прерывания от изменения порта 1: P1IE = (биты такие-то). Если она где-то стоит, так после обработки прерывания обнулите значение: P1IE = 0(или обнулите тот бит, по которому прерывания не нужны).
Hugo Schmeisser
Цитата(KARLSON @ May 11 2011, 12:09) *
Где строчка разрешения прерывания от изменения порта 1: P1IE = (биты такие-то).

спасибо друг, работает sm.gif я почему-то думал что можно глобально все прерывания отключить sm.gif
типа _DINT();

ешё два вопроса есть, подскажите если в курсе.
нужно таймер на 25us, посоветуйте какой использовать?
__interrupt void basic_timer_ISR(void) подойдёт? он вроде на lcd задействован если не путаю.
и второй вопрос, побайтно в информационную память писать можно как-нибудь? читал что вроде только весь блок сразу надо.
Grigorij
Цитата(Hugo Schmeisser @ May 11 2011, 23:57) *
я почему-то думал что можно глобально все прерывания отключить sm.gif типа _DINT();

_DINT() снимает бит GIE и по сути запрещает обработку прерываний, но флаги (типа P1IFG и пр.)
все равно будут устанавливаться. В принципе можно по ним отслеживать возникновение
событий, но это не лучший вариант.

Цитата(Hugo Schmeisser @ May 11 2011, 23:57) *
ешё два вопроса есть, подскажите если в курсе.
нужно таймер на 25us, посоветуйте какой использовать?
__interrupt void basic_timer_ISR(void) подойдёт? он вроде на lcd задействован если не путаю.
и второй вопрос, побайтно в информационную память писать можно как-нибудь? читал что вроде только весь блок сразу надо.

Можно и basic timer использовать, но надо смотреть от чего он тактируется и сможет ли он обеспечить требуемый интервал.
Больше возможностей по настройки дает Timer A и аналогичный Timer B. Что касается записи информации, то писать побайтно
можно, но вот стирать данные можно только постранично.
KARLSON
И писать во флешь через специальные команды: Раздел 7 Flash Memory Controller из книги MSP430x2xx _User Guide.
MrYuran
Цитата(Hugo Schmeisser @ May 11 2011, 23:57) *
нужно таймер на 25us, посоветуйте какой использовать?

Вам нужен интервал или внешний сигнал сформировать?
Если второе, то лучше воспользоваться выходами OUT защёлок таймера А или В.
Будет точно, как в аптеке.

Цитата(Hugo Schmeisser @ May 11 2011, 23:57) *
спасибо друг, работает sm.gif я почему-то думал что можно глобально все прерывания отключить sm.gif
типа _DINT();

Действительно, можно.
Но только не внутри обработчика прерывания, потому что при выходе из он восстанавливает регистр состояния, который был сохранён на стеке до входа в прерывание.
Бит GIO там, естественно, будет таким же, как и был до прерывания.
Hugo Schmeisser
Цитата(MrYuran @ May 12 2011, 17:54) *
Вам нужен интервал или внешний сигнал сформировать?

можно на ты. я не беременный, что-бы ко мне во множественном числе sm.gif
мне нужен интервал. осциллографом глянул, 30us и 60us если не ошибаюсь ставилось. но времени пока нет заниматься, чуть позже попробую 25 задать.
кстати, как в iar битовая переменная задаётся? cool.gif типа int1 или bit.
MrYuran
Цитата(Hugo Schmeisser @ May 12 2011, 21:47) *
кстати, как в iar битовая переменная задаётся? cool.gif типа int1 или bit.

Так же, как и в стандартном си - никак.
Либо битовая структура, либо накладывать маску на байт или слово.
Код
struct MyBitField{
  unsigned Bit1:1;
  unsigned Bit2:1;
  ...
  unsigned BitN:1;
}
...
MyBitField.Bit1 = 1;
...
if(MyBitField.Bit2 == 1){...}
term83
помогите запустит MSP430F249 ПИСАЛ ВОТ ЭТО НЕ ЗАПУСКАЕТСЯ ОТЛАДЧИК EZ430-F2013

//#include <msp430f415.h>
#include "msp430x24x.h"

#define TRUE 1
#define FALSE 0
#define XTALL 8.0 //
#define delay_us(us) __delay_cycles (XTALL * us);
#define delay_ms(ms) delay_us (1000 * ms)

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
// P6DIR |= 0xff; // 0 = input, 1 = output.
P6DIR = 0xff;
while(TRUE)
{
delay_us(100);
P6OUT = 0xff;
delay_us(100);
P6OUT = 0x00;
}
}

******************************************************************
} MODULE Flash_wb
PUBLIC Flash_wb
RSEG CODE
define _CPU_ 6
#include <Std_def.s43>
******************************************************************
Flash_wb
dint
mov #Flash_wb_ent, R13
mov #Flash_wb_length, R15
mov #0A500h,&FCTL3
copy push @R13
decd R13
dec R15
jnz copy
mov SP, R15
mov #0A540h,&FCTL1
call R15

mov #0A500h,FCTL1
mov #0A510h,FCTL3
add #2*Flsh_wb_length,SP
ret
Flash_wb_start
mov.b R14, 0(R12)
wait_bf bit #1, &FCTL3
jhz wait_bf
Flash_wb_ent
ret
Flash_wb_length EQU (Flash_wb_end-Flash_wb_start+2)\ENDMOD
****************************************************************
MODULE flash_ww
PUBLIC Flash_ww
RSEG CODE
define _CPU_ 6
#include <Std_det.s43>
******************************************************************
Flash_ww
dint
mov #Flash_ww_end, R13
mov #Flash_ww_length, R15
mov #0A500h,&FCTL3
copy push @R13
decd R13
dec R15
jnz copy
mov SP, R15
mov #0A540h, &FCTL1
call R15

mov #0A500h, &FCTL1
mov #0A510h, &FCTL3
add #2*Flash_ww_length,SP
ret
Flash_ww_start
mov R14, 0(R12)
wait_bf bit #1, &FCTL3
jnz wait_bf
Flash_ww_end
ret

Flash_ww_length EQU (Flash_ww_end-Flash_ww_start+2)\2
ENDMOD
*********************************************************
MODULE Flash_clr
PUBLIC Flash_clr
#define _CPU_ 6
#include <Std_def.s43>
*********************************************************
Flash_clr
dint

mov #Flash_ww_end, R13
mov #Flash_ww_length, R15
mov #0A500h, &FCTL3
copy push @R13

decd R13
dec R15
jnz copy
mov SP,R15
mov #0A540h, &FCTL1
call R15

mov #0A500h, &FCTL1
mov #0A510h, &FCTL3
add #2*Flash_clr_length, SP
ret

Flash_clr_start
mov #0, 0(R12)
wait_bf bit #1, &FCTL3

jnz wait_bf
Flash_clr_end
ret
Flash_clr_length EGU (Flash_clr_end-Flash_clr_start+2)\2
END
********************************************************
#define _CPU_6
#include <std_def.h>
#include <flash_prog.h>
********************************************************
void Flash_wb(char *Data_ptr, char byte)
FCTL3=0x0A500
FCTL1=0x0A540
*Data_ptr=bute

FCTL1=0x0A500
FCTL=0x0A510
********************************************************
void Flash_ww( int *Data_ptr, int word)
FCTL=0x0A500
FCTL=0x0A540
*Data_ptr=word
FCTL1=0x0A500
FCTL3=0x0A510
******************************************************
extern unsigned char SegA_last;\*010FFh*\
******************************************************
NAME SegA_last
PUBLIC SegA_Last
ASEG 010FFh
SegA_Last DS 0
ENDMOD
*****************************************************
extern unsigned char SegB_last;\*0107Fh*\
NAME SegB_last
PUBLIC SegB_last
ASEG 0107Fh
SegB_last DS 0
KARLSON
Что значит не запускается, до какого места доходит код? Или какие функции не работают?
term83
я использую отладчик EZ430-F2013 через JTAG пытаюсь прописать команды результат не какой
rezident
Цитата(term83 @ Jun 15 2011, 19:38) *
я использую отладчик EZ430-F2013 через JTAG пытаюсь прописать команды результат не какой

EZ430 "умеет" работать только по 2-х проводному интерфейсу Spy-Bi-Wire, а MSP430F249 имеет 4-х проводный JTAG. Так что у вас попросту оборудование несовместимо. Покупайте MSP-FET430UIF или его клон и не морочьте голову ни себе ни людям.
term83
Он ведь состоит из эмулятора по 2-х проводному интерфейсу Spy-Bi-Wire про который вы сказали и целевой платы?
rezident
Цитата(term83 @ Jun 16 2011, 21:24) *
Он ведь состоит из эмулятора по 2-х проводному интерфейсу Spy-Bi-Wire про который вы сказали и целевой платы?

У производителя на сайте есть вся интересующая вас информация.
http://focus.ti.com/docs/toolsw/folders/pr...z430-f2013.html
http://processors.wiki.ti.com/index.php/EZ430-F2013
http://focus.ti.com/docs/toolsw/folders/pr...-fet430uif.html
http://focus.ti.com/docs/prod/folders/print/msp430f249.html
Изучите ее для начала, чтобы не задавать "ламерские" вопросы.
term83
Спасибо большое, я все понял. Мой отладчик поймал статику
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.