开发环境:
开发板平台:中科蓝汛AB32VG1
软件平台:RT-Thread Studio V2.0.0
RTOS平台: rt-thread 4.0.3
操作系统: windows7
外设介绍:
本次评测的是AB322VG1的内部外设timer,此定时器分两种,一种是基本定时器,仅支持32位定时器功能,分别为定时器0/1/2;另一种是带有高级功能的定时器,其支持定时器模式、计数器模式、捕获模式以及PWM模式,为定时器3/4/5。
本次主要使用了TIMER1,设计到的寄存器有:
TIMER1CON: 定时器1控制寄存器;
TIMER1CPND:定时器1清除挂起寄存器;
TIMER1CNT: 定时器1计数器寄存器;
TIMER1PR:定时器1周期寄存器;
软件代码:
1、配置硬件定时器:
2、硬件定时器示例代码:
#include <rtthread.h>
#include "board.h"
//#include "led_app.h"
#define DEVICE_NAME_TIMER1 "timer1"
rt_device_t hw_time_dev;
rt_hwtimer_mode_t hwtimer_mode; // 定时模式,单次定时/周期定时
rt_hwtimerval_t hwtimerval; // 超时值配置
rt_err_t timer1_timeout_cb(rt_device_t dev, rt_size_t size)
{
rt_kprintf("This is ab32-vg1 board hwtimer1 test sample!\n");
return RT_EOK;
}
rt_err_t hw_timer_test(void)
{
rt_err_t ret = RT_EOK;
// 查找设备
hw_time_dev = rt_device_find(DEVICE_NAME_TIMER1);
if (hw_time_dev == RT_NULL)
{
rt_kprintf("find %s failed\r\n",DEVICE_NAME_TIMER1);
return RT_ERROR;
}
rt_kprintf("find %s success\n",DEVICE_NAME_TIMER1);
// 打开设备(读写)
rt_device_open(hw_time_dev, RT_DEVICE_OFLAG_RDWR);
// 设置定时器工作模式(周期定时)
hwtimer_mode = HWTIMER_MODE_PERIOD;
rt_device_control(hw_time_dev, HWTIMER_CTRL_MODE_SET, &hwtimer_mode);
// 设置超时回调函数
rt_device_set_rx_indicate(hw_time_dev, timer1_timeout_cb);
// 超时值配置
hwtimerval.sec = 1;{{image-20210320162200376.png(uploading...)}}{{image-20210320162430966.png(uploading...)}}
hwtimerval.usec = 0; // ms
rt_device_write(hw_time_dev, 0, &hwtimerval, sizeof(hwtimerval));
return RT_EOK;
}
int main(void)
{
rt_kprintf("Hello, ab32-vg1\n");
//led_app();
hw_timer_test();
return 0;
}
心得体会:
首先感谢中科蓝汛提供的开发板,初次上手体验感觉还是非常棒的,配套的下载工具也做的很棒,本次主要点了个灯以及开了个硬件定时器。但是,开发板的功能远不止这点点。还有蓝牙、FM等。希望中科蓝汛能够越做越好,也希望广大的攻城狮们能够都上手体验体验我们国产的芯片,不会失望的。
原作者:lsslny