도와주세요!!
글 수 15,339
2004.01.30 21:28:06 (*.254.241.21)
6707
디바이스 드라이버에 대한 좀 긴 질문이 될 것 같네요.
사용한 예제는 DIO 입니다.
먼저 예제는 test.c(어플리케이션), io.c(디바이스 드라이버), io.h(헤더) 3가
지로 구성되어 있습니다.
예제는 원래 test.c 에서 for 루프 안에서 read와 write를 반복하여 호출하고
있습니다. 디바이스 드라이버의 read, write에 해당하는 함수인 io_read,
io_write에서는 각각
c = *addr; <- io_read
*addr = c; <- io_write
이런 식으로 한 번씩 데이터버스에 접근하고 있습니다. 해당 주소값은 Chip
Select 3에 해당합니다.
오실로스코프로 왼쪽 80핀 헤더의 39번 핀인 BnCS3을 찍어보면 주로 Hi인 신호
가 수십 ns 간격으로 Low로 떨어집니다. 매번 데이터버스로 접근할 때마다 떨
어지는 거지요.
문제는 예제를 조금 바꿨을 때 발생합니다. 원래와 조금 다르게 test.c의 루프
를 없애버리고, read호출도 시키지 않고, write만 한 번 호출합니다. io.c에
서 io_write함수에서 원래는
*addr = c;
이 부분을 한 번 쓰지만, 이 부분 자체를
for (count = 0; count < 1000; count++)
*addr = c;
이렇게 루프로 돌도록 만들었습니다.
제 생각에는 오히려 훨씬 더 짧은 간격으로 BnCS3핀이 Low로 주기적으로 떨어
져야할 것 같은데 한 번만 떨어집니다. 스코프의 한 눈금을 25.0us로 해놓고
(그럼 볼 수 있는 범위는 좌우로 250us입니다.) 찍어보면 딱 한 번 떨어집니
다.
이 부분이 궁금한 점입니다. 지금 작업하는 프로젝트에서는 read 함수가 한
번 호출될 때마다 수백번을 데이터버스에 읽고 써서 외부 IO 장치로부터 데이
터를 가져와야 하는데, 지금 난관에 부딪힌 상태입니다. 자세한 설명 부탁드리
며, 해결가능한 방법이 있다면 알려주세요.
p.s. 제가 수정한 dio 예제를 첨부했습니다.
사용한 예제는 DIO 입니다.
먼저 예제는 test.c(어플리케이션), io.c(디바이스 드라이버), io.h(헤더) 3가
지로 구성되어 있습니다.
예제는 원래 test.c 에서 for 루프 안에서 read와 write를 반복하여 호출하고
있습니다. 디바이스 드라이버의 read, write에 해당하는 함수인 io_read,
io_write에서는 각각
c = *addr; <- io_read
*addr = c; <- io_write
이런 식으로 한 번씩 데이터버스에 접근하고 있습니다. 해당 주소값은 Chip
Select 3에 해당합니다.
오실로스코프로 왼쪽 80핀 헤더의 39번 핀인 BnCS3을 찍어보면 주로 Hi인 신호
가 수십 ns 간격으로 Low로 떨어집니다. 매번 데이터버스로 접근할 때마다 떨
어지는 거지요.
문제는 예제를 조금 바꿨을 때 발생합니다. 원래와 조금 다르게 test.c의 루프
를 없애버리고, read호출도 시키지 않고, write만 한 번 호출합니다. io.c에
서 io_write함수에서 원래는
*addr = c;
이 부분을 한 번 쓰지만, 이 부분 자체를
for (count = 0; count < 1000; count++)
*addr = c;
이렇게 루프로 돌도록 만들었습니다.
제 생각에는 오히려 훨씬 더 짧은 간격으로 BnCS3핀이 Low로 주기적으로 떨어
져야할 것 같은데 한 번만 떨어집니다. 스코프의 한 눈금을 25.0us로 해놓고
(그럼 볼 수 있는 범위는 좌우로 250us입니다.) 찍어보면 딱 한 번 떨어집니
다.
이 부분이 궁금한 점입니다. 지금 작업하는 프로젝트에서는 read 함수가 한
번 호출될 때마다 수백번을 데이터버스에 읽고 써서 외부 IO 장치로부터 데이
터를 가져와야 하는데, 지금 난관에 부딪힌 상태입니다. 자세한 설명 부탁드리
며, 해결가능한 방법이 있다면 알려주세요.
p.s. 제가 수정한 dio 예제를 첨부했습니다.