//--------------------------------------------------------------------------------------------------------------------------------------//
// Programa : p7
// Descripcion : manejo de MMC/SD cards
// Frecuencia Externa : Cristal 10MHz con PLL = 80MHz
// Frecuencia de Reloj : 80MHz/2 = 40MHz = 40MIPS
// Nombre de Archivo : p7.c
// Compilador : C30 Compiler by Microchip Technology
//--------------------------------------------------------------------------------------------------------------------------------------//
#include "p33FJ16GP304.h"//encabezado
_FOSCSEL(0x0003);//controla los CB del oscilador
_FOSC(0x00e2);//controla los CB del oscilador
#define FCY 40000000UL//frecuencia de operación
#define Fms (FCY/1000) //coeficiente para milisegundos
#define Fus (FCY/1000000) //coeficiente para microsegundos
#include "h_libpic30.h"
#include "sd_card.h"
int respuesta;
/*inicio de funcion principal*/
int main(void)
{
//configuración del oscilador del microcontrolador
//se utilizará un cristal externo de 10MHz conectado
//al oscilador primario, luego se le aplicará el PLL
//para obtener 80MHz es decir 40MIPS
//80MHz = ( (10MHZ/N1)xM)/N2
CLKDIVbits.PLLPRE=0; // N1=2 primero se divide la frecuencia entre N2
PLLFBD=30; // M=32 luego se le multiplica por M
CLKDIVbits.PLLPOST=0; // N2=2 finalmente se le divide entre N1
//configuracion de puertos como salidas digitales
AD1PCFGL=0Xffff;//configuro todos los pines como digitales
TRISA=0;//todos los pines del porta son salida
TRISB=0;//todos los pines del portb son salida
PORTA=0;//dispara 1 en todos los pines del porta
PORTB=0;//dispara 1 en todos los pines del portb
//
//-------------------------------------------------------------------------
//remapeando los pines del spi modo master
//en los siguientes pines:
//SDO----- pin11 RP13 output
//SDI---- pin14 RP14 input
//CLK----- pin15 RP15 output
//-------------------------------------------------------------------------
_RP13R=7;//sdo se conecta con rp13
_SDI1R=14;//sdi se conecta con rp14
_RP15R=8;//clk se conecta con rp15
//
//-----------------------------------------------------------------------
//configurando el modulo SPI del microcontrolador
//para Modo Master con 3 Pines de Bus de Control
//-----------------------------------------------------------------------
configura_spi();
respuesta=configura_sd();
while(1);
}
/* Fin de la funcion principal */
//
//----------------------------------------------------------------------------
//configura el modulo spi del microcontrolador
//en modo master,para un clock de 208Hz
//----------------------------------------------------------------------------
void configura_spi()
{
_TRISB12=0;//pone como salida el pin sdcs
sdcs=1;//tarjeta sin seleccionar
// init the spi module for a slow (safe) clock speed first
SPI1CON1 = 0x013c; // CKE=1, SMP=0, CKP=0, prescale 1:64
SPI1STAT = 0x8000; // enable the SPI2 peripheral
}