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;
}

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值