CCJ_2022/src/clock.c

305 lines
10 KiB
C

#include "clock.h"
#include <gint/hardware.h>
#include <gint/defs/types.h>
#define FLLFRQ_default 0x00004384
#define FRQCR_default 0x0F011112
#define CS0BCR_default 0x36DA0400 // CG50
#define CS2BCR_default 0x36DA3400 // CG50
#define CS3BCR_default 0x36DB4400 // CG50
#define CS4BCR_default 0x36DB0400
#define CS5aBCR_default 0x17DF0400
#define CS5bBCR_default 0x17DF0400
#define CS6aBCR_default 0x34D30200
#define CS6bBCR_default 0x34D30200
#define CS0WCR_default 0x000003C0 // CG50
#define CS2WCR_default 0x000003C0 // CG50
#define CS3WCR_default 0x000024D1 // CG50
#define CS4WCR_default 0x00000540
#define CS5aWCR_default 0x000203C1
#define CS5bWCR_default 0x000203C1
#define CS6aWCR_default 0x000302C0
#define CS6bWCR_default 0x000302C0
#define SDCR_default 0x00000A08
#define PLL_32x 0b011111 //
#define PLL_26x 0b011001 //
#define PLL_16x 0b001111 // default
#define DIV_2 0b0000 // 1/2
#define DIV_4 0b0001 // 1/4
#define DIV_8 0b0010 // 1/8
#define DIV16 0b0011 // 1/16
#define SLYDEBUG 0
#if (SLYDEBUG==1)
#include <gint/usb.h>
#include <gint/usb-ff-bulk.h>
#endif
struct st_cpg {
union { // struct FRQCRA similar to SH7724
unsigned long LONG; // long Word Access
struct { // Bit Access
unsigned long KICK :1; // KICK
unsigned long :1; //
unsigned long STC :6; // STC
unsigned long IFC :4; // IFC
unsigned long :4; //
unsigned long SFC :4; // SFC
unsigned long BFC :4; // BFC
unsigned long :4; //
unsigned long PFC :4; // PFC
} BIT;
} FRQCRA;
unsigned long FRQCRB; // 0xA41500004
unsigned long FCLKACR; // 0xA41500008
unsigned long FCLKBCR; // 0xA4150000C
unsigned long unknownA41500010;
unsigned long unknownA41500014;
unsigned long IRDACLKCR; // 0xA41500018
unsigned long unknownA4150001C;
unsigned long unknownA41500020;
unsigned long PLLCR; // 0xA41500024
unsigned long unknownA41500028;
unsigned long unknownA4150002C;
unsigned long unknownA41500030;
unsigned long unknownA41500034;
unsigned long unknownA41500038;
unsigned long SPUCLKCR; // 0xA4150003C
unsigned long unknownA41500040;
unsigned long unknownA41500044;
unsigned long VCLKCR; // 0xA41500048
unsigned long unknownA4150004C;
union { // struct FLLFRQ similar to SH7724
unsigned long LONG; // long Word Access
struct { // Bit Access
unsigned long :16; //
unsigned long SELXM:2; // SELXM
unsigned long :3; //
unsigned long FLF :11; // FLF
} BIT;
} FLLFRQ;
unsigned long unknownA41500054;
unsigned long unknownA41500058;
unsigned long unknownA4150005C;
unsigned long LSTATS;
};
#define CPG (*(volatile struct st_cpg *)0xA4150000)
uint32_t *FRQCR = (uint32_t*)0xA4150000;
//uint32_t *FSICLKCR = (uint32_t*)0xA4150008;
//uint32_t *DDCLRCR = (uint32_t*)0xA4150010;
//uint32_t *USBCLKCR = (uint32_t*)0xA4150014;
//uint32_t *PLL1CR = (uint32_t*)0xA4150024;
//uint32_t *PLL2CR = (uint32_t*)0xA4150028;
//uint32_t *SPUCLKCR = (uint32_t*)0xA415003C;
//uint32_t *SSCGCR = (uint32_t*)0xA4150044;
uint32_t *FLLFRQ = (uint32_t*)0xA4150050;
//uint32_t *LSTATS = (uint32_t*)0xA4150060;
//uint32_t *CMNCR = (uint32_t*)0xFEC10000;
uint32_t *CS0BCR = (uint32_t*)0xFEC10004;
uint32_t *CS2BCR = (uint32_t*)0xFEC10008;
uint32_t *CS3BCR = (uint32_t*)0xFEC1000C;
uint32_t *CS4BCR = (uint32_t*)0xFEC10010;
uint32_t *CS5ABCR = (uint32_t*)0xFEC10014;
uint32_t *CS5BBCR = (uint32_t*)0xFEC10018;
uint32_t *CS6ABCR = (uint32_t*)0xFEC1001C;
uint32_t *CS6BBCR = (uint32_t*)0xFEC10020;
uint32_t *CS0WCR = (uint32_t*)0xFEC10024;
uint32_t *CS2WCR = (uint32_t*)0xFEC10028;
uint32_t *CS3WCR = (uint32_t*)0xFEC1002C;
uint32_t *CS4WCR = (uint32_t*)0xFEC10030;
uint32_t *CS5AWCR = (uint32_t*)0xFEC10034;
uint32_t *CS5BWCR = (uint32_t*)0xFEC10038;
uint32_t *CS6AWCR = (uint32_t*)0xFEC1003C;
uint32_t *CS6BWCR = (uint32_t*)0xFEC10040;
uint32_t *SDCR = (uint32_t*)0xFEC10044;
uint32_t *RTCSR = (uint32_t*)0xFEC10048;
uint32_t *RTCNT = (uint32_t*)0xFEC1004C;
uint32_t *RTCOR = (uint32_t*)0xFEC10050;
uint8_t *SDMR2 = (uint8_t*)0xFEC14000;
uint8_t *SDMR3 = (uint8_t*)0xFEC15000;
uint32_t SaveDataF0_FLLFRQ=FLLFRQ_default; // FLL:900 default
uint32_t SaveDataF0_FRQCR =FRQCR_default; // PLL:x16 IFC:1/2 SFC:1/4 BFC:1/4 PFC:1/8
uint32_t SaveDataF0_CS0BCR=CS0BCR_default; // IWW:4 IWRRS:4
uint32_t SaveDataF0_CS2BCR=CS2BCR_default; // IWW:4 IWRRS:4
uint32_t SaveDataF0_CS0WCR=CS0WCR_default; // wait:8
uint32_t SaveDataF0_CS2WCR=CS2WCR_default; //
uint32_t SaveDataF0_CS3BCR=CS3BCR_default; // IWW:4 IWRRS:4
uint32_t SaveDataF0_CS3WCR=CS3WCR_default; // CL:2
uint32_t SaveDataF0_CS5aBCR=CS5aBCR_default; //
uint32_t SaveDataF0_CS5aWCR=CS5aWCR_default; //
uint32_t SaveDataF2_FLLFRQ=0x00004000+900; // FLL:900 59MHz like CG10/20
uint32_t SaveDataF2_FRQCR =(PLL_16x<<24)+(DIV_4<<20)+(DIV_8<<12)+(DIV_8<<8)+DIV_8;
uint32_t SaveDataF2_CS0BCR=0x24920400; // IWW:2 IWRRS:2
uint32_t SaveDataF2_CS2BCR=0x24923400; // IWW:2 IWRRS:2
uint32_t SaveDataF2_CS0WCR=0x00000340; // wait:6
uint32_t SaveDataF2_CS2WCR=CS2WCR_default; //
uint32_t SaveDataF2_CS3BCR=0x24924400; // IWW:2 IWRRS:2
uint32_t SaveDataF2_CS3WCR=CS3WCR_default; // CL:2
uint32_t SaveDataF2_CS5aBCR=CS5aBCR_default; //
uint32_t SaveDataF2_CS5aWCR=CS5aWCR_default; //
uint32_t SaveDataF3_FLLFRQ=0x00004000+900; // FLL:900 95.8MHz
uint32_t SaveDataF3_FRQCR =(PLL_26x<<24)+(DIV_4<<20)+(DIV_8<<12)+(DIV_8<<8)+DIV_8;
uint32_t SaveDataF3_CS0BCR=0x24920400; // IWW:2 IWRRS:2
uint32_t SaveDataF3_CS2BCR=0x24923400; // IWW:2 IWRRS:2
uint32_t SaveDataF3_CS0WCR=0x00000240; // wait:4
uint32_t SaveDataF3_CS2WCR=CS2WCR_default; //
uint32_t SaveDataF3_CS3BCR=0x24924400; // IWW:2 IWRRS:2
uint32_t SaveDataF3_CS3WCR=CS3WCR_default; // CL:2
uint32_t SaveDataF3_CS5aBCR=CS5aBCR_default; //
uint32_t SaveDataF3_CS5aWCR=CS5aWCR_default; //
uint32_t SaveDataF4_FLLFRQ=0x00004000+900; // FLL:900 236MHz
uint32_t SaveDataF4_FRQCR =(PLL_32x<<24)+(DIV_2<<20)+(DIV_4<<12)+(DIV_8<<8)+DIV16;
uint32_t SaveDataF4_CS0BCR=0x24920400; // IWW:2 IWRRS:2
uint32_t SaveDataF4_CS2BCR=0x24923400; // IWW:2 IWRRS:2
uint32_t SaveDataF4_CS0WCR=0x000002C0; // wait:5
uint32_t SaveDataF4_CS2WCR=CS2WCR_default; //
uint32_t SaveDataF4_CS3BCR=0x24924400; // IWW:2 IWRRS:2
uint32_t SaveDataF4_CS3WCR=CS3WCR_default; // CL:2
uint32_t SaveDataF4_CS5aBCR=CS5aBCR_default; //
uint32_t SaveDataF4_CS5aWCR=CS5aWCR_default; //
uint32_t SaveDataF5_FLLFRQ=0x00004000+900; // FLL:900 191MHz
uint32_t SaveDataF5_FRQCR =(PLL_26x<<24)+(DIV_2<<20)+(DIV_4<<12)+(DIV_4<<8)+DIV_8;
uint32_t SaveDataF5_CS0BCR=0x24920400; // IWW:2 IWRRS:2
uint32_t SaveDataF5_CS2BCR=0x24923400; // IWW:2 IWRRS:2
uint32_t SaveDataF5_CS0WCR=0x00000440; // wait:10
uint32_t SaveDataF5_CS2WCR=CS2WCR_default; //
uint32_t SaveDataF5_CS3BCR=0x24924400; // IWW:2 IWRRS:2
uint32_t SaveDataF5_CS3WCR=CS3WCR_default; // CL:2
uint32_t SaveDataF5_CS5aBCR=CS5aBCR_default; //
uint32_t SaveDataF5_CS5aWCR=CS5aWCR_default; //
void SetOCDefault( void )
{
FLLFRQ[0] = SaveDataF0_FLLFRQ;
FRQCR[0] = SaveDataF0_FRQCR;
CS0BCR[0] = SaveDataF0_CS0BCR;
CS0WCR[0] = SaveDataF0_CS0WCR;
CS2BCR[0] = SaveDataF0_CS2BCR;
CS2WCR[0] = SaveDataF0_CS2WCR;
CS3BCR[0] = SaveDataF0_CS3BCR;
CS3WCR[0] = SaveDataF0_CS3WCR;
CS5ABCR[0] = SaveDataF0_CS5aBCR;
CS5AWCR[0] = SaveDataF0_CS5aWCR;
#if (SLYDEBUG==1)
if (usb_is_open()) usb_fxlink_text("MODE OC_Normal SET", 0);
#endif // SLYDEBUG
}
void SetOCPtuneF2( void )
{
FLLFRQ[0] = SaveDataF2_FLLFRQ;
FRQCR[0] = SaveDataF2_FRQCR;
CS0BCR[0] = SaveDataF2_CS0BCR;
CS0WCR[0] = SaveDataF2_CS0WCR;
CS2BCR[0] = SaveDataF2_CS2BCR;
CS2WCR[0] = SaveDataF2_CS2WCR;
CS3BCR[0] = SaveDataF2_CS3BCR;
CS3WCR[0] = SaveDataF2_CS3WCR;
CS5ABCR[0] = SaveDataF2_CS5aBCR;
CS5AWCR[0] = SaveDataF2_CS5aWCR;
#if (SLYDEBUG==1)
if (usb_is_open()) usb_fxlink_text("MODE PTune_F2 SET", 0);
#endif // SLYDEBUG
}
void SetOCPtuneF3( void )
{
FLLFRQ[0] = SaveDataF3_FLLFRQ;
FRQCR[0] = SaveDataF3_FRQCR;
CS0BCR[0] = SaveDataF3_CS0BCR;
CS0WCR[0] = SaveDataF3_CS0WCR;
CS2BCR[0] = SaveDataF3_CS2BCR;
CS2WCR[0] = SaveDataF3_CS2WCR;
CS3BCR[0] = SaveDataF3_CS3BCR;
CS3WCR[0] = SaveDataF3_CS3WCR;
CS5ABCR[0] = SaveDataF3_CS5aBCR;
CS5AWCR[0] = SaveDataF3_CS5aWCR;
#if (SLYDEBUG==1)
if (usb_is_open()) usb_fxlink_text("MODE PTune_F3 SET", 0);
#endif // SLYDEBUG
}
void SetOCPtuneF4( void )
{
FLLFRQ[0] = SaveDataF4_FLLFRQ;
FRQCR[0] = SaveDataF4_FRQCR;
CS0BCR[0] = SaveDataF4_CS0BCR;
CS0WCR[0] = SaveDataF4_CS0WCR;
CS2BCR[0] = SaveDataF4_CS2BCR;
CS2WCR[0] = SaveDataF4_CS2WCR;
CS3BCR[0] = SaveDataF4_CS3BCR;
CS3WCR[0] = SaveDataF4_CS3WCR;
CS5ABCR[0] = SaveDataF4_CS5aBCR;
CS5AWCR[0] = SaveDataF4_CS5aWCR;
#if (SLYDEBUG==1)
if (usb_is_open()) usb_fxlink_text("MODE PTune_F4 SET", 0);
#endif // SLYDEBUG
}
void SetOCPtuneF5( void )
{
FLLFRQ[0] = SaveDataF5_FLLFRQ;
FRQCR[0] = SaveDataF5_FRQCR;
CS0BCR[0] = SaveDataF5_CS0BCR;
CS0WCR[0] = SaveDataF5_CS0WCR;
CS2BCR[0] = SaveDataF5_CS2BCR;
CS2WCR[0] = SaveDataF5_CS2WCR;
CS3BCR[0] = SaveDataF5_CS3BCR;
CS3WCR[0] = SaveDataF5_CS3WCR;
CS5ABCR[0] = SaveDataF5_CS5aBCR;
CS5AWCR[0] = SaveDataF5_CS5aWCR;
#if (SLYDEBUG==1)
if (usb_is_open()) usb_fxlink_text("MODE PTune_F5 SET", 0);
#endif // SLYDEBUG
}
void clock_overclock( overclock_level level )
{
if(gint[HWCALC] == HWCALC_FXCG50)
{
#if (SLYDEBUG==1)
if (usb_is_open()) usb_fxlink_text("HARDWARE OK", 0);
#endif // SLYDEBUG
if (level == OC_Default) SetOCDefault();
else if (level == OC_PtuneF2) SetOCPtuneF2();
else if (level == OC_PtuneF3) SetOCPtuneF3();
else if (level == OC_PtuneF4) SetOCPtuneF4();
else if (level == OC_PtuneF5) SetOCPtuneF5();
else SetOCDefault();
CPG.FRQCRA.BIT.KICK = 1 ;
while((CPG.LSTATS & 1)!=0);
}
else return;
}