Autor Tema: SPI en QE128  (Leído 2384 veces)

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

Desconectado ikaro._18

  • PIC10
  • *
  • Mensajes: 17
SPI en QE128
« en: 12 de Junio de 2010, 23:07:03 »
Hola amigos, nuevamente recurro a ustedes por ayuda, ojala me puedan ayudar.

Miren actualmente cuento con una DEMOQE128 y una TOWER (me la prestaron).  Nunca he hecho una comunicacion que no sea SCI y ahora por deseo propio deseo realizar una comunicacion SPI con estos dos DEMOKits.

Tengo la teoria, pero no la practica. Ojala ustedes me puedan ayudar facilitandome un codigo, ojala no crean que solo pido ayuda sin haber intentado primero, la verdad es que ya he escrito  mucho codigo, no creo que sirva de  mucho subir mi codigo, el codigo lo he sacada del manual  de usuario, bueno alli viene el codigo del maestro pero no asi el codigo del esclavo, bueno al menos no esta completo. me cuesta mucho trabajo el esclavo porque no se como programarlo.  Midispositivo maestro es el QE128 y el esclavo la tower.

Código: [Seleccionar]
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */



void MCU_Init(void) {
SOPT1 = 0x23; // Watchdog disable. Stop Mode Enable. Background Pin
              // enable. RESET pin enable
SCGC1 = 0x00; // Disable Bus clock to unused peripherals
SCGC2 = 0x02; // Bus Clock to the SPI2 module is enabled
}


void GPIO_Init(void) {
PTDDD = 0x04; // The SS signal must be generated by software using a GPIO
PTCDD = 0xFF; // Configure PTE port as output
PTCD = 0x00; // Put 0's in PTE port



}

void SPI_Init (void) {
SPI2BR = 0x75; // Select the highest baud rate prescaler divisor and the
               // highest baud rate divisor
SPI2C1 = 0xD0; // SPI Interrupt enable, system enable and master mode selected
SPI2C2 = 0x00; // Different pins for data input and data output
}

void delay(unsigned int val)
{
    
   for(;val;val--);//asi tal cual esta funciona este delay
}





void main(void)
{


byte counter=0;
MCU_Init(); // Function that initializes the MCU
GPIO_Init(); // Function that initializes the Ports of the MCU
SPI_Init(); // Function that initializes the SPI module
EnableInterrupts; // enable interrupts
for(;;) {
delay(600000); // Delay function
while (!SPI2S_SPTEF && !PTDD_PTDD3); // Wait until transmit buffer is empty
PTDD_PTDD3 = 0; // Slave Select set in low
SPI2D = counter; // Put in SPI buffer a data to send
PTCD = counter; // Display the counter value on LEDs
counter++; // Increment counter
} // loop forever
// please make sure that you never leave this function


  for(;;) {
    __RESET_WATCHDOG(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
  
}


void interrupt VectorNumber_Vspi2 SPI_ISR(void) {
// SPI interrupt vector number = 12 (S08)
// SPI interrupt vector number = 74 (V1)
byte temp;
while (PTDD_PTDD7); // Wait for clock to return no default
PTDD_PTDD3 = 1; // Set Slave Select high
temp = SPI2S; // Clear register flag
temp = SPI2D; // Read data register to clear receive flag
}
este es el codigo del maestro

PTDDD = 0x04; // The SS signal must be generated by software using a GPIO
esta sentencia creen que este bien?
digo que no el MOSI debe estar como salida y aqui aparece como entrada

Ojala me puedan ayudar

el codigo del esclavo no se como hacerlo
por cierto si tienen un programa de spi en procesador experto tambien lo acepto
Gracias
« Última modificación: 14 de Junio de 2010, 21:09:53 por un Moderador »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: SPI en QE128
« Respuesta #1 en: 14 de Junio de 2010, 11:54:49 »
Hola, cuando coloques código deberias hacerlo bajo los tags "Abrir corchete" code=c"Cerrar corchete"  ... "Abrir corchete"/code"Cerrar corchete".  Asi el código queda mas limpio para ver.
Con respecto a tu duda, la familia Flexis comparte los perifericos con la linea S08 asi que cualquier ejemplo para los S08 te deberia servir ( obvio diferente nomenclatura de los registros ) Te recomiendo:

http://www.freescale.com/files/microcontrollers/doc/user_guide/HCS08QRUG.pdf

Que es un quick reference de casi todos los perifericos con ejemplos en C

También en la carpeta de instalación del CodeWarrior hay algunos ejemplos para los V1

Saludos !





 

anything