📄 mainloop.c
字号:
#include "tms320c54xx.h" /* special function register declarations */
#include "epphal.h"
#include "d12ci.h"
#include "mainloop.h"
#include "USBD12.h"
#include "chap_9.h"
#include "protodma.h"
#include "cmd.h"
/*
*************************************************************************
Public static data
*************************************************************************
*/
extern EPPFLAGS bEPPflags;
extern unsigned char GenEpBuf[];
extern IO_REQUEST ioRequest;
extern unsigned char ioSize, ioCount;
extern unsigned char EpBuf[];
extern CONTROL_XFER ControlData;
extern BOOL bNoRAM;
extern char receive_key;
extern unsigned char MCUuartReceiveBuffer[];
//测试数据
unsigned char test_flag=1;
unsigned char port1[6]={0x45,0x01,0x02,12,0x04,0x0d};
unsigned char port2[23]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8};
unsigned char example[23]={0x55,0x66,0x2,0x0,0x06,0x55,0x53,0x42,0x20,0xd7,0xd3,0xbf,0xa8,0xd1,0xdd,0xca,0xbe,0x00,0x00,0x00,0x00,0x88,0x99};
unsigned char clear[23]={0x55,0x66,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x99};
void delay(int period)
{
int i,j;
for (i=0;i<period;i++)
{
for (j=0;j<period;j++);
}
}
void init_dsp(void)
{
/*
pllx10();
asm(" ssbx INTM");//关中断
//asm(" stm #7000h,SWWSR");//外部I/O有7个等待周期
*swwsr=0x7000;//工作在不用等待
*pmst=0x3fe4;
*/
initdsp();
MCUuartInit();
*ifr=0xffff; //开中断1,2与T
*imr=0x000e;
// config the DSP ,st0,st1,
}
void init_timer()
{
*tcr=0x0010;
*prd=0x9000;
*tcr=0x0020;
asm(" rsbx INTM");//开中断
}
//收到数据的处理处理子程序
void data_solution(void)
{
//add your own codes
if(bEPPflags.bits.ep2_rxdone) { //端点2有数据
DISABLE;
bEPPflags.bits.ep2_rxdone = 0;
ENABLE;
D12_WriteEndpoint(5, ep2_len, EpBuf);//发送端点2数据
MCUUartPrintf1(EpBuf,ep2_len);
}
if(bEPPflags.bits.ep1_rxdone) { //端点1有数据
DISABLE;
bEPPflags.bits.ep1_rxdone = 0;
ENABLE;
D12_WriteEndpoint(3, ep1_len, GenEpBuf); //发送端点1数据
}
if(receive_key==1)
{
DISABLE;
bEPPflags.bits.ep1_rxdone = 0;
ENABLE;
D12_WriteEndpoint(3, 6, &MCUuartReceiveBuffer[0]); //发送端点1数据
receive_key=0;
}
}
void clear_flags()
{
bEPPflags.bits.timer=0;
bEPPflags.bits.bus_reset=0;
bEPPflags.bits.configuration=0;
bEPPflags.bits.control_state=0;
bEPPflags.bits.suspend=0;
bEPPflags.bits.setup_packet=0;
bEPPflags.bits.remote_wakeup=0;
bEPPflags.bits.in_isr=0;
bEPPflags.bits.verbose=0;
bEPPflags.bits.ep1_rxdone=0;
bEPPflags.bits.ep2_rxdone=0;
bEPPflags.bits.setup_dma=0;
bEPPflags.bits.dma_state=0;
bEPPflags.bits.power_down=0;
}
///////////////////////////////////////////////
//MAIN函数//
//////////////////////////////////////////////
void main(void)
{
init_dsp();
int2_set();
init_timer();
D12_ReadChipID();
//DMA设置
D12_SetDMA(0x0);//设置中断
clear_flags();
reconnect_USB();//重新连接USB
//发送一些数据到LCD
/* Main program loop */
asm(" trap 12h");
//MCUUartPrintf1(example,23);
delay(2000);
MCUUartPrintf1(clear,23);//触发单片机程序
MCUUartPrintf1(clear,23);
MCUUartPrintf1(example,23);
while(1)
{
// inter_data=D12_ReadInterruptRegister();
if (bEPPflags.bits.timer)
{
DISABLE;//定时器溢出,
bEPPflags.bits.timer = 0;
ENABLE;
if(bEPPflags.bits.configuration)//设备未配置返回
{
data_solution();//发送几个数据
if(test_flag==1)
{ //测试用
// D12_WriteEndpoint(3, 6, &port1[0]);//发送端点1数据
D12_WriteEndpoint(5, 8, &port2[0]);//发送端点2数据
test_flag=0;
}
}
}
if (bEPPflags.bits.bus_reset)
{//设备复位处理
DISABLE;
bEPPflags.bits.bus_reset = 0;
ENABLE;
// Release D12's SUSPEND pin after bus reset
// Enable 74HCT123 pulse generation before disconnect
// D12SUSPD = 1;
} // if bus reset
/* if (bEPPflags.bits.suspend) {//挂起改变处理
DISABLE;
bEPPflags.bits.suspend= 0;
ENABLE;
if(D12SUSPD&0x0001 == 1)
{
//挂起处理,让DSP处于IDLE状态,等待RESET信号的到来
D12SUSPD = 0;
//需要初始化的动作
D12_SetDMA(0xC3); //设置中断模式
D12SUSPD = 1;
//进入IDLE状态的语句
while (1);
}
} // if suspend change
*/
if (bEPPflags.bits.setup_packet)
{
//Setup包处理
DISABLE;
bEPPflags.bits.setup_packet = 0;
ENABLE;
control_handler();//调用请求处理子程序
// D12SUSPD = 1;
} // if setup_packet
} // Main Loop
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -