JZ2440 베어 보드 개발 운동 # 1 - LED 조명

플랫폼 : JZ2440 개발 보드 --cpu : S3C2440 (ARM920)


S3C2440는 SOC로, 일반적으로 대부분 여기 아래 베어 메탈 수준으로 하드웨어 관련 소프트웨어 개발을 낮출 수있는 가장 익숙한 방법으로 시스템을 (등, 리눅스 등) 실행하는 데 사용됩니다. 실험 1 프로그래밍 언어는 "헬로우 세계"블랙 또는 다른 출력 창에 인쇄 및 광 발광 다이오드 램프에 비해 노출 된 금속이 "Helloworld"이다.

이 STC89C51 또는 STM32 마이크로 컨트롤러 개발 경험 등 모든 노하우가 베어 보드 제어 CPU가 실제로하고있는 읽기 및 레지스터를 작성 ,이를 바탕으로 우리의 비즈니스 로직을 증가, 우리는 우리가 실행하려면 무엇에 따라 보드를 만들 수 S3C2440도 예외는 없다 .

분석

에 LED 램프를 제어 할 오프, 발광 다이오드, 단방향 도전 LED를, 제 1 회로 기술에서 공지 될 수 있고, 필요한 경우에만 그 방향 (전형적으로 3.3V까지의 LED 세트에 따라)에 양단의 전위차를 적용 이는 조명 할 수있다. 따라서, 하부 기판의 도면보고 필요뿐만 다음 :

도식에서 본 LED 보드는 우리가 단지 nLED_x 제어 할 필요가 있으므로, 높은 전위가 3.3V에 연결되어있다 (도 원리를, n은 일반적으로 액티브 로우이다 나타냄)가 로우 레벨에 접속 핀 출력.

또한 GPF4를 찾을 수 / 5/6은 세 개의 LED에 연결된다 원제도에서 제어되는 램프. 해당 매뉴얼 S3C2440 칩 레지스터 정보를 찾을 다음이 필요합니다. 레지스터 다음 빛 GPIOF에 LED를 제어 할 필요 알고 칩 수동 제어를 참조하십시오

GPFCON가 IO 다른 기능이 선택되고, 01 비트에 대응하는 설정을 취소 된 매뉴얼에 따라, 출력 핀에 출력만큼 ​​여기서 설정.

GPFDATA 데이터는 우리가 출력으로 설정되면 데이터는 하이 또는 로우 출력을 위해 대응하는 비트에 기록 될 수 있고, 등록한다.

GPFUP는 대응하는 비트가 핀이 인상 될 수있다하더라도 0으로 설정되어, 견인 제어 레지스터이고, 상기 레지스터는 모두 리셋 초기화 동안 더 설정 GPFDAT이 핀은 하이 상태로 인출되지 않는다 풀업 설정 당신이 그것을 설정할 수 없도록 0, 모든 핀은 단지 수요를 충족하기 위해, 풀 보드 LED는 기본적으로 꺼져 열 기본.

프로그램의 일부

1. 컴파일

때문에 S3C2440 ARM 아키텍처, ARM 어셈블러 명령어 세트를 사용하여, 여기에 간단하게 쓰기 레지스터가 향후 3 개 LED 조명, 직접 쓰기 모드의 값이보다 안전한 방식으로 공통으로 매우 거친, 후속 쓰기 레지스터를 포함 할 수 있도록 제공되며, .

.text
.global _start

_start:
	/* 将GPF4,5,6设置为输出引脚 */
	LDR R0,=0x56000050
	LDR R1,=0x1500
	STR R1,[R0]
	
	/* 设置GPF4,5,6输出低电平 */
	LDR R0,=0x56000054
	LDR R1,=0x8f
	STR R1,[R0]
halt:
    b halt

2.C 언어

메인 C 언어 함수에 대한 입장을 통합하지만, 인쇄 회로 기판, 당신은 전화 프로그램이 필요 당사의 서면 주,이 프로그램은 프로그램을 시작이라고합니다. C 언어 함수 호출 매개 변수를 전달하고 프로그램 또한 스택이 설정되어 시작에 대한 책임이 있으므로 자동 변수 그래서 C 언어 프로그램이 제대로 작동하는 것으로, 스택 메모리를 사용할 필요가 있기 때문이다.

Start.S
--------------------------------------------------
.text
.global _start

_start:
	MOV R0,#0
	LDR R1,[R0]  //保存0地址值	
	
	STR R0,[R0]	 //将0值写入,测试是否为NOR_Flash启动
	LDR R2,[R0]
	
	CMP R2,R0
	LDR SP,=0x40000000+4096
	MOVEQ SP,#4096
	STREQ R1,[R0]
	
	bl main
halt:
    b halt
led.c
---------------------------------------------------------------------------
int main()
{
	volatile unsigned int* pGPFCON = (unsigned int*)0x56000050;
	volatile unsigned int* pGPFDAT = (unsigned int*)0x56000054;
	
	//能不影响其他位的寄存器写方式
	*pGPFCON &= ~((3<<8) | (3<<10) | (3<<12));  //寄存器对应的控制位清0
	*pGPFCON |= ((1<<8) | (1<<10) | (1<<12));  //置位对应的控制位
	
	*pGPFDAT &=~((1<<4) | (1<<5) | (1<<6));
	return 0;
}

부팅 파일 모드와 nandflash S3C2440 개발 보드를 시작 norflash 인해 존재로 결정 또는 nandflash의 norflash 시작 모드, 시작 모드해야합니다. 아래에서 볼 수있는 매뉴얼 S3C2440 칩 메모리 매핑 테이블을 확인,

모드시 기본 norflash 0 + 4096 주소 0x40000000과 비교 메모리 어드레스, 내장 SRAM 칩 (부트 내부 SRAM) 등의 어드레스를 0으로 시작 norflash.

모드 nandflash 시작할 때, 칩은 내부 데이터 SRAM에 nandflash 전면 4K (부트 내부 SRAM)를 복사하며, 따라서, 기입 동작은 기본 가능한 메모리 제어 블록 0-4096, 0이다.

당신은 다른 메모리 주소를 제외하고 내용 뒤에 적절한 초기화에 대한 필요성을 사용해야하는 경우. norflash 읽기 전용 부팅 파일의 사용이 시험을 쓰는 주소 0 0의 값으로, 0 읽기와 비교. 기록이 실패하면 스택 주소 0x40000000과 + 4096으로 설정되어 있으므로 Norflash에서, 데이터는 0으로 판독 될 것이다. 스택은 4096로 설정되어 있으므로 nandflash 읽기 및 쓰기, 따라서 0이 데이터를 읽고 기록되고, 또한 0이다.

따라서, 어셈블리 언어와 C에 각각 매우 거칠고 아주 간단한 조명 작업을 완료 할 수 있지만 기능을 실현할 수, 세 개의 LED 조명의 효과는 보드에 있습니다. 다음 거친 메이크 C 언어의 동작 메이크 피 유입을 단순화하기 위해 사용되는 크로스 컴파일러를 이용하여 프로그램 컴파일러를 컴파일

all:
    arm-linux-gcc -o Start.o -c Start.S
    arm-linux-gcc -o led.o -c led.c
    arm-linux-ld -o led.elf Start.o led.o
    arm-linux-objcopy -O binary -S led.elf led.bin
    arm-linux-objdump -D led.elf > led.dis

clean:
    rm *.bin *.elf *.dis *.o

파일을 분해 지 프로그램은 추적하면 시간이 여기에 첫번째 것에 대해, 분석을 위해 파일을 분해 될 것이다.

 
게시 19 개 원래 기사 · 원 찬양 7 · 전망 6929

추천

출처blog.csdn.net/G_METHOD/article/details/104146636