5577|6

77

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LM3s学习笔记I2C学习之驱动流水灯 [复制链接]

主控采用LM3s6911,采用PCA9534扩展IO驱动流水灯,PCA9534接口如下图

 

#include "sysinit.h"
#include "pca9534.h"

void I2C_init()
{
  //使能I2C所在端口
  SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOA);
  //使能处理器I2C功能模块
  SysCtlPeripheralEnable( SYSCTL_PERIPH_I2C1);
  //配置必须管脚为I2C功能(类型)
  GPIOPinTypeI2C(GPIO_PORTA_BASE,GPIO_PIN_6|GPIO_PIN_7);
  //配置I2C时钟及传输速率
  I2CMasterInitExpClk(I2C1_MASTER_BASE,SysCtlClockGet(),false);
  I2CMasterEnable(I2C1_MASTER_BASE);
  //使能所需中断
  IntMasterEnable();
  IntEnable(INT_I2C1);
  I2CMasterIntEnable(I2C1_MASTER_BASE);
}


int main()
{
  unsigned int a,i;
  CLOCK_init();
  I2C_init();
  Pca9534Write(0x20,0x03,0x00);
  while(1)
  {
    a=0xfe;
    for(i=0;i<8;i++)
    {
      Pca9534Write(0x20,0x01,a);
      SysCtlDelay(1000*TheSysClock/3000);
      a=a<<1;
      //a=a|0x01;
    }
  }
}

 

#include "sysinit.h"
#include "pca9534.h"

unsigned int iicintcount;

void Pca9534Write(unsigned char addr,unsigned char command,unsigned char data)
{

  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_START);
  //设置从机地址,写模式
  I2CMasterSlaveAddrSet(I2C1_MASTER_BASE,addr,false); 
 
  //放置要发送的控制命令字到I2C master
  I2CMasterDataPut(I2C1_MASTER_BASE,command);
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_CONT);
  while(I2CMasterBusy(I2C1_MASTER_BASE)); 
  I2CMasterDataPut(I2C1_MASTER_BASE,data);
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_FINISH);
  while(I2CMasterBusy(I2C1_MASTER_BASE));  
}

unsigned char Pca9534ReadReg(unsigned char addr,unsigned char command)
{

  unsigned char getdata;
  //设置从机地址,写模式
  I2CMasterSlaveAddrSet(I2C1_MASTER_BASE,addr,false);
 
  //放置要发送的控制命令字到I2C master
 
  I2CMasterDataPut(I2C1_MASTER_BASE,command);

  //发送控制命令字
 
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_START);
 
  while(I2CMasterBusy(I2C1_MASTER_BASE));
 
  //从设备地址+读写位写入发送数据寄存器
 
  I2CMasterSlaveAddrSet(I2C1_MASTER_BASE,addr,true);

 
  //再发从设备地址+读写位
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_RECEIVE_START);
 
  while(I2CMasterBusy(I2C1_MASTER_BASE));
 
 
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_RECEIVE_FINISH );
 
 
  while(I2CMasterBusy(I2C1_MASTER_BASE));
  getdata=I2CSlaveDataGet(I2C1_MASTER_BASE);
 
 
  return getdata;
 

}

unsigned char Pca9534ReadPort(unsigned char addr)
{


  unsigned char getdata;
  //设置从机地址,读模式
  I2CMasterSlaveAddrSet(I2C1_MASTER_BASE,addr,true);
 

  //发送从地址
 
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_RECEIVE_START);
 
  while(I2CMasterBusy(I2C1_MASTER_BASE));
 
 // getdata=I2CSlaveDataGet(I2C0_MASTER_BASE,I2C_MASTER_CMD_BURST_RECEIVE_START);
 
  //发送停止位
 
 
 
  I2CMasterControl(I2C1_MASTER_BASE,I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
 
  while(I2CMasterBusy(I2C1_MASTER_BASE));
 
  getdata=I2CSlaveDataGet(I2C1_MASTER_BASE);
 
  return getdata;


}

void I2C1_ISR(void)
{
I2CMasterIntClear(I2C1_MASTER_BASE);
iicintcount++;


}

最新回复

学习了!谢谢!  详情 回复 发表于 2012-11-16 14:22
 
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

#include "sysinit.h"

//全局时钟变量
unsigned long TheSysClock=12000000UL;
//系统时钟初始化
void CLOCK_init()
{
  SysCtlLDOSet(SYSCTL_LDO_2_75V);                         //  设置LDO输出电压

  SysCtlClockSet(SYSCTL_USE_PLL|                             //设置系统时钟
                SYSCTL_XTAL_8MHZ|
                SYSCTL_SYSDIV_1|
                SYSCTL_OSC_MAIN);

  TheSysClock = SysCtlClockGet();                         //  获取当前的系统时钟频率
}

 

 

//the  must head
#include  <ctype.h>
#include "sysinit.h"

#define ulong unsigned long
#define uchar unsigned char

//  通过UART发送一个字符
void yifan_UART_printfc(const char c)
{
    UARTCharPut(UART2_BASE, c);
}

//  通过UART发送字符串
void yifan_UART_printfs(const char *s)
{
    while(*s!='\0')
    {
     yifan_UART_printfc(*(s++));
    }
}


//  通过UART接收一个字符
char yifan_UART_scanfc(void)
{
    return(UARTCharGet(UART2_BASE));
}
//  功能:通过UART接收字符串,回显,退格<Backspace>修改,回车<Enter>结束
//  参数:*s保存接收数据的缓冲区,只接收可打印字符(ASCII码32~127)
//        size是缓冲区*s的总长度,要求size >= 2(包括末尾'\0',建议用sizeof()来获取)
//  返回:接收到的有效字符数目
int yifan_UART_scanfs(char *s, int size)
{
    char c;
    int n = 0;

    *s = '\0';
    if (size < 2) return(0);
    size--;

    for (;;)
    {
        c = yifan_UART_scanfc();                                     //  接收1个字符
        yifan_UART_printfc(c);                                        //  回显输入的字符

        if (c == '\b')                                      //  遇退格<Backspace>修改
        {
            if (n > 0)
            {
                *(--s) = '\0';
                n--;
                yifan_UART_printfs(" \b");                            //  显示空格和退格<Backspace>
            }
        }

        if (c == '\r')                                      //  遇回车<Enter>结束
        {
            yifan_UART_printfs("\r\n");                               //  显示回车换行<CR><LF>
            break;
        }

        if (n < size)                                       //  如果小于长度限制
        {
            if (isprint(c))                                 //  如果接收到的是可打印字符
            {
                *(s++) = c;                                 //  保存接收到的字符到缓冲区
                *s = '\0';
                n++;
            }
        }
    }

    return(n);                                              //  返回接收到的有效字符数目
}

void yifan_UART_init()
{
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);//使能GPIOG
  GPIOPinTypeUART(GPIO_PORTG_BASE,GPIO_PIN_0|GPIO_PIN_1);//使能GPIOG的Uart Pin
  SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2); //使能UART外设
  GPIOPinConfigure(GPIO_PG0_U2RX);
  GPIOPinConfigure(GPIO_PG1_U2TX);
  UARTConfigSet(UART2_BASE ,115200, UART_CONFIG_WLEN_8 |      //  配置UART,波特率115200,数据位8
                                  UART_CONFIG_STOP_ONE |    //  停止位1
                                  UART_CONFIG_PAR_NONE);    //  无校验
  UARTFIFOLevelSet(UART2_BASE ,                       /*  设置发送和接收的FIFO深度    */
                     UART_FIFO_TX7_8 ,
                     UART_FIFO_RX1_8);
  IntEnable(INT_UART2);                               /*  使能UART0总中断             */
  IntMasterEnable();                                  /*  使能处理器中断              */
  UARTEnable(UART2_BASE);                             /*  使能UART0端口               */
  UARTStdioInit(2);
 
  UARTprintf("UART 初始化成功!\n");
  //yifan_UART_printfs("yifan_UART_init Successed!!\n\n");
  //UARTprintf("yifan_UART_init Successed!!\n\n");
}

 
 

回复

1729

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
楼主辛苦了!
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

4
 
支持下楼主哈
 
 
 

回复

1万

帖子

16

TA的资源

版主

5
 

不错,顶一下

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

6
 
刚看到,不错
 
 
 

回复

121

帖子

0

TA的资源

纯净的硅(初级)

7
 
学习了!谢谢!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表