📄 testapp_ps2.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 + -