diff --git a/meson.build b/meson.build index 59031984..c828c38d 100644 --- a/meson.build +++ b/meson.build @@ -255,6 +255,8 @@ gd77_def = def + mk22fn512_def + {'PLATFORM_GD77': ''} dm1801_src = src + mk22fn512_src + ['platform/targets/DM-1801/platform.c', 'platform/drivers/display/UC1701_GD77.c', 'platform/drivers/keyboard/keyboard_GD77.c', + 'platform/drivers/NVM/W25Qx.c', + 'platform/drivers/NVM/spiFlash_GDx.c', 'platform/drivers/ADC/ADC0_GDx.c', 'platform/drivers/baseband/rtx_GDx.c'] diff --git a/platform/drivers/NVM/spiFlash_GDx.c b/platform/drivers/NVM/spiFlash_GDx.c new file mode 100644 index 00000000..c0ce750c --- /dev/null +++ b/platform/drivers/NVM/spiFlash_GDx.c @@ -0,0 +1,74 @@ +/*************************************************************************** + * Copyright (C) 2020 by Federico Amedeo Izzo IU2NUO, * + * Niccolò Izzo IU2KIN * + * Frederik Saraci IU2NRO * + * Silvano Seva IU2KWO * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, see * + ***************************************************************************/ + +#include +#include +#include +#include + +/* + * Implementation of external flash SPI interface for GDx devices. + * In these radios the SPI communication has to be managed through software bit + * banging, since there is no SPI peripheral available. + */ + +uint8_t spiFlash_SendRecv(uint8_t val) +{ + uint8_t data = 0; + for(uint8_t i = 0; i < 8; i++) + { + gpio_clearPin(FLASH_CLK); + delayUs(1); + + if((val << i) & 0x80) + { + gpio_setPin(FLASH_SDO); + } + else + { + gpio_clearPin(FLASH_SDO); + } + + gpio_setPin(FLASH_CLK); + delayUs(1); + + data <<= 1; + data |= (gpio_readPin(FLASH_SDI)) ? 0x01 : 0x00; + } + + return data; +} + +void spiFlash_init() +{ + gpio_setMode(FLASH_CLK, OUTPUT); + gpio_setMode(FLASH_SDO, OUTPUT); + gpio_setMode(FLASH_SDI, INPUT); + + gpio_clearPin(FLASH_CLK); + gpio_clearPin(FLASH_SDO); +} + +void spiFlash_terminate() +{ + gpio_setMode(FLASH_CLK, INPUT); + gpio_setMode(FLASH_SDO, INPUT); + gpio_setMode(FLASH_SDI, INPUT); +} diff --git a/platform/targets/DM-1801/hwconfig.h b/platform/targets/DM-1801/hwconfig.h index 79f868ef..b1577853 100644 --- a/platform/targets/DM-1801/hwconfig.h +++ b/platform/targets/DM-1801/hwconfig.h @@ -72,4 +72,10 @@ #define FUNC2_SW GPIOB,1 #define MONI_SW GPIOB,9 +/* External flash */ +#define FLASH_CS GPIOE,6 +#define FLASH_CLK GPIOE,5 +#define FLASH_SDO GPIOE,4 +#define FLASH_SDI GPIOA,19 + #endif