TLSR825开发-外部中断

《DS_TLSR8258-E_Datasheet for Telink BLE+IEEE802.15.4 Multi-Standard Wireless SoC TLSR8258》参考自7.1.1.2章:

To use a pin as certain multiplexed function (neither the default function nor GPIO function), first
clear the bit in “Act as GPIO” column to disable GPIO function, and then configure “Register” in
“Pad Function Mux” column to enable multiplexed function correspondingly(当使用的某个GPIO的复用功能不是默认的模式时,需要先清除默认的复用功能,7.1.1.1有关于GPIO功能的一览表)

/*
 * mat_int.c
 *
 *  Created on: 2022-8-16
 *   brief: 设置为上升沿中断触发
 */
#include "mat_int.h"
#include "mat_log.h"
#include "gpio_8258.h"

#define INT_PIN		GPIO_PB5

void int_pin_init(void)
{
	gpio_set_func(INT_PIN, AS_GPIO);//设置引脚为GPIO模式,设置的时候会清除复用功能
	gpio_set_input_en(INT_PIN, ENABLE);//GPIO设为输入
	gpio_setup_up_down_resistor(INT_PIN, PM_PIN_PULLDOWN_100K);//设置为下拉

	gpio_set_data_strength(INT_PIN, ENABLE);//设置为强驱动
	gpio_set_interrupt_pol(INT_PIN, POL_RISING);//上升沿触发中断

	reg_irq_src = FLD_IRQ_GPIO_EN; //清中断标志
	reg_irq_mask |= FLD_IRQ_GPIO_EN;//使能irq中断
	gpio_en_interrupt(INT_PIN, 1);//使能该引脚的中断
}
/*
 * mat_int.h
 *
 *  Created on: 2022-8-16
 *      Author:
 */

#ifndef MAT_INT_H_
#define MAT_INT_H_

void int_pin_init(void);

#endif /* MAT_INT_H_ */

使用方法: 调用int_pin_init(),然后在中断函数中实现触发

/**
 * @brief   IRQ handler
 * @param   none.
 * @return  none.
 */
_attribute_ram_code_ void irq_handler(void)
{

	irq_blt_sdk_handler ();
	if(reg_irq_src & FLD_IRQ_GPIO_EN)
	{
		LOG_INFO("irq occur\r\n");
		reg_irq_src = FLD_IRQ_GPIO_EN;
	}
}

奇怪疑问:如果细心观察在初始化函数中调用reg_irq_src = FLD_IRQ_GPIO_EN这句,这里赋值为1居然是清除中断,然后在中断函数中调用if(reg_irq_src & FLD_IRQ_GPIO_EN),居然是中断触发了。也许这个IC就是写1清零?

6.2.3章节有以下描述:

When handling edge-triggered type interrupt, the corresponding IRQ source flag needs to be cleared via address 0x64a. Take the interrupt source usb_250us for example: First enable the interrupt source by setting address 0x642 bit[0] as 1b’1; then set address 0x643 bit[0] as 1b’1 to enable the interrupt. In interrupt handling function, 24-bit data is read from address 0x648~0x64a to check which IRQ source is valid; if data bit[16] is 1, it means the usb_250us IRQ source is valid. Clear thisinterrupt source by setting address 0x64a bit[0] as 1b’1.

在处理边缘触发型中断时,需要通过地址Ox64a清除相应的IRQ源标志。以中断源usb_250us为例:首先通过设置地址Ox642位[O]为1b'1使能中断源;然后设置地址Ox643位[0]为1b'1以启用中断。在中断处理功能中,从地址Ox648~0x64a读取24位数据,检查哪个IRQ源是有效的;如果数据位[16]为1,表示usb_250us IRQ源有效。通过将地址Ox64a位[0]设置为1b'1来清除此中断源。

详细请参考这位老哥:泰凌微TLSR825X开发二 GPIO常用配置与中断休眠唤醒_玉怀一捧雪的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入门->放弃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值