- 论坛徽章:
- 0
|
紧急求助,gpio口模拟spi读数据的问题,写数据都没问题了,读00h的数据输出的都是1,不知道怎么回事
gpio定义和spi的都不说了,写寄存器没有问题,读寄存器到底怎么回事呢?请大虾帮忙看看
/*这是写寄存器的代码段*/
static void gpio_lcd_emuspi_write_one_para(unsigned short addr, unsigned short para)
{
unsigned int i;
int j;
i = addr | 0x700000;
gpio_direction_output(spi_cs, 0);
/*udelay(4);*/
for (j = 0; j < 24; j++) {
if (i & 0x800000)
gpio_direction_output(spi_sdo, 1);
else
gpio_direction_output(spi_sdo, 0);
gpio_direction_output(spi_sclk, 0);
/*udelay(4);*/
gpio_direction_output(spi_sclk, 1);
/*udelay(4);*/
i <<= 1;
}
gpio_direction_output(spi_cs, 1);
/*udelay(4);*/
i = para | 0x720000;
gpio_direction_output(spi_cs, 0);
/*udelay(4);*/
for (j = 0; j < 24; j++) {
if (i & 0x800000)
gpio_direction_output(spi_sdo, 1);
else
gpio_direction_output(spi_sdo, 0);
gpio_direction_output(spi_sclk, 0);
/*udelay(4);*/
gpio_direction_output(spi_sclk, 1);
/*udelay(4);*/
i <<= 1;
}
gpio_direction_output(spi_cs, 1);
}
/*这是读寄存器的代码段*/
static void gpio_lcd_emuspi_read_one_para(unsigned short addr, uint32 *data)
{
unsigned int i;
int j,ret;
uint32 dbit,bits;
i = addr | 0x700000;
gpio_direction_output(spi_cs, 0);
/*udelay(4);*/
for (j = 0; j < 24; j++) {
if (i & 0x800000)
gpio_direction_output(spi_sdo, 1);
else
gpio_direction_output(spi_sdo, 0);
gpio_direction_output(spi_sclk, 0);
/*udelay(4);*/
gpio_direction_output(spi_sclk, 1);
/*udelay(4);*/
i <<= 1;
}
gpio_direction_output(spi_cs, 1);
/*udelay(4);*/
ret = gpio_direction_input(spi_sdo);
gpio_direction_output(spi_cs, 0);
//udelay(40);
bits=0;
for (j = 0; j < 8; j++) {
bits<<= 1;
gpio_direction_output(spi_sclk, 1);
gpio_direction_output(spi_sclk, 0);
udelay(10);
dbit=gpio_get_value(spi_sdo);
//udelay(45);
//bits = 2*bits+dbit;
bits|=dbit;
}
*data = bits;
gpio_direction_output(spi_cs, 1);
}
datesheet中是在sclk的上升沿读spi的数据的,是不是读程序哪里出问题了?请高手帮忙 |
|