⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smc.txt

📁 本代码是通过串口通信的应用熟悉Tornado的集成开发环境
💻 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 + -