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

📄 sysspi.c

📁 大名鼎鼎的mpc8260的bsp源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
SPI_DEV* pSpi;
UINT immrVal;
int i;

immrVal = INTERNAL_MEM_MAP_ADDR; /* Base address of Internal Memory */
pSpi = &spiDev;


/* Wait for transmit to finish (first). */
while (pSpi->pTxBD->statusMode & SPI_TRANS_TX_BD_READY)
{
/* Busy-wait. */
;
}

/* Disable SPI (serial port interface). */
*MPC860_SPMODE(immrVal) = 0x2E77;

/* Set up transmit buffer descriptor. */
/*memcpy(spiTxBuf,pbuf,len);*/

spiTxBuf[0] = regval;


pSpi->pTxBD->dataPointer = spiTxBuf;
pSpi->pTxBD->dataLength = 1;
pSpi->pTxBD->statusMode = ( SPI_TRANS_TX_BD_READY |
SPI_TRANS_TX_BD_WRAP |
SPI_TRANS_TX_BD_LAST );

/* Set SPI read value. */
pSpi->pPram->mrblr = 4;

/* Set up receive buffer descriptor. */
pSpi->pRxBD->dataPointer = spiRxBuf;
pSpi->pRxBD->statusMode = ( SPI_TRANS_RX_BD_WRAP |
SPI_TRANS_RX_BD_EMPTY );

/* Assert SCPEN1 chip select (CS). */
/* *PDDAT(immrVal) &= ~0x0800;*/

/* Assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) &= ~0x1000;;


/* Enable SPI. */
*MPC860_SPMODE(immrVal) = 0x2F77;





/* Start transfer. */
*MPC860_SPCOM(immrVal) = SPI_STR;

while (pSpi->pRxBD->statusMode & SPI_TRANS_RX_BD_EMPTY)
{
/* Busy-wait. */
;
}


/* De-assert SCPEN1 chip select (CS). */
/* *PDDAT(immrVal) |= 0x0800;*/

/* De-assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) |= 0x1000;
 /* 
printf("Tx Buffer=0x%x\n", spiTxBuf[0]);
printf("Tx Buffer=0x%x\n", spiTxBuf[1]);
*/
return;
} /* end of sysNvRamWriteByte */


/******************************************************************************
*
* sysNvRamWriteByte - write a byte to NVRAM
*
* This routine writes one byte to NVRAM
*
* RETURNS: none
*
* NOMANUAL
*/

 void read_nb(unsigned char  regval)
{
SPI_DEV* pSpi;
UINT immrVal;
int i;

immrVal = INTERNAL_MEM_MAP_ADDR; /* Base address of Internal Memory */
pSpi = &spiDev;


/* Wait for transmit to finish (first). */
while (pSpi->pTxBD->statusMode & SPI_TRANS_TX_BD_READY)
{
/* Busy-wait. */
;
}

/* Disable SPI (serial port interface). */
*MPC860_SPMODE(immrVal) = 0x2E77;

/* Set up transmit buffer descriptor. */
/*memcpy(spiTxBuf,pbuf,len);*/

spiTxBuf[0] = regval;
/*spiTxBuf[1] = 0xff;*/

pSpi->pTxBD->dataPointer = spiTxBuf;
pSpi->pTxBD->dataLength = 1;
pSpi->pTxBD->statusMode = ( SPI_TRANS_TX_BD_READY |
SPI_TRANS_TX_BD_WRAP |
SPI_TRANS_TX_BD_LAST );

/* Set SPI read value. */
pSpi->pPram->mrblr = 4;

/* Set up receive buffer descriptor. */
pSpi->pRxBD->dataPointer = spiRxBuf;
pSpi->pRxBD->statusMode = ( SPI_TRANS_RX_BD_WRAP |
SPI_TRANS_RX_BD_EMPTY );
/* Assert SCPEN1 chip select (CS). */
/**PDDAT(immrVal) &= ~0x0800;*/

/* Enable SPI. */
*MPC860_SPMODE(immrVal) = 0x2F77;

for(i=0;i<50000;i++);


/* Assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) &= ~0x1000;

/* Start transfer. */
*MPC860_SPCOM(immrVal) = SPI_STR;

while (pSpi->pRxBD->statusMode & SPI_TRANS_RX_BD_EMPTY)
{
/* Busy-wait. */
;
}


/* De-assert SCPEN1 chip select (CS). */
/* *PDDAT(immrVal) |= 0x0800;*/


/* De-assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) |= 0x1000;

printf("Rx Buffer=0x%x\n", spiRxBuf[0]);
printf("Rx Buffer=0x%x\n", spiRxBuf[1]);

return;
} /* end of sysNvRamWriteByte */


 void write_br(unsigned char  reg,unsigned val)
{
SPI_DEV* pSpi;
UINT immrVal;
int i;

immrVal = INTERNAL_MEM_MAP_ADDR; /* Base address of Internal Memory */
pSpi = &spiDev;


/* Wait for transmit to finish (first). */
while (pSpi->pTxBD->statusMode & SPI_TRANS_TX_BD_READY)
{
/* Busy-wait. */
;
}

/* Disable SPI (serial port interface). */
*MPC860_SPMODE(immrVal) = 0x2E77;

/* Set up transmit buffer descriptor. */
/*memcpy(spiTxBuf,pbuf,len);*/

spiTxBuf[0] = reg;
spiTxBuf[1] = val;

pSpi->pTxBD->dataPointer = spiTxBuf;
pSpi->pTxBD->dataLength = 2;
pSpi->pTxBD->statusMode = ( SPI_TRANS_TX_BD_READY |
SPI_TRANS_TX_BD_WRAP |
SPI_TRANS_TX_BD_LAST );

/* Set SPI read value. */
pSpi->pPram->mrblr = 4;

/* Set up receive buffer descriptor. */
pSpi->pRxBD->dataPointer = spiRxBuf;
pSpi->pRxBD->statusMode = ( SPI_TRANS_RX_BD_WRAP |
SPI_TRANS_RX_BD_EMPTY );

/* Assert SCPEN1 chip select (CS). */
/* *PDDAT(immrVal) &= ~0x0800;*/

/* De-assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) &= ~0x1000;;

/* Enable SPI. */
*MPC860_SPMODE(immrVal) = 0x2F77;

/* Start transfer. */
*MPC860_SPCOM(immrVal) = SPI_STR;

while (pSpi->pRxBD->statusMode & SPI_TRANS_RX_BD_EMPTY)
{
/* Busy-wait. */
;
}


/* De-assert SCPEN1 chip select (CS). */
/* *PDDAT(immrVal) |= 0x0800;*/

/* De-assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) |= 0x1000;
 /* 
printf("Tx Buffer=0x%x\n", spiTxBuf[0]);
printf("Tx Buffer=0x%x\n", spiTxBuf[1]);
*/
return;
} /* end of sysNvRamWriteByte */



 void read_br(unsigned char  reg)
{
SPI_DEV* pSpi;
UINT immrVal;
int i;

immrVal = INTERNAL_MEM_MAP_ADDR; /* Base address of Internal Memory */
pSpi = &spiDev;


/* Wait for transmit to finish (first). */
while (pSpi->pTxBD->statusMode & SPI_TRANS_TX_BD_READY)
{
/* Busy-wait. */
;
}

/* Disable SPI (serial port interface). */
*MPC860_SPMODE(immrVal) = 0x2E77;

/* Set up transmit buffer descriptor. */
/*memcpy(spiTxBuf,pbuf,len);*/

spiTxBuf[0] = reg;
spiTxBuf[1] = 0xff;

pSpi->pTxBD->dataPointer = spiTxBuf;
pSpi->pTxBD->dataLength = 2;
pSpi->pTxBD->statusMode = ( SPI_TRANS_TX_BD_READY |
SPI_TRANS_TX_BD_WRAP |
SPI_TRANS_TX_BD_LAST );

/* Set SPI read value. */
pSpi->pPram->mrblr = 4;

/* Set up receive buffer descriptor. */
pSpi->pRxBD->dataPointer = spiRxBuf;
pSpi->pRxBD->statusMode = ( SPI_TRANS_RX_BD_WRAP |
SPI_TRANS_RX_BD_EMPTY );
/* Assert SCPEN1 chip select (CS). */
/**PDDAT(immrVal) &= ~0x0800;*/

/* Assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) &= ~0x1000;
/* Enable SPI. */
*MPC860_SPMODE(immrVal) = 0x2F77;

/* Start transfer. */
*MPC860_SPCOM(immrVal) = SPI_STR;

while (pSpi->pRxBD->statusMode & SPI_TRANS_RX_BD_EMPTY)
{
/* Busy-wait. */
;
}


/* De-assert SCPEN1 chip select (CS). */
/* *PDDAT(immrVal) |= 0x0800;*/


/* De-assert SCPEN2 chip select (CS). */
*PDDAT(immrVal) |= 0x1000;

printf("Rx Buffer=0x%x\n", spiRxBuf[0]);
printf("Rx Buffer=0x%x\n", spiRxBuf[1]);

return;
} 

 
 void u_ini(void)
{

write_nb(0x08);      		/*nr0(b3)<--1*/
write_nb(0x00);			/*nr0(b3)<--0*/
write_br(0x70,0x77);		/*br0=0x77*/
write_br(0x71,0x7F);		/*br1=0x7f*/
write_br(0x72,0xF0);		/*br2=0xf0*/
write_br(0x79,0x1c);		/*br9=0x1c*/
write_br(0x7A,0x01);		/*br10(b0)<--1*/
write_br(0x77,0x01);		/*Or7(b0)<--1*/
write_br(0x7A,0x00);		/*br10(b0)<--0*/
write_nb(0x4A);		/*nr4=0x0a*/
} 

 void fu_ini(void)
{
WriteByte(FNR_TX,0x08);
WriteByte(FU_EN,0x01);
WriteByte(FNR_TX,0x00);
WriteByte(FU_EN,0x01);

WriteByte(FBR_TX1,0x70);
WriteByte(FBR_TX1,0x77);
WriteByte(FU_EN,0x04);

WriteByte(FBR_TX1,0x71);
WriteByte(FBR_TX1,0x7F);
WriteByte(FU_EN,0x04);

WriteByte(FBR_TX1,0x72);
WriteByte(FBR_TX1,0xF0);
WriteByte(FU_EN,0x04);


WriteByte(FBR_TX1,0x79);
WriteByte(FBR_TX1,0x1c);
WriteByte(FU_EN,0x04);

WriteByte(FBR_TX1,0x7a);
WriteByte(FBR_TX1,0x01);
WriteByte(FU_EN,0x04);


WriteByte(FBR_TX1,0x77);
WriteByte(FBR_TX1,0x01);
WriteByte(FU_EN,0x04);

WriteByte(FBR_TX1,0x7a);
WriteByte(FBR_TX1,0x00);
WriteByte(FU_EN,0x04);

WriteByte(FNR_TX,0x4a);
WriteByte(FU_EN,0x01);

} 

void fread_nr(unsigned char reg)
{
WriteByte(FNR_TX,reg);
WriteByte(FU_EN,0x01);
printf("reg val =0x%x",   (ReadByte(FNR_RX))&0x0F);
}


 void fread_br(unsigned char reg)
{
WriteByte(FBR_TX1,0xF0|reg);
WriteByte(FBR_TX1,0x00);
WriteByte(FU_EN,0x04);
printf("reg val =0x%x",  (ReadByte(FBR_RX2)));
}

void fwrite_nr(unsigned char val)
{
WriteByte(FNR_TX,val);
WriteByte(FU_EN,0x01);
printf("reg val =0x%x",   (ReadByte(FNR_RX))&0x0F);
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -