SPI - Serial Peripheral Interface Schéma bloc

Download Report

Transcript SPI - Serial Peripheral Interface Schéma bloc

2014-05-22
SPI - Serial Peripheral Interface
Pour aller lire le CAN et écrire dans le CNA
Schéma bloc
2
1
2014-05-22
3
4
2
2014-05-22
5
Chronogrammes
Mode 0
Mode 1
6
3
2014-05-22
Chronogrammes
Mode 2
Mode 3
7
Chronogramme d’une transaction
8
4
2014-05-22
Chronogramme d’une transaction
9
10
5
2014-05-22
11
Registre des modes du SPI
12
6
2014-05-22
13
14
7
2014-05-22
15
16
8
2014-05-22
17
18
9
2014-05-22
19
20
10
2014-05-22
21
22
11
2014-05-22
23
Exemple initialisation du SPI
24
12
2014-05-22
Exemple initialisation du SPI
25
Configuration du SPI
1) Associer les broches au SPI:
Exemple SPI #1:
PIO_Configure(pinsSPI1, PIO_LISTSIZE(pinsSPI1));
26
13
2014-05-22
Configuration du SPI
2) Configuration des registres SPI_CR et SPI_MR:
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);
27
Configuration du SPI
2) Configuration des registres SPI_CR et SPI_MR :
Structure:
config = (AT91C_SPI_DLYBCS & (0 << 24)) | Délais entre « chip select »
(AT91C_SPI_PCS & (0xE << 16)) | « Chip select » périphérique
(AT91C_SPI_LLB & (0 << 7)) |
« Local loopback »
(AT91C_SPI_MODFDIS & (1 << 4)) | Détection de fautes
(AT91C_SPI_PCSDEC & (0 << 2)) | Décodage périphérique
(AT91C_SPI_PS & (1 << 1)) |
Sélection périphérique comm.
(AT91C_SPI_MSTR & (1 << 0));
Maitre ou esclave
SPI_Configure(AT91C_BASE_SPI1, AT91C_ID_SPI1, config);
28
14
2014-05-22
Configuration du SPI
2) Configuration du registre SPI_CSR3:
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);
29
Configuration du SPI
2) Configuration du registre SPI_CSR3 :
Structure:
config = (AT91C_SPI_DLYBCT & (0x01 << 24))
| entre 2 transactions
Délai
(AT91C_SPI_DLYBS & (0x01 << 16)) | Délai avant SPCK
(AT91C_SPI_SCBR & (0x10 << 8)) | Vitesse communication
Taille du transfert
(16 bits)
(AT91C_SPI_BITS & (AT91C_SPI_BITS_16))
|
select actif après trans. ?
(AT91C_SPI_CSAAT & (0x0 << 3)) Chip
|
(AT91C_SPI_NCPHA & (0x0 << 1)) | Phase de l’horloge
(AT91C_SPI_CPOL & (0x1 << 0)); Polarité de l’horloge du SPI
SPI_ConfigureNPCS(AT91C_BASE_SPI1, 3, config);
30
15
2014-05-22
Configuration du SPI
2b) Configuration du registre SPI_CSR2 :
…
SPI_ConfigureNPCS(AT91C_BASE_SPI1, 2, config);
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){
…
}
31
MAX5322
Convertisseur numérique analogique
32
16
2014-05-22
Montage de laboratoire
33
MAX5322 – Schéma bloc
34
17
2014-05-22
CNA MAX5322 – Conversion R-2R
35
36
18
2014-05-22
37
38
19
2014-05-22
Tensions en sortie
39
Configuration du CNA
40
20
2014-05-22
Configuration broches MAX5322
SetupDAC()
41
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
42
21
2014-05-22
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);
43
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);
44
22
2014-05-22
MAX1270
Convertisseur analogique numérique
45
Montage de laboratoire
46
23
2014-05-22
MAX1270 – Schéma de la puce
47
MAX1270 – Schéma bloc interne
48
24
2014-05-22
CAN MAX1270
49
50
25
2014-05-22
51
Étendues et polarités
52
26
2014-05-22
Transaction avec le CAN
53
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.
54
27
2014-05-22
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
55
Initialisation du CAN
Faite lors de l’initialisation du SPI #1.
Associer les broches du SPI #1 pour le CAN
56
28