KDocs 研发资料库
  • 音频技术应用文档入口汇总
  • 杰理WINDOWS环境安装及其他事项
  • LINUX安装和编译
  • Linux环境编译SDK教程(ubuntu18.04)
  • 音频类补丁汇总表
  • 认证资料获取汇总(最新资料后台会更新)
  • 《Hi-Res申请指南v1.0》
  • FreeRTOS 开源协议版本
  • uCOS 开源协议版本信息
  • 各个模块关键资料汇总
  • 软件调试方法
  • Makefile编译
  • 提bug的规范
  • 常规设备使用指导
  • 对外特别发布开发注意点信息汇总
  • AD697X软件问题整理
  • AC700N软件问题整理
  • AC701X耳机软件问题整理
  • 951&961软件问题整理
  • AC104X软件问题整理
  • AC128N问题整理文档
  • 可视化工具调试问题整理
  • 耳机资料汇总
  • AC704N、 AC705N相关应用
  • AC695N&AC696N&AC608N音箱问题整理
  • JL701N音箱问题整理
  • AC692X软件问题整理
  • AC706N音箱问题整理
  • JL701N音箱问题整理(可视化工具SDK)
  • JL703N音箱问题整理
  • JL709N(JL689N)音箱问题整理
  • JL7094系列-入门到进阶开发指导
  • AC210N音箱问题整理
  • 无线麦系列版本支持指南
  • AW32N无线麦问题整理
  • lAD697X&JL701X 无线麦软件共性问题整理
  • AC706N无线麦问题整理
  • AW36N无线麦问题整理
  • AC710X无线麦问题整理
  • 唤醒源获取及唤醒IO设置
  • 电源
  • LVD
  • 长按复位配置方法
  • 低功耗应用
  • TIMER
  • UART
  • SPI
  • 内部FLASH空间添加用户自定义区域
  • IIC
  • GPIO
  • MCPWM
  • SD&U盘
  • 时钟&晶振
  • GPCNT
  • IO口crossbar映射功能
  • 文件系统使用总结
  • 复用应用
  • LINEIN_AUX相关应用
  • IIS音频接口应用
  • SPDIF模式相关(HDMI_ARC、光纤、同轴)
  • PDM LINK
  • 外设相关应用
  • 蓝牙相关
  • 杰理蓝牙距离调试文档
  • TWS耳机配对方式使用及生产把控指南
  • GFP谷歌快连及其认证流程指引
  • 蓝牙发射器(bt_emitter)相关
  • BLE应用
  • 关于提升BLE传输速率说明
  • BLE测试数据
  • MUSIC 模式相关应用
  • MIDI音乐实现
  • PC相关应用
  • FM相关应用
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20250107
  • fm应用详细设计说明书
  • 杰理FM硬件指南-20230315
  • ADC模块
  • AUDIO相关应用
  • 新Tools的音效调试使用
  • 混响应用使用说明
  • 音效调式
  • 音箱耳机低音小音量增强实现方法
  • DAC输出功率调试
  • DAC性能测试指南
  • 针对各类底噪、电流声分析流程
  • 录音相关应用
  • OPUS编解码相关
  • RTC相关应用
  • 升级相关
  • UI相关应用
  • 通话调试流程指南
  • 通话相关应用
  • 省电容mic使用手册
  • 如何测试验证手表通话系统的语音失真 V1.0
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 通话调试问题确定步骤
  • 内置触摸调试指南
  • 低功耗内置触摸介绍V2.2
  • 触摸相关文档
  • AC697X、AC698X内置触摸调试及整改方法V1.0
  • 产测相关应用
  • AC63X BLE DUT测试介绍
  • 兆华序列使用简易说明
  • JL_1T2蓝牙测试盒音频文件更换说明
  • ENC相关应用入口汇总
  • ANC相关应用入口汇总
  • JL DMS通话调试手册-V3.9.4
  • ANC-ENC结构设计要点-20240407
  • 半入耳式ANC耳机器件选型与结构设计指南V1.0
  • JL 耳道自适应调试指南
  • ANC相关问题处理
  • ANC调试文档
  • 评估蓝牙耳机通话上行降噪性能的方法 V1.0 (2)
  • FCC 或者 BQB 认证相关应用
  • BQB profile 测试中常遇到的问题点汇总
  • 蓝牙参数整理20210811
  • 杰理科技认证问题参考
  • 无线音频产品开发指南
  • 无线麦系列从入门到进阶开发指导
  • 量产烧录相关说明
  • 一拖八烧录器远程过程调用说明
  • 量产相关建议
  • EffectTool(eq)调试工具说明文档
  • AC897AD697系列的EQ调试方法-V3
  • 杰理调音指南-20220622
  • 音效模块总结
  • 简要调音步骤指引(可视化)
  • 耳机充电与通信调试指南
  • 充电仓硬件调试指南
  • 充电仓软件问题整理
  • AC951常用说明
  • AC951_AC961_开发板使用说明V1.0
  • 彩屏仓AC982 入门指导及FAQ
  • 蓝牙音频APP相关应用
  • 手机APP的简介和开发流程
  • 蓝牙音频系列-硬件设计指南
  • 静电测试及整改方法-20220706
  • TWS耳机底噪整改指南V1.2
  • 杰理蓝牙距离调试文档
  • 蓝牙RF硬件设计与调试V1.1-20250219
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20241228
  • 音效调试指南
  • 无线话筒K歌音箱标准开发流程
  • 杰理科技 700N TWS耳机产品标准-202303
  • 杰理科技 701N 广播产品标准-202303
  • JL-HAT ANC高效产测自适应
  • 无线话筒测试板使用介绍
  • 一拖八频偏校准使用说明
  • 领夹麦产测工具使用介绍
  • Dongle量产测试说明
  • Dongle+Tws或头戴式 SDK通过工具绑定配对功能说明文档
  • 双麦ENC产测宏配置验证方法 V1.0
  • JL耳机方案麦克风声学测试指令_V1.0
  • JL耳机方案麦克风声学测试指令_V2.0
  • JL_ENC自动测试命令_V0.0.1
  • JL蓝牙测试盒用例说明
  • LDAC自测环境搭建_ubuntu
  • 延迟小板使用手册
  • 杰理库文件的制作及添加实现过程
  • 关于 AC635N&AC636N系列免晶振兼容性补丁 说明
  • 关于 AC63系列VM兼容性修复补丁_20250224 说明
  • 关于 AC632N &AE632N_ 蓝牙& 低功耗兼容性修复补丁 说明
  • AD698N和AC638N电压优化补丁V3说明
  • 关于 AC635N&AC636N漏电和E&G版兼容联合补丁 说明
  • AD698N和AC638N电压优化补丁V2说明
  • 702相关应用
  • 2024-4-30 发布歌词显示SDK开发注意事项
  • BQB RF & FCC 认证测试固件问题汇总及源码
  • BQB profile 测试中常遇到的问题点汇总
  • 进dut测试模式方法及固件
  • 704-频偏修改bin文件合集
  • 701手表BQB PROFILE认证注意事项
  • 认证的干扰规避整改
  • 海外CRA认证报告生成说明
  • JL700N可视化工具问题处理文档
  • JL701X可视化工具问题处理文档
  • JL701N_earphone_release_v1.6.0_ANC 低功耗问题补丁
  • JL708X可视化工具问题处理文档
  • JL709N可视化工具问题处理文档
  • JLstudio可视化工具使用说明
  • 一拖二-串口_蓝牙_app在线EQ、通话参数及调试方式和内置触摸调试
  • 可视化JL701M_DONGLE_SDK添加MIC为发射源
  • 可视化JL701M_DONGLE_SDK添加按键切换usb audio与MIC发射源
  • JL701M_DONGLE_SDK_1.0.0_dongle输入linein输出dac
  • 701可视化_a2dp_to_le_demo说明
  • 耳机系列demo汇总
  • JL7018F&JL7006F_7003F AUX IIS
  • 一键连接应用
  • 普通SDK动态开关一拖二功能
  • 蓝牙分析仪(EllisysBluetoothAnalyzer)抓包例程
  • TWS配对常见应用
  • APP自定义按键的demo
  • AC700N 播歌双EQ DEMO示例及说明
  • AC698V164 MIC与蓝牙音乐共同输出DAC demo
  • 添加第三方算法以及多算法授权流程
  • 空间音频配置方法
  • 普通高低电平TWS耳机控制通讯
  • 入耳检测状态更新demo解析
  • 资源优化(非可视化的SDK)
  • 资源优化(可视化SDK)
  • 翻译耳机、语音识别应用demo
  • 耳机抗干扰问题排查和优化
  • AC698D2 抗干扰优化
  • AC696X软件问题整理
  • AC695X软件问题整理
  • AC695X软件问题整理_1722249702
  • AC608X软件问题整理
  • JL701N_2T1_DUPLEX 应用软件问题汇总
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • AC706N-le_audio-200SDK有线_无线麦录音demo
  • jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
  • 底噪调试
  • AW328A烧录说明
  • 文档合集
  • AC706N_wireless_mic_release_PATCH_20240712 补丁 说明
  • AC706N_wireless_mic_release_PATCH_20240726 补丁 说明
  • AC706N_wireless_mic_release_V1.0.0、1.0.1、1.0.2 补丁 说明
  • AC706N_wireless_mic_release_V1.1.2 中的2T1应用 RX端不绑定配对,TX端实现绑定配对的修改方法
  • 各系列省晶振实现方法
  • iis tx rx说明文档
  • spdif信号
  • 蓝牙电话本
  • 安卓手机同步时间补丁
  • CDC配置
  • PC模式下增加Teams唤起功能
  • 杰理HDMIARC开发实现过程
  • AC701N patch06之前的版本用第三方算法节点实现新版本的pcm delay节点功能
  • (K歌音箱)各SDK音效配置相关说明
  • 长文件录音
  • 点阵屏歌词字库相关(蓝牙歌词,普通歌词)
  • 字模提取工具说明
  • 音箱可视化彩屏-入门到进阶开发指导
  • 彩屏LVGL UI设计及工具使用
  • 使用内部UI框架进行UI调试的系列步骤
  • AD101C使用强制升级工具spi 烧录不了问题处理(测试版本)
  • AD161扩展灯板说明文档
  • 歌词显示器开发注意项
  • 使用硬件数字增益控制通话下行音量(可视化)
  • 杰理小牛产测资料
  • ENC配置说明
  • 通话调试流程指引
  • ANC相关功能demo
  • 无线麦硬件资料汇总
  • 无线麦相关应用
  • 无线麦复杂功能补丁包汇总
  • 无线话筒形态SDK程序&开发经验&问题点分享
  • 双模式结合应用问题汇总
  • 无线麦距离优化案例
  • 无线麦系列中的双工形态(duplex)演变开发对讲机方案开发资料
  • 音箱入门到进阶指导文档(编写中)
  • 蓝牙耳机品控和生产技巧
  • 982过_欠压标志获取异常
  • 如何获取最新涂鸦SDK及库文件
  • 无线话筒K歌音响-调音标准流程
  • 无线话筒产测流程

AC104X软件问题整理

📎 原始文档:https://www.kdocs.cn/l/caPP0yeU19xM

AC104X软件问题整理

链接:
提取码:

以下是杰理客户问题反馈的二维码图片,可以通过微信扫二维码填写反馈!
也可以通过访问链接填写反馈: HYPERLINK "https://www.wjx.cn/vj/O1EbvrN.aspx" https://www.wjx.cn/vj/O1EbvrN.aspx
我们将第一时间安排对应工程协助解决!
image

杰理开源社区国内仓库https://gitee.com/Jieli-Tech
 HYPERLINK "https://gitee.com/Jieli-Tech/fw-AD15N/issues" https://gitee.com/Jieli-Tech/fw-AD15N/issues 这里有一些社区开发者的问题反馈,遇到问题可以先去这里看看。

TOC \o "2-2" \h \u  HYPERLINK \l _Toc8086 1. 串口设置好以后打印乱码,内部晶振没有校准,需要加下下面这段代码-210610hxw  PAGEREF _Toc8086 3
 HYPERLINK \l _Toc3105 2.强制升级-210610hxw  PAGEREF _Toc3105 3
 HYPERLINK \l _Toc22185 3.DAC输出方式设置,可以选择模拟输出和PWM输出-210610hxw  PAGEREF _Toc22185 3
 HYPERLINK \l _Toc32267 4.SD卡IO设置-210610hxw  PAGEREF _Toc32267 4
 HYPERLINK \l _Toc3237 5.播MP3提示音功能-210610 hxw -2021-10-8 WGH完善  PAGEREF _Toc3237 5
 HYPERLINK \l _Toc17798 6.V102版本SDK播放变调-210610hxw  PAGEREF _Toc17798 10
 HYPERLINK \l _Toc21508 7.进入soft off后插拔sd卡会复位-210610hxw  PAGEREF _Toc21508 11
 HYPERLINK \l _Toc1947 8.添加定时器中断-210610hxw  PAGEREF _Toc1947 12
 HYPERLINK \l _Toc28757 9.输出3路PMW-210610hxw  PAGEREF _Toc28757 13
 HYPERLINK \l _Toc2459 10.V102版本SDK加FLASH连电脑传文件和播放-210610hxw  PAGEREF _Toc2459 15
 HYPERLINK \l _Toc27037 11.无缝循环播放210702hxw  PAGEREF _Toc27037 16
 HYPERLINK \l _Toc5002 12.AD系列MIDI功能使用说明-210705hxw  PAGEREF _Toc5002 17
 HYPERLINK \l _Toc3995 13.串口通信 串口接收IO需要设置数字功能-210715hxw  PAGEREF _Toc3995 18
 HYPERLINK \l _Toc26314 14.增加一个输入捕捉通道-210729hxw  PAGEREF _Toc26314 18
 HYPERLINK \l _Toc5187 15.睡眠以后定时唤醒系统继续跑不复位-210730hxw  PAGEREF _Toc5187 23
 HYPERLINK \l _Toc29497 16.检测MIC能量自动录音自动播放参考-210809hxw  PAGEREF _Toc29497 24
 HYPERLINK \l _Toc24295 17.V104以前的SDK可能出现有些芯片音乐播放速度快-210902hxw  PAGEREF _Toc24295 25
 HYPERLINK \l _Toc1564 18.编译提示FW文件工具需要更新-210902hxw  PAGEREF _Toc1564 25



  1. 串口设置好以后打印乱码,内部晶振没有校准,需要加下下面这段代码-210610hxw 生产烧录的时候要屏蔽这段
    int c_main(int cfg_addr)
    {​
    #if 1
      /debug code/
      JL_PLL->CON1 = 0XA403730; //me
    //  JL_PLL->CON1 = 0XA40372d; //卓豪
      JL_PLL->CON1 = 0XA403724; //测试部
      JL_PLL->CON0 |= BIT(0);//EN
      volatile int i=0;
      for(i=0; i<0xfffff; i++);
      JL_PLL->CON0 |= BIT(1);//RST
      for(i=0; i<0xfffff; i++);
      /
    ******

2.强制升级-210610hxw

用4.0版本升级工具把第二档搬上去。如果还不行就把升级工具升级到最新版本。

3.DAC输出方式设置,可以选择模拟输出和PWM输出-210610hxw

#define DAC_MODE_1_A   ( DAC_PWM ) //PWM
// 以下DSM模式暂时皆不可用
// #define DAC_MODE_1_B   ( DAC_DSM | DAC_DSM11 )
// #define DAC_MODE_1_C   ( DAC_DSM | DAC_DSM2 )
// #define DAC_MODE_1_D   ( DAC_DSM | DAC_DSM3 )
// #define DAC_MODE_2_A   ( DAC_DSM | DAC_DSM7 )
// #define DAC_MODE_3_A   ( DAC_PWM )
// #define DAC_MODE_3_B   ( DAC_DSM | DAC_DSM11 )
// #define DAC_MODE_3_C   ( DAC_DSM | DAC_DSM2 )
// #define DAC_MODE_3_D   ( DAC_DSM | DAC_DSM3 )
// #define DAC_MODE_4_A   ( DAC_DSM | DAC_DSM2)
#define DAC_MODE_5_A   ( DAC_DSM | DAC_DSM7) //模拟信号
#define DAC_CURR_MODE  DAC_MODE_5_A

4.SD卡IO设置-210610hxw

芯片内部只有一组卡口,不管选择那组卡口SDMMCA_EN不需要修改。
在这里设置sd卡。
//SH54:
//SD A组IO:   CMD:PA02    CLK:PA01    DAT:PA03
//SD B组IO:   CMD:PA12    CLK:PA11    DAT:PA10
//SD C组IO:   CMD:PA05    CLK:PA04    DAT:USBDM
//SD D组IO:   CMD:PA05    CLK:PA04    DAT:PA06
//SH55:
//SD A组IO:   CMD:PA02    CLK:PA01    DAT:PA03
//SD B组IO:   CMD:PB01    CLK:PB00    DAT:PB02
//SD C组IO:   CMD:PB05    CLK:PB04    DAT:PB06
//SD D组IO:   CMD:PA07    CLK:PA06    DAT:PA08
#if TFG_SD_EN
SD0_PLATFORM_DATA_BEGIN(sd0_data)
  .port                   = 'B',
  .data_width             = 1,
  .speed                  = 8000000,
#if 0 //CMD检测
  .detect_mode            = SD_CMD_DECT,
  .detect_func            = sdmmc_0_cmd_detect,
#endif
#if 1 //CLK检测
  .detect_mode            = SD_CLK_DECT,  
  .detect_func            = sdmmc_0_clk_detect,
  .detect_io_level        = 0,//0:低电平检测到卡  1:高电平检测到卡
#endif
#if 0 //IO检测
  .detect_mode            = SD_IO_DECT,
  .detect_func            = sdmmc_0_io_detect,
  .detect_io              = IO_PORTx_xx,//用于检测的引脚
  .detect_io_level        = x,//0:低电平检测到卡  1:高电平检测到卡
#endif
  .power                  = NULL,
  .priority               = 3,
SD0_PLATFORM_DATA_END()
#endif

5.播MP3提示音功能-210610 hxw -2021-10-8 WGH完善

5.1
先用资源文件打包工具把提示音打包成一个文件,拿到新的打包工具,参考以下放大做成打包好的文件。
image 该问题可以找杰理HXW要
image

image

最终会将pc.mp3打包进到TONE_SL

5.2 在批处理里面加上刚才做好的文件
image

5.3打开FLASH里面文件的接口SDK默认就有,改成自己的目录即可。打开文件成功以后用文件句柄调用开始解码。解码结束以后需要释放资源!

image

image

#if 1
#define vfs_demo_show(ptr,err)              \
    log_info("Demo 0x%x : %s",err,ptr);       \
    if(0 != err){​                           \
        return ;                            \
    ​}

extern dec_obj *decoder_io(void *pfile, u32 dec_ctl, dp_buff *dbuff, u8 loop);
static u8 demo_buff[512];
extern bool user_start_decode(void *pvfile);
extern bool start_decode(bool break_point);
extern void stop_decode(void);
extern u16 app_get_msg(void);
extern int bsp_loop(void);

void *tone_pvfs = 0;
void *tone_pvfile = 0;

void vfs_stop_tone(void);

void vfs_play_tone(void)
{​
    u32 err;
    int play_err;
    log_info("vfs init !!!\n");
    vfs_init();
    log_info("vfs init finish !!!\n");
    err = vfs_mount(&tone_pvfs, (void *)NULL, (void *)NULL);
    vfs_demo_show("vfs_mount\n", err);

    err = vfs_openbypath(tone_pvfs, &tone_pvfile, "/TONE_SL/pc.mp3");

    vfs_demo_show("vfs_openbypath\n", err);
    // err = vfs_read(tone_pvfile, demo_buff, 512);
    log_info("vfs read len : %d\n", err);
    // log_info_hexdump(demo_buff, 512);
    log_info(">>vfs_demo-tone_pvfile:%x \n", (u32)tone_pvfile);
    user_start_decode(tone_pvfile);
    // os_time_dly(230);
    // vfs_stop_tone();
    return;
​}

void vfs_stop_tone(void)
{​
    stop_decode();
    log_info("dly end\n");
    vfs_file_close(&tone_pvfile);
    log_info("vfs_file_close\n");
    vfs_fs_close(&tone_pvfs);
    log_info("vfs_fs_close\n");
​}

void vfs_tone_loop(void)
{​
    u16 msg;
    log_info("vfs_tone_loop \n");
    while (1) {​
        msg = app_get_msg();
        bsp_loop();
        switch (msg) {​
            case MSG_WAV_FILE_END:
            case MSG_MP3_FILE_END:
            case MSG_F1A1_FILE_END:
            case MSG_F1A2_FILE_END:
            case MSG_MIDI_FILE_END:
            case MSG_DECODE_FILE_END:
                log_info("decoder end>>>>>>>>>>>>>>>>>>>>>>>> msg = %d\n",msg);
                vfs_stop_tone();
                return;
            default:
                break;
        ​}
    ​}
​}

#endif

6.V102版本SDK播放变调-210610hxw

关掉工程选项里面的MIO
image

7.进入soft off后插拔sd卡会复位-210610hxw

SD供电串联电阻加大(4.7欧姆),另外VDDIO电源电容加大(106).soft off的时候 vddio 电流档会变弱,会可能出现拉电复位的情况。

8.添加定时器中断-210610hxw

注意中断函数放在RAM里面,客户自己加的代码不要太多否则RAM不够。

attribute((weak))
AT(.tick_timer_code)
void user_timer2_ram_loop(void)
{​
    // putchar('1');
​}

void user_timer2_loop(void){​

​}

SET(interrupt(""))
AT(.tick_timer_code)
void user_timer2_isr()
{​
    /*
     *用户的timer函数不能加入到这里,加到tick_timer_loop
     * */
    //bit_clr_swi(TIME0_INIT);
    JL_TMR2->CON |= BIT(6);

    user_timer2_ram_loop();

    // user_timer2_loop();
​}

void user_timer2_init(void)
{​
    tt_printf("----user_timer2_init \n");
    HWI_Install(IRQ_TIME2_IDX, (u32)user_timer2_isr, IRQ_IRTMR_IP) ; //timer0_isr
    JL_TMR2->CNT = 0X00;
    JL_TMR2->PRD = (sys_clock_get() / 1000) * 2;
    JL_TMR2->CON |= BIT(0);

tt_printf("user_timer2_init--end \n");
​}

9.输出3路PMW-210610hxw

    user_pwm_init(IO_PORTA_14,100 ,0,1);
    user_pwm_init(IO_PORTA_05,200 ,1,0);
    user_pwm_init(IO_PORTA_07,150 ,2,1);

#define PWM_FRE                 3000
void user_pwm_init(u32 port,u16 pwm_wide,u32 pwn_chl,bool output)
{​
#if 1

    
    log_info("mio pwm init -> pwn_chl : %d\n", pwn_chl);
    switch (pwn_chl)
    {​
    case 0:
        if(output){​
            SFR(JL_IOMC->IOMC3, 0, 3, 0);   //输出到OUTPUT 0

            // IO选择输出OUTPUT信号
            gpio_set_pull_up(port, 1);
            gpio_set_pull_down(port, 1);
            gpio_set_direction(port, 0);
            gpio_set_die(port, 0);
        ​}else{​
            gpio_set_direction(port, 0);
            gpio_set_die(port, 1);
            SFR(JL_IOMC->IOMC0, 16, 1, 1);   //输出到PWM默认IO
        ​}
        JL_PWM->TMR0_PR = sys_clock_get() / PWM_FRE;
        JL_PWM->CH0_CMP = (sys_clock_get() / PWM_FRE) * pwm_wide / 255; //pwm_var范围在0-255
        JL_PWM->TMR0_CON = BIT(5);
        break;
    case 1:
        if(output){​
        gpio_set_pull_up(port, 1);
        gpio_set_pull_down(port, 1);
        gpio_set_direction(port, 0);
        SFR(JL_IOMC->IOMC3, 0, 3, 1);
        gpio_set_die(port, 0);
        ​}else{​            
            gpio_set_direction(port, 0);
            gpio_set_die(port, 1);
            SFR(JL_IOMC->IOMC0, 17, 1, 1);
        ​}
    JL_PWM->TMR1_PR = sys_clock_get() / PWM_FRE;
    JL_PWM->CH1_CMP = (sys_clock_get() / PWM_FRE) * pwm_wide / 255; //pwm_var范围在0-255
    JL_PWM->TMR1_CON = BIT(5);
        break;
    case 2:
        if(output){​
        gpio_set_pull_up(port, 1);
        gpio_set_pull_down(port, 1);
        gpio_set_direction(port, 0);
        SFR(JL_IOMC->IOMC3, 3, 3, 0);
        gpio_set_die(port, 1);
        ​}else{​            
            gpio_set_direction(port, 0);
            gpio_set_die(port, 1);
            SFR(JL_IOMC->IOMC0, 18, 1, 1);
        ​}
    JL_PWM->TMR2_PR = sys_clock_get() / PWM_FRE;
    JL_PWM->CH2_CMP = (sys_clock_get() / PWM_FRE) * pwm_wide / 255; //pwm_var范围在0-255
    JL_PWM->TMR2_CON = BIT(5);
        break;
    case 3:
        if(output){​
        gpio_set_pull_up(port, 1);
        gpio_set_pull_down(port, 1);
        gpio_set_direction(port, 0);
        SFR(JL_IOMC->IOMC3, 3, 3, 1);
        gpio_set_die(port, 1);
        ​}else{​            
            gpio_set_direction(port, 0);
            gpio_set_die(port, 1);
            SFR(JL_IOMC->IOMC0, 19, 1, 1);
        ​}
    JL_PWM->TMR3_PR = sys_clock_get() / PWM_FRE;
    JL_PWM->CH3_CMP = (sys_clock_get() / PWM_FRE) * pwm_wide / 255; //pwm_var范围在0-255
    JL_PWM->TMR3_CON = BIT(5);
        break;
    
    default:
        break;
    ​}

    SFR(JL_PWM->PWMCON1, (1 + pwn_chl * 4), 3, pwn_chl);
    JL_PWM->PWMCON0 |= BIT(8 + pwn_chl);
    JL_PWM->PWMCON0 |= BIT(pwn_chl);

#else
    u8 chl = pwn_chl;
#define MIO_API_PWM_PORT    IO_PORTA_05
#define PWM_FRE             3000
    log_info("mio pwm init -> chl : %d\n", chl);
    // gpio_set_pull_up(MIO_API_PWM_PORT, 1);
    // gpio_set_pull_down(MIO_API_PWM_PORT, 1);
    // SFR(JL_IOMC->IOMC3, 0, 3, 0);
    gpio_set_direction(MIO_API_PWM_PORT, 0);
    gpio_set_die(MIO_API_PWM_PORT, 0);
    JL_PWM->TMR0_PR = sys_clock_get() / PWM_FRE;
    JL_PWM->CH0_CMP = (sys_clock_get() / PWM_FRE) * 199 / 255;  //pwm_var范围在0-255
    SFR(JL_PWM->PWMCON1, (1 + chl * 4), 3, chl);
    JL_PWM->TMR0_CON = BIT(5);
    JL_PWM->PWMCON0 |= BIT(8 + chl);
    JL_PWM->PWMCON0 |= BIT(chl);
#endif
​}

10.V102版本SDK加FLASH连电脑传文件和播放-210610hxw

参考程序 HYPERLINK "https://pan.baidu.com/s/1kqKmgIAU_QZYMko-wm5TNA" \t "_blank" https://pan.baidu.com/s/1kqKmgIAU_QZYMko-wm5TNA
提取码:8888

11.无缝循环播放210702hxw

最后一个参数设置255 一直循环。
dec_obj *decoder_io(void *pfile, u32 dec_ctl, dp_buff *dbuff, u8 loop)

如果是AD14或者AD15 还要在音频原文件要在转换的时候选上无缝循环的选项。

INCLUDEPICTURE \d "C:\Users\SPC20-001\AppData\Roaming\Tencent\Users\271964349\QQ\WinTemp\RichOle\98OBNUK36(AS)$PD2Y_6S.png" * MERGEFORMATINET 
image 
开了断点记忆和无限循环在上播断点的时候会从断点的位置开始到结束一直循环。需要按照下面修改。

#if 0
        clear_dp(dbuff);
        if (0 != loop) {​ // (dec_ctl & BIT_LOOP)
            p_dec->loop = loop;
            log_info("get loop dp\n");
            if (true == get_dp(p_dec, dbuff)) {​
                log_info(" -loop save succ!\n");
                p_dec->p_dp_buf = check_dp(dbuff);
            ​} else {​
                log_info(" -loop save fail!\n");
            ​}
        ​}
#else
        u8 MUSIC_PLAY_FROM_START = (check_dp(dbuff) == 0);

            clear_dp(dbuff);
            if (0 != loop) {​ // (dec_ctl & BIT_LOOP)
        static dp_buff loop_dbuff;
                p_dec->loop = loop;
        if (MUSIC_PLAY_FROM_START)
        {​
                log_info("get loop dp********\n");
            if (true == get_dp(p_dec, &loop_dbuff)) {​
            vm_write(VM_LOOP_BP,(u8 *)&loop_dbuff,sizeof(dp_buff));
            p_dec->p_dp_buf = check_dp(&loop_dbuff);
            ​} else {​
            log_info(" -loop save fail!\n");
            ​}
        ​}
        else
        {​
            log_info("************get loop bp from vm ************\n");
            vm_read(VM_LOOP_BP,(u8 *)&loop_dbuff,sizeof(dp_buff));
            p_dec->p_dp_buf = check_dp(&loop_dbuff);
        ​}
            ​}

#endif

如果是AC104下面这里需要修改,解决断点和循环冲突的问题。

image

12.AD系列MIDI功能使用说明-210705hxw

链接: HYPERLINK "https://pan.baidu.com/s/1aRIafU0LSYlxhKWw8GZbNA" \t "_blank" https://pan.baidu.com/s/1aRIafU0LSYlxhKWw8GZbNA 提取码:8888

13.串口通信 串口接收IO需要设置数字功能-210715hxw

image

14.增加一个输入捕捉通道-210729hxw

AC104 103版本SDK的红外用到了TIMER2和IRFLT模块。IRFLT只是相当于一个信号过滤的模块,对于脉冲宽度的测量实际还是通过TIMER来实现的。
image

这里增加了TIMER0用默认的PA13来检测脉宽。

// 根据封装修改IO和timer
// 注意红外默认用的是TIMER2 的映射通道
// TIMER0默认输入捕捉IO PA13
// TIMER1默认输入捕捉IO PA09
// TIMER2默认输入捕捉IO PA01

#define USER_CAP_IO        IO_PORTA_13 //timer默认的io 需要映射可以参考红外按键
#define USER_CAP_TMR       JL_TMR0
#define IRQ_USER_CAP_TMR   IRQ_TIME0_IDX

#define INPUT_CHANNLE0_SRC_SEL(x)       SFR(JL_IOMC->IOMC2, 0, 5, x)
#define CAP_TIMER_SEL(x)                SFR(JL_IOMC->IOMC1, 4, 2, x)

u16 user_cap_prd;

static const u16 timer_div[] = {​
    /0000/    1,
    /0001/    4,
    /0010/    16,
    /0011/    64,
    /0100/    2,
    /0101/    8,
    /0110/    32,
    /0111/    128,
    /1000/    256,
    /1001/    4 * 256,
    /1010/    16 * 256,
    /1011/    64 * 256,
    /1100/    2 * 256,
    /1101/    8 * 256,
    /1110/    32 * 256,
    /1111/    128 * 256,
​};

/----------------------------------------------------------------------------/
/**@brief   time1红外中断服务函数
   @param   void
   @param   void
   @return  void
   @note    void timer1_ir_isr(void)
/
/
----------------------------------------------------------------------------*/
    static u32 data_temp = 0;
    static u8 cnt_temp = 0;
___interrupt
static void user_cap_isr(void)
{​ //采样中不能在中断里面加打印  
    u16 bCap1;
    u8 cap = 0;

    static u8 cnt = 0;

    USER_CAP_TMR->CON |= BIT(6);

    bCap1 = USER_CAP_TMR->PRD;
    USER_CAP_TMR->CNT = 0;
    cap = bCap1 / user_cap_prd;

    if (cap <= 1) {​
        data_temp >>= 1;
        cnt_temp++;
    ​} else  if (cap <= 3){​
        data_temp >>= 1;
        cnt_temp++;
        data_temp |= 0x8000;
    ​}else if ((cap == 13) && (cnt_temp < 8)){​
        data_temp = 0;
        cnt_temp= 0;
    ​}
    if (cnt_temp == 32) {​
        log_info("data_temp:%x\n",data_temp );
    ​}
​}

void user_cap_outtime(void)
{​
    static u8 wait_cnt = 0;
    if(cnt_temp){​
        wait_cnt++;
        if(wait_cnt > 20){​
            wait_cnt = 0;
            data_temp = 0;
            cnt_temp= 0;
        ​}
    ​}
​}

/----------------------------------------------------------------------------/
/**@brief   ir按键初始化
   @param   void
   @param   void
   @return  void
   @note    void set_ir_clk(void)

   ((cnt - 1)* 分频数)/lsb_clk = 1ms
/
/
----------------------------------------------------------------------------*/
#define OSC_Hz          12000000L

// 根据实际要捕捉的信号频率调整TIMER的分频和prd_cnt
/* #define MAX_TIME_CNT 0x07ff //分频准确范围,更具实际情况调整 /
/
 #define MIN_TIME_CNT 0x0030 /
void user_cap_timer_init(void)
{​
    u32 clk;
    u32 prd_cnt;
    /
 u8 index; */
    clk = OSC_Hz;//clock_get_lsb_freq();

    clk /= (1000 * 64);
    clk *= 1; //1ms for cnt
    prd_cnt = clk;
    user_cap_prd = prd_cnt;

    USER_CAP_TMR->CON = BIT(6);
    USER_CAP_TMR->PRD = 0;
    USER_CAP_TMR->CNT = 0;
    USER_CAP_TMR->CON = ((3 << 4) | (2 << 2) | (3 << 0));  //htc + falling edge
​}

static void user_cap_io_init(void){​
    gpio_set_direction(USER_CAP_IO, 1);
    gpio_set_die(USER_CAP_IO, 1);
    gpio_set_pull_up(USER_CAP_IO, 1);
​}

/----------------------------------------------------------------------------/
/**@brief   ir按键初始化
   @param   void
   @param   void
   @return  void
   @note    void ir_key_init(void)
/
/
----------------------------------------------------------------------------*/

int user_cap_init(void  )
{​
    //timer1
    r_printf("ir key init >>>\n");

    request_irq(IRQ_USER_CAP_TMR, IRQ_IRTMR_IP, user_cap_isr, 0);

    user_cap_io_init();   //初始化输入捕捉的IO
    user_cap_timer_init();                    //设置定时器

    return 0;
​}

15.睡眠以后定时唤醒系统继续跑不复位-210730hxw

早期SDK做不了要这些版本才可以用
AC104 V104和以上版本
AD14 V106和以上版本
AD15V106和以上版本

sys_power_down(nuS)
调用这个函数单位是微秒。注意如果开了看门狗最大只能设置看门狗复位时长的一半,如果传入的参数超过看门狗复位时间的一半不会生效。如果需要设置更长可以关闭看门狗。
注意AD14 v106 A0版本外挂FLASH默认SDK进入睡眠以后无法唤醒需要做以下修改
1.换库 HYPERLINK "https://pan.baidu.com/s/1iCQwIyyKY2GZ623m9XxoDg" \t "_blank" https://pan.baidu.com/s/1iCQwIyyKY2GZ623m9XxoDg 提取码8888
2.改这个宏
image

16.检测MIC能量自动录音自动播放参考-210809hxw

参考代码位置 HYPERLINK "https://pan.baidu.com/s/1EvdvoljdAqrrC5gdC1m1nQ" \t "_blank" https://pan.baidu.com/s/1EvdvoljdAqrrC5gdC1m1nQ 提取码8888
1.增加了一个ms模式,开机默认进入app_ms.
2.检测能量自动开始录音,检测到没有说话声音以后自动播放刚才的录音。
3.上述代码只是一个参考,用来告诉客户LADC采样的数据怎样计算,怎样控制录音和播放录音。具体开始和结束的阈值需要客户自己调整,或者客户可以重写整个判断开始结束的函数。
image

image

17.V104以前的SDK可能出现有些芯片音乐播放速度快-210902hxw

换掉uboot文件重新编译或者升级到V104版本SDK。
压缩包里面有一个EXE工具如果只有FW文件找不到代码了可以用这个工具直接生成新的FW文件。
链接: https://pan.baidu.com/s/1aoAkZLo0t0XqYgyEZiXp0w 提取码: n2wy

18.编译提示FW文件工具需要更新-210902hxw

image

双击这个下载新的工具即可
INCLUDEPICTURE \d "C:\Users\SPC20-001\AppData\Roaming\Tencent\Users\271964349\QQ\WinTemp\RichOle\L%LG(VIBH)C~7R~M91F`4$2.png" * MERGEFORMATINET 
image 

Prev
951&961软件问题整理
Next
AC128N问题整理文档