Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Загрузка своей прошивки в ADSP2185 (L761)

Вы не вошли.

 Поиск | Регистрация | Вход 

wsprintfW
19.02.2007 00:06:19
#1

Гость

Загрузка своей прошивки в ADSP2185 (L761)

загружаю свою прошивку с примитивной программой в карту, но процессор не начинает её выполнение. подскажите что делаю не правильно.
программа для дсп:
section/pm interrupts;
JUMP START; RTI; RTI; RTI;       
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI; 
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;
RTI; RTI; RTI; RTI;

.section/pm program;
START:
    AR = 0x7F7F;
    DM(0x0000) = AR;
    JUMP START;
-----------------
получается вот такая программа
Dumping range 0x00000000 - 0x00000027 by 1 (Hexadecimal)...
    0x18030F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
    0x0A001F
Dumping range 0x00000030 - 0x00000039 by 1 (Hexadecimal)...
    0x47F7FA
    0x90000A
    0x18030F
    0x000000
    0x000000
-------
всё это дело запихиваю в дсп вот таким кодом:

        CallCreateInstance("lcomp.dll");
        LUnknown* pIUnknown = CreateInstance((ULONG)0);
        if(pIUnknown == NULL) {
            theApp.pProto->AddString("CallCreateInstance failed");
            return;
        }

        HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
        if(!SUCCEEDED(hr)) {
            theApp.pProto->AddString("CallCreateInstance failed");
            return;
        }
        pIUnknown->Release();
   

        pI->OpenLDevice(); // начало работы с платой

    //делаем reset
    pI->PutWord_DM(0x3fef, (USHORT)0x1800);
    //пишем программу
    pI->PutArray_PM(0x0001, 0x100, &(image[1]));
    pI->PutWord_PM(0x0000, image[0]);
    USHORT data[0x100];
    ULONG test[0x100];
    pI->GetArray_PM(0x0000, 0x100, test);
    pI->GetArray_DM(0x0000, 0x100, data);
-----------------
в data[0] видим 0, т.е. программа не выполняется
в чём косяк?

hermit
19.02.2007 08:41:42
#2

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

мне кажется чтобы сделать reset и все остальное должна быть программа (код) в DSP,  а там у вас в вашей программе нет поддержки этих функций

Сергей
19.02.2007 11:39:22
#3

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

1. Reset у DSP чисто аппаратный и не требует наличия какой-либо программы в самом DSP.
2. А какой именно DSP у Вас на борту платы: ADSP-2186 или ADSP-2185?

wsprintfW
19.02.2007 12:51:11
#4

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

2185
проблема решена: неправильно расставлял U,M,L байты в 24 битной памяти программ.

wsprintfW
22.02.2007 01:40:42
#5

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

c чем может быть связано то, что дсп  как бы иногда "подвисает", т.е. загружаешь в него программу, а он её не выполняет. причём помогает только выключение и включение компьютера, т.е. , считай, снятие питание с дсп? Такая ситуация появляется обычно через 4-5 загрузок прошивки. Перед загрузкой своей прошивки всегда очищаю память полностью, кроме PM(0x0001), затем собственно гружу прошивку.

wsprintfW
22.02.2007 01:43:01
#6

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

может быть это связано с тем, что не всегда вызываю
pI->CloseLDevice();
pI->Release();
????

Барада
22.02.2007 14:41:37
#7

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

ответ планируется?

wsprintfW
23.02.2007 16:21:47
#8

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

Сам себе и отвечу: очевидно это результат выполнения неких аномальных инструкций. Такая же ситуация, когда даже полсе ресета процессоре продолжает выполнять аномальщину, часто случается и на процессорах TI.

wsprintfW
24.02.2007 18:01:21
#9

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

Наконец понял корень всех своих бед smile
стандартная функция pI->LoadBios() делает каким то образом reset процессору ,  а моя функция загрузки нет smile. Собственно отсюда вытекает вопрос: как сделать reset процессору (кроме как перезагрузкой компьютера) ?

26.02.2007 11:01:42
#10

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка своей прошивки в ADSP2185 (L761)

есть исходники библиотеки....там все прописано

wsprintfW
26.02.2007 14:34:26
#11

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

это вот это?

void PLATA_RESET_PLX(BOARD_INFO *bi)
{
    long data;

    data=READ_CONFIG_REG_PLX(bi, 0x50);
    data &= (0x40000000L ^ 0xFFFFFFFFL);
    WRITE_CONFIG_REG_PLX(bi, 0x50, data);
    data |= 0x40000000L;
    WRITE_CONFIG_REG_PLX(bi, 0x50, data);
    data &= (0x40000000L ^ 0xFFFFFFFFL);
    WRITE_CONFIG_REG_PLX(bi, 0x50, data);
}


long READ_CONFIG_REG_PLX(BOARD_INFO *bi, int IO_Port)
{
    long temp;
   int io_port = bi->ConfigRegsBaseAddress+IO_Port;

   asm {
        push    eax
      push    dx
        mov  dx,  io_port;
        in   eax, dx;
        mov  temp, eax;

      pop    dx
      pop    eax
   }

    return temp;
}


void WRITE_CONFIG_REG_PLX(BOARD_INFO *bi, int IO_Port, long Data)
{
   int io_port = bi->ConfigRegsBaseAddress+IO_Port;

   asm {
        push    eax
      push    dx

        mov      eax, Data
        mov    dx,  io_port
        out      dx,  eax

      pop    dx
      pop    eax
   }
}


Прокомментируйте пожалуйста.

wsprintfW
26.02.2007 14:39:41
#12

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

конкретно интересует что за порт такой "base + 0x50" и что за значение туда пишется. Странно, что Reset подробно не описан в печатной книге.

26.02.2007 15:07:05
#13

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка своей прошивки в ADSP2185 (L761)

ну порт это в спецификации PLX9050 расписан. А так дергают там линией и происходит ресет. Делаете так и все работает...

wsprintfW
26.02.2007 18:33:26
#14

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

добавляю вот такой код перед загрузкой своей прошивки
--------
    //делаем reset
    ULONG data;
    data= pI->indword(0x50, &data); // READ_CONFIG_REG_PLX(bi, 0x50);
    data &= (0x40000000L ^ 0xFFFFFFFFL);
    pI->outdword(0x50, &data);
    data |= 0x40000000L;
    pI->outdword(0x50, &data);
    data &= (0x40000000L ^ 0xFFFFFFFFL);
    pI->outdword(0x50, &data);
-------
и первое же обращение pI->GetWord_DM вешает систему намертво. Причём весь набор pI->Put* работает.

27.02.2007 10:51:40
#15

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Загрузка своей прошивки в ADSP2185 (L761)

исходники Dll тоже есть....

wsprintfW
27.02.2007 13:01:21
#16

Гость

Re: Загрузка своей прошивки в ADSP2185 (L761)

о, угу
теперь все гарно работаед