|
|
  |
TI AM1808, разные вопросы |
|
|
|
Jun 25 2014, 08:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Не работает кусок кода для настройки регистра , в чём может быть проблема: Код unsigned int *pPinMux = (unsigned int *) PINMUX_REG_ADDR;
void SetPinMux(void) { unsigned int savePinmux = 0;
savePinmux = *pPinMux; savePinmux |= 1; *pPinMux = savePinmux; } Если указатель на обычный кусок памяти - всё гуд.
|
|
|
|
|
Jun 25 2014, 08:39
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Как вариант, этому блоку, в котором находится регистр, не включен клок, или он не выведен из состояния резета (по аналогии с другими АРМ-ами TI)
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 09:30
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(doom13 @ Jun 25 2014, 11:21)  в чём может быть проблема Думаю, что проблема в уровне подготовки программиста. Оптимизатор мог выкинуть этот код как не делающий никакой полезной работы. Для объяснения, что подобные действия программиста имеют смысл, создатели языка придумали квалификатор volatile.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 25 2014, 09:40
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 13:04)  Я могу записать данные по этому адресу через Memory Browser и прочитать. Могу сделать вывод, что клок есть и из ресета выведен!? Именно в тот момент, когда "этот код не работает" ? То есть, поставив туда точку останова, и после ее срабатывания? Еще попробуйте убрать в скобки "PINMUX_REG_ADDR" - может быть он объявлен как арифметика без скобок в дефайне, и тогда результат от (unsigned int*) может быть непредсказуем. 2 Сергей Борщ - Ну раз "Если указатель на обычный кусок памяти - всё гуд" - то, вроде, volatile тут не причем. Да и не должен оптимизатор такое выкидывать, когда работа через указатель, объявленный глобально.
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 09:42
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 09:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Сергей Борщ @ Jun 25 2014, 12:30)  Думаю, что проблема в уровне подготовки программиста. Оптимизатор мог выкинуть этот код как не делающий никакой полезной работы. Для объяснения, что подобные действия программиста имеют смысл, создатели языка придумали квалификатор volatile. Это пример того, что должен делать код. Сам код из либы TI и написан через макросы. Оптимизатор выключен и он тут не при чём, читайте внимательнее Цитата(doom13 @ Jun 25 2014, 11:21)  Если указатель на обычный кусок памяти - всё гуд.
|
|
|
|
|
Jun 25 2014, 10:13
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(doom13 @ Jun 25 2014, 12:50)  Это пример того, что должен делать код. А, так вопрос был адресован телепатам? Цитата(doom13 @ Jun 25 2014, 12:50)  Сам код из либы TI и написан через макросы. В либах тоже могут быть ошибки. И часть из них даже может не проявляться на тех версиях компилятора, которые используют разработчики либы. Цитата(doom13 @ Jun 25 2014, 12:50)  Оптимизатор выключен и он тут не при чём, А, ну тогда успехов в отладке. И еще раз успехов в повторной отладке, которая понадобится после включения оптимизатора.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 25 2014, 10:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 12:40)  Еще попробуйте убрать в скобки "PINMUX_REG_ADDR" - может быть он объявлен как арифметика без скобок в дефайне, и тогда результат от (unsigned int*) может быть непредсказуем. Нет, проблема не в скобках, что-то другое. Цитата(SAURIS GmbH @ Jun 25 2014, 12:40)  Именно в тот момент, когда "этот код не работает" ? То есть, поставив туда точку останова, и после ее срабатывания? Поставить точку останова перед записью, пройти запись, не увидеть результат в Memory Browser. Поставить точку останова перед чтением, через Memory Browser записать значение в память, пройти чтение и в переменной вижу верное значение. Т.е. с чтением всё ок, писать не хочет. Цитата(Сергей Борщ @ Jun 25 2014, 13:13)  А, так вопрос был адресован телепатам? Просто программисты с достаточным (ну или крайне высоким) уровнем сначала вникают в суть задачи, а потом пишут достойный код, а не всякую чушь не прочитав задачу до конца. Остальным, смотрю, вопрос оказался понятен, на основании чего и могу судить об их уровне. Цитата(Сергей Борщ @ Jun 25 2014, 13:13)  В либах тоже могут быть ошибки. И часть из них даже может не проявляться на тех версиях компилятора, которые используют разработчики либы. Это известно, поэтому и попробовал переписать их макросы и проверить, что же там не так, ошибка, вижу, не в либе, а где-то глубже. Цитата(Сергей Борщ @ Jun 25 2014, 13:13)  А, ну тогда успехов в отладке. И еще раз успехов в повторной отладке, которая понадобится после включения оптимизатора. Ответ достойный специалиста высочайшего уровня.
|
|
|
|
|
Jun 25 2014, 10:56
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 14:46)  Поставить точку останова перед чтением, через Memory Browser записать значение в память, пройти чтение и в переменной вижу верное значение. Т.е. с чтением всё ок, писать не хочет. Возможно, что-то с механизмами защиты памяти. Уровни доступа через эмулятор и у пользовательского кода - это, как говорится, две большие разницы.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 11:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 12:40)  Там есть такая штука, как PSC Module, может ли в ней быть проблема? В даташите написано, что касательно GPIO - Always ON, может ли что-либо быть в PSC отключено для GPIO? Цитата(SAURIS GmbH @ Jun 25 2014, 13:56)  Возможно, что-то с механизмами защиты памяти. Уровни доступа через эмулятор и у пользовательского кода - это, как говорится, две большие разницы. Да, вот для c2000 и с6000 от TI были такие штуки как EALLOW и EDIS, которые и разрешают запись защищённых регистров. Но ведь здесь такого нет?!
|
|
|
|
|
Jun 25 2014, 11:04
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 14:59)  В даташите написано, что касательно GPIO - Always ON, может ли что-либо быть в PSC отключено для GPIO? Ну Вы сами же это опровергли, когда я предполагал, что что-то не выведено из резета или обесклочено. Тогда бы и через эмулятор не писалось (хотя, возможно, вопрос еще в GEL, что при запуске под эмуляцией он что-то там сам проинициализировал, а без эмуляции - нет) Цитата(doom13 @ Jun 25 2014, 15:02)  Но ведь здесь такого нет?! Зато тут есть куда круче. Memory Protection Unit (MPU), режимы исполнения Supervisor и User, и в самом ARM еще есть MMU.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 11:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 14:04)  Ну Вы сами же это опровергли, когда я предполагал, что что-то не выведено из резета или обесклочено. Тогда бы и через эмулятор не писалось (хотя, возможно, вопрос еще в GEL, что при запуске под эмуляцией он что-то там сам проинициализировал, а без эмуляции - нет) Я то может и опроверг, но процессор для меня новый и могу ошибаться. В примере из StarterWare на AM1808 для GPIO в самом начале идёт Код /* The Local PSC number for GPIO is 3. GPIO belongs to PSC1 module.*/ PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); , это и смущает, может ли PSC как-то влиять? Если в даташите написано Always ON зачем тогда эта функция? Цитата(SAURIS GmbH @ Jun 25 2014, 14:04)  Зато тут есть куда круче. Memory Protection Unit (MPU), режимы исполнения Supervisor и User, и в самом ARM еще есть MMU. Об этом я пока ничего не знаю, надо читать.
|
|
|
|
|
Jun 25 2014, 11:32
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 15:22)  Я то может и опроверг, но процессор для меня новый и могу ошибаться. В примере из StarterWare на AM1808 для GPIO в самом начале идёт ну вообще документация говорит вот что: 20.2.9 Initialization The following steps are required to configure the GPIO module after a hardware reset: 1. Perform the necessary device pin multiplexing setup (see your device-specific data manual). 2. Program the Power and Sleep Controller (PSC) to enable the GPIO module. For details on the PSC, see the Power and Sleep Controller (PSC) chapter.
А где сказано, что он "Always ON" ? Я вижу в разделе про PSC, что у него состояние по умолчанию "SwRstDisable" а не "Enable" Но, еще раз, раз эмулятор пишет в этот регистр, то это говорит, что он все же включен. Ну, либо, это какие-то глюки каких-то кешей, что эмулятор якобы пишет, но только якобы. Как перевести его в Enable читайте в "8.3.2 Module State Transitions" - там надо задать Enable в его MDCTLn и потом дать "GO" в PTCMD
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 11:40
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 11:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 14:32)  ну вообще документация говорит вот что:
20.2.9 Initialization The following steps are required to configure the GPIO module after a hardware reset: 1. Perform the necessary device pin multiplexing setup (see your device-specific data manual). 2. Program the Power and Sleep Controller (PSC) to enable the GPIO module. For details on the PSC, see the Power and Sleep Controller (PSC) chapter.
А где сказано, что он "Always ON" ? Я вижу в разделе про PSC, что у него состояние по умолчанию "SwRstDisable" а не "Enable" Но, еще раз, раз эмулятор пишет в этот регистр, то это говорит, что он все же включен. Ну, либо, это какие-то глюки каких-то кешей, что эмулятор якобы пишет, но только якобы. Я вот на это смотрел (рисунок), счас попробую найти то, о чём Вы пишете. Регистр, который записать не могу, и отвечает за pin multiplexing.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 25 2014, 11:42
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 15:37)  Я вот на это смотрел (рисунок), Вот именно на этом рисунке и написано, что его состояние по умолчанию - SwRstDisable, что значит, что он без клока и в резете. Ну да, питание ему выключить нельзя... Но что это меняет, если ему обрублено все остальное  Эмулятором считайте регистр MDSTAT19 MDSTAT3 в PSC1 - будет видно, в каком состоянии GPIO UPD: По идее, его мог включить (если он включен) начальный загрузчик, который в ROM, если ему надо что-то делать через GPIO. UPD2: Его включает GEL файл, вызовом "PSC1_LPSC_enable(0, LPSC_GPIO);" - так что при запуске из-под эмулятора, если GEL подцеплен, то GPIO включен (и вообще, он там все что ни попадя включает).
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 12:07
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 12:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 14:42)  Вот именно на этом рисунке и написано, что его состояние по умолчанию - SwRstDisable, что значит, что он без клока и в резете. Ну да, питание ему выключить нельзя... Но что это меняет, если ему обрублено все остальное  Эмулятором считайте регистр MDSTAT19 MDSTAT3 в PSC1 - будет видно, в каком состоянии GPIO UPD: По идее, его мог включить (если он включен) начальный загрузчик, который в ROM, если ему надо что-то делать через GPIO. UPD2: Его включает GEL файл, вызовом "PSC1_LPSC_enable(0, LPSC_GPIO);" - так что при запуске из-под эмулятора, если GEL подцеплен, то GPIO включен (и вообще, он там все что ни попадя включает). Вызываю скрипт из GEL, что должно всё включить, но эффекта не наблюдаю. Код hotmenu Setup_Psc_All_On( ) { .......
PSC1_lPSC_enable(0, 3); // GPIO
...... } Значения регистров прилагаю, они?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 25 2014, 12:39
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 16:26)  Значения регистров прилагаю, они? Не, не совсем они. Нужного MDSTAT тут нет. Его адрес 01E2780Ch ( MDSTAT0 - 01E27800h ) ( MDSTAT1 - 01E27804h ) ( MDSTAT2 - 01E27808h ) ( MDSTAT3 - 01E2780Ch ) ( MDSTAT4 - 01E27810h ) ....
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 12:44
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 12:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 15:39)  Не, не совсем они. Нужного MDSTAT тут нет. Его адрес 01E27810h Счас посмотрим этот. Сделал ещё такую проверку. Запускаю на выполнение скрипт из GEL с кодом Код #define SYS_BASE 0x01C14000 #define KICK0R *(unsigned int*)(SYS_BASE + 0x038) #define KICK1R *(unsigned int*)(SYS_BASE + 0x03c) #define PINMUX17 *(unsigned int*)(SYS_BASE + 0x164) //PINMUX17
hotmenu Setup_System_Config( ) { GEL_TextOut( "Setup PINMUX Registers... " ); KICK0R = 0x83e70b13; // Kick0 register + data (unlock) KICK1R = 0x95a4f1e0; // Kick1 register + data (unlock)
PINMUX17 = 0x22222222; // LCDIO GEL_TextOut( "[My test is done!!!]\n" ); } , как понимаю, в Memory Browser по адресу должен увидеть 0x22222222, но там нет изменений при выполнении скрипта? В консоли только вижу "ARM9_0: GEL Output: Setup PINMUX Registers...ARM9_0: GEL Output: [My test is done!!!]"
|
|
|
|
|
Jun 25 2014, 12:48
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 16:45)  , как понимаю, в Memory Browser по адресу должен увидеть 0x22222222, но там нет изменений при выполнении скрипта? В консоли только вижу "ARM9_0: GEL Output: Setup PINMUX Registers...ARM9_0: GEL Output: [My test is done!!!]" Во первых, я там ошибся с адресом, исправил, сорри. Во вторых - да, должны увидеть 0x22222222. Но, если это сделано до PSC1_LPSС_ENABLE для GPIO, то и не должны.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 12:57
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Ой. Был не прав. PINMUX это же SYSCFG, а не GPIO.
Ну GPIO включен. Так что разбирайтесь, скорее всего, с memory protection, чего это он не дает туда записывать из ARM.
После выполнения скрипта, возможно надо обновить содержимое browser, он может автоматом не обновляться, и увидеть там 22222222
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 13:00
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 13:01
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 15:48)  Во вторых - да, должны увидеть 0x22222222. Но, если это сделано до PSC1_LPSС_ENABLE для GPIO, то и не должны. При подключении к Target Configuration GEL и выполнении Target Connect, автоматом выполняется скрипт CODE OnTargetConnect( ) { GEL_TextOut( "\nAM1808 ARM Startup Sequence\n\n" );
Setup_System_Config( ); // Setup Pin Mux and other system module registers Setup_Psc_All_On( ); // Setup All Power Domains Setup_PLL0(); // Setup PLL0 (300MHZ ARM, 300MHz DSP, 133MHz EMIFs Setup_EMIFA(); // Async EMIF Setup_PLL1(); // PLL for DDR Clock DDRConfig(132); // Setup DDR
GEL_TextOut( "\nStartup Complete.\n\n" ); }
, где в теле Setup_Psc_All_On( ) прописано CODE hotmenu Setup_Psc_All_On( ) { int i; GEL_TextOut( "Setup Power Modules (All on)... " );
// PSC0 PSC0_lPSC_enable(0, 0); // EDMA_CC0 PSC0_lPSC_enable(0, 1); // EDMA_TC0 PSC0_lPSC_enable(0, 2); // EDMA_TC1 PSC0_lPSC_enable(0, 3); // EMIFA PSC0_lPSC_enable(0, 4); // SPI0 PSC0_lPSC_enable(0, 5); // MMCSD0 PSC0_lPSC_enable(0, 6); // ARM_AINTC PSC0_lPSC_enable(0, 7); // ARM_RAMROM // #8 not used PSC0_lPSC_enable(0, 9); // UART0 PSC0_lPSC_enable(0, 10); // SCR0 PSC0_lPSC_enable(0, 11); // SCR1 PSC0_lPSC_enable(0, 12); // SCR2 // #13 not used // PSC0_lPSC_enable(0, 14); // ARM
// PSC1 PSC1_lPSC_enable(0, 0); // EDMA_CC1 PSC1_lPSC_enable(0, 1); // USB20 PSC1_lPSC_enable(0, 2); // USB11 PSC1_lPSC_enable(0, 3); // GPIO PSC1_lPSC_enable(0, 4); // UHPI PSC1_lPSC_enable(0, 5); // EMAC PSC1_lPSC_enable(0, 6); // DDR PSC1_lPSC_enable(0, 7); // MCASP0 PSC1_LPSC_force(8); PSC1_lPSC_enable(0, 8); // SATA
PSC1_lPSC_enable(0, 9); // VPIF PSC1_lPSC_enable(0, 10); // SPI1 PSC1_lPSC_enable(0, 11); // I2C1 PSC1_lPSC_enable(0, 12); // UART1 PSC1_lPSC_enable(0, 13); // UART2 PSC1_lPSC_enable(0, 14); // MCBSP0 PSC1_lPSC_enable(0, 15); // MCBSP1 PSC1_lPSC_enable(0, 16); // LCDC PSC1_lPSC_enable(0, 17); // EPWM PSC1_lPSC_enable(0, 18); // MMCSD1 PSC1_lPSC_enable(0, 19); // UPP PSC1_lPSC_enable(0, 20); // ECAP PSC1_lPSC_enable(0, 21); // EDMA_TC2 // #22 & 23 not used PSC1_lPSC_enable(0, 24); // SCR_F0 PSC1_lPSC_enable(0, 25); // SCR_F1 PSC1_lPSC_enable(0, 26); // SCR_F2 PSC1_lPSC_enable(0, 27); // SCR_F6 PSC1_lPSC_enable(0, 28); // SCR_F7 PSC1_lPSC_enable(0, 29); // SCR_F8 PSC1_lPSC_enable(0, 30); // BR_F7 PSC1_lPSC_enable(0, 3); // SHARED_RAM
GEL_TextOut( "[Done]\n" ); }
, т.е. строка PSC1_lPSC_enable(0, 3) есть в наличии, и я должен был увидеть мои 0х22222222?
|
|
|
|
|
Jun 25 2014, 13:05
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 17:01)  , т.е. строка PSC1_lPSC_enable(0, 3) есть в наличии, и я должен был увидеть мои 0х22222222? Это не важно, я же поправился, тут речь про SYSCFG, а не GPIO. Вы должны увидеть 0x22222222, если откроете memory browser ПОСЛЕ исполнения вашего "hotmenu", или если вручную обновите в нем данные.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 13:36
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Странно это. Жаль я не могу проверить это сейчас.
Ну тут как вариант, надо включить сначала LCDC в PSC1. А попробуйте другие PINMUX писать, например EMIF. Попробуйте туда записать 22222222 прямо через memory browser, и потом обновить его, для проверки "а записалось ли".
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 13:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 15:57)  Ну GPIO включен. Так что разбирайтесь, скорее всего, с memory protection, чего это он не дает туда записывать из ARM. Почитал про механизм защиты записи регистров, реализуется через регистры KICK0R-KICK1R. В скрипте прописан unlock, но не помогает, ещё нашёл, что со 2 ревизии кремния этот механизм отменён, т.е. в моём случае это никак не влияет (AM1808B). Про memory protection units (MPU1 and MPU2) понял, что один для защиты On-Chip RAM, другой - для DDR2/mDDR SDRAM, т.е. влиять на память для моего PINMUX17 не должно.
|
|
|
|
|
Jun 25 2014, 13:55
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 17:39)  Про memory protection units (MPU1 and MPU2) понял, что один для защиты On-Chip RAM, другой - для DDR2/mDDR SDRAM, т.е. влиять на память для моего PINMUX17 не должно. Возможно, но в любом случае, на сколько я помню, запись в эти регистры (SYSCFG) возможна только из Priveleged mode. В общем, тут моя память закончилась (на сколько я помню, эмулятор всегда в Privileged, поэтому писать должен. Да и тот же GEL, конфигурируя, например, EMIF, свободно меняет PINMUXы). Для дальнейших полезных подсказок надо иметь на столе систему на AM1808, к сожалению сейчас таковой у меня нет. Вдогонку... У меня были похожие глюки на AM3517, когда я случайно запустил его на сильно запредельной частоте PLL... Вряд ли, конечно, у Вас такое же. Но тем не менее...
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 14:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 25 2014, 16:55)  Возможно, но в любом случае, на сколько я помню, запись в эти регистры (SYSCFG) возможна только из Priveleged mode. В общем, тут моя память закончилась (на сколько я помню, эмулятор всегда в Privileged, поэтому писать должен. Да и тот же GEL, конфигурируя, например, EMIF, свободно меняет PINMUXы). Для дальнейших полезных подсказок надо иметь на столе систему на AM1808, к сожалению сейчас таковой у меня нет.
Вдогонку... У меня были похожие глюки на AM3517, когда я случайно запустил его на сильно запредельной частоте PLL... Вряд ли, конечно, у Вас такое же. Но тем не менее... Со скриптом разобрался, оказалось половина исполняемой функции была закоментирована (блокнотом смотрел не заметил комент, после того, как сделал свою, всё записалось и тагда только заметил). Но из программы по-прежнему не хочет пока писать, читает, как и ранее, нормально. Счас ещё про Priveleged mode читну.
|
|
|
|
|
Jun 25 2014, 14:03
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 25 2014, 18:02)  Счас ещё про Priveleged mode читну. Если правильно помню, туда через SWI вход - либо System mode, либо Supervisor. Увидеть же, какой режим сейчас, можно в PSR (биты 4:0)
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 14:05
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 25 2014, 17:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Почитал о том, что Вы говорили. Так и есть, написано, что доступ к PINMUX только в режиме Privileged Mode. При остановке на записи в регистр PINMUX смотрю PSR[4:0], там значение 10000b - User Mode. Видимо, в этом-то и проблема. Не понятно, почему в примере от TI нет ничего, чтобы указывало на какие-то дополнительные действия, main начинается с настройки PSC, далее настройка PINMUX.
|
|
|
|
|
Jun 25 2014, 17:48
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Тут другой вопрос скорее... Кто и зачем включил этот user mode? По reset-у согласно документации ядро стартует супервайзером (Table 2-1.)
Сообщение отредактировал SAURIS GmbH - Jun 25 2014, 17:49
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 26 2014, 03:15
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 26 2014, 00:00)  Максимум, я при старте запускал скрипты из GEL, если только они, там OnConnect что-то выполняется, надо глянуть ещё раз, далее main и сразу настройка PINMUX17, которая и не работает. Там еще bootloader есть... По Reset именно в него входит процессор, и он что-то там делает согласно режима загрузки. По идее, если сделать Reset CPU через эмулятор, тогда процессор будет "в чистом состоянии", если же просто подключиться после подачи питания, то он прервет нечто, что исполняется в текущий момент, в каком-то неясном состоянии.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 26 2014, 03:46
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 20-11-13
Пользователь №: 79 278

|
Цитата(SAURIS GmbH @ Jun 26 2014, 06:15)  Там еще bootloader есть... По Reset именно в него входит процессор, и он что-то там делает согласно режима загрузки. По идее, если сделать Reset CPU через эмулятор, тогда процессор будет "в чистом состоянии", если же просто подключиться после подачи питания, то он прервет нечто, что исполняется в текущий момент, в каком-то неясном состоянии. для чистоты экспериментов , у bootloader есть режим Emulation Debug если его установить (boot mode pins) то после reset ничего вообще исполняться не будет в ожидании коннекта через jtag
|
|
|
|
|
Jun 26 2014, 08:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 26 2014, 06:15)  Там еще bootloader есть... По Reset именно в него входит процессор, и он что-то там делает согласно режима загрузки. По идее, если сделать Reset CPU через эмулятор, тогда процессор будет "в чистом состоянии", если же просто подключиться после подачи питания, то он прервет нечто, что исполняется в текущий момент, в каком-то неясном состоянии. Подключаюсь, заливаю прошивку, делаю CPU Reset (рис. 1). Подключаюсь, заливаю прошивку, делаю CPU Reset, Restart (рис. 2). Цитата(AndrejM @ Jun 26 2014, 06:46)  для чистоты экспериментов , у bootloader есть режим Emulation Debug если его установить (boot mode pins) то после reset ничего вообще исполняться не будет в ожидании коннекта через jtag Счас ещё раз проверю, но этот режим и устанавливали. Цитата(doom13 @ Jun 26 2014, 09:34)  Цитата(AndrejM @ Jun 26 2014, 06:46)  для чистоты экспериментов , у bootloader есть режим Emulation Debug если его установить (boot mode pins) то после reset ничего вообще исполняться не будет в ожидании коннекта через jtag
Счас ещё раз проверю, но этот режим и устанавливали. BOOT[7:0] = 0001_1110, что и соответствует Emulation Debug. Ну и вопрос тогда, кто мог переключить режим из Supervisor mode в User mode? Цитата(SAURIS GmbH) Поставил, как и ранее, точку останова, через ARM Advanced Features установил MMU Enabled, поменял значение ARM Mode на Supervisor Mode, убрал MMU Enabled, всё заработало! Регистр PINMUX и пишется и читается, проблема, как Вы и говорили, в режиме User Mode.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 26 2014, 13:17
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(doom13 @ Jun 26 2014, 14:05)  Ну и вопрос тогда, кто мог переключить режим из Supervisor mode в User mode? Писал об этом недавно в соседней ветке (по DSP) одному товарищу.... Сталкивался с подобным давно (года 3 назад когда начинал с OMAP L137) на ARM9-ядре. И обнаружил тогда, насколько помню, что user mode включается в стартап-коде от TI. Потом в функции main(), когда необходим режим с привилегиями, переключался в него через SVC (на котором висел соответствующий сервис). Я пофиксил это поправив cstartup. Попробуйте поставить бряк до cstartup и проверьте режим.
|
|
|
|
|
Jun 26 2014, 14:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(jcxz @ Jun 26 2014, 16:17)  Уже немного разобрался, как сделать чтобы не произошло переключения в User Mode. Начал с анализа проекта от TI, в CMD у них прописана своя точка входа Код -e Entry переделал немного их проект под использование SHRAM (там DDR для кода используется), при остановке в начале main смотрю в каком режиме ARM и вижу System Mode, что отличается от моего. Далее нашёл в папках с их либой кто такой Entry, оказалось в их примере до выполнения main выполняется кусок асма со строчками описывающими переключение режимов. Далее идёт переключение на start_boot() из файла startap.c и только потом запускается main. Всё это у них работает с использованием уже скомпилированных библиотек, к проекту подключено два файла (всё остальное через LIB) и явно не видно, что до main ещё исполняется куча кода. После подключения их init.asm, изменения точки входа и либу одну их скомпиленную заюзал (надо будет потом выкинуть, чтоб понятно было, что и откуда берётся) всё заработало и моя проблема с записью PINMUX решилась. Цитата(jcxz @ Jun 26 2014, 16:17)  Сталкивался с подобным давно (года 3 назад когда начинал с OMAP L137) на ARM9-ядре. И обнаружил тогда, насколько помню, что user mode включается в стартап-коде от TI. Тут не совсем понимаю, каким образом что-то может подключиться к проекту (стартап-код) если у меня один файл с main и больше ничего, в настройках проекта пусто, CMD стандартный? Откуда берётся этот стартап?
|
|
|
|
|
Jun 26 2014, 15:15
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Подключиться "что-то" может только вашими руками  Вы же указываете наверняка "подключать стандартные библиотеки" или что-то в этом роде. Вот там оно и находится. От вектора сброса протрассируйте и увидите что-нить типа: LDR PC, _cstartupВнутри - инициализация всяких сишных переменных/классов и переключение в этот user mode кроме всего прочего. Находите исходник стандартной либы (есть в CCS), правите его убирая всякую шнягу типа включения user mode и пр., компилите в lib-файл и включаете в проект вместо "стандартной либы".
|
|
|
|
|
Jun 26 2014, 16:22
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 26 2014, 18:17)  Тут не совсем понимаю, каким образом что-то может подключиться к проекту (стартап-код) если у меня один файл с main и больше ничего, в настройках проекта пусто, CMD стандартный? Откуда берётся этот стартап? Вот этот стартап-код инициализирует run-time библиотеку, после чего вызывает Ваш main. Он находится в виде исходных текстов в составе run-time библиотеки. Вы его можете оттуда выковырять и поправить на свой лад, если надо. Но без него нельзя - он много чего делает, чтобы Ваш C-код исполнялся потом корректно.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 26 2014, 19:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Да, ступил немного. Просто в голове работа с С2000, С6000, а там как-то всё время к проекту подключался асмовский файл (буквально пару строк) с переходом на _c_int00. Вот что-то мне запомнилось, что переход на _c_int00 и есть переход на main, ещё раз прошёлся по старым проектам, оказалось - переход на _c_int00 не равен переходу на main. При переходе на _c_int00 ещё куча асмовских инструкций исполняется и только потом осуществляется переход на main. Счас стало понятно, надо только этот стандартный startup выщимить и посмотреть, что он там выполняет.
|
|
|
|
|
Jun 27 2014, 06:55
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Есть еще один вариант. Если остальная программа, кроме инициализации, может полностью работать в user mode, то можно написать свой кусочек кода, работающий без единого библиотечного вызова и без использования стека (вызова ф-ций) (а лучше вообще, на ассемблере), который проинициализирует все регистры, доступные только из privileged, и затем уйдет на библиотечный стартап, и далее на main. Ну и точку входа переустановить на начало этого кода.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 07:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 09:55)  Есть еще один вариант. Если остальная программа, кроме инициализации, может полностью работать в user mode, то можно написать свой кусочек кода, работающий без единого библиотечного вызова и без использования стека (вызова ф-ций) (а лучше вообще, на ассемблере), который проинициализирует все регистры, доступные только из privileged, и затем уйдет на библиотечный стартап, и далее на main. Ну и точку входа переустановить на начало этого кода. Счас вот разбираюсь, как тут правильно стартануть, нашёл boot.asm со стандартной _c_int00, оно и выполнялось до моего main. Только вот точку останова в нём почему-то не могу поставить.
|
|
|
|
|
Jun 27 2014, 07:59
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
тут два варианта - пересобрать библиотеку целиком с включением отладочной информации в нее, ну или включить этот boot.asm (его копию) в состав своего проекта.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 09:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 10:59)  тут два варианта - пересобрать библиотеку целиком с включением отладочной информации в нее, ну или включить этот boot.asm (его копию) в состав своего проекта. Попробовал его подключать, одного выходит не достаточно, тянет за собой ещё что-то. Наверное проще оставить свой entry point по аналогии с примером от TI, только полностью разобраться, что он там делает. Есть две практически одинаковые конфигурации. При запуске и загрузке программы попадаем в main, в стеке вызовов лежит _c_int00 и main. Если выбрать _c_int00, то для первой напишет, что не может открыть исходный файл, для второй автоматом откроет boot.asm. В чём может быть разница? Что-то никак не могу найти отличия, для второй хотя бы понятно, откуда _c_int00 берётся.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 27 2014, 10:02
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 27 2014, 13:07)  Попробовал его подключать, одного выходит не достаточно, тянет за собой ещё что-то. Наверное проще оставить свой entry point по аналогии с примером от TI, только полностью разобраться, что он там делает. Должно быть достаточно. Я не раз так делал, когда требуется модификация boot.asm, компилятор компилирует тот, что в проекте, а тот, что в либе, игнорирует. Что касается останова в нем - надо где-то в опциях проекта (или отладки, не помню) убрать галку, говорящую, что надо автоматически дойти до main и остановиться на ней. Тогда она сразу остановится на _c_int00 Разница, наверное, что один проект видит файл "boot.asm" - он лежит или в проекте, или где-то в путях доступен, а второй нет. UPD: Вдогонку. Еще можно раскрыть весь архив с исходниками runtime library, и добавить в путь поиска отладчику. Но с учетом того, что либа собрана с оптимизацией, остановы в C коде могут быть показаны некорректно.
Сообщение отредактировал SAURIS GmbH - Jun 27 2014, 10:02
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 10:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 13:02)  Разница, наверное, что один проект видит файл "boot.asm" - он лежит или в проекте, или где-то в путях доступен, а второй нет. Проект отин и тот же только Debug Configurations разные запускаю, но по опциям они одинаковые, ну может не вижу чего. Цитата(SAURIS GmbH @ Jun 27 2014, 13:02)  Что касается останова в нем - надо где-то в опциях проекта (или отладки, не помню) убрать галку, говорящую, что надо автоматически дойти до main и остановиться на ней. Тогда она сразу остановится на _c_int00 Да, заработало. Я пытался поменять Run to symbol main на Run to symbol _c_int00, а надо было убрать галку. Стало заходить в boot.asm, но пошагово отследить, что и за чем следует, как Вы и говорите, нельзя, прыгает по чём попало и по коментам тоже. Цитата(SAURIS GmbH @ Jun 27 2014, 13:02)  Должно быть достаточно. Я не раз так делал, когда требуется модификация boot.asm, компилятор компилирует тот, что в проекте, а тот, что в либе, игнорирует. Вот если boot.asm, который и открывается для одной из конфигураций, закинуть в проект или импортировать как File system -> link in workspace, то появляется такая вот ошибка:
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 27 2014, 10:23
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Это похоже какие-то опции сборки надо поставить (например -D <define>) для boot.asm, чтобы она не вызывала эту инициализацию xdc.
UPD: Хотя... В исходнике "boot.asm" такого идентификатора не видно. Так что похоже Вы сами что-то туда лишнее еще притащили.
UPD2: Более того, во всей run time поиск по всем исходникам не дал ничего на тему этого символа.
UPD3:
А Вы откуда этот boot.asm вообще взяли? Надо из ccsvX\tools\compiler\arm_X.X.X\lib\src\boot.asm
Сообщение отредактировал SAURIS GmbH - Jun 27 2014, 10:36
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 10:43
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 27 2014, 14:42)  В том, который автоматом открывается Это XDC runtime - совсем и близко не то. Тот... Ну я уже сказал, где лежит
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 10:51
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Ну видимо в пути поиска он первым стоит. Название файла одинаковое, его и отображает (но вовсе не в него заходит!). Просто подгружает файл и подсвечивает некую совершенно бредовую строку кода, согласно таблице номеров строк из совершенно отвлеченного объектного модуля.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 10:53
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 27 2014, 14:51)  У меня есть только c:\ti\ccsv5\tools\compiler\arm_5.1.1\lib\, в ней папки src с boot.asm нету!? Значит сделайте ее, раскрыв тамошний архив rtssrc.zip туда. Или просто достаньте boot.asm из него
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 12:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 13:53)  Значит сделайте ее, раскрыв тамошний архив rtssrc.zip туда. Или просто достаньте boot.asm из него Помогло, прилинковал его к проекту, теперь обе конфигурации работают одинаково, заходят в один и тот же boot.asm и ходить по нему нормально стало. Ещё добавил в include options данную папку и вообще шикарно стало, можно от _c_int00 по шагам добраться до main. При создании проекта почему-то подключает к пректу папку c:\ti\ccsv5\tools\compiler\arm_5.1.1\include, которой вообще нет, зачем? Это, по-идее, и болжна быть данная src с распакованным архивом?
|
|
|
|
|
Jun 27 2014, 12:15
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 27 2014, 16:03)  Помогло, Кстати там четко откоментирован кусок, отвечающий за вход в user mode. Так что три движения мизинцем, и оно выключено.
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 27 2014, 13:13
|

Знающий
   
Группа: Участник
Сообщений: 531
Регистрация: 16-12-09
Пользователь №: 54 291

|
Цитата(doom13 @ Jun 27 2014, 16:03)  При создании проекта почему-то подключает к пректу папку c:\ti\ccsv5\tools\compiler\arm_5.1.1\include, которой вообще нет, зачем? Это, по-идее, и болжна быть данная src с распакованным архивом? Она там есть. Ее не может там не быть. Там лежат все стандартные инклуды, "stdio.h", "stdlib.h", "limits.h" и пр. Без этого у Вас бы ничего бы вообще не скомпилировалось с применением стандартных #include
Сообщение отредактировал SAURIS GmbH - Jun 27 2014, 13:14
--------------------
Sauris GmbH technical support (web site: http://www.sauris.de) XDS100, XDS510 JTAG Emulators for TI DSP & ARM, Flash/EEPROM programming JTAG tools, System-on-Module products.
|
|
|
|
|
Jun 30 2014, 06:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(SAURIS GmbH @ Jun 27 2014, 16:13)  Она там есть. Ее не может там не быть. Там лежат все стандартные инклуды, "stdio.h", "stdlib.h", "limits.h" и пр. Без этого у Вас бы ничего бы вообще не скомпилировалось с применением стандартных #include Да, есть, что-то я, наверное, не то смотрел.
|
|
|
|
|
Jul 12 2014, 08:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Приветствую. Возник вопрос с прерыванием, вся инициализация проделана по аналогии с примером (правильно), но не заходит в обработчик прерывания. Нашёл, что перед main (в примере у которого всё работает) выполняется кусок кода, который копирует вектор прерываний: Код static void CopyVectorTable(void) { unsigned int *dest = (unsigned int *)0xFFFF0000; unsigned int *src = (unsigned int *)vecTbl; unsigned int count;
for(count = 0; count < sizeof(vecTbl)/sizeof(vecTbl[0]); count++) { dest[count] = src[count]; } } , где 0xFFFF0000 - адрес ARM local RAM, у меня вектор прерываний лежал в On-Chip RAM, но при этом в Vector Base Register все адреса были прописаны правильно. Зачем нужно это копирование если адреса вектора прерываний и так были известны? И второй вопрос по самому вектору: Код static unsigned int const vecTbl[14]= { 0xE59FF018, 0xE59FF018, 0xE59FF018, 0xE59FF018, 0xE59FF014, 0xE24FF008, 0xE59FF010, 0xE59FF010, (unsigned int)Entry, (unsigned int)UndefInstHandler, (unsigned int)SWIHandler, (unsigned int)AbortHandler, (unsigned int)IRQHandler, (unsigned int)FIQHandler }; , что означают константы 0xE59FF018, ... , 0xE59FF010 в таблице?
|
|
|
|
|
Jul 13 2014, 05:49
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(doom13 @ Jul 12 2014, 14:34)  , где 0xFFFF0000 - адрес ARM local RAM, у меня вектор прерываний лежал в On-Chip RAM, но при этом в Vector Base Register все адреса были прописаны правильно. Зачем нужно это копирование если адреса вектора прерываний и так были известны? Наверное контроллер прерывания AM1808 требует чтобы таблица векторов находилась с этого адреса. Или вы спрашиваете почему на этапе компиляции вы сразу не разместили эту таблицу по адресу 0xFFFF0000? Про AM1808 не знаю, но например в OMAP-L137 делается так же, там тоже вектора прерываний ARM-ядра прописываются в ARM local RAM уже после старта ПО. Делается это по той причине, что первым в нём стартует DSP-ядро, ARM-ядро в это время в сбросе. Грузит и стартует прошивку DSP-ядро. А оно не имеет доступа к ARM local RAM.
|
|
|
|
|
Jul 14 2014, 08:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Если можно поясните здесь подробнее. Что-то не могу понять, что прописано в приведённом выше векторе прерываний. Счас читаю доки, но пока не нахожу ничего по данной теме. Entry - понятно, адрес заданной точки входа, UndefInstHandler, SWIHandler, AbortHandler, IRQHandler, FIQHandler - адреса соответствующих обработчиков. Константы выше Entry - 4 одинаковые 0xE59FF018, ещё 0xE59FF014, 0xE24FF008 и две одинаковые 0xE59FF010 - это всё JUMP? Это ведь должна быть таблица адресов по которым происходит переход при том или ином событии, каким боком здесь JUMP? Описание вектора прерываний из даташита на рисунке, всё практически как в описанной выше таблице за исключением "констант". Попробовал удалять или менять на нули эти константы, процессор запускается и работает, но при срабатывании прерывания вылетает.
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 14 2014, 09:11
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(doom13 @ Jul 14 2014, 14:50)  Если можно поясните здесь подробнее. Что-то не могу понять, что прописано в приведённом выше векторе прерываний. Счас читаю доки, но пока не нахожу ничего по данной теме. Entry - понятно, адрес заданной точки входа, UndefInstHandler, SWIHandler, AbortHandler, IRQHandler, FIQHandler - адреса соответствующих обработчиков. Константы выше Entry - 4 одинаковые 0xE59FF018, ещё 0xE59FF014, 0xE24FF008 и две одинаковые 0xE59FF010 - это всё JUMP? Это ведь должна быть таблица адресов по которым происходит переход при том или ином событии, каким боком здесь JUMP? Что такое дизассемблер знаете? Даже без него могу предположить, что первые 8 строк - команды типа: LDR PC,[PC,#N] а следующие 8 строк - это собственно таблица адресов, которая считывается первыми 8-ю командами.
|
|
|
|
|
Jul 14 2014, 11:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(jcxz @ Jul 14 2014, 12:11)  Цитата(DmitryM @ Jul 14 2014, 13:12)  Спасибо, так и есть, если дизассм сделать, то получаем следующее: Код address | --------------------------------------------------------- 80010000: | E59FF018 LDR PC, 0x80010020 80010004: | E59FF018 LDR PC, 0x80010024 80010008: | E59FF018 LDR PC, 0x80010028 8001000c: | E59FF018 LDR PC, 0x8001002C 80010010: | E59FF014 LDR PC, 0x8001002C 80010014: | E24FF008 SUB PC, PC, #0x8 80010018: | E59FF010 LDR PC, 0x80010030 8001001c: | E59FF010 LDR PC, 0x80010034 80010020: | XXXXXXX1 Entry_Adddress 80010024: | XXXXXXX2 UndefInstHandler_Adddress 80010028: | XXXXXXX3 SWIHandler_Adddress 8001002c: | XXXXXXX4 AbortHandler_Adddress 80010030: | XXXXXXX5 IRQHandler_Adddress 80010034: | XXXXXXX6 FIQHandler_Adddress , что соответствует таблице векторов прерываний из даташита. Неверно посчитал - это должна быть таблица переходов на адреса обработчиков, а не просто их адресов. Ещё не совсем понятна необходимость её переноса в ARM RAM? Получится ли сделать кусок кода на ассме, который отвечает за эти переходы, разместить его в секцию vectors, а её через CMD-файл прикрутить к ARM RAM? Или поскольку к ARM RAM имеет доступ только сам ARM, то с эмулятором такой вариант точно не прокатит, а если это будет загрузчик, то подход тоже неверный, т.е. при старте программы всегда необходимо перебросить твблицу векторов прерываний в ARM RAM?
|
|
|
|
|
Nov 11 2014, 09:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Приветствую! Помогите разобраться, куда копать. Проблема следующая. Есть программа, заливаю её в процессор всё работает. В CCS v5.5 останавливаю процессор нажимаю "Suspend", далее нажимаю "CPU Reset", "Restart", "Resume", всё заново запускается и работает. Добавляю кусок кода, который настраивает и использует прерывария от McBSP и тогда всё работает только один раз после включения питания либо Hard Reset-a. В начале программы использую настройку прерываний, все функции из AM1808_StarterWare: Код IntAINTCInit(); //Enable IRQ for ARM (in CPSR)*/ IntMasterIRQEnable(); // Enable AINTC interrupts in GER */ IntGlobalEnable(); // Enable IRQ in AINTC */ IntIRQEnable(); при инициализации McBSP выполняется следующий кусок кода: Код IntRegister((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT), isr); IntChannelSet((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT), (device_num ? AINTC_CHANNEL_5_MCBSP1RX : AINTC_CHANNEL_4_MCBSP0RX)); IntSystemEnable((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT)); Если поставить точку останова на IntIRQEnable(), дойдёт до неё, далее при нажатии на "Resume" опять попадает на эту же строку (каким-то образом само перезапустилось). Если убираем из программы настройку прерываний McBSP, всё будет работать нормально. UPP: Хочу уточнить. Ещё раз всё посмотрел, получается, программа сбрасывается на самое начало. Ещё нашёл, что в CCS можно выбирать кнопку сброса "CPU Reset (SW)", "CPU Reset (HW)" и "System Reset". Так вот, если для программы с "глючным куском кода" делать "CPU Reset", то перезапустить её не получится, выполнение доходит до определённого места, а потом каким-то образом происходит сброс на начало. Если выполнить "System Reset" и "Restart", то программа запустится нормально. Для программы без использования прерывания от McBSP можно использовать любой вариант сброса. В чём отличие? И как сделать правильно, чтоб запускалось в любом случае?
|
|
|
|
|
Mar 27 2015, 05:40
|
Группа: Новичок
Сообщений: 2
Регистрация: 26-03-15
Пользователь №: 85 892

|
Помогите найти пример для работы с SD картой на AM1808
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|