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

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

Отправлено -=ВН=- 18 августа 2004 г. 13:27
В ответ на: Ответ: Понятно, а можете дать примерный код? а то я не представляю как на работающем процессоре память перетирать отправлено lisarden 18 августа 2004 г. 12:44

Да какие там проблемы?
Загрузчик в младшем 1 килобайте.
Рабочую программу можно загружать соответственно
с адреса 0x400.
В разблюдовке памяти для рабочей программы кусок по адресам 0-3ff либо не использовать вообще, либо какой-нибудь неинициализир. секцией объявить и т.д. Вариантов немало.
Кусок я Вам дам.
Но рабочая программа у меня во флэши в некоем структурированном виде хранится. Только это не структура в программистском понимании, типа загрузочной таблицы.
И таблица эта содрана с загруз. таблицы процессоров 54 серии с крошечными изменениями, лень было самому изобретать. Писалось все это несколько лет назад, а потом кочевало из работы в работу.
USER_KEYW - ключ, 32-х разрядный, т.е. признак что во флэши все-таки программа находится, а не хрен знает что. В общем простенькая защита. entry code - адрез запуска рабочей программы.
Понять можно, а если дополнительно прочитать про формат загр. таблицы для 54-х, то совсем просто.
Да, до куска - инициализация EMIF, она у меня от работы к работе может меняться. Поэтому не пишу.
Цепочки нопов - для выравнивания по фетч-пакетам.
Первые две инструкции - конец фетч-пакета предыдущего куска.
Если форматирование съедет - невиноватый я.
Да, структурированное хранение раб. программы - вещь совершенно необязательная, или структура может быть другой, вариантов много.

MVKL FUSER_START,B8 ;8
MVKH FUSER_START,B8

ldusprg: ldh *B8++,B5
NOP 9
LDH *B8++,B6 ;key
NOP 9
LDH *B8++,B1
NOP 9
LDH *B8++,B2 ;entry code
NOP 9 ;10


SHL B2,16,B2 ;B2<<=16
CLR B1,16,31,B1 ;B1&=0XFFFF
OR .L2 B2,B1,B1 ;B1|=B2, B1=ENTRY CODE
|| SHL .S2 B6,16,B6 ;B6<<=16
CLR B5,16,31,B5 ;B5&=0XFFFF
OR .L2 B6,B5,B2 ;B2=B6|B5,B2=KEY
|| MVKL .S1 USER_KEYW,A0
MVKH USER_KEYW,A0 ;11 A0=USER_KEY


CMPEQ .L2X A0,B2,B0
[!B0] B _mbooten ;IF(!USER_KEY) - GOTO _mbooten (NO USER PROGRAM)
nop
nop
nop
nop
nop
nop ;12

_begsect:
ldh *B8++,B3 ;
NOP 9
LDH *B8++,B4 ;section size
NOP 9
LDH *B8++,A5
NOP 9
LDH *B8++,A6 ;memory address of section
NOP 9 ;13

SHL B4,16,B4
|| SHL A6,16,A6
CLR B3,16,31,B3
|| CLR A5,16,31,A5
OR .L2 B4,B3,B3
|| OR .L1 A6,A5,A4
|| ZERO .S1 A0 ;A0=0,B3=(B3&0XFFFF)|(B4<<16),A4=(A4&0XFFFF)|(A5<<16); B3=SECTION SIZE (WRD),A4=SECTION START ADDRESS IN MEMORY
CMPEQ .L2X B3,A0,B0 ;14

[B0] B .S2 B1 ;IF(B3==0) BRANCH TO USER PROGR
NOP
NOP
NOP
NOP
NOP
NOP
NOP ;15
_mbootsec:
ldh *B8++,B5 ;
NOP 9
LDH *B8++,B6 ;
NOP 9
SHL B6,16,B6
CLR B5,16,31,B5 ;
OR B6,B5,B5 ;B5=MEM. WORD
STW B5,*A4++ ;16

add 1,A0,A0 ;A0+=1,inc outer counter
CMPGT .L2X B3,A0,B0
NOP
[B0] B _mbootsec
NOP 5
NOP
B _begsect
NOP 5 ;17

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


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

E-mail: info@telesys.ru