结贴,自己搞定,分享一下是硬件的问题,如果都接3.3的话那么VA-,VREF-就需要接负的3.3这个好麻烦,仔细看datasheet上面还有一种接法就是VD接3.3 VA接5V的,我只有SPI的程序,IO模拟的暂时没有,后续应该会去写下看看,下面把SPI的贴出来。
附件:
/*******************************************************************************
* 百为技术有限公司 Copyright(C) 2013, baiweijishu
* 项目名称(Project):
* 文件名(File): spi_flash.c
*
* 作者(Author): 张锡良 (xi_iang)
* 电邮(Email): zhang.xiliang@163.com
* 技术支持论坛(Forum):www.stm32bbs.com
* 淘宝官方网店(Shop): http://baiweijishu.taobao.com
* 修改日期(Date): 2013-11-29
*******************************************************************************/
#include "config.h"
unsigned char cs5532ResetData[5]={0x03,0x20,0x00,0x00,0x00}; //0x03写配置寄存器 0x20选择复位, 0x02是自动校准
// 参考电压选择2.5v~VA+,其余默认 复位AD
extern unsigned int ADvalue;
/*******************************************************************************
* 函数名(Function): SPI_FLASH_Init
* 参数(Param): 无
* 返回值(Return): 无
* 描述(Description): SPI_FLASH初始化函数
*******************************************************************************/
void SPI_FLASH_Init(int port)
{
SSP_CFG_Type SSP_ConfigStruct;
/* 配置触摸屏SPI管脚
p2.22:SSP0_SCK
p0.17: CS //SSP0_SSEL
p2.26: SSP0_MISO
p2.27: SSP0_MOSI
*/
PINSEL_ConfigPin(2, 22, 2);
// PINSEL_ConfigPin(2, 23, 2);
PINSEL_ConfigPin(2, 26, 2);
PINSEL_ConfigPin(2, 27, 2);
GPIO_SetDir(0, (1<<17), 1);
GPIO_SetValue(0, (1<<17));
SPI_FLASH_CS_HIGH();
/* 配置SPI参数 */
SSP_ConfigStruct.ClockRate = 200000; //200khz
SSP_ConfigStruct.CPHA = SSP_CPHA_FIRST;
SSP_ConfigStruct.CPOL = SSP_CPOL_HI;
SSP_ConfigStruct.Databit = SSP_DATABIT_8;
SSP_ConfigStruct.Mode = SSP_MASTER_MODE;
SSP_ConfigStruct.FrameFormat = SSP_FRAME_SPI;
SSP_Init(LPC_SSP0, &SSP_ConfigStruct);
/* 使能SPI外设 */
SSP_Cmd(LPC_SSP0, ENABLE);
}
void CS5532_Config(void)
{
SPI_FLASH_SendByte(0x03); //写配置寄存器
SPI_FLASH_SendByte(0x00);//
SPI_FLASH_SendByte(0x08);
SPI_FLASH_SendByte(0x00);
SPI_FLASH_SendByte(0x00);
;;
// Delay_ms(1);
SPI_FLASH_SendByte(0x05); //写通道寄存器
SPI_FLASH_SendByte(0x01); //增益为1 高四位为增益位最大为0110 ,64位增益 (VREF+ - VREF-)/增益 低四位为字速率 01为50hz
SPI_FLASH_SendByte(0x80); //80为双极性
SPI_FLASH_SendByte(0x01); //跟前面是一样的
SPI_FLASH_SendByte(0x80);
SPI_FLASH_SendByte(0xc0); //单次转换80 lianxu c0
}
void CS5532_SPIInit(void)
{
unsigned char i;
// unsigned int temp;
unsigned int CS5532ID=0;
Delay_ms(20);
for(i=0;i<31;i++)
SPI_FLASH_SendByte(0xff);
SPI_FLASH_SendByte(0xfe);
for(i=0;i<5;i++)
SPI_FLASH_SendByte(cs5532ResetData);
;
Delay_ms(20);
SPI_FLASH_SendByte(0x0b);
CS5532ID=SPI_ReadByte(); //返回值0x10 说明正确复位CS5532了 3.3V可以reset 5V不可以
SPI_ReadByte();
SPI_ReadByte();
SPI_ReadByte();
if(CS5532ID==0x10)
Uart0_Printf("Reset sucess \r\n");
CS5532_Config();
}
unsigned int Read_ADC(void)
{
unsigned char i;
unsigned int reg0=0,reg1=0,reg2=0,reg3=0,temp=0;
// SPI_FLASH_SendByte(0x80);
for(i=0;i<1;i++)
{
SPI_FLASH_SendByte(0x00);
}
reg0=SPI_ReadByte();
// Delay_ms(10);
reg1=SPI_ReadByte();
// Delay_ms(10);
reg2=SPI_ReadByte();
// Delay_ms(10);
reg3=SPI_ReadByte();
if(reg3==0x04)
return error; //溢出
// Delay_ms(10);
temp=reg0<<24|reg1<<16|reg2<<8|reg3;
Uart0_Printf("reg0 = %d \r\n",reg0);
Uart0_Printf("reg1 = %d \r\n",reg1);
Uart0_Printf("reg2 = %d \r\n",reg2);
Uart0_Printf("reg3 = %d \r\n",reg3);
Uart0_Printf("ADvalue = %d \r\n",temp>>11);
return temp>>11;
}
/*******************************************************************************
* 函数名(Function): SPI_FLASH_SendByte
+
* 参数(Param): byte 要发送的1字节数据
* 返回值(Return): tmp 接收到的1字节数据
* 描述(Description): SPI字节发送接收函数
*******************************************************************************/
uint8_t SPI_FLASH_SendByte(uint8_t byte)
{
uint8_t tmp;
/* 等待忙标志位为零和发送缓冲为未满 */
while ( (LPC_SSP0->SR & (SSP_SR_TNF|SSP_SR_BSY)) != SSP_SR_TNF );
/* 发送1字节数据到SPI0 */
LPC_SSP0->DR = byte;
/* 忙标志位为零和接收缓冲器非空 */
while ( (LPC_SSP0->SR & (SSP_SR_BSY|SSP_SR_RNE)) != SSP_SR_RNE );
/* 从SPI总线上接收1字节数据 */
tmp = LPC_SSP0->DR;
//Uart0_Printf("tmp = %d \r\n",tmp);
return tmp;
}
unsigned char SPI_ReadByte(void)
{
/* 发送读数据指令 */
return(SPI_FLASH_SendByte(0x00));
//return 0;
}
/************************************* End *************************************/
|