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

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

Отправлено Николай 29 июня 2006 г. 17:21
В ответ на: Правильно понимаете. Теперь такой вопрос, как именно вы объявляете инициализацию? Покажите фрагменты кода и соответствующие места в LDF файле, может там собака порылась. отправлено Зок Мёдов 29 июня 2006 г. 16:20

Вот файл инициализации:

#include

#define MMR_BASE 0xFFC00000

.section/code program;

start:
[--SP] = ASTAT; /* Stack Pointer (SP) is set to the end of */
[--SP] = RETS; /* scratchpad memory (0xFFB00FFC) */
[--SP] = (r7:0); /* by the on-chip boot ROM */
[--SP] = (p5:0);
[--SP] = I0;[--SP] = I1;[--SP] = I2;[--SP] = I3;
[--SP] = B0;[--SP] = B1;[--SP] = B2;[--SP] = B3;
[--SP] = M0;[--SP] = M1;[--SP] = M2;[--SP] = M3;
[--SP] = L0;[--SP] = L1;[--SP] = L2;[--SP] = L3;

P5.H = HI(MMR_BASE);
P5.L = LO(MMR_BASE);

// Setup PLL

R7 = 4;
W [ P5 + PLL_DIV - MMR_BASE ] = R7;
R7 = 0x3200;
W [ P5 + PLL_CTL - MMR_BASE ] = R7;
SSYNC;
IDLE; // PLL перестраивается, после загрузки частота правильная

// SDRAM Controller Init
#define SDGCTL 0x00999949
R7 = 773;
W [ P5 + EBIU_SDRRC - MMR_BASE ] = R7;
R7 = 0x0013; // 0000 0000 0001 0011
W [ P5 + EBIU_SDBCTL - MMR_BASE ] = R7;
R7.H = HI(SDGCTL);
R7.L = LO(SDGCTL);
[ P5 + EBIU_SDGCTL - MMR_BASE ] = R7;
SSYNC;

P5.H = HI(0x4010); // циклы чтения SDRAM
P5.L = LO(0x4010);
R5 = W [ P5 + 0 ] (Z);
R5 = W [ P5 + 2 ] (Z);
R5 = W [ P5 + 4 ] (Z);
R5 = W [ P5 + 6 ] (Z);

R5 = 0x1234; R7 = 0x5678; // Эти циклы записи срабатывают нормально,
W [ P5 + 2 ] = R7; // данные попадают в SDRAM и видны там по
W [ P5 + 4 ] = R5; // окончании загрузки
W [ P5 + 6 ] = R7;
W [ P5 + 8 ] = R5;
W [ P5 + 10 ] = R7;

/*********************Post-Init Section************************/

L3 = [SP++]; L2 = [SP++]; L1 = [SP++]; L0 = [SP++];
M3 = [SP++]; M2 = [SP++]; M1 = [SP++]; M0 = [SP++];
B3 = [SP++]; B2 = [SP++]; B1 = [SP++]; B0 = [SP++];
I3 = [SP++]; I2 = [SP++]; I1 = [SP++]; I0 = [SP++];
(p5:0) = [SP++];
(r7:0) = [SP++];
RETS = [SP++];
ASTAT = [SP++];

/************************************************************/

RTS;

В LDF ничего особенного нет, при помощи Expert Linker создан файл и заведена переменная по адресу 0x4000, т.е. в SDRAM.

Кстати, попробовал все то же самое сделать на EZ-KIT 533 и зашить в параллельную FLASH. Оказалось, что если не перестраивать PLL, SDRAM работает нормально -- я в ней завел функцию, которая моргает светодиодами. Если перестраивать -- нормальной загрузки из FLASH не происходит, даже если SDRAM не пользоваться. Похоже, что замирает на команде IDLE.

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

Ответы


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

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

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

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

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


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru