Например TDA7294

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



Текущее время: Пн ноя 20, 2017 16:54:56



Часовой пояс: UTC + 3 часа [ Летнее время ]




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

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 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 22:22:38 
Друг Кота
Аватар пользователя

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

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


Вернуться наверх
 Профиль WWW  
 
JLCPCB Prototype, $2 за 10 печатных плат (2 слоя, 100×100мм).

Крупнейший производитель печатных плат в Китае, 290,000+ заказчиков, 8,000+ он-лайн заказов в день.

Узнать цену прямо сейчас!

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

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

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

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

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

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


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс окт 08, 2017 11:08:32 
Друг Кота
Аватар пользователя

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

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


Вернуться наверх
 Профиль WWW  
 

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

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 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]
Скачиваний: 10
quartz.JPG [205.54 KiB]
Скачиваний: 10
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 12, 2017 11:47:54 
Друг Кота
Аватар пользователя

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

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


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

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 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 22:10:39 
Друг Кота
Аватар пользователя

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


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

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


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

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 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 ]  На страницу Пред.  1, 2



Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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


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