REG= { SCS_SYST_CTL=3758153744, SCS_SYST_RVR=3758153748, SCS_SYST_CVR=3758153752, SCS_NVIC_ISER=3758153984, SCS_NVIC_ICER=3758154112, SCS_NVIC_ISPR=3758154240, SCS_NVIC_ICPR=3758154368, SCS_NVIC_IPR0=3758154752, SCS_NVIC_IPR1=3758154756, SCS_NVIC_IPR2=3758154760, SCS_NVIC_IPR3=3758154764, SCS_NVIC_IPR4=3758154768, SCS_NVIC_IPR5=3758154772, SCS_NVIC_IPR6=3758154776, SCS_NVIC_IPR7=3758154780, SCS_CPUID=3758157056, SCS_ICSR=3758157060, SCS_SCR=3758157072, SCS_SHPR2=3758157084, SCS_SHPR3=3758157088, GPIO_PA_MODE=1342193664, GPIO_PA_DINOFF=1342193668, GPIO_PA_DOUT=1342193672, GPIO_PA_DATMSK=1342193676, GPIO_PA_PIN=1342193680, GPIO_PA_DBEN=1342193684, GPIO_PA_INTTYPE=1342193688, GPIO_PA_INTEN=1342193692, GPIO_PA_INTSRC=1342193696, GPIO_PA_PUEN=1342193700, GPIO_PA_INTSTS=1342193704, GPIO_PB_MODE=1342193728, GPIO_PB_DINOFF=1342193732, GPIO_PB_DOUT=1342193736, GPIO_PB_DATMSK=1342193740, GPIO_PB_PIN=1342193744, GPIO_PB_DBEN=1342193748, GPIO_PB_INTTYPE=1342193752, GPIO_PB_INTEN=1342193756, GPIO_PB_INTSRC=1342193760, GPIO_PB_PUEN=1342193764, GPIO_PB_INTSTS=1342193768, GPIO_PC_MODE=1342193792, GPIO_PC_DINOFF=1342193796, GPIO_PC_DOUT=1342193800, GPIO_PC_DATMSK=1342193804, GPIO_PC_PIN=1342193808, GPIO_PC_DBEN=1342193812, GPIO_PC_INTTYPE=1342193816, GPIO_PC_INTEN=1342193820, GPIO_PC_INTSRC=1342193824, GPIO_PC_PUEN=1342193828, GPIO_PC_INTSTS=1342193832, GPIO_PD_MODE=1342193856, GPIO_PD_DINOFF=1342193860, GPIO_PD_DOUT=1342193864, GPIO_PD_DATMSK=1342193868, GPIO_PD_PIN=1342193872, GPIO_PD_DBEN=1342193876, GPIO_PD_INTTYPE=1342193880, GPIO_PD_INTEN=1342193884, GPIO_PD_INTSRC=1342193888, GPIO_PD_PUEN=1342193892, GPIO_PD_INTSTS=1342193896, GPIO_PE_MODE=1342193920, GPIO_PE_DINOFF=1342193924, GPIO_PE_DOUT=1342193928, GPIO_PE_DATMSK=1342193932, GPIO_PE_PIN=1342193936, GPIO_PE_DBEN=1342193940, GPIO_PE_INTTYPE=1342193944, GPIO_PE_INTEN=1342193948, GPIO_PE_INTSRC=1342193952, GPIO_PE_PUEN=1342193956, GPIO_PE_INTSTS=1342193960, GPIO_PF_MODE=1342193984, GPIO_PF_DINOFF=1342193988, GPIO_PF_DOUT=1342193992, GPIO_PF_DATMSK=1342193996, GPIO_PF_PIN=1342194000, GPIO_PF_DBEN=1342194004, GPIO_PF_INTTYPE=1342194008, GPIO_PF_INTEN=1342194012, GPIO_PF_INTSRC=1342194016, GPIO_PF_PUEN=1342194020, GPIO_PF_INTSTS=1342194024, INT_IRQ0_SRC=1342178048, INT_IRQ1_SRC=1342178052, INT_IRQ2_SRC=1342178056, INT_IRQ3_SRC=1342178060, INT_IRQ4_SRC=1342178064, INT_IRQ5_SRC=1342178068, INT_IRQ6_SRC=1342178072, INT_IRQ7_SRC=1342178076, INT_IRQ8_SRC=1342178080, INT_IRQ9_SRC=1342178084, INT_IRQ10_SRC=1342178088, INT_IRQ11_SRC=1342178092, INT_IRQ12_SRC=1342178096, INT_IRQ13_SRC=1342178100, INT_IRQ14_SRC=1342178104, INT_IRQ15_SRC=1342178108, INT_IRQ16_SRC=1342178112, INT_IRQ17_SRC=1342178116, INT_IRQ18_SRC=1342178120, INT_IRQ19_SRC=1342178124, INT_IRQ20_SRC=1342178128, INT_IRQ21_SRC=1342178132, INT_IRQ22_SRC=1342178136, INT_IRQ23_SRC=1342178140, INT_IRQ24_SRC=1342178144, INT_IRQ25_SRC=1342178148, INT_IRQ26_SRC=1342178152, INT_IRQ27_SRC=1342178156, INT_IRQ28_SRC=1342178160, INT_IRQ29_SRC=1342178164, INT_IRQ30_SRC=1342178168, INT_IRQ31_SRC=1342178172, INT_NMI_SEL=1342178176, INT_MCU_IRQ=1342178180, SYS_PDID=1342177280, SYS_RSTSTS=1342177284, SYS_IPRST1=1342177288, SYS_IPRST2=1342177292, SYS_TEMPCTL=1342177312, SYS_RCCFCTL=1342177320, SYS_GPA_MFPL=1342177328, SYS_GPA_MFPH=1342177332, SYS_GPB_MFPL=1342177336, SYS_GPB_MFPH=1342177340, SYS_GPC_MFPL=1342177344, SYS_GPC_MFPH=1342177348, SYS_GPD_MFPL=1342177352, SYS_GPD_MFPH=1342177356, SYS_GPE_MFPL=1342177360, SYS_GPF_MFPL=1342177368, SYS_PORCTL=1342177376, SYS_BODCTL=1342177380, SYS_BODSTS=1342177384, SYS_IVREFCTL=1342177388, SYS_LDOCTL=1342177392, SYS_BATDCTL=1342177396, SYS_WKSTS=1342177404, SYS_RC0TCTL=1342177408, SYS_RC0TIEN=1342177412, SYS_RC0TISTS=1342177416, SYS_RC1TCTL=1342177424, SYS_RC1TIEN=1342177428, SYS_RC1TISTS=1342177432, SYS_MRCTCTL=1342177440, SYS_MRCTIEN=1342177444, SYS_MRCTISTS=1342177448, SYS_REGLCTL=1342177536, SYS_RPDBCLK=1342177568, CLK_PWRCTL=1342177792, CLK_AHBCLK=1342177796, CLK_APBCLK=1342177800, CLK_STATUS=1342177804, CLK_CLKSEL0=1342177808, CLK_CLKSEL1=1342177812, CLK_CLKSEL2=1342177816, CLK_CLKDIV0=1342177820, CLK_CLKDIV1=1342177824, CLK_PLLCTL=1342177828, CLK_CLKOCTL=1342177832, CLK_WKINTSTS=1342177840, CLK_APBDIV=1342177844, CLK_CLKDCTL=1342177848, FMC_ISPCTL=1342226432, FMC_ISPADDR=1342226436, FMC_ISPDAT=1342226440, FMC_ISPCMD=1342226444, FMC_ISPTRG=1342226448, FMC_DFBA=1342226452, FMC_FTCTL=1342226456, FMC_ISPSTS=1342226496, FMC_KEY0=1342226512, FMC_KEY1=1342226516, FMC_KEY2=1342226520, FMC_KEYTRG=1342226524, FMC_KEYSTS=1342226528, FMC_KECNT=1342226532, FMC_KPCNT=1342226536, PDMA_CH1_PDMA_CTLn=1342210304, PDMA_CH1_PDMA_SAn=1342210308, PDMA_CH1_PDMA_DAn=1342210312, PDMA_CH1_PDMA_CNTn=1342210316, PDMA_CH1_PDMA_CSAn=1342210324, PDMA_CH1_PDMA_CDAn=1342210328, PDMA_CH1_PDMA_CCNTn=1342210332, PDMA_CH1_PDMA_INTENn=1342210336, PDMA_CH1_PDMA_INTSTSn=1342210340, PDMA_CH1_PDMA_TOCn=1342210344, PDMA_CH2_PDMA_CTLn=1342210560, PDMA_CH2_PDMA_SAn=1342210564, PDMA_CH2_PDMA_DAn=1342210568, PDMA_CH2_PDMA_CNTn=1342210572, PDMA_CH2_PDMA_CSAn=1342210580, PDMA_CH2_PDMA_CDAn=1342210584, PDMA_CH2_PDMA_CCNTn=1342210588, PDMA_CH2_PDMA_INTENn=1342210592, PDMA_CH2_PDMA_INTSTSn=1342210596, PDMA_CH2_PDMA_TOCn=1342210600, PDMA_CH3_PDMA_CTLn=1342210816, PDMA_CH3_PDMA_SAn=1342210820, PDMA_CH3_PDMA_DAn=1342210824, PDMA_CH3_PDMA_CNTn=1342210828, PDMA_CH3_PDMA_CSAn=1342210836, PDMA_CH3_PDMA_CDAn=1342210840, PDMA_CH3_PDMA_CCNTn=1342210844, PDMA_CH3_PDMA_INTENn=1342210848, PDMA_CH3_PDMA_INTSTSn=1342210852, PDMA_CH3_PDMA_TOCn=1342210856, PDMA_CH4_PDMA_CTLn=1342211072, PDMA_CH4_PDMA_SAn=1342211076, PDMA_CH4_PDMA_DAn=1342211080, PDMA_CH4_PDMA_CNTn=1342211084, PDMA_CH4_PDMA_CSAn=1342211092, PDMA_CH4_PDMA_CDAn=1342211096, PDMA_CH4_PDMA_CCNTn=1342211100, PDMA_CH4_PDMA_INTENn=1342211104, PDMA_CH4_PDMA_INTSTSn=1342211108, PDMA_CH4_PDMA_TOCn=1342211112, CRC_CTL=1342213632, CRC_DMASA=1342213636, CRC_DMABCNT=1342213644, CRC_DMACSA=1342213652, CRC_DMACBCNT=1342213660, CRC_DMAINTEN=1342213664, CRC_DMAISTS=1342213668, CRC_DAT=1342213760, CRC_SEED=1342213764, CRC_CHECKSUM=1342213768, PDMA_GCR_PDMA_GCTL=1342213888, PDMA_GCR_PDMA_REQSEL0=1342213892, PDMA_GCR_PDMA_REQSEL1=1342213896, PDMA_GCR_PDMA_GINTSTS=1342213900, TMR_TIMER0_CTL=1073807360, TMR_TIMER0_PRECNT=1073807364, TMR_TIMER0_CMP=1073807368, TMR_TIMER0_INTEN=1073807372, TMR_TIMER0_INTSTS=1073807376, TMR_TIMER0_CNT=1073807380, TMR_TIMER0_CAP=1073807384, TMR_TIMER0_ECTL=1073807392, TMR_TIMER1_CTL=1073807616, TMR_TIMER1_PRECNT=1073807620, TMR_TIMER1_CMP=1073807624, TMR_TIMER1_INTEN=1073807628, TMR_TIMER1_INTSTS=1073807632, TMR_TIMER1_CNT=1073807636, TMR_TIMER1_CAP=1073807640, TMR_TIMER1_ECTL=1073807648, TMR_GPA_SHADOW=1073807872, TMR_GPB_SHADOW=1073807876, TMR_GPC_SHADOW=1073807880, TMR_GPD_SHADOW=1073807884, TMR_GPE_SHADOW=1073807888, TMR_GPF_SHADOW=1073807892, TMR_TIMER2_CTL=1074855936, TMR_TIMER2_PRECNT=1074855940, TMR_TIMER2_CMP=1074855944, TMR_TIMER2_INTEN=1074855948, TMR_TIMER2_INTSTS=1074855952, TMR_TIMER2_CNT=1074855956, TMR_TIMER2_CAP=1074855960, TMR_TIMER2_ECTL=1074855968, TMR_TIMER3_CTL=1074856192, TMR_TIMER3_PRECNT=1074856196, TMR_TIMER3_CMP=1074856200, TMR_TIMER3_INTEN=1074856204, TMR_TIMER3_INTSTS=1074856208, TMR_TIMER3_CNT=1074856212, TMR_TIMER3_CAP=1074856216, TMR_TIMER3_ECTL=1074856224, PWM0_CTL0=1074003968, PWM0_CTL1=1074003972, PWM0_CLKSRC=1074003984, PWM0_CLKPSC0_1=1074003988, PWM0_CLKPSC2_3=1074003992, PWM0_CLKPSC4_5=1074003996, PWM0_CNTEN=1074004000, PWM0_CNTCLR=1074004004, PWM0_PERIOD0=1074004016, PWM0_PERIOD2=1074004024, PWM0_PERIOD4=1074004032, PWM0_CMPDAT0=1074004048, PWM0_CMPDAT1=1074004052, PWM0_CMPDAT2=1074004056, PWM0_CMPDAT3=1074004060, PWM0_CMPDAT4=1074004064, PWM0_CMPDAT5=1074004068, PWM0_DTCTL0_1=1074004080, PWM0_DTCTL2_3=1074004084, PWM0_DTCTL4_5=1074004088, PWM0_CNT0=1074004112, PWM0_CNT2=1074004120, PWM0_CNT4=1074004128, PWM0_WGCTL0=1074004144, PWM0_WGCTL1=1074004148, PWM0_MSKEN=1074004152, PWM0_MSK=1074004156, PWM0_BNF=1074004160, PWM0_FAILBRK=1074004164, PWM0_BRKCTL0_1=1074004168, PWM0_BRKCTL2_3=1074004172, PWM0_BRKCTL4_5=1074004176, PWM0_POLCTL=1074004180, PWM0_POEN=1074004184, PWM0_SWBRK=1074004188, PWM0_INTEN0=1074004192, PWM0_INTEN1=1074004196, PWM0_INTSTS0=1074004200, PWM0_INTSTS1=1074004204, PWM0_ADCTS0=1074004216, PWM0_ADCTS1=1074004220, PWM0_STATUS=1074004256, PWM0_CAPINEN=1074004480, PWM0_CAPCTL=1074004484, PWM0_CAPSTS=1074004488, PWM0_RCAPDAT0=1074004492, PWM0_FCAPDAT0=1074004496, PWM0_RCAPDAT1=1074004500, PWM0_FCAPDAT1=1074004504, PWM0_RCAPDAT2=1074004508, PWM0_FCAPDAT2=1074004512, PWM0_RCAPDAT3=1074004516, PWM0_FCAPDAT3=1074004520, PWM0_RCAPDAT4=1074004524, PWM0_FCAPDAT4=1074004528, PWM0_RCAPDAT5=1074004532, PWM0_FCAPDAT5=1074004536, PWM0_CAPIEN=1074004560, PWM0_CAPIF=1074004564, PWM0_SELFTEST=1074004736, PWM0_PBUF0=1074004740, PWM0_PBUF2=1074004748, PWM0_PBUF4=1074004756, PWM0_CMPBUF0=1074004764, PWM0_CMPBUF1=1074004768, PWM0_CMPBUF2=1074004772, PWM0_CMPBUF3=1074004776, PWM0_CMPBUF4=1074004780, PWM0_CMPBUF5=1074004784, PWM0_VERSION=1074008060, WDT_CTL=1073758208, WDT_INTEN=1073758212, WDT_STATUS=1073758216, WWDT_RLDCNT=1073758464, WWDT_CTL=1073758468, WWDT_INTEN=1073758472, WWDT_STATUS=1073758476, WWDT_CNT=1073758480, RTC_INIT=1073774592, RTC_RWEN=1073774596, RTC_FREQADJ=1073774600, RTC_TIME=1073774604, RTC_CAL=1073774608, RTC_CLKFMT=1073774612, RTC_WEEKDAY=1073774616, RTC_TALM=1073774620, RTC_CALM=1073774624, RTC_LEAPYEAR=1073774628, RTC_INTEN=1073774632, RTC_INTSTS=1073774636, RTC_TICK=1073774640, RTC_TAMSK=1073774644, RTC_CAMSK=1073774648, RTC_SPRCTL=1073774652, RTC_SPR0=1073774656, RTC_SPR1=1073774660, RTC_SPR2=1073774664, RTC_SPR3=1073774668, RTC_SPR4=1073774672, RTC_LXTCTL=1073774848, RTC_LXTOCTL=1073774852, RTC_LXTICTL=1073774856, RTC_TAMPCTL=1073774860, UART0_UART_DAT=1074069504, UART0_UART_CTRL=1074069508, UART0_UART_LINE=1074069512, UART0_UART_INTEN=1074069516, UART0_UART_INTSTS=1074069520, UART0_UART_TRSR=1074069524, UART0_UART_FIFOSTS=1074069528, UART0_UART_MODEM=1074069532, UART0_UART_TOUT=1074069536, UART0_UART_BAUD=1074069540, UART0_UART_IRDA=1074069552, UART0_UART_ATLCTL=1074069556, UART0_UART_FUNCSEL=1074069560, UART0_UART_BRCOMPAT=1074069564, UART0_UART_WKUPEN=1074069568, UART0_UART_WKUPSTS=1074069572, UART1_UART_DAT=1075118080, UART1_UART_CTRL=1075118084, UART1_UART_LINE=1075118088, UART1_UART_INTEN=1075118092, UART1_UART_INTSTS=1075118096, UART1_UART_TRSR=1075118100, UART1_UART_FIFOSTS=1075118104, UART1_UART_MODEM=1075118108, UART1_UART_TOUT=1075118112, UART1_UART_BAUD=1075118116, UART1_UART_IRDA=1075118128, UART1_UART_ATLCTL=1075118132, UART1_UART_FUNCSEL=1075118136, UART1_UART_BRCOMPAT=1075118140, UART1_UART_WKUPEN=1075118144, UART1_UART_WKUPSTS=1075118148, SC0_SCn_DAT=1075380224, SC0_SCn_CTL=1075380228, SC0_SCn_ALTCTL=1075380232, SC0_SCn_EGT=1075380236, SC0_SCn_RXTOUT=1075380240, SC0_SCn_ETUCTL=1075380244, SC0_SCn_INTEN=1075380248, SC0_SCn_INTSTS=1075380252, SC0_SCn_STATUS=1075380256, SC0_SCn_PINCTL=1075380260, SC0_SCn_TMRCTL0=1075380264, SC0_SCn_TMRCTL1=1075380268, SC0_SCn_TMRCTL2=1075380272, SC0_SCn_UARTCTL=1075380276, SC0_SCn_ACTCTL=1075380288, SC1_SCn_DAT=1075511296, SC1_SCn_CTL=1075511300, SC1_SCn_ALTCTL=1075511304, SC1_SCn_EGT=1075511308, SC1_SCn_RXTOUT=1075511312, SC1_SCn_ETUCTL=1075511316, SC1_SCn_INTEN=1075511320, SC1_SCn_INTSTS=1075511324, SC1_SCn_STATUS=1075511328, SC1_SCn_PINCTL=1075511332, SC1_SCn_TMRCTL0=1075511336, SC1_SCn_TMRCTL1=1075511340, SC1_SCn_TMRCTL2=1075511344, SC1_SCn_UARTCTL=1075511348, SC1_SCn_ACTCTL=1075511360, I2C0_I2C_CTL=1073872896, I2C0_I2C_INTSTS=1073872900, I2C0_I2C_STATUS=1073872904, I2C0_I2C_CLKDIV=1073872908, I2C0_I2C_TOCTL=1073872912, I2C0_I2C_DAT=1073872916, I2C0_I2C_ADDR0=1073872920, I2C0_I2C_ADDR1=1073872924, I2C0_I2C_ADDRMSK0=1073872936, I2C0_I2C_ADDRMSK1=1073872940, I2C0_I2C_CTL2=1073872960, I2C0_I2C_STATUS2=1073872964, I2C1_I2C_CTL=1074921472, I2C1_I2C_INTSTS=1074921476, I2C1_I2C_STATUS=1074921480, I2C1_I2C_CLKDIV=1074921484, I2C1_I2C_TOCTL=1074921488, I2C1_I2C_DAT=1074921492, I2C1_I2C_ADDR0=1074921496, I2C1_I2C_ADDR1=1074921500, I2C1_I2C_ADDRMSK0=1074921512, I2C1_I2C_ADDRMSK1=1074921516, I2C1_I2C_CTL2=1074921536, I2C1_I2C_STATUS2=1074921540, DSRC_CTL=1075773440, DSRC_INTEN=1075773444, DSRC_STATUS=1075773448, DSRC_PREAMBLE=1075773452, DSRC_CRCSEED=1075773456, DSRC_RBCNT=1075773460, DSRC_CHKSUM=1075773464, DSRC_TX=1075773472, DSRC_RX=1075773476, DSRC_TMR2=1075773496, DSRC_TMR3=1075773500, DSRC_TMR4=1075773504, DSRC_CTL2=1075773952, DSRC_TXR=1075773968, DSRC_RXR=1075773972, DSRC_ICR=1075773976, ADC_DAT0=1074659328, ADC_DAT1=1074659332, ADC_DAT2=1074659336, ADC_DAT3=1074659340, ADC_DAT4=1074659344, ADC_DAT5=1074659348, ADC_DAT6=1074659352, ADC_DAT7=1074659356, ADC_DAT12=1074659376, ADC_DAT13=1074659380, ADC_DAT14=1074659384, ADC_DAT15=1074659388, ADC_DAT16=1074659392, ADC_DAT17=1074659396, ADC_CTL=1074659400, ADC_CHEN=1074659404, ADC_CMP0=1074659408, ADC_CMP1=1074659412, ADC_STATUS=1074659416, ADC_PDMA=1074659424, ADC_PWD=1074659428, ADC_CALCTL=1074659432, ADC_CALWORD=1074659436, ADC_EXTSMPT0=1074659440, ADC_EXTSMPT1=1074659444, ACMP0_ACMP_CTL0=1075642368, ACMP0_ACMP_STATUS=1075642372, ACMP0_ACMP_VREF=1075642376, SPI0_SPI_CTL=1073938432, SPI0_SPI_STATUS=1073938436, SPI0_SPI_CLKDIV=1073938440, SPI0_SPI_SSCTL=1073938444, SPI0_SPI_RX0=1073938448, SPI0_SPI_RX1=1073938452, SPI0_SPI_TX0=1073938464, SPI0_SPI_TX1=1073938468, SPI0_SPI_PDMACTL=1073938488, SPI0_SPI_FIFOCTL=1073938492, SPI1_SPI_CTL=1074987008, SPI1_SPI_STATUS=1074987012, SPI1_SPI_CLKDIV=1074987016, SPI1_SPI_SSR=1074987020, SPI1_SPI_RX0=1074987024, SPI1_SPI_RX1=1074987028, SPI1_SPI_TX0=1074987040, SPI1_SPI_TX1=1074987044, SPI1_SPI_PDMACTL=1074987064, SPI1_SPI_FIFOCTL=1074987068, SPI2_SPI_CTL=1074593792, SPI2_SPI_STATUS=1074593796, SPI2_SPI_CLKDIV=1074593800, SPI2_SPI_SSR=1074593804, SPI2_SPI_RX0=1074593808, SPI2_SPI_RX1=1074593812, SPI2_SPI_TX0=1074593824, SPI2_SPI_TX1=1074593828, SPI2_SPI_PDMACTL=1074593848, SPI2_SPI_FIFOCTL=1074593852, SPI3_SPI_CTL=1075707904, SPI3_SPI_STATUS=1075707908, SPI3_SPI_CLKDIV=1075707912, SPI3_SPI_SSR=1075707916, SPI3_SPI_RX0=1075707920, SPI3_SPI_RX1=1075707924, SPI3_SPI_TX0=1075707936, SPI3_SPI_TX1=1075707940, SPI3_SPI_PDMACTL=1075707960, SPI3_SPI_FIFOCTL=1075707964, } g_Nano103_regs=REG function read_Nano103_Registers(e,e,e,e) local e={} e["SYS_GPA_MFPL"], e["SYS_GPA_MFPH"], e["SYS_GPB_MFPL"], e["SYS_GPB_MFPH"], e["SYS_GPC_MFPL"], e["SYS_GPC_MFPH"], e["SYS_GPD_MFPL"], e["SYS_GPD_MFPH"], e["SYS_GPE_MFPL"], e["dummy"], e["SYS_GPF_MFPL"]=ice:ReadMem32(g_Nano103_regs.SYS_GPA_MFPL,11) e["SYS_RC0TCTL"], e["SYS_RC1TCTL"]=ice:ReadMemMulti(g_Nano103_regs.SYS_RC0TCTL, g_Nano103_regs.SYS_RC1TCTL) e["GPIO_PA_MODE"], e["GPIO_PA_DINOFF"], e["GPIO_PA_DOUT"], e["GPIO_PA_DATMSK"], e["GPIO_PA_PIN"]=ice:ReadMem32(g_Nano103_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_Nano103_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_Nano103_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_Nano103_regs.GPIO_PD_MODE,5) e["GPIO_PE_MODE"], e["GPIO_PE_DINOFF"], e["GPIO_PE_DOUT"], e["GPIO_PE_DATMSK"], e["GPIO_PE_PIN"]=ice:ReadMem32(g_Nano103_regs.GPIO_PE_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_Nano103_regs.GPIO_PF_MODE,5) e["GPIO_PA_PUEN"], e["GPIO_PB_PUEN"], e["GPIO_PC_PUEN"], e["GPIO_PD_PUEN"]=ice:ReadMemMulti(g_Nano103_regs.GPIO_PA_PUEN, g_Nano103_regs.GPIO_PB_PUEN, g_Nano103_regs.GPIO_PC_PUEN, g_Nano103_regs.GPIO_PD_PUEN) e["GPIO_PE_PUEN"], e["GPIO_PF_PUEN"]=ice:ReadMemMulti(g_Nano103_regs.GPIO_PE_PUEN, g_Nano103_regs.GPIO_PF_PUEN) e["CLK_PWRCTL"], e["CLK_AHBCLK"], e["CLK_APBCLK"], e["CLK_CLKSTATUS"], e["CLK_CLKSEL0"], e["CLK_CLKSEL1"], e["CLK_CLKSEL2"], e["CLK_CLKDIV0"], e["CLK_CLKDIV1"], e["CLK_PLLCTL"], e["CLK_CLKOCTL"]=ice:ReadMem32(g_Nano103_regs.CLK_PWRCTL,11) e["CLK_APBDIV"], e["CLK_CLKDCTL"]=ice:ReadMemMulti(g_Nano103_regs.CLK_APBDIV, g_Nano103_regs.CLK_CLKDCTL) e["UART0_UART_BAUD"], e["UART1_UART_BAUD"]=ice:ReadMemMulti(g_Nano103_regs.UART0_UART_BAUD, g_Nano103_regs.UART1_UART_BAUD) e["I2C0_I2C_CTL"], e["I2C1_I2C_CTL"], e["I2C0_I2C_CLKDIV"], e["I2C1_I2C_CLKDIV"]=ice:ReadMemMulti(g_Nano103_regs.I2C0_I2C_CTL, g_Nano103_regs.I2C1_I2C_CTL, g_Nano103_regs.I2C0_I2C_CLKDIV, g_Nano103_regs.I2C1_I2C_CLKDIV) e["SPI0_SPI_CTL"], e["SPI1_SPI_CTL"], e["SPI2_SPI_CTL"], e["SPI3_SPI_CTL"]=ice:ReadMemMulti(g_Nano103_regs.SPI0_SPI_CTL, g_Nano103_regs.SPI1_SPI_CTL, g_Nano103_regs.SPI2_SPI_CTL, g_Nano103_regs.SPI3_SPI_CTL) e["SPI0_SPI_CLKDIV"], e["SPI1_SPI_CLKDIV"], e["SPI2_SPI_CLKDIV"], e["SPI3_SPI_CLKDIV"]=ice:ReadMemMulti(g_Nano103_regs.SPI0_SPI_CLKDIV, g_Nano103_regs.SPI1_SPI_CLKDIV, g_Nano103_regs.SPI2_SPI_CLKDIV, g_Nano103_regs.SPI3_SPI_CLKDIV) e["TMR_TIMER0_CTL"], e["TMR_TIMER1_CTL"], e["TMR_TIMER2_CTL"], e["TMR_TIMER3_CTL"]=ice:ReadMemMulti(g_Nano103_regs.TMR_TIMER0_CTL, g_Nano103_regs.TMR_TIMER1_CTL, g_Nano103_regs.TMR_TIMER2_CTL, g_Nano103_regs.TMR_TIMER3_CTL) e["SC0_SCn_CTL"], e["SC1_SCn_CTL"], e["SC0_SCn_UARTCTL"], e["SC1_SCn_UARTCTL"]=ice:ReadMemMulti(g_Nano103_regs.SC0_SCn_CTL, g_Nano103_regs.SC1_SCn_CTL, g_Nano103_regs.SC0_SCn_UARTCTL, g_Nano103_regs.SC1_SCn_UARTCTL) e["SC0_SCn_ETUCTL"], e["SC1_SCn_ETUCTL"]=ice:ReadMemMulti(g_Nano103_regs.SC0_SCn_ETUCTL, g_Nano103_regs.SC1_SCn_ETUCTL) e["PWM0_CLKSRC"], e["PWM0_CLKPSC0_1"], e["PWM0_CLKPSC2_3"], e["PWM0_CLKPSC4_5"]=ice:ReadMemMulti(g_Nano103_regs.PWM0_CLKSRC, g_Nano103_regs.PWM0_CLKPSC0_1, g_Nano103_regs.PWM0_CLKPSC2_3, g_Nano103_regs.PWM0_CLKPSC4_5) e["PWM0_CNTEN"]=ice:ReadMemMulti(g_Nano103_regs.PWM0_CNTEN) return e end local h={ [0]=kPinDirection_In, [1]=kPinDirection_PushPullOut, [2]=kPinDirection_OpenDrainOut, } local m={ [0]="INPUT", [1]="OUTPUT", [2]="Open-Drain", } function get_HXT_clock(o,a) local e local t table.insert(a,"CLK_PWRCTL") local a=ext.band(o["CLK_PWRCTL"],1) if a==0 then e=0 t="invalid external 4~32M high speed crystal clock (see CLK_PWRCTL[0].HXTEN)" else e=12000000 t="external 4~32M high speed crystal clock, when external input clock is 12M" end return e,t end function get_LXT_clock(a,o) local t local e table.insert(o,"CLK_PWRCTL") local a=ext.band(a["CLK_PWRCTL"],2) if 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 get_HIRC_clock(i,o) local t local e table.insert(o,"CLK_CLKSEL0") local a=ext.band(i["CLK_CLKSEL0"],8) if a==0 then table.insert(o,"CLK_PWRCTL") local a=ext.band(i["CLK_PWRCTL"],4) if a==0 then t=0 e="invalid internal 12~16MHz high speed oscillator clock (see CLK_PWRCTL[2].HIRC0EN)" else table.insert(o,"SYS_RC0TCTL") local a=ext.band(i["SYS_RC0TCTL"],7) if a==0 then t=12000000 e="internal 12MHz high speed oscillator clock" elseif a==1 then t=11059200 e="internal 11.0592MHz high speed oscillator clock (auto trim)" elseif a==2 then t=12000000 e="internal 12MHz high speed oscillator clock (auto trim)" elseif a==3 then t=12288000 e="internal 12.288MHz high speed oscillator clock (auto trim)" elseif a==4 then t=16000000 e="internal 16MHz high speed oscillator clock (auto trim)" else t=0 e="invalid trim frequency selection of internal 12MHz high speed oscillator clock (see SYS_RC0TCTL[2:0].FREQSEL)" end end else table.insert(o,"CLK_PWRCTL") local a=ext.band(i["CLK_PWRCTL"],16777216) if a==0 then t=0 e="invalid internal 36MHz high speed oscillator clock (see CLK_PWRCTL[24].HIRC1EN)" else table.insert(o,"SYS_RC1TCTL") local a=ext.band(i["SYS_RC1TCTL"],7) if a==0 then t=36000000 e="internal 36MHz high speed oscillator clock" elseif a==2 then t=36000000 e="internal 36MHz high speed oscillator trimmed clock" else t=0 e="invalid trim frequency selection of internal 36MHz high speed oscillator clock (see SYS_RC1TCTL[2:0].FREQSEL)" end end end return t,e end function get_LIRC_clock(o,a) local e local t table.insert(a,"CLK_PWRCTL") local a=ext.band(o["CLK_PWRCTL"],8) if a==0 then e=0 t="invalid internal 10kHz low speed oscillator clock (see CLK_PWRCTL[3].LIRCEN)" else e=10000 t="internal 10kHz low speed oscillator clock" end return e,t end function get_MIRC_clock(o,a) local e local t table.insert(a,"CLK_PWRCTL") local a=ext.band(o["CLK_PWRCTL"],33554432) if a==0 then e=0 t="invalid internal 4MHz medium speed oscillator clock (see CLK_PWRCTL[25].MIRCEN)" else e=4000000 t="internal 4MHz medium speed oscillator clock" end return e,t end function get_PLL_clock(a,o) local t local e table.insert(o,"CLK_PLLCTL") if ext.band(a["CLK_PLLCTL"],65536)~=0 then t=0 e="invalid PLL clock, PLL is in power down mode (see CLK_PLLCTL[16].PD)" else local i=ext.rshift(ext.band(a["CLK_PLLCTL"],393216),17) if i==0 then t,e=get_HXT_clock(a,o) elseif i==1 then t,e=get_HIRC_clock(a,o) elseif i==2 then t,e=get_MIRC_clock(a,o) else t=0 e="invalid PLL clock source select (see CLK_PLLCTL[18:17].PLLSRC)" end if t~=0 then local o=ext.rshift(ext.band(a["CLK_PLLCTL"],16128),8) local a=ext.band(a["CLK_PLLCTL"],63) t=t/(o+1)*a if a==0 or a>36 then e="invalid PLL clock (see CLK_PLLCTL[5:0].PLLMLP)" else e=string.format("PLL clock (%sHz), from %s",val2str(t),e) end else e="PLL clock from "..e end end return t,e end function get_sys_clock(a,o,n) local t local e table.insert(o,"CLK_CLKSEL0") local i=ext.band(a["CLK_CLKSEL0"],7) if i==0 then t,e=get_HXT_clock(a,o) elseif i==1 then t,e=get_LXT_clock(a,o) elseif i==2 then t,e=get_PLL_clock(a,o) elseif i==3 then t,e=get_LIRC_clock(a,o) elseif i==4 then t,e=get_HIRC_clock(a,o) else t,e=get_MIRC_clock(a,o) end if t==0 then e=""..n.." clock from "..e else table.insert(o,"CLK_CLKDIV0") local a=ext.band(a["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(t,e) return get_sys_clock(t,e,"HCLK") end function get_PCLK0_clock(o,a) local t local e t,e=get_HCLK_clock(o,a) if t==0 then e="PCLK0 clock from "..e else table.insert(a,"CLK_APBDIV") local a=ext.band(o["CLK_APBDIV"],7) if a<=4 then t=ext.rshift(t,a) end e=string.format("PCLK0 clock (%sHz), from %s",val2str(t),e) end return t,e end function get_PCLK1_clock(o,a) local t local e t,e=get_HCLK_clock(o,a) if t==0 then e="PCLK1 clock from "..e else table.insert(a,"CLK_APBDIV") local a=ext.rshift(ext.band(o["CLK_APBDIV"],112),4) if a<=4 then t=ext.rshift(t,a) end e=string.format("PCLK1 clock (%sHz), from %s",val2str(t),e) end return t,e end function get_clk_informnation(e,t) return reg2str("Clock setting registers",g_Nano103_regs,e,t) end function get_mfp_regs(t,e,a) local e={"SYS_GP"..e.."_MFP"..a} return reg2str("Multi-Function register",g_Nano103_regs,t,e) end function fill_Nano103_GPIO(o,s,a,e) local i="" local t="" local l=string.format("P%s.%d",a,e) o["highlight_text"]=l o["normal_color"]=kColor_Invalid o["highlight_color"]=kColor_GPIO o["pin_bg_color"]=kBgColor_GPIO local n=s["GPIO_P"..a.."_MODE"] local c=s["GPIO_P"..a.."_DINOFF"] local d=s["GPIO_P"..a.."_DOUT"] local u=s["GPIO_P"..a.."_DATMSK"] local r=s["GPIO_P"..a.."_PIN"] local f=s["GPIO_P"..a.."_PUEN"] local n=ext.band(ext.rshift(n,e*2),3) o["direction"]=h[n] if h[n]==kPinDirection_In then if ext.band(r,ext.lshift(1,e))==0 then o["status"]=kPinStatus_Low else o["status"]=kPinStatus_High end elseif h[n]==kPinDirection_PushPullOut or h[n]==kPinDirection_OpenDrainOut then if ext.band(u,ext.lshift(1,e))~=0 then o["status"]=kPinStatus_Unknown elseif ext.band(d,ext.lshift(1,e))==0 then o["status"]=kPinStatus_Low else o["status"]=kPinStatus_High end else i=string.format("GPIO_P%s_MODE[%d:%d] is undefined
",a,e*2+1,e*2) end t=string.format("P%s.%d is in %s mode
", a,e,m[n]) if h[n]==kPinDirection_In then if ext.band(r,ext.lshift(1,e))==0 then t=t.."Pin input low
" else t=t.."Pin input high
" end end if h[n]==kPinDirection_PushPullOut or h[n]==kPinDirection_OpenDrainOut then if ext.band(u,ext.lshift(1,e))~=0 then t=t.."Pin output masked
" elseif ext.band(d,ext.lshift(1,e))==0 then t=t.."Pin output low
" else t=t.."Pin output high
" end end if ext.band(c,ext.lshift(1,e+16))==0 then t=t.."IO digital input path enabled
" else t=t.."IO digital input path disabled(digital input tied to low)
" end if ext.band(ext.rshift(f,e),1)~=0 then o["pullup"]=true t=t.."Pull-up resistor enable
" else o["pullup"]=false t=t.."Pull-up resistor disable
" end if h[n]==kPinDirection_PushPullOut then if ext.band(d,ext.lshift(1,e))==0 and ext.band(r,ext.lshift(1,e))~=0 then i=i..string.format("Leakage warning: GPIO_P%s_DOUT[%d] = 0, GPIO_P%s_PIN[%d] = 1
",a,e,a,e) elseif ext.band(d,ext.lshift(1,e))~=0 and ext.band(r,ext.lshift(1,e))==0 then i=i..string.format("Leakage warning: GPIO_P%s_DOUT[%d] = 1, GPIO_P%s_PIN[%d] = 0
",a,e,a,e) end end local n if e>=0 and e<=7 then n="L" elseif e>=8 and e<=15 then n="H" else i=i.."Bit error, it should be 0~15.
" end if i~=""then o["pin_no_color"]=kBgColor_Error i=""..i.."" end local e={ "GPIO_P"..a.."_MODE", "GPIO_P"..a.."_DINOFF", "GPIO_P"..a.."_DOUT", "GPIO_P"..a.."_DATMSK", "GPIO_P"..a.."_PIN", "GPIO_P"..a.."_PUEN"} local e=reg2str("GPIO setting registers",g_Nano103_regs,s,e) if t~=""then t="Information
"..t end o["information"]=string.format("%s
%s
%s%s%s",l,i, get_mfp_regs(s,a,n),e,t) end function fill_invalid_GPIO(e,i,o,t) e["highlight_text"]=string.format("P%s.%d",o,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 a if t>=0 and t<=7 then a="L" elseif t>=8 and t<=15 then a="H" end local n="Undefined setting in Multi-Function registers for this pin
" e["information"]=string.format("P%s.%d
%s
".. "%s", o,t, n, get_mfp_regs(i,o,a)) end function fill_Nano103_ACMP(e,a,s,n,o) local t="" local i={} e["highlight_text"]=o e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_CMP e["pin_bg_color"]=kBgColor_CMP e["direction"]=kPinDirection_In e["status"]=kPinStatus_Unknown table.insert(i,"CLK_APBCLK") if ext.band(a["CLK_APBCLK"],2048)==0 then t="ACMP clock is not available (see CLK_APBCLK[11].ACMP0CKEN).
" t=""..t.."" e["pin_no_color"]=kBgColor_Error end e["information"]=string.format("%s
%s
%s%s", o, t, get_mfp_regs(a,s,n), get_clk_informnation(a,i)) end function fill_Nano103_ADC(a,e,r,d,h) local n="" local o="" local t={} a["highlight_text"]=h a["normal_color"]=kColor_Invalid a["highlight_color"]=kColor_ADC a["pin_bg_color"]=kBgColor_ADC a["direction"]=kPinDirection_In a["status"]=kPinStatus_Unknown table.insert(t,"CLK_APBCLK") if ext.band(e["CLK_APBCLK"],268435456)~=0 then table.insert(t,"CLK_CLKSEL1") local s=ext.rshift(ext.band(e["CLK_CLKSEL1"],3670016),19) local h=ext.rshift(ext.band(e["CLK_CLKDIV0"],16711680),16) local i local a if s==0 then i,a=get_HXT_clock(e,t) elseif s==1 then i,a=get_LXT_clock(e,t) elseif s==2 then i,a=get_PLL_clock(e,t) elseif s==3 then i,a=get_HIRC_clock(e,t) else i,a=get_HCLK_clock(e,t) end local e=i/(h+1) if e~=0 then table.insert(t,"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_APBCLK[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", h, o, get_mfp_regs(e,r,d), get_clk_informnation(e,t), n) end function fill_Nano103_I2C(t,a,d,r,h,e) local n="" local o="" local i={} t["highlight_text"]=h t["normal_color"]=kColor_Invalid t["highlight_color"]=kColor_I2C t["pin_bg_color"]=kBgColor_I2C t["direction"]=kPinDirection_Unknown t["status"]=kPinStatus_Unknown table.insert(i,"CLK_APBCLK") if ext.band(a["CLK_APBCLK"],ext.lshift(256,e))~=0 then local t=string.format("I2C%d_I2C_CTL",e) local h=string.format("I2C%d_I2C_CLKDIV",e) table.insert(i,t) local t=ext.band(a[t],1) if t~=0 then local s=0 local t="" if e==0 then s,t=get_PCLK0_clock(a,i) elseif e==1 then s,t=get_PCLK1_clock(a,i) end if s~=0 then table.insert(i,h) local a=ext.band(a[h],255) local a=s/(4*(a+1)) n=string.format("I2C%d clock frequency: %sHz, from %s.
",e,val2str(a),t) else o=string.format("I2C%d clock is not available, %s.
",e,t) end else o=string.format("I2C%d controller disabled (see I2C%d_I2C_CTL[0].I2CEN).
",e,e) end else o=string.format("I2C%d clock is not available (see CLK_APBCLK[%d].I2C%dCKEN).
",e,8+e,e) end if o~=""then o=""..o.."" t["pin_no_color"]=kBgColor_Error end if n~=""then n="Information
"..n end t["information"]=string.format( "%s
%s
".. "%s%s%s", h, o, get_mfp_regs(a,d,r), get_clk_informnation(a,i), n) end function fill_Nano103_CLKO(a,e,r,d,h) local n="" local o="" local t={} a["highlight_text"]=h a["normal_color"]=kColor_Invalid a["highlight_color"]=kColor_CLK a["pin_bg_color"]=kBgColor_CLK a["direction"]=kPinDirection_PushPullOut a["status"]=kPinStatus_Unknown table.insert(t,"CLK_APBCLK") if ext.band(e["CLK_APBCLK"],64)~=0 then table.insert(t,"CLK_CLKOCTL") if ext.band(e["CLK_CLKOCTL"],16)~=0 then local i local a table.insert(t,"CLK_CLKSEL2") local s=ext.band(ext.rshift(e["CLK_CLKSEL2"],4),7) if s==0 then i,a=get_HXT_clock(e,t) elseif s==1 then i,a=get_LXT_clock(e,t) elseif s==2 then i,a=get_HCLK_clock(e,t) elseif s==3 then i,a=get_HIRC_clock(e,t) else i,a=get_MIRC_clock(e,t) end local t local s=ext.band(e["CLK_CLKOCTL"],32) if s~=0 then t=i else local e=ext.band(e["CLK_CLKOCTL"],15) t=i/ext.lshift(1,(e+1)) end if t~=0 then n=string.format("Clock output clock frequency: %sHz, from %s.
",val2str(t),a) else o="Clock output clock is not available, "..a..".
" end else o=string.format("Clock output function disabled (see CLK_CLKOCTL[4].CLKOEN).
") end else o="Clock output clock is not available (see CLK_APBCLK[6].CLKOCKEN).
" 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", h, o, get_mfp_regs(e,r,d), get_clk_informnation(e,t), n) end function fill_Nano103_TM(h,e,d,l,r,t,o) local n="" local i="" local a={} local t=ext.lshift(t,1)+o h["highlight_text"]=r h["normal_color"]=kColor_Invalid h["highlight_color"]=kColor_TM h["pin_bg_color"]=kBgColor_TM h["direction"]=kPinDirection_Unknown h["status"]=kPinStatus_Unknown table.insert(a,"CLK_APBCLK") local o=ext.band(e["CLK_APBCLK"],ext.lshift(4,t)) if o~=0 then local o=string.format("TMR_TIMER%d_CTL",t) table.insert(a,o) local o=ext.band(e[o],4096) if o~=0 then n=string.format("Timer%d counting is controlled by external event pin.
",t) else if t==0 then TMR_S=ext.rshift(ext.band(e["CLK_CLKSEL1"],1792),8) table.insert(a,"CLK_CLKSEL1") elseif t==1 then TMR_S=ext.rshift(ext.band(e["CLK_CLKSEL1"],28672),12) table.insert(a,"CLK_CLKSEL1") elseif t==2 then TMR_S=ext.rshift(ext.band(e["CLK_CLKSEL2"],1792),8) table.insert(a,"CLK_CLKSEL2") elseif t==3 then TMR_S=ext.rshift(ext.band(e["CLK_CLKSEL2"],28672),12) table.insert(a,"CLK_CLKSEL2") else i=string.format("Timer%d do not exist.
",t) end local s=0 local o if TMR_S==0 then s,o=get_HXT_clock(e,a) elseif TMR_S==1 then s,o=get_LXT_clock(e,a) elseif TMR_S==2 then s,o=get_LIRC_clock(e,a) elseif TMR_S==3 then n=string.format("Timer%d clock is from external pin.
",t) elseif TMR_S==4 then s,o=get_HIRC_clock(e,a) elseif TMR_S==5 then s,o=get_MIRC_clock(e,a) else s,o=get_HCLK_clock(e,a) end if i==""and n==""then if s~=0 then n=string.format("Timer%d clock frequency: %sHz, from %s
", t,val2str(s),o) else i=string.format("Timer%d clock is not available, %s.
",t,o) end end end else i=string.format("Timer%d clock is disabled (see CLK_APBCLK[%d].TMR%dCKEN).
",t,t+2,t) end if i~=""then i=""..i.."" h["pin_no_color"]=kBgColor_Error end if n~=""then n="Information
"..n end h["information"]=string.format( "%s
%s
".. "%s%s%s", r, i, get_mfp_regs(e,d,l), get_clk_informnation(e,a), n) end function fill_Nano103_SPI(n,t,d,l,r,e) local s="" local h="" local a={} n["highlight_text"]=r n["normal_color"]=kColor_Invalid n["highlight_color"]=kColor_SPI n["pin_bg_color"]=kBgColor_SPI n["direction"]=kPinDirection_Unknown n["status"]=kPinStatus_Unknown table.insert(a,"CLK_APBCLK") if ext.band(t["CLK_APBCLK"],ext.lshift(4096,e))~=0 then local i=0 local o if e==0 or e==2 then table.insert(a,"CLK_CLKSEL1") local e=ext.band(ext.rshift(t["CLK_CLKSEL1"],e+24),3) if e==0 then i,o=get_PLL_clock(t,a) elseif e==1 then i,o=get_HCLK_clock(t,a) elseif e==2 then i,o=get_HXT_clock(t,a) else i,o=get_HIRC_clock(t,a) end elseif e==1 or e==3 then table.insert(a,"CLK_CLKSEL2") local e=ext.band(ext.rshift(t["CLK_CLKSEL2"],e+24-1),3) if e==0 then i,o=get_PLL_clock(t,a) elseif e==1 then i,o=get_HCLK_clock(t,a) elseif e==2 then i,o=get_HXT_clock(t,a) else i,o=get_HIRC_clock(t,a) end end if i~=0 then local n=string.format("SPI%d_SPI_CTL",e) local h=string.format("SPI%d_SPI_CLKDIV",e) table.insert(a,n) local n=ext.band(t[n],262144) if n~=0 then s=string.format("SPI%d is in slave mode.
",e) else s=string.format("SPI%d is in master mode.
",e) table.insert(a,h) local t=ext.band(t[h],255) local t=i/(t+1) s=s..string.format("SPI%d clock frequency: %sHz, from %s.
", e,val2str(t),o) end else h=string.format("SPI%d clock is not available, ",e)..o..".
" end else h=string.format("SPI%d clock is not available (see CLK_APBCLK[%d].SPI%dCKEN).
",e,e+12,e) end if h~=""then h=""..h.."" n["pin_no_color"]=kBgColor_Error end if s~=""then s="Information
"..s end n["information"]=string.format( "%s
%s
".. "%s%s%s", r, h, get_mfp_regs(t,d,l), get_clk_informnation(t,a), s) end function fill_Nano103_SPI_IO(e,o,a,t) local a=string.format("SPI%d_SPI_CTL",a) local a=ext.band(o[a],262144) if a==0 then if t then e["direction"]=kPinDirection_In else e["direction"]=kPinDirection_PushPullOut end else if t then e["direction"]=kPinDirection_PushPullOut else e["direction"]=kPinDirection_In end end end function fill_Nano103_UART(i,e,c,u,l,a) local n="" local o="" local t={} local r=0 i["highlight_text"]=l i["normal_color"]=kColor_Invalid i["highlight_color"]=kColor_UART i["pin_bg_color"]=kBgColor_UART i["direction"]=kPinDirection_Unknown i["status"]=kPinStatus_Unknown function get_uart_baudate(o) local a=string.format("UART%d_UART_BAUD",a) table.insert(t,a) local i=ext.band(e[a],2147483648) local a=ext.band(e[a],65535) local e=0 local t="" if i==0 then e=o/(a+1) t="BRD must > 8" else e=o/(16*(a+1)) end return e,t end table.insert(t,"CLK_APBCLK") if ext.band(e["CLK_APBCLK"],ext.lshift(65536,a))~=0 then local s=0 local d=0 if a==0 then table.insert(t,"CLK_CLKSEL1") s=ext.band(e["CLK_CLKSEL1"],7) d=ext.band(ext.rshift(e["CLK_CLKDIV0"],8),15) elseif a==1 then table.insert(t,"CLK_CLKSEL2") s=ext.band(e["CLK_CLKSEL2"],7) d=ext.band(ext.rshift(e["CLK_CLKDIV0"],12),15) end local h local i if s==0 then h,i=get_HXT_clock(e,t) elseif s==1 then h,i=get_LXT_clock(e,t) elseif s==2 then h,i=get_PLL_clock(e,t) elseif s==3 then h,i=get_HIRC_clock(e,t) else h,i=get_MIRC_clock(e,t) end r=h/(d+1) if r~=0 then table.insert(t,"CLK_CLKDIV0") n=string.format("UART%d clock frequency: %sHz, from %s.
",a,val2str(r),i) else o=string.format("UART%d clock is not available, %s.
",a,i) end else o=string.format("UART%d clock is not available (see CLK_APBCLK[%d].UART%dCKEN).
", a,a+16,a) end if o==""then local e,t=get_uart_baudate(r) if e~=0 then n=n..string.format("UART baudrate: %d
",e) elseif t~=""then o=t..".
" end end if o~=""then o=""..o.."" i["pin_no_color"]=kBgColor_Error end if n~=""then n="Information
"..n end i["information"]=string.format( "%s
%s
".. "%s%s%s", l, o, get_mfp_regs(e,c,u), get_clk_informnation(e,t), n) end function fill_Nano103_SC(n,t,u,c,l,e) local i="" local o="" local a={} local r=0 n["highlight_text"]=l n["normal_color"]=kColor_Invalid n["highlight_color"]=kColor_SC n["pin_bg_color"]=kBgColor_SC n["direction"]=kPinDirection_PushPullOut n["status"]=kPinStatus_Unknown table.insert(a,"CLK_APBCLK") local s=ext.band(t["CLK_APBCLK"],ext.lshift(1073741824,e)) if s~=0 then local d=string.format("SC%d_SCn_CTL",e) table.insert(a,d) if ext.band(t[d],1)~=0 then table.insert(a,"CLK_CLKSEL2") local h=ext.band(ext.rshift(t["CLK_CLKSEL2"],16+4*e),7) local s local n if h==0 then s,n=get_HXT_clock(t,a) elseif h==1 then s,n=get_PLL_clock(t,a) elseif h==2 then s,n=get_HIRC_clock(t,a) elseif h==3 then s,n=get_MIRC_clock(t,a) else s,n=get_HCLK_clock(t,a) end local h if e==0 then h=ext.rshift(ext.band(t["CLK_CLKDIV0"],4026531840),28) table.insert(a,"CLK_CLKDIV0") elseif e==1 then h=ext.band(t["CLK_CLKDIV1"],15) table.insert(a,"CLK_CLKDIV1") else o=string.format("SC%d do not exist.
",e) end if o==""then r=s/(h+1) if r~=0 then i=string.format("SC%d clock frequency: %sHz, from %s.
",e,val2str(r),n) else o=string.format("SC%d clock is not available, ",e)..n..".
" end end else o=string.format("SC%d engine disable (see %s[0].SCEN).
",e,d) end else o=string.format("SC%d clock is not available (see CLK_APBCLK[%d].SC%dCKEN).
",e,e+30,e) end if o==""then local o=string.format("SC%d_SCn_UARTCTL",e) local n=string.format("SC%d_SCn_ETUCTL",e) table.insert(a,o) table.insert(a,n) local a=ext.band(t[n],4095) local a=r/(a+1) if ext.band(t[o],1)~=0 then i=string.format("SC%d is in UART mode.
",e)..i ..string.format("UART baudrate: %d
",a) else i=string.format("SC%d is in Smart Card mode.
",e)..i end end if o~=""then o=""..o.."" n["pin_no_color"]=kBgColor_Error end if i~=""then i="Information
"..i end n["information"]=string.format("%s
%s
%s%s%s", l, o, get_mfp_regs(t,u,c), get_clk_informnation(t,a), i) end function fill_Nano103_PWM(o,a,u,c,l,t,e) local s="" local n="" local i={} o["highlight_text"]=l 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 e~=nil then local e=ext.rshift(e,1) table.insert(i,"CLK_APBCLK") local o=ext.band(a["CLK_APBCLK"],ext.lshift(1048576,t)) if o~=0 then local o local h table.insert(i,"CLK_CLKSEL1") local r=ext.band(ext.rshift(a["CLK_CLKSEL1"],t+4),1) if r==0 then o,h=get_PLL_clock(a,i) else o,h=get_PCLK0_clock(a,i) end local r=string.format("PWM%d_CNTEN",t) table.insert(i,r) local r=ext.band(ext.rshift(a[r],2*e),1) if r==0 then n=string.format("PWM%d counter%d_%d stops running.
",t,2*e,2*e+1) else local r=string.format("PWM%d_CLKSRC",t) local d=string.format("PWM%d_CLKPSC%d_%d",t,2*e,2*e+1) table.insert(i,r) local r=ext.band(ext.rshift(a[r],8*e),7) if r==0 then if o==0 then n=string.format("PWM%d clock is not available, %s.
",t,h) else table.insert(i,d) local a=ext.band(a[d],4095) local a=o/(a+1) s=string.format("PWM%d clock frequency: %sHz, from %s.
", t,val2str(o),h) s=s..string.format("PWM%d counter%d_%d frequency: %sHz (Pre-Scaled)
", t,2*e,2*e+1,val2str(a)) end elseif r<=4 then s=string.format("PWM%d_CH%d%d clock source is from TIMER%d.
", t,2*e,2*e+1,r-1) else n=string.format("PWM%d_CH%d%d clock source is undefined (see PWM_CLKSRC[%d:%d].ECLKSRC%d).
", t,2*e,2*e+1,8*e+2,8*e,2*e) end end else n=string.format("PWM%d clock is not available (see CLK_APBCLK[%d].PWM%dCKEN).
", t,20+t,t) end end if n~=""then n=""..n.."" o["pin_no_color"]=kBgColor_Error end if s~=""then s="Information
"..s end o["information"]=string.format( "%s
%s
".. "%s%s%s", l, n, get_mfp_regs(a,u,c), get_clk_informnation(a,i), s) end function fill_Nano103_Normal(e,n,a,o,t) local i="" 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 i=t.."
" if a==nil or o==nil then e["information"]=string.format( "%s
", t) else e["information"]=string.format( "%s

".. "%s", t, get_mfp_regs(n,a,o)) end end