1 /******************************************************************************/
2 /* src/kernel/include/hardware/I8254/I8254.h */
4 /* Copyright (C) 2016 Mochi. */
5 /******************************************************************************/
8 /******************************************************************************/
10 /******************************************************************************/
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コントロールワードレジスタ */
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 */
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 )
41 /******************************************************************************/