AVR 레지스터와 포트를 0으로 초기화해야합니까?


9

내 코드의 초기화 루틴 동안 다음과 같은 작업을 수행하는 데 사용합니다.

clr    r0  ; will always stay zero

과:

out    PORTA, r0; initialize ports
out    DDRA, r0
out    PORTB, r0
...

이것이 실제로 필요한가? 아니면 재설정시 자동으로 수행되는지 확인할 수 있습니까? 특히, 기본적으로 모든 포트를 입력으로 설정하여 코드가 실행되지 않을 때 외부 votages에 문제가 없도록 할 수 있습니까?

답변:


6

AVR의 I / O 포트는 리셋시 INPUT / Tri-State / Hi-Z (DDRx = 0x00)로 설정됩니다. 대부분의 마이크로 컨트롤러 (모두는 아님)가이 동작을합니다. 핀이 들어가는 것이 가장 안전한 상태입니다. 따라서 포트를 사용하여 입력으로 자동 설정 될 수 있습니다.

ATmega16에서 발췌 한 일부 내용은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

포트 C 핀은 클럭이 작동하지 않더라도 리셋 조건이 활성화되면 3 상태로 표시됩니다.


1
이것은 내가 찾던 것입니다 :)
Stefan Paul Noack

내가 기억하는 한, 입력을 부동 상태로두면 임의의 노이즈가 발생하므로 초기 상태는 0 일 수 있지만 첫 번째 클록 사이클 후에는 0이 아닐 수 있습니다.
miceuz

@miceuz 요점은 알 수없는 상태의 출력 을 가지지 않아야합니다 . 마이크로 컨트롤러에 연결된 외부 회로에 바람직하지 않은 영향을 미칠 수 있습니다.
m.Alin

1
@miceuz 당신은 포트 입력 레지스터를 참조하고 있습니까? 이들은 N / A를 초기 상태로 가지고 있습니다 (핀에 적용되는 모든 것을 반영하기 때문에 의미가 있습니다). 그러나 데이터 방향 레지스터를 참조하고있었습니다. 실수로 포트를 출력으로 설정하지 않았는지 확인하고 싶을 수도 있습니다. 핀에 적용된 전압과 충돌 할 수 있습니다.
Stefan Paul Noack

오, 그래, 정말, 죄송합니다 소음 ..
miceuz

4
  • 데이터 시트의 내용에 관계없이 포트 초기화는 항상 좋은 생각입니다.

  • 데이터 시트에 아무 것도 표시되지 않으면 완전히 중요한 아이디어입니다.


프로그램이 실행될 때 발생하는 상황에 관심이있는 경우 포트 데이터 내용 만 정의하면됩니다.

결과에 신경 쓰지 않으면 포트 데이터 비트를 설정할 필요가 없습니다 :-).

제조업체가 데이터 시트에서 포트 데이터 비트가 설정되거나 지워 졌다고 명시 적으로 말하면 어쨌든 직접 초기화하는 것이 좋습니다. "경계 조건"은 루프 시작, 루프 끝, 원형 버퍼 랩 라운드 포인트 등 대부분의 문제가 발생하는 위치입니다. 프로세서 시작은 하드웨어에 해당합니다. 소음과 결함이 있고 사람들이있는 현실 세계에서, 당신이 할 수있는 한 프로그램의 운명을 맡는 것은 정말 좋은 생각입니다. 포트 초기화는 이것의 쉬운 부분입니다.


완전히 동의했습니다. 방금 하드웨어 재설정 대신 프로그램 시작으로 이동하거나 간접 점프가 잘못되었을 때 최근에 발생한 일이 발생할 수 있다고 생각했습니다. 프로그램 카운터가 오버플로되어 다시 0x0000에 도달했습니다. 누가 포트가 ... 그 이후에 될 상태를 알고
스테판 폴 NOACK

1

재설정시 레지스터 나 SRAM은 초기화되지 않으며 일부 주변 장치 레지스터 만 초기화됩니다. 사용하는 것을 초기화해야합니다.


이것이 적용되는 주변기기 레지스터의 손실을 알고 있거나 연결되어 있습니까? UCSRC데이터 시트 와 같은 일부의 '초기 값'을 찾았습니다 . I / O 포트, 특히 데이터 방향은 어떻습니까?
Stefan Paul Noack

2
I / O 포트가 입력으로 설정되어 있습니다. 모두 데이터 시트에 있습니다.
레온 헬러

@LeonHeller 아, 고마워요. 바로 레지스터 설명에 있습니다. 나는 어떻게 든 그것을 놓쳤다 ...
Stefan Paul Noack

@ noah1989, Leon은 정확합니다. 주변 레지스터의 초기 값은 항상 레지스터의 시각화 아래에 지정됩니다 (또는 개별 비트 이름을 가진 이미지는 :)).
avakar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.