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.

[参考译文] MSP430F1611:SPI 时钟问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/669718/msp430f1611-spi-clock-problem

器件型号:MSP430F1611

大家好、

我的 SPI 时钟有问题。 这是我的代码;

#include 
int main (void)
{
WDTCTL = WDTPW +WDTHOLD; //停止看门狗定时器
BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on、最大 RSEL
BCSCTL2 |= SELM1 + SELS + DIVM0; // SMCLK = XT2 = 8MHz
P5DIR |= 0x70; // P5.6、5、4输出
P5SEL |= 0x70; // P5.6、5、5个选项


P2DIR |= 0x0C; //保持和芯片选择位
P2OUT = 0x0C;


// P3DIR = 0x0A; // SPI 模式 P3SEL 的设置 P3
|= 0x0E;
UCTL0 = char + SYNC + MM + SWRST; // 8位、SPI、主
器件 UTCTL0 = CKPH+CKPL + SSEL1 + STC; // SMCLK、3线
UBR00 = 0x08; // UCLK = SMCLK/8
UBR01 = 0x00;
UMCTL0 = 0x00;
ME1 |= USPIE0; //模块启用
UCTL0 &=~SWRST; // SPI enable
IE1 |= URXIE0; //接收中断使能

CCTL0 = CCIE;
CCR0 = 255;
TACTL = tassel_1 + MC_3; //计时器15ms 周期将数据发送到 txbuf0


__bis_SR_register (SCG0 + GIE);
while (1){}

//结束主
#pragma vector=USART0RX_vector
__interrupt void SPI0_Rx (void)
{
_no_operation();
}



#pragma vector=TIMER_RA0_vector
{_interrupt Timer_void (void)

//P5OUT ^= 0x40; //切换引脚
P2OUT &=~0x04; //选择 EEPROM
TXBUF0 = 0x9F; //取消选择 EEPROM
_delay_cycles (1000);
P2OUT |= 0x04;
}

我的 SPI 时钟在第4个或第5个调试会话之前工作正常。之后 SPI 时钟工作频率大约为10kHz,我无法修复它。 为什么会发生这种情况? 您可以寻求帮助吗?

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

    我解决了问题;

    /*备用寄存器名称*/
    
    #define UCTL0 U0CTL /* USART 0控制*/
    #define UTCTL0 U0TCTL /* USART 0发送控制*/
    #define URCTL0 U0RCTL /* USART 0接收控制*/
    #define UMCTL0 U0MCTL /* USART 0调制控制*/
    #define UBR00 U0BR0 /* USART 0波特率0 */
    #define UBR10 U0BR1 /* USART 0波特率1 */
    #define RXBUF0 U0RXBUF /* USART 0接收缓冲器*/
    #define TXBUF0 U0TXBUF /* USART 0发送缓冲器*/....
    
    

    "这个反复出现的文件 "

    我为波特率寄存器使用了 UBR00和 UBR10定义、这两个定义会在时间上被破坏。 我用 U0BR0和 U0BR1更改 了、现在工作正常。 感谢你的帮助。

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

    感谢您告知社区!

    此致、

    James

    MSP 客户应用