main.lua 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "ccdemo"
  3. VERSION = "1.0.0"
  4. log.style(1)
  5. --[[]
  6. 运行环境:Air780EHV核心板+AirAUDIO_1000配件板
  7. 最后修改时间:2025-6-17
  8. 使用了如下IO口:
  9. [3, "MIC+", " PIN3脚, 用于麦克风正极"],
  10. [4, "MIC-", " PIN4脚, 用于麦克风负极"],
  11. [5, "spk+", " PIN5脚, 用于喇叭正极"],
  12. [6, "spk-", " PIN6脚, 用于喇叭负极"],
  13. [20, "AudioPA_EN", " PIN20脚, 用于PA使能脚"],
  14. 3.3V
  15. GND
  16. 执行逻辑为:
  17. 设置i2s和音频参数,读取文件qianzw.txt里面的内容,然后播放出来
  18. ]]
  19. -- sys库是标配
  20. sys = require("sys")
  21. local up1 = zbuff.create(6400,0)
  22. local up2 = zbuff.create(6400,0)
  23. local down1 = zbuff.create(6400,0)
  24. local down2 = zbuff.create(6400,0)
  25. local cnt = 0
  26. local function record(is_dl, point)
  27. if is_dl then
  28. log.info("下行数据,位于缓存", point+1, "缓存1数据量", down1:used(), "缓存2数据量", down2:used())
  29. else
  30. log.info("上行数据,位于缓存", point+1, "缓存1数据量", up1:used(), "缓存2数据量", up2:used())
  31. end
  32. log.info("通话质量", cc.quality())
  33. -- 可以在初始化串口后,通过uart.tx来发送走对应的zbuff即可
  34. end
  35. sys.subscribe("CC_IND", function(state)
  36. log.info("cc状态", state)
  37. if state == "READY" then
  38. sys.publish("CC_READY")
  39. elseif state == "INCOMINGCALL" then
  40. cnt = cnt + 1
  41. if cnt > 1 then
  42. cc.accept(0)
  43. end
  44. elseif state == "HANGUP_CALL_DONE" or state == "MAKE_CALL_FAILED" or state == "DISCONNECTED" then
  45. audio.pm(0,audio.STANDBY)
  46. -- audio.pm(0,audio.SHUTDOWN) --低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
  47. end
  48. end)
  49. sys.taskInit(function()
  50. cc.on("record", record)
  51. cc.record(true, up1, up2, down1, down2)
  52. local multimedia_id = 0
  53. local i2c_id = 0 -- i2c_id 0
  54. local pa_pin = gpio.AUDIOPA_EN -- 喇叭pa功放脚
  55. local power_pin = 20 -- es8311电源脚
  56. local i2s_id = 0 -- i2s_id 0
  57. local i2s_mode = 0 -- i2s模式 0 主机 1 从机
  58. local i2s_sample_rate = 16000 -- 采样率
  59. local i2s_bits_per_sample = 16 -- 数据位数
  60. local i2s_channel_format = i2s.MONO_R -- 声道, 0 左声道, 1 右声道, 2 立体声
  61. local i2s_communication_format = i2s.MODE_LSB -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
  62. local i2s_channel_bits = 16 -- 声道的BCLK数量
  63. local multimedia_id = 0 -- 音频通道 0
  64. local pa_on_level = 1 -- PA打开电平 1 高电平 0 低电平
  65. local power_delay = 3 -- 在DAC启动前插入的冗余时间,单位100ms
  66. local pa_delay = 100 -- 在DAC启动后,延迟多长时间打开PA,单位1ms
  67. local power_on_level = 1 -- 电源控制IO的电平,默认拉高
  68. local power_time_delay = 100 -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
  69. local voice_vol = 70 -- 喇叭音量
  70. local mic_vol = 80 -- 麦克风音量
  71. gpio.setup(power_pin, 1, gpio.PULLUP)
  72. gpio.setup(pa_pin, 1, gpio.PULLUP)
  73. sys.wait(200)
  74. i2c.setup(i2c_id, i2c.FAST) -- 设置i2c
  75. i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,
  76. i2s_channel_bits) -- 设置i2s
  77. audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
  78. audio.setBus(multimedia_id, audio.BUS_I2S, {
  79. chip = "es8311",
  80. i2cid = i2c_id,
  81. i2sid = i2s_id,
  82. }) -- 通道0的硬件输出通道设置为I2S
  83. audio.vol(multimedia_id, voice_vol)
  84. audio.micVol(multimedia_id, mic_vol)
  85. cc.init(multimedia_id)
  86. audio.pm(0,audio.STANDBY)
  87. sys.waitUntil("CC_READY")
  88. log.info("一切就绪,5S后准备打电话")
  89. sys.wait(5000)
  90. -- cc.dial(0,"12345678910) --拨打电话
  91. end)
  92. -- sys.taskInit(function()
  93. -- while 1 do
  94. -- -- 打印内存状态, 调试用
  95. -- sys.wait(1000)
  96. -- log.info("lua", rtos.meminfo())
  97. -- log.info("sys", rtos.meminfo("sys"))
  98. -- end
  99. -- end)
  100. -- 用户代码已结束---------------------------------------------
  101. -- 结尾总是这一句
  102. sys.run()
  103. -- sys.run()之后后面不要加任何语句!!!!!