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.