mirror of
https://github.com/ADElectronics/RTL00_WEB_VS.git
synced 2024-11-22 19:54:15 +00:00
99 lines
2.2 KiB
C
99 lines
2.2 KiB
C
/*
|
||
* test.c
|
||
*
|
||
* Created on: 12 марта 2017 г.
|
||
* Author: PVV
|
||
*/
|
||
|
||
#include <platform_opts.h>
|
||
#include "device.h"
|
||
#include "gpio_api.h" // mbed
|
||
#include "gpio_irq_api.h" // mbed
|
||
#include "gpio_irq_ex_api.h" // mbed
|
||
#include "timer_api.h"
|
||
#include "diag.h"
|
||
#include "main.h"
|
||
|
||
#include "hal_diag.h"
|
||
#include "rtl8195a/rtl_libc.h"
|
||
|
||
#define GPIO_LED_PIN PA_4
|
||
#define GPIO_IRQ_PIN PC_4
|
||
|
||
gpio_irq_t gpio_btn;
|
||
gpio_t gpio_led;
|
||
gtimer_t my_timer;
|
||
|
||
uint32_t lo_time_us, hi_time_us;
|
||
uint32_t lo_time_cnt, hi_time_cnt;
|
||
uint32_t old_tsf;
|
||
uint32_t lo, hi, fr;
|
||
|
||
uint32_t io_irq_count;
|
||
|
||
static void gpio_demo_irq_handler(uint32_t id, gpio_irq_event event) {
|
||
|
||
// gpio_irq_disable(&gpio_btn);
|
||
io_irq_count++;
|
||
uint32_t new_tsf = get_tsf();
|
||
uint32_t delta_us = (uint32_t) new_tsf - (uint32_t) old_tsf;
|
||
if (event & 1) {
|
||
lo_time_us += delta_us;
|
||
lo_time_cnt++;
|
||
gpio_irq_set(&gpio_btn, IRQ_LOW, 1);
|
||
} else {
|
||
hi_time_us += delta_us;
|
||
hi_time_cnt++;
|
||
gpio_irq_set(&gpio_btn, IRQ_HIGH, 1);
|
||
}
|
||
old_tsf = new_tsf;
|
||
// gpio_irq_enable(&gpio_btn);
|
||
}
|
||
|
||
static void timer1_timeout_handler(uint32_t id) {
|
||
|
||
if (lo_time_cnt && hi_time_cnt) {
|
||
lo = lo_time_us / lo_time_cnt;
|
||
hi = hi_time_us / hi_time_cnt;
|
||
fr = hi + lo;
|
||
lo_time_cnt = 0;
|
||
lo_time_us = 0;
|
||
hi_time_cnt = 0;
|
||
hi_time_us = 0;
|
||
printf("Period: %lu us, Lo: %lu us, Hi: %lu us\n", fr, lo, hi);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief Main program.
|
||
* @param None
|
||
* @retval None
|
||
*/
|
||
static void fATTT(int argc, char *argv[]) {
|
||
|
||
lo_time_cnt = 0;
|
||
lo_time_us = 0;
|
||
hi_time_cnt = 0;
|
||
hi_time_us = 0;
|
||
|
||
// Init LED control pin
|
||
gpio_init(&gpio_led, GPIO_LED_PIN);
|
||
gpio_dir(&gpio_led, PIN_OUTPUT); // Direction: Output
|
||
gpio_mode(&gpio_led, PullNone); // No pull
|
||
gpio_write(&gpio_led, 0);
|
||
|
||
// Initial Push Button pin as interrupt source
|
||
gpio_irq_init(&gpio_btn, GPIO_IRQ_PIN, gpio_demo_irq_handler,
|
||
(uint32_t) (&gpio_led));
|
||
gpio_irq_set(&gpio_btn, IRQ_FALL, 1); // Falling Edge Trigger
|
||
gpio_irq_enable(&gpio_btn);
|
||
|
||
// Initial a periodical timer
|
||
gtimer_init(&my_timer, TIMER1);
|
||
gtimer_start_periodical(&my_timer, 1000000, (void*) timer1_timeout_handler,
|
||
(uint32_t) &gpio_led);
|
||
}
|
||
|
||
MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_test[] = { { "ATTT", 0,
|
||
fATTT, ": Test" } };
|
||
|