Piszę do Was ponieważ próbuje uruchomić 48MHz oscylator z zewnętrznego kwarca na tej płytce i niestety nie wiem czy to udało mi się uczynić. Oto kod:
Kod: Zaznacz cały
/**
*****************************************************************************
**
** File : main.c
**
** Abstract : main function.
**
** Functions : main
**
** Environment : Atollic TrueSTUDIO(R)
**
** Distribution: The file is distributed "as is", without any warranty
** of any kind.
**
** (c)Copyright Atollic AB.
** You may use this file as-is or modify it according to the needs of your
** project. This file may only be built (assembled or compiled and linked)
** using the Atollic TrueSTUDIO(R) product. The use of this file together
** with other tools than Atollic TrueSTUDIO(R) is not permitted.
**
*****************************************************************************
*/
#include "mcu.h"
int main(void)
{
//oscillator configuration
OSC0->CR |= (1<<OSC_CR_ERCLKEN_SHIFT) | (1<<OSC_CR_EREFSTEN_SHIFT);
MCG->C2 &= ~(1<<MCG_C2_HGO0_SHIFT);
MCG->C2 |= (1<<MCG_C2_RANGE0_SHIFT) | (1<<MCG_C2_EREFS0_SHIFT);
MCG->C1 |= (2<<MCG_C1_CLKS_SHIFT) | (0b11<<MCG_C1_FRDIV_SHIFT);
MCG->C1 &= ~(1<<MCG_C1_IREFS_SHIFT);
while(!((MCG->S)&(1<<MCG_S_OSCINIT0_SHIFT)));
while(((MCG->S)&(1<<MCG_S_IREFST_SHIFT)));
while(!(((MCG->S)&(2<<MCG_S_CLKST_SHIFT))==(2<<MCG_S_CLKST_SHIFT)));
MCG->C5 |= (4<<MCG_C5_PRDIV0_SHIFT);
MCG->C6 &= ~(0b00011111);
MCG->C2 |= (1<<MCG_C2_LP_SHIFT);
MCG->C6 = 0x40;
MCG->C2 &= ~(1<<MCG_C2_LP_SHIFT);
while(!((MCG->S)&(1<<MCG_S_PLLST_SHIFT)));
while(!((MCG->S)&(1<<MCG_S_LOCK0_SHIFT)));
MCG->C1 = 0x10;
while( !((MCG->S & (3<<MCG_S_CLKST_SHIFT)) == (3<<MCG_S_CLKST_SHIFT)) );
SIM->CLKDIV1 &= ~((1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<16)|(1<<17)|(1<<18));
SIM->SCGC5 |= (1<<10);
SIM->SCGC5 |= (1<<12);
// PORTB->PCR[19] |= (1<<8);
PORTB->PCR[18] |= (1<<8);
// PORTD->PCR[1] |= (1<<8);
// PTB->PDDR |= (1<<19);
// PTB->PCOR |= (1<<19);
PTB->PDDR |= (1<<18);
PTB->PCOR |= (1<<18);
// PTD->PDDR |= (1<<1);
// PTD->PCOR |= (1<<1);
uint32_t delay = 50000;
while (1)
{
while(delay--);
delay = 500000;
PTB->PSOR |= (1<<18);
while(delay--);
delay = 500000;
PTB->PCOR |= (1<<18);
}
return 0;
}
Dioda sobie miga co około 200ms, obojętnie czy zostawie w kodzie ustawianie zegara czy nie. Ma ktoś jakiś sprawdzony kod bym mógł sobie porównać?