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

📄 hello.c

📁 一本供初学者看的书,USB方面,关于USB的中文笔记.
💻 C
字号:
/* * hello_world_usb/hello.c -- FX2 hello world via USB example.  *  * Copyright (c) 2006 by Wolfgang Wieser ] wwieser (a) gmx <*> de [  *  * This file may be distributed and/or modified under the terms of the  * GNU General Public License version 2 as published by the Free Software  * Foundation. (See COPYING.GPL for details.) *  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *  */#define ALLOCATE_EXTERN#include <fx2regs.h>// Read TRM p.15-115 for an explanation on this. // A single nop is sufficient for default setup but like that we're on // the safe side. #define	SYNCDELAY	_asm  nop; nop; nop; nop;  _endasmstatic void Initialize(void){	CPUCS=0x10;   // 48 MHz, CLKOUT output disabled. 		IFCONFIG=0xc0;  // Internal IFCLK, 48MHz; A,B as normal ports. 	SYNCDELAY;		REVCTL=0x03;  // See TRM...	SYNCDELAY;		EP6CFG=0xe2;  // 1110 0010 (bulk IN, 512 bytes, double-buffered)	SYNCDELAY;		FIFORESET = 0x80;  SYNCDELAY;  // NAK all requests from host. 	FIFORESET = 0x02;  SYNCDELAY;  // Reset individual EP (2,4,6,8)	FIFORESET = 0x04;  SYNCDELAY;	FIFORESET = 0x06;  SYNCDELAY;	FIFORESET = 0x08;  SYNCDELAY;	FIFORESET = 0x00;  SYNCDELAY;  // Resume normal operation. }// This will put some data into the EP6 buffer and make it ready for // transmission. static void SetUpBufToTransfer(void){	// Call serial. 	static unsigned char serial=0;		// First, copy the data into the EP6 buffer. 	xdata unsigned char *dest=EP6FIFOBUF;	const char *src=		"Hello world! Your FX2 is talking to you via the USB line. ";	unsigned char len=0;	while(*src)	{		*dest++=*src++;		++len;	}	// Append call serial in decimal: 	*dest++='(';                ++len;	*dest++='0'+serial/100;     ++len;	*dest++='0'+serial%100/10;  ++len;	*dest++='0'+serial%10;      ++len;	*dest++=')';                ++len;	++serial;		// Arm the endpoint. Be sure to set BCH before BCL because BCL access 	// actually arms the endpoint. 	SYNCDELAY;  EP6BCH=0;	SYNCDELAY;  EP6BCL=len;		// That's all we gonna do; the data will be transmitted the next time 	// a bulk read is performed by the host. }void main(void){	Initialize();		for(;;)	{		// Wait for the EP6 buffer to become non-full. 		if(!(EP6CS & (1<<3)))		{  SetUpBufToTransfer();  }	}}

⌨️ 快捷键说明

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