Форум РадиоКот • Просмотр темы - Вспомним старое доброе (ARM7)
Сообщения без ответов | Активные темы
Страница 2 из 2
[ Сообщений: 29 ]
,
Автор
Сообщение
L_VL
Заголовок сообщения: 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 МГц).
Вернуться наверх
Реклама
YS
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Чт окт 05, 2017 21:22:38
Друг Кота
Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05Сообщений: 7517
Рейтинг сообщения: 0
И тут я прочел листинги в вашем предыдущем сообщении...
С работы писал, был слегка запарен.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Вернуться наверх
Реклама
L_VL
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Вс окт 08, 2017 00:09:30
Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40Сообщений: 46
Рейтинг сообщения: 0
Всем привет! Продолжая ковыряться с гаджетом, толком ни к чему не пришел. Однако, выяснил, что генерации на кварце точно нет, хотя он выбран основным источником сигнала и запущен битом MOSCEN по мануалу. Пробовал менять кварц, результат тот же. Может кто подскажет, где ковырять?
Вернуться наверх
Реклама
YS
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Вс окт 08, 2017 10:08:32
Друг Кота
Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05Сообщений: 7517
Рейтинг сообщения: 0
Покажите, пожалуйста, топологию (в области кварца) по слоям, и, если можно, фото платы с двух сторон.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Вернуться наверх
Реклама
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Подробнее>>
L_VL
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Ср окт 11, 2017 18:47:16
Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40Сообщений: 46
Рейтинг сообщения: 0
Всем добрый вечер!
Я прошу прощения за задержку с ответом...
Топологии особой нету
Запускаемся "на коленке", вернее на макетке
Прикладываю фото гаджета (до кварца 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. Устанавливается, но результат так же никакой.
Вот какая-то такая у меня пляска вокруг резонатора
Вернуться наверх
Реклама
Реклама
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Подробнее>>
YS
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Чт окт 12, 2017 10:47:54
Друг Кота
Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05Сообщений: 7517
Рейтинг сообщения: 0
Похоже, мои телепатические силы иссякли. ХЗ. Я никогда не работал с ARM от Atmel, так что не знаю в достаточной мере их особенностей, а потенциал моих догадок истощился.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Вернуться наверх
Реклама
L_VL
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Чт окт 12, 2017 21:01:25
Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Вт сен 19, 2017 18:15:40Сообщений: 46
Рейтинг сообщения: 4
Всем привет!
Итак, взлетели!
Условия взлета чуток странные
В даташите написано, что для работы с внешним генератором БЕЗ 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 одновременно!
Резонный вопрос! Что за
*мяу* в доке и всех источниках?!
Ну вот как-то так... А теперь я пошел ковырять запуск с PLL на частотах over 18.432
YS , еще раз величайшее за все мысли и оказанную помощь
Вернуться наверх
Реклама
YS
Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
Добавлено: Чт окт 12, 2017 21:10:39
Друг Кота
Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
YS, еще раз величайшее за все мысли и оказанную помощь
Не за что.
Я просто перечислял все, что приходило в голову.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Вернуться наверх
Реклама
L_VL
Заголовок сообщения: 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;
генерация пропадает...
Что это блин за документация такая, по которой ничерта не работает?!
Вернуться наверх
Реклама
Страница 2 из 2
[ Сообщений: 29 ]
,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения