PIC SPI-interrupt simuleringsproblem (*LÖST*)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

PIC SPI-interrupt simuleringsproblem (*LÖST*)

Inlägg av dr. Agoz »

Hej jag håller på och försöker få igång en 3310 display, så jag jag håller på och försöker få igång SPI enheten på en 16F88.

Än så länge håller jag bara på att simulera koden som jag har skrivit. Koden som jag skrivt borde enligt mig resultera i att WCOL: Write Collision Detect bit sätts till ett, eftersom jag hela tiden skriver till SSPBUF. men det gör den inte, dessutom genereras ingen interrupt även fast jag slagit på den enheten/möjligheten.



här är koden:

Kod: Markera allt

#include "int16Cxx.h"

int counter;

#pragma origin 4
interrupt int_server( void )
{
  int_save_registers
  if( SSPIF == 1 )  
  {
         counter++;
         SSPIF = 0;
  }
  int_restore_registers
}


void main()
{
    counter = 0;
    TRISB = 0x22;
    CCP1CON = 0xFF;
    
    GIE = 1;
    PEIE = 1;
    SSPIE = 1;
    SSPSTAT = 0x80; 
    SSPCON = 0x30;
    while(1)
    {
       SSPBUF = 0xAA;
       SSPBUF = 0xBB;
    }
}
edit: la koden i code taggar. sorry! :(
Senast redigerad av dr. Agoz 24 februari 2006, 10:29:33, redigerad totalt 3 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Använd gärna code-taggarna så går det lite lättare att läsa koden... :-)
För övrigt har jag inte hunnit fundera något på problemet...
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

Du skriver ju till SSPBUF innan den har skickat ut alla bitar, det lär ju betyda att det blir write collision detect. Testa att göra en while loop typ:
SSPBUF = 0xAA;
while (!SSPIF) continue;

Då kommer den inte att fortsätta förrän datat är skickat. Sen skulle du nog kunna skippa interruptet för vad jag vet så har man i princip bara nytta av det i slave mode när man tar emot data.
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

Inlägg av dr. Agoz »

jo precis det var min tanke också. men jag ville se i simuleringen att WCOL blir satt men det gör den inte.

Har också testat att polla SSPIF men denna sätts inte heller

Kod: Markera allt

while(1){
    temp = SSPBUF;
    SSPBUF = 0xAA;
    while(!SSPIF)
   {
   }
}
är det jag som gjort nått galet eller klarar inte simulatorn av att simulera spi?
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Jag har inte alls använt PIC, bara Atmel AVR och där brukar Interrupt-flaggor finnas i 8-bitars register tillsammans med en massa andra flaggor. Så min fundering är; måste du inte maska fram SSPIF eller klarar kompilatorn av när man skriver sådär?
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

Inlägg av dr. Agoz »

Jora det ska inte vara nått problem använder bknd. så det ska inte vara något problem. MPLAB SIM bekräftar att GIE PEIE SSPIE sätts korrekt.
Användarvisningsbild
dr. Agoz
Inlägg: 149
Blev medlem: 9 juni 2005, 11:39:07

Inlägg av dr. Agoz »

Nu är det löst MPLAB kan inte simulera SSP enheten ordentligt enligt MPLAB SIM Help (tog ett tag innan jag hittade hjälpen).
Skriv svar