Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-май-23 08:17

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 96 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-окт-22 15:29 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
Cas писал(а):
Petr, по моему вопросу ничего не подскажете? Может тогда поделитесь рабочим примером для блока CRYPT?

К сожалению, примера у меня пока что нет...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-окт-22 16:18 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 2009-янв-20 10:05
Сообщения: 777
В начале темы добавлены схематик, pcb и описание платы.

_________________
Правила форума!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-08 14:26 
Не в сети

Зарегистрирован: 2012-фев-07 08:28
Сообщения: 9
Вложение:
test.zip [15.1 КБ]
Скачиваний: 102
Прошу рассмотреть приложенный проект и обратить внимание на содержимое файла test.asm строки с 24 по 30 (после метки Ln).

Код:
   .global _xb,_db,_x0
   .mmregs
   .text
   .global _test
_test:
   stm      #_x0,AR2   
   stm      #_db,AR3   ;2000h
   stm      #_xb,AR6   ;2100h

;Обнуление массивов
   mvmm   AR3,AR0
   rptz   A,#1023
   stl      A,*AR0+   

   mvmm   AR6,AR0
   rptz   A,#1023
   stl      A,*AR0+   

   stm      #1,AR0
   
   ld      #05555H,A
   st      #0AAAAH,*AR2   ;x0
Ln:
   stm      #32,BK
   stl      A,*AR6+%      ;0x5555->xb

   stm      #8,BK
;   nop
;   nop
   mvdd   *AR2, *AR3+0%   ;x0->db
   b      Ln

По замыслу, круговые буферы:
_db (адреса:0x2000..0x2007) циклически заполняется значением 0xAAAA;
_xb (адреса:0x2100..0x211F) циклически заполняется значением 0x5555;
На практике значением 0xAAAA заполняется область памяти 0x2000..0x201f;
буфер _xb заполняется правильно.
Похоже в данной ситуации регистр BK не успел обновится на момент выполнения команды
mvdd *AR2, *AR3+0%.
В похожей ситуации команда
stl A,*AR6+%
выполняется корректно.
Если раскомментировать операторы nop, то вся программа выполняется правильно.
В спецификации 1901ВЦ1Т я не нашел информации описывающей данный случай.
Прошу помочь разобраться в данной ситуации.
Где можно найти информацию о подобных особенностях 1901ВЦ1Т.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-11 14:45 
Не в сети

Зарегистрирован: 2010-июн-04 13:52
Сообщения: 29
Откуда: АО "ПКК Миландр"
4Dm писал(а):
Вложение:
test.zip
Прошу рассмотреть приложенный проект и обратить внимание на содержимое файла test.asm строки с 24 по 30 (после метки Ln).

Код:
   .global _xb,_db,_x0
   .mmregs
   .text
   .global _test
_test:
   stm      #_x0,AR2   
   stm      #_db,AR3   ;2000h
   stm      #_xb,AR6   ;2100h

;Обнуление массивов
   mvmm   AR3,AR0
   rptz   A,#1023
   stl      A,*AR0+   

   mvmm   AR6,AR0
   rptz   A,#1023
   stl      A,*AR0+   

   stm      #1,AR0
   
   ld      #05555H,A
   st      #0AAAAH,*AR2   ;x0
Ln:
   stm      #32,BK
   stl      A,*AR6+%      ;0x5555->xb

   stm      #8,BK
;   nop
;   nop
   mvdd   *AR2, *AR3+0%   ;x0->db
   b      Ln

По замыслу, круговые буферы:
_db (адреса:0x2000..0x2007) циклически заполняется значением 0xAAAA;
_xb (адреса:0x2100..0x211F) циклически заполняется значением 0x5555;
На практике значением 0xAAAA заполняется область памяти 0x2000..0x201f;
буфер _xb заполняется правильно.
Похоже в данной ситуации регистр BK не успел обновится на момент выполнения команды
mvdd *AR2, *AR3+0%.
В похожей ситуации команда
stl A,*AR6+%
выполняется корректно.
Если раскомментировать операторы nop, то вся программа выполняется правильно.
В спецификации 1901ВЦ1Т я не нашел информации описывающей данный случай.
Прошу помочь разобраться в данной ситуации.
Где можно найти информацию о подобных особенностях 1901ВЦ1Т.


Ядро DSP 1901ВЦ1Т совместимо с TMS C54 и возможные конфликты работы конвейера в ASM программе можно
увидеть в WARNING asm транслятора среды CCS3.3 если их вкл в настройках проекта. В Вашем случае после трансляции
получилось следующее:
WARNING! at line 299: [W0005] Potential Pipeline Conflict: BK: 1
Slot Latency
stl A,*AR6+% ;0x5555->xb
WARNING! at line 304: [W0005] Potential Pipeline Conflict: BK: 1
Slot Latency
mvdd *AR2, *AR3+0% ;x0->db

те правильно надо считать
stm #32,BK
nop
nop
stl A,*AR6+% ;0x5555->xb

и

stm #8,BK
nop
nop
mvdd *AR2, *AR3+0% ;x0->db


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-12 08:37 
Не в сети

Зарегистрирован: 2012-фев-07 08:28
Сообщения: 9
4Dm писал(а):
nikita писал(а):
4Dm писал(а):
Вложение:
test.zip
Прошу рассмотреть приложенный проект и обратить внимание на содержимое файла test.asm строки с 24 по 30 (после метки Ln).

Код:
   .global _xb,_db,_x0
   .mmregs
   .text
   .global _test
_test:
   stm      #_x0,AR2   
   stm      #_db,AR3   ;2000h
   stm      #_xb,AR6   ;2100h

;Обнуление массивов
   mvmm   AR3,AR0
   rptz   A,#1023
   stl      A,*AR0+   

   mvmm   AR6,AR0
   rptz   A,#1023
   stl      A,*AR0+   

   stm      #1,AR0
   
   ld      #05555H,A
   st      #0AAAAH,*AR2   ;x0
Ln:
   stm      #32,BK
   stl      A,*AR6+%      ;0x5555->xb

   stm      #8,BK
;   nop
;   nop
   mvdd   *AR2, *AR3+0%   ;x0->db
   b      Ln

По замыслу, круговые буферы:
_db (адреса:0x2000..0x2007) циклически заполняется значением 0xAAAA;
_xb (адреса:0x2100..0x211F) циклически заполняется значением 0x5555;
На практике значением 0xAAAA заполняется область памяти 0x2000..0x201f;
буфер _xb заполняется правильно.
Похоже в данной ситуации регистр BK не успел обновится на момент выполнения команды
mvdd *AR2, *AR3+0%.
В похожей ситуации команда
stl A,*AR6+%
выполняется корректно.
Если раскомментировать операторы nop, то вся программа выполняется правильно.
В спецификации 1901ВЦ1Т я не нашел информации описывающей данный случай.
Прошу помочь разобраться в данной ситуации.
Где можно найти информацию о подобных особенностях 1901ВЦ1Т.


Ядро DSP 1901ВЦ1Т совместимо с TMS C54 и возможные конфликты работы конвейера в ASM программе можно
увидеть в WARNING asm транслятора среды CCS3.3 если их вкл в настройках проекта. В Вашем случае после трансляции
получилось следующее:
WARNING! at line 299: [W0005] Potential Pipeline Conflict: BK: 1
Slot Latency
stl A,*AR6+% ;0x5555->xb
WARNING! at line 304: [W0005] Potential Pipeline Conflict: BK: 1
Slot Latency
mvdd *AR2, *AR3+0% ;x0->db

те правильно надо считать
stm #32,BK
nop
nop
stl A,*AR6+% ;0x5555->xb

и

stm #8,BK
nop
nop
mvdd *AR2, *AR3+0% ;x0->db


Очень благодарен Вам за ответ!

Наблюдается следующее если вставить не 2 nop а только 1 nop, то предупреждения нет,
но программа все равно работает неправильно.
Интересно, а можно ли знать точно о возникновении подобного рода ошибок?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-14 07:26 
Не в сети

Зарегистрирован: 2013-апр-23 20:56
Сообщения: 10
Здравствуйте. Столкнулся с такой проблемой: после разрешения прерываний от DMA процессор тут же переходит в обработчик, да же если ни один канал еще не настроен. После выхода из обработчика снова в него возвращается, по всей видимости запрос на прерывание не снимается, и так до бесконечности. Кто-нибудь с эти сталкивался?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-14 13:25 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-авг-07 09:58
Сообщения: 132
Cas писал(а):
Здравствуйте. Столкнулся с такой проблемой: после разрешения прерываний от DMA процессор тут же переходит в обработчик, да же если ни один канал еще не настроен. После выхода из обработчика снова в него возвращается, по всей видимости запрос на прерывание не снимается, и так до бесконечности. Кто-нибудь с эти сталкивался?

viewtopic.php?f=33&t=234


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-14 13:55 
Не в сети

Зарегистрирован: 2013-апр-23 20:56
Сообщения: 10
andrey.s писал(а):
http://forum.milandr.ru/viewtopic.php?f=33&t=234

Спасибо. Читал уже, но проблему пока решить не удалось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-14 14:37 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-авг-07 09:58
Сообщения: 132
Cas писал(а):
andrey.s писал(а):
http://forum.milandr.ru/viewtopic.php?f=33&t=234

Спасибо. Читал уже, но проблему пока решить не удалось.

Что делали чтоб решить проблему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-ноя-15 09:45 
Не в сети

Зарегистрирован: 2013-апр-23 20:56
Сообщения: 10
Кажется разобрался. Работает. Только теперь jtag отваливается после старта программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2014-фев-11 14:09 
Не в сети

Зарегистрирован: 2009-ноя-26 08:48
Сообщения: 43
Откуда: г. Краснодар
Решил написать драйвер USB Device для CMSIS!
Настроил тактирование;
Выбрал режим Slave;
Разрешил работу приёмника и передатчика USB;
Разрешил конечные точки;
Жду подключения, считывая регистр MDR_USB->SLS:
и наблюдаю, что вне зависимости от подключения USB-кабеля значение регистра остаётся равным 0x04 (при не тактируемом USB 0x00).

Вопрос: Что означает четвёртый бит и/или что я забыл настроить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2014-фев-11 15:42 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 733
Откуда: АО "ПКК Миландр"
VK писал(а):
Решил написать драйвер USB Device для CMSIS!
Настроил тактирование;
Выбрал режим Slave;
Разрешил работу приёмника и передатчика USB;
Разрешил конечные точки;
Жду подключения, считывая регистр MDR_USB->SLS:
и наблюдаю, что вне зависимости от подключения USB-кабеля значение регистра остаётся равным 0x04 (при не тактируемом USB 0x00).

Вопрос: Что означает четвёртый бит и/или что я забыл настроить?

USB блок в этом контроллере и в серии 1986ВЕ9x одинаковый. Посмотрите пример работы с USB для 1986ВЕ9X, там реализован виртуальный COM-порт (работает в эхо-режиме, данные, приходящие на USB возвращаются обратно).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2014-фев-12 15:18 
Не в сети

Зарегистрирован: 2009-ноя-26 08:48
Сообщения: 43
Откуда: г. Краснодар
Причина найдена!!!!!!
Неправильная установка резисторов R29, R30 на отладочной плате 1901ВЦ1 (должны быть установлены перпендикулярно длинной стороне платы, а были установлены параллельно....)
Перепаяли, USB ожил.
Будем продолжать писать драйвер...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2014-окт-03 12:24 
Не в сети

Зарегистрирован: 2012-июн-01 14:12
Сообщения: 38
Добрый день! Подскажите как правильно сбрасывать прерывание( возможно настроил не полностью или неправильно).

По задумке хотел получить следующее:
1. Настроить McBSP на работу от внешней синхронизации и фреймового импульса.
2. Настроить прерывание от McBSP по условию FIFO полупуст.
3. Записывать слово в прервании.
В цикле:
4. При записи полной очереди - зажигать лампочку.
5. Если очередь не полна - лампочку гасить.

Так как фреймового импульса нет, то должны былы заполнится FIFO, а прерывания прекратится.

Однако наблюдаю следующую картину. - прерывания вызываются много раз (непрервно). При этом бесконечный цикл, в котором лампочка зажигается или гасится, не получает управления. Т.е. из прерывания я не выхожу. DSP->IRQ сбросить пытаюсь, но бит остается.
Биты заполнености очереди нормальные.

Второй вариант. Прерывание ни разу не срабатывает. Помогает сброс студии CMA-ARM или J-Em.

Что я неправильно делаю ?

Проект во вложении.


Вложения:
2.ZIP [388.93 КБ]
Скачиваний: 79
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2014-окт-08 12:20 
Не в сети

Зарегистрирован: 2012-июн-01 14:12
Сообщения: 38
Некоторые результаты работы с прерваниями.

Ситуация следующая. В начале программы принудительно (программно) генерируется прерывание от DSP ядра - (на самом деле RISC пишет DSP_IRQ)

Затем обрабатывается прерывание, где сбрасывается этот флаг. Так вот по логике прерывание должно вызваься один раз, и больше не вызыватся. Однако

наблюдается вызов прерывания дважды, что видно по счетчику.

Есть гипотеза, что при работе из-под RISC ядра, влияет мост пересинхронизации на процесс сброса прерываний. При введении дополнительной, искусственной

задержки, прерывание выполняется один раз.

Код

Код:
void DSP_IRQ_IRQHandler(void)
{
        DSP_IRQ->IRQ = 0x0001;
        PORTB->SET = 1 << 11;
        sleep_clk(5); // 5 - 2 вызова, 6 - 1
        Alt++;
}


Несмотря на эту ситуацию будем считать, прерывание работает и сбрасывается.

Аналогично я работаю с прерыванием от McBSP.

Настройка события прерывания FIFO полупуст

Код:
   // SPCRH
   DSP_BSP1->SPSA = MCBSP_SPSA_SPCRH_NUM;// Ïðåðûâàíèå îò ïåðåäàò÷èêà
   DSP_BSP1->CtrlD = (
                       0
                       //|((0 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // XRDY
                       //|((1 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // XSOB
                       //|((2 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // XEOB
                       //|((3 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // XSYNCERR
                       |((4 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // FIFO
                       //|((5 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // FIFO
                       //|((6 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // FIFO
                       //|((7 <<MCBSP_SPCRH_XINTM_SHIFT_FIELD)& MCBSP_SPCRH_XINTM_SHIFT_MASK)  // FIFO
                     ) << (16*(MCBSP_SPSA_SPCRH_NUM&1));


Обработчик

Код:
void DSP_BSP1_IRQHandler(void)
   {
   *(uint32_t *)(0x30000078) = 0xFFFF;
   DSP_IRQ->IRQ = 0x7FFF;//(1 << 6);
   NVIC->ICPR[0] = 0xFFFFFFFF;
   if (
       ((1<<MCBSP_SPSR_XFIFOF_SHIFT_FIELD)&(DSP_BSP1->CtrlD)) == 0
      )
      {
      DataSend++;
      DSP_BSP1->DXR = DataSend;
      Alt2++;
      }
   else
      {
      Alt1++;
      }
   temp0 = DSP_IRQ->IRQ;
   }


Я даже специально устанавливаю и сбрасываю ВСЕ прерывания. Только вот ощущение, что прерывания 6 бита и 13 (с нуля) не сбрасываются,
вне зависимости от задержки в мосте пересинхронизации. Почему? Да потому, что внешнего синхроимпульса нет, поэтому очередь не опустошается, но заполняется и прерывания в конце концов вызываться должны перестать, и флаг прерывания должен сбросится несмотря на задержку в мосте пересинхронизации. Жду я несколько секунд - заведомо должно все сработать.(если нет каких-то особенностей) Судя по счетчикам, в прерывание восемь раз в FIFO поступали данные, поскольку пишем пока флаг позволяет. А затем прерывание вызывается несколько сотен тысяч раз, чем дольше жду дем больше вызовов. При этом основной цикл, либо вообще не вызвается, либо вызывается 1 или 2 раза, то есть, фактически, управления не получает.

В чем проблема? Прошу ответить сотрудников фирмы Миландр (или кто заинтересовался и сможет объяснить).


Вложения:
Комментарий к файлу: Файл проекта
2.ZIP [399.92 КБ]
Скачиваний: 77
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 96 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB