Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-дек-08 18:55

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 4 сообщения ] 
Автор Сообщение
 Заголовок сообщения: Проблемы запуска CAN
СообщениеДобавлено: 2016-июн-22 16:13 
Не в сети

Зарегистрирован: 2015-апр-21 15:20
Сообщения: 23
Пытаюсь запустить шину CAN. При загрузке файла конфигурации тактового генератора с подачей тактирования на на шину - процессор безнадёжно виснет, как только убираю выделенные строчки - программа работает нормально. Мучаюсь неделю, ничего не пойму. Где может быть ошибка? МК 1986ВЕ1Т, среда Кейл, отладчик - J-Link

//--- Clock configuration ---
void ClkConfig()
{
RST_CLK->HS_CONTROL=0x00000001; //HSE - On; Osc mode On
while((RST_CLK->CLOCK_STATUS&0x04)!=0x04); //Wait until HSE not ready
RST_CLK->CPU_CLOCK=0x00000102; //CPU Clock = 8 MHz

RST_CLK->PLL_CONTROL=(PLL_MULL<<8)|(1<<2); //PLL CPU On;
while((RST_CLK->CLOCK_STATUS&0x02)!=0x02); //wait until PLL CPU not ready

RST_CLK->PER_CLOCK|=0x08; //EEPROM_CTRL Clock enable
EEPROM->CMD=2<<3;
RST_CLK->PER_CLOCK&=(~0x08); //EEPROM_CTRL Clock disable


RST_CLK->CPU_CLOCK=0x00000107;
RST_CLK->PER_CLOCK|=1<<29; // clock of PORTF
RST_CLK->PER_CLOCK|=0x07<<23; // clock of PORTC, PORTD, PORTE On
RST_CLK->PER_CLOCK|=0x03<<21; // clock of PORTA, PORTB On
RST_CLK->PER_CLOCK|=0x03<<14; // clock of TIM1, TIM2 On
RST_CLK->TIM_CLOCK=0x03000070; // Timer_1, Timer_2 clock enable
RST_CLK->PER_CLOCK|=1<<17; //ADC clock On
RST_CLK->ADC_MCO_CLOCK = 0x00002820;

//---Clock configuration for CAN
// RST_CLK->CAN_CLOCK = (3<<8)|(0x03); // CAN1_CLC = CAN2_CLC = HCLK/8
// RST_CLK->CAN_CLOCK = (3<<24); // CAN1 CAN2_CLC enable
// RST_CLK->PER_CLOCK |= 3;
//enable CLK to CAN1,2

}


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения: Re: Проблемы запуска CAN
СообщениеДобавлено: 2016-июн-22 16:54 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 513
Попробуйте строку:
// RST_CLK->PER_CLOCK |= 3; //enable CLK to CAN1,2
Поставить перед строками:
// RST_CLK->CAN_CLOCK = (3<<8)|(0x03); // CAN1_CLC = CAN2_CLC = HCLK/8
// RST_CLK->CAN_CLOCK = (3<<24); // CAN1 CAN2_CLC enable
Не факт, но вдруг...


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения: Re: Проблемы запуска CAN
СообщениеДобавлено: 2016-июн-30 12:00 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
NikP писал(а):
Пытаюсь запустить шину CAN. При загрузке файла конфигурации тактового генератора с подачей тактирования на на шину - процессор безнадёжно виснет, как только убираю выделенные строчки - программа работает нормально. Мучаюсь неделю, ничего не пойму. Где может быть ошибка? МК 1986ВЕ1Т, среда Кейл, отладчик - J-Link
Какое значение у PLL_MULL?
RST_CLK->CAN_CLOCK = (3<<8)|(0x03); // CAN1_CLC = CAN2_CLC = HCLK/8 
RST_CLK->CAN_CLOCK = (3<<24); // CAN1 CAN2_CLC enable
при такой записи вторая строка "затирает" результаты выполнения первой строки. Тут лучше либо все сделать в одной строке (RST_CLK->CAN_CLOCK = ((3<<8)|(0x03)|(3<<24)); ), либо делать через операцию "ИЛИ" ( |= ).
А также было бы неплохо до перевода контроллера на частоту от PLL в батарейном домене (BKP->REG_0E) установить поля SelectRI и LOW в соответствии с новой тактовой частотой.


Вынести предупреждение
Вернуться к началу
 Заголовок сообщения: Re: Проблемы запуска CAN
СообщениеДобавлено: 2016-июн-30 12:08 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
NikP писал(а):

//--- Clock configuration ---
void ClkConfig()
{
RST_CLK->HS_CONTROL=0x00000001; //HSE - On; Osc mode On
while((RST_CLK->CLOCK_STATUS&0x04)!=0x04); //Wait until HSE not ready
RST_CLK->CPU_CLOCK=0x00000102; //CPU Clock = 8 MHz

RST_CLK->PLL_CONTROL=(PLL_MULL<<8)|(1<<2); //PLL CPU On;
while((RST_CLK->CLOCK_STATUS&0x02)!=0x02); //wait until PLL CPU not ready
.
.
.
RST_CLK->CPU_CLOCK=0x00000107;
}
так делать тоже не очень здорово. То есть запускать PLL от одной входной частоты тактового сигнала, а потом менять входную тактовую частоту PLL. PLL, конечно, отработает и через какое-то время выйдет на режим, но в это время (время перестройки PLL) частота PLL будет "плавать", что может привести, например, к сбойным ситуациям приема/передачи данных по разным интерфейсам.


Вынести предупреждение
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 4 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

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


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

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB