블로그 이미지
송시혁

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 4. 26. 16:34 임베디드/Arm2567SAM



short형으로 선언한 이유는 ??????



arm칩은 C언어 처럼 %d처럼 10진수 숫자를 출력을 하는

것은 불가능하다. 그래서 2자리이상의 숫자를 나타내기위해서는

문자열 배열을 선언한 다음, 출력하고자 하는 아스키코드를

선언한다면 가능한다. 아래는 Lcd.c의 해당하는 소스이다.


ucString[0]에서 '0'이라는 아스키코드에 usNum/10000에 몫이 더해지면

결과에 해당하는 숫자의 아스키코드를 받아 Lcd로 전송될 것이다.

main()함수에서 인자에 65535를 넣어 각자리에 해당하는 6,5,5,3,5를 출력한다.

출력 방법은 위의 소스를 참조한다. 또한가지의 방법이 더 있다.


(usNum/1000)%10으로 나누어도 같은 숫자가 나온다.

예를 들어서 usNum이 65535라고 가정한다면, 65535/1000 = 65이다.

65를 10으로 나눈 나머지는 5이다.

이런식동일한 방법으로 위의 소스를 보고 적용한다면 결국 차례대로

6,5,5,3,5의 나머지가 올것이다. 단, 맨처음과 마지막은 적용되지 않는다.

위의 소스이든, 다른 방법이든 2가지는 예외.



 

posted by 송시혁
2013. 4. 26. 16:28 임베디드/Arm2567SAM

일단 메모리의 기준주소를 찾고나서

세부적인 주소를 찾는다.(아래그림)







위의 그림을 헤더파일의 전부 정의 한다.

#define ADC_CR = 0xFFFFF8000; 이런식으로 정의









makefile에도 붙여넣는다. 당연히 파일에 해당하는 이름을 

붙여야 한다.






이것은 장치번호이다.

장치번호에 1을 넣어야 동작한다. 해당비트를 뜻한다.









posted by 송시혁
2013. 4. 23. 14:42 임베디드/Arm2567SAM

확장자 S = 어셈블리

 : (라벨)은 글자형태의 주소

ldr = load rge, 레지스터를 load한다.


pc, reset_handler

pc = program counter = 실행하다

메모리에 code영역에서 주소를 받아와서 해석한다.

즉, 파일을 실행한다는 의미.

인텔 = ip

확장= 32비트 EIP

arm칩에서 reset은 0번지

reset_handler 호출= cpu를 깨우고 reg를 정렬한다.

   그제서야 main()호출

_low level_init

   ->low_level_init(위의 init과는 다름.)

-> void lowlevel_init(void)(lowlevel.c)


branch =b, ldr과 만찬가지로 점프하는 역할


vector talble = 점프하는 위치를 저장해 놓은 영역

사용자가 주소를 잘못 사용시 이곳으로가서 pc가 

vector table에가서 수행한다. 예)undefines =에러 메시지


ELF32(링커)

파일의 포맷, 파일의 저장형태

실행되기전 실행을 하기위해 준비하는 단계

ENTRY point = 진입점

(제일 처음 수행된다.)

code영역 = text




 

'임베디드 > Arm2567SAM' 카테고리의 다른 글

4월 26일 숫자를 lcd에 출력하기  (0) 2013.04.26
4월 26일 ADC  (0) 2013.04.26
4월 22일 makefile전체적인 흐름.  (0) 2013.04.22
4월 16일 임베디드 LCD정리  (0) 2013.04.16
4월 15일 임베디드 timing 분석방법  (0) 2013.04.15
posted by 송시혁
2013. 4. 22. 20:38 임베디드

makefile 


라벨-> :  

반드시 enter를 치고 tab키를 쓴다.

tab


echo hello -> 명령어도 같이 실행된다.

hello = 실제 출력결과

@를 echo앞에 쓰면 없어진다.


CC =cl

main:

$(CC) main.c라고 치고


도스창에서 make main명령을 실행할 때,





각 라벨과 내용이 있으면 반드시 엔터를 쳐서 한칸씩 띄운다.

예를 들어서,


all:

aaa


(이 사이에 간격을 띄어놓아야 한다.)

main:

bbbb













'임베디드' 카테고리의 다른 글

4월 26일 ADC와 PMC 이론  (0) 2013.04.28
4월 16일 lcd실습과정  (0) 2013.04.16
posted by 송시혁
2013. 4. 22. 15:43 임베디드/Arm2567SAM

#은 주석문.

역슬래시는 \윗줄과 아랫줄은 붙이는 것을 뜻한다.






변수들을 유심히 본다. ~~~= ~~~~

왼쪽에 있는 부분은 전부 변수명이다.

예를 들어서 WCTOOL = gcc 에서 WCTOOL은 변수에 해당.

$에 ()를 치고 ()안에 있는 변수를 넣으면, 그 변수에 내용을 따라가서

가져온다. 아래 그림을 참조한다.





all: 다음에 @echo end..sram flash를 쓰면

아래와 같이 화면에 출력한다.




'임베디드 > Arm2567SAM' 카테고리의 다른 글

4월 26일 ADC  (0) 2013.04.26
4월 23일 capture.S와 Elf32  (0) 2013.04.23
4월 16일 임베디드 LCD정리  (0) 2013.04.16
4월 15일 임베디드 timing 분석방법  (0) 2013.04.15
4월 9일 임베디드 실습  (0) 2013.04.10
posted by 송시혁
2013. 4. 16. 17:21 임베디드/Arm2567SAM


PIO_OER  = PIO출력 활성화 레지스터


PIO_PER =PIO 활성화 레지스터


PIO_CODR=출력데이터 클리어(0V), 0v로 만들때 사용. LOW신호

PIO_CODR=1<<4;인 경우, 4번자리에 1을 넣으면, 비활성화 된다.


PIO_SODR= 출력데이터 셋(set, 5v), vcc(5v,3.3v), HIGH일때 사용.

PIO_SODR=1<<4;인 경우 4번 자리에 활성화




아래표 참고

















'임베디드 > Arm2567SAM' 카테고리의 다른 글

4월 26일 ADC  (0) 2013.04.26
4월 23일 capture.S와 Elf32  (0) 2013.04.23
4월 22일 makefile전체적인 흐름.  (0) 2013.04.22
4월 15일 임베디드 timing 분석방법  (0) 2013.04.15
4월 9일 임베디드 실습  (0) 2013.04.10
posted by 송시혁
2013. 4. 16. 13:57 임베디드










LCD_RS =  왼쪽으로 24칸이동. 24번핀에 연결하였으므로 

1을 왼쪽으로 24칸이동한다. 아래 #define도 원리가 동일하다.







비트 연산자의 비교이므로 or를 해야 활성화 한다.

PIO_OER과 PIO_PER에 대입되는 값을 살펴보면,

LCD_RS : 0000 0001 0000 0000 0000 0000 0000 0000 

LCD_RW : 0000 0010 0000 0000 0000 0000 0000 0000

LCD_EN : 0000 0100 0000 0000 0000 0000 0000 0000

LCD_BS : 0000 0000 1111 1111 0000 0000 0000 0000

위의 네 값을 OR연산하면

PIO_OER: 0000 0111 1111 1111 0000 0000 0000 0000

이라는 값이 최종적으로 대입되는 것을 확인 할 수 있다.














at91_CAST(a)(a)에서 at91_CAST(a)은 없어도 무관하다.





'임베디드' 카테고리의 다른 글

4월 26일 ADC와 PMC 이론  (0) 2013.04.28
4월 22일 makefile 기본  (0) 2013.04.22
posted by 송시혁
2013. 4. 15. 15:53 임베디드/Arm2567SAM


빨간색 부터 1번이다. 각 영역을 표로 나타내었다.




 RS= H: DATA INPUT

       L: 명령

R/W = 읽기/쓰기

CPU를 제어해서 LCD에 보내야한다.

그래서 R/W에는 쓰기에 해당하는 LOW신호로 한다. 


E = Enable : 작동가능하게 활성화 하는것.

H.H-> L

BUS= 신호선, 데이터


1번(빨간색) RS는 H, L 둘다 받아낸다. 

2번(주황색)에서 RS, RS는 선택되어진 상태.

R/W변화. W이므로 LOW신호가 되어 R/W는 밑으로 내려가게 된다.

3번(노랑색)에서 E가 활성화되어 신호가 올라간다. 다른부분은 그대로 유지.

4번(초록색)에서  BUS가 데이터를 입력받는다, 유지.

5번(연한파랑색)에서  BUS가 데이터를 입력받는다.

6번(남색) BUS가 데이터를 입력받았기 때문에 활성화하는 E가 점차 내려가게 된다.

7번(보라)에서 다른 값들도 유지되다가 곧 점차 미정값으로 변하게 된다.

             입력을 받아서 할 게 없기 때문이다.

8번이 되면 1번과 마찬가지로 된다. 즉, 계속 순환하게 된다.




1

2

3

4

5

6

7




'임베디드 > Arm2567SAM' 카테고리의 다른 글

4월 26일 ADC  (0) 2013.04.26
4월 23일 capture.S와 Elf32  (0) 2013.04.23
4월 22일 makefile전체적인 흐름.  (0) 2013.04.22
4월 16일 임베디드 LCD정리  (0) 2013.04.16
4월 9일 임베디드 실습  (0) 2013.04.10
posted by 송시혁
2013. 4. 10. 15:33 임베디드/Arm2567SAM

아래는 관련소스

led를 깜박이기 위한 소스이다.










pioa의 시작주소와 끝주소를 알아야 한다










offset = 기준이 되는 주소. 가장 처음 시작주소가 위에 그림에서 f400이였다.

이것에 사용하고자 레지스터를 찾아서 main함수를 작성한다. 

예를 들어서 핀 활성화를 위해서  PIO_OER = 0XFFFFF410

(위의 소스 참고)




















설치시 com3이라고 되어 있으나, 지금은 연결이 되어있지 않아 com3으로 되어있다.

'임베디드 > Arm2567SAM' 카테고리의 다른 글

4월 26일 ADC  (0) 2013.04.26
4월 23일 capture.S와 Elf32  (0) 2013.04.23
4월 22일 makefile전체적인 흐름.  (0) 2013.04.22
4월 16일 임베디드 LCD정리  (0) 2013.04.16
4월 15일 임베디드 timing 분석방법  (0) 2013.04.15
posted by 송시혁
prev 1 2 3 4 next