0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【微五科技CF3310开发板试用体验】32 位可编程中断计时器模块PIT32基础使用

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-24 16:26 次阅读

本文来源电子发烧友社区,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2289203_1_1.html


效果演示(开发板体验视频,详见作者原文链接内容)

在微五科技CF3310开发板上,提供了两个32 位可编程中断计时器模块:
image.png

其具体的处理逻辑如下:
image.png

通过对官方提供的pit32_demo的学习,了解到该定时器的基础使用方式。

要使用开发板上的定时器,有两个概念,我们需要先了解:

  1. 分频:为了得到准确的计时时间,通常使用开发板运行频率,取其2的整数次方 之一,得到一个合适的频率值,然后根据该频率值进行计数;否则,频率值过大,导致计数值增长太快,计数器溢出。
  2. 计数:在上述分频的基础上,进行计数,累积到预先设定的数值,就触发定时器进行具体的操作。

通过查看官方手册,可以了解到该开发板的具体可分频数:
image.png

在系统的src/hal/inc/pit32_hal.h中,也有具体的定义:
image.png

在pit32_demo中,分频取得是32:
image.png

那么,根据该分频,最终需要的计数值,则由下面的函数来计算:
image.png

如果系统运行在30MHz,则1秒对应的计数值为:
counter= 30*10e6/32/1 = 937500
也就是说,每计数到该数值,就能触发一次计时器回调了。

在上述代码中,对定时器的具体设置说明如下:

// 定时器初始化
// 定义定时器变量
PIT32_HandleTypeDef hpit32;

// 使用PIT1定时器,有两个PIT1、PIT2可用
hpit32.instance = PIT1;

// 设定计数值
hpit32.init.counter = pit32_led_CalcCounter(g_ips_clk,PIT32_CLK_DIV_32,PIT32_1S);

// 启用中断
hpit32.init.enableIE = ENABLE;

// 启用重复调用,否则就是单词触发
hpit32.init.reLoad = ENABLE;

// 设定分频
hpit32.init.prescaler = PIT32_CLK_DIV_32;

// 以下三项,可具体查看手册详细了解
hpit32.init.runatDebug = ENABLE;
hpit32.init.runatDoze = ENABLE;
hpit32.init.updateCNT = ENABLE;

设置好定时器后,就可以使用下面的调用来启动定时器:
HAL_PIT32_Init(&hpit32);

然后,定时器触发时,会自动调用:
void HAL_PIT32_Callback(void *hpit32)
我们的处理程序,就可以写到该回调中进行处理。
需要注意的是,这是一个全局回调,所以只能定义一次。
我在写pit32_led例子的时候,就需要先把原来的pit32_demo.c中的注释掉。

了解了以上定时器的基础使用方法,再结合eport_demo中控制LED的方法,我们就能用定时器实现一个闪亮LED的程序。

具体的代码展示如下:

  1. src/demo/inc/demo.h中,添加如下部分:
#ifdef PIT32_LED_EN
#include "pit32_led.h"
#endif
  1. src/main/main.c中,添加如下部分:
#ifdef PIT32_LED_EN
	/* 32bits 可编程中断定时器*/
	PIT32_LED_Run();
#endif
  1. src/demo/inc/pit32_led.h
/*
 * pit32_led.h
 *
 */

#ifndef PIT32_LED_H_
#define PIT32_LED_H_

extern void PIT32_LED_Run(void);

#endif /* PIT32_LED_H_ */
  1. src/demo/pit32_led.c:
/*
 * pit32_led.c
 *
 */

#include "pit32_demo.h"
#include "pit32_hal.h"
#include "eport_hal.h"
#include "cpm_hal.h"
#include "hal.h"
#include "delay.h"
#include "debug.h"

#define RETERR()            do{printf("t行号:%d ERRrn",__LINE__);
                               return;}while(0)

EPORT_InitTypeDef eport;
EPORT_PinDef pin_num;
EPORT_TypeDef *eport_base;

int32_t led_status = 0;

uint32_t pit32_led_CalcCounter(uint32_t clk,uint32_t div, uint32_t time)
{
	return (clk/(1<
void PIT32_LED_Run(void) { // 定时器初始化 PIT32_HandleTypeDef hpit32; hpit32.instance = PIT1; hpit32.init.counter = pit32_led_CalcCounter(g_ips_clk,PIT32_CLK_DIV_32,PIT32_1S); hpit32.init.enableIE = ENABLE; hpit32.init.reLoad = ENABLE; hpit32.init.prescaler = PIT32_CLK_DIV_32; hpit32.init.runatDebug = ENABLE; hpit32.init.runatDoze = ENABLE; hpit32.init.updateCNT = ENABLE; // LED初始化 pin_num = EPORT_PIN4; eport_base = EPORT; eport.pin = pin_num; eport.func = GPIO_FUN; eport.dir = GPIO_DIR_OUT; eport.output_mode = EPORT_OUTPUT_MODE_CMOS; eport.pull_mode = EPORT_PULL_UP; HAL_EPORT_Init(eport_base, &eport); HAL_EPORT_TogglePin(eport_base, pin_num); // 启动定时器 HAL_PIT32_Init(&hpit32); while(1); } void HAL_PIT32_Callback(void *hpit32) { led_status = !led_status; if(led_status) { printf("Enter PIT interrupt, set LED Onrn"); HAL_EPORT_WritePin(eport_base, pin_num, BIT_SET); } else { printf("Enter PIT interrupt, set LED Offrn"); HAL_EPORT_WritePin(eport_base, pin_num, BIT_RESET); } }
)>

在以上的代码中,使用到了PIN4,实际驱动的LED,直接使用了板载的LED2,具体接线如下:
iShot_2022-06-24_17.10.36.png

另外,上图中的两个跳线帽,短接对应的引脚后,开发板上的Type-C接口在连接到电脑后,就能直接用串口工具打开,查看调试信息了:
iShot_2022-06-24_17.02.16.png

连接好线,在IDE中编辑下载后,实际跑起来之后,效果如视频所示


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微五科技
    +关注

    关注

    1

    文章

    27

    浏览量

    2581
  • 开发板试用
    +关注

    关注

    3

    文章

    301

    浏览量

    2092
  • CF3310
    +关注

    关注

    0

    文章

    23

    浏览量

    334
收藏 人收藏

    评论

    相关推荐

    追加名额丨米尔瑞芯RK3576开发板有奖试用

    米尔与瑞芯合作发布的新品基于瑞芯RK3576应用处理的MYD-LR3576开发板免费试用活动加码啦~~米尔追加了2块价值849元的MY
    的头像 发表于 11-22 01:00 167次阅读
    追加名额丨米尔瑞芯<b class='flag-5'>微</b>RK3576<b class='flag-5'>开发板</b>有奖<b class='flag-5'>试用</b>

    有奖丨米尔 瑞芯RK3576开发板免费试用

    米尔与瑞芯合作发布的新品基于瑞芯RK3576应用处理的MYD-LR3576开发板免费试用活动来啦~~米尔提供了7块价值849元的MYD
    的头像 发表于 11-12 01:00 301次阅读
    有奖丨米尔 瑞芯<b class='flag-5'>微</b>RK3576<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    spi_flash期间的计时器中断导致崩溃怎么解决?

    这是我遇到的 SDK 中的一个小错误 (esp_iot_sdk_v0.9.5_b1): 我在 Timer1 上使用计时器中断: ets_frc_timer1_intr_attach
    发表于 07-12 11:54

    DS90CF383B +3.3V可编程LVDS发射24平板显示(FPD)链路数据表

    电子发烧友网站提供《DS90CF383B +3.3V可编程LVDS发射24平板显示(FPD)链路数据表.pdf》资料免费下载
    发表于 07-05 10:02 0次下载
    DS90<b class='flag-5'>CF</b>383B +3.3V<b class='flag-5'>可编程</b>LVDS发射<b class='flag-5'>器</b>24<b class='flag-5'>位</b>平板显示<b class='flag-5'>器</b>(FPD)链路数据表

    DS90CF363B +3.3V可编程LVDS发射18平板显示(FPD)链路数据表

    电子发烧友网站提供《DS90CF363B +3.3V可编程LVDS发射18平板显示(FPD)链路数据表.pdf》资料免费下载
    发表于 07-05 10:01 0次下载
    DS90<b class='flag-5'>CF</b>363B +3.3V<b class='flag-5'>可编程</b>LVDS发射<b class='flag-5'>器</b>18<b class='flag-5'>位</b>平板显示<b class='flag-5'>器</b>(FPD)链路数据表

    DS90C363,DS90CF364可编程LVDS发射18平板显示(FPD)数据表

    电子发烧友网站提供《DS90C363,DS90CF364可编程LVDS发射18平板显示(FPD)数据表.pdf》资料免费下载
    发表于 06-29 11:38 0次下载
    DS90C363,DS90<b class='flag-5'>CF</b>364<b class='flag-5'>可编程</b>LVDS发射<b class='flag-5'>器</b>18<b class='flag-5'>位</b>平板显示<b class='flag-5'>器</b>(FPD)数据表

    DS90C383/DS90CF384可编程LVDS发射24平板显示(FPD)数据表

    电子发烧友网站提供《DS90C383/DS90CF384可编程LVDS发射24平板显示(FPD)数据表.pdf》资料免费下载
    发表于 06-29 11:35 0次下载
    DS90C383/DS90<b class='flag-5'>CF</b>384<b class='flag-5'>可编程</b>LVDS发射<b class='flag-5'>器</b>24<b class='flag-5'>位</b>平板显示<b class='flag-5'>器</b>(FPD)数据表

    可编程电源如何编程

    可编程电源的编程方法和步骤。 ### 1. 可编程电源的基本概念 可编程电源通常由以下几个部分组成: - **输入模块**:接收交流或直流输
    的头像 发表于 06-10 15:24 1303次阅读

    具有可编程复位延迟功能的TPS3430-Q1汽车类窗口看门狗计时器数据表

    电子发烧友网站提供《具有可编程复位延迟功能的TPS3430-Q1汽车类窗口看门狗计时器数据表.pdf》资料免费下载
    发表于 03-28 17:15 0次下载
    具有<b class='flag-5'>可编程</b>复位延迟功能的TPS3430-Q1汽车类窗口看门狗<b class='flag-5'>计时器</b>数据表

    具有使能功能的TPS3431-Q1汽车标准可编程监视计时器数据表

    电子发烧友网站提供《具有使能功能的TPS3431-Q1汽车标准可编程监视计时器数据表.pdf》资料免费下载
    发表于 03-28 17:14 0次下载
    具有使能功能的TPS3431-Q1汽车标准<b class='flag-5'>可编程</b>监视<b class='flag-5'>器</b><b class='flag-5'>计时器</b>数据表

    现场可编程门阵列的原理和应用

    FPGA是一种可编程的硬件逻辑器件,其核心组成部分是可编程逻辑单元(PLU)和可编程互连资源(Interconnect Resources)。PLU是一组可编程的逻辑门,如与门、或门、
    的头像 发表于 03-27 14:49 675次阅读

    fpga开发板是什么?fpga开发板有哪些?

    FPGA开发板是一种基于FPGA(现场可编程门阵列)技术的开发平台,它允许工程师通过编程来定义和配置FPGA芯片上的逻辑电路,以实现各种数字电路和逻辑功能。FPGA
    的头像 发表于 03-14 18:20 1996次阅读

    具有可编程复位延迟功能的 TPS3430 窗口看门狗计时器数据表

    电子发烧友网站提供《具有可编程复位延迟功能的 TPS3430 窗口看门狗计时器数据表.pdf》资料免费下载
    发表于 03-13 14:42 2次下载
    具有<b class='flag-5'>可编程</b>复位延迟功能的 TPS3430 窗口看门狗<b class='flag-5'>计时器</b>数据表

    具有使能功能的 TPS3431 标准可编程监视计时器数据表

    电子发烧友网站提供《具有使能功能的 TPS3431 标准可编程监视计时器数据表.pdf》资料免费下载
    发表于 03-13 14:31 0次下载
    具有使能功能的 TPS3431 标准<b class='flag-5'>可编程</b>监视<b class='flag-5'>器</b><b class='flag-5'>计时器</b>数据表

    fpga开发板与linux开发板区别

    (Field-Programmable Gate Array)是一种可编程逻辑器件,它可以通过编程改变硬件逻辑电路的功能和结构。FPGA采用了可编程的门极,可以根据需要重新配置内部电路,从而实现不同的功能和逻辑关系。而Linux
    的头像 发表于 02-01 17:09 2230次阅读