#include <stdio.h>
#include <string.h>
#include <stdbool.h>
/* XDCtools Header files */
#include <xdc/std.h>
#include <xdc/runtime/System.h>
/* BIOS Header files */
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Task.h>
/* TI-RTOS Header files */
#include <ti/drivers/PIN.h>
#include <ti/drivers/I2C.h>//modify
#include <ti/drivers/i2c/I2CCC26XX.h>
#include <ti/drivers/GPIO.h>
/* Board Header files */
#include "Board.h"
#include "I2Ctest.h"
#define RX6110
#define SCL_PIN Board_I2C_SCL
#define SDA_PIN Board_I2C_SDA
#define SCL_PIN_HIGHT GPIO_write(SCL_PIN,1)
#define SCL_PIN_LOW GPIO_write(SCL_PIN,0)
#define SDA_OUT (GPIO_setConfig(SDA_PIN, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW))
#define SDA_IN (GPIO_setConfig(SDA_PIN, GPIO_CFG_INPUT))
#define SDA_PIN_HIGHT GPIO_write(SDA_PIN,1)
#define SDA_PIN_LOW GPIO_write(SDA_PIN,0)
#define SDA_PIN_READ GPIO_read(SDA_PIN)
/* Pin driver handle */
static PIN_Handle ledPinHandle;
static PIN_State ledPinState;
#define TASKSTACKSIZE 1024
static Task_Struct task0Struct;
static Char task0Stack[TASKSTACKSIZE];
void IIC_PIN_Init(void);
void IIC_Start(void);
void IIC_Stop(void);
void Write_IIC_Byte(unsigned char IIC_Byte);
void Write_Add(uint8_t add,uint8_t wdata,uint8_t comd);
uint8_t Read_Add(uint8_t add,uint8_t comd);
bool IIC_WaitAck(void);
void IIC_NOAck(void);
static I2C_Handle handle;
static I2C_Params params;
static I2C_Transaction i2cTrans;
void delay_ms(uint32_t i)
{
while(i--)
{
int j=1000;
while(j--);
}
}
void IIC_Start(void)
{
SDA_OUT;
SDA_PIN_HIGHT;
SCL_PIN_HIGHT;
// SDA_PIN_HIGHT;
SDA_OUT;
SDA_PIN_LOW;
SCL_PIN_LOW;
}
/**********************************************
//IIC Stop
停止条件:当SCL为高电平时,SDA由低电平向高电平的转�?
**********************************************/
void IIC_Stop(void)
{
SDA_OUT;
SDA_PIN_LOW;
SCL_PIN_HIGHT;
SDA_OUT;
SDA_PIN_HIGHT;
SCL_PIN_LOW;
}
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(IIC_Byte & 0x80)
{
SDA_OUT;
SDA_PIN_HIGHT;
}
else
{
SDA_OUT;
SDA_PIN_LOW;
}
SCL_PIN_HIGHT;
SCL_PIN_LOW;
IIC_Byte<<=1;
}
SDA_OUT;
SDA_PIN_HIGHT;
SCL_PIN_HIGHT;
SCL_PIN_LOW;
}
uint8_t Read_IIC_Byte(void)
{
uint8_t rdata=0,i=0;
SCL_PIN_LOW;
SDA_IN;
for(i=0;i<8;i++)
{
SCL_PIN_HIGHT;
rdata= (rdata << 1) | SDA_PIN_READ;
SCL_PIN_LOW;
}
return rdata;
}
bool IIC_WaitAck(void)
{
SCL_PIN_LOW;
SDA_OUT;
SDA_PIN_HIGHT;
SCL_PIN_HIGHT;
SDA_IN;
if(SDA_PIN_READ)
{
SCL_PIN_LOW;
return false;
}
else
{
SCL_PIN_LOW;
return true;
}
}
void IIC_NOAck(void)
{
SCL_PIN_LOW;
SDA_OUT;
SDA_PIN_HIGHT;
SCL_PIN_HIGHT;
SCL_PIN_LOW;
}
void IIC_Ack(void)
{
SCL_PIN_LOW;
SDA_OUT;
SDA_PIN_LOW;
SCL_PIN_HIGHT;
SCL_PIN_LOW;
}
void Write_Add(uint8_t add,uint8_t comd,uint8_t wdata)
{
IIC_Start(); //����һ����ʼ�ź�
Write_IIC_Byte(add);
Write_IIC_Byte(comd);
Write_IIC_Byte(wdata);
IIC_Stop(); //����һ����ֹ�ź�
}
uint8_t Read_Add(uint8_t add,uint8_t comd)
{
uint8_t tdata; //�ȴ���Ӧ
IIC_Start(); //�ٲ���һ����ʼ�ź�
Write_IIC_Byte(add);
Write_IIC_Byte(comd);
IIC_Start(); //�ٲ���һ����ʼ�ź�
Write_IIC_Byte(add+1);
tdata = Read_IIC_Byte();
IIC_NOAck();
IIC_Stop(); //����һ����ֹ�ź�
return tdata;
}
static uint8_t bbb(UArg arg0, UArg arg1)
{
/* Create I2C for usage *****************/
I2C_Params_init(¶ms);
params.bitRate = I2C_100kHz;
//params.transferMode = I2C_MODE_BLOCKING;//I2C_MODE_CALLBACK;
handle = I2C_open(Board_I2C, ¶ms);
if (handle == NULL) {
System_abort("Error Initializing I2C\n");
}
else {
System_printf("I2C Initialized!\n");
}
/* Complete I2C creating for usage**********/
Task_sleep(1000000 / Clock_tickPeriod);
Write_Add(0x64,0x17,0xa8);
return 0;
}
/*
* ======== main =================================================================================================
*/
int rx6110main1(void)
{
Task_Params taskParams;
/* Call board init functions */
Board_initGeneral();
Board_initI2C();
/* Construct g_sensor Task thread */
Task_Params_init(&taskParams);
taskParams.stackSize = TASKSTACKSIZE;
taskParams.stack = &task0Stack;
Task_construct(&task0Struct, (Task_FuncPtr)bbb, &taskParams, NULL);
/* Start BIOS */
BIOS_start();
return (0);
}