LPC5528 + NXH3670 BLE Audio System 移植——Service 移植

本篇博文主要讲解从 KL27 上移植 NXH3670 Headset 的 Service 到 LCP5528 中,包含源文件中具体需要修改的地方,虽然是以 LPC5528 来作为示例,如果大家想要移植到其他的 MCU 平台上,也可以参考本文,根据相对应的内容去做修改。

在本次移植中,主要以 LPC5528 的 spi_dma_b2b_transfer_ master 工程为基础工程, 把 NXH3670 SDK Headset 中的 Service 文件夹添加到 LPC5528 的工程中。

Service 这部分代码包含了一些服务应用程序,实现基本的 Headset 只需要移植下面五个部分。其中 I2C、nvm 和 codec_ctrl 部分可以直接添加到 LPC5528 的工程中使用, nxh_ctrl 和 framework 部分则需要我们做出相应的修改。 



一、nxh_ctrl

nxh_ctrl 中主要包含 NXH3670 的相关的一些控制的源文件,包含了 NXH3670 的启动、与 MCU 之间的通信引脚的初始化以及控制,这一部分的代码我们主要有以下几个源文件需要根据 LPC5528 的 SDK 来修改。



在开始修改之间,需要了解 NXH3670 的三个控制引脚:‘SRQ’、‘POR_RESET’、‘INTN’,MCU 通过‘SRQ’来改变 NXH3670 的状态, ‘SRQ’= 0,NXH3670UK将保持 INIT 状态,‘SRQ’= 1,NXH3670UK进入SPI命令处理程序状态;‘POR_RESET’是 NXH3670 的复位引脚,‘POR_RESET’= 0 复位芯片;NXH3670 可以通过‘INTN’向 MCU 申请中断。

1.1transport_ctrl_common.c

在‘transport_ctrl_common.c’中修改 static void PinEnable(bool enable) 函数对引脚的初始化。



改为 LPC5528 中引脚初始化函数。



初始化引脚后再修改下面两个对‘SRQ’进行操作的两个函数。



同样根据 LPC5528 中的函数来修改。



1.2nxh_boot.c

在 ‘nxh_boot.c’ 中需要修改对 ‘POR_RESET’ 操作的函数,这是控制 NXH3670 复位的引脚。



改为 LPC5528 的引脚设置函数。



1.3transport_ctrl.c

   ‘transport_ctrl.c’需要根据 LPC5528 的 SDK 修改‘INTN’引脚中断的设置。



修改为 LPC5528 的中断配置函数,并根据传入参数来设置中断。



修改 static void HsTransferCompleteCb()函数相应的中断配置,选择上升边沿触发。



中断配置修改如下。



下面函数中读引脚电平的函数也要做修改。



修改如下



接下来修改 error_t TRANSPORTCTRL_HsInit(void) 函数中断使能。



修改如下,这里我们使用的是 LPC5528 的 GINT0。



相似的修改还有。



修改如下。



1.4nxh_ctrl

‘nxh_ctrl’中修改相应‘POR_RESET’引脚配置。



修改如下。



1.5transport_spi.c

接下来需要修改‘transport_spi.c’中,相应的 SPI 的配置,首先在 pin_mux.c 对选用的 SPI 引脚进行初始化,选用正确的 IO 复用功能,这里选用 LPC5528 的 IO 0-2 引脚的复用功能 1 ,初始化为 MISO 作为示例。



因为在驱动 NXH3670 的时候需要对 SPI CS 引脚进行操作,因此不使用硬件的 CS ,只是将 CS 初始化为普通的 IO 口。

初始化好引脚后,回到‘transport_spi.c’,修改 CS 引脚的电平设置函数。

改用 LPC5528 的引脚电平设置函数,在做 SPI 通信的时候,会用到这个函数来设置 CS 的电平。

KL27 + NXH3670 的 SDK 工程中使用 DMA 通道进行 SPI 传输,根据的情况需要修改为实际使用的 SPI 组。



本次移植演示中,选用的是 SPI3,修改如下。



函数 static void PinEnable(bool enable) 主要是对 SPI 引脚的初始化,由于已经在 pin_mux.c 中已经对引脚进行初始化了,可以注释掉原来的这一段代码。



接下来是对DMA 通道进行设置,演示中我们使用的是 SPI3 根据 User manual 修改为对应的通道号。

修改为 LPC5528 的 DMA 初始化,并且需要选择对应 RX 和 TX 的通道。



同样,需要将类似的一些 KL27 中使用的函数,修改替换为 LPC5528 中对应功能的函数。



修改如下。



void TRANSPORT_Init(void)函数中对 SPI 进行初始化的这部分代码中也修改。



根据 LPC5528 SDK 修改对 SPI 的初始化,修改如下。



 二、framework

在 framework 中,需要修改的源文件主要是‘framework_power.c’以及‘framework_time.c’,下面一起来看看具体的修改过程。

2.1‘framework_power.c’

这个源文件主要是对 MCU 的电源模式进行设置,我们在本次移植总暂时先不考虑功耗,因此在这一部分我们仅需要将有关 KL27 的电源模式设置的函数注释掉即可。



2.2‘framework_time.c’

在这个源文件中,主要包含了定时器的配置,在 LPC5528 中,我们可以选用 MRT 定时器的通道 0,来实现对应的功能。

首先,在获取定时器值的函数中,修改掉 KL27 的读取函数,修改为 LPC5528 中的读取定时器当前值的函数代替。

修改为:



接下来把定时器的启动函数也修改为 LPC5528 中相应的函数。

修改为:




static void InitHwTimer(void) 中对定时器进行初始化。

还需要分别修改停止定时器计数和关闭定时器中断的函数。修改如下:



最后我们在定时器中断处理函数中修改好清除定时器断标志位的函数。




修改到了就这里就完成了 framework 部分的移植修改,也意味着 Headset 中的所需要用到的 Service 就移植完成了。接下来会继续更新移植 Headset 功能的其他部分的详细修改步骤,下次再见。

 

 

 

参考资料:

  1. NXH3670UK Product data sheet .PDF
  2. LPC54114 BLE Audio System - Quick Porting Guider .PDF

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论