📄 main.c
字号:
/*********************************************************************
** Module Name: USB **
** Author: Cbq **
** Version: 1.0 **
** CreateDate: 2008-05-16 **
** Description: **
** Remark: Huozq **
** Revision History: 2008-11-10 **
**********************************************************************/
/*********************************************************************
** 实验目的:通过学习USB通讯实验,理解DSP如何实现通过USB与PC通信。 ** **
** 实验说明:硬件通过成熟的Cypress公司芯片68013实现。 **
** 实验结果:通过PC端软件可以测试收发数据。 **
**********************************************************************/
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
//RW:USB Add:0x4d00,0x4d02,0x4d04,0x4d06 对FIFO(EP2,EP4,EP6,EP8)进行读写操作地址
//R:FIFO_Sta:0x4300, [2:0]=>FIFO_PROG,FIFO_FULL,FIFO_EMPTY 读FLAG状态的地址
unsigned int * EP2 = (unsigned int *) 0x4d00;
unsigned int * EP4 = (unsigned int *) 0x4d02;
unsigned int * EP6 = (unsigned int *) 0x4d04;
unsigned int * EP8 = (unsigned int *) 0x4d06;
unsigned int * FIFO_Sta2 = (unsigned int *) 0x4300;
unsigned int * FIFO_Sta4 = (unsigned int *) 0x4302;
unsigned int * FIFO_Sta6 = (unsigned int *) 0x4304;
unsigned int * FIFO_Sta8 = (unsigned int *) 0x4306;
unsigned int DataBuf[256],b[256];
void main(void)
{
unsigned int k,i,j;
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化外设*/
InitPeripherals();
/*初始化SCIA寄存器*/
InitSci();
InitGpio();
InitXIntrupt();
EALLOW;
EDIS;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(i=0;i<6000;i++)
for(k=0;k<2000;k++);
for(i=0;i<16;i++)
{
while((SciaTx_Ready() != 1));
SciaRegs.SCITXBUF =i;
}
i=0;
for(;;)
{
if((*FIFO_Sta2&0x0001)!=0)//接收端点不为空
{
//for(k=0;k<256;k++)
b[i++]=*EP2;
//i=k;
}
if(i==256)//接收满一个512字节的数据包
{
if((b[0]>>8)==7)
{
for(k=0;k<128;k++)
{
while((* FIFO_Sta6&0x0002)==0); //FIFO为满则等待
for(j=0;j<256;j++)
*EP6 = (2*k<<8) + 2*k;
}
}
else if((b[0]>>8)==8)
{
for(k=0;k<128;k++)
{
while((* FIFO_Sta6&0x0002)==0); //FIFO为满则等待
for(j=0;j<256;j++)
*EP6 = (2*j<<8) + 2*j;
}
}
else if((b[0]>>8)==1)
{
for(k=0;k<256;k++)
{
*EP6=b[k]+(1<<8); //加1返回
}
}
else if((b[0]>>8)==5)
{
for(k=0;k<256;k++)
{
*EP6=b[k]+(5<<8); //加5返回
}
}
else
{
for(k=0;k<256;k++)
{
*EP6=b[k]; //原值返回
}
}
i=0;
}
}
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -