Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832_lcd mbed
Fork of Praktikum_2_4_ADC by
main.cpp@0:8a8d53cb84e8, 2018-03-07 (annotated)
- Committer:
- franke
- Date:
- Wed Mar 07 10:20:07 2018 +0000
- Revision:
- 0:8a8d53cb84e8
- Child:
- 1:660fec290722
Praktikum_2_3_Timer
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
franke | 0:8a8d53cb84e8 | 1 | // Example to set up an interrupt based on the LPC TIMER0 match register, sford |
franke | 0:8a8d53cb84e8 | 2 | |
franke | 0:8a8d53cb84e8 | 3 | #include "mbed.h" |
franke | 0:8a8d53cb84e8 | 4 | |
franke | 0:8a8d53cb84e8 | 5 | DigitalOut myled(LED1); |
franke | 0:8a8d53cb84e8 | 6 | DigitalOut irqled(LED2); |
franke | 0:8a8d53cb84e8 | 7 | |
franke | 0:8a8d53cb84e8 | 8 | void myhandler() { //Interrupt Service Routine, wird durch den Timer0_Vektor gestartet |
franke | 0:8a8d53cb84e8 | 9 | // do something! |
franke | 0:8a8d53cb84e8 | 10 | irqled = !irqled; |
franke | 0:8a8d53cb84e8 | 11 | |
franke | 0:8a8d53cb84e8 | 12 | // clear the TIMER0 interrupt |
franke | 0:8a8d53cb84e8 | 13 | LPC_TIM0->IR = 1; //Reset Timer0 Interrupt Flag |
franke | 0:8a8d53cb84e8 | 14 | } |
franke | 0:8a8d53cb84e8 | 15 | |
franke | 0:8a8d53cb84e8 | 16 | int main() { |
franke | 0:8a8d53cb84e8 | 17 | // power up TIMER0 (PCONP[1]) |
franke | 0:8a8d53cb84e8 | 18 | LPC_SC->PCONP |= 1 << 1; |
franke | 0:8a8d53cb84e8 | 19 | |
franke | 0:8a8d53cb84e8 | 20 | // reset and set TIMER0 to timer mode |
franke | 0:8a8d53cb84e8 | 21 | LPC_TIM0->TCR = 0x2; |
franke | 0:8a8d53cb84e8 | 22 | LPC_TIM0->CTCR = 0x0; |
franke | 0:8a8d53cb84e8 | 23 | |
franke | 0:8a8d53cb84e8 | 24 | // set no prescaler |
franke | 0:8a8d53cb84e8 | 25 | LPC_TIM0->PR = 0; |
franke | 0:8a8d53cb84e8 | 26 | |
franke | 0:8a8d53cb84e8 | 27 | // calculate period (1 interrupt every second) |
franke | 0:8a8d53cb84e8 | 28 | uint32_t period = SystemCoreClock / 20; //Period ist die Periodenlänge /4 ursprünlgich für eine Sekunde |
franke | 0:8a8d53cb84e8 | 29 | //SystemCoreClock ist eine Konstante mit dem Wert |
franke | 0:8a8d53cb84e8 | 30 | |
franke | 0:8a8d53cb84e8 | 31 | // set match register and enable interrupt |
franke | 0:8a8d53cb84e8 | 32 | LPC_TIM0->MR0 = period; //Vergleichswert des Timers wird gesetzt mit Period |
franke | 0:8a8d53cb84e8 | 33 | LPC_TIM0->MCR |= 1 << 0; // interrupt on match //Einstellung, dass ein Interrupt ausgelöst wird beim Match |
franke | 0:8a8d53cb84e8 | 34 | LPC_TIM0->MCR |= 1 << 1; // reset on match //Einstellung, dass der Timerwert auf Null zurückgesetzt wird bei Match |
franke | 0:8a8d53cb84e8 | 35 | |
franke | 0:8a8d53cb84e8 | 36 | // enable the vector in the interrupt controller |
franke | 0:8a8d53cb84e8 | 37 | NVIC_SetVector(TIMER0_IRQn, (uint32_t)&myhandler); //Zuordunung der InterruptServiceRoutine (Handler) zum Vektor von Timer0 |
franke | 0:8a8d53cb84e8 | 38 | NVIC_EnableIRQ(TIMER0_IRQn); //Timer Interrupt wird enabled |
franke | 0:8a8d53cb84e8 | 39 | |
franke | 0:8a8d53cb84e8 | 40 | // start the timer |
franke | 0:8a8d53cb84e8 | 41 | LPC_TIM0->TCR = 1; //Einstellung, dass der Timer gestartet wird |
franke | 0:8a8d53cb84e8 | 42 | |
franke | 0:8a8d53cb84e8 | 43 | // hang around! |
franke | 0:8a8d53cb84e8 | 44 | while(1) { //while Schleife, in der die erste LED getoggelt wird |
franke | 0:8a8d53cb84e8 | 45 | myled = 1; |
franke | 0:8a8d53cb84e8 | 46 | wait(0.2); |
franke | 0:8a8d53cb84e8 | 47 | myled = 0; |
franke | 0:8a8d53cb84e8 | 48 | wait(0.2); |
franke | 0:8a8d53cb84e8 | 49 | } |
franke | 0:8a8d53cb84e8 | 50 | } |