ImagenImagenImagenImagen
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Problema con pinguino/SDCC

Postea aqui toda la parte de programación del lenguaje C, C++, C#...

Moderador: Junta Directiva

Responder
FJ_Sanchez
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1082
Registrado: Mié Jun 07, 2006 11:09 pm
Nombre: Francisco Javier Sánchez
Ubicación: Vejer de la Frontera
Contactar:

Problema con pinguino/SDCC

Mensaje por FJ_Sanchez » Mié May 26, 2010 9:15 pm

Muy buenas, hoy en un rato me ha dado por probar unas cosillas con mi placa pinguino y la verdad... llevo ya 3 horas y aún no he conseguido hacer lo que quería. Básicamente no soy capaz de acceder a los bits de los registros que están definidos en el fichero pic18f2550.h, por ejemplo

Código: Seleccionar todo

void spi_hw_init(char mode0, char mode1, char role){
   SSPCON1Bits.SSPEN=0;

   SSPCON1Bits.CKP = mode0&0x01;
   SSPSTATBits.CKE = (~mode1)&0x01;
   SSPCON1 = SSPCON1&(role&0x07);

   if(role <= MASTER_FOSC_T2)
      pinmode(SCK, OUTPUT);
   else
      pinmode(SCK, INPUT);
   pinmode(SDI, INPUT);
   pinmode(SDO, OUTPUT);
   if(role == SLAVE_SS)
      pinmode(SS, OUTPUT);

   SSPCON1Bits.SSPEN = 1;
}
Me da estos errores:

Código: Seleccionar todo

C:/pinguino/tools/bin/../include/pic16/spihwlib.c:34: error 25: Structure/Union expected left of '.->'
C:/pinguino/tools/bin/../include/pic16/spihwlib.c:36: error 20: Undefined identifier 'SSPCON1Bits'
C:/pinguino/tools/bin/../include/pic16/spihwlib.c:36: error 25: Structure/Union expected left of '.->'
C:/pinguino/tools/bin/../include/pic16/spihwlib.c:37: error 20: Undefined identifier 'SSPSTATBits'
C:/pinguino/tools/bin/../include/pic16/spihwlib.c:37: error 25: Structure/Union expected left of '.->'
C:/pinguino/tools/bin/../include/pic16/spihwlib.c:49: error 20: Undefined identifier 'SSPCON1Bits'
C:/pinguino/tools/bin/../include/pic16/spihwlib.c:49: error 25: Structure/Union expected left of '.->'
Error mientras compila archivoC:\pinguino\myLibs\SPIv1
Estoy haciéndolo todo como si fuese una librería, es decir, tengo mi .c y mi .h en el directorio tools/include/pic16/. El fichero .h es así:

Código: Seleccionar todo

/**
 * SPI Hardware library for pinguino project
 *
 * Author: Francisco J. Sánchez Rivas (FJ_Sanchez)
 * fran [at] mipixel [dot] com
 *
 */
 
#ifndef __SPIHWLIB_H__
#define __SPIHWLIB_H__

/* link the I/O library */
#pragma library io

#include <pic18fregs.h>
#include <digitalw.c>

#define SDI             0
#define SDO             9
#define SCK             1
#define SS              17

#define MASTER          0x00
#define MASTER_FOSC_4   0x00
#define MASTER_FOSC_16  0x01
#define MASTER_FOSC_64  0x02
#define MASTER_FOSC_T2  0x03
#define SLAVE           0x04
#define SLAVE_SS        0x05

#define FALLING         0x01
#define RISING          0x00

#endif   /* __SPIHWLIB_H__ */
Y el fichero .c así:

Código: Seleccionar todo

/**
 * SPI Hardware library for pinguino project
 *
 * Author: Francisco J. Sánchez Rivas (FJ_Sanchez)
 * fran [at] mipixel [dot] com
 *
 */

#ifndef __SPIHWLIB_H__
   #include <spihwlib.h>
#endif

/**
 * This function initializes the SPI hardware configuring polarity and edge
 * of transition using Standard SPI Mode Terminology
 *
 *    Mode0,Mode1 CKP   CKE
 *    0,0         0     1
 *    0,1         0     0
 *    1,0         1     1
 *    1,1         1     0
 *
 * Also is possible to use LOW or HIGH for mode0 to indicate the idle state
 * clock level, and RISING or FALLING to indicate when the transmit should
 * take place.
 *
 * The role param could be any of MASTER, MASTER_FOSC_4, MASTER_FOSC_16,
 * MASTER_FOSC_64, SLAVE or SLAVE_SS, where MASTER_FOSC_X indicates the SPI
 * clock speed used. If you want to use the /SS pin in slave mode you should
 * initialize the SPI using SLAVE_SS.
 */

void spi_hw_init(char mode0, char mode1, char role){
   SSPCON1Bits.SSPEN=0;

   SSPCON1Bits.CKP = mode0&0x01;
   SSPSTATBits.CKE = (~mode1)&0x01;
   SSPCON1 = SSPCON1&(role&0x07);

   if(role <= MASTER_FOSC_T2)
      pinmode(SCK, OUTPUT);
   else
      pinmode(SCK, INPUT);
   pinmode(SDI, INPUT);
   pinmode(SDO, OUTPUT);
   if(role == SLAVE_SS)
      pinmode(SS, OUTPUT);

   SSPCON1Bits.SSPEN = 1;
}

char spi_hw_write(char c) {
   char aux;
   //PIR1Bits.SSPIF = 0;
   aux = SSPBUF;
   SSPBUF = c;
   //while(PIR1.Bits.SSPIF == 0);
   c = SSPBUF;
   return c;
}

char spi_hw_read(void) {
   return spi_hw_write(0x00);
}
Las cosas que hay comentadas en el .c es para que no haya tantos errores a la salida. La verdad empiezo a desesperarme, pretendía hacer una librería SPI hardware para pinguino, pero por momentos se me van quitando las ganas...


_ _ _ _ _ _ _ _ _ _

Hack your mind \\ F.J. Sánchez

Okupa tu mente. \\ _ _ _ _ _ _ _ _ _ _ _ _

FJ_Sanchez
Usuario Desarrollador
Usuario Desarrollador
Mensajes: 1082
Registrado: Mié Jun 07, 2006 11:09 pm
Nombre: Francisco Javier Sánchez
Ubicación: Vejer de la Frontera
Contactar:

Re: Problema con pinguino/SDCC

Mensaje por FJ_Sanchez » Mié May 26, 2010 10:16 pm

Vale, estoy echo un animal... el problema está en que es "XXXXbits" con minúsculas... siempre me pasan cosas así, jeje.
_ _ _ _ _ _ _ _ _ _

Hack your mind \\ F.J. Sánchez

Okupa tu mente. \\ _ _ _ _ _ _ _ _ _ _ _ _

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados