网站首页 > 技术教程 正文
本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行BSP开发
在Aworks支持硬件定时器,所有的接口在aw_hwtimer.h当中,我们先通过如下两个函数来入门aw_hwtimer编程。一般来说CPU定时器类多很多种,有周期性中断,输入捕获,输出比较等类型,本文对周期性中断(即定时器)在Aworks下是如何使用的。
/**
* \brief 从系统分配一个符合指定名字和设备单元号的定时器
*
* \param[in] pname 定时器的名字
* \param[in] uint 定时器的设备单元号
* \param[in] time_no 定时器号码
* \param[in] pfunc_isr 定时器中断服务函数
* \param[in] p_arg 定时器中断服务函数参数
*
* \return 定时器句柄,AW_HWTIMER_NULL为无效的定时器句柄
*/
extern aw_hwtimer_handle_t aw_hwtimer_alloc_byname (const char *pname,
uint8_t uint,
uint8_t time_no,
void (*pfunc_isr) (void *p_arg),
void *p_arg);
/**
* \brief 使能定时器
*
* \param[in] timer 要使能的定时器句柄
* \param[in] frequency_hz 定时中断频率
*
* \return AW_OK 为成功,其它错误码为失败
*/
extern aw_err_t aw_hwtimer_enable (aw_hwtimer_handle_t timer, uint32_t frequency_hz);
1. 定时器介绍
本文使用GPT1当作普通定时器
2. 设备资源及驱动适配
2.1 设备资源的注册
其设备资源的初始化awbl_hwconf_imx1050_gpt1.h文件当中
其设备资源的注册在awbus_lite_hwconf_usrcfg.c文件中的g_awbl_devhcf_list结构体当中
/* GPT1 */
AWBL_HWCONF_IMX1050_GPT1
2.2 设备驱动的注册
其设备驱动的注册在如下位置
aw_prj_param_auto_cfg.h
#if defined AW_DEV_IMX1050_GPT1 || \
defined AW_DEV_IMX1050_GPT2
#define AW_DRV_IMX1050_GPT
#endif
aw_prj_config.c
#ifdef AW_DRV_IMX1050_GPT
awbl_imx10xx_gpt_drv_register();
#endif
1234567891011
2.3 设备宏开关
使能GPT模块只需要在aw_prj_params.h 新增相关的宏即可,如下所示
#define AW_DEV_IMX1050_GPT1
至此我们就可以使用Aworks框架进行hwtimer编程。
3. 如何测试
测试代码在下面所示,需要注意的是定时器名字和定时器所在的总线ID号,需要改成GPT1的驱动名称和其总线ID.如下所示,可参考设备资源文件awbl_hwconf_imx1050_gpt1.h
#define __TEST_HWTIMER_DRV_NAME AWBL_IMX10XX_GPT_DRV_NAME /* 定时器名字 */
#define __TEST_HWTIMER_BUSID IMX1050_GPT1_BUSID /* 定时器所在的总线ID */
12
#include "aworks.h"
#include "aw_int.h"
#include "aw_hwtimer.h"
#include "aw_vdebug.h"
#include "aw_led.h"
#include "aw_delay.h"
#include "aw_demo_config.h"
#define __TEST_HWTIMER_DRV_NAME AWBL_IMX10XX_GPT_DRV_NAME /* 定时器名字 */
#define __TEST_HWTIMER_BUSID IMX1050_GPT1_BUSID /* 定时器所在的总线ID */
#define LED DM_LED
/**
* \brief 硬件定时器中断服务函数。
* \param[in] p_arg : 任务参数
*/
static void mytimer_isr (void *p_arg)
{
aw_led_toggle(LED);
}
/**
* \brief hwtimer 测试函数
*/
aw_local void __task_handle (void *arg)
{
aw_hwtimer_handle_t mytimer;
/* 分配名为 __TEST_HWTIMER_DRV_NAME 的定时器 */
mytimer = aw_hwtimer_alloc_byname(__TEST_HWTIMER_DRV_NAME, /* 定时器名字 */
__TEST_HWTIMER_BUSID, /* 定时器所在总线ID */
0, /* 定时器编号 */
mytimer_isr, /* 中断回调函数 */
NULL); /* 中断回调函数的参数 */
if (mytimer) {
aw_hwtimer_enable(mytimer, 16); /* 使能定时中断 16Hz */
} else {
aw_kprintf("Timer allocation fail!\n");
}
for (;;) {
aw_mdelay(1000);
}
}
/******************************************************************************/
void demo_hwtimer_byname (void)
{
aw_task_id_t tsk;
tsk = aw_task_create("Hwtimer byname demo",
12,
4096,
__task_handle,
NULL);
if (tsk == NULL) {
return;
}
aw_task_startup(tsk);
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
4. 总结
在Aworks下硬件定时器编程 aw_hwtimer_alloc_byname的初始化还是AE支持的,希望大家遇到时别踩坑。文章越写到最后越觉得没有什么可以写的,抓住设备资源的注册和设备驱动的注册,及关注应用接口的使用,前提条件是默认总线驱动是没有BUG的,且Aworks框架之下已经相应的设备驱动。对于Aworks而言,其本身就是希望程序员更加专注于应用开发,而忘记底层代码的实现。
猜你喜欢
- 2024-10-25 Auto CAD 常用系统变量 cad2020系统变量
- 2024-10-25 做开发十年,我总结出了这些开发经验
- 2024-10-25 Windows高级工程师:GDI/GDI+绘图;基础入门大全
- 2024-10-25 菜比手把手教你破解游戏多开(轻喷)
- 2024-10-25 JVM 完整深入解析 jvm解析阶段
- 2024-10-25 Linux打开的文件过多Too many open file
- 2024-10-25 一文看完Oracle数据库之PGA概念、组成、自动管理、参数及视图
- 2024-10-25 JavaScript 中内存泄漏的原因以及对策
- 2024-10-25 史上最全Oracle文件损坏处理办法(附实验步骤)
- 2024-10-25 C++消息循环GetMessage/TranslateMessage/DispatchMessage
你 发表评论:
欢迎- 01-09单因素方差分析+作图
- 01-09描述性统计分析 之 均值分析
- 01-0986:重复性和再现性分析GRR(2)-GRR均值极差分析法和方差分析法
- 01-09SPC如何做方差分析,意义又在哪里?
- 01-09MedSPSS小课堂——多因素方差分析
- 01-09MedSPSS小课堂——双因素方差分析
- 01-09SPSS单因素方差分析的操作步骤及结果解读,陈老师SPSS数据分析
- 01-0914单因素方差分析:One-Way ANOVA
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)