中科蓝汛 中断设置

下面说明 中断设置的SDK版本:sdk_bt892xa2_v01x_s4041

中断是指系统在执行的过程中系统内发生任何非寻常或者非预期的急需处理处理事件,使得CPU暂时中断当前执行的程序去处理相应需要处理的程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。

        中断的使用在外设的使用中是非常常见的。下面说下中断的初始化:

/* 下面的中断初始化使用
    中断脚 PE6
    触发方式 下降沿
*/
void test_int_init(void)     //sys_set_tmr_enable(1, 1); 前调用
{
	//porting TODO: host platform peripheral dirver
    GPIOEDE  |= BIT(6);//数字IO使能: 0为模拟IO, 1 为数字IO
    GPIOEDIR |= BIT(6); //控制IO的方�? 0为输�? 1为输�?
    GPIOEFEN &= ~BIT(6);//0:当作通用GPIO使用 //1:当作其它功能性IO,如串�?SPI..
    GPIOEPU  |= BIT(6);//10K上拉使能

    sys_irq_init(IRQ_PORT_VECTOR, 0, test_int_handler);
    PORTINTEN |= BIT(19);
    PORTINTEDG |= BIT(19);

    WKUPEDG |= BIT(6);     //falling edge
    //WKUPEDG &= ~BIT(5);      //raising edge
    WKUPCON = BIT(6) | BIT(16);  //falling edge wake iput //wakeup int en
	//WDT_CLR();
}

        通过上面的代码可以看出,首先对IO口进行了设置 -> 设置中断处理函数 -> 中断使能 -> 设置触发方式 

        IO 口的设置这里就不说了,我之前的博客中有单独说明。说下中断初始化函数:

/* 函数声明在 api_sys.h 文件中*/
/* 函数说明
    vector:设置中断类型
    pr:中断优先级 一般情况下 为0
    isr:中断处理函数
    return:成功返回 true  失败返回 false*/
bool sys_irq_init(int vector, int pr, isr_t isr);           //初始化一个中断, pr为优先级

中断的类型在 api_sys.h 文件中(如下图),根据自己的需求去设置。(外设的中断类型一般都是IRQ_PORT_VECTOR吧。哈哈哈,我也不是很确定。)

        中断函数需要按照蓝汛内部的规则来设置,否则不会产生中断。如下:

/* 中断处理函数设置和规则说明
    1、中断函数中可以打印log,但是必须把log打印信息放在 .com_text 分区中。
(直接打印信息会导致系统崩溃)
    2、中断中需要手动进行清中断(有些平台是不需要手动清中断,是内部已经做好
了清中断的动作)
    3、中断函数需要放在 .com_text.timer 分区中
*/
AT(.com_text)
const char test_str2[] = "test_int_handler enter\n";

AT(.com_text.timer)
void test_int_handler()
{
    msg_enqueue(EVT_TEST_INT); // 发送消息出来进行处理真正的中断处理函数
	if ((WKUPEDG & (BIT(6) << 16))) {
		WKUPCPND = (BIT(6) << 16);  //CLEAR PENDING
		printf(test_str2);
	}
}

        中断中可以做一点小处理。真正的处理函数还是需要发送出来处理的,可以通过 msg_enqueue 将消息发送出来进行处理。msg_enqueue 发送出去的消息是在  void func_message(u16 msg) 函数中进行处理的。在switch 中添加相应的 case 进行处理函数的处理。

中断函数的放置也是很重要的,test_int_init 必须放在  sys_set_tmr_enable(1, 1); 函数的前面。也不是所有的这个函数前面,刚开机 在 void bsp_sys_init(void) 函数(bsp_sys.c文件中)中  sys_set_tmr_enable(1, 1); 的前面就可以了。

        在中科蓝讯平台中,不是中断函数初始化一次就可以一直存活到你关机。在进入休眠之前会把所有的中断销毁,待唤醒还不会自动生成。所以在进入休眠之后唤醒还需要再进行一次中断函数的初始化。

         static void sfunc_sleep(void) 函数是对蓝牙的休眠和唤醒的管理。在该函数中的唤醒部分找到 sys_set_tmr_enable(1, 1); 的位置,将中断初始化函数放在该位置的前面就可以了。

        如上图可以看到有很多情况下可以唤醒蓝牙设备的判断。你也可以加上你需要的条件进行判断唤醒设备。

        讲到这里就已经结束了,还有不足或者需要注意的点后续在添加。 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
中科ANC(主动降噪)调试流程主要包括以下几个步骤。 首先是硬件测试。在ANC调试之前,需要对ANC耳机的硬件进行测试,确保其正常工作。测试包括对耳机的驱动单元、传感器、电池以及连接线路等进行检测,确保没有损坏或故障。 接着是离线参数调试。在此步骤中,需要分析耳机在不同环境下的噪音特性,并根据实际情况调整ANC算法的离线参数,以达到降噪效果的优化。调试过程中需要使用专业的声音采集设备,对各种背景噪音进行准确的采集和分析。 然后是在线参数调试。在线参数调试主要通过人机交互的方式,用户提供反馈音频信号,耳机实时采集环境噪音并与反馈信号进行混合处理,调试ANC算法的在线参数,以根据用户需求实现最佳降噪效果。该过程需要多次反复调试,直至满足用户要求。 最后是整体效果评估。调试完成后,需要对ANC耳机进行整体效果评估。评估主要包括ANC的降噪效果、语音清晰度、电池续航能力等方面的测试。通过对音质、降噪效果、电池寿命等指标的综合评估,确定ANC耳机是否达到设计要求。 总的来说,中科ANC调试流程包括硬件测试、离线参数调试、在线参数调试和整体效果评估等多个环节,通过不断的优化和调整,确保ANC耳机在各种环境下都能实现最佳的降噪效果,提供用户良好的音频体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值