kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
105 wiersze
2.3 KiB
C++
105 wiersze
2.3 KiB
C++
|
#include "pico.h"
|
||
|
#include "pico/stdlib.h"
|
||
|
|
||
|
extern "C" {
|
||
|
#include "iopins.h"
|
||
|
#include "emuapi.h"
|
||
|
}
|
||
|
#include "keyboard_osd.h"
|
||
|
#include "vga_t_dma.h"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
TFT_T_DMA tft;
|
||
|
static uint8_t sector_data[1024];
|
||
|
|
||
|
|
||
|
int main(void) {
|
||
|
// set_sys_clock_48mhz();
|
||
|
stdio_init_all();
|
||
|
|
||
|
printf("start\n");
|
||
|
tft.begin(VGA_MODE_320x240);
|
||
|
emu_init();
|
||
|
emu_sndInit();
|
||
|
while (true) {
|
||
|
//printf("Hello, world!\n");
|
||
|
if (menuActive()) {
|
||
|
uint16_t bClick = emu_DebounceLocalKeys();
|
||
|
int action = handleMenu(bClick);
|
||
|
char * filename = menuSelection();
|
||
|
if (action == ACTION_RUNTFT) {
|
||
|
toggleMenu(false);
|
||
|
//emu_start();
|
||
|
//emu_Init(filename);
|
||
|
tft.fillScreenNoDma( RGBVAL16(0x00,0x00,0x00) );
|
||
|
tft.startDMA();
|
||
|
}
|
||
|
tft.waitSync();
|
||
|
}
|
||
|
else {
|
||
|
//emu_Step();
|
||
|
uint16_t bClick = emu_DebounceLocalKeys();
|
||
|
emu_Input(bClick);
|
||
|
}
|
||
|
int c = getchar_timeout_us(0);
|
||
|
switch (c) {
|
||
|
case ' ':
|
||
|
printf("Inverted: %d\n", 1);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
#include "hardware/irq.h"
|
||
|
#include "hardware/pwm.h"
|
||
|
#include "rock.h"
|
||
|
|
||
|
#define AUDIO_PIN 28
|
||
|
|
||
|
|
||
|
static int cur_sample = 0;
|
||
|
|
||
|
void pwm_irh() {
|
||
|
pwm_clear_irq(pwm_gpio_to_slice_num(AUDIO_PIN));
|
||
|
pwm_set_gpio_level(AUDIO_PIN, audio_buffer[cur_sample >> 2]);
|
||
|
|
||
|
uint8_t sample = audio_buffer[cur_sample >> 2];
|
||
|
|
||
|
if (cur_sample < (AUDIO_SAMPLES * 4) - 1) {
|
||
|
++cur_sample;
|
||
|
} else {
|
||
|
cur_sample = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void emu_sndInit() {
|
||
|
gpio_set_function(AUDIO_PIN, GPIO_FUNC_PWM);
|
||
|
|
||
|
int audio_pin_slice = pwm_gpio_to_slice_num(AUDIO_PIN);
|
||
|
|
||
|
// Setup PWM interrupt to fire when PWM cycle is complete
|
||
|
pwm_clear_irq(audio_pin_slice);
|
||
|
pwm_set_irq_enabled(audio_pin_slice, true);
|
||
|
irq_set_exclusive_handler(PWM_IRQ_WRAP, pwm_irh);
|
||
|
irq_set_enabled(PWM_IRQ_WRAP, true);
|
||
|
|
||
|
// Setup PWM for audio output
|
||
|
pwm_config config = pwm_get_default_config();
|
||
|
pwm_config_set_clkdiv(&config, 5.5f);
|
||
|
pwm_config_set_wrap(&config, 254);
|
||
|
pwm_init(audio_pin_slice, &config, true);
|
||
|
|
||
|
pwm_set_gpio_level(AUDIO_PIN, 0);
|
||
|
}
|
||
|
|
||
|
void emu_sndPlaySound(int chan, int volume, int freq)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|