도와주세요!!
글 수 15,339
2006.08.30 12:49:16 (*.141.98.17)
6724
>안녕하십니까!
>GPIO예제를 이용해서 LCD에 SPI신호를 만들어 보려고 하는데 함수선언에 문제가 있어 올립니다.
>gpio.c에서 아래 함수를 만들고
>
>int SetPort( int PortIndex, int value )
>{
> // 출력 전용으로 설정
> GPDR0 |= ( GPIO_OUTPUT_MASK );
>
> if( value )
> {
> //Port Set
> switch( PortIndex )
> {
> case 0 : GPSR0 = LCD_RST; break;
> case 1 : GPSR0 = BLU_EN; break;
> case 2 : GPSR0 = LCD_SDI; break;
> case 3 : GPSR0 = LCD_SCL; break;
> case 4 : GPSR0 = LCD_RS; break;
> case 5 : GPSR0 = LCD_CS; break;
> case 6 : GPSR0 = LCD_PDSB; break;
>// default:
>// break;
> }
> }
> else
> {
> //Port Clear
> switch( PortIndex )
> {
> case 0 : GPCR0 = LCD_RST; break;
> case 1 : GPCR0 = BLU_EN; break;
> case 2 : GPCR0 = LCD_SDI; break;
> case 3 : GPCR0 = LCD_SCL; break;
> case 4 : GPCR0 = LCD_RS; break;
> case 5 : GPCR0 = LCD_CS; break;
> case 6 : GPCR0 = LCD_PDSB; break;
>// default:
>// break;
> }
> }
>}
>
>gpio.h 파일에 아래와 같이 선언한 다음에
>int SetPort( int PortIndex, int value );
>
>test.c에서 아래처럼 이 함수를 사용하려고 하는데
>
>void sslcd_reset( void )
>{
> usleep( 2000 );
> SetPort(LCD_RST,LOW); // BLU_EN : GPIO1
> usleep( 2000 );
> SetPort(LCD_RST,HIGH);
> usleep( 10000 );
>}
>
>함수가 선언되지 않았다고 하면서 에러가 발생합니다.
>밑에 Q/A를 읽어보니 write같은 함수는 linux 커널에 매크로함수로 처리가 되어있어
>사용이 가능한거 같은데 위 같은 경우 SetPort(); 함수를 사용할 수 있는 방법이 없나요?
안녕하세요 FALINUX 이동수 입니다.
우선 LINUX는 현재 커널 영역과 어플리케이션 영역으로 나누어서 관리를 하고 있습니다.
그래서 저희 예제의 gpio.c와 test.c를 수정하셨다면 두 부분은 영역이 다르기 때문에 함수를 찾을 수 없게 될 것입니다.
그래서 권해 드리고 싶은 방법은 앞에서 말씀하신데로 write 또는 ioctl 함수를 사용하셔야 할 것 같습니다.
도움이 되셨으면 좋겠습니다. 좋은 하루 되십시오 ^^
>GPIO예제를 이용해서 LCD에 SPI신호를 만들어 보려고 하는데 함수선언에 문제가 있어 올립니다.
>gpio.c에서 아래 함수를 만들고
>
>int SetPort( int PortIndex, int value )
>{
> // 출력 전용으로 설정
> GPDR0 |= ( GPIO_OUTPUT_MASK );
>
> if( value )
> {
> //Port Set
> switch( PortIndex )
> {
> case 0 : GPSR0 = LCD_RST; break;
> case 1 : GPSR0 = BLU_EN; break;
> case 2 : GPSR0 = LCD_SDI; break;
> case 3 : GPSR0 = LCD_SCL; break;
> case 4 : GPSR0 = LCD_RS; break;
> case 5 : GPSR0 = LCD_CS; break;
> case 6 : GPSR0 = LCD_PDSB; break;
>// default:
>// break;
> }
> }
> else
> {
> //Port Clear
> switch( PortIndex )
> {
> case 0 : GPCR0 = LCD_RST; break;
> case 1 : GPCR0 = BLU_EN; break;
> case 2 : GPCR0 = LCD_SDI; break;
> case 3 : GPCR0 = LCD_SCL; break;
> case 4 : GPCR0 = LCD_RS; break;
> case 5 : GPCR0 = LCD_CS; break;
> case 6 : GPCR0 = LCD_PDSB; break;
>// default:
>// break;
> }
> }
>}
>
>gpio.h 파일에 아래와 같이 선언한 다음에
>int SetPort( int PortIndex, int value );
>
>test.c에서 아래처럼 이 함수를 사용하려고 하는데
>
>void sslcd_reset( void )
>{
> usleep( 2000 );
> SetPort(LCD_RST,LOW); // BLU_EN : GPIO1
> usleep( 2000 );
> SetPort(LCD_RST,HIGH);
> usleep( 10000 );
>}
>
>함수가 선언되지 않았다고 하면서 에러가 발생합니다.
>밑에 Q/A를 읽어보니 write같은 함수는 linux 커널에 매크로함수로 처리가 되어있어
>사용이 가능한거 같은데 위 같은 경우 SetPort(); 함수를 사용할 수 있는 방법이 없나요?
안녕하세요 FALINUX 이동수 입니다.
우선 LINUX는 현재 커널 영역과 어플리케이션 영역으로 나누어서 관리를 하고 있습니다.
그래서 저희 예제의 gpio.c와 test.c를 수정하셨다면 두 부분은 영역이 다르기 때문에 함수를 찾을 수 없게 될 것입니다.
그래서 권해 드리고 싶은 방법은 앞에서 말씀하신데로 write 또는 ioctl 함수를 사용하셔야 할 것 같습니다.
도움이 되셨으면 좋겠습니다. 좋은 하루 되십시오 ^^