改了之后存不了,没有写入flash
EEPROM 的代码
s32 temp;
temp=tp_dev.xfac*100000000;
AT24CXX_WriteLenByte(SAVE_ADDR_BASE,temp,4);
改了后,用flash
s32 temp;
temp=tp_dev.xfac*100000000;
W25QXX_Write((u8*)temp,SAVE_ADDR_BASE,4);
flash写数据的函数是这个
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);
数据写入是u8* pBuffer,而temp的数据类型是s32,所以肯定不对,那么该怎么改呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
其实你做的已经很接近真相了,U32可以保存在Flash中,对于Flash来说只有数据没有类型之分.只是temp是U32转换为U8*要用&操作符,即(u8*)&temp,代码如下,长度为4,另外注意一下SAVE_ADDR_BASE地址就行了
s32 temp;
temp=tp_dev.xfac*100000000;
W25QXX_Write((u8*)&temp,SAVE_ADDR_BASE,4);
我改成了这样可以了
//////////////////////////////////////////////////////////////////////////
#define SAVE_ADDR_BASE 16*1024*1024-100
void TP_Save_Adjdata(void)
{
s32 temp;
u8 pBuffer[10];
int i;
//±£′æD£Õy½á1û!
temp=tp_dev.xfac*100000000;//±£′æxD£ÕyòòËØ
for(i=3;i>=0;i--)
{
pBuffer=temp&0x000000ff;
temp>>=8;
}
W25QXX_Write(pBuffer,SAVE_ADDR_BASE,4);
temp=tp_dev.yfac*100000000;//±£′æyD£ÕyòòËØ
for(i=3;i>=0;i--)
{
pBuffer=temp&0x000000ff;
temp>>=8;
}
W25QXX_Write(pBuffer,SAVE_ADDR_BASE+4,4);
//±£′æxÆ«òÆá¿
for(i=1;i>=0;i--)
{
pBuffer=tp_dev.xoff&0x00ff;
tp_dev.xoff>>=8;
}
W25QXX_Write(pBuffer,SAVE_ADDR_BASE+8,2);
//±£′æyÆ«òÆá¿
for(i=1;i>=0;i--)
{
pBuffer=tp_dev.yoff&0x00ff;
tp_dev.yoff>>=8;
}
W25QXX_Write(pBuffer,SAVE_ADDR_BASE+10,2);
pBuffer[0]=tp_dev.touchtype;
W25QXX_Write(pBuffer,SAVE_ADDR_BASE+12,1);
pBuffer[0]=0X0A;//±ê¼ÇD£×¼1yáË
W25QXX_Write(pBuffer,SAVE_ADDR_BASE+13,1);
}
//μÃμ½±£′æÔúEEPROMàïÃæμÄD£×¼Öμ
//·μ»ØÖμ£o1£¬3é1|»ñè¡êy¾Y
// 0£¬»ñè¡ê§°ü£¬òaÖØDÂD£×¼
u8 TP_Get_Adjdata(void)
{
s32 tempfac;
u8 pBuffer[10];
W25QXX_Read(pBuffer,SAVE_ADDR_BASE+13,1);
tempfac=pBuffer[0];
if(pBuffer[0]==0X0A)//′¥ÃtÆáòѾ-D£×¼1yáË
{
W25QXX_Read(pBuffer,SAVE_ADDR_BASE,4);
tempfac=(pBuffer[0]<<24)+(pBuffer[1]<<16)+(pBuffer[2]<<8)+pBuffer[3];
tp_dev.xfac=(float)tempfac/100000000;//μÃμ½xD£×¼2Îêy
W25QXX_Read(pBuffer,SAVE_ADDR_BASE+4,4);
tempfac=(pBuffer[0]<<24)+(pBuffer[1]<<16)+(pBuffer[2]<<8)+pBuffer[3];
tp_dev.yfac=(float)tempfac/100000000;//μÃμ½yD£×¼2Îêy
//μÃμ½xÆ«òÆá¿
W25QXX_Read(pBuffer,SAVE_ADDR_BASE+8,2);
tp_dev.xoff=(pBuffer[0]<<8)+pBuffer[1];
//μÃμ½yÆ«òÆá¿
W25QXX_Read(pBuffer,SAVE_ADDR_BASE+10,2);
tp_dev.xoff=(pBuffer[0]<<8)+pBuffer[1];
W25QXX_Read(pBuffer,SAVE_ADDR_BASE+12,1);
tp_dev.touchtype=pBuffer[0];
if(tp_dev.touchtype)//X,Y·½ÏòóëÆáÄ»Ïà·′
{
CMD_RDX=0X90;
CMD_RDY=0XD0;
}else //X,Y·½ÏòóëÆáÄ»Ïàí¬
{
CMD_RDX=0XD0;
CMD_RDY=0X90;
}
return 1;
}
return 0;
}
不过虽然可以保存校准值了,但是后面的画图测试无法用了,点屏幕没反应。不知道问题出在哪里?
按照你说的试了下,好像不行。
一周热门 更多>