71 lines
1.6 KiB
Python
71 lines
1.6 KiB
Python
# SPDX-FileCopyrightText: 2021 Scott Shawcroft, written for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import audiocore
|
|
import audiopwmio
|
|
import board
|
|
import digitalio
|
|
import array
|
|
import time
|
|
import math
|
|
import rp2pio
|
|
import adafruit_pioasm
|
|
|
|
trigger = digitalio.DigitalInOut(board.D4)
|
|
trigger.switch_to_output(True)
|
|
|
|
# Generate one period of sine wav.
|
|
length = 8000 // 440
|
|
|
|
# signed 16 bit
|
|
s16 = array.array("h", [0] * length)
|
|
for i in range(length):
|
|
s16[i] = int(math.sin(math.pi * 2 * i / length) * (2 ** 15))
|
|
print(s16[i])
|
|
|
|
program = """
|
|
.program i2s_with_hold
|
|
.side_set 2
|
|
|
|
; Load the next set of samples
|
|
; /--- LRCLK
|
|
; |/-- BCLK
|
|
; ||
|
|
pull noblock side 0b01 ; Loads OSR with the next FIFO value or X
|
|
mov x osr side 0b01 ; Save the new value in case we need it again
|
|
|
|
set y 14 side 0b01
|
|
bitloop1:
|
|
out pins 1 side 0b10 [2]
|
|
jmp y-- bitloop1 side 0b11 [2]
|
|
out pins 1 side 0b10 [2]
|
|
|
|
set y 14 side 0b11 [2]
|
|
bitloop0:
|
|
out pins 1 side 0b00 [2]
|
|
jmp y-- bitloop0 side 0b01 [2]
|
|
out pins 1 side 0b00 [2]
|
|
"""
|
|
|
|
assembled = adafruit_pioasm.assemble(program)
|
|
|
|
dac = rp2pio.StateMachine(
|
|
assembled,
|
|
frequency=800000 * 6,
|
|
first_out_pin=board.D12,
|
|
first_sideset_pin=board.D10,
|
|
sideset_pin_count=2,
|
|
auto_pull=False,
|
|
out_shift_right=False,
|
|
pull_threshold=32,
|
|
wait_for_txstall=False,
|
|
)
|
|
|
|
trigger.value = False
|
|
dac.write(s16)
|
|
time.sleep(1)
|
|
dac.stop()
|
|
trigger.value = True
|
|
|
|
print("done")
|