• 大小: 22KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: pcm5242  I2C源码  

资源简介

TI PCM5242 miniDSP配置源码 简易的I2C通信协议适用于STM8 STM32,源码内含I2C协议代码及PCM5242的源码,想要学习的可以直接下载做简单修改便可以启动

资源截图

代码片段和文件信息


#include “stm32f0xx.h“
#include “defines.h“
#include “I2C_drv.h“
#include “Delay.h“



GPIO_InitTypeDef I2C_SDA_InitStr;

void I2C_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB ENABLE); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB &GPIO_InitStructure);

}
void SDA_Set_Out(void)
{
I2C_SDA_InitStr.GPIO_Pin = GPIO_Pin_7;
I2C_SDA_InitStr.GPIO_Mode = GPIO_Mode_OUT;
I2C_SDA_InitStr.GPIO_OType = GPIO_OType_PP;
I2C_SDA_InitStr.GPIO_Speed = GPIO_Speed_50MHz;
I2C_SDA_InitStr.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB &I2C_SDA_InitStr);
}

void SDA_Set_Input(void)
{
I2C_SDA_InitStr.GPIO_Pin = GPIO_Pin_7;
I2C_SDA_InitStr.GPIO_Mode = GPIO_Mode_IN;
I2C_SDA_InitStr.GPIO_OType = GPIO_OType_PP;
I2C_SDA_InitStr.GPIO_Speed = GPIO_Speed_50MHz;
I2C_SDA_InitStr.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB &I2C_SDA_InitStr);
}



/////////////////////////////////////////////////////////////////

void I2C_start(void)
{
SDA_Set_Out();
I2C_SDA(HIGH);  // sda high firstly
I2C_SCL(HIGH);
delay_us(dly_time_clk);

I2C_SDA(LOW);
delay_us(dly_time_clk);
I2C_SCL(LOW);
delay_us(dly_time_clk);
}

void I2C_stop(void)
{
SDA_Set_Out();
I2C_SDA(LOW);
I2C_SCL(LOW);
delay_us(dly_time_clk);

I2C_SCL(HIGH);
delay_us(dly_time_clk);
I2C_SDA(HIGH);
delay_us(dly_time_clk);
}

// master send nack
void I2C_nack(void)
{
I2C_SCL(LOW);
SDA_Set_Out();
I2C_SDA(HIGH); 
delay_us(dly_time_clk);
I2C_SCL(HIGH);

delay_us(dly_time_clk);
I2C_SCL(LOW);
}


void I2C_ack(void)
{
I2C_SCL(LOW);
SDA_Set_Out();
I2C_SDA(LOW);
   delay_us(dly_time_clk);
I2C_SCL(HIGH);
   delay_us(dly_time_clk);
I2C_SCL(LOW);
}


unsigned char I2C_wait_ack(void)
{
unsigned char ErrTime=0;
SDA_Set_Input(); 
I2C_SDA(HIGH);
   delay_us(dly_time_clk);
I2C_SCL(HIGH);
   delay_us(dly_time_clk);

while(I2C_READ_SDA)
{
ErrTime++;
if(ErrTime>250)
{
I2C_stop();
return 1;
}
}
I2C_SCL(LOW);    
return 0;  
}

void I2C_send_byte(unsigned char txd)
{
unsigned char n = 8;
SDA_Set_Out();
I2C_SCL(LOW);
while ((n--)!=0)
{
if ((txd & 0x80)!=0)
{
I2C_SDA(HIGH);
}
else
{
I2C_SDA(LOW);
}
txd <<= 1;
delay_us(dly_time_clk);
I2C_SCL(HIGH);
delay_us(dly_time_clk);

I2C_SCL(LOW);  // note: scl normal low

delay_us(dly_time_clk);

}
}
      

unsigned char I2C_read_byte(unsigned char ack)
{
unsigned char i =8 receive=0;
SDA_Set_Input();
   while ((i--)!=0)
{
        I2C_SCL(LOW);
delay_us(dly_time_clk);
I2C_SCL(HIGH);
        receive<<=1;
        if(I2C_READ_SDA) 
receive++;   
delay_us(dly_time_clk);
    }  
    if (

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4796  2017-08-28 14:57  I2C_drv.c
     文件        1324  2017-08-21 11:22  I2C_drv.h
     文件      196483  2017-07-17 13:52  PCM5242.c
     文件        1973  2017-07-03 16:10  PCM5242.h

评论

共有 条评论