도와주세요!!
글 수 15,339
2003.10.24 02:50:13 (*.118.64.101)
6696
다음 과 같은 test 프로그램을 짰습니다.
int init_module( void )
{
int result;
// 장치를 등록한다.
result = register_chrdev( GPIO_MAJOR, DEVICE_NAME, &gpio_fops );
if (result < 0)
{
printk(KERN_WARNING "%s : Can't get Major Number [%d]
", DEVICE_NAME, GPIO_MAJOR);
return result;
}
printk(" Init madule, Succeed. This Device is %s and Major Number is [%d]
", DEVICE_NAME, GPIO_MAJOR);
GPDR0 &= ~(1<<16); // 입력 전용으로 설정
GRER0 &= ~( 1<<16 ); // Clear Rising edge trigger.
GFER0 &= ~( 1<<16 ); // Set as Falling Edge Detect
GAFR0_U &= ~(1<<1); //16번 핀을 부가 기능으로 사용하지 않는다.
GAFR0_U &= ~(1);
//GPLR0의 값을 출력한다.
printk("
GPLR0 : %x
, GPIO16_STATE: %x
", GPLR0, ((GPLR0>>16)&1));
return 0; /* 성공 */
}
출력값을 보면
GPLR0 : ff9fffff
GPIO16_STATE: 1
입니다. 16번에 3.3V를 인가하건 GND를 인가하건 똑같은 결과가 나오네요.
그리고 GPLR0의 값이 거의가 1로 되어 있는걸 알수 있는데 잘 이해가 안되네요..
처음 GPIO가 일반 기능으로 되어있다면 초기값은 입력으로 되어있다고 본것 같은데요..
답변 부탁 드려요...
ps 설정을 M01에 맞게 바꾼후 해보면 M01에서는 작동하는데요...;;;;
int init_module( void )
{
int result;
// 장치를 등록한다.
result = register_chrdev( GPIO_MAJOR, DEVICE_NAME, &gpio_fops );
if (result < 0)
{
printk(KERN_WARNING "%s : Can't get Major Number [%d]
", DEVICE_NAME, GPIO_MAJOR);
return result;
}
printk(" Init madule, Succeed. This Device is %s and Major Number is [%d]
", DEVICE_NAME, GPIO_MAJOR);
GPDR0 &= ~(1<<16); // 입력 전용으로 설정
GRER0 &= ~( 1<<16 ); // Clear Rising edge trigger.
GFER0 &= ~( 1<<16 ); // Set as Falling Edge Detect
GAFR0_U &= ~(1<<1); //16번 핀을 부가 기능으로 사용하지 않는다.
GAFR0_U &= ~(1);
//GPLR0의 값을 출력한다.
printk("
GPLR0 : %x
, GPIO16_STATE: %x
", GPLR0, ((GPLR0>>16)&1));
return 0; /* 성공 */
}
출력값을 보면
GPLR0 : ff9fffff
GPIO16_STATE: 1
입니다. 16번에 3.3V를 인가하건 GND를 인가하건 똑같은 결과가 나오네요.
그리고 GPLR0의 값이 거의가 1로 되어 있는걸 알수 있는데 잘 이해가 안되네요..
처음 GPIO가 일반 기능으로 되어있다면 초기값은 입력으로 되어있다고 본것 같은데요..
답변 부탁 드려요...
ps 설정을 M01에 맞게 바꾼후 해보면 M01에서는 작동하는데요...;;;;