Initialisation du SJA1000 Faire - Bit RESET_REQUEST=1 - Bit TEST_MODE=0 - Ecrire ACCEPTANCE CODE REGISTER - Ecrire ACCEPTANCE MASK REGISTER - Ecrire BUS TIMING REGISTER 0 - Ecrire BUS TIMING REGISTER 1 - Ecrire OUTPUT CONTROL REGISTER - Valider les sources d'interruption (bits 1 à 4 du CONTROL REGISTER) - Bit RESET_REQUEST=0 Fait Traitement par interruption Sur interruption faire Lire INTERRUPT REGISTER et le stocker dans mémoire (* N'utiliser que la copie mémoire pour évaluer les bits d'interruption *) Si WAKE_UP_INTERRUPT=1 faire Si état CPU = "Vient de stopper" alors (* Bus réactivé par activité externe *) Réactiver CPU et traiter données CAN Sinon faire (* La commande GOTO SLEEP a été refusée *) Effectuer traitement adéquat Fin si Fin si Si TRANSMIT_INTERRUPT=1 faire Message CAN suivant peut être écrit dans TRANSMIT BUFFER Bit TRANSMIT_REQUEST=1 Si commande ABORT_TRANSMISSION en cours Si TRANMISSION_COMPLETE_STATUS=1 alors (* Dernière transmission exécutée. Commande ABORT TRANSMISSION non exécutée *) Sinon (* Dernière transmission annulée. Commande ABORT TRANSMISSION exécutée *) Fin si Fin si Fin si Si RECEIVE_INTERRUPT=1 faire Lire RECEIVE BUFFER et stocker en mémoire CPU Bit RELEASE RECEIVE BUFFER=1 Si OVERRUN_INTERRUPT=1 faire (* Des données CAN ont été perdues *) Modifier le programme pour des réactions plus rapides aux interruptions CAN Bit CLEAR OVERRUN=1 Fin si Fin Si ERROR_INTERRUPT=1 faire Lire STATUS REGISTER Si BUS_STATUS=1 ("on bus") faire (* Le SJA1000 est encore actif sur le bus *) Si ERROR_STATUS=0 alors (* Le bus CAN est faiblement perturbé *) Sinon (* Le bus CAN est fortement perturbé *) Fin si Sinon (* Le SJA1000 s'est déconnecté du bus *) Si reconnexion nécessaire Bit RESET_REQUEST=0 (* Le SJA1000 attend 128*11 bits récessifs pour se reconnecter *) Fin si Fin si Fin si Fait Traitement par 'polling' Faire Lire STATUS REGISTER et le stocker dans mémoire (* N'utiliser que la copie mémoire pour évaluer les bits d'interruption *) Si TRANSMIT_BUFFER_ACCESS=1 faire Ecrire message CAN suivant dans TRANSMIT BUFFER Bit TRANSMIT_REQUEST=1 Si commande ABORT_TRANSMISSION en cours Si TRANMISSION_COMPLETE_STATUS=1 alors (* Dernière transmission exécutée. Commande ABORT TRANSMISSION non exécutée *) Sinon (* Dernière transmission annulée. Commande ABORT TRANSMISSION exécutée *) Fin si Fin si Fin si Si RECEIVE_BUFFER_STATUS=1 faire Lire RECEIVE BUFFER et stocker en mémoire CPU Bit RELEASE RECEIVE BUFFER=1 Si DATA_OVERRUN=1 faire (* Des données CAN ont été perdues *) Modifier le programme pour des réactions plus rapides aux interruptions CAN Bit CLEAR OVERRUN=1 Fin si Fin Si BUS_STATUS=1 ("on bus") faire (* Le SJA1000 est encore actif sur le bus *) Si ERROR_STATUS=0 alors (* Le bus CAN est faiblement perturbé *) Sinon (* Le bus CAN est fortement perturbé *) Fin si Sinon (* Le SJA1000 s'est déconnecté du bus *) Si reconnexion nécessaire Bit RESET_REQUEST=0 (* Le SJA1000 attend 128*11 bits récessifs pour se reconnecter *) Fin si Fin si Fait