/dev/ttyS0
기본 속도가 9600bps인 직렬 장치가 있다고 가정합니다 .
.NET을 사용하여 속도를 4800bps로 변경한다고 가정해 보겠습니다 cfsetospeed
.
이제 쓰기 라인이 더 느려져야 합니다.
이를 수행하는 소스 코드는 어디에 있습니까? 운영 체제의 어떤 부분이 이 속도를 제어합니까? 사용자 정의 드라이버, tty 드라이버 또는 무엇? 클럭 속도나 대기 시간을 설정하여 이를 전달하는 방법은 무엇입니까?
드라이버에 있을 수도 있지만 찾을 수 없습니다. 예를 들어 누가 나에게 이 장소에 대해 말해 줄 수 있나요?로켓 포트운전사?
답변1
직렬 포트 속도는 일반적으로 하드웨어 자체에 의해 처리되고 하드웨어 드라이버에 의해 구성됩니다.
따라서 따라야 할 체인은 을 호출하는 TCSETS
ioctl 호출 입니다 . 해당 체인을 따르는 경우 RocketPort 드라이버에서는 를 호출합니다 . tty_set_termios()
tty_ioctl.c
rp_set_termios()
configure_r_port()
이는 RocketPort 칩으로 전송된 구성 설정(예: 제수 설정)에 대한 일부 계산을 수행하고 궁극적으로 칩에 바이트를 출력하는 호출 sSetBaud
( 에 정의됨 )을 수행합니다.rocket_int.h
따라서 코어 자체는 전송 속도를 결정하기 위해 직렬 회선에서 "비트 태핑"을 수행하지 않습니다. UART 칩이 모든 어려운 작업을 수행합니다. 우리는 칩을 프로그래밍하기만 하면 됩니다 :-)