REG= { SYS_SYS_PDID=1073741824, SYS_SYS_RSTSTS=1073741828, SYS_SYS_IPRST0=1073741832, SYS_SYS_IPRST1=1073741836, SYS_SYS_IPRST2=1073741840, SYS_SYS_BODCTL=1073741848, SYS_SYS_PORCTL=1073741860, SYS_SYS_GPA_MFPL=1073741872, SYS_SYS_GPA_MFPH=1073741876, SYS_SYS_GPB_MFPL=1073741880, SYS_SYS_GPB_MFPH=1073741884, SYS_SYS_GPC_MFPL=1073741888, SYS_SYS_GPC_MFPH=1073741892, SYS_SYS_GPD_MFPL=1073741896, SYS_SYS_GPD_MFPH=1073741900, SYS_SYS_GPE_MFPL=1073741904, SYS_SYS_GPE_MFPH=1073741908, SYS_SYS_GPF_MFPL=1073741912, SYS_SYS_GPF_MFPH=1073741916, SYS_SYS_GPG_MFPL=1073741920, SYS_SYS_GPG_MFPH=1073741924, SYS_SYS_GPH_MFPL=1073741928, SYS_SYS_GPH_MFPH=1073741932, SYS_SYS_LPLDOCTL=1073741944, SYS_SYS_MODCTL=1073742016, SYS_SYS_SRAM_BISTCTL=1073742032, SYS_SYS_SRAM_BISTSTS=1073742036, SYS_SYS_HIRCTRIMCTL=1073742064, SYS_SYS_HIRCTRIMIEN=1073742068, SYS_SYS_HIRCTRIMSTS=1073742072, SYS_SYS_REGLCTL=1073742080, SYS_SYS_PORDISAN=1073742316, SCS_SYST_CTRL=3758153744, SCS_SYST_LOAD=3758153748, SCS_SYST_VAL=3758153752, SCS_ICSR=3758157060, SCS_VTOR=3758157064, SCS_AIRCR=3758157068, SCS_SCR=3758157072, SCS_SHPR1=3758157080, SCS_SHPR2=3758157084, SCS_SHPR3=3758157088, NVIC_NVIC_ISER0=3758153984, NVIC_NVIC_ICER0=3758154112, NVIC_NVIC_ISPR0=3758154240, NVIC_NVIC_ICPR0=3758154368, NVIC_NVIC_IABR0=3758154496, NMI_NMIEN=1073742592, NMI_NMISTS=1073742596, CLK_CLK_PWRCTL=1073742336, CLK_CLK_AHBCLK=1073742340, CLK_CLK_APBCLK0=1073742344, CLK_CLK_APBCLK1=1073742348, CLK_CLK_CLKSEL0=1073742352, CLK_CLK_CLKSEL1=1073742356, CLK_CLK_CLKSEL2=1073742360, CLK_CLK_CLKSEL3=1073742364, CLK_CLK_CLKDIV0=1073742368, CLK_CLK_CLKDIV4=1073742384, CLK_CLK_PCLKDIV=1073742388, CLK_CLK_PLLCTL=1073742400, CLK_CLK_STATUS=1073742416, CLK_CLK_CLKOCTL=1073742432, CLK_CLK_CLKDCTL=1073742448, CLK_CLK_CLKDSTS=1073742452, CLK_CLK_CDUPB=1073742456, CLK_CLK_CDLOWB=1073742460, CLK_CLK_LDOCTL=1073742464, CLK_CLK_HXTFSEL=1073742516, FMC_FMC_ISPCTL=1073790976, FMC_FMC_ISPADDR=1073790980, FMC_FMC_ISPDAT=1073790984, FMC_FMC_ISPCMD=1073790988, FMC_FMC_ISPTRG=1073790992, FMC_FMC_DFBA=1073790996, FMC_FMC_FTCTL=1073791000, FMC_FMC_ISPSTS=1073791040, GPIO_PA_MODE=1073758208, GPIO_PA_DINOFF=1073758212, GPIO_PA_DOUT=1073758216, GPIO_PA_DATMSK=1073758220, GPIO_PA_PIN=1073758224, GPIO_PA_DBEN=1073758228, GPIO_PA_INTTYPE=1073758232, GPIO_PA_INTEN=1073758236, GPIO_PA_INTSRC=1073758240, GPIO_PB_MODE=1073758272, GPIO_PB_DINOFF=1073758276, GPIO_PB_DOUT=1073758280, GPIO_PB_DATMSK=1073758284, GPIO_PB_PIN=1073758288, GPIO_PB_DBEN=1073758292, GPIO_PB_INTTYPE=1073758296, GPIO_PB_INTEN=1073758300, GPIO_PB_INTSRC=1073758304, GPIO_PC_MODE=1073758336, GPIO_PC_DINOFF=1073758340, GPIO_PC_DOUT=1073758344, GPIO_PC_DATMSK=1073758348, GPIO_PC_PIN=1073758352, GPIO_PC_DBEN=1073758356, GPIO_PC_INTTYPE=1073758360, GPIO_PC_INTEN=1073758364, GPIO_PC_INTSRC=1073758368, GPIO_PD_MODE=1073758400, GPIO_PD_DINOFF=1073758404, GPIO_PD_DOUT=1073758408, GPIO_PD_DATMSK=1073758412, GPIO_PD_PIN=1073758416, GPIO_PD_DBEN=1073758420, GPIO_PD_INTTYPE=1073758424, GPIO_PD_INTEN=1073758428, GPIO_PD_INTSRC=1073758432, GPIO_PE_MODE=1073758464, GPIO_PE_DINOFF=1073758468, GPIO_PE_DOUT=1073758472, GPIO_PE_DATMSK=1073758476, GPIO_PE_PIN=1073758480, GPIO_PE_DBEN=1073758484, GPIO_PE_INTTYPE=1073758488, GPIO_PE_INTEN=1073758492, GPIO_PE_INTSRC=1073758496, GPIO_PF_MODE=1073758528, GPIO_PF_DINOFF=1073758532, GPIO_PF_DOUT=1073758536, GPIO_PF_DATMSK=1073758540, GPIO_PF_PIN=1073758544, GPIO_PF_DBEN=1073758548, GPIO_PF_INTTYPE=1073758552, GPIO_PF_INTEN=1073758556, GPIO_PF_INTSRC=1073758560, GPIO_PG_MODE=1073758592, GPIO_PG_DINOFF=1073758596, GPIO_PG_DOUT=1073758600, GPIO_PG_DATMSK=1073758604, GPIO_PG_PIN=1073758608, GPIO_PG_DBEN=1073758612, GPIO_PG_INTTYPE=1073758616, GPIO_PG_INTEN=1073758620, GPIO_PG_INTSRC=1073758624, GPIO_PH_MODE=1073758656, GPIO_PH_DINOFF=1073758660, GPIO_PH_DOUT=1073758664, GPIO_PH_DATMSK=1073758668, GPIO_PH_PIN=1073758672, GPIO_PH_DBEN=1073758676, GPIO_PH_INTTYPE=1073758680, GPIO_PH_INTEN=1073758684, GPIO_PH_INTSRC=1073758688, GPIO_GPIO_DBCTL=1073759296, PDMA_PDMA_DSCT0_CTL=1073774592, PDMA_PDMA_DSCT1_CTL=1073774608, PDMA_PDMA_DSCT2_CTL=1073774624, PDMA_PDMA_DSCT3_CTL=1073774640, PDMA_PDMA_DSCT4_CTL=1073774656, PDMA_PDMA_DSCT0_SA=1073774596, PDMA_PDMA_DSCT1_SA=1073774612, PDMA_PDMA_DSCT2_SA=1073774628, PDMA_PDMA_DSCT3_SA=1073774644, PDMA_PDMA_DSCT4_SA=1073774660, PDMA_PDMA_DSCT0_DA=1073774600, PDMA_PDMA_DSCT1_DA=1073774616, PDMA_PDMA_DSCT2_DA=1073774632, PDMA_PDMA_DSCT3_DA=1073774648, PDMA_PDMA_DSCT4_DA=1073774664, PDMA_PDMA_DSCT0_NEXT=1073774604, PDMA_PDMA_DSCT1_NEXT=1073774620, PDMA_PDMA_DSCT2_NEXT=1073774636, PDMA_PDMA_DSCT3_NEXT=1073774652, PDMA_PDMA_DSCT4_NEXT=1073774668, PDMA_PDMA_CURSCAT0=1073774848, PDMA_PDMA_CURSCAT1=1073774852, PDMA_PDMA_CURSCAT2=1073774856, PDMA_PDMA_CURSCAT3=1073774860, PDMA_PDMA_CURSCAT4=1073774864, PDMA_PDMA_CHCTL=1073775616, PDMA_PDMA_PAUSE=1073775620, PDMA_PDMA_SWREQ=1073775624, PDMA_PDMA_TRGSTS=1073775628, PDMA_PDMA_PRISET=1073775632, PDMA_PDMA_PRICLR=1073775636, PDMA_PDMA_INTEN=1073775640, PDMA_PDMA_INTSTS=1073775644, PDMA_PDMA_ABTSTS=1073775648, PDMA_PDMA_TDSTS=1073775652, PDMA_PDMA_ALIGN=1073775656, PDMA_PDMA_TACTSTS=1073775660, PDMA_PDMA_TOUTPSC=1073775664, PDMA_PDMA_TOUTEN=1073775668, PDMA_PDMA_TOUTIEN=1073775672, PDMA_PDMA_SCATBA=1073775676, PDMA_PDMA_TOC0_1=1073775680, PDMA_PDMA_CHRST=1073775712, PDMA_PDMA_REQSEL0_3=1073775744, PDMA_PDMA_REQSEL4=1073775748, TMR01_TIMER0_CTL=1074069504, TMR01_TIMER0_CMP=1074069508, TMR01_TIMER0_INTSTS=1074069512, TMR01_TIMER0_CNT=1074069516, TMR01_TIMER0_CAP=1074069520, TMR01_TIMER0_EXTCTL=1074069524, TMR01_TIMER0_EINTSTS=1074069528, TMR01_TIMER1_CTL=1074069536, TMR01_TIMER1_CMP=1074069540, TMR01_TIMER1_INTSTS=1074069544, TMR01_TIMER1_CNT=1074069548, TMR01_TIMER1_CAP=1074069552, TMR01_TIMER1_EXTCTL=1074069556, TMR01_TIMER1_EINTSTS=1074069560, TMR23_TIMER2_CTL=1074073600, TMR23_TIMER2_CMP=1074073604, TMR23_TIMER2_INTSTS=1074073608, TMR23_TIMER2_CNT=1074073612, TMR23_TIMER2_CAP=1074073616, TMR23_TIMER2_EXTCTL=1074073620, TMR23_TIMER2_EINTSTS=1074073624, TMR23_TIMER3_CTL=1074073632, TMR23_TIMER3_CMP=1074073636, TMR23_TIMER3_INTSTS=1074073640, TMR23_TIMER3_CNT=1074073644, TMR23_TIMER3_CAP=1074073648, TMR23_TIMER3_EXTCTL=1074073652, TMR23_TIMER3_EINTSTS=1074073656, WDT_WDT_CTL=1074003968, WDT_WDT_ALTCTL=1074003972, WDT_WDT_RSTCNT=1074003976, WWDT_WWDT_RLDCNT=1074004224, WWDT_WWDT_CTL=1074004228, WWDT_WWDT_STATUS=1074004232, WWDT_WWDT_CNT=1074004236, BPWM0_BPWM_CTL0=1074110464, BPWM0_BPWM_CTL1=1074110468, BPWM0_BPWM_CLKSRC=1074110480, BPWM0_BPWM_CLKPSC=1074110484, BPWM0_BPWM_CNTEN=1074110496, BPWM0_BPWM_CNTCLR=1074110500, BPWM0_BPWM_PERIOD=1074110512, BPWM0_BPWM_CMPDAT0=1074110544, BPWM0_BPWM_CMPDAT1=1074110548, BPWM0_BPWM_CMPDAT2=1074110552, BPWM0_BPWM_CMPDAT3=1074110556, BPWM0_BPWM_CMPDAT4=1074110560, BPWM0_BPWM_CMPDAT5=1074110564, BPWM0_BPWM_CNT=1074110608, BPWM0_BPWM_WGCTL0=1074110640, BPWM0_BPWM_WGCTL1=1074110644, BPWM0_BPWM_MSKEN=1074110648, BPWM0_BPWM_MSK=1074110652, BPWM0_BPWM_POLCTL=1074110676, BPWM0_BPWM_POEN=1074110680, BPWM0_BPWM_INTEN=1074110688, BPWM0_BPWM_INTSTS=1074110696, BPWM0_BPWM_EADCTS0=1074110712, BPWM0_BPWM_EADCTS1=1074110716, BPWM0_BPWM_SSCTL=1074110736, BPWM0_BPWM_SSTRG=1074110740, BPWM0_BPWM_STATUS=1074110752, BPWM0_BPWM_CAPINEN=1074110976, BPWM0_BPWM_CAPCTL=1074110980, BPWM0_BPWM_CAPSTS=1074110984, BPWM0_BPWM_RCAPDAT0=1074110988, BPWM0_BPWM_FCAPDAT0=1074110992, BPWM0_BPWM_RCAPDAT1=1074110996, BPWM0_BPWM_FCAPDAT1=1074111000, BPWM0_BPWM_RCAPDAT2=1074111004, BPWM0_BPWM_FCAPDAT2=1074111008, BPWM0_BPWM_RCAPDAT3=1074111012, BPWM0_BPWM_FCAPDAT3=1074111016, BPWM0_BPWM_RCAPDAT4=1074111020, BPWM0_BPWM_FCAPDAT4=1074111024, BPWM0_BPWM_RCAPDAT5=1074111028, BPWM0_BPWM_FCAPDAT5=1074111032, BPWM0_BPWM_CAPIEN=1074111056, BPWM0_BPWM_CAPIF=1074111060, BPWM0_BPWM_SELFTEST=1074111232, BPWM0_BPWM_PBUF=1074111236, BPWM0_BPWM_CMPBUF0=1074111260, BPWM0_BPWM_CMPBUF1=1074111264, BPWM0_BPWM_CMPBUF2=1074111268, BPWM0_BPWM_CMPBUF3=1074111272, BPWM0_BPWM_CMPBUF4=1074111276, BPWM0_BPWM_CMPBUF5=1074111280, BPWM1_BPWM_CTL0=1074114560, BPWM1_BPWM_CTL1=1074114564, BPWM1_BPWM_CLKSRC=1074114576, BPWM1_BPWM_CLKPSC=1074114580, BPWM1_BPWM_CNTEN=1074114592, BPWM1_BPWM_CNTCLR=1074114596, BPWM1_BPWM_PERIOD=1074114608, BPWM1_BPWM_CMPDAT0=1074114640, BPWM1_BPWM_CMPDAT1=1074114644, BPWM1_BPWM_CMPDAT2=1074114648, BPWM1_BPWM_CMPDAT3=1074114652, BPWM1_BPWM_CMPDAT4=1074114656, BPWM1_BPWM_CMPDAT5=1074114660, BPWM1_BPWM_CNT=1074114704, BPWM1_BPWM_WGCTL0=1074114736, BPWM1_BPWM_WGCTL1=1074114740, BPWM1_BPWM_MSKEN=1074114744, BPWM1_BPWM_MSK=1074114748, BPWM1_BPWM_POLCTL=1074114772, BPWM1_BPWM_POEN=1074114776, BPWM1_BPWM_INTEN=1074114784, BPWM1_BPWM_INTSTS=1074114792, BPWM1_BPWM_EADCTS0=1074114808, BPWM1_BPWM_EADCTS1=1074114812, BPWM1_BPWM_SSCTL=1074114832, BPWM1_BPWM_SSTRG=1074114836, BPWM1_BPWM_STATUS=1074114848, BPWM1_BPWM_CAPINEN=1074115072, BPWM1_BPWM_CAPCTL=1074115076, BPWM1_BPWM_CAPSTS=1074115080, BPWM1_BPWM_RCAPDAT0=1074115084, BPWM1_BPWM_FCAPDAT0=1074115088, BPWM1_BPWM_RCAPDAT1=1074115092, BPWM1_BPWM_FCAPDAT1=1074115096, BPWM1_BPWM_RCAPDAT2=1074115100, BPWM1_BPWM_FCAPDAT2=1074115104, BPWM1_BPWM_RCAPDAT3=1074115108, BPWM1_BPWM_FCAPDAT3=1074115112, BPWM1_BPWM_RCAPDAT4=1074115116, BPWM1_BPWM_FCAPDAT4=1074115120, BPWM1_BPWM_RCAPDAT5=1074115124, BPWM1_BPWM_FCAPDAT5=1074115128, BPWM1_BPWM_CAPIEN=1074115152, BPWM1_BPWM_CAPIF=1074115156, BPWM1_BPWM_SELFTEST=1074115328, BPWM1_BPWM_PBUF=1074115332, BPWM1_BPWM_CMPBUF0=1074115356, BPWM1_BPWM_CMPBUF1=1074115360, BPWM1_BPWM_CMPBUF2=1074115364, BPWM1_BPWM_CMPBUF3=1074115368, BPWM1_BPWM_CMPBUF4=1074115372, BPWM1_BPWM_CMPBUF5=1074115376, PWM0_PWM_CTL0=1074102272, PWM0_PWM_CTL1=1074102276, PWM0_PWM_CLKSRC=1074102288, PWM0_PWM_CLKPSC0_1=1074102292, PWM0_PWM_CLKPSC2_3=1074102296, PWM0_PWM_CLKPSC4_5=1074102300, PWM0_PWM_CNTEN=1074102304, PWM0_PWM_CNTCLR=1074102308, PWM0_PWM_PERIOD0=1074102320, PWM0_PWM_PERIOD2=1074102328, PWM0_PWM_PERIOD4=1074102336, PWM0_PWM_CMPDAT0=1074102352, PWM0_PWM_CMPDAT1=1074102356, PWM0_PWM_CMPDAT2=1074102360, PWM0_PWM_CMPDAT3=1074102364, PWM0_PWM_CMPDAT4=1074102368, PWM0_PWM_CMPDAT5=1074102372, PWM0_PWM_DTCTL0_1=1074102384, PWM0_PWM_DTCTL2_3=1074102388, PWM0_PWM_DTCTL4_5=1074102392, PWM0_PWM_CNT0=1074102416, PWM0_PWM_CNT2=1074102424, PWM0_PWM_CNT4=1074102432, PWM0_PWM_WGCTL0=1074102448, PWM0_PWM_WGCTL1=1074102452, PWM0_PWM_MSKEN=1074102456, PWM0_PWM_MSK=1074102460, PWM0_PWM_BNF=1074102464, PWM0_PWM_FAILBRK=1074102468, PWM0_PWM_BRKCTL0_1=1074102472, PWM0_PWM_BRKCTL2_3=1074102476, PWM0_PWM_BRKCTL4_5=1074102480, PWM0_PWM_POLCTL=1074102484, PWM0_PWM_POEN=1074102488, PWM0_PWM_SWBRK=1074102492, PWM0_PWM_INTEN0=1074102496, PWM0_PWM_INTEN1=1074102500, PWM0_PWM_INTSTS0=1074102504, PWM0_PWM_INTSTS1=1074102508, PWM0_PWM_ADCTS0=1074102520, PWM0_PWM_ADCTS1=1074102524, PWM0_PWM_SSCTL=1074102544, PWM0_PWM_SSTRG=1074102548, PWM0_PWM_STATUS=1074102560, PWM0_PWM_CAPINEN=1074102784, PWM0_PWM_CAPCTL=1074102788, PWM0_PWM_CAPSTS=1074102792, PWM0_PWM_RCAPDAT0=1074102796, PWM0_PWM_FCAPDAT0=1074102800, PWM0_PWM_RCAPDAT1=1074102804, PWM0_PWM_FCAPDAT1=1074102808, PWM0_PWM_RCAPDAT2=1074102812, PWM0_PWM_FCAPDAT2=1074102816, PWM0_PWM_RCAPDAT3=1074102820, PWM0_PWM_FCAPDAT3=1074102824, PWM0_PWM_RCAPDAT4=1074102828, PWM0_PWM_FCAPDAT4=1074102832, PWM0_PWM_RCAPDAT5=1074102836, PWM0_PWM_FCAPDAT5=1074102840, PWM0_PWM_PDMACTL=1074102844, PWM0_PWM_PDMACAP0_1=1074102848, PWM0_PWM_PDMACAP2_3=1074102852, PWM0_PWM_PDMACAP4_5=1074102856, PWM0_PWM_CAPIEN=1074102864, PWM0_PWM_CAPIF=1074102868, PWM0_PWM_PBUF0=1074103044, PWM0_PWM_PBUF2=1074103052, PWM0_PWM_PBUF4=1074103060, PWM0_PWM_CMPBUF0=1074103068, PWM0_PWM_CMPBUF1=1074103072, PWM0_PWM_CMPBUF2=1074103076, PWM0_PWM_CMPBUF3=1074103080, PWM0_PWM_CMPBUF4=1074103084, PWM0_PWM_CMPBUF5=1074103088, PWM1_PWM_CTL0=1074106368, PWM1_PWM_CTL1=1074106372, PWM1_PWM_CLKSRC=1074106384, PWM1_PWM_CLKPSC0_1=1074106388, PWM1_PWM_CLKPSC2_3=1074106392, PWM1_PWM_CLKPSC4_5=1074106396, PWM1_PWM_CNTEN=1074106400, PWM1_PWM_CNTCLR=1074106404, PWM1_PWM_PERIOD0=1074106416, PWM1_PWM_PERIOD2=1074106424, PWM1_PWM_PERIOD4=1074106432, PWM1_PWM_CMPDAT0=1074106448, PWM1_PWM_CMPDAT1=1074106452, PWM1_PWM_CMPDAT2=1074106456, PWM1_PWM_CMPDAT3=1074106460, PWM1_PWM_CMPDAT4=1074106464, PWM1_PWM_CMPDAT5=1074106468, PWM1_PWM_DTCTL0_1=1074106480, PWM1_PWM_DTCTL2_3=1074106484, PWM1_PWM_DTCTL4_5=1074106488, PWM1_PWM_CNT0=1074106512, PWM1_PWM_CNT2=1074106520, PWM1_PWM_CNT4=1074106528, PWM1_PWM_WGCTL0=1074106544, PWM1_PWM_WGCTL1=1074106548, PWM1_PWM_MSKEN=1074106552, PWM1_PWM_MSK=1074106556, PWM1_PWM_BNF=1074106560, PWM1_PWM_FAILBRK=1074106564, PWM1_PWM_BRKCTL0_1=1074106568, PWM1_PWM_BRKCTL2_3=1074106572, PWM1_PWM_BRKCTL4_5=1074106576, PWM1_PWM_POLCTL=1074106580, PWM1_PWM_POEN=1074106584, PWM1_PWM_SWBRK=1074106588, PWM1_PWM_INTEN0=1074106592, PWM1_PWM_INTEN1=1074106596, PWM1_PWM_INTSTS0=1074106600, PWM1_PWM_INTSTS1=1074106604, PWM1_PWM_ADCTS0=1074106616, PWM1_PWM_ADCTS1=1074106620, PWM1_PWM_SSCTL=1074106640, PWM1_PWM_SSTRG=1074106644, PWM1_PWM_STATUS=1074106656, PWM1_PWM_CAPINEN=1074106880, PWM1_PWM_CAPCTL=1074106884, PWM1_PWM_CAPSTS=1074106888, PWM1_PWM_RCAPDAT0=1074106892, PWM1_PWM_FCAPDAT0=1074106896, PWM1_PWM_RCAPDAT1=1074106900, PWM1_PWM_FCAPDAT1=1074106904, PWM1_PWM_RCAPDAT2=1074106908, PWM1_PWM_FCAPDAT2=1074106912, PWM1_PWM_RCAPDAT3=1074106916, PWM1_PWM_FCAPDAT3=1074106920, PWM1_PWM_RCAPDAT4=1074106924, PWM1_PWM_FCAPDAT4=1074106928, PWM1_PWM_RCAPDAT5=1074106932, PWM1_PWM_FCAPDAT5=1074106936, PWM1_PWM_PDMACTL=1074106940, PWM1_PWM_PDMACAP0_1=1074106944, PWM1_PWM_PDMACAP2_3=1074106948, PWM1_PWM_PDMACAP4_5=1074106952, PWM1_PWM_CAPIEN=1074106960, PWM1_PWM_CAPIF=1074106964, PWM1_PWM_PBUF0=1074107140, PWM1_PWM_PBUF2=1074107148, PWM1_PWM_PBUF4=1074107156, PWM1_PWM_CMPBUF0=1074107164, PWM1_PWM_CMPBUF1=1074107168, PWM1_PWM_CMPBUF2=1074107172, PWM1_PWM_CMPBUF3=1074107176, PWM1_PWM_CMPBUF4=1074107180, PWM1_PWM_CMPBUF5=1074107184, UART0_UART_DAT=1074200576, UART0_UART_INTEN=1074200580, UART0_UART_FIFO=1074200584, UART0_UART_LINE=1074200588, UART0_UART_MODEM=1074200592, UART0_UART_MODEMSTS=1074200596, UART0_UART_FIFOSTS=1074200600, UART0_UART_INTSTS=1074200604, UART0_UART_TOUT=1074200608, UART0_UART_BAUD=1074200612, UART0_UART_IRDA=1074200616, UART0_UART_ALTCTL=1074200620, UART0_UART_FUNCSEL=1074200624, UART0_UART_BRCOMP=1074200636, UART0_UART_WKCTL=1074200640, UART0_UART_WKSTS=1074200644, UART0_UART_DWKCOMP=1074200648, UART1_UART_DAT=1074204672, UART1_UART_INTEN=1074204676, UART1_UART_FIFO=1074204680, UART1_UART_LINE=1074204684, UART1_UART_MODEM=1074204688, UART1_UART_MODEMSTS=1074204692, UART1_UART_FIFOSTS=1074204696, UART1_UART_INTSTS=1074204700, UART1_UART_TOUT=1074204704, UART1_UART_BAUD=1074204708, UART1_UART_IRDA=1074204712, UART1_UART_ALTCTL=1074204716, UART1_UART_FUNCSEL=1074204720, UART1_UART_BRCOMP=1074204732, UART1_UART_WKCTL=1074204736, UART1_UART_WKSTS=1074204740, UART1_UART_DWKCOMP=1074204744, UART2_UART_DAT=1074208768, UART2_UART_INTEN=1074208772, UART2_UART_FIFO=1074208776, UART2_UART_LINE=1074208780, UART2_UART_MODEM=1074208784, UART2_UART_MODEMSTS=1074208788, UART2_UART_FIFOSTS=1074208792, UART2_UART_INTSTS=1074208796, UART2_UART_TOUT=1074208800, UART2_UART_BAUD=1074208804, UART2_UART_IRDA=1074208808, UART2_UART_ALTCTL=1074208812, UART2_UART_FUNCSEL=1074208816, UART2_UART_BRCOMP=1074208828, UART2_UART_WKCTL=1074208832, UART2_UART_WKSTS=1074208836, UART2_UART_DWKCOMP=1074208840, UART3_UART_DAT=1074212864, UART3_UART_INTEN=1074212868, UART3_UART_FIFO=1074212872, UART3_UART_LINE=1074212876, UART3_UART_MODEM=1074212880, UART3_UART_MODEMSTS=1074212884, UART3_UART_FIFOSTS=1074212888, UART3_UART_INTSTS=1074212892, UART3_UART_TOUT=1074212896, UART3_UART_BAUD=1074212900, UART3_UART_IRDA=1074212904, UART3_UART_ALTCTL=1074212908, UART3_UART_FUNCSEL=1074212912, UART3_UART_BRCOMP=1074212924, UART3_UART_WKCTL=1074212928, UART3_UART_WKSTS=1074212932, UART3_UART_DWKCOMP=1074212936, UART4_UART_DAT=1074216960, UART4_UART_INTEN=1074216964, UART4_UART_FIFO=1074216968, UART4_UART_LINE=1074216972, UART4_UART_MODEM=1074216976, UART4_UART_MODEMSTS=1074216980, UART4_UART_FIFOSTS=1074216984, UART4_UART_INTSTS=1074216988, UART4_UART_TOUT=1074216992, UART4_UART_BAUD=1074216996, UART4_UART_IRDA=1074217000, UART4_UART_ALTCTL=1074217004, UART4_UART_FUNCSEL=1074217008, UART4_UART_BRCOMP=1074217020, UART4_UART_WKCTL=1074217024, UART4_UART_WKSTS=1074217028, UART4_UART_DWKCOMP=1074217032, UART5_UART_DAT=1074221056, UART5_UART_INTEN=1074221060, UART5_UART_FIFO=1074221064, UART5_UART_LINE=1074221068, UART5_UART_MODEM=1074221072, UART5_UART_MODEMSTS=1074221076, UART5_UART_FIFOSTS=1074221080, UART5_UART_INTSTS=1074221084, UART5_UART_TOUT=1074221088, UART5_UART_BAUD=1074221092, UART5_UART_IRDA=1074221096, UART5_UART_ALTCTL=1074221100, UART5_UART_FUNCSEL=1074221104, UART5_UART_BRCOMP=1074221116, UART5_UART_WKCTL=1074221120, UART5_UART_WKSTS=1074221124, UART5_UART_DWKCOMP=1074221128, UART6_UART_DAT=1074225152, UART6_UART_INTEN=1074225156, UART6_UART_FIFO=1074225160, UART6_UART_LINE=1074225164, UART6_UART_MODEM=1074225168, UART6_UART_MODEMSTS=1074225172, UART6_UART_FIFOSTS=1074225176, UART6_UART_INTSTS=1074225180, UART6_UART_TOUT=1074225184, UART6_UART_BAUD=1074225188, UART6_UART_IRDA=1074225192, UART6_UART_ALTCTL=1074225196, UART6_UART_FUNCSEL=1074225200, UART6_UART_BRCOMP=1074225212, UART6_UART_WKCTL=1074225216, UART6_UART_WKSTS=1074225220, UART6_UART_DWKCOMP=1074225224, UART7_UART_DAT=1074229248, UART7_UART_INTEN=1074229252, UART7_UART_FIFO=1074229256, UART7_UART_LINE=1074229260, UART7_UART_MODEM=1074229264, UART7_UART_MODEMSTS=1074229268, UART7_UART_FIFOSTS=1074229272, UART7_UART_INTSTS=1074229276, UART7_UART_TOUT=1074229280, UART7_UART_BAUD=1074229284, UART7_UART_IRDA=1074229288, UART7_UART_ALTCTL=1074229292, UART7_UART_FUNCSEL=1074229296, UART7_UART_BRCOMP=1074229308, UART7_UART_WKCTL=1074229312, UART7_UART_WKSTS=1074229316, UART7_UART_DWKCOMP=1074229320, SPI0_SPIx_CTL=1074139136, SPI0_SPIx_CLKDIV=1074139140, SPI0_SPIx_SSCTL=1074139144, SPI0_SPIx_PDMACTL=1074139148, SPI0_SPIx_FIFOCTL=1074139152, SPI0_SPIx_STATUS=1074139156, SPI0_SPIx_TX=1074139168, SPI0_SPIx_RX=1074139184, SPI0_SPIx_I2SCTL=1074139232, SPI0_SPIx_I2SCLK=1074139236, SPI0_SPIx_I2SSTS=1074139240, QSPI0_SPIx_CTL=1074135040, QSPI0_SPIx_CLKDIV=1074135044, QSPI0_SPIx_SSCTL=1074135048, QSPI0_SPIx_PDMACTL=1074135052, QSPI0_SPIx_FIFOCTL=1074135056, QSPI0_SPIx_STATUS=1074135060, QSPI0_SPIx_TX=1074135072, QSPI0_SPIx_RX=1074135088, I2C0_I2C_CTL0=1074266112, I2C0_I2C_ADDR0=1074266116, I2C0_I2C_DAT=1074266120, I2C0_I2C_STATUS0=1074266124, I2C0_I2C_CLKDIV=1074266128, I2C0_I2C_TOCTL=1074266132, I2C0_I2C_ADDR1=1074266136, I2C0_I2C_ADDR2=1074266140, I2C0_I2C_ADDR3=1074266144, I2C0_I2C_ADDRMSK0=1074266148, I2C0_I2C_ADDRMSK1=1074266152, I2C0_I2C_ADDRMSK2=1074266156, I2C0_I2C_ADDRMSK3=1074266160, I2C0_I2C_WKCTL=1074266172, I2C0_I2C_WKSTS=1074266176, I2C0_I2C_CTL1=1074266180, I2C0_I2C_STATUS1=1074266184, I2C0_I2C_TMCTL=1074266188, I2C1_I2C_CTL0=1074270208, I2C1_I2C_ADDR0=1074270212, I2C1_I2C_DAT=1074270216, I2C1_I2C_STATUS0=1074270220, I2C1_I2C_CLKDIV=1074270224, I2C1_I2C_TOCTL=1074270228, I2C1_I2C_ADDR1=1074270232, I2C1_I2C_ADDR2=1074270236, I2C1_I2C_ADDR3=1074270240, I2C1_I2C_ADDRMSK0=1074270244, I2C1_I2C_ADDRMSK1=1074270248, I2C1_I2C_ADDRMSK2=1074270252, I2C1_I2C_ADDRMSK3=1074270256, I2C1_I2C_WKCTL=1074270268, I2C1_I2C_WKSTS=1074270272, I2C1_I2C_CTL1=1074270276, I2C1_I2C_STATUS1=1074270280, I2C1_I2C_TMCTL=1074270284, USCI0_USCI_CTL=1074593792, USCI0_USCI_INTEN=1074593796, USCI0_USCI_BRGEN=1074593800, USCI0_USCI_DATIN0=1074593808, USCI0_USCI_CTLIN0=1074593824, USCI0_USCI_CLKIN=1074593832, USCI0_USCI_LINECTL=1074593836, USCI0_USCI_TXDAT=1074593840, USCI0_USCI_RXDAT=1074593844, USCI0_USCI_BUFCTL=1074593848, USCI0_USCI_BUFSTS=1074593852, USCI0_USCI_PDMACTL=1074593856, USCI0_USCI_DEVADDR0=1074593860, USCI0_USCI_DEVADDR1=1074593864, USCI0_USCI_ADDRMSK0=1074593868, USCI0_USCI_ADDRMSK1=1074593872, USCI0_USCI_WKCTL=1074593876, USCI0_USCI_WKSTS=1074593880, USCI0_USCI_PROTCTL=1074593884, USCI0_USCI_PROTIEN=1074593888, USCI0_USCI_PROTSTS=1074593892, USCI0_USCI_IUR=1074593924, USCI0_USCI_TMCTL=1074593932, USCI1_USCI_CTL=1074597888, USCI1_USCI_INTEN=1074597892, USCI1_USCI_BRGEN=1074597896, USCI1_USCI_DATIN0=1074597904, USCI1_USCI_CTLIN0=1074597920, USCI1_USCI_CLKIN=1074597928, USCI1_USCI_LINECTL=1074597932, USCI1_USCI_TXDAT=1074597936, USCI1_USCI_RXDAT=1074597940, USCI1_USCI_BUFCTL=1074597944, USCI1_USCI_BUFSTS=1074597948, USCI1_USCI_PDMACTL=1074597952, USCI1_USCI_DEVADDR0=1074597956, USCI1_USCI_DEVADDR1=1074597960, USCI1_USCI_ADDRMSK0=1074597964, USCI1_USCI_ADDRMSK1=1074597968, USCI1_USCI_WKCTL=1074597972, USCI1_USCI_WKSTS=1074597976, USCI1_USCI_PROTCTL=1074597980, USCI1_USCI_PROTIEN=1074597984, USCI1_USCI_PROTSTS=1074597988, USCI1_USCI_IUR=1074598020, USCI1_USCI_TMCTL=1074598028, EBI_EBI_CTL0=1073807360, EBI_EBI_TCTL0=1073807364, EBI_EBI_CTL1=1073807376, EBI_EBI_TCTL1=1073807380, USBD_USBD_INTEN=1074528256, USBD_USBD_INTSTS=1074528260, USBD_USBD_FADDR=1074528264, USBD_USBD_EPSTS=1074528268, USBD_USBD_ATTR=1074528272, USBD_USBD_VBUSDET=1074528276, USBD_USBD_STBUFSEG=1074528280, USBD_USBD_EPSTS0=1074528288, USBD_USBD_LPMATTR=1074528392, USBD_USBD_FN=1074528396, USBD_USBD_SE0=1074528400, USBD_USBD_BUFSEG0=1074529536, USBD_USBD_MXPLD0=1074529540, USBD_USBD_CFG0=1074529544, USBD_USBD_CFGP0=1074529548, USBD_USBD_BUFSEG1=1074529552, USBD_USBD_MXPLD1=1074529556, USBD_USBD_CFG1=1074529560, USBD_USBD_CFGP1=1074529564, USBD_USBD_BUFSEG2=1074529568, USBD_USBD_MXPLD2=1074529572, USBD_USBD_CFG2=1074529576, USBD_USBD_CFGP2=1074529580, USBD_USBD_BUFSEG3=1074529584, USBD_USBD_MXPLD3=1074529588, USBD_USBD_CFG3=1074529592, USBD_USBD_CFGP3=1074529596, USBD_USBD_BUFSEG4=1074529600, USBD_USBD_MXPLD4=1074529604, USBD_USBD_CFG4=1074529608, USBD_USBD_CFGP4=1074529612, USBD_USBD_BUFSEG5=1074529616, USBD_USBD_MXPLD5=1074529620, USBD_USBD_CFG5=1074529624, USBD_USBD_CFGP5=1074529628, USBD_USBD_BUFSEG6=1074529632, USBD_USBD_MXPLD6=1074529636, USBD_USBD_CFG6=1074529640, USBD_USBD_CFGP6=1074529644, USBD_USBD_BUFSEG7=1074529648, USBD_USBD_MXPLD7=1074529652, USBD_USBD_CFG7=1074529656, USBD_USBD_CFGP7=1074529660, CRC_CRC_CTL=1073942528, CRC_CRC_DAT=1073942532, CRC_CRC_SEED=1073942536, CRC_CRC_CHECKSUM=1073942540, ADC_ADC_ADDR0=1074016256, ADC_ADC_ADDR1=1074016260, ADC_ADC_ADDR2=1074016264, ADC_ADC_ADDR3=1074016268, ADC_ADC_ADDR4=1074016272, ADC_ADC_ADDR5=1074016276, ADC_ADC_ADDR6=1074016280, ADC_ADC_ADDR7=1074016284, ADC_ADC_ADDR8=1074016288, ADC_ADC_ADDR9=1074016292, ADC_ADC_ADDR10=1074016296, ADC_ADC_ADDR11=1074016300, ADC_ADC_ADDR12=1074016304, ADC_ADC_ADDR13=1074016308, ADC_ADC_ADDR14=1074016312, ADC_ADC_ADDR15=1074016316, ADC_ADC_ADDR29=1074016372, ADC_ADC_ADCR=1074016384, ADC_ADC_ADCHER=1074016388, ADC_ADC_ADCMPR0=1074016392, ADC_ADC_ADCMPR1=1074016396, ADC_ADC_ADSR0=1074016400, ADC_ADC_ADSR1=1074016404, ADC_ADC_ADSR2=1074016408, ADC_ADC_ESMPCTL=1074016416, ADC_ADC_ADPDMA=1074016512, ADC_ADC_ADCALR=1074016640, ADC_ADC_ADCALSTSR=1074016644, ACMP01_ACMP_CTL0=1074024448, ACMP01_ACMP_CTL1=1074024452, ACMP01_ACMP_STATUS=1074024456, ACMP01_ACMP_VREF=1074024460, } g_M031_regs=REG function read_M031_Registers(e,e,e,e) local e=get_chip_info()["series_group"] local o=false local h=true local n=false local r=false local i=false local a=false local t=false local d=true local s=true if e==g_SeriesGroup.M031_256K_AE then o=true n=true i=true a=true t=true elseif e==g_SeriesGroup.M031_512K_AE then o=true n=true r=true i=true a=true t=true elseif e==g_SeriesGroup.M032_64K_AE then h=false i=true a=true t=true d=false s=false end local e={} e["SYS_SYS_GPA_MFPL"], e["SYS_SYS_GPA_MFPH"], e["SYS_SYS_GPB_MFPL"], e["SYS_SYS_GPB_MFPH"], e["SYS_SYS_GPC_MFPL"], e["SYS_SYS_GPC_MFPH"]=ice:ReadMem32(g_M031_regs.SYS_SYS_GPA_MFPL,6) e["SYS_SYS_GPD_MFPL"], e["SYS_SYS_GPD_MFPH"], e["SYS_SYS_GPE_MFPL"], e["SYS_SYS_GPE_MFPH"], e["SYS_SYS_GPF_MFPL"], e["SYS_SYS_GPF_MFPH"]=ice:ReadMem32(g_M031_regs.SYS_SYS_GPD_MFPL,6) if o then e["SYS_SYS_GPG_MFPL"], e["SYS_SYS_GPG_MFPH"], e["SYS_SYS_GPH_MFPL"], e["SYS_SYS_GPH_MFPH"]=ice:ReadMem32(g_M031_regs.SYS_SYS_GPG_MFPL,4) end e["SYS_SYS_HIRCTRIMCTL"]=ice:ReadMemMulti(g_M031_regs.SYS_SYS_HIRCTRIMCTL) e["CLK_CLK_PWRCTL"], e["CLK_CLK_AHBCLK"], e["CLK_CLK_APBCLK0"], e["CLK_CLK_APBCLK1"], e["CLK_CLK_CLKSEL0"], e["CLK_CLK_CLKSEL1"], e["CLK_CLK_CLKSEL2"], e["CLK_CLK_CLKSEL3"], e["CLK_CLK_CLKDIV0"]=ice:ReadMem32(g_M031_regs.CLK_CLK_PWRCTL,9) e["CLK_CLK_CLKDIV4"], e["CLK_CLK_PCLKDIV"], e["CLK_CLK_PLLCTL"], e["CLK_CLK_CLKOCTL"]=ice:ReadMemMulti(g_M031_regs.CLK_CLK_CLKDIV4, g_M031_regs.CLK_CLK_PCLKDIV, g_M031_regs.CLK_CLK_PLLCTL, g_M031_regs.CLK_CLK_CLKOCTL) e["GPIO_PA_MODE"], e["GPIO_PA_DINOFF"], e["GPIO_PA_DOUT"], e["GPIO_PA_DATMSK"], e["GPIO_PA_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PA_MODE,5) e["GPIO_PB_MODE"], e["GPIO_PB_DINOFF"], e["GPIO_PB_DOUT"], e["GPIO_PB_DATMSK"], e["GPIO_PB_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PB_MODE,5) e["GPIO_PC_MODE"], e["GPIO_PC_DINOFF"], e["GPIO_PC_DOUT"], e["GPIO_PC_DATMSK"], e["GPIO_PC_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PC_MODE,5) e["GPIO_PD_MODE"], e["GPIO_PD_DINOFF"], e["GPIO_PD_DOUT"], e["GPIO_PD_DATMSK"], e["GPIO_PD_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PD_MODE,5) e["GPIO_PF_MODE"], e["GPIO_PF_DINOFF"], e["GPIO_PF_DOUT"], e["GPIO_PF_DATMSK"], e["GPIO_PF_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PF_MODE,5) if o then e["GPIO_PE_MODE"], e["GPIO_PE_DINOFF"], e["GPIO_PE_DOUT"], e["GPIO_PE_DATMSK"], e["GPIO_PE_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PE_MODE,5) e["GPIO_PG_MODE"], e["GPIO_PG_DINOFF"], e["GPIO_PG_DOUT"], e["GPIO_PG_DATMSK"], e["GPIO_PG_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PG_MODE,5) e["GPIO_PH_MODE"], e["GPIO_PH_DINOFF"], e["GPIO_PH_DOUT"], e["GPIO_PH_DATMSK"], e["GPIO_PH_PIN"]=ice:ReadMem32(g_M031_regs.GPIO_PH_MODE,5) end if s then e["EBI_EBI_CTL0"], e["EBI_EBI_CTL1"]=ice:ReadMemMulti(g_M031_regs.EBI_EBI_CTL0, g_M031_regs.EBI_EBI_CTL1) end e["UART0_UART_BAUD"]=ice:ReadMemMulti(g_M031_regs.UART0_UART_BAUD) if h then e["UART1_UART_BAUD"], e["UART2_UART_BAUD"]=ice:ReadMemMulti(g_M031_regs.UART1_UART_BAUD, g_M031_regs.UART2_UART_BAUD) end if n then e["UART3_UART_BAUD"], e["UART4_UART_BAUD"], e["UART5_UART_BAUD"]=ice:ReadMemMulti(g_M031_regs.UART3_UART_BAUD, g_M031_regs.UART4_UART_BAUD, g_M031_regs.UART5_UART_BAUD) end if r then e["UART6_UART_BAUD"], e["UART7_UART_BAUD"]=ice:ReadMemMulti(g_M031_regs.UART6_UART_BAUD, g_M031_regs.UART7_UART_BAUD) end e["PWM0_PWM_CLKSRC"], e["PWM1_PWM_CLKSRC"]=ice:ReadMemMulti(g_M031_regs.PWM0_PWM_CLKSRC, g_M031_regs.PWM1_PWM_CLKSRC) e["PWM0_PWM_CLKPSC0_1"], e["PWM0_PWM_CLKPSC2_3"], e["PWM0_PWM_CLKPSC4_5"]=ice:ReadMem32(g_M031_regs.PWM0_PWM_CLKPSC0_1,3) e["PWM1_PWM_CLKPSC0_1"], e["PWM1_PWM_CLKPSC2_3"], e["PWM1_PWM_CLKPSC4_5"]=ice:ReadMem32(g_M031_regs.PWM1_PWM_CLKPSC0_1,3) e["PWM0_PWM_CNTEN"], e["PWM1_PWM_CNTEN"]=ice:ReadMemMulti(g_M031_regs.PWM0_PWM_CNTEN, g_M031_regs.PWM1_PWM_CNTEN) if i then e["BPWM0_BPWM_CLKSRC"], e["BPWM0_BPWM_CLKPSC"], e["BPWM1_BPWM_CLKSRC"], e["BPWM1_BPWM_CLKPSC"]=ice:ReadMemMulti(g_M031_regs.BPWM0_BPWM_CLKSRC, g_M031_regs.BPWM0_BPWM_CLKPSC, g_M031_regs.BPWM1_BPWM_CLKSRC, g_M031_regs.BPWM1_BPWM_CLKPSC) e["BPWM0_BPWM_CNTEN"], e["BPWM1_BPWM_CNTEN"]=ice:ReadMemMulti(g_M031_regs.BPWM0_BPWM_CNTEN, g_M031_regs.BPWM1_BPWM_CNTEN) end e["TMR01_TIMER0_CTL"], e["TMR01_TIMER1_CTL"], e["TMR23_TIMER2_CTL"], e["TMR23_TIMER3_CTL"]=ice:ReadMemMulti(g_M031_regs.TMR01_TIMER0_CTL, g_M031_regs.TMR01_TIMER1_CTL, g_M031_regs.TMR23_TIMER2_CTL, g_M031_regs.TMR23_TIMER3_CTL) if d then e["I2C0_I2C_CTL0"], e["I2C0_I2C_CLKDIV"], e["I2C1_I2C_CTL0"], e["I2C1_I2C_CLKDIV"]=ice:ReadMemMulti(g_M031_regs.I2C0_I2C_CTL0, g_M031_regs.I2C0_I2C_CLKDIV, g_M031_regs.I2C1_I2C_CTL0, g_M031_regs.I2C1_I2C_CLKDIV) end e["SPI0_SPIx_CTL"], e["SPI0_SPIx_CLKDIV"], e["SPI0_SPIx_I2SCTL"], e["SPI0_SPIx_I2SCLK"]=ice:ReadMemMulti(g_M031_regs.SPI0_SPIx_CTL, g_M031_regs.SPI0_SPIx_CLKDIV, g_M031_regs.SPI0_SPIx_I2SCTL, g_M031_regs.SPI0_SPIx_I2SCLK) if a then e["QSPI0_SPIx_CTL"], e["QSPI0_SPIx_CLKDIV"]=ice:ReadMemMulti(g_M031_regs.QSPI0_SPIx_CTL, g_M031_regs.QSPI0_SPIx_CLKDIV) end e["USCI0_USCI_CTL"], e["USCI0_USCI_BRGEN"], e["USCI0_USCI_PROTCTL"]=ice:ReadMemMulti(g_M031_regs.USCI0_USCI_CTL, g_M031_regs.USCI0_USCI_BRGEN, g_M031_regs.USCI0_USCI_PROTCTL) if t then e["USCI1_USCI_CTL"], e["USCI1_USCI_BRGEN"], e["USCI1_USCI_PROTCTL"]=ice:ReadMemMulti(g_M031_regs.USCI1_USCI_CTL, g_M031_regs.USCI1_USCI_BRGEN, g_M031_regs.USCI1_USCI_PROTCTL) end return e end local n={ [0]=kPinDirection_In, [1]=kPinDirection_PushPullOut, [2]=kPinDirection_OpenDrainOut, [3]=kPinDirection_Bi, } local c={ [0]="INPUT", [1]="OUTPUT", [2]="Open-Drain", [3]="Quasi-bidirectional", } function get_mfp_regs(o,a,t) local e if t>=0 and t<=7 then e="L" else e="H" end local e={"SYS_SYS_GP"..a.."_MFP"..e} return reg2str("Multi-Function register",g_M031_regs,o,e) end function get_clk_informnation(t,e) return reg2str("Clock setting registers",g_M031_regs,t,e) end function get_LIRC_clock(a,o) local e local t table.insert(o,"CLK_CLK_PWRCTL") local a=ext.band(a["CLK_CLK_PWRCTL"],8) if a==0 then e=0 t="invalid internal 38.4kHz low speed oscillator clock (see CLK_PWRCTL[3].LIRCEN)" else e=38400 t="internal 38.4kHz low speed oscillator clock" end return e,t end function get_HIRC_clock(a,o) local e local t table.insert(o,"CLK_CLK_PWRCTL") local i=ext.band(a["CLK_CLK_PWRCTL"],4) if i==0 then e=0 t="invalid internal 48MHz high speed oscillator clock (see CLK_PWRCTL[2].HIRCEN)" else table.insert(o,"SYS_SYS_HIRCTRIMCTL") local a=ext.band(a["SYS_SYS_HIRCTRIMCTL"],3) if a==0 then e=48000000 t="internal 48MHz high speed oscillator clock" elseif a==1 then e=48000000 t="internal 48MHz high speed oscillator clock (auto trim)" else e=0 t="invalid HIRC trim frequency selection (see SYS_HIRCTRIMCTL[1:0].FREQSEL)" end end return e,t end function is_LXT_supported() local t=get_chip_info()["series_group"] if t==g_SeriesGroup.M031_16K_32K_AE then local e=get_chip_info()["series"] if e:gsub("^M031.*B.AE","")~=e then return false elseif e:gsub("^M031[FE]C.AE","")~=e then return false end elseif t==g_SeriesGroup.M032_64K_AE then return false end return true end function get_LXT_clock(o,a) local t local e table.insert(a,"CLK_CLK_PWRCTL") local a=ext.band(o["CLK_CLK_PWRCTL"],2) if not is_LXT_supported()then t=0 e="LXT function is not supported" elseif a==0 then t=0 e="invalid external 32.768kHz low speed crystal clock (see CLK_PWRCTL[1].LXTEN)" else t=32768 e="external 32.768kHz low speed crystal clock" end return t,e end function is_HXT_supported() local e=get_chip_info()["series_group"] if e==g_SeriesGroup.M032_64K_AE then return false end return true end function get_HXT_clock(a,o) local t local e table.insert(o,"CLK_CLK_PWRCTL") local a=ext.band(a["CLK_CLK_PWRCTL"],1) if not is_HXT_supported()then t=0 e="HXT function is not supported" elseif a==0 then t=0 e="invalid external 4~32M high speed crystal clock (see CLK_PWRCTL[0].HXTEN)" else t=32000000 e="external 4~32M high speed crystal clock, when external input clock is 32M" end return t,e end function is_PLL_supported() local e=get_chip_info()["series_group"] if e==g_SeriesGroup.M031_16K_32K_AE or e==g_SeriesGroup.M032_64K_AE then return false end return true end function get_PLL_clock(a,o) local e local t table.insert(o,"CLK_CLK_PLLCTL") if ext.band(ext.rshift(a["CLK_CLK_PLLCTL"],16),1)~=0 then e=0 t="invalid PLL clock, PLL is in Power-down mode (see CLK_PLLCTL[16].PD)" else local i=ext.band(ext.rshift(a["CLK_CLK_PLLCTL"],19),1) if i~=0 then e,t=get_HIRC_clock(a,o) e=e/4 else e,t=get_HXT_clock(a,o) end if e~=0 then local o=ext.band(ext.rshift(a["CLK_CLK_PLLCTL"],17),1) if o~=0 then t=string.format("PLL clock (%sHz), bypassed from %s",val2str(e),t) else local n=ext.band(a["CLK_CLK_PLLCTL"],511)+2 local o=ext.band(ext.rshift(a["CLK_CLK_PLLCTL"],9),31)+2 local i={1,2,2,4} local a=i[ext.band(ext.rshift(a["CLK_CLK_PLLCTL"],14),3)+1] e=e*n/o/a t=string.format("PLL clock (%sHz), from %s",val2str(e),t) end else t="PLL clock from "..t end end return e,t end function get_sys_clock(o,a,n) local t local e table.insert(a,"CLK_CLK_CLKSEL0") local i=ext.band(o["CLK_CLK_CLKSEL0"],7) if i==0 then t,e=get_HXT_clock(o,a) elseif i==1 then t,e=get_LXT_clock(o,a) elseif i==2 then if is_PLL_supported()then t,e=get_PLL_clock(o,a) else t,e=get_HIRC_clock(o,a) end elseif i==3 then t,e=get_LIRC_clock(o,a) elseif i==7 then t,e=get_HIRC_clock(o,a) else t=0 e="invalid "..n.." clock (see CLK_CLKSEL0[2:0].HCLKSEL)" return t,e end if t==0 then e=""..n.." clock from "..e else table.insert(a,"CLK_CLK_CLKDIV0") local a=ext.band(o["CLK_CLK_CLKDIV0"],15) t=t/(a+1) e=string.format("%s clock (%sHz), from %s",n,val2str(t),e) end return t,e end function get_HCLK_clock(e,t) return get_sys_clock(e,t,"HCLK") end function get_PCLK_clock(i,o,a) local t local e t,e=get_HCLK_clock(i,o) if t==0 then e=string.format("PCLK%d clock from ",a)..e else table.insert(o,"CLK_CLK_PCLKDIV") local o=ext.band(ext.rshift(i["CLK_CLK_PCLKDIV"],a*4),7) if o<=4 then t=ext.rshift(t,o) e=string.format("PCLK%d clock (%sHz), from %s", a,val2str(t),e) else t=0 e=string.format(" invalid PCLK%d clock (see CLK_PCLKDIV[%d:%d].APB%dDIV)", a,a*4+2,a*4,a) end end return t,e end function fill_M031_GPIO(o,s,t,e,l) if l==nil then l=string.format("P%s.%d",t,e)end local a=s["GPIO_P"..t.."_MODE"] local u=s["GPIO_P"..t.."_DINOFF"] local r=s["GPIO_P"..t.."_DOUT"] local h=s["GPIO_P"..t.."_DATMSK"] local d=s["GPIO_P"..t.."_PIN"] o["highlight_text"]=l o["normal_color"]=kColor_Invalid o["highlight_color"]=kColor_GPIO o["pin_bg_color"]=kBgColor_GPIO local i=ext.band(ext.rshift(a,e*2),3) o["direction"]=n[i] if n[i]==kPinDirection_In or n[i]==kPinDirection_Bi then if ext.band(d,ext.lshift(1,e))==0 then o["status"]=kPinStatus_Low else o["status"]=kPinStatus_High end else if ext.band(h,ext.lshift(1,e))~=0 then o["status"]=kPinStatus_Unknown elseif ext.band(r,ext.lshift(1,e))==0 then o["status"]=kPinStatus_Low else o["status"]=kPinStatus_High end end local a=string.format("P%s.%d is in %s mode
", t,e,c[i]) if n[i]==kPinDirection_In or n[i]==kPinDirection_Bi then if ext.band(d,ext.lshift(1,e))==0 then a=a.."Pin input low
" else a=a.."Pin input high
" end end if n[i]==kPinDirection_PushPullOut or n[i]==kPinDirection_OpenDrainOut or n[i]==kPinDirection_Bi then if ext.band(h,ext.lshift(1,e))~=0 then a=a.."Pin output masked
" elseif ext.band(r,ext.lshift(1,e))==0 then a=a.."Pin output low
" else a=a.."Pin output high
" end end if ext.band(u,ext.lshift(1,e+16))==0 then a=a.."IO digital input path enabled
" else a=a.."IO digital input path disabled(digital input tied to low)
" end local h="" if n[i]==kPinDirection_PushPullOut or n[i]==kPinDirection_Bi then if ext.band(r,ext.lshift(1,e))==0 and ext.band(d,ext.lshift(1,e))~=0 then h=string.format("Leakage warning: GPIO%s_DOUT[%d] = 0, GPIO%s_PIN[%d] = 1
",t,e,t,e) elseif ext.band(r,ext.lshift(1,e))~=0 and ext.band(d,ext.lshift(1,e))==0 then h=string.format("Leakage warning: GPIO%s_DOUT[%d] = 1, GPIO%s_PIN[%d] = 0
",t,e,t,e) end end if h~=""then o["pin_no_color"]=kBgColor_Error h=""..h.."" end local i={ "GPIO_P"..t.."_MODE", "GPIO_P"..t.."_DINOFF", "GPIO_P"..t.."_DOUT", "GPIO_P"..t.."_DATMSK", "GPIO_P"..t.."_PIN"} local i=reg2str("GPIO setting registers",g_M031_regs,s,i) o["information"]=string.format( "%s
%s
".. "%s%s".. "Information
".. "%s", l, h, get_mfp_regs(s,t,e), i, a) end function fill_invalid_GPIO(e,o,a,t) e["highlight_text"]=string.format("P%s.%d",a,t) e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_Invalid e["pin_bg_color"]=kBgColor_Invalid e["direction"]=kPinDirection_Unknown e["status"]=kPinStatus_Unknown e["pin_no_color"]=kBgColor_Error local i="Undefined setting in Multi-Function registers for this pin.
" e["information"]=string.format( "P%s.%d
%s
".. "%s", a,t, i, get_mfp_regs(o,a,t)) end function fill_M031_EADC(a,e,d,l,r) local n="" local o="" local t={} a["highlight_text"]=r a["normal_color"]=kColor_Invalid a["highlight_color"]=kColor_ADC a["pin_bg_color"]=kBgColor_ADC a["direction"]=kPinDirection_Unknown a["status"]=kPinStatus_Unknown table.insert(t,"CLK_CLK_APBCLK0") local h=ext.band(ext.rshift(e["CLK_CLK_APBCLK0"],28),1) if h~=0 then local i local a local s=ext.band(ext.rshift(e["CLK_CLK_CLKSEL2"],20),3) table.insert(t,"CLK_CLK_CLKSEL2") if s==0 then i,a=get_HXT_clock(e,t) elseif s==1 then if is_PLL_supported()then i,a=get_PLL_clock(e,t) else i,a=get_PCLK_clock(e,t,1) end elseif s==2 then i,a=get_PCLK_clock(e,t,1) elseif s==3 then i,a=get_HIRC_clock(e,t) end local e=ext.band(ext.rshift(e["CLK_CLK_CLKDIV0"],16),255) local e=i/(e+1) if e~=0 then table.insert(t,"CLK_CLK_CLKDIV0") n=string.format("ADC clock frequency: %sHz, from %s.
",val2str(e),a) else o="ADC clock is not available, "..a..".
" end else o="ADC clock is not available (see CLK_APBCLK0[28].ADCCKEN).
" end if o~=""then o=""..o.."" a["pin_no_color"]=kBgColor_Error end if n~=""then n="Information
"..n end a["information"]=string.format( "%s
%s
%s%s%s", r, o, get_mfp_regs(e,d,l), get_clk_informnation(e,t), n) return n,o,t,h end function fill_M031_EBI(t,a,r,d,h) local e="" local o="" local i={} t["highlight_text"]=h t["normal_color"]=kColor_Invalid t["highlight_color"]=kColor_EBI t["pin_bg_color"]=kBgColor_EBI t["direction"]=kPinDirection_PushPullOut t["status"]=kPinStatus_Unknown table.insert(i,"CLK_CLK_AHBCLK") local n=ext.band(ext.rshift(a["CLK_CLK_AHBCLK"],3),1) if n~=0 then local s local n s,n=get_HCLK_clock(a,i) if s~=0 then for t=0,1 do local o=string.format("EBI_EBI_CTL%d",t) table.insert(i,o) local i=ext.band(a[o],1) if i~=0 then local i=ext.band(ext.rshift(a[o],8),7) local i=ext.rshift(s,i) local a=ext.band(ext.rshift(a[o],1),1) e=e..string.format("EBI Bank%d MCLK frequency: %sHz, from %s.
", t,val2str(i),n) e=e..string.format("EBI Bank%d: address/data bus %s mode, and data width %d-bit
", t,"multiplex",(a~=0)and 16 or 8) else e=e..string.format("EBI Bank%d disabled
",t) end end else o=string.format("EBI clock is not available, %s.
",n) end else o="EBI clock is not available (see CLK_AHBCLK[3].EBICKEN).
" end if o~=""then o=""..o.."" t["pin_no_color"]=kBgColor_Error end if e~=""then e="Information
"..e end t["information"]=string.format( "%s
%s
".. "%s%s%s", h, o, get_mfp_regs(a,r,d), get_clk_informnation(a,i), e) end function fill_M031_UART(h,t,u,c,l,e) local r="" local o="" local a={} local d=0 h["highlight_text"]=l h["normal_color"]=kColor_Invalid h["highlight_color"]=kColor_UART h["pin_bg_color"]=kBgColor_UART h["direction"]=kPinDirection_Unknown h["status"]=kPinStatus_Unknown function get_uart_baudate(i) local h=string.format("UART%d",e) local e=string.format("UART%d_UART_BAUD",e) table.insert(a,e) local o=ext.band(t[e],536870912) local a=ext.band(t[e],268435456) local s=ext.rshift(ext.band(t[e],251658240),24) local t=ext.band(t[e],65535) local e=0 local n="" if o==0 and a==0 then e=i/(16*(t+2)) elseif o~=0 and a==0 then if s>=8 then e=i/((s+1)*(t+2)) else n="invalid "..h.."'s UART_BAUD value, EDIV_M1 must >= 8" end elseif o~=0 and a~=0 then e=i/(t+2) else n="invalid "..h.."'s UART_BAUD value" end return e,n end table.insert(a,"CLK_CLK_APBCLK0") local i=ext.band(ext.rshift(t["CLK_CLK_APBCLK0"],e+16),1) if i~=0 then local i,h if e<2 then table.insert(a,"CLK_CLK_CLKSEL1") table.insert(a,"CLK_CLK_CLKDIV0") i=ext.band(ext.rshift(t["CLK_CLK_CLKSEL1"],24+e*4),7) h=ext.band(ext.rshift(t["CLK_CLK_CLKDIV0"],8+e*4),15) elseif e<4 then table.insert(a,"CLK_CLK_CLKSEL3") table.insert(a,"CLK_CLK_CLKDIV4") i=ext.band(ext.rshift(t["CLK_CLK_CLKSEL3"],24+(e-2)*4),7) h=ext.band(ext.rshift(t["CLK_CLK_CLKDIV4"],(e-2)*4),15) elseif e<6 then table.insert(a,"CLK_CLK_CLKSEL3") table.insert(a,"CLK_CLK_CLKDIV4") i=ext.band(ext.rshift(t["CLK_CLK_CLKSEL3"],16+(e-4)*4),7) h=ext.band(ext.rshift(t["CLK_CLK_CLKDIV4"],(e-4)*4),15) elseif e<8 then table.insert(a,"CLK_CLK_CLKSEL3") table.insert(a,"CLK_CLK_CLKDIV4") i=ext.band(ext.rshift(t["CLK_CLK_CLKSEL3"],8+(e-6)*4),7) h=ext.band(ext.rshift(t["CLK_CLK_CLKDIV4"],(e-6)*4),15) end local s local n if i==0 then s,n=get_HXT_clock(t,a) elseif i==1 then if is_PLL_supported()then s,n=get_PLL_clock(t,a) else s,n=get_PCLK_clock(t,a,ext.band(e,1)) end elseif i==2 then s,n=get_LXT_clock(t,a) elseif i==3 then s,n=get_HIRC_clock(t,a) elseif i==4 then s,n=get_PCLK_clock(t,a,ext.band(e,1)) else s=0 if e<2 then o=string.format("UART%d clock is not available (see CLK_CLKSEL1[%d:%d].UART%dSEL).
", e,24+e*4+2,24+e*4,e) elseif e<4 then o=string.format("UART%d clock is not available (see CLK_CLKSEL3[%d:%d].UART%dSEL).
", e,24+(e-2)*4+2,24+(e-2)*4,e) elseif e<6 then o=string.format("UART%d clock is not available (see CLK_CLKSEL3[%d:%d].UART%dSEL).
", e,16+(e-4)*4+2,16+(e-4)*4,e) elseif e<8 then o=string.format("UART%d clock is not available (see CLK_CLKSEL3[%d:%d].UART%dSEL).
", e,8+(e-6)*4+2,8+(e-6)*4,e) end end if o==""then d=s/(h+1) if d~=0 then r=string.format("UART%d clock frequency: %sHz, from %s.
",e,val2str(d),n) else o=string.format("UART%d clock is not available, %s.
",e,n) end end else o=string.format("UART%d clock is not available (see CLK_APBCLK0[%d].UART%dCKEN).
", e,e+16,e) end if o==""then local e,t=get_uart_baudate(d) if e~=0 then r=r..string.format("UART baudrate: %d
",e) else o=t..".
" end end if o~=""then o=""..o.."" h["pin_no_color"]=kBgColor_Error end if r~=""then r="Information
"..r end h["information"]=string.format( "%s
%s
".. "%s%s%s", l, o, get_mfp_regs(t,u,c), get_clk_informnation(t,a), r) end function fill_M031_EPWM(n,a,u,l,d,e,t) local s="" local i="" local o={} n["highlight_text"]=d n["normal_color"]=kColor_Invalid n["highlight_color"]=kColor_PWM n["pin_bg_color"]=kBgColor_PWM n["direction"]=kPinDirection_Unknown n["status"]=kPinStatus_Unknown if t~=nil then local t=ext.rshift(t,1) table.insert(o,"CLK_CLK_APBCLK1") local n=ext.band(ext.rshift(a["CLK_CLK_APBCLK1"],16+e),1) if n~=0 then local n local h table.insert(o,"CLK_CLK_CLKSEL2") local r=ext.band(ext.rshift(a["CLK_CLK_CLKSEL2"],e),1) if r==0 then if is_PLL_supported()then n,h=get_PLL_clock(a,o) else n,h=get_PCLK_clock(a,o,ext.band(e,1)) end else n,h=get_PCLK_clock(a,o,ext.band(e,1)) end local r=string.format("PWM%d_PWM_CNTEN",e) table.insert(o,r) local r=ext.band(ext.rshift(a[r],2*t),1) if r==0 then i=string.format("PWM%d counter%d_%d stops running.
",e,2*t,2*t+1) else local r=string.format("PWM%d_PWM_CLKSRC",e) table.insert(o,r) local r=ext.band(ext.rshift(a[r],8*t),7) if r==0 then if n==0 then i=string.format("PWM%d clock is not available, %s.
",e,h) else local i=string.format("PWM%d_PWM_CLKPSC%d_%d",e,2*t,2*t+1) table.insert(o,i) local a=ext.band(a[i],4095) local a=n/(a+1) s=string.format("PWM%d clock frequency: %sHz, from %s.
", e,val2str(n),h) s=s..string.format("PWM%d counter%d_%d frequency: %sHz (Pre-Scaled)
", e,2*t,2*t+1,val2str(a)) end elseif r<=4 then s=string.format("PWM%d_CH%d%d clock source is from TIMER%d.
", e,2*t,2*t+1,r-1) else i=string.format("PWM%d_CH%d%d clock source is undefined (see PWM_CLKSRC[%d:%d].ECLKSRC%d).
", e,2*t,2*t+1,8*t+2,8*t,2*t) end end else i=string.format("PWM%d clock is not available (see CLK_APBCLK1[%d].PWM%dCKEN).
", e,16+e,e) end end if i~=""then i=""..i.."" n["pin_no_color"]=kBgColor_Error end if s~=""then s="Information
"..s end n["information"]=string.format( "%s
%s
".. "%s%s%s", d, i, get_mfp_regs(a,u,l), get_clk_informnation(a,o), s) end function fill_M031_BPWM(o,t,d,l,r,e,s) local i="" local n="" local a={} o["highlight_text"]=r o["normal_color"]=kColor_Invalid o["highlight_color"]=kColor_PWM o["pin_bg_color"]=kBgColor_PWM o["direction"]=kPinDirection_Unknown o["status"]=kPinStatus_Unknown if s~=nil then table.insert(a,"CLK_CLK_APBCLK1") local o=ext.band(ext.rshift(t["CLK_CLK_APBCLK1"],18+e),1) if o~=0 then local o local s table.insert(a,"CLK_CLK_CLKSEL2") local h=ext.band(ext.rshift(t["CLK_CLK_CLKSEL2"],8+e),1) if h==0 then if is_PLL_supported()then o,s=get_PLL_clock(t,a) else o,s=get_PCLK_clock(t,a,ext.band(e,1)) end else o,s=get_PCLK_clock(t,a,ext.band(e,1)) end local h=string.format("BPWM%d_BPWM_CNTEN",e) table.insert(a,h) local h=ext.band(t[h],1) if h==0 then n=string.format("BPWM%d counter stops running.
",e) else local h=string.format("BPWM%d_BPWM_CLKSRC",e) table.insert(a,h) local h=ext.band(t[h],7) if h==0 then if o==0 then n=string.format("BPWM%d clock is not available, %s.
",e,s) else local n=string.format("BPWM%d_BPWM_CLKPSC",e) table.insert(a,n) local t=ext.band(t[n],4095) local t=o/(t+1) i=string.format("BPWM%d clock frequency: %sHz, from %s.
", e,val2str(o),s) i=i..string.format("BPWM%d counter frequency: %sHz (Pre-Scaled)
", e,val2str(t)) end elseif h<=4 then i=string.format("BPWM%d clock source is from TIMER%d.
",e,h-1) else n=string.format("BPWM%d clock source is undefined (see BPWM_CLKSRC[2:0].ECLKSRC0).
",e) end end else n=string.format("BPWM%d clock is not available (see CLK_APBCLK1[%d].BPWM%dCKEN).
", e,18+e,e) end end if n~=""then n=""..n.."" o["pin_no_color"]=kBgColor_Error end if i~=""then i="Information
"..i end o["information"]=string.format( "%s
%s
".. "%s%s%s", r, n, get_mfp_regs(t,d,l), get_clk_informnation(t,a), i) end function fill_M031_ACMP(e,i,h,r,n) local t="" local a="" local o={} e["highlight_text"]=n e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_CMP e["pin_bg_color"]=kBgColor_CMP e["direction"]=kPinDirection_Unknown e["status"]=kPinStatus_Unknown table.insert(o,"CLK_CLK_APBCLK0") local s=ext.band(ext.rshift(i["CLK_CLK_APBCLK0"],7),1) if s==0 then a="ACMP clock is not available (see CLK_APBCLK0[7].ACMP01CKEN).
" a=""..a.."" e["pin_no_color"]=kBgColor_Error end if t~=""then t="Information
"..t end e["information"]=string.format( "%s
%s
".. "%s%s%s", n, a, get_mfp_regs(i,h,r), get_clk_informnation(i,o), t) return t,a,o,s end function fill_M031_TM(o,t,d,l,r,e) local i="" local n="" local a={} o["highlight_text"]=r o["normal_color"]=kColor_Invalid o["highlight_color"]=kColor_TM o["pin_bg_color"]=kBgColor_TM o["direction"]=kPinDirection_Unknown o["status"]=kPinStatus_Unknown table.insert(a,"CLK_CLK_APBCLK0") local s=ext.band(ext.rshift(t["CLK_CLK_APBCLK0"],e+2),1) if s~=0 then local o=string.format("TMR%d%d_TIMER%d_CTL",ext.rshift(e,1)*2,ext.rshift(e,1)*2+1,e) table.insert(a,o) local o=ext.band(ext.rshift(t[o],24),1) if o~=0 then i=string.format("TMR%d external counting pin function enabled.
",e) else local s local o table.insert(a,"CLK_CLK_CLKSEL1") local h=ext.band(ext.rshift(t["CLK_CLK_CLKSEL1"],8+e*4),7) if h==0 then s,o=get_HXT_clock(t,a) elseif h==1 then s,o=get_LXT_clock(t,a) elseif h==2 then if e==0 or e==1 then s,o=get_PCLK_clock(t,a,0) else s,o=get_PCLK_clock(t,a,1) end elseif h==3 then i=string.format("TMR%d clock source is from external clock TM%d pin.
",e,e) elseif h==5 then s,o=get_LIRC_clock(t,a) elseif h==7 then s,o=get_HIRC_clock(t,a) else n=string.format("TMR%d clock source is undefined (see CLK_CLKSEL1[%d:%d].TMR%dSEL).
", e,8+e*4+2,8+e*4,e) end if n==""and i==""then if s~=0 then i=string.format("TMR%d clock frequency: %sHz, from %s.
", e,val2str(s),o) else n=string.format("TMR%d clock is not available, %s.
",e,o) end end end else n=string.format("TMR%d clock is not available (see CLK_APBCLK0[%d].TMR%dCKEN).
",e,e+2,e) end if n~=""then n=""..n.."" o["pin_no_color"]=kBgColor_Error end if i~=""then i="Information
"..i end o["information"]=string.format( "%s
%s
".. "%s%s%s", r, n, get_mfp_regs(t,d,l), get_clk_informnation(t,a), i) end function fill_M031_I2C(a,o,d,r,h,e) local i="" local t="" local n={} a["highlight_text"]=h a["normal_color"]=kColor_Invalid a["highlight_color"]=kColor_I2C a["pin_bg_color"]=kBgColor_I2C a["direction"]=kPinDirection_Unknown a["status"]=kPinStatus_Unknown table.insert(n,"CLK_CLK_APBCLK0") local s=ext.band(ext.rshift(o["CLK_CLK_APBCLK0"],8+e),1) if s~=0 then local a=string.format("I2C%d_I2C_CTL0",e) local h=string.format("I2C%d_I2C_CLKDIV",e) table.insert(n,a) local a=ext.band(ext.rshift(o[a],6),1) if a~=0 then local s local a s,a=get_PCLK_clock(o,n,ext.band(e,1)) if s~=0 then table.insert(n,h) local o=ext.band(o[h],1023) if o<4 then t=string.format("Invalid I2C%d's I2C_CLKDIV value, I2C_CLKDIV must >= 4.
",e) else local t=s/(4*(o+1)) i=i..string.format("I2C%d clock frequency: %sHz, from %s.
",e,val2str(t),a) end else t=string.format("I2C%d clock is not available, %s.
",e,a) end else t=string.format("I2C%d controller disabled (see I2C%d_I2C_CTL0[6].I2CEN).
",e,e) end else t=string.format("I2C%d clock is not available (see CLK_APBCLK0[%d].I2C%dCKEN).
",e,8+e,e) end if t~=""then t=""..t.."" a["pin_no_color"]=kBgColor_Error end if i~=""then i="Information
"..i end a["information"]=string.format( "%s
%s
".. "%s%s%s", h, t, get_mfp_regs(o,d,r), get_clk_informnation(o,n), i) end function fill_M031_SPI(s,e,c,m,u,r) local a="" local d="" local t={} s["highlight_text"]=u s["normal_color"]=kColor_Invalid s["highlight_color"]=kColor_SPI s["pin_bg_color"]=kBgColor_SPI s["direction"]=kPinDirection_Unknown s["status"]=kPinStatus_Unknown local l local i if r==16 then i="QSPI0" l=true else i=string.format("SPI%d",r) l=false end local o=0 if r==16 then table.insert(t,"CLK_CLK_APBCLK0") o=ext.band(ext.rshift(e["CLK_CLK_APBCLK0"],12),1) else table.insert(t,"CLK_CLK_APBCLK0") o=ext.band(ext.rshift(e["CLK_CLK_APBCLK0"],r+13),1) end if o~=0 then local o local n table.insert(t,"CLK_CLK_CLKSEL2") local h=0 if r==16 then h=ext.band(ext.rshift(e["CLK_CLK_CLKSEL2"],2),3) if h==0 then o,n=get_HXT_clock(e,t) elseif h==1 then if is_PLL_supported()then o,n=get_PLL_clock(e,t) else o,n=get_PCLK_clock(e,t,0) end elseif h==2 then o,n=get_PCLK_clock(e,t,0) else o,n=get_HIRC_clock(e,t) end else h=ext.band(ext.rshift(e["CLK_CLK_CLKSEL2"],2*r+4),3) if h==0 then o,n=get_HXT_clock(e,t) elseif h==1 then if is_PLL_supported()then o,n=get_PLL_clock(e,t) else o,n=get_PCLK_clock(e,t,1) end elseif h==2 then o,n=get_PCLK_clock(e,t,1) else o,n=get_HIRC_clock(e,t) end end if o~=0 then local h=0 if not l then local n=string.format("%s_SPIx_I2SCTL",i) local r=string.format("%s_SPIx_I2SCLK",i) table.insert(t,n) h=ext.band(e[n],1) if h~=0 then a=string.format("I2S controller enabled.
") local n=ext.band(ext.rshift(e[n],8),1) if n==0 then table.insert(t,r) local t=ext.band(ext.rshift(e[r],8),1023) local e=ext.band(e[r],127) local n=o/(2*(t+1)) local t=o if e~=0 then t=o/(2*e) end a=a..string.format("%s_I2S is in master mode.
",i) a=a..string.format("BCLK frequency: %sHz
",val2str(n)) a=a..string.format("MCLK frequency: %sHz
",val2str(t)) else a=a..string.format("%s_I2S is in slave mode.
",i) end s["highlight_color"]=kColor_I2S s["pin_bg_color"]=kBgColor_I2S s["direction"]=kPinDirection_Unknown end end if h==0 then local h=string.format("%s_SPIx_CTL",i) local s=string.format("%s_SPIx_CLKDIV",i) table.insert(t,h) local h=ext.band(ext.rshift(e[h],18),1) if h~=0 then a=string.format("%s is in slave mode.
",i) else a=string.format("%s is in master mode.
",i) table.insert(t,s) local e=ext.band(e[s],511) local e=o/(e+1) a=a..string.format("%s clock frequency: %sHz, from %s.
", i,val2str(e),n) end end else d=string.format("%s clock is not available, %s.
",i,n) end else if r==16 then d="QSPI0 clock is not available (see CLK_APBCLK0[12].QSPI0CKEN).
" else d=string.format("%s clock is not available (see CLK_APBCLK0[%d].%sCKEN).
", i,r+13,i) end end if d~=""then d=""..d.."" s["pin_no_color"]=kBgColor_Error end if a~=""then a="Information
"..a end s["information"]=string.format( "%s
%s
".. "%s%s%s", u, d, get_mfp_regs(e,c,m), get_clk_informnation(e,t), a) end function fill_M031_SPI_IO(e,n,i,a) local o local t if i==16 then t="QSPI0" o=true else t=string.format("SPI%d",i) o=false end if not o then local t=string.format("%s_SPIx_I2SCTL",t) local t=ext.band(n[t],1) if t~=0 then if a then e["direction"]=kPinDirection_In else e["direction"]=kPinDirection_PushPullOut end return end end local t=string.format("%s_SPIx_CTL",t) local t=ext.band(ext.rshift(n[t],18),1) if t==0 then if a then e["direction"]=kPinDirection_In else e["direction"]=kPinDirection_PushPullOut end else if a then e["direction"]=kPinDirection_PushPullOut else e["direction"]=kPinDirection_In end end end function fill_M031_QSPI(i,n,o,e,t,a) fill_M031_SPI(i,n,o,e,t,16+a) end function fill_M031_QSPI_IO(a,o,t,e) fill_M031_SPI_IO(a,o,16+t,e) end function fill_M031_USCI(i,a,m,f,c,e) local t="" local o="" local n={} i["highlight_text"]=c i["normal_color"]=kColor_Invalid i["highlight_color"]=kColor_USCI i["pin_bg_color"]=kBgColor_USCI i["direction"]=kPinDirection_Unknown i["status"]=kPinStatus_Unknown table.insert(n,"CLK_CLK_APBCLK1") local s=ext.band(ext.rshift(a["CLK_CLK_APBCLK1"],8+e),1) if s~=0 then local i=string.format("USCI%d_USCI_CTL",e) table.insert(n,i) local h=ext.band(a[i],7) local i=string.format("USCI%d_USCI_BRGEN",e) table.insert(n,i) local s=ext.band(a[i],1) local l=ext.band(ext.rshift(a[i],1),1) local r=ext.band(ext.rshift(a[i],2),3) local m=ext.band(ext.rshift(a[i],10),31) local w=ext.band(ext.rshift(a[i],8),3) local f=ext.band(ext.rshift(a[i],16),1023) local i=string.format("USCI%d_USCI_PROTCTL",e) table.insert(n,i) local d=ext.band(ext.rshift(a[i],31),1) local c=ext.band(a[i],1) local s local i s,i=get_PCLK_clock(a,n,ext.band(e,1)) local n=s local a=n/2 local u=(l==0)and n or a local l=u/(f+1) local f=l/2 local a if r==0 then a=l elseif r==1 then a=u elseif r==2 then a=f elseif r==3 then a=n end if s~=0 then if h==0 then t=string.format("USCI%d is in idle state.
",e) elseif h==1 then if c==0 then t=string.format("USCI%d is in SPI master mode.
",e) else t=string.format("USCI%d is in SPI slave mode.
",e) end if d==0 then o=string.format("SPI protocol disabled (see USCI%d_USCI_PROTCTL[31].PROTEN)
",e) elseif c==0 then local a=a/2 t=t..string.format("USPI%d clock frequency: %sHz, from %s.
",e,val2str(a),i) end elseif h==2 then t=string.format("USCI%d is in UART mode.
",e) if d==0 then o=string.format("UART protocol disabled (see USCI%d_USCI_PROTCTL[31].PROTEN)
",e) else t=t..string.format("UUART%d clock frequency: %sHz, from %s.
",e,val2str(s),i) local e=a/(m+1)/(w+1) t=t..string.format("UART baudrate: %d
",e) end elseif h==4 then t=string.format("USCI%d is in I2C mode.
",e) if d==0 then o=string.format("I2C protocol disabled (see USCI%d_USCI_PROTCTL[31].PROTEN)
",e) else local a=a/2 t=t..string.format("UI2C%d clock frequency: %sHz, from %s.
",e,val2str(a),i) end else o=string.format("Undefined function mode (see USCI_CTL[2:0].FUNMODE).
") end else o=string.format("USCI%d clock is not available, %s.
",e,i) end else o=string.format("USCI%d clock is not available (see CLK_APBCLK1[%d].USCI%dCKEN).
",e,8+e,e) end if o~=""then o=""..o.."" i["pin_no_color"]=kBgColor_Error end if t~=""then t="Information
"..t end i["information"]=string.format( "%s
%s
".. "%s%s%s", c, o, get_mfp_regs(a,m,f), get_clk_informnation(a,n), t) end function fill_M031_USCI_IO(e,o,i,a) local t=string.format("USCI%d_USCI_CTL",i) local t=ext.band(o[t],7) if t==0 then elseif t==1 then local t=string.format("USCI%d_USCI_PROTCTL",i) local t=ext.band(o[t],1) if t==0 then if a==0 then e["direction"]=kPinDirection_PushPullOut else e["direction"]=kPinDirection_In end else if a==0 then e["direction"]=kPinDirection_In else e["direction"]=kPinDirection_PushPullOut end end elseif t==2 then if a==0 then e["direction"]=kPinDirection_In else e["direction"]=kPinDirection_PushPullOut end elseif t==4 then end end function fill_M031_USB(e,a,r,h,s) local o="" local t="" local i={} e["highlight_text"]=s e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_USB e["pin_bg_color"]=kBgColor_USB e["direction"]=kPinDirection_Unknown e["status"]=kPinStatus_Unknown table.insert(i,"CLK_CLK_APBCLK0") local n=ext.band(a["CLK_CLK_APBCLK0"],ext.lshift(1,27)) if n~=0 then local e local n e,n=get_PCLK_clock(a,i,0) table.insert(i,"CLK_CLK_CLKDIV0") local a=ext.band(ext.rshift(a["CLK_CLK_CLKDIV0"],4),15) e=e/(a+1) if e~=0 then o=string.format("USB clock frequency: %sHz, from %s.
",val2str(e),n) else t="USB clock is not available, "..n..".
" end else t="USB clock is not available (see CLK_APBCLK0[27].USBDCKEN).
" end if t~=""then t=""..t.."" e["pin_no_color"]=kBgColor_Error end if o~=""then o="Information
"..o end if r~=nil and h~=nil then e["information"]=string.format( "%s
%s
".. "%s%s%s", s, t, get_mfp_regs(a,r,h), get_clk_informnation(a,i), o) else e["information"]=string.format( "%s
%s
".. "%s%s", s, t, get_clk_informnation(a,i), o) end end function fill_M031_CLKO(n,e,r,d,h) local s="" local i="" local t={} n["highlight_text"]=h n["normal_color"]=kColor_Invalid n["highlight_color"]=kColor_CLK n["pin_bg_color"]=kBgColor_CLK n["direction"]=kPinDirection_PushPullOut n["status"]=kPinStatus_Unknown table.insert(t,"CLK_CLK_APBCLK0") local a=ext.band(ext.rshift(e["CLK_CLK_APBCLK0"],6),1) if a~=0 then table.insert(t,"CLK_CLK_CLKOCTL") local a=ext.band(ext.rshift(e["CLK_CLK_CLKOCTL"],4),1) if a~=0 then local a local o table.insert(t,"CLK_CLK_CLKSEL1") local n=ext.band(ext.rshift(e["CLK_CLK_CLKSEL1"],4),7) if n==0 then a,o=get_HXT_clock(e,t) elseif n==1 then a,o=get_LXT_clock(e,t) elseif n==2 then a,o=get_HCLK_clock(e,t) elseif n==3 then a,o=get_HIRC_clock(e,t) elseif n==4 then a,o=get_LIRC_clock(e,t) elseif n==5 then a,o=get_HIRC_clock(e,t) elseif n==6 then if is_PLL_supported()then a,o=get_PLL_clock(e,t) else a,o=get_HIRC_clock(e,t) end else a=0 i="CLKO clock is not available (see CLK_CLKSEL1[6:4].CLKOSEL).
" end if i==""then if a~=0 then local t=a local i=ext.band(ext.rshift(e["CLK_CLK_CLKOCTL"],5),1) if i==0 then local e=ext.band(e["CLK_CLK_CLKOCTL"],15) t=a/ext.lshift(1,(e+1)) end s=string.format("CLKO clock frequency: %sHz, from %s.
",val2str(t),o) else i="CLKO clock is not available, "..o..".
" end end else i="CLKO output function disabled (see CLK_CLKOCTL[4].CLKOEN).
" end else i="CLKO clock is not available (see CLK_APBCLK0[6].CLKOCKEN).
" end if i~=""then i=""..i.."" n["pin_no_color"]=kBgColor_Error end if s~=""then s="Information
"..s end n["information"]=string.format( "%s
%s
".. "%s%s%s", h, i, get_mfp_regs(e,r,d), get_clk_informnation(e,t), s) end function fill_M031_Normal(e,i,a,o,t) e["highlight_text"]=t e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_Normal e["pin_bg_color"]=kBgColor_Normal e["direction"]=kPinDirection_Unknown e["status"]=kPinStatus_Unknown if a==nil or o==nil then e["information"]=string.format( "%s
", t) else e["information"]=string.format( "%s

".. "%s", t, get_mfp_regs(i,a,o)) end end function fill_M031_Analog(e,n,r,h,s,m,f) local t="" local a="" local d={} local o={} local i="" local l="" local c={} local u=0 if f~=nil then i,l,c,u=fill_M031_ACMP(o,n,r,h,s) for t,e in ipairs(c)do table.insert(d,e) end if i~=""then if t~=""then t=t.."

"end t=t.."ACMP "..i end a=a..l end local i={} local l="" local c="" local w={} local f=0 if m~=nil then l,c,w,f=fill_M031_EADC(i,n,r,h,s,unpack(m)) for t,e in ipairs(w)do table.insert(d,e) end if l~=""then if t~=""then t=t.."

"end t=t.."EADC "..l end a=a..c end if u~=0 then e["highlight_color"]=o["highlight_color"] e["pin_bg_color"]=o["pin_bg_color"] e["pin_no_color"]=o["pin_no_color"] elseif f~=0 then e["highlight_color"]=i["highlight_color"] e["pin_bg_color"]=i["pin_bg_color"] e["pin_no_color"]=i["pin_no_color"] else e["highlight_color"]=kColor_Normal e["pin_bg_color"]=kBgColor_Normal if a~=""then e["pin_no_color"]=kBgColor_Error end end e["highlight_text"]=s e["normal_color"]=kColor_Invalid e["direction"]=kPinDirection_Unknown e["status"]=kPinStatus_Unknown e["information"]=string.format( "%s
%s
".. "%s%s%s", s, a, get_mfp_regs(n,r,h), get_clk_informnation(n,d), t) end