tl16pir552.c

TL16PIR552(TI)用 簡易SIOドライバ [詳細]

#include <tl16pir552.h>

tl16pir552.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#define INDEX_SIOPINIB(siopid)   ((UINT)((siopid) - 1))
#define get_siopinib(siopid)   (&(siopinib_table[INDEX_SIOPINIB(siopid)]))
#define INDEX_SIOP(siopid)   ((UINT)((siopid) - 1))
#define get_siopcb(siopid)   (&(siopcb_table[INDEX_SIOP(siopid)]))

型定義

typedef sio_port_initialization_block SIOPINIB

関数

Inline void tl16pir552_orb (VP addr, UW reg, UB val)
Inline void tl16pir552_andb (VP addr, UW reg, UB val)
static void tl16pir552_get_stat (SIOPCB *siopcb)
Inline BOOL tl16pir552_getready (SIOPCB *siopcb)
Inline BOOL tl16pir552_putready (SIOPCB *siopcb)
Inline char tl16pir552_getchar (SIOPCB *siopcb)
Inline void tl16pir552_putchar (SIOPCB *siopcb, char c)
void tl16pir552_initialize ()
void tl16pir552_init_siopinib (const SIOPINIB *siopinib)
void tl16pir552_init (void)
BOOL tl16pir552_openflag (void)
SIOPCBtl16pir552_opn_por (ID siopid, VP_INT exinf)
void tl16pir552_cls_por (SIOPCB *siopcb)
BOOL tl16pir552_snd_chr (SIOPCB *siopcb, char c)
INT tl16pir552_rcv_chr (SIOPCB *siopcb)
void tl16pir552_ena_cbr (SIOPCB *siopcb, UINT cbrtn)
void tl16pir552_dis_cbr (SIOPCB *siopcb, UINT cbrtn)
static void tl16pir552_isr_siop (SIOPCB *siopcb)
void tl16pir552_uart0_isr ()
void tl16pir552_putchar_pol (char val)

変数

const SIOPINIB siopinib_table [TNUM_SIOP]
SIOPCB siopcb_table [TNUM_SIOP]


説明

TL16PIR552(TI)用 簡易SIOドライバ

tl16pir552.c で定義されています。


マクロ定義

#define get_siopcb ( siopid   )     (&(siopcb_table[INDEX_SIOP(siopid)]))

tl16pir552.c105 行で定義されています。

#define get_siopinib ( siopid   )     (&(siopinib_table[INDEX_SIOPINIB(siopid)]))

tl16pir552.c93 行で定義されています。

#define INDEX_SIOP ( siopid   )     ((UINT)((siopid) - 1))

tl16pir552.c104 行で定義されています。

#define INDEX_SIOPINIB ( siopid   )     ((UINT)((siopid) - 1))

tl16pir552.c92 行で定義されています。


型定義

typedef struct sio_port_initialization_block SIOPINIB


関数

Inline void tl16pir552_andb ( VP  addr,
UW  reg,
UB  val 
)

tl16pir552.c117 行で定義されています。

参照先 tl16pir552_rebtl16pir552_wrb.

参照元 tl16pir552_dis_cbr().

00118 {
00119         tl16pir552_wrb( addr, reg, tl16pir552_reb( addr, reg ) & val );
00120 }

void tl16pir552_cls_por ( SIOPCB siopcb  ) 

tl16pir552.c292 行で定義されています。

参照先 DIS_INTFALSEIERtl16pir552_wrb.

00293 {
00294         tl16pir552_wrb( siopcb->siopinib->channel_addr, IER, DIS_INT );
00295 
00296         siopcb->openflag = FALSE;
00297 }

void tl16pir552_dis_cbr ( SIOPCB siopcb,
UINT  cbrtn 
)

tl16pir552.c348 行で定義されています。

参照先 IERRECEIVE_DATA_AVAILABLERECEIVE_LINE_STATUSSIO_ERDY_RCVSIO_ERDY_SNDtl16pir552_andb()TRANS_REG_EMPTY.

00349 {
00350         UB      ier_bit = 0;
00351 
00352         switch (cbrtn) {
00353         case SIO_ERDY_SND:
00354                 ier_bit = TRANS_REG_EMPTY;
00355                 break;
00356         case SIO_ERDY_RCV:
00357                 ier_bit = (RECEIVE_DATA_AVAILABLE | RECEIVE_LINE_STATUS);
00358                 break;
00359         }
00360 
00361         tl16pir552_andb( siopcb->siopinib->channel_addr, IER, ~ier_bit );
00362 }

関数の呼び出しグラフ:

void tl16pir552_ena_cbr ( SIOPCB siopcb,
UINT  cbrtn 
)

tl16pir552.c328 行で定義されています。

参照先 IERRECEIVE_DATA_AVAILABLERECEIVE_LINE_STATUSSIO_ERDY_RCVSIO_ERDY_SNDtl16pir552_orb()TRANS_REG_EMPTY.

00329 {
00330         UB      ier_bit = 0;
00331 
00332         switch (cbrtn) {
00333         case SIO_ERDY_SND:
00334                 ier_bit = TRANS_REG_EMPTY;
00335                 break;
00336         case SIO_ERDY_RCV:
00337                 ier_bit = (RECEIVE_DATA_AVAILABLE | RECEIVE_LINE_STATUS);
00338                 break;
00339         }
00340 
00341         tl16pir552_orb( siopcb->siopinib->channel_addr, IER, ier_bit );
00342 }

関数の呼び出しグラフ:

static void tl16pir552_get_stat ( SIOPCB siopcb  )  [static]

tl16pir552.c127 行で定義されています。

参照先 IIRINT_CHAR_TIME_OUTINT_MASKINT_RECEIVE_DATAINT_TRANS_EMPTYtl16pir552_rebTRUE.

参照元 tl16pir552_isr_siop().

00128 {
00129         UB      iir;
00130 
00131         iir = tl16pir552_reb( siopcb->siopinib->channel_addr, IIR) & INT_MASK;
00132 
00133         switch( iir ) {
00134                 case INT_TRANS_EMPTY :
00135                         siopcb->putready = TRUE;
00136                         break;
00137                 case INT_RECEIVE_DATA :
00138                 case INT_CHAR_TIME_OUT :
00139                         siopcb->getready = TRUE;
00140                         break;
00141                 default :
00142                         break;
00143         }
00144 
00145 }

Inline char tl16pir552_getchar ( SIOPCB siopcb  ) 

tl16pir552.c169 行で定義されています。

参照先 FALSERBRtl16pir552_reb.

参照元 tl16pir552_rcv_chr().

00170 {
00171         siopcb->getready = FALSE;
00172         return((char) tl16pir552_reb( siopcb->siopinib->channel_addr, RBR ));
00173         /* 1byte 単位での文字の取り出しを行ったいるため、tl16pir552_opn_por内の
00174            受信バッファ設定を増やしたとしても性能の向上は見られない。
00175            性能の向上には、バッファ全体のブロック転送を行うなどの修正が必要。*/
00176 }

Inline BOOL tl16pir552_getready ( SIOPCB siopcb  ) 

tl16pir552.c151 行で定義されています。

参照元 tl16pir552_isr_siop()tl16pir552_rcv_chr().

00152 {
00153         return(siopcb->getready);
00154 }

void tl16pir552_init ( void   ) 

tl16pir552.c246 行で定義されています。

参照先 get_siopinibtl16pir552_init_siopinib().

00247 {
00248         tl16pir552_init_siopinib( get_siopinib(1) );
00249 #if TNUM_SIOP >= 2
00250         tl16pir552_init_siopinib( get_siopinib(2) );
00251 #endif /* TNUM_SIOP >= 2 */
00252 }

関数の呼び出しグラフ:

void tl16pir552_init_siopinib ( const SIOPINIB siopinib  ) 

tl16pir552.c210 行で定義されています。

参照先 DIS_INTDIVISOR_LATCH_ACCDLLDLMDTRENABLE_EXT_INTFCRFIFO_ENABLEIERLCRMCRRECEIVE_DATA_AVAILABLERECEIVE_FIFO_RESETRECEIVE_TRIG_1_BYTERTSSCRtl16pir552_wrbTRANS_FIFO_RESET.

参照元 tl16pir552_init()tl16pir552_opn_por().

00211 {
00212         /*
00213          * SIOレジスタの初期化
00214          */
00215         /* 初期処理 */
00216         tl16pir552_wrb( siopinib->channel_addr, IER, DIS_INT );
00217 
00218         tl16pir552_wrb( siopinib->channel_addr, MCR, ENABLE_EXT_INT );
00219 
00220         /* ボーレートの設定 */
00221         tl16pir552_wrb( siopinib->channel_addr, LCR, siopinib->lcr_def | DIVISOR_LATCH_ACC );
00222 
00223         tl16pir552_wrb( siopinib->channel_addr, SCR, siopinib->scr_def );
00224 
00225         tl16pir552_wrb( siopinib->channel_addr, DLL, siopinib->boud_lo_def );
00226         tl16pir552_wrb( siopinib->channel_addr, DLM, siopinib->boud_hi_def );
00227 
00228         /* モードの設定 */
00229         tl16pir552_wrb( siopinib->channel_addr, LCR, siopinib->lcr_def );
00230 
00231         /* FIFOの設定 */
00232         tl16pir552_wrb( siopinib->channel_addr, FCR, FIFO_ENABLE );
00233         tl16pir552_wrb( siopinib->channel_addr, FCR, FIFO_ENABLE | RECEIVE_FIFO_RESET | TRANS_FIFO_RESET | RECEIVE_TRIG_1_BYTE );
00234         tl16pir552_wrb( siopinib->channel_addr, FCR, FIFO_ENABLE | RECEIVE_TRIG_1_BYTE );
00235 
00236         /* 終了処理 */
00237         tl16pir552_wrb( siopinib->channel_addr, MCR, DTR | RTS | ENABLE_EXT_INT );
00238 
00239         tl16pir552_wrb( siopinib->channel_addr, IER, RECEIVE_DATA_AVAILABLE);
00240 }

void tl16pir552_initialize ( void   ) 

tl16pir552.c192 行で定義されています。

参照先 FALSEsiopcb_tablesiopinib_tableTNUM_SIOP.

00193 {
00194         SIOPCB  *siopcb;
00195         UINT    i;
00196 
00197         /*
00198          *  シリアルI/Oポート管理ブロックの初期化
00199          */
00200         for (siopcb = siopcb_table, i = 0; i < TNUM_SIOP; siopcb++, i++) {
00201                 siopcb->siopinib = &(siopinib_table[i]);
00202                 siopcb->openflag = FALSE;
00203         }
00204 }

static void tl16pir552_isr_siop ( SIOPCB siopcb  )  [static]

tl16pir552.c368 行で定義されています。

参照先 tl16pir552_get_stat()tl16pir552_getready()tl16pir552_ierdy_rcv()tl16pir552_ierdy_snd()tl16pir552_putready().

参照元 tl16pir552_uart0_isr().

00369 {
00370         tl16pir552_get_stat(siopcb);
00371 
00372         if ( tl16pir552_getready(siopcb) ) {
00373                 /*
00374                  *  受信通知コールバックルーチンを呼び出す.
00375                  */
00376                 tl16pir552_ierdy_rcv(siopcb->exinf);
00377         } else if ( tl16pir552_putready(siopcb) ) {
00378                 /*
00379                  *  送信可能コールバックルーチンを呼び出す.
00380                  */
00381                 tl16pir552_ierdy_snd(siopcb->exinf);
00382         }
00383 }

関数の呼び出しグラフ:

BOOL tl16pir552_openflag ( void   ) 

tl16pir552.c258 行で定義されています。

参照先 siopcb_table.

00259 {
00260 #if TNUM_SIOP < 2
00261         return(siopcb_table[0].openflag);
00262 #else /* TNUM_SIOP < 2 */
00263         return(siopcb_table[0].openflag || siopcb_table[1].openflag);
00264 #endif /* TNUM_SIOP < 2 */
00265 }

SIOPCB* tl16pir552_opn_por ( ID  siopid,
VP_INT  exinf 
)

tl16pir552.c271 行で定義されています。

参照先 FALSEget_siopcbtl16pir552_init_siopinib()TRUE.

00272 {
00273         SIOPCB          *siopcb = get_siopcb(siopid);
00274         const SIOPINIB  *siopinib = siopcb->siopinib;
00275 
00276         /* シリアルコントローラの初期化 */
00277         tl16pir552_init_siopinib( siopinib );
00278 
00279         /* 割込みレベル設定、割込み要求クリアは、sio_opn_por(hw_serial.h)で行う。 */
00280 
00281         siopcb->exinf = exinf;
00282         siopcb->getready = siopcb->putready = FALSE;
00283         siopcb->openflag = TRUE;
00284 
00285         return(siopcb);
00286 }

関数の呼び出しグラフ:

Inline void tl16pir552_orb ( VP  addr,
UW  reg,
UB  val 
)

tl16pir552.c111 行で定義されています。

参照先 tl16pir552_rebtl16pir552_wrb.

参照元 tl16pir552_ena_cbr().

00112 {
00113         tl16pir552_wrb( addr, reg, tl16pir552_reb( addr, reg ) | val );
00114 }

Inline void tl16pir552_putchar ( SIOPCB siopcb,
char  c 
)

tl16pir552.c182 行で定義されています。

参照先 FALSETHRtl16pir552_wrb.

参照元 tl16pir552_snd_chr().

00183 {
00184         siopcb->putready = FALSE;
00185         tl16pir552_wrb( siopcb->siopinib->channel_addr, THR, c );
00186 }

void tl16pir552_putchar_pol ( char  val  ) 

tl16pir552.c410 行で定義されています。

参照先 get_siopinibLOGTASK_PORTIDLSRTEMTTHRtl16pir552_rebtl16pir552_wrb.

00410                                    {
00411 
00412         const SIOPINIB  *siopinib = get_siopinib( LOGTASK_PORTID );
00413 
00414         /* 送信部エンプティになるまで待つ。 */
00415         while( (tl16pir552_reb( siopinib->channel_addr, LSR ) & (TEMT) ) == 0 );
00416 
00417         tl16pir552_wrb( siopinib->channel_addr, THR, val );
00418 }

Inline BOOL tl16pir552_putready ( SIOPCB siopcb  ) 

tl16pir552.c160 行で定義されています。

参照元 tl16pir552_isr_siop()tl16pir552_snd_chr().

00161 {
00162         return(siopcb->putready);
00163 }

INT tl16pir552_rcv_chr ( SIOPCB siopcb  ) 

tl16pir552.c316 行で定義されています。

参照先 tl16pir552_getchar()tl16pir552_getready().

00317 {
00318         if (tl16pir552_getready(siopcb)) {
00319                 return((INT)(UB) tl16pir552_getchar(siopcb));
00320         }
00321         return(-1);
00322 }

関数の呼び出しグラフ:

BOOL tl16pir552_snd_chr ( SIOPCB siopcb,
char  c 
)

tl16pir552.c303 行で定義されています。

参照先 FALSEtl16pir552_putchar()tl16pir552_putready()TRUE.

00304 {
00305         if (tl16pir552_putready(siopcb)) {
00306                 tl16pir552_putchar(siopcb, c);
00307                 return(TRUE);
00308         }
00309         return(FALSE);
00310 }

関数の呼び出しグラフ:

void tl16pir552_uart0_isr ( void   ) 

tl16pir552.c389 行で定義されています。

参照先 siopcb_tabletl16pir552_isr_siop().

00390 {
00391         if (siopcb_table[0].openflag) {
00392                 tl16pir552_isr_siop(&(siopcb_table[0]));
00393         }
00394 }

関数の呼び出しグラフ:


変数

SIOPCB siopcb_table[TNUM_SIOP]

tl16pir552.c99 行で定義されています。

const SIOPINIB siopinib_table[TNUM_SIOP]

初期値:

 {
        { (VP)  UART_CH01,
          (UB)  WORD_LENGTH_8 | STOP_BITS_1 | PARITY_NON,
          (UB)  PRE_DIVISOR,
          (UB)  HI8(DIVISOR),
          (UB)  LO8(DIVISOR) },






 
}

tl16pir552.c74 行で定義されています。


Copyright © 2006 by TAKAGI Nobuhisa.
Copyright © 2006 by Kijineko Inc..
このページは Mon Dec 18 17:22:01 2006 に Doxygen によって生成されました。
データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】