Subrutina de inicialización CANINIT()
El protocolo CAN2.0 se utiliza para construir la red de control del bus CAN. La inicialización del SJA1000 incluye principalmente la configuración del modo de trabajo y el registro del código de aceptación. ACR y el registro del escudo de aceptación. Configuración de parámetros para AMR y velocidad en baudios, etc.
void caninit(void) /*Subfunción de inicialización de SJA1000*/
{control = 1; /*Deshabilita la sobrecarga, el error y la interrupción de recepción, y configura el bit de solicitud de reinicio para realizar ingresa al estado de reinicio*/
while (control&0x01== 0);
acceptancecode = 0x01 /*Registro de código de aceptación (número de almacenamiento 1)*/
<; p>acceptancemask= 0xfe; /*Registro de máscara de aceptación*/busstiming0= 0x03; /*Registro de temporización del bus 0, ancho de salto sincrónico
T0= T, BPS= 125 k* /
busstiming1= 0x18; /*Registro de sincronización del bus 1, T1= 9T, T2=2T, velocidad en baudios 500 kbit/S*/
control de salida = 0x1A; , el pin TX1 está flotante*/
clockdivider = 0x40; /*modo BASICCAN, RX1 está conectado a un nivel fijo*/
control = 0x1A; entra en estado de funcionamiento*/
}
Enviar cansend()
La subrutina de envío es responsable de enviar mensajes de nodo y está controlada independientemente por el CAN. controlador SJA1000 Una vez completado, configure el indicador de solicitud de envío en el registro de comando para enviar el mensaje en el búfer de envío SJA1000.
void cansend(unsigned char ID, char*xdata) /*Esta subfunción completa el envío de un cuadro de datos*/
{ while ( (status&0x10)>> 4 == 1 )NOP; /*Compruebe si se completó el envío de la última solicitud*/
mientras ( (status&0x04)>> 2== 0)NOP;
Transmitbuffer1= ID;
Transmitbuffer2= 0x08;
Transmitbuffer3= txdata[0] ;
Transmitbuffer10= txdata[7] ;
Comando = 0x05 ; /*Enviar solicitud */
mientras ((status&0x08)>> 3== 0);
}
Recibir subrutina canreceive ()
La subrutina receptora es responsable de recibir los mensajes del nodo. SJA1000 recibe automáticamente los datos enviados al nodo y coloca los datos recibidos en su búfer de recepción.
Hay dos formas principales para que SJA1000 reciba mensajes: interrumpir la recepción y consultar la recepción. El sistema adopta el método de recepción de interrupciones.
{unsigned char ir;
ir = interrupción /*Obtener el estado de interrupción de SJA1000*/
EA= 0;
If ( (ir&0x04)>> 2== 1)error ( ); 1)overruN ( ); /*Si es una interrupción por sobrecarga, llame a la función de procesamiento de sobrecarga*/
Mientras ( ( (ir&0x04)>> 2== 1)‖( ( (ir&0x08)>> 3)== 1 ){NOP;}
RxID[0] = Recibirbuffer1;
RxID[0] = Recibirbuffer2;
If ( ( (Recibirbuffer2&0x10 )>> 4) == 0) /*Si es un marco de datos, recibir datos*/
{Rxdata[0] = Recibirbuffer3;
<. p> Rxdata[7] = Receiverbuffer10;
Comando = 0x04; /*El búfer de recepción de SJA1000 se libera*/
}
else if ( ( (Receivebuffer2&0x10)>> 4 )== 1) /*Si es un marco remoto, manéjelo en consecuencia*/
{ /*Manejador correspondiente*/
EA= 1;
}
}