This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP432P401R:AD9833

Guru**** 2618835 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/676991/ccs-msp432p401r-ad9833

器件型号:MSP432P401R

工具/软件:Code Composer Studio

您好!
我使用 launchpad MSP432P401R 对集成电路 AD9833进行编程。 该元件需要一个我使用计时器生成的时钟源、并通过 SPI (低电平有效)对其进行编程。 时钟源工作正常,但 SPI 协议有问题。 如何修复代码? 我无法看到错误。

谢谢

#include "msp.h"
#include 

#define Elements 5

uint16_t TXData1[元素]={0x2100、0x50C7、0x40、0xC000、0x2000};//16Hz
uint16_t TXData2[元素]={0x2100、0x410C、0x40、000


、0x2000};//1uint16_t TXData3[元素]={0x2040、0x20Hz

、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz、0x20Hz = 0x20Hz = 0x20Hz
while (UCB0STAT 和 UCBUSY);
P1OUT&=~0x01;
UCB0TXBUF=(DATA>>>8)&0xFF;

while (!(UCB0IFG&UCTXIFG));
UCB0TXBUF=DATA&0xFF;

while (UCB0STAT 和 UCBUSY);
P1OUT|=0x01;
}

int main (void){

uint8_t i = 0;

//看门狗计时器
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; //停止

//功能引脚
//SPI
P1SEL0 |= BIT5 | BIT6 | BIT7; //将 P1.5、P1.6和 P1.7设置为 SPI 引脚功能
//GPIO
P1DIR |= BIT0;
P1OUT |= BIT0;

///PWM
P2SEL0 |= 0x10; //P2.4 TA0.1
P2SEL1 &= 0x00; //P2.4 TA0.1
P2DIR |= 0x10; //P2.4输出

//配置时钟
CS->KEY = CS_KEY_VAL; //解锁 CS 模块以进行寄存器访问
CS->CTL0 = 0; //重置调优参数
CS->CTL0 = CS_CTL0_DCORSEL_3; //将 DCO 设置为12MHz (标称值、8-16MHz 范围的中心)
//选择 ACLK = REFO、SMCLK = MCLK = DCO
CS->CTL1 = CS_CTL1_SELA_2 | CS_CTL1_SELESS_3 | CS_CTL1_SELM_3;
CS->KEY = 0; //锁定 CS 模块,防止意外访问

//配置计时器
TA0CCR0 = 12-1; //PWM 周期
TA0CCTL1 = TIMER_A_CCTLN_OUTMOD_7; //CR1复位/置位
TA0CCR1 = 6; //CCCR1 PWM 占空比
TA0CTL = TIMER_A_CTL_ssel_SMCLK | TIMER_A_CTL_MC_UP | TIMER_A_CTL_CLR;//SMCLK|UP 模式| TAR 清除

//配置 SPI
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST; //将 eUSCI 状态机复位
EUSCI_B0->CTLW0 = EUSCI_B_CTLW0_SWRST | //在复位时保持 eUSCI 状态机
EUSCI_B_CTLW0_MST | //设置为 SPI 主设备
EUSCI_B_CTLW0_SYNC | //设置为同步模式
EUSCI_B_CTLW0_CKPL | //将时钟极性设置为高电平
EUSCI_B_CTLW0_MSB; // MSB 优先
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_ACLK;//EUSCI_B_CTLW0_ssel_ACLK;// ACLK
EUSCI_B0->BRW = 0x01; ///2、fBitClock = fBRCLK/(UCBRx+1)。
EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST; //初始化 USCI 状态机

//EUSCI_B0->IFG |= EUSCI_B_IFG_TXIFG;//清除 TXIFG 标志

//AD9833
对于(I = 0;I IFG 和 EUSCI_B_IFG_TXIFG);
P1OUT &=~ BIT0;
wait();
EUSCI_B0->TXBUF = TXData[i];
P1OUT |= BIT0;
*/
}

//循环
while (1);
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Javier、

    ADS 器件有一个读取寄存器、用于读取版本。 您是否尝试读取寄存器并查看是否正在读回正确的值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已经阅读了 AD9833的数据表、并且没有看到任何读取寄存器。 这个集成电路只有 SDATA、SCLK 和 FSYNC-CS 引脚、它们都是输入、所以我认为没有这个选项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Javier、

    我的差。 因此、您使用的是模拟器件部件和(而不是 TI 部件、我将其混淆为 ADS)。 您是否检查了 SPI 总线并查看时钟、芯片选择和 MOSI 是否按预期切换?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已 使用基本逻辑分析仪检查了 SPI 的行为、这三个信号似乎工作正常。 CS (P1.0)为低电平当我发送任何内容时、SCLK (P1.5)生成时钟和 SDATA (P1.6)。 传输数据(我不确定传输的信息是否正确、因为我使用的是分辨率很低的非常基本的分析仪)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Javier、

    SPI 时钟频率是否在 AD9833预期的 SPI 时钟频率范围内? 此外、最好分享 MSP432P401R 和 AD9833之间接口的原理图、以查看是否满足数据流路径的所有要求。

    最后、我会请您使用高分辨率范围检查所传输的数据是否正确、并且在右侧沿、正如 AD9833所预期的那样。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    SCLK 的频率太低(AD9833需要40MHz)。 我更改了该参数、现在电路工作正常。

    感谢 Amit 的帮助