// // Created by ilya on 20.06.24. // #ifndef AMPLIFIER_AW87579_LIST_H #define AMPLIFIER_AW87579_LIST_H #include "Amplifier_AW87579_enum.h" /* * Default data */ #define AW87579_ID_DEFAULT 0x5A #define AW87579_SYSCTRL_DEFAULT 0x38 #define AW87579_BATSAFE_DEFAULT 0x09 #define AW87579_BSTOVR_DEFAULT 0x0C #define AW87579_BSTCPR2_DEFAULT 0x08 #define AW87579_PAGR_DEFAULT 0x10 #define AW87579_PAGC3OPR_DEFAULT 0x43 #define AW87579_PAGC3PR_DEFAULT 0x4E #define AW87579_PAGC2OPR_DEFAULT 0x03 #define AW87579_PAGC2PR_DEFAULT 0x08 #define AW87579_PAGC1PR_DEFAULT 0x4A #define AW87579_ADP_MODE_DEFAULT 0x03 #define AW87579_ADPBST_TIME1_DEFAULT 0xDD #define AW87579_ADPBST_VTH_DEFAULT 0x23 /* * List */ #define def_id 0 #define def_sysctr 1 #define def_batsafe 2 #define def_bstvout 3 #define def_bstcpr2 5 #define def_pagr 6 #define def_pagc3Opr 7 #define def_pagc3Pr 8 #define def_pagc2Opr 9 #define def_pagc2Pr 10 #define def_pagc1Pr 11 #define def_adpMode 12 #define def_adpbstTime1 13 #define def_adpbstVth 14 // CHIP ID REGISTER typedef struct { uint8_t IDCODE:7; // Chip ID will be returned after reading. }tAW87579_ChipId; // SYSTEM CONTROL (SYSCTR) REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ bool EN_HVBAT: 1; // Enable high voltage battery uint8_t res: 1; bool RCV_MODE: 1; // Receiver mode bool EN_PA: 1; // PA Enable. bool EN_BOOST: 1; //Boost Enable. uint8_t : 1; bool EN_SW: 1; //Chip software Enable uint8_t : 1; }; }tAW87579_SYSCTR; #define SYSCTR_SET_RESERV(RES) RES = 0b1 // BATTERY SAFEGUARD (BATSAFE) REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ eBAT_SFGD_LEVEL BAT_SFGD_LEVEL: 2; // Maxim output level when enter into battery safe_guard mode bool EN_BAT_SFGD: 1; // Software control battery safeguard eBAT_SFGD_VTH BAT_SFGD_VTH: 2; // Battery voltage when enter into battery safe_guard mode. eBAT_SFGD_DEGLITCH BAT_SFGD_DEGLITCH: 2; // Battery safe guard deglitch time. uint8_t : 1; }; }tAW87579_BATSAFE; // BOOST OUTPUT VOLTAGE (BSTVOUT) REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ eBST_VOUT BST_VOUT: 5; // BOOST output voltage set uint8_t : 3; }; }tAW87579_BSTVOUT; // BOOSTBOOST CONTROL (BSTCPR2)REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ eBST_IPEAK BST_IPEAK: 4; // BOOST peak current limit uint8_t : 4; }; }tAW87579_BSTCPR2; // CLASS D GAIN CONTROL (PAGR) REGISTER /* * PA Input SignalGain * when RCV_MODE=1 PA_GAIN must be set to 00000~00111 * (0dB~9dB) * when RCV_MODE=0 PA_GAIN must be set to 01000~10010 * (12dB~27dB) */ typedef union { uint8_t data:8; struct __attribute__((packed)){ uint8_t PA_GAIN: 5; uint8_t : 3; }; }tAW87579_PAGR; #define PA_GAIN_SET__dB_RCV_MODE_EN(DB) (DB<1.5?0b00000:(DB>10.5?0b00111:(uint8_t)(DB/1.5))) #define PA_GAIN_SET__dB_RCV_MODE_DIS(DB) (DB<12?0b01000:(DB>27?0b10010:(uint8_t)(DB/1.5))) #define PA_GAIN_SET__dB(RCV_MODE,DB) RCV_MODE == false?PA_GAIN_SET__dB_RCV_MODE_DIS(DB):PA_GAIN_SET__dB_RCV_MODE_EN(DB) // CLASS D AGC3 OUTPUT POWER (AGC3_Po)(PAGC3OPR) REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ AGC3_OUTPUT_POWER AGC3_OUTPUT_POWER: 4; // Speaker Protection output Power Level bool PD_AGC3: 1; // Disable AGC3 uint8_t res: 3; }; }tAW87579_PAGC3OPR; #define PAGC3OPR_SET_RESERV(RES) RES = 0b010 // CLASS D AGC3 PARAMETER REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ uint8_t res: 2; eAGC3_ATT_TIME AGC3_ATT_TIME: 3; // Total 13.5dB attack time eAGC3_REL_TIME AGC3_REL_TIME: 3; // Total 13.5dB release time }; }tAW87579_PAGC3PR; #define PAGC3PR_SET_RESERV(RES) RES = 0b10 // CLASS D AGC2 OUTPUT POWER (AGC2_Po) REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ AGC2_OUTPUT_POWER AGC2_OUTPUT_POWER: 4; // Speaker Protection output Power Level uint8_t res: 4; }; }tAW87579_PAGC2OPR; // CLASS D AGC2 PARAMETER REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ uint8_t : 2; eAGC2_ATT_TIME AGC2_ATT_TIME: 3; // AGC2 total attack time uint8_t : 3; }; }tAW87579_PAGC2PR; // CLASS D AGC1 PARAMETER (AGC1) REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ bool PD_AGC1: 1; // Disable fastest Level AGC eAGC1_ATT_TIME AGC1_ATT_TIME: 2; //Fastest Level AGC attack time control uint8_t res: 5; }; }tAW87579_PAGC1PR; #define PAGC1PR_SET_RESERV(RES) RES = 0b01001 // ADP MODE PARAMETER REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ eADPBOOST_MODE ADPBOOST_MODE: 3; // BOOST MODE bool AGC1_ATT_TIMEA: 1; // Fastest Levl AGC attack time control, Refer to 0x0B register uint8_t : 4; }; }tAW87579_ADP_MODE; // ADP BOOST PARAMETER REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ eADP_BST_TIME ADP_BST_TIME1: 4; // Duration time Po less than Po1 eADP_BST_TIME ADP_BST_TIME2: 4; // Duration time Po less than Po2 }; }tAW87579_ADPBST_TIME1; // ADP BOOST PARAMETER REGISTER typedef union { uint8_t data:8; struct __attribute__((packed)){ eSET_BOOST_VTH1 SET_BOOST_VTH1: 3; // Boost threshold Po1 eSET_BOOST_VTH2 SET_BOOST_VTH2: 3; // Boost threshold Po2 eADP_LOW_STEP ADP_LOW_STEP: 2; // ADP BOOST mode2 first step set BOOST_OUT<4:0> }; }tAW87579_ADPBST_VTH; // AW87579 ALL LIST typedef struct __attribute__((packed)) { tAW87579_SYSCTR sysctr; tAW87579_BATSAFE batsafe; tAW87579_BSTVOUT bstvout; tAW87579_BSTCPR2 bstcpr2; tAW87579_PAGR pagr; tAW87579_PAGC3OPR pagc3Opr; tAW87579_PAGC3PR pagc3Pr; tAW87579_PAGC2OPR pagc2Opr; tAW87579_PAGC2PR pagc2Pr; tAW87579_PAGC1PR pagc1Pr; tAW87579_ADP_MODE adpMode; tAW87579_ADPBST_TIME1 adpbstTime1; tAW87579_ADPBST_VTH adpbstVth; }tAW87579_RegsList; #endif //AMPLIFIER_AW87579_LIST_H