Миландр

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

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




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

Зарегистрирован: 2010-июн-04 13:52
Сообщения: 29
Откуда: АО "ПКК Миландр"
Nik писал(а):

2. По спецификации DMA (DSP) имеет 16 каналов, в проекте используются 6 и 22 (!!!). В демо-проекте для Keil'a (работа с кодеком и DMA (DSP)) использовались 6 и 7 каналы (аудиокодек)-там было понятно, а здесь не понятно. :shock:


У DMA DSP 16 каналов, а DMA структур 32, необходимых для работы DMA,
каждая структура описывает: откуда брать данные, куда класть при возникновении сигнала от источника канала
в примере это
static struct __DMA_Ctrl_Struct _DMA_Ctrl[32];
первые 16 основные, а следующие 16 альтернативные
В примере DMA используется в режиме ping-pong

источники каналов DMA DSP в спец. стр 691


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

Зарегистрирован: 2013-фев-15 10:08
Сообщения: 13
nikita писал(а):
Nik писал(а):

2. По спецификации DMA (DSP) имеет 16 каналов, в проекте используются 6 и 22 (!!!). В демо-проекте для Keil'a (работа с кодеком и DMA (DSP)) использовались 6 и 7 каналы (аудиокодек)-там было понятно, а здесь не понятно. :shock:


У DMA DSP 16 каналов, а DMA структур 32, необходимых для работы DMA,
каждая структура описывает: откуда брать данные, куда класть при возникновении сигнала от источника канала
в примере это
static struct __DMA_Ctrl_Struct _DMA_Ctrl[32];
первые 16 основные, а следующие 16 альтернативные
В примере DMA используется в режиме ping-pong

источники каналов DMA DSP в спец. стр 691


Вопрос:
Можно ли задавать базовый адрес управляющих структур DMA в памяти данных, там где выделил место компилятор, или нужно использовать специальные процедуры?
В вашем примере структуры _DMA_Ctrl[32] определяются по адресу 0х00000100, но в спецификации написано, что первые 9 разрядов базового адреса управляющих структур должны быть 0. Как помогает сдвиг влево (по проекту)? Или структуры _DMA_Ctrl[32] не имеют ничего общего с базовыми структурами упр.данных DMA.


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

Зарегистрирован: 2010-июн-04 13:52
Сообщения: 29
Откуда: АО "ПКК Миландр"
Nik писал(а):
nikita писал(а):
Nik писал(а):

2. По спецификации DMA (DSP) имеет 16 каналов, в проекте используются 6 и 22 (!!!). В демо-проекте для Keil'a (работа с кодеком и DMA (DSP)) использовались 6 и 7 каналы (аудиокодек)-там было понятно, а здесь не понятно. :shock:


У DMA DSP 16 каналов, а DMA структур 32, необходимых для работы DMA,
каждая структура описывает: откуда брать данные, куда класть при возникновении сигнала от источника канала
в примере это
static struct __DMA_Ctrl_Struct _DMA_Ctrl[32];
первые 16 основные, а следующие 16 альтернативные
В примере DMA используется в режиме ping-pong

источники каналов DMA DSP в спец. стр 691


Вопрос:
Можно ли задавать базовый адрес управляющих структур DMA в памяти данных, там где выделил место компилятор, или нужно использовать специальные процедуры?
В вашем примере структуры _DMA_Ctrl[32] определяются по адресу 0х00000100, но в спецификации написано, что первые 9 разрядов базового адреса управляющих структур должны быть 0. Как помогает сдвиг влево (по проекту)? Или структуры _DMA_Ctrl[32] не имеют ничего общего с базовыми структурами упр.данных DMA.


Правильно будет зафиксировать &_DMA_Ctrl[0] в _test1.cmd с учетом требования: первые 9 bits -> 0
и делается это так:
в _test1.cmd
_DMA_BP: 0x0100 PAGE 1
в модуле С:
#pragma DATA_SECTION(_DMA_Ctrl,"DMA_BP");
static struct __DMA_Ctrl_Struct _DMA_Ctrl[32];

Adr 0х0100 подходит тк он 16-ти битный, хоть и выдан линкером, делаем его 32-х битным сдвигом влево
и получаем adr подходящий по описанию.
Структуры _DMA_Ctrl[32] есть базовые структуры упр.данных DMA


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

Зарегистрирован: 2009-ноя-26 08:48
Сообщения: 43
Откуда: г. Краснодар
Доброго времени суток!
А кто-нибудь работал с таймером DSP ядра 1901ВЦ1?
В чём собственно вопрос: сколько таймеров в DSP ядре?
Согласно списанию spec_1901VC1.pdf (см. стр. 686) есть 1 таймер управляемый регистрами (адреса со стороны DSP):
0038h TIM Регистр таймера
0039h PRD Регистр периода таймера
003Ah TCR Регистр управления таймера.

В принципе всё работает (считает, прерывания генерит и т.д.), но если подключить c54xregs.h от Texas Instruments то в нём указано:
#define TIM *(volatile unsigned int *)0x24
#define PRD *(volatile unsigned int *)0x25
#define TCR *(volatile unsigned int *)0x26
И тоже всё работает при тех же настройках, те же прерывания и т.д. только «на глаз» тот, что по адресам Миландра считает быстрее!! чем по адресам Texas Instruments.


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

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1132
Откуда: Тула
VK Добавлено: 2013-май-10 02:18 писал(а):
Добавлено: 2013-май-10 02:18
<...>
И тоже всё работает при тех же настройках, те же прерывания и т.д. только «на глаз» тот, что по адресам Миландра считает быстрее!! чем по адресам Texas Instruments.

не стОит работать в ночь по праздникам =)

_________________
сочувствующий…


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

Зарегистрирован: 2009-ноя-26 08:48
Сообщения: 43
Откуда: г. Краснодар
Очень хочу запустить DSP со стороны ARM.
Для этого вызываю код:
Код:
void init()
{
   // 1. Подать синхросигнал DSP_CLK (регистр DSP_CLOCK модуля управления
   // синхросигналами RISC).
   trg_init();

   // 2. Включить память DSP (регистр DSP_CONTROL_STATUS). При этом
   // удостоверится что общий сброс подсистемы DSP неактивен.
   RST_CLK->DSP_CONTROL_STATUS &=
      !(RST_CLK_DSP_CONTROL_STATUS_RST_DSP_ALL | RST_CLK_DSP_CONTROL_STATUS_RST_DSP_MEM);

   // 3. Записать в память программи данных DSP образ программного
   // обеспечения (программу, необходимые константы, таблицу векторов
   // прерыаний).
   dsp_write_pram(VE_FMR_BASE, (uint16_t *)ve_fwr, sizeof(ve_fwr) / 2);

   // 4. Снять сброс с ядра DSP и, при необходимости, с периферии (регистр DSP_CONTROL_STATUS).
   //RST_CLK->DSP_CONTROL_STATUS &= ~(RST_CLK_DSP_CONTROL_STATUS_RST_DSP_CPU | RST_CLK_DSP_CONTROL_STATUS_RST_DSP_PER);
}

void trg_init()
{
   RST_CLK->HS_CONTROL = 0x01;                  // HSE oscillator On
   while((RST_CLK->CLOCK_STATUS & 0x04) == 0);  // wait until HSE is not ready
   RST_CLK->CPU_CLOCK = 0x00000002;             // CPU_C1 = HSE = 8MHz
   RST_CLK->DSP_CLOCK = 0x00000002;             // DSP_C1 = HSE = 8MHz

   RST_CLK->PLL_CONTROL = 0x003003C0;           // PLL_CPU_MULL = 3+1, CPU Freq. = ?MHz
                                                // PLL_DSP_MULL = 3+1, DSP Freq. = ?MHz
                                                // PLL_USB_MULL = _, DSP Freq. = ?MHz
   RST_CLK->PLL_CONTROL |= 0x00010005;          // PLL CPU On, PLL DSP On, PLL USB On

   while((RST_CLK->CLOCK_STATUS & 0x02) == 0);  // wait until PLL CPU is not ready
   RST_CLK->PER_CLOCK = 0xffffffff;
   EEPROM->CMD = 3 << 3;                        // Delay = 3
   RST_CLK->PER_CLOCK &= ~(1<<3);               // disable clock EEPROM_CTRL
   RST_CLK->CPU_CLOCK = 0x00000106;             // Set CPU clock ?MHz

   while((RST_CLK->CLOCK_STATUS & 0x08) == 0);  // wait until PLL DSP is not ready
   RST_CLK->DSP_CLOCK = 0x00000106;             // Enable Clock for DSP

   while((RST_CLK->CLOCK_STATUS & 0x01) == 0);  //wait until USB PLL is run and stability
   RST_CLK->USB_CLOCK = 0x04;


   // AUC_CLK enable: AUC_C3 = AUC_C2 = 2.03125MHz;
   // AUC_C2 = USB_PLL;
   // AUC_C1 = x; (2.03125MHz/256 = 7934.5Hz)
   RST_CLK->ADC_MCO_CLOCK = 0x8D200000;
   DSP_CLK->CLKMD = 0xd030;//0xFFFF;//0x7E58;            // Enable Codec
}

#define DSP_RISC_PRAM_BASE       0x30020000
#define dsp_write_pram(addr, data, length)   dsp_write(DSP_RISC_PRAM_BASE, addr, data, length)
void dsp_write(uint32_t base, uint16_t offset, uint16_t *data, unsigned int length)
{
   uint16_t *dst;
   dst = (uint16_t *)(base + offset * 2);
   while (length-- > 0) {
     while (!(RST_CLK->DSP_CONTROL_STATUS & RST_CLK_DSP_CONTROL_STATUS_BRTRD)) { ; }
      *dst++ = *data++;
   }
}

ve_fwr – это образ памяти программ DSP (0xF800-0xFFFF) полученный из Code Composer. Вся программа DSP размещена в указанной области, таблица векторов прерываний на штатном месте 0xF800.

Собственно в чём проблема:
1)Если загрузить DSP-ядро из Code Composer, а ARM – из Фитона, то всё работает.
2) Если выполнить указанный код и записать память программ DSP из ARM (строка dsp_write_pram(…)), то содержимое памяти DSP в точности соответствует содержимому при загрузке через Code Composer (кроме см. п. 3). Но программа не работает.
3) Как при загрузке образа памяти программ DSP так и без загрузки при сбросе контроллера кто-то модифицирует таблицу векторов прерывания DSP, а именно вектор сброса меняется на безусловный переход на вектор сброса (т.е. зацикливается программа).

ВОПРОС: Как правильно инициализировать ARM-DSP для корректной передачи программы и запуска DSP из ARM?


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

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
1). При инициализации тактовых частот DSP в регистре DSP_CLK->CLKMD всё-таки необходимо включать синхросигнал памяти данных сопроцессора, то есть
Код:
DSP_CLK->CLKMD = 0xF030;

2). Раскомментировать 4-й пункт и добавить одну строчку.
Код:
RST_CLK->DSP_CONTROL_STATUS &= ~(RST_CLK_DSP_CONTROL_STATUS_RST_DSP_CPU | RST_CLK_DSP_CONTROL_STATUS_RST_DSP_PER);
RST_CLK->DSP_CONTROL_STATUS |= RST_CLK_DSP_CONTROL_STATUS_HOLD;

3). Модифицирует таблицу векторов прерываний в данном случае отладчик Phyton'а для корректного подключения CodeComposerStudio к DSP ядру.


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

Зарегистрирован: 2009-ноя-26 08:48
Сообщения: 43
Откуда: г. Краснодар
Действия
Цитата:
Модифицирует таблицу векторов прерываний в данном случае отладчик Phyton'а для корректного подключения CodeComposerStudio к DSP ядру.
это конечно хорошо, но как быть если нужен полноценный отладчик при совместной работе ARM и DSP?
Поясняю: Из сказанного в сообщениях выше следует что для корректного запуска двух ядер без перетирания таблицы векторов прерываний НЕ следует использовать Phyton т.е. нужно отключить отладчик от платы, но кроме него нечем посмотреть состояние DSP ядра. Для ARM эта проблема решается нормальным Keil`ом. Фактически мне нужно отлаживать взаимодействие ARM и DSP, просматривать DSP память и всё это при загрузке из ARM!!!

Возможно ли это?????


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

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
VK писал(а):
Действия
Цитата:
Модифицирует таблицу векторов прерываний в данном случае отладчик Phyton'а для корректного подключения CodeComposerStudio к DSP ядру.
это конечно хорошо, но как быть если нужен полноценный отладчик при совместной работе ARM и DSP?
Поясняю: Из сказанного в сообщениях выше следует что для корректного запуска двух ядер без перетирания таблицы векторов прерываний НЕ следует использовать Phyton т.е. нужно отключить отладчик от платы, но кроме него нечем посмотреть состояние DSP ядра. Для ARM эта проблема решается нормальным Keil`ом. Фактически мне нужно отлаживать взаимодействие ARM и DSP, просматривать DSP память и всё это при загрузке из ARM!!!

Возможно ли это?????

Модификация таблицы векторов прерываний происходит только в момент подключения среды CCS к контроллеру через JTAG. Поэтому вот что необходимо сделать для отладки RISC + DSP:
1). Включаете плату, подключаете программатор.
2). Запускаете CodeMaster-ARM. Загружаете проект, компилируете его и загружаете во Flash. Запускаете отладку. Устанавливаете точку останова и выполняете до неё программу. Например, устанавливаете точку останова на первой функции в main(), доходите до неё и останавливаетесь.
3). Запускаете CodeComposerStudio, загружаете проект, записываете программу в память программ DSP и запускаете отладку, работаете. При этом в CodeMaster-ARM можете тоже выполнять программу и видеть изменение состояния памяти, как RISC, так и DSP.


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

Зарегистрирован: 2009-ноя-26 08:48
Сообщения: 43
Откуда: г. Краснодар
Вопрос: Как получить частоту дискретизации аудиокодека AUC равной 8`000 Гц если установленный внешний HSE на 8,0 МГц?

В одном из примеров написано что-то вроде:
Код:
// AUC_CLK enable: AUC_C3 = AUC_C2 = 2.03125MHz;
// AUC_C2 = USB_PLL;
// AUC_C1 = x; (2.03125MHz/256 = 7934.5Hz)

Но при использовании USB USB_PLL = 48 МГц.

Как быть?


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

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
Ровно 8 кГц получить не удастся. Можно получить 7812,5 Гц.
RST_CLK->ADC_MCO_CLOCK = 0x89020000; получим частоту модуля аудиокодека 2 МГц.
Преобразование идет 256 тактов тактовой частоты модуля, поэтому частота дискретизации получится 7812,5 Гц.
Если надо ровно 8000 Гц, используйте кварц 8,192 МГц.


Последний раз редактировалось Petr 2013-окт-21 16:36, всего редактировалось 1 раз.

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

Зарегистрирован: 2013-апр-23 20:56
Сообщения: 10
Здравствуйте. Не могу разобраться с работой контроллера CRPT, подскажите, что делаю не так. После старта всегда выставляется флаг ERROR в регистре SR.
И еще подскажите, на данный контроллер присутсвует стандартная библиотека, как для контролллеров 1986ВЕх?


Вложения:
main.zip [908 байт]
Скачиваний: 130
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 1901ВЦ1Т и аудиокодек
СообщениеДобавлено: 2013-окт-17 12:00 
Не в сети

Зарегистрирован: 2009-май-27 16:17
Сообщения: 55
Откуда: г. Красноярск
Добрый день.
Вот тестовый проект. Запускаем на образце с маркировкой 1104.

Два тестовых цикла - для ацп и цап.

Результаты не соответствуют представлениям.

В файле "PC7.jpg" - результат (импульсы на PORTC[7]) по тесту АЦП - не объяснимо, по ходу флаг прерывания не сбрасывается.

в Файле "выход ЦАП.jpg" - сигнал на OUTP1 - не сходится частота сигнала,
должно быть: 8M/2/128/32 = 975.5 кГц, наблюдаем 488 кГц.

Проверьте, пожалуйста, на серийном образце процессора.


Вложения:
Test_ADC_DAC.rar [307.62 КБ]
Скачиваний: 141
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-окт-21 16:34 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
Пока что разбираемся с флагом прерываний.
Частота дискретизации аудиокодека получается следующим образом: тактовая частота блока, настраиваемая с помощью регистра RST_CLK->ADC_MCO_CLOCK, поделенная на 256.
При использовании прерываний от АЦП аудиокодека все работает корректно.
В прикрепленном архиве находится пример.


Вложения:
Test_ADC_DAC2.rar [363.41 КБ]
Скачиваний: 163
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 1901ВЦ1Т
СообщениеДобавлено: 2013-окт-22 08:36 
Не в сети

Зарегистрирован: 2013-апр-23 20:56
Сообщения: 10
Petr, по моему вопросу ничего не подскажете? Может тогда поделитесь рабочим примером для блока CRYPT?


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

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


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

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


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

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