📄 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.
//========================================================
//========================================================
// 工程名称: USBMUSIC_UPDOWN_FOR_61BOARD.spj
// 功能描述: (61板)通过USB通讯,实现文件的上传和下载,结合语音录放(DVR 实验)功能将压缩后的语
// 音通过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 ------- CS_N
// IOB5 ------- ALE
// IOB6 ------- WR_N
// IOB7 ------- RD_N
//
// 维护记录: 2007-03-15 v1.0
// modified by liuxue
// liuxue@sunnorth.com.cn
//========================================================
// =========================================
// 文件名称:main.c
// 功能描述:该文件是主程序文件,程序是一个大的循环体
// 不断扫描中断标志变量,根据标志变量的值执行
// 相应的动作
// 维护记录:modified by liuxue v1.0 2007-03-15
// =========================================
#include "SPCE061A.h"
#include "D12_Driver.h"
#include "4096.h"
#include "key.h"
#include "DVR.h"
#include "System.h"
unsigned int uiKey = 0;
unsigned int uiStatus = 0;
unsigned int FileLength[5];
unsigned int MainEpBuf[64];
unsigned long int SpeechFileLength = 0;
unsigned long Addr_UpLoad = 0;
unsigned long Leave_Len = 0;
unsigned int G_UpLoad_Flag = 0;
int main(void)
{
unsigned int i;
for(i=0; i<=50000; i++)
*P_Watchdog_Clear = 0x01;
*P_SystemClock = C_Fosc_49M|C_Fosc; // 系统时钟设置为49M
SP_SIOInitial();
D12_Initial();
Key_Init();
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.Ep2_ReceiveDataFlag==1)
{
bEPPflags.bits.Ep2_ReceiveDataFlag = 0; // 清标志
D12_ReadEndpointAndClrD12Int(4, 64, MainEpBuf); //
if(MainEpBuf[0] == ID0) // ID0 = 1, for test
{
D12_WriteEndpointAndClrD12Int(5, 1, MainEpBuf); // 将ID0送到PC
}
if(MainEpBuf[0] == ID4) // ID4 = 5, for upload
{
if(MainEpBuf[1] == 1)
{
__asm("IRQ OFF");
FileLength[0] = ID4;
FileLength[1] = (unsigned int)(0x000000ff & SpeechFileLength);
FileLength[2] = (unsigned int)((0x0000ff00 & SpeechFileLength) >> 8);
FileLength[3] = (unsigned int)((0x00ff0000 & SpeechFileLength) >> 16);
FileLength[4] = (unsigned int)((0xff000000 & SpeechFileLength) >> 24);
Addr_UpLoad = START_ADDR;
D12_WriteEndpoint(5, 5, FileLength);
G_UpLoad_Flag = 1;
__asm("IRQ ON");
}
}
if(MainEpBuf[0] == ID5) // ID5 = 6, for download
{
if(MainEpBuf[1] == 1)
{
SP_SIOMassErase();
SpeechFileLength = 256 * MainEpBuf[5] + MainEpBuf[4];
SpeechFileLength = 256 * (SpeechFileLength) + MainEpBuf[3];
SpeechFileLength = 256 * (SpeechFileLength) + MainEpBuf[2];
Addr_UpLoad = START_ADDR;
D12_WriteEndpointAndClrD12Int(5, 1, MainEpBuf);
G_UpLoad_Flag = 2;
}
}
}
if(bEPPflags.bits.Ep2_SendDataFlag==1)
{
bEPPflags.bits.Ep2_SendDataFlag = 0;
}
uiKey = Key_Get();
if(uiKey == KEY_1 || uiKey == KEY_2 || uiKey == KEY_3 || uiStatus != STOP)
{
Dvr();
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -