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

 
 
> Проблемы с инициализацией или еще с чем-то, MSP430F149
addi
сообщение Oct 8 2013, 15:39
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Здравствуйте !

Нужна помощь новичку в MSP430.
Не получается выполнить простейшую операцию , думаю проблема в тактировании.
Использую внешний часовой кварц в качестве источника тактирования.

Мой код ниже.
Прошу помочь, кто знает что не так.
Контроллер MSP430F149
Код
#include <stdio.h>
#include "msp430x14x.h"
#include <intrinsics.h>

#include "main.h"

//extern void writeuc_SPI(unsigned char data);
#define iSCO 0x40
#define iSCK 0x20
void main()
{
  init();
  Usets();
  __enable_interrupt();
  for(;;)
  {
    
    P3OUT |= iSCO; // P3.6 MOSI
    P4OUT |= iSCK; // P4.5 MSCK
    //Ureg = 0x55;
    //writeuc_SPI(Ureg);
    //Uucwr(readuc_SPI());
    //Uucwr(0x55);
  
  }
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Oct 9 2013, 08:59
Сообщение #2


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

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



Телепатирую проблему в init().
Если нет, то в Usets()
sm.gif
Остальное вроде нормально.
Хотя и непонятно, чего вы ожидаете и что не так.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
addi
сообщение Oct 9 2013, 15:01
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Цитата(MrYuran @ Oct 9 2013, 12:59) *
Телепатирую проблему в init().
Если нет, то в Usets()
sm.gif
Остальное вроде нормально.
Хотя и непонятно, чего вы ожидаете и что не так.


Спасибо большое за поддержку!

Дело в том что я сделал еще проще:

Код
#include <stdio.h>
//#include <msp430f149.h>
#include <msp430x14x.h>
#include <intrinsics.h>

#include "main.h"

//extern void writeuc_SPI(unsigned char data);

void main(void)
{
  //init();
  WDTCTL = WDTPW + WDTHOLD;  
   P3DIR |= 0x40; // P3.6 MOSI
    P4DIR |= 0x20; // P4.5 MSCK
    P3OUT |= 0x40; // P3.6 MOSI
    P4OUT |= 0x20; // P4.5 MSCK
    //P3OUT &= ~iSCO; // P3.6 MOSI
    //P4OUT &= ~iSCK; // P4.5 MSCK
  //Usets();
  __enable_interrupt();
  for(;;)
  {
    
  
    
    //P3OUT &= ~iSCO; // P3.6 MOSI
    //P4OUT &= ~iSCK; // P4.5 MSCK
    
    //Ureg = 0x55;
    //writeuc_SPI(Ureg);
    //Uucwr(readuc_SPI());
    //Uucwr(0x55);
  
  }
}


Зашиваю Relese через download and debug LPT отладчиком(FET Debugger) смотрю на P3.6 и P4.5 и вижу низкий уровень, когда как должен быть высокий.
Далее через Debug отладку прохожу построчно и ножки соответсвенно устанавливаются в высокий уровень, и только таким образом.
Все оставшиеся манипуляции с Relese/Debug и "download and debug" дают на выходе 0.
Не понимаю что должно тактировать, либо LF, либо внутренний DCO, в итоге такое ощущение что тактирования никакого нет.
32768 покдючен к XIN и XOUT.

Со схемотехникой все ok, ранее была другая прошивка(не моя, я ее стер своими попытками) и все ok.

На входе ножки ресет - высокий уровень, питание есть.
Ничего не понимаю, пожайлуста помогите, хотя бы своей инициализацией или проектом под ИАР.

Заранее благодарен!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 10 2013, 07:01
Сообщение #4


Гуру
******

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



QUOTE (addi @ Oct 9 2013, 18:01) *
Зашиваю Relese через download and debug LPT отладчиком(FET Debugger) смотрю на P3.6 и P4.5 и вижу низкий уровень, когда как должен быть высокий.
Далее через Debug отладку прохожу построчно и ножки соответсвенно устанавливаются в высокий уровень, и только таким образом.
А после прошивки вы RUN делаете?
Или вы имеете ввиду, что после такой прошивки вы отключаете от программатора и железка не запускается уже без него, самостоятельно? Если вы действительно хотите получить ответ, не ленитесь описать ситуацию максимально подробно. Никому не хочется заниматься тут телепатией.




--------------------
На любой вопрос даю любой ответ
"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
addi
сообщение Oct 10 2013, 19:46
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Цитата(Сергей Борщ @ Oct 10 2013, 11:01) *
А после прошивки вы RUN делаете?
Или вы имеете ввиду, что после такой прошивки вы отключаете от программатора и железка не запускается уже без него, самостоятельно? Если вы действительно хотите получить ответ, не ленитесь описать ситуацию максимально подробно. Никому не хочется заниматься тут телепатией.

Спасибо большое за поддержку.
Проблема в том что я с помощью ИАР и отладчика(аля FET debugger) думаю запрограммировать микроконтроллер и делаю это следующим образом:
Вышеописанный код компилирую, собираю и далее в Release наживаю на "Download and Degug" и далее вроде как "Download application" и после загружается отладчик.
Далее выхожу из отладки полагая что сброс контроллера уже прошел и код исполняется, т.е ожидаю увидеть высокие уровни на ножках.
В результате на нажках 0.
Посльку питание от отладчика то POR с отладчиклом. Убеждаюсь что на Reset 1, смотрю на ножках, на ножках 0.
Вопрос, - почему нет исполнения программы после подачи питания и нактивном сбросе.
Ежели я не выхожу из отладчика и в отлдачике нажимю на "GO" то на ножках единицы и вроде все как надо.
Складывается впечатления что отладчик ничего не прошивает, вопрос как это сделать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 10 2013, 20:54
Сообщение #6


Гуру
******

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



QUOTE (addi @ Oct 10 2013, 22:46) *
Проблема в том что я с помощью ИАР и отладчика(аля FET debugger) думаю запрограммировать микроконтроллер
Это возможно - сам всегда так делал.
QUOTE (addi @ Oct 10 2013, 22:46) *
наживаю на "Download and Degug" и далее вроде как "Download application" и после загружается отладчик.
Далее выхожу из отладки полагая что сброс контроллера уже прошел и код исполняется
Обычно отладчик после загрузки ставит точку останова на входе в main(), делает сброс и дожидается пока управление дойдет до точки останова. После чего предлагает вам самому решать, что делать - запускать программу либо идти ее по шагам. Если вы в этот момент выходите из дебаггера или отключаете отладчик - процессор так и останется стоять на точке останова до следующего сброса.
QUOTE (addi @ Oct 10 2013, 22:46) *
Вопрос, - почему нет исполнения программы после подачи питания и нактивном сбросе.
...
Складывается впечатления что отладчик ничего не прошивает, вопрос как это сделать?
А вот это наводит на мысль, что вы используете скрипт линкера, который располагает код в ОЗУ. Хотя MSP430F149 не позволяет разместить в ОЗУ вектора прерываний, поэтому такой скрипт очень маловероятен. Но всякое бывает - покажите на всякий случай скрипт линкера. Если бы код не загружался в кристалл, то он не исполнялся бы и пошагово. Можете после загрузки посмотреть в окне дизассемблера, на каких адресах остановилось выполнение и прикинуть - эти адреса относятся к ОЗУ или к флеш.

Еще у этой серии (1xx, 1xxx) есть неприятная особенность - он часто впадает в ступор при плавном нарастании питания с неактивным уровнем на ноге сброса. Поэтому в боевой схеме использование супервизора обязательно. Попробуйте кратковременно замкнуть пинцетом ногу сброса на землю. Если не поможет - отключите питание, закоротите питание пинцетом (разрядите емкости), закоротите пинцетом ногу сброса на землю и так и подайте питание с активным ресетом, после чего ресет отпустите.
По результатам этих экспериментов будем думать и звать rezidentа - он у нас главный спец по 430. Я уже лет пять как с ними не работаю, мог и подзабыть что-нибудь.


--------------------
На любой вопрос даю любой ответ
"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
addi
сообщение Oct 11 2013, 07:00
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Цитата(Сергей Борщ @ Oct 11 2013, 00:54) *
Это возможно - сам всегда так делал.
Обычно отладчик после загрузки ставит точку останова на входе в main(), делает сброс и дожидается пока управление дойдет до точки останова. После чего предлагает вам самому решать, что делать - запускать программу либо идти ее по шагам. Если вы в этот момент выходите из дебаггера или отключаете отладчик - процессор так и останется стоять на точке останова до следующего сброса.
А вот это наводит на мысль, что вы используете скрипт линкера, который располагает код в ОЗУ. Хотя MSP430F149 не позволяет разместить в ОЗУ вектора прерываний, поэтому такой скрипт очень маловероятен. Но всякое бывает - покажите на всякий случай скрипт линкера. Если бы код не загружался в кристалл, то он не исполнялся бы и пошагово. Можете после загрузки посмотреть в окне дизассемблера, на каких адресах остановилось выполнение и прикинуть - эти адреса относятся к ОЗУ или к флеш.

Еще у этой серии (1xx, 1xxx) есть неприятная особенность - он часто впадает в ступор при плавном нарастании питания с неактивным уровнем на ноге сброса. Поэтому в боевой схеме использование супервизора обязательно. Попробуйте кратковременно замкнуть пинцетом ногу сброса на землю. Если не поможет - отключите питание, закоротите питание пинцетом (разрядите емкости), закоротите пинцетом ногу сброса на землю и так и подайте питание с активным ресетом, после чего ресет отпустите.
По результатам этих экспериментов будем думать и звать rezidentа - он у нас главный спец по 430. Я уже лет пять как с ними не работаю, мог и подзабыть что-нибудь.

Спасибо большое за поддержку!
Вот что линкер показывает в итоге:
Код
                ****************************************
                *                                      *
                *            MODULE SUMMARY            *
                *                                      *
                ****************************************

Module               CODE      DATA
------               ----      ----
                    (Rel)  (Rel)  (Abs)
?__exit                 2
?_exit                  4
?cstart                12
?exit                   4
?reset_vector           2
main                   44             8
N/A (command line)            80
------                 --     --      -
Total:                 68     80      8


                ****************************************
                *                                      *
                *              CALL GRAPH              *
                *                                      *
                ****************************************

  ->Sub-tree of type: Function tree
                             CSTACK
    | Stack used (prev) :  00000000
  01  main
      | Stack used (prev) :  00000000
      | + function block  :  00000002
  <-Sub-tree of type: Function tree
    | Stack used          :  00000002


  ->Sub-tree of type: Function tree
                             CSTACK
    | Stack used (prev) :  00000002
  01  exit
      | Stack used (prev) :  00000002
      | + function block  :  00000002
  <-Sub-tree of type: Function tree
    | Stack used          :  00000004




                ****************************************
                *                                      *
                *      SEGMENTS IN ADDRESS ORDER       *
                *                                      *
                ****************************************


SEGMENT              SPACE    START ADDRESS   END ADDRESS     SIZE  TYPE  ALIGN
=======              =====    =============   ===========     ====  ====  =====
DATA16_AN                              0019 - 001B               3   rel    0
                                       001D - 001F               3
                                       0120 - 0121               2
CSTACK                                 09B0 - 09FF              50   rel    1
CSTART                                 1100 - 110B               C   rel    1
<CODE> 1                               110C - 1141              36   rel    1
RESET                                  FFFE - FFFF               2   rel    1

                ****************************************
                *                                      *
                *        END OF CROSS REFERENCE        *
                *                                      *
                ****************************************

68 bytes of CODE memory
80 bytes of DATA memory (+ 8 absolute )

Errors: none
Warnings: none
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- addi   Проблемы с инициализацией или еще с чем-то   Oct 8 2013, 15:39
|- - igorle   Я по существу ответить не могу. Под рукой нет ниче...   Oct 9 2013, 16:58
||- - addi   Цитата(igorle @ Oct 9 2013, 20:58) Я по с...   Oct 10 2013, 05:56
||- - MrYuran   Цитата(igorle @ Oct 9 2013, 19:58) Наприм...   Oct 10 2013, 06:06
||- - addi   Цитата(MrYuran @ Oct 10 2013, 10:06) На с...   Oct 10 2013, 06:16
||- - igorle   Цитата(MrYuran @ Oct 10 2013, 09:06) На с...   Oct 10 2013, 06:58
|- - Сергей Борщ   Рискуете схватить предупреждение за избыточное цит...   Oct 11 2013, 07:50
|- - addi   Цитата(Сергей Борщ @ Oct 11 2013, 11:50) ...   Oct 15 2013, 11:54
- - MrYuran   ЦитатаBCSCTL1 = 0x49; // Максимальная частота, дел...   Oct 15 2013, 12:20
- - addi   Цитата(MrYuran @ Oct 15 2013, 16:20) Дума...   Oct 16 2013, 12:09
- - MrYuran   Цитата(addi @ Oct 16 2013, 15:09) UBR00 =...   Oct 17 2013, 06:18
- - addi   Сапсибо огромное, с UBR00 = 0xEE;UBR10 = 0x01; ско...   Oct 17 2013, 07:36


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 06:57
Рейтинг@Mail.ru


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