[an error occurred while processing this directive]
Чудеса с VDSP 3.5
(«Телесистемы»: Конференция 'Цифровые сигнальные процессоры (DSP) и их применение')

миниатюрный аудио-видеорекордер mAVR

Отправлено evgen 31 мая 2005 г. 14:03

Процессор ADSP 2185
Есть код вида:
-------------------8<------------------
int main()
{
while(1)
{
if(ibuf == ibuf_free) contiue;
x = buf[ibuf];
y = buf[ibuf+1];
iwait = buf[ibuf+2];
OutPortX(x,iwait);
OutPortY(y,iwait);
ibuf += 3;
//детали опущены
};
}

int *PFlag_Ctrl_mode = (int *)0x3FE6; // регистр управления доп.флагов
int *PFlags = (int *)0x3FE5; // регистр доп.флагов

int OutPortX(int data)
{
// asm volatile ("AX0=%0;"::"c"(data));
// asm volatile ("IO(0)=AX0;");
io_space_write(0x0, data);
*PFlag_Ctrl_mode = 3;
/* установка флагов для строба */
*PFlags = 0x01;
/* задеpжка строба */
asm volatile ("AX0=%0;"::"c"(l780.WaitStrob));
asm volatile ("CNTR=AX0;");
asm volatile ("DO outPort_WaitStrobX UNTIL CE;");
asm volatile ("outPort_WaitStrobX: NOP;");
*PFlags = 0x00;
/* Задержка */
asm volatile ("AX0=%0;"::"c"(wait));
asm volatile ("CNTR=AX0;");
asm volatile ("DO outPort_WaitX UNTIL CE;");
asm volatile ("outPort_WaitX: NOP;");
}
int OutPortY(int data)
{
//аналогично
}
-------------------8<------------------
Функции OutPortX и OutPortY записывают в порт 0 некие значения, выставляют строб через регистр доп.флагов и делают задержку. Причем выход всего этого наблюдается глазками в виде 2D картинки.
Буфер buf значений x, y и задержки заполняется с хоста, если буфер пустой - делается continue.

Теперь переходим к чудесам. Через много-много минут после старта, в зависимости от распложения звезд и фаз луны, получается такая вещь:
Буфер пустой. Записываем одну порцию данных.
OutPortY - Выполняется сразу и это видно глазками сразу.
OutPortX - тоже выполняется, но глазками этого не видно. Указатели буфера изменяются и буфер опять пустой. Этовидно с хоста - глазками в дебаговом выводе хостовой программы. После чего хостовая программа напрочь останавливается - на брекпойнте в отладчике и заведомо ничего не делает, прочих барабашек тоже не наблюдается.
Теперь обещанное чудо: через минуты 2-3 глазками видно что значение X на выводном устройстве меняется на заданное....


Че делать - ума не приложу.
Толи какая-то зука так хитро код ломает, толи чего с флагами происходит.
В VDSP 2.0 такого не наблюдалось, другой проект с более напряженными условиями по прерываниям под 3.5 работает без таких проблем.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru