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