⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testapp_ps2.c

📁 source file application
💻 C
字号:
#include <xparameters.h> #include <xuartns550_l.h>#include <xps2_l.h>

#define UART_BASEADDR   XPAR_RS232_UART_1_BASEADDR#define UART_CLOCK      XPAR_XUARTNS550_CLOCK_HZ#define UART_BAUDRATE   9600
Xuint32 PS2_BASEADDR;
void init_uart();void clear_screen();void echo_scancode();
int main(){
  char s = '0';
  init_uart();
  do{    clear_screen();    xil_printf("\r\nPS/2 Demo using polled mode\r\n");    xil_printf("===========================\r\n");    xil_printf("1: Mouse\r\n");    xil_printf("2: Keyboard\r\n");    xil_printf("q: Quit\r\n");    xil_printf("---------------------------\r\n");    xil_printf("Please select:");    s = XUartNs550_RecvByte(UART_BASEADDR);    xil_printf("%c\r\n",s);    
    switch(s){    case '1':      xil_printf("Plug a keyboard into the PMP mouse port\r\n");      PS2_BASEADDR = XPAR_PS2_PORTS_BASEADDR_0;      echo_scancode();      break;
    case '2':      xil_printf("Plug a keyboard into the PMP keyboard port\r\n");      PS2_BASEADDR = XPAR_PS2_PORTS_BASEADDR_1;      echo_scancode();      break;      
    case 'q':      xil_printf("Bye\r\n");      return 0;      break;    
    default:      xil_printf("Please input the correct character!\r\n");      break;    }  } while (1);}    

void echo_scancode(){
  Xuint8 x, xold=0;
  XPs2_mReset(PS2_BASEADDR);
  while(1)  {    x = XPs2_RecvByte(PS2_BASEADDR);    if(x!=0xF0){ //Skip the 'break' scancode      if(x==0xE0){        x = XPs2_RecvByte(PS2_BASEADDR);        XPs2_RecvByte(PS2_BASEADDR);        XPs2_RecvByte(PS2_BASEADDR);        XPs2_RecvByte(PS2_BASEADDR);        xil_printf("(Press ESC to return)Scancode: E0 %02X\r\n", x);      }else{        if(x!=xold)          xil_printf("(Press ESC to return)Scancode: %02X\r\n", x);        xold=x;      }     
      if(x==0x76)        return;    }  } 
  return ;}

void init_uart(){    XUartNs550_SetBaud(UART_BASEADDR, UART_CLOCK, UART_BAUDRATE);    XUartNs550_mSetLineControlReg(UART_BASEADDR, XUN_LCR_8_DATA_BITS);}
void clear_screen(){  XUartNs550_SendByte(UART_BASEADDR, 0x1B);// clear screan  XUartNs550_SendByte(UART_BASEADDR, '[');  XUartNs550_SendByte(UART_BASEADDR, '2');  XUartNs550_SendByte(UART_BASEADDR, 'J');}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -