![](/zbxe/layouts/mr_layouts_1st/images/default/blank.gif)
도와주세요!!
음...이제 GPIO 제어좀 해보려고 했더니.... 이게 또 말썽이네요...ㅜ.ㅜ
상황을 알려드리겠습니다.
제가 8핀을 제어하기위해서...
먼저 테스트를 위해
디버깅용 GPIO2~6 과 사용할 GPIO 24~31 을 OUTPUT으로 하여 신호 확인하려고 했습니다.
그런데 문제가
GPIO2~6과 GPIO24~27은 제어가 되는데... 1~16까지 카운터 하는것 출력
GPIO28~31은 깜깜 무소식이네요.ㅜ.ㅜ.
잉..!! 어떻게 해야할까요??
중요 부분 소스만 올릴께요
1. gpio.h
2. gpio.c
3. test.c
1. gpio.h : define 부분
// GPIO 출력
#define GPIO_LED_1 2 // GPIO2
#define GPIO_LED_2 3 // GPIO3
#define GPIO_LED_3 4 // GPIO4
#define GPIO_LED_4 5 // GPIO5
// GGUS //
#define IN 0
#define OUT 1
#define GPIO_OUT_0 24
#define GPIO_OUT_1 25
#define GPIO_OUT_2 26
#define GPIO_OUT_3 27
#define GPIO_SEL 28
#define GPIO_IN_0 29
#define GPIO_IN_1 30
#define GPIO_IN_2 31
#define MASK_GPIO_OUT_0 ( OUT << GPIO_OUT_0 )
#define MASK_GPIO_OUT_1 ( OUT << GPIO_OUT_1 )
#define MASK_GPIO_OUT_2 ( OUT << GPIO_OUT_2 )
#define MASK_GPIO_OUT_3 ( OUT << GPIO_OUT_3 )
#define MASK_GPIO_SEL ( OUT << GPIO_SEL )
#define MASK_GPIO_IN_0 ( OUT << GPIO_IN_0 )
#define MASK_GPIO_IN_1 ( OUT << GPIO_IN_1 )
#define MASK_GPIO_IN_2 ( OUT << GPIO_IN_2 )
// GPIO 24~31을 OUTPUT으로 설정함
#define GPIO_ADD_MASK (MASK_GPIO_OUT_0|MASK_GPIO_OUT_1|MASK_GPIO_OUT_2|MASK_GPIO_OUT_3|MASK_GPIO_SEL|MASK_GPIO_IN_0|MASK_GPIO_IN_1|MASK_GPIO_IN_2)
// GGUS //
// GPIO 출력 마스크
#define MASK_GPIO_LED_1 ( OUT << GPIO_LED_1 )
#define MASK_GPIO_LED_2 ( OUT << GPIO_LED_2 )
#define MASK_GPIO_LED_3 ( OUT << GPIO_LED_3 )
#define MASK_GPIO_LED_4 ( OUT << GPIO_LED_4 )
#define GPIO_OUTPUT_MASK ( MASK_GPIO_LED_1 | MASK_GPIO_LED_2 | MASK_GPIO_LED_3 | MASK_GPIO_LED_4 )
#define GPIO_INPUT_MASK ( MASK_GPIO_LED_1 | MASK_GPIO_LED_2 | MASK_GPIO_LED_3 | MASK_GPIO_LED_4 )
참고로 GPDR0를 초기화 하면서 셋팅해놓고 더이상 안건들면 되더라고요..
그래서 출력부분에서 GPDR0 셋팅부분을 주석 처리했습니다.
2. gpio.c : 출력부분
ssize_t gpio_write(struct file *filp, const unsigned long *buf, size_t count, loff_t *f_pos)
{
const unsigned int *gpiodata = buf;
unsigned int data1,data2=0;
get_user( data1, gpiodata );
get_user( data2, gpiodata+1);
//printk("%8x\n\r",data1);
//printk("%8x\n\r",data2);
int type=1;
switch(type)
{
case 0:
gpio_out_clear( data1);
break;
case 1:
gpio_out_set( data1);
break;
}// 사용된 길이만큼 돌려 준다.
return count;
}
int gpio_out_set( unsigned int data )
{
//GPDR0 |= ( );
//GPDR0 |= ( GPIO_ADD_MASK|GPIO_OUTPUT_MASK );
//GPSR은 출력 SET 레지스터
//GPSR0 |= ( GPIO_ADD_MASK);
//GPDR0 |= ( GPIO_ADD_MASK|GPIO_OUTPUT_MASK );
int a;
a=(GPIO_ADD_MASK|GPIO_OUTPUT_MASK);
printk("%8x\n\r",a);
printk("%8x\n\r",data);
GPCR0 |= (GPIO_ADD_MASK|GPIO_OUTPUT_MASK);
GPSR0 |= (data);
}
3. test.c
for( lp = 0; lp < 16; lp++ )
{
buff[0] = lp<<2|lp<<24|lp<<28; // 실제 출력할 데이터
buff[1] = lp<<10 |lp<<24;
//buff[1] = lp+8 ;
write( dev, buff, 2); // LED로 출력한다.
왜그럴까요????
4핀만 제어 안되는 증상...확인바랍니다...
글올리고 PIN 확인했는데 문제가 있네요
제가 PI 보드랑 같이 이용하는데
그 GPIO가 모두 AC97 쪽으로 연결되었네요..쩝... 이거 문제라고 봐야겠네요...
그러면 여기서 질문있습니다.. 제가 사용할수있는 범용 GPIO는 없는건가요???
현제 PI 보드 이용하고
PI 보드에선 AUDIO, USB 사용중입니다...