안녕하세요. 질문이 있습니다.

ez-x5보드에 TACT 스위치가 32개가 74_16C245를 통해서 연결되어 있습니다.
아래 소스는 간단하게 키 스캔한걸 1초에 한번씩 시리얼로 내보내는건데요.

아래 소스는  short 로 선언이 되어있으니깐 당연히  키 16개만 읽혀지는데요.

그래서 32개 키 값을 다 읽기 위해 2번 처럼(long) 바꿨는데요.

역시 16개만 읽혀지네요.

별짓을 여러가지고 바꿀거 바꿔봤는데요 결과는 똑같구요.

간단한 mmap 함수 사용이니깐 특별할것 없는것 같은데 안되네요.

제가 모르는 부분이 있으시면 지적해주세요.




///////////////////////////////////////////////  ------  1 번
#define ADDR_PUSHBUTTON          0x14000000

int key_scan(void)
{

  unsigned short  *button;

  button = (volatile short *) mmap(NULL,4,PROT_READ,MAP_SHARED,fd,ADDR_PUSHBUTTON);
          
  if((int)button<0){button=NULL; printf("mmap errorn"); return -1; }
  
  while(1)
  {        
        printf("key_value : %08xn",*button);        
        sleep(1);
  }
        
             return 0;
}

///////////////////////////////////////   ------------- 2 번

#define ADDR_PUSHBUTTON          0x14000000

int key_scan(void)
{

  unsigned long  *button;

  button = (volatile long *) mmap(NULL,8,PROT_READ,MAP_SHARED,fd,ADDR_PUSHBUTTON);
          
  if((int)button<0){button=NULL; printf("mmap errorn"); return -1; }
  
  while(1)
  {        
        printf("key_value : %08xn",*button);        
        sleep(1);
  }
        
             return 0;
}

원래 16bit 만 읽혀지는건지 아니면 커널에서 16bit 만 access 할 수있게 설정을 되있는 부분이 있다는지
아니면 제가 뭘 잘못하고 있는지 알고 싶습니다.