Pilote
des bus CAN de l'émulateur
Instructions
Utilisation
Exemple
Principe
Si les
bus CAN A et B de l'émulateur sont des interfaces
d'émission/réception adressables dans la zone des registres
d'extension du coeur FORTH décrites dans la page
correspondante, le pilote va permettre
de faciliter l'utilisation de ces interfaces en se
servant du noyau temps réel.
Instructions
- CW_NUMERO 129
Numéro du
registre d'extension donnant le numéro d'identification de la carte.
- CW_CAN_A_CTRL 448
- CW_CAN_A_BRPR 449
- CW_CAN_A_BTR 450
- CW_CAN_A_TEC 451
- CW_CAN_A_REC 452
- CW_CAN_A_AFMR1_H 456
- CW_CAN_A_AFMR1_L 457
- CW_CAN_A_AFIR1_H 458
- CW_CAN_A_AFIR1_L 459
- CW_CAN_A_AFMR2_H 460
- CW_CAN_A_AFMR2_L 461
- CW_CAN_A_AFIR2_H 462
- CW_CAN_A_AFIR2_L 463
- CW_CAN_A_AFMR3_H 464
- CW_CAN_A_AFMR3_L 465
- CW_CAN_A_AFIR3_H 466
- CW_CAN_A_AFIR3_L 467
- CW_CAN_A_AFMR4_H 468
- CW_CAN_A_AFMR4_L 469
- CW_CAN_A_AFIR4_H 470
- CW_CAN_A_AFIR4_L 471
- CW_CAN_A_ID_H 472
- CW_CAN_A_ID_L 473
- CW_CAN_A_RF 474
- CW_CAN_A_DLC 475
- CW_CAN_A_DATA_01 476
- CW_CAN_A_DATA_23 477
- CW_CAN_A_DATA_45 478
- CW_CAN_A_DATA_67 479
Numéros des
registres d'extension du bus CAN A.
- CW_CAN_B_CTRL 480
- CW_CAN_B_BRPR 481
- CW_CAN_B_BTR 482
- CW_CAN_B_TEC 483
- CW_CAN_B_REC 484
- CW_CAN_B_AFMR1_H 488
- CW_CAN_B_AFMR1_L 489
- CW_CAN_B_AFIR1_H 490
- CW_CAN_B_AFIR1_L 491
- CW_CAN_B_AFMR2_H 492
- CW_CAN_B_AFMR2_L 493
- CW_CAN_B_AFIR2_H 494
- CW_CAN_B_AFIR2_L 495
- CW_CAN_B_AFMR3_H 496
- CW_CAN_B_AFMR3_L 497
- CW_CAN_B_AFIR3_H 498
- CW_CAN_B_AFIR3_L 499
- CW_CAN_B_AFMR4_H 500
- CW_CAN_B_AFMR4_L 501
- CW_CAN_B_AFIR4_H 502
- CW_CAN_B_AFIR4_L 503
- CW_CAN_B_ID_H 504
- CW_CAN_B_ID_L 505
- CW_CAN_B_RF 506
- CW_CAN_B_DLC 507
- CW_CAN_B_DATA_01 508
- CW_CAN_B_DATA_23 509
- CW_CAN_B_DATA_45 510
- CW_CAN_B_DATA_67 511
Numéros des
registres d'extension du bus CAN B.
id,msq,type,no
CAN_A_FILTRE err
Configuration des filtres de réception
du bus CAN A.
id est l'identifiant ou adresse des messages filtrés.
msq est le masque de l'identifiant.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
no est le numéro du filtre (1 à 4).
err: - 0 si configuration correcte,
- -1 si le numéro du filtre est incorrect,
- -2 si le type est incorrect.
id,msq,type,no
CAN_B_FILTRE err
Configuration des filtres
de réception du bus CAN B.
id est l'identifiant ou adresse des messages filtrés.
msq est le masque de l'identifiant.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
no est le numéro du filtre (1 à 4).
err: - 0 si configuration correcte,
- -1 si le numéro du filtre est incorrect,
- -2 si le type est incorrect.
adr,dlc,id,type
CAN_A_TX err
Emission d'un message sur le bus CAN A.
adr est l'adresse du premier octet à émettre.
dlc est la longueur en octet du message (0 à 8).
id est l'identifiant ou adresse du message à émettre.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
err: - 0 si l'émission est correcte,
- -1 si l'émission est impossible (file d'émission saturée),
- -2 si le dlc est incorrect,
- -3 si le type est incorrect.
adr,dlc,id,type
CAN_B_TX err
Emission d'un message sur le bus CAN B.
adr est l'adresse du premier octet à émettre.
dlc est la longueur en octet du message (0 à 8).
id est l'identifiant ou adresse du message à émettre.
ype: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
err: - 0 si l'émission est correcte,
- -1 si l'émission est impossible (file d'émission saturée),
- -2 si le dlc est incorrect,
- -3 si le type est incorrect.
adr CAN_A_RX dlc,id,type
Réception d'un message sur le bus CAN A.
adr est l'adresse du premier octet à recevoir.
dlc est la longueur en octet du message reçu (0 à 8).
id est l'identifiant ou adresse du message reçu.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
dlc, id et type sont à 0 si aucun message n'est reçu (file de réception
vide).
adr CAN_B_RX dlc,id,type
Réception d'un message sur le bus CAN B.
adr est l'adresse du premier octet à recevoir.
dlc est la longueur en octet du message reçu (0 à 8).
id est l'identifiant ou adresse du message reçu.
type: - 1 pour un message avec adresse standard,
- 2 pour un acquittement avec adresse standard,
- 3 pour un message avec adresse étendue,
- 4 pour un acquittement avec adresse étendue.
dlc, id et type sont à 0 si aucun message n'est reçu (file de réception
vide).
phseg2,phseg1,propseg,sjw,brtq
CAN_A_INIT -
Initialisation des paramètres du bus
CAN A.
phseg2, phseg1, propseg et sjw configurent le format de chaque bit
transmis selon la norme CAN.
brtq est la fréquence du quantum de bit.
phseg2,phseg1,propseg,sjw,brtq
CAN_B_INIT -
Initialisation des paramètres du bus
CAN B.
phseg2, phseg1, propseg et sjw configurent le format de chaque bit
transmis selon la norme CAN.
brtq est la fréquence du quantum de bit.
Utilisation
Le
pilote n'étant pas intégré au noyau,
il faut
d'abord compiler le fichier source can_A_B.txt avant de pouvoir l'utiliser.
Il
faut commencer par programmer les filtres de réception si nécessaire
avec les instructions CAN_A_FILTRE et CAN_B_FILTRE (jusqu'à 4 par bus)
puis initialiser les bus requis avec les instructions CAN_A_INIT et
CAN_B_INIT.
Un message pourra alors être émis avec les instructions CAN_A_TX et
CAN_B_TX ou reçu avec les instructions CAN_A_RX et CAN_B_RX.
Exemple
Le
script du fichier test_can.txt
permet de vérifier si les bus CAN A et B sont reliés ou non. Un
compteur est incrémenté si la liaison existe de décrémenté jusqu'à 0
dans le cas contraire:
initialisation des bus CAN A et B
compteur_emis = 0
compteur_recu = 0
tant qu'aucune touche du clavier n'est activee, faire
emission de compteur_emis sur le bus CAN A
attente de 50ms
si reception sur le bus CAN B
alors compteur_recu = valeur recue et emission de compteur_recu+2 sur le bus CAN B
fin de si
attente de 50ms
si reception sur le bus CAN A
alors compteur_emis = valeur recue
fin de si
si compteur_emis>0
alors compteur_emis = compteur_emis+1
fin de si
affichage de la valeur du compteur
fin de tant que
Voici
une vidéo:
