간혹 virtual address 로 register 를 setting 하는 코드 들이 있다.
일반적으로
linux버전 \ arch \ arm \ plat-칩명 \ plat \ map.h
에 보면 cpu 각 모듈에 대한 register mapping table 이 있다.
예를들면
#define S3C_ADDR_BASE (0xF4000000)
#ifndef __ASSEMBLY__
#define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x))
#else
#define S3C_ADDR(x) (S3C_ADDR_BASE + (x))
#endif
#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control */
#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control */
#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block */
#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
#define S3C_VA_UART S3C_ADDR(0x01000000) /* UART */
이렇게 되어 있을때
0xF4300018 을 셋팅한다면
메뉴얼에서 TIMER 단을 찾아서 보면 된다.
Timer1 Counter Register (TCNTB1, R/W, Address = 0xE250_0018)
일반적으로
linux버전 \ arch \ arm \ plat-칩명 \ plat \ map.h
에 보면 cpu 각 모듈에 대한 register mapping table 이 있다.
예를들면
#define S3C_ADDR_BASE (0xF4000000)
#ifndef __ASSEMBLY__
#define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x))
#else
#define S3C_ADDR(x) (S3C_ADDR_BASE + (x))
#endif
#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control */
#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control */
#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block */
#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
#define S3C_VA_UART S3C_ADDR(0x01000000) /* UART */
이렇게 되어 있을때
0xF4300018 을 셋팅한다면
메뉴얼에서 TIMER 단을 찾아서 보면 된다.
Timer1 Counter Register (TCNTB1, R/W, Address = 0xE250_0018)
'Programming > Linux_Kernel' 카테고리의 다른 글
slab cache - 생성과 파괴를 반복하는 커다란 자료구조 관리 (0) | 2010.02.17 |
---|---|
misc 에 sysfs 등록하기 (0) | 2010.02.08 |
정식 i2c port 에 등록하여 사용하기 (2) | 2010.02.06 |
Probe 함수의 파라미터로 데이터 전달하기 (0) | 2010.02.06 |
linux 에서 GPIO로 I2C Emulation 사용하기 (0) | 2010.02.06 |