打印
[DSP编程]

【讨论】F28835 SPI与AD7843通讯

[复制链接]
1839|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pinda_|  楼主 | 2014-4-19 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        最近,在搞SPI与AD7843通讯,采用外部中断采样,通过对DIN/DOUT/DCLK三个脚,用示波器抓波形,发现,SPI通讯有问题,波形上没有输出和输入。程序如下:
void InitGpio(void)

                    GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;                                // SPI SIMOA
        GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;                                // SPI SOMIA
        GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;                                // SPI CLK


/*******************************************************************************
* Function Name  : InitSpi
* Description    : Initialize spi model
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void InitSpi(void)
{
        InitSpia();
}

/*******************************************************************************
* Function Name  : InitSpia
* Description    : Initialize spia model
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void InitSpia(void)
{
        SpiaCtlInit();
}

/*******************************************************************************
* Function Name  : SpiaCtlInit
* Description    : Initialize spia ctrl model
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SpiaCtlInit(void)
{
        EALLOW;

        SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;                /* 移位时钟极性,下降输出,上升输入 */
        SpiaRegs.SPICCR.bit.SPILBK = 0;                                /* no loopback mode */
        SpiaRegs.SPICCR.bit.SPICHAR = 0x7;                        /* 字长控制位 */

        SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0;                /* 溢出错误中断 */
        SpiaRegs.SPICTL.bit.CLK_PHASE = 0;                        /* SPI时钟相位移动,半个时间的偏移量 */
        SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;                /* 设置为主机设备 */
        SpiaRegs.SPICTL.bit.TALK = 1;                                /* 使能发送 */
        SpiaRegs.SPICTL.bit.SPIINTENA = 0;                        /* 不需要SPI中断,由外部中断配置 */

        SpiaRegs.SPIBRR = 0x007F;                                                /* 37.5Mhz/(7F+1) ~= 293khz */

        SpiaFifoInit();

        SpiaRegs.SPICCR.all = 0x0087;

        EDIS;
}

/*******************************************************************************
* Function Name  : SpiaFifoInit
* Description    : Initialize spia fifo model
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SpiaFifoInit(void)
{
        EALLOW;

        SpiaRegs.SPIFFTX.bit.SPIRST = 1;                /* reset */
        SpiaRegs.SPIFFTX.bit.SPIFFENA = 1;                /* 增强FIFO */
        SpiaRegs.SPIFFTX.bit.TXFIFO = 1;                /* 重新使能接收FIFO操作 */
        SpiaRegs.SPIFFTX.bit.TXFFST = 0;               
        SpiaRegs.SPIFFTX.bit.TXFFINT = 0;                /* disable fifo interrupt */
        SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1;        /* clear interrupt flag */
        SpiaRegs.SPIFFTX.bit.TXFFIENA = 0;                /* FIFO 中断使能位 */
        SpiaRegs.SPIFFTX.bit.TXFFIL = 0;

        SpiaRegs.SPIFFRX.bit.RXFFOVF = 0;
        SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 0;        /* no affect */\
        SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1;        /* reset */
        SpiaRegs.SPIFFRX.bit.RXFFST = 0;
        SpiaRegs.SPIFFRX.bit.RXFFINT = 0;
        SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1;        /* clear int flag */
        SpiaRegs.SPIFFRX.bit.RXFFIENA = 0;                /* disable 匹配 */
        SpiaRegs.SPIFFRX.bit.RXFFIL = 0xF;

        SpiaRegs.SPIFFCT.all = 0x08;

        EDIS;
}

/*******************************************************************************
* Function Name  : InitTouchScreen
* Description    : Initialize touch screen model
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void InitTouchScreen(void)
{
        int16 bit;

        /* 初始化SPI */
        InitSpi();
               
        bit = Arch_AD7843_PROBE();

        if(bit == 0x0800)
        {
                return;
        }
        else
        {
                /* 报错处理 */
        }
}

/*******************************************************************************
* Function Name  : Arch_AD7843_PROBE
* Description    : read AD7843 output ID
* Input          : None
* Output         : None
* Return         : bit: ID值
*******************************************************************************/
INT16 Arch_AD7843_PROBE()
{
        uchar hbit,lbit;

        AD7843_CS_SET(0);
        asm(" RPT #20 || NOP");
       
        ARCH_SPI_XMIT_NOSLP(AD7843_CMD_PROBE);
        while(!ARCH_SPI_XMIT_DONE())

        ARCH_SPI_XMIT_NOSLP(0xFF);
        while(!ARCH_SPI_XMIT_DONE());
        hbit = ARCH_SPI_RECV();

        ARCH_SPI_XMIT_NOSLP(0xFF);
        while(!ARCH_SPI_FIFO_PENDING());
        lbit = ARCH_SPI_RECV();

        AD7843_CS_SET(1);

        return (((hbits & 0x7F) << 5) | ((lbits & 0xF8) >> 3));
}

现在,我只是想将IC的ID号,也就是100000000000读取出来,时钟对了,但是,不明白,为什么没有输入输出,SPI好像也没有问题,不明白问题出在哪里,有没有试着搞过这方面技术的,望指教。

(PS:前两天把CAN给调成功了,坑爹的TI例程,波特率的预分频居然还是9,坑的不是一点两点啊!!!)

@zhangmangui    有没有这方面的建议性资料,急需。:lol

相关帖子

沙发
pinda_|  楼主 | 2014-4-19 10:13 | 只看该作者
#define AD7843_CMD_PROBE                                0xE0        // 0x800 expected!
#define ARCH_SPI_XMIT_NOSLP(cmd)                 SpiaRegs.SPITXBUF = (cmd)
#define ARCH_SPI_XMIT_DONE()                          (SpiaRegs.SPISTS.bit.INT_FLAG)
#define ARCH_SPI_RECV()                                        (SpiaRegs.SPIRXBUF)
#define ARCH_SPI_FIFO_PENDING()                (SpiaRegs.SPIFFRX.bit.RXFFST)

附上宏定义。

使用特权

评论回复
板凳
zhangmangui| | 2014-4-20 23:38 | 只看该作者
没时间研究啦    帮忙顶顶

使用特权

评论回复
地板
pinda_|  楼主 | 2014-4-23 15:18 | 只看该作者
zhangmangui 发表于 2014-4-20 23:38
没时间研究啦    帮忙顶顶

嗯,我又一次钻入了,不知道这一次能不能出来:dizzy:

使用特权

评论回复
5
pinda_|  楼主 | 2014-4-24 16:20 | 只看该作者
:D出来了,代码暂时不能公布,我还要再做一些测试,如果有相关问题,可以发问。(:L公司的要保密)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:该吃吃,该喝喝!!!

13

主题

173

帖子

0

粉丝