Например TDA7294

Форум РадиоКот • Просмотр темы - Вспомним старое доброе (ARM7)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 22:15:33

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 29 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 05, 2017 18:44:00 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40
Сообщений: 46
Рейтинг сообщения: 0
YS, с Вами, как обычно, невозможно не согласиться!

Немного дополнил инициализацию, прогнал в симуляторе по регистрам.

Код:
  AT91C_BASE_MC->MC0_FMR = ((AT91C_MC_FMCN & (48 << 16)) | AT91C_MC_FWS_1FWS);
  AT91C_BASE_MC->MC1_FMR = ((AT91C_MC_FMCN & (48 << 16)) | AT91C_MC_FWS_1FWS);
  AT91C_BASE_WDTC -> WDTC_WDMR = AT91C_WDTC_WDDIS;
 
  pPMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);
  while(!(pPMC -> PMC_SR & AT91C_PMC_MOSCS));
 
  pPMC -> PMC_PLLR = ((AT91C_CKGR_DIV & (0x05 << 0)) | (AT91C_CKGR_PLLCOUNT & (28 << 8)) | (AT91C_CKGR_MUL & (25 <<16)));
  while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2;
  while(!(pPMC -> PMC_SR & AT91C_PMC_MCKRDY));
  pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
  while(!(pPMC -> PMC_SR & AT91C_PMC_MCKRDY));


По регистрам все заносится как ему указано, результат тот же.

В инициализации флэша ему сказано "2 цикла чтение - 3 цикла запись". Для поля FMCN (количество циклов генератора в 1мкс) значение 48 (что соответствует 48 МГц).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 05, 2017 21:22:38 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
И тут я прочел листинги в вашем предыдущем сообщении... :))) С работы писал, был слегка запарен. :oops:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс окт 08, 2017 00:09:30 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40
Сообщений: 46
Рейтинг сообщения: 0
Всем привет!
Продолжая ковыряться с гаджетом, толком ни к чему не пришел.

Однако, выяснил, что генерации на кварце точно нет, хотя он выбран основным источником сигнала и запущен битом MOSCEN по мануалу.

Пробовал менять кварц, результат тот же.

Может кто подскажет, где ковырять?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс окт 08, 2017 10:08:32 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Покажите, пожалуйста, топологию (в области кварца) по слоям, и, если можно, фото платы с двух сторон. :idea:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср окт 11, 2017 18:47:16 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40
Сообщений: 46
Рейтинг сообщения: 0
Всем добрый вечер!

Я прошу прощения за задержку с ответом...

Топологии особой нету :))) Запускаемся "на коленке", вернее на макетке 8)

Прикладываю фото гаджета (до кварца 3 мм и 9 мм соответственно), емкости 10пФ на лапах кварца и тут же PLL.

На второй пикче осциллограмма того, что на кварце. Не понимаю, откуда берется такая ступенька. Рядом мерил собранный так же на коленке ATmega32 с кварцем 16 МГц - синус идеальный.

Кварц работает только когда бутлоадер в дефолте (SAM-BA, тогда и снята осцилограмма). Как только заливаю любую прошивку - на кварце только помехи.

На данный момент кварц запускать пытаюсь так:

Код:
#include <Atmel\sam7s\AT91SAM7S512.h>

int main(void)
{
  // Настройка флэш - банк 1
  AT91C_BASE_MC->MC0_FMR = ((AT91C_MC_FMCN & (19 << 16)) | AT91C_MC_FWS_1FWS);
  // Настройка флэш - банк 2
  AT91C_BASE_MC->MC1_FMR = ((AT91C_MC_FMCN & (19 << 16)) | AT91C_MC_FWS_1FWS);
  // Отключение WatchDog
  AT91C_BASE_WDTC -> WDTC_WDMR |= AT91C_WDTC_WDDIS;
 
  // Счетчик запуска кварца, включение кварца
  AT91C_BASE_PMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
 
  // Выбираем источник тактирования - основной кварц
  AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_MAIN_CLK;
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  // Выбираем предделитель источника тактирования = 1
  AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_PRES_CLK;
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  // Конфигурируем порт, выводим меандр
  AT91PS_PMC    pPMC     = AT91C_BASE_PMC;
  AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;
 
  pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
  m_pPio->PIO_PER  = AT91C_PIO_PA3;
  m_pPio->PIO_OER   = AT91C_PIO_PA3;
  m_pPio->PIO_CODR   = AT91C_PIO_PA3;

  while (1) {
    m_pPio->PIO_CODR = AT91C_PIO_PA3; 
    m_pPio->PIO_SODR = AT91C_PIO_PA3;   
  };
}


Меня сильно смущает в симуляторе, что бит MOSCEN регистра CKGR (запуск кварца) уже при запуске симуляции установлен (1). То есть, когда я его устанавливаю командой
Код:
AT91C_BASE_PMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);

Он не меняет своего состояния. Пробовал обнулять в самом начале CKGR, потом уже устанавливать MOSCEN. Устанавливается, но результат так же никакой.

Вот какая-то такая у меня пляска вокруг резонатора :evil:


Вложения:
20000103_000321.png [24.28 KiB]
Скачиваний: 325
quartz.JPG [205.54 KiB]
Скачиваний: 175
Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 12, 2017 10:47:54 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Похоже, мои телепатические силы иссякли. ХЗ. Я никогда не работал с ARM от Atmel, так что не знаю в достаточной мере их особенностей, а потенциал моих догадок истощился. :dont_know:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 12, 2017 21:01:25 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40
Сообщений: 46
Рейтинг сообщения: 4
Всем привет!

Итак, взлетели!

Условия взлета чуток странные 8)

В даташите написано, что для работы с внешним генератором БЕЗ PLL необходимо:
- записать счетчик запуска OSCOUNT и бит MOSCEN;
- дождаться запуска;
- записать значение селектора источника сигнала CSS;
- дождаться стабилизации частоты;
- записать значение делителя тактовой частоты PRES;
- дождаться стабилизации.

Говоря кодом:

Код:
  // Счетчик запуска кварца, включение кварца
  AT91C_BASE_PMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
 
  // Выбираем источник тактирования - основной кварц
  AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_MAIN_CLK;
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  // Выбираем предделитель источника тактирования = 1
  AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_PRES_CLK;
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));


При этом везде сказано, что нельзя записывать одновременно значения полей в регистре MCKR, обязательно это делать в два прохода!

И... Внимание, рабочий код!

Код:
  // Счетчик запуска кварца, включение кварца
  AT91C_BASE_PMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
 
  // Выбираем предделитель источника тактирования и источник тактирования - основной кварц
  AT91C_BASE_PMC->PMC_MCKR = (AT91C_PMC_PRES_CLK | AT91C_PMC_CSS_MAIN_CLK);
  while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));


Говоря иначе, работает оно только тогда, когда данные записаны в MCKR одновременно! :idea:

Резонный вопрос! Что за *мяу* в доке и всех источниках?! :evil:

Ну вот как-то так... А теперь я пошел ковырять запуск с PLL на частотах over 18.432 :solder:

YS, еще раз величайшее за все мысли и оказанную помощь :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 12, 2017 21:10:39 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
YS, еще раз величайшее за все мысли и оказанную помощь


Не за что. :dont_know: :) Я просто перечислял все, что приходило в голову. :)

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Сб окт 14, 2017 18:21:26 
Открыл глаза

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40
Сообщений: 46
Рейтинг сообщения: 0
Товарищи, снова уперся...

Дошел уже стартового гайда http://ww1.microchip.com/downloads/en/A ... oc6293.pdf, документация и Редькин не помогают...

В данный момент код приведен к состоянию, как в вышеуказанном документе:

Код:
#include <Atmel\sam7s\AT91SAM7S512.h>

int main(void)
{
  AT91PS_PMC    pPMC     = AT91C_BASE_PMC;
  AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;
 
  AT91C_BASE_MC->MC0_FMR = AT91C_MC_FWS_0FWS;
 
  pPMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);
  while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
 
  pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x5) | (AT91C_CKGR_PLLCOUNT & (28<<8)) | (AT91C_CKGR_MUL & (25<<16)));
  while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  pPMC->PMC_MCKR = AT91C_PMC_CSS_PLL_CLK;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
 
  pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
  m_pPio->PIO_PER  = AT91C_PIO_PA3;
  m_pPio->PIO_OER   = AT91C_PIO_PA3;
  m_pPio->PIO_CODR   = AT91C_PIO_PA3;

  while (1) {
    m_pPio->PIO_CODR = AT91C_PIO_PA3; 
    m_pPio->PIO_SODR = AT91C_PIO_PA3;
  };
}


После прошивки пропадает генерация на кварце... Опять готов биться головой об стол и стены :(

Добавлено after 11 minutes 44 seconds:
Сейчас провел еще эксперимент...

Код:
Код:
#include <Atmel\sam7s\AT91SAM7S512.h>
//#include <stdint.h>

int main(void)
{
  AT91PS_PMC    pPMC     = AT91C_BASE_PMC;
  AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;
 
  pPMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0x06 << 8)) | AT91C_CKGR_MOSCEN);
  while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
 
  pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x5) | (AT91C_CKGR_PLLCOUNT & (28<<8)) | (AT91C_CKGR_MUL & (25<<16)));
  while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
 
  pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2 | AT91C_PMC_CSS_PLL_CLK;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));

  pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
  m_pPio->PIO_PER  = AT91C_PIO_PA3;
  m_pPio->PIO_OER   = AT91C_PIO_PA3;
  m_pPio->PIO_CODR   = AT91C_PIO_PA3;

  while (1) {
    m_pPio->PIO_CODR = AT91C_PIO_PA3; 
    m_pPio->PIO_SODR = AT91C_PIO_PA3;
  };
}


Работает номально, генерация есть, переключение на пине PA3 есть.

Добавляю строчку с отключением ватчдога, как в документации:
Код:
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;

генерация пропадает...

Добавляю строчку с настройкой флэша:
Код:
AT91C_BASE_MC->MC0_FMR = AT91C_MC_FWS_0FWS;

генерация пропадает...

Что это блин за документация такая, по которой ничерта не работает?! :evil: :evil:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y