您好
我的5529之前调试SPI的时候,选择上电默认的时钟情况,即SMCLK选择DCO 1.048M的时钟的时候
SPI的收发正常 但是现在觉得数据速率不太够用 于是想用外部高频晶振24M的XT2 但是调试了几天都不能正常工作
请问是什么原因
现在附上代码,代码大部分是例程里的
//------------------时钟配置---------------------------------------
P2DIR |= BIT2; // SMCLK set out to pins
P2SEL |= BIT2;
P7DIR |= BIT7; // MCLK set out to pins
P7SEL |= BIT7;
P5SEL |= BIT2+BIT3; // Port select XT2
UCSCTL6 &= ~XT2OFF; // Enable XT2
UCSCTL3 |= SELREF_2; // FLLref = REFO
// Since LFXT1 is not used,
// sourcing FLL with LFXT1 can cause
// XT1OFFG flag to set
UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO
// Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to
// expected frequency
UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2
UCSCTL5 |= DIVS__16; //分频这里我经常调
一般情况下 这段代码是都能正常工作的 在P2.2那里能看到时钟信号 (24M的时钟信号看起来像是正弦的样子)
//---------------------UCB1 SPI setup-------------------------
P4SEL |= BIT1+BIT2+BIT3; // P4.1-3 option select 3-PIN SPI
P4DIR |= BIT1; // SIMO output
P4DIR &= ~BIT2; // SOMI input
P4DIR |= BIT3; // CLK output
//P4OUT |= BIT0; //P4.0输出高电平 /CS disabled
//P4DIR |= BIT0; //P4.0 for CS
UCB1CTL1 |= UCSWRST; // **Put state machine in reset**
UCB1CTL0 |= UCSYNC+UCMST+UCMSB+UCCKPL; // SPI master
UCB1CTL0 &= ~UC7BIT; // 8-bit
UCB1CTL0 &= ~UCCKPH;
UCB1CTL1 |= UCSSEL_2; // SMCLK
UCB1BR0 = 0; // 我有时候会在这里分频
UCB1BR1 = 0; //
UCB1CTL1 &= ~UCSWRST;
UCB1IE = 0;
//---------------发送数据-------------------------------------------------
//for(i=50;i>0;i--); // Wait for slave to initialize
while(1)
{
for(i = 0;i < 255 ; i++)
{
MST_Data = i; // Initialize data values
while (!(UCB1IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCB1TXBUF = MST_Data; // Transmit first character
}
//__bis_SR_register(LPM0_bits + GIE); // CPU off, enable interrupts
}
这段是SPI的设置和数据传输的设置 这两天调试的时候要是直接go的话 就老跑飞……一步一步调试 有时候就没问题 在寄存器那里和示波器上都能一部分看到
发送的SCLK和发送的数据,但是也经常会跑跑就飞了……
请问有没有大大遇到过我这种情况?是晶振不稳定么?我的程序有时候用UCSCTL5分频 有时候用UCB1BR分频,但总会有些问题。
我的XT2是焊了2个15pF的电容,是UCS里设置哪儿不太对么? 因为调SPI时候原来选DCO的时候十分稳定,不会跑飞