TI BLE CC2541的I2C主模式

由于要写TM1680, 写命令跟写数据, 所以需要使用CC2541的I2C, 2541是有硬件I2C的.

tm1680.c:

#include "tm1680.h"

//TM1680是先发送配置, 然后发送数据.
void masterConfig(void);
void masterSendData(void);

void sendTest(void){
    //uint8 buffer[24]={0x0f,0x0e};
    //HalI2CWrite(2, buffer);
    //HalI2CRead(2,buffer);
    masterConfig();
    masterSendData();
}

void masterConfig(void){
    uint8 configArray[]={SYSDIS,COM16NMOS,RCMODE1,SYSEN,LEDON};
    HalI2CWrite(5, configArray);
}

//只有一个值得说的点, TM1680要先发送起始的页地址, 然后发送32位的数据.
void masterSendData(void){
    uint8 dataArray[33];
    int i=0;
    dataArray[0]=0x00;
    for(i=1;i<33;i++){
        dataArray[i]=0xFF;
    }
    HalI2CWrite(33, dataArray);

}

void   HalTM1680Init(uint8 dev_addr )
{
  HalI2CInit(dev_addr, i2cClock_533KHZ);
}

tm1680.h定义了一些命令的别名:

#ifndef HAL_TM1680_H
#define HAL_TM1680_H
#include "hal_i2c.h"

#include "hal_types.h"

#define SYSDIS             0x80
#define SYSEN             0x81
#define LEDOFF             0x82
#define LEDON           0x83
#define BLINKOFF         0x88
#define BLINK2HZ         0x89
#define BLINK1HZ         0x8A
#define BLINK0_5HZ     0x8B

#define SLAVEMODE      0x90
#define RCMODE0          0x98
#define RCMODE1          0x9A
#define EXTCLK0          0x9C
#define EXTCLK1          0x9E

#define COM8NMOS    0xA0
#define COM16NMOS    0xA4
#define COM8PMOS    0xA8
#define COM16PMOS    0xAC

void HalTM1680Init(uint8 dev_addr);
void sendTest(void);

#endif

唯一的问题是硬件I2C两个byte中间等待了很久, 不知道为啥, 回头试试模拟的I2C吧.

原文地址:https://www.cnblogs.com/Montauk/p/5801974.html