Sistem Programlama 9. Hafta Doküman 1
İşlemci Hızı Ayarı
Uyarı : Bu dokümandaki kodun çalışması için 1. Hafta Doküman 4 – Hazır Fonksiyonlar dokümanındaki ayarların yapılması gerekmektedir.
Bu örnek işlemciyi farklı frekansta çalıştırma ayarlarını içermektedir. Yorum satırlarını aktifleştirip farklı parametrelerle deneyebilirsiniz.
#include <stdint.h>
#include <stdbool.h>
#include "inc/tm4c123gh6pm.h"
// stellaris icin: #include "inc/lm4f120h5qr.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h" // SysCtl ile baslayan fonksiyonlarda gerekli
/*
* clock network ile ilgili bilgi
* http://www.hackit.co.in/2014/07/how-to-change-system-clock-frequecy-of.html
*/
void init_port_F() {
volatile unsigned long delay;
SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOF;
delay = SYSCTL_RCGC2_R;
GPIO_PORTF_DIR_R |= 0b01110;
GPIO_PORTF_AFSEL_R &= ~0b01110;
GPIO_PORTF_DEN_R |= 0b01110;
}
int main() {
volatile unsigned long delay;
// USE_PLL -> 200 / SYSDIV_X
// USE_OSC -> 16 / SYSDIV_X
// 200 / 2.5 = 80 Mhz (clock source crystal oscilator)
SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
volatile unsigned long clock_period_1 = SysCtlClockGet();
// // 200 /5 = 40 MHz
// SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
// volatile unsigned long clock_period_2 = SysCtlClockGet();
// // 200 /20 = 10 MHz
// SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
// volatile unsigned long clock_period_3 = SysCtlClockGet();
// // 16 / 1 = 16 MHz
// SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
// volatile unsigned long clock_period_4 = SysCtlClockGet();
// // 16 / 2 = 8 MHz
// SysCtlClockSet(SYSCTL_SYSDIV_2 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
// volatile unsigned long clock_period_5 = SysCtlClockGet();
init_port_F();
while (1) {
GPIO_PORTF_DATA_R ^= 0b00100;
for (delay = 0 ; delay < 1000000 ; delay++)
/* */;
}
}