求助各位大神,SCCB为什么没有应答信号???

2019-07-24 13:53发布

//*********************************
//±????ò??SCCB???????????ú??
//??×÷??????2014.07.22
//********************
#include "SCCB.h"

//********************************************
//????×÷??????????SCCB??I/O????
//????????void SCCB_Init(void)
//·?????????
//********************************************
void SCCB_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);//????I2C0???±??
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//????I2C0???????????±??
GPIOPinConfigure(GPIO_PB2_I2C0SCL);//????PB2??SCL
GPIOPinConfigure(GPIO_PB3_I2C0SDA);//????PB3??SDL
//GPIOPinTypeI2C(GPIO_PORTB_BASE,GPIO_PIN_2|GPIO_PIN_3);//????PB2??PB3???????à??
GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2);
  GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3);
HWREG(I2C0_BASE + I2C_O_MCR) |= 0x01;

GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_PIN_2);//????????

GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_3,GPIO_PIN_3);//
SCCB_SDA_OUT();//?è??SDA??????????
}
//**********************************************
//SCCB????????
//?±?±?????????±?ò,??????????????,??SCCB????????
//???¤??×?????,SDA??SCL?ù????????
//**********************************************
void SCCB_Start(void)
{
    SCCB_SDA1;     //????????????   
    SCCB_SCL1;    //???±?????????±?ò??????????????
    delay_Nus(50);  
    SCCB_SDA0;
    delay_Nus(50);  
    SCCB_SCL0;    //??????????????????????×÷????±???  
}
//***********************************************
//SCCB????????
//?±?±?????????±?ò,??????????????,??SCCB????????
//????×?????,SDA,SCL?ù????????
//***********************************************
void SCCB_Stop(void)
{
    SCCB_SDA0;
    delay_Nus(50);  
    SCCB_SCL1;
    delay_Nus(50); 
    SCCB_SDA1;
    delay_Nus(50);

//**********************************************
//?ú?úNA????
//**********************************************
void SCCB_No_Ack(void)
{
delay_Nus(50);
SCCB_SDA1;
SCCB_SCL1;
delay_Nus(50);
SCCB_SCL0;
delay_Nus(50);
SCCB_SDA0;
delay_Nus(50);
}
void SCCB_Ack(void)
{
SCCB_SDA_OUT();
  SCCB_SDA1;
  delay_Nus(50);
  SCCB_SCL1;
  delay_Nus(50);
SCCB_SCL0;
  delay_Nus(50);
  SCCB_SDA1;

}
//*********************************************
//SCCB,????????×???
//·?????:0,????;1,?§°?. 
//*********************************************
uint8_t SCCB_WR_Byte(uint8_t dat)
{
uint8_t j,res;  
for(j=0;j<8;j++) //???·8??·???????
{
if(dat&0x80)SCCB_SDA1;
else SCCB_SDA0;
dat<<=1;
delay_Nus(50);
SCCB_SCL1;
delay_Nus(50);
SCCB_SCL0;   
}  
SCCB_SDA_IN(); //?è??SDA?????? 
delay_Nus(50);
SCCB_SCL1; //??????????,????????·?·???????
delay_Nus(50);
if(SCCB_READ_SDA)res=1;  //SDA=1·????§°???·???1
else res=0;         //SDA=0·?????????·???0
SCCB_SCL0;  
SCCB_SDA_OUT(); //?è??SDA??????    
return res;  
}  
//****************************************************
//SCCB ????????×???
//??SCL????????,????????
//·?????:??????????
//****************************************************
uint8_t SCCB_RD_Byte(void)
{
uint8_t temp=0,j;    
SCCB_SDA_IN(); //?è??SDA??????  
for(j=8;j>0;j--) //???·8??????????
{      
delay_Nus(50);
SCCB_SCL1;
temp=temp<<1;
if(SCCB_READ_SDA)temp++;   
delay_Nus(50);
SCCB_SCL0;
}
SCCB_SDA_OUT(); //?è??SDA??????    
return temp;
}
/***************************************************************************
??    ????unsigned char WrCmos7670(unsigned char regID, unsigned char regDat)
??    ?????òCMOS???¨?????÷??????
??????????regID  ???¨?????÷???·
          regDat ?????????¨?????÷???? 
??????????1    ????????
          0    ?????§°?
??    ?÷??
?÷??·?·¨??m=WrCmos7670(0x3a,0x04);
***************************************************************************/
uint8_t WrCmos7670(uint8_t reg, uint8_t data)
{
uint8_t res=0;
SCCB_Start(); //????SCCB????
if(SCCB_WR_Byte(SCCB_ID))res=1; //???÷??ID  
delay_Nus(100);
  if(SCCB_WR_Byte(reg))res=1; //???????÷???·  
delay_Nus(100);
  if(SCCB_WR_Byte(data))res=1; //??????  
  SCCB_Stop();  
  return res;
}  

uint8_t rdCmos7670Reg(uint8_t reg)//???????÷
{
uint8_t val=0;
SCCB_Start(); //????SCCB????
SCCB_WR_Byte(SCCB_ID); //???÷??ID  
delay_Nus(100);  
  SCCB_WR_Byte(reg); //???????÷???·  
delay_Nus(100);  
SCCB_Stop();   
delay_Nus(100);   
//?è???????÷???·?ó????????
SCCB_Start();
SCCB_WR_Byte(SCCB_ID|0X01); //·??????ü??  
delay_Nus(100);
  val=SCCB_RD_Byte(); //????????
  SCCB_No_Ack();
  SCCB_Stop();
  return val;
}






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
正点原子
1楼-- · 2019-07-24 18:26
慢慢调试,先确定硬件没问题.
zsy3830
2楼-- · 2019-07-24 18:35
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-24 23:23
回复【3楼】zsy3830:
---------------------------------
看不出什么问题,不好意思.
刺客mfl
4楼-- · 2019-07-25 05:02
回复【3楼】zsy3830:
---------------------------------
请问老兄解决了吗    我也遇到这样的问题  不知道怎么解决
wangyueming
5楼-- · 2019-07-25 05:21
回复【4楼】正点原子:
---------------------------------
我想问一下,战舰的F103为什么不用I2C,而是用GPIO去模拟SCCB?我用I2C做SCCB接口,结果读出来的ID号总是0xFFFF,是不是I2C不能用作SCCB接口啊?
正点原子
6楼-- · 2019-07-25 05:43
回复【6楼】wangyueming:
---------------------------------
硬件IIC??
sccb和标准IIC是有区别的...无法用硬件IIC
另外,硬件IICbug多多,不屑用

一周热门 更多>