2011년9월2일_ARM_AT91SAM7S256 DBGU(디버그유닛)으로 ARM↔PC간 시리얼통신하기 위해 DBGU초기화와 1Byte송신/수신 함수들을 만들자.
AT91SAM7S256에는 총 3개의 USART(직렬통신)가 있고,
그 중 하나는 DBGU이다.
이번에 할 것이 바로 이 디버그 유닛이고 아래의 USART는 아니다.
USART는 DBGU에 비해 잘 사용되지 않는다는데 DBGU보다 기능이 많아 보인다. (더 좋아 보인다.)
그러나 우리가 지급 받은 실습보드는 아래와 같이 DBGU만 쓰기 쉽도록 하드웨어적인 구성이 되어 있어 USART는 하지 않는다.
PC와 통신을 하기 위해선 PC의 시리얼통신방식 RS232인터페이스에 맞춰줘야 한다. (참조URL: http://ko.wikipedia.org/wiki/RS-232)
MAX3232라는 IC는 PC(컴퓨터)와 ARM보드사이에 서로 다른 전압을 맞춰주는 역활을 한다.
RS232는 일반 IC의 High/Low 로직의 신호레벨(0~3.3V)와 달리 High레벨은 -10V정도이고 Low레벨은 +10V이다.
이렇게 전압레벨이 다르니 레벨변환IC가 필요한데 다른 핀들에는 이런 IC를 따로 연결해 줘야 한다.
그래서 실습에는 적합하지 않느니 DBGU를 사용한다.
상기의 회로도를 보면 PA9와 PA10이 MAX3232에 연결되어 있으니 시리얼통신을 할 때에는 PA9와 PA10을 다른 용도로 사용할 수 없다.
이를 하드웨어적인 제약이라고 한다.
상기의 사진에서 3핀 몰렉스와 ARM보드가 연결된 부분의 실크스크린을 보면,
G는 검은색, GND이고,
R은 흰색, 수신이고,
T는 빨간색, 송신이다.
회로도상에 몰렉스 3핀의 위치는 오른쪽 그림과 같이 B2에 위치해 있다.
● DBGU초기화절차
① 송/수신부를 리셋시키고 동작을 중지. 비활성. ② DBGU관련 인터럽트를 비활성시킴. ③ 9번 RXD, 10번 TXD핀을 Peripheral A모드로 바꾸고, Peripheral B모드 비활성. (이유: A와 B를 동시에 사용하는 것은 불가) <- 이 부분은 생략해도 됨. 9번, 10번 핀을 통신용으로 사용하기 위해 병렬포트 Disable ④ 통신속도(보레이트)설정 ⑤ 통신모드와 패리티설정 ⑥ 송/수신 모드 활성화 |
<소스설명>
//도식과 설명과 소스코드 일부분을 추가할 것.
● 1Byte 송수신 함수
<소스설명>
//도식과 설명과 소스코드 일부분을 추가할 것.
● 전체소스코드
소스코드는 참고만 하고 궁금한 점이 있으면 댓글 달아주세요.
설명을 추가해야 하는데 시간이...
○ main.c
1Byte 데이터를 PC로 수신받아 바로 돌려주고 LCD의 두 번째 줄에 표시.
LCD 커서는 계속 시프트하다 화면을 벗어나면 처음으로..
○ PIOA.h
PIO장치 관련해 레지스터들을 정의한 것.
○ DBGU.h
DBGU관련 레지스터와 각 비트를 정의한 것.
DBGU.h에도 LCD.h와 마찬가지로 DBGU관련함수들의 원형을 넣고,
DBGU.c파일을 만들어 분할 컴파일 할 것.
○ LCD.h
LCD관련 PORT설정 및 명령어셋
○ LCD.c
LCD에 명령을 내려 화면을 제어하는 함수들
<테스트 전에 해야 될 일>
PC와 연결을 위해선 RS232인터페이스 규격의 9핀 암놈 커넥터가 있어야 하고,
ARM Board는 몰렉스 3핀 커넥터로 되어 있다.
요즘 컴퓨터는 시리얼 RS232 9핀 커넥터가 없으나 좀 오래된 컴퓨터는 상기의 사진과 같이 커넥터가 있다.
더 옛날 컴퓨터는 프린터포트도 있어 임베디드 개발자에겐 좋으나..그렇다고 옛날 컴퓨터를 사려니 좀 그렇다.
USB to 시리얼이라는 제품이 있어 USB에 연결하여 시리얼포트 COM3부터 사용할 수 있으니 참고하자.
오른쪽 사진과 같이 RS232인터페이스 규격의 9핀 암놈 커넥터를 꼽아주자.
본체는 수놈이라 잘 맞는다.
● 실행결과
하이퍼 터미널에 “abcdefg123 suman”을 순서대로 입력하였다.
그런데 a를 전송하니 ARM보드의 회신이 ?이다. ?는 특수문자이고 전송에러가 났다는 뜻인데..
이 부분을 해결해야 할 것이다.