Timer overflow triggers an interrupt which should commence an SPI transmission of two bytes but this does not happen. Seems to get stuck in the waiting loop for the SPI. Very new to avr asm so please tell me all the things I'm doing wrong.
.cseg .org $0000 jmp RESET ; Reset Handler .org $001A jmp TIM1_OVF ; Timer2 Compare A Handler TIM1_OVF: ; Service Routine cli in R15, SREG ; save status sbi PIND, 7 ; LED inc R17 cbi PORTB, DDB2 ; Start transmission of data (r17) out SPDR, R17 Wait_Transmit_byte_0: ; Wait for transmission complete in R17, SPSR sbrs R17, SPIF rjmp Wait_Transmit_byte_0 out SPDR, R17 Wait_Transmit_byte_1: ; Wait for transmission complete in R17, SPSR sbrs R17, SPIF rjmp Wait_Transmit_byte_1 sbi PORTB, DDB2 out SREG, R15 ; restore status reti ; return back and enable interrupts RESET: ldi R16, high(RAMEND) ; Main program start out SPH,R16 ; Set Stack Pointer to top of RAM ldi R16, low(RAMEND) out SPL,R16 ldi R16, (1 << SE) ; enable sleep sts SMCR, R16 ldi R16, (1 << PRTWI) | (1 << PRTIM2) | (1 << PRTIM0) | (1 << PRUSART0) | (1 << PRADC) ; save power sts PRR, R16 ldi R16, (1 << DDD7) ; LED out DDRD, R16 ; LED ldi R16, (1 << DDB5) | (1 << DDB3) | (1 << DDB2); out DDRB, R16 sbi PORTB, DDB2 ; set SS high ldi R16, (1 << SPE) | (1 << MSTR) | (1 << SPR0) sts SPCR, R16 ldi R16,1<<TOIE1 ; Overflow Interrupt Enable Timer 1 sts TIMSK1,R16 ; set interrupt-mask of the timer ldi R16, (1 << CS11) | (1 << CS10) sts TCCR1B, R16 sei ; set interrupt flag LOOP: ; Main program loop sleep ; processor to sleep rjmp LOOP ; go back to sleep