Hello again!I have doubts about how to modify the working frequency of the SAMD21 microcontroller, I made this poor program attempt:
#include <stdint.h>#include <stdbool.h>#include "samd21.h" // Device header#include "GPIO.h"//Definiciones#define LED_BUILTIN 8#define TEMP1MSEG 8000//FUNCIONES GLOBALES void SystemBegin(void);void Delay_ms(int x);void DelaySystick(void);int main(void){ //Inicializa el sistema SAMD21 SystemBegin(); //Configuramos el Pin PB08 como salida GPIOPinMode(GPIO_B,LED_BUILTIN,OUTPUT_TOGGLE); /* PROGRAMA PRINCIPAL */ while(true) { GPIOPinToggle(GPIO_B,LED_BUILTIN); Delay_ms(500); }}//FUNCIONES QUE MODFICAN EL SISTEMA Y EL LOS RETARDOS void SystemBegin(void){ //Inicia el sistema SystemInit(); SYSCTRL->OSC8M.bit.PRESC=0x00; //no hay preescalador (es 8 en el reajuste) SYSCTRL->OSC8M.reg=SYSCTRL_OSC8M_ENABLE; //Habilita la fuente GCLK->GENDIV.bit.ID=0x00; //Seleccionamos el Generador 0 GCLK->GENDIV.bit.DIV=0; //Sin preescaldor GCLK->GENCTRL.bit.ID=0x00; //Seleccionamos el Generador 0 GCLK->GENCTRL.reg=GCLK_GENCTRL_SRC_OSC8M;//Seleccionamos como fuente de oscilador interno la de 8MHz GCLK->GENCTRL.bit.GENEN=1; //Habilitamos el generador} void Delay_ms(int x){ int i; for(i=0;i<x;i++) { DelaySystick(); }}void DelaySystick(void){ SysTick->CTRL=0x00; SysTick->LOAD=TEMP1MSEG; SysTick->CTRL=0x05; while( (SysTick->CTRL & (1<<16)) == 0); SysTick->CTRL=0x00;}
But I think what caused the microcontroller to lock up or something, was that it changed in the Xtal(MHz) option to 1MHz
My question is whether modifying the frequency within the program does not affect what I put into the Xtal(MHz) function?
I want to think that the CMSIS DRIVERS are compatible with SAMD21?, I mean if I can also occupy the I2C, UART, SPI drivers, etc.