도와주세요!!
글 수 15,339
2003.06.19 09:49:26 (*.118.69.163)
6655
수고하십니다...몇가지 문의사항이 있어서 이렇게 질문드립니다. 우선 제가 하고 있는 작업은 보드에 확장이더넷을 달려고 하고있습니다. 그러니까 개발보드에 달려있는 이더넷외에 아웃핀에 확장이더넷 모듈(인터보드)를 달려고 하는데요 문제가 있습니다.
우선 디바이스는 정상적으로 잡힙니다.
부팅 메시지에서는 이상없이 디바이스를 찾은것 같습니다.
cs89x0:cs89x0_probe()
cs89x0:wData 0x00003112
cs89x0.c: (kernel 2.3.99) Russell Nelson, Andrew Morton
eth0: cs8900 rev J Base 0xF0000300<6>, IRQ 32, MAC 00:D0:CA:F1:26:21
cs89x0:cs89x0e_probe()
cs89x0:wData 0x00003000
cs89x0.c: (kernel 2.3.99) Russell Nelson, Andrew Morton
eth1: cs8900 rev J Base 0xF1000300<6>, IRQ 33, MAC 00:03:00:03:09:00
그리고 interrupts 결과는 아래와 같이 나옵니다.
[root@wavyboard /root]$ cat /proc/interrupts
11: 166 GPIO 11-27
15: 708 serial_sa1100
26: 17237 timer
30: 0 rtc1Hz
31: 0 rtcAlrm
32: 166 cs89x0
33: 0 cs89x0
Err: 0
33번은 인터럽트가 뜨지않는것을 알수있습니다.
제가 생각할때는 GPIO핀의 인터럽트 발생시 설정이 필요한듯 한데 그렇지 못해서 생기는 경우가 아닐까 하는 생각인 들구여 그게 아니라면 하드웨어적인문제 즉 인터보드의 하드웨어 구성상의 문제가 아닐까 합니다.
우선 GPIO 인터럽트 설정문제인데 irq.c 화일의 내용이 아래와 같은데요
void __init sa1100_init_irq(void)
{
int irq;
/* disable all IRQs */
//ICMR = 0;
ICMR = 1;
/* all IRQs are IRQ, not FIQ */
ICLR = 0;
/* clear all GPIO edge detects */
GFER = 0;
GRER = 0;
GEDR = -1;
/*
* Whatever the doc says, this has to be set for the wait-on-irq
* instruction to work... on a SA1100 rev 9 at least.
*/
ICCR = 1;
for (irq = 0; irq <= 10; irq++) {
irq_desc[irq].valid = 1;
irq_desc[irq].probe_ok = 1;
irq_desc[irq].mask_ack = sa1100_mask_and_ack_GPIO0_10_irq;
irq_desc[irq].mask = sa1100_mask_GPIO0_10_irq;
irq_desc[irq].unmask = sa1100_unmask_GPIO0_10_irq;
}
for (irq = 11; irq <= 31; irq++) {
irq_desc[irq].valid = 1;
irq_desc[irq].probe_ok = 1;
irq_desc[irq].mask_ack = sa1100_mask_irq;
irq_desc[irq].mask = sa1100_mask_irq;
irq_desc[irq].unmask = sa1100_unmask_irq;
}
for (irq = 32; irq <= 48; irq++) {
irq_desc[irq].valid = 1;
irq_desc[irq].probe_ok = 1;
irq_desc[irq].mask_ack = sa1100_mask_and_ack_GPIO11_27_irq;
irq_desc[irq].mask = sa1100_mask_GPIO11_27_irq;
irq_desc[irq].unmask = sa1100_unmask_GPIO11_27_irq;
}
setup_arm_irq( IRQ_GPIO11_27, &GPIO11_27_irq );
}
위와 같은 함수를 확인 할수 있는데요 여기서 GPIO11핀 부터 GPIO27핀까지 화일수정없이 인터럽트핀으로 사용할수있다는 얘긴지요???
아니라면 어느부분의 수정이 필요한지요??
우선 디바이스는 정상적으로 잡힙니다.
부팅 메시지에서는 이상없이 디바이스를 찾은것 같습니다.
cs89x0:cs89x0_probe()
cs89x0:wData 0x00003112
cs89x0.c: (kernel 2.3.99) Russell Nelson, Andrew Morton
eth0: cs8900 rev J Base 0xF0000300<6>, IRQ 32, MAC 00:D0:CA:F1:26:21
cs89x0:cs89x0e_probe()
cs89x0:wData 0x00003000
cs89x0.c: (kernel 2.3.99) Russell Nelson, Andrew Morton
eth1: cs8900 rev J Base 0xF1000300<6>, IRQ 33, MAC 00:03:00:03:09:00
그리고 interrupts 결과는 아래와 같이 나옵니다.
[root@wavyboard /root]$ cat /proc/interrupts
11: 166 GPIO 11-27
15: 708 serial_sa1100
26: 17237 timer
30: 0 rtc1Hz
31: 0 rtcAlrm
32: 166 cs89x0
33: 0 cs89x0
Err: 0
33번은 인터럽트가 뜨지않는것을 알수있습니다.
제가 생각할때는 GPIO핀의 인터럽트 발생시 설정이 필요한듯 한데 그렇지 못해서 생기는 경우가 아닐까 하는 생각인 들구여 그게 아니라면 하드웨어적인문제 즉 인터보드의 하드웨어 구성상의 문제가 아닐까 합니다.
우선 GPIO 인터럽트 설정문제인데 irq.c 화일의 내용이 아래와 같은데요
void __init sa1100_init_irq(void)
{
int irq;
/* disable all IRQs */
//ICMR = 0;
ICMR = 1;
/* all IRQs are IRQ, not FIQ */
ICLR = 0;
/* clear all GPIO edge detects */
GFER = 0;
GRER = 0;
GEDR = -1;
/*
* Whatever the doc says, this has to be set for the wait-on-irq
* instruction to work... on a SA1100 rev 9 at least.
*/
ICCR = 1;
for (irq = 0; irq <= 10; irq++) {
irq_desc[irq].valid = 1;
irq_desc[irq].probe_ok = 1;
irq_desc[irq].mask_ack = sa1100_mask_and_ack_GPIO0_10_irq;
irq_desc[irq].mask = sa1100_mask_GPIO0_10_irq;
irq_desc[irq].unmask = sa1100_unmask_GPIO0_10_irq;
}
for (irq = 11; irq <= 31; irq++) {
irq_desc[irq].valid = 1;
irq_desc[irq].probe_ok = 1;
irq_desc[irq].mask_ack = sa1100_mask_irq;
irq_desc[irq].mask = sa1100_mask_irq;
irq_desc[irq].unmask = sa1100_unmask_irq;
}
for (irq = 32; irq <= 48; irq++) {
irq_desc[irq].valid = 1;
irq_desc[irq].probe_ok = 1;
irq_desc[irq].mask_ack = sa1100_mask_and_ack_GPIO11_27_irq;
irq_desc[irq].mask = sa1100_mask_GPIO11_27_irq;
irq_desc[irq].unmask = sa1100_unmask_GPIO11_27_irq;
}
setup_arm_irq( IRQ_GPIO11_27, &GPIO11_27_irq );
}
위와 같은 함수를 확인 할수 있는데요 여기서 GPIO11핀 부터 GPIO27핀까지 화일수정없이 인터럽트핀으로 사용할수있다는 얘긴지요???
아니라면 어느부분의 수정이 필요한지요??