大家有用过TDC-GP21时间数字转换芯片吗,在做激光测距有些问题请教!

2019-07-21 06:47发布

我用这芯片可以正常的配置寄存器,测试SPI通信也能通过,但是在模拟测试时间时出现了问题,不能触发中断,延时读结果寄存器的数据也是0.  不知道是什么原因
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
Glove
1楼-- · 2019-07-23 03:55
 精彩回答 2  元偷偷看……
半日键盘侠
2楼-- · 2019-07-23 09:04
你好,我在spi通信就遇到了问题,看了好多例程、源码,都不管用。只要写了端口初始化、复位、测试这几部分的代码

#include "gp21.h"

void DelayNS(unsigned long dly)
{
        unsigned int  i;
                for(i=0;i<dly;i++);
}

void SPI2_TDC_INIT(void)
{
        GPIO_InitTypeDef  GPIO_Initure;
        __HAL_RCC_GPIOE_CLK_ENABLE();

        GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_14;
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;                     //高速
    HAL_GPIO_Init(GPIOE,&GPIO_Initure);

        GPIO_Initure.Pin=GPIO_PIN_13;
    GPIO_Initure.Mode=GPIO_MODE_INPUT;                  //输入
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    HAL_GPIO_Init(GPIOE,&GPIO_Initure);
}

void TDC_Configuration(void)
{
        GPIO_InitTypeDef GPIO_Initure;
       
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOG_CLK_ENABLE();
       
        GPIO_Initure.Pin=GPIO_PIN_11;//GPIO_PIN_9|GPIO_PIN_10|
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;                     //高速
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);

        GPIO_Initure.Pin=GPIO_PIN_5;//|GPIO_PIN_7
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;                     //高速
    HAL_GPIO_Init(GPIOG,&GPIO_Initure);
}

void TDC_RESET(void)
{
        SET_TDC_RESET();
        DelayNS(100);
        CLR_TDC_RESET();
        DelayNS(100);
        SET_TDC_RESET();
        DelayNS(100);
}

unsigned char Test_SPI_Communicate(void)
{

        int register1 = 0x81ffffff;

        unsigned char test_reg=0xb4; //读结果寄存器5,反映寄存器1 的高8 位
        unsigned char test_reg0=0x00;
//         unsigned char test_reg1=0x81; //读结果寄存器5,反映寄存器1 的高8 位

        DelayNS(500);
        CLR_TDC_NSS();
        DelayNS(5);
        for (int i=0;i<32;i++)
        {
                SET_TDC_SCK();
                DelayNS(5);
                if (register1&0x80000000)
                {
                        SET_TDC_SI();
        }
                else
                        CLR_TDC_SI();
                DelayNS(5);
                CLR_TDC_SCK();
                DelayNS(5);
                register1=register1<<1;
        }
        DelayNS(5);
        SET_TDC_NSS();


        DelayNS(500);
        CLR_TDC_NSS();
        DelayNS(5);
        for (int i=0;i<8;i++)
        {
                SET_TDC_SCK();
                DelayNS(5);
                if (test_reg&0x80)
                        SET_TDC_SI();
                else
                        CLR_TDC_SI();
                DelayNS(5);
                CLR_TDC_SCK();
                DelayNS(5);
                test_reg=test_reg<<1;
        }

        for(int j=0;j<8;j++)
        {
                SET_TDC_SCK();
                DelayNS(5);
                test_reg0=test_reg0<<1;
                if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_13) ==0)
                {
                        test_reg0 &=0x01;
                }
                else
                {
                        test_reg0 |=0x01;
                }
                CLR_TDC_SCK();
                DelayNS(5);
        }
        SET_TDC_NSS();
     return test_reg0;
}

大哥们,可以看看问题在哪吗
Glove
3楼-- · 2019-07-23 09:45
半日键盘侠 发表于 2018-11-28 15:30
你好,我在spi通信就遇到了问题,看了好多例程、源码,都不管用。只要写了端口初始化、复位、测试这几部分 ...

因为不知道你的硬件情况,你应该先检查你的SPI,SPI通信成功以后才能对TDC进行配置
半日键盘侠
4楼-- · 2019-07-23 14:47
Glove 发表于 2018-12-3 08:23
因为不知道你的硬件情况,你应该先检查你的SPI,SPI通信成功以后才能对TDC进行配置

谢谢你,是硬件问题,已解决
半日键盘侠
5楼-- · 2019-07-23 16:44
半日键盘侠 发表于 2018-12-3 10:42
谢谢你,是硬件问题,已解决

tdc中断有五种可以配置,我看手册,中断配置是可以五种中断同时配置为1的,那么在中断回调函数处理的时候,如何知道是那种情况触发的中断。
Glove
6楼-- · 2019-07-23 20:40
 精彩回答 2  元偷偷看……

一周热门 更多>