nimphea/dev/codec_pcm3060

Search:
Group by:
Source   Edit  

PCM3060 Codec

Nim wrapper for the Texas Instruments PCM3060 audio codec.

The PCM3060 is a high-performance codec used on Daisy Seed 2 and other advanced audio platforms.

Features:

  • 24-bit stereo ADC and DAC
  • I2C control interface (SPI not yet supported)
  • High-quality audio processing
  • 24-bit MSB-aligned I2S mode
  • Power save control
  • 48kHz sample rate

Example:

import nimphea/src/nimphea
import nimphea/src/dev/codec_pcm3060
import nimphea/src/per/i2c

var i2c: I2CHandle
var codec: Pcm3060

# Initialize I2C at 400kHz or less
# ... i2c setup ...

let result = codec.init(i2c)
if result == Pcm3060Result.OK:
  echo "Codec initialized successfully"

Types

Pcm3060 {.importcpp: "daisy::Pcm3060".} = object

PCM3060 codec driver

High-performance I2C-controlled audio codec with automatic configuration. Used on Daisy Seed 2 and platforms requiring premium audio quality.

Initialization performs MRST and SRST, sets format to 24-bit LJ, and disables power save for both ADC and DAC.

Source   Edit  
Pcm3060Result {.importcpp: "daisy::Pcm3060::Result", size: 4.} = enum
  OK,                       ## Operation successful
  ERR                        ## Operation failed
Return values for PCM3060 functions Source   Edit  

Procs

proc init(this: var Pcm3060; i2c: I2CHandle): Pcm3060Result {.
    importcpp: "#.Init(#)", ...raises: [], tags: [], forbids: [].}

Initialize the PCM3060 codec

Performs the following:

  • Master reset (MRST) and system reset (SRST)
  • Sets format to 24-bit MSB-aligned I2S mode
  • Disables power save for ADC and DAC
  • Configures all registers to defaults

Parameters:

  • i2c - Initialized I2C handle configured at 400kHz or less

Returns: Pcm3060Result.OK on success, Pcm3060Result.ERR on failure

Example:

var i2c: I2CHandle
var i2cCfg: I2CConfig
var codec: Pcm3060

# Initialize I2C at 400kHz
i2cCfg.periph = I2CPeripheral.I2C_1
i2cCfg.speed = I2CSpeed.I2C_400KHZ
i2cCfg.pin_config.scl = seed.GetPin(11)
i2cCfg.pin_config.sda = seed.GetPin(12)
i2c.init(i2cCfg)

let result = codec.init(i2c)
if result != Pcm3060Result.OK:
  echo "Codec init failed"

Source   Edit