资讯详情

S32K144(8)LPTMR

1、简介

2、原理图

3、寄存器

3.1、CSR:Low Power Timer Control Status Register

3.2、PSR:Low Power Timer Prescale Register

3.3、CMR:Low Power Timer Compare Register

3.4、CNR:Low Power Timer Counter Register

4、代码编写

4.1、lptmr.h

4.2、lptmr.c

4.3、main.c


1、简介

开发板S32K144 S32DS JLINK,裸机版程序编写

  1. 有一个1个16位时间计数器或一个1个16位脉冲计数器
  2. 可选中断可以从任何低功耗模式中唤醒
  3. 硬件触发输出
  4. LPTMR在所有电源模式下保持电源,包括低泄漏模式。LPTMR在进入模式之前,不需要在低功率模式下

2、原理图

3、寄存器

3.1、CSR:Low Power Timer Control Status Register

Field

Name

Description

0

TEN

定时器使能

1

TMS

选择定时器模式

  1. 计数器模式
  2. 脉冲模式

2

TFC

有限计数器

  1. TCF设置后CNR复位
  2. 溢出CNR复位

3

TPP

输入源的极性在脉冲模式下配置

  1. 脉冲计数沿计数增加
  2. 脉冲计数下降,沿计数增加

4-5

TPS

在脉冲模式下选择输入通道

6

TIE

定时器中断使能

7

TCF

定时器比较标志

  1. CNR的值不等于CMR,且不递增。
  2. CNR的值等于CMR,并以递增的方式递增

8

TDRE

定时器DMA请求使能

3.2、PSR:Low Power Timer Prescale Register 

Field

Name

Description

0-1

PCS

预分频时钟选择

2

PBYP

避开预分配

  1. 启用预分频/故障滤波
  2. 避开预分频/故障滤波

3-6

PRESCALE

预分频值

3.3、CMR:Low Power Timer Compare Register

Field

Name

Description

0-15

COMPARE

比较值

3.4、CNR:Low Power Timer Counter Register

Field

Name

Description

0-15

COUNTER

计数器值

4、代码编写

4.1、lptmr.h


#ifndef LPTMR_H_
#define LPTMR_H_

#include "S32K144.h"
#include "common.h"

void lptmr_init(uint_16 init_ms);


#endif /* CLOCKS_AND_MODES_H_ */

4.2、lptmr.c

#include "lptmr.h"
#include "led.h"
#include "common.h"
void lptmr_init(uint_16 init_ms)
{
    PCC->PCCn[PCC_LPTMR0_INDEX] = PCC_PCCn_CGC_MASK;	/* Enable LPTMR Clock 		*/
    LPTMR0->PSR |= LPTMR_PSR_PCS(0b01)                  /* LPTMR clk src: 1KHz LPO */
                  |LPTMR_PSR_PBYP_MASK;               	/* Bypass Prescaler 		*/
    LPTMR0->CMR = init_ms;                                  /* 1s interrupt 		*/
    LPTMR0->CSR |= LPTMR_CSR_TIE_MASK; 					/* Timer interrupt enabled */
    LPTMR0->CSR |= LPTMR_CSR_TEN_MASK;                  /* Enable Timer 			*/
    S32_NVIC_EnableIRQ(LPTMR0_IRQn,10);
}

void LPTMR0_IRQHandler (void)
{

	if(((LPTMR0->CSR >> LPTMR_CSR_TCF_SHIFT) & 1) == 1)
	{
		/* Check if TCF flag is set */
		LPTMR0->CSR |= LPTMR_CSR_TCF_MASK;	/*	Clear TCF flag by writting a logic one */
		LED1_TOGGLE;
	}
}

4.3、main.c


#include "S32K144.h"
#include "led.h"
#include "key.h"
#include "uart.h"
#include "clocks.h"
#include "lptmr.h"
int main(void)
{
	unsigned long i;
	WDOG_disable();        /* Disable WDOG */
	SOSC_init_8MHz();      /* Initialize system oscilator for 8 MHz xtal */
	SPLL_init_160MHz();    /* Initialize SPLL to 160 MHz with 8 MHz SOSC */
	NormalRUNmode_80MHz(); /* Init clocks: 80 MHz sysclk & core, 40 MHz bus, 20 MHz flash */
	bsp_led_init();
	bsp_key_init();

	uart_init(UART_Debug,19200);
    uart_enable_re_int(UART_Debug);

    lptmr_init(1000);

	uart_send_string(UART_Debug,"Running LPUART example\r\n");     /* Transmit char string */
	u1_printf("u1_printf Running LPUART example\r\n");     /* Transmit char string */
	while(1){
		for(i = 10000000;i>0;i--);
		LED4_ON;
		for(i = 10000000;i>0;i--);
		LED_OFF;
		uart_send_string(UART_Debug,"The LED light is flashing\r\n");     /* Transmit char string */
	}
    return 0;
}

 

标签: cnr25d121k电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台