Yuqiang Wang e1498cabc9 SDK build (#47) 5 месяцев назад
..
.settings 4795f3d206 更新fsp为2.2.0 6 месяцев назад
board 4795f3d206 更新fsp为2.2.0 6 месяцев назад
figures 539cd344e1 增加示例的FSP配置描述 1 год назад
packages 4795f3d206 更新fsp为2.2.0 6 месяцев назад
rzn 0e9a0dfdbd fix iar link source 6 месяцев назад
rzn_cfg 0e9a0dfdbd fix iar link source 6 месяцев назад
rzn_gen 0e9a0dfdbd fix iar link source 6 месяцев назад
script 4795f3d206 更新fsp为2.2.0 6 месяцев назад
src f4bde77e2a 修复gpt 使用pwm 框架 以及其他示例中hal_entry 中的 主循环内容 1 год назад
.api_xml e7e2582a7c EtherKit 示例工程添加 1 год назад
.config 4795f3d206 更新fsp为2.2.0 6 месяцев назад
.cproject 4795f3d206 更新fsp为2.2.0 6 месяцев назад
.gitignore 43669c1c97 Fixed some known issues 1 год назад
.project e7e2582a7c EtherKit 示例工程添加 1 год назад
.secure_azone e7e2582a7c EtherKit 示例工程添加 1 год назад
.secure_rzone 4795f3d206 更新fsp为2.2.0 6 месяцев назад
.secure_xml 4795f3d206 更新fsp为2.2.0 6 месяцев назад
Kconfig 4795f3d206 更新fsp为2.2.0 6 месяцев назад
README.md e1498cabc9 SDK build (#47) 5 месяцев назад
README_zh.md e1498cabc9 SDK build (#47) 5 месяцев назад
SConscript 0e9a0dfdbd fix iar link source 6 месяцев назад
SConstruct e7e2582a7c EtherKit 示例工程添加 1 год назад
buildinfo.ipcf 0e9a0dfdbd fix iar link source 6 месяцев назад
buildinfo.json 4795f3d206 更新fsp为2.2.0 6 месяцев назад
configuration.xml 4795f3d206 更新fsp为2.2.0 6 месяцев назад
envsetup.sh e7e2582a7c EtherKit 示例工程添加 1 год назад
mklinks.bat e7e2582a7c EtherKit 示例工程添加 1 год назад
mklinks.sh e7e2582a7c EtherKit 示例工程添加 1 год назад
ozone_scons.jdebug 384e7a31df 修复scons固件无法运行的问题,添加ozone调试脚本 1 год назад
project.ewd 0e9a0dfdbd fix iar link source 6 месяцев назад
project.ewp 0e9a0dfdbd fix iar link source 6 месяцев назад
project.ewt 0e9a0dfdbd fix iar link source 6 месяцев назад
project.eww e7e2582a7c EtherKit 示例工程添加 1 год назад
rtconfig.h 4795f3d206 更新fsp为2.2.0 6 месяцев назад
rtconfig.py 384e7a31df 修复scons固件无法运行的问题,添加ozone调试脚本 1 год назад
rzn_cfg.txt 4795f3d206 更新fsp为2.2.0 6 месяцев назад
template.ewd 0e9a0dfdbd fix iar link source 6 месяцев назад
template.ewp 0e9a0dfdbd fix iar link source 6 месяцев назад
template.eww e7e2582a7c EtherKit 示例工程添加 1 год назад

README.md

GPT Driver Usage Instructions

English | 中文

Introduction

In our specific application scenarios, the use of timers is often indispensable. This example mainly introduces how to use the GPT device on the EtherKit board, including the basic timer usage and PWM usage.

FSP Configuration Instructions

The FSP is configured to enable GPT0 as a basic timer mode and GPT5 as a PWM mode:

image-20241204164917896

image-20241204164922394

Additionally, the pins for GPT0 and GPT5 are enabled:

image-20241126102147584

RT-Thread Settings Configuration

In the configuration, enable timer0 and PWM:

image-20241126102203077

image-20241126131544356

Example Project Instructions

The source code for this example is located in /projects/etherkit_driver_gpt:

int hwtimer_sample(void)
{
    rt_err_t ret = RT_EOK;
    rt_hwtimerval_t timeout_s;
    rt_device_t hw_dev = RT_NULL;
    rt_hwtimer_mode_t mode;
    rt_uint32_t freq = 400000000; /* 1 MHz */
    hw_dev = rt_device_find(HWTIMER_DEV_NAME);
    if (hw_dev == RT_NULL)
    {
        rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWTIMER_DEV_NAME);
        return -RT_ERROR;
    }
    ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
    if (ret != RT_EOK)
    {
        rt_kprintf("open %s device failed!\n", HWTIMER_DEV_NAME);
        return ret;
    }
    rt_device_set_rx_indicate(hw_dev, timeout_cb);
    rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
    mode = HWTIMER_MODE_PERIOD;
    ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
    if (ret != RT_EOK)
    {
        rt_kprintf("set mode failed! ret is :%d\n", ret);
        return ret;
    }
    /* Example: Set the timeout period of the timer */
    timeout_s.sec = 1;  /* seconds */
    timeout_s.usec = 0; /* microseconds */
    if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s))
    {
        rt_kprintf("set timeout value failed\n");
        return -RT_ERROR;
    }
    /* Read hwtimer value */
    rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s));
    rt_kprintf("Read: Sec = %d, Usec = %d\n", timeout_s.sec, timeout_s.usec);
    return ret;
}
MSH_CMD_EXPORT(hwtimer_sample, hwtimer sample);

The interrupt callback function is triggered every 1 second, printing output. Below is the PWM configuration and enablement:

PWM-related macros:

The current version of the PWM driver treats each channel as a separate PWM device, with each device having only one channel (channel 0). Using the PWM5 device, note that channel 0 is selected here:

#define PWM_DEV_NAME        "pwm5"  /* PWM device name */
#define PWM_DEV_CHANNEL      0      /* PWM channel */
struct rt_device_pwm *pwm_dev;      /* PWM device handle */

Configure the PWM period and duty cycle:

static int pwm_sample(int argc, char *argv[])
{
    rt_uint32_t period, pulse, dir;
    period = 500000;    /* Period is 0.5 ms, in nanoseconds */
    dir = 1;            /* Direction of PWM pulse width increase/decrease */
    pulse = 100000;     /* PWM pulse width value, in nanoseconds */
    /* Find device */
    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    if (pwm_dev == RT_NULL)
    {
        rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
        return RT_ERROR;
    }
    /* Set PWM period and default pulse width */
    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
    /* Enable device */
    rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
}
/* Export to msh command list */
MSH_CMD_EXPORT(pwm_sample, pwm sample);

Compilation & Download

  • RT-Thread Studio: Download the EtherKit resource package in the RT-Thread Studio package manager, then create a new project and compile it.

  • IAR: First, double-click mklinks.bat to generate the links for rt-thread and libraries folders. Then use Env to generate the IAR project, and finally, double-click project.eww to open the IAR project and compile it.

After compilation, connect the development board's Jlink interface to the PC, and download the firmware to the development board.

Running Results

In the serial terminal, input pwm_sample and hwtimer_sample to see the specific results.

The callback function is triggered every 1 second, and the output is printed:

image-20241126102330524

Using a logic analyzer, the PWM output waveform is measured as follows:

image-20241126131735797