/*-----------------------------------------------------------------------+
|             DEPARTAMENTO MECANICA UNIVERSIDADE AVEIRO                  |
|                                                                        |
| Nome:                                                                  |
|       David Manuel Costa Gameiro          N:20281                      |
|       Filipe Carvalho Mostardinha         N:22085                      |
|                                                                        |
| Data:   10/Maio/2004     Nome Ficheiro: InitCan.c                      |
+-----------------------------------------------------------------------*/

#include <p18f258.h>
#include "InitCan.h"
#include "include\Can18xx8.h"

typedef enum _BOOL {FALSE=0,TRUE=1}BOOL;


unsigned int *HostID;//Nome do Master
extern unsigned int NomeMCU;

#pragma code

void InitCan(void)
{
	HostID = &NomeMCU;

	// Para configurar o modulo CAN de comunicacoes devemos
    // estar em modo configuracao, CANCON
    CANSetOperationMode(CAN_OP_MODE_CONFIG);

	CANInitialize(FASE_SALTO, BRP, FASE_SEG1,
            FASE_SEG2, FASE_PROP, CONFIGURACAO);    


    // Definicao das MASCARAs e dos Filtros

	CANSetMask(CAN_MASK_B1, MASCARA, CAN_CONFIG_STD_MSG);
	CANSetMask(CAN_MASK_B2, MASCARA, CAN_CONFIG_STD_MSG);

	CANSetFilter(CAN_FILTER_B1_F1, *HostID, CAN_CONFIG_STD_MSG);
	CANSetFilter(CAN_FILTER_B1_F2, *HostID, CAN_CONFIG_STD_MSG);
	CANSetFilter(CAN_FILTER_B2_F1, *HostID, CAN_CONFIG_STD_MSG);
	CANSetFilter(CAN_FILTER_B2_F2, *HostID, CAN_CONFIG_STD_MSG);
	CANSetFilter(CAN_FILTER_B2_F3, *HostID, CAN_CONFIG_STD_MSG);
	CANSetFilter(CAN_FILTER_B2_F4, *HostID, CAN_CONFIG_STD_MSG);

	//ACTIVAR o modo LoopBack do CAN
	CANSetOperationMode(CAN_OP_MODE_NORMAL);

	//Activar os interrupts dos buffers de recepcao
	PIE3bits.RXB1IE = TRUE;
	PIE3bits.RXB0IE = TRUE;
}
