void mem_Init() { //Allocate mem for memory/bios/flash //mem_b.Init(&sh4_reserved_mem[0x0C000000],RAM_SIZE); sh4_area0_Init(); sh4_internal_reg_Init(); MMU_Init(); }
void TargetInit(void) { int i; U8 key; U32 mpll_val=0; #if ADS10 __rt_lib_init(0,0); //for ADS 1.0 #endif i = 2 ; //use 400M! switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 14; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; } //init FCLK=400M ChangeClockDivider(key, 12); ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); //MMU_EnableICache(); //MMU_EnableDCache(); MMU_DisableICache(); MMU_DisableDCache(); Port_Init(); MMU_Init(); Delay(0); Uart_Init(0,115200); Uart_Select(0); Uart_SendString("Board init complete.\n"); }
void TargetInit(void) { int i; U8 key; U32 mpll_val=0; i = 2 ; //use 400M! switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 14; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; } //init FCLK=400M, so change MPLL first ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12); MMU_DisableICache(); MMU_DisableDCache(); Port_Init(); MMU_Init(); _init_alloc(0x17fe000, 0x17ff000);/*分配堆的起始地址和结束地址,4k的空间*/ Delay(0); Uart_Init(0,115200); Uart_Select(0); Uart_SendString("Board init complete.\n"); }
int NDS_Init( struct armcpu_memory_iface *arm9_mem_if, struct armcpu_ctrl_iface **arm9_ctrl_iface, struct armcpu_memory_iface *arm7_mem_if, struct armcpu_ctrl_iface **arm7_ctrl_iface) { #else int NDS_Init( void) { #endif nds.ARM9Cycle = 0; nds.ARM7Cycle = 0; nds.cycles = 0; nds.idleFrameCounter = 0; memset(nds.runCycleCollector,0,sizeof(nds.runCycleCollector)); MMU_Init(); nds.nextHBlank = 3168; nds.VCount = 0; nds.lignerendu = FALSE; if (Screen_Init(GFXCORE_DUMMY) != 0) return -1; gfx3d_init(); #ifdef GDB_STUB armcpu_new(&NDS_ARM7,1, arm7_mem_if, arm7_ctrl_iface); armcpu_new(&NDS_ARM9,0, arm9_mem_if, arm9_ctrl_iface); #else armcpu_new(&NDS_ARM7,1); armcpu_new(&NDS_ARM9,0); #endif if (SPU_Init(SNDCORE_DUMMY, 740) != 0) return -1; #ifdef EXPERIMENTAL_WIFI WIFI_Init(&wifiMac) ; #endif return 0; }
void TargetInit(void) { int i; U8 key; U32 mpll_val=0; #if ADS10 //_rt_lib_init(0,0); //for ADS 1.0 #endif i = 2 ; //use 400M! switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 14; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; } //init FCLK=400M, so change MPLL first ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12); //MMU_EnableICache(); //MMU_EnableDCache(); MMU_DisableICache(); MMU_DisableDCache(); Port_Init(); MMU_Init(); Touch_init(); Delay(0); Uart_Init(0,115200); Uart_Select(1); //Uart_SendString("hello,FriendlyARM\n"); /*若使用printf语句,将使目标代码增加很多*/ // Uart_Printf("hello,qq2440, printf\n"); rGPBCON = 0x00555555; rGPBDAT = 0x0000; // rGPBDAT = 0x07ff; rGPFDAT = 0x00; rGPFDAT = 0x00; // Delay(0); }
void usb_init_slave(void) { char *mode; int i; U8 key; U32 mpll_val, upll_val, divn_upll=0; extern int bBootFrmNORFlash(void); /* start add by ll ,replace the Port_Init() */ gpioregs = S3C24X0_GetBase_GPIO(); gpioregs->GPGCON = 0xfd95ffba; /* thisway.diy, GPG12-->OUTPUT, GPG9-->OUTPUT for FS2410, as USB Device enable */ gpioregs->GPGUP = 0xffff; // The pull up function is disabled GPG[15:0] gpioregs->GPGDAT &= ~(1<<12); /* disable USB Device, enable later, thisway.diy */ /* end ll */ clk_powerregs = S3C24X0_GetBase_CLOCK_POWER(); usbdevregs = S3C24X0_GetBase_USB_DEVICE(); dmaregs = S3C24X0_GetBase_DMAS(); udelay(100000); #if 0 // USB device detection control rGPGCON &= ~(3<<24); rGPGCON |= (1<<24); // output rGPGUP |= (1<<12); // pullup disable rGPGDAT |= (1<<12); // output #endif //ChangeUPllValue(60,4,2); // 48MHz //for(i=0; i<7; i++); //ChangeClockDivider(13,12); //ChangeMPllValue(97,1,2); //296Mhz Isr_Init(); gpioregs->MISCCR=gpioregs->MISCCR&~(1<<3); // USBD is selected instead of USBH1 gpioregs->MISCCR=gpioregs->MISCCR&~(1<<13); // USB port 1 is enabled. // // USBD should be initialized first of all. // isUsbdSetConfiguration=0; #if 0 UsbdMain(); MMU_Init(); //MMU should be reconfigured or turned off for the debugger, //After downloading, MMU should be turned off for the MMU based program,such as WinCE. #else //thisway.diy MMU_EnableICache(); UsbdMain(); udelay(100000); gpioregs->GPGDAT |= ((1<<9) | (1<<12)); /* enable USB Device, thisway.diy */ gpioregs->GPBDAT |= (1<<9); /* enable USB Device, thisway.diy */ gpioregs->GPCDAT |= (1<<5); /* enable USB Device, thisway.diy */ #endif #if USBDMA mode="DMA"; #else mode="Int"; #endif // CLKOUT0/1 select. //printf("CLKOUT0:MPLL in, CLKOUT1:RTC clock.\n"); //Clk0_Enable(0); // 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0 //Clk1_Enable(2); // 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PCLK, 5:DCLK1 // Clk0_Disable(); // Clk1_Disable(); mpll_val = clk_powerregs->MPLLCON; upll_val = clk_powerregs->UPLLCON; if (0) //(!bBootFrmNORFlash()) { S3C24X0_INTERRUPT * intregs; intregs = S3C24X0_GetBase_INTERRUPT(); printf("UPLLVal [M:%xh,P:%xh,S:%xh]\n", (upll_val&(0xff<<12))>>12,(upll_val&(0x3f<<4))>>4,(upll_val&0x3)); printf("MPLLVal [M:%xh,P:%xh,S:%xh]\n", (mpll_val&(0xff<<12))>>12,(mpll_val&(0x3f<<4))>>4,(mpll_val&0x3)); printf("CLKDIVN:%xh\n", clk_powerregs->CLKDIVN); intregs->INTSUBMSK = 0x3ff; gpioregs->GPBDAT = 0x740; gpioregs->GPCDAT = 0x20; gpioregs->GPGDAT = 0xba2c; printf("\nINTMOD = %x\n", intregs->INTMOD); printf("INTMSK = %x\n", intregs->INTMSK); printf("INTSUBMSK = %x\n", intregs->INTSUBMSK); printf("\nGPBCON = %x\n", gpioregs->GPBCON); printf("GPBDAT = %x\n", gpioregs->GPBDAT); printf("GPCCON = %x\n", gpioregs->GPCCON); printf("GPCDAT = %x\n", gpioregs->GPCDAT); printf("GPGCON = %x\n", gpioregs->GPGCON); printf("GPGDAT = %x\n", gpioregs->GPGDAT); /* printf("\n\n"); printf("+---------------------------------------------+\n"); printf("| S3C2440A USB Downloader ver R0.03 2004 Jan |\n"); printf("+---------------------------------------------+\n"); // printf("FCLK=%4.1fMHz,%s mode\n",FCLK/1000000.,mode); printf("USB: IN_ENDPOINT:1 OUT_ENDPOINT:3\n"); printf("FORMAT: <ADDR(DATA):4>+<SIZE(n+10):4>+<DATA:n>+<CS:2>\n"); printf("NOTE: Power off/on or press the reset button for 1 sec\n"); printf(" in order to get a valid USB device address.\n"); printf("\n"); */ }
void usb_init(void) { char *mode; int i; U8 key; U32 mpll_val, upll_val, divn_upll=0; extern int bBootFrmNORFlash(void); Port_Init(); clk_powerregs = S3C24X0_GetBase_CLOCK_POWER(); usbdevregs = S3C24X0_GetBase_USB_DEVICE(); dmaregs = S3C24X0_GetBase_DMAS(); udelay(100000); #if 0 // USB device detection control rGPGCON &= ~(3<<24); rGPGCON |= (1<<24); // output rGPGUP |= (1<<12); // pullup disable rGPGDAT |= (1<<12); // output #endif //ChangeUPllValue(60,4,2); // 48MHz //for(i=0; i<7; i++); //ChangeClockDivider(13,12); //ChangeMPllValue(97,1,2); //296Mhz Isr_Init(); gpioregs->MISCCR=gpioregs->MISCCR&~(1<<3); // USBD is selected instead of USBH1 gpioregs->MISCCR=gpioregs->MISCCR&~(1<<13); // USB port 1 is enabled. // // USBD should be initialized first of all. // isUsbdSetConfiguration=0; #if 0 UsbdMain(); MMU_Init(); //MMU should be reconfigured or turned off for the debugger, //After downloading, MMU should be turned off for the MMU based program,such as WinCE. #else //mike.arm9 MMU_EnableICache(); UsbdMain(); udelay(100000); gpioregs->GPGDAT |= (1<<12); /* enable USB Device, mike.arm9 */ gpioregs->GPBDAT |= (1<<9); /* enable USB Device, mike.arm9 */ gpioregs->GPCDAT |= (1<<5); /* enable USB Device, mike.arm9 */ #endif #if USBDMA mode="DMA"; #else mode="Int"; #endif // CLKOUT0/1 select. //printf("CLKOUT0:MPLL in, CLKOUT1:RTC clock.\n"); //Clk0_Enable(0); // 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0 //Clk1_Enable(2); // 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PCLK, 5:DCLK1 // Clk0_Disable(); // Clk1_Disable(); mpll_val = clk_powerregs->MPLLCON; upll_val = clk_powerregs->UPLLCON; if (1) //(!bBootFrmNORFlash()) { printf("UPLLVal [M:%xh,P:%xh,S:%xh]\n", (upll_val&(0xff<<12))>>12,(upll_val&(0x3f<<4))>>4,(upll_val&0x3)); printf("MPLLVal [M:%xh,P:%xh,S:%xh]\n", (mpll_val&(0xff<<12))>>12,(mpll_val&(0x3f<<4))>>4,(mpll_val&0x3)); printf("CLKDIVN:%xh\n", clk_powerregs->CLKDIVN); printf("\n\n"); printf("+---------------------------------------------+\n"); printf("| S3C2440A USB Downloader ver R0.03 2004 Jan |\n"); printf("+---------------------------------------------+\n"); // printf("FCLK=%4.1fMHz,%s mode\n",FCLK/1000000.,mode); printf("USB: IN_ENDPOINT:1 OUT_ENDPOINT:3\n"); printf("FORMAT: <ADDR(DATA):4>+<SIZE(n+10):4>+<DATA:n>+<CS:2>\n"); printf("NOTE: Power off/on or press the reset button for 1 sec\n"); printf(" in order to get a valid USB device address.\n"); printf("\n"); }
int main( void) { int autoID,dispID,dispIndex; int timerval; U16 btnStat,oldStat; rGPACDH = rdGPACDH & ~(1<<5) | (0<<5); // RDATA_OEN : enable rGPHCON=rGPHCON&~(0xf<<26)|(0xa<<26); rMISCCR=rMISCCR&~((0x7<<8)|(0x7<<4))|(0x3<<8)|(0x2<<4); // test code start setting in option.h SetCLKDIV( Startup_ARMCLKdiv, Startup_PREdiv, Startup_HCLKdiv, Startup_PCLKdiv); SetMPLL( Startup_MDIV, Startup_PDIV, Startup_SDIV); SystemCLK(0); Isr_Init(); MMU_Init(); SPI_Init(); Console(); printf("\n\n***********TST-500_OTM1283+AUO5.7_720*1280 Test Program Ver 0.0***********\n"); //printf("MPLL=%.2fMHz, ARMCLK=%.2fMHz (%d:%d:%d), HCLK=%.2fMHz, PCLK=%.2fMHz\n\n", // (float)MPLL/1000000,(float)ARMCLK/1000000,ARMCLKdiv+1,(ARMCLKdiv+1)*(HCLKdiv+1),(ARMCLKdiv+1)*(HCLKdiv+1)*(PCLKdiv+1),(float)HCLK/1000000,(float)PCLK/1000000); Init_SSD2805_SPI(); //2805 spi初始化,位于/Peripheral/Video/LCD/Display.c文件 SetLcdPort(); //2443 RGB端口及相关寄存器配置,其中RGB参数位于Display.h文件 SPI_READ_ID(0xb0); Key_Init(); //按键初始化 dispID = 0; dispIndex = 1; autoID = 0; timerval = 0; btnStat=0; oldStat=0; while(1) // { if(dispIndex) { dispIndex = 0; switch(dispID) { case 0: disp_color(0xF800,0,0,XSIZE,YSIZE); break; //显示R颜色 case 1: disp_color(0x07E0,0,0,XSIZE,YSIZE); break; //显示G颜色 case 2: disp_color(0x001F,0,0,XSIZE,YSIZE); break; //显示B颜色 case 3: disp_9WB(); break; case 4: disp_color_table(); break; case 5: disp_gray(); break; case 6: disp_color(0xffff,0,0,XSIZE,YSIZE); break; //显示白色 case 7: disp_color(0x0000,0,0,XSIZE,YSIZE); K9S1208_RdBmp(TFT_RAM1,TFT_SMC_BLK1,TFT_BmpSize); break;//把图片数据拷贝到内存,TFT_RAM1,TFT_SMC_BLK1定义在Display.h文件 break;//Delay(10); //显示黑色 case 8: disp_bmp((U16 *)TFT_RAM1,0,0,XSIZE,YSIZE); K9S1208_RdBmp(TFT_RAM2,TFT_SMC_BLK2,TFT_BmpSize); break; //显示内存的图片的数据 case 9: disp_bmp((U16 *)TFT_RAM2,0,0,XSIZE,YSIZE); K9S1208_RdBmp(TFT_RAM3,TFT_SMC_BLK3,TFT_BmpSize); break; //显示内存的图片的数据 case 10: disp_bmp((U16 *)TFT_RAM3,0,0,XSIZE,YSIZE); K9S1208_RdBmp(TFT_RAM4,TFT_SMC_BLK4,TFT_BmpSize); break; //显示内存的图片的数据 case 11: disp_bmp((U16 *)TFT_RAM4,0,0,XSIZE,YSIZE); break; } // printf("\display id = %d\n",dispID); Delay_MS(400); } if(autoID) { timerval++; if(timerval>30) { timerval = 0; dispID++; if(dispID>BmpMAX) dispID=0; dispIndex = 1; //Init_SSD2805_SPI(); } } btnStat = rGPJDAT; btnStat = (~btnStat)&0x0007; //printf("\ndisplay btn = 0x%x\n",btnStat); if(btnStat) { if(((btnStat&0x01)==0x01) && ((oldStat&0x01)==0x00)) //GPJ0自动手动切换 { if(autoID) autoID = 0; else autoID = 1; } if(((btnStat&0x02)==0x02) && ((oldStat&0x02)==0x00)) //GPJ1画面向前翻 { dispID++; if(dispID>BmpMAX) dispID=0; dispIndex = 1; //Init_SSD2828(); } if(((btnStat&0x04)==0x04) && ((oldStat&0x04)==0x00)) //GPJ2画面向后翻 { // dispID++; if(dispID>0) dispID--; else dispID = BmpMAX; dispIndex = 1; } // Delay_MS(100); } Delay_MS(50); //延时,并且监视串口 oldStat = btnStat; } //-------------------------------------------------------------------------------------------- }
void MeasurePowerConsumption(void) { int i,j; volatile int a,b,c; Uart_Printf("[ Measure the power consumption of S3C2410 ]\n"); Uart_Printf("FCLK is changed to %5.1lfMhz.\n",TMP_FCLK/1000000.); MMU_Init(); ChangeClockDivider(1,1); // 1:2:4 // ChangeClockDivider(0,1); // 1:1:2 #if TMP_FCLK==266000000 ChangeMPllValue(125,4,0); // TMP_FCLK=237000000Hz Uart_Init(266000000/4,115200); #endif #if TMP_FCLK==237000000 ChangeMPllValue(150,2,1); // TMP_FCLK=237000000Hz Uart_Init(237000000/4,115200); #endif #if TMP_FCLK==226000000 ChangeMPllValue(105,1,1); // TMP_FCLK=226000000Hz Uart_Init(226000000/4,115200); #endif #if TMP_FCLK==214500000 ChangeMPllValue(135,2,1); // TMP_FCLK=214500000Hz Uart_Init(214500000/4,115200); #endif #if TMP_FCLK==202800000 ChangeMPllValue(161,3,1); // TMP_FCLK=202800000Hz Uart_Init(202800000/4,115200); #endif #if TMP_FCLK==180000000 ChangeMPllValue(82,1,1); // TMP_FCLK=180000000Hz Uart_Init(180000000/4,115200); #endif #if TMP_FCLK==152000000 ChangeMPllValue(68,1,1); // TMP_FCLK=152000000Hz Uart_Init(152000000/4,115200); #endif #if TMP_FCLK==135000000 ChangeMPllValue(82,2,1); // FCLK=135000000Hz Uart_Init(135000000/4,115200); #endif #if TMP_FCLK==101250000 ChangeMPllValue(127,2,2); // TMP_FCLK=101250000Hz Uart_Init(101250000/2,115200); #endif #if TMP_FCLK==50700000 ChangeMPllValue(161,3,3); // TMP_FCLK=50700000Hz Uart_Init(50700000/4,115200); #endif rGPHCON = rGPHCON&~(3<<18|3<<20)|(1<<18|1<<20); //GPH9:CLKOUT0->OUT,GPH10:CLKOUT1->OUT #if 0 rGPHCON = rGPHCON&~(3<<18)|(2<<18); //CLKOUT0 rMISCCR = rMISCCR&~(7<<4)|(4<<4); //PCLK=45Mhz @FCLK=180Mhz #endif #if UNUSED_BLCOK_ON==0 rCLKCON=rCLKCON&~(1<<18|1<<16|1<<12|1<<11|1<<9|1<<4); //SPI,IIC,UART1,2,SDI,NFC #endif #if DMA2_ON==1 StartDmaMem2Mem(); #endif PWR_StartTimer(); Uart_Printf("TFT-LCD 240x320 16bit is running.\n"); Lcd_PowerEnable(0,1); PWR_Lcd_Tft_16Bit_240320_On(); PWR_StartIIS(); #if CPU_WORK==QUICK_SORT Uart_Printf("CPU JOB : quick sort of 65536 intteger data.\n"); //qsort; for(i=0; i<NUM_SORT_DATA; i++)dim2[i]=i; i=0; while(1) { qsort(dim2,NUM_SORT_DATA,sizeof(int),compare1); qsort(dim2,NUM_SORT_DATA,sizeof(int),compare2); Uart_Printf(","); } #else Uart_Printf("CPU JOB : Dhrystone 2.1 code.\n"); while(1) { dhrystone21(); Uart_Printf("."); } #endif Uart_Printf("End of the Measurement\n"); }