реклама на сайте
подробности

 
 
> Запуск собственного загрузчика через SAM-BA
prottoss
сообщение Feb 21 2010, 16:44
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Всем привет. Столкнулся с проблемой озвученной в названии темы.
Чистая плата на AT91SAM7X256 с инициализированым штатным загрузчиком в МК, то бишь SAM-BA.
Написал консольное приложение, которое соединяется с SAM-BA в МК и загружает в память с адреса 0x0020200 собственный загрузчик. Пока это только тестовый код для проверки работоспособности.
Код
__ramfunc void main(void)
{    
    /* Init LED pins */
    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;
    AT91C_BASE_PIOB->PIO_PER = TGT_CFG_LED_MASK;    /* Enable register */
    AT91C_BASE_PIOB->PIO_OER = TGT_CFG_LED_MASK;    /* Output enable */
    AT91C_BASE_PIOB->PIO_IDR = TGT_CFG_LED_MASK;    /* Disable pin interrupt */
    AT91C_BASE_PIOB->PIO_SODR = TGT_CFG_LED_MASK;;    /* Clear all LED's */
    AT91C_BASE_PIOB->PIO_CODR = TGT_CFG_LED_1;;
    AT91C_BASE_PIOB->PIO_CODR = TGT_CFG_LED_3;;
    while(1);
}

Стартап
Код
    MODULE  ?cstartup
    SECTION    IRQ_STACK:DATA:NOROOT(2)
    SECTION    FIQ_STACK:DATA:NOROOT(2)
    SECTION    SVC_STACK:DATA:NOROOT(2)
    SECTION    ABT_STACK:DATA:NOROOT(2)
    SECTION    UND_STACK:DATA:NOROOT(2)
    SECTION    CSTACK:DATA:NOROOT(3)
    EXTERN main
    PUBLIC    __program_start
    CODE32
__program_start:
    ldr     r0, =main
    bx      r0

/* Loop indefinitely when program is finished */
__program_end:
    b       __program_end
    
    END    /* End ?CSTARTUP */

Инит-файл для линкера
Код
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_CODE_start__  = 0x202000;
define symbol __ICFEDIT_region_CODE_end__    = 0x202FFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x203000;
define symbol __ICFEDIT_region_RAM_end__     = 0x204FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_vectors__  = 0x0;
define symbol __ICFEDIT_size_cstack__   = 0x1FF;
define symbol __ICFEDIT_size_sysstack__ = 0x60;
define symbol __ICFEDIT_size_irqstack__ = 0x60;
define symbol __ICFEDIT_size_fiqstack__ = 0x60;
define symbol __ICFEDIT_size_undstack__ = 0x100;
define symbol __ICFEDIT_size_abtstack__ = 0x100;
define symbol __ICFEDIT_size_heap__     = 0x0;
/*-Exports-*/
export symbol __ICFEDIT_region_CODE_start__;
export symbol __ICFEDIT_region_CODE_end__;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
export symbol __ICFEDIT_size_vectors__;
export symbol __ICFEDIT_size_cstack__;
export symbol __ICFEDIT_size_sysstack__;
export symbol __ICFEDIT_size_irqstack__;
export symbol __ICFEDIT_size_fiqstack__;
export symbol __ICFEDIT_size_undstack__;
export symbol __ICFEDIT_size_abtstack__;
export symbol __ICFEDIT_size_heap__;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region VEC_region = mem:[from __ICFEDIT_region_CODE_start__ size __ICFEDIT_size_vectors__];
define region CODE_region = mem:[from __ICFEDIT_region_CODE_start__ +__ICFEDIT_size_vectors__ to __ICFEDIT_region_CODE_end__];
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

do not initialize  { section .noinit };

place in VEC_region { section .vectors };
place in CODE_region { section .cstartup, readonly, readwrite };
place in RAM_region { section readwrite, block IRQ_STACK, block FIQ_STACK, block SYS_STACK, block CSTACK, block UND_STACK, block ABT_STACK, block HEAP };


Консольная программа нормально общается с самбой. При загрузке кода использую верификацию. ВСе загружается успешно. Но вот стартовать код не хочет - светодиоды не загораютсяsad.gif Мож есть какие то тонкости при запуске собственного кода из под SAM-BA?


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 22:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01347 секунд с 7
ELECTRONIX ©2004-2016