도와주세요!!
글 수 15,339
2006.02.14 17:40:01 (*.230.15.222)
6672
안녕하세요..
void hw_gpf_init( void )
{
unsigned long val = readl(IO_ADDRESS(SYSCON_DEVCFG));
printk("------SYSCON_DEVCFG [ %08X ]n", val );
val = ep93xx_SYSCON_DEVCFG( val | SYSCON_DEVCFG_GonK );
SysconSetLocked( SYSCON_DEVCFG, val );
readl( IO_ADDRESS( SYSCON_DEVCFG ));
printk("------SYSCON_DEVCFG [ %08X ]n", val );
set_GPIO_IN( reg_ep9312(GPIO_PCDDR), 0 ); // Port C 0
set_GPIO_IN( reg_ep9312(GPIO_PCDDR), 1 ); // Port C 1
// 출력 설정
set_GPIO_OUT( reg_ep9312(GPIO_PCDDR), 2 ); // Port C 2
set_GPIO_OUT( reg_ep9312(GPIO_PCDDR), 3 ); // Port C 3
// LED Off
GPIO_OUT( reg_ep9312(GPIO_PCDR), 2, 1 ); // Port C 2
GPIO_OUT( reg_ep9312(GPIO_PCDR), 3, 1 ); // Port C 3
}
위의 내용중
unsigned long val = readl(IO_ADDRESS(SYSCON_DEVCFG));
val = ep93xx_SYSCON_DEVCFG( val | SYSCON_DEVCFG_GonK );
SysconSetLocked( SYSCON_DEVCFG, val );
readl( IO_ADDRESS( SYSCON_DEVCFG ));
이 부분이 DEVCFG의 내용을 바꾸는 소스입니다.
DEVCFG레지스트는 소프트웨어적으로 락을 걸어서 사용합니다.
1. ep93xx_SYSCON_DEVCFG() 함수는 include/asm/arch/regs_hardcode.h에 있습니다.
2. 1번에서 설정된 val 값을 SysconSetLocked() 함수를 통하여 소프트웨어적으로 락을 풀고, 설정한 값을
적용하게 include/asm/arch/regs_syscon.h 에 정의 되어 있습니다.
즉, DEVCFG 레지스트는 반드시 SysconSetLocked() 함수를 통해서 접근해야 합니다.
커널에서 그렙으로 위의 함수를 찾아보시면 사용 예제들이 많이 있을거라 생각이 됩니다.
마지막으로 GPIO_PADDR, GPIO_PADR를 사용한것을 모두 GPIO_PCDDR, GPIO_PCDR 로 바꾸어 주셔야 겠죠...
관련 소스를 첨부합니다..
그럼 수고하세요..
>ep9312 에서
>devcfg레지스터를 설정하는 구체적 방법을 알수는 없을까요... 예를 들어서 Gonk를 1로 설정해서 port C를
>gpio I/O포트로 사용하게 하는방법이요(예제 gpio소스를 기준으로요)...
>
>>안녕하세요..
>>
>>Devicecfg 레지스트는 EP9312 User's Guide의 5장 System Controller ( P140 )에 있습니다.
>>여기에 보시면 EonIDE, PonG, GonIDE, HonIDE, GonK 등등 GPIO의 부가적인 기능설정에 대한 정의가 있습니다. 해당 GPIO에 대한 기능들을 설정하지 않으시면 모두 GPIO의 I/O로 사용가능합니다.
>>
>>GPIO의 IO 설정은 레지스트는 EP9312 User's Guide의 27장 GPIO Interface ( P749 )에 있습니다.
>>레지스트명은 PxDR, PXDDR 입니다...
>>
>>그럼 수고하세요...
>>
>>
>>>ep9312 에서 io핀으로 쓸수있는 포트가 기본으로 epio핀들 (A,B포트)이잖아요...
>>>
>>>그런데 책에보니까 어떠걸 바꿔주면 어떤핀들을 io핀으로 바꿔서 총 64개의 io핀 제어가 가능하드라고요..
>>>
>>>어떻게 하면 되나요 책에는 devicecfg를 바꿔주라고 하는데 어딧는지도 모르겟고;; 전 도저히 모르겟더라고요;;;
>>>
>>>예로서 c포트 사용하는 방법이라도 알려주세요(디바이스 드라이버라든지, 레지스터 변경법이라든지)
>>
>
void hw_gpf_init( void )
{
unsigned long val = readl(IO_ADDRESS(SYSCON_DEVCFG));
printk("------SYSCON_DEVCFG [ %08X ]n", val );
val = ep93xx_SYSCON_DEVCFG( val | SYSCON_DEVCFG_GonK );
SysconSetLocked( SYSCON_DEVCFG, val );
readl( IO_ADDRESS( SYSCON_DEVCFG ));
printk("------SYSCON_DEVCFG [ %08X ]n", val );
set_GPIO_IN( reg_ep9312(GPIO_PCDDR), 0 ); // Port C 0
set_GPIO_IN( reg_ep9312(GPIO_PCDDR), 1 ); // Port C 1
// 출력 설정
set_GPIO_OUT( reg_ep9312(GPIO_PCDDR), 2 ); // Port C 2
set_GPIO_OUT( reg_ep9312(GPIO_PCDDR), 3 ); // Port C 3
// LED Off
GPIO_OUT( reg_ep9312(GPIO_PCDR), 2, 1 ); // Port C 2
GPIO_OUT( reg_ep9312(GPIO_PCDR), 3, 1 ); // Port C 3
}
위의 내용중
unsigned long val = readl(IO_ADDRESS(SYSCON_DEVCFG));
val = ep93xx_SYSCON_DEVCFG( val | SYSCON_DEVCFG_GonK );
SysconSetLocked( SYSCON_DEVCFG, val );
readl( IO_ADDRESS( SYSCON_DEVCFG ));
이 부분이 DEVCFG의 내용을 바꾸는 소스입니다.
DEVCFG레지스트는 소프트웨어적으로 락을 걸어서 사용합니다.
1. ep93xx_SYSCON_DEVCFG() 함수는 include/asm/arch/regs_hardcode.h에 있습니다.
2. 1번에서 설정된 val 값을 SysconSetLocked() 함수를 통하여 소프트웨어적으로 락을 풀고, 설정한 값을
적용하게 include/asm/arch/regs_syscon.h 에 정의 되어 있습니다.
즉, DEVCFG 레지스트는 반드시 SysconSetLocked() 함수를 통해서 접근해야 합니다.
커널에서 그렙으로 위의 함수를 찾아보시면 사용 예제들이 많이 있을거라 생각이 됩니다.
마지막으로 GPIO_PADDR, GPIO_PADR를 사용한것을 모두 GPIO_PCDDR, GPIO_PCDR 로 바꾸어 주셔야 겠죠...
관련 소스를 첨부합니다..
그럼 수고하세요..
>ep9312 에서
>devcfg레지스터를 설정하는 구체적 방법을 알수는 없을까요... 예를 들어서 Gonk를 1로 설정해서 port C를
>gpio I/O포트로 사용하게 하는방법이요(예제 gpio소스를 기준으로요)...
>
>>안녕하세요..
>>
>>Devicecfg 레지스트는 EP9312 User's Guide의 5장 System Controller ( P140 )에 있습니다.
>>여기에 보시면 EonIDE, PonG, GonIDE, HonIDE, GonK 등등 GPIO의 부가적인 기능설정에 대한 정의가 있습니다. 해당 GPIO에 대한 기능들을 설정하지 않으시면 모두 GPIO의 I/O로 사용가능합니다.
>>
>>GPIO의 IO 설정은 레지스트는 EP9312 User's Guide의 27장 GPIO Interface ( P749 )에 있습니다.
>>레지스트명은 PxDR, PXDDR 입니다...
>>
>>그럼 수고하세요...
>>
>>
>>>ep9312 에서 io핀으로 쓸수있는 포트가 기본으로 epio핀들 (A,B포트)이잖아요...
>>>
>>>그런데 책에보니까 어떠걸 바꿔주면 어떤핀들을 io핀으로 바꿔서 총 64개의 io핀 제어가 가능하드라고요..
>>>
>>>어떻게 하면 되나요 책에는 devicecfg를 바꿔주라고 하는데 어딧는지도 모르겟고;; 전 도저히 모르겟더라고요;;;
>>>
>>>예로서 c포트 사용하는 방법이라도 알려주세요(디바이스 드라이버라든지, 레지스터 변경법이라든지)
>>
>