mirror of
https://github.com/clockworkpi/PicoCalc.git
synced 2025-12-12 18:28:53 +01:00
Merge branch 'master' into ed/lvgl_demo
This commit is contained in:
commit
d101c167da
5
.gitmodules
vendored
5
.gitmodules
vendored
@ -1,4 +1,9 @@
|
|||||||
|
[submodule "Code/picocalc_helloworld/rp2040-psram"]
|
||||||
|
path = Code/picocalc_helloworld/rp2040-psram
|
||||||
|
url = https://github.com/polpo/rp2040-psram.git
|
||||||
|
|
||||||
[submodule "lvgl"]
|
[submodule "lvgl"]
|
||||||
path = Code/picocalc_lvgl_graphics_demo/lib/lvgl/lvgl
|
path = Code/picocalc_lvgl_graphics_demo/lib/lvgl/lvgl
|
||||||
url = https://github.com/lvgl/lvgl.git
|
url = https://github.com/lvgl/lvgl.git
|
||||||
branch = release/v9.2
|
branch = release/v9.2
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,16 @@
|
|||||||
# How to compile FUZIX
|
# How to compile FUZIX
|
||||||
|
|
||||||
|
All the operations in this document are performed in a Linux environment. A basic understanding of Linux, as well as familiarity with Git and pico sdk development, is required.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/EtchedPixels/FUZIX.git
|
git clone https://github.com/EtchedPixels/FUZIX.git
|
||||||
cd FUZIX
|
cd FUZIX
|
||||||
|
|
||||||
git reset --hard f0d56efd5ba70211c4c2d0b084a154fcff30ac5a
|
git reset --hard f0d56efd5ba70211c4c2d0b084a154fcff30ac5a
|
||||||
git apply fuzix.patch
|
|
||||||
|
git clone https://github.com/clockworkpi/PicoCalc.git #get patch code
|
||||||
|
|
||||||
|
git apply PicoCalc/Code/FUZIX/fuzix.patch
|
||||||
|
|
||||||
export PICO_SDK_PATH=/to/where/your/pico/sdk/is
|
export PICO_SDK_PATH=/to/where/your/pico/sdk/is
|
||||||
cd Kernel/platform/platform-rpipico
|
cd Kernel/platform/platform-rpipico
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
# PicoCalc simple mp3 player
|
# PicoCalc simple mp3 player
|
||||||
|
|
||||||
|
All the operations in this document are performed in a Linux environment. A basic understanding of Linux, as well as familiarity with Git and cross-compilation development, is required.
|
||||||
|
|
||||||
## toolchain
|
## toolchain
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -11,6 +13,12 @@ https://github.com/cuu/YAHAL.git branch picocalc
|
|||||||
|
|
||||||
## How to compile
|
## How to compile
|
||||||
|
|
||||||
|
### Get this code
|
||||||
|
```
|
||||||
|
git clone https://github.com/clockworkpi/PicoCalc.git
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### Get YAHAL first
|
### Get YAHAL first
|
||||||
```
|
```
|
||||||
git clone -b picocalc https://github.com/cuu/YAHAL.git
|
git clone -b picocalc https://github.com/cuu/YAHAL.git
|
||||||
|
|||||||
@ -1,9 +1,15 @@
|
|||||||
# How to compile NES emulator
|
# How to compile NES emulator
|
||||||
|
|
||||||
|
All the operations in this document are performed in a Linux environment. A basic understanding of Linux, as well as familiarity with Git and pico sdk development, is required.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/shapoco/shapones.git
|
git clone https://github.com/shapoco/shapones.git
|
||||||
|
|
||||||
cd shapones
|
cd shapones
|
||||||
git apply shapones.patch
|
git clone https://github.com/clockworkpi/PicoCalc.git #get patch code
|
||||||
|
|
||||||
|
git apply PicoCalc/Code/NES/shapones.patch
|
||||||
|
|
||||||
cd samples/v3/
|
cd samples/v3/
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
|||||||
@ -1,10 +1,14 @@
|
|||||||
# How to compile PicoMite(MMBasic)
|
# How to compile PicoMite(MMBasic)
|
||||||
|
|
||||||
|
All the operations in this document are performed in a Linux environment. A basic understanding of Linux, as well as familiarity with Git and pico sdk development, is required.
|
||||||
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/cuu/PicoMite.git
|
git clone https://github.com/cuu/PicoMite.git
|
||||||
cd PicoMite
|
cd PicoMite
|
||||||
|
|
||||||
git apply PicoMite.patch
|
git clone https://github.com/clockworkpi/PicoCalc.git #get patch code
|
||||||
|
git apply PicoCalc/Code/PicoMite/PicoMite.patch
|
||||||
|
|
||||||
export PICO_SDK_PATH=/to/where/your/pico/sdk/is
|
export PICO_SDK_PATH=/to/where/your/pico/sdk/is
|
||||||
mkdir build
|
mkdir build
|
||||||
|
|||||||
@ -14,11 +14,24 @@ include_directories(
|
|||||||
|
|
||||||
add_subdirectory(i2ckbd)
|
add_subdirectory(i2ckbd)
|
||||||
add_subdirectory(lcdspi)
|
add_subdirectory(lcdspi)
|
||||||
|
add_subdirectory(pwm_sound)
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/rp2040-psram rp2040-psram)
|
||||||
|
|
||||||
add_executable(picocalc_helloworld
|
add_executable(picocalc_helloworld
|
||||||
main.c
|
main.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
##picocalc spi0
|
||||||
|
target_compile_definitions(picocalc_helloworld PRIVATE
|
||||||
|
PSRAM_MUTEX=1
|
||||||
|
#PSRAM_SPINLOCK=0
|
||||||
|
PSRAM_ASYNC=0
|
||||||
|
PSRAM_PIN_CS=20
|
||||||
|
PSRAM_PIN_SCK=21
|
||||||
|
PSRAM_PIN_MOSI=2
|
||||||
|
PSRAM_PIN_MISO=3
|
||||||
|
)
|
||||||
|
|
||||||
target_link_libraries(picocalc_helloworld
|
target_link_libraries(picocalc_helloworld
|
||||||
pico_stdlib
|
pico_stdlib
|
||||||
hardware_flash
|
hardware_flash
|
||||||
@ -33,7 +46,8 @@ target_link_libraries(picocalc_helloworld
|
|||||||
pico_multicore
|
pico_multicore
|
||||||
i2ckbd
|
i2ckbd
|
||||||
lcdspi
|
lcdspi
|
||||||
|
rp2040-psram
|
||||||
|
pwm_sound
|
||||||
)
|
)
|
||||||
|
|
||||||
pico_enable_stdio_usb(picocalc_helloworld 0)
|
pico_enable_stdio_usb(picocalc_helloworld 0)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# PicoCalc Hello World
|
# PicoCalc Hello World
|
||||||
|
|
||||||
Demonstrate how to use spi screen and i2c keyboard on PicoCalc.
|
Demonstrate how to use spi screen, i2c keyboard and psram on PicoCalc.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
```
|
```
|
||||||
|
|||||||
@ -6,15 +6,208 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "pico/stdlib.h"
|
#include "pico/stdlib.h"
|
||||||
#include "hardware/gpio.h"
|
#include "hardware/gpio.h"
|
||||||
|
#include "hardware/clocks.h"
|
||||||
#include "i2ckbd.h"
|
#include "i2ckbd.h"
|
||||||
#include "lcdspi.h"
|
#include "lcdspi.h"
|
||||||
|
#include "psram_spi.h"
|
||||||
|
#include "pwm_sound.h"
|
||||||
|
|
||||||
const uint LEDPIN = 25;
|
const uint LEDPIN = 25;
|
||||||
|
psram_spi_inst_t* async_spi_inst;
|
||||||
|
|
||||||
|
int psram_test(psram_spi_inst_t*psram_spi){
|
||||||
|
uint32_t psram_begin, psram_elapsed;
|
||||||
|
float psram_speed;
|
||||||
|
char buf[128];
|
||||||
|
sprintf(buf,"Testing PSRAM...\n");
|
||||||
|
printf("%s",buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
// **************** 8 bits testing ****************
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); ++addr) {
|
||||||
|
psram_write8(psram_spi, addr, (addr & 0xFF));
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"8 bit: PSRAM write 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); ++addr) {
|
||||||
|
psram_write8_async(psram_spi, addr, (addr & 0xFF));
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"8 bit: PSRAM write async 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); ++addr) {
|
||||||
|
uint8_t result = psram_read8(psram_spi, addr);
|
||||||
|
if ((uint8_t)(addr & 0xFF) != result) {
|
||||||
|
sprintf(buf,"\nPSRAM failure at address %x (%x != %x)\n", addr, addr & 0xFF, result);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"8 bit: PSRAM read 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
// **************** 16 bits testing ****************
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); addr += 2) {
|
||||||
|
psram_write16(psram_spi, addr, (((addr + 1) & 0xFF) << 8) | (addr & 0xFF));
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"16 bit: PSRAM write 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); addr += 2) {
|
||||||
|
uint16_t result = psram_read16(psram_spi, addr);
|
||||||
|
if ((uint16_t)(
|
||||||
|
(((addr + 1) & 0xFF) << 8) |
|
||||||
|
(addr & 0xFF)) != result
|
||||||
|
) {
|
||||||
|
sprintf(buf,"PSRAM failure at address %x (%x != %x) ", addr, (
|
||||||
|
(((addr + 1) & 0xFF) << 8) |
|
||||||
|
(addr & 0xFF)), result
|
||||||
|
);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psram_elapsed = (time_us_32() - psram_begin);
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"16 bit: PSRAM read 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
// **************** 32 bits testing ****************
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); addr += 4) {
|
||||||
|
psram_write32(
|
||||||
|
psram_spi, addr,
|
||||||
|
(uint32_t)(
|
||||||
|
(((addr + 3) & 0xFF) << 24) |
|
||||||
|
(((addr + 2) & 0xFF) << 16) |
|
||||||
|
(((addr + 1) & 0xFF) << 8) |
|
||||||
|
(addr & 0XFF))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"32 bit: PSRAM write 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); addr += 4) {
|
||||||
|
uint32_t result = psram_read32(psram_spi, addr);
|
||||||
|
if ((uint32_t)(
|
||||||
|
(((addr + 3) & 0xFF) << 24) |
|
||||||
|
(((addr + 2) & 0xFF) << 16) |
|
||||||
|
(((addr + 1) & 0xFF) << 8) |
|
||||||
|
(addr & 0XFF)) != result
|
||||||
|
) {
|
||||||
|
sprintf(buf,"PSRAM failure at address %x (%x != %x) ", addr, (
|
||||||
|
(((addr + 3) & 0xFF) << 24) |
|
||||||
|
(((addr + 2) & 0xFF) << 16) |
|
||||||
|
(((addr + 1) & 0xFF) << 8) |
|
||||||
|
(addr & 0XFF)), result
|
||||||
|
);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psram_elapsed = (time_us_32() - psram_begin);
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"32 bit: PSRAM read 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
// **************** n bits testing ****************
|
||||||
|
uint8_t write_data[256];
|
||||||
|
for (size_t i = 0; i < 256; ++i) {
|
||||||
|
write_data[i] = i;
|
||||||
|
}
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); addr += 256) {
|
||||||
|
for (uint32_t step = 0; step < 256; step += 16) {
|
||||||
|
psram_write(psram_spi, addr + step, write_data + step, 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"128 bit: PSRAM write 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
psram_begin = time_us_32();
|
||||||
|
uint8_t read_data[16];
|
||||||
|
for (uint32_t addr = 0; addr < (8 * 1024 * 1024); addr += 256) {
|
||||||
|
for (uint32_t step = 0; step < 256; step += 16) {
|
||||||
|
psram_read(psram_spi, addr + step, read_data, 16);
|
||||||
|
if (memcmp(read_data, write_data + step, 16) != 0) {
|
||||||
|
sprintf(buf,"PSRAM failure at address %x", addr);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psram_elapsed = time_us_32() - psram_begin;
|
||||||
|
psram_speed = 1000000.0 * 8 * 1024.0 * 1024 / psram_elapsed;
|
||||||
|
sprintf(buf,"128 bit: PSRAM read 8MB in %d us, %d B/s\n", psram_elapsed, (uint32_t)psram_speed);
|
||||||
|
printf("%s", buf);
|
||||||
|
lcd_print_string(buf);
|
||||||
|
|
||||||
|
lcd_print_string("PSRAM testing done\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "sample.h"
|
||||||
|
int wav_position = 0;
|
||||||
|
|
||||||
|
void pwm_interrupt_handler() {
|
||||||
|
int slice_l = pwm_gpio_to_slice_num(AUDIO_PIN_L);
|
||||||
|
int slice_r = pwm_gpio_to_slice_num(AUDIO_PIN_R);
|
||||||
|
|
||||||
|
pwm_clear_irq(slice_l);
|
||||||
|
pwm_clear_irq(slice_r);
|
||||||
|
|
||||||
|
if (wav_position < (WAV_DATA_LENGTH << 3) - 1) {
|
||||||
|
pwm_set_chan_level(pwm_gpio_to_slice_num(AUDIO_PIN_L), PWM_CHAN_A, WAV_DATA[wav_position >> 3]);
|
||||||
|
pwm_set_chan_level(pwm_gpio_to_slice_num(AUDIO_PIN_R), PWM_CHAN_B, WAV_DATA[wav_position >> 3]);
|
||||||
|
|
||||||
|
wav_position++;
|
||||||
|
} else {
|
||||||
|
wav_position = 0; // Stop
|
||||||
|
pwm_set_chan_level(slice_l, PWM_CHAN_A, 0);
|
||||||
|
pwm_set_chan_level(slice_r, PWM_CHAN_B, 0);
|
||||||
|
|
||||||
|
pwm_set_irq_enabled(slice_l, false);
|
||||||
|
pwm_set_irq_enabled(slice_r, false);
|
||||||
|
irq_remove_handler(PWM_IRQ_WRAP, pwm_interrupt_handler);
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
stdio_init_all();
|
stdio_init_all();
|
||||||
|
set_sys_clock_khz(133000, true);
|
||||||
|
|
||||||
|
|
||||||
init_i2c_kbd();
|
init_i2c_kbd();
|
||||||
lcd_init();
|
lcd_init();
|
||||||
@ -23,11 +216,18 @@ int main() {
|
|||||||
gpio_set_dir(LEDPIN, GPIO_OUT);
|
gpio_set_dir(LEDPIN, GPIO_OUT);
|
||||||
|
|
||||||
lcd_clear();
|
lcd_clear();
|
||||||
lcd_print_string("Hello World");
|
lcd_print_string("Hello World PicoCalc\n");
|
||||||
gpio_put(LEDPIN, 1);
|
gpio_put(LEDPIN, 1);
|
||||||
sleep_ms(500);
|
sleep_ms(500);
|
||||||
gpio_put(LEDPIN, 0);
|
gpio_put(LEDPIN, 0);
|
||||||
|
|
||||||
|
init_pwm(pwm_interrupt_handler);
|
||||||
|
|
||||||
|
psram_spi_inst_t psram_spi = psram_spi_init_clkdiv(pio1, -1,1.0f,true);
|
||||||
|
psram_test(&psram_spi);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
int c = lcd_getc(0);
|
int c = lcd_getc(0);
|
||||||
if(c != -1 && c > 0) {
|
if(c != -1 && c > 0) {
|
||||||
lcd_putc(0,c);
|
lcd_putc(0,c);
|
||||||
|
|||||||
19
Code/picocalc_helloworld/pwm_sound/CMakeLists.txt
Normal file
19
Code/picocalc_helloworld/pwm_sound/CMakeLists.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
|
||||||
|
project(pwm_sound
|
||||||
|
VERSION 0.0.1
|
||||||
|
DESCRIPTION "pwm_sound for rp2040."
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(pwm_sound INTERFACE)
|
||||||
|
|
||||||
|
target_sources(pwm_sound INTERFACE
|
||||||
|
pwm_sound.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(pwm_sound INTERFACE pico_stdlib hardware_pwm)
|
||||||
|
|
||||||
|
target_include_directories(pwm_sound INTERFACE ${CMAKE_CURRENT_LIST_DIR})
|
||||||
33
Code/picocalc_helloworld/pwm_sound/pwm_sound.c
Normal file
33
Code/picocalc_helloworld/pwm_sound/pwm_sound.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
#include "pwm_sound.h"
|
||||||
|
|
||||||
|
|
||||||
|
void init_pwm(irq_handler_t my_handler) {
|
||||||
|
|
||||||
|
gpio_set_function(AUDIO_PIN_L, GPIO_FUNC_PWM);
|
||||||
|
gpio_set_function(AUDIO_PIN_R, GPIO_FUNC_PWM);
|
||||||
|
|
||||||
|
int slice_l = pwm_gpio_to_slice_num(AUDIO_PIN_L);
|
||||||
|
int slice_r = pwm_gpio_to_slice_num(AUDIO_PIN_R);
|
||||||
|
|
||||||
|
|
||||||
|
pwm_clear_irq(slice_l);
|
||||||
|
pwm_clear_irq(slice_r);
|
||||||
|
pwm_set_irq_enabled(slice_l, true);
|
||||||
|
pwm_set_irq_enabled(slice_r, true);
|
||||||
|
|
||||||
|
irq_set_exclusive_handler(PWM_IRQ_WRAP, my_handler);
|
||||||
|
irq_set_enabled(PWM_IRQ_WRAP, true);
|
||||||
|
|
||||||
|
|
||||||
|
pwm_config config = pwm_get_default_config();
|
||||||
|
pwm_config_set_clkdiv(&config, 6.05f); // 133MHz
|
||||||
|
pwm_config_set_wrap(&config, 250);
|
||||||
|
|
||||||
|
|
||||||
|
pwm_init(slice_l, &config, true);
|
||||||
|
pwm_init(slice_r, &config, true);
|
||||||
|
|
||||||
|
pwm_set_chan_level(slice_l, PWM_CHAN_A, 0);
|
||||||
|
pwm_set_chan_level(slice_r, PWM_CHAN_B, 0);
|
||||||
|
}
|
||||||
15
Code/picocalc_helloworld/pwm_sound/pwm_sound.h
Normal file
15
Code/picocalc_helloworld/pwm_sound/pwm_sound.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
#ifndef PWM_SOUND_H
|
||||||
|
#define PWM_SOUND_H
|
||||||
|
|
||||||
|
#include "pico/stdlib.h"
|
||||||
|
#include "hardware/pwm.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define PWM_CLOCK_KHZ 133000
|
||||||
|
#define AUDIO_PIN_L 26
|
||||||
|
#define AUDIO_PIN_R 27
|
||||||
|
|
||||||
|
void init_pwm(irq_handler_t);
|
||||||
|
|
||||||
|
#endif //PWM_SOUND_H
|
||||||
1
Code/picocalc_helloworld/rp2040-psram
Submodule
1
Code/picocalc_helloworld/rp2040-psram
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 7786c93ec8d02dbb4f94a2e99645b25fb4abc2db
|
||||||
3442
Code/picocalc_helloworld/sample.h
Normal file
3442
Code/picocalc_helloworld/sample.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
uLisp for PicoCalc uses [Arduino IDE](https://www.arduino.cc/en/software) for development
|
uLisp for PicoCalc uses [Arduino IDE](https://www.arduino.cc/en/software) for development
|
||||||
|
|
||||||
|
All the operations in this document are performed in a Linux environment. A basic understanding of Linux, as well as familiarity with Git and Arduino development, is required.
|
||||||
|
|
||||||
## Install arduino-pico
|
## Install arduino-pico
|
||||||
|
|
||||||
Open up the Arduino IDE and go to File->Preferences.
|
Open up the Arduino IDE and go to File->Preferences.
|
||||||
@ -29,9 +31,12 @@ git clone https://github.com/technoblogy/ulisp-arm.git
|
|||||||
|
|
||||||
cd uLisp-arm
|
cd uLisp-arm
|
||||||
|
|
||||||
git reset --hard 97e61151dfb236311089abd3e89029e367613f70
|
git reset --hard 97e61151dfb236311089abd3e89029e367613f70 #Switch to the required version
|
||||||
|
|
||||||
|
git clone https://github.com/clockworkpi/PicoCalc.git #get patch code
|
||||||
|
|
||||||
|
git apply PicoCalc/Code/uLisp/uLisp.patch
|
||||||
|
|
||||||
git apply uLisp.patch
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Install **TFT_eSPI 2.5.34** in arduino ide and patch it
|
Install **TFT_eSPI 2.5.34** in arduino ide and patch it
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
# PicoCalc – A cost-effective portable MCU terminal
|
# PicoCalc – A cost-effective portable MCU terminal
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📌 Features
|
## 📌 Features
|
||||||
@ -23,14 +21,11 @@ PicoCalc supports **C/C++ development** via Pico SDK,The firmware can be modifie
|
|||||||
- I²C/SPI communication for interfacing with external sensors.
|
- I²C/SPI communication for interfacing with external sensors.
|
||||||
- Keyboard remapping and custom UI modifications.
|
- Keyboard remapping and custom UI modifications.
|
||||||
|
|
||||||
|
|
||||||
See the [Code](https://github.com/clockworkpi/PicoCalc/tree/master/Code) directory for sample applications.
|
See the [Code](https://github.com/clockworkpi/PicoCalc/tree/master/Code) directory for sample applications.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📢 Community & Support
|
## 📢 Community & Support
|
||||||
- Official website: [clockworkpi.com](https://forum.clockworkpi.com/)
|
- Official website: [clockworkpi.com](https://www.clockworkpi.com/)
|
||||||
- Forum: [ClockworkPi Community](https://forum.clockworkpi.com/)
|
- Forum: [ClockworkPi Community](https://forum.clockworkpi.com/)
|
||||||
- GitHub Issues: [Report Bugs & Features](https://github.com/clockworkpi/PicoCalc/issues)
|
- GitHub Issues: [Report Bugs & Features](https://github.com/clockworkpi/PicoCalc/issues)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user