[请教]UC3+DS3234通过spi先写控制寄存器再读出来,结果全....
void ds_write_cmd(U8 addr,U8 data){
spi_selectChip(COMM_SPI0,DS3234_SPI_REG);
spi_put(&AVR32_SPI0,addr);
spi_put(&AVR32_SPI0,data);
spi_unselectChip(COMM_SPI0,DS3234_SPI_REG);
}
unsigned char ds_read_data(U8 addr)
{
unsigned char tem;
spi_selectChip(COMM_SPI0,DS3234_SPI_REG);
spi_put(COMM_SPI0,addr);
tem=spi_get(COMM_SPI0);
spi_unselectChip(COMM_SPI0,DS3234_SPI_REG);
return tem;
}
初始化spi:boadrate 500000,8位,模式3
用过3234的指导下 这芯片子在这里没有多少人用吧 ersha4877 发表于 2015-11-25 13:42
这芯片子在这里没有多少人用吧
再请教下UC3的spi接口,CLK信号是CS选中之后一直有,还是只有传SPI操作的时候才有 void init_spi0_2_gpio()
{
gpio_enable_gpio_pin(DS_S_CS);
gpio_enable_gpio_pin(DS_S_MOSI);
gpio_enable_gpio_pin(DS_S_MISO);
gpio_enable_gpio_pin(DS_S_SCLK);
gpio_set_gpio_pin(DS_S_CS);
}
//////////////////////////////////////////////////
//空闲时钟低,下降沿写入数据,
void ds_write_cmd(unsigned char addr,unsigned char data)
{
unsigned char i;
gpio_clr_gpio_pin(DS_S_CS);
gpio_clr_gpio_pin(DS_S_SCLK);
delay_us(3);
for (i=0;i<8;i++)
{
gpio_set_gpio_pin(DS_S_SCLK);
delay_us(1);
if (GET_BIT(addr,(7-i)))
{
gpio_set_gpio_pin(DS_S_MOSI);
}
else
{
gpio_clr_gpio_pin(DS_S_MOSI);
}
delay_us(1);
gpio_clr_gpio_pin(DS_S_SCLK);
delay_us(3);
}
delay_us(1);
for (i=0;i<8;i++)
{
gpio_set_gpio_pin(DS_S_SCLK);
delay_us(1);
if (GET_BIT(data,(7-i)))
{
gpio_set_gpio_pin(DS_S_MOSI);
}
else
{
gpio_clr_gpio_pin(DS_S_MOSI);
}
delay_us(1);
gpio_clr_gpio_pin(DS_S_SCLK);
delay_us(3);
}
delay_us(1);
gpio_set_gpio_pin(DS_S_CS);
}
/////////////////////////////////
unsigned char ds_read_data(unsigned char addr)
{
unsigned char i,cm_data=0;
gpio_clr_gpio_pin(DS_S_CS);
gpio_clr_gpio_pin(DS_S_SCLK);
delay_us(3);
for (i=0;i<8;i++)
{
gpio_set_gpio_pin(DS_S_SCLK);
delay_us(1);
if (GET_BIT(addr,(7-i)))
{
gpio_set_gpio_pin(DS_S_MOSI);
}
else
{
gpio_clr_gpio_pin(DS_S_MOSI);
}
delay_us(1);
gpio_clr_gpio_pin(DS_S_SCLK);
delay_us(3);
}
delay_us(1);
for (i=0;i<8;i++)
{
gpio_set_gpio_pin(DS_S_SCLK);
delay_us(1);
if (1==gpio_get_pin_value(DS_S_MISO))
{
SET_BIT(cm_data,(7-i));
}
else
{
delay_us(1);
}
delay_us(1);
gpio_clr_gpio_pin(DS_S_SCLK);
delay_us(3);
}
gpio_set_gpio_pin(DS_S_CS);
return cm_data;
}
#define SET_BIT(val, bitn) (val |=(1<<(bitn)))
#define CLR_BIT(val, bitn) (val&=~(1<<(bitn)))
#define GET_BIT(val, bitn) (val &(1<<(bitn)) )
最后用GPIO做的 需要的可以参考一下
页:
[1]