M. N. schrieb:
> Das ist ja auch richtig, damit die Übertragung überhaupt gestartet wird.
> Nachdem das letzte Byte übertragen wurde, mußt Du den Interrupt
> abschalten.
>
> Das könnte so aussehen:
> spi_enableInterrupt(false);
Ok, dass wusste ich so nicht. Dann muss ich das Interrupt einfach 
ausschalten.
Bei der jetztigen Codeversion habe ich das Interrupt noch nicht 
ausgeschaltet, aber es funktioniert in dem Sinne von es schreibt die 
ganze Zeit.
| 1 | void main(void) {
 | 
| 2 | 
 | 
| 3 |     spi_init();
 | 
| 4 |     spi_setMode(Master, FallingEdge, LeadingEdge, MSBfirst);
 | 
| 5 |     spi_selectChip(true);
 | 
| 6 |     spi_enableInterrupt(true);
 | 
| 7 |     
 | 
| 8 |       for(;;)
 | 
| 9 |       {
 | 
| 10 |         __RESET_WATCHDOG();
 | 
| 11 | 
 | 
| 12 |           if( spi_checkComplete()==true) {
 | 
| 13 |             
 | 
| 14 |           SendeTakt(27);
 | 
| 15 |           }
 | 
| 16 |       }  
 | 
| 17 |    } 
 | 
| 18 | 
 | 
| 19 | __interrupt VectorNumber_Vspi1 void ISR_SPI() {
 | 
| 20 | 
 | 
| 21 |     __RESET_WATCHDOG();
 | 
| 22 | 
 | 
| 23 |     if(sbufferpos<32) {
 | 
| 24 |         sbufferpos = sbufferpos + 1;
 | 
| 25 | 
 | 
| 26 |            if((SPI1S&(SPI1S_SPRF_MASK)) == 0) {
 | 
| 27 |            } 
 | 
| 28 |            else{
 | 
| 29 |               SPI1S;
 | 
| 30 |               SPI1D;
 | 
| 31 |            }
 | 
| 32 |            if((SPI1S&(SPI1S_SPTEF_MASK)) == 0){  
 | 
| 33 |            } 
 | 
| 34 |             else{
 | 
| 35 |               SPI1S;
 | 
| 36 |               SendeTakt(27);
 | 
| 37 |             }
 | 
| 38 |     }
 | 
| 39 |     else{
 | 
| 40 |        sbufferpos = 0;
 | 
| 41 |     }  
 | 
| 42 | }
 | 
Hier die spi_checkComplete:
| 1 | bool spi_checkComplete()
 | 
| 2 | {
 | 
| 3 |   uint8 Temp;
 | 
| 4 | 
 | 
| 5 |   if((SPI1S&(SPI1S_SPTEF_MASK)) == 0)
 | 
| 6 |   {
 | 
| 7 |     return false;
 | 
| 8 |   }
 | 
| 9 |   else
 | 
| 10 |   {
 | 
| 11 |     // SPI Data Buffer lesen um Interrupt Bit zu leeren
 | 
| 12 |     Temp = SPI1D;
 | 
| 13 |     return true;
 | 
| 14 |   }
 | 
| 15 | }
 | 
Den Watchdog sollte man ja eigentlich nciht im Interrupt feeden. Wenn 
ich es allerdings nicht mache, wird das Watchdoginterrupt nach etwa 20 
Durchläufen des Sendevorgangs ausgelöst. Ziemlich komisch, es werden 
keine Fehler angezeigt -> COP Watchdog caused a Reset
Hat hier noch jemand eine Idee?
Controller: MC9S08AW60 (freescale)
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC9S08AW60.pdf
Auf jeden Fall schon mal vielen Dank für die hilfreichen Antworten!