TI MSP430 Launch Pad

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: TI MSP430 Launch Pad

Сообщение clawham »

В общем вот проект на CCS 6 под msp430g2553.

динамическая посегментная индикация + шим яркость каждого символа ну и пример чтения данных внутреннего термометра.
пинаут подключения индикатора сводится к дефайнам общих выводов каждого символа и последовательном переборе маской - там все понятно. я подключал к ланчпаду сегмент а к P1.1 и так далее просто вниз по плате.

Проблему с глобальными переменными не решил но нашел способ обойти хоть и не особо удачный.
Вложения
2_VAMeter.rar
проект
(125.78 КБ) 666 скачиваний
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

Создаю дерево меню, чтобы по дисплею, используя кнопки, "бегать" по нему.
В качестве элемента меню использую объект типа класс, в котором хранится массив дочерних объектов (массив указателей на те же объекты типа класс).
В cpp на компьютере (у меня используется сbuilder) работает прекрасно, а в IAR при создании дерева меню, как будто не может выделить место под новый объект типа класс - хватает только на 9 пунктов меню, хотя места в RAM ещё предостаточно. В чём подвох?
Нашёл в интернете темы о [пере]выделении памяти, типа этой, но чую что могу пойти не туда. Help!
P.S.Launchpad MSP-EXP430F5529LP.

Код класса пункта меню:
Спойлер

Код: Выделить всё

//class VLMenuItem;
//класс объекта меню дисплея
class VLMenuItem
{
//меню состоит из:
// - указателя на функцию, выводящую данных (заголовок данных и данные)
// - указателя на меню родителя; =0 только у VLMenuMain::rootMenu
// - массива дочерних меню; порядок "сверху вниз"

public:
 
  VLMenuItem *menuItemParrent;            //указатель на родителя; когда =0, значит в корне
  TFunPtr FunctionShowInfo;        //указатель на функцию вывода информации пункта меню на экран

  VLMenuItem **subMenu;           //массив дочерних меню
  unsigned int subMenuCount;        //выделяемый размер массива дочерних меню
  int subMenuActiveIndex;             //индекс активного меню

  //          какой индекс subMenu используем, родитель,              связанная функция,        размер subMenu
  bool AddSubMenu( unsigned char fsubMenuIndex, VLMenuItem *fparentMenu, TFunPtr fFuncShowMenu, unsigned char fsubMenuCreateCount)
  {
    subMenu[fsubMenuIndex] = new VLMenuItem( fparentMenu, fFuncShowMenu, fsubMenuCreateCount);
    if (subMenuActiveIndex<0)
      subMenuActiveIndex=0;
    return(true);
  }

  //конструктор родитель меню          функция вывода меню   размер массива дочерних меню
  VLMenuItem( VLMenuItem *fparentMenu, TFunPtr fFuncShowMenu, unsigned char fsubMenuCreateCount)
  {
   //сохраняем принятые параметры
   menuItemParrent = fparentMenu;
   FunctionShowInfo = fFuncShowMenu;
   //и задаём по умолчанию
        subMenuCount = fsubMenuCreateCount;
        if (subMenuCount>0)
        {
          subMenu = new VLMenuItem*[subMenuCount];    
          for (unsigned int i_temp=0; i_temp<subMenuCount; i_temp++)
            subMenu[i_temp] = NULL;
        }
   subMenuActiveIndex = -1;
  }

private:
   

};


Код создания дерева меню:
Спойлер

Код: Выделить всё

typedef bool (*TFunPtr)(void); 
TFunPtr pFun; // указатель на функцию, реализующую конкретную задачу

  //пустая функция
  bool NullFunc( void )  {    return( true );  }
  //пустая функция
  bool NullFunc2( void )  {    return( true );  }

  //указатель на активное меню, объект типа класс MenuItem
  VLMenuItem *currentMenu; //когда =NULL, показываем стартовую заставку
  //указатель на корневое меню, содержит всю структуру меню
  VLMenuItem *rootMenu;

  //создаёт всё дерево меню
  //rootMenu--->все входы АЦП12--->
  //         |                  |->   входы АЦП все
  //         |                  |-> вход АЦП 1
  //         |                  |-> вход АЦП 2
  //         |                  |-> вход АЦП 3
  //         |                  |-> вход АЦП 4
  //         |                  |-> вход АЦП 5
  //         |->дискр входы-------> дискр входы все
  //         |->UART-монитор------> монитор UART

    //корневое меню
    rootMenu = new VLMenuItem(NULL, NullFunc, 3);   

   //входы АЦП12 меню
    rootMenu->AddSubMenu( 0, rootMenu, NullFunc, 6);
    //входы все АЦП12
    rootMenu->subMenu[0]->AddSubMenu( 0, rootMenu->subMenu[0], NullFunc, 0);
    //вход1 АЦП12
    rootMenu->subMenu[0]->AddSubMenu( 1, rootMenu->subMenu[0], NullFunc, 0);
    //вход2 АЦП12
    rootMenu->subMenu[0]->AddSubMenu( 2, rootMenu->subMenu[0], NullFunc, 0);
    //вход3 АЦП12
    rootMenu->subMenu[0]->AddSubMenu( 3, rootMenu->subMenu[0], NullFunc, 0);
    //вход4 АЦП12
    rootMenu->subMenu[0]->AddSubMenu( 4, rootMenu->subMenu[0], NullFunc, 0);
    //вход5 АЦП12
    rootMenu->subMenu[0]->AddSubMenu( 5, rootMenu->subMenu[0], NullFunc, 0);
    //дискр входы меню
    rootMenu->AddSubMenu( 1, rootMenu, NullFunc, 1);
    //дискр входы
    rootMenu->subMenu[1]->AddSubMenu( 0, rootMenu->subMenu[1], NullFunc, 0);

    //монитор RS-485 меню
    rootMenu->AddSubMenu( 2, rootMenu, NullFunc, 1);
    //монитор RS-485
    rootMenu->subMenu[2]->AddSubMenu( 0, rootMenu->subMenu[2], NullFunc2, 0);

   //эксперимент
   currentMenu = rootMenu->subMenu[2]->subMenu[0];
   currentMenu->FunctionShowInfo(); //ok
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

Проблемы решил, поигравшись с параметром "Data16 heap size" в свойстве проекта (General options -> Stack/Heap).
Несколько дней полёт нормальный.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: TI MSP430 Launch Pad

Сообщение prinv »

imho, ООП на МК это не очень хорошая идея
Никакая контра не уйдёт от нас
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

prinv писал(а):imho, ООП на МК это не очень хорошая идея

ОЗУ не хватит (6 килобайт) ?
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: TI MSP430 Launch Pad

Сообщение prinv »

Кроме меню МК чем-то ещё заниматься будет? :))
Никакая контра не уйдёт от нас
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

prinv писал(а):Кроме меню МК чем-то ещё заниматься будет? :))

занимается.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: TI MSP430 Launch Pad

Сообщение prinv »

Даже интересно стало: сколько у вас в памяти занимает вся структура меню?
Никакая контра не уйдёт от нас
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

prinv писал(а):Даже интересно стало: сколько у вас в памяти занимает вся структура меню?

кода? IAR рапортует 14186 of code memory.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: TI MSP430 Launch Pad

Сообщение Psych »

VLeshka писал(а):кода? IAR рапортует 14186 of code memory.

Каков уровень оптимизации?? И сколько ОЗУ приходится?
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

Psych писал(а):
VLeshka писал(а):кода? IAR рапортует 14186 of code memory.

Каков уровень оптимизации?? И сколько ОЗУ приходится?

Optimization - Low.

Во время отладки пытался проконтролировать вручную размер rootMenu - явно не могу (указатель указывает на 0x2790, а там голые цифры).
IAR рапортует после компиляции:
885 bytes of DATA memory (+260 absolute).
51 bytes of const memory.
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

Re: TI MSP430 Launch Pad

Сообщение prinv »

При каком размере стека стало работать без ошибок?
Никакая контра не уйдёт от нас
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

prinv писал(а):При каком размере стека стало работать без ошибок?

Сколько минимальный стек нужен мне для работы приведённого мною кода, не проверял, т.к. меню дальше будет раздуваться, и надо было знать доступное количество пунктов меню при новом значении (поставил 320).

При 160 позволял создавать 9 объектов типа класса [мною созданного]. При 320 (поставил сейчас) позволяет создавать 19 (проверял и простым созданием массива, и способом, приведённым мною здесь).
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: TI MSP430 Launch Pad

Сообщение uldemir »

Мне кажется, что я заблудился в трёх регистрах. История такова - пока жду недостающие детали для одной конструкции, решил на время подключить этот ланчпад, чтобы он генерил необходимые мне сигналы для проверки остальной схемы. И вот один из сигналов такой: необходимо залить 32-х разрядный сдвиговый регистр данными и выдать строб для параллельной записи (ну наподобие 595-го регистра).
В режиме ногодрыга всё работает. Но тут мне захотелось приключений и решил сделать через USI (кристалл msp430g2231). И тут оно работать перестало. Вернее работает не так как я хочу.

Регистр USI 16-ти разрядный. Значит, 32 бита мне нужно пересылать за два раза. Хотел сделать так:

загрузить младшую половину данных
загрузить счетчик = 16 (тут должен сняться запрос прерывания и данные должны побежать )
дождаться появления запроса прерывания (это прерывание замаскировано и вызываться не должно)
загрузить старшую половину данных
загрузить счетчик = 16 (опять запрос должен сняться)
дождаться запроса прерывания
дёрнуть ногодрыгом строб параллельной записи.

Код: Выделить всё


      USISR 
= shiftreg;
      USICTL1 = 0;
      USICNT = USI16B | 16;
      while (USICTL1 & USIIFG);

      USICTL1 = 0;
      USISR = shiftreg >> 16;
      USICNT = USI16B | 16;
      while (USICTL1 & USIIFG);
 
      LE 
= 1;
      __no_operation();
      __no_operation();
      __no_operation();
      LE = 0;
 

Проблема в том, что пока перед while не засунул 3 NOP-а - в регистрах была белиберда. Но, понизив скорость (изменил USIDIV) - снова белиберда.

Как правильно было бы решить данную задачу, чтобы она работала при любой тактовой скорости и не требовала втыкания NOPов.


SOLUTION:
Сам проблему и решил... Надо пользовать прерывания.

Код: Выделить всё

#pragma vector=USI_VECTOR
__interrupt void send_other_word (void) {
  USICTL1_bit.USIIFG = 0;
  flag.frame_event = 1;
}

где-то в main()
      flag.frame_event = 0;
      USISR = shiftreg;
      USICNT = USI16B | 16;
      while (!flag.frame_event);
      flag.frame_event = 0;

      USISR = shiftreg >> 16;
      USICNT = USI16B | 16;
      while (!flag.frame_event);

      LE = 1;
      __no_operation();
      __no_operation();
      __no_operation();
      LE = 0;


Хотя всё равно не понятно, почему опрос флага прерываний не даёт нужного эффекта. Вернее понятно, что запрос прерывания убирается не сразу после записи в регистр USICNT, а когда этот USI начинает шевелиться.
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

С новым годом!
Взял себе с работы домой девайс MSP430F5529_LaunchPad, я теперь на работе работаю с ним.
Есть кто, кто может подсказать по работе с usb-портом на ланчпаде типа этого ?

Эмулирую стандартное hid-устройство типа datapipe.
Использую usb descriptor tool, для создания т.н. дескрипторов для моего usb-девайса.
Ланчпад корректно распознаётся моей операционной системой (Windows) как стандартное hid-устройство, без всяких вопросов и восклицательных знаков. :)
Usb-сниффер [связи компа с usb-девайсами] использую. Он показал, что ответа от моего девайса нет.

Написал на компе простенькую программу связи с моим usb-устройством, оно мой ланчпад находит. В качестве теста решил отправить на комп пару байтов.
Проблема в прошивке ланчпада. Для учёбы использовал example от ti.com. В ходе пошагового разбора, выяснил что проблема в процедуре копирования данных в usb-буфер (для отправки в хост компьютеру). Что интересно, в example тоже такая же проблема.

При копировании данных в буфер usb (для отправки в usb-хост), буфер usb недоступен для записи.
Копирую туда (указателем), так не выдаёт ошибку и дальше идёт, и результата копирования ноль.
Если до команды:

Код: Выделить всё

USBCNF |= USB_EN;

использовать команду:

Код: Выделить всё

*((unsigned int*)(0x1C80)) = 0x1234;

то оно выполняется. После команды "USBCNF |= USB_EN;", копирование в буфер usb не происходит (хотя в example код такой же - но и там контроль в watch параметра (unsigned int*)(0x1C80) показывает, что не работает).

Регистр ключа USBKEYPID ставил.
Бит UPLLEN в USBPLLCTL всегда enable.
Бит UBME (в EP_INPUT_1, USBIEPCNF_n) в регистре конфигурации endpoint-ов менять пытался - не даёт меняться даже с USBKEYPID. Не пойму почему.

Помогите пожста.
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: TI MSP430 Launch Pad

Сообщение afz »

Тут вот мой товарищ в порядке восстановления своего владения "аглицкой мовой", как он сам выразился, перевел документ MSP430 IAR Assembler. Вот ссылка. https://yadi.sk/d/KbZE9WNDnPRxD
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Антон64
Родился
Сообщения: 1
Зарегистрирован: Пт янв 29, 2016 09:25:31

Re: TI MSP430 Launch Pad

Сообщение Антон64 »

Подскажите пожалуйста, в чем может быть причина. Пользуюсь Energia.
есть датчик DS18B20 и PC соединенный через USB, необходимо принимать команды с PC, что-то делать и отправлять данные на PC.
Организовал протокол передачи n байт (на лаунчпаде и PC) без использования датчика все работает, т.е. принимает команду, моргает светодиодом, отправляет команду обратно на PC .
Но если я хоть раз пользуюсь любой функцией из One Ware, больше Лаунчпад ничего не принимает. Даже если loop цикл пустой и я общаюсь с датчиком только по факту приема команды от PC, а после в пустом цикле loop опрашиваю Serial.available() - жду следующий команду от РС, Лаунчпад ее больше не принимает(((
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: TI MSP430 Launch Pad

Сообщение afz »

afz писал(а):Тут вот мой товарищ в порядке восстановления своего владения "аглицкой мовой", как он сам выразился, перевел документ MSP430 IAR Assembler.
Выкладываю заново. https://yadi.sk/d/Hfs9dZs8nPT4a
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
VLeshka
Открыл глаза
Сообщения: 43
Зарегистрирован: Чт июл 04, 2013 15:15:22

Re: TI MSP430 Launch Pad

Сообщение VLeshka »

При построении проекта, в окне build выводит отчёт типа:

7 274 bytes of CODE memory
240 bytes of DATA memory (+ 23 absolute )
763 bytes of CONST memory (+ 136 absolute )


Хочу узнать, что значит (+ 23 absolute ).

Справочник IAR не знает, что это такое. Интернет тоже (если есть где-либо - поправьте!).

Решил копать через отчёты IAR. Настройкой в Linker -> Generate linker listing создал segment map в формате html.
Далее, в этом файле так же сухо приводится absolute в сокращении "abs" в таблице Module summary.

Зацепился за "Module summary" -> Перерыл официальные доки IAR, много всяких в инете скачал, НО: везде приводится одна и та же фраза "Module summary which lists the contribution (in bytes) from each module". Ни слова про absolute.

ТАК ЧТО ЖЕ ТАКОЕ ABSOLUTE???
aleks12
Родился
Сообщения: 1
Зарегистрирован: Вт июн 28, 2016 15:15:57

Re: TI MSP430 Launch Pad

Сообщение aleks12 »

Купил сие чудо http://www.ebay.com/itm/TI-MSP430-USB-B ... 0865942309 (пусть будет проклят иероглифический...) и не могу запустить.Есть даже инструкция на китайском http://download.eeworld.com.cn/detail/solarelec/180677 может я ошибаюсь,что инструкция подходит к этому программатору.Внутри стоит CH340G и микроконтроллер NXP.Драйвер CH340G поставил и прогу запустил,а дальше ничего непонятно как с ним работать.Кто сталкивался с этим программатором,помогите запустить
Ответить

Вернуться в «Разные вопросы по МК»