==========================================================================================
ARM
==========================================================================================
<ARM>


=회로도
http://itsmart333.tistory.com/attachment/cfile7.uf@2439C14355AE048119F7F5.pdf

=

-소스인사이트 소스깨짐 방지
http://blog.naver.com/junyoung8934/90182483563
=LCD 연결


<AT91SAM7S256.h>

<<ARM>>
<MAIN.C>
#include <project.h>
int main() { while (1); return 0; } |
<LCD.H>
#ifndef __LCD_H__ #define __LCD_H__ #include <AT91SAM7S256.h>
#define LCD_BUS 0x00FF0000 //MASK 16~23 #define LCD_RS 0x00000001 // 1 #define LCD_RW 0x00000002 // 2 #define LCD_EN 0x00000004 // 3
#define LCD_CAL_INST(X) ((LCD_BUS)&((X)<<16)) // INST만 넣기
void LCD_Init(void); #endif // __LCD_H__ |
<LCD.C>
#include "lcd.h"
void LCD_Inst(unsigned int uiInst) { volatile unsigned int uiCnt; *AT91C_PIOA_CODR = LCD_BUS | LCD_RS | LCD_RW | LCD_EN; // LOW *AT91C_PIOA_SODR = LCD_CAL_INST(uiInst); for(uiCnt = 0 ; uiCnt <100000; ++uiCnt); // ALL INIT for(uiCnt = 0 ; uiCnt <100000; ++uiCnt); // RS = LOW *AT91C_PIOA_SODR = LCD_EN; for(uiCnt = 0 ; uiCnt <100000; ++uiCnt); // EN = HIGH for(uiCnt = 0 ; uiCnt <100000; ++uiCnt); // BUS = DATA for(uiCnt = 0 ; uiCnt <100000; ++uiCnt); // BUS = VALID DATA *AT91C_PIOA_CODR = LCD_EN; for(uiCnt = 0 ; uiCnt <100000; ++uiCnt); // EN = LOW }
void LCD_Init(void) { //*PIO_PER = LCD_BUS | LCD_RS | LCD_RW | LCD_EN; // 0번지 X => ASSEM //AT91C_BASE_PIOA->PIO_PER = LCD_BUS | LCD_RS | LCD_RW | LCD_EN; *AT91C_PIOA_PER = LCD_BUS | LCD_RS | LCD_RW | LCD_EN;
*AT91C_PIOA_PPUDR = LCD_BUS | LCD_RS | LCD_RW | LCD_EN; return; } |
<MAKEFILE>
#----------------------------- # 2008 Mecha Cource - By CM WC, 2008.09.10. #----------------------------- ifndef ERASE_FCT ERASE_FCT=rm -rf endif ifndef WCCROSS_COMPILE WCCROSS_COMPILE=arm-elf- endif
WCTOOL=gcc
WCOUTFILE_SRAM=at91sam7s_sram_wc WCOUTFILE_FLASH=at91sam7s_flash_wc
WCTARGET=AT91SAM7S256
WCINCL=./include
# Debug Mode OPTIM=-Os
ifeq ($(WCTOOL), gcc)
AS=$(WCCROSS_COMPILE)gcc CC=$(WCCROSS_COMPILE)gcc LD=$(WCCROSS_COMPILE)gcc
OBJCOPY=$(WCCROSS_COMPILE)objcopy OBJDUMP=$(WCCROSS_COMPILE)objdump
NM= $(WCCROSS_COMPILE)nm SIZE=$(WCCROSS_COMPILE)size
CCFLAGS=-g -mcpu=arm7tdmi $(OPTIM) -Wall -I$(WCINCL) -D$(WCTARGET) ASFLAGS=-D__ASSEMBLY__ -D$(WCTARGET) -g -mcpu=arm7tdmi -c $(OPTIM) -Wall -I$(WCINCL)
LDFLAGS+=-nostartfiles -Wl,--cref LDFLAGS+=-lc -lgcc LDFLAGS+=-T elf32-littlearm.lds
OBJS=cstartup.o endif
OBJS+= lowlevel.o \ main.o \ lcd.o
all: sram flash
rebuild: clean all
sram: $(OBJS) $(LD) $(LDFLAGS) -Ttext 0x201000 -Tdata 0x200000 -n -o $(WCOUTFILE_SRAM).elf $(OBJS) $(OBJCOPY) --strip-debug --strip-unneeded $(WCOUTFILE_SRAM).elf -O binary $(WCOUTFILE_SRAM).bin
flash: $(OBJS) $(LD) $(LDFLAGS) -Ttext 0x100000 -Tdata 0x200000 -n -o $(WCOUTFILE_FLASH).elf $(OBJS) $(OBJCOPY) --strip-debug --strip-unneeded $(WCOUTFILE_FLASH).elf -O binary $(WCOUTFILE_FLASH).bin
main.o: main.c $(CC) -c $(CCFLAGS) main.c -o main.o
lcd.o: lcd.c $(CC) -c $(CCFLAGS) lcd.c -o lcd.o lowlevel.o: lowlevel.c $(CC) -c $(CCFLAGS) lowlevel.c -o lowlevel.o
cstartup.o: cstartup.S $(AS) $(ASFLAGS) cstartup.S -o cstartup.o
clean: $(ERASE_FCT) *.o *.bin *.elf *.map
|
<<AVR -<LCD.C>- LCD INST>>
static void LCD_Inst(unsigned char ucInst) { volatile unsigned int uiCnt; //DB INST SET (ENABLE 전 셋팅) LCD_BUS = ucInst; //Write Mode Timing Diagram LCD_CTL = (0<<LCD_PIN_RS)|(0<<LCD_PIN_RW)|(0<<LCD_PIN_EN); // RS : LOW / RW : LOW / EN : LOW => 쓰레기값 (Don't Care) DELAY(DNUM_1); LCD_CTL = (0<<LCD_PIN_RS)|(0<<LCD_PIN_RW)|(1<<LCD_PIN_EN); // EN : HIGH DELAY(DNUM_2); LCD_CTL = (0<<LCD_PIN_RS)|(0<<LCD_PIN_RW)|(0<<LCD_PIN_EN); // EN : LOW DELAY(DNUM_3); return; }
|