123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #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);
- }
- }
|