Esempio n. 1
0
void keyboard_int_handler(unsigned pc){

  if (gpio_check_and_clear_event(CLK)){
    int bit = gpio_read(DATA);
    //Check start, parity and stop bit
    if ( (cnt == 0 && bit == 1) ||
         (cnt == 9 && (numOfOne & 1) && bit) ||
         (cnt == 9 && (!(numOfOne & 1) && !bit)) ||
         (cnt == 10 && bit == 0) ){
      cir_push(0);
      currScancode = 0;
      cnt = 0;
      return;
    }

    if (cnt > 0 && cnt < 9){
      if (bit) numOfOne ++;
      currScancode |= (bit << (cnt-1));
    }
    PS2Code[cnt++] = bit;

    //Package received
    if (cnt == 11){
      cir_push(currScancode);              
      /*printf("%08x\n", currScancode); */
      cnt = 0;
      currScancode = 0;
    }
  }
  else{
    timer_int_handler(pc);
  }
}
Esempio n. 2
0
void int_handler(unsigned pc) {
  gpio_check_and_clear_event(GPIO_PIN23);
}