一個使用定時器的跑馬燈

一個使用定時器的跑馬燈

?

有了上片“一個簡單的跑馬燈”后,已經(jīng)可以對IO口進行操作,但實際使用中經(jīng)常要定時的去執(zhí)行某一些動作,這就需要使用到定時器和中斷,在一定的時間去觸發(fā)執(zhí)行要求的動作。

CH563 4個定時器,功能挺多,這里只用最簡單的定時功能;這里選用TIM0,TIM0相關(guān)寄存器如下:

1234.png

都是資料中有詳細注解,這里就不一一描述了。初始化在資料中介紹如下:

12345.png

對應代碼如下:

void Timer3_Init( UINT32 count_end)

{??????????????????????? ????????????????????????????

??? R8_TMR3_CTRL_MOD = 0;

?????? ??

??? R32_TMR3_CNT_END = count_end;????????????? /* 捕獲的最大超時時間 */

??? R8_TMR3_CTRL_MOD |= RB_TMR_COUNT_EN ;?? /* 允許計數(shù),啟動定時器 */

}

到這里就完成了TIM0 定時功能的初始化;

CH563 中斷系統(tǒng)分為 IRQ ,FIQ 兩大類, FIQ 優(yōu)先級比IRQ 高,響應速度更快。

123456.png

這里使用IRQ 模式;IRQ 中斷初始化如下:

void IRQ_Init( void )

{???

??? R8_TMR0_INT_FLAG?? = RB_TMR_IF_DATA_ACT|RB_TMR_IE_CYC_END|RB_TMR_IF_FIFO_HF|

???????????????????????? RB_TMR_IF_DMA_END|RB_TMR_IF_FIFO_OV|RB_TMR_IF_DMA_ERR; /* 清除所有的中斷標志 */???

??? R8_TMR3_INTER_EN?? = RB_TMR_IE_CYC_END;???????????????????????????????????? /* 計數(shù)到達終值中斷使能 */

??? R8_INT_EN_IRQ_0??? = RB_IE_IRQ_TMR3;??????????????????????????????????????? /* 允許定時器3相關(guān)中斷產(chǎn)生 */

??? R8_INT_EN_IRQ_GLOB = RB_IE_IRQ_GLOB;??????????????????????????????????????? /* 只開啟IRQ全局中斷 */

}

?

?

初始化了中斷,還得要中斷子程序來響應中斷,中斷子程序的代碼參照上篇操作LED代碼更改后如下:

__irq void IRQ_Handler( void )

{

??? UINT8 i;

?

?? PRINT( "irq#? " );

?? if(R8_INT_FLAG_0&RB_IF_TMR3){

?????? i= R8_TMR3_INT_FLAG;

?????? if(i&RB_TMR_IF_CYC_END){????????????????????????????? ??????????????????/* 捕獲超時中斷 */

??????????? if(ss == 1)

???????????????????? {???? LED2_OUT_ACT( );

??????????????????????????? LED4_OUT_INACT( );

??????????????????????????? ss = 2;

???????????????????? }

???????????????????? else if(ss == 2)

???????????????????? {

??????????????????????????? LED2_OUT_INACT( );

??????????????????????????? LED3_OUT_ACT( );

??????????????????????????? ss = 3;

???????????????????? }

???????????????????? else

???????????????????? {

??????????????????????????? LED3_OUT_INACT( );

??????????????????????????? LED4_OUT_ACT( );

??????????????????????????? ss = 1;

???????????????????? }

?

???????????????????? R8_TMR3_INT_FLAG=0xff;???????????????????????????????????????????? /* 清除相應中斷標志 */

??????????? R8_INT_FLAG_0 |= RB_IF_TMR3;?????????????????????????????????????? /* 清除相應中斷標志 */

??????????? R32_TMR3_FIFO;

??????? }

??? }

}

?

完整代碼參考附件

icon_rar.gifTIM.zip


?

?

?


有個疑問,中斷是否只有IRQ ,FIQ 兩級優(yōu)先級?


是的


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频