不管是最新的Cortex-M85內(nèi)核,還是經(jīng)典的Cortex-M3內(nèi)核單片機(jī),都集成了SysTick模塊。
cm3.h與cm85.h
單片機(jī)開發(fā)者,接觸最多的就是core_cm3.h(core_cm85.h)文件,這里定義了與內(nèi)核相關(guān)的大部分內(nèi)容,平時我們調(diào)用最多也是這里的接口。我們對比一下這兩個源文件:

通過對比源代碼,你會直觀地發(fā)現(xiàn),cm85比cm3代碼行數(shù)明顯大多了,1943行和4672行。當(dāng)然,行數(shù)多了這么多,左側(cè)紅色(差異)部分也比較多。
雖然,左側(cè)“紅色”比較多,但大部分都是多出來的行數(shù)以及宏定義。仔細(xì)對比,其實(shí)很多都是一樣的,比如我們常用的系統(tǒng)復(fù)位函數(shù):

__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();
}
}
再比如系統(tǒng)Tick配置函數(shù):

__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 */
}
其實(shí),你會發(fā)現(xiàn),在Cortext-M3單片機(jī)上常用的這些函數(shù)接口,基本和CM85一樣,這也說明CM85大部分接口向下兼容CM3。
RA8單片機(jī)SysTick使用描述
這里結(jié)合瑞薩RA8D1(Cortex-M85內(nèi)核)單片機(jī)給大家講述一下SysTick的用法以及描述其源碼。
使用e2studio以及fsp軟件包
工具自帶的軟件包其實(shí)是最實(shí)用的,這里以IO翻轉(zhuǎn),SysTick延時為例,手把手教大家創(chuàng)建一個工程,并演示效果。
1
打開e2studio創(chuàng)建單片機(jī)項(xiàng)目








基本上只需要動動鼠標(biāo)“點(diǎn)一點(diǎn)”,一個完整的工程就創(chuàng)建好了。
2
配置工程
這里配置一些基礎(chǔ)的信息,我們使用一個IO(PA01)來測試一下SysTick延時時間。

配置時鐘樹:



3
演示
這里只是簡單演示Demo,我們添加一個IO翻轉(zhuǎn)來測試SysTick延時時間。
while(1)
{
R_PORT10->PODR^=1<<(BSP_IO_PORT_10_PIN_01&0xFF); //PA01亮滅翻轉(zhuǎn)
R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_MILLISECONDS); //SysTick延時
}



如果改為1us翻轉(zhuǎn),通過IO翻轉(zhuǎn)來測試,誤差就相對明顯一點(diǎn)。
4
源碼描述
有經(jīng)驗(yàn)的工程師應(yīng)該都能看懂,這里針對初學(xué)者簡單說下。
R_PORT10->PODR ^=1<<(BSP_IO_PORT_10_PIN_01 &?0xFF);
為了減少軟件帶來誤差,這里直接操作寄存器進(jìn)行IO翻轉(zhuǎn)。
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
R_BSP_SoftwareDelay:阻塞延時函數(shù),是FSP軟件包自帶函數(shù)接口。
BSP_DELAY_UNITS_MILLISECONDS:宏定義,延時單位(毫秒)。系統(tǒng)定義了三個宏:
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:其實(shí)就是利用SysTick進(jìn)行的延時。
-
單片機(jī)
+關(guān)注
關(guān)注
6052文章
44748瀏覽量
642503 -
瑞薩
+關(guān)注
關(guān)注
36文章
22333瀏覽量
87325 -
RA8
+關(guān)注
關(guān)注
0文章
8瀏覽量
6668 -
Systick
+關(guān)注
關(guān)注
0文章
63瀏覽量
13314
原文標(biāo)題:瑞薩RA8系列教程 | RA8單片機(jī)SysTick使用描述
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
基于瑞薩RA8單片機(jī)的智能小車項(xiàng)目方案 附源代碼

瑞薩RA8系列高性能MCU開發(fā)上手體驗(yàn)

瑞薩RA8快速上手指南:Cortex-M85內(nèi)核瑞薩RA8開發(fā)環(huán)境搭建 并點(diǎn)亮一個LED

瑞薩Cortext-M85內(nèi)核RA8系列單片機(jī)的串口輸出實(shí)現(xiàn)方法

瑞薩面向電機(jī)控制應(yīng)用推出性能卓越的RA8 MCU

IAR為瑞薩RA8系列MCU開發(fā)提供支持
新品發(fā)布 | 瑞薩推出面向圖形顯示應(yīng)用和語音/視覺多模態(tài)AI應(yīng)用的全新RA8 MCU產(chǎn)品群

AMEYA360 | 皇華:瑞薩面向電機(jī)控制應(yīng)用推出性能卓越的RA8 MCU
瑞薩電子全新RA8系列MCU產(chǎn)品介紹

瑞薩電子RA8E1和RA8E2 MCU新品解讀

評論