Transcript
Page 1: SPI - Serial  Peripheral  Interface

SPI - Serial Peripheral Interface

Pour aller lire le CAN et écrire dans le CNA

Page 2: SPI - Serial  Peripheral  Interface

2

Schéma bloc

Page 3: SPI - Serial  Peripheral  Interface

3

Page 4: SPI - Serial  Peripheral  Interface

4

Page 5: SPI - Serial  Peripheral  Interface

5

Page 6: SPI - Serial  Peripheral  Interface

6

Page 7: SPI - Serial  Peripheral  Interface

7

Page 8: SPI - Serial  Peripheral  Interface

8

Registre des modes du SPI

Page 9: SPI - Serial  Peripheral  Interface

9

Page 10: SPI - Serial  Peripheral  Interface

10

Page 11: SPI - Serial  Peripheral  Interface

11

Page 12: SPI - Serial  Peripheral  Interface

12

Page 13: SPI - Serial  Peripheral  Interface

13

Page 14: SPI - Serial  Peripheral  Interface

14

Page 15: SPI - Serial  Peripheral  Interface

15

Page 16: SPI - Serial  Peripheral  Interface

16

Page 17: SPI - Serial  Peripheral  Interface

17

Page 18: SPI - Serial  Peripheral  Interface

18

Page 19: SPI - Serial  Peripheral  Interface

19

Page 20: SPI - Serial  Peripheral  Interface

20

Page 21: SPI - Serial  Peripheral  Interface

21

Exemple initialisation du SPI

Page 22: SPI - Serial  Peripheral  Interface

22

Configuration du SPI 1) Associer les broches au SPI:

Exemple SPI #1: PIO_Configure(pinsSPI1, PIO_LISTSIZE(pinsSPI1));

Page 23: SPI - Serial  Peripheral  Interface

23

Configuration du SPI 2) Configuration du registre AAAA:

Structure: config = (AT91C_SPI_DLYBCS & (0 << 24)) | (AT91C_SPI_PCS & (0xE << 16)) | (AT91C_SPI_LLB & (0 << 7)) | (AT91C_SPI_MODFDIS & (1 << 4)) | (AT91C_SPI_PCSDEC & (0 << 2)) | (AT91C_SPI_PS & (1 << 1)) | (AT91C_SPI_MSTR & (1 << 0));

SPI_Configure(AT91C_BASE_SPI1, AT91C_ID_SPI1, config);

Page 24: SPI - Serial  Peripheral  Interface

24

Configuration du SPI 2) Configuration du registre AAAA:

Structure: config = (AT91C_SPI_DLYBCS & (0 << 24)) | (AT91C_SPI_PCS & (0xE << 16)) | (AT91C_SPI_LLB & (0 << 7)) | (AT91C_SPI_MODFDIS & (1 << 4)) | (AT91C_SPI_PCSDEC & (0 << 2)) | (AT91C_SPI_PS & (1 << 1)) | (AT91C_SPI_MSTR & (1 << 0));

SPI_Configure(AT91C_BASE_SPI1, AT91C_ID_SPI1, config);

Maitre ou esclave

Sélection périphérique comm.

Décodage périphérique

Détection de fautes

« Local loopback »

« Chip select » périphérique

Délais entre « chip select »

Page 25: SPI - Serial  Peripheral  Interface

25

Configuration du SPI 2) Configuration du registre AAAA:

Structure: config = (AT91C_SPI_DLYBCT & (0x01 << 24)) | (AT91C_SPI_DLYBS & (0x01 << 16)) | (AT91C_SPI_SCBR & (0x10 << 8)) | (AT91C_SPI_BITS & (AT91C_SPI_BITS_16)) | (AT91C_SPI_CSAAT & (0x0 << 3)) | (AT91C_SPI_NCPHA & (0x0 << 1)) | (AT91C_SPI_CPOL & (0x1 << 0));

SPI_ConfigureNPCS(AT91C_BASE_SPI1, 3, config); SPI_ConfigureNPCS(AT91C_BASE_SPI1, 2, config);

Page 26: SPI - Serial  Peripheral  Interface

26

Configuration du SPI 2) Configuration du registre AAAA:

Structure: config = (AT91C_SPI_DLYBCT & (0x01 << 24)) | (AT91C_SPI_DLYBS & (0x01 << 16)) | (AT91C_SPI_SCBR & (0x10 << 8)) | (AT91C_SPI_BITS & (AT91C_SPI_BITS_16)) | (AT91C_SPI_CSAAT & (0x0 << 3)) | (AT91C_SPI_NCPHA & (0x0 << 1)) | (AT91C_SPI_CPOL & (0x1 << 0));

SPI_ConfigureNPCS(AT91C_BASE_SPI1, 3, config); SPI_ConfigureNPCS(AT91C_BASE_SPI1, 2, config);

Polarité de l’horloge du SPI

Phase de l’horloge

Chip select actif après trans. ?

Taille du transfert (16 bits)

Vitesse communication

Délai avant SPCK

Délai entre 2 transactions

CNA

CAN

Page 27: SPI - Serial  Peripheral  Interface

27

Configuration du SPI 3) Activation du SPI:

Directement (pour le SPI #1): SPI_Enable(AT91C_BASE_SPI1);

Tout cela peut se regrouper dans une fonction que nous pouvons nommer: void initSPI(void){ … }

Page 28: SPI - Serial  Peripheral  Interface

28

MAX5322Convertisseur numérique analogique

Page 29: SPI - Serial  Peripheral  Interface

29

Montage de laboratoire

Page 30: SPI - Serial  Peripheral  Interface

30

MAX5322 – Schéma bloc

Page 31: SPI - Serial  Peripheral  Interface

31

CNA MAX5322 – Conversion R-2R

Page 32: SPI - Serial  Peripheral  Interface

32

Page 33: SPI - Serial  Peripheral  Interface

33

Page 34: SPI - Serial  Peripheral  Interface

34

Page 35: SPI - Serial  Peripheral  Interface

35

Tensions en sortie

Page 36: SPI - Serial  Peripheral  Interface

36

Configuration du CNA

Page 37: SPI - Serial  Peripheral  Interface

37

Configuration broches MAX5322

SetupDAC()Décla

ratio

n

variables

Boar

d.h

Page 38: SPI - Serial  Peripheral  Interface

38

Suite

Broche LDAC mise à 1

Broche CLR mise à 1

Broche UNI/BIP A mise à 0

Broche UNI/BIP B mise à 1

Broche SHDN mise à 1

Page 39: SPI - Serial  Peripheral  Interface

39

Transactions du SPI avec le CNA Initialisation du CNA

SPI_Write(AT91C_BASE_SPI1, 3, 0xE000); SPI_Read(AT91C_BASE_SPI1); Wait(1000);

SPI_Write(AT91C_BASE_SPI1, 3, (0x4000 | 0x07FF));

SPI_Read(AT91C_BASE_SPI1);

Activations des canaux du

CNA

Canal A – DAC_OUT

0 volt

Page 40: SPI - Serial  Peripheral  Interface

40

Transactions du SPI avec le CNA Initialisation du CNA

SPI_Write(AT91C_BASE_SPI1, 3, 0xE000); SPI_Read(AT91C_BASE_SPI1); Wait(1000);

SPI_Write(AT91C_BASE_SPI1, 3, (0x4000 | 0x07FF)); SPI_Read(AT91C_BASE_SPI1);

SPI_Write(AT91C_BASE_SPI1, 3, (0x5000 | 0x0000)); SPI_Read(AT91C_BASE_SPI1);

Activations des canaux du

CNA

Canal A – DAC_OUT

0 volt

Canal B - VSHIFT

0 volt

Page 41: SPI - Serial  Peripheral  Interface

41

MAX1270Convertisseur analogique numérique

Page 42: SPI - Serial  Peripheral  Interface

42

Montage de laboratoire

Page 43: SPI - Serial  Peripheral  Interface

43

MAX1270 – Schéma de la puce

Page 44: SPI - Serial  Peripheral  Interface

44

MAX1270 – Schéma bloc interne

Page 45: SPI - Serial  Peripheral  Interface

45

CAN MAX1270

Page 46: SPI - Serial  Peripheral  Interface

46

Page 47: SPI - Serial  Peripheral  Interface

47

Page 48: SPI - Serial  Peripheral  Interface

48

Étendues et polarités

Page 49: SPI - Serial  Peripheral  Interface

49

Transaction avec le CAN

Page 50: SPI - Serial  Peripheral  Interface

50

Transaction avec le CAN

Pour une lecture du CAN, il faut faire deux transactions. La première envoie le numéro du canal à lire; Exemple: 0x9100

START = 1 Canal choisi: 0x001 – Canal 1 RNG = 1 et BIP = 0: Sortie monopolaire; PD1 = 0 et PD0 = 0: Opération normale, horloge

interne.

Réponse du convertisseur: les 3 premiers bits du CAN.

Page 51: SPI - Serial  Peripheral  Interface

51

Transaction avec le CAN

Pour une lecture du CAN, il faut faire deux transactions. La deuxième est pour permettre de recevoir le reste; Réponse du convertisseur: les 9 derniers bits du CAN.

Canaux: Canal 0 : 0x8D00 -> Borne J6 Canal 1: 0x9100 -> Vshift Canal 2: 0xA100 -> Thermocouple Canal 3: 0xB100 -> Puce LM35

Page 52: SPI - Serial  Peripheral  Interface

52

Initialisation du CAN Faite lors de l’initialisation du SPI #1.

Associer les broches du SPI #1 pour le CAN