Estoy usando el microcontrolador TM4C123G de TivaC launchpad, para generar un reloj de 40 MHZ, pero lo probé en el osciloscopio y no parece una onda cuadrada, es más como un sinusoidal. Aquí hay una captura de pantalla:
yaquíestámicódigo:
#include<lm4f120h5qr.h>#include<stdbool.h>#include<stdint.h>#include"driverlib/sysctl.c"
#include "driverlib/pin_map.h"
void SYS_CLOCK(){ SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ); }
// Microcontroller Frequency 80MHZ
void CLK1_SETUP(unsigned long Period){
SYSCTL->RCGCWTIMER |= (0x1<<0);
WTIMER0->CTL &= ~(1<<8);
WTIMER0->CFG = 0x00000004;
WTIMER0->TBMR |= (0xA<<0);
WTIMER0->TBILR = Period;
WTIMER0->TBMATCHR =Period/2;
WTIMER0->CTL |= (1<<8);
SYSCTL->RCGCGPIO |= (1<<2);
GPIOC->DIR |= (0x1<<5);
GPIOC->DEN |= (0x1<<5);
GPIOC->PUR |= (0x1<<5);
GPIOC->AFSEL |= (0x1<<5);
GPIOC->AMSEL &= ~(0x1<<5);
GPIOC->PCTL |= 0X00700000;
}
void CLK2_SETUP(unsigned long Period){
SYSCTL->RCGCWTIMER |= (0x1<<1);
WTIMER1->CTL &= ~(1<<8);
WTIMER1->CFG = 0x00000004;
WTIMER1->TBMR |= (0xA<<0);
WTIMER1->TBILR = Period;
WTIMER1->TBMATCHR =Period/2;
WTIMER1->CTL |= (1<<8);
GPIOC->DIR |= (0x1<<7);
GPIOC->DEN |= (0x1<<7);
GPIOC->PUR |= (0x1<<7);
GPIOC->AFSEL |= (0x1<<7);
GPIOC->AMSEL &= ~(0x1<<7);
GPIOC->PCTL |= 0X70000000;
}
void main()
{
SYS_CLOCK();
CLK1_SETUP(2); //40MHZ~25nsec~2
CLK2_SETUP(190);//421KHZ~2.375usec~190
ADC_SETUP();
}
en el otro lado, generé otro reloj con el mismo código pero con una frecuencia de 421 KHZ y parece correcto:
¿Alguna sugerencia sobre cómo hacer que los 40 MHZ sean más estables y precisos?