?? smc.txt
字號:
void SMC1_Init(void); /*SMC初始化*/
void SMC_BD_Init(void); /*SMC Buffer Descriptor初始化*/
bool PollInput(char *inChar); /*輸入單個字符*/
bool PollOutput(char outChar); /*輸出單個字符*/
void SMC1_Init(void)
{
pimm->pip_pbpar |= 0x00C0; /*Configure port B pins: Set PBPAR[24,25]*/
pimm->pip_pbdir &= 0xFF3F;
pimm->pip_pbodr &= 0xFF3F;
pimm->brgc1 = (0x10000 | 0x0044); /*(64MHz) 115200*/
pimm->si_simode &= 0xFFFF0FFF; /*Connect BRG1 to SMC1: Clear SIMODE[SMC1,SMC1CS]*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.rbase = (UHWORD) SMC_RXBD_BASE;
/*RxBD base*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.tbase = (UHWORD) SMC_TXBD_BASE;
/*RxBD base*/
pimm->cp_cr = 0x0091; /*Execute the INIT RX AND TX Para command*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.rfcr = 0x10; /*normal operation*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.tfcr = 0x10; /*normal operation*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.mrblr = 1; /*Max bytes per receive buffer*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.max_idl = 0; /*Disable the MAX_IDL functionality*/
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.brkln = 0;
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.brkec = 0;
pimm->PRAM[SMC1_PRAM].pg.other.smc_dsp1.psmc1.u1.brkcr = 1;
/*Disable SMC & SCC TxRx*/
for(int i=0;i<2;i++)
{
pimm->smc_regs[i].smc_smcmr &= 0xFFFC;
}
for(int i=0;i<4;i++)
{
pimm->scc_regs[i].scc_gsmr_l &= 0xFFFFFCFF;
}
/*Clear SMC BD and BUF with 0x00*/
for(int i=0;i<SMC_RXBD_NUM;i++)
{
smc_rxbd[i]->bd_sc = (UHWORD) 0;
smc_rxbd[i]->bd_len = (UHWORD) 0;
smc_rxbd[i]->bd_p = (UBYTE *) 0;
}
for(int i=0;i<SMC_TXBD_NUM;i++)
{
smc_txbd[i]->bd_sc = (UHWORD) 0;
smc_txbd[i]->bd_len = (UHWORD) 0;
smc_txbd[i]->bd_p = (UBYTE *) 0;
}
for(int i=0;i<SMC_RXBUF_NUM;i++)
{
smc_rxbuf[i]->buf = (UBYTE) 0;
}
for(int i=0;i<SMC_TXBUF_NUM;i++)
{
smc_txbuf[i]->buf = (UBYTE) 0;
}
/**/
SMC_BD_Init();
pimm->smc_regs[SMC1_REG].smc_smce = 0xFF; /*Clear any previous events*/
pimm->smc_regs[SMC1_REG].smc_smcm = 0x17;
pimm->smc_regs[SMC1_REG].smc_smcmr = 0x4820;
pimm->smc_regs[SMC1_REG].smc_smcmr = 0x4823; /*Enable SMC TxRx*/
}
void SMC_BD_Init(void)
{
for(int bd_i=0;bd_i<SMC_RXBD_NUM;bd_i++)
{
if(bd_i==(SMC_RXBD_NUM-1))
{
smc_rxbd[bd_i]->bd_sc = (UHWORD) SMC_RXBD_SC_LAST;
}
else
{
smc_rxbd[bd_i]->bd_sc = (UHWORD) SMC_RXBD_SC;
}
smc_rxbd[bd_i]->bd_p = (UBYTE *) smc_rxbuf[bd_i];
}
for(int bd_i=0;bd_i<SMC_TXBD_NUM;bd_i++)
{
if(bd_i==(SMC_TXBD_NUM-1))
{
smc_txbd[bd_i]->bd_sc = (UHWORD) SMC_TXBD_SC_LAST;
}
else
{
smc_txbd[bd_i]->bd_sc = (UHWORD) SMC_TXBD_SC;
}
smc_txbd[bd_i]->bd_len = (UHWORD) SMC_TXBD_LEN;
smc_txbd[bd_i]->bd_p = (UBYTE *) smc_txbuf[bd_i];
}
DEBUG++;
}
bool PollInput(char *inChar)
{
if(smc_rxbd[smc_rxbd_i]->bd_sc & RXBD_EMPTY_BIT)
return BUF_EMPTY;
*inChar = smc_rxbd[smc_rxbd_i]->bd_p[0];
smc_rxbd[smc_rxbd_i]->bd_sc |= RXBD_EMPTY_BIT;
smc_rxbd_i = (smc_rxbd_i + 1) % SMC_RXBD_NUM;
return BUF_OK;
}
bool PollOutput(char outChar)
{
if((smc_txbd[smc_txbd_i]->bd_sc & TXBD_READY_BIT)!=0)
return BUF_FULL;
smc_txbd[smc_txbd_i]->bd_p[0] = (UBYTE) outChar;
smc_txbd[smc_txbd_i]->bd_len = (UHWORD) SMC_TXBD_LEN;
smc_txbd[smc_txbd_i]->bd_sc |= TXBD_READY_BIT;
smc_txbd_i = (smc_txbd_i + 1) % SMC_TXBD_NUM;
return BUF_OK;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -