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

 
 
> Пишем код для отладки платы + азы, RM9200
Ken@t
сообщение Aug 22 2006, 17:58
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382



Вот сидел, читал форумы - at91, електроникс, йаха, телесиськи... . все спрашивают "а КАК".
Отвечаем (иар подразумеваю, для других компилеров товарищи добавят описание)
1. Ставим процессор +обвязку+питание и по Жтагу заливаем минимальный код для проверки работоспособности ...
2. Ставим СДРАМ и минимальным кодом проверем работоспособность памяти.
Код
unsigned int volatile *pSDRAM;
  unsigned int  wCount;
  unsigned int  wRead,
                wWrite;
  
  printf ("CPU %d MHz\n",GetCPUFrequencyMhz() );
  printf ("PCK %d MHz\n",GetPCKFrequencyMhz() );

  while (1){
    printf("-T WR- 0x00000000\n");
   pSDRAM = (unsigned int *) BASE_EBI_CS1_ADDRESS;
   for ( wCount = 0,wWrite=0x0;wCount < 0x800000;wCount ++  ){
     *pSDRAM = wWrite;
     wRead = *pSDRAM;
     if (wWrite != wRead )
       printf ("[0x%08X] = 0x%08X ( 0x%08X,0x%08X)\n",wCount,wRead^wWrite,wRead,wWrite );
     pSDRAM++;
   }
}

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

далее отладили ... теперь очень хочется залить что-нибудь в SDRAM и выполнить оттуда. НО
1. Контроллер SDRAM не инициализирован
2. Частоты ПЛЛ не выставлены.
Вот здесь на помощь нам приходит инструмент Жлинка , а именно его mac файл

привожу его
Код
//---- Инициализация PLLA = 200 MHz , PLLB = 48 MHz , PCK = 100MHz
init_PLL()
{
__var     tmp,
        var;

__message("Init Clock");
__writeMemory32(0x0000FF01,0xFFFFFC20,"Memory"); // PMC_MOR: MOSCEN = 1, enable main clock
while( (( var =__readMemory32(0xFFFFFC24,"Memory")) & (0x1 << 16))  == 0 ) { };  // wait time out

// AT91C_BASE_CKGR->CKGR_PLLAR = PLLAR_Register;
__writeMemory32(0x2030BF04,0xFFFFFC28,"Memory");
tmp = 0;
while( !(( var=__readMemory32(0xFFFFFC68,"Memory")) & ( 0x1 <<  1)) && (tmp++ < 100) ) {};

var = __readMemory32(0xFFFFFC28,"Memory");
__message "PLLAR=",var;

//AT91C_BASE_CKGR->CKGR_PLLBR = PLLBR_Register;
  __writeMemory32(0x10533F0E,0xFFFFFC2C,"Memory");
  tmp = 0;
  while( !((var = __readMemory32(0xFFFFFC68,"Memory")) & ( 0x1 <<  2)) && (tmp++ < 100) ) {};


  __writeMemory32( 0x1 ,0xFFFFFC30,"Memory");

  tmp = 0;
  while( !((var = __readMemory32(0xFFFFFC68,"Memory")) & (0x1 << 3)) && (tmp++ < 100) ) {};


//  AT91C_BASE_PMC->PMC_MCKR = MCKR_Register;
  __writeMemory32(0x00000102,0xFFFFFC30,"Memory");

  tmp = 0;
  while( !((var = __readMemory32(0xFFFFFC68,"Memory")) & (0x1 << 3)) && (tmp++ < 100) ) {};


}

//----------- Инициализация SDRAM 2х8х16 (2х MT48LC8M16A2-75)
init_SDRAM ()
{
__var i;
__message("Init SDRAM");

  __writeMemory32(0xFFFF0000,0xFFFFF800 +0x0070,"Memory");
  __writeMemory32(0x0,0xFFFFF800 +0x0074,"Memory");
  __writeMemory32(0xFFFF0000,0xFFFFF804,"Memory");      
  i = __readMemory32(0xFFFFFF60,"Memory");
  __writeMemory32(i|(0x1 << 1),0xFFFFFF60,"Memory");
  __writeMemory32( 0x0 ,0xFFFFFF64,"Memory");


__writeMemory32( 0x2A99C255,0xFFFFFF98,"Memory");

__writeMemory32(0x02,0xFFFFFF90,"Memory");
__writeMemory32(0x0,0x20000000,"Memory");
__writeMemory32(0x04,0xFFFFFF90,"Memory");

for(i=0;i<8;i++)
  __writeMemory32(0x0,0x20000000,"Memory");
__writeMemory32(0x3,0xFFFFFF90,"Memory");
__writeMemory32(0x0,0x20000000,"Memory");

__writeMemory32(0x610,0xFFFFFF94,"Memory");
__writeMemory32(0x00,0x20000000,"Memory");
__writeMemory32(0x0,0xFFFFFF90,"Memory");
__writeMemory32(0x0,0x20000000,"Memory");
}


execUserPreload()
{

init_PLL();
__writeMemory32(0xAAAAAAAA,0x00000000,"Memory");
  if(__readMemory32(0x00000000,"Memory") != 0xAAAAAAAA)
  {
    __writeMemory32(0x01,0xFFFFFF00,"Memory");    // MC_RCR: toggle remap bit
  }
init_SDRAM ();
  __message("Target init macro complete");
}


теперь можите компилить код с загрузкой в сдрам и выполнять его отуда.
Замечу , что с адреса 0х0 распологается SRAM и в стартап коде надо перенести в область 0х0 - 0х38
вектора прерывания.
пример стартапа at91_cstartup.s79
Код
        MODULE    ?RESET
;        COMMON    INTVEC:CODE:NOROOT(2); Я убрал, линкер подразумевает эту секцию с 0 , но её мы будем копировать в SRAM
            RSEG    ICODE:CODE:NOROOT(2)
                PUBLIC  __program_start
        EXTERN    ?cstartup
;        EXTERN    undef_handler, swi_handler, prefetch_handler
;        EXTERN    data_handler, irq_handler, fiq_handler
        CODE32; Always ARM mode after reset    
ADRSTART:
        org    0x00+ADRSTART
__program_start
        ldr    pc,=?cstartup; Absolute jump
        org    0x04+ADRSTART
undef_handler:
        ldr    pc,=undef_handler
        org    0x08+ADRSTART
swi_handler:
        ldr    pc,=swi_handler
        org    0x0c+ADRSTART
prefetch_handler:
        ldr    pc,=prefetch_handler
        org    0x10+ADRSTART
data_handler:
        ldr    pc,=data_handler
        org    0x18+ADRSTART
    ldr pc, [pc,#-0xF20]  ; IRQ : read the AIC
        org    0x1c+ADRSTART
fiq_handler:
        ldr    pc,=fiq_handler

; Constant table entries (for ldr pc) will be placed at 0x20
        org    0x20+ADRSTART
        LTORG
;        ENDMOD    __program_start
                ENDMOD


;---------------------------------------------------------------
; ?CSTARTUP
;---------------------------------------------------------------
        MODULE    ?CSTARTUP

        RSEG    IRQ_STACK:DATA(2)
        RSEG    SVC_STACK:DATA:NOROOT(2)
        RSEG    CSTACK:DATA(2)
        RSEG    ICODE:CODE:NOROOT(2)
        PUBLIC    ?cstartup
        EXTERN    ?main

; Execution starts here.
; After a reset, the mode is ARM, Supervisor, interrupts disabled.


        CODE32
?cstartup

; Add initialization nedded before setup of stackpointers here


; Initialize the stack pointers.
; The pattern below can be used for any of the exception stacks:
; FIQ, IRQ, SVC, ABT, UND, SYS.
; The USR mode uses the same stack as SYS.
; The stack segments must be defined in the linker command file,
; and be declared above.
                mrs     r0,cpsr                        ; Original PSR value
                bic     r0,r0,#MODE_BITS                  ; Clear the mode bits

.... дальше как было


понятно , что в lowlevelinit пишите перемещение области памяти 0х2000000 - 0х20000038 на 0 адрес
или прямо в стартапном коде перемещение делаете.
хотя можно и использовать TTB для ремпаирования, но это вы дальше будете делать...


--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее?
Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ken@t   Пишем код для отладки платы + азы   Aug 22 2006, 17:58
- - Ruslan1   Спасибо! Интересно почитать. Ты рассказал как ...   Aug 25 2006, 10:50
|- - Ken@t   О , добрался до Москвы. здесь холодно и не уютно....   Sep 13 2006, 17:04
|- - Ruslan1   Цитата(Ken@t @ Sep 13 2006, 20:04) О , д...   Sep 14 2006, 06:52
|- - Ruslan1   Цитата(Ken@t @ Sep 13 2006, 20:04) О , д...   Sep 27 2006, 18:08
|- - AlexMad   Цитата(Ken@t @ Sep 13 2006, 17:04) Сначал...   Jan 14 2007, 23:57
- - LeonY   Если мы пишим программы, так же как и сообщения,...   Sep 13 2006, 18:52
- - Playnet   Цитата(Ken@t @ Aug 22 2006, 17:58) printf...   Jan 11 2007, 15:43
- - AlexMad   ЦитатаВот сидел, читал форумы - at91, електроникс,...   Jan 14 2007, 01:06
- - Dron_Gus   ЦитатаВопрос чисто дурацкий, где копать, житагом с...   Jan 14 2007, 14:57
- - AlexMad   И ещё дурацкий вопрос: как, имея МТ-линк залить в ...   Jan 15 2007, 09:35
- - Dron_Gus   Предлагаю пообщаться на предмет проверки памяти. ...   Jan 16 2007, 20:55
|- - aaarrr   Цитата(Dron_Gus @ Jan 16 2007, 20:55) Воз...   Jan 16 2007, 21:34
- - Dron_Gus   Почитал описание ядра - все кэши отключены после с...   Jan 16 2007, 21:51
- - Dron_Gus   Да. И зачем что-то изобретать. rand() + srand()   Jan 16 2007, 22:06
- - Dron_Gus   Эм... А rand() дает ту же последовательность, если...   Jan 16 2007, 22:19
|- - makc   Цитата(Dron_Gus @ Jan 16 2007, 22:19) Эм....   Jan 16 2007, 22:22
|- - aaarrr   Цитата(Dron_Gus @ Jan 16 2007, 22:19) Эм....   Jan 16 2007, 22:28
- - Playnet   Какой смысл тестить рандом? Лучше всего посмотреть...   Jan 17 2007, 23:59
|- - aaarrr   Цитата(Playnet @ Jan 17 2007, 23:59) Како...   Jan 18 2007, 03:12
|- - Newegor   Цитата(aaarrr @ Jan 18 2007, 02:12) Цитат...   Jan 18 2007, 12:27
|- - Playnet   Цитата(aaarrr @ Jan 18 2007, 03:12) Цитат...   Jan 18 2007, 13:01
|- - aaarrr   Цитата(Playnet @ Jan 18 2007, 13:01) Это ...   Jan 18 2007, 13:37
- - Dron_Gus   Вот тут вымучил. Явно бажное. Но все мои извраты с...   Jan 18 2007, 17:39
- - Dron_Gus   Цитата(aaarrr @ Jan 16 2007, 22:28) В TRM...   Jan 20 2007, 16:48
|- - aaarrr   Цитата(Dron_Gus @ Jan 20 2007, 16:48) Нос...   Jan 20 2007, 21:35
- - AlexMad   Извините за тупость, ноЦитатаВот отсюда и вниз ht...   Jan 24 2007, 00:42
- - Dron_Gus   А вы перекинули А12 и А14? У Вас же память с 13 би...   Jan 24 2007, 22:23


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:31
Рейтинг@Mail.ru


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