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

 
 
> Помогите пожалуйста написать "Hello World!" для SAM9260, SK-AT91SAM9XE512-S3E
mashler
сообщение Jun 19 2009, 10:32
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 13-05-09
Пользователь №: 49 013



Всем доброго дня!
Я сам в МК полный чайник, но в программировании вроде бы далеко не валенок (умею писать на С и Tasm). Уже мучаюсь 2 месяца, никак не могу написать простейшую программу которая будет загружаться с помощю Bootstrap из Dataflash CS0 и выводить сообщение на DBGU.
Может у когонибудь есть пример, или просто кто то подскажет что нужно делать.
Суть в том что первичный Bootstrap стартует и видит программу (8 векторов). Программа загружается по адресу 0х8000 из CS0.

А дальше ничего не происходит.

Код
>Start AT91Bootstrap...
Copy application ...
Run ...


Я так понимаю дело в C-Startup который я взял из Bootstrap 1.6 sources. Просто до меня никак не дойдет как вообще должнен быть огранизован запуск моей программы, должен ли я повторно сделать Remap и должен ли я инициализировать осцилятор если эти действия уже были сделаны в Bootstrap. И вообще что минимально я должен сделать чтобы она запустилась?

Вот мой код C-Startup и моя программа. Стыдно тут такое спрашивать, но очень прошу помогите кто чем сможет. crying.gif
CODE

.section start
.text

#include "include/part.h"

/*----------------------------------------------------------------------------
Area Definition
----------------
Must be defined as function to put first in the code as it must be mapped
at offset 0 of the flash EBI_CSR0, ie. at address 0 before remap.
_---------------------------------------------------------------------------*/

/* Application startup entry point */

.globl reset
.align 4
reset:

/* Exception vectors (should be a branch to be detected as a valid code by the rom */
_exception_vectors:
b reset_vector /* reset */
b undef_vector /* Undefined Instruction */
b swi_vector /* Software Interrupt */
b pabt_vector /* Prefetch Abort */
b dabt_vector /* Data Abort */
b rsvd_vector /* reserved */
b irq_vector /* IRQ : read the AIC */
b fiq_vector /* FIQ */

undef_vector:
b undef_vector
swi_vector:
b swi_vector
pabt_vector:
b pabt_vector
dabt_vector:
b dabt_vector
rsvd_vector:
b rsvd_vector
irq_vector:
b irq_vector
fiq_vector:
b fiq_vector
reset_vector:

/* Init the stack */
_init_stack:
ldr sp,=TOP_OF_MEM

/* Test if main oscillator is enabled */
ldr r0,=AT91C_PMC_SR
ldr r1, [r0]
ldr r2,=AT91C_PMC_MOSCS
ands r1, r1, r2
bne _switch_to_mosc


/* Enable the main oscillator */
_enable_mosc:
ldr r0,=AT91C_PMC_MOR
mov r1, #(0x40 << 8)
ldr r2,=AT91C_CKGR_MOSCEN
orr r1, r1, r2
str r1, [r0]
ldr r0,=AT91C_PMC_SR
1:
ldr r1, [r0]
ldr r2,=AT91C_PMC_MOSCS
ands r1, r1, r2
beq 1b

/* Test if MCK == SLOW CLOCK */
_switch_to_mosc:
ldr r0,=AT91C_PMC_MCKR
ldr r1,=AT91C_PMC_CSS
ldr r2, [r0]
and r2, r2, r1
mov r1, #0
cmp r1, r2
/* No => Do nothing */
bne _init_bss
/* Yes => Switch to the main oscillator */
ldr r1,=AT91C_PMC_CSS_MAIN_CLK
ldr r2,=AT91C_PMC_PRES_CLK
orr r1, r1, r2
str r1, [r0]
ldr r0,=AT91C_PMC_SR
1:
ldr r1, [r0]
ldr r2,=AT91C_PMC_MCKRDY
ands r1, r1, r2
beq 1b

/* Copy the data section in RAM at .data link address */
_init_data:
ldr r2, =_lp_data
ldmia r2, {r1, r3, r4}
1:
cmp r3, r4
ldrcc r2, [r1], #4
strcc r2, [r3], #4
bcc 1b

/* Initialize the bss segment */
_init_bss:
adr r2, _lp_bss
ldmia r2, {r3, r4}
mov r2, #0
1:
cmp r3, r4
strcc r2, [r3], #4
bcc 1b

/* Branch on C code Main function (with interworking) */
_branch_main:
ldr r4, = main
mov lr, pc
bx r4

/* Branch to the application at the end of the bootstrap init */
//_go:
// ldr r1, =MACH_TYPE
// mov lr, pc
// bx r0

.align
_lp_data:
.word _etext
.word _sdata
.word _edata

_lp_bss:
.word _sbss
.word _ebss


Код
#include "include/part.h"
#include "include/main.h"
#include "include/debug.h"

int main () {
    hw_init();

    dbg_print("Hello World!...\n\r");
    return 0;
}


Сообщение отредактировал mashler - Jun 19 2009, 10:56
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jun 19 2009, 11:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Пардон, не заметил, что тут еще Bootstrap используется.

Тогда получается, что Вам нужно просто скомпилировать программу для работы по адресу 0x21D00000. Выполнен или нет remap легко проверить - нужно записать что-нибудь по адресу 0, а затем считать и сравнить содержимое. Если совпадает, значит remap выполнен и можно копировать в эту область свои вектора прерываний.

Но может проще будет для начала стартовать без Bootstrap'а.
Go to the top of the page
 
+Quote Post
mashler
сообщение Jun 19 2009, 11:43
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 13-05-09
Пользователь №: 49 013



Цитата(aaarrr @ Jun 19 2009, 15:31) *
Пардон, не заметил, что тут еще Bootstrap используется.

Тогда получается, что Вам нужно просто скомпилировать программу для работы по адресу 0x21D00000. Выполнен или нет remap легко проверить - нужно записать что-нибудь по адресу 0, а затем считать и сравнить содержимое. Если совпадает, значит remap выполнен и можно копировать в эту область свои вектора прерываний.

Но может проще будет для начала стартовать без Bootstrap'а.


Да, есть тут у меня ошибка.
Вот что я моменял из Makefile:
Код
# Link Address and Top_of_Memory
#LINK_ADDR=0x200000
#TOP_OF_MEMORY=0x301000
LINK_ADDR=0x21D00000
TOP_OF_MEMORY=0x301000


Но программа все так же не стартует.

Я в правильную сторону смотрю?

А вот как копировать вектрора прерываний я не пойму, и вообще зачем надо это делать?

Без Bootstrap стартовать можно, и у меня в принципе получается, но суть в том что размер первой программы ограничивается размером 4KB... а это очень мало если хочешь начать изучение сего процессора, поэтому я и пытаюсь передать управление своей программе которая будет подключать всю перефирию и с которой можно начать изучение.

Сообщение отредактировал mashler - Jun 19 2009, 11:48
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mashler   Помогите пожалуйста написать "Hello World!" для SAM9260   Jun 19 2009, 10:32
- - aaarrr   Цитата(mashler @ Jun 19 2009, 14:32) Я та...   Jun 19 2009, 11:14
|- - mashler   Спасибо большое что отозвались =) Цитата(aaarrr ...   Jun 19 2009, 11:21
|- - aaarrr   Цитата(mashler @ Jun 19 2009, 15:43) Я в ...   Jun 19 2009, 11:49
- - mashler   А как можно расчитать TOP_OF_MEMORY? или его можно...   Jun 19 2009, 11:50
- - aaarrr   Можно.   Jun 19 2009, 11:56
- - mashler   Всеравно ничего не получается, с настройками Make...   Jun 19 2009, 13:16
- - aaarrr   Пином, пином помигайте. Мало ли что у Вас еще с db...   Jun 19 2009, 13:21
|- - mashler   Цитата(aaarrr @ Jun 19 2009, 17:21) Пином...   Jun 19 2009, 13:38
|- - aaarrr   Цитата(mashler @ Jun 19 2009, 17:38) Я да...   Jun 19 2009, 13:57
- - DpInRock   Цитатаперенос строки после Run Обычно это означает...   Jun 19 2009, 14:14
|- - aaarrr   Цитата(DpInRock @ Jun 19 2009, 18:14) Обы...   Jun 19 2009, 14:23
- - DpInRock   У меня самба грузит проц с автовыходом (скрипт так...   Jun 19 2009, 16:48
- - mashler   Вообщем с помощью ваших заклинаний всетки мне удал...   Jun 22 2009, 13:14


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

 


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


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