Перейти к содержанию
    

OMAP-L138

Доброе время суток!

 

Поставлена задача - плотно освоить 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+

 

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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?  :wink:

26 минут назад, __inline__ сказал:

Где брать хедеры на периферию OMAP-L138?  Самому из даташита делать и из огрызков с гитхаба(как я это делал для C6745) ?

Зачем какие-то огрызки если TI предоставляет вполне качественные хидеры на периферию? Я брал оттуда. Вроде были они в примерах к CCS.

Но можно из по даташитам самостоятельно.

26 минут назад, __inline__ сказал:

В моем распоряжении UART и светодиоды + предыдущий опыт с ARM9 и C6000+

UART конечно хорошо, но мне в своё время так и не удалось заставить OMAP-L137 грузиться с него: Затыкалось в процессе загрузки .ais-файла на разных стадиях загрузки. Все опции AISgen перерыл - без толку.

Так что при отладке грузил с JTAG, а в боевом режиме - SPI-FLASH.

 

PS: Кстати - в OMAP-L137 были баги чипа, не описанные в errata. На которые мы благополучно наступили и искали их целый месяц.  :dash2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 minutes ago, jcxz said:

Думаю и для L138 должна создаваться комплексная прошивка. Формата .ais. Утилитой AISgen.

 

Это очень хорошо, что AISgen сможет разрулить код для ARM и DSP.  А я думал, что придётся программу для DSP делать бинарником на стартовый адрес, который захардкожен или через ключ -PIC генерить Position Independent Code :acute:и потом его встраивать в исходник через bin-to-h

 

21 minutes ago, jcxz said:

Вы же вроде принципиально не используете JTAG?  :wink:

 

Да вот как-то не ощущаю в нём надобности. Для хоббийных поделок моя жаба душит на него уделить время :wink:

 

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

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, __inline__ сказал:

А где эти хедеры лежат?  Всё что я видел, это - огромная структура с полями, с большой вложенностью, где мострячат что-то вроде:

Очевидно в: CCS\C6000\CSL\INCLUDE

1 час назад, __inline__ сказал:

AISgen позволит настроить DDR SDRAM, или надо самому инициализировать?

Мне позволял.

1 час назад, __inline__ сказал:

Можно ли одновременно использовать оба ядра - ARM и DSP?

А зачем как вы думаете несколько ядер если бы они не могли работать одновременно?  :unknw:

Можно хоть все 4 (+2*PRU). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, jcxz said:

А зачем как вы думаете несколько ядер если бы они не могли работать одновременно?  :unknw:

Можно хоть все 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 (обратный ход луча по кадру)  есть в виде прерывания?

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, __inline__ сказал:

В даташите на OMAP сказано, что EMIFB может работать с памятью DDR2.  На TI-шном форуме прочитал, что частота шины не может превысить 152 МГц (треть от частоты ядра 456 МГц).  Выходит эффективная передача DDR2 идёт на 152*4 = 608 МГц ? Всё верно?

Не знаю, у L137 и L138 насколько помню - интерфейсы внешней памяти отличаются. L137 не поддерживает DDR.

А почему читаете о возможностях МК не в мануале, а на форуме? У TI хорошая документация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, jcxz said:

А почему читаете о возможностях МК не в мануале, а на форуме? У TI хорошая документация.

 

У TI действительно хорошая документация. Но для того чтобы её найти, нужно ещё правильно сформировать запрос.  ну и большинство ссылок уже просто убитые :sorry:

Кое-как наскрёб AISgen для L138 и Pin-конфигуратор.  Ситуация повторяется также как и с C6745, приходится рыть архивы или форумы

5 minutes ago, jcxz said:

Не знаю, у L137 и L138 насколько помню - интерфейсы внешней памяти отличаются. L137 не поддерживает DDR.

 

Я уже вдоволь поигрался с SDRAM 152 МГц, хочется чего-то быстрее.  Да и 64 МБ на 1 чип.  А тут можно 128 МБ поставить или даже больше.  И быстродействие в 4 раза поднять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, __inline__ сказал:

У TI действительно хорошая документация. Но для того чтобы её найти, нужно ещё правильно сформировать запрос.  ну и большинство ссылок уже просто убитые :sorry:

Я как-то не испытывал с этим проблем. И к форумам почти не обращался.

А ищется документация на периферию легко:

Открываем "TMS320C674x/OMAP-L1x Processor Peripherals Overview Reference Guide" (SPRUFK9D), а из него уже идут ссылки на .pdf всех периферийных модулей. Ничего сложного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

1 hour ago, __inline__ said:

А откуда второе удвоение в DDR2?

А нет там никакого "второго удвоения".

 

56 minutes ago, jcxz said:

Открываем "TMS320C674x/OMAP-L1x Processor Peripherals Overview Reference Guide" (SPRUFK9D), а из него уже идут ссылки на .pdf всех периферийных модулей. Ничего сложного.

Этот маразм давно в единый TRM свели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Маразм происходит на просторах нашей страны.  Девкит на OMAPL138 продают за 27 - 63 тысячи рублей. Идут мимо...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В чём именно маразм? Я в своё время свою отладку с L137 за 500+$ покупал. Так что - ничего не изменилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, jcxz said:

В чём именно маразм?

 

В том, что камню 100 лет в обед, а продают по цене 2012-го года. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите начать работу с L138. Имеется чужая работающая плата с этим процом, код там грузится из параллельной флешки.

Хочу начать работу пока с ARM ядром и выполнять код из внутренней памяти.

Опыта с процами от TI и CCS нет. Применяли контроллеры STM и DSP Blackfin.

Использую JTAG SAU510-USB. В CCS5 создал проект, нажимаю Run-Debug вижу такое

image.png.5d56aab3793be0401814c7b9cc7342a7.png

После нажатия 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]

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

02.03.2022 в 09:23, uriy сказал:

После нажатия Retry плата перезагружается. Вероятно JTAG заблокирован, ожидаемо.

Скорее всего что-то с подключением отладчика: или аппаратно (в проводах) или в свойствах подключения (в проекте).

Чтобы полностью исключить влияние загружаемой программы, можно установить BOOT-пины в другой тип загрузки (не с параллельной флешки, а с UART например).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...