]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/app/usbcan/can.c
Embedded code and LinCAN driver now working
[lincan.git] / embedded / app / usbcan / can.c
index ae9d530169d35deb90c8f4daa35839eff8eab691..25d7f343f0762fa97db3303050ffa12b92fd94ee 100644 (file)
@@ -35,13 +35,12 @@ void can_comm_init()
 
        SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
        CLR_OUT_PIN(IO1,P1_SJA1000_RST_PIN);
-       for (slowdown=0;slowdown<20*SJA1000_SCLK;slowdown++);
+       SJA1000_INIT_DELAY();
        SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
        // Due to change in design there is CS_PIN connected with ALE_PIN and ALE_PIN connection to LPC is interrupted
        //      CLR_OUT_PIN(IO0,P0_SJA1000_ALE_PIN);
        SET_OUT_PIN(IO1,P1_SJA1000_RST_PIN);
-       for (slowdown=0;slowdown<20*SJA1000_SCLK;slowdown++);
-
+       SJA1000_INIT_DELAY();
 }
 
 int can_write(uint8_t address,uint8_t* data)
@@ -52,25 +51,25 @@ int can_write(uint8_t address,uint8_t* data)
        SET_OUT_PIN(IO0,P0_SJA1000_RD_PIN);     // Stays high on write
        SET_OUT_PIN(IO0,P0_SJA1000_WR_PIN); // Stays high on address write
        SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN); // Sets output buffers to third state
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        //SET_OUT_PIN(IO0,P0_SJA1000_ALE_PIN); // Start command
 
        // Set memory address
        IO1SET=__val2mfld(0x00FF0000,address); // Shift data to SJA pins and output them
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        //CLR_OUT_PIN(IO0,P0_SJA1000_ALE_PIN); // Makes address active
        CLR_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
 
        // Setting data
        CLR_OUT_PIN(IO0,P0_SJA1000_WR_PIN);
 
        IO1CLR=0x00FF0000;
        IO1SET=__val2mfld(0x00FF0000,*data);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        SET_OUT_PIN(IO0,P0_SJA1000_WR_PIN); // Data should be accepted by now
        SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        return 0;
 }
 
@@ -82,12 +81,12 @@ int can_read(const uint8_t address,uint8_t* data)
        SET_OUT_PIN(IO0,P0_SJA1000_WR_PIN); // Stays high on read
        SET_OUT_PIN(IO0,P0_SJA1000_RD_PIN); // Stays high while entering address
        SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        //SET_OUT_PIN(IO0,P0_SJA1000_ALE_PIN);
 
        // Request memory address
        IO1SET=__val2mfld(0x00FF0000,address);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        //CLR_OUT_PIN(IO0,P0_SJA1000_ALE_PIN);
        CLR_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
 
@@ -95,11 +94,11 @@ int can_read(const uint8_t address,uint8_t* data)
 
        IO1DIR&=~0x00FF0000; // Sets port as input
        CLR_OUT_PIN(IO0,P0_SJA1000_RD_PIN);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        *data=__mfld2val(0x00FF0000,IO1PIN);
        SET_OUT_PIN(IO0,P0_SJA1000_RD_PIN);
        SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
-       for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+       SJA1000_DELAY();
        return 0;
 }
 
@@ -135,138 +134,3 @@ int can_init(){
 
        return 0;
 }
-
-int can_autobaud(int tries){
-       uint8_t data=0;
-       int i=0,j,baudset=0;
-       // Single acceptance filter, reset mode, listen mode for baud determination
-       data=sjaMOD_LOM|sjaMOD_AFM|sjaMOD_RM;
-       can_write((uint8_t)SJAMOD,(uint8_t*)&data);
-       do {
-               canbaud.baudrate=sja1000_freqs[i][0]*1000;
-               canbaud.sjw=(sja1000_freqs[i][1]&0x3F)|(sja1000_freqs[i][2]&0xC0);
-               canbaud.sample_pt=(sja1000_freqs[i][3]&0x0F)|(sja1000_freqs[i][4]&0x70);
-               can_write(SJABTR0,(uint8_t *)(&canbaud.sjw));
-               can_write(SJABTR1,(uint8_t *)(&canbaud.sample_pt));
-               uint8_t intstor,temp;
-               can_read(SJAIER,&intstor);
-               temp=sjaIER_RIE|sjaIER_BEIE;
-               can_write(SJAIER,&temp);
-
-               /// Leave reset mode
-               can_read(SJAMOD,&temp);
-               temp&=~sjaMOD_RM;
-               can_write(SJAMOD,&temp);
-               j=0;
-               do{
-                       can_read(SJAMOD,&temp);
-                       if (j++>20)
-                               return -1;
-               } while (temp&sjaMOD_RM);
-
-               /// Wait for successfull packet receive or receive error
-               j=0;
-               while (!(IO0PIN & P0_SJA1000_INT_PIN)){
-               }
-
-               can_read(SJAIR,&temp);
-               if (temp & sjaIR_RI)
-                       baudset=1;
-
-               /// Back to reset
-               can_read(SJAMOD,&temp);
-               temp|=sjaMOD_RM;
-               can_write(SJAMOD,&temp);
-               j=0;
-               do{
-                       can_read(SJAMOD,&temp);
-                       if (j++>20)
-                               return -1;
-               } while (!(temp&sjaMOD_RM));
-
-               if (++i==sja1000_freq_cnt)
-                       return -1;
-       } while (baudset==0);
-       return 0;
-}
-
-int can_poll(){
-
-       return 0;
-}
-
-int can_transmit_direct(uint8_t *data){
-       int len=0,ext=0,i;
-       uint8_t *ptr=data,tmitptr,temp;
-       ext=(*ptr)& sjaFRM_FF;
-       len=(*ptr)& 0xFF;
-
-       // check if transmit buffer is free
-       do {
-               if (can_poll()==-1)
-                       return -1;
-               can_read(SJASR,&temp);
-               temp&=sjaSR_TBS;
-       } while (!temp);
-
-       tmitptr=SJAFRM;
-       can_write(tmitptr++,data++); // Header
-       can_write(tmitptr++,data++); // Ident 1
-       can_write(tmitptr++,data++); // Ident 2
-       if (ext){
-               can_write(tmitptr++,data++); // Ident 3
-               can_write(tmitptr++,data++); // Ident 4
-       }
-       for (i=0;i<len;i++)
-               can_write(tmitptr++,data++); // Data i;
-
-       // Set TR bit
-       temp=sjaCMR_TR;
-       can_write(SJACMR,&temp);
-
-       return 0;
-}
-
-int can_transmit(int ext_header,int rtr,uint8_t *mask,int numbytes,uint8_t *data){
-       uint8_t tmitptr,temp;
-       int i=0;
-
-       if (numbytes<0)
-               numbytes=0;
-
-       if (mask==NULL)
-       ;       // use internal mask
-
-       // check if transmit buffer is free
-       do {
-               if (can_poll()==-1)
-                       return -1;
-               can_read(SJASR,&temp);
-               temp&=sjaSR_TBS;
-       } while (!temp);
-
-       tmitptr=SJAFRM;
-       temp=(ext_header?sjaFRM_FF:0)|(rtr?sjaFRM_RTR:0)|(numbytes>8?0x08:numbytes);
-       can_write(tmitptr++,&temp); // Header
-
-       can_write(tmitptr++,mask++); // Ident 1
-       can_write(tmitptr++,mask++); // Ident 2
-       if (ext_header){
-               can_write(tmitptr++,mask++); // Ident 3
-               can_write(tmitptr++,mask++); // Ident 4
-       }
-       for (i=0;i<(numbytes>8?0x08:numbytes);i++)
-               can_write(tmitptr++,data++); // Data i;
-
-       // Set TR bit
-       temp=sjaCMR_TR;
-       can_write(SJACMR,&temp);
-
-       return 0;
-}
-
-int can_receive(uint8_t len,uint8_t *data){
-
-
-       return 0;
-}