📄 main.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 + -