벽 시계 및 링크 위치 레지스터
HD 오디오 컨트롤러에는 HD Audio Link의 비트 클록 속도로 증가하여 약 89초마다 롤오버되는 32비트 벽 시계 카운터 레지스터가 포함되어 있습니다. 소프트웨어는 이 카운터를 사용하여 디바이스의 하드웨어 클록 간의 상대 드리프트를 측정하여 둘 이상의 컨트롤러 디바이스 간에 동기화합니다.
또한 HD 오디오 컨트롤러에는 링크 위치 레지스터 집합이 포함되어 있습니다. 각 DMA 엔진에는 엔진이 HD Audio Link를 통해 전송하는 데이터의 현재 읽기 또는 쓰기 위치를 나타내는 링크 위치 레지스터가 있습니다. 위치 레지스터는 순환 버퍼의 시작 부분에서 현재 위치를 바이트 오프셋으로 표현합니다.
렌더링 스트림에서 링크 위치 레지스터는 DMA 엔진이 코덱에 대한 링크를 통해 보낼 다음 바이트의 순환 버퍼 오프셋을 나타냅니다.
캡처 스트림에서 링크 위치 레지스터는 DMA 엔진이 링크를 통해 코덱에서 수신할 다음 바이트의 순환 버퍼 오프셋을 나타냅니다.
주기적 버퍼 오프셋은 단순히 주기적 버퍼의 시작부터 현재 읽기 또는 쓰기 위치의 오프셋(바이트)입니다. 버퍼의 끝에 도달하면 위치가 버퍼의 시작 부분에 래핑되고 주기적 버퍼 오프셋이 0으로 다시 설정됩니다. 주기적 버퍼는 시스템 메모리에 있습니다. 자세한 내용은 Intel HD Audio 웹 사이트의 Intel 고화질 오디오 사양을 참조하세요.
커널 모드 함수 드라이버는 벽 클록을 읽고 위치 레지스터를 직접 연결할 수 있습니다. 직접 액세스를 사용하도록 설정하기 위해 HD 오디오 버스 드라이버는 레지스터가 포함된 실제 메모리를 시스템 가상 메모리에 매핑합니다. 함수 드라이버는 GetWallClockRegister 또는 GetLinkPositionRegister 루틴을 호출하여 벽 클록 레지스터 또는 링크 위치 레지스터에 대한 시스템 가상 주소 포인터를 가져옵니다. 이러한 두 루틴은 두 버전의 HD Audio DDI에서 모두 사용할 수 있습니다.
HD 오디오 컨트롤러 하드웨어는 벽 클록을 미러링하고 연결 위치 레지스터를 컨트롤러의 다른 레지스터를 포함하지 않는 메모리 페이지로 연결합니다. 따라서 함수 드라이버가 미러된 벽 클록 또는 위치 레지스터를 사용자 모드에 매핑하는 경우 사용자 모드 프로그램은 컨트롤러의 다른 레지스터에 액세스할 수 없습니다. 드라이버는 사용자 모드 프로그램이 이러한 다른 레지스터를 터치하고 하드웨어를 프로그래밍하는 것을 허용하지 않습니다.
레지스터 미러링이 호스트 프로세서의 페이지 크기를 수용해야 합니다. 호스트 프로세서 아키텍처에 따라 일반적인 페이지 크기는 4,096바이트 또는 8,192바이트일 수 있습니다.