OSDN Git Service

6723ba7ce7e6f15a3c2c266805d33d5e83e76614
[mochi/master.git] / src / kernel / include / hardware / I8254 / I8254.h
1 /******************************************************************************/
2 /* src/kernel/include/hardware/I8254/I8254.h                                  */
3 /*                                                                 2016/12/16 */
4 /* Copyright (C) 2016 Mochi.                                                  */
5 /******************************************************************************/
6 #ifndef I8254_H
7 #define I8254_H
8 /******************************************************************************/
9 /* 定義                                                                       */
10 /******************************************************************************/
11 /* PITポート定義 */
12 #define I8254_PORT_CNTR0     ( 0x40 )   /** PITカウンタ0レジスタ          */
13 #define I8254_PORT_CNTR1     ( 0x41 )   /** PITカウンタ1レジスタ          */
14 #define I8254_PORT_CNTR2     ( 0x42 )   /** PITカウンタ2レジスタ          */
15 #define I8254_PORT_CTRLW     ( 0x43 )   /** PITコントロールワードレジスタ */
16
17 /* コントロールワードレジスタビット定義 */
18 #define I8254_CTRLW_SC_CNTR0 ( 0x00 )   /**< 制御カウンタ:カウンタ0        */
19 #define I8254_CTRLW_SC_CNTR1 ( 0x40 )   /**< 制御カウンタ:カウンタ1        */
20 #define I8254_CTRLW_SC_CNTR2 ( 0x80 )   /**< 制御カウンタ:カウンタ2        */
21 #define I8254_CTRLW_RW_LSB   ( 0x10 )   /**< 書込み方法:最下位バイトのみ   */
22 #define I8254_CTRLW_RW_MSB   ( 0x20 )   /**< 書込み方法:最上位バイトのみ   */
23 #define I8254_CTRLW_RW_BOTH  ( 0x30 )   /**< 書込み方法:2回に分けて両方    */
24 #define I8254_CTRLW_M_MODE0  ( 0x00 )   /**< モード:カウンタ0で割込み      */
25 #define I8254_CTRLW_M_MODE1  ( 0x02 )   /**< モード:ワンショット           */
26 #define I8254_CTRLW_M_MODE2  ( 0x04 )   /**< モード:レートジェネレータ     */
27 #define I8254_CTRLW_M_MODE3  ( 0x06 )   /**< モード:方形波                 */
28 #define I8254_CTRLW_M_MODE4  ( 0x08 )   /**< モード:ソフトトリガストローブ */
29 #define I8254_CTRLW_M_MODE5  ( 0x0A )   /**< モード:ハードトリガストローブ */
30 #define I8254_CTRLW_BCD_BIN  ( 0x00 )   /**< カウント方法:バイナリ         */
31 #define I8254_CTRLW_BCD_BCD  ( 0x01 )   /**< カウント方法:BCD              */
32
33 /** カウンタ(最下位バイト)マクロ */
34 #define I8254_CNTR_LOW( _CNT ) \
35     ( ( uint8_t ) ( ( uint16_t ) ( _CNT ) & 0x00FF )      )
36 /** カウンタ(最上位バイト)マクロ */
37 #define I8254_CNTR_HIGH( _CNT ) \
38     ( ( uint8_t ) ( ( uint16_t ) ( _CNT ) & 0xFF00 ) >> 8 )
39
40
41 /******************************************************************************/
42 #endif