This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问如何使用 TPS65930 的AD功能

Other Parts Discussed in Thread: TPS65930

我的OMAP 3530 的芯片 使用 TPS65930作为电源管理芯片。

我现在需要使用TPS65930的AD功能。

但是在我编程的时候遇到一个问题:

我在使用 SW1 请求开始进行通道2进行AD转换后 

CTRL_SW1的 CTRL_SW1[0] BUSY始终为1 、CTRL_SW1[1] EOC_SW1始终为0。GPCH2_LSB和GPCH2_HSB 始终为0.

并且如果不断电重启芯片,上述值无法改变。

请问这个可能是在什么问题上出错。

谢谢。

我的代码如下

void adcTest(void)
{


u8 valBuf;
u8 reg;
u8 readBuf;

// 1.关闭中断模式 MADC_IMR1 的 SW1_IMR1,被置为 0 则开启中断 这里不开启
// 为了简单就采取轮寻的方式
valBuf = 0xff;
reg = MADC_IMR1;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

// 2.设置 CTRL1[0], MADCON 为1 开启MADC时钟
// MADC software power on. When set to 1, MADC is powered.
valBuf = 0X01;
reg = CTRL1;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

// 3.设置 SW1SELECT_LSB 和 SW1SELECT_HSB 的相应位为1来选择相应的通道。这里选择通道2
valBuf = (0X01 << 2);
reg = SW1SELECT_LSB;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

valBuf = 0X0;
reg = SW1SELECT_MSB;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

// 4.如果需要取平均值,还可以通过设置 SW1AVERAGE_LSB 和 SW1AVERAGE_HSB 来实现。
// 我不需要平均值就没有设置
valBuf = 0X0;
reg = SW1AVERAGE_LSB;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

valBuf = 0X0;
reg = SW1AVERAGE_MSB;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

// 5.设置 CTRL_SW1[5] SW1 为 1来开始转换。
valBuf = (0X1 << 5);
reg = CTRL_SW1;
twl_i2c_write_u8(TWL4030_MODULE_MADC, valBuf, reg);

// 6.在MADC转换时 CTRL_SW1 的 EOC_SW1 被置为 0.
// 主动等待1s 等待其转换完成,
// 现在发现,只要我进行了第5步,MADC的状态就一直是busy 无法改变
mdelay(1000);
readBuf = 0x00;
reg = CTRL_SW1;
twl_i2c_read_u8(TWL4030_MODULE_MADC, &readBuf, reg);
printk(KERN_ERR "CTRL_SW1 = 0x%x\r\n", readBuf);

// 7.当转换完成后 CTRL_SW1 的 EOC_SW1 被置为 1.此时可以读取 GPCHx_LSB 和 GPCHx_MSB
// 我读取 第二个通道 此时一直读到的值都是0
reg = GPCH2_LSB;
twl_i2c_read_u8(TWL4030_MODULE_MADC, &readBuf, reg);
printk(KERN_ERR "GPCH2_LSB = 0x%x\r\n", readBuf);

reg = GPCH2_MSB;
twl_i2c_read_u8(TWL4030_MODULE_MADC, &readBuf, reg);
printk(KERN_ERR "GPCH2_MSB = 0x%x\r\n", readBuf);


}