jueenkay 发表于 2015-11-25 12:36:44

[请教]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:12

这芯片子在这里没有多少人用吧

jueenkay 发表于 2015-11-25 15:02:37

ersha4877 发表于 2015-11-25 13:42
这芯片子在这里没有多少人用吧

再请教下UC3的spi接口,CLK信号是CS选中之后一直有,还是只有传SPI操作的时候才有

jueenkay 发表于 2015-11-26 12:33:12

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]
查看完整版本: [请教]UC3+DS3234通过spi先写控制寄存器再读出来,结果全....