root/branch/beaussant/bsp/clavier.c @ 494
2 | jalaffon | // subroutines for control the matriced keyboard
|
|
#ifdef M32C87
|
|||
#include "sfr32c87.h"
|
|||
#endif
|
|||
#ifdef M32C83
|
|||
#include "sfr32c83.h"
|
|||
#endif
|
|||
#include <itron.h>
|
|||
#include <kernel.h>
|
|||
#include <kernel_api.h>
|
|||
#include "kernel_id.h"
|
|||
#ifdef M32C87
|
|||
void clavier_init(int int_level)
|
|||
{
|
|||
pd10= 0x0F; // bit7 to bit4 input bit3 to bit0 output for port 10
|
|||
p10= 0xF0;
|
|||
pu31 = 1; // pull up enable for pins P10_7 to P10_4
|
|||
kupic = int_level; // set key interrupt level
|
|||
}
|
|||
unsigned char clavier_scan(void)
|
|||
{
|
|||
unsigned char touche;
|
|||
static unsigned char ltouche;
|
|||
const unsigned char t_scan[4]={~(1<<0),~(1<<1),~(1<<2),~(1<<3)};
|
|||
static int col=0;
|
|||
p10=t_scan[col++];
|
|||
col&=0x03;
|
|||
touche = p10; // lecture code binaire clavier
|
|||
switch(touche) //determine et affiche numero touche appuyee
|
|||
{
|
|||
case 0xBE:
|
|||
touche = '1';
|
|||
break;
|
|||
case 0xDE:
|
|||
touche = '2';
|
|||
break;
|
|||
case 0x7E:
|
|||
touche = '3';
|
|||
break;
|
|||
case 0xBD:
|
|||
touche = '4';
|
|||
break;
|
|||
case 0xDD:
|
|||
touche = '5';
|
|||
break;
|
|||
case 0x7D:
|
|||
touche = '6';
|
|||
break;
|
|||
case 0xEB:
|
|||
touche = '7';
|
|||
break;
|
|||
case 0xDB:
|
|||
touche = '8';
|
|||
break;
|
|||
case 0x7B:
|
|||
touche = '9';
|
|||
break;
|
|||
case 0xE7:
|
|||
touche = '*';
|
|||
break;
|
|||
case 0xD7:
|
|||
touche = '0';
|
|||
break;
|
|||
case 0x77:
|
|||
touche = '#';
|
|||
break;
|
|||
default : touche = 0;
|
|||
break;
|
|||
}
|
|||
return( touche );
|
|||
}
|
|||
int touche_filter(void)
|
|||
{
|
|||
SYSTIM time;
|
|||
static SYSTIM ltime;
|
|||
SYSTIM dtime;
|
|||
iget_tim(&time);
|
|||
dtime.utime=time.utime-ltime.utime;
|
|||
if (time.ltime<ltime.ltime)
|
|||
dtime.utime--;
|
|||
dtime.ltime=time.ltime-ltime.ltime;
|
|||
ltime.utime=time.utime;
|
|||
ltime.ltime=time.ltime;
|
|||
if (dtime.utime>0)
|
|||
return 1;
|
|||
else if (dtime.ltime>100)
|
|||
return 1;
|
|||
return 0;
|
|||
}
|
|||
void itouche(void )
|
|||
{
|
|||
char t;
|
|||
if (t=clavier_scan()){
|
|||
if (touche_filter())
|
|||
vipsnd_dtq(QdmTouche,t);
|
|||
}
|
|||
p10=0xF0;
|
|||
}
|
|||
191 | sabeaussan | ||
2 | jalaffon | #endif
|
|
#ifdef M32C83
|
|||
// Clavier M32C83 Carte Lp
|
|||
void clavier_init(int level)
|
|||
{
|
|||
pd4 &= 0x0F; //p44->P47 inputs p40 -> p44 outputs
|
|||
pd5 = 0xFF; //port 5 outputs
|
|||
p5 = 0xFD;
|
|||
}
|
|||
unsigned char clavier_scan(void)
|
|||
{
|
|||
unsigned int code;
|
|||
unsigned int row;
|
|||
unsigned int colum;
|
|||
static unsigned char table[] = {0x7F,0xBF,0xEF,0xF7,0xFB,0xFD};
|
|||
static int i=0;
|
|||
p5 = colum = table[i];
|
|||
i++;
|
|||
if(i==6) i=0;
|
|||
row = p4 & 0xF0;
|
|||
code = (colum << 8) | row;
|
|||
switch(code)
|
|||
{
|
|||
case(0x7F70) : return('/');
|
|||
break;
|
|||
case(0xBF70) : return('*');
|
|||
break;
|
|||
case(0xEF70) : return('F');
|
|||
break;
|
|||
case(0xF770) : return('E');
|
|||
break;
|
|||
case(0xFB70) : return('D');
|
|||
break;
|
|||
case(0xFD70) : return('C');
|
|||
break;
|
|||
case(0x7FB0) : return('X');
|
|||
break;
|
|||
case(0xBFB0) : return('#');
|
|||
break;
|
|||
case(0xEFB0) : return('B');
|
|||
break;
|
|||
case(0xF7B0) : return('A');
|
|||
break;
|
|||
case(0xFBB0) : return('9');
|
|||
break;
|
|||
case(0xFDB0) : return('8');
|
|||
break;
|
|||
case(0x7FD0) : return('-');
|
|||
break;
|
|||
case(0xBFD0) : return('.');
|
|||
break;
|
|||
case(0xEFD0) : return('7');
|
|||
break;
|
|||
case(0xF7D0) : return('6');
|
|||
break;
|
|||
case(0xFBD0) : return('5');
|
|||
break;
|
|||
case(0xFDD0) : return('4');
|
|||
break;
|
|||
case(0x7FE0) : return('+');
|
|||
break;
|
|||
case(0xBFE0) : return('=');
|
|||
break;
|
|||
case(0xEFE0) : return('3');
|
|||
break;
|
|||
case(0xF7E0) : return('2');
|
|||
break;
|
|||
case(0xFBE0) : return('1');
|
|||
break;
|
|||
case(0xFDE0) : return('0');
|
|||
break;
|
|||
default : return(0); // Si aucune touche renvoi 0 plus facile a tester
|
|||
break;
|
|||
}
|
|||
}
|
|||
void itouche(void) // Dummy fonction compatibility with Polytech Card
|
|||
{}
|
|||
#endif
|