/* * 受信した文字の取出し */ Inline bool_t scif_getchar(SIOPCB *p_siopcb, char *rxdata) { uint16_t fsrval; uint16_t lsrval; uint8_t read_data; fsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR)); lsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR)); if (fsrval & (SCFSR_ER | SCFSR_BRK)) { fsrval = fsrval & ~(SCFSR_ER | SCFSR_BRK); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), fsrval); } if (lsrval & SCLSR_ORER) { lsrval = lsrval & ~SCLSR_ORER; sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR), lsrval); } if (fsrval & SCFSR_RDF) { read_data = sil_reb_mem((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFRDR); fsrval = fsrval & ~SCFSR_RDF; sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), fsrval); *rxdata = (char)read_data; return true; } return false; }
/* * 初期化 */ void smsc_init(void) { /* * Enter Config mode */ sil_wrh_mem((VP)SMSC_CONFIG_PORT, (0x55 << 8)); sil_wrh_mem((VP)SMSC_CONFIG_PORT, (0x55 << 8)); /* * Init SCI0 */ /* Power on */ smsc_config_write(0x22, (smsc_config_read(0x22) | 0x10)); /* Select SCI0 */ smsc_config_write(0x07, 0x04); /* Enable SCI0 */ smsc_config_write(0x30, 0x01); /* Set SCI0 Base Address */ smsc_config_write(0x60, (SMSC_SCI0_BASE_ADDR & 0xff00) >> 8); smsc_config_write(0x61, (SMSC_SCI0_BASE_ADDR & 0xff)); /* IRQ4 */ smsc_config_write(0x70, 0x04); /* * Exit Config mode */ sil_wrh_mem((VP)SMSC_CONFIG_PORT, (0xAA << 8)); }
/* * シリアルI/Oポートに対する受信エラー割込み処理 */ Inline void sh2scif_isr_siop_err (SIOPCB * siopcb) { /* エラーフラグをクリア */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFSR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFSR)) & ~SCFSR_ER); /* FIFOの初期化 */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFCR), (VH) SCFCR_RFRST); sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCFCR), 0x0030); }
void set_init_moudlestop_setting(){ /* power management setting*/ /* unlock register access */ sil_wrh_mem((void *)(SYSTEM_PRCR_ADDR), SYSTEM_PRKEY | SYSTEM_PRC1); //enable RSPI0 sil_wrw_mem((void*)SYSTEM_MSTPCRA_ADDR, 0x46FFFFFF); //reset MSTPCRA sil_wrw_mem((void*)SYSTEM_MSTPCRB_ADDR, 0xFFFFFFFF); //reset MSTPCRB sil_wrw_mem((void*)SYSTEM_MSTPCRC_ADDR, 0xFFFF0000); //reset MSTPCRC //lock register access sil_wrh_mem((void *)(SYSTEM_PRCR_ADDR), SYSTEM_PRKEY ); /* end power management setting */ }
/* * シリアルI/Oポートへのポーリングでの出力 */ void scif_pol_putc(char c, ID siopid) { const SIOPINIB *p_siopinib; uint16_t fsrval; SIL_PRE_LOC; p_siopinib = get_siopinib(siopid); while(1) { /* * リエントラントにするため、全割込みロック状態にする。 */ SIL_LOC_INT(); fsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR)); if (fsrval & SCFSR_TDFE) { sil_wrb_mem((uint8_t *)p_siopinib->port + REG_SCFTDR, c); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), ~(SCFSR_TEND | SCFSR_TDFE)); /* * リターンする前に全割込みロックフラグを元の状態に戻す。 */ SIL_UNL_INT(); return; } else { /* * ここで全割込みロックを解除して、割込みを受け付ける。 */ SIL_UNL_INT(); } } }
/* * シリアルI/Oポートからのコールバックの禁止 */ void sh2scif_dis_cbr (SIOPCB * siopcb, UINT cbrtn) { switch (cbrtn) { case SIO_ERDY_SND: /* 送信割り込み要求を禁止 */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR)) & ~SCSCR_TIE); break; case SIO_ERDY_RCV: /* 受信割り込み要求を禁止 */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR)) & ~SCSCR_RIE); break; } }
/* * 受信割込み許可 */ Inline void scif_enable_rcv(SIOPCB *p_siopcb) { uint16_t scrval; scrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR)); scrval |= SCSCR_RIE; sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR), scrval); }
/* * 送信割込み禁止 */ Inline void scif_disable_send(SIOPCB *p_siopcb) { uint16_t scrval; scrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR)); scrval = scrval & ~SCSCR_TIE; sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCSCR), scrval); }
/* フラグをリセットする */ Inline void sh2scif_isr_siop_brk (SIOPCB * siopcb) { /* フラグをクリア */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR)) & ~SC1SSR_BRK); }
/* * シリアルI/Oポートのオープン */ SIOPCB * sh1sci_opn_por(ID siopid, VP_INT exinf) { SIOPCB *siopcb = get_siopcb(siopid); VB scr, smr; VH pbcr1; #ifdef GDB_STUB if (siopid == PORT1) { siopcb->exinf = exinf; siopcb->openflag = TRUE; return(siopcb); } #endif /* GDB_STUB */ sh1_anb_reg(siopcb->inib->base + SCR, (VB)~(SCR_TE | SCR_RE)); /* 送受信停止 */ /* ピンアサイン * シリアルデバイス自体の事項ではないので * 本来はこのファイルに記述するのはふさわしくないが、 * hw_serial.cを用意するのも煩雑なので暫定的にここに入れている。 */ pbcr1 = sil_reh_mem((VP)PBCR1); if (siopid == PORT1) { /* PB08:RxD0 PB09:TxD0 */ pbcr1 = (pbcr1 & PBCR1_TD0_RD0_MASK) | PBCR1_TD0 | PBCR1_RD0; } else { /* PB10:RxD1 PB11:TxD1 */ pbcr1 = (pbcr1 & PBCR1_TD1_RD1_MASK) | PBCR1_TD1 | PBCR1_RD1; } sil_wrh_mem((VP)PBCR1, pbcr1); /* 送受信フォーマット */ smr = siopcb->inib->smr_init; sil_wrb_mem(siopcb->inib->base + SMR, smr); sil_wrb_mem(siopcb->inib->base + BRR, (UB)siopcb->inib->baudrate); /* ボーレート設定 */ /* 割込み禁止とクロックソースの選択 */ scr = (VB)(~(SCR_TIE | SCR_RIE | SCR_TE | SCR_RE | SCR_MPIE | SCR_TEIE | SCR_CKE_MASK) | SCR_CKE); sil_wrb_mem(siopcb->inib->base + SCR, scr); /* * ボーレートの設定後、1カウント分待たなければならない。 */ sil_dly_nse(siopcb->inib->delay); /* エラーフラグをクリア */ sh1_anb_reg(siopcb->inib->base + SSR, (VB)~(SSR_ORER | SSR_FER | SSR_PER)); /* 受信割り込み許可 */ /* 送受信許可 */ sh1_orb_reg(siopcb->inib->base + SCR, (SCR_RIE | SCR_TE | SCR_RE)); /* 送信割込みの許可は送信制御関数で行う */ siopcb->exinf = exinf; siopcb->openflag = TRUE; return(siopcb); }
/* * 送信する文字の書込み */ Inline void sh2scif_putchar (SIOPCB * siopcb, char c) { /* トランスミットFIFOデータレジスタエンプティ・フラグのクリア */ sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFTDR), c); sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR)) & ~SC1SSR_TDFE); }
/* * シリアルI/Oポートのクローズ */ void sh2scif_cls_por (SIOPCB * siopcb) { /* 送受信停止、割込み禁止 */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SCSCR), (VH) ~ (SCSCR_TIE | SCSCR_RIE | SCSCR_TE | SCSCR_RE)); siopcb->openflag = FALSE; }
/* * ターゲットシステム依存 初期化ルーチン */ void sys_initialize() { #if defined(MS7709ASE01) || defined(MS7729RSE01) /* Enable IRL Interrupt */ sil_wrh_mem((VP)ICR1, 0x5000); #else /* MS7750SE01 */ sil_wrh_mem((VP)ICR, 0x0000); #endif /* defined(MS7709ASE01) | defined(MS7729RSE01) */ /* * Init Super I/O */ smsc_init(); /* * Init SIO */ fdc37c935a_init(); }
/* * 文字を受信したか? */ Inline bool_t scif_getready(SIOPCB *p_siopcb) { uint16_t fsrval; uint16_t lsrval; fsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR)); lsrval = sil_reh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR)); if (fsrval & (SCFSR_ER | SCFSR_BRK)) { fsrval = fsrval & ~(SCFSR_ER | SCFSR_BRK); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), fsrval); } if (lsrval & SCLSR_ORER) { lsrval = lsrval & ~SCLSR_ORER; sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCLSR), lsrval); } if (fsrval & SCFSR_RDF) { return true; } return false; }
/* * 受信した文字の取出し */ Inline char sh2scif_getchar (SIOPCB * siopcb) { VB data; data = sil_reb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFRDR)); /* レシーブデータレジスタフル・フラグのクリア */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR)) & ~SC1SSR_RDRF); return data; }
/* * シリアルI/Oポートのオープン */ SIOPCB * sh2scif_opn_por (ID siopid, VP_INT exinf) { SIOPCB *siopcb; siopcb = get_siopcb (siopid); /* 送受信停止 */ sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR), sil_reb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR)) & ~(SCSCR_TE | SCSCR_RE)); /* SCIデータ入出力ポートの設定 */ /* ピンアサイン */ /* sys_initializeで設定 */ /* FIFOの初期化 */ sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFCR), (VB) (SCFCR_TFRST | SCFCR_RFRST)); /* 送受信フォーマット */ sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSMR), 0x00); /* 調歩同期式 */ /* 8ビット、パリティなし */ /* ストップビットレングス:1 */ /* クロックセレクト */ sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCBRR), (VB) siopcb->siopinib->brr); /* ボーレート設定 */ /* * ボーレートの設定後、1カウント分待たなければならない。 */ sil_dly_nse (sh2scif_DELAY); /* 値はsh1と同じ */ /* FIFOの設定 */ sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCFCR), 0x00); /* エラーフラグをクリア */ sil_wrh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR), sil_reh_mem ((VH *) (siopcb->siopinib->reg_base + SCIF_SC1SSR)) & ~SC1SSR_ER); sil_wrb_mem ((VB *) (siopcb->siopinib->reg_base + SCIF_SCSCR), (VB) (SCSCR_RIE | SCSCR_TE | SCSCR_RE)); siopcb->exinf = exinf; siopcb->openflag = TRUE; return (siopcb); }
/* * シリアルI/Oポートのオープン */ SIOPCB * sio_opn_por(ID siopid, VP_INT exinf) { SIOPCB * siopcb = GET_SIOPCB(siopid); siopcb->exinf = exinf; switch(SIO_TYP(siopcb->flags)) { case SIO_TYP_M32RUART: /* UART初期化 */ sil_wrb_mem((void *)(SIOCR(siopcb->port)+3), 0); /* ポートを開く(UART0) */ sil_wrb_mem((void *)PDATA(5), 0); sil_wrb_mem((void *)PDIR(5), 0x80); /* UART, Non-parity, 1 stop-bit */ sil_wrb_mem((void *)(SIOMOD0(siopcb->port)+3), 0); /* 8bit, internal clock */ sil_wrh_mem((void *)(SIOMOD1(siopcb->port)+2), 0x0800); /* M32R(32102) - f(BLK)=16MHzで115200bps */ sil_wrh_mem((void *)(SIOBAUR(siopcb->port)+2), SERIAL_CLKDIV); sil_wrb_mem((void *)(SIORBAUR(siopcb->port)+3), SERIAL_CLKCMP); /* 送受信割込み発生許可 */ sil_wrh_mem((void *)(SIOTRCR(siopcb->port)+2), 0x0006); /* ステータスクリア, 送受信動作開始 */ sil_wrb_mem((void *)(SIOCR(siopcb->port)+2), 0x3); sil_wrb_mem((void *)(SIOCR(siopcb->port)+3), 0x3); /* 受信割込み受付許可 */ sil_wrh_mem((void *)(ICUCR(SIO,siopcb->port)+2), 0x1000); sil_wrh_mem((void *)(ICUCR(SIO,siopcb->port)+6), 0x1000); /* TxD,RxDピン有効(UART0) */ sil_wrh_mem((void *)PMOD(5), 0x5500); break; } return siopcb; }
/* * シリアルI/Oポートの初期化 banner出力のためカーネルの初期化と無関係に行う */ void sys_initialize () { SIOPCB *siopcb; /* 使用する周辺機器はここで有効にしておく。 */ /* SCIデータ入出力ポートの設定 */ #ifndef GDB_STUB /* SCI1 */ sil_wrh_mem (MSTCR1, (VH) ((VH) sil_reh_mem (MSTCR1) & ~0x0002)); sil_wrh_mem (PACRL2, sil_reh_mem (PACRL2) | (PFC_TXD1 | PFC_RXD1)); #if TNUM_PORT >=2 /* SCI0 */ sil_wrh_mem (MSTCR1, (VH) ((VH) sil_reh_mem (MSTCR1) & ~0x0001)); sil_wrh_mem (PACRL2, sil_reh_mem (PACRL2) | (PFC_TXD0 | PFC_RXD0)); #endif /*TNUM_PORT >=2 */ #else /* GDB_STUB */ /* SCI0 */ sil_wrh_mem (MSTCR1, (VH) ((VH) sil_reh_mem (MSTCR1) & ~0x0001)); sil_wrh_mem (PACRL2, sil_reh_mem (PACRL2) | (PFC_TXD0 | PFC_RXD0)); #endif /* GDB_STUB */ /* CMT0 */ sil_wrh_mem (MSTCR2, (VH) ((VH) sil_reh_mem (MSTCR2) & ~0x1000)); /* * デバイス依存のオープン処理. */ /*バナー出力するため */ sh2sci_initialize(); siopcb = sh2sci_opn_por (LOGTASK_PORTID, 0); }
/* * 低レベルのターゲットシステム依存の初期化 _hardware_init_hook * * スタートアップモジュールの中で,メモリの初期化の前に呼び出される. */ void hardware_init_hook(void) { /* WCR3:ウエイトコントロールレジスタ3 * WPU=1 WAIT端子プルアップ * A02LW=00 エリア0,2を1ロングウェイト * A6LW=00 エリア6 を1ロングウェイト */ sil_wrh_mem(BSC_WCR3, 0x8000); /* BCR:バスコントロールレジスタ * DRANE=0 エリア1は外部メモリ空間 * IOE=0 エリア6は外部メモリ空間 * WARP=0 ノーマルモード:外部アクセスと内部アクセスを同時に行わない * RDDTY=0 RD信号HI T1の50% * BAS=0 WRH,WRL,A0信号有効 */ sil_wrh_mem(BSC_BCR, 0x0000); /* WCR1:ウエイトコントロールレジスタ1 * read cycle stateで * wait端子サンプルしない * RWx=0 エリア1,3,4,5,7 1ステート固定 * RWx=0 エリア0,2,6 1ステート+ロングウェイト(計3ステート) * WW1=1 エリア1外部メモリ 2ステート */ sil_wrh_mem(BSC_WCR1, 0x00ff); /* WCR2:ウエイトコントロールレジスタ2 * DMAないので初期値のまま */ sil_wrh_mem(BSC_WCR2, 0xffff); /* * PA、PB出力バッファ初期化 */ sil_wrh_mem(PA_DR, VAL_PA_DR); sil_wrh_mem(PB_DR, VAL_PB_DR); /* * PA入出力初期化(sys_support.h参照) */ sil_wrh_mem(PFC_PACR1, VAL_PFC_PACR1); sil_wrh_mem(PFC_PACR2, VAL_PFC_PACR2); sil_wrh_mem(PFC_PAIOR, VAL_PFC_PAIOR); sil_wrh_mem(PFC_PBCR1, VAL_PFC_PBCR1); sil_wrh_mem(PFC_PBCR2, VAL_PFC_PBCR2); sil_wrh_mem(PFC_PBIOR, VAL_PFC_PBIOR); sil_wrh_mem(PFC_CASCR, VAL_PFC_CASCR); }
Inline void st16c_write(UW addr, UW offset, UB val) { sil_wrh_mem((VP)(addr + offset),val); }
void hardware_init_hook (void) { sil_wrh_mem (BCR1, 0x202f); sil_wrh_mem (BCR2, 0x5500); sil_wrh_mem (WCR1, 0x0010); sil_wrh_mem (PACRH, 0x5000); sil_wrh_mem (PACRL1, 0x1540); sil_wrh_mem (PACRL2, 0x0140); sil_wrh_mem (PBCR1, 0x0002); sil_wrh_mem (PBCR2, 0xa005); sil_wrh_mem (PCCR, 0xfffc); sil_wrh_mem (PDCRH1, 0x5555); sil_wrh_mem (PDCRH2, 0x5555); sil_wrh_mem (PDCRL1, 0xffff); sil_wrh_mem (PDCRL2, 0x0000); sil_wrh_mem (PECRL1, 0x0000); sil_wrh_mem (PECRL2, 0x0000); sil_wrh_mem (PAIORL, 0x87e7); sil_wrh_mem (PBIOR, 0x023c); }
/* * 送信する文字の書込み */ Inline void scif_putchar(SIOPCB *p_siopcb, char c) { sil_wrb_mem((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFTDR, c); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopcb->p_siopinib->port + REG_SCFSR), ~(SCFSR_TEND | SCFSR_TDFE)); }
/* * ハードウェアの初期化処理 */ static int scif_init_siopinib(const SIOPINIB *p_siopinib) { uint16_t fsrval; uint8_t brrval; fsrval = UART_CLK / (32 * p_siopinib->bps_setting) - 1; if (fsrval > 255) return 1; brrval = (uint8_t)fsrval; sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSCR), 0); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFCR), SCFCR_TFRST | SCFCR_RFRST); (void)sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR)); (void)sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCLSR)); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), 0); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCLSR), 0); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSCR), SCSCR_INTCLK); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSMR), SCSMR_CKS1); /* 8N1, P1clock/1 */ sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCEMR), 0); sil_wrb_mem((uint8_t *)p_siopinib->port + REG_SCBRR, brrval); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFCR), SCFCR_RSTRG_15 | SCFCR_RTRG_1 | SCFCR_TTRG_8); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCSCR), SCSCR_TE | SCSCR_RE | SCSCR_INTCLK); while (sil_reh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR)) & SCFSR_RDF) { (void)sil_reb_mem((uint8_t *)p_siopinib->port + REG_SCFRDR); sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), ~SCFSR_RDF); } sil_wrh_mem((uint16_t *)((uint8_t *)p_siopinib->port + REG_SCFSR), 0); return 0; }
/* * シリアルI/Oポートのクローズ */ void scif_cls_por(SIOPCB *p_siopcb) { sil_wrh_mem(p_siopcb->p_siopinib->port + REG_SCSCR, 0); }
/* * 低レベルのターゲットシステム依存の初期化 _hardware_init_hook * * スタートアップモジュールの中で,メモリの初期化の前に呼び出される. */ void hardware_init_hook(void) { /* WCR3:ウエイトコントロールレジスタ3 * WPU=1 WAIT端子プルアップ * A02LW=00 エリア0,2を1ロングウェイト * A6LW=00 エリア6 を1ロングウェイト */ sil_wrh_mem(BSC_WCR3, 0x8000); /* BCR:バスコントロールレジスタ * DRANE=0 エリア1は外部メモリ空間 * IOE=0 エリア6は外部メモリ空間 * WARP=0 ノーマルモード:外部アクセスと内部アクセスを同時に行わない * RDDTY=0 RD信号HI T1の50% * BAS=0 WRH,WRL,A0信号有効 */ sil_wrh_mem(BSC_BCR, 0x0000); /* WCR1:ウエイトコントロールレジスタ1 * read cycle stateで * wait端子サンプルしない * RWx=0 エリア1,3,4,5,7 1ステート固定 * RWx=0 エリア0,2,6 1ステート+ロングウェイト(計3ステート) * WW1=1 エリア1外部メモリ 2ステート */ sil_wrh_mem(BSC_WCR1, 0x00ff); /* WCR2:ウエイトコントロールレジスタ2 * DMAないので初期値のまま */ sil_wrh_mem(BSC_WCR2, 0xffff); /* * PA、PB出力バッファ初期化 */ sil_wrh_mem(PA_DR, VAL_PA_DR); sil_wrh_mem(PB_DR, VAL_PB_DR); /* * PA入出力初期化(sys_support.h参照) */ sil_wrh_mem(PFC_PACR1, VAL_PFC_PACR1); sil_wrh_mem(PFC_PACR2, VAL_PFC_PACR2); sil_wrh_mem(PFC_PAIOR, VAL_PFC_PAIOR); sil_wrh_mem(PFC_PBCR1, VAL_PFC_PBCR1); sil_wrh_mem(PFC_PBCR2, VAL_PFC_PBCR2); sil_wrh_mem(PFC_PBIOR, VAL_PFC_PBIOR); sil_wrh_mem(PFC_CASCR, VAL_PFC_CASCR); }