📄 main.c
字号:
#include <string.h>
#include "..\inc\option.h"
#include "..\inc\def.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\flash.h"
#include "..\inc\download.h"
#include "..\inc\cache.h"
#include "..\inc\lcd240.h"
#include "..\inc\KeyBoard16.h"
#include "..\inc\ata.h"
#include <stdio.h>
//following is CPU test functions include
#include "..\inc\cputest\adc.h"
#include "..\inc\cputest\idle.h"
#include "..\inc\cputest\iic.h"
#include "..\inc\cputest\iis.h"
#include "..\inc\cputest\nwait.h"
#include "..\inc\cputest\power.h"
#include "..\inc\cputest\rtc.h"
#include "..\inc\cputest\sio.h"
#include "..\inc\cputest\stop.h"
#include "..\inc\cputest\timer.h"
#include "..\inc\cputest\uart.h"
#include"..\fat16\File.h"
#include "main.h"
#include "d12ci.h"
#include "isr.h"
#include "chap9.h"
#include "usb100.h"
#include "..\inc\tchScr.h"
#include "..\fat16\fat16.h"
#include "..\bulk\bulk_only.h"
//*******************************
extern unsigned char *downPt;
extern unsigned int fileSize;
EPPFLAGS bEPPflags;
CONTROL_XFER ControlData;
//migrated for 51ok
extern unsigned long ClockTicks;
extern unsigned char GenEpBuf[];
extern IO_REQUEST ioRequest;
extern unsigned char ioSize, ioCount;
extern unsigned char MainEpBuf[];
extern unsigned char EpBuf[];
extern U8 Flash_One_Page[];
extern U8 Bulk_In_Buf[];
extern U32 Logical_Block_Address;
extern U32 nCurrentPage,nBeginPage;
extern U8 Flash_One_Page[];
//////////////////////////////////////////////
static void (*run)(void)=(void (*)(void))DOWNLOAD_ADDRESS;
U16 EthernetMac[3];
void (*StandardDeviceRequest[])(void) =
{
get_status,
clear_feature,
reserved,
set_feature,
reserved,
set_address,
get_descriptor,
reserved,
get_configuration,
set_configuration,
get_interface,
set_interface,
reserved,
reserved,
reserved,
reserved
};
void Isr_Init(void)
{
rINTCON=0x5; ////3(reserved) 2(V 0=vector 1= non vector) 1(I,0=Enable IRQ,1=Disable IRQ) 0(FIQ Related0=enable 1=diable)
// 1,Non-vectored,0,IRQ enable,1,FIQ disable //
// 1,1,1 0x7,disable interupt.
rINTMOD=0x0; //0=IRQ mode Set all of the INT to IRQ mode//
rI_ISPC=BIT_EINT2;
rINTMSK=BIT_GLOBAL;
//pISR_FIQ,pISR_IRQ must be initialized//
pISR_EINT2=(unsigned)usb_isr;
rINTMSK=~(BIT_EINT0 |BIT_EINT2 | ~BIT_GLOBAL);
//pISR_FIQ,pISR_IRQ must be initialized//
}
void reconnect_USB(void)
{
unsigned long clk_cnt;
MCU_LED0 = MCU_LED0_ON;
MCU_LED1 = MCU_LED1_ON;
D12SUSPD = D12SUSPD_OFF;
//Disconnect Usb
D12_SetMode(D12_NOLAZYCLOCK, D12_SETTOONE | D12_CLOCK_12M);
Delay(500);
//Connect USB
DISABLE;
bEPPflags.value = 0;
ENABLE;
// V2.1 enable normal+sof interrupt
D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);
// Initialize D12 configuration
//D12_SetMode(D12_NOLAZYCLOCK ,D12_SETTOONE | D12_CLOCK_12M );
D12_SetMode(D12_ENDP_NONISO |D12_NOLAZYCLOCK | D12_SOFTCONNECT|D12_CLOCKRUNNING,D12_SETTOONE | D12_CLOCK_12M );
//End of Connect USB
MCU_LED0 = MCU_LED0_OFF;
MCU_LED1 = MCU_LED1_OFF;
}
void control_handler(void)
{
unsigned char type, req;
type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; //0x60
req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; //0x0F
//help_devreq(type, req); // print out device request
if (type == USB_STANDARD_REQUEST)
(*StandardDeviceRequest[req])();
else{
stall_ep0();
}
}
void single_transmit(unsigned char * buf, unsigned char len)
{
if( len <= EP0_PACKET_SIZE) {
D12_WriteEndpoint(1, len,buf);
}
}
void code_transmit(unsigned char * pRomData, unsigned short len)
{
ControlData.wCount = 0;
if(ControlData.wLength > len)
ControlData.wLength = len;
ControlData.pData = pRomData;
if( ControlData.wLength >= EP0_PACKET_SIZE) {
D12_WriteEndpoint(1,EP0_PACKET_SIZE, ControlData.pData);
ControlData.wCount = ControlData.wCount + EP0_PACKET_SIZE;
// Uart_Printf("len=%d,wCount=%d\n",len,ControlData.wCount);
DISABLE;
bEPPflags.bits.control_state = USB_TRANSMIT;
ENABLE;
}
else {
D12_WriteEndpoint(1, ControlData.wLength,pRomData);
ControlData.wCount = ControlData.wCount + ControlData.wLength;
// Uart_Printf("else*code_transmit,len=%d,wCount=%d\n",len,ControlData.wCount);
DISABLE;
bEPPflags.bits.control_state = USB_IDLE;
ENABLE;
}
// Uart_Printf("bEPPflags.bits.control_state=%d\n",bEPPflags.bits.control_state);
}
void stall_ep0(void)
{
D12_SetEndpointStatus(0, 1);
D12_SetEndpointStatus(1, 1);
}
/*
void Main(void)
{
int i=0;
ARM_FILE *ffp[512];
rSYSCFG=CACHECFG; // Using 8KB Cache//
Uart_Init(0,115200);
Port_Init();
Isr_Init();
Delay(0);
downPt=(unsigned char *)DOWNLOAD_ADDRESS;
Flash_Reset();
Uart_Select(0); //Select UART0//
rINTMSK=~(BIT_EINT0 |BIT_EINT2| BIT_GLOBAL);
// Format_Fat16Media();//将Flash格式化成Fat16
//for(i=0;i<32*528;i+=528) Flash_One_Page[i+5] = 0x55;
// Write2Flash(0,4,14,Flash_One_Page);
LOAD_SYSTEM_CODE();
reconnect_USB();
//ffp[0]=CreatFile("YANGXIN.TXT");
// D12 usb mainloop program
while( TRUE ){
if (bEPPflags.bits.setup_packet){
DISABLE;
bEPPflags.bits.setup_packet = 0;
ENABLE;
control_handler();
//D12SUSPD = 1;
D12SUSPD=D12SUSPD_OFF;
} // if setup_packet
}
}
*/
void Main(void)
{
unsigned int SerialNo;
unsigned int SerialNo1=123802;
unsigned int SerialNo2=943845;
int i;//memError=0;
char aa;
U32 mode;
int x,y;
rSYSCFG=CACHECFG; // Using 8KB Cache//
Port_Init();
Isr_Init();
Uart_Init(0,115200);
Uart_Select(0); //Select UART0//
Delay(100);
downPt=(unsigned char *)DOWNLOAD_ADDRESS;
/*******************************/
/* Cache test */
/*******************************/
for(i=0;i<100;i++)
Uart_SendByte(0xff);
Uart_Printf("\nBIOS start:OK!");
Delay(100);
LCD_Init();
LCD_printf("Testing Cache...");
if(Test_Cache()){
Uart_Printf("\nCache Test:OK!");
LCD_printf("Cache Test:OK!\n");
}
else{
Uart_Printf("\nCache Test:FAIL!");
LCD_printf("Cache Test:FAIL!\n");
while(1);
}
Flash_Reset();
if(Check_Flash_Id()==KM29U128_ID)
{
Uart_Printf("\nKM29U128T is found.");
LCD_printf("KM29U128T is found.\n");
}
else
{
Uart_Printf("\nKM29U128T is not found.");
LCD_printf("KM29U128T is not found.\n");
}
SerialNo=SerialNo1+SerialNo2;
Uart_Printf("\n*************************************************************************");
Uart_Printf("\n* SerialNo:0x%8x *");
Uart_Printf("\n* COM:115.2kbps,8Bit,NP,UART0 *");
Uart_Printf("\n* Build Time: 2002-1-25 *");
Uart_Printf("\n*-----------------------------------------------------------------------*");
LCD_printf("******************************\n");
LCD_printf("* Embeded Controller *\n");
LCD_printf("* BIOS ver 1.1 *\n");
LCD_printf("* Copyright 2002-2007 *\n");
LCD_printf("* By Up-tech *\n");
LCD_printf("* Build Time: 2002-7-30 *\n");
LCD_printf("******************************\n");
LCD_printf("Enter BIOS test mode\n");
LCD_printf("press any key\n");
Delay(8000);
if(GetScanKey()==0xffff){ //无按键按下,正常引导系统
LOAD_SYSTEM_CODE();
while(1);
}
if(GetScanKey()==0xfffe){//按确定键时直接进U盘
reconnect_USB();
Uart_Printf("\nEntering USB Disk state,please waiting...");
while( TRUE ){
if (bEPPflags.bits.setup_packet){
DISABLE;
bEPPflags.bits.setup_packet = 0;
ENABLE;
control_handler();
D12SUSPD=D12SUSPD_OFF;
} // if setup_packet
}//while( TRU
}
//按其他键,进入BIOS 测试状态
while(1)
{
LCD_printf("Enter the Embedded System BIOS\n");
Uart_Printf("\n* You had selected Monitor Tools *");
Uart_Printf("\n* F(f)>>Flash Rom Tools *");
Uart_Printf("\n* R(r)>>Enter USB Disk *");
Uart_Printf("\n* L(l)>>LCD test *");
Uart_Printf("\n* 1 >>Format Media To FAT *");
Uart_Printf("\n* K(k)>>KeyBoard Test *");
Uart_Printf("\n* T(t)>>Touch Screent Test *");
Uart_Printf("\n* S(s)>>Set touch Screen *");
Uart_Printf("\n*-----------------------------------------------------------------------*");
aa= Uart_Getch();
switch(aa)
{
case 'f':
case 'F':
Flash_Tools();
break;
case 'r':
case 'R':
/*对USBN9603进行一次软件复位*/
reconnect_USB();
// Delay(10000);//it should be delay a long time for pc software stable
Uart_Printf("\nEntering USB Disk state,please waiting...");
while( TRUE ){
if (bEPPflags.bits.setup_packet){
DISABLE;
bEPPflags.bits.setup_packet = 0;
ENABLE;
control_handler();
//D12SUSPD = 1;
D12SUSPD=D12SUSPD_OFF;
} // if setup_packet
}//while( TRU
break;
case 'l':
case 'L':
Uart_Printf("\nPlease look at LCD.");
Uart_Printf("\nPress any key return.");
LCD_printf("Hello.\n");
LCD_printf("This is LCD text Mode\n");
LCD_printf("Please wait.....\n");
LCD_printf("Then show LCD gray bar.\n");
LCD_printf("Press any key return.\n");
Delay(20000);
// LCD_TestShow();
Uart_Getch();
break;
case '1':
Format_Fat16Media();
break;
case 'k':
case 'K':
Uart_Printf("\n");
Uart_Printf("press any key get the scan number\n");
while(1){
U32 getkey=GetKey();
static U8 key[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
Uart_SendByte(key[getkey]);
}
break;
case 't':
case 'T':
Uart_Printf("\n");
TchScr_init();
Uart_Printf("please touch the screen\n");
for(;;){
mode=TchScr_GetOSXY(&x, &y);
switch(mode){
case TCHSCR_ACTION_CLICK:
Uart_Printf("Action=click:x=%d,\ty=%d\n",x,y);
break;
case TCHSCR_ACTION_DBCLICK:
Uart_Printf("Action=double click:x=%d,\ty=%d\n",x,y);
break;
case TCHSCR_ACTION_DOWN:
Uart_Printf("Action=down:x=%d,\ty=%d\n",x,y);
break;
case TCHSCR_ACTION_UP:
Uart_Printf("Action=up:x=%d,\ty=%d\n",x,y);
break;
case TCHSCR_ACTION_MOVE:
Uart_Printf("Action=move:x=%d,\ty=%d\n",x,y);
break;
}
Delay(1000);
}
break;
case 's':
case 'S':
TchScr_init();
SetTouchScr();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -