您好
我的5529之前调试SPI的时候,选择上电默认的时钟情况,即SMCLK选择DCO 1.048M的时钟的时候
SPI的收发正常 但是现在觉得数据速率不太够用 于是想用外部高频晶振24M的XT2 但是调试了几天都不能正常工作
请问是什么原因
现在附上代码,代码大部分是例程里的
//------------------时钟配置---------------------------------------P2DIR |= BIT2;// SMCLK set out to pinsP2SEL |= BIT2;P7DIR |= BIT7;// MCLK set out to pinsP7SEL |= BIT7;P5SEL |= BIT2+BIT3;// Port select XT2UCSCTL6 &= ~XT2OFF;// Enable XT2UCSCTL3 |= SELREF_2;// FLLref = REFO// Since LFXT1 is not used,// sourcing FLL with LFXT1 can cause// XT1OFFG flag to setUCSCTL4 |= SELA_2;// ACLK=REFO,SMCLK=DCO,MCLK=DCO// Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settlesdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG;// Clear fault flags}while (SFRIFG1&OFIFG);// Test oscillator fault flagUCSCTL6 &= ~XT2DRIVE0;// Decrease XT2 Drive according to// expected frequencyUCSCTL4 |= SELS_5 + SELM_5;// SMCLK=MCLK=XT2UCSCTL5 |= DIVS__16;//分频这里我经常调
一般情况下 这段代码是都能正常工作的 在P2.2那里能看到时钟信号 (24M的时钟信号看起来像是正弦的样子)
//---------------------UCB1 SPI setup-------------------------P4SEL |= BIT1+BIT2+BIT3;// P4.1-3 option select 3-PIN SPIP4DIR |= BIT1;// SIMO outputP4DIR &= ~BIT2;// SOMI inputP4DIR |= BIT3;// CLK output//P4OUT |= BIT0;//P4.0输出高电平 /CS disabled//P4DIR |= BIT0;//P4.0 for CSUCB1CTL1 |= UCSWRST;// **Put state machine in reset**UCB1CTL0 |= UCSYNC+UCMST+UCMSB+UCCKPL;// SPI masterUCB1CTL0 &= ~UC7BIT;// 8-bitUCB1CTL0 &= ~UCCKPH;UCB1CTL1 |= UCSSEL_2;// SMCLKUCB1BR0 = 0;// 我有时候会在这里分频UCB1BR1 = 0;//UCB1CTL1 &= ~UCSWRST;UCB1IE = 0; //---------------发送数据-------------------------------------------------//for(i=50;i>0;i--);// Wait for slave to initializewhile(1){for(i = 0;i < 255 ; i++){MST_Data = i;// Initialize data valueswhile (!(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的时候十分稳定,不会跑飞
灰小子:
看样子XT2 正常起震工作了。问题应该在SPI通讯方面
Xueyuan Jee:
回复 灰小子:
可是为什么选择DCO就不会出问题?片内时钟怎么调都OK
用XT2时候 单步运行 到了设置SPI中间的语句或者传输语句时候 总会跑飞
kqian0327:
你好,
程序一直飞掉?
你spi时钟和数据的输出是否有问题?
你说的程序飞掉是否是程序复位,没有尝试在WHILE(1)之前设断点,看是否发送成功。
你说的程序飞掉的理由?程序跑到哪里了,可以截图说明你说的飞掉是飞到哪里了么?