demande explication de SPI

Programmation des microcontrôleurs Atmel de type AT et ATMEGA en language assembleur

Modérateurs: yanmar, Duval JP

demande explication de SPI

Messagede pasrico » Sam 6 Mar 2010 06:26

bonjour
est ce que quelqun pourrait me donner un exemple de programmation de la spi (ou un source) , perso je suis sur 8515 mais
la spi est commune

mon projet:
en convention directe et 9600,8,e,2
j'ai un client disons
- master sur la pinb7
- client slave sur la pinb6

en asm j'ai fais une routine pour un octet
- rx_master
- tx_master
- rx_slave
- tx_slave

mais comme c'est le master (que je ne controle pas, car externe) qui gere, j'ai un time-out
car je recoit une demande du master, je la transmet au slave, je recupere la reponse que je transmet au master

je pense que la spi est faite pour cela?
est ce que je dois programmer la spi avant d'envoyer la routine d'envoi d'un octet? ou la spi doit etre integree dans cette
routine?
c'est pour cette raison qu'un exemple visuel me permettra d'avancer
merci
pasrico
Ponctuel
Ponctuel
 
Messages: 33
Inscription: Sam 12 Nov 2005 19:40

Re: demande explication de SPI

Messagede B2V » Sam 6 Mar 2010 11:21

Bonjour

Voici :

Code: Tout sélectionner
PulseSPI:
   sbi   SPI,SCK

   ldi   AccuH,0x0C              ; Tempo fonction des circuits utilisés
PlS00:
   dec   AccuH
   brne   PlS00

   cbi   SPI,SCK

   ldi   AccuH,0x02              ; Tempo fonction des circuits utilisés
PlS01:
   dec   AccuH
   brne   PlS01
   ret
;***************************************************************************

WrSPI:
   ldi   AccuL,0x08
WrS00:
   rol   SpiD
   brcc   WrS01
   sbi   SPI,MOSI
   rjmp   WrS02
WrS01:
   cbi   SPI,MOSI
WrS02:
   rcall   PulseSPI
   dec   AccuL
   brne   WrS00
   ret
;***************************************************************************

RdSPI:
   ldi   AccuL,0x08
   clr   SpiD
RdS00:
   lsl   SpiD
   sbic   PINB,MISO
   inc   SpiD
   rcall   PulseSPI
   dec   AccuL
   brne   RdS00
   ret
;***************************************************************************


Voici un code pour le master qui envoi l'horloge
Le principe est plus simple pour l'esclave qui positionne sa réponse et qui attends que le master vienne la shifter dans sont registre lors du Transfert.

Les échanges se font dans les deux sens simultanément. à la cadence de l'horloge du master.

@+
B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: demande explication de SPI

Messagede pasrico » Sam 6 Mar 2010 20:15

bonjour B2v et merci de m'avoir repondu
j'ai compris tes exemples mais :
- la routine PulseSPI equivaut à un tempo d'une bit ? (372 impulsions à 3,54 mHz)
comme je debute je n'utilise pas de diviseur de frequence et donc je fais avec 372 impulsions pour une bit
- quand la sck est à 1 la pin du mosi et celle du miso sont a la meme valeur ?
ce que j'aimerai savoir si l'emploi de sck met les pin mosi et miso a la meme valeur et tout le temp où elle est à 1 ?

schematiquement j'ai :
decodeur "send" --> pinb,7 (miso) en recept / pinb,6 (mosi) en "send" --> pin i/o carte en "recept"

je vais essayer de faire un mixage classique et spi, mais si tu as une idée, je suis preneur
a+
pasrico
Ponctuel
Ponctuel
 
Messages: 33
Inscription: Sam 12 Nov 2005 19:40

Re: demande explication de SPI

Messagede B2V » Sam 6 Mar 2010 20:43

Bonsoir

En fait la routine PulseSPI fait simplement évoluer l'horloge à une période mini (ici environ 50µCycles état haut 6µCycles état bas, soit avec l'appel et le retour: 64µC environ ) soit une fréquence de 15625Hz/MHz.

à chaque coup d'horloge (Changement de SCK):
MOSI contient le bit en cours de transmission du Master
MISO contient le bit en cours de transmission du Slave
L'échantillonnage des valeurs MISO et MOSI se fait au choix sur front montant ou descendant en fonction du bit CPOL et CPHA

pasrico a écrit:schematiquement j'ai :
decodeur "send" --> pinb,7 (miso) en recept / pinb,6 (mosi) en "send" --> pin i/o carte en "recept"


Je n'ai pas trop compris ce que tu voulais faire ...
@+
B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: demande explication de SPI

Messagede pasrico » Lun 8 Mar 2010 05:34

bonjour
j'ai compris, mais ce n'est pas ce que je voulais
je pensais que la spi marchait en interne sur le meme processeur (8515), c'est a dire que ce que je recevais sur une pin, ressortait simultanement sur l'autre pin et en bit à bit ,pas de tampon
et qu'on pouvait inverser les sens pour le retour
je viens de voir dans le livre de christian tavernier que la spi est pour la communication entre un processeur maitre et 1 ou
plusieurs esclaves, pas mon cas
merci
schematiquement, il me faudrait une routine dans ce style
en ayant portb,x et portb,y sur la meme puce (8515)
- j'attend le start-bit sur le portb,x
- j'attend une tempo de 1/2 bit pour etre au milieu du start-bit
- j'envoi immediatement le start-bit sur portb,y
- j'attends tempo 1 bit
- je lis la pinb,x et je la traite et je change l'etat du portb,y
je boucle pour 8 bits
je traite le bit parite
et les 2 stop-bits
je remets les ports en entree

evidemment en inversant les ports j'ai la routine retour
je l'ai deja realiser mais si la fonction portb,7 --- portb,6 marche bien,
la fonction portb,6 --- portb,7 marche pas trop bien, pourtant j'ai fais une copie et modifier les ports
peut etre un prob de ddrb avec le portb,6 ??? (mosi)
si tu veux les voirs , dis le moi, et où tu les veux, ici ? en mp ? ou avec un lien ?
merci encore
pasrico
Ponctuel
Ponctuel
 
Messages: 33
Inscription: Sam 12 Nov 2005 19:40

Re: demande explication de SPI

Messagede B2V » Lun 8 Mar 2010 17:29

Bonsoir

Pourquoi ne pas t'inspirer du MicroBus

@+
B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var


Retourner vers Language Assembleur

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité