5748G

5748G学习(1)——PIT

  • Periodic Interrupt Timer-Real Time Interrupt Timer (PIT-RTI)
    • Register 简介
    • 示例代码
      • 官方示例代码

Periodic Interrupt Timer-Real Time Interrupt Timer (PIT-RTI)

5748G有PIT_0到PIT_15,共16个PIT channels。它们可以用于产生Interrupt,也可以用做特定外设的触发器。如图:

在这里插入图片描述
在这里插入图片描述

The PIT module is an array of timers that can be used to raise interrupts and triggers. It includes a dedicated Real Time Interrupt Timer (RTI), which runs on a separate clock and can be used for system wakeup in STOP mode.

Features
• One RTI (Real-Time Interrupt) timer to wakeup the CPU in stop mode
• Ability of timers to generate trigger pulses
• Ability of timers to generate interrupts
• Maskable interrupts
• Option to raise RTI interrupt, even when the bus clock is switched off
• Power saving with a separate input clock for the RTI timer. All other timers share.
one common core clock.
• Independent timeout periods for each timer

Register 简介

在这里插入图片描述

PIT Module Control Register (PIT_MCR)
在这里插入图片描述
在这里插入图片描述

PIT Upper Lifetime Timer Register (PIT_LTMR64H) and PIT Lower Lifetime Timer Register (PIT_LTMR64L)
当timer0与timer1链接时,用于获取当前值。

Timer Load Value Register (PIT_RTI_LDVAL)
在这里插入图片描述
设置定时器的起始值。

Current Timer Value Register (PIT_RTI_CVAL)
在这里插入图片描述

Timer Control Register (PIT_RTI_TCTRL)
在这里插入图片描述
在这里插入图片描述

Timer Flag Register (PIT_RTI_TFLG)
在这里插入图片描述
保存PIT的中断标志。在触发中断后,通过向此寄存器写1来清除中断标志。

Timer Load Value Register (PIT_LDVALn)

Current Timer Value Register (PIT_CVALn)

Timer Control Register (PIT_TCTRLn)

Timer Flag Register (PIT_TFLGn)

示例代码

官方示例代码

Initialization and application

 // turn on PIT
 PIT_MCR = 0x00;
 // RTI
 PIT_RTI_LDVAL = 0x004C4B3F; // setup RTI for 5000000 cycles
 PIT_RTI_TCTRL = PIT_TIE; // let RTI generate interrupts
 PIT_RTI_TCTRL |= PIT_TEN; // start RTI
 // Timer 1
 PIT_LDVAL1 = 0x0003E7FF; // setup timer 1 for 256000 cycles
 PIT_TCTRL1 = TIE; // enable Timer 1 interrupts 
 PIT_TCTRL1 |= TEN; // start Timer 1
 // Timer 3
 PIT_LDVAL3 = 0x0016E35F; // setup timer 3 for 1500000 cycles
 PIT_TCTRL3 |= TEN; // start Timer 3

configuration for chained timers

 // turn on PIT
 PIT_MCR = 0x00;
 // Timer 2
 PIT_LDVAL2 = 0x00000009; // setup Timer 2 for 10 counts
 PIT_TCTRL2 = TIE; // enable Timer 2 interrupt 
 PIT_TCTRL2 |= CHN; // chain Timer 2 to Timer 1
 PIT_TCTRL2 |= TEN; // start Timer 2
 // Timer 1
 PIT_LDVAL1 = 0x23C345FF; // setup Timer 1 for 600 000 000 cycles
 PIT_TCTRL1 = TEN; // start Timer 1

configuration for the lifetime timer

 // turn on PIT
 PIT_MCR = 0x00;
 // Timer 1
 PIT_LDVAL1 = 0xFFFFFFFF; // setup timer 1 for maximum counting period
 PIT_TCTRL1 = 0x0; // disable timer 1 interrupts
 PIT_TCTRL1 |= CHN; // chain timer 1 to timer 0
 PIT_TCTRL1 |= TEN; // start timer 1
 // Timer 0
 PIT_LDVAL0 = 0xFFFFFFFF; // setup timer 0 for maximum counting period
 PIT_TCTRL0 = TEN; // start timer 0
 //read first LTMR64H and then LTMR64L.
 current_uptime = PIT_LTMR64H<<32;
 current_uptime = current_uptime + PIT_LTMR64L;

PIT通道0初始化(基于官方例程)

void PIT0_init(uint32_t LDVAL) {
    PIT.TIMER[0].LDVAL.R = LDVAL;  	/* Load # Pit clocks to count */
    PIT.TIMER[0].TCTRL.B.TIE = 1;      	/* Enable interrupt */
//    INTC.PSR[226].B.PRC_SELN0 = 0x8;  /* IRQ sent to Core 0   ERROR!*/
    INTC.PSR[226].B.PRC_SELN0 = 1;  /* IRQ sent to Core 0 */
    INTC.PSR[226].B.PRIN =10;        /* IRQ priority = 10 (15 = highest) */
    PIT.TIMER[0].TCTRL.B.TEN = 1;      	/* enable channel */
}

中断函数

void PIT0_isr(void) {
	LED_DS4 = ~LED_DS4;         /* Toggle DS4 LED port */

    PIT.TIMER[0].TFLG.R = 1;  	/* Clear interrupt flag */
}

main函数中调用初始化函数

PIT0_init(40000000); /* Initialize PIT channel 0 for desired SYSCLK counts*/
             	 	 	 /* timeout= 40M  PITclks x 4 sysclks/1 PITclk x 1 sec/160Msysck */
    					 /*        = 40M x 4 / 160M = 160/160 = 1 sec.  */

效果LED_DS4一秒一闪。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值