2010-05-27 4 views
0

필자는 일부 독서를하고 있었고 마이크로 컨트롤러에서 작동하는 "마스터"SPI를 얻었습니다. 여기에 내 질문입니다, 기본적으로 마스터가 우리가 SSPBUF에 쓰는 슬레이브에 쓰기를 초기화하고 싶다면 슬레이브가 응답하는 것을 어떻게 제어할까요? 데이터 시트는 그 사건의 순서를 내게 정말로 분명하게 보이지 않습니다.마이크로 컨트롤러 - 마이크로 컨트롤러 SPI 통신

I.E. Master는 SSPBUF에 char을 넣습니다. 이것은 SPI 모듈을 시작하여 슬레이브로 데이터를 보내고, 이동하는 동안 슬레이브는 바이트를 반환합니다.

슬레이브 측에서는 들어오는 데이터가 있다는 것을 알려주는 SSPBUF에 먼저 쓰고 데이터를 받아 들일 수 있습니까?

또는

당신이 전송을 시작할 수있는 기회를 가질 수 SSPBUF에 마스터하기 전에 다시 전송 할 첫 번째 "반환 값"을 작성해야합니까?

+0

무엇을 사용하고 있습니까? – Dave

+0

그림 16F913 그림입니다 – onaclov2000

답변

1

슬레이브의 칩 선택을 처리하는 GPIO 라인에서 인터럽트를 사용하고 싶습니다. 클럭이 시작되기 전에 슬레이브가이 인터럽트를 처리하고 나가는 데이터 레지스터를로드하는 데 충분한 시간이 있는지 확인하십시오.

일부 SPI 모듈은 GPIO 사용을 배제합니다. SPI 모듈에 칩 선택을 처리하는 기능이 있는지 확인하거나 GPIO 작업을 기반으로 만 모듈을 활성화해야합니다.

+0

실제로이 답변을 보면 주제를 다시 방문한 후에 많은 의미가있는 것처럼 보입니다. chipselect를 볼 때까지 기다렸다가, 데이터를 버퍼에 전달한 다음 데이터를 준비해야합니다. 나는 그것을 시도해야 할 것이다. – onaclov2000

0

귀하의 마이크로 컨트롤러가 무엇이든, 세 가지는 SPI 데이터 수신과 관련된 ISR 및 수신 된 데이터에 액세스하여 로컬 변수에 복사 할 수있는 레지스터입니다.

+0

들어오는 데이터를 나타냅니다 만, 문제는 내가 마스터가 응답을 시작하기 전에 원하는 슬레이브에 데이터가 있는지 확인하는 방법을 모르는 것입니다. . 또는 발생하는 모든 전송과 함께, 나는 그것을 해결했지만 지금은 가끔 타이밍 문제가있는 것 같아요,하지만 난 지금 노예가 연결되어있는 채널의 마스터 측면을 읽지 못했지만, 나는 더 많은 정보를 찾는다. – onaclov2000

0

일반적으로 내가 SPI를 사용하여 수행 한 작업은 마스터에서 슬레이브로 2 바이트를 최소 지연 시간으로 전송하는 것입니다. 마스터는 다음을 보냅니다. "X Y"여기서 "X"는 슬레이브에서 읽을 변수이고 "Y"는 슬레이브의 응답을 클럭 아웃하는 데 사용되는 더미 변수입니다. 동시에, 슬레이브는 "X"를 수신 할 때 인터럽트를 얻고, 출력 버퍼에 넣을 값을 찾고, "Y"를 받으면 패킷에 대한 응답을 마스터에 보낸다.

0

먼저 마스터와 슬레이브가 SPI 모드와 데이터 크기와 같은 매개 변수의 공통 값을 갖고 있는지 확인해야합니다. SPI 모드는 SPI 클럭 라인의 유휴 극성과 데이터 샘플링 에지가 첫 번째인지 두 번째인지 여부를 결정합니다. 데이터 크기는 8 비트인지 16 비트인지 또는 칩에 따라 다를 수 있습니다.

이제 마스터가 칩/슬레이브 선택 핀 슬레이브를 통해 슬레이브를 선택하면 슬레이브가 활성 상태가되어 클럭이 상태를 변경하기를 기다리며 슬레이브가 상태를 1 단계 또는 2 단계 에지에서 다시 클럭 라인을 기다립니다. 첫 번째 에지 슬레이브 인 경우 MOSI 라인 데이터를 샘플링하여 내부 시프트 레지스터에 넣습니다. 슬레이브가 데이터를 전송해야하는 경우 선택한 클록 에지 이전에 MISO 라인의 데이터를 유지해야합니다. 이 프로세스는 데이터 크기에 따라 8 번 또는 16 번까지 반복됩니다. 완료되면 마스터와 슬레이브는 CPU에 인터럽트를 생성하여 데이터를 수집 할 수 있습니다 (마이크로 컨트롤러의 경우).