imx6ull_alpha_epit_timer

本文详细介绍了EPIT(增强周期中断定时器)的配置过程,包括控制寄存器、状态寄存器、计数器设置,以及中断函数的实现。重点讲述了如何设置时钟源、分频、模式和中断处理,以在嵌入式系统中实现定时功能。
摘要由CSDN通过智能技术生成

仓库地址

1.简介

EPIT(Enhanced Periodic Interrupt Timer)

EPIT block diagram
在这里插入图片描述

大胆猜测:

ITIF(Interval Timer Interrupt Flag)

ITIE(Interval Timer Interrupt Enable)

2.寄存器

不配图了,从文档上搜索。

Control register (EPIT1_CR)

Status register (EPIT1_SR)

Load register (EPIT1_LR)

Compare register (EPIT1_CMPR)

Counter register (EPIT1_CNR)

3.流程

## 1.配置整体控制 EPIT1_CR

### 1.1.设置时钟源

### 1.2.设置分频

### 1.3.设置模式 set-and-forget

### 1.4.设置 EPIT1_CNR 的 初始值 为 EPIT1_LR 的值

### 1.5.使能 ITIE 为 1

## 2.设置计数器默认值 EPIT1_LR

## 3.设置 EPIT1_CMPR 为 0

## 4. GIC 使能中断

## 5. 注册中断函数

## 6. 使能 EPIT1 EPIT1_CR
void epit1_init(unsigned int frac, unsigned int value) {
	if (frac > 0XFFF) {
		frac = 0XFFF;
	}
	// ## 1.配置整体控制 EPIT1_CR
	EPIT1->CR = 0;
	//  1.1.设置时钟源
	EPIT1->CR |= 1 << 24;
	// 1.2.设置分频
	EPIT1->CR |= frac << 4;
	// 1.3.设置模式 set-and-forget
	EPIT1->CR |= 1 << 1;
	// 1.4.设置 EPIT1_CNR 的 初始值 为 EPIT1_LR 的值
	EPIT1->CR |= 1 << 3;
	// 1.5.使能 ITIE 为 1
	EPIT1->CR |= 1 << 2;

	// 2.设置计数器默认值 EPIT1_LR
	EPIT1->LR = value;

	// 3.设置 EPIT1_CMPR 为 0
	EPIT1->CMPR = 0;

	// 4. GIC 使能中断
	GIC_EnableIRQ(EPIT1_IRQn);

	//  5. 注册中断函数
	system_register_irqhandler(EPIT1_IRQn, (system_irq_handler_t)epit1_irqhandler, NULL);

	// 6. 使能EPIT1 EPIT1_CR
	EPIT1->CR |= 1 << 0;
}

void epit1_irqhandler(void) {
	static unsigned char state = 0;

	state = !state;
	// 读取
	if (EPIT1->SR & (1 << 0)) {
		led_switch(state);
	}

	EPIT1->SR |= 1 << 0;
}

4.中断函数流程

1.读取 ITIF(EPIT1_SR),判断是否为 1

2.清除 EPIT1_SR
void epit1_irqhandler(void) {
	static unsigned char state = 0;

	state = !state;
	// 1.读取 ITIF(EPIT1_SR),判断是否为 1
	if (EPIT1->SR & (1 << 0)) {
		led_switch(state);
	}
	// 2.清除 EPIT1_SR
	EPIT1->SR |= 1 << 0;
}

结束

// main.c
int main(void) {
	int_init();

	imx6u_clkinit();
	clk_enable();

	led_init();
	beep_init();
	exit_init();
	epit1_init(0, 66000000);  // 1s

	while (1) {
		delay(500);
	}
}
// Makefile
#...
showdev:
	ls /dev/sd*

down:
	chmod 777 imxdownload
	@echo "./imxdownload $(TARGET).bin /dev/sd"
#...
# shell cmd
make clean
make
make showdev
make down
./imxdownload main.bin /dev/sdb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值