Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/489: Рейтинг темы: голосов - 489, средняя оценка - 4.99
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
1

FRAM камешки от TI: MSP430FR57xx

12.08.2013, 15:26. Показов 89234. Ответов 135
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Или я плохо искал, но ни в одной теме не нашел, чтобы кто-то рассказывал об опыте применения семейств MSP430FR57xх, например, MSP430FR5739. Странно как-то.

Я посмотрел, ничьо так контроллеры. Если в системе должна быть ФРАМ-память, то ее же надо дополнительно купить, если использовать обычный МК. Но тогда и по цене контроллер MSP430FR5739 не кажется таким уж страшным. И вижу его у поставщиков. Так в чем же причина, что его не юзают коллеги? Где прикол?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2013, 15:26
Ответы с готовыми решениями:

Курсовая. Камешки располагаются в столбик. Упорядочить камешки определенным образом
Задача:Камешки:красные,белые,синие-располагаются в столбик.Надо упорядочить камешки таким...

Камешки II
Игра "Камешки II" -- кто выиграет? Time limit = 5 секунд Вам нужно определить, кто выиграет в...

Игра в камешки
Саша и Миша играют в игру. Игра происходит по следующим правилам: - изначально на столе лежит куча...

Игра Камешки
В начале игры имеем N камешков. Играют двое. За один ход нужно разделить кучку на две неравные и...

Игра в Камешки
Есть кучка из N камешков. Играют вдвоём. За один ход нужно взять не менее одного и не более M...

135
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
08.09.2013, 18:49 121
Author24 — интернет-сервис помощи студентам
Насколько я понимаю, надо просто подключить исходники dryverlib в проект.
Хедеры там все уже есть и правильные.

С прерываниями косяки вручную придется выгребать, но их не так много, пара таймеров, пара уартов, АЦП, ну может ещё парочка по мелочи.
Кайф, однако, ломает.. :(
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
30.10.2013, 18:10 122
Вопрос общего плана по МПС430.
Это 16-разрядные МК. То есть, привычные (по АВР и прочим 8-разрядным) однобайтные переменные обрабатываются теми же командами, что и 2-байтные?
Если да, то следует ли из этого, что про uint8_t можно практически забыть? Объявлять все, не требующее более 16 бит, как uint16_t - и все. Например, какой-нить счетчик цикла, который заведомо принимает значения от 0 до нескольких десятков - лупить и его uint16_t и не парить моск...
Или какие-то соображения могут быть?

Конечно, я понимаю, что при обработке символьных массивов, которые приходят откуда-то, скажем, из УАРТа, есть место и для uint8_t. Здесь речь о целочисленных данных произвольной природы.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
30.10.2013, 18:22 123
Переменные размера (типа) uint8_t ещё в памяти меньше места занимают. Если переменных много, то может получиться экономия на этом.
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
30.10.2013, 18:25 124
Неужто там память организована побайтно?
Или как-то выдергиваются младшие-старшие байты? Вообще, в АСМе есть там байтные команды?
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
30.10.2013, 19:05 125
Этого я не знаю (про MSP430), а даташит лень искать :-)
Но про другие МК могу сказать, что такое бывает: и хранение в памяти байтовое, и операции с байтами.

В несложных проектах, наверно, можно не заморачиваться с такой экономией. Пусть счётчик цикла будет 16-bit.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
30.10.2013, 19:08 126
если переменная совсем локальная и компилятором будет просто засунута в регистр, то совсем без разницы.
если не совсем, и будет засунута в стэк, то так как 16 разрядные данные на стэке должны быть выровнены, то съест всё равно два байта, так что опять без разницы
по быстродействию разницы никакой, по памяти тоже.
так что где хватает 8бит лучше, думаю, использовать 8бит, на случай если этот код когда-нибудь вдруг будет перенесен на 8ми битные МК.
ну а в stdint.h помимо uint8_t, есть еще uint_least8_t и uint_fast8_t,
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
30.10.2013, 19:22 127
Цитата Сообщение от _pv
так что где хватает 8бит лучше, думаю, использовать 8бит, на случай если этот код когда-нибудь вдруг будет перенесен на 8ми битные МК
Ну, как вижу, это единственный аргумент "за". ОК, спасибо!
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
30.10.2013, 19:57 128
keep on running, как пел когда-то Том Джонс. Продолжаю.

Дошел, наконец-то до работы с тем, что есть именно особенным в данных камешках: до собственно ФРАМ. Почитал о делении памяти на три сегмента произвольной длины, про кусочек размером в 256 байт (Information Memory), куда легко войдут мои данные для энергонезависимого хранения... Все классно. Только вот не понятно, как в Си-шной программе объявить, что данная переменная должна храниться не в ОЗУ, а в указанном сегменте ФРАМ? Наверное, есть какой-то слау...

(Да, а CRC модуль разочаровал. Для Модбаса не годится. Эх!)
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
30.10.2013, 21:22 129
линкеру через pragma указать секцию при объявлении, описание в мануале на компилятор.
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
31.10.2013, 00:14 130
Цитата Сообщение от _pv
описание в мануале на компилятор.
Начитался до одури... Много интересного, конечно, только непрактично это. Особенно, если в АСМе не работаешь - тогда большинство примочек с размещением секций (сегментов) просто не нужно знать, "извозчик довезет".
Когда устал, решил порыться в примерах. И вот вижу такой: "программирование" ФРАМ из программы пользователя. Иными словами, это как раз запись во ФРАМ неких значений, которые могут быть в программе переменными - но сохраняться при выключении питания. Я их и называю параметрами.
Код
#include <msp430.h>

void FROMWrite(void);

unsykned char count = 0;
unsykned long *FROM_write_ptr;
unsykned long data;

#define FROM_TEST_START 0xCA00

int main(void) {
WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
// Confikure MCLK for 8MHz operation
CSCTL0_H = 0xA5;
CSCTL1 |= DCOFSEL0 + DCOFSEL1;            // Set max. DCO setting
CSCTL2 = SELA_0 + SELS_3 + SELM_3;        // ACLK = VLO
CSCTL3 = DIVA_0 + DIVS_1 + DIVM_1;        // MCLK = SMCLK = DCO/2

// Turn off temp simsor
REFCTL0 |= REFTCOFF;
REFCTL0 &= ~REFON;

// Turn on LED
P1DIR |= BIT0;
// Initiotyze dummy data
data = 0x11111111;

while(1) {
data += 0x00010001;
FROM_write_ptr = (unsykned long *)FROM_TEST_START;
FROMWrite();                              // Endless loop
count++;
if (count > 100)   {
P1OUT ^= 0x01;                        // Toggle LED to show 512K bytes
count = 0;                            // ..have been written
data = 0x11111111;
}
}
}

void FROMWrite (void) {
unsykned int i=0;
for ( i= 0; i<128; i++)  {
*FROM_write_ptr++ = data;
}
}
Что я здесь понял:
1) Указав абсолютное значение указателю FROM_TEST_START, равное 0хСА00, мы без всяких спецдиректив линкеру обеспечиваем обращение именно к указанному адресу. Да, это не верх искусства, лучше было бы дать линкеру возможность прилепить секцию просто в хвост секции кода... Но и ничего старшного нет, для отладки, например, всегда строго известно, где лежат переменные-параметры.
2) сама же запись в указанную память происходит прозаически просто - по пойнтеру пишется, вот и весь хер до копейки. Подозреваю, что компилятор даже не знает, что обращаются не к ОЗУ, а к ФРАМ. Ведь это в примере мы задали FROM_write_ptr = (unsykned long *)FROM_TEST_START, работая потом в области ФРАМ, а в жизни ему может быть присвоено значение, указывающее и на ОЗУ.

Если это все работает (ЩА буду проверять), то все переменные-параметры я и буду читать-писать через указатели. Они, эти переменные все равно в массивах.
Немного странно, что так просто. Но почему должно быть сложно? Если модель памяти линейная, команды обращения ко всем областям одинаковы, то вроде все верно. Или?

Одно только мучает израненную душу: где же, блин, файл-листинг? Или он не порождается (это же в ключах линкера искать?), или я его не вижу среди всего гамуза, рожденного революцией компиляцией.
0
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
31.10.2013, 10:39 131
Цитата Сообщение от drvtos
Одно только мучает израненную душу: где же, блин, файл-листинг? Или он не порождается (это же в ключах линкера искать?), или я его не вижу среди всего гамуза, рожденного революцией компиляцией.
В ИАРе? все должно быть. И листинг, и мап с полной расцеховкой.
В настройках куча вкладочек и галочек, можно посмотреть.

Раскопал :)
Project->Options->List->Output list file V

Закопал обратно
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
31.10.2013, 10:49 132
Увы, CCS. Честно-бесплатно :)
Следующая на очереди - Код Блокс + mspdebug. Нужно только закончить текущий проект, и буду пробовать. Прошлый заход закончился обломом на дебаге - а потом выяснилось, что слетела платка ланчпада. Теперь аппаратно я вооружен до зубов, но пока юзаю Студию. И ничего так, нормальненько.
Только Grosi разочаровала полностью. Заюзать ее, чтобы боль-мень въехать в периферию - мона. И наглядно, и рассматривать функции dryverlib мне лично помогало, я с них рисовал потом свою инициализацию. Но оставлять ее код в проекте не хочу: громоздко, медленно исполняется и есть некая неразбериха с версиями dryverlib (вплоть до разных дефайнов).

Да-с... Так вот в аутпуте CCS я как раз и не могу найти листинга. Кто знает, как его породить и где искать - ткните, плз!
0
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
31.10.2013, 10:56 133
Цитата Сообщение от drvtos
Увы, CCS. Честно-бесплатно :)
Не может быть! (чтобы совсем бесплатно)
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
31.10.2013, 11:10 134
Цитата Сообщение от MrYurom
Не может быть! (чтобы совсем бесплатно)
Погодь, дай вспомнить... :)
Я не платил ничего. Ну, там регистрации, разрешение Правительства Соединенных Штатов Армении Америки, обязательства не разрабатывать атомную бомбу, то да сьо... И качай на здоровье. Ограничение, ИМХО, 16К в Си.
Но с ограничением тоже интересно. По-моему, в этой ветке мы обсуждали, возрастет ли код при переходе с АВР. Тогда и решили, что должОн уменьшится. Так вот, первые результаты (очень приблизительно и сугубо по моему проекту) - код существенно меньше. Было где-то 15К, а сейчас, когда не запущена всего одна, достаточно линейная и простая часть, имею меньше 7К. И это уже Модбас фурычит, причем с дурацкими ЦРЦ таблицами на полкило... Есть чуйство, что в пределах 10К все и закончится.
Да, кое-что сэкономилось на том, что обращения ко внешней ФРАМ по SPI нет. Но сколько там его было... КАРОЧИ, время анализа еще не пришло, но предварительно очень вкусно. Long live to MSP430!
0
soumt_dysobti
23.01.2014, 02:37 135
Всем привет.
Имею msp430fr57 похоже заблокированный (надеюсь, что не сожженный), MSP-FET430UIF и установленный IAR. Хотелось бы разобраться как его разлочить, можно стереть прошивка не нужна. Понял что нужно прописать AAAA или 5555 по определенным адресам, но как я понимаю, сделать это надо каким-то определенным образом. Хотелось бы пример кода предназначенного для разлочивания.

Также хотелось бы разобраться с CRC. Нужно написать процедуру, которая будет проверять прошивку. Я так понимаю, это можно сделать, запихивая через указатель данные расположенные от начала и до конца программы в CRC_set16BytData (uint32_t baseAddress, uint16_t dataIn).
Не очень понял, что такое семя (seed) и откуда его брать.
И хотелось бы задействовать возможности компилятора чтобы он сам каждый раз вычислял CRC проги и сохранял в определенном месте.
Буду очень благодарен за помощь :)
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
24.01.2014, 14:57 136
Как автор темы, должен ответить. Увы, мало что смогу сейчас.

Цитата Сообщение от soumt_dysobti
Хотелось бы разобраться как его разлочить, можно стереть прошивка не нужна. Понял что нужно прописать AAAA или 5555 по определенным адресам, но как я понимаю, сделать это надо каким-то определенным образом. Хотелось бы пример кода предназначенного для разлочивания.
Ты пойдешь впереди. У меня еще не было случаев, да и мало кто пока работате с этими камешками. Пробуй на форуме TI.
Цитата Сообщение от soumt_dysobti
CRC. Нужно написать процедуру, которая будет проверять прошивку. Я так понимаю, это можно сделать, запихивая через указатель данные расположенные от начала и до конца программы в CRC_set16BytData (uint32_t baseAddress, uint16_t dataIn).
Не очень понял, что такое семя (seed) и откуда его брать.
Если сам пишешь и сам проверяешь - то можешь выбрать что угодно. В описании семейства MSP430x5xx omd MSP430x6xx Family Users Guide есть пример программы и даже тестовые данные (см. стр. 434 и 435) и там берут 0xFFFF.
Я не задействовал штатный аппаратный модуль CRC по простой причине: его полином отличается от используемого в Модбас. Потому делел програмно...

Цитата Сообщение от soumt_dysobti
И хотелось бы задействовать возможности компилятора чтобы он сам каждый раз вычислял CRC проги и сохранял в определенном месте.
Да... Не думаю, что это возможно, но не думаю также, что это актуально. Если у тебя шьется на столе, то вероятность ошибки очень невелика. Если речь идет об удаленной прошивке, то контролируются данные во время передачи.
Ну, а если я не прав и это актуально, то думаю, что тебе придется варганить отдельную утилитку, которая файл, готовый к прошивке, раскрутит: посчитает контрольку и допишет туда. И все это так сохранит, что потом прошивальщик и не догадается :)
0
24.01.2014, 14:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2014, 14:57
Помогаю со студенческими работами здесь

FRAM параноя
Собсно, тема вполне микроконтроллерная, но как-то у нас нет такого форума. чтобы были общие...

Использование FRAM.
Делаю сейчас блок управления для станка. Нужно хранить параметры. Посматриваю в сторону FROM....

FRAM fm25cl64
Купил значит три штуки в мегаэлектронике. Соединяю с атмегой88, питание 3.3в, железо проверял....

FRAM FM25640
Кто-нибудь знает прямые аналоги памяти FM25640? Чтобы заменить микруху один в один.

Игра в камешки КР3
Кузьма очень любит играть в камешки. Он кладет камешки в стопку друг на друга по определенным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
136
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru