LATCH에 데이터를 쓰면 어떻게됩니까?


9

이것은 PIC16F1947 데이터 시트에서 찾은 것입니다.

PORTB 레지스터를 읽으면 핀의 상태를 읽지 만 쓰면 PORT 래치에 쓰게됩니다. 모든 쓰기 작업은 읽기-수정-쓰기 작업입니다. 따라서 포트에 대한 쓰기는 포트 핀을 읽고이 값을 수정 한 다음 PORT 데이터 래치 (LATB)에 씁니다.

저는 펌웨어 개발자이고 제 배경은 Computer Science입니다. 나는 여전히 하드웨어 수준에서 전자 공학과 논리를 이해하려고 노력하고 있습니다. 나는 기본 지식 만 가지고 있습니다.

따라서 하드웨어 수준에서 래치로 데이터를 쓸 때 발생하는 상황을 이해하고 싶습니다.

감사합니다.

답변:


19

래치는 1 비트의 메모리입니다.

수동으로 그림을 사용합시다 :

일반 I / O 포트 작동

I / O 핀에 비트를 쓰면이 비트가 데이터 버스에서 데이터 레지스터 ( D-FlipFlop )로 저장됩니다. 이 비트의 TRISx가 0이면 데이터 레지스터 Q의 데이터가 I / O 핀에있게됩니다. LATx 또는 PORTx로 쓰는 것은 동일합니다. 빨간색으로 아래를 참조하십시오.

일반 I / O 포트 작동 쓰기

반면에 LATx에서 읽는 것은 PORTx에서 읽는 것과 다릅니다.

LATx에서 읽을 때는 데이터 레지스터 ( D-FlipFlop ) 에있는 내용을 읽습니다 . 녹색으로 아래 그림을 참조하십시오.

일반 I / O 포트 작동 읽기 LATx

PORTx에서 읽을 때 실제 I / O 핀 값을 읽습니다. 파란색으로 아래를 참조하십시오.

일반 I / O 포트 작동 PORTx 읽기

PIC는 읽기-수정-쓰기를 사용하여 쓰기 작업을 수행 하므로 문제 가 될 수 있으므로이 섀도우 레지스터를 사용하여이를 피합니다.


1
장소에 연결하려면 +1 (read-modify-write) [ techref.massmind.org/techref/readmodwrite.htm] 문제 (및 해결책)를 명확하게 설명하십시오 .
davidcary

1
와우, 좋은 설명.
abdullah kahraman 2016 년

읽기-모드-쓰기 문제에 대한 두 개의 링크가 끊어졌습니다.
Randomblue

@Randomblue, 다른 링크를 넣었습니다. 다른 링크의 문제점은 끝에 ']'문자입니다. 브라우저 주소에서 삭제하십시오.
Daniel Grillo

6

읽기-수정-쓰기 문제를 방지하려면 포트의 개별 비트를 설정하거나 재설정하는 대신 포트 전체에 기록해야합니다. RMW 문제로 인해 비트가 설정되지 않거나 다른 출력이 높아질 수 있습니다 (특히 출력 핀이 많은 전류를 소싱 또는 싱크하는 경우).

"그림자 레지스터"가 일반적으로 사용됩니다. RMW 문제를 피하기 위해 비트를 설정 또는 재설정하고 포트로 출력하십시오.

별도의 래치를 사용하여 18F PIC를 사용하면 문제를 피할 수 있으며 개별 비트를 불완전하게 설정하고 재설정 할 수 있습니다.


하지만 원래 포트 레지스터에 쓰면 래치에 쓰므로 래치 레지스터에 쓸 필요가 없습니다.
Donotalo

@Donotalo, 당신 말이 맞아요. 포트 레지스터에도 쓸 수 있습니다. 그것은 중요하지 않습니다.
Daniel Grillo

@Donotalo : 포트 레지스터에 쓸 수는 있지만 LATx 레지스터에 프로세서를 쓰고 PORTx 레지스터를 읽기 전용으로 사용하는 습관을들이는 것이 좋습니다. PORTx 레지스터 (예 : PORTB = 0x42;)에 대한 "블라인드"저장소는 LATBx와 다르게 동작하지 않으며 PORTx 레지스터 (예 : PORTB | = 0x02;)에 대한 읽기-수정-쓰기는 영향을 미칩니다. LATx와 동일하거나 가장 바람직하지 않은 방식으로 다릅니다. BTW, 일부 최신 마이크로 칩 PIC는 LATx를 제공했습니다. 왜 Microchip이 그렇게하는 데 몇 년 (수십 년)이 걸 렸는지 모르겠습니다.
supercat

PIC16F 칩 (일명 "16 비트 명령어 PIC")에는 LAT 레지스터가 있고 PIC16F 칩 (일명 "14 비트 명령어 PIC")은 소프트웨어에서 LAT 레지스터를 시뮬레이션해야합니다 ( "그림자 레지스터")
davidcary
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.