
#<함수형>***********************************
void _Gpio_이벤트_(unsigned char  p포트번호,
                  unsigned char  p비트번호,
                  unsigned char  p상승시,
                  unsigned char  p하강시);

#define  _Gpio_EventSet_    _Gpio_이벤트_

#<인수>
'p포트번호'
이벤트사용 포트번호(0, 1 만 유효).
이벤트는 포트0, 포트1 에만 적용되는 기능입니다.
'p비트번호'
해당 포트의 비트번호(0 - 7 사이 값).
'p상승시'
1 : 상승에지에서 이벤트를 발생시킵니다.
0 : 상승에지이벤트를 사용하지 않습니다.
'p하강시'
1 : 하강에지에서 이벤트를 발생시킵니다.
0 : 하강에지이벤트를 사용하지 않습니다.

#<반환값>

#******************************************

#<적용구분>

"맷돌 전용"

#<선언문서>

"_Gpio_이벤트_.h"

#<설명>

지정 포트의 지정 비트의 이벤트를 설정합니다.

이벤트 발생시점을 [상승시] 와 [하강시] 로 개별설정 가능하며, 둘다 설정한 경우는 두 경우 모두 
이벤트가 발생합니다.

포트0, 포트1 각각 8 개씩 총 16개의 포트 이벤트를 완전 독립적으로 사용 가능하며 각각의 이벤트에는
각각의 알림문이 정의되 있습니다(이 기능은 포트0, 포트1 만 사용가능합니다).
이 기능은 매우 민감하게 동작됩니다.

설정된 이벤트가 동시에 발생되는 경우는 [ 포트0.0 > 포트0.1 > ... > 포트1.0 > 포트1.1 ... ]
순으로 번호가 낮을수록 우선순위가 높습니다.

설정된 포트의 비트는 자동으로 [입력] 으로 변경됩니다.

이벤트를 사용하기 위해서는 "_Event_전체_()" 를 사용하여 전체 이벤트를 허용해주어야 하며
"_MsgQ_생성_()" 함수로 [알림문저장소] 를 생성해 주어야 합니다.

이벤트알림문은 "_Event_전체.h" 문서에 정의돼 있습니다.

#<예제>

  //사용된 함수들은 [설계묶음] 안의 [함수묶음] 에 등록되 있어야 합니다.

  //[VAR]
  //{
      //최대 255 개의 이벤트알림문을 저장하도록 설정(1 개는 무효).
      unsigned char  알림문저장소[256];
      
  //} 

  // ...
 
  void event(void)
  {
    //[!]{-------------------------------------------------------------------
    //맷돌-C 에서 예약된 이벤트 처리 전용 함수.
    //이벤트가 발생하면 무조건 이 함수가 호출됩니다.
    //사용자는 _MsgQ_읽기_() 함수로 [알림문] 을 하나씩 읽어서 해당 이벤트를 처리하면 됩니다.
    //}----------------------------------------------------------------------
    
    //[VAR]
    //{ 
        //한개의 알림문은 1 바이트 크기입니다.
        unsigned char  알림문;
    
    //}
    
    //알림문 한개 꺼내기.
    알림문 = _MsgQ_읽기_();
    
    switch(알림문)
    {
      case d_EvtMsg_Gpio00 : //포트0.0 이벤트.
      {
        //직접처리하거나 해당 처리함수 호출. 
    
      } break;
    
      case d_EvtMsg_Gpio01 : //포트0.1 이벤트.
      {
        //직접처리하거나 해당 처리함수 호출.     
    
      } break;
    
      case d_EvtMsg_Gpio02 : //포트0.2 이벤트.
      {
        //직접처리하거나 해당 처리함수 호출.     
      
      } break;
      
      // ...
      
      //계속 다른 이벤트를 처리가능합니다.
      
    }
  
  }
  
  // ...
  
  void main(void)
  {
    //[알림문저장소 설정]
    //{
        //[알림문저장소] 를 생성합니다(해당 배열의 크기와 동일하게 설정).
        _MsgQ_생성_(알림문저장소, 256);
      
    //}
    
    //[포트 이벤트 설정]
    //{
        //포트0.0 을 상승/하강시 모두 이벤트가 발생되도록 설정합니다.
        _Gpio_이벤트_(0, 0, 1, 1);
        
        //포트0.1 을 상승시 이벤트가 발생되도록 설정합니다.
        _Gpio_이벤트_(0, 1, 1, 0);
        
        //포트0.2 을 하강시 이벤트가 발생되도록 설정합니다.
        _Gpio_이벤트_(0, 2, 0, 1);
    
    //}
  
    //[전체 이벤트 허용]
    //{    
        //전체이벤트를 허용한다(허용(1), 해제(0)).
        _Event_전체_(1);
      
    //}    
    
    //이벤트를 대기합니다.
    while(1);  
    
    //계속 이벤트를 대기하거나, 다른 처리를 수행해도 됩니다.
    //이 경우도 이벤트가 발생하면 이벤트가 처리됩니다.
    
  }  
  
  