main.c

来自「陀螺仪程序」· C语言 代码 · 共 154 行

C
154
字号
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules

unsigned char buttonChar;
unsigned char sendChar;
int gyroYData, gyroZData, tempData;
unsigned short p1;
unsigned short p2;
signed short p3;
signed short p4;

//Change to 1 to compile as embedded mouse
unsigned char firmwareMode = 1;

void main()
{
	int i=0;
	int j=0;
	int adcVal;
	

	PRT2DR |= 0x80;
	PRT0DR |= 0x80;	
	PRT0DR |= 0x02;		
	M8C_EnableGInt; // Enable global interrupts
	PGA_1_Start(PGA_1_HIGHPOWER);
	ADCINC_1_Start(ADCINC_1_HIGHPOWER);
	                     	
	UART_1_Start(UART_1_PARITY_NONE);

	while (1) {
		buttonChar = 48;
				
		ADCINC_1_GetSamples(1);
		while(ADCINC_1_fIsDataAvailable() == 0);   
		AMX_IN ^= 0x0c;
		adcVal = ADCINC_1_iClearFlagGetData();
		gyroZData = adcVal+2048;
				
		ADCINC_1_GetSamples(1);
		while(ADCINC_1_fIsDataAvailable() == 0);   
		AMX_IN |= 0x0c;
		adcVal = ADCINC_1_iClearFlagGetData();		
		gyroYData = adcVal+2048;
				
		ADCINC_1_GetSamples(1);
		while(ADCINC_1_fIsDataAvailable() == 0);   
		AMX_IN &= 0xfb;						
		adcVal = ADCINC_1_iClearFlagGetData();		
		tempData = adcVal+2048;
				
		p1 = (unsigned short)gyroYData;
		p2 = (unsigned short)gyroZData;

		buttonChar = 0x30;

		//Get button state		
		if ((PRT0DR & 0x80) == 0) {
			buttonChar|=0x01; 
		}
		if ((PRT0DR & 0x02) == 0) {
			buttonChar|=0x02; 
		}

		//Run Mouse Algorithm
		updateMouse(&tempData, &p1, &p2, &p3, &p4, &buttonChar);				
				
		//Send data		
		while (!UART_1_TX_COMPLETE) {}
		UART_1_PutChar('$');
		
		if (firmwareMode==0) {
		
			//Send firmware mode
			UART_1_PutChar(0);
			
			//Send raw data
			asm("mov [_sendChar], [_tempData]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_tempData+1]");		
			UART_1_PutChar(sendChar);
			
			asm("mov [_sendChar], [_gyroYData]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_gyroYData+1]");		
			UART_1_PutChar(sendChar);
			
			asm("mov [_sendChar], [_gyroZData]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_gyroZData+1]");		
			UART_1_PutChar(sendChar);
			
			while (!UART_1_TX_COMPLETE) {}
			
			UART_1_PutChar(0);
			UART_1_PutChar(0);
				
			UART_1_PutChar(0);
			UART_1_PutChar(0);
				
			UART_1_PutChar(0);
			UART_1_PutChar(0);
		}
		else {
		
			//Send firmware mode
			UART_1_PutChar(1);
			
			//Send output of mouse algorithm
			asm("mov [_sendChar], [_tempData]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_tempData+1]");		
			UART_1_PutChar(sendChar);
			
			asm("mov [_sendChar], [_gyroYData]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_gyroYData+1]");		
			UART_1_PutChar(sendChar);
			
			asm("mov [_sendChar], [_gyroZData]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_gyroZData+1]");		
			UART_1_PutChar(sendChar);
		
			UART_1_PutChar(0);
			UART_1_PutChar(0);

			asm("mov [_sendChar], [_p3]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_p3+1]");		
			UART_1_PutChar(sendChar);
			
			asm("mov [_sendChar], [_p4]");
			UART_1_PutChar(sendChar);
			asm("mov [_sendChar], [_p4+1]");		
			UART_1_PutChar(sendChar);
		
		}		
		
		
		//Send button state
		UART_1_PutChar(buttonChar);
				
		UART_1_PutChar('\r');
		UART_1_PutChar('\n');
				
	}

}
 

⌨️ 快捷键说明

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