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

ADSP-2191 и C

Помогите разобраться с С компилятором для процессора ADSP-2191. После успешной работы на ассемблере возникло желание перейти на С, но ничего не получается. После загрузки программы от процессора никакой реакции, изменение настроек компилятора не на что не влияет.

 

Вот текст простейшей программы. Если делать проект только на асме, то все работает: выводится счетчик в юарт, и дергается ножка процессора. Если компилировать данный файл – ничего не работает, хотя в отладчике все выполняется. Также ничего не работает, если вместо ассемблерной вставки тоже самое написать на С.

Что я делаю не так?

Компилятор VisualDSP++ 3.5 с последним апдейтом, процессор грузится через юарт, отладочного кабеля нет.

 

void main(void)

{

 

asm("

#include <def2191.h>

 

MSTAT = 0x10;

IMASK = 0x0000;

ICNTL = 0x0000;

iopg = General_Purpose_IO;

ax0 = 0x04;

io( DIR ) = ax0;

 

iopg = UART_Controller_Page;

ax0 = 0x80;

io( LCR ) = ax0;

 

ax0 = 0x41;

io( DLL ) = ax0;

ax0 = 0x00;

io( DLH ) = ax0;

 

ax0 = 0x03;

io( LCR ) = ax0;

 

ax1 = 0x0000;

 

 

lb1:

ar = ax1 + 1;

ax1 = ar;

iopg = UART_Controller_Page;

io( THR ) = ax1;

ay0 = 0x20;

 

TxTest:

ax0 = io( LSR );

af = ax0 and ay0;

if EQ jump TxTest;

 

 

iopg = General_Purpose_IO;

ax0 = 0x04;

io( FLAGS ) = ax0;

 

CNTR = 600;

 

DO add_loop UNTIL CE;

add_loop: nop;

 

iopg = General_Purpose_IO;

ax0 = 0x04;

io( FLAGC ) = ax0;

 

CNTR = 600;

DO add_loop2 UNTIL CE;

add_loop2: nop;

 

jump lb1;

 

");

}

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


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

может есть смысл начать ковырять с стартапа?

 

я файлы сразу перетащил в рабочую папку, убрал лишнее и сделал частью проекта.

 

файлы 219x_hdr.asm, 219x_int_tab.asm из {ADSP}\219x\lib\src\crt_src

 

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

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


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

На сколько я понял, если проект делать на с, то сам компилятор создает таблицу прерываний и выполняет необходимую инициализацию процессора. Это видно в дебагире.

Еще я пробовал сам все это делать на асемблере и вызывать сишную функцию - результат тотже. посмотрев получившийся код я выяснил что процессор не работает если в программе есть

I4 = I5 ;

I5 = DM(I5 += M5);

RTS;

(это выход из функции), даже если этот код никогда не выполняется.

если заменить I4 = I5 нопом, то все работает.

Может я чтото делаю неправельно?

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


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

я не совсем понял, читал ли GSH мой ответ.

 

компилятор в начале программы прилинковывает два модуля - 219x_int_tab.asm - это таблица прерываний

и 219x_hdr.asm - это инициализация, в которой и устанавливаются

 

// stack pointer points to first unused location

I4 = ldf_stack_base; // stack pointer

I5 = ldf_stack_base; // frame pointer

 

исходники - лучшая документация!

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


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

Вообще-то если все делать правильно, то ASM и С отлично друг с другом дружат. Сейчас втянулся и только на смешанном и пишу...

Для начала, приведенный текст С-шным никак не назвать... Для того чтобы компилятор все нормально переварил нужно указывать входные-выходные аргументы, изменяемые регистры и прочие...

А если совсем по правильному делать, то сперва нужно почитать документацию. Есть достаточно подробное описание С-шной модели, т.е. как устроен стек, как им пользоваться из асм-ра, как правильно передавать и получать аргументы...

Sorry, за повторы инет - собака тормозит...

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

Короче резюме:

Учите мат.часть, и все у Вас будет хорошо

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


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

solit

В следующий раз, прежде чем отправлять 3 поста подряд в одной теме, воспользуйся кнопкой "Редактировать" и допиши все, что хотел сказать dont.gif.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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