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

C674x - кэш и арбитраж

Пытаюсь запустить EDMA3 McASP1->L2RAM. Получаю BusError в EDMA3TC[0].ERRDET.

Думаю, что возможная проблема - с арбитражем доступа к L2RAM (DSP крутится в цикле в L2 и буфер DMA там же).

Значит надо сконфигурить приоритеты доступа CPU и EDMA к L2RAM.

В результате поисков в SPRS563 нашёл упоминание о регистре EDMAWEIGHT (L2 EDMA access control register), но нигде в даташитах на L137/C674x он не описан (только в старых даташитах типа spru610 на ядра C64x).

Но самое главное, что занимаемый EDMAWEIGHT адрес (0x01841000) согласно SPRS563 (OMAP-L137 Low-Power Applications Processor (Rev. D)) занимает регистр CPUARBU согласно SPRUFK5 (TMS320C674x DSP Megamodule Reference Guide).

У обоих доступ == R/W.

Да и вообще все регистры "C674x Cache Registers" (SPRS563) конфликтуют с "Arbitration Registers" (SPRUFK5).

Что за бардак? Кому верить???

Кто-нить сталкивался с этой проблемой?

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

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


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

Пытаюсь запустить EDMA3 McASP1->L2RAM. Получаю BusError в EDMA3TC[0].ERRDET.

Думаю, что возможная проблема - с арбитражем доступа к L2RAM (DSP крутится в цикле в L2 и буфер DMA там же).

Значит надо сконфигурить приоритеты доступа CPU и EDMA к L2RAM.

В результате поисков в SPRS563 нашёл упоминание о регистре EDMAWEIGHT (L2 EDMA access control register), но нигде в даташитах на L137/C674x он не описан (только в старых даташитах типа spru610 на ядра C64x).

Но самое главное, что занимаемый EDMAWEIGHT адрес (0x01841000) согласно SPRS563 (OMAP-L137 Low-Power Applications Processor (Rev. D)) занимает регистр CPUARBU согласно SPRUFK5 (TMS320C674x DSP Megamodule Reference Guide).

У обоих доступ == R/W.

Да и вообще все регистры "C674x Cache Registers" (SPRS563) конфликтуют с "Arbitration Registers" (SPRUFK5).

Что за бардак? Кому верить???

Кто-нить сталкивался с этой проблемой?

 

У Вас вообще получилось хоть как-нибудь заставить работать EDMA3 McASP->L2RAM? Я так и не смог найти нормального примера для EDMA3 без использования PSP и других драйвверов. Я пока внимательно читаю EDMA3 мануал, проц 6745.

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


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

Нет. Да мне пока особо не припёрло - поэтому пока отложил это - из L3 и из SDRAM нормально работает - и ладно.

Хотя тоже хотелось бы разобраться в этом вопросе.

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

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


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

Нет. Да мне пока особо не припёрло - поэтому пока отложил это - из L3 и из SDRAM нормально работает - и ладно.

Хотя тоже хотелось бы разобраться в этом вопросе.

 

А не могли бы запостить сюда пример инициализации EMDA3, а то мне до сих его не заставить работать. Совершенно не могу понять в чем дело!

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


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

А не могли бы запостить сюда пример инициализации EMDA3, а то мне до сих его не заставить работать. Совершенно не могу понять в чем дело!

 

С Вашей проблемой я не разобрался, но нашел в errate упоминание

DMA Access to L2 RAM Can Stall When DMA and C674x CPU Command Priorities

are Equal

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


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

А не могли бы запостить сюда пример инициализации EMDA3, а то мне до сих его не заставить работать. Совершенно не могу понять в чем дело!

Да там вроде ничего сложного.

Начальная:

-------------------------------------------------------------------

int i = ncell(EDMA3TC) - 1;

do {

EDMA3TC.ERREN = EDMA3TC.ERRCLR = B0 | B2 | B3;

EDMA3TC.RDRATE = 0;

} while (--i >= 0);

EDMA3CC.CCERRCLR = B16;

 

EDMA3CC.DMAQNUM[DMA_CH_FLASH_RX >> 3] =

EDMA3CC.DMAQNUM[DMA_CH_FLASH_RX >> 3] &

~(7 << (DMA_CH_FLASH_RX & 7) * 4) |

DMA_TC_FLASH_RX << (DMA_CH_FLASH_RX & 7) * 4;

EDMA3CC.DMAQNUM[DMA_CH_FLASH_TX >> 3] =

EDMA3CC.DMAQNUM[DMA_CH_FLASH_TX >> 3] &

~(7 << (DMA_CH_FLASH_TX & 7) * 4) |

DMA_TC_FLASH_TX << (DMA_CH_FLASH_TX & 7) * 4;

 

EDMA3CC.DRA[1].DRAE = ~0;

-------------------------------------------------------------------

потом инитите нужные CSL_Edma3ccParamSetRegs,

потом запуск:

EDMA3CC.EESR = EDMA3CC.ECR = EDMA3CC.SECR = EDMA3CC.EMCR =

1 << DMA_CH_FLASH_RX | 1 << DMA_CH_FLASH_TX;

EDMA3CC.IESR = EDMA3CC.ICR = 1 << DMA_CH_FLASH_RX;

 

С Вашей проблемой я не разобрался, но нашел в errate упоминание

DMA Access to L2 RAM Can Stall When DMA and C674x CPU Command Priorities

Да я вроде пробовал переносить код в другую область - не помогало.

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


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

У Вас вообще получилось хоть как-нибудь заставить работать EDMA3 McASP->L2RAM? Я так и не смог найти нормального примера для EDMA3 без использования PSP и других драйвверов. Я пока внимательно читаю EDMA3 мануал, проц 6745.

Качайте EDMA3 Low Level Driver. Оно того стоит.

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


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

Да там вроде ничего сложного.

Начальная:

-------------------------------------------------------------------

int i = ncell(EDMA3TC) - 1;

do {

EDMA3TC.ERREN = EDMA3TC.ERRCLR = B0 | B2 | B3;

EDMA3TC.RDRATE = 0;

} while (--i >= 0);

EDMA3CC.CCERRCLR = B16;

 

EDMA3CC.DMAQNUM[DMA_CH_FLASH_RX >> 3] =

EDMA3CC.DMAQNUM[DMA_CH_FLASH_RX >> 3] &

~(7 << (DMA_CH_FLASH_RX & 7) * 4) |

DMA_TC_FLASH_RX << (DMA_CH_FLASH_RX & 7) * 4;

EDMA3CC.DMAQNUM[DMA_CH_FLASH_TX >> 3] =

EDMA3CC.DMAQNUM[DMA_CH_FLASH_TX >> 3] &

~(7 << (DMA_CH_FLASH_TX & 7) * 4) |

DMA_TC_FLASH_TX << (DMA_CH_FLASH_TX & 7) * 4;

 

EDMA3CC.DRA[1].DRAE = ~0;

-------------------------------------------------------------------

потом инитите нужные CSL_Edma3ccParamSetRegs,

потом запуск:

EDMA3CC.EESR = EDMA3CC.ECR = EDMA3CC.SECR = EDMA3CC.EMCR =

1 << DMA_CH_FLASH_RX | 1 << DMA_CH_FLASH_TX;

EDMA3CC.IESR = EDMA3CC.ICR = 1 << DMA_CH_FLASH_RX;

 

 

Да я вроде пробовал переносить код в другую область - не помогало.

 

 

Поправил баги, появилось прерывание. Пока для отладки копирую данные из одного буфера в другой. Прерывание приходит, а данные не копируются :( появляется Read Addressing Error, хотя в PARAMSET указан правильный адрес буфера...

 

 

Качайте EDMA3 Low Level Driver. Оно того стоит.

 

Я вот только не понял, можно его без DSP/BIOS использовать?

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


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

Вопрос снят. Использование возможно только с DSP/BIOS. А у меня uTron используется в качестве real-time OS

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


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

Это, извините, как это? Если возможно хоть в одной программе, значит возможно и в остальных!

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


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

Это, извините, как это? Если возможно хоть в одной программе, значит возможно и в остальных!

 

Насколько я понял, в драйвере используются системные функции DSP/BIOS (где-то на форуме видел, что точно используются семафоры). Соответсвенно драйвер не будет работать без DSP/BIOS

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


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

Да там (в EDMA3) вроде ничего сложного - всё то же, что и в других контроллерах DMA.

Зачем этот драйвер если не используется DSP/BIOS? Описания в документации по EDMA3 вполне достаточно, чтобы его запустить.

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


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

Да там (в EDMA3) вроде ничего сложного - всё то же, что и в других контроллерах DMA.

Зачем этот драйвер если не используется DSP/BIOS? Описания в документации по EDMA3 вполне достаточно, чтобы его запустить.

 

В приницпе да, но вот отсутствие обычных примеров немного затянуло для меня окучивание EDMA3, сейчас вроде все заработало.

 

В приницпе да, но вот отсутствие обычных примеров немного затянуло для меня окучивание EDMA3, сейчас вроде все заработало.

 

Да, кстати, у меня нормально работает McASP0->L2RAM

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


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

Да, кстати, у меня нормально работает McASP0->L2RAM

У меня McASP1 ;)

Да - надо где-то покурить конфигурирование L2RAM. Но пока особо не критично - планирую использовать скорее всего L2RAM для более

критичных по скорости задач, чем DMA.

Вы его конфигурили специально для EDMA3 или оно само так получилось?

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


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

У меня McASP1 ;)

Да - надо где-то покурить конфигурирование L2RAM. Но пока особо не критично - планирую использовать скорее всего L2RAM для более

критичных по скорости задач, чем DMA.

Вы его конфигурили специально для EDMA3 или оно само так получилось?

 

Я думаю McASP0 или McASP1 - не принципиально!

У меня сначала тоже была ошибка BUSERR, но потом я выснил что не так (не разобрался до конца почему) сконфигурил память процессор. Если внимательно присмотреться к документу SPRS377D.pdf, то в таблице memory map будет видно, что L2RAM раположена по двум разным адресам. Как только я стал использовать вторые адреса, все заработало!

Почему так, еще не понял. Сейчас некогда с памятью разбираться.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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