Сергей Борщ 119 2 октября, 2013 Опубликовано 2 октября, 2013 · Жалоба может мне у себя тоже увеличить задержку флеш и виснуть перестанет?Я не люблю гадать. Вам лучше знать, на какой частоте у вас работает ядро. Откройте описание (flash programming manual на ваш контроллер) и посмотрите, сколько тактов ожидания производитель требует для флеши на этой частоте. Меньше - нельзя, больше - не нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 2 октября, 2013 Опубликовано 2 октября, 2013 · Жалоба раз повиснет на MAC1 = 0;, другой раз на чтении регистра PHY. Что Вы имеете ввиду под "повисло"? Теперь с помощью jtag можно определить куда именно попадаете. Если, например, в обработчик исключения Data Abort (DAbt_Handler), то надо анализировать регистр R14 (вычесть 8 и получить адрес инструкции, которая вызвала исключение). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 2 октября, 2013 Опубликовано 2 октября, 2013 · Жалоба Что Вы имеете ввиду под "повисло"? Теперь с помощью jtag можно определить куда именно попадаете. Если, например, в обработчик исключения Data Abort (DAbt_Handler), то надо анализировать регистр R14 (вычесть 8 и получить адрес инструкции, которая вызвала исключение). Попадает программа в Vectors LDR PC, Reset_Addr Там и остаётся А вы перед переключением на высокую частоту выставляете такты задержки флеша? Без этого из флеша может читаться и исполняться что угодно. Пока есть команды в буфере предвыборки - все работает. Как пошли считанные после разгона - все: чудеса, исключения и т.д. Посмотрю, но я эти настройки вообще не трогаю, как автоматом генерится так и работает, в других программах на той же макетке проблем нет, графика работает, USB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 2 октября, 2013 Опубликовано 2 октября, 2013 · Жалоба Попадает программа в Vectors LDR PC, Reset_Addr Там и остаётся это как?? стандартные заглушки для того же Abort - да, бесконечный цикл. Но программа-то по Reset уж явно не в цикле крутится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 октября, 2013 Опубликовано 2 октября, 2013 · Жалоба Попадает программа в Vectors LDR PC, Reset_Addr Там и остаётся Вы смотрите в окне исходника или в окне дизассемблера? Уж по этой-то команде он должен уйти на Reset_Addr. А если не уходит - возможно произошел Remap и по этим адресам находится какой-то мусор, который процессор выполнить не может, а отладчик в окне исходника тупо показывает соответствующую этому адресу строку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Скорей всего отладчик показывает ерунду, после выполнения присвоения MAC1 = 0; в окне Command начинает выводиться ошибка ***JLink Error: CPU is not halted А после останова отладчика иногда Keil вообще виснет, но чаще выходит на строку Vectors LDR PC, Reset_Addr Затем или ни куда больше не идёт или входит в Reset_Handler и остаётся в цикле, см. рисунок, R3 = 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба На рисунке настройки PLL в моей программе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Скорей всего отладчик показывает ерунду, после выполнения присвоения MAC1 = 0; в окне Command начинает выводиться ошибка А после останова отладчика иногда Keil вообще виснет, но чаще выходит на строку Vectors LDR PC, Reset_Addr Затем или ни куда больше не идёт или входит в Reset_Handler и остаётся в цикле, см. рисунок, R3 = 0. ну нифига себе reset_handler Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба ну нифига себе reset_handler Мжно подробнее, а то не пойму впечатление:) Я думаю отладчик при крахе уже не имеет доступа к ARM-у и делает что-то своё. Закрыл я доработку по рекомендации errata.lpc2478_1.1.pdf виснуть на MAC1 = 0;, программа всё равно не работает. Нужно ли это изменение или нет??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Мжно подробнее, а то не пойму впечатление :) ну потому что Reset_Handler и PLL_Loop - это разные вещи :) общее впечатление - проверить настройки PLL и Wait_States для Flash, это уже выше упоминали И еще. Лично натыкался на глючное поведение отладчика, пока не распаял все требуемые резисторы на JTAG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба А вы уверены что инструкция должна быть LDR PC, Reset_Addr а не LDR PC, =Reset_Addr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oleg_IT 0 3 октября, 2013 Опубликовано 3 октября, 2013 (изменено) · Жалоба ну потому что Reset_Handler и PLL_Loop - это разные вещи :) А вы уверены что инструкция должна быть LDR PC, Reset_Addr а не LDR PC, =Reset_Addr Ну не знаю, я этот код не пмшу, он автоматически при создании проекта генерится. Начало кода EXPORT Reset_Handler Reset_Handler ; Clock Setup ------------------------------------------------------------------ IF (:LNOT:(:DEF:NO_CLOCK_SETUP)):LAND:(CLOCK_SETUP != 0) LDR R0, =SCB_BASE MOV R1, #0xAA MOV R2, #0x55 ; Configure and Enable PLL LDR R3, =SCS_Val ; Enable main oscillator STR R3, [R0, #SCS_OFS] IF (SCS_Val:AND:OSCEN) != 0 OSC_Loop LDR R3, [R0, #SCS_OFS] ; Wait for main osc stabilize ANDS R3, R3, #OSCSTAT BEQ OSC_Loop ENDIF LDR R3, =CLKSRCSEL_Val ; Select PLL source clock STR R3, [R0, #CLKSRCSEL_OFS] LDR R3, =PLLCFG_Val STR R3, [R0, #PLLCFG_OFS] STR R1, [R0, #PLLFEED_OFS] STR R2, [R0, #PLLFEED_OFS] MOV R3, #PLLCON_PLLE STR R3, [R0, #PLLCON_OFS] STR R1, [R0, #PLLFEED_OFS] STR R2, [R0, #PLLFEED_OFS] IF (CLKSRCSEL_Val:AND:3) != 2 ; Wait until PLL Locked (if source is not RTC oscillator) PLL_Loop LDR R3, [R0, #PLLSTAT_OFS] ANDS R3, R3, #PLLSTAT_PLOCK BEQ PLL_Loop ELSE ; Wait at least 200 cycles (if source is RTC oscillator) MOV R3, #(200/4) PLL_Loop SUBS R3, R3, #1 BNE PLL_Loop ENDIF M_N_Lock LDR R3, [R0, #PLLSTAT_OFS] LDR R4, =(PLLSTAT_M:OR:PLLSTAT_N) AND R3, R3, R4 LDR R4, =PLLCFG_Val EORS R3, R3, R4 BNE M_N_Lock "PLL и Wait_States для Flash" проверю. Изменено 3 октября, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Ну не знаю, я этот код не пмшу, он автоматически при создании проекта генерится. А Reset_Addr где? И вообще нафига на асме инициализацию PLL делать? Это все на С прекрасно пишется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба Это все на С прекрасно пишется...Так это ж писать надо! А тут галочки расставил, и "оно самО". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 3 октября, 2013 Опубликовано 3 октября, 2013 · Жалоба А Reset_Addr где? В стартовом коде есть строка аля Reset_Addr DCD Reset_Handler В Кейле "оно самО" все нормально генерит. =) А вот то, что lpc2478 при неправильной инициализации mac улетает в астрал - проходил сам. И обходил (согласно еррате вроде). Но было это пару лет назад, сингулярность дает о себе знать - не помню подробностей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться