Deutsch   English   Français   Italiano  
<644c0132$0$7630$426a34cc@news.free.fr>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!feeds.phibee-telecom.net!2.eu.feeder.erje.net!feeder.erje.net!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed2-b.proxad.net!nnrp1-1.free.fr!not-for-mail
Newsgroups: fr.sci.electronique
From: JKB <JKB@hilbert.invalid>
Subject: PI7C9X760
Reply-To: <jkb@invalid>
User-Agent: slrn/1.0.3 (Linux)
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Date: 28 Apr 2023 17:24:02 GMT
Lines: 121
Message-ID: <644c0132$0$7630$426a34cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 28 Apr 2023 19:24:02 CEST
NNTP-Posting-Host: 62.212.98.88
X-Trace: 1682702642 news-4.free.fr 7630 62.212.98.88:28895
X-Complaints-To: abuse@proxad.net
Bytes: 4154

	Bonjour à tous,

	L'un d'entre vous a-t-il déjà joué avec le composant en référence ?
	Il s'agit d'un pont SPI/RS232. Il est câblé sur une carte, j'arrive
	à lui parler au travers du bus SPI, mais je n'ai jamais rien de
	correct sur la sortie.

	J'ai l'impression qu'en fonction de l'ordre d'écriture dans les
	différents registres de configuration, le résultat n'est pas le
	même.

	J'essaie de configurer l'engin en 115200 1N8. J'ai donc écrit ceci :

void
pi7c9x760_init()
{
    // Interruptions
    // Mode FIFO
    pi7c9x760_sfr2(false);
    pi7c9x760_write(0x03, 0xBF);
    // EFR accessible si LCR=0xBF et SFR[2]=0
    pi7c9x760_write(0x02, 0b11010000); // EFR: CTS/RTS, EFR4
    // IER accessible si LCR[7]=0
    pi7c9x760_lcr7(false);
    pi7c9x760_write(0x01, 0b00010011); // IER: sleep mode, TX/RX data ready irqs
    // FCR accessible si LCR[7]=0
    pi7c9x760_write(0x02, 0b01010111); // FCR

    // 115200, 8N1
    // Diviseur 8
    // Sample rate 26 (16 - SCR + CPRN)
    // SCR vaut par défaut 0.
    pi7c9x760_sfr2(true);
    // CPR accessible lorsque LCR=0xBF et SRF[2]=1
    pi7c9x760_write(0x03, 0xBF);        // LCR
    pi7c9x760_write(0x04, 0x1A);        // CPR
    // Contrôle de flux : auto-cts et auto-rts, CD et RI
    // MCR accessible si LCR[7]=0
    pi7c9x760_lcr7(false);
    pi7c9x760_write(0x04, 0b00001100);  // MCR
    // TLR accessible si EFR[4]=1 et MCR[2]=1
    pi7c9x760_write(0x07, 0b00000000);  // TLR
    pi7c9x760_write(0x03, 0b10000000);  // LCR
    // DLH et DLL accessibles parce que LCR[7]==1 et LCR!=0xBF
    pi7c9x760_write(0x01, 0b00000000);  // DLH
    pi7c9x760_write(0x00, 0b00001000);  // DLL
    pi7c9x760_write(0x03, 0b00000011);  // LCR
    
    // SFR pour DSR/DTR
    return;
}   

	avec les deux routines suivantes :

static void
pi7c9x760_lcr7(bool valeur)
{
    uint8_t     tmp;

    tmp = pi7c9x760_read(0x03);

    if (valeur)
    {
        pi7c9x760_write(0x03, tmp | 0b10000000);
    }
    else
    {
        pi7c9x760_write(0x03, tmp & 0b01111111);
    }

    return;
}

static void
pi7c9x760_sfr2(bool valeur)
{
    uint8_t     lcr;
    uint8_t     tmp;


    lcr = pi7c9x760_read(0x03);
    pi7c9x760_write(0x03, 0xBF);        // LCR
    pi7c9x760_write(0x0D, 0x5A);        // SFREN

    tmp = pi7c9x760_read(0x07);

    if (valeur)
    {
        pi7c9x760_write(0x07, tmp | 0b00000100);
    }
    else
    {
        pi7c9x760_write(0x07, tmp & 0b11111011);
    }

    pi7c9x760_write(0x03, lcr);
    return;
}

	Les opérations de lecture et d'écriture se passent bien (j'arrive à
	relire ce que j'ai écrit dans un registre). C'est la configuration
	qui ne se passe pas bien. Par moment, j'ai réussi à envoyer des
	données sur le port série, mais sans doute pas à la bonne vitesse.
	J'ai revérifié ma configuration et, depuis, le composant est muets
	mais j'arrive toujours à y lire des données cohérentes. Typiquement,
	lorsque je polle les interruptions, je lis ceci :

POL: 00 C1 03 

	Donc aucune interruption en cours (00), la valeur du registre (C1,
	correct) et le registre LCR 03 (correct aussià).

	Je suis preneur de toute idée...

	Bien cordialement,

	JKB

-- 
Si votre demande me parvient en code 29, je vous titiouillerai volontiers
une réponse.