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_IVSCTL=1073741852, SYS_SYS_PORCTL=1073741860, SYS_SYS_VREFCTL=1073741864, SYS_SYS_USBPHY=1073741868, 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_SRAM_INTCTL=1073742016, SYS_SYS_SRAM_STATUS=1073742020, SYS_SYS_SRAM_ERRADDR=1073742024, SYS_SYS_SRAM_BISTCTL=1073742032, SYS_SYS_SRAM_BISTSTS=1073742036, SYS_SYS_IRCTCTL=1073742064, SYS_SYS_IRCTIEN=1073742068, SYS_SYS_IRCTISTS=1073742072, SYS_SYS_REGLCTL=1073742080, 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_CLKDIV1=1073742372, 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, 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_PA_SMTEN=1073758244, GPIO_PA_SLEWCTL=1073758248, 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_PB_SMTEN=1073758308, GPIO_PB_SLEWCTL=1073758312, 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_PC_SMTEN=1073758372, GPIO_PC_SLEWCTL=1073758376, 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_PD_SMTEN=1073758436, GPIO_PD_SLEWCTL=1073758440, 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_PE_SMTEN=1073758500, GPIO_PE_SLEWCTL=1073758504, GPIO_PE_DRVCTL=1073758508, 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_PF_SMTEN=1073758564, GPIO_PF_SLEWCTL=1073758568, GPIO_GPIO_DBCTL=1073759296, GPIO_PA0_PDIO=1073760256, GPIO_PA1_PDIO=1073760260, GPIO_PA2_PDIO=1073760264, GPIO_PA3_PDIO=1073760268, GPIO_PA4_PDIO=1073760272, GPIO_PA5_PDIO=1073760276, GPIO_PA6_PDIO=1073760280, GPIO_PA7_PDIO=1073760284, GPIO_PA8_PDIO=1073760288, GPIO_PA9_PDIO=1073760292, GPIO_PA10_PDIO=1073760296, GPIO_PA11_PDIO=1073760300, GPIO_PA12_PDIO=1073760304, GPIO_PA13_PDIO=1073760308, GPIO_PA14_PDIO=1073760312, GPIO_PA15_PDIO=1073760316, GPIO_PB0_PDIO=1073760320, GPIO_PB1_PDIO=1073760324, GPIO_PB2_PDIO=1073760328, GPIO_PB3_PDIO=1073760332, GPIO_PB3_PDIO=1073760332, GPIO_PB4_PDIO=1073760336, GPIO_PB5_PDIO=1073760340, GPIO_PB6_PDIO=1073760344, GPIO_PB7_PDIO=1073760348, GPIO_PB8_PDIO=1073760352, GPIO_PB9_PDIO=1073760356, GPIO_PB10_PDIO=1073760360, GPIO_PB11_PDIO=1073760364, GPIO_PB12_PDIO=1073760368, GPIO_PB13_PDIO=1073760372, GPIO_PB14_PDIO=1073760376, GPIO_PB15_PDIO=1073760380, GPIO_PC0_PDIO=1073760384, GPIO_PC1_PDIO=1073760388, GPIO_PC2_PDIO=1073760392, GPIO_PC3_PDIO=1073760396, GPIO_PC4_PDIO=1073760400, GPIO_PC5_PDIO=1073760404, GPIO_PC6_PDIO=1073760408, GPIO_PC7_PDIO=1073760412, GPIO_PC8_PDIO=1073760416, GPIO_PC9_PDIO=1073760420, GPIO_PC10_PDIO=1073760424, GPIO_PC11_PDIO=1073760428, GPIO_PC12_PDIO=1073760432, GPIO_PC13_PDIO=1073760436, GPIO_PC14_PDIO=1073760440, GPIO_PC15_PDIO=1073760444, GPIO_PD0_PDIO=1073760448, GPIO_PD1_PDIO=1073760452, GPIO_PD2_PDIO=1073760456, GPIO_PD3_PDIO=1073760460, GPIO_PD4_PDIO=1073760464, GPIO_PD5_PDIO=1073760468, GPIO_PD6_PDIO=1073760472, GPIO_PD7_PDIO=1073760476, GPIO_PD8_PDIO=1073760480, GPIO_PD9_PDIO=1073760484, GPIO_PD10_PDIO=1073760488, GPIO_PD11_PDIO=1073760492, GPIO_PD12_PDIO=1073760496, GPIO_PD13_PDIO=1073760500, GPIO_PD14_PDIO=1073760504, GPIO_PD15_PDIO=1073760508, GPIO_PE0_PDIO=1073760512, GPIO_PE1_PDIO=1073760516, GPIO_PE2_PDIO=1073760520, GPIO_PE3_PDIO=1073760524, GPIO_PE4_PDIO=1073760528, GPIO_PE5_PDIO=1073760532, GPIO_PE6_PDIO=1073760536, GPIO_PE7_PDIO=1073760540, GPIO_PE8_PDIO=1073760544, GPIO_PE9_PDIO=1073760548, GPIO_PE10_PDIO=1073760552, GPIO_PE11_PDIO=1073760556, GPIO_PE12_PDIO=1073760560, GPIO_PE13_PDIO=1073760564, GPIO_PE14_PDIO=1073760568, GPIO_PF0_PDIO=1073760576, GPIO_PF1_PDIO=1073760580, GPIO_PF2_PDIO=1073760584, GPIO_PF3_PDIO=1073760588, GPIO_PF4_PDIO=1073760592, GPIO_PF5_PDIO=1073760596, GPIO_PF6_PDIO=1073760600, GPIO_PF7_PDIO=1073760604, 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_LINCTL=1074200628, UART0_UART_LINSTS=1074200632, 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_LINCTL=1074204724, UART1_UART_LINSTS=1074204728, 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_LINCTL=1074208820, UART2_UART_LINSTS=1074208824, 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_LINCTL=1074212916, UART3_UART_LINSTS=1074212920, SPI0_SPI_CTL=1074135040, SPI0_SPI_CLKDIV=1074135044, SPI0_SPI_SSCTL=1074135048, SPI0_SPI_PDMACTL=1074135052, SPI0_SPI_FIFOCTL=1074135056, SPI0_SPI_STATUS=1074135060, SPI0_SPI_TX=1074135072, SPI0_SPI_RX=1074135088, SPI0_SPI_I2SCTL=1074135136, SPI0_SPI_I2SCLK=1074135140, SPI0_SPI_I2SSTS=1074135144, SPI1_SPI_CTL=1074139136, SPI1_SPI_CLKDIV=1074139140, SPI1_SPI_SSCTL=1074139144, SPI1_SPI_PDMACTL=1074139148, SPI1_SPI_FIFOCTL=1074139152, SPI1_SPI_STATUS=1074139156, SPI1_SPI_TX=1074139168, SPI1_SPI_RX=1074139184, SPI1_SPI_I2SCTL=1074139232, SPI1_SPI_I2SCLK=1074139236, SPI1_SPI_I2SSTS=1074139240, SPI2_SPI_CTL=1074143232, SPI2_SPI_CLKDIV=1074143236, SPI2_SPI_SSCTL=1074143240, SPI2_SPI_PDMACTL=1074143244, SPI2_SPI_FIFOCTL=1074143248, SPI2_SPI_STATUS=1074143252, SPI2_SPI_TX=1074143264, SPI2_SPI_RX=1074143280, SPI2_SPI_I2SCTL=1074143328, SPI2_SPI_I2SCLK=1074143332, SPI2_SPI_I2SSTS=1074143336, TK_TK_CTL=1074667520, TK_TK_REFCTL=1074667524, TK_TK_CCBDAT0=1074667528, TK_TK_CCBDAT1=1074667532, TK_TK_CCBDAT2=1074667536, TK_TK_CCBDAT3=1074667540, TK_TK_CCBDAT4=1074667544, TK_TK_IDLESEL=1074667548, TK_TK_POLSEL=1074667552, TK_TK_POLCTL=1074667556, TK_TK_STATUS=1074667560, TK_TK_DAT0=1074667564, TK_TK_DAT1=1074667568, TK_TK_DAT2=1074667572, TK_TK_DAT3=1074667576, TK_TK_DAT4=1074667580, TK_TK_INTEN=1074667584, TK_TK_TH0_1=1074667588, TK_TK_TH2_3=1074667592, TK_TK_TH4_5=1074667596, TK_TK_TH6_7=1074667600, TK_TK_TH8_9=1074667604, TK_TK_TH10_11=1074667608, TK_TK_TH12_13=1074667612, TK_TK_TH14_15=1074667616, TK_TK_TH16=1074667620, PWM0_PWM_CTL0=1074102272, PWM0_PWM_CTL1=1074102276, PWM0_PWM_SYNC=1074102280, PWM0_PWM_SWSYNC=1074102284, PWM0_PWM_CLKSRC=1074102288, PWM0_PWM_CLKPSC0=1074102292, PWM0_PWM_CLKPSC2=1074102296, PWM0_PWM_CLKPSC4=1074102300, PWM0_PWM_CNTEN=1074102304, PWM0_PWM_CNTCLR=1074102308, PWM0_PWM_LOAD=1074102312, PWM0_PWM_PERIOD0=1074102320, PWM0_PWM_PERIOD1=1074102324, PWM0_PWM_PERIOD2=1074102328, PWM0_PWM_PERIOD3=1074102332, PWM0_PWM_PERIOD4=1074102336, PWM0_PWM_PERIOD5=1074102340, 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_PHS0_1=1074102400, PWM0_PWM_PHS2_3=1074102404, PWM0_PWM_PHS4_5=1074102408, PWM0_PWM_CNT0=1074102416, PWM0_PWM_CNT1=1074102420, PWM0_PWM_CNT2=1074102424, PWM0_PWM_CNT3=1074102428, PWM0_PWM_CNT4=1074102432, PWM0_PWM_CNT5=1074102436, 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_IFA=1074102512, PWM0_PWM_DACTRGEN=1074102516, PWM0_PWM_EADCTS0=1074102520, PWM0_PWM_EADCTS1=1074102524, PWM0_PWM_FTCMPDAT0_1=1074102528, PWM0_PWM_FTCMPDAT2_3=1074102532, PWM0_PWM_FTCMPDAT4_5=1074102536, 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_PBUF1=1074103048, PWM0_PWM_PBUF2=1074103052, PWM0_PWM_PBUF3=1074103056, PWM0_PWM_PBUF4=1074103060, PWM0_PWM_PBUF5=1074103064, PWM0_PWM_CMPBUF0=1074103068, PWM0_PWM_CMPBUF1=1074103072, PWM0_PWM_CMPBUF2=1074103076, PWM0_PWM_CMPBUF3=1074103080, PWM0_PWM_CMPBUF4=1074103084, PWM0_PWM_CMPBUF5=1074103088, PWM0_PWM_FTCBUF0_1=1074103104, PWM0_PWM_FTCBUF2_3=1074103108, PWM0_PWM_FTCBUF4_5=1074103112, PWM0_PWM_FTCI=1074103116, PWM1_PWM_CTL0=1074106368, PWM1_PWM_CTL1=1074106372, PWM1_PWM_SYNC=1074106376, PWM1_PWM_SWSYNC=1074106380, PWM1_PWM_CLKSRC=1074106384, PWM1_PWM_CLKPSC0=1074106388, PWM1_PWM_CLKPSC2=1074106392, PWM1_PWM_CLKPSC4=1074106396, PWM1_PWM_CNTEN=1074106400, PWM1_PWM_CNTCLR=1074106404, PWM1_PWM_LOAD=1074106408, PWM1_PWM_PERIOD0=1074106416, PWM1_PWM_PERIOD1=1074106420, PWM1_PWM_PERIOD2=1074106424, PWM1_PWM_PERIOD3=1074106428, PWM1_PWM_PERIOD4=1074106432, PWM1_PWM_PERIOD5=1074106436, 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_PHS0_1=1074106496, PWM1_PWM_PHS2_3=1074106500, PWM1_PWM_PHS4_5=1074106504, PWM1_PWM_CNT0=1074106512, PWM1_PWM_CNT1=1074106516, PWM1_PWM_CNT2=1074106520, PWM1_PWM_CNT3=1074106524, PWM1_PWM_CNT4=1074106528, PWM1_PWM_CNT5=1074106532, 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_IFA=1074106608, PWM1_PWM_DACTRGEN=1074106612, PWM1_PWM_EADCTS0=1074106616, PWM1_PWM_EADCTS1=1074106620, PWM1_PWM_FTCMPDAT0_1=1074106624, PWM1_PWM_FTCMPDAT2_3=1074106628, PWM1_PWM_FTCMPDAT4_5=1074106632, 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_PBUF1=1074107144, PWM1_PWM_PBUF2=1074107148, PWM1_PWM_PBUF3=1074107152, PWM1_PWM_PBUF4=1074107156, PWM1_PWM_PBUF5=1074107160, PWM1_PWM_CMPBUF0=1074107164, PWM1_PWM_CMPBUF1=1074107168, PWM1_PWM_CMPBUF2=1074107172, PWM1_PWM_CMPBUF3=1074107176, PWM1_PWM_CMPBUF4=1074107180, PWM1_PWM_CMPBUF5=1074107184, PWM1_PWM_FTCBUF0_1=1074107200, PWM1_PWM_FTCBUF2_3=1074107204, PWM1_PWM_FTCBUF4_5=1074107208, PWM1_PWM_FTCI=1074107212, I2C0_I2C_CTL=1074266112, I2C0_I2C_ADDR0=1074266116, I2C0_I2C_DAT=1074266120, I2C0_I2C_STATUS=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_BUSCTL=1074266180, I2C0_I2C_BUSTCTL=1074266184, I2C0_I2C_BUSSTS=1074266188, I2C0_I2C_PKTSIZE=1074266192, I2C0_I2C_PKTCRC=1074266196, I2C0_I2C_BUSTOUT=1074266200, I2C0_I2C_CLKTOUT=1074266204, I2C1_I2C_CTL=1074270208, I2C1_I2C_ADDR0=1074270212, I2C1_I2C_DAT=1074270216, I2C1_I2C_STATUS=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_BUSCTL=1074270276, I2C1_I2C_BUSTCTL=1074270280, I2C1_I2C_BUSSTS=1074270284, I2C1_I2C_PKTSIZE=1074270288, I2C1_I2C_PKTCRC=1074270292, I2C1_I2C_BUSTOUT=1074270296, I2C1_I2C_CLKTOUT=1074270300, 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, SC0_SC_CTL=1074331652, SC0_SC_ETUCTL=1074331668, SC0_SC_UARTCTL=1074331700, EBI_EBI_CTL0=1073807360, EBI_EBI_CTL1=1073807376, CAN0_CAN_BTIME=1074397196, CAN0_CAN_BRPE=1074397208, } g_M451_regs=REG function read_M451_Registers(e,e,e,e) 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_M451_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"]=ice:ReadMem32(g_M451_regs.SYS_SYS_GPD_MFPL,5) e["SYS_SYS_IRCTCTL"]=ice:ReadMem32(g_M451_regs.SYS_SYS_IRCTCTL) 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"], e["CLK_CLK_CLKDIV1"]=ice:ReadMem32(g_M451_regs.CLK_CLK_PWRCTL,10) e["CLK_CLK_PLLCTL"], e["CLK_CLK_CLKOCTL"]=ice:ReadMemMulti(g_M451_regs.CLK_CLK_PLLCTL, g_M451_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_M451_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_M451_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_M451_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_M451_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_M451_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_M451_regs.GPIO_PF_MODE,5) e["GPIO_PA_SLEWCTL"], e["GPIO_PB_SLEWCTL"], e["GPIO_PC_SLEWCTL"], e["GPIO_PD_SLEWCTL"]=ice:ReadMemMulti(g_M451_regs.GPIO_PA_SLEWCTL, g_M451_regs.GPIO_PB_SLEWCTL, g_M451_regs.GPIO_PC_SLEWCTL, g_M451_regs.GPIO_PD_SLEWCTL) e["GPIO_PE_SLEWCTL"], e["GPIO_PF_SLEWCTL"]=ice:ReadMemMulti(g_M451_regs.GPIO_PE_SLEWCTL, g_M451_regs.GPIO_PF_SLEWCTL) e["UART0_UART_BAUD"], e["UART1_UART_BAUD"], e["UART2_UART_BAUD"], e["UART3_UART_BAUD"]=ice:ReadMemMulti(g_M451_regs.UART0_UART_BAUD, g_M451_regs.UART1_UART_BAUD, g_M451_regs.UART2_UART_BAUD, g_M451_regs.UART3_UART_BAUD) e["SPI0_SPI_CTL"], e["SPI1_SPI_CTL"], e["SPI2_SPI_CTL"]=ice:ReadMemMulti(g_M451_regs.SPI0_SPI_CTL, g_M451_regs.SPI1_SPI_CTL, g_M451_regs.SPI2_SPI_CTL) e["SPI0_SPI_CLKDIV"], e["SPI1_SPI_CLKDIV"], e["SPI2_SPI_CLKDIV"]=ice:ReadMemMulti(g_M451_regs.SPI0_SPI_CLKDIV, g_M451_regs.SPI1_SPI_CLKDIV, g_M451_regs.SPI2_SPI_CLKDIV) e["SPI1_SPI_I2SCTL"], e["SPI2_SPI_I2SCTL"], e["SPI1_SPI_I2SCLK"], e["SPI2_SPI_I2SCLK"]=ice:ReadMemMulti(g_M451_regs.SPI1_SPI_I2SCTL, g_M451_regs.SPI2_SPI_I2SCTL, g_M451_regs.SPI1_SPI_I2SCLK, g_M451_regs.SPI2_SPI_I2SCLK) e["PWM0_PWM_CLKSRC"], e["PWM1_PWM_CLKSRC"]=ice:ReadMemMulti(g_M451_regs.PWM0_PWM_CLKSRC, g_M451_regs.PWM1_PWM_CLKSRC) e["PWM0_PWM_CLKPSC0"], e["PWM0_PWM_CLKPSC2"], e["PWM0_PWM_CLKPSC4"]=ice:ReadMem32(g_M451_regs.PWM0_PWM_CLKPSC0,3) e["PWM1_PWM_CLKPSC0"], e["PWM1_PWM_CLKPSC2"], e["PWM1_PWM_CLKPSC4"]=ice:ReadMem32(g_M451_regs.PWM1_PWM_CLKPSC0,3) e["PWM0_PWM_CNTEN"], e["PWM1_PWM_CNTEN"]=ice:ReadMemMulti(g_M451_regs.PWM0_PWM_CNTEN, g_M451_regs.PWM1_PWM_CNTEN) e["I2C0_I2C_CTL"], e["I2C0_I2C_CLKDIV"], e["I2C1_I2C_CTL"], e["I2C1_I2C_CLKDIV"]=ice:ReadMemMulti(g_M451_regs.I2C0_I2C_CTL, g_M451_regs.I2C0_I2C_CLKDIV, g_M451_regs.I2C1_I2C_CTL, g_M451_regs.I2C1_I2C_CLKDIV) e["TMR01_TIMER0_CTL"], e["TMR01_TIMER1_CTL"], e["TMR23_TIMER2_CTL"], e["TMR23_TIMER3_CTL"]=ice:ReadMemMulti(g_M451_regs.TMR01_TIMER0_CTL, g_M451_regs.TMR01_TIMER1_CTL, g_M451_regs.TMR23_TIMER2_CTL, g_M451_regs.TMR23_TIMER3_CTL) e["SC0_SC_UARTCTL"], e["SC0_SC_ETUCTL"], e["SC0_SC_CTL"]=ice:ReadMemMulti(g_M451_regs.SC0_SC_UARTCTL, g_M451_regs.SC0_SC_ETUCTL, g_M451_regs.SC0_SC_CTL) e["EBI_EBI_CTL0"], e["EBI_EBI_CTL1"]=ice:ReadMemMulti(g_M451_regs.EBI_EBI_CTL0, g_M451_regs.EBI_EBI_CTL1) e["CAN0_CAN_BTIME"], e["CAN0_CAN_BRPE"]=ice:ReadMemMulti(g_M451_regs.CAN0_CAN_BTIME, g_M451_regs.CAN0_CAN_BRPE) return e end local n={ [0]=kPinDirection_In, [1]=kPinDirection_PushPullOut, [2]=kPinDirection_OpenDrainOut, [3]=kPinDirection_Bi, } local u={ [0]="INPUT", [1]="OUTPUT", [2]="Open-Drain", [3]="Quasi-bidirectional", } function get_mfp_regs(a,o,t) local e if t>=0 and t<=7 then e="L" else e="H" end local e={"SYS_SYS_GP"..o.."_MFP"..e} return reg2str("Multi-Function register",g_M451_regs,a,e) end function get_clk_informnation(e,t) return reg2str("Clock setting registers",g_M451_regs,e,t) end function get_OSC10K_clock(o,a) local t local e table.insert(a,"CLK_CLK_PWRCTL") local a=ext.band(o["CLK_CLK_PWRCTL"],8) if a==0 then t=0 e="invalid internal 10kHz low speed oscillator clock (see CLK_PWRCTL[3].LIRCEN)" else t=10000 e="internal 10kHz low speed oscillator clock" end return t,e end function get_OSC22M_clock(o,a) local e local t table.insert(a,"CLK_CLK_PWRCTL") local i=ext.band(o["CLK_CLK_PWRCTL"],4) if i==0 then e=0 t="invalid internal 22.1184MHz high speed oscillator clock (see CLK_PWRCTL[2].HIRCEN)" else table.insert(a,"SYS_SYS_IRCTCTL") local a=ext.band(o["SYS_SYS_IRCTCTL"],3) if a==0 then e=22118400 t="internal 22.1184MHz high speed oscillator clock" elseif a==1 then e=22118400 t="internal 22.1184MHz high speed oscillator clock (auto trim)" elseif a==2 then e=24000000 t="internal 24MHz high speed oscillator clock (auto trim)" else e=0 t="invalid HIRC trim frequency selection (see SYS_IRCTCTL[1:0].FREQSEL)" end end return e,t end function get_XTL32K_clock(a,o) local t local e table.insert(o,"CLK_CLK_PWRCTL") local a=ext.band(a["CLK_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_XTL12M_clock(o,a) local e local t table.insert(a,"CLK_CLK_PWRCTL") local a=ext.band(o["CLK_CLK_PWRCTL"],1) if a==0 then e=0 t="invalid external 4~24M high speed crystal clock (see CLK_PWRCTL[0].HXTEN)" else e=12000000 t="external 4~24M high speed crystal clock, when external input clock is 12M" end return e,t end function get_PLL_clock(a,o) local t local e table.insert(o,"CLK_CLK_PLLCTL") if ext.band(a["CLK_CLK_PLLCTL"],65536)~=0 then t=0 e="invalid PLL clock, PLL is in Power-down mode (see CLK_PLLCTL[16].PD)" else if ext.band(a["CLK_CLK_PLLCTL"],524288)~=0 then t,e=get_OSC22M_clock(a,o) else t,e=get_XTL12M_clock(a,o) end if t~=0 then if ext.band(a["CLK_CLK_PLLCTL"],131072)~=0 then e=string.format("PLL clock (%sHz), bypassed from %s",val2str(t),e) else local o=ext.band(a["CLK_CLK_PLLCTL"],511)+2 local i=ext.rshift(ext.band(a["CLK_CLK_PLLCTL"],15872),9)+2 local n={1,2,2,4} local a=n[ext.rshift(ext.band(a["CLK_CLK_PLLCTL"],49152),14)+1] t=t*o/i/a 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(o,a,n) table.insert(a,"CLK_CLK_CLKSEL0") local i=ext.band(o["CLK_CLK_CLKSEL0"],7) local t local e if i==0 then t,e=get_XTL12M_clock(o,a) elseif i==1 then t,e=get_XTL32K_clock(o,a) elseif i==2 then t,e=get_PLL_clock(o,a) elseif i==3 then t,e=get_OSC10K_clock(o,a) elseif i==7 then t,e=get_OSC22M_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(t,e,a) if a==0 then return get_PCLK0_clock(t,e) else return get_PCLK1_clock(t,e) end end function get_PCLK0_clock(o,a) local e local t e,t=get_HCLK_clock(o,a) if e==0 then t="PCLK0 clock from "..t else table.insert(a,"CLK_CLK_CLKSEL0") local a=ext.rshift(ext.band(o["CLK_CLK_CLKSEL0"],64),6) if a==1 then e=e/2 end t=string.format("PCLK0 clock (%sHz), from %s",val2str(e),t) end return e,t end function get_PCLK1_clock(a,o) local t local e t,e=get_HCLK_clock(a,o) if t==0 then e="PCLK1 clock from "..e else table.insert(o,"CLK_CLK_CLKSEL0") local a=ext.rshift(ext.band(a["CLK_CLK_CLKSEL0"],128),7) if a==1 then t=t/2 end e=string.format("PCLK1 clock (%sHz), from %s",val2str(t),e) end return t,e end function fill_M451_GPIO(o,s,a,e,l) if l==nil then l=string.format("P%s.%d",a,e)end local t=s["GPIO_P"..a.."_MODE"] local m=s["GPIO_P"..a.."_DINOFF"] local r=s["GPIO_P"..a.."_DOUT"] local h=s["GPIO_P"..a.."_DATMSK"] local d=s["GPIO_P"..a.."_PIN"] local c=s["GPIO_P"..a.."_SLEWCTL"] 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(t,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 t=string.format("P%s.%d is in %s mode
", a,e,u[i]) if n[i]==kPinDirection_In or n[i]==kPinDirection_Bi then if ext.band(d,ext.lshift(1,e))==0 then t=t.."Pin input low
" else t=t.."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 t=t.."Pin output masked
" elseif ext.band(r,ext.lshift(1,e))==0 then t=t.."Pin output low
" else t=t.."Pin output high
" end end if ext.band(m,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(c,ext.lshift(1,e))==0 then t=t.."IO output with basic slew rate
" else t=t.."IO output with higher slew rate
" 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
",a,e,a,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
",a,e,a,e) end end if h~=""then o["pin_no_color"]=kBgColor_Error h=""..h.."" end local i={ "GPIO_P"..a.."_MODE", "GPIO_P"..a.."_DINOFF", "GPIO_P"..a.."_DOUT", "GPIO_P"..a.."_DATMSK", "GPIO_P"..a.."_PIN", "GPIO_P"..a.."_SLEWCTL"} local i=reg2str("GPIO setting registers",g_M451_regs,s,i) o["information"]=string.format( "%s
%s
".. "%s%s".. "Information
".. "%s", l, h, get_mfp_regs(s,a,e), i, t) 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_M451_ADC(e,o,h,r,s) local a="" local t="" local i={} e["highlight_text"]=s e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_ADC e["pin_bg_color"]=kBgColor_ADC e["direction"]=kPinDirection_In e["status"]=kPinStatus_Unknown table.insert(i,"CLK_CLK_APBCLK0") if ext.band(o["CLK_CLK_APBCLK0"],268435456)~=0 then local n local e n,e=get_PCLK_clock(o,i,1) local o=ext.rshift(ext.band(o["CLK_CLK_CLKDIV0"],16711680),16) local o=n/(o+1) if o~=0 then table.insert(i,"CLK_CLK_CLKDIV0") a=string.format("EADC clock frequency: %sHz, from %s.
",val2str(o),e) else t="EADC clock is not available, "..e..".
" end else t="EADC clock is not available (see CLK_APBCLK0[28].EADCCKEN).
" end if t~=""then t=""..t.."" e["pin_no_color"]=kBgColor_Error end if a~=""then a="Information
"..a end e["information"]=string.format( "%s
%s
%s%s%s", s, t, get_mfp_regs(o,h,r), get_clk_informnation(o,i), a) end function fill_M451_USB(e,i,a,o,t) local n="" local n="" local n={} e["highlight_text"]=t e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_USB e["pin_bg_color"]=kBgColor_USB 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_M451_CAN(t,e,d,r,h,a) local n="" local o="" local i={} t["highlight_text"]=h t["normal_color"]=kColor_Invalid t["highlight_color"]=kColor_CAN t["pin_bg_color"]=kBgColor_CAN t["status"]=kPinStatus_Unknown function get_can_bitrate(n,a) local t=string.format("CAN%d_CAN_BTIME",a) local a=string.format("CAN%d_CAN_BRPE",a) table.insert(i,t) table.insert(i,a) local i=ext.band(ext.rshift(e[t],8),15) local o=ext.band(ext.rshift(e[t],12),7) local e= ext.bor(ext.band(e[t],63), ext.lshift(ext.band(e[a],15),6)) local e=n/(e+1)/(i+o+3) return e end table.insert(i,"CLK_CLK_APBCLK0") if ext.band(e["CLK_CLK_APBCLK0"],ext.lshift(16777216,a))~=0 then local t local s t,s=get_PCLK_clock(e,i,0) if t~=0 then local e=get_can_bitrate(t,a) n=string.format("CAN baudrate: %s, from %s.
",val2str(e),s) else o=string.format("CAN%d clock is not available, %s.
",a,s) end else o=string.format("CAN%d clock is not available (see CLK_APBCLK0[%d].CAN%dCKEN).
", a,a+24,a) 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(e,d,r), get_clk_informnation(e,i), n) end function fill_M451_UART(o,e,l,u,d,i) local n="" local t="" local a={} local h=0 o["highlight_text"]=d o["normal_color"]=kColor_Invalid o["highlight_color"]=kColor_UART o["pin_bg_color"]=kBgColor_UART o["direction"]=kPinDirection_Unknown o["status"]=kPinStatus_Unknown function get_uart_baudate(n) local s=string.format("UART%d",i) local t=string.format("UART%d_UART_BAUD",i) table.insert(a,t) local o=ext.band(e[t],536870912) local a=ext.band(e[t],268435456) local h=ext.rshift(ext.band(e[t],251658240),24) local t=ext.band(e[t],65535) local e=0 local i="" if o==0 and a==0 then e=n/(16*(t+2)) elseif o~=0 and a==0 then if h>=8 then e=n/((h+1)*(t+2)) else i="invalid "..s.."'s UART_BAUD value, EDIV_M1 must >= 8" end elseif o~=0 and a~=0 then e=n/(t+2) else i="invalid "..s.."'s UART_BAUD value" end return e,i end table.insert(a,"CLK_CLK_APBCLK0") if ext.band(e["CLK_CLK_APBCLK0"],ext.lshift(65536,i))~=0 then table.insert(a,"CLK_CLK_CLKSEL1") local r=ext.band(ext.rshift(e["CLK_CLK_CLKSEL1"],24),3) local d=ext.band(ext.rshift(e["CLK_CLK_CLKDIV0"],8),15) local s local o if r==0 then s,o=get_XTL12M_clock(e,a) elseif r==1 then s,o=get_PLL_clock(e,a) else s,o=get_OSC22M_clock(e,a) end h=s/(d+1) if h~=0 then table.insert(a,"CLK_CLK_CLKDIV0") n=string.format("UART%d clock frequency: %sHz, from %s.
",i,val2str(h),o) else t=string.format("UART%d clock is not available, %s.
",i,o) end else t=string.format("UART%d clock is not available (see CLK_APBCLK0[%d].UART%dCKEN).
", i,i+16,i) end if t==""then local e,a=get_uart_baudate(h) if e~=0 then n=n..string.format("UART baudrate: %d
",e) else t=a..".
" end end if t~=""then t=""..t.."" o["pin_no_color"]=kBgColor_Error end if n~=""then n="Information
"..n end o["information"]=string.format( "%s
%s
".. "%s%s%s", d, t, get_mfp_regs(e,l,u), get_clk_informnation(e,a), n) end function fill_M451_SPI(i,a,u,l,d,e) local t="" local h="" local o={} i["highlight_text"]=d i["normal_color"]=kColor_Invalid i["highlight_color"]=kColor_SPI i["pin_bg_color"]=kBgColor_SPI i["direction"]=kPinDirection_Unknown i["status"]=kPinStatus_Unknown table.insert(o,"CLK_CLK_APBCLK0") if ext.band(a["CLK_CLK_APBCLK0"],ext.lshift(4096,e))~=0 then local n local s table.insert(o,"CLK_CLK_CLKSEL2") local r=ext.band(ext.rshift(a["CLK_CLK_CLKSEL2"],2*e+2),3) if r==0 then n,s=get_XTL12M_clock(a,o) elseif r==1 then n,s=get_PLL_clock(a,o) elseif r==2 and(e==0 or e==2)then n,s=get_PCLK_clock(a,o,0) elseif r==2 and e==1 then n,s=get_PCLK_clock(a,o,1) else n,s=get_OSC22M_clock(a,o) end if n~=0 then local h=0 if e==1 or e==2 then local r=string.format("SPI%d_SPI_I2SCTL",e) local s=string.format("SPI%d_SPI_I2SCLK",e) table.insert(o,r) h=ext.band(a[r],1) if h~=0 then t=string.format("I2S controller enabled.
") local h=ext.band(a[r],256) if h==0 then table.insert(o,s) local i=ext.band(ext.rshift(a[s],8),511) local o=ext.band(a[s],63) local i=n/(2*(i+1)) local a=n if o~=0 then a=n/(2*o) end t=t..string.format("SPI%d_I2S is in master mode.
",e) t=t..string.format("BCLK frequency: %sHz
",val2str(i)) t=t..string.format("MCLK frequency: %sHz
",val2str(a)) else t=t..string.format("SPI%d_I2S is in slave mode.
",e) end i["highlight_color"]=kColor_I2S i["pin_bg_color"]=kBgColor_I2S i["direction"]=kPinDirection_Unknown end end if h==0 then local i=string.format("SPI%d_SPI_CTL",e) local h=string.format("SPI%d_SPI_CLKDIV",e) table.insert(o,i) local i=ext.band(a[i],262144) if i~=0 then t=string.format("SPI%d is in slave mode.
",e) else t=string.format("SPI%d is in master mode.
",e) table.insert(o,h) local a=ext.band(a[h],255) local a=n/(a+1) t=t..string.format("SPI%d clock frequency: %sHz, from %s.
", e,val2str(a),s) end end else h=string.format("SPI%d clock is not available, %s.
",e,s) end else h=string.format("SPI%d clock is not available (see CLK_APBCLK0[%d].SPI%dCKEN).
", e,e+12,e) end if h~=""then h=""..h.."" i["pin_no_color"]=kBgColor_Error end if t~=""then t="Information
"..t end i["information"]=string.format( "%s
%s
".. "%s%s%s", d, h, get_mfp_regs(a,u,l), get_clk_informnation(a,o), t) end function fill_M451_SPI_IO(e,o,t,a) if t==1 or t==2 then local t=string.format("SPI%d_SPI_I2SCTL",t) local t=ext.band(o[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("SPI%d_SPI_CTL",t) local t=ext.band(o[t],262144) 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_M451_I2C(t,o,d,l,r,e) local i="" local a="" local n={} t["highlight_text"]=r 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(n,"CLK_CLK_APBCLK0") local s=ext.band(o["CLK_CLK_APBCLK0"],ext.lshift(256,e)) if s~=0 then local t=string.format("I2C%d_I2C_CTL",e) local h=string.format("I2C%d_I2C_CLKDIV",e) table.insert(n,t) local t=ext.band(o[t],64) if t~=0 then local t local s if e==0 then t,s=get_PCLK_clock(o,n,0) else t,s=get_PCLK_clock(o,n,1) end if t~=0 then table.insert(n,h) local o=ext.band(o[h],255) if o<4 then a=string.format("Invalid I2C%d's I2C_CLKDIV value, I2C_CLKDIV must >= 4.
",e) else local t=t/(4*(o+1)) i=i..string.format("I2C%d clock frequency: %sHz, from %s.
",e,val2str(t),s) end else a=string.format("I2C%d clock is not available, %s.
",e,s) end else a=string.format("I2C%d controller disabled (see I2C%d_I2C_CTL[6].I2CEN).
",e,e) end else a=string.format("I2C%d clock is not available (see CLK_APBCLK0[%d].I2C%dCKEN).
",e,8+e,e) end if a~=""then a=""..a.."" t["pin_no_color"]=kBgColor_Error end if i~=""then i="Information
"..i end t["information"]=string.format( "%s
%s
".. "%s%s%s", r, a, get_mfp_regs(o,d,l), get_clk_informnation(o,n), i) end function fill_M451_ACMP(e,a,n,s,o,t) 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_CLK_APBCLK0") if ext.band(a["CLK_CLK_APBCLK0"],128)==0 then t="ACMP clock is not available (see CLK_APBCLK0[7].ACMP01CKEN).
" t=""..t.."" e["pin_no_color"]=kBgColor_Error end e["information"]=string.format( "%s
%s
".. "%s%s", o, t, get_mfp_regs(a,n,s), get_clk_informnation(a,i)) end function fill_M451_CLKO(a,e,d,r,h) local i="" 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_CLK_APBCLK0") if ext.band(e["CLK_CLK_APBCLK0"],64)~=0 then table.insert(t,"CLK_CLK_CLKOCTL") local a=ext.band(ext.rshift(e["CLK_CLK_CLKOCTL"],6),1) if a==0 then local a=ext.band(ext.rshift(e["CLK_CLK_CLKOCTL"],4),1) if a~=0 then table.insert(t,"CLK_CLK_CLKSEL1") local s=ext.rshift(ext.band(e["CLK_CLK_CLKSEL1"],805306368),28) local a local n if s==0 then a,n=get_XTL12M_clock(e,t) elseif s==1 then a,n=get_XTL32K_clock(e,t) elseif s==2 then a,n=get_HCLK_clock(e,t) else a,n=get_OSC22M_clock(e,t) end if a~=0 then local t=a local o=ext.band(e["CLK_CLK_CLKOCTL"],32) if o==0 then local e=ext.band(e["CLK_CLK_CLKOCTL"],15) t=a/ext.lshift(1,(e+1)) end i=string.format("CLKO clock frequency: %sHz, from %s.
",val2str(t),n) else o="CLKO clock is not available, "..n..".
" end else o="CLKO output function disable (see CLK_CLKOCTL[4].CLKOEN).
" end else i="1Hz clock from RTC" end else o="CLKO clock is not available (see CLK_APBCLK0[6].CLKOCKEN).
" end if o~=""then o=""..o.."" a["pin_no_color"]=kBgColor_Error end if i~=""then i="Information
"..i end a["information"]=string.format( "%s
%s
".. "%s%s%s", h, o, get_mfp_regs(e,d,r), get_clk_informnation(e,t), i) end function fill_M451_TM(n,t,l,d,r,e) local i="" local o="" local a={} n["highlight_text"]=r n["normal_color"]=kColor_Invalid n["highlight_color"]=kColor_TM n["pin_bg_color"]=kBgColor_TM n["direction"]=kPinDirection_Unknown n["status"]=kPinStatus_Unknown table.insert(a,"CLK_CLK_APBCLK0") local s=ext.band(t["CLK_CLK_APBCLK0"],ext.lshift(4,e)) if s~=0 then local n=string.format("TMR%d%d_TIMER%d_CTL",ext.rshift(e,1)*2,ext.rshift(e,1)*2+1,e) table.insert(a,n) local n=ext.band(t[n],16777216) if n~=0 then i=string.format("TMR%d external counting pin function enabled.
",e) else table.insert(a,"CLK_CLK_CLKSEL1") local h=ext.band(ext.rshift(t["CLK_CLK_CLKSEL1"],8+e*4),7) local n local s if h==0 then n,s=get_XTL12M_clock(t,a) elseif h==1 then n,s=get_XTL32K_clock(t,a) elseif h==2 then if e==0 or e==1 then n,s=get_PCLK_clock(t,a,0) else n,s=get_PCLK_clock(t,a,1) end elseif h==3 then i=string.format("TMR%d clock source is from external clock T%d pin.
",e,e) elseif h==5 then n,s=get_OSC10K_clock(t,a) elseif h==7 then n,s=get_OSC22M_clock(t,a) else o=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 o==""and i==""then if n~=0 then i=string.format("TMR%d clock frequency: %sHz, from %s.
", e,val2str(n),s) else o=string.format("TMR%d clock is not available, %s.
",e,s) end end end else o=string.format("TMR%d clock is not available (see CLK_APBCLK0[%d].TMR%dCKEN).
",e,e+2,e) 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", r, o, get_mfp_regs(t,l,d), get_clk_informnation(t,a), i) end function fill_M451_TK(e,a,h,s,o,t) local n="" local t="" local i={} e["highlight_text"]=o e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_TK e["pin_bg_color"]=kBgColor_TK e["direction"]=kPinDirection_In e["status"]=kPinStatus_Unknown table.insert(i,"CLK_CLK_APBCLK1") if ext.band(a["CLK_CLK_APBCLK1"],33554432)==0 then t="TAMPER clock is not available (see CLK_APBCLK1[25].TKCKEN).
" t=""..t.."" e["pin_no_color"]=kBgColor_Error end e["information"]=string.format( "%s
%s
".. "%s%s%s", o, t, get_mfp_regs(a,h,s), get_clk_informnation(a,i), n) end function fill_M451_PWM(i,t,u,c,l,e,h) local s="" local n="" local o={} i["highlight_text"]=l i["normal_color"]=kColor_Invalid i["highlight_color"]=kColor_PWM i["pin_bg_color"]=kBgColor_PWM i["direction"]=kPinDirection_Unknown i["status"]=kPinStatus_Unknown if h~=nil then local a=ext.rshift(h,1) table.insert(o,"CLK_CLK_APBCLK1") local i=ext.band(t["CLK_CLK_APBCLK1"],ext.lshift(65536,e)) if i~=0 then table.insert(o,"CLK_CLK_CLKSEL2") local d=ext.band(ext.rshift(t["CLK_CLK_CLKSEL2"],e),1) local i local r if d==0 then i,r=get_PLL_clock(t,o) else if e==0 then i,r=get_PCLK_clock(t,o,0) else i,r=get_PCLK_clock(t,o,1) end end local d=string.format("PWM%d_PWM_CNTEN",e) table.insert(o,d) local d=ext.band(ext.rshift(t[d],h),1) if d==0 then n=string.format("PWM%d counter%d stops running.
",e,h) else local d=string.format("PWM%d_PWM_CLKSRC",e) table.insert(o,d) local d=ext.band(ext.rshift(t[d],8*a),7) if d==0 then if i==0 then n=string.format("PWM%d clock is not available, %s.
",e,r) else local a=string.format("PWM%d_PWM_CLKPSC%d",e,2*a) table.insert(o,a) local t=ext.band(t[a],4095) local t=i/(t+1) s=string.format("PWM%d clock frequency: %sHz, from %s.
", e,val2str(i),r) s=s..string.format("PWM%d counter%d frequency: %sHz (Pre-Scaled)
", e,h,val2str(t)) end elseif d<=4 then s=string.format("PWM%d_CH%d%d clock source is from TIMER%d.
", e,2*a,2*a+1,d-1) else n=string.format("PWM%d_CH%d%d clock source is undefined (see PWM_CLKSRC[%d:%d].ECLKSRC%d).
", e,2*a,2*a+1,8*a+2,8*a,2*a) end end else n=string.format("PWM%d clock is not available (see CLK_APBCLK1[%d].PWM%dCKEN).
", e,16+e,e) end end if n~=""then n=""..n.."" i["pin_no_color"]=kBgColor_Error end if s~=""then s="Information
"..s end i["information"]=string.format( "%s
%s
".. "%s%s%s", l, n, get_mfp_regs(t,u,c), get_clk_informnation(t,o), s) end function fill_M451_DAC(e,o,h,s,n) local t="" local a="" local i={} e["highlight_text"]=n e["normal_color"]=kColor_Invalid e["highlight_color"]=kColor_DAC e["pin_bg_color"]=kBgColor_DAC e["direction"]=kPinDirection_PushPullOut e["status"]=kPinStatus_Unknown table.insert(i,"CLK_CLK_APBCLK1") if ext.band(o["CLK_CLK_APBCLK1"],4096)~=0 then local e local a e,a=get_PCLK_clock(o,i,1) t=string.format("DAC clock frequency: %sHz, from %s.
",val2str(e),a) else a="DAC clock is not available (see CLK_APBCLK1[12].DACCKEN).
" end if a~=""then 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(o,h,s), get_clk_informnation(o,i), t) end function fill_M451_SC(n,t,u,l,d,e) local a="" local i="" local o={} local h=0 n["highlight_text"]=d 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(o,"CLK_CLK_APBCLK1") if ext.band(t["CLK_CLK_APBCLK1"],ext.lshift(1,e))~=0 then local r=string.format("SC%d_SC_CTL",e) table.insert(o,r) if ext.band(t[r],1)~=0 then table.insert(o,"CLK_CLK_CLKSEL3") local r=ext.band(ext.rshift(t["CLK_CLK_CLKSEL3"],e*2),3) local s local n if r==0 then s,n=get_XTL12M_clock(t,o) elseif r==1 then s,n=get_PLL_clock(t,o) elseif r==2 then s,n=get_PCLK_clock(t,o,0) else s,n=get_OSC22M_clock(t,o) end table.insert(o,"CLK_CLK_CLKDIV1") local t=ext.band(ext.rshift(t["CLK_CLK_CLKDIV1"],e*8),255) h=s/(t+1) if h~=0 then a=a..string.format("SC%d clock frequency: %sHz, from %s.
",e,val2str(h),n) else i=string.format("SC%d clock is not available, ",e)..n..".
" end else i=string.format("SC%d engine disabled (see %s[0].SCEN).
",e,r) end else i=string.format("SC%d clock is not available (see CLK_APBCLK1[%d].SC%dCKEN).
",e,e,e) end if i==""then local n=string.format("SC%d_SC_UARTCTL",e) local s=string.format("SC%d_SC_ETUCTL",e) table.insert(o,n) table.insert(o,s) local o=ext.band(t[s],4095) local s=h/(o+1) local t=ext.band(t[n],1) if t~=0 then a=string.format("SC%d is in UART mode.
",e)..a if o>4 then a=a..string.format("UART baudrate: %d
",s) else i=string.format("SC%d ETURDIV(SC_ETUCTL[11:0]) must be greater than 4.
",e) end else a=string.format("SC%d is in Smart Card mode.
",e)..a end end if i~=""then i=""..i.."" n["pin_no_color"]=kBgColor_Error end if a~=""then a="Information
"..a end n["information"]=string.format( "%s
%s
".. "%s%s%s", d, i, get_mfp_regs(t,u,l), get_clk_informnation(t,o), a) end function fill_M451_EBI(t,a,d,r,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(a["CLK_CLK_AHBCLK"],8) if n~=0 then local s local n s,n=get_HCLK_clock(a,i) if s~=0 then for o=0,1 do local t=string.format("EBI_EBI_CTL%d",o) table.insert(i,t) local i=ext.band(a[t],1) if i~=0 then local i=ext.band(ext.rshift(a[t],8),7) local i=ext.rshift(s,i) local t=ext.band(ext.rshift(a[t],1),1) e=e..string.format("EBI Bank%d MCLK frequency: %sHz, from %s.
", o,val2str(i),n) e=e..string.format("EBI Bank%d: address/data bus multiplex mode, and data width %d-bit
", o,(t~=0)and 16 or 8) else e=e..string.format("EBI Bank%d disabled
",o) 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,d,r), get_clk_informnation(a,i), e) end function fill_M451_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