title: Difference between ISR and Function Call?
body: <p>I want to understand difference between ISR (Interrupt Service Routine) and Function call.</p>
  
  <p>I feel both the function call and ISR are the same from the hardware perspective. Please Correct me if I am wrong. 
  All I could found about ISR and Function call is as follows: </p>
  
  <p><strong>ISR:</strong> </p>
  
  <ul>
  <li><p>Asynchronous event that can occur any time during the execution of
  the program </p></li>
  <li><p>Saves the PC, Flags and registers on the stack and
  disables all the interrupts and loads the address of the ISR </p></li>
  <li><p>ISR cannot have arguments that can be passed to it  </p></li>
  <li>Cannot return values </li>
  <li>Enables the interrupts </li>
  <li>Generally small as they are taking the time    of some other process</li>
  <li>Some of ISR have have their own stack</li>
  </ul>
  
  <p><strong>Function:</strong> </p>
  
  <ul>
  <li><p>Occurs when ever there is a function call</p></li>
  <li><p>Saves the PC and registers on the stack</p></li>
  <li><p>Can have arguments</p></li>
  <li><p>Can return values</p></li>
  <li><p>No restriction on the size and duration of execution</p></li>
  </ul>
  
  <p>Is there any more difference other than this ? Please let me know. 
  I have also read about having a function call from ISR how does that take place. Please highlight on it.</p>