реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> не заводится msp430
Hugo Schmeisser
сообщение May 6 2011, 13:04
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



всем привет. решил попробовать продукцию 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;
}
}



что ему не хватает?
Go to the top of the page
 
+Quote Post
KARLSON
сообщение May 6 2011, 21:22
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



что означает не запускается?
На выходе портов у Вас что? Осциллограф? Светодиоды?
Код компилируется? По мне так надо int main(void) заменить на void main(void).
В коде вроде проблем нет, кроме int.
Через что программируете?
Пошагово запускать программу пробовали?


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
Hugo Schmeisser
сообщение May 6 2011, 21:49
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



не запускается, это в смысле прошиваешь и никакой реакции. на выходе светодиоды.
код компилируется. прошиваю тхт из папки release/exe. программатор beeprog+ через jtag.
пошагово в иаровском симуляторе работает. там собственно не работать нечему sm.gif
не пойму почему в железе не работает. может что-то надо в опциях компилятора донастроить?

Сообщение отредактировал Hugo Schmeisser - May 6 2011, 21:51
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 7 2011, 11:06
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Hugo Schmeisser @ May 7 2011, 00:49) *
программатор beeprog+ через jtag.
А он точно понимает формат ti-txt? Возможно он воспринимает файл как двоичный. Просто мысль вслух.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Hugo Schmeisser
сообщение May 7 2011, 13:11
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



Цитата(Сергей Борщ @ May 7 2011, 15:06) *
А он точно понимает формат ti-txt?

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


заработало. убрал галку с автоопределения и поставил ti txt. странно сделано, сначала грузишь ti txt, потом указываешь что это ti txt sm.gif

Сообщение отредактировал Hugo Schmeisser - May 7 2011, 12:52
Go to the top of the page
 
+Quote Post
Hugo Schmeisser
сообщение May 9 2011, 18:31
Сообщение #6





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



почему-то в прерывании не могу отключить прерывания глобально. _DINT(); не работает. так задумано?

Сообщение отредактировал Hugo Schmeisser - May 9 2011, 18:31
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 9 2011, 19:03
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Hugo Schmeisser @ May 9 2011, 21:31) *
в прерывании не могу отключить прерывания

Разве в прерывании прерывания не запрещены? wink.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Hugo Schmeisser
сообщение May 9 2011, 19:18
Сообщение #8





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



#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

Сообщение отредактировал Hugo Schmeisser - May 9 2011, 19:21
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 10 2011, 06:43
Сообщение #9


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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

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

Ваши действия:
Самое простое (и неправильное) - переместить P1IFG = 0; в конец обработчика.
Более правильное - придумать (или срисовать) более изящную защиту от дребезга.
И никаких задержек в прерываниях!


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Hugo Schmeisser
сообщение May 10 2011, 11:38
Сообщение #10





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



этот код просто для проверки.
если P1IFG = 0; ставим в конец обработчика, то порт на выход стоит всегда. постоянно вызывается обработчик и счётчик 500ms считает с начала.
как отключить этот вызов? странно почему в обработчике не отключаются прерывания глобально.
Go to the top of the page
 
+Quote Post
KARLSON
сообщение May 11 2011, 08:09
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Что-то я совсем не пойму. Прерывание по порту P1, а обрабатываете шестой. Во-вторых, как оно вообще срабатывает? Где строчка разрешения прерывания от изменения порта 1: P1IE = (биты такие-то). Если она где-то стоит, так после обработки прерывания обнулите значение: P1IE = 0(или обнулите тот бит, по которому прерывания не нужны).


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
Hugo Schmeisser
сообщение May 11 2011, 19:57
Сообщение #12





Группа: Участник
Сообщений: 13
Регистрация: 6-05-11
Пользователь №: 64 829



Цитата(KARLSON @ May 11 2011, 12:09) *
Где строчка разрешения прерывания от изменения порта 1: P1IE = (биты такие-то).

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

ешё два вопроса есть, подскажите если в курсе.
нужно таймер на 25us, посоветуйте какой использовать?
__interrupt void basic_timer_ISR(void) подойдёт? он вроде на lcd задействован если не путаю.
и второй вопрос, побайтно в информационную память писать можно как-нибудь? читал что вроде только весь блок сразу надо.

Сообщение отредактировал Hugo Schmeisser - May 11 2011, 19:57
Go to the top of the page
 
+Quote Post
Grigorij
сообщение May 12 2011, 10:12
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 10-03-07
Пользователь №: 26 038



Цитата(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. Что касается записи информации, то писать побайтно
можно, но вот стирать данные можно только постранично.
Go to the top of the page
 
+Quote Post
KARLSON
сообщение May 12 2011, 13:38
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



И писать во флешь через специальные команды: Раздел 7 Flash Memory Controller из книги MSP430x2xx _User Guide.


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 12 2011, 13:54
Сообщение #15


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Hugo Schmeisser @ May 11 2011, 23:57) *
нужно таймер на 25us, посоветуйте какой использовать?

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

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

Действительно, можно.
Но только не внутри обработчика прерывания, потому что при выходе из он восстанавливает регистр состояния, который был сохранён на стеке до входа в прерывание.
Бит GIO там, естественно, будет таким же, как и был до прерывания.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 11:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016