不管是最新的Cortex-M85内核,还是经典的Cortex-M3内核单片机,都集成了SysTick模块。
cm3.h与cm85.h
单片机开发者,接触最多的就是core_cm3.h(core_cm85.h)文件,这里定义了与内核相关的大部分内容,平时我们调用最多也是这里的接口。我们对比一下这两个源文件:

通过对比源代码,你会直观地发现,cm85比cm3代码行数明显大多了,1943行和4672行。当然,行数多了这么多,左侧红色(差异)部分也比较多。
虽然,左侧“红色”比较多,但大部分都是多出来的行数以及宏定义。仔细对比,其实很多都是一样的,比如我们常用的系统复位函数:

__NO_RETURN __STATIC_INLINEvoid__NVIC_SystemReset(void)
{
__DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */
SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR& SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */
__DSB(); /* Ensure completion of memory access */
for(;;) /* wait until reset */
{
__NOP();
}
}
再比如系统Tick配置函数:

__STATIC_INLINEuint32_tSysTick_Config(uint32_tticks)
{
if((ticks -1UL) > SysTick_LOAD_RELOAD_Msk)
{
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 |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return(0UL); /* Function successful */
}
其实,你会发现,在Cortext-M3单片机上常用的这些函数接口,基本和CM85一样,这也说明CM85大部分接口向下兼容CM3。
RA8单片机SysTick使用描述
这里结合瑞萨RA8D1(Cortex-M85内核)单片机给大家讲述一下SysTick的用法以及描述其源码。
使用e2studio以及fsp软件包
工具自带的软件包其实是最实用的,这里以IO翻转,SysTick延时为例,手把手教大家创建一个工程,并演示效果。
1
打开e2studio创建单片机项目








基本上只需要动动鼠标“点一点”,一个完整的工程就创建好了。
2
配置工程
这里配置一些基础的信息,我们使用一个IO(PA01)来测试一下SysTick延时时间。

配置时钟树:



3
演示
这里只是简单演示Demo,我们添加一个IO翻转来测试SysTick延时时间。
while(1)
{
R_PORT10->PODR^=1<<(BSP_IO_PORT_10_PIN_01&0xFF); //PA01亮灭翻转
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_MILLISECONDS); //SysTick延时
}



如果改为1us翻转,通过IO翻转来测试,误差就相对明显一点。
4
源码描述
有经验的工程师应该都能看懂,这里针对初学者简单说下。
R_PORT10->PODR ^=1<<(BSP_IO_PORT_10_PIN_01 & 0xFF);
为了减少软件带来误差,这里直接操作寄存器进行IO翻转。
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
R_BSP_SoftwareDelay:阻塞延时函数,是FSP软件包自带函数接口。
BSP_DELAY_UNITS_MILLISECONDS:宏定义,延时单位(毫秒)。系统定义了三个宏:
typedefenum
{
BSP_DELAY_UNITS_SECONDS =1000000,///< Requested delay amount is in seconds
BSP_DELAY_UNITS_MILLISECONDS =1000, ///< Requested delay amount is in milliseconds
BSP_DELAY_UNITS_MICROSECONDS =1 ///< Requested delay amount is in microseconds
}bsp_delay_units_t;
R_BSP_SoftwareDelay:其实就是利用SysTick进行的延时。
-
单片机
+关注
关注
6058文章
44816浏览量
644444 -
瑞萨
+关注
关注
36文章
22353浏览量
87566 -
RA8
+关注
关注
0文章
9浏览量
6690 -
Systick
+关注
关注
0文章
63浏览量
13426
原文标题:瑞萨RA8系列教程 | RA8单片机SysTick使用描述
文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
瑞萨RA8快速上手指南:Cortex-M85内核瑞萨RA8开发环境搭建 并点亮一个LED

瑞萨Cortext-M85内核RA8系列单片机的串口输出实现方法

IAR为瑞萨RA8系列MCU开发提供支持
新品发布 | 瑞萨推出面向图形显示应用和语音/视觉多模态AI应用的全新RA8 MCU产品群

评论