⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 LPC2294开发板资源,包括源代码,BOOTLOAER,SCH,PCB和器件清单
💻 LSS
📖 第 1 页 / 共 3 页
字号:
{
     180:	e92d4010 	stmdb	sp!, {r4, lr}

	void (*kernelstart)(void);
  
	SystemInit();
     184:	ebffffda 	bl	f4 <SystemInit>
 
	uart0Init(B9600, UART_8N1, UART_FIFO_OFF); // setup the UART
     188:	e3a01003 	mov	r1, #3	; 0x3
     18c:	e3a02000 	mov	r2, #0	; 0x0
     190:	e59f00d4 	ldr	r0, [pc, #212]	; 26c <.text+0x26c>
     194:	eb0002a7 	bl	c38 <uart0Init>
	
	PCB_PINSEL2 = 0x0F814924; //Init Extendet Memory
     198:	e59f20d0 	ldr	r2, [pc, #208]	; 270 <.text+0x270>
     19c:	e59f30d0 	ldr	r3, [pc, #208]	; 274 <.text+0x274>
     1a0:	e5832014 	str	r2, [r3, #20]
	BCFG1 = 0x2000FFEF;
     1a4:	e59f20cc 	ldr	r2, [pc, #204]	; 278 <.text+0x278>
     1a8:	e59f30cc 	ldr	r3, [pc, #204]	; 27c <.text+0x27c>

	
	printf("\n\n\r");
     1ac:	e59f00cc 	ldr	r0, [pc, #204]	; 280 <.text+0x280>
     1b0:	e5032ffb 	str	r2, [r3, #-4091]
     1b4:	eb00030f 	bl	df8 <_printf_P>
	printf("*******************************************\n\r");
     1b8:	e59f00c4 	ldr	r0, [pc, #196]	; 284 <.text+0x284>
     1bc:	eb00030d 	bl	df8 <_printf_P>
	printf("*                                         *\n\r");
     1c0:	e59f00c0 	ldr	r0, [pc, #192]	; 288 <.text+0x288>
     1c4:	eb00030b 	bl	df8 <_printf_P>
	printf("*    ARM Linux MMC Boot Loader            *\n\r");
     1c8:	e59f00bc 	ldr	r0, [pc, #188]	; 28c <.text+0x28c>
     1cc:	eb000309 	bl	df8 <_printf_P>
	printf("*                                         *\n\r");
     1d0:	e59f00b0 	ldr	r0, [pc, #176]	; 288 <.text+0x288>
     1d4:	eb000307 	bl	df8 <_printf_P>
	printf("*    Copyright (C) 2005 by Ulrich Radig   *\n\r");
     1d8:	e59f00b0 	ldr	r0, [pc, #176]	; 290 <.text+0x290>
     1dc:	eb000305 	bl	df8 <_printf_P>
	printf("*                                         *\n\r");
     1e0:	e59f00a0 	ldr	r0, [pc, #160]	; 288 <.text+0x288>
     1e4:	eb000303 	bl	df8 <_printf_P>
	printf("*******************************************\n\n\r");
     1e8:	e59f00a4 	ldr	r0, [pc, #164]	; 294 <.text+0x294>
	while (mmc_init() != 0) 	//setup the MMC Card
			{
			   printf("**MMC/SD - Card not found! **\r"); 
     1ec:	eb000301 	bl	df8 <_printf_P>
     1f0:	eb0000c5 	bl	50c <mmc_init>
     1f4:	e3500000 	cmp	r0, #0	; 0x0
     1f8:	e59f0098 	ldr	r0, [pc, #152]	; 298 <.text+0x298>
     1fc:	1afffffa 	bne	1ec <main+0x6c>
			}
			
	//Speichern der Cluster Size und Cluster Offset (Anfang Datenbereich)
	Cluster_Data_Store();
	
	//Initialisierung der MMC/SD-Karte ENDE!
	load_file (FILE1,(int*)KERNEL_START);
     200:	e59f4094 	ldr	r4, [pc, #148]	; 29c <.text+0x29c>
     204:	eb00026a 	bl	bb4 <Cluster_Data_Store>
     208:	e1a01004 	mov	r1, r4
     20c:	e59f008c 	ldr	r0, [pc, #140]	; 2a0 <.text+0x2a0>
     210:	eb0004cf 	bl	1554 <load_file>
	
	//verify_file (FILE1,(int*)KERNEL_START);
	
	//load_file (FILE2,(int*)BOOTIMG_ADDR);
	
	printf("\n\n\rLinux wird gestartet!\n\n\r"); 
     214:	e59f0088 	ldr	r0, [pc, #136]	; 2a4 <.text+0x2a4>
     218:	eb0002f6 	bl	df8 <_printf_P>
	
	PCB_PINSEL0 = 0x80000005;
     21c:	e59f1050 	ldr	r1, [pc, #80]	; 274 <.text+0x274>
     220:	e3a03116 	mov	r3, #-2147483643	; 0x80000005
     224:	e5813000 	str	r3, [r1]
	PCB_PINSEL2 = 0x0F814924;
	
	BCFG0 = 0x2000FFEF;
     228:	e59f204c 	ldr	r2, [pc, #76]	; 27c <.text+0x27c>
     22c:	e59f0044 	ldr	r0, [pc, #68]	; 278 <.text+0x278>
	BCFG1 = 0x2000FFEF;
	BCFG2 = 0x0000FFEF;
     230:	e59fc070 	ldr	ip, [pc, #112]	; 2a8 <.text+0x2a8>
     234:	e59f3034 	ldr	r3, [pc, #52]	; 270 <.text+0x270>
     238:	e5813014 	str	r3, [r1, #20]
     23c:	e5020fff 	str	r0, [r2, #-4095]
     240:	e5020ffb 	str	r0, [r2, #-4091]
     244:	e502cff7 	str	ip, [r2, #-4087]
	BCFG3 = 0x0000FFEF;
     248:	e502cff3 	str	ip, [r2, #-4083]

	VICDefVectAddr = 0x81000018;
     24c:	e59f2058 	ldr	r2, [pc, #88]	; 2ac <.text+0x2ac>
     250:	e3e03000 	mvn	r3, #0	; 0x0
     254:	e5032fcb 	str	r2, [r3, #-4043]
	
	kernelstart = (void (*)(void))KERNEL_START;//KERNEL_START;		
	(*kernelstart)();  
     258:	e1a0e00f 	mov	lr, pc
     25c:	e12fff14 	bx	r4
	
	printf("Never reached this!!");
     260:	e59f0048 	ldr	r0, [pc, #72]	; 2b0 <.text+0x2b0>
     264:	eb0002e3 	bl	df8 <_printf_P>
     268:	eafffffe 	b	268 <main+0xe8>
     26c:	00000187 	andeq	r0, r0, r7, lsl #3
     270:	0f814924 	svceq	0x00814924
     274:	e002c000 	and	ip, r2, r0
     278:	2000ffef 	andcs	pc, r0, pc, ror #31
     27c:	ffe00fff 	undefined instruction 0xffe00fff
     280:	00001aac 	andeq	r1, r0, ip, lsr #21
     284:	00001978 	andeq	r1, r0, r8, ror r9
     288:	000019a8 	andeq	r1, r0, r8, lsr #19
     28c:	000019d8 	ldreqd	r1, [r0], -r8
     290:	00001a08 	andeq	r1, r0, r8, lsl #20
     294:	00001a38 	andeq	r1, r0, r8, lsr sl
     298:	00001a68 	andeq	r1, r0, r8, ror #20
     29c:	81008000 	tsthi	r0, r0
     2a0:	00001a88 	andeq	r1, r0, r8, lsl #21
     2a4:	00001a94 	muleq	r0, r4, sl
     2a8:	0000ffef 	andeq	pc, r0, pc, ror #31
     2ac:	81000018 	tsthi	r0, r8, lsl r0
     2b0:	00001ab0 	streqh	r1, [r0], -r0

000002b4 <Read_Byte_MMC>:
//############################################################################
{
	unsigned char Byte = 0;
	
	SPI0_SPDR = 0xff;
     2b4:	e59f3020 	ldr	r3, [pc, #32]	; 2dc <.text+0x2dc>
     2b8:	e3a020ff 	mov	r2, #255	; 0xff
     2bc:	e5832008 	str	r2, [r3, #8]
	while(!(SPI0_SPSR & (1<<SPIF))){};
     2c0:	e59f2014 	ldr	r2, [pc, #20]	; 2dc <.text+0x2dc>
     2c4:	e5923004 	ldr	r3, [r2, #4]
     2c8:	e3130080 	tst	r3, #128	; 0x80
     2cc:	0afffffb 	beq	2c0 <Read_Byte_MMC+0xc>
	Byte = SPI0_SPDR;
     2d0:	e5920008 	ldr	r0, [r2, #8]
     2d4:	e20000ff 	and	r0, r0, #255	; 0xff
	
	return (Byte);
}
     2d8:	e12fff1e 	bx	lr
     2dc:	e0020000 	and	r0, r2, r0

000002e0 <Write_Command_MMC>:
     2e0:	e59f20a0 	ldr	r2, [pc, #160]	; 388 <.text+0x388>
     2e4:	e5923000 	ldr	r3, [r2]
     2e8:	e92d4010 	stmdb	sp!, {r4, lr}
     2ec:	e3833b01 	orr	r3, r3, #1024	; 0x400
     2f0:	e5823000 	str	r3, [r2]

//############################################################################
//Routine zum Senden eines Bytes zur MMC-Karte
inline void Write_Byte_MMC (unsigned char Byte)
//############################################################################
{
     SPI0_SPDR = Byte; 	//Sendet ein Byte
     2f4:	e59f3090 	ldr	r3, [pc, #144]	; 38c <.text+0x38c>
     2f8:	e3a020ff 	mov	r2, #255	; 0xff
     2fc:	e5832008 	str	r2, [r3, #8]
	 while(!(SPI0_SPSR & (1<<SPIF))){}; //Wartet bis Byte gesendet wurde
     300:	e59f3084 	ldr	r3, [pc, #132]	; 38c <.text+0x38c>
     304:	e5933004 	ldr	r3, [r3, #4]
     308:	e3130080 	tst	r3, #128	; 0x80
     30c:	0afffffb 	beq	300 <Write_Command_MMC+0x20>
     310:	e59f2070 	ldr	r2, [pc, #112]	; 388 <.text+0x388>
     314:	e5923000 	ldr	r3, [r2]
     318:	e3c33b01 	bic	r3, r3, #1024	; 0x400
     31c:	e5823000 	str	r3, [r2]
     320:	e3a01000 	mov	r1, #0	; 0x0
     324:	e4d02001 	ldrb	r2, [r0], #1
     328:	e59f305c 	ldr	r3, [pc, #92]	; 38c <.text+0x38c>
     32c:	e5832008 	str	r2, [r3, #8]
     330:	e59f3054 	ldr	r3, [pc, #84]	; 38c <.text+0x38c>
     334:	e5933004 	ldr	r3, [r3, #4]
     338:	e3130080 	tst	r3, #128	; 0x80
     33c:	0afffffb 	beq	330 <Write_Command_MMC+0x50>
     340:	e2813001 	add	r3, r1, #1	; 0x1
     344:	e20310ff 	and	r1, r3, #255	; 0xff
     348:	e3510006 	cmp	r1, #6	; 0x6
     34c:	0a000008 	beq	374 <Write_Command_MMC+0x94>
     350:	eafffff3 	b	324 <Write_Command_MMC+0x44>
     354:	ebffffd6 	bl	2b4 <Read_Byte_MMC>
     358:	e59f2030 	ldr	r2, [pc, #48]	; 390 <.text+0x390>
     35c:	e2843001 	add	r3, r4, #1	; 0x1
     360:	e1a03803 	mov	r3, r3, lsl #16
     364:	e1540002 	cmp	r4, r2
     368:	e1a04823 	mov	r4, r3, lsr #16
     36c:	08bd8010 	ldmeqia	sp!, {r4, pc}
     370:	ea000001 	b	37c <Write_Command_MMC+0x9c>
     374:	ebffffce 	bl	2b4 <Read_Byte_MMC>
     378:	e3a04001 	mov	r4, #1	; 0x1
     37c:	e35000ff 	cmp	r0, #255	; 0xff
     380:	0afffff3 	beq	354 <Write_Command_MMC+0x74>
     384:	e8bd8010 	ldmia	sp!, {r4, pc}
     388:	e0028000 	and	r8, r2, r0
     38c:	e0020000 	and	r0, r2, r0
     390:	000001f5 	streqd	r0, [r0], -r5

00000394 <Write_Byte_MMC>:
     394:	e59f3018 	ldr	r3, [pc, #24]	; 3b4 <.text+0x3b4>
     398:	e20000ff 	and	r0, r0, #255	; 0xff
     39c:	e5830008 	str	r0, [r3, #8]
     3a0:	e59f300c 	ldr	r3, [pc, #12]	; 3b4 <.text+0x3b4>
     3a4:	e5933004 	ldr	r3, [r3, #4]
     3a8:	e3130080 	tst	r3, #128	; 0x80
     3ac:	0afffffb 	beq	3a0 <Write_Byte_MMC+0xc>
}
     3b0:	e12fff1e 	bx	lr
     3b4:	e0020000 	and	r0, r2, r0

000003b8 <MMC_Read_Block>:

//############################################################################
//Routine zum schreiben eines Blocks(512Byte) auf die MMC/SD-Karte
unsigned char mmc_write_sector (unsigned long addr,unsigned char *Buffer)
//############################################################################
{
	unsigned char tmp;
	//Commando 24 zum schreiben eines Blocks auf die MMC/SD - Karte
	unsigned char CMD[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
	
	/*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
	  addr wird von Blocks zu Bytes umgerechnet danach werden 
	  diese in das Commando eingef黦t*/
	  
	//addr = addr << 9; //addr = addr * 512
	
	CMD[1] = ((addr & 0xFF000000) >>24 );
	CMD[2] = ((addr & 0x00FF0000) >>16 );
	CMD[3] = ((addr & 0x0000FF00) >>8 );

	//Sendet Commando CMD24 an MMC/SD-Karte (Write 1 Block/512 Bytes)
	tmp = Write_Command_MMC (CMD);
	if (tmp != 0)
		{
		return(tmp);
		}
			
	//Wartet einen Moment und sendet einen Clock an die MMC/SD-Karte
	for (unsigned char a=0;a<100;a++)
		{
		Read_Byte_MMC();
		}
	
	//Sendet Start Byte an MMC/SD-Karte
	Write_Byte_MMC(0xFE);	
	
	//Schreiben des Bolcks (512Bytes) auf MMC/SD-Karte
	for (unsigned short int a=0;a<512;a++)
		{
		Write_Byte_MMC(*Buffer++);
		}
	
	//CRC-Byte schreiben
	Write_Byte_MMC(0xFF); //Schreibt Dummy CRC
	Write_Byte_MMC(0xFF); //CRC Code wird nicht benutzt
	
	//Wartet auf MMC/SD-Karte Bussy
	while (Read_Byte_MMC() != 0xff){};
	
	//set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv)
	MMC_Disable();
	
return(0);
}

//############################################################################
//Routine zum lesen des CID Registers von der MMC/SD-Karte (16Bytes)
void MMC_Read_Block(unsigned char *CMD,unsigned char *Buffer,unsigned short int Bytes)
//############################################################################
{	
     3b8:	e92d4070 	stmdb	sp!, {r4, r5, r6, lr}
     3bc:	e1a02802 	mov	r2, r2, lsl #16
     3c0:	e1a04001 	mov	r4, r1
     3c4:	e1a06822 	mov	r6, r2, lsr #16
	//Sendet Commando CMD an MMC/SD-Karte
	if (Write_Command_MMC (CMD) != 0)
     3c8:	ebffffc4 	bl	2e0 <Write_Command_MMC>
     3cc:	e3500000 	cmp	r0, #0	; 0x0
     3d0:	18bd8070 	ldmneia	sp!, {r4, r5, r6, pc}
			{
			 return;
			}

	//Wartet auf Start Byte von der MMC/SD-Karte (FEh/Start Byte)
	
	while (Read_Byte_MMC() != 0xfe){};
     3d4:	ebffffb6 	bl	2b4 <Read_Byte_MMC>
     3d8:	e35000fe 	cmp	r0, #254	; 0xfe
     3dc:	1afffffc 	bne	3d4 <MMC_Read_Block+0x1c>
     3e0:	e3a05000 	mov	r5, #0	; 0x0
     3e4:	ea000004 	b	3fc <MMC_Read_Block+0x44>

	//Lesen des Bolcks (normal 512Bytes) von MMC/SD-Karte
	for (unsigned short int a=0;a<Bytes;a++)
		{
		*Buffer++ = Read_Byte_MMC();
     3e8:	ebffffb1 	bl	2b4 <Read_Byte_MMC>
     3ec:	e2853001 	add	r3, r5, #1	; 0x1
     3f0:	e1a03803 	mov	r3, r3, lsl #16
     3f4:	e5440001 	strb	r0, [r4, #-1]
     3f8:	e1a05823 	mov	r5, r3, lsr #16
     3fc:	e1550006 	cmp	r5, r6
     400:	e2844001 	add	r4, r4, #1	; 0x1
     404:	1afffff7 	bne	3e8 <MMC_Read_Block+0x30>
		}
	//CRC-Byte auslesen
	Read_Byte_MMC();//CRC - Byte wird nicht ausgewertet
     408:	ebffffa9 	bl	2b4 <Read_Byte_MMC>
	Read_Byte_MMC();//CRC - Byte wird nicht ausgewertet
     40c:	ebffffa8 	bl	2b4 <Read_Byte_MMC>
	
	//set MMC_Chip_Select to high (MMC/SD-Karte Inaktiv)
	MMC_Disable();
     410:	e59f200c 	ldr	r2, [pc, #12]	; 424 <.text+0x424>
     414:	e5923000 	ldr	r3, [r2]
     418:	e3833b01 	orr	r3, r3, #1024	; 0x400
     41c:	e5823000 	str	r3, [r2]
     420:	e8bd8070 	ldmia	sp!, {r4, r5, r6, pc}
     424:	e0028000 	and	r8, r2, r0

00000428 <mmc_read_sector>:
	
	return;
}

//############################################################################
//Routine zum lesen eines Blocks(512Byte) von der MMC/SD-Karte
unsigned char mmc_read_sector (unsigned long addr,unsigned char *Buffer)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -