Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):автором было так написано и изначально, до личной переписки, значит я лучше телепат. :)

И именно для этого вы торжественно сообщили, что самые мощные доказательства присутствуют в вашей личной переписке? Какие-то это совсем вялые увертки. Без огонька.

по заданию надо отправлять звук по UDP с помощью STM8.

И принимать, раз это переговорное устройство. И имеем мы полный дуплекс, в котором один транспорт может скушать весь вычислительный ресурс. А в задаче помимо транспорта есть еще дофига чего. По хорошему, тут просто для обеспечения должного функционала что-то на вроде RT-OS напрашивается. Значит, еще быстродействие (которого и так не хватает) просядет. И как говорится в анекдоте, "сейчас со всей этой херней мы попытаемся взлететь." Вы уверены, что взлетите, а я нет. Это как раз то место, где смелые идеи разбиваются об опыт. На STM32 в интернетах можно найти несколько реализаций айпи-телефонов. На stm8 мне не попалось ни одной. Ни на какие мысли не наталкивает?

А интересно у ИАР для СТМ32 тоже свои хидеры?

Посмотреть не судьба? Опасаетесь опять не найти? Если, что, то вот тут искать: .\IAR Systems\Embedded Workbench\arm\inc\ST. Причем, там поблизости есть не только для ST, а вообще для всех армов, которые иар поддерживает. Все заголовки в одном стиле. Можно писать код в одном ключе для МК разных производителей, пока Керниган с Ричи не видят.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

вы торжественно сообщили

А что, так торжественно сообщил? С фанфарами? Не заметил - вроде все как обычно, готов приносить извинения или это опять всемирный заговор чудится?
И имеем мы полный дуплекс

Что и это в задаче было? А я наивный думал о полудуплексе. Шеф все пропало... На всякий поискал в этой теме слово дуплекс - Результатов поиска: 2, сегодняшним числом.
Значит, еще быстродействие (которого и так не хватает) просядет.

Насколько просядет? "Отсылка к непроверяемым фактам не является доказательством, а скорее свидетельствует о попытке жульничества."(c)
Посмотреть не судьба?

Иар не хотелось качать, ставить и засорять систему ненужным хламом, потому и спросил, если можно приложите образчик для стм32ф0 - хотелось глянуть. У Кайла тоже раньше были свои, но по классике, сейчас паки - там от производителя, даже папки \INC в основной директории нету, где раньше для всех производителей хранились. Хорошо придумали - легко обновлять теперь можно.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):Что и это в задаче было?

Это следует из функционала существующих подобных устройств.
А я наивный думал о полудуплексе.

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

Насколько просядет? "Отсылка к непроверяемым фактам не является доказательством, а скорее свидетельствует о попытке жульничества."(c)

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

Иар не хотелось качать, ставить и засорять систему ненужным хламом, потому и спросил, если можно приложите образчик для стм32ф0 - хотелось глянуть.

Примеры на сайте иара качаются отдельным архивом. Я их не качал, т.ч. ничем помочь не могу.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

существующих подобных устройств

а разве задача у человека сделать "подобное" устройство? Где это написано? Где пруфлинк на устройство, со схемой желательно, чтоб оценить уровень. Для "поковыряться" хватит и полудуплекса (имхо)
выбраться из неловкого положения, в котором находитесь

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

а мне показалось что в попад, как раз у вас оно и не невпопад. Значит фразу сию не смог по своему скудоумию уразуметь.

Ось тут не нужна (имхо) для полудуплекса да и с дуплексом можно обойтись. Сей очевидный и легко-проверяемый факт следует из того что нет необходимости отдавать процессорное время на функционирования самой ОС. Для "поковыряться" хватит и без оси (имхо).

Хидерчик иаровский я просил, а не примеры, разговор то был про хихеры. "вот тут искать: .\IAR Systems\Embedded Workbench\arm\inc\ST"(с). Это хоть правильно или тоже "за уши притягивать"?

Может по теме все таки начнем уже говорить, с пруфами, цифрами, с реальными уже проверенными фактами (не "легко-проверяемыми" - это смешно и по детски выглядит), а то как бабы на базаре. Происходящее напоминает одну книгу - "Шаг вперед, два шага назад".

И так (опять поверну в нужное русло): пинг есть, полустек есть, микрофон с динамиком (я бы все таки колоночки) есть, АЦП есть, флэш-память есть, сетевой кабель есть, роутер есть (не понятно теперь нужен или нет), Ось не надо. Что мешает приступить?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):а разве задача у человека сделать "подобное" устройство? Где это написано?

"Через него планируется разговаривать с диспетчерской. Своего рода переговорное устройство." Сейчас, скорее всего, в диспетчерской старинное аналоговое устройство, замену которому и было решено сделать. Если бы вы с самого начала не отказались погуглить "диспетчерские системы связи", то сейчас бы не пришлось изображать из себя непонимающего.

Для "поковыряться" хватит и полудуплекса (имхо)

Пляшем не от вашего имха, а от т.з.

врете очень много

То, что вы пытаетесь изобразить невозмутимость не является фактом моей лжи. Не придумывайте.

а мне показалось что в попад, как раз у вас оно и не невпопад.

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

Ось тут не нужна (имхо) для полудуплекса да и с дуплексом можно обойтись.

Ось, или какое-то ее подобие, тут весьма оказалась бы кстати, чтобы распределять время между всеми процессами. Иначе всем процедурам придется самостоятельно следить за временем, которое отведено на ту или иную операцию. Передача голоса это практически реалтайм и допусть, чтобы алгоритм приема, скажем, застрял в ожидании потерявшегося пакета, никак нельзя.

Для "поковыряться" хватит и без оси (имхо).

Вот вы, вроде бы, не врете, а легонечко так меняете т.з. Невинная такая подмена. В т.з. было переговорное устройство и никаких поковыряться. Поковыряться подразумевалось в процессе его изготовления.

Это хоть правильно или тоже "за уши притягивать"?

Былая психологическая травма, после трехдневных поисков векторов, дает о себе знать? Или может вы забыли, что я предельно конкретно говорил где их искать, где они, собственно, и нашлись в конце концов. С чего бы у вас в этот раз возникли такие сомнения?

Может по теме все таки начнем уже говорить, с пруфами, цифрами, с реальными уже проверенными фактами, а то как бабы на базаре.


С самого начала я выразил сомнение, что данное устройство может быть изготовлено на стм8. Есть только один способ доказать обратное и развеять всякие сомнения -- это изготовить данное устройство и продемонстрировать функционал. Все остальное -- "как бабы на базаре".

И так (опять поверну в нужное русло): пинг есть, полустек есть, микрофон с динамиком (я бы все таки колоночки) есть, АЦП есть, флэш-память есть, сетевой кабель есть, роутер есть (не понятно теперь нужен или нет), Ось не надо. Что мешает приступить?

Фиг с ним. Приступайте. Годика через полтора-два я обязательно загляну сюда осведомиться, как продвигается дело.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

a5021 писал(а):...

"Отсылка к непроверяемым фактам не является доказательством, а скорее свидетельствует о попытке жульничества."(c) "Этим приемом обычно пользуются малые дети."(c)
Собака лает - караван идет. Приступим.
Собираем в кучку т.з. (данные взяты из личной переписки, извиняюсь перед автором, если нарушил)
1) микроконтроллер stm8s005k6
2) Сетевой адаптер подключен по SPI. (ENC28J60)
Использованы следующие выводы: PE5 (17) - SPI_NSS, PC7 (24) - SPI_MISO, PC6 (23) - SPI_MOSI, PC5 (22) - SPI_SCK.
3) Микрофон к АЦП PB3 (13).
4) Куда подключен динамик - нет данных
5) По воспроизведению звука пока есть такое от автора:
"По поводу звука из браузера, есть зацепка http://metanit.com/sharp/articles/7.php В visual C# попробую преобразовать этот проект под мою задачу."

Чтобы не было недоразумений, делать это я не подписывался, помочь да. Думаю адекватные люди с форума тоже помогут, если мы не запугали своим базаром автора, надеюсь что нет.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):"Отсылка к непроверяемым фактам не является доказательством, а скорее свидетельствует о попытке жульничества."(c) "Этим приемом обычно пользуются малые дети."(c)

Вы сами с собой разговариваете непонятно о чем или какая-то конкретика есть?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

Не не собой - ранее вам уже писал об этом. Чукча не читатель?
Чукча приходит в издательство и представляет свою книгу.
Редактор смотрит и видит вместо букв - неведомые закорючки.
Он спрашивает: — Чукча, ты читать вообще умеешь?
— Чукча, однако, не читатель. Чукча — писатель.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Потрудитесь указать, где я вас отсылал к непроверяемым фактам, а не цитировать свои любимые бородатые анекдоты.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

а чего я должен потрудиться - вы хидер не потрудились выложить. :))
А чего далеко ходить.
Фраза "свои любимые бородатые анекдоты" - почему любимые - непроверяемый факт, и непроверенный факт, может я анекдоты терпеть ненавижу а память хорошая, цитировать не значит любить. Мы друг друга не знаем и поэтому вы не можете знать и не узнаете что я люблю.
"Былая психологическая травма" - не было никакой травмы вообще, наоборот даже настроение поднялось - непроверяемый факт и вранье (об настроении тоже ранее писал - опять чукча).
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):а чего я должен потрудиться - вы хидер не потрудились выложить.

Вот и цена вашим словам -- "непроверяемый факт" оказался совсем уже непроверяемым потому, что вас ломает качать иар с сайта производителя. Не знаю, как вы, а я бы точно не хотел выглядеть столь глупым образом.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

а зачем мне целый иар, если я хотел только хидер от него посмотреть? Хидер это махонький текстовый файл. Вы пожлобились - вот это действительно выглядит глупо. Разве это трудно, тем более путь где он находится, вы хорошо знаете - обидно, да. :cry: Опять свернули с темы - все про меня да про меня. Неловко чувствую себя - по жизни скромен. Столько внимания к моей несчастной персоне. :oops:

По теме. Выкладываю свой рабочий говнокод (кому будет нужно - причешет) по работе с АЦП. Может пригодится для оцифровки звука с микрофона. Бралось из примеров от производителя и интернета и чтения документации.
Спойлер

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

uint16_t ADC1_GetConversionValue(void) // Чтение АЦП
{
    uint16_t temph = 0;
    uint8_t templ = 0;

    ADC1->CR1 |= ADC1_CR1_ADON;   //ADC powered up
    ADC1->CR1 |= ADC1_CR1_ADON;   //begin conversion   

    while (!(ADC1->CSR & ADC1_CSR_EOC)){}; //check for the EOC
   
    /* Read LSB first */
    templ = ADC1->DRL;
    /* Then read MSB */
    temph = ADC1->DRH;
    temph = (uint16_t)(templ | (uint16_t)(temph << (uint8_t)8));
    return ((uint16_t)temph);
}

void ADC_init( void ) // Настройка АЦП
{
    //AIN6 PIN3
    /* Clear the align bit */
    ADC1->CR2 &= (uint8_t)(~ADC1_CR2_ALIGN);
    /* Configure the data alignment */
    ADC1->CR2 |= (uint8_t)0x08; //Right
    /* Clear the SPSEL bits */
    ADC1->CR1 &= (uint8_t)(~ADC1_CR1_SPSEL);
    /* Select the prescaler division factor according to ADC1_PrescalerSelection values */
    ADC1->CR1 |= (uint8_t)0x60; //fcpu/12
    /* Set the single conversion mode */
    ADC1->CR1 &= (uint8_t)(~ADC1_CR1_CONT);
    /* Clear the ADC1 channels */
    ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);
    /* Select the ADC1 channel */
    ADC1->CSR |= (uint8_t)(0x06);
    /* Disables the ADC1 Schmitt Trigger on a selected channel */
    ADC1->TDRL |= (uint8_t)((uint8_t)0x01 << (uint8_t)0x06); // Schmitt trigger disable on 6 chanel
}
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):а зачем мне целый иар, если я хотел только хидер от него посмотреть? Хидер это махонький текстовый файл. Вы пожлобились - вот это действительно выглядит глупо.

Мне плевать, как это выглядит. А вот на то, что вы меня голословно обвинили, не плевать. Наличие хедера вы могли проверить самостоятельно и вам в этом ничего не мешало. Но предпочли обвинить меня в том, что я, якобы ссылаюсь на непроверяемые факты. Ну поздравляю вас, господин соврамши.


Выкладываю свой рабочий говнокод

Плохому учите. Это не говнокод, а несколько хуже. Можно писать наотмаш, как попало и это будет действительно плохой код. Но если писать с ошибками, то это даже и говнокодом не назвать.

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

uint16_t ADC1_GetConversionValue(void) // Чтение АЦП
{
    uint16_t temph = 0;
    uint8_t templ = 0;

    ADC1->CR1 |= ADC1_CR1_ADON;   //ADC powered up
    ADC1->CR1 |= ADC1_CR1_ADON;   //begin conversion   


Читаем RM0016, стр. 420: "24.5.9 Timing diagram
As shown in Figure 162, after ADC power on, the ADC needs a stabilization time tSTAB
(equivalent to one conversion time tCONV) before it starts converting accurately. For
subsequent conversions there is no stabilization delay and ADON needs to be set only
once."

Четырнадцать клоков должно пройти между включением ADC и началом первого преобразования. И нафига всегда два раза подымать этот бит, если по выходу из процедуры вы не выключаете ADC ? Две ошибки в первых же двух строках. Пипец. Теперь не остается сомнений, что вы и виндовс на арифмометр "феликс" портируете, если потребуется.

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

    ADC1->CR2 |= (uint8_t)0x08; //Right
    ADC1->CR1 |= (uint8_t)0x60; //fcpu/12
    ADC1->CSR |= (uint8_t)(0x06);
    ADC1->TDRL |= (uint8_t)((uint8_t)0x01 << (uint8_t)0x06); // Schmitt trigger disable on 6 chanel

Магические цифры? Откуда они при использовании замечательных "библиотек от производителя" ? Не вы ли с пеной у рта доказывали всю пагубность "магических цифр" ? Или вся гнилая сущность этой магии проявляется только в чужом коде, а в вашем собственном это, совсем наоборот, достжение? Нет слов. Остается только поздравить с очередным залетом.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

a5021 писал(а):вы меня голословно обвинили

в чем обвинили? В каком месте? Пруфлинк, где обвинили, а то голословно, понимаете ли, получается. Меня вы все время голословно обвиняете и ничего, не плачусь, наоборот смешно даже, даю пруфлинк - последние три страницы и ранее тоже было. :))
a5021 писал(а):Но если писать с ошибками

остальной части кода мы еще не видели - у меня АЦП выключается в другом месте, перед WFI. Может пригодится - экономить электроэнергию бывает надо, без power down тоже работает. Нет тут "две ошибки в первых же двух строках". И "пипца" тоже не видно - видно только "голословные обвинения". Для сравнения надо было бы выложить свой образцовый код, если его нет - вкрадываются подозрения, что такового в природе вообще не существует.
RM0016:

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

The ADC can be powered-on by setting the ADON bit in the ADC_CR1 register. When the 
ADON bit is set for the first time, it wakes up the ADC from power down mode. To start
conversion, set the ADON bit in the ADC_CR1 register with a second write instruction.

Первый раз установленный бит пробуждает ADC, второй раз - начинается преобразование. Даю пруфлинк, чтоб не голословно:
Temperature_Sensor_example\stm8s_it.c @author STMicroelectronics, MCD Application Team
http://brush-v1.googlecode.com/svn/trun ... stm8s_it.c
a5021 писал(а):Магические цифры? Откуда они при использовании замечательных "библиотек от производителя"?

И не зачем так орать.(с)
Взято из примеров производителя. Встречается в коде один раз. Комментировано. Что говнокод подписано, про причесать, если надо, тоже. Знал что прицепитесь, потому и оставил как есть - лишний раз наука будет. Раз не прошли мимо - пошло на пользу, я рад. Виноват - поленился задефайнить, было давно, на заре моих потуг с стм8, так и осталось. :oops: Если вообще не предвзято взглянуть на код и документацию - в принципе все логично и понятно (мне, по крайней мере, может и кому другому).
Магическое число, или сигнатура — целочисленная константа, используемая для однозначной идентификации ресурса или данных. Такое число само по себе не несёт никакого смысла, и может вызвать недоумение, встретившись в коде программы без соответствующего контекста или комментария

p/s/ "с пеной у рта" - пену тоже видели? Прям на экране монитора? Или в зеркале? :)))
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):в чем обвинили? В каком месте? Пруфлинк, где обвинили, а то голословно,

Да понятно, что отвечать за свои слова -- это совсем не в вашем стиле. Могли бы уж и не извиваться лишний раз.

остальной части кода мы еще не видели - у меня АЦП выключается в другом месте, перед WFI.

Опять непроверяемые псевдо-доказательства. Только в этот раз вы и с ними попали. Если всякий раз на входе в процедуру АЦП выключен, то результаты преобразования будут ошибочными уже при каждом вызове. Отличная иллюстрация конфуза под названием "потянул себя за волосы из болота и тем самым увяз еще глубже".

Для сравнения надо было бы выложить свой образцовый код, если его нет - вкрадываются подозрения, что такового в природе вообще не существует.

Так его и действительно не существует. Только это не отменяет существования RM0016, где черным по белому написано, что между включением АЦП и началом преобразования должно пройти 14 тактов. Для не умеющих читать, там есть даже картинка с растактовкой под названием Figure 162. Видите там интервальчик с обозначением tSTAB между "Software sets ADON bit 1st time" и "Software sets ADON bit 2nd time" ? Это оно и есть. Шах вам и мат, гроссмейстер.

Даю пруфлинк, чтоб не голословно:
Temperature_Sensor_example\stm8s_it.c @author STMicroelectronics, MCD Application Team

Индусячий код уже пошел в качестве пруфов? Серьезная заявка, с учетом, что горбылей в нем вылавливают по несколько тысяч в сезон. Скажите еще, что при разночтениях с мануалом вы предпочитаете довериться неизвестному индийскому программистскому гению. Это будет так узнаваемо.

Раз не прошли мимо - пошло на пользу, я рад.

Какая глупость -- изображать здесь из себя великого просветителя и завалиться на первых же строчках. Совсем вы своим реноме не дорожите.
Последний раз редактировалось a5021 Чт май 28, 2015 11:32:41, всего редактировалось 1 раз.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

собака лает — ветер носит, а караван идет
пояснение пословицы:
Не стоит обращать внимание на ругань, злословие, упреки, сплетни, слухи, домыслы и прочее. А уж тем более от людей, что «не совсем в теме». И чем больше они лают, тем более понятно, что караван идет правильной дорогой.(с)


По теме. Продолжим.
Для того чтобы сильно не загружать микроконтроллер разобьем передачу звука по UDP на два этапа:
1) Оцифровка звука с микрофона->сжатие данных->буфер (сжатие, как справедливо заметил Alexeyslav, можно пропустить)
2) буфер->UDP
В таком случае необходим буфер большого объема. Автор, хоть и начинающий первый заговорил о spi памяти, макнул нас, так сказать, "знатоков" лицом в...
Посчитаем:
оцифровка 8кГц 8бит
уходит 8000 байт в секунду
Возьмем, для примера память SPI AT26DF161 (я с ними работал, сейчас есть дешевле варианты)
16 мегабит, 2097151 байт
2097151/8000 = 262.143875 секунд = 4.36906458333333 минут
Захэкаешся говорить - можно брать с меньшим объемом.

Скорее всего можно будет и выполнять задачи 1 и 2 одновременно. STM8, в отличие от того же AVR имеет несколько уровней приоритета прерывания. В связи с этим большую часть коллизий удается разрулить с помощью грамотной настройки прерываний. Ось, в принципе получается, будет и не нужна.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

oleg110592 писал(а):собака лает — ветер носит, а караван идет

Что, не нравится, когда вам платят той же монетой? Так и незачем было изображать из себя знатока языков программирования с цитирование "величайших" откровений -- первых глав из Кернигана. Я бы вообще никогда не обратил внимания на какие-то там ляпы в коде, если бы вы с такой помпой не устроили здесь перформанс с требованиями блюсти канон. Ну, а раз сами напросились, то и получайте.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

a5021 писал(а):напросились, то и получайте

а что я получил? Уточните пожалуйста. Кроме безудержного смеха пока больше ничего.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Программирование STM8

Сообщение a5021 »

Можете сколь угодно теперь веселиться. Своими программистскими скиллами вы уже блеснули здесь так, что фиг ототрешь.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Программирование STM8

Сообщение oleg110592 »

Детство кончится когда-то
Ведь оно не навсегда.
...

опять вранье - ничего то и не получил, жадина - говядина :shock:
Продолжим.
Нам понадобится код для работы с SPI памятью. У меня код был написан на ассемблере - поэтому не подойдет. Ищем по интернету, находим, слегка правим:
Спойлер

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

// DataFlash code
#define FLASH_8MBIT 1   // original JL2 had 8 Mbit flash, new ones have 4 Mbit

#define DF_CS_GPIO_PORT  (GPIOE)
#define DF_CS_GPIO_PIN  (GPIO_PIN_4)   // PE5 (17) уже используется

#if FLASH_8MBIT
// settings for 1 Mbyte flash in JLv2
#define DF_PAGE_SIZE    256         // bytes
#define DF_BLOCK_SIZE   16          // number of pages erased at same time
#define DF_LOG_BEGIN    32          // first 2 blocks reserved for future use
#define DF_LOG_LIMIT    0x0F00      // last 64k is not used for logging
#define DF_MEM_TOTAL    0x1000      // 4096 pages, i.e. 1 Mbyte
#define DF_DEVICE_ID    0x1F45      // see AT26DF081A datasheet
#endif

#if FLASH_4MBIT
// settings for 0.5 Mbyte flash in JLv2
#define DF_PAGE_SIZE    256         // bytes
#define DF_BLOCK_SIZE   16          // number of pages erased at same time
#define DF_LOG_BEGIN    32          // first 2 blocks reserved for future use
#define DF_LOG_LIMIT    0x0700      // last 64k is not used for logging
#define DF_MEM_TOTAL    0x0800      // 2048 pages, i.e. 0.5 Mbyte
#define DF_DEVICE_ID    0x1F44      // see AT25DF041A datasheet
#endif

// structure of each page in the log buffer, size must be exactly 256 bytes
typedef struct {
    byte data [248];
    word seqnum;
    long timestamp;
    word crc;
} FlashPage;

// structure of consecutive entries in the data area of each FlashPage
typedef struct {
    byte length;
    byte offset;
    byte header;
    byte data[RF12_MAXDATA];
} FlashEntry;

static FlashPage dfBuf;     // for data not yet written to flash
static word dfLastPage;     // page number last written
static byte dfFill;         // next byte available in buffer to store entries

static byte df_present () {
    return dfLastPage != 0;
}

static void df_enable () {
    DF_CS_GPIO_PORT->ODR &= ~((uint8_t)DF_CS_GPIO_PIN); //Reset AT26DF pin
}

static void df_disable () {
    DF_CS_GPIO_PORT->ODR |= (uint8_t)DF_CS_GPIO_PIN; //Set AT26DF pin
}

/*
Copyright © 2012 Angel5a
Настройка SPI не вызывает никаких проблем: выставляем нужные биты и...,
всё описано в datasheet’е.
Функция обмена ничем практически не отличается от AVR версии,
разве что именами регистров и битов:
*/
static byte df_xfer (byte cmd) {
   /* Послать байт */
   SPI->DR = cmd;
   /* Ждём приёма байта */
   while ((SPI->SR & (uint8_t)SPI_FLAG_RXNE) == RESET) { ; }
   /* Возвратить принятый байт */
   return (uint8_t)SPI->DR;
}

void df_command (byte cmd) {
    for (;;) {
        df_enable();
        df_xfer(0x05); // Read Status Register
        byte status = df_xfer(0);
        df_disable();
        // don't wait for ready bit if there is clearly no dataflash connected
        if (status == 0xFF || (status & 1) == 0)
            break;
    }   
    df_enable();
    df_xfer(cmd);
}

static void df_writeCmd (byte cmd) {
    df_command(0x06); // Write Enable
    df_deselect();
    df_command(cmd);
}

static void df_deselect () {
    df_disable();
    sei();
}

void df_read (word block, word off, void* buf, word len) {
    df_command(0x03); // Read Array (Low Frequency)
    df_xfer(block >> 8);
    df_xfer(block);
    df_xfer(off);
    for (word i = 0; i < len; ++i)
        ((byte*) buf)[(byte) i] = df_xfer(0);
    df_deselect();
}

void df_write (word block, const void* buf) {
    df_writeCmd(0x02); // Byte/Page Program
    df_xfer(block >> 8);
    df_xfer(block);
    df_xfer(0);
    for (word i = 0; i < DF_PAGE_SIZE; ++i)
        df_xfer(((const byte*) buf)[(byte) i]);
    df_deselect();
}

// wait for current command to complete
void df_flush () {
    df_read(0, 0, 0, 0);
}

static void df_wipe () {
    df_writeCmd(0x60);      // Chip Erase
    df_deselect();
    df_flush();
}

static void df_erase (word block) {
    df_writeCmd(0x20);      // Block Erase (4 Kbytes)
    df_xfer(block >> 8);
    df_xfer(block);
    df_xfer(0);
    df_deselect();
    df_flush();
}

static word df_wrap (word page) {
    return page < DF_LOG_LIMIT ? page : DF_LOG_BEGIN;
}


Теперь у нас есть практически все куски для сбора головоломки.
1) стек (полустек)
2) код оцифровки (рабочий, проверено)
3) код для SPI памяти (не проверено)
Самое сложное, конечно впереди - надо собрать головоломку. Это, наверное будет делать автор, а может и не будет, я точно не буду. Прием на ПК тоже предстоит делать автору.
Задачу, имхо можно решить за 2 (два) дня и совершенно не надо ждать полтора года.
Не так страшен черт, как его малюют.
ХАУ
«Когда индеец заканчивает свою речь, он произносит «хау» — «я все сказал»
Ответить

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