AVR 마이크로 컨트롤러 SPI 구성 레지스터, 주소 및 데이터는 모두 16비트입니다. 쓸 수는 있지만 잘못 읽을 수 있습니다. 레지스터를 읽으려면 C 언어 프로그램을 요청하세요.
AVR 마이크로 컨트롤러의 주소와 데이터가 16비트라는 말은 들어본 적이 없습니다. AVR 마이크로 컨트롤러의 Harvard 구조 명령 길이가 16비트라는 것만 알고 있습니다. AVR 마이크로컨트롤러에는 16비트 레지스터가 있지만 AVR 마이크로컨트롤러는 여전히 8비트 컴퓨터입니다. 사용 중인 AVR 마이크로컨트롤러의 특정 모델을 모르겠습니다. 귀하가 언급한 SPI 데이터 수신 문제는 위의 문제와 관련이 없으며 SPI 특수 기능 레지스터 및 관련 프로그램의 구성과 관련이 있습니다. AVR 마이크로 컨트롤러의 SPI를 호스트로 구성하는 경우:
unsigned char i;//변수 정의
SPCR = 0x53;//AVR SPI를 호스트로 구성, CLK를 fosc/128로 구성
SPDR = 0;//0 지우기 SPI 데이터 레지스터, 동시에 SPI 수신을 시작합니다. 0으로 지울 필요가 없으며 모든 데이터를 쓸 수 있습니다.
while(!(SPSR & 0x80));//데이터를 기다립니다. 슬레이브에서 호스트로 이동
i = SPDR;//데이터 읽기
데이터를 수신할 때 SPDR에 데이터를 써야 하는 이유를 반드시 이해하지 못할 수도 있지만, 이것이 SPI 호스트의 작동 방식입니다. 자세한 내용은 데이터 시트를 참조하세요.
위 루틴의 칩 모델: AVR Atmega169
컴파일 환경: ICCAVR