| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #include "board.h"
- #include "hpm_gptmr_drv.h"
- // #include "soft_time.h"
- #include "hard_system_timer.h"
- #include "test.h"
- // 后续要设置定时器分频 一个定时器可以配置4个通道,每个通道的计数重装载值可以不同 由于定时器太多了 就不用同一个了
- // 共享同一个硬件模块、时钟源、中断向量 每个通道的配置、计数器、比较值、工作模式都是独立的
- #define SYSTEM_TIMER_1 HPM_GPTMR1
- #define SYSTEM_TIMER_1_CLK_NAME clock_gptmr1
- #define SYSTEM_TIMER_1_CH 0
- #define SYSTEM_TIMER_1_IRQ IRQn_GPTMR1
- #define SYSTEM_TIMER_1_TICK_US (1)
- #define SYSTEM_TIMER_1_RELOAD 2500
- void system_timer_init(void)
- {
- uint32_t gptmr_freq;
- gptmr_channel_config_t config;
- clock_set_source_divider(SYSTEM_TIMER_1_CLK_NAME, clk_src_osc24m, 24); // 1Mhz
- clock_add_to_group(SYSTEM_TIMER_1_CLK_NAME, 0); // 添加到组
- gptmr_freq = clock_get_frequency(SYSTEM_TIMER_1_CLK_NAME);
- printf("timer1 fre: %d\r\n", gptmr_freq);
- gptmr_channel_get_default_config(SYSTEM_TIMER_1, &config);
- config.reload = SYSTEM_TIMER_1_RELOAD; // 32bit timer1 2.5ms
- gptmr_channel_config(SYSTEM_TIMER_1, SYSTEM_TIMER_1_CH, &config, false);
- gptmr_start_counter(SYSTEM_TIMER_1, SYSTEM_TIMER_1_CH);
- gptmr_enable_irq(SYSTEM_TIMER_1, GPTMR_CH_RLD_IRQ_MASK(SYSTEM_TIMER_1_CH));
- intc_m_enable_irq_with_priority(SYSTEM_TIMER_1_IRQ, 1);
-
- }
- extern void timer_hookfunction(void);
- static uint32_t s_count = 0;
- SDK_DECLARE_EXT_ISR_M(SYSTEM_TIMER_1_IRQ, timer1_250us_isr)
- void timer1_250us_isr(void)
- {
- if (gptmr_check_status(SYSTEM_TIMER_1, GPTMR_CH_RLD_STAT_MASK(SYSTEM_TIMER_1_CH))) {
- gptmr_clear_status(SYSTEM_TIMER_1, GPTMR_CH_RLD_STAT_MASK(SYSTEM_TIMER_1_CH));
- // timer_hookfunction();
- s_count++;
- }
- }
- /*timer1 test 2026/3/14 测试通过*/
- #ifdef TIMER1_TEST
- #include "bsp_V8M_YY_led.h"
- void timer1_test(void)
- {
- system_timer_init();
- v8m_yy_led_init();
- // 注:如果while(1)轮询太快可能导致401中断触发变灯 然后下一次中断没触发呢 又扫过来了再次进入应用 也就是1个周期触发两次
- // 实际while(1)的运行一次的时间要大于中断1次的时间最好 也就是2.5ms
- while(1)
- {
- if(s_count % 400 == 1)
- {
- board_delay_ms(3);
- v8m_yy_led_toggle(V8M_YY_LED_R);
- printf("s_count %d\r\n", s_count);
- printf("1000ms \r\n");
- }
-
- }
- }
- /*
- 异常
- s_count 7201
- 1000ms
- s_count 7201
- 1000ms
- 正常
- s_count 17602
- 1000ms
- */
- #endif
|