repstosw 18 11 мая, 2020 Опубликовано 11 мая, 2020 (изменено) · Жалоба Доброе время суток! Поставлена задача - плотно освоить OMAP-L138 (ARM9 + C6000). Интересует программирование процессора под голое железо: без TI BIOS, TI RTOS, uC Linux, Linux, WinCE и других уродских вещей. В частности, интересуют доки и информация, как загрузить программу для DSP через ARM, а лучше - сразу DSP. Имею экспиренс в программировании ARM920T и C6745. Теперь надо разобраться, где писать программу для ARM? CCS или Keil? А может сразу на GCC? Где брать хедеры на периферию OMAP-L138? Самому из даташита делать и из огрызков с гитхаба(как я это делал для C6745) ? В общем в каком направлении рыть? В моем распоряжении UART и светодиоды + предыдущий опыт с ARM9 и C6000+ Изменено 11 мая, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба 26 минут назад, __inline__ сказал: В частности, интересуют доки и информация, как загрузить программу для DSP через ARM, а лучше - сразу DSP. Сразу - это к OMAP-L137. На L138, насколько помню, после сброса стартует ARM9-ядро, а DSP-ядро - в reset-е, пока его ARM не разрешит. В L137 программа для обоих ядер грузилась DSP-ядром (из общего комплексного файла прошивки), а потом DSP-ядро через PRUSS инициализировало таблицу прерываний ARM9 и выводило ARM9 из сброса. Думаю и для L138 должна создаваться комплексная прошивка. Формата .ais. Утилитой AISgen. 26 минут назад, __inline__ сказал: Имею экспиренс в программировании ARM920T и C6745. Теперь надо разобраться, где писать программу для ARM? CCS или Keil? А может сразу на GCC? Главное (имхо) не как писать, а как отлаживать. CCS - умеет отлаживать оба ядра одновременно, про остальные - не уверен. Хотя впрочем - Вы же вроде принципиально не используете JTAG? 26 минут назад, __inline__ сказал: Где брать хедеры на периферию OMAP-L138? Самому из даташита делать и из огрызков с гитхаба(как я это делал для C6745) ? Зачем какие-то огрызки если TI предоставляет вполне качественные хидеры на периферию? Я брал оттуда. Вроде были они в примерах к CCS. Но можно из по даташитам самостоятельно. 26 минут назад, __inline__ сказал: В моем распоряжении UART и светодиоды + предыдущий опыт с ARM9 и C6000+ UART конечно хорошо, но мне в своё время так и не удалось заставить OMAP-L137 грузиться с него: Затыкалось в процессе загрузки .ais-файла на разных стадиях загрузки. Все опции AISgen перерыл - без толку. Так что при отладке грузил с JTAG, а в боевом режиме - SPI-FLASH. PS: Кстати - в OMAP-L137 были баги чипа, не описанные в errata. На которые мы благополучно наступили и искали их целый месяц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 11 мая, 2020 Опубликовано 11 мая, 2020 (изменено) · Жалоба 21 minutes ago, jcxz said: Думаю и для L138 должна создаваться комплексная прошивка. Формата .ais. Утилитой AISgen. Это очень хорошо, что AISgen сможет разрулить код для ARM и DSP. А я думал, что придётся программу для DSP делать бинарником на стартовый адрес, который захардкожен или через ключ -PIC генерить Position Independent Code и потом его встраивать в исходник через bin-to-h 21 minutes ago, jcxz said: Вы же вроде принципиально не используете JTAG? Да вот как-то не ощущаю в нём надобности. Для хоббийных поделок моя жаба душит на него уделить время 21 minutes ago, jcxz said: Зачем какие-то огрызки если TI предоставляет вполне качественные хидеры на периферию? Я брал оттуда. Вроде были они в примерах к CCS. А где эти хедеры лежат? Всё что я видел, это - огромная структура с полями, с большой вложенностью, где мострячат что-то вроде: EDMA->ATTRIBUTE->SUBATTRIBUTE->SUBSUBATTRIBUTE->BITFIELD=C1|C2|C3|C4 а вместо этого хочется нормального прозрачного волатильного описания: #define EDMA_PARAMETER (*(volatile unsigned int*)(EDMA_BASEADDRESS+0x14)) AISgen позволит настроить DDR SDRAM, или надо самому инициализировать? Можно ли одновременно использовать оба ядра - ARM и DSP? DSP будет считать основную программу, а ARM будет заниматься рендерингом(2D). Понимаю, что наоборот было бы лучше, но DSP досталась основная работа, так как в управляющем коде много операций с плавучкой. Под C6745 делал хедеры по даташиту, ниже пример такого хедера - всё прозрачно просто и понятно: #ifndef _MCASP_EDMA3_H_ #define _MCASP_EDMA3_H_ #ifdef __cplusplus extern "C" { #endif #include <c6x.h> #include "Type.h" #include "sysconfig.h" #include "McASP.h" #include "EDMA3.h" #define CHAM 1 /* !!! McASP DMA Channel 1 */ #define TCCM 1 /* Transfer Complete Code McASP */ #define FIF 64 /* FIFO Size */ #define PaRAM1_BASE (0x01C04000+(32*CHAM)) #define PaRAM1_OPT (*(IO u32*)(PaRAM1_BASE+0x0000)) #define PaRAM1_SRC (*(IO u32*)(PaRAM1_BASE+0x0004)) #define PaRAM1_A_CNT (*(IO u16*)(PaRAM1_BASE+0x0008)) #define PaRAM1_B_CNT (*(IO u16*)(PaRAM1_BASE+0x000A)) #define PaRAM1_DST (*(IO u32*)(PaRAM1_BASE+0x000C)) #define PaRAM1_SRC_BIDX (*(IO u16*)(PaRAM1_BASE+0x0010)) #define PaRAM1_DST_BIDX (*(IO u16*)(PaRAM1_BASE+0x0012)) #define PaRAM1_LINK (*(IO u16*)(PaRAM1_BASE+0x0014)) #define PaRAM1_BCNTRLD (*(IO u16*)(PaRAM1_BASE+0x0016)) #define PaRAM1_SRC_CIDX (*(IO u16*)(PaRAM1_BASE+0x0018)) #define PaRAM1_DST_CIDX (*(IO u16*)(PaRAM1_BASE+0x001A)) #define PaRAM1_C_CNT (*(IO u16*)(PaRAM1_BASE+0x001C)) #define PaRAM1_RSVD (*(IO u16*)(PaRAM1_BASE+0x001E)) extern void _intcVectorTable(void); extern volatile u32 SWAP; extern volatile u32 McASP_EDMA3_Flag; void McASP_EDMA3_Init(u32 s,u32 v,void (*h)(u32)); #ifdef __cplusplus } #endif #endif Изменено 11 мая, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба 1 час назад, __inline__ сказал: А где эти хедеры лежат? Всё что я видел, это - огромная структура с полями, с большой вложенностью, где мострячат что-то вроде: Очевидно в: CCS\C6000\CSL\INCLUDE 1 час назад, __inline__ сказал: AISgen позволит настроить DDR SDRAM, или надо самому инициализировать? Мне позволял. 1 час назад, __inline__ сказал: Можно ли одновременно использовать оба ядра - ARM и DSP? А зачем как вы думаете несколько ядер если бы они не могли работать одновременно? Можно хоть все 4 (+2*PRU). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 12 мая, 2020 Опубликовано 12 мая, 2020 (изменено) · Жалоба 17 hours ago, jcxz said: А зачем как вы думаете несколько ядер если бы они не могли работать одновременно? Можно хоть все 4 (+2*PRU). Потому что мои пессимистические настроения диктуют ожидать самое худшее, что может быть. В данном случае "а вдруг нельзя?". Помню у Филлипса был какой-то ARM7, который не мог код выполнять во внешней памяти, причём это было в его Errata. Вот и подумал, что у OMAPL138 может быть нечто подобное :) В даташите на OMAP сказано, что EMIFB может работать с памятью DDR2. На TI-шном форуме прочитал, что частота шины не может превысить 152 МГц (треть от частоты ядра 456 МГц). Выходит эффективная передача DDR2 идёт на 152*4 = 608 МГц ? Всё верно? И ещё вопрос, за счёт чего пропускная способность DDR2 выше чем DDR в 2 раза? То что передачи идут по фронту и спаду клока, это я понял - это DDR. А откуда второе удвоение в DDR2? В википедии как-то непонятно расписано. Никогда с DDR не работал, только с SDRAM и SRAM. По поводу встроенного видеоконтроллера. Только 16 бит и скорость 40 МГц ? Выходит 800x480 16 бит на 60 Гц должен тянуть с ДМА ? Буфера щёлкать можно? чтобы сделать двойную или тройную буферизацию ? (пока одна рисуется, вторая показывается). Перехват VSYNC (обратный ход луча по кадру) есть в виде прерывания? Изменено 12 мая, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 22 минуты назад, __inline__ сказал: В даташите на OMAP сказано, что EMIFB может работать с памятью DDR2. На TI-шном форуме прочитал, что частота шины не может превысить 152 МГц (треть от частоты ядра 456 МГц). Выходит эффективная передача DDR2 идёт на 152*4 = 608 МГц ? Всё верно? Не знаю, у L137 и L138 насколько помню - интерфейсы внешней памяти отличаются. L137 не поддерживает DDR. А почему читаете о возможностях МК не в мануале, а на форуме? У TI хорошая документация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 2 minutes ago, jcxz said: А почему читаете о возможностях МК не в мануале, а на форуме? У TI хорошая документация. У TI действительно хорошая документация. Но для того чтобы её найти, нужно ещё правильно сформировать запрос. ну и большинство ссылок уже просто убитые Кое-как наскрёб AISgen для L138 и Pin-конфигуратор. Ситуация повторяется также как и с C6745, приходится рыть архивы или форумы 5 minutes ago, jcxz said: Не знаю, у L137 и L138 насколько помню - интерфейсы внешней памяти отличаются. L137 не поддерживает DDR. Я уже вдоволь поигрался с SDRAM 152 МГц, хочется чего-то быстрее. Да и 64 МБ на 1 чип. А тут можно 128 МБ поставить или даже больше. И быстродействие в 4 раза поднять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 9 минут назад, __inline__ сказал: У TI действительно хорошая документация. Но для того чтобы её найти, нужно ещё правильно сформировать запрос. ну и большинство ссылок уже просто убитые Я как-то не испытывал с этим проблем. И к форумам почти не обращался. А ищется документация на периферию легко: Открываем "TMS320C674x/OMAP-L1x Processor Peripherals Overview Reference Guide" (SPRUFK9D), а из него уже идут ссылки на .pdf всех периферийных модулей. Ничего сложного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 hour ago, __inline__ said: А откуда второе удвоение в DDR2? А нет там никакого "второго удвоения". 56 minutes ago, jcxz said: Открываем "TMS320C674x/OMAP-L1x Processor Peripherals Overview Reference Guide" (SPRUFK9D), а из него уже идут ссылки на .pdf всех периферийных модулей. Ничего сложного. Этот маразм давно в единый TRM свели. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 13 мая, 2020 Опубликовано 13 мая, 2020 · Жалоба Маразм происходит на просторах нашей страны. Девкит на OMAPL138 продают за 27 - 63 тысячи рублей. Идут мимо... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 13 мая, 2020 Опубликовано 13 мая, 2020 · Жалоба В чём именно маразм? Я в своё время свою отладку с L137 за 500+$ покупал. Так что - ничего не изменилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 13 мая, 2020 Опубликовано 13 мая, 2020 · Жалоба 6 minutes ago, jcxz said: В чём именно маразм? В том, что камню 100 лет в обед, а продают по цене 2012-го года. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 2 марта, 2022 Опубликовано 2 марта, 2022 · Жалоба Помогите начать работу с L138. Имеется чужая работающая плата с этим процом, код там грузится из параллельной флешки. Хочу начать работу пока с ARM ядром и выполнять код из внутренней памяти. Опыта с процами от TI и CCS нет. Применяли контроллеры STM и DSP Blackfin. Использую JTAG SAU510-USB. В CCS5 создал проект, нажимаю Run-Debug вижу такое После нажатия Retry плата перезагружается. Вероятно JTAG заблокирован, ожидаемо. Но разве CCS не должен подключиться на этапе сброса, когда код еще не выполняется и JTAG еще не заблокировался? Target Test Connection судя по всему проходит без ошибок. Как начать отлаживать свой код? [Start] Execute the command: %ccs_base%/common/uscif/dbgjtag.exe -f %boarddatafile% -r -o -S pathlength -S integrity [Result] -----[Perform the standard path-length test on the JTAG IR and DR]----------- This path-length test uses blocks of 512 32-bit words. The test for the JTAG IR instruction path-length succeeded. The JTAG IR instruction path-length is 50 bits. The test for the JTAG DR bypass path-length succeeded. The JTAG DR bypass path-length is 3 bits. -----[Perform the Integrity scan-test on the JTAG IR]------------------------ This test will use blocks of 512 32-bit words. This test will be applied just once. Do a test using 0xFFFFFFFF. Scan tests: 1, skipped: 0, failed: 0 Do a test using 0x00000000. Scan tests: 2, skipped: 0, failed: 0 Do a test using 0xFE03E0E2. Scan tests: 3, skipped: 0, failed: 0 Do a test using 0x01FC1F1D. Scan tests: 4, skipped: 0, failed: 0 Do a test using 0x5533CCAA. Scan tests: 5, skipped: 0, failed: 0 Do a test using 0xAACC3355. Scan tests: 6, skipped: 0, failed: 0 All of the values were scanned correctly. The JTAG IR Integrity scan-test has succeeded. -----[Perform the Integrity scan-test on the JTAG DR]------------------------ This test will use blocks of 512 32-bit words. This test will be applied just once. Do a test using 0xFFFFFFFF. Scan tests: 1, skipped: 0, failed: 0 Do a test using 0x00000000. Scan tests: 2, skipped: 0, failed: 0 Do a test using 0xFE03E0E2. Scan tests: 3, skipped: 0, failed: 0 Do a test using 0x01FC1F1D. Scan tests: 4, skipped: 0, failed: 0 Do a test using 0x5533CCAA. Scan tests: 5, skipped: 0, failed: 0 Do a test using 0xAACC3355. Scan tests: 6, skipped: 0, failed: 0 All of the values were scanned correctly. The JTAG DR Integrity scan-test has succeeded. [End] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 22 марта, 2022 Опубликовано 22 марта, 2022 · Жалоба 02.03.2022 в 09:23, uriy сказал: После нажатия Retry плата перезагружается. Вероятно JTAG заблокирован, ожидаемо. Скорее всего что-то с подключением отладчика: или аппаратно (в проводах) или в свойствах подключения (в проекте). Чтобы полностью исключить влияние загружаемой программы, можно установить BOOT-пины в другой тип загрузки (не с параллельной флешки, а с UART например). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться