К1921ВК01Т (арм Cortex-M4F)
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Re: К1921ВК01Т (арм Cortex-M4F)
Да, кварцы меняли. Это происходит на 3м микроконтроллере именно партии 1822, на аналогичных платах 2037 все хорошо
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Для начала покопайте в сторону проверки, что не запускается PLL. Попробуйте переписать софт так, чтобы он мигал светодиодиками от внутреннего RC генератора, не выполняя переход на тактирование от кварца. Проверьте, работает он так или нет.
Также потом проверьте корректность инициализации PLL, что частота Fvco не выше 200МГц (например, можно посмотреть тут).
В зависимости от результата (проц работает от RC генератора или нет) можно думать дальше.
Также потом проверьте корректность инициализации PLL, что частота Fvco не выше 200МГц (например, можно посмотреть тут).
В зависимости от результата (проц работает от RC генератора или нет) можно думать дальше.
Re: К1921ВК01Т (арм Cortex-M4F)
Спасибо, частота 100 Мгц (взят с примера Motorcontrol, кварц 12 МГц)
NT_BOOTFLASH->T_ACC = 6; //Задержка от установки адреса, до считывания данных из флеш-памяти (в транзакциях чтения)
//Настройка частоты тактирования
//выходная частота равна FOUT = (FIN * NF) / ( NR * NO), где FIN - частота кварца
NT_COMMON_REG->PLL_OD = 2; //Выходной делитель PLL NO=2
NT_COMMON_REG->PLL_NR = 1; //Опорный делитель PLL NR=R_PLL+2=3
NT_COMMON_REG->PLL_NF = 48; //Делитель обратной связи PLL NF=F_PLL+2=50
//FOUT = 12*50/(3*2) = 100 МГц, вроде сходится
do
{
//Выбор источника синхросигнала
NT_COMMON_REG->SYS_CLK = SYSCLK_REFCLK; //Выбор источника зависит от состояния сигнала на входе микроконтроллера CPE_pad: 0 - Блок POR, 1 - Вход микроконтроллера XI_OSC
NT_COMMON_REG->SYS_CLK = SYSCLK_PLLCLK; //Блок PLL
for(i = 0; i < 50; i++);
}
while (NT_COMMON_REG->SYS_CLK_bit.CURR_SRC != SYSCLK_PLLCLK); //Текущий источник тактирования должен совпадать с выбранным
// Разрешение работы периферии
NT_COMMON_REG->APB_CLK = 0x7FFFF | 0x1000000 | 0x80000;
for (int i = 0; i < 100; i++){//чтобы типа прошло время... пускай там порезетится
NT_COMMON_REG->PER_RST0=0;
NT_COMMON_REG->PER_RST1=0;
}
Есть пример с внутренним генератором?
NT_BOOTFLASH->T_ACC = 6; //Задержка от установки адреса, до считывания данных из флеш-памяти (в транзакциях чтения)
//Настройка частоты тактирования
//выходная частота равна FOUT = (FIN * NF) / ( NR * NO), где FIN - частота кварца
NT_COMMON_REG->PLL_OD = 2; //Выходной делитель PLL NO=2
NT_COMMON_REG->PLL_NR = 1; //Опорный делитель PLL NR=R_PLL+2=3
NT_COMMON_REG->PLL_NF = 48; //Делитель обратной связи PLL NF=F_PLL+2=50
//FOUT = 12*50/(3*2) = 100 МГц, вроде сходится
do
{
//Выбор источника синхросигнала
NT_COMMON_REG->SYS_CLK = SYSCLK_REFCLK; //Выбор источника зависит от состояния сигнала на входе микроконтроллера CPE_pad: 0 - Блок POR, 1 - Вход микроконтроллера XI_OSC
NT_COMMON_REG->SYS_CLK = SYSCLK_PLLCLK; //Блок PLL
for(i = 0; i < 50; i++);
}
while (NT_COMMON_REG->SYS_CLK_bit.CURR_SRC != SYSCLK_PLLCLK); //Текущий источник тактирования должен совпадать с выбранным
// Разрешение работы периферии
NT_COMMON_REG->APB_CLK = 0x7FFFF | 0x1000000 | 0x80000;
for (int i = 0; i < 100; i++){//чтобы типа прошло время... пускай там порезетится
NT_COMMON_REG->PER_RST0=0;
NT_COMMON_REG->PER_RST1=0;
}
Есть пример с внутренним генератором?
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
В Motorcontrol как раз и было неправильно у нас сделано, там итоговая частота тактирования 100МГц, но промежуточная частота Fvco была больше, чем надо. Сейчас исправили, поэтому я дал ссылку на исправленную версию.
Чтобы от RC генератора работать, там вроде надо ножку проца перепаять. Но можно просто попробовать работать без PLL для начала. Просто не вызывайте функцию инициализации PLL, и вообще всю программу редуцируйте до мигания светодиодами циклом while прямо в main, чтобы ничего вообще не инициализировалось, кроме GPIO.
Чтобы от RC генератора работать, там вроде надо ножку проца перепаять. Но можно просто попробовать работать без PLL для начала. Просто не вызывайте функцию инициализации PLL, и вообще всю программу редуцируйте до мигания светодиодами циклом while прямо в main, чтобы ничего вообще не инициализировалось, кроме GPIO.
Re: К1921ВК01Т (арм Cortex-M4F)
Спасибо!
правильно ли я понимаю, что например в последней версии InitCLK() надо закоментировать ф-ю
Init_Clk_Pll_Div_Fvco200(); ну и убрать тактирование АЦП и UART.
Все с узлами экспериментируем. Заметили закономерность - в минус 50 после выключения нужно едва коснуться пальцем (проволочкой) до крышки МК. Тогда даже спустя время он включится (в выключенном состоянии коснуться, потом подать питание - все ОК). После выключения ситуация та же, без пинка не включается. Надо сначала коснуться, потом включится. Пробовали соединить крышку с GND - безрезультатно. Аналоговая и цифровые земли объединены.
правильно ли я понимаю, что например в последней версии InitCLK() надо закоментировать ф-ю
Init_Clk_Pll_Div_Fvco200(); ну и убрать тактирование АЦП и UART.
Все с узлами экспериментируем. Заметили закономерность - в минус 50 после выключения нужно едва коснуться пальцем (проволочкой) до крышки МК. Тогда даже спустя время он включится (в выключенном состоянии коснуться, потом подать питание - все ОК). После выключения ситуация та же, без пинка не включается. Надо сначала коснуться, потом включится. Пробовали соединить крышку с GND - безрезультатно. Аналоговая и цифровые земли объединены.
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Ну, например, так. Или вообще не вызывать InitCLK() и руками включить тактирование GPIO.надо закоментировать ф-ю
Init_Clk_Pll_Div_Fvco200(); ну и убрать тактирование АЦП и UART.
Re: К1921ВК01Т (арм Cortex-M4F)
Попробовал, оставил лишь строчки
NT_COMMON_REG->GPIODEN0=0xFFFFFFFF;
NT_COMMON_REG->GPIODEN1=0xFFFFFFFF;
NT_COMMON_REG->GPIODEN2=0xFFFFFFFF;
NT_COMMON_REG->GPIODEN3=0xFFFFFFFF;
ну и мигание портом с delay в виде счетчика переменной
Не помогло, у контроллеров "плохой серии" нет запуска. (пока от внешнего кварца)
NT_COMMON_REG->GPIODEN0=0xFFFFFFFF;
NT_COMMON_REG->GPIODEN1=0xFFFFFFFF;
NT_COMMON_REG->GPIODEN2=0xFFFFFFFF;
NT_COMMON_REG->GPIODEN3=0xFFFFFFFF;
ну и мигание портом с delay в виде счетчика переменной
Не помогло, у контроллеров "плохой серии" нет запуска. (пока от внешнего кварца)
- Лашкевич
- Сообщения: 373
- Зарегистрирован: 13 май 2015, 13:10
- Предприятие: ООО "НПФ Вектор"
- Откуда: Москва
- Контактная информация:
Re: К1921ВК01Т (арм Cortex-M4F)
Сверьте номиналы конденсаторов на кварцах - у нас на платах 10пф. Попробуйте другие кварцы, другого производителя. Может быть, у текущих какие-то не такие параметры. Попробуйте тактирование от RC цепочки (читайте ТО, как включить). Проверьте порядок подачи и уровень питания и ножку резет. Снимите осциллограмму обоих питаний и резета, может там что-то видно будет.
Re: К1921ВК01Т (арм Cortex-M4F)
Да, хорошо, сейчас проверим. Кварцы пробовали всякие, конденсаторы к ним тоже. Они обычно МПО и емкость не должна меняться в температуре. С Reset сейчас сделаем через тумблер, чтобы точно быть уверенным, что он подастся через время после подачи питаний (там ведь без разницы, что они подаются не в нужной последовательности, до поднятия уровня RESET?). От внутреннего RC еще надо попробовать.
Контроллер правильной серии на аналогичных платах до минус 60 ведет себя великолепно....
Контроллер правильной серии на аналогичных платах до минус 60 ведет себя великолепно....
Re: К1921ВК01Т (арм Cortex-M4F)
Еще вопрос, должна ли быть какая-нибудь задержка (программная) при включении? Можно ли сделать что-то дополнительно?
Код из примера
//Переходим на тактирование от внутреннего кварца
do
{
NT_COMMON_REG->SYS_CLK = 0;
for(i = 0; i < 50; i++);
}
while (NT_COMMON_REG->SYS_CLK_bit.CURR_SRC != SYSCLK_REFCLK);
Когда я убрал вообще инициализацию ClkInit(), а оставил только GPIO, по ощущениям стало работать хуже (реже включаться на пониженных температурах минус 20, минус 30) Все это от внешнего кварца
Код из примера
//Переходим на тактирование от внутреннего кварца
do
{
NT_COMMON_REG->SYS_CLK = 0;
for(i = 0; i < 50; i++);
}
while (NT_COMMON_REG->SYS_CLK_bit.CURR_SRC != SYSCLK_REFCLK);
Когда я убрал вообще инициализацию ClkInit(), а оставил только GPIO, по ощущениям стало работать хуже (реже включаться на пониженных температурах минус 20, минус 30) Все это от внешнего кварца