kopia lustrzana https://github.com/piotr022/UV_K5_playground
update
rodzic
03d5c68784
commit
dbe5d084df
|
|
@ -1,5 +1,5 @@
|
||||||
transport select swd
|
transport select swd
|
||||||
adapter speed 8000
|
adapter speed 16000
|
||||||
reset_config srst_only srst_nogate connect_assert_srst
|
reset_config srst_only srst_nogate connect_assert_srst
|
||||||
|
|
||||||
set _CHIP_NAME DP32G0xx
|
set _CHIP_NAME DP32G0xx
|
||||||
|
|
|
||||||
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
|
@ -0,0 +1,17 @@
|
||||||
|
#include "registers.hpp"
|
||||||
|
|
||||||
|
class CExec final
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CExec(){};
|
||||||
|
|
||||||
|
void InterruptCallback()
|
||||||
|
{
|
||||||
|
CheckButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CheckButtons() const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -5,6 +5,7 @@ using namespace Hardware;
|
||||||
|
|
||||||
void TPower::EnableDbg()
|
void TPower::EnableDbg()
|
||||||
{
|
{
|
||||||
|
GPIOB->DIR &= ~(GPIO_PIN_11|GPIO_PIN_14);
|
||||||
// PB11 alternate fx to SWDIO
|
// PB11 alternate fx to SWDIO
|
||||||
GPIO->PORTB_SEL1 &= ~(0b1111 << 12);
|
GPIO->PORTB_SEL1 &= ~(0b1111 << 12);
|
||||||
GPIO->PORTB_SEL1 |= (0b1 << 12);
|
GPIO->PORTB_SEL1 |= (0b1 << 12);
|
||||||
|
|
@ -13,3 +14,37 @@ void TPower::EnableDbg()
|
||||||
GPIO->PORTB_SEL1 &= ~(0b1111 << 24);
|
GPIO->PORTB_SEL1 &= ~(0b1111 << 24);
|
||||||
GPIO->PORTB_SEL1 |= (0b1 << 24);
|
GPIO->PORTB_SEL1 |= (0b1 << 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TSystem::Delay(unsigned int u32Ticks)
|
||||||
|
{
|
||||||
|
for(volatile unsigned int i = 0; i < u32Ticks; i++)
|
||||||
|
{
|
||||||
|
__asm volatile ("dsb sy" : : : "memory");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TFlashLight::On()
|
||||||
|
{
|
||||||
|
GPIOC->DATA |= 1 << 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TFlashLight::Off()
|
||||||
|
{
|
||||||
|
GPIOC->DATA &= ~(1 << 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TFlashLight::Toggle()
|
||||||
|
{
|
||||||
|
GPIOC->DATA ^= 1 << 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TFlashLight::BlinkSync(unsigned char u8BlinksCnt)
|
||||||
|
{
|
||||||
|
for(unsigned char i = 0; i < u8BlinksCnt*2; i++)
|
||||||
|
{
|
||||||
|
Toggle();
|
||||||
|
System.Delay(100000);
|
||||||
|
}
|
||||||
|
|
||||||
|
Off();
|
||||||
|
}
|
||||||
|
|
@ -5,8 +5,25 @@ namespace Hardware
|
||||||
void EnableDbg();
|
void EnableDbg();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct TSystem
|
||||||
|
{
|
||||||
|
static void Delay(unsigned int u32Ticks);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TFlashLight
|
||||||
|
{
|
||||||
|
TFlashLight(TSystem& Sys) :System(Sys){};
|
||||||
|
void On();
|
||||||
|
void Off();
|
||||||
|
void Toggle();
|
||||||
|
void BlinkSync(unsigned char u8BlinksCnt);
|
||||||
|
TSystem& System;
|
||||||
|
};
|
||||||
|
|
||||||
struct THardware
|
struct THardware
|
||||||
{
|
{
|
||||||
TPower Power;
|
TPower Power;
|
||||||
|
TSystem System;
|
||||||
|
TFlashLight FlashLight = {System};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -3,16 +3,36 @@
|
||||||
#include "registers.hpp"
|
#include "registers.hpp"
|
||||||
|
|
||||||
Hardware::THardware Hw;
|
Hardware::THardware Hw;
|
||||||
extern "C" void Reset_Handler();
|
const System::TOrgFunctions Fw = System::OrgFunc_01_26;
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
Hw.Power.EnableDbg();
|
|
||||||
System::JumpToOrginalFw();
|
System::JumpToOrginalFw();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiIrq_Handler(unsigned int u32IrqSource)
|
void MultiIrq_Handler(unsigned int u32IrqSource)
|
||||||
{
|
{
|
||||||
GPIOC->DATA ^= 1 << 3;
|
if(GPIOA->DATA & GPIO_PIN_3) // exit key
|
||||||
|
{
|
||||||
|
Hw.FlashLight.BlinkSync(1);
|
||||||
|
|
||||||
|
Fw.BK4819Write(0x58, 0b01111100110011);
|
||||||
|
for(int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
Fw.BK4819Write(0x5F, 0xAB);
|
||||||
|
}
|
||||||
|
|
||||||
|
Fw.BK4819Read(0x1);
|
||||||
|
// Fw.BK4819Write(0x5D, 0xF << 5);
|
||||||
|
// Fw.BK4819Write(0x59, 0b1 << 11);
|
||||||
|
// Fw.BK4819Write(0x58, 0b01111100110011);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char u8Pa10_13 = (GPIOA->DATA >> 10) & 0xF;
|
||||||
|
if(u8Pa10_13)
|
||||||
|
{
|
||||||
|
Hw.FlashLight.BlinkSync(u8Pa10_13);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ ENTRY(Reset_Handler)
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 4K
|
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 4K
|
||||||
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
|
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 60K
|
||||||
}
|
}
|
||||||
|
|
||||||
_estack = 0x20001388;
|
_estack = 0x20001388;
|
||||||
|
|
|
||||||
|
|
@ -46,11 +46,36 @@ struct TPort
|
||||||
struct TGpio
|
struct TGpio
|
||||||
{
|
{
|
||||||
unsigned int DATA;
|
unsigned int DATA;
|
||||||
|
unsigned int DIR;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GPIO_BASE 0x400B0000
|
#define GPIO_BASE 0x400B0000
|
||||||
#define GPIO ((TPort*)GPIO_BASE)
|
#define GPIO ((TPort*)GPIO_BASE)
|
||||||
#define __BKPT(value) __asm volatile ("bkpt "#value)
|
#define __BKPT(value) __asm volatile ("bkpt "#value)
|
||||||
|
|
||||||
|
|
||||||
|
#define GPIOA_BASE 0x40060000
|
||||||
|
#define GPIOA ((TGpio*)GPIOC_BASE)
|
||||||
|
|
||||||
|
#define GPIOB_BASE 0x40060800
|
||||||
|
#define GPIOB ((TGpio*)GPIOC_BASE)
|
||||||
|
|
||||||
#define GPIOC_BASE 0x40061000
|
#define GPIOC_BASE 0x40061000
|
||||||
#define GPIOC ((TGpio*)GPIOC_BASE)
|
#define GPIOC ((TGpio*)GPIOC_BASE)
|
||||||
|
|
||||||
|
#define GPIO_PIN_0 (1 << 0 )
|
||||||
|
#define GPIO_PIN_1 (1 << 1 )
|
||||||
|
#define GPIO_PIN_2 (1 << 2 )
|
||||||
|
#define GPIO_PIN_3 (1 << 3 )
|
||||||
|
#define GPIO_PIN_4 (1 << 4 )
|
||||||
|
#define GPIO_PIN_5 (1 << 5 )
|
||||||
|
#define GPIO_PIN_6 (1 << 6 )
|
||||||
|
#define GPIO_PIN_7 (1 << 7 )
|
||||||
|
#define GPIO_PIN_8 (1 << 8 )
|
||||||
|
#define GPIO_PIN_9 (1 << 9 )
|
||||||
|
#define GPIO_PIN_10 (1 << 10)
|
||||||
|
#define GPIO_PIN_11 (1 << 11)
|
||||||
|
#define GPIO_PIN_12 (1 << 12)
|
||||||
|
#define GPIO_PIN_13 (1 << 13)
|
||||||
|
#define GPIO_PIN_14 (1 << 14)
|
||||||
|
#define GPIO_PIN_15 (1 << 15)
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,31 @@ namespace System
|
||||||
};
|
};
|
||||||
|
|
||||||
void JumpToOrginalFw();
|
void JumpToOrginalFw();
|
||||||
|
|
||||||
|
struct TOrgFunctions
|
||||||
|
{
|
||||||
|
void(*PrintTextOnScreen)(const char* U8Text,
|
||||||
|
unsigned int u32StartPixel,
|
||||||
|
unsigned int u32StopPixel,
|
||||||
|
unsigned int u32LineNumber,
|
||||||
|
unsigned int u32Centered);
|
||||||
|
|
||||||
|
void(*FillScreenMemory)(unsigned int u32Param1);
|
||||||
|
void(*DelayMs)(unsigned int u32Ms);
|
||||||
|
void(*DelayUs)(unsigned int u32Us);
|
||||||
|
int(*WriteSerialData)(unsigned char* p8Data, unsigned char u8Len);
|
||||||
|
void(*BK4819Write)(unsigned int u32Address, unsigned int u32Data);
|
||||||
|
unsigned int(*BK4819Read)(unsigned int u32Address);
|
||||||
|
};
|
||||||
|
|
||||||
|
inline const TOrgFunctions OrgFunc_01_26 =
|
||||||
|
{
|
||||||
|
.PrintTextOnScreen = (decltype(TOrgFunctions::PrintTextOnScreen))(0x874C + 1),
|
||||||
|
.FillScreenMemory = (decltype(TOrgFunctions::FillScreenMemory))(0xb70c + 1),
|
||||||
|
.DelayMs = (decltype(TOrgFunctions::DelayMs)) (0xD0EE + 1),
|
||||||
|
.DelayUs = (decltype(TOrgFunctions::DelayUs)) (0xD100 + 1),
|
||||||
|
.WriteSerialData = (int(*)(unsigned char*, unsigned char))(0xBE44 + 1),
|
||||||
|
.BK4819Write = (decltype(TOrgFunctions::BK4819Write) (0xAF00 + 1)),
|
||||||
|
.BK4819Read = (decltype(TOrgFunctions::BK4819Read) (0xA960 + 1)),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Ładowanie…
Reference in New Issue