S3C24402410的LCD实验代码.docx
《S3C24402410的LCD实验代码.docx》由会员分享,可在线阅读,更多相关《S3C24402410的LCD实验代码.docx(73页珍藏版)》请在冰豆网上搜索。
S3C24402410的LCD实验代码
一.Makefile文件
CC=arm-linux-gcc
LD=arm-linux-ld
AR=arm-linux-ar
OBJCOPY=arm-linux-objcopy
OBJDUMP=arm-linux-objdump
INCLUDEDIR:
=$(shellpwd)/include
CFLAGS:
=-Wall-O2
CPPFLAGS:
=-nostdinc-I$(INCLUDEDIR)
exportCCLDAROBJCOPYOBJDUMPINCLUDEDIRCFLAGSCPPFLAGS
objs:
=head.oinit.onand.ointerrupt.oserial.olcddrv.oframebuffer.olcdlib.omain.olib/libc.a
lcd.bin:
$(objs)
${LD}-Tlcd.lds-olcd_elf$^
${OBJCOPY}-Obinary-Slcd_elf$@
${OBJDUMP}-D-marmlcd_elf>lcd.dis
.PHONY:
lib/libc.a
lib/libc.a:
cdlib;make;cd..
%.o:
%.c
${CC}$(CPPFLAGS)$(CFLAGS)-c-o$@$<
%.o:
%.S
${CC}$(CPPFLAGS)$(CFLAGS)-c-o$@$<
clean:
makeclean-Clib
rm-flcd.binlcd_elflcd.dis*.o
lcd.lds文件文件
SECTIONS{
.=0x00000000;
.init:
AT(0){head.oinit.onand.o}
.=0x30000000;
.text:
AT(4096){*(.text)}
.rodataALIGN(4):
AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03)){*(.rodata*)}
.dataALIGN(4):
AT((LOADADDR(.rodata)+SIZEOF(.rodata)+3)&~(0x03)){*(.data)}
__bss_start=.;
.bssALIGN(4):
{*(.bss)*(COMMON)}
__bss_end=.;
}
二.S3C24**.h
/*WOTCHDOGregister*/
#defineWTCON(*(volatileunsignedlong*)0x53000000)
#defineWTDAT(*(volatileunsignedlong*)0x53000004)
#defineWTCNT(*(volatileunsignedlong*)0x53000008)
/*SDRAMregisers*/
#defineMEM_CTL_BASE0x48000000
#defineSDRAM_BASE0x30000000
/*NANDFlashregisters*/
#ifdefS3C2410
#defineNFCONF(*(volatileunsignedint*)0x4e000000)
#defineNFCMD(*(volatileunsignedchar*)0x4e000004)
#defineNFADDR(*(volatileunsignedchar*)0x4e000008)
#defineNFDATA(*(volatileunsignedchar*)0x4e00000c)
#defineNFSTAT(*(volatileunsignedchar*)0x4e000010)
#else/*S3C2440*/
#defineNFCONF(*(volatileunsignedint*)0x4e000000)
#defineNFCONT(*(volatileunsignedshort*)0x4e000004)
#defineNFCMD(*(volatileunsignedchar*)0x4e000008)
#defineNFADDR(*(volatileunsignedshort*)0x4e00000C)
#defineNFDATA(*(volatileunsignedshort*)0x4e000010)
#defineNFSTAT(*(volatileunsignedchar*)0x4e000020)
#endif
/*GPIOregisters*/
#defineGPACON(*(volatileunsignedlong*)0x56000000)
#defineGPADAT(*(volatileunsignedlong*)0x56000004)
#defineGPBCON(*(volatileunsignedlong*)0x56000010)
#defineGPBDAT(*(volatileunsignedlong*)0x56000014)
#defineGPBUP(*(volatileunsignedlong*)0x56000018)
#defineGPCCON(*(volatileunsignedlong*)0x56000020)
#defineGPCDAT(*(volatileunsignedlong*)0x56000024)
#defineGPCUP(*(volatileunsignedlong*)0x56000028)
#defineGPDCON(*(volatileunsignedlong*)0x56000030)
#defineGPDDAT(*(volatileunsignedlong*)0x56000034)
#defineGPDUP(*(volatileunsignedlong*)0x56000038)
#defineGPECON(*(volatileunsignedlong*)0x56000040)
#defineGPEDAT(*(volatileunsignedlong*)0x56000044)
#defineGPEUP(*(volatileunsignedlong*)0x56000048)
#defineGPFCON(*(volatileunsignedlong*)0x56000050)
#defineGPFDAT(*(volatileunsignedlong*)0x56000054)
#defineGPFUP(*(volatileunsignedlong*)0x56000058)
#defineGPGCON(*(volatileunsignedlong*)0x56000060)
#defineGPGDAT(*(volatileunsignedlong*)0x56000064)
#defineGPGUP(*(volatileunsignedlong*)0x56000068)
#defineGPHCON(*(volatileunsignedlong*)0x56000070)
#defineGPHDAT(*(volatileunsignedlong*)0x56000074)
#defineGPHUP(*(volatileunsignedlong*)0x56000078)
/*UARTregisters*/
#defineULCON0(*(volatileunsignedlong*)0x50000000)
#defineUCON0(*(volatileunsignedlong*)0x50000004)
#defineUFCON0(*(volatileunsignedlong*)0x50000008)
#defineUMCON0(*(volatileunsignedlong*)0x5000000c)
#defineUTRSTAT0(*(volatileunsignedlong*)0x50000010)
#defineUTXH0(*(volatileunsignedchar*)0x50000020)
#defineURXH0(*(volatileunsignedchar*)0x50000024)
#defineUBRDIV0(*(volatileunsignedlong*)0x50000028)
/*interruptregistes*/
#defineSRCPND(*(volatileunsignedlong*)0x4A000000)
#defineINTMOD(*(volatileunsignedlong*)0x4A000004)
#defineINTMSK(*(volatileunsignedlong*)0x4A000008)
#definePRIORITY(*(volatileunsignedlong*)0x4A00000c)
#defineINTPND(*(volatileunsignedlong*)0x4A000010)
#defineINTOFFSET(*(volatileunsignedlong*)0x4A000014)
#defineSUBSRCPND(*(volatileunsignedlong*)0x4A000018)
#defineINTSUBMSK(*(volatileunsignedlong*)0x4A00001c)
/*externalinterruptregisters*/
#defineEINTMASK(*(volatileunsignedlong*)0x560000a4)
#defineEINTPEND(*(volatileunsignedlong*)0x560000a8)
/*clockregisters*/
#defineLOCKTIME(*(volatileunsignedlong*)0x4c000000)
#defineMPLLCON(*(volatileunsignedlong*)0x4c000004)
#defineUPLLCON(*(volatileunsignedlong*)0x4c000008)
#defineCLKCON(*(volatileunsignedlong*)0x4c00000c)
#defineCLKSLOW(*(volatileunsignedlong*)0x4c000010)
#defineCLKDIVN(*(volatileunsignedlong*)0x4c000014)
/*PWM&Timerregisters*/
#defineTCFG0(*(volatileunsignedlong*)0x51000000)
#defineTCFG1(*(volatileunsignedlong*)0x51000004)
#defineTCON(*(volatileunsignedlong*)0x51000008)
#defineTCNTB0(*(volatileunsignedlong*)0x5100000c)
#defineTCMPB0(*(volatileunsignedlong*)0x51000010)
#defineTCNTO0(*(volatileunsignedlong*)0x51000014)
/*I2Cregisters*/
#defineIICCON(*(volatileunsignedchar*)0x54000000)//IICcontrol
#defineIICSTAT(*(volatileunsignedchar*)0x54000004)//IICstatus
#defineIICADD(*(volatileunsignedchar*)0x54000008)//IICaddress
#defineIICDS(*(volatileunsignedchar*)0x5400000c)//IICdatashift
//LCDCONTROLLER
#defineLCDCON1(*(volatileunsignedlong*)0x4d000000)//LCDcontrol1
#defineLCDCON2(*(volatileunsignedlong*)0x4d000004)//LCDcontrol2
#defineLCDCON3(*(volatileunsignedlong*)0x4d000008)//LCDcontrol3
#defineLCDCON4(*(volatileunsignedlong*)0x4d00000c)//LCDcontrol4
#defineLCDCON5(*(volatileunsignedlong*)0x4d000010)//LCDcontrol5
#defineLCDSADDR1(*(volatileunsignedlong*)0x4d000014)//STN/TFTFramebufferstartaddress1
#defineLCDSADDR2(*(volatileunsignedlong*)0x4d000018)//STN/TFTFramebufferstartaddress2
#defineLCDSADDR3(*(volatileunsignedlong*)0x4d00001c)//STN/TFTVirtualscreenaddressset
#defineREDLUT(*(volatileunsignedlong*)0x4d000020)//STNRedlookuptable
#defineGREENLUT(*(volatileunsignedlong*)0x4d000024)//STNGreenlookuptable
#defineBLUELUT(*(volatileunsignedlong*)0x4d000028)//STNBluelookuptable
#defineDITHMODE(*(volatileunsignedlong*)0x4d00004c)//STNDitheringmode
#defineTPAL(*(volatileunsignedlong*)0x4d000050)//TFTTemporarypalette
#defineLCDINTPND(*(volatileunsignedlong*)0x4d000054)//LCDInterruptpending
#defineLCDSRCPND(*(volatileunsignedlong*)0x4d000058)//LCDInterruptsource
#defineLCDINTMSK(*(volatileunsignedlong*)0x4d00005c)//LCDInterruptmask
#defineLPCSEL(*(volatileunsignedlong*)0x4d000060)//LPC3600Control
#definePALETTE0x4d000400//Palettestartaddress
#defineISR_EINT0_OFT0#defineISR_EINT1_OFT1
#defineISR_EINT2_OFT2#defineISR_EINT3_OFT3
#defineISR_EINT4_7_OFT4#defineISR_EINT8_23_OFT5
#defineISR_NOTUSED6_OFT6#defineISR_BAT_FLT_OFT7
#defineISR_TICK_OFT8#defineISR_WDT_OFT9
#defineISR_TIMER0_OFT10#defineISR_TIMER1_OFT11
#defineISR_TIMER2_OFT12#defineISR_TIMER3_OFT13
#defineISR_TIMER4_OFT14#defineISR_UART2_OFT15
#defineISR_LCD_OFT16#defineISR_DMA0_OFT17
#defineISR_DMA1_OFT18#defineISR_DMA2_OFT19
#defineISR_DMA3_OFT20#defineISR_SDI_OFT21
#defineISR_SPI0_OFT22#defineISR_UART1_OFT23
#defineISR_NOTUSED24_OFT24#defineISR_USBD_OFT25
#defineISR_USBH_OFT26#defineISR_IIC_OFT27
#defineISR_UART0_OFT28#defineISR_SPI1_OFT29
#defineISR_RTC_OFT30#defineISR_ADC_OFT31
//PENDINGBIT
#defineBIT_EINT0(0x1)#defineBIT_EINT1(0x1<<1)
#defineBIT_EINT2(0x1<<2)#defineBIT_EINT3(0x1<<3)
#defineBIT_EINT4_7(0x1<<4)#defineBIT_EINT8_23(0x1<<5)
#defineBIT_CAM(0x1<<6)//Addedfor2440.
#defineBIT_BAT_FLT(0x1<<7)#defineBIT_TICK(0x1<<8)
#defineBIT_WDT_AC97(0x1<<9)#defineBIT_TIMER0(0x1<<10)
#defineBIT_TIMER1(0x1<<11)#defineBIT_TIMER2(0x1<<12)
#defineBIT_TIMER3(0x1<<13)#defineBIT_TIMER4(0x1<<14)
#defineBIT_UART2(0x1<<15)#defineBIT_LCD(0x1<<16)
#defineBIT_DMA0(0x1<<17)#defineBIT_DMA1(0x1<<18)
#defineBIT_DMA2(0x1<<19)#defineBIT_DMA3(0x1<<20)
#defineBIT_SDI(0x1<<21)#defineBIT_SPI0(0x1<<22)
#defineBIT_UART1(0x1<<23)#defineBIT_NFCON(0x1<<24)//Addedfor2440.
#defineBIT_USBD(0x1<<25)#defineBIT_USBH(0x1<<26)
#defineBIT_IIC(0x1<<27)#defineBIT_UART0(0x1<<28)
#defineBIT_SPI1(0x1<<29)#defineBIT_RTC(0x1<<30)
#defineBIT_ADC(0x1<<31)#defineBIT_ALLMSK(0xffffffff)
#defineBIT_SUB_ALLMSK(0x7fff)#defineBIT_SUB_AC97(0x1<<14)
#defineBIT_SUB_WDT(0x1<<13)#defineBIT_SUB_CAM_S(0x1<<12)//Addedfor2440.
#defineBIT_SUB_CAM_C(0x1<<11)//Addedfor2440.
#defineBIT_SUB_ADC(0x1<<10)#defineBIT_SUB_TC(0x1<<9)
#defineBIT_SUB_ERR2(0x1<<8)#defineBIT_SUB_TXD2(0x1<<7)
#defineBIT_SUB_RXD2(0x1<<6)#defineBIT_SUB_ERR1(0x1<<5)
#defineBIT_SUB_TXD1(0x1<<4)#defineBIT_SUB_RXD1(0x1<<3)
#defineBIT_SUB_ERR0(0x1<<2)#defineBIT_SUB_TXD0(0x1<<1)
#defineBIT_SUB_RXD0(0x1<<0)
#defineGSTATUS1(*(volatileunsignedlong*)0x560000B0)
三.head.s
@******************************************************************************
@File:
head.S
@功能:
设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@******************************************************************************
.externmain
.text
.global_start
_start:
@******************************************************************************
@中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
bReset
@0x04:
未定义指令中止模式的向量地址
HandleUndef:
bHandleUndef