Sida 1 av 1

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

Postat: 19 februari 2006, 21:12:04
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! :(

Postat: 19 februari 2006, 22:12:17
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...

Postat: 20 februari 2006, 08:20:29
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.

Postat: 20 februari 2006, 09:47:41
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?

Postat: 20 februari 2006, 12:22:32
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?

Postat: 20 februari 2006, 12:44:02
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.

Postat: 24 februari 2006, 10:29:13
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).