Autor Tema: Mapeo de pines en el 24FJ16GA002  (Leído 2671 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado boli

  • PIC10
  • *
  • Mensajes: 6
Mapeo de pines en el 24FJ16GA002
« en: 12 de Mayo de 2009, 11:51:41 »
Amigos!
estamos configurando los pines de salida de este pic y todavía no tenemos respues. creemos que le estamos errando a la configuración de los pines Remappable Pins.
Por ejemplo, necesitamos hacer uso del SPI y queremos por ejemplo:
RP0 -> SCK1 (out)
RP5 -> SDO1 (out)
RP4 -> SSO1 (out)
Para esto hemos creado la siguiente función:

void ConfigRPO(void){
    OSCCON = 0x46;
    OSCCON = 0x57;
    OSCCONbits.IOLOCK = 0;
    RPOR0 = 8;
    RPOR2 = 0x709;
    OSCCONbits.IOLOCK = 1;
}

y a esta función la llamamos antes de configurar todo el módulo SPI.
La pregunta:
es así como se hace? nos está faltando algun detalle?

saludos y muchas gracias

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Mapeo de pines en el 24FJ16GA002
« Respuesta #1 en: 13 de Mayo de 2009, 13:29:20 »
hice este código donde configuro los pines del SPI de un pic 33fj, espero ayude en algo. saludos  :-/

//--------------------------------------------------------------------------------------------------------------------------------------//
// Programa               : p7
// 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"


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();
   

   while(1);

}
/* Fin de la funcion principal */
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado boli

  • PIC10
  • *
  • Mensajes: 6
Re: Mapeo de pines en el 24FJ16GA002
« Respuesta #2 en: 13 de Mayo de 2009, 15:06:04 »
gracias micro cadaver !!! voy a ver si sale...
saludos

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Mapeo de pines en el 24FJ16GA002
« Respuesta #3 en: 14 de Mayo de 2009, 13:21:27 »
void ConfigRPO(void){
    OSCCON = 0x46;
    OSCCON = 0x57;
    OSCCONbits.IOLOCK = 0;
    RPOR0 = 8;
    RPOR2 = 0x709;
    OSCCONbits.IOLOCK = 1;
}

sucede que estas desbloqueando la llave de los perifericos, sin embargo en el datasheet dicen que es preferible hacerlo en ASM porque son tiempos críticos de seguridad, sin embargo existe una sentencia built_in referida a dicho manejo, en el documento I/O Ports with Peripheral Pin Select de microchip puedes revisarlo mejor, te pego lo que dice el código.


Example 12-1: Configuring UART1 Input and Output Functions
//*************************************************************
// Unlock Registers
//*************************************************************
__builtin_write_OSCCONL(OSCCON & 0xbf)  //clear the bit 6 of OSCCONL to
  //unlock Pin Re-map
//******************************************************************
//This code is used when interested in inline assembly. If this code is
//used then the above two lines should not be used for unlocking.
//******************************************************************
/*
asm volatile ( ìpush w1 \nî
ìpush w2 \nî
ìpush w3 \nî
"mov #OSCCON, w1 \n"
"mov #0x46, w2 \n"
"mov #0x57, w3 \n"
"mov.b w2, [w1] \n"
"mov.b w3, [w1] \n"
"bclr OSCCON, #6 \n"
ìpop w3 \nî
ìpop w2 \nî
ìpop w1î);
*/
//************************************************************
// Configure Input Functions
//************************************************************
//***************************
// Assign U1Rx To Pin RP0
//***************************
RPINR18bits.U1RXR = 0; //í0í represents RP0
//***************************
// Assign U1CTS To Pin RP1
//***************************
RPINR18bits.U1CTSR = 1; //í1í represents RP1
//************************************************************
// Configure Output Functions
//************************************************************
//***************************
// Assign U1Tx To Pin RP2
//***************************
RPOR1bits.RP2R = 3; //í3í represents U1TX
//***************************
// Assign U1RTS To Pin RP3
//***************************
RPOR1bits.RP3R = 4; //í4í represents U1RTS
//************************************************************
// Lock Registers
//************************************************************
__builtin_write_OSCCONL(OSCCON | 0x40) //set the bit 6 of OSCCONL to
//lock Pin Re-map
//******************************************************************
//This code is used when interested in inline assembly. If this code is
//used then the above two lines should not be used for unlocking.
//******************************************************************
/*
asm volatile ( ìpush w1 \nî
ìpush w2 \nî
ìpush w3 \nî
"mov #OSCCON, w1 \n"
"mov #0x46, w2 \n"
"mov #0x57, w3 \n"
"mov.b w2, [w1] \n"
"mov.b w3, [w1] \n"
"bset OSCCON, #6 \n"
ìpop w3 \nî
ìpop w2 \nî
ìpop w1î;
*/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Mapeo de pines en el 24FJ16GA002
« Respuesta #4 en: 14 de Mayo de 2009, 13:28:19 »
es más, existe esto:

#define  PPSUnLock              __builtin_write_OSCCONL(OSCCON & 0xbf)
#define  PPSLock                __builtin_write_OSCCONL(OSCCON | 0x40)

esta en un archivo llamado PPS.h metido en las entrañas del compilador C30.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com