Leggere il numero di giri di una vetola PC Nexus

Ciao.. questo è il codice... che usavo... ma con queste ventole non ho la lettura corretta.

 cli();                
 sei();               
                                 
int NbTopsFan; 
int Calc;

                                 
int hallsensor = 2;

                        
typedef struct{                  
  char fantype;
  unsigned int fandiv;
}fanspec;


fanspec fanspace[3]={{0,1},{1,2},{2,8}};

char fan = 1; 

void rpm ()      
{ 
 NbTopsFan++; 
} 

 
void setup() 
{ 
 pinMode(hallsensor, INPUT); 
 Serial.begin(9600); 
 attachInterrupt(0, rpm, RISING); 
} 
void loop () 
{
   NbTopsFan = 0;	
   sei();		
   delay (1000);	
   cli();		
   Calc = ((NbTopsFan * 60)/fanspace[fan].fandiv); 
   Serial.print (Calc, DEC); 
   Serial.print (" rpm\r\n"); 
}

Scusa Leo ma non è come lo utilizzavo io ? Pulsein intendo...