//**********************************************************
// Símbolos especiais utilizados com a família HCS08
// Autor : Fábio Pereira
// Para o livro Microcontroladores HCS08: Teoria e Prática
//**********************************************************

#define BIT_0 1
#define BIT_1 2
#define BIT_2 4
#define BIT_3 8
#define BIT_4 16
#define BIT_5 32
#define BIT_6 64
#define BIT_7 128

#define STOP() {asm stop;}
#define WAIT() {asm wait;}
  

#ifdef _MC9S08QG8_H
volatile unsigned char OSC_TRIM @ 0xFFAF;
volatile unsigned char OSC_FTRIM @ 0xFFAE;
// Registrador ICSC2
#define BDIV_1      0
#define BDIV_2      BIT_6
#define BDIV_4      BIT_7
#define BDIV_8      BIT_7 + BIT_6
#define bRANGE      BIT_5
#define bHGO        BIT_4
#define bLP         BIT_3
#define bEREFS      BIT_2
#define bERCLKEN    BIT_1
#define bEREFSTEN   BIT_0
#elif defined(_MC9S08QG4_H) 
volatile unsigned char OSC_TRIM @ 0xFFAF;
volatile unsigned char OSC_FTRIM @ 0xFFAE;
// Registrador ICSC2
#define BDIV_1      0
#define BDIV_2      BIT_6
#define BDIV_4      BIT_7
#define BDIV_8      BIT_7 + BIT_6
#define bRANGE      BIT_5
#define bHGO        BIT_4
#define bLP         BIT_3
#define bEREFS      BIT_2
#define bERCLKEN    BIT_1
#define bEREFSTEN   BIT_0
#else

// Registrador ICGC1
#define bRANGE    BIT_6
#define bREFS     BIT_5
#define bCLKS1    BIT_4
#define bCLKS0    BIT_3
#define bOSCSTEN  BIT_2
#define ICG_SCM   0
#define ICG_FEI   bCLKS0
#define ICG_FBE   bCLKS1
#define ICG_FEE   bCLKS1 + bCLKS0

//Registrador ICGS1
#define bCLKST1     BIT_7
#define bLCKST0     BIT_6
#define bREFST      BIT_5
#define bLOLS       BIT_4
#define bLOCK       BIT_3
#define bLOCS       BIT_2
#define bERCS       BIT_1
#define bICGIF      BIT_0

//Registrador ICGS2
#define bDCOS       BIT_0

#endif

// Registrador SOPT
#define bCOPE    BIT_7
#define bCOPT    BIT_6
#define bSTOPE   BIT_5
#define bBKGDPE  BIT_1
#define bRSTPE   BIT_0

// Registrador SOPT2
#define bCOPCLKS BIT_7
#define bIICPS   BIT_1
#define bACIC    BIT_0

// Registrador SRS
#define bPOR   BIT_7
#define bPIN   BIT_6
#define bCOP   BIT_5
#define bILOP  BIT_4
#define bILAD  BIT_3
#define bICG   BIT_2
#define bLVD   BIT_1

// Registrador SPMSC1
#define bLVDF    BIT_7
#define bLVDACK  BIT_6
#define bLVDIE   BIT_5
#define bLVDRE   BIT_4
#define bLVDSE   BIT_3
#define bLVDE    BIT_2
#define bBGBE		 BIT_0

// Registrador SPMC2
#define bLVWF      BIT_7
#define bLVWACK    BIT_6
#define bLVDV      BIT_5
#define bLVWV      BIT_4
#define bPDF       BIT_4
#define bPPDF      BIT_3
#define bPPDACK    BIT_2
#define bPDC       BIT_1
#define bPPDC      BIT_0
#define SEL_STOP3  0
#define SEL_STOP2  bPDC + bPPDC
#define SEL_STOP1  bPDC

// Registrador IRQSC
#define bIRQDD   BIT_6
#define bIRQEDG  BIT_5
#define bIRQPE   BIT_4
#define bIRQF    BIT_3
#define bIRQACK  BIT_2
#define bIRQIE   BIT_1
#define bIRQMOD  BIT_0

// Registrador SRTISC
#define bRTIF         BIT_7
#define bRTIACK       BIT_6
#define bRTICLKS      BIT_5
#define bRTIE         BIT_4
#define bRTIS2        BIT_2
#define bRTIS1        BIT_1
#define bRTIS0        BIT_0
#define RTI_OFF       0
#define RTI_8ms       1
#define RTI_DIV256    1
#define RTI_32ms      2
#define RTI_DIV1024   2
#define RTI_64ms      3
#define RTI_DIV2048   3
#define RTI_128ms     4
#define RTI_DIV4096   4
#define RTI_256ms     5
#define RTI_DIV8192   5
#define RTI_512ms     6
#define RTI_DIV16384  6
#define RTI_1024ms    7
#define RTI_DIV32768  7

// Registrador KBISC
#define bKBEDG7   BIT_7
#define bKBEDG6   BIT_6
#define bKBEDG5   BIT_5
#define bKBEDG4   BIT_4
#define bKBF      BIT_3
#define bKBACK    BIT_2
#define bKBIE     BIT_1
#define bKBIMOD   BIT_0

// Registrador ICSC1
#define ICS_FLL     0
#define ICS_REF_INT BIT_6
#define ICS_REF_EXT BIT_7
#define RDIV_1      0
#define RDIV_2      BIT_3
#define RDIV_4      BIT_4
#define RDIV_8      BIT_4 + BIT_3
#define RDIV_16     BIT_5
#define RDIV_32     BIT_5 + BIT_3
#define RDIV_64     BIT_5 + BIT_4
#define RDIV_128    BIT_5 + BIT_4 + BIT_3
#define bIREFS      BIT_2
#define bIRCLKEN    BIT_1
#define bIREFSTEN   BIT_0

// Registrador ICSSC
#define bCLKST1     BIT_3
#define bCLKST0     BIT_2
#define bOSCINIT    BIT_1
#define bFTRIM      BIT_0

//Registrador ICGC2
#define bLOLRE      BIT_7
#define bMFD2       BIT_6
#define bMFD1       BIT_5
#define bMFD0       BIT_4
#define bLOCRE      BIT_3
#define bRFD2       BIT_2
#define bRFD1       BIT_1
#define bRFD0       BIT_0
#define MFDx4       0
#define MFDx6       bMFD0
#define MFDx8       bMFD1
#define MFDx10      bMFD1 + bMFD0
#define MFDx12      bMFD2
#define MFDx14      bMFD2 + bMFD0
#define MFDx16      bMFD2 + bMFD1
#define MFDx18      bMFD2 + bMFD1 + bMFD0
#define RFD_DIV1    0
#define RFD_DIV2    1
#define RFD_DIV4    2
#define RFD_DIV8    3
#define RFD_DIV16   4
#define RFD_DIV32   5
#define RFD_DIV64   6
#define RFD_DIV128  7

// Registrador TPMSC
#define bTOF        BIT_7
#define bTOIE       BIT_6
#define bCPWMS      BIT_5
#define bCLKSB      BIT_4
#define bCLKSA      BIT_3
#define bPS2        BIT_2
#define bPS1        BIT_1
#define bPS0        BIT_0
#define TPM_OFF     bCLKSA + bCLKSB
#define TPM_BUSCLK  bCLKSA
#define TPM_XCLK    bCLKSB
#define TPM_EXT     bCLKSB + bCLKSA
#define TPM_DIV1    0
#define TPM_DIV2    1
#define TPM_DIV4    2
#define TPM_DIV8    3
#define TPM_DIV16   4
#define TPM_DIV32   5
#define TPM_DIV64   6
#define TPM_DIV128  7

// Registrador TPMxCxSC
#define bCHF   BIT_7
#define bCHIE  BIT_6
#define bMSB   BIT_5
#define bMSA   BIT_4
#define bELSB  BIT_3
#define bELSA  BIT_2
#define TPM_CAPTURE_RISING_EDGE   bELSA
#define TPM_CAPTURE_FALLING_EDGE  bELSB
#define TPM_CAPTURE_BOTH_EDGES    bELSA + bELSB
#define TPM_COMPARE_INT           bMSA
#define TPM_COMPARE_TOGGLE        bMSA + bELSA
#define TPM_COMPARE_CLEAR         bMSA + bELSB
#define TPM_COMPARE_SET           bMSA + bELSB + bELSA
#define TPM_PWM_HIGH              bMSB + bELSB
#define TPM_PWM_LOW               bMSB + bELSA

// Registrador MTIMSC
#define bTOF    BIT_7
#define bTOIE   BIT_6
#define bTRST   BIT_5
#define bTSTP   BIT_4

// Registrador MTIMCLK
#define MTIM_BUSCLK             0
#define MTIM_XCLK               BIT_4
#define MTIM_EXT_FALLING_EDGE   BIT_5
#define MTIM_EXT_RISING_EDGE    BIT_5 + BIT_4
#define MTIM_DIV1               0
#define MTIM_DIV2               1
#define MTIM_DIV4               2
#define MTIM_DIV8               3
#define MTIM_DIV16              4
#define MTIM_DIV32              5
#define MTIM_DIV64              6
#define MTIM_DIV128             7
#define MTIM_DIV256             8

// Registrador ATDC
#define bATDPU    BIT_7
#define bDJM      BIT_6
#define bRES8     BIT_5
#define bSGN      BIT_4
#define ATD_PRS2  0
#define ATD_PRS4  1
#define ATD_PRS6  2
#define ATD_PRS8  3
#define ATD_PRS10 4
#define ATD_PRS12 5
#define ATD_PRS14 6
#define ATD_PRS16 7
#define ATD_PRS18 8
#define ATD_PRS20 9
#define ATD_PRS22 10
#define ATD_PRS24 11
#define ATD_PRS26 12
#define ATD_PRS28 13
#define ATD_PRS30 14
#define ATD_PRS32 15

// Registrador ATDSC
#define bCCF      BIT_7
#define bATDIE    BIT_6
#define bATDCO    BIT_5
#define ATD_AD0   0
#define ATD_AD1   1
#define ATD_AD2   2
#define ATD_AD3   3
#define ATD_AD4   4
#define ATD_AD5   5
#define ATD_AD6   6
#define ATD_AD7   7
#define ATD_VREFH 30
#define ATD_VREFL 31

// Registrador ADCSC1
#define bCOCO     BIT_7
#define bAIEN     BIT_6
#define bADCO     BIT_5
#define ADCH0     0
#define ADCH1     1
#define ADCH2     2
#define ADCH3     3
#define ADCH4     4
#define ADCH5     5
#define ADCH6     6
#define ADCH7     7
#define AD_TEMP_SENSOR 26
#define AD_BANDGAP 27
#define ADCHREFH  29
#define ADCHREFL  30
#define ADC_OFF   31

// Registrador ADCSC2
#define bADACT    BIT_7
#define bADTRG    BIT_6
#define bACFE     BIT_5
#define bACFGT    BIT_4

// Registrador ADCCFG
#define bADLPC          BIT_7
#define ADIV_1          0
#define ADIV_2          BIT_5
#define ADIV_4          BIT_6
#define ADIV_8          BIT_6 + BIT_5
#define ADLSMP          BIT_4
#define ADC_8BITS       0
#define ADC_10BITS      BIT_3
#define ADC_BUSCLK      0
#define ADC_BUSCLK_DIV2 1
#define ADC_ALTCLK      2
#define ADC_INTCLK      3     


// Registrador ACMPSC
#define bACME   BIT_7
#define bACBGS  BIT_6
#define bACF    BIT_5
#define bACIE   BIT_4
#define bACO    BIT_3
#define bACOPE  BIT_2
#define ACMOD_0 0
#define ACMOD_1 BIT_0
#define ACMOD_2 BIT_1
#define ACMOD_3 BIT_1 + BIT_0

// Registrador SCIC1
#define bLOOPS    BIT_7
#define bSCISWAI  BIT_6
#define bRSRC     BIT_5
#define bM        BIT_4
#define bWAKE     BIT_3
#define bILT      BIT_2
#define bPE       BIT_1
#define bPT       BIT_0

// Registrador SCIC2
#define bTIE      BIT_7
#define bTCIE     BIT_6
#define bRIE      BIT_5
#define bILIE     BIT_4
#define bTE       BIT_3
#define bRE       BIT_2
#define bRWU      BIT_1
#define bSBK      BIT_0

// Registrador SCIC3
#define bR8       BIT_7
#define bT8       BIT_6
#define bTXDIR    BIT_5
#define bTXINV    BIT_4
#define bORIE     BIT_3
#define bNEIE     BIT_2
#define bFEIE     BIT_1
#define bPEIE     BIT_0

// Registrador SCIS1
#define bTDRE     BIT_7
#define bTC       BIT_6
#define bRDRF     BIT_5
#define bIDLE     BIT_4
#define bOR       BIT_3
#define bNF       BIT_2
#define bFE       BIT_1
#define bPF       BIT_0

// Registrador SCIS2
#define bBRK13    BIT_2
#define bRAF      BIT_0

// Registrador SPIC1
#define bSPIE     BIT_7
#define bSPE      BIT_6
#define bSPTIE    BIT_5
#define bMSTR     BIT_4
#define bCPOL     BIT_3
#define bCPHA     BIT_2
#define bSSOE     BIT_1
#define bLSBFE    BIT_0

// Registrador SPIC2
#define bMODFEN   BIT_4
#define bBIDIROE  BIT_3
#define bSPISWAI  BIT_1
#define bSPC0     BIT_0

// Registrador SPIS
#define bSPRF    BIT_7
#define bSPTEF   BIT_5
#define bMODF    BIT_4

// Registrador SPIBR
#define bSPPR2      BIT_6
#define bSPPR1      BIT_5
#define bSPPR0      BIT_4
#define bSPR2       BIT_2
#define bSPR1       BIT_1
#define bSPR0       BIT_0
#define SPI_PRE1    0
#define SPI_PRE2    bSPPR0
#define SPI_PRE3    bSPPR1
#define SPI_PRE4    bSPPR1+bSPPR0
#define SPI_PRE5    bSPPR2
#define SPI_PRE6    bSPPR2+bSPPR0
#define SPI_PRE7    bSPPR2+bSPPR1
#define SPI_PRE8    bSPPR2+bSPPR1+bSPPR0
#define SPI_DIV2    0
#define SPI_DIV4    bSPR0
#define SPI_DIV8    bSPR1
#define SPI_DIV16   bSPR1+bSPR0
#define SPI_DIV32   bSPR2
#define SPI_DIV64   bSPR2+bSPR0
#define SPI_DIV128  bSPR2+bSPR1
#define SPI_DIV256  bSPR2+bSPR1+bSPR0

// Registrador IICC
#define bIICEN    BIT_7
#define bIICIE    BIT_6
#define bMST      BIT_5
#define bTX       BIT_4
#define bTXAK     BIT_3
#define bRSTA     BIT_2

// Registrador IICS
#define bTCF      BIT_7
#define bIAAS     BIT_6
#define bBUSY     BIT_5
#define bARBL     BIT_4
#define bSRW      BIT_2
#define bIICIF    BIT_1
#define bRXAK     BIT_0

// Registrador IICF
#define I2C_M1    0
#define I2C_M2    BIT_6
#define I2C_M4    BIT_7

// Registrador FCDIV
#define bDIVLD    BIT_7
#define bPRDIV8   BIT_6

// Registradores FOPT e NVOPT
#define bKEYEN    BIT_7
#define bFNORED   BIT_6
#define bSEC01    BIT_1
#define bSEC00    BIT_0
#define MEM_SECURE  0
#define MEM_UNSECURE bSEC01

// Registrador FCNFG
#define bKEYACC   BIT_5

// Registradores FPROT e NVPROT
#define bFPOEN    BIT_7
#define bFPDIS    BIT_6
#define bFPS2     BIT_5
#define bFPS1     BIT_4
#define bFPS0     BIT_3
#define bFPDIS0   BIT_0

// Registrador FSTAT
#define bFCBEF    BIT_7
#define bFCCF     BIT_6
#define bFPVIOL   BIT_5
#define bFACCERR  BIT_4
#define bFBLANK   BIT_2

// Registrador FCMD
#define CMD_BLANK     0x05
#define CMD_BYTEPROG  0x20
#define CMD_BURSTPROG 0x25
#define CMD_PAGEERASE 0x40
#define CMD_MASSERASE 0x41