您好
我的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的时候十分稳定,不会跑飞