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个16位时间计数器或一个1个16位脉冲计数器
- 可选中断可以从任何低功耗模式中唤醒
- 硬件触发输出
- LPTMR在所有电源模式下保持电源,包括低泄漏模式。LPTMR在进入模式之前,不需要在低功率模式下
2、原理图
无
3、寄存器
3.1、CSR:Low Power Timer Control Status Register
Field |
Name |
Description |
0 |
TEN |
定时器使能 |
1 |
TMS |
选择定时器模式
|
2 |
TFC |
有限计数器
|
3 |
TPP |
输入源的极性在脉冲模式下配置
|
4-5 |
TPS |
在脉冲模式下选择输入通道 |
6 |
TIE |
定时器中断使能 |
7 |
TCF |
定时器比较标志
|
8 |
TDRE |
定时器DMA请求使能 |
3.2、PSR:Low Power Timer Prescale Register
Field |
Name |
Description |
0-1 |
PCS |
预分频时钟选择 |
2 |
PBYP |
避开预分配
|
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;
}