기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.
매번 올때마다 많은걸 배워가기만 하다가 도저히 모르겠는 문제를 만나서
혼자 낑낑대다가 질문을 올립니다. ㅠㅠ;

이번에 회사에서 s3c2440으로 진행하는 프로젝트가 있는데..
대략 ADC에서 난감함 문제가 발생해서 질문을 드려요... ^^

일단 ADC는 touch가 아닌 일반적인 용도의 ADC를 쓰도록 설계가 되었습니다.
삼성에서 제공한 2440 Test용 firmware(ADS버전)으로 H/w구성에는
이상이 없다는것은 확인 하였습니다.

문제는 리눅스에서 디바이스 드라이버를 만들고 ADC register에 write를 할때
값이 써지지 않는다는데 있습니다.

개발 환경은 linux kernel 소스의 base는 aesop-2440 3차버전의 소스입니다.
그리고 mach-aesop 등을 참고해서 mach-type을 저희 H/W에 맞게 구성을
하였습니다.
리눅스 부팅도 정상적으로 되고 다른 드라이버들도 정상적으로 올라 간것도
확인이 다 되었는데 ADC만 정상동작을 하지 않고 있습니다. 이유는 ADC관련
레지스터에서 값을 읽어오는 것은 되는데 write가 되지 않고 있네요.

제가 해본 삽질은....
1. readl(), writel()을 이용 값을 읽어오고 쓰기.
제가가진 커널의 source에 regs-adc.h 와 regs-timer.h의 source상에서의
차이는 다음과 같습니다.
regs-adc.h
#define S3C2410_ADCREG(x) (x)

regs-timer.h
#define S3C2410_TIMERREG(x) (S3C24XX_VA_TIMER + (x))

즉 타이머를 이용하는 드라이버에서는 readl(S3C2410_TCON)
하면 정상적인 값이 읽히는데 readl(S3C2410_ADCCON)을 하면
밑에서의 어떤분이 올리신것처럼 커널 패닉이 발생하더군요...
그래서 regs-adc.h의 위의 부분에 타이머레지스터 처럼 S3C24XX_VA_ADC를
더하는 것을 추가 했더니 정상적으로 읽히는 것을 확인 하였습니다.
(사실 이것찾아내는것도 한참을 낑낑대다가 사무실의 다른 고수님이 도와주셔서
알았습니다.. ㅠㅠ)
하지만 adc register에 값을 쓰는게 안됩니다..

2. touch screen참고 readl(), writel()
다음으로 해본 것이 touchscreen드라이버를 참고해서 test를 해보았습니다.
regs-adc.h를 원래 설정대로 해놓고 ioremap을 통해서 readl(), writel()을
사용 하더군요.  그대로 실행을 해보았습니다. 역시나 읽히는 것은 잘 되고
쓰는 것은 안됩니다.. ㅠㅠ;;

해서 touchscreen의 Kconfig를 바꿔서 현재 커널에 포함을 시켜보고
touchscreen드라이버의 probe에 ADCCON을 r/w해보았습니다.
역시 read는 되고 write안됩니다.. ㅠㅠ;;

3. map_desc수정
map_desc에 ADC영역을 포함 시킨 후 r/w 테스트를 해보았습니다.
역시나 값은 읽히나 써지지가 않습니다.

4. 기타등등...
ioremap, ioremap_nocache도 써보고, writel() 대신 iowrite32()도 써보고,
부트로더에서도 adc register에 r/w해보기(잘됨..)
adc드라이버에서 timer레지스터에 r/w도 해보았는데, adc드라이버 안에서도
timer register에 r/w는 잘 되는 것으로 보아서는 adc register영역에 write하는것이
뭔가 문제가 있는듯 하다.. 라는게 제가 생각할 수 있는 결론 인것 같습니다.
  
지금 제가 더 해볼 수 있는 삽질이 뭐가 있을까요?
점검해야 할 사항이나 더 살펴봐야 할 부분이 있다면
고수님들의 조언을 부탁드립니다.  ^^;

고현철

2007.07.13 22:24:43
*.70.26.87

aesop main page의 documentation란을 보시면
2440 driver tutorial이 있습니다.

거기에 예제가 있습니다....참고하시기 바랍니다.

홍순민

2007.07.14 00:49:01
*.7.210.6

고현철님이 말씀해 주신대로 tutorial 의 예제를 가지고
방금 Test를 진행해 보았습니다만,
일단 ADCCON에 write하는 것이 되질 않고 있네요.. ^^;

아무래도 뭔가 ADC영역에 대한 설정 상의 문제인 듯 싶습니다.
다른 레지스터(timer 레지스터 같은... )에 값은 잘 써지는데
ADC관련 레지스터에만 값을 써 넣는 것이 안되는 것을 보면...

일단 저 나름대로 열심히 방법을 찾아보도록 하겠습니다..
혹시나 또 다른 조언이 생각나시면
바로바로 말씀해 주시길 부탁드립니다... ^^;

최현진

2007.07.20 02:50:48
*.70.26.87

__raw_writel 함수를 써보시면 어떠실런지요^^
그전에 ADC 했던 기억이 나네요^^

홍순민

2007.09.04 21:31:08
*.7.210.6

자답입니다...
Clock을 설정해주는 부분에서...
거의 모든 시스템 모듈에 대한 clock들이 disable되어 있었습니다..
ADC를 Enable로 해주니 Register에 R/W가 잘 됩니다.. ㅎㅎ

덕분에 고생좀 했지만... 여기저기 많은 공부가 되었습니다...
조언해주신 분들 감사합니다.. ^^
List of Articles
번호 제목 글쓴이 날짜 조회 수
1388 [완료]이숍 3차 메인보드의 핀헤더(2x40 1.27mm)를 구입할 있는 곳.... [2] 김성철 2007-08-06 1353
1387 [완료]집에서 유동 IP를 이용하여 개발환경 설정하는 방법문의입니다 [4] 김진희 2007-08-06 1357
1386 [완료]USB 패킷 전송 시 커널 패닉 오류입니다. [3] 박상수 2007-08-06 1373
1385 [완료]-일단.. smsc 9115 (LAN9115) 질문입니다. [3] 임은향 2007-08-03 1724
1384 [미해결] 인터럽트 등록과 관련한 문의 [2] 문철민 2007-08-02 691
1383 [완료] LCD 로고이미지 관련 질문입니다. [4] 문철민 2007-07-31 2118
1382 [해결] 이재명님의 JTAG으로 펌웨어 프로그래밍하기에서 질문입니다. [4] 서두원 2007-07-28 1263
1381 [완료] NAND의 bad sector 질문입니다. [13] 문철민 2007-07-26 1051
1380 bootp 설치 관련 질문 드립니다. [1] 김유석 2007-07-24 1475
1379 [완료]Hjtag인식문제<-질문수정 [3] 최재혁 2007-07-21 1439
1378 혹 1차보드라면.. [2] 윤광윤 2007-07-24 2016
1377 [질문]S3C2440 + Encoder 질문입니다. [2] 박창준 2007-07-17 1040
1376 [질문]u-boot 디버깅 하는 방법 좀... [8] 김정렬 2007-07-16 1307
» [완료] ADC레지스터 Write하기... [4] 홍순민 2007-07-13 1422
1374 [완료]s3c2440 - 인터럽트 관련 질문 입니다. <-- 완료 [4] 박준영 2007-07-12 2200
1373 [완료]루트파일시스템중 ghello.c 컴파일관련. [4] 박기호 2007-07-12 777
1372 [완료]sd card mount 질문입니다~~^^; [5] 김승규 2007-07-09 3683
1371 [완료] 클럭 제어에 관해서.. <= 완료 [4] 이재철 2007-07-08 1257
1370 [완료]램디스크 버전과 커널버전이 항상 일치해야 하는건가요? [4] 김승규 2007-07-05 915
1369 [완료]이솝 2410 보드에서 SD card는 지원이 안되는 건가요? [3] 김승규 2007-07-04 1302

사용자 로그인