📄 sysspi.c
字号:
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 + -