49 rindas
1.2 KiB
C++
49 rindas
1.2 KiB
C++
#include "mbed.h"
|
|
|
|
extern "C" {
|
|
volatile uint32_t msTicks;
|
|
|
|
void SysTick_Handler(void) {
|
|
msTicks++;
|
|
}
|
|
|
|
void Delay(uint32_t dlyTicks) {
|
|
uint32_t curTicks;
|
|
|
|
curTicks = msTicks;
|
|
while ((msTicks - curTicks) < dlyTicks);
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
SysTick_Config(SystemCoreClock / 1000);
|
|
|
|
SIM->SCGC6 |= SIM_SCGC6_PIT_MASK; // Clock PIT
|
|
PIT->MCR = 0; // Enable PIT
|
|
|
|
// Timer 1
|
|
PIT->CHANNEL[1].LDVAL = 0xFFFFFFFF;
|
|
PIT->CHANNEL[1].TCTRL = 0x0; // Disable Interrupts
|
|
PIT->CHANNEL[1].TCTRL |= PIT_TCTRL_CHN_MASK; // Chain to timer 0
|
|
PIT->CHANNEL[1].TCTRL |= PIT_TCTRL_TEN_MASK; // Start timer 1
|
|
|
|
// Timer 2
|
|
PIT->CHANNEL[0].LDVAL = 0xFFFFFFFF;
|
|
PIT->CHANNEL[0].TCTRL = PIT_TCTRL_TEN_MASK; // Start timer 0, disable interrupts
|
|
|
|
DigitalOut led(LED_BLUE);
|
|
while (true) {
|
|
Delay(1000);
|
|
led = !led;
|
|
|
|
uint64_t ticks = (uint64_t)PIT->LTMR64H << 32;
|
|
ticks |= (uint64_t)PIT->LTMR64L;
|
|
printf("ticks: 0x%x%x\n", (uint32_t)(ticks>>32), (uint32_t)(ticks & 0xFFFFFFFF));
|
|
|
|
ticks = (~ticks) / 24;
|
|
uint32_t us = (uint32_t)(0xFFFFFFFF & ticks);
|
|
|
|
printf("us : 0x%x\n", us);
|
|
}
|
|
}
|