📄 spidrv8548.c
字号:
break;
default:
return NB_DRV_ERROR;
}
return NB_DRV_OK;
}
/*------------------------------------------------------------------------------
*
* Function Name: ad9516_write
*
* Input(s):
* UINT16 addr:
* UINT8 byte_cnt:
* UINT8 *pdata:
*
* Output(s):
* <none>
*
* Returns:
* NB_DRV_OK:
* NB_DRV_ERROR:
*
* Description:
* ad9516 的寄存器读写
* R/W | W1 | W0 | A12...A0 | Dn....D0|
*
------------------------------------------------------------------------------*/
SYS_STATUS ad9516_read(UINT16 addr, UINT8 byte_cnt, UINT8 *pbuffer)
{
UINT32 i = 0;
UINT8 cmd_h = 0;
UINT8 cmd_l= 0;
if((MAX_BYTE_CNT < byte_cnt) ||(NULL == pbuffer)
||(AD9516_ADDR_LEN < addr))
{
return NB_DRV_ERROR;
}
cmd_h = (UINT8)(0x80 |(addr>>8));/*R/W bit set to 1*/
cmd_l = (UINT8)addr;
/*select slave device*/
spi_slave_sel(SPI_SEC_AD9516, 1);
spi_write_byte(SPI_SEC_AD9516, cmd_h);
spi_slave_sel(SPI_SEC_AD9516, 0);
spi_slave_sel(SPI_SEC_AD9516, 1);
spi_write_byte(SPI_SEC_AD9516, cmd_l);
spi_slave_sel(SPI_SEC_AD9516, 0);
/*read data from ad9516*/
for(i=0; i < byte_cnt; i++)
{
spi_slave_sel(SPI_SEC_AD9516, 1);
spi_read_byte(SPI_SEC_AD9516, pbuffer);
spi_slave_sel(SPI_SEC_AD9516, 0);
pbuffer++;
}
return NB_DRV_OK;
}
/*------------------------------------------------------------------------------
*
* Function Name: ad9516_write
*
* Input(s):
* UINT16 addr:
* UINT8 byte_cnt:
* UINT8 *pdata:
*
* Output(s):
* <none>
*
* Returns:
* NB_DRV_OK:
* NB_DRV_ERROR:
*
* Description:
* ad9516 的寄存器读写
* R/W | W1 | W0 | A12...A0 | Dn....D0|
------------------------------------------------------------------------------*/
SYS_STATUS ad9516_write(UINT16 addr, UINT8 byte_cnt, UINT8 *pdata)
{
UINT32 i = 0;
UINT8 cmd_h = 0;
UINT8 cmd_l= 0;
#ifdef SPI_DRV_DEBUG
printf("\r\nspi_write:addr = %d,byte_cnt = %d...", addr, byte_cnt);
#endif
if((MAX_BYTE_CNT < byte_cnt) ||(NULL == pdata)
||(AD9516_ADDR_LEN < addr))
{
return NB_DRV_ERROR;
}
cmd_h = (UINT8 )((addr>>8) & 0x0f);
cmd_l = (UINT8 )addr;
/*select slave device*/
spi_slave_sel(SPI_SEC_AD9516, 1);
spi_write_byte(SPI_SEC_AD9516, cmd_h);
spi_slave_sel(SPI_SEC_AD9516, 0);
spi_slave_sel(SPI_SEC_AD9516, 1);
spi_write_byte(SPI_SEC_AD9516, cmd_l);
spi_slave_sel(SPI_SEC_AD9516, 0);
for(i=0; i < byte_cnt; i++)
{
spi_slave_sel(SPI_SEC_AD9516, 1);
spi_write_byte(SPI_SEC_AD9516, *pdata);
spi_slave_sel(SPI_SEC_AD9516, 0);
pdata++;
}
return NB_DRV_OK;
}
/*------------------------------------------------------------------------------
*
* Function Name: ad9516_init
*
* Input(s):
* <none>
*
*
*
* Output(s):
* <none>
*
* Returns:
* NB_DRV_OK:
* NB_DRV_ERROR:
*
* Description:
* 配置ad9516 的寄存器
*
------------------------------------------------------------------------------*/
SYS_STATUS ad9516_init(void)
{
UINT16 i;
UINT16 count = 0;
RegValve *data_ptr = NULL;
*(UINT8 *)0xf002000f=0xb;
data_ptr = &default_config_9516[0];
count = sizeof(default_config_9516)/sizeof(RegValve);
for( i=0; i<count; i++)
{
if(NB_DRV_OK != spi_write(SPI_SEC_AD9516, data_ptr->RegAddr, AD9516_REG_OP,(UINT8 *)&(data_ptr->RegVal)))
{
return NB_DRV_ERROR;
}
data_ptr ++;
taskDelay(1);
}
taskDelay(1);
return NB_DRV_OK;
}
/*------------------------------------------------------------------------------
*
* Function Name: bcm5387_read_half
*
* Input(s):
* UINT8 addr:
* UINT8 byte_cnt:
* UINT8 *pdata:
*
* Output(s):
* <none>
*
* Returns:
* NB_DRV_OK:
* NB_DRV_ERROR:
*
* Description:
* <CMD, CHIP ID, R><REG ADDR>
* CHIP ID = 000,R = 0, W = 1
* Normal SPI:0110|CHIP ID2|CHIP ID1|CHIP ID0|R/W|
------------------------------------------------------------------------------*/
#if 0
SYS_STATUS bcm5387_read( UINT8 page, UINT8 reg_addr, UINT8 byte_cnt, UINT8 *pbuffer)
{
UINT32 i=0;
UINT32 j=0;
UINT8 dummy=0;
UINT8 u8temp=0;
UINT32 time_out;
*pbuffer=0;
UINT32 immr_val = /*vxImmrGet()*/0x80000000;
if((MAX_BYTE_CNT < byte_cnt) ||(NULL == pbuffer))
{
return NB_DRV_ERROR;
}
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);
spi_slave_sel(SPI_SEC_BCM5387, 1);*/
#if 0
#if 1
for(time_out=100; time_out>0; time_out--)
{
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xfe);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
spi_slave_sel(SPI_SEC_BCM5387, 0);
if(!(u8temp & (UINT8)0x80))
{
break;
}
/*spi_delay(200);*/
}
if(!time_out)
{
printf("Time out for get SPIF");
spi_slave_sel(SPI_SEC_BCM5387, 0);
return ERROR;
}
#endif
/*spi_slave_sel(SPI_SEC_BCM5387, 0);*/
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
/*first: write new page */
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_WRITE_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xff);
spi_write_byte(SPI_SEC_BCM5387, page);
spi_slave_sel(SPI_SEC_BCM5387, 0);
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
/*next: read a dummy value*/
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, reg_addr);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&dummy);
spi_slave_sel(SPI_SEC_BCM5387, 0);
printf("\ndummy is %x\n",dummy);
for(i=0;i<=byte_cnt/4;i++)
{
if((i == (byte_cnt/4)) && (0!=i))
{
for(j=0; j<(byte_cnt % 4); j++)
{
for(time_out=100; time_out>0; time_out--)
{
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xfe);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
spi_slave_sel(SPI_SEC_BCM5387, 0);
if(u8temp & (UINT8)0x20)
{
break;
}
/*spi_delay(200);*/
};
if(!time_out)
{
printf("\nTime out for get RACK\n");
spi_slave_sel(SPI_SEC_BCM5387, 0);
return ERROR;
}
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
/*forth: Read the data from the SPI Data I/O register*/
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xf0);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
*pbuffer |= u8temp;
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
*pbuffer |= (((UINT16)u8temp & 0xff) <<8);
spi_slave_sel(SPI_SEC_BCM5387, 0);
pbuffer++;
}
}
else
{
for(j=0;j<4;j++)
{
for(time_out=100; time_out>0; time_out--)
{
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xfe);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
spi_slave_sel(SPI_SEC_BCM5387, 0);
if(u8temp & (UINT8)0x20)
{
break;
}
/*spi_delay(200);*/
};
if(!time_out)
{
printf("\nTime out for get RACK\n");
spi_slave_sel(SPI_SEC_BCM5387, 0);
return ERROR;
}
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
/*forth: Read the data from the SPI Data I/O register*/
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xf0);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
*pbuffer |= u8temp;
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
*pbuffer |= (((UINT16)u8temp & 0xff) <<8);
spi_slave_sel(SPI_SEC_BCM5387, 0);
pbuffer++;
}
}
for(time_out=100; time_out>0; time_out--)
{
/* *M85XX_GPOUTDR(immr_val) |= SPI_SCLK;
spi_delay(200);*/
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xfe);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
spi_slave_sel(SPI_SEC_BCM5387, 0);
if(u8temp & (UINT8)0x02)
{
break;
}
/*spi_delay(200);*/
};
if(!time_out)
{
printf("\nTime out for get RxRdy\n");
spi_slave_sel(SPI_SEC_BCM5387, 0);
return ERROR;
}
}
/*spi_slave_sel(SPI_SEC_BCM5387, 0);*/
#endif
#if 1/*fast mode*/
for(time_out=100; time_out>0; time_out--)
{
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xfe);
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
spi_slave_sel(SPI_SEC_BCM5387, 0);
if(!(u8temp & (UINT8)0x80))
{
break;
}
/*spi_delay(200);*/
}
if(!time_out)
{
printf("Time out for get SPIF");
spi_slave_sel(SPI_SEC_BCM5387, 1);
/*first: write new page */
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_WRITE_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xff);
spi_write_byte(SPI_SEC_BCM5387, page);
spi_slave_sel(SPI_SEC_BCM5387, 0);
return ERROR;
}
printf("\n1\n");
spi_slave_sel(SPI_SEC_BCM5387, 1);
/*first: write new page */
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_WRITE_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xff);
spi_write_byte(SPI_SEC_BCM5387, page);
spi_slave_sel(SPI_SEC_BCM5387, 0);
for(i=0;i<byte_cnt;i++)
{
if((i!=0) && (i%8==0))
{
for(time_out=100;time_out>0;time_out--)
{
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, BCM5387_CTRL_READ_PACKET);
spi_write_byte(SPI_SEC_BCM5387, 0xfe);
spi_read_byte(SPI_SEC_BCM5387, (UINT8*)&u8temp);
spi_slave_sel(SPI_SEC_BCM5387, 0);
if(u8temp& (UINT8)0x02)
{
break;
}
}
if(!time_out)
{
printf("\nCannot get RXRDY!!\n");
return ERROR;
}
}
if(i%8==0)
{
printf("\n2\n");
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, 0x10);
spi_write_byte(SPI_SEC_BCM5387, reg_addr);
for(time_out=100;time_out>0;time_out--)
{
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
if(u8temp & (UINT8)0x01)
{
break;
}
}
if(!time_out)
{
printf("\nTime out for get RACK\n");
return ERROR;
}
}
spi_read_byte(SPI_SEC_BCM5387, pbuffer);
pbuffer++;
if(i%8==0)
{
spi_slave_sel(SPI_SEC_BCM5387, 0);
}
printf("\n3\n");
}
#if 0
spi_slave_sel(SPI_SEC_BCM5387, 1);
spi_write_byte(SPI_SEC_BCM5387, 0x10);
spi_write_byte(SPI_SEC_BCM5387, reg_addr);
for(time_out=100;time_out>0;time_out--)
{
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
if(u8temp & (UINT8)0x01)
{
break;
}
}
if(!time_out)
{
printf("\nTime out for get RACK\n");
return ERROR;
}
#if 0
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
*pbuffer |= u8temp;
spi_read_byte(SPI_SEC_BCM5387, (UINT8 *)&u8temp);
*pbuffer |= (((UINT16)u8temp & 0xff) <<8);
spi_slave_sel(SPI_SEC_BCM5387, 0);
#endif
for(i=0;i<byte_cnt;i++)
{
spi_read_byte(SPI_SEC_BCM5387, pbuffer);
pbuffer++;
}
spi_slave_sel(SPI_SEC_BCM5387, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -