RXrdy lu à 1 indique la présence d'au moins un message dans la file de réception. Une écriture dans ce bit ne l'affecte pas.
TXrdy lu à 1 indique la présence d'au moins un message dans la file de
réception. Une écriture dans ce bit ne l'affecte pas.
RXmsq à 1 masque l'interruption de réception activée si RXrdy est à 1.
TXmsq à 1 masque l'interruption d'émission activée si TXrdy est à 1.
RXclr vide la file de réception lorsqu'il est écrit à 1. Il est toujours lu à 0.
TXclr vide la file d'émission lorsqu'il est écrit à 1. Il est toujours lu à 0.
LPB reboucle TX sur RX lorsqu'il est écrit à 1. Dans ce cas:
- l'interface CAN est déconnecté du bus extérieur,
- les filtres suppriment les messages non compatibles.
AF1 à 4 permettent, lorsqu'ils sont à 1, de prendre en compte les
filtres d'acceptation correspondants. A l'initialisation, ces bits son
mis à 0, tous les messages sont alors acceptés.
Le registre CAN_BRPR contient le générateur du quantum de temps:
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
BRP15
|
BRP14
|
BRP13
|
BRP12
|
BRP11
|
BRP10
|
BRP9
|
BRP8
|
BRP7
|
BRP6
|
BRP5
|
BRP4
|
BRP3
|
BRP2
|
BRP1
|
BRP0
|
tq = (BRP+1)/25000000
Le registre CAN_BTR contient la configuration d'échantillonage de chaque bit:
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
réservé
|
réservé
|
réservé
|
réservé
|
réservé
|
SJW1
|
SJW0
|
PRS2
|
PRS1
|
PRS0
|
PHS12
|
PHS11
|
PHS10
|
PHS22
|
PHS21
|
PHS20
|
tbit = (1+PRS+PHS1+PHS2)*tq
Le registre CAN_TEC contient compteur d'erreur de transmission:
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
TEC7
|
TEC6
|
TEC5
|
TEC4
|
TEC3
|
TEC2
|
TEC1
|
TEC0
|
Le registre CAN_REC contient compteur d'erreur de réception:
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
REC7
|
REC6
|
REC5
|
REC4
|
REC3
|
REC2
|
REC1
|
REC0
|
Les registres des filtres d'acceptation ont une taille de 32 bits répartie sur 2 mots de 16 bits:
CAN_AFMR
CAN_AFIR
|
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
H
|
ID28
|
ID27
|
ID26
|
ID25
|
ID24
|
ID23
|
ID22
|
ID21
|
ID20
|
ID19
|
ID18
|
SRR
RTR
|
IDE
|
ID17
|
ID16
|
ID15
|
L
|
ID14
|
ID13
|
ID12
|
ID11
|
ID10
|
ID9
|
ID8
|
ID7
|
ID6
|
ID5
|
ID4
|
ID3
|
ID2
|
ID1
|
ID0
|
RTR
|
CAN_AFMRx_H/L contient le masque des bits à prendre en compte par le
filtre x. Un bit est pris en compte lorsque sa valeur est à 1.
CAN_AFIRx_H/L contient la valeur des bits à prendre en compte par le filtre x.
Pour tout filtre configuré, le contrôleur CAN compare l'identifiant du
message reçu masqué par CAN_AFMRx_H/L avec
CAN_AFIRx_H/L&CAN_AFMRx_H/L et accepte le message en cas d'égalité.
Pour configurer un filtre, il faut d'abord mettre à 0 le bit AFx,
écrire les valeurs désirées dans les registres CAN_AFMRx_H/L e
CAN_AFIRx_H/L puis mettre à 1 le bit AFx.
Pour que les messages CAN soient filtrés, il faut programmer au moins 1 des 4 filtres.
Le message reçu ou à émettre est contenu dans les registres CAN_ID_H/L, CAN_DLC, CAN_DATA_01/23/45/67.
Le contenu du registre CAN_ID_H/L est le suivant:
CAN_ID
|
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
H
|
ID28
|
ID27
|
ID26
|
ID25
|
ID24
|
ID23
|
ID22
|
ID21
|
ID20
|
ID19
|
ID18
|
SRR
RTR
|
IDE
|
ID17
|
ID16
|
ID15
|
L
|
ID14
|
ID13
|
ID12
|
ID11
|
ID10
|
ID9
|
ID8
|
ID7
|
ID6
|
ID5
|
ID4
|
ID3
|
ID2
|
ID1
|
ID0
|
RTR
|
Le contenu du registre CAN_RF, uniquement utilisé en mode réception, est le suivant:
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
AF3
|
AF2
|
AF1
|
AF0 |
En
lecture uniquement (réception), les bits AF1 à 4 sont mis à 1 lorsque
le message reçu est accepté par le filtre correspondant.
Le contenu du registre CAN_DLC est le suivant:
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
DLC3
|
DLC2
|
DLC1
|
DLC0 |
Les registres CAN_DATA_xx contiennent les données du message:
CAN_DATA
|
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
01
| D07
|
D06
|
D05
|
D04
|
D03
|
D02
|
D01
|
D00
|
D17
|
D16
|
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
23
|
D27
|
D26
|
D25
|
D24
|
D23
|
D22
|
D21
|
D20
|
D37
|
D36
|
D35
|
D34
|
D33
|
D32
|
D31
|
D30
|
45
|
D47
|
D46
|
D45
|
D44
|
D43
|
D42
|
D41
|
D40
|
D57
|
D56
|
D55
|
D54
|
D53
|
D52
|
D51
|
D50
|
67
|
D67
|
D66
|
D65
|
D64
|
D63
|
D62
|
D61
|
D60
|
D77
|
D76
|
D75
|
D74
|
D73
|
D72
|
D71
|
D70
|
En lecture, un message est présent si le bit RXrdy est à 1. Le logiciel
doit alors lire les registres CAN_ID_H à CAN_DATA_67 dans cet ordre,
quelque soit la longueur du message (DLC). La lecture de CAN_DATA_67
retire le message reçu de la file de réception. La lecture doit être
renouvelée jusqu'à ce que le bit RXrdy passe à 0 signifiant que la file
de réception est vide.
En écriture, si le bit TXrdy est à 1, le logiciel peut écrire un
nouveau message à transmettre dans les registres CAN_ID_H à CAN_DATA_67
dans cet ordre, quelque soit la longueur du message (DLC). L'écriture
de CAN_DATA_67 insère le message à émettre dans la file d'émission.
L'écriture peut être renouvelée tant que le bit TXrdy est à 1
signifiant que la file d'émission n'est pas pleine.