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

📄 main.c

📁 利用sunplus16位单片机实现USB接口的全套技术资料
💻 C
字号:
//========================================================
//	The information contained herein is the exclusive property of
//	Sunnnorth Technology Co. And shall not be distributed, reproduced,
//	or disclosed in whole in part without prior written permission.
//	(C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
//	ALL RIGHTS RESERVED
//	The entire notice above must be reproduced on all authorized copies.
//========================================================

//========================================================
//	工程名称:	USBLED_FOR_BOX.spj
//	功能描述:	(配合实验箱)
//				1,通过USB通讯,使用PC端应用程序能够控制LED灯的亮灭
//				2,使用PC端应用程序发送小于65字节的字符串给SPCE061A,
//					SPCE061A接收到字符串后返回给PC,PC接收字符并显示在屏幕上
//	涉及的库:	CMacro1016.lib

//	组成文件:	main.c			主文件
//				ISR.asm				SPCE061的中断处理函数,调用PDIUSBD12中断处理函数
//				SPCE061a.h			SPCE061a的宏定义
//				SPCE061a.inc		SPCE061a的宏定义,for 汇编
//				D12_HAL.asm			USB设备控制驱动,与具体使用的MCU及硬件相关
//				D12_HAL.h			USB设备控制驱动d12hal.asm的头文件
//				D12_CI.c			USB接口控制驱动,与具体使用的USB芯片相关
//				D12_CI.h			USB接口控制驱动d12ci.c的头文件
//				D12_Descriptor.c	USB协议层,PDIUSBD12所有描述符取值
//				D12_Descriptor.h	USB描述符结构体的定义,以及PDIUSBD12用到的一些宏定义的取值
//				D12_Chap9.c			USB协议层,完成所有与控制传输相关的工作
//				D12_Chap9.h			USB协议层chap9.c的头文件,包含控制传输用到的结构体的定义
//				D12_User.c			USB应用层,包含提供给用户使用的API函数
//				D12_User.h			USB应用层头文件.h
//				D12_Config.inc		USB模块的硬件接口配置文件
//				
// 硬件连接:
// 				SPCE061A --- PDIUSBD12
// 				IOA8~IOA15 - D0~D7
// 				IOB2 ------- INT_N
// 				IOB3 ------- RESET_N
// 				IOB4 ------- RD_N
// 				IOB5 ------- WR_N
// 				IOB6 ------- ALE
// 				IOB8 ------- CS_N
//
//	维护记录:	2007-03-15	v1.0
//				modified by liuxue
//				liuxue@sunnorth.com.cn
//				20xx-xx-xx  v1.x
//
//========================================================

// =========================================
// 文件名称:main.c
// 功能描述:该文件是主程序文件,程序是一个大的循环体
//			 不断扫描中断标志变量,根据标志变量的值执行
//			 相应的动作
// 维护记录:modified by liuxue v1.0 2007-03-15
// =========================================
#include "SPCE061A.h"
#include "D12_Driver.h"

#define		ID0		1
#define		ID1		2
#define		ID2		3

unsigned int MainEpBuf[64];

int main(void)
{
	unsigned int uiReadEp2DataLength = 0;
	unsigned int aIdFlag[2];
	unsigned int i;
	
	*P_SystemClock = C_Fosc_49M|C_Fosc;						// 系统时钟设置为49M

	*P_IOA_Dir |= 0x0003;									// 初始化LED1和LED2
	*P_IOA_Attrib |= 0x0003;
	*P_IOA_Buffer &= ~0x0003;
	
	D12_Initial();											// PDIUSBD12初始化
	for(i=0; i<50000; i++)
		*P_Watchdog_Clear = 0x01;
	D12_Reconnect_USB();									// PDIUSBD12芯片的软连接

	while(1)
	{
		*P_Watchdog_Clear = 0x0001;
		if(bEPPflags.bits.bus_reset)						// 总线复位处理
		{
			bEPPflags.bits.bus_reset = 0;					// 清标志
		}
		if(bEPPflags.bits.suspend)							// 总线挂起处理
		{
			bEPPflags.bits.suspend = 0;						// 清标志
		}
		if(bEPPflags.bits.setup_packet)						// 协议处理
		{
			bEPPflags.bits.setup_packet = 0;				// 清标志
			D12_Control_Handler();
		}
		if(bEPPflags.bits.Ep1_ReceiveDataFlag==1)
		{
			bEPPflags.bits.Ep1_ReceiveDataFlag = 0;
			D12_ReadEndpointAndClrD12Int(2, 2, aIdFlag);
			if(aIdFlag[0]==ID0)								// 连接测试
			{
				D12_WriteEndpoint(5, 1, aIdFlag);
			}
			else if(aIdFlag[0]==ID1)
			{
				if(aIdFlag[1]==1)
					*P_IOA_Buffer |= 0x0001;				// 点亮LED1灯
				if(aIdFlag[1]==0)
					*P_IOA_Buffer &= ~0x0001;				// 熄灭LED1灯
				if(aIdFlag[1]==3)
					*P_IOA_Buffer |= 0x0002;				// 点亮LED2灯
				if(aIdFlag[1]==2)
					*P_IOA_Buffer &= ~0x0002;				// 熄灭LED2灯
			}
			else if(aIdFlag[0]==ID2)
			{
				if(aIdFlag[1]==1)
				{
					D12_WriteEndpoint(5, 1, aIdFlag);		// 应答
				}
				else if(aIdFlag[1]==2)
				{
					D12_WriteEndpoint(5,uiReadEp2DataLength,MainEpBuf);
															// 回送数据
				}
			}
		}
		if(bEPPflags.bits.Ep1_SendDataFlag==1)
		{
			bEPPflags.bits.Ep1_SendDataFlag = 0;
		}
	    if(bEPPflags.bits.Ep2_ReceiveDataFlag==1)
		{
			bEPPflags.bits.Ep2_ReceiveDataFlag = 0;			// 清标志
			uiReadEp2DataLength=D12_ReadEndpointAndClrD12Int(4, 64, MainEpBuf);
		}
		if(bEPPflags.bits.Ep2_SendDataFlag==1)
		{
			bEPPflags.bits.Ep2_SendDataFlag = 0;
		}
	}
}

⌨️ 快捷键说明

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