On utilisera la version HC912DG128 La carte HC12 de Motorola On utilisera la version HC912DG128 Dispose d ’un Processeur 16 bits 128 Kilo bytes de mémoire EEPROM flash 8 kilo bytes de mémoire RAM 2 kilo byte de mémoire EEPROM 2 port de communication série asynchrones SCI Une interface série SPI Une interface inter processeur IIC Un timer ECT (Enhanced capture timer) 2x8 canaux CAN (ADC), de résolution 10 bits Un modulateur de largeur des signaux (Pulse Width Modulator) 4 voies
La carte
Le 68HC12 a 16 lignes d ’adresses; Espace d ’adresse Le 68HC12 a 16 lignes d ’adresses; Peut adresser 2^16 locations distinctes Chaque location retient un byte , soit 8 bits 2^16 = 2^6 x 2^10 = 64 X 1024 = 64 KB 1KB = 2^10 = 1024 l ’espace d ’adresse est de 64 K RAM: Ramdom Access Memoy (lecture et écriture) ROM: Read Only Memory (Porgrammée à l ’usine) PROM: Programmable Read Only, programmée une fois sur site EEPROM: Electrically Erasable Programmable Read Only Memory. Programmable et effaçable électriquement (plutôt qu ’avec de UV) Le HC12 a: 768 Bytes EEPROM programmable et effaçable avec un tension 5V 32 Kbytes Flash EEPROM, effaçable abev 12 V externe
0x0000 Registres 512 Bytes 0x01FF 0x0800 RAM 512 Bytes utilisateur HC12: Les 64K (général) 0x0000 Registres 512 Bytes 0x01FF 0x0800 RAM utilisateur 512 Bytes 0x09FF 512 Bytes 0x0A00 RAM D-BUG 12 0x0BFF 0x0D00 EEPROM utilisateur 768 Bytes 0x0FFF 0x8000 D-Bug 12 Flash EEPROM 32k Bytes 0xFFFF
Les 64K mémoire du DG128 (plusieurs modes possibles) $0000 $03FF Registres 2k Mappables Single Normal Single Spécial $0000 $0800 $0FFF $0400 EEPROM 2k Mappables $0800 $2000 $3FFF $1000 RAM 8k Mappables $2000 $4000 EEPROM flash fixe 16K $4000 Fenêtre 16K, ouvre sur 8 pages EEPROM flash $8000 $A000 $BFFF $8000 Protégée BOOT $C000 EEPROM flash fixe 16K $E000 $FFFF $c000 Protégée BOOT $FF00 VECTEURS $FF00 $FFFF VECTEURS BDM si active $FFFF
HC12: Lignes d ’alimentation VDD et masse VSS: Alimentation interne. Le CPU est alimenté avec VDD et VSS . VDDX et VSSX: Alimentation externe utilisée pour les ports entrées sorties. VDDA, VSSA: Donne l ’alimentation et la masse pour le fonctionnement du convertisseur analogique digital A/D (CAN). VRH et VRL: Tensions de références supérieures et inférieures du convertisseur A/D (CAN) VFP: Alimentation pour programmation et effacement ainsi que de fonctionnement l ’EEPROM Flash VSTBY: Alimentation de Stand-by de la RAM statique. Elle est utilisée pour maintenir le contenu de la RAM. VOIR documentation Motorola pour le numéro des pins
Les Ports du HC12 Le MC68HC912DG128 offre 11 Ports pour l ’ accès et le contrôle des diverses unités et sous systèmes. Les pins d ‘ un Port peuvent être utilisées pour des opérations d ’entrées-sorties d ’une manière générale. Chaque Port consiste en un registre de DONNÉE qui peut souvent être lu et écrit à n ’importe quel instant et un registre donnée de direction (data direction register) pour contrôler la direction de de chaque pin (entrée sortie) Après un RESET toutes les pins I/O sont configurées en entrée.
Port entrée simplifiée Chaque lecture de $0000 prend les signaux en entrée. LDAA $00 charge les données en entrée dans l ’accu A D3 E N T R S D2 D1 D0 Lire à partir de 0x0000
Port sortie simplifiée Chaque écriture à l ’adresse $01, déverse (latches) les données dans les bascules (flip-flops). Les données sont alors visibles sur les pin externes. STAA $01 Met le contenu de l ’accu A sur les pins externes. D3 D Q SO R T I E S D2 D1 D0 Ecrire à 0x0001
Le port A est utilisée pour les adresses et les données en Port A et Port B Le port A est utilisée pour les adresses et les données en mode étendu. Quand ce Port n ’est pas utilisé pour accès externe, ses pins peuvent être utilisées en I/O de manière générale. Le Port A peut être lu ou écrit n ’importe quand. Le registre DDRA détermine pour chaque pin du Port A la direction: Entrée ou Sortie. bit à 0 --> pin en entrée bit à 1 --> pin en sortie Par défaut (après RESET) tous les bits sont à zéro Le Port B est comme le Port A, il utilise les registre DDRB. DDRA et DDRB ne figurent plus sur la carte (map) des registres si le CPU est configuré dans un mode étendu.
Exemple Utilisation Ports A et B Lire le Port B et écrire le résultat dans le Port A PROG: EQU $0800 STACK: EQU $0A00 PORTA: EQU $0000 PORTB: EQU $0001 DDRA: EQU $0002 DDRB: EQU $0003 CODE: SECTION org PROG lds #STACK; initialise le pointeur de pile lda #$FF ; mettre le PORT A en sortie staa DDRA ; tous le bit à 1 , c ’est-à-dire en sortie clr DDRB; le PORT B en en entrée boucle: ldaa PORTB ; lire le PORT B staa PORTA; écrire sur le PORT A jsr ATTENTE; attendre un peu bra boucle ; SUBROUTINE ATTENTE 10 ms ATTENTE: psha bne boucle1 pshx deca ldaa #25 bne boucle2 boucle2: ldx #800 pulx boucle1: dex pula rts
Port E Les pins du Port E sont utilisées pour le contrôle des signaux du BUS et les signaux pour le service des requêtes d ’interruptions. Quand une pin n ’est pas utilisée pour l ’une de ces fonction, elle pourra être utilisée en I/O. Les pin PE[1:0] sont en entrée uniquement. Le registre PEAR détermine la fonction des pins. Le registre DDRE détermine la direction: Entrée/Sortie. (uniquement DDRE[7:2] puisque DDRE[1:0] <--0] Après un RESET, toutes les pins DDRE[7:0] sont à 0. DDRE ne figure plus sur la carte (map) des registres si le CPU est configuré dans un mode étendu.
Les pins du Port H peuvent être configurées en entrée ou Le Port H, Port J Les pins du Port H peuvent être configurées en entrée ou en sortie pour pour les événements de type réveil (key wake-up), quand le CPU est en mode STOP ou WAIT. Le ‘ Key wake-up’ est déclenché avec le front montant ou descendant du signal KWPH. Une interruption est alors générée si le bit correspondant est à 1 (KWIEH) . Si le bit d interruption d ’une pin n ’est pas armé, alors la pin peut être utilisée en I/O de manière générale. Le registre DDRH détermine la direction : Entrée/Sortie Au RESET tous les bits sont à zéro: Entrée. Le registre KWPH détermine sur quel type de front (montant ou descendant) les key wake-up sont déclenchés. Le port J est utilisé de manière identique au Port H. Il utilise les registres KWPJ, KWIEJ et DDRJ
Contrôleur CAN Le MC68HC912DG128 dispose de 2 CAN identiques: CAN0, CAN1. Le module est un contrôleur de communication utilisant le protocole CAN 2.0A/B (spécifications BOCSH). Initialement conçu pour servir comme un Bus Série dans un environnement EMI. Chaque CAN utilise deux bits: Entrée: RxCAN0 ou RxCAN1 Sortie: TxCAN0 ou TxCAN1 le bit TxCAN0/1 représente le bit du niveau logique utilisé pour le CAN: 0: pour l ’état le plus dominant (prépondérant) 1: pour l ’état non dominant (récessif).
Dispose de pins bi-directionnelles au bus IIC d ’interface Port IB Dispose de pins bi-directionnelles au bus IIC d ’interface entre sous-systèmes ( inter processeurs). IIC = Inter-IC. Le bus d ’interface IIC possède une ligne de donnée série (SDA) et une ligne d ’horloge série pour le transfert des données. Quant le IIC n ’est pas activé les lignes peuvent être utilisée en I/O. Le registre DDRIB détermine la direction du Port IB quand il est utilisé en I/O. Voir la documentation sur le Inter-IC Bus de Motorola.
Ce Port sert d ’interface au système de conversion Port AD1/ AD0 Ce Port sert d ’interface au système de conversion analogique-digitale. Il peut être utilisé comme un Port d ’entrée d ’une manière générale. Quand la fonction A/D n ’est pas activée le Port dispose de 8 pins d ’entrée PAD1[7:0]. Le bit APDU du registre ATD1CL2 active la fonction du système A/D pour AD1. Pour AD0: Les pins sont PAD0[7:0] le registre de contrôle ATD0CL2.
Dispose de 4 Canaux en sortie pour la modulation Port P Dispose de 4 Canaux en sortie pour la modulation des signaux en largeur (Pulse Width Modulation). La mise en marche du PWM est activée avec le registre PWEN. Si PWN est non activé alors les pins peuvent être utilisées en I/O. Alors, le registre DDRP détermine la direction du PORT. En Mode PWM, le registre de contrôle est PWCTL. (voir Pulse-Width Modulator)
Port S Le Port S consiste en l ’interface 8 bit aux systèmes d ’interfaces séries standards ( SCI1 et SCI0) et au système d ’interface périphérique SPI. Les pins du port S sont disponibles en utilisation I/O quand les fonctions séries ne sont pas activées. Les pins du port S peuvent servir plusieurs fonctions selon l ’état des bit du registre de contrôle SP0CR1. Exemple : Le bit WOMS du SC0CR1 a 1, le driver du buffer de sortie sont désactivés pour les bit 0 à 3.
Dispose de 8 pins qui servent de capture Port T Dispose de 8 pins qui servent de capture en entrée et de comparaison en sortie pour les systèmes de Timer et de compteurs d ’impulsions. Si, ces derniers ne sont pas activés les pins peuvent servir en I/O de manière générale. Alors le registre DDRT détermine la direction du Port. Le bit TEN du registre TSCR active la fonction du Timer. Le bit PAEN du registre PACTL active le compteur d ’impulsions.
Compteur 16 bits 8MhZ TCNT( adr. 0x84) TEN Bset TSCR #$80 Exemple: Timer Le Timer est activé en écrivant 1 dans le bit 7 du registre TSCR. On connecte un oscillateur 8-MhZ à un compteur 16-bits. On peut lire le compteur à l ’adresse TCNT. Le compteur commencera à zéro, comptera jusqu ’à $FFFF, ensuite reviendra à 0. Cela prendra 8.182 ms pour faire le tour. Compteur 16 bits TCNT( adr. 0x84) 8MhZ TEN Bset TSCR #$80
Ecrire une fonction pour une attente de 8.192 ms bset TSCR #$80 Exemple TIMER Ecrire une fonction pour une attente de 8.192 ms bset TSCR #$80 loop: ldd TCNT BNE loop Problème: On peut voir 0xFFFF et 0x0001 et louper le 0x0000.
Exemple Timer (suite) Solution: Quand le compteur arrive a $FFFF, un bit d ’overflow est écrit (TOF). C ’est le bit 7 du registre TFGL2. Il peut être alors effacé. (attention le bit 7 de TGFL2 en écriture est différent du bit 7 du TGFL2 en lecture (flip-flop)) . VCC TOF Read D TCNT, ADR 0x84 Q Bit 7 de TFGL2, adr 0x8f 8 Mhz Compteur 16 bits TEN R TOF Write, adr 0x8f Programme d ’attente: bset TSCR , #$80 loop brclr TFGL2, #$80, loop ldaa #$80 staa TFGL2 ; clear TOF
Timer: Comparaison en Sortie Il existent 5 registres de comparaison en sortie: TOC1, TOC2, TOC3, TOC4 et TOC5. A chaque cycle de l ’horloge E-clock, une comparaison est faite entre la valeur du registre TCNT et les registres TOC. Si la comparaison indique une valeur identique alors: Le flag de comparaison approprié est mis à 1, c ’est les flag OCnF (n=0 à 4). Une interruption peut être générée. C ’est la ‘ output compare interupt ’ Une pin du Port A peut être mise à zéro, à 1 ou simplement complémentée à 2.
Timer: mesure de temps Capture en entrée Pour mesurer une durée de temps entre deux événements: entre le début et la fin d ’un signal par exemple. On dispose de trois registres de capture en entrée (vérifiez): TIC1, TIC2, TIC3. Les registres capture la valeur du compteur d ’impulsions en réponse à un signal externe. Les signaux externes qui peuvent causer la capture sont les pins 0, 1 et 2 du Port A. Les options de capture: Front montant Front descendant N ’importe quel front Désactivé. - A la capture les flags: ICF1, ICF2 ou ICF3 sont mis. - Une interruption peur être générée.
Conversion Analogique-Numérique But: Obtenir un nombre binaire proportionnel à la tension d ’entrée. A partir un simple amplificateur opérationnel. Approche:
Addition de 4 signaux à l ’entrée A/D 4bits Addition de 4 signaux à l ’entrée
A/D suite
A/D suite B= B3 B3 B2 B1 en binaire
A/D Division/comparaison successives
5V Vin - Dout + - + - + - + - + - + - + - + A/D 8 bits simple 4,375V
Convertisseur A/D en pente Dans ce cas, l ’algorithme de conversion consiste à mettre le registre A/D à zéro volts ensuite incrément jusqu ’à l ’intersection avec la tension d ’entrée 2^N coups d ’horloge par conversion ( N bits) Flag Comparateur Contrôleur Vin D/A Registre Convertisseur D/A Sortie digitale V VIN Latch V D/A Temps
Conversion A/D Approximations successives Ici le convertisseur met le registre A/D à la moitié de la valeur maximale: soit 10000000 (pour 8bits). Le comparateur indique si la tension d ’entrée est plus grande ou plus petite que VA/D. Si elle est plus grande alors VA/D est mise à mi-chemin entre cette valeur et la valeur maximale soit 11000000. Si VA/D est inférieure alors VA/D est mise à mis chemin entre les deux valeurs précédentes soit 1010000. Au bout de 8 itérations tous les bits sont connus. Cette algorithme prend N itérations et le temps de conversion est connu d ’avance. Registre de comparaisons successives Start L A T C H Vin + H/Bas - CLK D/A
ATDCTL2 ATDCTL4 ATDCTL5 CD CC CB CA ATDCSTAT SCF CC2 CC1 CC0 A/D du HC12 ATDCTL2 ADPU AFFC ASWAI ASCIE ASCIF ATDCTL4 S10BM SMP1 SMP0 PRS4 PRS3 PRS2 PRS1 PRS0 ATDCTL5 S8CM SCAN MULT CD CC CB CA ATDCSTAT SCF CC2 CC1 CC0 CCF7 CCF6 CCF5 CCF4 CCF3 CCF2 CCF1 CCF0 SCAN = 0 ==> Faire 8 conversions et ensuite arrêter SCAN =1 ==> conversion continue. ADPU = 1 : mise en marche A/D S8CM =1 : mode de conversion 8 canaux CD = 0 (test en usine) S10BM = 0 mode 8 bit, données dans ATRxH, ou ATRx bits 15:8 S10BM = 1 mode 10 bits, données dans ATRx bits 15:8 ATDCTL4 = 0x01 ( Horloge AD 2 Mhz, 18 cycles par conversion, mode 8 bits ATDCTL4= 0x81 ( Horloge AD 2 Mhz, 20 cycles par conversion, mode 10 bits (les autres valeurs dans ATDCTL4 ne marchent pas !) Après écriture dans ATDCTL5, les flags SCF sont mis à zéro, les conversions démarrent. Après la fin des 8 conversions, les lags SCF sont à 1 ( 4 conversions si S8CM =0)
A/D du HC12 S8CM=1 ( mode 8 canaux) MULT=0 PAD0 ADR0H PAD1 ADR1H A/D PAD7 ADR7H CD=0 CC CB CA MULT=1 ADR0H ADR1H A/D ADR7H CD=0