|
OMAP L138, быстрый старт |
|
|
|
 |
Ответов
(30 - 44)
|
Aug 30 2012, 02:46
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(aaarrr @ Aug 29 2012, 12:57)  DSP нужно включить со стороны ARM'а - он выключается почти сразу после старта. Хм... А что - в L138 первым стартует ARM? Работал с L137 только - там стартует DSP (по вкл. питания ARM - в ресете) , код bootloader-а выполняет DSP, и в пользовательском ПО чтобы использовать ARM, надо сперва прописать таблицу векторов для ARM (в его памяти), а потом - включить его и вывести из ресета. Под JTAG - на L137 доступны сразу оба ядра, так как JTAG их сам выводит из ресета когда подключается к ним. И на отладку под JTAG можно запускать сразу два проекта параллельно. Цитата(aaarrr @ Aug 29 2012, 17:45)  Понятно: процессор в user mode, поэтому и доступа к SYSCFG нет. Надо шерстить стартап StarterWare на предмет выставления режима. rts.lib файл boot.asm: Код cstartup: .asmfunc MRS R0, SPSR ;Now will ORR R0, R0, #CPU_MODE_SYS;set to SVC mode MSR CPSR, R0 ; with privileges Можно конечно через SWI. Но я делаю как показал выше - так проще. Кроме того - в этом rts.lib можно ещё что-нить пооптимизить и пообкусывать.
|
|
|
|
|
Aug 30 2012, 05:50
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Скачали с сайта техаса файл boot.asm, тупо добавили его в проект - все заработало. Как это работает, каким образом этот асм файл встроился в код - непонятно совершенно. А сигнальник все равно в ресете На строках Код PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); виснет. Какой порядок включения dsp? Разве не такой же как и GPIO?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Aug 30 2012, 06:21
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(jcxz @ Aug 30 2012, 06:46)  Хм... А что - в L138 первым стартует ARM? Там мудреная система загрузки: первым стартует DSP, затем он при помощи PRU окучивает ARM, потом ARM отрубает DSP. Цитата(torik @ Aug 30 2012, 09:50)  Какой порядок включения dsp? Порядок включения описан в разделе "DSP Wake Up" sprugm7. Но виснуть при обращении к PSC всяко не должен.
|
|
|
|
|
Aug 30 2012, 09:26
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 2-06-09
Пользователь №: 49 843

|
Цитата(aaarrr @ Aug 30 2012, 10:21)  Порядок включения описан в разделе "DSP Wake Up" sprugm7. Но виснуть при обращении к PSC всяко не должен. По мануалу: Perform the following steps to wake up the DSP: 1. Write a 83E7 0B13h to the KICK0R register in the SYSCFG module. 2. Write a 95A4 F1E0h to the KICK1R register in the SYSCFG module. 3. Write the truncated DSP boot address vector to the DSP_ISTP_RST_VAL field in the host 1 configuration register (HOST1CFG) of the SYSCFG module. The least-significant bits of the boot address are fixed at 0. 4. Write a 3h to the NEXT bit in the DSP local power sleep controller (LPSC) module control register (PSC0.MDCTL15) to prepare the DSP module for an enable transition (to enable the clocks and all transitioning from the SwRstDisable state to Enable state). 5. Write a 1 to the GO[1] bit (DSP subsystem is part of the PD_DSP domain) in the power domain transition command register (PSC0.PTCMD) to start the state transition sequence for the DSP module. 6. Check (poll for 0) the GOSTAT[1] bit in the power domain transition status register (PSC0.PTSTAT) for power transition sequence completion. The domain is only safely in the new state after the GOSTAT[1] bit is cleared to 0. 7. Wait for the STATE bit field in the DSP LPSC module status register (PSC0.MDSTAT15) to change to 3h. The module is only safely in the new state after the STATE bit field changes to reflect the new state. 8. Write a 1 to the LRST bit in PSC0.MDCTL15 to release the DSP local reset controlled by the PSC module. Выполняю следующее: Код HWREG (SOC_SYSCFG_0_REGS + SYSCFG0_KICK0R) = 0x83e70b13; HWREG (SOC_SYSCFG_0_REGS + SYSCFG0_KICK1R) = 0x95a4f1e0;
//Включение DSP HWREG (SOC_SYSCFG_0_REGS + SYSCFG0_HOST1CFG) = 0x00E00000; PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_MDCTL_NEXT_ENABLE); PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_PTCMD_GO1); PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_PTSTAT_GOSTAT1_SHIFT); PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_MDSTAT_STATE); PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_MDSTAT_LRST); И на строке Код PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_MDSTAT_STATE); Выполнение программы подвисает. Что делаю не так?
|
|
|
|
|
Aug 30 2012, 10:27
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(maxis @ Aug 30 2012, 13:26)  И на строке Код PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_DSP, PSC_POWERDOMAIN_PD_DSP, PSC_MDSTAT_STATE); Выполнение программы подвисает. Что делаю не так? А что говорит PSC0.MDSTAT15?
|
|
|
|
|
Aug 30 2012, 11:24
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 2-06-09
Пользователь №: 49 843

|
Цитата(aaarrr @ Aug 30 2012, 14:27)  А что говорит PSC0.MDSTAT15? 0x00000A00
|
|
|
|
|
Aug 31 2012, 20:01
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(aaarrr @ Aug 30 2012, 12:21)  Там мудреная система загрузки: первым стартует DSP, затем он при помощи PRU окучивает ARM, потом ARM отрубает DSP. Значит - всё точно так же как в L137. А зачем Вы отрубаете DSP после старта ARM? Если интересно могу привести свой код, которым запускаю ARM (см. прикреплённый файл).
boot.zip ( 1.05 килобайт )
Кол-во скачиваний: 140 Файл boot.asm (который в составе rts.lib) модифицирован как указано в моём посте выше. Начало main() из DSP-проекта: Код #pragma FUNC_NEVER_RETURNS int main() { u32 cpuUseIdle; s32 i;
CACHE.L1DCFG = 7; i = CACHE.L1DCFG; soc.faza = soc.FAZA_BEGIN; EnableARM();
CooperateWait(soc.FAZA_DSPIDLE_MEAS); //отсель ARM и DSP работают совместно ...
|
|
|
|
|
Sep 2 2012, 13:47
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(aaarrr @ Sep 2 2012, 13:27)  На самом деле в L138 первым тоже стартует DSP Конечно, точно не могу утверждать, но косвенные признаки показывают, что это не так. Если выполнить hardware reset через JTAG при помощи ICEPICK, и не дать ядрам выполнить ничего из внутреннего ПЗУ, то живым в L138 оказывается таки ARM, а в L137 - DSP. И это же следует из анализа стартапных GEL-файлов обоих процессоров, и последовательностей коннекта эмуляторов к ядрам.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|