请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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,我无法修复它。 为什么会发生这种情况? 您可以寻求帮助吗?