다음을 통해 공유


SerCx2 PIO-Receive 트랜잭션

SerCx2를 사용하려면 모든 직렬 컨트롤러 드라이버가 프로그래밍된 I/O(PIO)를 사용하는 수신 트랜잭션에 대한 지원을 구현해야 합니다. PIO 수신 트랜잭션을 시작하기 위해 SerCx2는 드라이버의 EvtSerCx2PioReceiveReadBuffer 이벤트 콜백 함수를 호출하고 읽기 버퍼를 매개 변수로 제공합니다.

이 호출 중에 EvtSerCx2PioReceiveReadBuffer 함수는 직렬 컨트롤러 하드웨어의 수신 FIFO에서 읽기 버퍼로 데이터를 전송합니다. 이 데이터 전송은 읽기 버퍼가 가득 차거나 수신 FIFO에서 즉시 사용할 수 있는 데이터가 없을 때까지 계속됩니다. 전송이 종료되면 함수는 FIFO에서 읽기 버퍼로 성공적으로 전송된 바이트 수를 반환합니다. 이 함수는 더 많은 데이터가 수신될 때까지 기다리지 않습니다.

PIO 수신 개체 만들기

SerCx2가 직렬 컨트롤러 드라이버의 EvtSerCx2PioReceiveXxx** 함수를 호출하려면 먼저 드라이버가 SerCx2PioReceiveCreate 메서드를 호출하여 이러한 함수를 SerCx2에 등록해야 합니다. 이 메서드는 입력 매개 변수로서 드라이버의 EvtSerCx2PioReceiveXxx** 함수에 대한 포인터를 포함하는 SERCX2_PIO_RECEIVE_CONFIG 구조체에 대한 포인터를 허용합니다.

드라이버는 다음 세 가지 함수를 모두 구현해야 합니다.

옵션으로 드라이버는 다음 함수 중 하나 또는 둘 다를 구현할 수 있습니다.

SerCx2PioReceiveCreate 메서드는 PIO 수신 개체를 만들고 호출 드라이버에 이 개체에 SERCX2PIORECEIVE 핸들을 제공합니다. 드라이버의 EvtSerCx2PioReceiveXxx** 함수는 모두 이 핸들을 첫 번째 매개 변수로 사용합니다. 다음 SerCx2 메서드는 이 핸들을 첫 번째 매개 변수로 사용합니다.

하드웨어 초기화 및 클린

일부 직렬 컨트롤러 드라이버는 PIO 수신 트랜잭션을 시작할 때 직렬 컨트롤러 하드웨어를 초기화하거나 트랜잭션이 끝날 때 직렬 컨트롤러의 하드웨어 상태를 클린 수 있습니다.

드라이버가 EvtSerCx2PioReceiveInitializeTransaction 이벤트 콜백 함수를 구현하는 경우 SerCx2는 이 함수를 호출하여 트랜잭션을 시작하는 EvtSerCx2PioReceiveReadBuffer 호출 전에 직렬 컨트롤러를 초기화합니다. 구현된 경우 EvtSerCx2PioReceiveInitializeTransaction 함수는 SerCx2PioReceiveInitializeTransactionComplete 메서드를 호출하여 드라이버가 직렬 컨트롤러 초기화를 완료할 때 SerCx2에 알려야 합니다.

드라이버가 EvtSerCx2PioReceiveCleanupTransaction 이벤트 콜백 함수를 구현하는 경우 SerCx2는 트랜잭션에서 마지막 EvtSerCx2PioReceiveReadBuffer 호출 후 하드웨어 상태를 클린 위해 이 함수를 호출합니다. 구현된 경우 EvtSerCx2PioReceiveInitializeTransaction 함수는 SerCx2PioReceiveCleanupTransactionComplete 메서드를 호출하여 드라이버가 직렬 컨트롤러 정리를 완료할 때 SerCx2에 알려야 합니다.

준비 알림

수신 FIFO에서 즉시 읽을 수 있는 데이터가 더 이상 없기 때문에 EvtSerCx2PioReceiveReadBuffer 호출이 종료되면 SerCx2는 나중에 직렬 컨트롤러가 더 많은 데이터를 수신할 때까지 PIO 수신 트랜잭션을 완료할 수 없습니다. 이 경우 SerCx2는 EvtSerCx2PioReceiveEnableReadyNotification 이벤트 콜백 함수를 호출하여 준비 알림을 사용하도록 설정합니다. 일반적으로 이 함수를 사용하면 수신 FIFO에서 하나 이상의 데이터를 읽을 수 있을 때 인터럽트를 트리거할 수 있습니다. 이 알림을 사용하도록 설정한 경우에만 직렬 컨트롤러 드라이버는 SerCx2PioReceiveReady 메서드를 호출하여 드라이버가 수신 FIFO가 더 이상 비어 있지 않음을 감지할 때 SerCx2에 알립니다. 이 알림에 대한 응답으로 SerCx2는 EvtSerCx2PioReceiveReadBuffer 함수를 호출하여 새로 받은 데이터를 읽습니다.

또한 SerCx2는 준비 알림을 사용하여 PIO 수신 트랜잭션으로 처리되는 읽기 요청을 처리하는 동안 시간 초과를 효율적으로 관리합니다. 이러한 시간 제한에 대한 자세한 내용은 SERIAL_TIMEOUTS 참조하세요.

읽기 요청 시간이 초과되거나 취소될 때 준비 알림이 활성화되면 SerCx2는 EvtSerCx2PioReceiveCancelReadyNotification 이벤트 콜백 함수를 호출하여 보류 중인 알림을 취소합니다. 이 함수가 보류 중인 알림을 성공적으로 취소하면 TRUE가 반환됩니다. TRUE의 반환 값은 직렬 컨트롤러 드라이버가 SerCx2PioReceiveReady를 호출하지 않도록 보장합니다. FALSE의 반환 값은 컨트롤러 드라이버가 이미 를 호출했거나 곧 SerCx2PioReceiveReady를 호출할 것임을 나타냅니다.