英飞凌
直播中

李霞

7年用户 1248经验值
私信 关注

XMC1302如何设置每次定时器中断时都可以直接向寄存器写入数值?

我的目的是控制私人服务器电机。 因为大多数伺服电机都是用脉冲控制的。 因此,如果涉及电机的加速和减速,每个脉冲之间的间隔可能不同。 因此,每次中断定时器时,下一个定时器的进入时间都会改变。 在 STM32 中,我可以将时间变成一个列表。 然后直接导入寄存器 tiM3->ARR = tim[X]。 但是,在 XMC1302 中,不允许直接向寄存器写入数值。 但需要使用

TIMER_Stop( TIMER_0);
status = TIMER_SetTimeInterval( TIMER_0, tim[ X ]);
if (status == TIMER_STATUS_SUCCESS)
{
        TIMER_Start( TIMER_0);
}

这就是重置的方法。 但这种代码运行速度太慢。这显然太长了。 有没有更快的方法?

回帖(1)

王艳

2024-5-28 16:06:18
在 XMC1302 微控制器中,要实现每次定时器中断时都可以直接向寄存器写入数值,您需要遵循以下步骤:

1. 初始化定时器:首先,您需要初始化定时器并配置其参数,例如预分频器、计数模式等。这可以通过调用 `TIMER_Init()` 函数来完成。

```c
TIMER_Init_TypeDef timer_init;
timer_init.mode = TIMER_MODE_PERIODIC;
timer_init.prescaler = 1;
timer_init.run_in_standby = false;
TIMER_Init(TIMER_0, &timer_init);
```

2. 设置定时器中断:接下来,您需要配置定时器中断并启用它。这可以通过调用 `NVIC_ClearPendingIRQ()` 和 `NVIC_EnableIRQ()` 函数来完成。

```c
NVIC_ClearPendingIRQ(TIMER_0_IRQn);
NVIC_EnableIRQ(TIMER_0_IRQn);
```

3. 定义定时器中断处理函数:定义一个函数,该函数将在每次定时器中断时被调用。在这个函数中,您可以根据您的需求修改定时器的参数,例如更新定时器的间隔时间。

```c
void TIMER_0_IRQHandler(void) {
    // 更新定时器间隔时间
    uint32_t new_interval = tim[X];
    TIMER_Stop(TIMER_0);
    status = TIMER_SetTimeInterval(TIMER_0, new_interval);
    if (status == TIMER_STATUS_SUCCESS) {
        TIMER_Start(TIMER_0);
    }

    // 其他处理...
}
```

4. 启动定时器:最后,启动定时器以开始计数。

```c
TIMER_Start(TIMER_0);
```

通过以上步骤,您可以在 XMC1302 微控制器中实现每次定时器中断时都可以直接向寄存器写入数值。这样,您可以根据需要调整定时器的间隔时间,从而控制私人服务器电机的速度。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分