Prog M95256 avec un st7
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Prog M95256 avec un st7



  1. #1
    inviteb6d31043

    Prog M95256 avec un st7


    ------

    J'ai un prog a faire à partir du st7 et d'une mémoire eeprom M95256.

    Je n'arrive vraiment pas a faire ce prog, pouvez vous m'aider??

    Le seul prog que j'ai fait est celui-ci, est encore l'horloge marche qu'un temps, puis plus rien, je ne piges pas pourquoi..

    #include "ST72F264.h"
    #include "hidef.h" //For all that is CPU dependant.



    void main(void)
    {


    // Config du PortB

    PBDDR=0xFF; // PortB en sortie
    PBOR=0xFF; // Sorties en push pull

    SPICR=0x7C; // Initialisation de la Spi
    SPICSR=0x03;



    for(;
    {

    PBDR=0x0E; // Sélection de la carte mémoire
    SPIDR=0x01; // Envoie d'un bit donc visualiser MOSI

    while ((SPIDR&0x80)==0); // Attente de réception du bit
    SPIDR=0xFF;
    while ((SPIDR&0x80)==0);
    SPIDR=0xFF;
    while ((SPIDR&0x80)==0);
    SPIDR=0x0F;

    PBDR=0x02; // Bit reçu

    }
    }

    helpppp

    -----

  2. #2
    inviteb6d31043

    Re : Prog M95256 avec un st7

    qui pourrait m'aider pour établir un programme d'écriture et de lecture des données envoyées sur ma eeprom ??

  3. #3
    inviteb6d31043

    Re : Prog M95256 avec un st7

    le programme que j'ai fait est le suivant, et pourtant, j'ai un probleme de lecture de ma donnée pourquoi ??



    #include "hidef.h" //For all that is CPU dependant.
    #include "ST72F264.h"


    int i;
    char data;
    char raz;

    // Prog d'écriture
    void main(void)
    {


    // Config du PortB

    PBDDR=0xFF; // portB en sortie
    PBOR=0xFF; // sorties en push pull

    SPICSR=0x03; // initialisation de la Spi
    SPICR=0x7F;

    PBDR=0x0F; // initialisation de la sélection de la carte


    for(;
    {




    // **************** routine de lecture d'un octet ***********************


    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x03; // instruction à envoyer à la mémoire 0x03 pour lire
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non


    SPIDR=0x00; // poid fort de l'adresse
    while ((SPICSR&0x80)==0);


    SPIDR=0x00; // poid faible de l'adresse
    while ((SPICSR&0x80)==0);


    SPIDR=0xF0; // 8 tops d'horloge
    while ((SPICSR&0x80)==0);


    data=SPIDR; // lecture de la donnée sur le registre SPIDR de la EPPROM

    PBDR=0; // raz du portB (désélection de la EEPROM) ************



    //****************************** ****************************** ************


    for(i=0;i<5;i++); // attente de 5sec



    //***************** routine pour valider l'écriture ****************************** **
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x06; // instruction à envoyer à la mémoire 0x06 pour permettre l'écriture
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non


    PBDR=0; // raz du portB (désélection de la EEPROM) ************

    //****************************** ****************************** ***********


    for(i=0;i<5;i++); // attente de 5sec


    // **************** routine d'écriture d'un octet ***********************
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)


    SPIDR=0x02; // instruction à envoyer à la mémoire 0x02 pour écrire
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non



    SPIDR=0x00; // poid fort de l'adresse (8bits d'horloge) **
    while ((SPICSR&0x80)==0);



    SPIDR=0x00; // poid faible de l'adresse (8bits d'horloge) **
    while ((SPICSR&0x80)==0);


    SPIDR=0xC4; // donnée envoyée
    while ((SPICSR&0x80)==0);
    //raz=SPIDR;



    PBDR=0; // raz du portB (désélection de la EEPROM) ************


    //****************************** ****************************** ***********






    //*********************** attente de fin d'ecriture en EEPROM ****************************** *********************
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    do {

    SPIDR=0x05; // instruction à envoyer à la mémoire 0x05 pour lire registre d'etat
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non

    for(i=0;i<1;i++); // attente de 5sec

    SPIDR=0x00; // poid faible de l'adresse (8bits d'horloge) **
    while ((SPICSR&0x80)==0);

    for(i=0;i<1;i++); // attente de 5sec

    SPIDR=0x00; // poid fort de l'adresse (8bits d'horloge) **
    while ((SPICSR&0x80)==0);

    }


    while ((SPIDR&0x01)==1); // le bit7 (SPIF) dit si l'octet est envoyé ou non



    PBDR=0; // raz du portB (désélection de la EEPROM) ************
    //PBDR=0; // raz du portB (désélection de la EEPROM) ************

    //****************************** ****************************** ****************************** **********************

    for(i=0;i<5;i++); // attente de 5sec


    //****************************** ** instruction pour désactiver l'écriture ****************************** *********
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x04; // instruction à envoyer à la mémoire 0x05 pour lire registre d'etat
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    //raz=SPIDR;

    PBDR=0; // raz du portB (désélection de la EEPROM) ************

    //****************************** ****************************** ****************************** **********************

    for(i=0;i<5;i++); // attente de 5sec



    // **************** routine de lecture d'un octet ***********************


    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x03; // instruction à envoyer à la mémoire 0x03 pour lire
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non

    SPIDR=0x00; // poid fort de l'adresse
    while ((SPICSR&0x80)==0);

    SPIDR=0x00; // poid faible de l'adresse
    while ((SPICSR&0x80)==0);

    SPIDR=0x0F; // 8 tops d'horloge
    while ((SPICSR&0x80)==0);

    data=SPIDR; // lecture de la donnée sur le registre SPIDR de la EPPROM

    PBDR=0; // raz du portB (désélection de la EEPROM) ************


    for(;;
    //****************************** ****************************** ************

    }

    }

  4. #4
    inviteb6d31043

    Re : Prog M95256 avec un st7

    Salut, j'ai fait le programme et un test de ma carte sur une autre carte, on a envoyé une donnée FF partout, et on arrive pas a lire. Puis normalement quand on écrit MISO doit se mettre à 0 pour recevoir la donnée, ce n'est pas le cas.

    #include "hidef.h" //For all that is CPU dependant.
    #include "ST72F264.h"

    char data;
    char raz;

    void main(void)
    {
    // Config du PortB
    PBDDR=0x9F; // bit7/CLK/MISO/MOSI/D/B/C/A -> 1001 1111 = 9F (MISO et CLK = entrée)
    PBOR=0xFF; // sorties en push pull

    SPICSR=0x03; // initialisation de la Spi
    SPICR=0x7F;

    PBDR=0; // initialisation de la sélection de la carte

    for(;
    {

    // *** routine de lecture d'un octet **

    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x03; // instruction à envoyer à la mémoire 0x03 pour lire
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    raz=SPIDR;

    SPIDR=0xF0; // poid fort de l'adresse
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0xF0; // poid faible de l'adresse
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0x00; // 8 tops d'horloge
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    data=SPIDR; // lecture de la donnée sur le registre SPIDR de la EPPROM

    PBDR=0; // raz du portB (désélection de la EEPROM)
    //*****

    for(i=0;i<5;i++);

    //*** vérification du registre d'écriture (WRSR) **
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x01; //faire un status du registre d'écriture (instruction)
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    raz=SPIDR; // séquence de RAZ SPIF lecture de SPICSR suivi de lecture de SPIDR

    SPIDR=0x00; // valeur de config du registre d'écriture de la eeprom
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    PBDR=0; //raz du portB
    //******

    for(i=0;i<5;i++);

    //**** routine pour valider l'écriture ***
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x06; // instruction à envoyer à la mémoire 0x06 pour permettre l'écriture
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    raz=SPIDR;

    PBDR=0; // raz du portB (désélection de la EEPROM)

    //******

    for(i=0;i<5;i++);

    // *** routine d'écriture d'un octet **
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x02; // instruction à envoyer à la mémoire 0x02 pour écrire
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    raz=SPIDR;

    SPIDR=0xF0; // poid fort de l'adresse (8bits d'horloge)
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0xF0; // poid faible de l'adresse (8bits d'horloge)
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0x00; // donnée envoyée
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    PBDR=0; // raz du portB (désélection de la EEPROM)
    //*****

    for(i=0;i<5;i++);

    // **** vérification du registre de lecture (RDSR) **
    PBDR=0x0E;

    do {
    SPIDR=0x05; // instruction du status du registre de lecture
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0xF0; // 8 tops d'horloge
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0xF0; // 8 tops d'horloge
    while ((SPICSR&0x80)==0);
    raz=SPIDR;
    }

    while((SPIDR&0x01)==1); // attente de fin d'écriture
    raz=SPIDR;

    PBDR=0;

    //******

    for(i=0;i<5;i++);

    //*** instruction pour désactiver l'écriture ***
    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x04; // instruction à envoyer à la mémoire 0x05 pour lire registre d'etat
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    raz=SPIDR;

    PBDR=0; // raz du portB (désélection de la EEPROM)
    //*******

    for(i=0;i<5;i++);

    // *** routine de lecture d'un octet **

    PBDR=0x0E; // sélection de la carte IRQ15 soit 0000 1110 (niveau 0)

    SPIDR=0x03; // instruction à envoyer à la mémoire 0x03 pour lire
    while ((SPICSR&0x80)==0); // le bit7 (SPIF) dit si l'octet est envoyé ou non
    raz=SPIDR;

    SPIDR=0xF0; // poid fort de l'adresse
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0xF0; // poid faible de l'adresse
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    SPIDR=0x00; // 8 tops d'horloge
    while ((SPICSR&0x80)==0);
    raz=SPIDR;

    PBDR=0; // raz du portB (désélection de la EEPROM)

    data=SPIDR; // lecture de la donnée sur le registre SPIDR de la EPPROM

    for(;;
    //*****

    }

    } //les instructions pour ecrire et lire sont toutes correctes.

    Lorsque je lance la procédure "status du registre de lecture" (SPIDR=0x05), il se fait à l'infini et je ne sais pas pourquoi.


    Amicalement.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. problème de prog avec Pickit2
    Par invite4d22160b dans le forum Électronique
    Réponses: 4
    Dernier message: 06/02/2008, 19h32
  2. Problème avec IC prog
    Par invite8c9108c7 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 11/07/2007, 08h50
  3. Programmation avec le st7
    Par inviteb6a46f47 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/04/2007, 13h58
  4. problème avec prog. jdm
    Par invite25a714b9 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/06/2005, 14h42
  5. problème avec prog. jdm
    Par invite25a714b9 dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 06/06/2005, 20h37
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...