Tool/software:
Hi Ti Team,
We were trying to generate beep in TLV320AIC3120, but we couldn't get any beep output.
Could you help us debug the issue. Could you please check our PLL config and Register settings done for Beep generation.
MCLK: 18.518 MHz
TLV320AIC3120 is in slave mode.
Beep Generation register write script#!/bin/bash
# I2C bus and device address
I2C_BUS=1 # Update this to your specific I2C bus if necessary
I2C_ADDR=0x18
# Helper function to write to a register
write_register() {
local reg=$1
local val=$2
echo "Writing to register 0x$reg: 0x$val"
i2cset -y $I2C_BUS $I2C_ADDR 0x$reg 0x$val
}
# Helper function to switch page
switch_page() {
local page=$1
echo "Switching to page $page"
write_register 00 $page
}
# Start configuration
echo "Starting I2C configuration for TLV320AIC3120..."
# Page 0: Reset the codec
switch_page 00
write_register 01 01 # Reset
sleep 0.01 # Allow time for reset
# Page 0: Clock configuration
write_register 04 03 # Clock source select
write_register 05 91 # PLL power-up, P=1, R=1
write_register 06 05 # J=5
write_register 07 08 # D=2300 MSB
write_register 08 FC # D=2300 LSB
sleep 0.01 # Allow PLL to stabilize
# Configure NDAC, MDAC, DOSR
write_register 0B 82 # NDAC = 2
write_register 0C 8E # MDAC = 14
write_register 0D 00 # DOSR MSB = 0
write_register 0E 48 # DOSR LSB = 0x48
# Configure NADC, MADC, AOSR
write_register 12 87 # NADC = 7
write_register 13 84 # MADC = 4
write_register 14 48 # AOSR = 72 (0x48)
# Miscellaneous settings
write_register 1B 20 # Codec interface control
write_register 3C 19 # DAC processing block # PRB 25
# Switch to Page 8 for additional configuration
switch_page 08
write_register 01 04 # Adaptive filter
# Switch to Page 1 for headphone driver setup
switch_page 01
write_register 1F 04 # Initial headphone driver configuration
write_register 21 4E # Codec secondary interface control
write_register 23 40 # Route DAC to HPOUT via mixer
write_register 28 06 # Enable HPOUT driver
write_register 1F 82 # Power up HPOUT output driver
write_register 24 92 # Set analog volume for HPOUT
# Switch to Page 0 for beep settings
switch_page 00
write_register 40 0C #volume
write_register 0B 02 #Power down NDAC
write_register 47 80 # Enable beep generator
write_register 4A 12 # Beep-Length Middle Bits
write_register 4B C0 # Beep Length LSB
write_register 4C 5A # Beep Sin(x) MSB
write_register 4D 82 # Beep Sin(x) LSB
write_register 4E 5A # Beep Cos(x) MSB
write_register 4F 82 # Beep Cos(x) LSB
write_register 0B 82 # NDAC = 2 for beep #NDAC Power up
write_register 40 00 # DAC Volume Control
write_register 3F B6 # DAC Data-Path Setup
write_register 41 00 # DAC Volume Control #0dB
echo "I2C configuration complete. Check HPOUT for beep signal."
Python script for sine, cos, beep length:
import numpy as np
def calculate_values(Fin, Fs, Cycle):
sine_value = np.round(np.sin(2 * np.pi * Fin / Fs) * 2**15)
cosine_value = np.round(np.cos(2 * np.pi * Fin / Fs) * 2**15)
beep_length = np.floor(Fs * Cycle / Fin)
print(beep_length);
sine_hex = hex(int(sine_value))
cosine_hex = hex(int(cosine_value))
beep_length_hex = hex(int(beep_length))
return sine_hex, cosine_hex, beep_length_hex
# Example usage
Fin = 1000 # Input frequency
Fs = 48000 # Sampling frequency
Cycle = 100 # Number of cycles
sine_hex, cosine_hex, beep_length_hex = calculate_values(Fin, Fs, Cycle)
print(f"Sine: {sine_hex}")
print(f"Cosine: {cosine_hex}")
print(f"Beep Length: {beep_length_hex}")
##Sine = dec2hex(round(sin(2*π*Fin/Fs)*2^15))
##Cosine = dec2hex(round(cos(2*π*Fin/Fs)*2^15))
##Beep Length = dec2hex(floor(Fs*Cycle/Fin))
PLL config:
Schematics:
