QN8035程序.docx
- 文档编号:7654053
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:56
- 大小:28.77KB
QN8035程序.docx
《QN8035程序.docx》由会员分享,可在线阅读,更多相关《QN8035程序.docx(56页珍藏版)》请在冰豆网上搜索。
QN8035程序
Readme:
ForARM
Beforeusingthiscode:
-MakesureI2Caddressismatchingdatasheet
-Ifi2cdriverexisted,thenjustignoreqnio.c/h
-ModifyQND_Deley(ms)togetaccurateplatformrelatedmilisecondsdelay,
otherwiseallchip'sfunctionalitymaynotworkingproperly
-DetailpleasereadrelateddocorgetFAE'shelp
qnio.h
#define_QNIO_H__
/*modifythisaccordingtoI2CdeviceaddresswhenyouusestandardI2CfunctionlikeI2C_XXXXexceptAI2C_XXXX*/
#defineI2C_DEV0_ADDRESS0x20
#defineI2C_TIMEOUT_TIME10
#defineI2C_TIMEOUT_COUNT8
#defineMS_DELAY_CONST40
/************end*********************/
/****************************************************************************************************************************
**ThefollowingroutinesisforLPC214XARMI/Odefinition.Itisjustasreferenceforprogramusing2-wireand3-wirebus.
**Plsmakeafurtherrevisionforyourroutinesaccordingtothefollowingtype.
****************************************************************************************************************************/
#defineSDA3//P0.3
#defineSCL2//P0.2
#defineSEB5//P0.5
#defineMOD8//P0.8
#defineMCK9//P0.9
#defineCEN10//P0.10
#defineWS7//P0.7
#defineDIN4//P0.4
#defineSCL_1(IO0SET=IO0SET|(1< #defineSCL_0(IO0CLR=IO0CLR|(1< #defineSDA_1(IO0SET=IO0SET|(1< #defineSDA_0(IO0CLR=IO0CLR|(1< #defineSEB_1(IO0SET=IO0SET|(1< #defineSEB_0(IO0CLR=IO0CLR|(1< #defineMOD_1(IO0SET=IO0SET|(1< #defineMOD_0(IO0CLR=IO0CLR|(1< #defineMCK_1(IO0SET=IO0SET|(1< #defineMCK_0(IO0CLR=IO0CLR|(1< #defineCEN_1(IO0SET=IO0SET|(1< #defineCEN_0(IO0CLR=IO0CLR|(1< #defineWS_1(IO0SET=IO0SET|(1< #defineWS_0(IO0CLR=IO0CLR|(1< #defineDIN_1(IO0SET=IO0SET|(1< #defineDIN_0(IO0CLR=IO0CLR|(1< #defineRead_SDA(IO0PIN>>SDA&1) #defineSet_Datain(IO0DIR=IO0DIR&(~(1< #defineSet_Dataout(IO0DIR=IO0DIR|(1< /***************************************************************************************************/ externvoidMsdelay(UINT16dly); externUINT8ChipReset(UINT8Slave); externUINT8QND_ReadReg(UINT8adr); externUINT8QND_WriteReg(UINT8adr,UINT8value); /**thefollowingfunctionsisforotherI2CdevicesratherthanQN800X***/ externUINT8QND_I2C_WRITE(UINT8Regis_Addr,UINT8Data); externUINT8QND_I2C_READ(UINT8Regis_Addr); externUINT8QND_I2C_NREAD(UINT8Regis_Addr,UINT8*buf,UINT8n); externUINT8QND_I2C_NWRITE(UINT8Regis_Addr,UINT8*buf,UINT8n); qnio.c #include"qndriver.h" #include"qnio.h" #defineSPRINTF(a) UINT8qnd_i2c; UINT8qnd_i2c_timeout; UINT8i2cMux=0;//addthisgloabtemptosolveconflickofcalltimerRssicheck()andcall2-wire()atthesametime /***************************************************************************************************** **Name: Msdelay() **Function: timedelay *****************************************************************************************************/ voidMsdelay(UINT16dly) { UINT8i; for(;dly>0;dly--) for(i=0;i } /************************************************************************************************* **Name: I2C_subfunction **Function: Softwarei2ccode *****************************************************************************************************/ voidSet_SCL(UINT8i) { if(i) { SCL_1; } else { SCL_0; } } voidSet_SDA(UINT8i) { if(i){ Set_Datain; } else { Set_Dataout; SDA_0; } } voidStart(void) { Msdelay (1); Set_SCL (1); Msdelay (1); Set_SDA (1); Msdelay (1); Set_SDA(0); Msdelay (2); Set_SCL(0); } voidStop(void) { Msdelay (1); Set_SDA(0); Msdelay (1); Set_SCL (1); Msdelay (2); Set_SDA (1); } voidSend_ACK(UINT8i)//i=0forACKandi=1forNack { Set_SDA(i); Msdelay (1); Set_SCL (1); Msdelay (1); Set_SCL(0); Msdelay (1); Set_SDA (1); } voidCheck_ACK(void) { Set_Datain; Msdelay (1); Set_SCL (1); qnd_i2c_timeout=(UINT8)Read_SDA; Msdelay (1); Set_SCL(0); Set_Dataout; } voidWrite_Bit(UINT8i) { Msdelay (1); Set_SDA(i); Msdelay (1); Set_SCL (1); Msdelay (2); Set_SCL(0); } voidWrite_Byte(UINT8Data) { UINT8i; for(i=0;i<8;i++) { Write_Bit(Data>>7); Data<<=1; } } UINT8Read_Byte(void) { UINT8Data1=0x00; UINT8j; Set_Datain; for(j=0;j<8;j++) { Msdelay (1); Set_SCL (1); Data1=(Data1<<1)|((UINT8)Read_SDA&0x01); Msdelay (1); Set_SCL(0); } Set_Dataout; returnData1; } /************************************************************************************************************ **Name: I2C_Write_1byte **Funcation: writeadatatoadesired **registerthroughi2cbus **Description: Slave---------deviceaddress **Regis_Addr----registeraddress *************************************************************************************************************/ UINT8I2C_Write_1byte(UINT8Slave,UINT8Regis_Addr,UINT8Data) { UINT8temp; temp=Slave; Start(); Write_Byte(temp); Check_ACK(); if(! qnd_i2c_timeout) { Write_Byte(Regis_Addr); Check_ACK(); if(! qnd_i2c_timeout) { Write_Byte(Data); Check_ACK(); } } Stop(); return! qnd_i2c_timeout; } /*********************************************************************************************************** **Name: I2C_Read_1byte **Function: Readadatafromadesiredregister **throughi2cbus **Description: Slave---------deviceaddress **Regis_Addr----registeraddress ************************************************************************************************************/ UINT8I2C_Read_1byte(UINT8Slave,UINT8Regis_Addr) { UINT8Data=0x00; UINT8temp; temp=Slave|0x01; Start(); Write_Byte(Slave); Check_ACK(); if(! qnd_i2c_timeout) { Write_Byte(Regis_Addr); Check_ACK(); if(! qnd_i2c_timeout) { //stop(); Start(); Write_Byte(temp); Check_ACK(); if(! qnd_i2c_timeout) { Data=Read_Byte(); Send_ACK (1); } } } Stop(); returnData; } /*********************************************************************************************************** **Name: I2C_Read_nbyte **Function: Readndatafromadesiredregister **throughi2cbus **Description: Slave---------deviceaddress **Regis_Addr----registeraddress ************************************************************************************************************/ UINT8I2C_Read_nbyte(UINT8Slave,UINT8Regis_Addr,UINT8*buf,UINT8n) { UINT8Data=0x00; UINT8temp; UINT8i; temp=Slave|0x01; Start(); Write_Byte(Slave); Check_ACK(); if(! qnd_i2c_timeout) { Write_Byte(Regis_Addr); Check_ACK(); if(! qnd_i2c_timeout) { //stop(); Start(); Write_Byte(temp); Check_ACK(); if(! qnd_i2c_timeout) { Set_Datain; for(i=0;i buf[i]=Read_Byte(); Send_ACK(0); } buf[i]=Read_Byte(); Send_ACK (1); } } } Stop(); return! qnd_i2c_timeout; } /*********************************************************************************************************** **Name: I2C_Write_nbyte **Function: Writenbytesdatatoregister **throughi2cbus **Description: Slave---------deviceaddress **Regis_Addr----registeraddress ************************************************************************************************************/ UINT8I2C_Write_nbyte(UINT8Slave,UINT8Regis_Addr,UINT8*buf,UINT8n) { UINT8temp; UINT8i; temp=Slave; Start(); Write_Byte(temp); Check_ACK(); if(! qnd_i2c_timeout) { Write_Byte(Regis_Addr); Check_ACK(); for(i=0;(i qnd_i2c_timeout;i++) { Write_Byte(buf[i]); Check_ACK(); } } Stop(); return! qnd_i2c_timeout; } externUINT8qnd_DevIndex; UINT8QND_WriteReg(UINT8Regis_Addr,UINT8Data) { returnQND_I2C_WRITE(Regis_Addr,Data); return1; } UINT8QND_ReadReg(UINT8Regis_Addr) { UINT8Data; Data=QND_I2C_READ(Regis_Addr); returnData; } UINT8QND_I2C_WRITE(UINT8Regis_Addr,UINT8Data) { UINT8ret; UINT8tryCount=I2C_TIMEOUT_COUNT; qnd_i2c=1; while(--tryCount){ ret=I2C_Write_1byte(I2C_DEV0_ADDRESS,Regis_Addr,Data); if(ret)break; } if(! tryCount){ SPRINTF(("QND_I2C_WRITEerror! \n")); return0; } qnd_i2c=0; return1; } UINT8QND_I2C_READ(UINT8Regis_Addr) { UINT8ret; UINT8tryCount=I2C_TIMEOUT_COUNT; qnd_i2c=1; while(--tryCount){ ret=I2C_Read_1byte(I2C_DEV0_ADDRESS,Regis_Addr); if(! qnd_i2c_timeout)break; } if(! tryCount){ SPRINTF(("QND_I2C_READerror! \n")); } qnd_i2c=0; returnret; } UINT8QND_I2C_NREAD(UINT8Regis_Addr,UINT8*buf,UINT8n) { UINT8ret; UINT8tryCount=I2C_TIMEOUT_COUNT; qnd_i2c=1; while(--tryCount){ ret=I2C_Read_nbyte(I2C_DEV0_ADDRESS,Regis_Addr,buf,n); if(! qnd_i2c_timeout)break; } if(! tryCount){ SPRINTF(("QND_I2C_READerror! \n")); } qnd_i2c=0; returnret; } UINT8QND_I2C_NWRITE(UINT8Regis_Addr,UINT8*buf,UINT8n) { UINT8ret; UINT8tryCount=I2C_TIMEOUT_COUNT; qnd_i2c=1; while(--tryCount){ ret=I2C_Write_nbyte(I2C_DEV0_ADDRESS,Regis_Addr,buf,n); if(! qnd_i2c_timeout)break; } if(! tryCount){ SPRINTF(("QND_I2C_READerror! \n")); } qnd_i2c=0; returnret; } /************************************************************************************************************* endfile ******************************************************************************/ qndriver.h /************************************************Copyright(c)*********************************** **Quintic(Nanjing)MicroelectronicsCo,Ltd. ** **http: //www.quinti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QN8035 程序