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

📄 sandrivermouse.c

📁 三星 S3c2410 开发板 鼠标测试程序
💻 C
字号:
// file: SanDriverMouse.c
// by  : Sanicle
// ver : 2005.04.02
// from: http://3mn.net

#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "2410lib.h"
#include "Drivers\SanDriverMouse.h"

int 	mouseIntCount;
int		mouseStatus;
int 	mouseMoveX;
int		mouseMoveY;
int		mouseX;
int 	mouseY;
int		mouseRButtonDown;
int		mouseLButtonDown;

void mouseInit() 
{
	int i;
	rUFCON1 = 0x0;      // FIFO disable
    rUMCON1 = 0x0;      // AFC disable

    rULCON1 = 0x6;      // Normal,No parity,2 stop,7 bits
    rUCON1  = 0x245;   
    
    rUBRDIV1=( (int)(PCLK/16./MOUSE_BAUD_RATE) -1 );
    
   	for(i=0;i<100;i++);
	// Vars Initialize
    mouseMoveX=mouseMoveY=mouseX=mouseY=mouseIntCount=0;
    mouseRButtonDown=mouseLButtonDown=0;
    // Enable Uart1 (Mouse)
    BIT_CLR(rINTMSK, BIT_UART1);
    ClearPending(BIT_UART1);
    rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);
    rINTSUBMSK=~(BIT_SUB_RXD1|BIT_SUB_ERR1);
}

void __irq MouseInterrupt()
{   	
		// Clear int pending
		ClearPending(BIT_UART1);
    	rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);	
		
		switch(mouseIntCount) // Which byte in package
		{
			case 0:
				// Get Mouse Status
				mouseStatus=UartMouse_RecvByte();
				
				break;
			case 1:
				// Whether buttons down or not
				if((mouseStatus&0x10)==0)mouseRButtonDown=0;
				else mouseRButtonDown=1;
				
				if((mouseStatus&0x20)==0)mouseLButtonDown=0;
				else mouseLButtonDown=1;
				
				if((mouseStatus&0x40)==0)
				{
					mouseInit();
					return;
				}
				break;
			case 2:
				mouseMoveX=UartMouse_RecvByte();
				// Move X position
				if((mouseStatus&0x3)==0x0)mouseX+=mouseMoveX;
				if((mouseStatus&0x3)==0x1)mouseX+=(mouseMoveX+64);
				if((mouseStatus&0x3)==0x3)mouseX-=(64-mouseMoveX);
				if((mouseStatus&0x3)==0x2)mouseX-=(128-mouseMoveX);
				
				break;
			case 3:
				// Data check
				if(mouseMoveX!=UartMouse_RecvByte())
				{
					mouseInit();
					return;
				}
				break;
			case 4:
				mouseMoveY=UartMouse_RecvByte();
				// Move Y position
				if((mouseStatus&0xc)==0x0)mouseY+=mouseMoveY;
				if((mouseStatus&0xc)==0x4)mouseY+=(mouseMoveY+64);
				if((mouseStatus&0xc)==0xc)mouseY-=(64-mouseMoveY);
				if((mouseStatus&0xc)==0x8)mouseY-=(128-mouseMoveY);
				
				break;
			case 5:
				// Data check
				if(mouseMoveY!=UartMouse_RecvByte())
				{
					mouseInit();
					return;
				}
				// Test code here:
				Uart_SendDWORD(mouseX, NULL);
				Uart_SendDWORD(mouseY, NULL);
				Uart_SendDWORD(mouseLButtonDown, TRUE);
				break;
		}
		
		// Prepare next byte
		mouseIntCount++;
		if(mouseIntCount==6)
		{
			mouseIntCount=0;
		}		
}

⌨️ 快捷键说明

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