main.c

来自「Mitsubishi M30245 SampleCode」· C语言 代码 · 共 109 行

C
109
字号
/*******************************************************************
 *
 *    DESCRIPTION: M30245 Mit_USB Demonstration Application
 *
 *    AUTHOR: Mitsubishi DEC-E
 *
 *    HISTORY: 0.5 5/30/02 Initial creation for NC30
 *			   1.0 6/18/02 First official release
 *			   1.1 6/27/02 Updated ISO routines
 *			   1.2 8/07/02 Updated for Rev B Starter Kit Board
 *
 *******************************************************************/

/** include files **/
#include "sfr245.h"
#include "globals.h"

// External Function References
extern void RegisterInit(void);
extern void TimerA1Init(void);
extern void InitAD(void);
extern void InitUART3(void);
extern void StartPll(void);
extern void USBCoreStart(void);
extern void USBEndpointInit(void);
extern void RequestType(void);
extern void ServiceEP1Out(void);
extern void LoadEP1IN(void);
extern void ServiceEP1IN(void);
extern void ServiceEP3IN(void);
extern void ServiceEP3OUT(void);

/*
 ** main
 *
 *  FILENAME: main.c
 *
 *  PARAMETERS: None
 *
 *  DESCRIPTION: Everything starts here. Device is setup and USB core is init'ed
 *				 ( if bit flag is set ) and loops until there's something to do.
 *
 *  RETURNS: Nothing
 *
 */
void main(void){
	asm("FSET I");

	RegisterInit();			// Function call mainly to setup Vbus detect
	TimerA1Init();			// Switch/AD monitor here
	InitAD();				// Initalize the AD converter
	InitUART3();			// Initalize the UART for ISO out data

	while(1){					// Device hangs here waiting for something to do
		if ( USBFlags.USBFirstStart ){	// Was cable plugged in for first time?
			StartPll();			// If so then start the PLL
			USBCoreStart();		// Now enable the usb core
			USBEndpointInit();	// And setup the endpoints
			
			attach = 1;			// and pullup D+ for host attachemnt

			USBFlags.USBFirstStart = 0;	// Clear out flag
		}

		if ( ep0csr2 ){			// Has a SETUP packet been received?
			RequestType();
		}
		
		if ( DataTransferFlags.NewEP2Data ){		// Check to send new interrupt data
			SendInterruptData();
		}

		if ( DataTransferFlags.BulkDataReceived ){	// Has BULK data been received?
			DataTransferFlags.BulkDataReceived = 0;
			ServiceEP1Out();
		}

		if ( DataTransferFlags.SendBulkData ){		// Do we send BULK data?
			DataTransferFlags.SendBulkData = 0;
			LoadEP1IN();
		}

		if ( DataTransferFlags.EP1DataTransmit ){	// Is there more BULK data to send?
			DataTransferFlags.EP1DataTransmit = 0;
			ServiceEP1IN();
		}

		if ( DataTransferFlags.EP3INReady ){		// Send ISO data?
			DataTransferFlags.EP3INReady = 0;		
			ServiceEP3IN();
		}

		if ( DataTransferFlags.EP3DataReceived ){	// Receive ISO data?
			DataTransferFlags.EP3DataReceived = 0;
			ServiceEP3OUT();
		}

		if(ti_u3)	{								// Send new UART3 data?
			if( disp_buffer[ disp_index ] != 0 ) {
	            while(ti_u3 == 0);	                // wait for previous transfer to complete
				u3tbl = disp_buffer[ disp_index ];	// put in UART Tx buffer
				disp_buffer[ disp_index ] = 0;		// Reset char location back to 0
				disp_index++;						// Increment to next location
				disp_index &= 0xFF;					// If > 255, this will reset to 0
			}
		}
	}
}

⌨️ 快捷键说明

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