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.
#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