嵌入式linux开发笔记: 串口

 

1> led.c

#include "s3c2440_soc.h"

void delay(volatile int d)
{
	while (d--);
}

int led_test(void)
{
	int val = 0;  /* val: 0b000, 0b111 */
	int tmp;

	/* 设置GPFCON让GPF4/5/6配置为输出引脚 */
	GPFCON &= ~((3<<8) | (3<<10) | (3<<12));
	GPFCON |=  ((1<<8) | (1<<10) | (1<<12));

	/* 循环点亮 */
	while (1)
	{
		tmp = ~val;
		tmp &= 7;
		GPFDAT &= ~(7<<4);
		GPFDAT |= (tmp<<4);
		delay(100000);
		val++;
		if (val == 8)
			val =0;
		
	}

	return 0;
}

 2> main.c

#include "s3c2440_soc.h"
#include "uart.h"

int main(void)
{
	unsigned char c;
	
	uart0_init();
	puts("Hello, world!\n\r");
	
	while(1)
	{
		c = getchar();
		if (c == '\r')
		{
			putchar('\n');
		}

		if (c == '\n')
		{
			putchar('\r');
		}

		putchar(c);
	}
	return 0;
}

3> s3c2440_soc.h

/*
制  作:www.100ask.org深圳百问网科技有限公司
工程师:韦东山
当前版本:v1.0
*/

#ifndef  __S3C2440_SOC_H
#define  __S3C2440_SOC_H

#define     __REG(x)					(*(volatile unsigned int *)(x)) 
#define     __REG_BYTE(x)				(*(volatile unsigned char *)(x)) 

/*Memory Controllers*/
#define     BWSCON                   __REG(0x48000000)   //Bus width & wait status control   
#define     BANKCON0                 __REG(0x48000004)   //Boot ROM control                  
#define     BANKCON1                 __REG(0x48000008)   //BANK1 control                     
#define     BANKCON2                 __REG(0x4800000C)   //BANK2 control                     
#define     BANKCON3                 __REG(0x48000010)   //BANK3 control                     
#define     BANKCON4                 __REG(0x48000014)   //BANK4 control                     
#define     BANKCON5                 __REG(0x48000018)   //BANK5 control                     
#define     BANKCON6                 __REG(0x4800001C)   //BANK6 control                     
#define     BANKCON7                 __REG(0x48000020)   //BANK7 control                     
#define     REFRESH                  __REG(0x48000024)   //DRAM/SDRAM refresh control        
#define     BANKSIZE                 __REG(0x48000028)   //Flexible bank size                
#define     MRSRB6                   __REG(0x4800002C)   //Mode register set for SDRAM BANK6 
#define     MRSRB7                   __REG(0x48000030)   //Mode register set for SDRAM BANK7 

/*USB Host Controller*/ 
#define     HcRevision               __REG(0x49000000)
#define     HcControl                __REG(0x49000004)
#define     HcCommonStatus           __REG(0x49000008)
#define     HcInterruptStatus        __REG(0x4900000C)
#define     HcInterruptEnable        __REG(0x49000010)
#define     HcInterruptDisable       __REG(0x49000014)
#define     HcHCCA                   __REG(0x49000018)
#define     HcPeriodCuttentED        __REG(0x4900001C)
#define     HcControlHeadED          __REG(0x49000020)
#define     HcControlCurrentED       __REG(0x49000024)
#define     HcBulkHeadED             __REG(0x49000028)
#define     HcBulkCurrentED          __REG(0x4900002C)
#define     HcDoneHead               __REG(0x49000030)
#define     HcRmInterval             __REG(0x49000034)
#define     HcFmRemaining            __REG(0x49000038)
#define     HcFmNumber               __REG(0x4900003C)
#define     HcPeriodicStart          __REG(0x49000040)
#define     HcLSThreshold            __REG(0x49000044)
#define     HcRhDescriptorA          __REG(0x49000048)
#define     HcRhDescriptorB          __REG(0x4900004C)
#define     HcRhStatus               __REG(0x49000050)
#define     HcRhPortStatus1          __REG(0x49000054)
#define     HcRhPortStatus2          __REG(0x49000058)

/*Interrupt Controller*/
#define     SRCPND                   __REG(0X4A000000)  //Interrupt request status       
#define     INTMOD                   __REG(0X4A000004)  //Interrupt mode control         
#define     INTMSK                   __REG(0X4A000008)  //Interrupt mask control         
#define     PRIORITY                 __REG(0X4A00000C)  //IRQ priority control           
#define     INTPND                   __REG(0X4A000010)  //Interrupt request status       
#define     INTOFFSET                __REG(0X4A000014)  //Interrupt request source offset
#define     SUBSRCPND                __REG(0X4A000018)  //Sub source pending             
#define     INTSUBMSK                __REG(0X4A00001C)  //Interrupt sub mask    
    
/*DMA*/ 
#define     DISRC0                   __REG(0x4B000000)  //DMA 0 initial source              
#define     DISRCC0                  __REG(0x4B000004)  //DMA 0 initial source control      
#define     DIDST0                   __REG(0x4B000008)  //DMA 0 initial destination         
#define     DIDSTC0                  __REG(0x4B00000C)  //DMA 0 initial destination control 
#define     DCON0                    __REG(0x4B000010)  //DMA 0 control                     
#define     DSTAT0                   __REG(0x4B000014)  //DMA 0 count                       
#define     DCSRC0                   __REG(0x4B000018)  //DMA 0 current source              
#define     DCDST0                   __REG(0x4B00001C)  //DMA 0 current destination         
#define     DMASKTRIG0               __REG(0x4B000020)  //DMA 0 mask trigger                
#define     DISRC1                   __REG(0x4B000040)  //DMA 1 initial source              
#define     DISRCC1                  __REG(0x4B000044)  //DMA 1 initial source control      
#define     DIDST1                   __REG(0x4B000048)  //DMA 1 initial destination         
#define     DIDSTC1                  __REG(0x4B00004C)  //DMA 1 initial destination control 
#define     DCON1                    __REG(0x4B000050)  //DMA 1 control                     
#define     DSTAT1                   __REG(0x4B000054)  //DMA 1 count                       
#define     DCSRC1                   __REG(0x4B000058)  //DMA 1 current source              
#define     DCDST1                   __REG(0x4B00005C)  //DMA 1 current destination         
#define     DMASKTRIG1               __REG(0x4B000060)  //DMA 1 mask trigger                
#define     DISRC2                   __REG(0x4B000080)  //DMA 2 initial source              
#define     DISRCC2                  __REG(0x4B000084)  //DMA 2 initial source control      
#define     DIDST2                   __REG(0x4B000088)  //DMA 2 initial destination         
#define     DIDSTC2                  __REG(0x4B00008C)  //DMA 2 initial destination control 
#define     DCON2                    __REG(0x4B000090)  //DMA 2 control                     
#define     DSTAT2                   __REG(0x4B000094)  //DMA 2 count                       
#define     DCSRC2                   __REG(0x4B000098)  //DMA 2 current source              
#define     DCDST2                   __REG(0x4B00009C)  //DMA 2 current destination         
#define     DMASKTRIG2               __REG(0x4B0000A0)  //DMA 2 mask trigger                
#define     DISRC3                   __REG(0x4B0000C0)  //DMA 3 initial source              
#define     DISRCC3                  __REG(0x4B0000C4)  //DMA 3 initial source control      
#define     DIDST3                   __REG(0x4B0000C8)  //DMA 3 initial destination         
#define     DIDSTC3                  __REG(0x4B0000CC)  //DMA 3 initial destination control 
#define     DCON3                    __REG(0x4B0000D0)  //DMA 3 control                     
#define     DSTAT3                   __REG(0x4B0000D4)  //DMA 3 count                       
#define     DCSRC3                   __REG(0x4B0000D8)  //DMA 3 current source              
#define     DCDST3                   __REG(0x4B0000DC)  //DMA 3 current destination         
#define     DMASKTRIG3               __REG(0x4B0000E0)  //DMA 3 mask trigger     

/*Clock & Power Management*/
#define     LOCKTIME                 __REG(0x4C000000)  //PLL lock time counter         
#define     MPLLCON                  __REG(0x4C000004)  //MPLL control                  
#define     UPLLCON                  __REG(0x4C000008)  //UPLL control                  
#define     CLKCON                   __REG(0x4C00000C)  //Clock generator control       
#define     CLKSLOW                  __REG(0x4C000010)  //Slow clock control            
#define     CLKDIVN                  __REG(0x4C000014)  //Clock divider control         
#define     CAMDIVN                  __REG(0x4C000018)  //Camera clock divider control  

/*LCD Controller*/
#define	    LCDCON1  	             __REG(0X4D000000)  //LCD control 1                          
#define	    LCDCON2  	             __REG(0X4D000004)  //LCD control 2                          
#define	    LCDCON3  	             __REG(0X4D000008)  //LCD control 3                          
#define	    LCDCON4  	             __REG(0X4D00000C)  //LCD control 4                          
#define	    LCDCON5  	             __REG(0X4D000010)  //LCD control 5                          
#define	    LCDSADDR1	             __REG(0X4D000014)  //STN/TFT: frame buffer start address 1  
#define	    LCDSADDR2	             __REG(0X4D000018)  //STN/TFT: frame buffer start address 2  
#define	    LCDSADDR3	             __REG(0X4D00001C)  //STN/TFT: virtual screen address set    
#define	    REDLUT   	             __REG(0X4D000020)  //STN: red lookup table                  
#define	    GREENLUT 	             __REG(0X4D000024)  //STN: green lookup table                
#define	    BLUELUT  	             __REG(0X4D000028)  //STN: blue lookup table                 
#define	    DITHMODE 	             __REG(0X4D00004C)  //STN: dithering mode                    
#define	    TPAL     	             __REG(0X4D000050)  //TFT: temporary palette                 
#define	    LCDINTPND	             __REG(0X4D000054)  //LCD interrupt pending                  
#define	    LCDSRCPND	             __REG(0X4D000058)  //LCD interrupt source                   
#define	    LCDINTMSK	             __REG(0X4D00005C)  //LCD interrupt mask                     
#define	    TCONSEL  	             __REG(0X4D000060)  //TCON(LPC3600/LCC3600) control    

/*NAND Flash*/

#define     NFCONF                   __REG(0x4E000000)  //NAND flash configuration             
#define     NFCONT                   __REG(0x4E000004)  //NAND flash control                   
#define     NFCMD                    __REG(0x4E000008)  //NAND flash command                   
#define     NFADDR                   __REG(0x4E00000C)  //NAND flash address                   
#define     NFDATA                   __REG(0x4E000010)  //NAND flash data                      
#define     NFMECC0                  __REG(0x4E000014)  //NAND flash main area ECC0/1          
#define     NFMECC1                  __REG(0x4E000018)  //NAND flash main area ECC2/3          
#define     NFSECC                   __REG(0x4E00001C)  //NAND flash spare area ECC            
#define     NFSTAT                   __REG(0x4E000020)  //NAND flash operation status          
#define     NFESTAT0                 __REG(0x4E000024)  //NAND flash ECC status for I/O[7:0]   
#define     NFESTAT1                 __REG(0x4E000028)  //NAND flash ECC status for I/O[15:8]  
#define     NFMECC0_STATUS           __REG(0x4E00002C)  //NAND flash main area ECC0 status     
#define     NFMECC1_STATUS           __REG(0x4E000030)  //NAND flash main area ECC1 status     
#define     NFSECC_STATUS            __REG(0x4E000034)  //NAND flash spare area ECC status     
#define     NFSBLK                   __REG(0x4E000038)  //NAND flash start block address       
#define     NFEBLK                   __REG(0x4E00003C)  //NAND flash end block address       

/*Camera Interface*/
#define     CISRCFMT                 __REG(0x4F000000)  //Input source format                                
#define     CIWDOFST                 __REG(0x4F000004)  //Window offset register                             
#define     CIGCTRL                  __REG(0x4F000008)  //Global control register                            
#define     CICOYSA1                 __REG(0x4F000018)  //Y 1st frame start address for codec DMA            
#define     CICOYSA2                 __REG(0x4F00001C)  //Y 2nd frame start address for codec DMA            
#define     CICOYSA3                 __REG(0x4F000020)  //Y 3nd frame start address for codec DMA            
#define     CICOYSA4                 __REG(0x4F000024)  //Y 4th frame start address for codec DMA            
#define     CICOCBSA1                __REG(0x4F000028)  //Cb 1st frame start address for codec DMA           
#define     CICOCBSA2                __REG(0x4F00002C)  //Cb 2nd frame start address for codec DMA           
#define     CICOCBSA3                __REG(0x4F000030)  //Cb 3nd frame start address for codec DMA           
#define     CICOCBSA4                __REG(0x4F000034)  //Cb 4th frame start address for codec DMA           
#define     CICOCRSA1                __REG(0x4F000038)  //Cr 1st frame start address for codec DMA           
#define     CICOCRSA2                __REG(0x4F00003C)  //Cr 2nd frame start address for codec DMA           
#define     CICOCRSA3                __REG(0x4F000040)  //Cr 3nd frame start address for codec DMA           
#define     CICOCRSA4                __REG(0x4F000044)  //Cr 4th frame start address for codec DMA           
#define     CICOTRGFMT               __REG(0x4F000048)  //Target image format of codec DMA                   
#define     CICOCTRL                 __REG(0x4F00004C)  //Codec DMA control related                          
#define     CICOSCPRERATIO           __REG(0x4F000050)  //Codec pre-scaler ratio control                     
#define     CICOSCPREDST             __REG(0x4F000054)  //Codec pre-scaler destination format                
#define     CICOSCCTRL               __REG(0x4F000058)  //Codec main-scaler control                          
#define     CICOTAREA                __REG(0x4F00005C)  //Codec scaler target area                           
#define     CICOSTATUS               __REG(0x4F000064)  //Codec path status                                  
#define     CIPRCLRSA1               __REG(0x4F00006C)  //RGB 1st frame start address for preview DMA        
#define     CIPRCLRSA2               __REG(0x4F000070)  //RGB 2nd frame start address for preview DMA        
#define     CIPRCLRSA3               __REG(0x4F000074)  //RGB 3nd frame start address for preview DMA        
#define     CIPRCLRSA4               __REG(0x4F000078)  //RGB 4th frame start address for preview DMA        
#define     CIPRTRGFMT               __REG(0x4F00007C)  //Target image format of preview DMA                 
#define     CIPRCTRL                 __REG(0x4F000080)  //Preview DMA control related                        
#define     CIPRSCPRERATIO           __REG(0x4F000084)  //Preview pre-scaler ratio control                   
#define     CIPRSCPREDST             __REG(0x4F000088)  //Preview pre-scaler destination format              
#define     CIPRSCCTRL               __REG(0x4F00008C)  //Preview main-scaler control                        
#define     CIPRTAREA                __REG(0x4F000090)  //Preview scaler target area                         
#define     CIPRSTATUS               __REG(0x4F000098)  //Preview path status                                
#define     CIIMGCPT                 __REG(0x4F0000A0)  //Image capture enable command       

/*UART*/
#define     ULCON0                   __REG(0x50000000)  //UART 0 line control      
#define     UCON0                    __REG(0x50000004)  //UART 0 control           
#define     UFCON0                   __REG(0x50000008)  //UART 0 FIFO control      
#define     UMCON0                   __REG(0x5000000C)  //UART 0 modem control     
#define     UTRSTAT0                 __REG(0x50000010)  //UART 0 Tx/Rx status      
#define     UERSTAT0                 __REG(0x50000014)  //UART 0 Rx error status   
#define     UFSTAT0                  __REG(0x50000018)  //UART 0 FIFO status       
#define     UMSTAT0                  __REG(0x5000001C)  //UART 0 modem status    
#define     UTXH0                    __REG_BYTE(0x50000020)  //UART 0 transmission hold 
#define     URXH0                    __REG_BYTE(0x50000024)  //UART 0 receive buffer    
#define     UBRDIV0                  __REG(0x50000028)  //UART 0 baud rate divisor 
#define     ULCON1                   __REG(0x50004000)  //UART 1 line control      
#define     UCON1                    __REG(0x50004004)  //UART 1 control           
#define     UFCON1                   __REG(0x50004008)  //UART 1 FIFO control      
#define     UMCON1                   __REG(0x5000400C)  //UART 1 modem control     
#define     UTRSTAT1                 __REG(0x50004010)  //UART 1 Tx/Rx status      
#define     UERSTAT1                 __REG(0x50004014)  //UART 1 Rx error status   
#define     UFSTAT1                  __REG(0x50004018)  //UART 1 FIFO status       
#define     UMSTAT1                  __REG(0x5000401C)  //UART 1 modem status        
#define     UTXH1                    __REG(0x50004020)  //UART 1 transmission hold 
#define     URXH1                    __REG(0x50004024)  //UART 1 receive buffer   
#define     UBRDIV1                  __REG(0x50004028)  //UART 1 baud rate divisor 
#define     ULCON2                   __REG(0x50008000)  //UART 2 line control      
#define     UCON2                    __REG(0x50008004)  //UART 2 control           
#define     UFCON2                   __REG(0x50008008)  //UART 2 FIFO control       
#define     UTRSTAT2                 __REG(0x50008010)  //UART 2 Tx/Rx status      
#define     UERSTAT2                 __REG(0x50008014)  //UART 2 Rx error status   
#define     UFSTAT2                  __REG(0x50008018)  //UART 2 FIFO status       
#define     UTXH2                    __REG(0x50008020)  //UART 2 transmission hold 
#define     URXH2                    __REG(0x50008024)  //UART 2 receive buffer     
#define     UBRDIV2                  __REG(0x50008028)  //UART 2 baud rate divisor 

/*PWM Timer*/                  
#define     TCFG0                    __REG(0x51000000)  //Timer configuration         
#define     TCFG1                    __REG(0x51000004)  //Timer configuration         
#define     TCON                     __REG(0x51000008)  //Timer control               
#define     TCNTB0                   __REG(0x5100000C)  //Timer count buffer 0        
#define     TCMPB0                   __REG(0x51000010)  //Timer compare buffer 0      
#define     TCNTO0                   __REG(0x51000014)  //Timer count observation 0   
#define     TCNTB1                   __REG(0x51000018)  //Timer count buffer 1        
#define     TCMPB1                   __REG(0x5100001C)  //Timer compare buffer 1      
#define     TCNTO1                   __REG(0x51000020)  //Timer count observation 1   
#define     TCNTB2                   __REG(0x51000024)  //Timer count buffer 2        
#define     TCMPB2                   __REG(0x51000028)  //Timer compare buffer 2      
#define     TCNTO2                   __REG(0x5100002C)  //Timer count observation 2   
#define     TCNTB3                   __REG(0x51000030)  //Timer count buffer 3        
#define     TCMPB3                   __REG(0x51000034)  //Timer compare buffer 3      
#define     TCNTO3                   __REG(0x51000038)  //Timer count observation 3   
#define     TCNTB4                   __REG(0x5100003C)  //Timer count buffer 4        
#define     TCNTO4                   __REG(0x51000040)  //Timer count observation 4  

/*USB Device*/  
#define     FUNC_ADDR_REG            __REG(0x52000140)  //Function address                            
#define     PWR_REG                  __REG(0x52000144)  //Power management                            
#define     EP_INT_REG               __REG(0x52000148)  //interrupt pending and clear                 
#define     USB_INT_REG              __REG(0x52000158)  //USB interrupt pending and clear             
#define     EP_INT_EN_REG            __REG(0x5200015C)  //Interrupt enable                            
#define     USB_INT_EN_REG           __REG(0x5200016C)  //Interrupt enable                            
#define     FRAME_NUM1_REG           __REG(0x52000170)  //Frame number lower byte                     
#define     FRAME_NUM2_REG           __REG(0x52000174)  //Frame number higher byte                    
#define     INDEX_REG                __REG(0x52000178)  //Register index                              
#define     EP0_CSR                  __REG(0x52000184)  //Endpoint 0 status                           
#define     IN_CSR1_REG              __REG(0x52000184)  //In endpoint control status                  
#define     IN_CSR2_REG              __REG(0x52000188)  //In endpoint control status                  
#define     MAXP_REG                 __REG(0x52000180)  //Endpoint max packet                         
#define     OUT_CSR1_REG             __REG(0x52000190)  //Out endpoint control status                 
#define     OUT_CSR2_REG             __REG(0x52000194)  //Out endpoint control status                 
#define     OUT_FIFO_CNT1_REG        __REG(0x52000198)  //Endpoint out write count                    
#define     OUT_FIFO_CNT2_REG        __REG(0x5200019C)  //Endpoint out write count                    
#define     EP0_FIFO                 __REG(0x520001C0)  //Endpoint 0 FIFO                             
#define     EP1_FIFO                 __REG(0x520001C4)  //Endpoint 1 FIFO                             
#define     EP2_FIFO                 __REG(0x520001C8)  //Endpoint 2 FIFO                             
#define     EP3_FIFO                 __REG(0x520001CC)  //Endpoint 3 FIFO                             
#define     EP4_FIFO                 __REG(0x520001D0)  //Endpoint 4 FIFO                             
#define     EP1_DMA_CON              __REG(0x52000200)  //EP1 DMA Interface control                   
#define     EP1_DMA_UNIT             __REG(0x52000204)  //EP1 DMA Tx unit counter                     
#define     EP1_DMA_FIFO             __REG(0x52000208)  //EP1 DMA Tx FIFO counter                     
#define     EP1_DMA_TTC_L            __REG(0x5200020C)  //EP1 DMA Total Tx counter                    
#define     EP1_DMA_TTC_M            __REG(0x52000210)  //EP1 DMA Total Tx counter                    
#define     EP1_DMA_TTC_H            __REG(0x52000214)  //EP1 DMA Total Tx counter                    
#define     EP2_DMA_CON              __REG(0x52000218)  //EP2 DMA interface control                   
#define     EP2_DMA_UNIT             __REG(0x5200021C)  //EP2 DMA Tx Unit counter                     
#define     EP2_DMA_FIFO             __REG(0x52000220)  //EP2 DMA Tx FIFO counter                     
#define     EP2_DMA_TTC_L            __REG(0x52000224)  //EP2 DMA total Tx counter                    
#define     EP2_DMA_TTC_M            __REG(0x52000228)  //EP2 DMA total Tx counter                    
#define     EP2_DMA_TTC_H            __REG(0x5200022C)  //EP2 DMA Total Tx counter                    
#define     EP3_DMA_CON              __REG(0x52000240)  //EP3 DMA Interface control                   
#define     EP3_DMA_UNIT             __REG(0x52000244)  //EP3 DMA Tx Unit counter                     
#define     EP3_DMA_FIFO             __REG(0x52000248)  //EP3 DMA Tx FIFO counter                     
#define     EP3_DMA_TTC_L            __REG(0x5200024C)  //EP3 DMA Total Tx counter                    
#define     EP3_DMA_TTC_M            __REG(0x52000250)  //EP3 DMA Total Tx counter                    
#define     EP3_DMA_TTC_H            __REG(0x52000254)  //EP3 DMA Total Tx counter                    
#define     EP4_DMA_CON              __REG(0x52000258)  //EP4 DMA Interface control                   
#define     EP4_DMA_UNIT             __REG(0x5200025C)  //EP4 DMA Tx Unit counter                     
#define     EP4_DMA_FIFO             __REG(0x52000260)  //EP4 DMA Tx FIFO counter                     
#define     EP4_DMA_TTC_L            __REG(0x52000264)  //EP4 DMA Total Tx counter                    
#define     EP4_DMA_TTC_M            __REG(0x52000268)  //EP4 DMA Total Tx counter                    
#define     EP4_DMA_TTC_H            __REG(0x5200026C)  //EP4 DMA Total Tx counter       
        
/* WOTCHDOG register */  
#define     WTCON                    __REG(0x53000000) 
#define     WTDAT                    __REG(0x53000004) 
#define     WTCNT                    __REG(0x53000008) 
        
/* I2C registers */ 
#define     IICCON  	             __REG(0x54000000)  // IIC control                    
#define     IICSTAT 	             __REG(0x54000004)  // IIC status                     
#define     IICADD  	             __REG(0x54000008)  // IIC address                    
#define     IICDS   	             __REG(0x5400000c)  // IIC data shift                 
#define     IICLC		             __REG(0x54000010)  //IIC multi-master line control   
                                                        
/*IIS*/                                                 
#define     IISCON 	                 __REG(0x55000000)  //HW,W R/W IIS control
#define     IISMOD 	                 __REG(0x55000004)  //IIS mode            
#define     IISPSR 	                 __REG(0x55000008)  //IIS prescaler       
#define     IISFCON	                 __REG(0x5500000C)  //IIS FIFO control    
#define     IISFIFO	                 __REG(0x55000010)  //HW IIS FIFO entry   
        
/*I/O port*/
#define     GPACON                   __REG(0x56000000)  //Port A control                           
#define     GPADAT                   __REG(0x56000004)  //Port A data                                      
#define     GPBCON                   __REG(0x56000010)  //Port B control                                   
#define     GPBDAT                   __REG(0x56000014)  //Port B data                                      
#define     GPBUP                    __REG(0x56000018)  //Pull-up control B                                
#define     GPCCON                   __REG(0x56000020)  //Port C control                                   
#define     GPCDAT                   __REG(0x56000024)  //Port C data                                      
#define     GPCUP                    __REG(0x56000028)  //Pull-up control C                                
#define     GPDCON                   __REG(0x56000030)  //Port D control                                   
#define     GPDDA1T                  __REG(0x56000034)  //Port D data                                      
#define     GPDUP                    __REG(0x56000038)  //Pull-up control D                                
#define     GPECON                   __REG(0x56000040)  //Port E control                                   
#define     GPEDAT                   __REG(0x56000044)  //Port E data                                      
#define     GPEUP                    __REG(0x56000048)  //Pull-up control E                                
#define     GPFCON                   __REG(0x56000050)  //Port F control                                   
#define     GPFDAT                   __REG(0x56000054)  //Port F data                                      
#define     GPFUP                    __REG(0x56000058)  //Pull-up control F                                
#define     GPGCON                   __REG(0x56000060)  //Port G control                                   
#define     GPGDAT                   __REG(0x56000064)  //Port G data                                      
#define     GPGUP                    __REG(0x56000068)  //Pull-up control G                                
#define     GPHCON                   __REG(0x56000070)  //Port H control                                   
#define     GPHDAT                   __REG(0x56000074)  //Port H data                                      
#define     GPHUP                    __REG(0x56000078)  //Pull-up control H                                
#define     GPJCON                   __REG(0x560000D0)  //Port J control                                   
#define     GPJDAT                   __REG(0x560000D4)  //Port J data                                      
#define     GPJUP                    __REG(0x560000D8)  //Pull-up control J                                
#define     MISCCR                   __REG(0x56000080)  //Miscellaneous control                            
#define     DCLKCON                  __REG(0x56000084)  //DCLK0/1 control                                  
#define     EXTINT0                  __REG(0x56000088)  //External interrupt control register 0            
#define     EXTINT1                  __REG(0x5600008C)  //External interrupt control register 1            
#define     EXTINT2                  __REG(0x56000090)  //External interrupt control register 2            
#define     EINTFLT0                 __REG(0x56000094)  //? W R/W Reserved                                 
#define     EINTFLT1                 __REG(0x56000098)  //Reserved                                         
#define     EINTFLT2                 __REG(0x5600009C)  //External interrupt filter control register 2     
#define     EINTFLT3                 __REG(0x560000A0)  //External interrupt filter control register 3     
#define     EINTMASK                 __REG(0x560000A4)  //External interrupt mask                          
#define     EINTPEND                 __REG(0x560000A8)  //External interrupt pending                       
#define     GSTATUS0                 __REG(0x560000AC)  //R External pin status                            
#define     GSTATUS1                 __REG(0x560000B0)  //R/W Chip ID                                      
#define     GSTATUS2                 __REG(0x560000B4)  //Reset status                                     
#define     GSTATUS3                 __REG(0x560000B8)  //Inform register                                  
#define     GSTATUS4                 __REG(0x560000BC)  //Inform register                                  
#define     MSLCON                   __REG(0x560000CC)  //Memory sleep control register                    
        
/*RTC*/     
#define     RTCCON 		             __REG(0x57000040)  //RTC control       
#define     TICNT  		             __REG(0x57000044)  //Tick time count   
#define     RTCALM 		             __REG(0x57000050)  //RTC alarm control 
#define     ALMSEC 		             __REG(0x57000054)  //Alarm second      
#define     ALMMIN 		             __REG(0x57000058)  //Alarm minute      
#define     ALMHOUR		             __REG(0x5700005C)  //Alarm hour        
#define     ALMDATE		             __REG(0x57000060)  //alarm day         
#define     ALMMON 		             __REG(0x57000064)  //Alarm month       
#define     ALMYEAR		             __REG(0x57000068)  //Alarm year        
#define     BCDSEC 		             __REG(0x57000070)  //BCD second        
#define     BCDMIN 		             __REG(0x57000074)  //BCD minute        
#define     BCDHOUR		             __REG(0x57000078)  //BCD hour          
#define     BCDDATE		             __REG(0x5700007C)  //BCD day           
#define     BCDDAY 		             __REG(0x57000080)  //BCD date          
#define     BCDMON 		             __REG(0x57000084)  //BCD month         
#define     BCDYEAR		             __REG(0x57000088)  //BCD year      
        
/*A/D Converte*/
#define     ADCCON                   __REG(0x58000000)  //ADC control                        
#define     ADCTSC                   __REG(0x58000004)  //ADC touch screen control           
#define     ADCDLY                   __REG(0x58000008)  //ADC start or interval delay        
#define     ADCDAT0                  __REG(0x5800000C)  //ADC conversion data                
#define     ADCDAT1                  __REG(0x58000010)  //ADC conversion data                
#define     ADCUPDN                  __REG(0x58000014)  //Stylus up or down interrupt status 

/*SPI CONTROL REGISTER*/ 
#define     SPCON0                   __REG(0x59000000)  //SPI channel 0 control register
#define     SPSTA0                   __REG(0x59000004)  //SPI channel 0 status register
#define     SPPIN0                   __REG(0x59000008)  //SPI channel 0 pin control register
#define     SPPRE0                   __REG(0x5900000C)  //SPI cannel 0 baud rate prescaler register
#define     SPTDAT0                  __REG(0x59000010)  //SPI channel 0 Tx data register
#define     SPRDAT0                  __REG(0x59000014)  //SPI channel 0 Rx data register
#define     SPCON1                   __REG(0x59000020)  //SPI channel 1 control register                                     
#define     SPSTA1                   __REG(0x59000024)  //SPI channel 1 status register                                     
#define     SPPIN1                   __REG(0x59000028)  // SPI channel 1 pin control register
#define     SPPRE1                   __REG(0x5900002C)  //SPI cannel 1 baud rate prescaler register
#define     SPTDAT1                  __REG(0x59000030)  //SPI channel 1 Tx data register                                    
#define     SPRDAT1                  __REG(0x59000034)  //SPI channel 1 Rx data register

/*SD Interface*/
#define     SDICON   		         __REG(0x5A000000)  //SDI control            
#define     SDIPRE   		         __REG(0x5A000004)  //SDI baud rate prescaler
#define     SDICARG  		         __REG(0x5A000008)  //SDI command argument   
#define     SDICCON  		         __REG(0x5A00000C)  //SDI command control    
#define     SDICSTA  		         __REG(0x5A000010)  //SDI command status     
#define     SDIRSP0  		         __REG(0x5A000014)  //SDI response           
#define     SDIRSP1  		         __REG(0x5A000018)  //SDI response           
#define     SDIRSP2  		         __REG(0x5A00001C)  //SDI response           
#define     SDIRSP3  		         __REG(0x5A000020)  //SDI response           
#define     SDIDTIMER		         __REG(0x5A000024)  //SDI data / busy timer  
#define     SDIBSIZE 		         __REG(0x5A000028)  //SDI block size         
#define     SDIDCON  		         __REG(0x5A00002C)  //SDI data control       
#define     SDIDCNT  		         __REG(0x5A000030)  //SDI data remain counter
#define     SDIDSTA  		         __REG(0x5A000034)  //SDI data status        
#define     SDIFSTA  		         __REG(0x5A000038)  //SDI FIFO status        
#define     SDIIMSK  		         __REG(0x5A00003C)  //SDI interrupt mask     
#define     SDIDAT   		         __REG(0x5A000040)  //SDI data               

#endif

4> uart.c

#include "s3c2440_soc.h"


/* 115200,8n1 */
void uart0_init()
{
	/* 设置引脚用于串口 */
	/* GPH2,3用于TxD0, RxD0 */
	GPHCON &= ~((3<<4) | (3<<6));
	GPHCON |= ((2<<4) | (2<<6));

	GPHUP &= ~((1<<2) | (1<<3));  /* 使能内部上拉 */
	

	/* 设置波特率 */
	/* UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
	 *  UART clock = 50M
	 *  UBRDIVn = (int)( 50000000 / ( 115200 x 16) ) –1 = 26
	 */
	UCON0 = 0x00000005; /* PCLK,中断/查询模式 */
	UBRDIV0 = 26;

	/* 设置数据格式 */
	ULCON0 = 0x00000003; /* 8n1: 8个数据位, 无较验位, 1个停止位 */

	/*  */

}

int putchar(int c)
{
	/* UTRSTAT0 */
	/* UTXH0 */

	while (!(UTRSTAT0 & (1<<2)));
	UTXH0 = (unsigned char)c;
	
}

int getchar(void)
{
	while (!(UTRSTAT0 & (1<<0)));
	return URXH0;
}

int puts(const char *s)
{
	while (*s)
	{
		putchar(*s);
		s++;
	}
}

5> uart.h

#ifndef _UART_H
#define _UART_H

void uart0_init();
int putchar(int c);
int getchar(void);
int puts(const char *s);

#endif

6> Makefile

all:
	arm-linux-gcc -c -o led.o led.c
	arm-linux-gcc -c -o uart.o uart.c
	arm-linux-gcc -c -o main.o main.c
	arm-linux-gcc -c -o start.o start.S
	arm-linux-ld -Ttext 0 start.o led.o uart.o main.o -o uart.elf
	arm-linux-objcopy -O binary -S uart.elf uart.bin
	arm-linux-objdump -D uart.elf > uart.dis
clean:
	rm *.bin *.o *.elf *.dis

7> start.S


.text
.global _start

_start:

	/* 关闭看门狗 */
	ldr r0, =0x53000000
	ldr r1, =0
	str r1, [r0]

	/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */
	/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */
	ldr r0, =0x4C000000
	ldr r1, =0xFFFFFFFF
	str r1, [r0]

	/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */
	ldr r0, =0x4C000014
	ldr r1, =0x5
	str r1, [r0]

	/* 设置CPU工作于异步模式 */
	mrc p15,0,r0,c1,c0,0
	orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA
	mcr p15,0,r0,c1,c0,0

	/* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) 
	 *  m = MDIV+8 = 92+8=100
	 *  p = PDIV+2 = 1+2 = 3
	 *  s = SDIV = 1
	 *  FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M
	 */
	ldr r0, =0x4C000004
	ldr r1, =(92<<12)|(1<<4)|(1<<0)
	str r1, [r0]

	/* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定
	 * 然后CPU工作于新的频率FCLK
	 */
	
	

	/* 设置内存: sp 栈 */
	/* 分辨是nor/nand启动
	 * 写0到0地址, 再读出来
	 * 如果得到0, 表示0地址上的内容被修改了, 它对应ram, 这就是nand启动
	 * 否则就是nor启动
	 */
	mov r1, #0
	ldr r0, [r1] /* 读出原来的值备份 */
	str r1, [r1] /* 0->[0] */ 
	ldr r2, [r1] /* r2=[0] */
	cmp r1, r2   /* r1==r2? 如果相等表示是NAND启动 */
	ldr sp, =0x40000000+4096 /* 先假设是nor启动 */
	moveq sp, #4096  /* nand启动 */
	streq r0, [r1]   /* 恢复原来的值 */
	

	bl main

halt:
	b halt

8> uart.dis

uart.elf:     file format elf32-littlearm

Disassembly of section .text:

00000000 <_start>:
   0:	e3a00453 	mov	r0, #1392508928	; 0x53000000
   4:	e3a01000 	mov	r1, #0	; 0x0
   8:	e5801000 	str	r1, [r0]
   c:	e3a00313 	mov	r0, #1275068416	; 0x4c000000
  10:	e3e01000 	mvn	r1, #0	; 0x0
  14:	e5801000 	str	r1, [r0]
  18:	e59f0044 	ldr	r0, [pc, #68]	; 64 <.text+0x64>
  1c:	e3a01005 	mov	r1, #5	; 0x5
  20:	e5801000 	str	r1, [r0]
  24:	ee110f10 	mrc	15, 0, r0, cr1, cr0, {0}
  28:	e3800103 	orr	r0, r0, #-1073741824	; 0xc0000000
  2c:	ee010f10 	mcr	15, 0, r0, cr1, cr0, {0}
  30:	e59f0030 	ldr	r0, [pc, #48]	; 68 <.text+0x68>
  34:	e59f1030 	ldr	r1, [pc, #48]	; 6c <.text+0x6c>
  38:	e5801000 	str	r1, [r0]
  3c:	e3a01000 	mov	r1, #0	; 0x0
  40:	e5910000 	ldr	r0, [r1]
  44:	e5811000 	str	r1, [r1]
  48:	e5912000 	ldr	r2, [r1]
  4c:	e1510002 	cmp	r1, r2
  50:	e59fd018 	ldr	sp, [pc, #24]	; 70 <.text+0x70>
  54:	03a0da01 	moveq	sp, #4096	; 0x1000
  58:	05810000 	streq	r0, [r1]
  5c:	eb00009f 	bl	2e0 <main>

00000060 <halt>:
  60:	eafffffe 	b	60 <halt>
  64:	4c000014 	stcmi	0, cr0, [r0], {20}
  68:	4c000004 	stcmi	0, cr0, [r0], {4}
  6c:	0005c011 	andeq	ip, r5, r1, lsl r0
  70:	40001000 	andmi	r1, r0, r0

00000074 <delay>:
  74:	e1a0c00d 	mov	ip, sp
  78:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
  7c:	e24cb004 	sub	fp, ip, #4	; 0x4
  80:	e24dd004 	sub	sp, sp, #4	; 0x4
  84:	e50b0010 	str	r0, [fp, #-16]
  88:	e51b3010 	ldr	r3, [fp, #-16]
  8c:	e2433001 	sub	r3, r3, #1	; 0x1
  90:	e50b3010 	str	r3, [fp, #-16]
  94:	e51b3010 	ldr	r3, [fp, #-16]
  98:	e3730001 	cmn	r3, #1	; 0x1
  9c:	0a000000 	beq	a4 <delay+0x30>
  a0:	eafffff8 	b	88 <delay+0x14>
  a4:	e89da808 	ldmia	sp, {r3, fp, sp, pc}

000000a8 <led_test>:
  a8:	e1a0c00d 	mov	ip, sp
  ac:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
  b0:	e24cb004 	sub	fp, ip, #4	; 0x4
  b4:	e24dd008 	sub	sp, sp, #8	; 0x8
  b8:	e3a03000 	mov	r3, #0	; 0x0
  bc:	e50b3010 	str	r3, [fp, #-16]
  c0:	e3a02456 	mov	r2, #1442840576	; 0x56000000
  c4:	e2822050 	add	r2, r2, #80	; 0x50
  c8:	e3a03456 	mov	r3, #1442840576	; 0x56000000
  cc:	e2833050 	add	r3, r3, #80	; 0x50
  d0:	e5933000 	ldr	r3, [r3]
  d4:	e3c33c3f 	bic	r3, r3, #16128	; 0x3f00
  d8:	e5823000 	str	r3, [r2]
  dc:	e3a02456 	mov	r2, #1442840576	; 0x56000000
  e0:	e2822050 	add	r2, r2, #80	; 0x50
  e4:	e3a03456 	mov	r3, #1442840576	; 0x56000000
  e8:	e2833050 	add	r3, r3, #80	; 0x50
  ec:	e5933000 	ldr	r3, [r3]
  f0:	e3833c15 	orr	r3, r3, #5376	; 0x1500
  f4:	e5823000 	str	r3, [r2]
  f8:	e51b3010 	ldr	r3, [fp, #-16]
  fc:	e1e03003 	mvn	r3, r3
 100:	e50b3014 	str	r3, [fp, #-20]
 104:	e51b3014 	ldr	r3, [fp, #-20]
 108:	e2033007 	and	r3, r3, #7	; 0x7
 10c:	e50b3014 	str	r3, [fp, #-20]
 110:	e3a02456 	mov	r2, #1442840576	; 0x56000000
 114:	e2822054 	add	r2, r2, #84	; 0x54
 118:	e3a03456 	mov	r3, #1442840576	; 0x56000000
 11c:	e2833054 	add	r3, r3, #84	; 0x54
 120:	e5933000 	ldr	r3, [r3]
 124:	e3c33070 	bic	r3, r3, #112	; 0x70
 128:	e5823000 	str	r3, [r2]
 12c:	e3a01456 	mov	r1, #1442840576	; 0x56000000
 130:	e2811054 	add	r1, r1, #84	; 0x54
 134:	e3a03456 	mov	r3, #1442840576	; 0x56000000
 138:	e2833054 	add	r3, r3, #84	; 0x54
 13c:	e51b2014 	ldr	r2, [fp, #-20]
 140:	e1a02202 	mov	r2, r2, lsl #4
 144:	e5933000 	ldr	r3, [r3]
 148:	e1833002 	orr	r3, r3, r2
 14c:	e5813000 	str	r3, [r1]
 150:	e3a00b61 	mov	r0, #99328	; 0x18400
 154:	e2800e2a 	add	r0, r0, #672	; 0x2a0
 158:	ebffffc5 	bl	74 <delay>
 15c:	e51b3010 	ldr	r3, [fp, #-16]
 160:	e2833001 	add	r3, r3, #1	; 0x1
 164:	e50b3010 	str	r3, [fp, #-16]
 168:	e51b3010 	ldr	r3, [fp, #-16]
 16c:	e3530008 	cmp	r3, #8	; 0x8
 170:	1affffe0 	bne	f8 <led_test+0x50>
 174:	e3a03000 	mov	r3, #0	; 0x0
 178:	e50b3010 	str	r3, [fp, #-16]
 17c:	eaffffdd 	b	f8 <led_test+0x50>

00000180 <uart0_init>:
 180:	e1a0c00d 	mov	ip, sp
 184:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
 188:	e24cb004 	sub	fp, ip, #4	; 0x4
 18c:	e3a02456 	mov	r2, #1442840576	; 0x56000000
 190:	e2822070 	add	r2, r2, #112	; 0x70
 194:	e3a03456 	mov	r3, #1442840576	; 0x56000000
 198:	e2833070 	add	r3, r3, #112	; 0x70
 19c:	e5933000 	ldr	r3, [r3]
 1a0:	e3c330f0 	bic	r3, r3, #240	; 0xf0
 1a4:	e5823000 	str	r3, [r2]
 1a8:	e3a02456 	mov	r2, #1442840576	; 0x56000000
 1ac:	e2822070 	add	r2, r2, #112	; 0x70
 1b0:	e3a03456 	mov	r3, #1442840576	; 0x56000000
 1b4:	e2833070 	add	r3, r3, #112	; 0x70
 1b8:	e5933000 	ldr	r3, [r3]
 1bc:	e38330a0 	orr	r3, r3, #160	; 0xa0
 1c0:	e5823000 	str	r3, [r2]
 1c4:	e3a02456 	mov	r2, #1442840576	; 0x56000000
 1c8:	e2822078 	add	r2, r2, #120	; 0x78
 1cc:	e3a03456 	mov	r3, #1442840576	; 0x56000000
 1d0:	e2833078 	add	r3, r3, #120	; 0x78
 1d4:	e5933000 	ldr	r3, [r3]
 1d8:	e3c3300c 	bic	r3, r3, #12	; 0xc
 1dc:	e5823000 	str	r3, [r2]
 1e0:	e3a02245 	mov	r2, #1342177284	; 0x50000004
 1e4:	e3a03005 	mov	r3, #5	; 0x5
 1e8:	e5823000 	str	r3, [r2]
 1ec:	e3a03205 	mov	r3, #1342177280	; 0x50000000
 1f0:	e2833028 	add	r3, r3, #40	; 0x28
 1f4:	e3a0201a 	mov	r2, #26	; 0x1a
 1f8:	e5832000 	str	r2, [r3]
 1fc:	e3a02205 	mov	r2, #1342177280	; 0x50000000
 200:	e3a03003 	mov	r3, #3	; 0x3
 204:	e5823000 	str	r3, [r2]
 208:	e89da800 	ldmia	sp, {fp, sp, pc}

0000020c <putchar>:
 20c:	e1a0c00d 	mov	ip, sp
 210:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
 214:	e24cb004 	sub	fp, ip, #4	; 0x4
 218:	e24dd004 	sub	sp, sp, #4	; 0x4
 21c:	e50b0010 	str	r0, [fp, #-16]
 220:	e3a03205 	mov	r3, #1342177280	; 0x50000000
 224:	e2833010 	add	r3, r3, #16	; 0x10
 228:	e5933000 	ldr	r3, [r3]
 22c:	e2033004 	and	r3, r3, #4	; 0x4
 230:	e3530000 	cmp	r3, #0	; 0x0
 234:	1a000000 	bne	23c <putchar+0x30>
 238:	eafffff8 	b	220 <putchar+0x14>
 23c:	e3a03205 	mov	r3, #1342177280	; 0x50000000
 240:	e2833020 	add	r3, r3, #32	; 0x20
 244:	e51b2010 	ldr	r2, [fp, #-16]
 248:	e5c32000 	strb	r2, [r3]
 24c:	e1a00003 	mov	r0, r3
 250:	e89da808 	ldmia	sp, {r3, fp, sp, pc}

00000254 <getchar>:
 254:	e1a0c00d 	mov	ip, sp
 258:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
 25c:	e24cb004 	sub	fp, ip, #4	; 0x4
 260:	e3a03205 	mov	r3, #1342177280	; 0x50000000
 264:	e2833010 	add	r3, r3, #16	; 0x10
 268:	e5933000 	ldr	r3, [r3]
 26c:	e2033001 	and	r3, r3, #1	; 0x1
 270:	e3530000 	cmp	r3, #0	; 0x0
 274:	1a000000 	bne	27c <getchar+0x28>
 278:	eafffff8 	b	260 <getchar+0xc>
 27c:	e3a03205 	mov	r3, #1342177280	; 0x50000000
 280:	e2833024 	add	r3, r3, #36	; 0x24
 284:	e5d33000 	ldrb	r3, [r3]
 288:	e20330ff 	and	r3, r3, #255	; 0xff
 28c:	e1a00003 	mov	r0, r3
 290:	e89da800 	ldmia	sp, {fp, sp, pc}

00000294 <puts>:
 294:	e1a0c00d 	mov	ip, sp
 298:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
 29c:	e24cb004 	sub	fp, ip, #4	; 0x4
 2a0:	e24dd004 	sub	sp, sp, #4	; 0x4
 2a4:	e50b0010 	str	r0, [fp, #-16]
 2a8:	e51b3010 	ldr	r3, [fp, #-16]
 2ac:	e5d33000 	ldrb	r3, [r3]
 2b0:	e3530000 	cmp	r3, #0	; 0x0
 2b4:	0a000007 	beq	2d8 <puts+0x44>
 2b8:	e51b3010 	ldr	r3, [fp, #-16]
 2bc:	e5d33000 	ldrb	r3, [r3]
 2c0:	e1a00003 	mov	r0, r3
 2c4:	ebffffd0 	bl	20c <putchar>
 2c8:	e51b3010 	ldr	r3, [fp, #-16]
 2cc:	e2833001 	add	r3, r3, #1	; 0x1
 2d0:	e50b3010 	str	r3, [fp, #-16]
 2d4:	eafffff3 	b	2a8 <puts+0x14>
 2d8:	e1a00003 	mov	r0, r3
 2dc:	e89da808 	ldmia	sp, {r3, fp, sp, pc}

000002e0 <main>:
 2e0:	e1a0c00d 	mov	ip, sp
 2e4:	e92dd800 	stmdb	sp!, {fp, ip, lr, pc}
 2e8:	e24cb004 	sub	fp, ip, #4	; 0x4
 2ec:	e24dd004 	sub	sp, sp, #4	; 0x4
 2f0:	ebffffa2 	bl	180 <uart0_init>
 2f4:	e59f0044 	ldr	r0, [pc, #68]	; 340 <.text+0x340>
 2f8:	ebffffe5 	bl	294 <puts>
 2fc:	ebffffd4 	bl	254 <getchar>
 300:	e1a03000 	mov	r3, r0
 304:	e54b300d 	strb	r3, [fp, #-13]
 308:	e55b300d 	ldrb	r3, [fp, #-13]
 30c:	e353000d 	cmp	r3, #13	; 0xd
 310:	1a000001 	bne	31c <main+0x3c>
 314:	e3a0000a 	mov	r0, #10	; 0xa
 318:	ebffffbb 	bl	20c <putchar>
 31c:	e55b300d 	ldrb	r3, [fp, #-13]
 320:	e353000a 	cmp	r3, #10	; 0xa
 324:	1a000001 	bne	330 <main+0x50>
 328:	e3a0000d 	mov	r0, #13	; 0xd
 32c:	ebffffb6 	bl	20c <putchar>
 330:	e55b300d 	ldrb	r3, [fp, #-13]
 334:	e1a00003 	mov	r0, r3
 338:	ebffffb3 	bl	20c <putchar>
 33c:	eaffffee 	b	2fc <main+0x1c>
 340:	00000344 	andeq	r0, r0, r4, asr #6
Disassembly of section .rodata:

00000344 <.rodata>:
 344:	6c6c6548 	cfstr64vs	mvdx6, [ip], #-288
 348:	77202c6f 	strvc	r2, [r0, -pc, ror #24]!
 34c:	646c726f 	strvsbt	r7, [ip], #-623
 350:	000d0a21 	andeq	r0, sp, r1, lsr #20
Disassembly of section .comment:

00000000 <.comment>:
   0:	43434700 	cmpmi	r3, #0	; 0x0
   4:	4728203a 	undefined
   8:	2029554e 	eorcs	r5, r9, lr, asr #10
   c:	2e342e33 	mrccs	14, 1, r2, cr4, cr3, {1}
  10:	47000035 	smladxmi	r0, r5, r0, r0
  14:	203a4343 	eorcss	r4, sl, r3, asr #6
  18:	554e4728 	strplb	r4, [lr, #-1832]
  1c:	2e332029 	cdpcs	0, 3, cr2, cr3, cr9, {1}
  20:	00352e34 	eoreqs	r2, r5, r4, lsr lr
  24:	43434700 	cmpmi	r3, #0	; 0x0
  28:	4728203a 	undefined
  2c:	2029554e 	eorcs	r5, r9, lr, asr #10
  30:	2e342e33 	mrccs	14, 1, r2, cr4, cr3, {1}
  34:	Address 0x34 is out of bounds.

9> uart.bin

5304 a0e3 0010 a0e3 0010 80e5 1303 a0e3
0010 e0e3 0010 80e5 4400 9fe5 0510 a0e3
0010 80e5 100f 11ee 0301 80e3 100f 01ee
3000 9fe5 3010 9fe5 0010 80e5 0010 a0e3
0000 91e5 0010 81e5 0020 91e5 0200 51e1
18d0 9fe5 01da a003 0000 8105 9f00 00eb
feff ffea 1400 004c 0400 004c 11c0 0500
0010 0040 0dc0 a0e1 00d8 2de9 04b0 4ce2
04d0 4de2 1000 0be5 1030 1be5 0130 43e2
1030 0be5 1030 1be5 0100 73e3 0000 000a
f8ff ffea 08a8 9de8 0dc0 a0e1 00d8 2de9
04b0 4ce2 08d0 4de2 0030 a0e3 1030 0be5
5624 a0e3 5020 82e2 5634 a0e3 5030 83e2
0030 93e5 3f3c c3e3 0030 82e5 5624 a0e3
5020 82e2 5634 a0e3 5030 83e2 0030 93e5
153c 83e3 0030 82e5 1030 1be5 0330 e0e1
1430 0be5 1430 1be5 0730 03e2 1430 0be5
5624 a0e3 5420 82e2 5634 a0e3 5430 83e2
0030 93e5 7030 c3e3 0030 82e5 5614 a0e3
5410 81e2 5634 a0e3 5430 83e2 1420 1be5
0222 a0e1 0030 93e5 0230 83e1 0030 81e5
610b a0e3 2a0e 80e2 c5ff ffeb 1030 1be5
0130 83e2 1030 0be5 1030 1be5 0800 53e3
e0ff ff1a 0030 a0e3 1030 0be5 ddff ffea
0dc0 a0e1 00d8 2de9 04b0 4ce2 5624 a0e3
7020 82e2 5634 a0e3 7030 83e2 0030 93e5
f030 c3e3 0030 82e5 5624 a0e3 7020 82e2
5634 a0e3 7030 83e2 0030 93e5 a030 83e3
0030 82e5 5624 a0e3 7820 82e2 5634 a0e3
7830 83e2 0030 93e5 0c30 c3e3 0030 82e5
4522 a0e3 0530 a0e3 0030 82e5 0532 a0e3
2830 83e2 1a20 a0e3 0020 83e5 0522 a0e3
0330 a0e3 0030 82e5 00a8 9de8 0dc0 a0e1
00d8 2de9 04b0 4ce2 04d0 4de2 1000 0be5
0532 a0e3 1030 83e2 0030 93e5 0430 03e2
0000 53e3 0000 001a f8ff ffea 0532 a0e3
2030 83e2 1020 1be5 0020 c3e5 0300 a0e1
08a8 9de8 0dc0 a0e1 00d8 2de9 04b0 4ce2
0532 a0e3 1030 83e2 0030 93e5 0130 03e2
0000 53e3 0000 001a f8ff ffea 0532 a0e3
2430 83e2 0030 d3e5 ff30 03e2 0300 a0e1
00a8 9de8 0dc0 a0e1 00d8 2de9 04b0 4ce2
04d0 4de2 1000 0be5 1030 1be5 0030 d3e5
0000 53e3 0700 000a 1030 1be5 0030 d3e5
0300 a0e1 d0ff ffeb 1030 1be5 0130 83e2
1030 0be5 f3ff ffea 0300 a0e1 08a8 9de8
0dc0 a0e1 00d8 2de9 04b0 4ce2 04d0 4de2
a2ff ffeb 4400 9fe5 e5ff ffeb d4ff ffeb
0030 a0e1 0d30 4be5 0d30 5be5 0d00 53e3
0100 001a 0a00 a0e3 bbff ffeb 0d30 5be5
0a00 53e3 0100 001a 0d00 a0e3 b6ff ffeb
0d30 5be5 0300 a0e1 b3ff ffeb eeff ffea
4403 0000 4865 6c6c 6f2c 2077 6f72 6c64
210a 0d00 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值