ML CAN Kommunikationskort MC000, MC00, MC00, MC00,MC00, MC00, MC, MC, MC är, Motorola INC MS-DOS är Microsoft Corporation MC och MDk är microlf db är GMV Dokument: ML - Hårdvarubeskrivning Id. nummer: -0 microlfãããalla rättigheter förbehållna
HÅRDVARUBESKRIVNING ML 0/ lu HWW ODERUDWLRQV RFK XWYHFNOLQJVNRUW I U &$ SURWRNROOHW.RUWHW VRP lu DQSDVVDW I U 0&V H[SDQVLRQVEXVV LQQHKnOOHU lyhq HQ ELWDUV SDUDOOHOO LQSRUW PHG VWU PVWlOODUH RFK HQ ELWDUV SDUDOOHOO XWSRUW PHG O\VGLRGHUI UDWWNXQQDJHLQGDWDWLOORFKVWXGHUDXWGDWDIUnQ NRUWHW BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB. INLEDNING. ADRESSRUM.. Basadresser.. I/O-adresser. KORTETS FUNKTION. KORTETS ANSLUTNINGAR.. Expansionsbuss.. I/O.. Avbrott.. Kortets byglar. APPLIKATIONSEXEMPEL Den senaste versionen av denna dokumentation finns tillgänglig på Internetadressen: http://www.gbgmv.se 0. PLFUROI
ML HÅRDVARUBESKRIVNING,QOHGQLQJ ML är ett laborationskort för CAN-protokollet och anpassad för MC s expansionsbuss. Utöver en CAN-krets är kortet bestyckat med en -bitars parallell inport och en -bitars parallell utport. Indata kan ställas med hjälp av strömställare på inporten och utdata kan avläsas på lysdioder på utporten. Vidare har de parallella portarna anslutningar anpassats för tangentbordet ML (Se under Anslutningar nedan). Det finns också en stiftlist som kan byglas för att exempelvis ge kortet olika CAN-adresser eller nod-nummer i distribuerade applikationer. P J-J microlf ML CAN Kommunikationskort P P PJ R, R P P P P J-J PLFUROI 0.
HÅRDVARUBESKRIVNING ML $GUHVVUXP Kortet kan byglas för olika adresser. Se nedan. %DVDGUHVVHU De olika basadresserna ges i tabellen nedan. Studera figur för att lokalisera bygel J och J. (U=Ute, I=Inne) Tabell. Basadresser Bygel Bas adress (-maxadr) J J U U $000 (-$FF) U I $00 (-$FF) I U $00 (-$FF) I I $00 (-$FF) Vid leverans är bygel J och J ute och default är kortets basadress således $000. Observera att ofullständig adressavkodning används vilket innebär att hela adressområdet från $000 till $FF utnyttjas,dguhvvhu Följande adresser används på ML. Tabell. IO-adresser Krets Basadress Skriv/Läs CAN-krets Bas +$000 Utport Bas +$00 Skriv Inport Bas +$00 Läs CAN-kretsen upptar hela adressutrummet från $000 $0ff och Ut och inporten nås inom hela adressområde från $00 till $ff..ruwhwvixqnwlrq De parallella in- och utgångarna är enkla I/O. Som inport används en buffert HC och som utport ett register HC. Observera portarnas anslutningar P och P är anpassade för att anslutas till tangentbordsdelen på ML. Kortet är bestyckad med en CAN-krets från INTEL. Denna är byglad för -bit Non-Multiplexed Mode och en synkron buss (DSACK används EJ). Det hänvisas här till databladen för för registerbeskrivning. 0. PLFUROI
ML HÅRDVARUBESKRIVNING Som drivkrets för CAN-bussen används PHILIPS C0. Denna har en justerbar SLOPE via spänningsdelaren R/R. Vid leverans är denna byglad till jord via R, som är dragen som en ledningsbana på kortets lödsida. Studera figur och lokalisera R. För att ändra SLOPE krävs att ledningsbanan på kortets lödsida kapas och önskade motståndsvärden för R/R löd in. Byglarna J-J är direkt anslutna till CAN-kretsens port och bestyckade med ett pull-up motstånd till +V. Porten är vid RESET definierad som inport och kan byglas till jord för att ställa indata. Byglarna kan således vara användbara för att ge kortet ett unikt nummer etc. Eller för att starta upp olika programrutiner från PROM exempelvis..ruwhwvdqvoxwqlqjdu Studera figur som visar kortets olika anslutningar. ([SDQVLRQVEXVV Anslutningarna P, P, P och P (alla 0-poliga) utgör kortets expansionsbuss. Tabell. Expansionsbuss Pin P P P P NC GND NC GND CSEXT D0 A A R/W D A A AS D A A RESET D A A CLKOUT D A A TIN D A0 A TOUT D A A TGATE D A A0 0 NC +V NC +V PLFUROI 0.
HÅRDVARUBESKRIVNING ML, Anslutning P (Parallell Output) och P (Parallell Input) beskrivs i tabellen nedan. Tabell. I/O-anslutning Pin P P GND GND DO0 DI0 DO DI DO DI DO DI DO DI DO DI DO DI DO DI 0 +V +V Anslutning P är för CAN-bussen. Tabell. CAN-anslutning Pin P CAN-Low CAN-High $YEURWW Avbrott från CAN-kretsen kan kopplas vidare från anslutning J..RUWHWVE\JODU Tabell. Byglar Bygel Funktion J-J Anger kortets basadress, se kapitel J-J För framtida bruk J-J Port P.0 -P. på CAN-krets 0. PLFUROI
ML HÅRDVARUBESKRIVNING $SSOLNDWLRQVH[HPSHO Följande subrutiner ger exempel på hur ML kan användas tillsammans med MC. Programexemplet är utvecklat med XC. * * Interface routines MC/ML * C-prototypes: * void CANinit(void); * void CANSend(int msgobject, char *data); * void CANSetupRec(int msgobj); * int CANrec(int msgobject); * Export... DEFINE _CANInit DEFINE _CANSend DEFINE _CANSetupRec DEFINE _CANRec * io-addresses for MC/ML CAN EQU $000 **************************************** * CAN controller init * see Intel application note AP- * * C-prototype: * void CANinit(void); _CANInit: * init controller LEA (CAN).L,A0 controller base address * set CPU interface register: (page ) * SCLK = XTAL/ * MCLK = SCLK * disable CLKOUT signal MOVE.B #$0,(,A0) * set CCE (Change Configuration Register) * bit in Control register (page ) * enable write access to configuration registers * prevent activities on the CAN-bus ORI.B #$,(A0) * set bus configuration register (page ) * bypass comparator * logical ones is recessive * disable TXl driver * DcR0 and DcR are don t cares MOVE.B #$,($f,a0) PLFUROI 0.
HÅRDVARUBESKRIVNING ML * set bit timing registers (page ) * 0 kbits/s * sampling mode is fast * TSEG =, TSEG = (page ) MOVE.B #$0,($f,A0) MOVE.B #$,($f,a0) * clear CCE bit * prevent write access of * configuration registers MOVE.B #,(A0) * reset control register 0 and for each message object MOVE.L #$0,D0 resloop: MOVE.B #$,(A0,D0) MOVE.B #$,(,A0,D0) ADDI.L #$0,D0 CMPI.L #$00,D0 BNE resloop * set global masks "don t care" CLR.B (,A0) CLR.B (,A0) CLR.B (,A0) CLR.B (,A0) CLR.B ($a,a0) CLR.B ($b,a0) * load C into arbitration registers * message object (page ) * will set ID(0) MOVE.B #$c,($,a0) MOVE.B #$c,($,a0) MOVE.B #$c,($,a0) MOVE.B #$c,($,a0) * Take chip out of the init mode CLR.B (a0) RTS 0. PLFUROI
ML HÅRDVARUBESKRIVNING ************************************************ * Simple send routine for test purposes * * C-Prototype: * void CANSend(int msgobject, char *data); _CANSend: * calc base address for this message object MOVE.L (,SP),D0 get "msgobject" ROL.L #,D0 LEA (CAN).L,A0 base of controller ADDA.L D0,A0 a0 holds address of control0 MOVEA.L (,SP),A address of data * init for transmit MOVE.B #$,(A0) MOVE.B #$,(,A0) MOVE.B #$c,(,a0) * update data start MOVE.B #$FA,(,A0) * update data bytes CLR.L D0 index L: MOVE.B (A)+,(,A0,D0) ADDQ.L #,D0 CMPI.L #,D0 BNE L * update data end MOVE.B #$E,(,A0) * return to caller RTS PLFUROI 0.
HÅRDVARUBESKRIVNING 0 ML ************************************ * Set up message object as receiver * void CANSetupRec(int msgobj) _CANSetupRec: * calc base address for this message object MOVE.L (,SP),D0 get "msgobject" ROL.L #,D0 LEA (CAN).L,A0 base of controller ADDA.L D0,A0 a0 holds address of control0 * setup as receiver MOVE.B #$,(A0) MOVE.B #$,(,A0) MOVE.B #$,(,A0) RTS * * Non-blocking CAN-message receiver * C-Prototype: * int CANrec(int msgobject); _CANRec: * calc base address for this message object MOVE.L (,SP),D0 get "msgobject" ROL.L #,D0 LEA (CAN).L,A0 base of controller ADDA.L D0,A0 MOVEA.L (,SP),A address of data * see if message is pending BTST.B #,(,A0) BEQ RecRet0 no data * Reset NewData MOVE.B #$FD,(,A0) * pick up data CLR.L D0 index L: MOVE.B (,A0,D0),(A)+ ADDQ.L #,D0 CMPI.L #,D0 BNE L MOVE.L #,D0 return TRUE RTS RecRet0: CLR.L D0 return FALSE RTS 0. PLFUROI
ML HÅRDVARUBESKRIVNING /* */ File N.C (node, transmitter) C-test program MC/ML - Can-controller /* prototypes for assembly routines */ void CANInit(void); void CANSend(int, char *); /* sample use */ char Data[][0]; void { int main() i,j; } /* CANInit(); /* init hardware in this node */ strcpy(data[0],"hej"); strcpy(data[],"du"); strcpy(data[],"can.."); j=0; while(){ /* Send the block */ CANSend(,Data[j]); for (i=0;i<00000;i++); /* wait a while */ if(j==)j=0; else j++; /* Show we are alive */ puts("node transmit"); } File N.C (node, receiver) MC/ML - Can-controller */ /* prototypes for assembly routines */ void CANInit(void); int CANRec(int, char *); void CANSetupRec(int); char Data[]; void { } main() CANInit(); /* init hardware in this node */ CANSetupRec(); while(){ /* Spin for a message block */ if(canrec(,data)){ Data[]= \0 ; puts(data); } } PLFUROI 0.
HÅRDVARUBESKRIVNING ML 0. PLFUROI
R 00 U 0 0 C 0n C 0n C 0n P: IDCXM 0 IDCXM 0 P: P: IDCXM 0 IDCXM 0 P: u C IDCXM 0 P: k R HC U B B B B B B B B A A A A A A A A DIR G HC U Q Q Q Q Q Q Q Q D D D D D D D D CLK CLR P: IDCXM 0 S 0.0 ML-- 00 microlf SIMPLE I/O and BUS D0 D0 D0 D0 DO DO DO DO0 AS R/ W CSEXT RESET TGATE TIN TOUT CLKOUT A A A A A A0 A A GND A0 A A A A A A A GND D D D D D D D D0 GND D D D D D D D D0 CSDOUT RESET GND CSDIN GND DI0 DI DI DI DI DI DI DI D0 D D D D D D D A B C D D C B A A Rev Number Title Size Date Filename Drawn by of Sheet
A B C D C C p p X MHz R/ W CSCAN RESET XTAL XTAL A0 A A A A A A A RX 0 0 U R/ W INT RD/ E READY/MISO ALE/AS DSACK0 CS RESET VSS MODE MODE0 TX0 RX0 TX RX XTAL CLKOUT XTAL A0/ICP P.0 A/CP P. A/CSAS P. A/STE P. A/MOSI P. A P. A/SCLK P./ INT A P./ WRH 0 0 J TX CANCLK IRQ J J J J J J J J J J0 J J R k CSEXT R/ W A A A A IRQ U GALV I0 I I/O I I/O I I/O I I/O I I/O I I/O I I/O I I/O I GALV A A CSCAN RE CSDOUT A0 A CSDIN D0 D D D D D D D D0/P.0 D/P. D/P. D/P. D/P. D/P. D/P. D/P. R k TX RX TXD GND RXD U SLOPE CHI CLO NC C0 CHI CLO SLOPE P: R R R Not Connected R jumpered on card solder side CAN CONTROLLER & DRIVER 00 ML-- A B C D Title Size A Date Filename Number Drawn by microlf Sheet of Rev.0
microlf ML U P R R C J J J J Bit 0 U CAN Kommunikationskort R S Bit 0 U P CAN BUS J IRQ U P R R P C U C U UTPORT INPORT P P J J J0 J J J J J R P C X C C