Merge pull request #3 from jscrane/esp32-target

Esp32 target
This commit is contained in:
Stephen Crane 2018-09-06 09:31:11 +01:00 committed by GitHub
commit 5af9e7b373
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 103 additions and 24 deletions

View File

@ -6,35 +6,23 @@
#define __HARDWARE_H__
// TFT display...
// NOTE: edit memorysaver.h to select the correct chip for your display!
// Daniel Rebollo's boosterpack
#define TFT_BACKLIGHT PD_6
#define TFT_MODEL SSD1289
// TFT01_2.4: http://www.elecfreaks.com/store/24-tft-lcd-tft0124-p-110.html
// #undef TFT_BACKLIGHT
// #define TFT_MODEL S6D1121_8
#define TFT_RS PC_6
#define TFT_WR PC_5
#define TFT_CS PC_7
#define TFT_RST PC_4
#undef TFT_BACKLIGHT
#define TFT_MODEL ILI9325C
#define TFT_RS 32
#define TFT_WR 33
#define TFT_CS 27
#define TFT_RST 26
// PS/2 keyboard
#define KBD_DATA PE_4
#define KBD_IRQ PE_5
#define KBD_DATA 14
#define KBD_IRQ 12
// SPI-RAM
#define SPIRAM_CS PE_0
//#define SPIRAM_CS PF_3
#define SPIRAM_SPI 1
#define SPIRAM_DEV SPI_for_SD
#define SPIRAM_SIZE 65536
#undef SPIRAM_CS
// "tape" storage...
#define SD_CS PF_3
//#define SD_CS PE_0
#define SD_SPI 1
#define SPI_CS PF_3
#undef SD_CS
#define USE_SPIFFS 1
bool hardware_reset();
void hardware_init(class CPU &);

View File

@ -2,6 +2,8 @@
#define __R6502_H__
#undef PC
#undef cli
#undef sei
class Stream;
class r6502: public CPU {

View File

@ -13,5 +13,6 @@
#include "timed.h"
#include "hardware.h"
#include "checkpoint.h"
#include "sound.h"
#endif

67
sound.cpp Normal file
View File

@ -0,0 +1,67 @@
#include <Arduino.h>
#include <hardware.h>
#include "timed.h"
#include "sound.h"
#if defined(DAC_SOUND) && defined(ESP_PLATFORM)
#include <driver/dac.h>
static portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
static dac_channel_t channel;
static volatile const uint8_t *_bytes;
static volatile unsigned _size, _off;
static hw_timer_t *timer;
void IRAM_ATTR timer_callback() {
portENTER_CRITICAL_ISR(&mux);
if (_off < _size)
dac_output_voltage(channel, _bytes[_off++]);
else {
_bytes = 0;
dac_output_disable(channel);
timerAlarmDisable(timer);
}
portEXIT_CRITICAL_ISR(&mux);
}
void Sound::begin(unsigned pin, unsigned freq) {
if (pin == 25)
channel = DAC_CHANNEL_1;
else if (pin == 26)
channel = DAC_CHANNEL_2;
timer = timerBegin(1, 80, true);
timerAttachInterrupt(timer, &timer_callback, true);
timerAlarmWrite(timer, 1000000 / freq, true);
}
const uint8_t *Sound::play(const uint8_t *bytes, unsigned size) {
portENTER_CRITICAL_ISR(&mux);
const uint8_t *play = (const uint8_t *)_bytes;
if (_off == _size) {
_bytes = bytes;
_size = size;
_off = 0;
dac_output_enable(channel);
timerAlarmEnable(timer);
play = bytes;
}
portEXIT_CRITICAL_ISR(&mux);
return play;
}
#else
// does nothing by default
void Sound::begin(unsigned channel, unsigned freq) {
}
const uint8_t *Sound::play(const uint8_t *bytes, unsigned size) {
return 0;
}
#endif

10
sound.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef __SOUND_H__
#define __SOUND_H__
class Sound {
public:
void begin(unsigned pin, unsigned freq);
const uint8_t *play(const uint8_t *bytes, unsigned size);
};
#endif

View File

@ -1,5 +1,4 @@
#include <Arduino.h>
#include <stdint.h>
#if defined(__LM4F120H5QR__)
#include <inc/hw_ints.h>
@ -29,4 +28,16 @@ void timer_create(unsigned freq, Timed *client) {
ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, ROM_SysCtlClockGet() / freq);
}
#elif defined(ESP_PLATFORM)
void IRAM_ATTR onTimer() {
t->tick();
}
void timer_create(unsigned freq, Timed *client) {
hw_timer_t *timer = timerBegin(3, 80, true); // prescaler of 80
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 1000000 / freq, true);
timerAlarmEnable(timer);
}
#endif