工具/软件:Code Composer Studio
你(们)好
我尝试将 DS1620+温度传感器集成到我的 MSP430FR5994 Launchpad 中、但我遇到了一些问题。 我一直在使用 msp430fr599x_euscia0_spi_09.c 示例文件并对其进行一些修改、Launchpad 仅允许您使用 UCB1端口、因此我将使用这些端口。
/*-版权所有-、BSD_EX *版权所有(c) 2015、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 * *** * * MSP430代码示例免责声明 * * MSP430代码示例是自包含的低级程序 ,通常*以 高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认 值*寄存器值和时钟配置等设置、 并且在组合多个示例中的代码时必须*小心以避免潜在的副作用 *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware *了解外设配置的 API 函数库方法。 * *--/版权--* //********* // MSP430FR5x9x 演示- eUSCI_A0、SPI 3线主器件递增数据 // //说明:SPI 主器件使用3线模式与 SPI 从器件通信。 递增 //数据由从0x01开始的主器件发送。 接收到的数据应该 //与之前的传输一样 TXData = RXData-1。 // USCI RX ISR 用于处理与 CPU 的通信、通常在 LPM0中。 // ACLK = 32.768kHz、MCLK = SMCLK = DCO ~1MHz。 BRCLK = ACLK/2 // // ////// MSP430FR5994 // -------- // /|\| XIN|- // || | 32KHz 晶振 // ---|RST XOUT|- // | | // | P5.0|->数据输出(UCB1SIMO) // | | // | P5.1|<-数据输入(UCB1SOMI) // | | // | P5.2|->SPI CLK (UCB1CLK) // William Goh // Texas Instruments Inc. // 2015年10月 //使用 IAR 嵌入式工作平台 V6.30和 Code Composer Studio V6.1构建 //********* #include "driverlib.h" #include #define READ_Temp 0xAA; //读取温度地址 #define READ_Count 0xA0; //计数器字节地址 #define READ_Slope 0xA9; //斜率地址 #define START_Temp_Conv 0xEE; //开始温度转换 #define STOP_Temp_Conv 0x22; //停止温度转换 unsigned char RXData; unsigned char TXData = 0xAA; unsigned char data = 0x00; void test (uint8_t data); void main (void) { WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器 //配置 GPIO P5SEL0 &=~BIT2; // USCI_A0 SCLK 引脚 P5SEL1 |= BIT2; P5SEL0 &=~(BIT0 | BIT1); // USCI_A0 MOSI 和 MISO 引脚 P5SEL1 |= BIT0 | BIT1; PJSEL0 |= BIT4 | BIT5; //表示 XT1 //禁用 GPIO 上电默认高阻抗模式以激活 //先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; // XT1设置 CSCTL0_H = CSKKEY_H; //解锁 CS 寄存器 CSCTL1 = DCOFSEL_0; //将 DCO 设置为1MHz CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK; CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//设置所有分频器 CSCTL4 &=~LFXTOFF; 操作 { CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志 SFRIFG1 &=~OFIFG; } while (SFRIFG1和 OFIFG); //测试振荡器故障标志 CSCTL0_H = 0; //锁定 CS 寄存器 //为 SPI 操作配置 USCI_A0 UCB1CTLW0 = UCSWRST; //**将状态机置于重置中** UCB1CTLW0 |= UCMST | UCSYNC | UCCKPL | UCMSB;// 3引脚、8位 SPI 主器件 //时钟极性高,MSB UCB1CTLW0 |= UCSSEL_ACLK; // ACLK UCB1BRW = 0x02; ///2 UCB1CTLW0 &=~UCSWRST; //**初始化 USCI 状态机** 测试(数据); } void test (uint8_t data){ while (!(UCB1IFG & UCTXIFG)); UCB1TXBUF = TXData; while (!(UCB1IFG & UCRXIFG)); 数据= UCB1RXBUF; //data++; }
顶部的定义是温度传感器的命令、但现在、我只是在尝试从传感器读取之前尝试通过 TX 和 RX 发送和接收一些数据。
如果有任何帮助,将不胜感激。
谢谢
Vivek