Skip to content

Commit

Permalink
i2c test patch
Browse files Browse the repository at this point in the history
  • Loading branch information
abhishek-samsung committed Mar 17, 2022
1 parent b7c52af commit 5d5602f
Show file tree
Hide file tree
Showing 3 changed files with 242 additions and 4 deletions.
225 changes: 225 additions & 0 deletions apps/examples/hello/hello_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,250 @@

#include <tinyara/config.h>
#include <stdio.h>
#include <debug.h>


#include <stdlib.h>
#include <tinyara/i2c.h>

/****************************************************************************
* hello_main
****************************************************************************/
#define byteWrite_DEBUG
#define UART_Printf printf


#define DEVICE_ADDRESS 0x1A // Device address when ADO = 1

#define I2C_FREQ 100000

int counter = 0;

extern int amebad_PA0_set(unsigned int value);

#ifdef CONFIG_BUILD_KERNEL
int main(int argc, FAR char *argv[])
#else
int hello_main(int argc, char *argv[])
#endif
{
#if 1
amebad_PA0_set(0);
lldbg("set gpio0 to low");
sleep(2);
amebad_PA0_set(1);
lldbg("set gpio0 to high");
sleep(2);
FAR struct i2c_dev_s *dev;

dev = up_i2cinitialize(0);

int ret = 0;
FAR struct i2c_config_s config;
uint8_t buf[2];
uint8_t addr[2];

config.frequency = 100000;
config.addrlen = 7;
config.address = 0x1A;

addr[0] = 0x04;
addr[1] = 0x00;

ret = i2c_write(dev, &config, addr, 2);

if (ret != 2) {
lldbg("write fail\n");
return;
}
else lldbg("written 0x%02x to regaddr 0x%02x\n", addr[1], addr[0]);

sleep(2);

ret = i2c_write(dev, &config, addr, 1); // send address 0x01 followed by read command.

if (ret != 1) {
lldbg("write fail\n");
return;
}

ret = i2c_read(dev, &config, buf, 1);

if (ret != 1) {
lldbg("read fail\n");
return;
}

lldbg("read 0x%02x from regaddr 0x%02x\n", buf[0], addr[0]);

sleep(2);

addr[0] = 0x05;
addr[1] = 0x3F;

ret = i2c_write(dev, &config, addr, 2);

if (ret != 2) {
lldbg("write fail\n");
return;
}
else lldbg("written 0x%02x to regaddr 0x%02x\n", addr[1], addr[0]);

sleep(2);

ret = i2c_write(dev, &config, addr, 1); // send address 0x01 followed by read command.

if (ret != 1) {
lldbg("write fail\n");
return;
}

ret = i2c_read(dev, &config, buf, 1);

if (ret != 1) {
lldbg("read fail\n");
return;
}

lldbg("read 0x%02x from regaddr 0x%02x\n", buf[0], addr[0]);

sleep(2);

addr[0] = 0x03; // write to regaddr 0x01 value 0x00
addr[1] = 0x01;

ret = i2c_write(dev, &config, addr, 2);

if (ret != 2) {
lldbg("write fail\n");
return;
}
else lldbg("written 0x%02x to regaddr 0x%02x\n", addr[1], addr[0]);

sleep(2);

ret = i2c_write(dev, &config, addr, 1); // send address 0x01 followed by read command.

if (ret != 1) {
lldbg("write fail\n");
return;
}

ret = i2c_read(dev, &config, buf, 1);

if (ret != 1) {
lldbg("read fail\n");
return;
}


lldbg("read 0x%02x from regaddr 0x%02x\n", buf[0], addr[0]);

sleep(2);

addr[0] = 0x01;
addr[1] = 0x00;

for (int i = 0; i < 6; i++) {
ret = i2c_write(dev, &config, addr, 2);

if (ret != 2) {
lldbg("write fail\n");
return;
}
else lldbg("written 0x%02x to regaddr 0x%02x\n", addr[1], addr[0]);
}

sleep(2);

ret = i2c_write(dev, &config, addr, 1); // send address 0x01 followed by read command.

if (ret != 1) {
lldbg("write fail\n");
return;
}

ret = i2c_read(dev, &config, buf, 1);

if (ret != 1) {
lldbg("read fail\n");
return;
}

lldbg("read 0x%02x from regaddr 0x%02x\n", buf[0], addr[0]);

sleep(2);

addr[0] = 0x2A; // write to regaddr 0x01 value 0x00
addr[1] = 0xCC;

ret = i2c_write(dev, &config, addr, 2);

if (ret != 2) {
lldbg("write fail\n");
return;
}
else lldbg("written 0x%02x to regaddr 0x%02x\n", addr[1], addr[0]);

sleep(2);

ret = i2c_write(dev, &config, addr, 1); // send address 0x01 followed by read command.

if (ret != 1) {
lldbg("write fail\n");
return;
}

ret = i2c_read(dev, &config, buf, 1);

if (ret != 1) {
lldbg("read fail\n");
return;
}


lldbg("read 0x%02x from regaddr 0x%02x\n", buf[0], addr[0]);

sleep(2);

addr[0] = 0x2B; // master volume fine
addr[1] = 0x03;

ret = i2c_write(dev, &config, addr, 2);

if (ret != 2) {
lldbg("write fail\n");
return;
}
else lldbg("written 0x%02x to regaddr 0x%02x\n", addr[1], addr[0]);

sleep(2);

ret = i2c_write(dev, &config, addr, 1); // send address 0x01 followed by read command.

if (ret != 1) {
lldbg("write fail\n");
return;
}

ret = i2c_read(dev, &config, buf, 1);

if (ret != 1) {
lldbg("read fail\n");
return;
}


lldbg("read 0x%02x from regaddr 0x%02x\n", buf[0], addr[0]);

#else
sleep(2);
counter++;
printf("Hello, World!!\n");
if (counter == 3) {
printf("registering i2s driver\n");
struct i2s_dev_s *i2s = amebad_i2s_initialize(0);
}
#endif
return 0;
}
17 changes: 13 additions & 4 deletions os/arch/arm/src/amebad/amebad_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -765,7 +765,7 @@ static int amebad_i2c_isr_process(struct amebad_i2c_priv_s *priv)

if ((w_msgv->flags & I2C_M_READ) == 0) {

i2cinfo("i2c writing");
lldbg("i2c writing");
#ifdef CONFIG_I2C_SLAVE

i2c_slave_read(priv->i2c_object, &read_restart, 1);
Expand All @@ -778,7 +778,7 @@ static int amebad_i2c_isr_process(struct amebad_i2c_priv_s *priv)
}
if ((r_msgv->flags & I2C_M_READ) != 0) {

i2cinfo("i2c reading");
lldbg("i2c reading");
#ifdef CONFIG_I2C_SLAVE

ret = i2c_slave_read(priv->i2c_object, r_msgv->buffer, r_msgv->length);
Expand All @@ -792,24 +792,33 @@ static int amebad_i2c_isr_process(struct amebad_i2c_priv_s *priv)

if ((w_msgv->flags & I2C_M_READ) == 0) {

i2cinfo("i2c writing");
#ifdef CONFIG_I2C_SLAVE

i2c_slave_set_for_rd_req(priv->i2c_object, 1);
ret = i2c_slave_write(priv->i2c_object, w_msgv->buffer, w_msgv->length);
#else
ret = rtk_i2c_write(priv->i2c_object, priv->msgv->addr, w_msgv->buffer, w_msgv->length, 1);
#endif
lldbg("i2c writing - priv->msgv->addr = 0x%x, w_msgv->buffer = 0x%x 0x%x, w_msgv->length = 0x%x\n", priv->msgv->addr, w_msgv->buffer[0], w_msgv->buffer[1], w_msgv->length);
if(ret != w_msgv->length) {
lldbg("write length is not successful - ret = %d, w_msgv->length = %d\n", ret, w_msgv->length);
ret = -1;
}
}
else if ((w_msgv->flags & I2C_M_READ) != 0) {

i2cinfo("i2c reading");

#ifdef CONFIG_I2C_SLAVE

ret = i2c_slave_read(priv->i2c_object, w_msgv->buffer, w_msgv->length);
#else
ret = rtk_i2c_read(priv->i2c_object, priv->msgv->addr, w_msgv->buffer, w_msgv->length, 1);
#endif
lldbg("i2c reading - priv->msgv->addr = 0x%x, w_msgv->buffer = 0x%x\n", priv->msgv->addr, w_msgv->buffer[0]);
if(ret != w_msgv->length) {
lldbg("read length is not successful - ret = %d, w_msgv->length = %d\n", ret, w_msgv->length);
ret = -1;
}
}

#endif /* #ifdef CONFIG_I2C_WRITEREAD */
Expand Down
4 changes: 4 additions & 0 deletions os/arch/arm/src/amebad/amebad_lowerhalf.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@ int amebad_gpio_write(PinName pin, FAR unsigned int value) {
gpio_write(&p, value);
}

int amebad_PA0_set(FAR unsigned int value) {
return amebad_gpio_write(_PA_0, value);
}

/****************************************************************************
* Name: amebad_gpio_get
*
Expand Down

0 comments on commit 5d5602f

Please sign in to comment.