复用应用
📎 原始文档:https://www.kdocs.cn/l/cbu2vzvTtyNq 复用应用
- ADKEY与LED复用 ac696n_soundbox_sdk_v1.7.0:

- AD104TF卡复用外挂flash功能注意
- 默认有写好的流程,建议复用的引脚如下,
接线配置如下:
PA10 SDDAT SPICS
PA11 SDCLK SPIDI/DO(spi单线模式)
PA12 SDCMD SPICLK
PS:一定不可以将 SDCLK 和 SPICLK进行复用,由于两个都是clk脚,会导致设备通讯过程中有读取异常情况出现
- TF卡复用外挂flash功能详细配置参考如下连接..链接:AD104TF卡复用外挂flash功能gitee配置参考
- sd卡cmd 复用linein检测ad值获取不到 背景:
ad采样有两种方式,一种是添加到系统默认的adc_scan中去,一种是临时添加一个ad采样用完就释放掉。linein检测中获取ad值是第二种临时的采样。
在系统默认ad采样时寄存器JL_ADC->CON & BIT(4)中的值是1
如果系统adc_scan 扫描的时间是偶数(奇数),linein_detect扫描的时间也是偶数(奇数),就会有大概率出现 adc_scan 的同时会执行linein_detect。把两者的扫描时间数设置为不同类型的时间,会减小发生的概率。
主要原因:
adc_enter_occupy_mode 没有把对应的ad通道添加到ad采样中去
adc_occupy_run 中检测到ad通道为-1 直接返回0
修改点:
linein_dev.c中或者adc_api.c修改扫描时间(每个sdk可能有不一样,这里是以696 1.1.1sdk为演示)
默认:
sys_timer_add(arg, linein_detect, 50);//50偶数
sys_s_hi_timer_add(NULL, adc_scan, 2);//2偶数
修改:
只修改 sys_timer_add(arg, linein_detect, 30);//30奇数
或者只修改 sys_s_hi_timer_add(NULL, adc_scan, 5);//5奇数
修改adc_enter_occupy_mode
void adc_enter_occupy_mode(u32 ch)
{
/*****************************star****************************/
#define USER_ADCH_MAX 10
for(int i=0;(i<USER_ADCH_MAX) && (JL_ADC->CON & BIT(4));i++){
asm volatile("nop");
}
/*****************************end****************************/
if (JL_ADC->CON & BIT(4)) {
return;
}
adc_queue[ADC_MAX_CH].ch = ch;
cur_ch_value = adc_sample(ch);
}
- AC706N系列HW_SPI分时复用使用方法 以下举例的方法是 norflash和 SPI RGB的分时复用方式
SDK版本是 le_audio_AC706N_2.0.0(patch_08.03)
br27_HW_SPI分时复用.rar
说明:
主要修改函数:
u8 led_spi_resume(void);//SPI RGB灯 硬件SPI恢复
u8 led_spi_suspend(void);//SPI RGB灯 硬件SPI挂起,norflash可以正常收发数据
void led_spi_send_rgbbuf(u8 *rgb_buf, u16 led_num); //主要的SPI 发送数据
void spi_rgb_test_func(void *priv);//使用这个函数做RGB灯的测试
demoAC706_le_audio_2.0.0_p08.06_rgb与外挂flash复用spi_2025112209.7z
demo注意点:
- rgb与flash复用时操作spi是互斥的,所以在同一时间只能做发送其中一种数据
- 互斥使用的是阻塞死等的方式,所以会相互影响
- 在pc下往外挂flash中写数据时会导致灯效的刷新时间,同时在发送rgb灯数据时会pend住pc的线程
- 互斥使用的是阻塞死等的方式,所以会相互影响
- spi的引脚只能映射do口其他引脚不能映射,在项目帮助文档中的硬件设计指南有说明
