USI <-> SPI simple communication fails

I’m trying to do a very simple 2 wire communication between ATMega328P(master) and ATTiny45(slave).

Here I’m configuring in 3 wire mode just for debugging.

Connections(Arduino pins):

ATMega328P   ATTiny45 
  12  MISO - DO (MISO) 6 
  11  MOSI - DI (MOSI) 5 
  13   SCK - USCK      7

Here is master code on Arduino:

#include <SPI.h> 

void setup() 
{ 
  SPI.begin(); 
  Serial.begin(115200); 
} 

int r; 
void loop() 
{ 
  r = SPI.transfer(100); 
  Serial.println(r); 
  delay(2000); 
}

Here is Slave code on ATTiny45:

#define F_CPU 16000000UL 

#include <avr/io.h> 
#include <avr/interrupt.h> 
#include <util/delay.h> 

#define LED PB3 
#define output_low(port,pin) port &= ~(1<<pin) 
#define output_high(port,pin) port |= (1<<pin) 
#define set_input(portdir,pin) portdir &= ~(1<<pin) 
#define set_output(portdir,pin) portdir |= (1<<pin) 

#define CTRL_PORT   DDRB 
#define DATA_PORT   PORTB 
#define CLK_PIN     PB2 
#define DI_PIN      PB0 
// Unused 
#define DO_PIN      PB1 
#define SS_PIN      PB1 

volatile int d; 

void init() 
{ 
   CTRL_PORT |= _BV(DO_PIN); 
   CTRL_PORT &= ~_BV(DI_PIN) | ~_BV(CLK_PIN) | ~_BV(SS_PIN); 
   DATA_PORT |= _BV(DI_PIN) | _BV(CLK_PIN); 
   USICR = _BV(USIOIE) | _BV(USIWM0) | _BV(USICS0) | _BV(USICS1); 
   USISR = _BV(USIOIF); 
    
   sei(); 
} 

ISR(USI_OVERFLOW_vect) 
{ 
   d = USIDR; 
   USISR = _BV(USIOIF); 
    
   USIDR = ~d; 
} 

void delay_ms( int ms ) 
{ 
   for (int i = 0; i < ms; i++) 
   { 
      _delay_ms(1); 
   } 
} 

int main(void) 
{ 
   init(); 
   set_output(DDRB, LED); 
   d = 1000; 

    while(1) 
    { 
      output_high(PORTB, LED); 
      delay_ms(d); 
      output_low(PORTB, LED); 
      delay_ms(d);    
   } 
}

It appears interrupt never happens on Slave. I have some random numbers on Arduino (244, 100, 38, etc). LED blink frequency remains intact.
Something is wrong here…