Estoy intentando generar una forma de onda de un byte usando SPI en modo maestro. Esto funciona como se esperaba cuando se usa el REFOCLK a 32 KHz. Sin embargo, cuando se usa XT2 a 4 MHz o el DCOCLK (a 20 MHz), las formas de onda se ven completamente mal, como se muestra en la imagen adjunta. ¿Por qué está pasando esto? ¿Necesito su configuración especial o el MSP430F5529 simplemente no es capaz de SPI a estas velocidades?
Primera imagen: Salida a 4+ MHz (50 ns intervalos horizontales), Segunda imagen: Salida a 32 KHz
(Medidoconel
Claramente, los 4+ MHz no están emitiendo la forma de onda correcta, mientras que los 32 KHz sí lo están.
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
SetVcoreUp(0x01); //Bring up power, taken directly from datasheet
SetVcoreUp(0x02);
SetVcoreUp(0x03);
__bis_SR_register(SCG0); //Disable FLL
P5SEL |= (BIT2 + BIT3); //Set crystal ports
UCSCTL6 &= ~XT2OFF; //Enable XT2
UCSCTL3 |= SELREF_2; //Set FLL
UCSCTL4 |= SELA_2; //Set ACLK also
UCSCTL6 |= XT2DRIVE_0; //Select power needed for XT2
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); //Clear fault flags
SFRIFG1 &= ~OFIFG; //Clear general oscillator fault flag
}
while (SFRIFG1 & OFIFG); //If fault, OFIFG&SFRIFG1 will be non zero (true)
UCSCTL4 |= SELS__XT2CLK;
P1DIR |= (BIT0 + BIT2);
P2DIR |= BIT2; //Set P2.2 as out direction to monitor clock
P2SEL |= BIT2; //Select P2.2 as SMCLK output
__bic_SR_register(SCG0); //Enable FLL
UCB0CTL1 = UCSWRST; //Put UCSI in reset state for configuration
UCB0CTL0 |= (UCSYNC + UCMST + UCMSB + UCCKPH); //Enable settings: SPI mode (insetad of UART) + Master + Most sig byte
P3SEL |= BIT0; //Port select
P3DIR |= BIT0;
UCB0CTL1 |= UCSSEL1; //Disable UCSI reset state and select SMCLK src
UCB0CTL1 &= ~UCSWRST; //Enable UCSI
while (1)
{
while (!(UCB0IFG & UCTXIFG)); //Delay until UCB0TXBUF is empty
UCB0TXBUF = 0xEE; //transmit 11101110
__delay_cycles(10000);
}
p.s., sé que el SPI es síncrono, pero necesito estas altas velocidades porque en realidad lo estoy usando para la forma de onda, no para comunicarme con un esclavo SPI