PI7C9X760 (compatible 16C450)

Bonjour à tous,

Quelqu'un a-t-il déjà utilisé un pi7c9x760 en SPI ? Il paraît qu'il est compatible 16C450 et j'ai des interrogations sur son fonctionnement.

J'arrive à le configurer et à écrire dans le sens SPI/RS232 (en mode FIFO, le composant en question est sur un port SPI d'un ATmega1284P tournant à 8 Mhz).

Tous les caractères passent sans problème. Je peux relire les différentes valeurs des registres.

Dans l'autre sens, lorsque j'envoie un caractère depuis la sonde RS232, le composant m'envoie une interruption. Parfait. je vais donc lire le caractère dans la FIFO. Et là, j'ai systématiquement le caractère plus 128 !

Caractère envoyé => caractère reçu (décimal). L'étoile indique l'arrivée d'une interruption.

A => *193 (65+128) e => *229 (101+128) é => *195* (une DOUBLE interruption)

J'ai peine à croire que le composant en question soit défectueux d'autant que c'est parfaitement reproductible.

Je prends toute idée.

Bien cordialement,

JKB

Reply to
JKB
Loading thread data ...

Le 10-07-2023, JKB snipped-for-privacy@hilbert.invalid a écrit :

Bon,

Problème résolu, composant foiré. Deux composants défectueux sur un lot de dix, naturellement, les deux premiers testés.

Problème suivant :

Considérons le datasheet ici :

formatting link
J'ai utilisé ce datasheet pour écrire un pilote. Dans le sens SPI->RS232, ça fonctionne parfaitement. Dans l'autre sens, si j'envoie caractère par caractère, lentement, ça fonctionne bien (j'ai monté l'interruption matérielle). À chaque caractère, une interruption va au le CPU, lequel interroge le PI7 qui lui répond IRQ 0x0C. Jusque-là, tout est normal.

Si maintenant, je vais un peu plus vite (CTS/RTS actif), je me prends une interruption 0x28.

Problème : qu'est-ce que cette fichue interruption 0x28 ? Page 12, il n'y a que huit interruptions dont aucune ne correspond à 0x28 !

Sortie de mon firmware (les interruptions sont affichées en IRQ+1 parce qu'il existe une interruption 0 [modem status]). L'étoile est l'entrée dans la routine d'interruption, suivie de l'interruption en hexa. C= indique la valeur du caractère reçu.

IRQ 0D C=115

*0D IRQ 0D C=100 *0D IRQ 0D C=102 *0D IRQ 0D C=115 *0D IRQ 0D C=32*29 IRQ 29 IRQ uncatched!

On dirait qu'une interrption déboule avant que la précédente ne soit traitée jusqu'au bout (avant que les drapeaux d'interruption soient réinitialisés). Mais je ne vois rien dans la doc sur ce sujet.

Bien cordialement,

JKB

Reply to
JKB

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.