查看: 755|回复: 1

【瑞萨RA4系列开发板体验】systick定时器精度测试

[复制链接]

116

主题

134

帖子

3778

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3778
发表于 2023-1-5 23:37:53 | 显示全部楼层 |阅读模式
作者:jf_1137202360

准备
下载Demo代码
基于\ra-fsp-examples\example_projects\ek_ra4m2\sci_uart\sci_uart_ek_ra4m2_ep\keil\sci_uart_ek_ra4m2_ep.uvprojx
工程测试
需要线修改Debug配置。

Systick
ra-fsp-examples\example_projects\ek_ra4m2\sci_uart\sci_uart_ek_ra4m2_ep\keil\ra\arm\CMSIS_5\CMSIS\Core\Include\core_cm3.h
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{

  1. return (1UL);                                                   /* Reload value impossible */
复制代码
}
SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

  1. SysTick_CTRL_TICKINT_Msk   |

  2.                SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
复制代码
return (0UL); /* Function successful */
}
之前分析过sys时钟为100MHz
所以设置100000个时钟tick就是1000uS即1mS。
SysTick_Config(100000);
然后使能中断
NVIC_EnableIRQ(SysTick_IRQn);
中断处理
void SysTick_Handler(void)
{

  1. static uint32_t s_time_u32 = 0;

  2. static uint32_t s_tmptime_u32 = 0;

  3. static uint8_t s_tog_u8 = 0;

  4. s_time_u32++;

  5. s_tmptime_u32++;

  6. if(s_tmptime_u32 >= 1)

  7. {

  8.           s_tmptime_u32 = 0;

  9.                 if(s_tog_u8 == 0)

  10.                 {

  11.                         s_tog_u8=1;

  12.                         R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_05,BSP_IO_LEVEL_HIGH);

  13.                 }

  14.                 else

  15.                 {

  16.                         R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_05,BSP_IO_LEVEL_LOW);

  17.                         s_tog_u8=0;

  18.                 }

  19. }
复制代码
}
其中R_IOPORT_Open (&g_ioport_ctrl, &g_bsp_pin_cfg);进行了IO初始化
ra-fsp-examples\example_projects\ek_ra4m2\sci_uart\sci_uart_ek_ra4m2_ep\keil\ra_gen\pin_data.c中
g_bsp_pin_cfg_data

  1. {

  2.     .pin = BSP_IO_PORT_04_PIN_05,

  3.     .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW
复制代码

},
配置P405输出
原理图可以看到该引脚控制LED,我们就用这个引脚测试


测试
设置1S和1mS翻转一次P405,
1S翻转一次时可以看到LED闪烁。
逻辑分析仪分别测量时间,可以看到时间比较准确。
1mS时实际对应的是1.999833/2=0.9999165mS.
当然这里还有逻辑分析仪本身的误差(24MHz采样),和翻转IO本身需要的时间没有考虑。



总结
本次测试了systick定时器,以及其精度,后面就可以利用该时间作为时间戳,后面coremark测试需要用到时间。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

3

主题

195

帖子

1540

积分

金牌会员

Rank: 6Rank: 6

积分
1540
发表于 2023-3-14 11:26:09 | 显示全部楼层

不错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户排行榜

RA助手

主题: 116帖子:134精华:0

RA_Lance

主题: 92帖子:132精华:9

lugl

主题: 45帖子:134精华:0

xujiwei263

主题: 16帖子:73精华:0

books咦

主题: 11帖子:11精华:2

Juggernaut

主题: 9帖子:95精华:0
快速回复 返回顶部 返回列表