Partage
  • Partager sur Facebook
  • Partager sur Twitter

Configuration MCU8032

    5 avril 2016 à 18:52:45

    Bonjour,

            J'ai récupéré une carte à base de MCU Siemens SAB-8032 (architecture 8051), et j'essaie de comprendre cette architecture complètement nouvelle pour moi. J'ai donc installé keil uvision qui dispose d'un compilateur et d'une bibliothèque pour 8051. Dans mon nouveau projet, j'ai donc inclu le fichier STARTUP.A51 et j'en suis donc à le modifier pour le faire correspondre à mon architecture matérielle. Seulement n'ayant jamais travaillé avec cette architecture je ne suis pas vraiment sûr de moi. :/  Si quelqu'un de familier avec cette architecture peut me donner quelques indices, ça serait cool :)

    Voici le schéma (simplifié) de ma carte :

     Le plan mémoire est le suivant:

    Mémoire programme : 0x0000 à 0x7FFF

    Mémoire RAM : 0x8000 à 0x9FFF

    Voici mon fichier STARTUP.A51

    $NOMOD51
    ;------------------------------------------------------------------------------
    ;  This file is part of the C51 Compiler package
    ;  Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
    ;  Version 8.01
    ;
    ;  *** <<< Use Configuration Wizard in Context Menu >>> ***
    ;------------------------------------------------------------------------------
    ;  STARTUP.A51:  This code is executed after processor reset.
    ;
    ;  To translate this file use A51 with the following invocation:
    ;
    ;     A51 STARTUP.A51
    ;
    ;  To link the modified STARTUP.OBJ file to your application use the following
    ;  Lx51 invocation:
    ;
    ;     Lx51 your object file list, STARTUP.OBJ  controls
    ;
    ;------------------------------------------------------------------------------
    ;
    ;  User-defined <h> Power-On Initialization of Memory
    ;
    ;  With the following EQU statements the initialization of memory
    ;  at processor reset can be defined:
    ;
    ; <o> IDATALEN: IDATA memory size <0x0-0x100>
    ;     <i> Note: The absolute start-address of IDATA memory is always 0
    ;     <i>       The IDATA space overlaps physically the DATA and BIT areas.
    IDATALEN        EQU     0
    ;
    ; <o> XDATASTART: XDATA memory start address <0x8000-0x9FFF> 
    ;     <i> The absolute start address of XDATA memory
    XDATASTART      EQU     8000H     
    ;
    ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF> 
    ;     <i> The length of XDATA memory in bytes.
    XDATALEN        EQU     2000H      
    ;
    ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF> 
    ;     <i> The absolute start address of PDATA memory
    PDATASTART      EQU     8000H
    ;
    ; <o> PDATALEN: PDATA memory size <0x0-0xFF> 
    ;     <i> The length of PDATA memory in bytes.
    PDATALEN        EQU     256
    ;
    ;</h>
    ;------------------------------------------------------------------------------
    ;
    ;<h> Reentrant Stack Initialization
    ;
    ;  The following EQU statements define the stack pointer for reentrant
    ;  functions and initialized it:
    ;
    ; <h> Stack Space for reentrant functions in the SMALL model.
    ;  <q> IBPSTACK: Enable SMALL model reentrant stack
    ;     <i> Stack space for reentrant functions in the SMALL model.
    IBPSTACK        EQU     0       ; set to 1 if small reentrant is used.
    ;  <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
    ;     <i> Set the top of the stack to the highest location.
    IBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1  
    ; </h>
    ;
    ; <h> Stack Space for reentrant functions in the LARGE model.      
    ;  <q> XBPSTACK: Enable LARGE model reentrant stack
    ;     <i> Stack space for reentrant functions in the LARGE model.
    XBPSTACK        EQU     1       ; set to 1 if large reentrant is used.
    ;  <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
    ;     <i> Set the top of the stack to the highest location.
    XBPSTACKTOP     EQU     0x9FFF +1   ; default 0FFFFH+1 
    ; </h>
    ;
    ; <h> Stack Space for reentrant functions in the COMPACT model.    
    ;  <q> PBPSTACK: Enable COMPACT model reentrant stack
    ;     <i> Stack space for reentrant functions in the COMPACT model.
    PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.
    ;
    ;   <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
    ;     <i> Set the top of the stack to the highest location.
    PBPSTACKTOP     EQU     0x20FF +1     ; default 0FFH+1  
    ; </h>
    ;</h>
    ;------------------------------------------------------------------------------
    ;
    ;  Memory Page for Using the Compact Model with 64 KByte xdata RAM
    ;  <e>Compact Model Page Definition
    ;
    ;  <i>Define the XDATA page used for PDATA variables. 
    ;  <i>PPAGE must conform with the PPAGE set in the linker invocation.
    ;
    ; Enable pdata memory page initalization
    PPAGEENABLE     EQU     1       ; set to 1 if pdata object are used.
    ;
    ; <o> PPAGE number <0x0-0xFF> 
    ; <i> uppermost 256-byte address of the page used for PDATA variables.
    PPAGE           EQU     21H
    ;
    ; <o> SFR address which supplies uppermost address byte <0x0-0xFF> 
    ; <i> most 8051 variants use P2 as uppermost address byte
    PPAGE_SFR       DATA    0A0H
    ;
    ; </e>
    ;------------------------------------------------------------------------------
    
    ; Standard SFR Symbols 
    ACC     DATA    0E0H
    B       DATA    0F0H
    SP      DATA    81H
    DPL     DATA    82H
    DPH     DATA    83H
    
                    NAME    ?C_STARTUP
    
    
    ?C_C51STARTUP   SEGMENT   CODE
    ?STACK          SEGMENT   IDATA
    
                    RSEG    ?STACK
                    DS      1
    
                    EXTRN CODE (?C_START)
                    PUBLIC  ?C_STARTUP
    
                    CSEG    AT      0
    ?C_STARTUP:     LJMP    STARTUP1
    
                    RSEG    ?C_C51STARTUP
    
    STARTUP1:
    
    IF IDATALEN <> 0
                    MOV     R0,#IDATALEN - 1
                    CLR     A
    IDATALOOP:      MOV     @R0,A
                    DJNZ    R0,IDATALOOP
    ENDIF
    
    IF XDATALEN <> 0
                    MOV     DPTR,#XDATASTART
                    MOV     R7,#LOW (XDATALEN)
      IF (LOW (XDATALEN)) <> 0
                    MOV     R6,#(HIGH (XDATALEN)) +1
      ELSE
                    MOV     R6,#HIGH (XDATALEN)
      ENDIF
                    CLR     A
    XDATALOOP:      MOVX    @DPTR,A
                    INC     DPTR
                    DJNZ    R7,XDATALOOP
                    DJNZ    R6,XDATALOOP
    ENDIF
    
    IF PPAGEENABLE <> 0
                    MOV     PPAGE_SFR,#PPAGE
    ENDIF
    
    IF PDATALEN <> 0
                    MOV     R0,#LOW (PDATASTART)
                    MOV     R7,#LOW (PDATALEN)
                    CLR     A
    PDATALOOP:      MOVX    @R0,A
                    INC     R0
                    DJNZ    R7,PDATALOOP
    ENDIF
    
    IF IBPSTACK <> 0
    EXTRN DATA (?C_IBP)
    
                    MOV     ?C_IBP,#LOW IBPSTACKTOP
    ENDIF
    
    IF XBPSTACK <> 0
    EXTRN DATA (?C_XBP)
    
                    MOV     ?C_XBP,#HIGH XBPSTACKTOP
                    MOV     ?C_XBP+1,#LOW XBPSTACKTOP
    ENDIF
    
    IF PBPSTACK <> 0
    EXTRN DATA (?C_PBP)
                    MOV     ?C_PBP,#LOW PBPSTACKTOP
    ENDIF
    
                    MOV     SP,#?STACK-1
    
    ; This code is required if you use L51_BANK.A51 with Banking Mode 4
    ;<h> Code Banking
    ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
    #if 0   
    ;     <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
    EXTRN CODE (?B_SWITCH0)
                    CALL    ?B_SWITCH0      ; init bank mechanism to code bank 0
    #endif
    ;</h>
                    LJMP    ?C_START
    
                    END
    

    J'ai donc modifié :

    XDATASTART à 0x8000 car c'est le début de la RAM

    XDATALEN à 2000H car c'est le nombre de bytes adressables de 0x8000 à 0x9FFF

    PDATASTART à 0x8000

    PDATALEN à 256 bytes (c'est la taille max pour les pdata si j'ai bien compris ? )

    J'ai placé ma STACK à l'adresse 0x9FFF +1

    Voilà si quelqu'un peut me dire si je suis sur la bonne route, ça serait cool ;)

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
    - Il y a un chemin vers chaque sommet, même le plus haut -
    Anonyme
      5 avril 2016 à 21:43:11

      Quelques idées ici

      Elektor avec fait une carte de ce genre, voir SIMCAD.

      • Partager sur Facebook
      • Partager sur Twitter
      Le 25 juillet 2016, j'ai essayé une Ford Mustang.
        5 avril 2016 à 21:49:38

        Ouais effectivement, je m'étais dit que yaurait peut-être des gens éclairés ici qui pourrait m'aider, mais c'est vrai qu'à l'heure des ARM Cortex M7, c'est plus trop connu comme architecture. Ceci dit je trouve pas ça plus has been qu'un pic18f 😜
        • Partager sur Facebook
        • Partager sur Twitter
        - Il y a un chemin vers chaque sommet, même le plus haut -
        Anonyme
          6 avril 2016 à 2:44:51

          PIC versus ARM ? Hum .. Selon moi il ne faut pas comparer deux produits destinés à des usages différents.

          Sub-Zéro a écrit:

          Ceci dit je trouve pas ça plus has been qu'un pic18f 😜

          Ce n'est pas l'avis du fabricant : http://www.intel.com/design/embcontrol/

          These products have been discontinued by Intel. The documents are provided for historical reference purposes only.




          • Partager sur Facebook
          • Partager sur Twitter
            21 juillet 2019 à 20:53:49

            http://des.tritus.free.fr

            le 8051 est un microcontroleur qui fut une idée géniale d' intel.  Et j' ai donc là des schémas de l' époque

            • Partager sur Facebook
            • Partager sur Twitter

            Configuration MCU8032

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown