init_IRQ()의 PIT 초기화 부분에서 궁금한게 있습니다.

darma3069의 이미지

/arch/i386/kernel/i8259.c에 있는

init_IRQ() 함수 중

outb_p(0x34, 0x43) //binary, modes, LSB/ MSB ch0
outb_p(LATCH&0xff, 0x40) //LSB
oubt_p(LATCH>>8, 0x40) //MSB

이 3 라인이 이해가 안 됩니다.

이리저리 찾아보니깐 LATCH값이 11392이고 HZ가 100이라고 하는데 도대체
무슨 말인지 이 코드의 주석은 무얼 말하는건지 잘 모르겠습니다.

이렇게 하면 결국 8비트 0x40 I/O port에 연속적으로 2byte를 보내고 100Hz의 타이머 인터럽트가 발생한다고 하는데 왜 그런지 고수님들의 조언을 간곡히
부탁드립니다. 인터넷에 뒤져봐도 그 말이 그 말인 것 같고...

그리고 각 어셈블리 코드안에서 인자값의 이동에 따라 실질적으로 값이 어떻게
옮겨가는지도 설명해주시면 고맙겠습니다.

그럼 오늘도 좋은 하루 되십시오...

leoblue의 이미지

다음 site를 참고하십시오.

www.tldp.org/HOWTO/KernelAnalysis-HOWTO-6.html

10ms 타이머를 설정하는 부분이군요.

포트 설정은 ...
8254 또는 8253 칩 데이터 시트를 참고하십시오.
0x43, 0x40, 0x40 포트를 순서대로 쓰고 있다는 것을 알면
데이터 시트에서 답을 찾을 수 있습니다.

^^;