Hi,
Ich versuche derzeit einen Pin mit Timer0 im 1us Takt zu toggeln wobei
ich das Problem habe das wenn ich den Timer0 konfiguriert habe und das
ganze teste wird der Pin dann aber nur im 50us Takt getoggelt (wie auf
Bild 1 zu sehen. Die PLL Konfiguration, CPU clock divider und Peripherie
clock Konfiguration habe ich mir eigentlich schon angesehen und konnte
keinen Fehler finden. Ich hoffe hier kann mir jemand helfen.
Entwicklungsumgebung: MCUXpresso V11.3.0
Debugger: ULINK2
Entwicklungsboard: Waveshare Open1768
Quarz: 12MHz
PLL/CPU Clock Konfiguration
1 | #define CLOCK_SETUP 1
|
2 | #define SCS_Val 0x00000020
|
3 | #define CLKSRCSEL_Val 0x00000001
|
4 | #define PLL0_SETUP 1
|
5 | #define PLL0CFG_Val 0x00050063
|
6 | #define PLL1_SETUP 1
|
7 | #define PLL1CFG_Val 0x00000023
|
8 | #define CCLKCFG_Val 0x00000003
|
9 | #define USBCLKCFG_Val 0x00000000
|
10 | #define PCLKSEL0_Val 0x00000000
|
11 | #define PCLKSEL1_Val 0x00000000
|
12 | #define PCONP_Val 0x042887DE
|
13 | #define CLKOUTCFG_Val 0x00000000
|
Timer0
1 | void initTimer(void)
|
2 | {
|
3 | LPC_SC->PCONP |= 1 << 1; // Power up Timer 0
|
4 | LPC_SC->PCLKSEL0 |= 1 << 2; // Clock for timer = CCLK
|
5 | LPC_TIM0->PR = 99; //100MHz
|
6 | LPC_TIM0->MR0 = 1; //1MHz
|
7 | LPC_TIM0->MCR |= 0x03; // Interrupt on Match0 compare // Reset timer on Match 0.
|
8 | LPC_TIM0->TCR |= 1 << 1; // Reset Timer0
|
9 | LPC_TIM0->TCR &= ~(1 << 1); // stop resetting the timer.
|
10 | NVIC_EnableIRQ(TIMER0_IRQn); // Enable timer interrupt
|
11 | LPC_TIM0->TCR |= 1 << 0; // Start timer
|
12 | }
|
13 |
|
14 |
|
15 | void TIMER0_IRQHandler(void)
|
16 | {
|
17 | LPC_GPIO2->FIOPIN ^= (1<<0);
|
18 |
|
19 | LPC_TIM0->IR = 0x01; /* Clear MAT0 interrupt flag */
|
20 | }
|
Main
1 | int main(void) {
|
2 | configureGpio(PORT_2, 0, GPIO_OUTPUT);
|
3 | initTimer();
|
4 | while(1) {
|
5 | }
|
6 | return 0 ;
|
7 | }
|