728x90
반응형
(기존 소스)
구조체의 포인터를 통하여 정의된 값을 가져온다.
-> 구조체 포인터를 통해서 메모리에 접근해서 값을 가져오기 때문에 메모리의 낭비를 줄일 수 있다.
-> 구조체를 사용하거나 구조체 포인터를 사용하는 것의 속도차이는 없음.
- AT91C_BASE_PIOA -> PIO_PER = 0x00000001;
(현재 소스)
디파인 되어있는 주소를 바로 가져와서 사용하도록 설정한다.
-> PER등등... 의 주소를 알아야 하기 때문에 AT91SAM7S256.h 헤더파일을 확인해서 define되어있는 주소값을 가져옴
-> [#define AT91C_PIOA_PER (AT91_CAST(AT91_REG *) 0xFFFFF400) ] //레지스터 주소의 정의를 해 놓은 소스
- *AT91C_PIOA_PER = 0x00000001;
Peripheral DMA Controller
이 장치를 통하거나 APB를 통해야 Debug Unit을 사용할 수 있다.
APB
APB를 통해서 주소에 접근한다. (BUS)
* 우리가 지금 하는 소스는 APB만 사용하면 된다.
Debug Unit
CPU의 상태를 알아 보거나 외부장치를 이용하여 프로그램을 추적 할 수 있다.
디버그 전용으로 따로 만들어 둔 것, USART와 DBGU는 따로있다.
컴퓨터 내용안의 간단한것을 구현 할 때에는 DBGU를 사용하면 더 간편하게 데이터를 주고 받을 수 있다
Power Management Controller
전기를 공급하는 것
->MCK를 넣어줘야 디버그유닛이 동작한다
MCK
메인클럭
Baud Rate Generator
통신 속도를 설정하는 회로
PIO
PIO를 통하여 외부핀에 접근 할 수 있다. (DRXD, DTXD)
ICE Access Handler
디버그할때의 CPU상태 정보를 받아서 시리얼통신으로 보내주는 회로
*ARMProcessor(CPU)
- 외부의 디버깅 정보를 알아보는 회로
- 내부를 들여다 보기 위해서 신호를 받아 줄 회로가 필요하다. (내장하고 있어야함)
*Debug Unit의 Pin에 대한 설명 - DRXD / DTXD
Boot Program - 부팅 감시
Trace Manager - 외부장치를 이용하여 상태를 추적
26.3 Product Dependencies
- 다른 장치에 의존적이다.
- 밑의 기능들을 제대로 사용할 줄 알아야 디버그 유닛이 동작한다.
** I/O Lines ** |
- DBGU로 부터 나가는 외부핀 DRXD의 핀번호
-> PA9, PA10번
- PIN하나로 세가지의 용도로 사용할 수 있다. (지금 I/O Line으로 사용하고 있다 -> Peripherl A모드 사용으로 교체)
PA10, PA9 - 입력으로 들어가고 있음
Serial_Con - ARM칩의 PIN 세개짜리 몰렉스
Peripheral A select Register 사용 (데이터시트 248~249P)
- Peripheral A를 사용하면 DBGU모드로 바뀐다.
** Power Management ** |
25.2 Master Clock Controller
PLLCK - 낮은 주파수를 높은 주파수로 바꾸어줌
PMC_MCKR - SLCK, MAINCK, PLLCK 중 하나를 선택해 주는 관리자
- -PMC_MCKR를 건드리면 클럭을 건드릴 수 있다.
- PMC_MCKR의 PRES를 건드리면 마스터 클럭 프리스케일러를 관리할 수 있음
** Interrupt Source ** |
AIC - AIC에서 인터럽트를 안쓰겠다고 해주어야함.
26.4 UART Operations
비동기 밖에 안되므로 USART가 아닌 UART라 부른다. 데이터를 한번에 보낼 때 8bit밖에 보낼 수 없다. (패리티비트 포함)
비동기 이기 때문에 clock핀을 가지고 있을 필요가 없다.
26.4.1 Baud Rate Generator
통신속도
직접 계산해야함
아트메가의 속도에는 제한이 있는데 57600 = (48000000 / (16*CD))
16-bit Counter - 16bit Counter가 MCK를 갖고있는데 이 16bit 카운터를 관리하는게 CD
Receiver Sampling Clock - 받을때도 클럭이 필요하기 때문에
Receiver - 1을 넣으면 수신활성화
26.4.2.1 Receiver Reset, Enable and Disable
DBGU_CR - RSTRX를 써서 reset모드를 만들 수 있다.
26.4.2.3 Receiver Ready
- 수신된 캐릭터가 완료되었을때 임의의 (데이터의 크기 조절 불가능) 캐릭터가 왔을 때 전송시킨다.
- 데이터가 수신되면 DBGU status 레지스터가 1이된다.
- receive holding 레지스터 DBGU_RHR이 읽어질때 (누군가 이 레지스터에 접근을 하게 되면) RXRDY라고 부르는 레지스터는 자동적으로 0으로 된다.
S에서 시작하고 데이터를 DRXD가 받는것을 완료하고 나면 RXRDY가 DBGU_RHR에 데이터를 주게되고 RXRDY는 0이된다.
RHR은 데이터 받는것을 완료할 때까지 1을 유지했다가 데이터 받기를 완료하면 자동적으로 0이 된다.
아무도 데이터를 읽지 않으면 쭉 L를 유지하다가 두번째부터 덮어씀
RXCHR - 실제로 사용하는 bit
DBGU_IDR - 여기에 0xfffff 넣으면 다꺼진다.
짝수페리티와 노말모드 설정
--두환오빠꺼
내일은 송/수신 함수를 만든다
728x90
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
업무일지 출석번호 7번 김재성 (12) | 2014.07.11 |
---|---|
업무보고 2014.07.10 5번 김상엽 (14) | 2014.07.10 |
2014.7.9 출석번호3번 김대희 업무일지 (13) | 2014.07.09 |
DBGU.c 참고 자료 (0) | 2014.07.09 |
20140707 일일보고 1번 고윤석 (15) | 2014.07.07 |
2014.07.04 일일보고 - 출석번호 22 허수웅 (13) | 2014.07.06 |
프로젝트 발표 코멘트 - 손병규 (0) | 2014.07.04 |
2014.07.03 업무보고 - 출석번호 21번 이재우 (12) | 2014.07.04 |