528 lines
13 KiB
C
528 lines
13 KiB
C
/*
|
|
* Copyright (C) 2020-2025 Roger Clark, VK3KYY / G4KYF
|
|
*
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
|
|
* in the documentation and/or other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* 4. Use of this source code or binary releases for commercial purposes is strictly forbidden. This includes, without limitation,
|
|
* incorporation in a commercial product or incorporation into a product or project which allows commercial use.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
|
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
*/
|
|
#ifndef _OPENGD77_GPIO_H_
|
|
#define _OPENGD77_GPIO_H_
|
|
|
|
#include <stdint.h>
|
|
#include "stm32f4xx_hal.h"
|
|
|
|
#define GPIO_PinWrite(port,pin,value) HAL_GPIO_WritePin(port,pin,value)
|
|
|
|
/* -------------- Buttons ---------------- */
|
|
#if defined(PLATFORM_GD77) || defined(PLATFORM_GD77S)
|
|
#define Port_PTT PORTA
|
|
#define GPIO_PTT GPIOA
|
|
#define Pin_PTT 1
|
|
|
|
#define Port_SK1 PORTB
|
|
#define GPIO_SK1 GPIOB
|
|
#define Pin_SK1 1
|
|
|
|
#define Port_SK2 PORTB
|
|
#define GPIO_SK2 GPIOB
|
|
#define Pin_SK2 9
|
|
|
|
#define Port_Orange PORTA
|
|
#define GPIO_Orange GPIOA
|
|
#define Pin_Orange 2
|
|
|
|
#elif defined(PLATFORM_DM1801) || defined(PLATFORM_DM1801A)
|
|
|
|
#define Port_PTT PORTA
|
|
#define GPIO_PTT GPIOA
|
|
#define Pin_PTT 1
|
|
|
|
#define Port_SK1 PORTB
|
|
#define GPIO_SK1 GPIOB
|
|
#define Pin_SK1 1
|
|
|
|
#define Port_SK2 PORTB
|
|
#define GPIO_SK2 GPIOB
|
|
#define Pin_SK2 9
|
|
|
|
#define Port_Orange PORTA
|
|
#define GPIO_Orange GPIOA
|
|
#define Pin_Orange 2
|
|
|
|
#elif defined(PLATFORM_RD5R)
|
|
|
|
#define Port_PTT PORTA
|
|
#define GPIO_PTT GPIOA
|
|
#define Pin_PTT 1
|
|
#define Port_SK1 PORTB // 'CALL' side button
|
|
#define GPIO_SK1 GPIOB
|
|
#define Pin_SK1 1
|
|
#define Port_SK2 PORTB // 'MONI' side button
|
|
#define GPIO_SK2 GPIOB
|
|
#define Pin_SK2 9
|
|
|
|
#endif
|
|
|
|
|
|
#if defined(PLATFORM_GD77) || defined(PLATFORM_GD77S)
|
|
|
|
/* -------------- Battery power control ---------------- */
|
|
|
|
|
|
// Power On/Off logic
|
|
#define Port_Keep_Power_On PORTE
|
|
#define GPIO_Keep_Power_On GPIOE
|
|
#define Pin_Keep_Power_On 26
|
|
|
|
#define Port_Power_Switch PORTA
|
|
#define GPIO_Power_Switch GPIOA
|
|
#define Pin_Power_Switch 13
|
|
|
|
|
|
/* -------------- Audio amp and audio path ---------------- */
|
|
|
|
#define Port_audio_amp_enable PORTB
|
|
#define GPIO_audio_amp_enable GPIOB
|
|
#define Pin_audio_amp_enable 0
|
|
|
|
#define Port_RX_audio_mux PORTC
|
|
#define GPIO_RX_audio_mux GPIOC
|
|
#define Pin_RX_audio_mux 5
|
|
|
|
#define Port_TX_audio_mux PORTC
|
|
#define GPIO_TX_audio_mux GPIOC
|
|
#define Pin_TX_audio_mux 6
|
|
|
|
/* -------------- Tx and Rx RF amplifiers ---------------- */
|
|
|
|
#define Port_VHF_RX_amp_power PORTC
|
|
#define GPIO_VHF_RX_amp_power GPIOC
|
|
#define Pin_VHF_RX_amp_power 13
|
|
#define Port_UHF_RX_amp_power PORTC
|
|
#define GPIO_UHF_RX_amp_power GPIOC
|
|
#define Pin_UHF_RX_amp_power 15
|
|
#define Port_UHF_TX_amp_power PORTE
|
|
#define GPIO_UHF_TX_amp_power GPIOE
|
|
#define Pin_UHF_TX_amp_power 2
|
|
#define Port_VHF_TX_amp_power PORTE
|
|
#define GPIO_VHF_TX_amp_power GPIOE
|
|
#define Pin_VHF_TX_amp_power 3
|
|
|
|
#endif
|
|
|
|
/* -------------- Display ---------------- */
|
|
#define DISPLAY_LED_PWM
|
|
#if ! defined(PLATFORM_GD77S)
|
|
#ifdef DISPLAY_LED_PWM
|
|
|
|
#endif
|
|
#endif // ! PLATFORM_GD77S
|
|
|
|
#if defined(PLATFORM_GD77) || defined(PLATFORM_GD77S)
|
|
|
|
#define Port_Display_Light PORTC
|
|
#define GPIO_Display_Light GPIOC
|
|
#define Pin_Display_Light 4
|
|
#define Port_Display_CS PORTC
|
|
#define GPIO_Display_CS GPIOC
|
|
#define Pin_Display_CS 8
|
|
#define Port_Display_RST PORTC
|
|
#define GPIO_Display_RST GPIOC
|
|
#define Pin_Display_RST 9
|
|
#define Port_Display_RS PORTC
|
|
#define GPIO_Display_RS GPIOC
|
|
#define Pin_Display_RS 10
|
|
#define Port_Display_SCK PORTC
|
|
#define GPIO_Display_SCK GPIOC
|
|
#define Pin_Display_SCK 11
|
|
#define Port_Display_SDA PORTC
|
|
#define GPIO_Display_SDA GPIOC
|
|
#define Pin_Display_SDA 12
|
|
|
|
#define BOARD_FTM_BASEADDR FTM0
|
|
#define BOARD_FTM_CHANNEL kFTM_Chnl_3
|
|
|
|
#elif defined(PLATFORM_DM1801) || defined(PLATFORM_DM1801A)
|
|
|
|
#define Port_Display_Light PORTC
|
|
#define GPIO_Display_Light GPIOC
|
|
#define Pin_Display_Light 4
|
|
#define Port_Display_CS PORTC
|
|
#define GPIO_Display_CS GPIOC
|
|
#define Pin_Display_CS 8
|
|
#define Port_Display_RST PORTC
|
|
#define GPIO_Display_RST GPIOC
|
|
#define Pin_Display_RST 9
|
|
#define Port_Display_RS PORTC
|
|
#define GPIO_Display_RS GPIOC
|
|
#define Pin_Display_RS 10
|
|
#define Port_Display_SCK PORTC
|
|
#define GPIO_Display_SCK GPIOC
|
|
#define Pin_Display_SCK 11
|
|
#define Port_Display_SDA PORTC
|
|
#define GPIO_Display_SDA GPIOC
|
|
#define Pin_Display_SDA 12
|
|
|
|
#define BOARD_FTM_BASEADDR FTM0
|
|
#define BOARD_FTM_CHANNEL kFTM_Chnl_3
|
|
|
|
#elif defined(PLATFORM_RD5R)
|
|
|
|
#define Port_Display_Light PORTC
|
|
#define GPIO_Display_Light GPIOC
|
|
#define Pin_Display_Light 5
|
|
#define Port_Display_CS PORTC
|
|
#define GPIO_Display_CS GPIOC
|
|
#define Pin_Display_CS 11
|
|
#define Port_Display_RST PORTC
|
|
#define GPIO_Display_RST GPIOC
|
|
#define Pin_Display_RST 9
|
|
#define Port_Display_RS PORTC
|
|
#define GPIO_Display_RS GPIOC
|
|
#define Pin_Display_RS 12
|
|
#define Port_Display_SCK PORTC
|
|
#define GPIO_Display_SCK GPIOC
|
|
#define Pin_Display_SCK 8
|
|
#define Port_Display_SDA PORTC
|
|
#define GPIO_Display_SDA GPIOC
|
|
#define Pin_Display_SDA 10
|
|
|
|
#define BOARD_FTM_BASEADDR FTM0
|
|
#define BOARD_FTM_CHANNEL kFTM_Chnl_2
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(PLATFORM_GD77S)
|
|
|
|
#define Port_RotarySW_Line0 PORTD
|
|
#define GPIO_RotarySW_Line0 GPIOD
|
|
#define Pin_RotarySW_Line0 4
|
|
#define Port_RotarySW_Line1 PORTD
|
|
#define GPIO_RotarySW_Line1 GPIOD
|
|
#define Pin_RotarySW_Line1 5
|
|
#define Port_RotarySW_Line2 PORTD
|
|
#define GPIO_RotarySW_Line2 GPIOD
|
|
#define Pin_RotarySW_Line2 6
|
|
#define Port_RotarySW_Line3 PORTD
|
|
#define GPIO_RotarySW_Line3 GPIOD
|
|
#define Pin_RotarySW_Line3 7
|
|
|
|
#endif // PLATFORM_GD77S
|
|
|
|
/* -------------- SPI Flash (GPIO Bit bang on NXP MK22) ---------------- */
|
|
|
|
#if defined(PLATFORM_GD77) || defined(PLATFORM_GD77S)
|
|
|
|
#define Port_SPI_FLASH_CS_U PORTA
|
|
#define GPIO_SPI_FLASH_CS_U GPIOA
|
|
#define Pin_SPI_FLASH_CS_U 19
|
|
|
|
#define Port_SPI_FLASH_CLK_U PORTE
|
|
#define GPIO_SPI_FLASH_CLK_U GPIOE
|
|
#define Pin_SPI_FLASH_CLK_U 5
|
|
|
|
#define Port_SPI_FLASH_DI_U PORTE
|
|
#define GPIO_SPI_FLASH_DI_U GPIOE
|
|
#define Pin_SPI_FLASH_DI_U 6
|
|
|
|
#define Port_SPI_FLASH_DO_U PORTE
|
|
#define GPIO_SPI_FLASH_DO_U GPIOE
|
|
#define Pin_SPI_FLASH_DO_U 4
|
|
|
|
#elif defined(PLATFORM_DM1801) || defined(PLATFORM_DM1801A)
|
|
|
|
#define Port_SPI_FLASH_CS_U PORTE
|
|
#define GPIO_SPI_FLASH_CS_U GPIOE
|
|
#define Pin_SPI_FLASH_CS_U 6
|
|
|
|
#define Port_SPI_FLASH_CLK_U PORTE
|
|
#define GPIO_SPI_FLASH_CLK_U GPIOE
|
|
#define Pin_SPI_FLASH_CLK_U 5
|
|
|
|
#define Port_SPI_FLASH_DI_U PORTA
|
|
#define GPIO_SPI_FLASH_DI_U GPIOA
|
|
#define Pin_SPI_FLASH_DI_U 19
|
|
|
|
#define Port_SPI_FLASH_DO_U PORTE
|
|
#define GPIO_SPI_FLASH_DO_U GPIOE
|
|
#define Pin_SPI_FLASH_DO_U 4
|
|
|
|
#elif defined(PLATFORM_RD5R)
|
|
|
|
#define Port_SPI_FLASH_CS_U PORTE
|
|
#define GPIO_SPI_FLASH_CS_U GPIOE
|
|
#define Pin_SPI_FLASH_CS_U 2
|
|
|
|
#define Port_SPI_FLASH_CLK_U PORTE
|
|
#define GPIO_SPI_FLASH_CLK_U GPIOE
|
|
#define Pin_SPI_FLASH_CLK_U 5
|
|
|
|
#define Port_SPI_FLASH_DI_U PORTE
|
|
#define GPIO_SPI_FLASH_DI_U GPIOE
|
|
#define Pin_SPI_FLASH_DI_U 3
|
|
|
|
#define Port_SPI_FLASH_DO_U PORTE
|
|
#define GPIO_SPI_FLASH_DO_U GPIOE
|
|
#define Pin_SPI_FLASH_DO_U 4
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* -------------- Keypad ---------------- */
|
|
|
|
#if defined(PLATFORM_GD77) || defined(PLATFORM_GD77S)
|
|
|
|
// column lines
|
|
#define Port_Key_Col0 PORTC
|
|
#define GPIO_Key_Col0 GPIOC
|
|
#define Pin_Key_Col0 0
|
|
#define Port_Key_Col1 PORTC
|
|
#define GPIO_Key_Col1 GPIOC
|
|
#define Pin_Key_Col1 1
|
|
#define Port_Key_Col2 PORTC
|
|
#define GPIO_Key_Col2 GPIOC
|
|
#define Pin_Key_Col2 2
|
|
#define Port_Key_Col3 PORTC
|
|
#define GPIO_Key_Col3 GPIOC
|
|
#define Pin_Key_Col3 3
|
|
|
|
// row lines
|
|
#define Port_Key_Row0 PORTB
|
|
#define GPIO_Key_Row0 GPIOB
|
|
#define Pin_Key_Row0 19
|
|
#define Port_Key_Row1 PORTB
|
|
#define GPIO_Key_Row1 GPIOB
|
|
#define Pin_Key_Row1 20
|
|
#define Port_Key_Row2 PORTB
|
|
#define GPIO_Key_Row2 GPIOB
|
|
#define Pin_Key_Row2 21
|
|
#define Port_Key_Row3 PORTB
|
|
#define GPIO_Key_Row3 GPIOB
|
|
#define Pin_Key_Row3 22
|
|
#define Port_Key_Row4 PORTB
|
|
#define GPIO_Key_Row4 GPIOB
|
|
#define Pin_Key_Row4 23
|
|
|
|
#elif defined(PLATFORM_DM1801) || defined(PLATFORM_DM1801A)
|
|
|
|
// column lines
|
|
#define Port_Key_Col0 PORTC
|
|
#define GPIO_Key_Col0 GPIOC
|
|
#define Pin_Key_Col0 0
|
|
#define Port_Key_Col1 PORTC
|
|
#define GPIO_Key_Col1 GPIOC
|
|
#define Pin_Key_Col1 1
|
|
#define Port_Key_Col2 PORTC
|
|
#define GPIO_Key_Col2 GPIOC
|
|
#define Pin_Key_Col2 2
|
|
#define Port_Key_Col3 PORTC
|
|
#define GPIO_Key_Col3 GPIOC
|
|
#define Pin_Key_Col3 3
|
|
|
|
// row lines
|
|
#define Port_Key_Row0 PORTB
|
|
#define GPIO_Key_Row0 GPIOB
|
|
#define Pin_Key_Row0 19
|
|
#define Port_Key_Row1 PORTB
|
|
#define GPIO_Key_Row1 GPIOB
|
|
#define Pin_Key_Row1 20
|
|
#define Port_Key_Row2 PORTB
|
|
#define GPIO_Key_Row2 GPIOB
|
|
#define Pin_Key_Row2 21
|
|
#define Port_Key_Row3 PORTB
|
|
#define GPIO_Key_Row3 GPIOB
|
|
#define Pin_Key_Row3 22
|
|
#define Port_Key_Row4 PORTB
|
|
#define GPIO_Key_Row4 GPIOB
|
|
#define Pin_Key_Row4 23
|
|
|
|
#elif defined(PLATFORM_RD5R)
|
|
|
|
// column lines
|
|
#define Port_Key_Col0 PORTC
|
|
#define GPIO_Key_Col0 GPIOC
|
|
#define Pin_Key_Col0 0
|
|
#define Port_Key_Col1 PORTC
|
|
#define GPIO_Key_Col1 GPIOC
|
|
#define Pin_Key_Col1 1
|
|
#define Port_Key_Col2 PORTC
|
|
#define GPIO_Key_Col2 GPIOC
|
|
#define Pin_Key_Col2 2
|
|
#define Port_Key_Col3 PORTC
|
|
#define GPIO_Key_Col3 GPIOC
|
|
#define Pin_Key_Col3 3
|
|
|
|
// row lines
|
|
#define Port_Key_Row0 PORTB
|
|
#define GPIO_Key_Row0 GPIOB
|
|
#define Pin_Key_Row0 19
|
|
#define Port_Key_Row1 PORTB
|
|
#define GPIO_Key_Row1 GPIOB
|
|
#define Pin_Key_Row1 20
|
|
#define Port_Key_Row2 PORTB
|
|
#define GPIO_Key_Row2 GPIOB
|
|
#define Pin_Key_Row2 21
|
|
#define Port_Key_Row3 PORTB
|
|
#define GPIO_Key_Row3 GPIOB
|
|
#define Pin_Key_Row3 22
|
|
#define Port_Key_Row4 PORTB
|
|
#define GPIO_Key_Row4 GPIOB
|
|
#define Pin_Key_Row4 23
|
|
|
|
#endif
|
|
|
|
|
|
/* -------------- HR-C6000 interface ---------------- */
|
|
|
|
#if defined(PLATFORM_GD77) || defined(PLATFORM_GD77S)
|
|
|
|
// C6000 interrupts
|
|
|
|
// Rx interrupt
|
|
#define Port_INT_C6000_RF_RX PORTC
|
|
#define GPIO_INT_C6000_RF_RX GPIOC
|
|
#define Pin_INT_C6000_RF_RX 7
|
|
|
|
// Tx interrupt
|
|
#define Port_INT_C6000_RF_TX PORTC
|
|
#define GPIO_INT_C6000_RF_TX GPIOC
|
|
#define Pin_INT_C6000_RF_TX 16
|
|
|
|
// Sys interrupt
|
|
#define Port_INT_C6000_SYS PORTC
|
|
#define GPIO_INT_C6000_SYS GPIOC
|
|
#define Pin_INT_C6000_SYS 17
|
|
|
|
// Timeslot interrupt
|
|
#define Port_INT_C6000_TS PORTC
|
|
#define GPIO_INT_C6000_TS GPIOC
|
|
#define Pin_INT_C6000_TS 18
|
|
|
|
// Connections with C6000
|
|
|
|
// Reset
|
|
#define Port_C6000_RESET PORTE
|
|
#define GPIO_C6000_RESET GPIOE
|
|
#define Pin_C6000_RESET 0
|
|
|
|
// Power down
|
|
#define Port_C6000_PWD PORTE
|
|
#define GPIO_C6000_PWD GPIOE
|
|
#define Pin_C6000_PWD 1
|
|
|
|
#elif defined(PLATFORM_DM1801) || defined(PLATFORM_DM1801A)
|
|
|
|
// C6000 interrupts
|
|
|
|
// Rx interrupt
|
|
#define Port_INT_C6000_RF_RX PORTC
|
|
#define GPIO_INT_C6000_RF_RX GPIOC
|
|
#define Pin_INT_C6000_RF_RX 16
|
|
|
|
// Tx Interrupt
|
|
#define Port_INT_C6000_RF_TX PORTC
|
|
#define GPIO_INT_C6000_RF_TX GPIOC
|
|
#define Pin_INT_C6000_RF_TX 7
|
|
|
|
// Sys interrupt
|
|
#define Port_INT_C6000_SYS PORTC
|
|
#define GPIO_INT_C6000_SYS GPIOC
|
|
#define Pin_INT_C6000_SYS 17
|
|
|
|
// Timeslot interrupt
|
|
#define Port_INT_C6000_TS PORTC
|
|
#define GPIO_INT_C6000_TS GPIOC
|
|
#define Pin_INT_C6000_TS 18
|
|
|
|
// Connections with C6000
|
|
|
|
// Reset
|
|
#define Port_C6000_RESET PORTE
|
|
#define GPIO_C6000_RESET GPIOE
|
|
#define Pin_C6000_RESET 2
|
|
|
|
// Power down
|
|
#define Port_C6000_PWD PORTE
|
|
#define GPIO_C6000_PWD GPIOE
|
|
#define Pin_C6000_PWD 3
|
|
|
|
#elif defined(PLATFORM_RD5R)
|
|
|
|
// C6000 interrupts
|
|
|
|
// Rx interrupt
|
|
#define Port_INT_C6000_RF_RX PORTC
|
|
#define GPIO_INT_C6000_RF_RX GPIOC
|
|
#define Pin_INT_C6000_RF_RX 7
|
|
|
|
// Tx Interrupt
|
|
#define Port_INT_C6000_RF_TX PORTC
|
|
#define GPIO_INT_C6000_RF_TX GPIOC
|
|
#define Pin_INT_C6000_RF_TX 16
|
|
|
|
// Sys interrupt
|
|
#define Port_INT_C6000_SYS PORTC
|
|
#define GPIO_INT_C6000_SYS GPIOC
|
|
#define Pin_INT_C6000_SYS 17
|
|
|
|
// Timeslot interrupt
|
|
#define Port_INT_C6000_TS PORTC
|
|
#define GPIO_INT_C6000_TS GPIOC
|
|
#define Pin_INT_C6000_TS 18
|
|
|
|
// Connections with C6000
|
|
|
|
// Reset
|
|
#define Port_C6000_RESET PORTE
|
|
#define GPIO_C6000_RESET GPIOE
|
|
#define Pin_C6000_RESET 0
|
|
|
|
// Power down
|
|
#define Port_C6000_PWD PORTE
|
|
#define GPIO_C6000_PWD GPIOE
|
|
#define Pin_C6000_PWD 1
|
|
|
|
#endif
|
|
|
|
#if 0
|
|
void gpioInitButtons(void);
|
|
void gpioInitCommon(void);
|
|
#endif
|
|
void gpioInitDisplay(void);
|
|
void gpioSetDisplayBacklightIntensityPercentage(uint8_t intensityPercentage);
|
|
uint8_t gpioGetDisplayBacklightIntensityPercentage(void);
|
|
#if 0
|
|
void gpioInitFlash(void);
|
|
#endif
|
|
void gpioInitKeyboard(void);
|
|
void gpioInitLEDs(void);
|
|
void gpioInitRotarySwitch(void);
|
|
|
|
#if 0
|
|
//void gpioInitC6000Interface(void);
|
|
#endif
|
|
|
|
|
|
#endif
|