Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с аппаратным сбросом ST912FAW44
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Zandy
Контроллер ST912FAW44.
Если PLLом выставляю частоту 96МГц не работает сброс по входу RSTI. При нажатии на кнопку все подвисает.
Если уменьшить частоту делителями PLL, ну хотя бы до 60МГц, все прекрасно, сброс проходит.
Пробовал разные кварцы, естественно с корректировкой PLL, и на 12 и на 25МГц - один хрен.
В чем дело? Частота 96МГц - штатная, да и работает все на ней нормально,... кроме сброса. crying.gif

Самое главное, что на этом выводе цепочка сброса и по питанию (резистор на плюс, конденсатор на землю).
Т. е. холодный сброс при включении питания проходит, а вот на горячую не получается.
MALLOY2
Попробуйте залить в него программу из примеров, что бы убедиться в том что это не электрическая проблема, ну а потом показывайте, линкер файл, старттап, ну и другие файлы проекта
Zandy
Цитата(MALLOY2 @ Feb 5 2010, 22:21) *
Попробуйте залить в него программу из примеров, что бы убедиться в том что это не электрическая проблема, ну а потом показывайте, линкер файл, старттап, ну и другие файлы проекта


К сожалению железка на работе и до понедельника я ничего практически сделать не могу. Но... Такое поведение не только в моей проге, но и в любой другой, взятой из примеров. Стартап я использую тот, который в кейле, корректив не вносил.

Сижу сейчас, изучаю доки. Добрался до Errata Sheet. Ну и обнаружил там свою проблему. Вот:

/*
Description of limitation in Rev B and Rev D (limitation does not apply to Rev D
device with date code 618 and later)
When the CPU is fetching instruction from the Flash memory at 96 MHz FMI clock, the flash
memory must be configured to operate at 2 wait states.
When a system reset occurs, the CPU clock control registers remain unchanged and the
FMI clock keeps operating at 96 MHz. However, the Flash Configuration Register is reset by
the system reset from 2 wait states to 1 wait state and the Flash memory is too slow for the
CPU. The source of the system reset is either the external reset or the Watchdog reset.
*/

Казалось бы, да, все ясно, у меня старая ревизия чипа и все должно решиться его заменой. Но не все так просто. Дело в том, что там еще написано: <This is fixed in Rev D devices with date code 618 and later. It is also fixed in STR91xFA series devices.>
Но у меня-то как раз STR912FAW44!!!!!! И такой проблемы быть не должно!
В чем же дело тогда?
MALLOY2
Код инициализации показывайте, телепаты покинули этот форум давным давно....

При включении питания девайс всегда стартует ?, а потом если нажать ресет он виснет ?

Может вы PLL инициализируете раньше чем программируете циклы ожидания флеш ?

Как вы программируете циклы ожидания флеш ?

Вот мой пример инициализации циклов.

Цитата
; --- wait states Flash confguration
LDR R0, = 0x00000000 ;Write a Write Flash Configuration
LDR R1, = 0x60 ;Register command (60h) to any word
STRH R1, [R0] ;address in Bank 1.

ADD R0,R0,#0x3040 ;Write a Write Flash Configuration
LDR R1, = 0x3 ;Register Confirm command (03h)
STRH R1, [R0] ;2Wstaites in read,PWD,LVD enabled,
;High BUSCFG.
REPT 6
NOP
ENDR


P.S. уменя банки местами поменяны.
Zandy
Код инициализации, как я уже сказал взят из фирмваре. Написан на Си

FMI_Config(FMI_READ_WAIT_STATE_2, FMI_WRITE_WAIT_STATE_0, FMI_PWD_ENABLE,\
FMI_LVD_ENABLE, FMI_FREQ_HIGH);/*Insert 2 Wait States for read*/

SCU_PLLFactorsConfig(192, 12, 2); /* PLL factors Configuration based on*/
/* a OSC/Crystal value = 12Mhz*/
SCU_PLLCmd(ENABLE); /* PLL Enable and wait for Locking*/
SCU_RCLKDivisorConfig(SCU_RCLK_Div1); /* RCLK @96Mhz */
SCU_HCLKDivisorConfig(SCU_HCLK_Div1); /* AHB @96Mhz */
SCU_FMICLKDivisorConfig(SCU_FMICLK_Div1); /* FMI @96Mhz */
SCU_PCLKDivisorConfig(SCU_PCLK_Div2); /* APB @48Mhz */
SCU_MCLKSourceConfig(SCU_MCLK_PLL); /* MCLK @96Mhz */
SCU_BRCLKDivisorConfig(SCU_BRCLK_Div2);

//вот первая функция:

void FMI_Config(u16 FMI_ReadWaitState, u32 FMI_WriteWaitState, u16 FMI_PWD,\
u16 FMI_LVDEN, u16 FMI_FreqRange)
{
/* Configure the write wait state value */
if (FMI_WriteWaitState == FMI_WRITE_WAIT_STATE_1)
{
FMI->CR |= FMI_WRITE_WAIT_STATE_1;
}
else
{
FMI->CR &= FMI_WRITE_WAIT_STATE_0;
}

/* Write a write flash configuration register command */
*(vu16 *)FMI_BANK_1 = 0x60;

/* Configure the flash configuration register */
*(vu16 *)(FMI_BANK_1|FMI_ReadWaitState|FMI_PWD|FMI_LVDEN|FMI_FreqRange) = 0x03;
}
// ну и т. д.


При включении питания девайс всегда стартует ?, а потом если нажать ресет он виснет ?
Да, именно так. Причем только на частоте 96 Мгц. На 48 все нормально ресетится.

Может вы PLL инициализируете раньше чем программируете циклы ожидания флеш ?
Нет не раньше. Из кода, который я привел выше, это видно. Два цикла ожидания
Zandy
Спасибо, Malloy!
Все-таки дело было в startup инициализационном коде.
Там тоже были прописаны настройки, и вот они-то и были неверными.
Топик можно удалять или сносить в раздел "начинающим" unsure.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.