マクロ定義 | 関数 | 変数

C:/PIC/OpenSSM/libps2.c

#include <p24FJ64GA002.h>
#include "types.h"
#include "librtc.h"
#include "libps2.h"
libps2.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#define GPIO_PS2_CLK   PORTBbits.RB8
#define GPIO_PS2_DAT   PORTBbits.RB9
#define PS2_KEY_BUFFER_SIZE   5
#define PS2_CODE_BUFFER_SIZE   16

関数

void __attribute__ ((interrupt, auto_psv))
void PS2_init (void)
BOOL PS2_main (void)
void PS2_key_buf_clear (void)
unsigned char PS2_key_get (void)
unsigned char PS2_key_check (void)

変数

PS2_T ps2

マクロ定義

#define GPIO_PS2_CLK   PORTBbits.RB8

libps2.c36 行で定義されています。

参照元 __attribute__().

#define GPIO_PS2_DAT   PORTBbits.RB9

libps2.c37 行で定義されています。

参照元 __attribute__().

#define PS2_CODE_BUFFER_SIZE   16

libps2.c40 行で定義されています。

#define PS2_KEY_BUFFER_SIZE   5

libps2.c39 行で定義されています。

参照元 PS2_key_get().


関数

void __attribute__ ( (interrupt, auto_psv)   ) 

libps2.c227 行で定義されています。

参照先 GPIO_PS2_CLK, GPIO_PS2_DAT, rtc, RTC_get_ticks(), と RTC::tick.

{
    static unsigned int  last  = 0x0000;
    static unsigned int  buf   = 0x0000;
    static unsigned char count = 0x00;

    IFS1bits.CNIF = 0;

    /* クロックが送られてきたら、処理を行う */
    if(GPIO_PS2_CLK == 0){

        /* 久しぶりのクロックならば、バッファをクリアする */
        if(RTC_get_ticks(last, rtc.tick) > 5){
            buf = 0x0000;
            count = 0x00;
        }
        last = rtc.tick;

        /* データ受信処理 */
        buf = (buf << 1) + GPIO_PS2_DAT;
        count++;

        /* 正しいパケットならば、スキャンコードバッファへ送る */
        if(count > 10){
            PS2_code_put(reverse(buf >> 2));        /* パリティビットは無視 */
            buf = 0x0000;
            count = 0x00;
        }

    } else {
        /* 立ち上がりエッジでは、何もしない */
    }


    return;
}

関数の呼び出しグラフ:

void PS2_init ( void   ) 

libps2.c268 行で定義されています。

参照先 PS2_key_buf_clear(), と PS2::wait.

参照元 main().

{
    PS2_key_buf_clear();
    PS2_code_buf_clear();

    ps2.wait = 3000;

    CNEN2bits.CN22IE = 1;
    IPC4bits.CNIP = 5;
    IEC1bits.CNIE = 1;
    IFS1bits.CNIF = 0;

    return;
}

関数の呼び出しグラフ:

呼出しグラフ:

void PS2_key_buf_clear ( void   ) 

libps2.c297 行で定義されています。

参照元 PS2_init(), と SCREEN_main().

{
    key_stptr = 0x00;
    key_enptr = 0x00;

    PS2_code_buf_clear();

    return;
}

呼出しグラフ:

unsigned char PS2_key_check ( void   ) 

libps2.c385 行で定義されています。

参照元 SCREEN_main().

{
    /* Buffer is Empty */
    if(key_stptr == key_enptr){
        return(0x00);
    }

    return(key_buf[ key_stptr ]);
}

呼出しグラフ:

unsigned char PS2_key_get ( void   ) 

libps2.c366 行で定義されています。

参照先 PS2_KEY_BUFFER_SIZE.

参照元 SCREEN_main().

{
    unsigned char buf, nxptr;

    /* Buffer is Empty */
    if(key_stptr == key_enptr){
        return(0x00);
    }

    buf = key_buf[ key_stptr ];

    nxptr = key_stptr + 1;
    if(nxptr >= PS2_KEY_BUFFER_SIZE) nxptr = 0;
    key_stptr = nxptr;

    return(buf);
}

呼出しグラフ:

BOOL PS2_main ( void   ) 

libps2.c287 行で定義されています。

参照先 TRUE.

参照元 main().

{
    /* スキャンコード -> キー変換処理 */
    PS2_code_get_key();
    return(TRUE);
}

呼出しグラフ:


変数

libps2.c46 行で定義されています。

参照元 SCREEN_main().