pic 의 irq 할당에 대해...
글쓴이: kkojiband / 작성시간: 금, 2003/07/11 - 11:13오전
isa 장치의 경우에는 사용하는 인터럽트 핀이 고정되어 있고, pci 장치의 경우에는 pci slot 에 있는 A, B, C, D pin 에 각각 인트럽트 핀이 연결이되어 있더군요...
그리고 초기에 pci bios 가 irq 를 할당할때 A, B, C, D 핀중에 하나를 선택해서(거의 A pin) 그에 연결된 irq 를 pci 설정 공간에 저장한다고 되어있던데...
그럼 pci 도 irq 자체는 고정되어 있는거죠?
pic 에 대해 더 찾아보니 받은 irq 를 해당 벡터로 변환해서 cpu에 넘겨준다고 되어있던데...
초기 설정된 그 벡터를 다른 값으로 바꾸면(irq 번호를 바꾸는) 실질적으로 pci 가 가지고 있는 irq 번호와 pic 가 cpu 에 넘겨주는 벡터 값과는 차이가 생기는거 아닌가요? 그럼 여기서 cpu 가 가지고 있는 pci 장치의 irq 값은 어느 값이죠?? 만약 여기서 pci 가 가지고 있는 irq 번호까지 바뀐다면 말이 안되지 않나요? 연결된 선 번호가 틀리게 되는거니까요...
음...pic 가 irq 번호를 재프로그래밍한다는게 대체 뭔지를 모르겠습니다...--;
그리고 펜티엄에서 쓰는 pic 가 8259a pic 맞죠?
짧은 영어 실력으로 원서를 뒤적뒤적해봤는데, 당췌 이해가 안됩니다...T.T
아시는 분 좀 도와주세요...T.T
Forums:
INT벡터번호는 재설정할 수 있습니다.
IRQ -> INT 변환은 마음대로 매핑할 수 있습니다.
어셈블리로 짜면 아래와 같이 됩니다.
(APIC가 작동할때는 저도 모르겠습니다만, 기존 XT/AT PIC일때는
아래의 코드로 변경 가능합니다.)
이렇게 하면 IRQ0-7의 경우 <벡터번호>+<IRQ번호>에 IRQ가
매핑되고(즉 IRQ 번호가 올때마다 cpu는 int <벡터번호>+<IRQ번호>
가 온다는 얘깁니다)
IRQ8-15도 마찬가지가 됩니다 (이땐 IRQ8의 상대 번호가 되죠)
하지만 이거 작업할때는 상당히 주의 요합니다.
좀만 잘못 프로그래밍했다간 시스템 그냥 다운입니다. 디버그할
방법조차도 없습니다.
보통 PC에서는 IRQ0의 경우 INT8로 대응되어 있고요.
(IRQ1은 INT9, IRQ2는 INT0ah .... 이렇게 갑니다)
IRQ8의 경우 INT70h로 대응됩니다. 실제 BIOS에서도 이걸 기준으로
설계되어 있고요.
Written By the Black Knight of Destruction
Re: INT벡터번호는 재설정할 수 있습니다.
인터럽트 정지시키는거 해야죠.
cli , sti 해줘야 겠죠.
흑기사님 깜빡하고 잊으신거 같아서...
Re: INT벡터번호는 재설정할 수 있습니다.
네.. 하나 빼먹었군요.
예전에 DOS Extender 만들 때 써먹은 코드였었는데...
저거 때문에 무지 황당했던 기억이 나더군요. (cli,sti 다썼음)
sti 하면 바로 다운되는.
Written By the Black Knight of Destruction
댓글 달기