微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > CC2530 ADS7822 三线SPI

CC2530 ADS7822 三线SPI

时间:10-02 整理:3721RD 点击:

        CC2530连接ADS7822,UBART1作为SPI模式,P1.4——CS,P1.5——CLK,P1.7——Dout【CC2530——ADS7822】.硬件查询方式。

        因为ADS7822没有Din(对应MCU的MOSI),所以CC2530的P1.6没有连接,悬空。

        P_ADS7822_CS=0; //启动A/D转换

        U1DBUF=0x66;
        while (!U1RX_BYTE);
        U1RX_BYTE = 0;
        ADS7822_SPI_MSB=U1DBUF;

        U1DBUF=0x66;
        while (!U1RX_BYTE);
        U1RX_BYTE = 0;
        ADS7822_SPI_LSB=U1DBUF;

        P_ADS7822_CS=1; //关闭A/D转换

        这部分的代码,想法是拉低CS使能,然后向DBUF中写入0x66(可以是任意值,因为ADS7822没有Din,不需要接受命令。MCU的P1.6悬空),在将0x66写入DBUF的时候,硬件MCU触发CLK,ADS7822接收到CLK,返回12位数据。

        经示波器检测,CLK无输出波形。请问我的代码处理思路是否是正确的。或者,ADS7822的使用方法谁能讲解一下。

你好,

根据你的描述,你是通过向DBUF写数据来触发CLK,既然CLK没有输出波形,建议你用示波器检查一下MCU的MOSI管脚是不是有数据输出。

        现在看起来是波特率设置的问题。

        感谢各位回复,昨天SPI通讯调试通过,但是结果很不准确。先说一下之前的问题:

        1、在进行通讯之前还是要先将UART映射到相应端口上,即设定PERCFG寄存器。

        2、设定U1CSR寄存器,确定操作模式。如果做SPI的话,这里似乎只要关心bit7、bit5、bit2和bit1就行了。

        3、设定U1BAUD寄存器,确定用于波特率的U1BAUD_M,参看手册中波特率那一节

        4、设定U1GCR寄存器,去顶用于波特率的U1GCR_E、时钟极性和相位。

              对于ADS7822而言,因为它没有Din(对MCU而言是MOSI),所以可以不考虑bit5的ORDER设定,目前我是这么认为的。我最终设定的是19200.

        5、拉低CS

        6、然后向UxDNUF写值(比如0x66,这个值在示波器里是个方波)以触发CLK——ADS7822靠CLK脉冲触发发送数据,只要CLK上有脉冲,即发送数据。

        7、判断UxTX_BYTE,确定发送完成,读取UxDBUF。

              这里注意,对于ADS7822而言,MCU是主设备,所以CC2530寄存器U1CSR的UxRX_BYTE没有意义。

              在手册里UxRX_BYTE的说明是当MCU昨从设备时有意义的。

        8、重复步骤6、7的操作。

        9、拉高CS

         以上是我认为的SPI通讯查询方式的完整过程,此前的问题大概是因为没有注意与波特率相关的U1BAUD_M和U1GCR_E的设定,造成CLK没有输出。但是只是猜测,没有再去确认。如果谁有类似的情况,可以在回复中说明。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top