/*=======================================================================+
|             DEPARTAMENTO MECANICA UNIVERSIDADE AVEIRO                  |
|               Projecto Humanoide (PHUA - MODULROB)                     |
|                                                                        |
| Programadores:                                                         |
|              David Manuel Costa Gameiro          N:20281               |
|              Filipe Carvalho Mostardinha         N:22085               |
|                                                                        |
| Nome Ficheiro: InitPic.c                                               |
|                                                                        |
|                            SOURCE FILE                                 |
+=======================================================================*/


#include <p18f258.h>
#include "InitPic.h"

/*------------------------------------------------------------------+
|    InitPic(long FreqOsc, int baud,byte FreqAct)                   |
|                                                                   |
| Entradas: FreqOsc - frequencia do oscilador em MHz                |
|           baud - baudrate para a Usart                            |
|           FreqAct - frequencia d actualizacao dados das juntas    |
|                                                                   |
| Saidas: nenhuma                                                   |
|                                                                   |
| Objectivos: Inicializar os registos do Pic                        | 
+------------------------------------------------------------------*/


void InitPic(byte FreqOsc, int baud,byte FreqAct)
{

/*------------------------------------------------------------------+
|                    Definicoes dos TRIS do PIC                     |
+------------------------------------------------------------------*/
//PortoA <1:7> saˇdas exepto RA0
TRISA = 0x01;
//PortoB <2> entradas CanRx, <0:1><3:7> saidas
TRISB = 0b00000100;
//PortoC <0:6> saidas, RC7 entrada(RX USART)
TRISC = 0b10000000;

/*------------------------------------------------------------------+
|          			    Defini‡”es da USART             		    |
+------------------------------------------------------------------*/

 //verificar datasheet pag 185
SPBRG = (byte)(((FreqOsc*1E6)/baud)/16)-1;

//Usar a USART em High Speed,(BRG=0 Low Speed)
TXSTAbits.BRGH = true;   
//Activa os pinos da porta serie
RCSTAbits.SPEN = true;   

TXSTAbits.TXEN = true;
//Modo continuo na recepcao fica activo
RCSTAbits.CREN = true;

/*------------------------------------------------------------------+
|          			    Defini‡”es do TIMER0             		    |
+------------------------------------------------------------------*/

/* T0CON = 0 pq apenas precisamos uma contador de 8 bits, sem 
prescaler, e a freq de oscila‡ao interna */
T0CON = 0x00;
//contagens a realizar para a freq de actualizacao
TMR0L = (byte)(0xFF - (FreqOsc*1.0E6)/(FreqAct*8*1E3));


/*------------------------------------------------------------------+
|          			 Defini‡”es dos Interrupts             		    |
+------------------------------------------------------------------*/

// Global interrupt enable bit (enables all unmasked interrupts)


//Prioridades do Interrupts
IPR1bits.RCIP = true;

IPR3bits.RXB0IP = false;
IPR3bits.RXB1IP = false;

INTCON2bits.TMR0IP = false;

RCONbits.IPEN = true;//Activa interrupts priorit rios

INTCONbits.GIEH = true;	//Interrupts prioritarios activos

INTCONbits.GIEL = true; //interrupts menos prioritarios activos

//Activa o interrupt, para o caso que chegue algo pela porta serie
PIE1bits.RCIE = true;

INTCONbits.TMR0IE = true;
}
