📄 main.c
字号:
#include <stdio.h>
#include <stdarg.h>
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\armusb.h"
volatile char which_int=0;
ARMUSBFLAGS bUSBFlags;
CONTROL_XFER ControlData;
unsigned char Ep1Buf[EP1_PACKET_SIZE];
unsigned char Ep2Buf[EP2_PACKET_SIZE];
unsigned char Ep1Len, Ep2Len;
unsigned int SERIAL_BAUD = 115200; //串口波特率设定
unsigned char MCLK_M;
unsigned char MCLK_P;
unsigned char MCLK_S;
void __irq Eint0Isr(void)
{
rI_ISPC = BIT_EINT0;
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
fn_usb_isr();
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
/****************************************************************************
【功能说明】中断初始化
****************************************************************************/
void Isr_Init(void)
{
rINTCON = 0x1; //中断控制寄存器设置
rINTMOD=0x0; // All=IRQ mode
// pISR_EINT4567 = (int)Eint4567Isr;
rPCONG = rPCONG | 0xff00; //GPG4、5、6、7设为中断引脚
rPUPG = rPUPG & 0x0f; //GPG4、5、6、7上拉电阻有效
rEXTINT=0x0; //低电平触发
rINTMSK=~(BIT_GLOBAL); //中断有效
}
//***************************************************************************
void Isr_USB_Init(void)
{
pISR_EINT0 = (int)Eint0Isr;
rPCONG = rPCONG | 0x0003;
rPUPG = rPUPG & 0xfe;
}
//***************************************************************************
void Main(void)
{
unsigned char i;
rSYSCFG=SYSCFG_8KB; //使用8K字节的指令缓存
rNCACHBE0=((unsigned int)(Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);
//在上面的数据区域不使用高速缓存
MCLK_M = 52; MCLK_P = 6; MCLK_S = 0;
Delay(0);
Port_Init(); //IO端口功能、方向设定
Led_Disp(); //LED来回闪烁显示
rPCONG &= 0x00ff;
ChangePllValue(MCLK_M,MCLK_P,MCLK_S); //修改系统主频为8倍频
Uart_Init(0,SERIAL_BAUD); //异步串行口初始化,设置波特率为115200
Delay(0); //利用系统时钟校准延时函数
Uart_Select(0);
Uart_Printf("\n\n*********************************\n"
" 欢迎使用百科融创ARM7实验箱 \n"
" 实验:从USB测试 \n"
" Version:1.02 \n"
" E-mail:tianjunzhuo@sohu.com \n"
"*********************************\n\n"
);
Isr_Init(); //中断初始化
Isr_USB_Init();
UsbReconnect();
Delay(0);
Uart_Printf("USB test\n");
while(1)
{
USB_D12_SUSPEND;
if (bUSBFlags.bits.bBus_Reset)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bBus_Reset = 0;
USB_D12_SUSPEND;
DEBUGF(USB_SETUP_DEBUG,(" reset\n\n"));
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if (bUSBFlags.bits.bSuspend)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bSuspend= 0;
DEBUGF(USB_SETUP_DEBUG,("suspend\n\n"));
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if (bUSBFlags.bits.bSetup_Packet)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bSetup_Packet = 0;
UsbControlHandler();
USB_D12_SUSPEND;
DEBUGF(USB_SETUP_DEBUG,("setup\n\n"));
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if(bUSBFlags.bits.bEP1_RxDone)
{
bUSBFlags.bits.bIn_ISR = 1;
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bEP1_RxDone = 0;
UsbWriteEndpoint(3,Ep1Buf,Ep1Len);
if(1)
{
for(i=0;i<Ep1Len;i++)
Uart_Printf("%2.2x ", Ep1Buf[i]);
Uart_Printf("\n");
Led_Disp();
}
USB_ENABLE_INTERRUPT;
bUSBFlags.bits.bIn_ISR = 0;
}
if(bUSBFlags.bits.bEP2_RxDone)
{
USB_DISABLE_INTERRUPT;
bUSBFlags.bits.bEP2_RxDone = 0;
if(1)
{
for(i=0;i<Ep2Len;i++)
Uart_Printf("%2.2x ", Ep2Buf[i]);
Uart_Printf("\n");
Led_Disp();
}
USB_ENABLE_INTERRUPT;
UsbWriteEndpoint(5,Ep2Buf,Ep2Len);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -