From 1166c4ce418922ee26013f9fd8d4782c7b258c14 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Mon, 24 Jul 2023 12:00:46 +0800 Subject: [PATCH] initial commit Signed-off-by: Sean Cross --- .gitattributes | 41 + .gitignore | 48 + README.md | 44 + badge.repl | 57 + badge.resc | 42 + esp32s3-drom.bin | Bin 0 -> 131072 bytes esp32s3-efuses.bin | Bin 0 -> 512 bytes esp32s3-irom.bin | Bin 0 -> 393216 bytes esp32s3-rtc-rom.bin | Bin 0 -> 8192 bytes esp32s3-rtccntrl.bin | Bin 0 -> 4096 bytes esp32s3.svd | 67737 +++++++++++++++++++++++++++ partition-table.bin | Bin 0 -> 3072 bytes peripherals.csproj.template | 144 + peripherals/ESP32S3_EFUSE.cs | 109 + peripherals/ESP32S3_EXTMEM.cs | 177 + peripherals/ESP32S3_GPIO.cs | 269 + peripherals/ESP32S3_RTC_CNTL.cs | 194 + peripherals/ESP32_SPIController.cs | 435 + peripherals/ESP32_UART.cs | 214 + svd-to-renode.py | 171 + 20 files changed, 69682 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 README.md create mode 100644 badge.repl create mode 100644 badge.resc create mode 100644 esp32s3-drom.bin create mode 100644 esp32s3-efuses.bin create mode 100644 esp32s3-irom.bin create mode 100644 esp32s3-rtc-rom.bin create mode 100644 esp32s3-rtccntrl.bin create mode 100644 esp32s3.svd create mode 100644 partition-table.bin create mode 100644 peripherals.csproj.template create mode 100644 peripherals/ESP32S3_EFUSE.cs create mode 100644 peripherals/ESP32S3_EXTMEM.cs create mode 100644 peripherals/ESP32S3_GPIO.cs create mode 100644 peripherals/ESP32S3_RTC_CNTL.cs create mode 100644 peripherals/ESP32_SPIController.cs create mode 100644 peripherals/ESP32_UART.cs create mode 100644 svd-to-renode.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f9a88b0 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,41 @@ + +# Various C code +*.h text eol=lf +*.c text eol=lf +*.s text eol=lf +*.S text eol=lf + +# Rust code +*.rs text eol=lf +*.toml text eol=lf +*.lock text eol=lf + +# Misc scripting files +Makefile text eol=lf +*.mk text eol=lf +*.sh text eol=lf +*.ps1 text eol=crlf +*.py text eol=lf + +# Human-readable files +*.md eol=lf +README.* text eol=lf +LICENSE text eol=lf +*.txt text eol=lf + +# Binary files +*.dfu binary +*.png binary +*.jpg binary +*.bin binary +*.elf binary + +# Git configuration files +.gitignore text eol=lf +.gitattributes text eol=lf + +# System description files +*.svd eol=lf + +# JSON +*.json eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f04a95d --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +**/*.rs.bk +/peripherals.csproj +/emulation/obj + +*.map + +# Emacs +*~ + +# local utility shellscripts +update-precursors.sh +buildpush.ps1 +# local-only routines used to start builds +/*.ps1 +/*.bat +/*.sh +# notes to myself +/*.txt +tools/test-backup-analyze.sh + +# don't record weirdnesses dealing with vscode +.vscode +.vs +settings.json + +# Emacs backup files +*~ + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +*.pyc +MANIFEST diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c2fb76 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Platonic RISC-V Device + +Platonic is an ideal system useful for developing an operating system. It does not represent any sort of real hardware, though differences between platforms is minimal. + +## Usage + +For emulation, you will need to install Renode (use the [nightly](https://dl.antmicro.com/projects/renode/builds/) to get `SPI.NORFlash` peripheral support). Then, run `renode` on `xous-release.resc`. For example: + +``` +renode emulation/xous-resc.repl +``` + +## Editing Renode Peripherals + +Renode supports adding peripherals written in C#. For example, many Betrusted peripherals have models created under the `peripherals/` directory. + +Since there is no external compiler, it can be difficult to know if your code is correct. In fact, if you're unfamiliar with C# or the Renode codebase, editing unfamiliar C# code can be a slow exercise in frustration. + +Fortunately, Visual Studio Code is free and has excellent C# tooling. All you need to do is point it at your Renode installation, load the C# plugin, and open a `.cs` file. + +1. Copy `peripherals.csproj.template` to `peripherals.csproj` +2. Open `peripherals.csproj` and point `` to your Renode installation directory. On ubuntu, this may be `/opt/renode/bin/`. +3. Install [C# for VSCode](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) +4. You can refer to [core Renode peripherals](https://github.com/renode/renode-infrastructure/tree/master/src/Emulator/Peripherals/Peripherals) as examples of what C# code looks like. + +## Debugging with GDB + +When running Renode, you can attach a GDB instance. It runs on port 3333. Simply run `tar ext :3333` in gdb to attach. + +``` +#!/bin/bash +if [ -z "$1" ] + then + echo "eg: flash.sh application.bin" + exit +fi + +set -x +export FIRMWARE_PATH=$(dirname "$1") +dd if=/dev/zero bs=1M count=4 of=./flash.bin +dd if="$FIRMWARE_PATH/bootloader/bootloader.bin" bs=1 count=$(stat -c%s "$FIRMWARE_PATH/bootloader/bootloader.bin") seek=$((16#1000)) conv=notrunc of=./flash.bin +dd if="$FIRMWARE_PATH/partition_table/partition-table.bin" bs=1 count=$(stat -c%s "$FIRMWARE_PATH/partition_table/partition-table.bin") seek=$((16#8000)) conv=notrunc of=./flash.bin +dd if=$1 bs=1 count=$(stat -c%s "$1") seek=$((16#10000)) conv=notrunc of=./flash.bin +``` diff --git a/badge.repl b/badge.repl new file mode 100644 index 0000000..786566c --- /dev/null +++ b/badge.repl @@ -0,0 +1,57 @@ +cpu: CPU.Xtensa @ sysbus + cpuType: "esp32s3" + +// External data memory +edram: Memory.MappedMemory @ sysbus 0x3C000000 + size: 0x2000000 + +// Internal data memory +dram: Memory.MappedMemory @ sysbus 0x3FC88000 + size: 0x78000 + +// Internal data rom +irom: Memory.MappedMemory @ sysbus 0x3FF00000 + size: 0x20000 + +// Internal instruction rom +drom: Memory.MappedMemory @ sysbus 0x40000000 + size: 0x60000 + +// Internal instruction memory +iram: Memory.MappedMemory @ sysbus 0x40370000 + size: 0x70000 + +// External instruction memory +eiram: Memory.MappedMemory @ sysbus 0x42000000 + size: 0x2000000 + +// Internal RTC SLOW memory +rtcslow: Memory.MappedMemory @ sysbus 0x50000000 + size: 0x2000 + +// Internal RTC FAST memory +rtcfast: Memory.MappedMemory @ sysbus 0x600FE000 + size: 0x2000 + +uart0: UART.ESP32_UART @ sysbus 0x60000000 +uart1: UART.ESP32_UART @ sysbus 0x60010000 +extmem: Miscellaneous.ESP32S3_EXTMEM @ sysbus 0x600C4000 +gpio: GPIOPort.ESP32S3_GPIO @ sysbus 0x60004000 + +// EFUSES +efuse: Memory.MappedMemory @ sysbus 0x60007000 + size: 0x1000 + +// RTC Control +rtc_cntl: Miscellaneous.ESP32S3_RTC_CNTL @ sysbus 0x60008000 + +flash: + size: 0x200000 + +spiflash: SPI.Micron_MT25Q @ usart2 + irq: 20 + underlyingMemory: flash + +sysbus: + init: + ApplySVD @esp32s3.svd diff --git a/badge.resc b/badge.resc new file mode 100644 index 0000000..fa8e129 --- /dev/null +++ b/badge.resc @@ -0,0 +1,42 @@ +# Boot Renode Script (boot.resc) + + +# Add this script's path to the global path, so +# we can include files relative to ourselves. +path add $ORIGIN + +i @peripherals/ESP32_UART.cs +i @peripherals/ESP32S3_EXTMEM.cs +i @peripherals/ESP32S3_GPIO.cs +i @peripherals/ESP32S3_RTC_CNTL.cs + +using sysbus + +mach create "SoC" +machine LoadPlatformDescription @badge.repl + +# Silence regions we don't want to implement yet +sysbus SilenceRange <0x60038000, 0x60038FFF> # USB_DEVICE +sysbus SilenceRange <0x60080000, 0x60080FFF> # USB0 +sysbus SilenceRange <0x60039000, 0x60039FFF> # USB_WRAP + +machine StartGdbServer 3333 true + +showAnalyzer uart0 +showAnalyzer uart1 + +# The macro `reset` gets called implicitly when running `machine Reset` +macro reset +""" +sysbus LoadELF @blackmagic.elf +sysbus LoadBinary @partition-table.bin 0x3C008000 +sysbus LoadBinary @esp32s3-irom.bin 0x40000000 +sysbus LoadBinary @esp32s3-drom.bin 0x3FF00000 +#sysbus LoadBinary @esp32s3-efuses.bin 0x60007000 +sysbus LoadELF @bootloader.elf +cpu PC 0x40000400 +""" + +runMacro $reset + +start diff --git a/esp32s3-drom.bin b/esp32s3-drom.bin new file mode 100644 index 0000000000000000000000000000000000000000..99951dd1c2d405344619ab89f9b0d994e9285177 GIT binary patch literal 131072 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

L0yurt}FIY$3kg&PPV1FB-OAE6haUscQ>z%POt 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

Ih!)Wo#u4!jz`9nz6)Ko(t#+_OQQ5lM9VUuX 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 literal 0 HcmV?d00001 diff --git a/esp32s3-irom.bin b/esp32s3-irom.bin new file mode 100644 index 0000000000000000000000000000000000000000..e93eb01abbb7f9c44be38d55ef0efaedbd10caf4 GIT binary patch literal 393216 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

VSX@HffrwFR&% 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
%WR7Wp}Z1jz_Ma3UrQ)vCxa2hT1d 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

QE-0iL;s7v z9PPW%-^w;}`lMM|4fz9eYhAxvUtY5gyf}8};UhuQicfZ0((wz~E#HtU#`bHD=S(Z_ z`bw%-cDmodClw3ZUj2H}sqtOPH61$nEM0YIb?IZxh#uOqtBa(vd-S?&nPcq7&Dy#< zB)yZT^Wzz7=QX>SXMMur%(Bvv1$U*gb6Y$e-t&rK(k&Ba%)3usar)!4=h@g}lR}(} zeO8$p+>^>4ul&sD^<=$-llQ&~?GWCrOMct+4(11g~97{`BgsG39nEYzOmsu5La-#X%=fA(2^6K!8>r1=YuNj_ub=Rs{+U_lywc9C`%__}uKfP=9?kfcm!#}C( zo_QwWuKh$@yh(P0N57Qq`F!SU`Oc0rzUVae+s=C~ z&1)9Abc0m(#e=?yKb#BL*1r7A{zZ2dHVpPvyKS1h>ePfh#4Xt{`-W6@W`Cat-i7`0 z8>hHW-;=W8*y&ehpLZ>axb)LCulpg}e(zl)TWHteMEW5ZPwJ8)a7>h zf|XP3USA6=?Y?Y(&bg4b>nd`+Z@W#KtQhx5oflhnWAC%jK-a5}PT7vi-ukfP{{YdG Bs8s*} literal 0 HcmV?d00001 diff --git a/esp32s3-rtc-rom.bin b/esp32s3-rtc-rom.bin new file mode 100644 index 0000000000000000000000000000000000000000..b21b4d6b5eb0d0b4ed0f222df5ad3abc606bd035 GIT binary patch literal 8192 zcmV+bAphU?4VJu`G7<<>6IE|TH_}pe{NXkyjl*cBwxHYKp~!CcF_$08oxG#-k1-1Z zU>dcU|J`R`rbLtb{C-c2#0-WrIoCdLlMZW0P3M&HjuLLLubVVA$P3yyB7Xb20>*-g!^Q& zU`NOvX@A$gi3C+vO17QE1kfrly6(2LETuEYXE(jYq~rv#+UGQrMUq)Z8i`B#wNeTy z=s8c3CF>h&;uS8BLs-Ude9jgLvJd(zE}VGFfe8(BnkFlP_O+dawTK@50{ zgQ}d9_$35n8Dwf=D3n!~yKM9(X+!<)y}OUl6&C>?*O{~kc2^wefuNEXI-I$uYaTvx zM?lSOPtoIFoq|REf1|c6oaC8e`%B-rK}MI;p`JT)MO1ZlFYd7|s=NluFYG3fFj|&- zh7M64eRW@cphgicKevWcg!O;F0$~ zUp}t_T%yhFLx}9vP*5rEw5Nj7B}fQRWMrx*O1~L$t34qei*%$xhAHQIIz9%i&N(%= zt#>O0jz-5T{Q?InF(Bwm+gfaGUd0BIBjfSVs1eJb*=RT%xpu(Pz`fS@N z^K^~qIDgv(z=18z2`oAXF_zTl=+Rm-sTg4OYaYjn!E5_jrMhL~68ELg{E;S7`m@+X z6RJlbLj zoTnq~Mo-fb_g!HV#l5uoX`soGmIu?T^&^;Bq)kyxL-)ixn8@gaPLi_b6g*u%Gro!Jk6 zI&|coU7xQ9Qb9Ne%hU64M+(oU!9fJlkO{IIsVn|Rx~oQEY*JljHFfoWqiPQ!X{0_? zP75AEwF4(E48Oh&UiD{BXbq5OVjSR(=5y;WkT8}P8VBGTa3bcO>zHj|yf;vQg;s%?$f`^}0Xt~3e$fV{O+pLZCUisQA_c_3;N8gC*$uoL;Mxr%>XNc6 z>3%|l9pVGGv_KDnl1CfcTT>756e%7PQIXHKtbmo}bN@amFL`mQYuZofP$L1A?5%>1HPd*$zyGs% ztbK2ZF11# zlvVH8=NDgp{6HPDf|5ZTuwecubf0%LO}fxuQ9G_Qs|< z#Q`;y&(~f-T&@ex`NdVRs~`j{o_TtpL6e_F@R-(s6{$>a*R*Vq$mm45zj1zyXvI3H zTHHRPbtB!u>H57%ld2=Y@RWxm893NOo^TF;1fSZa<(I}7)+@@y#x)SQyUAi#EpyFIqBEjl>SN*_`7)>VqKlGG|)3yav~=DmHsx` zp8(GHgW1$$v_NKG+au|lZ%~bkenly{Tb&DMp!4^L6Nuk?s%XJ~-n_qBU`t6|3LdpC z-TgKMWK`4hs>LPP1qa4Hw>Wy=idAdN&TCB)myJ7eh&BG=IEG05E%N)*yBs zm>=N@CSL!%)cV2 zN{(IHgc;YM;+~KI3Mp%REf#A>5|D~Szlk;>s{#nyLc#gMG#1dUlD#*SpeU*to@^u$ zNdPpe7kyC+12h)z2?tp1cNNDw41I9MxBn9!T|&wxHH`*7-73hVm;*AWq4=_c&Fz(F4_yIZZ0u|a+1nkpf0)D8u_f2_VPb>OG|DiE>8ooB&6g3(6de#{ zC?@u+Oco3!tQlrE@9mZ3bm1iT>1(&ZT7~MLrnFL#40q_>&<{?sNw8tKm{DP%o!ql- z{p@T`AI`d6)qd5jCW~U`=k%~lIT2TeiAeR<4$+8-pc?VjpT&Jdm%JGWHH z4uHu^Jewb(65F!p{QgKx%;MO=t9q%7Wt4<%)BjN%^q@qEtMpFhm(z^z>tu`YZ~Iu&0MCi7FK>Zs$2!_f7BRK*jL>~%84%lsPj2bi7S~Y`OFaRFYET1Q?>^qY8*LG z`8od2*801!I2l$`%a>wgRqA$l3IW&g*@o>&o~(AGMTq^RA=^AL6b3r^zm zQdV{b5_%w`<9sp^SG;zb$gA3a>X4ECLMFg>(YJjyAOL>cXQF(>tm@d-%et5V=LI+O zxld_?A{OR@+tyeF5?j*rxA#|K4MAczccUPPiiDw%M^E^ZlMeh)%Cd$5aAR#^pkN$%x=)@xi$iTHt@`~ zw>OcnERt1zIwbpA!_a>(vNhGtI1*d#0K@P8E!FgSLN&pV16PEP4jVK!2?+uHGVz^& zAgXjus~rSu4=jTAV&KaYou>u)_v55DzxD!nv#~SXE;PLWu&f$fHP}ndam+(0 zZhBSe#+cIrt^5fx$deApY{U^6Yc(9?D-}+V6mumQ^pbRTN@QrinI2ot9e5Uw;jzNj z;A=#{UTjW+cG@^!CGNw=nz)TuYs6zF?;`7|5`r)vy${ zSKyQ**0NJsf_%w(DtO_n;HcBpqkU5;Ua%6SO7$N0hY9}h*>>b9)`GQcwb_o};gKYl zs`?=+U{+=@BV73>Es?1`w*D|A_S%n}%!O2(?j9!o7TR$P{{;?w6(=LXWHF*WDjz7z=>=F*|Gn z(0%RCuW2U>Vy2S4Wn7aNV0L}pQsX!nGiezLbFPHxMRXu@FhzpTG3*iF=fBm(LqKPG z*pmVe9RaNkcR)rcp$r;_+Sy?v65+6Y`;(KlP9Nb?|K<#Gj^HHB_|r#$YM^i8v*F(& z7E!R~&$51Kn~H;|I&-b|2zq4nUh|f!*<_Mo^EMy^;dGwI-TYqg0*UO;U-9dJZbBQs z==81V!{ByZO6Lq(%ii*DJzpS;)w$R z2oMosxZ5?5BF5aLxfbsHkitEbRNadjrl}NH-SiNlo&}2Y%Uci9Q(28s6!7%C5}#&%Mr}u;V6bPg+M2Pzb)t?Ot2C1JWSMRrP7b!Z1mDr^TxW zqTmFWCjaA^i2@4ntxsy~Z@dUOXR&gYGNm*${O>p~Id+r}cbc@g14ONrd%at+hg6>x zSF$evrH*cXUBraIp*ph5R(0}BvhmPT#{cee?5n!Hr7VvX zgOQ@+Kx0oRIOXHI64|PVg^;3(BX>_xiOi~Od?&B=2Z84^CD?L@1C*TO*gs)>jKrm= zYkI>O2q6M8Gy(~v2LPQjWZd{n_`pz70J>{64Mzjj6y|6=y z#F!zfYbBaJib{h{*oAC>cx(jk4rkv%LIDh_484fbj60yxjdAo!04;0Qzl7%kwQIu8 zR-S*>Fw2|3olf=q>Vk&5^q|Kv?gUJmzw}M^ApGB=TTZp3l(~ zK|=S-$wEVxkqC3{uEEUcsXpQ@Xw@wQs6b`|J#9QyvTW!bf3&1-u#l!K2r9 zapo%%eYNt6fJKVEJazmJda)v{?r;_Z8ZSV1rS-~&OeJJn$g-ediTc7S-&d@(CJNRU zWaXZLUc}33^Eq^^>Y;6p>U7g2OjKGQkkfQq;-$lkJBbX@Rzi=e`OPGTQQPQLo|9)I zsX+^$j8pz}9_S?{W7_V(TRs%Wjb~^lVG97aH|AF?4W*fCC_DBm(U6TD>CUCcYa(s` zHK!NW9|C2C?6yo)#s>vg--r5{0u0%0Q~v-mb9@4Y3)P%FUuyYTKY4|2k#yt9cRHy_ zfVy~xXY`$Az#1Q#`9e<$>uEV6uer+XsZ`$~$$Y^@ zioa87kYLma`!BD9B6Pd&%sX{(k?<97QGPxTR{=e@4r^V0g|7MbvpYOiD+q#ZdJBpK zAy2Qq_pSd7Zc-vf7wW*_-McD(m_c1oLj^3Sy+&>gBA2FPW6aI$g*U96lh6}@12jpy z$JFppXEOu9$8il165_kk-yh|mzb$V0Kjv)Zf{ozHv@1LlELxp?#u;`tB;pJ6oi8#z zs@bjGGF#y29Gq{di>n-S+XJcLPOdlvW8+>)J!}&+<;A^)SWd-6($BE;+spraXo3pM zz!&s-x5Jb>|F)NmB1mb=rMDcFgFk_@V1m2CEpwIcy+iTBfot-nlX%i7Kv%%x1Q~;3 zvj{Zh^X=NVwLnqiVcGe8R2q=+9V83z>{gKF`S$!`v7&-oqQ?qjIvi2h=J$&x5HceB zR`M)3vWb}c&h4jnSPmw?VQviGc#`mua;fF{V&NgNY`XcW;hf#m1nk?6ld@FRf!g-5 zKv0lT)re~#e(0rhLmlMuyDYpdxqoZV#3_we4aZEPH&8KA{mSKGi(n>msDJ5Ndomy& z#uOv83E>I*w+*Gk!Q+1;+&V;K0u=6dBfs7F2Oz1T-nh4ftSOvxAMdoqU>fP1bOg64 zaHXWAm+Xv$pXj$q`#s*wNrD8&1^mnsBpib9%gjHfP7t6`n`AW*y3AZdyX2WwL+ITW zCkHd#h)W^`>P&jbU*#c>GMO4c4_>cPhKc#y${M=u z-zOxJcPi87ToTd0wWE<07@DFaTtXn* z-Z`(OF3x(zmd&Yw(pb@O9^Gahkdqdl|Ne3)#27>Wwwx+*n=P_Mtgqf;pg@ZKEk4}_ zHX!Ab(hE`RNYEb7V~3>5oENd*JNJc*&{3tOMD9SA5)dK1w@osTm?#O&vBoAOs|Uw=-Yz zGiki#YvyROO3^d#Jy=^~Xp5B8d@|ohe$vbveG^dh1$#K2p^r6Uy-+L(Kb8AV|5>#{K4IXae`^UMT{Z_q=(!;Y-Tm*T7EFlXxbS$#ICur6b3Of* zEP|h(6VZd47-Yu=lWv2ufx+~*`B{n}q$|tfMFVe7TcN^RYiH|tKLMdOOX9NhpbA;8 z`Qrt|#hb%Q@vXOlc@Tfi?~j<5i3DJMOZvCKLhe*G=2G_&SN8*;^@;USv zk`WoHWY5XO3=l?QwAPg-0R_NJNyvFl!FzbG<(%iLSF^*o#7lM0HZS=PG&b#ha`|!h zcMtiO&H&l9Ce*8)g#=Gq*sNv}#uW(R;JoLZH?y~oj?GIvSu%l{Fs!~DNu=rjzRdeB z5X|e3b#K2GPxhe8p5AXhbe$xdErj&5>1Q@n%Z;giDa)F$3U-fGnxq`G4ZYTKfjhZ+Xohv(s|pk)jF*2J7_#GAU57 zVsqj|jSHD5J0CvS!Y~bgR}nMAwcvvPDxm~u2!{knf0Xq|Ct1wRI$hq7e6>`= z4r##>P$q<3l#xEDi4$W_ygM@@rQz65*K|TJMXY3NO2s^w^;+0{Tf=7Af207b(IT8|PO6KE>VMg6KC$%EI)veW*vW_IP)W@N>oLde>Re|q_Jk`Tg*>+BCh38? zw&V0v%GgNuO?-Gf!vrm>UBBN*1|6-3zLukkK^o@z*|SNEWXz$09~)IR0~$yj`4C@F zLjplo7|$AP)qs+xT6xyFRA2}ipUs6O;L(ZRjI3dKH0zcm|Jj*>No)YUe5R6^%C(4R zzh#&r3M^NR-N;$&1cC)T>fZa&CtgsK{dl+7MHoTR9nJxMV+w?&7Gq>E0|U}>D~6|B zz$6I_u?OUOKu8UL(GO_iEh~Vp%QI-e@HRNH>teK#Wt%~RpT@yrijXI)HOicjo3#)v zTdy1u#U`~Y{G{|H=Enz0N30IYd5w@y4MyC9SS-{ZES6Pyq>a%`V|Hke$y zkX>T43=RO~R9_qoA@ffYXXNGy-5UxmUlRRx0lw|S2Q$lndKySEr!|F0H0ZizluJR2 zND@Fpwf}r%QQOf8ce~wKUH~N#XYjma2-u|BOF1)-EK}!p5BvPhezb-U+{E0FCPH9c zYVmE;tT@R0P9vz<1mgSjWTn)AjwyFAA$0Jd1&mW>OP8qx>$88h&Vb?s9n#F=EJtwS zI8a1;vd)xIMnWvD=ea${d$J{7gWsAr3QJ^scHC?PVO_OzGLW0F z2v&2T*7hHWLgd!x`SLH{H@&D|D72-KGDku$mTQwVFPL`#leh?!4Y~Aty!QtQ6Em3B zf{fTKt)fAoH^XQUZ-OyXQ2ULZklg#B>JXhUfdt5}#JiG!VB#1_^BbX&jO_@m0eVl~ zR!x)KSgoK8caKQY2fhHn$xq>!cf!#C4^pK0MEX-910<6+_WE=s2WBEJvDV`)=?epn zM_1V?9TcgPU2)U5ahGB|9rzOvkYL8=wSo4%KAvWK8afFT{2e;XTE};zX550gOHmb4vQ zBg|OCsom>@!9C0FFy#9SdsvWZy*v8iG!UWM{L4pW0ccnq$X=~}$$=cz5!SXI!4`yB zHhXoqu_MaL-mQ58#>R{8J8|rxs#F?Byu|=O1rg~I&$Cb<8;`As&%9OxXr#$ zdbo&p@-y8q<0OCq^}PKqcmM@UD8G>u$Ps|wr;}^hO$0yPwq;3N{7lBu;LdwG!&`i*L zGq(O=dq-+wp1%5~WHm@(5Jo?xfnBvG*kd3 ztrzi$BLSEzEUGHJVL!$;zkT-p3|3}ew+W`4F`7X?KNp2of!_-bGjGFBU_yu;`KKtb z6B~RTQl@SDx3vu3zu!v;dvOHJ3-3n4rb8vae3IM;h7u?E{}=c~5T1h`Kc(1EwoJc9 z4&9)uq=>)dhWQMok~VK^p}x$=xi5aN9Ta(hXbu1ow;$Tb90r)OExbP%iTgvq@aa8& zZ?gXBKU7ha^oS5fYG1rV&?qU#W-`j0T}Zk6z)>T2CFdU zsj2@k8pnBuxlO$Ugi0q=M1%JwR~EDGd-n7xDj0#uu{VK-g4nX=zte*R_1j2Hd5)2+ z;-gRSHj-=~EBK=&N4y#i0wNmYqt~q{2Z9KA9P_#NhZ&;1%`hCOygC*g7Vdam83uu6 z&({4AIg-rV9o_iGuk~&FDYP9HNb18CZTX^gZ2K8-_y6u1d<^6|qMzM5;00ZZ?am~; zh3m)zJYvs>`EH8wHH;D?1#39ksu{^3lu8g>)f>9kkKzOZncWaCCBv3$!Z(v|3{Wc1 zc2*)%1Y=J1>J4?tkiAM`$iqE_Aw`(%xtELTi5L!#OPC)TYb7{#9li#ZCR|LImpQ8w m7tafV!S&-skqrv2`SJ?`>x3eL^koT;EKr$Sw>jB)2pERn!qWEu literal 0 HcmV?d00001 diff --git a/esp32s3-rtccntrl.bin b/esp32s3-rtccntrl.bin new file mode 100644 index 0000000000000000000000000000000000000000..b6aea1093b24c29367657ea36ce9c3e20677d187 GIT binary patch literal 4096 zcmeHJze~eV5dQKKYZ@#*wJJ)%EET~)kq)JcfjV>%0xG%)`2!p(I_RLy;2=&;BDiD| zoLn3gM+XQ00(Ev0)H&YEk2aME5eJdv;NIPR_uWhKE_r!yP(r-uvQnG^R7urFimIk_ z*c1ti1+09CqMTQ$cw_uvZ}^;Owludk02t72E;X87q?~fzXK-^FwrO98$SBCLs}kIP zc10`t#@OuG%E??;OY?|f!`Y{n1okCcSubfUYrPu>$ZgH z$X&+;DzrvGZxs3`{^lTO$oik|{wH}?@Ah7j(0;)&skT8HwV`hi{u32-p^}@)cPn5I z(D$E2vi>JorGLi}{bx{gx^baxaY;026l-{^Zh@i4@RE$Re{+J&f`Yl!_IPMkO}Em+onI{l + + ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. + ESPRESSIF + ESP32-S3 + ESP32 S-Series + 16 + 32-bit MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE) + + Copyright 2023 Espressif Systems (Shanghai) PTE LTD + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Xtensa LX7 + r0p0 + little + false + true + 3 + false + + 32 + 32 + 0x00000000 + 0xFFFFFFFF + + + AES + AES (Advanced Encryption Standard) Accelerator + AES + 0x6003A000 + + 0x0 + 0xB8 + registers + + + + 8 + 0x4 + KEY_%s + AES key register %s + 0x0 + 0x20 + + + KEY_0 + Stores AES keys. + 0 + 32 + read-write + + + + + 4 + 0x4 + TEXT_IN_%s + Source data register %s + 0x20 + 0x20 + + + TEXT_IN_0 + Stores the source data when the AES accelerator operates in the Typical AES working mode. + 0 + 32 + read-write + + + + + 4 + 0x4 + TEXT_OUT_%s + Result data register %s + 0x30 + 0x20 + + + TEXT_OUT_0 + Stores the result data when the AES accelerator operates in the Typical AES working mode. + 0 + 32 + read-write + + + + + MODE + AES Mode register + 0x40 + 0x20 + + + MODE + Defines the key length and the encryption/decryption of the AES accelerator. + 0 + 3 + read-write + + + + + TRIGGER + AES trigger register + 0x48 + 0x20 + + + TRIGGER + Set this bit to 1 to start AES calculation. + 0 + 1 + write-only + + + + + STATE + AES state register + 0x4C + 0x20 + + + STATE + Stores the working status of the AES accelerator. For typical AES, 0: idle, 1: busy. For DMA-AES, 0: idle, 1: busy, 2: calculation_done. + 0 + 2 + read-only + + + + + 16 + 0x1 + IV_MEM[%s] + The memory that stores initialization vector + 0x50 + 0x8 + + + 16 + 0x1 + H_MEM[%s] + The memory that stores GCM hash subkey + 0x60 + 0x8 + + + 16 + 0x1 + J0_MEM[%s] + The memory that stores J0 + 0x70 + 0x8 + + + 16 + 0x1 + T0_MEM[%s] + The memory that stores T0 + 0x80 + 0x8 + + + DMA_ENABLE + AES accelerator working mode register + 0x90 + 0x20 + + + DMA_ENABLE + Defines the working mode of the AES accelerator. 1'b0: typical AES working mode, 1'b1: DMA-AES working mode. + 0 + 1 + read-write + + + + + BLOCK_MODE + AES cipher block mode register + 0x94 + 0x20 + + + BLOCK_MODE + Defines the block cipher mode of the AES accelerator operating under the DMA-AES working mode. 0x0: ECB, 0x1: CBC, 0x2: OFB, 0x3: CTR, 0x4: CFB-8, 0x5: CFB-128, 0x6: reserved, 0x7: reserved. + 0 + 3 + read-write + + + + + BLOCK_NUM + AES block number register + 0x98 + 0x20 + + + BLOCK_NUM + Stores the Block Number of plaintext or ciphertext when the AES accelerator operates under the DMA-AES working mode. + 0 + 32 + read-write + + + + + INC_SEL + Standard incrementing function configure register + 0x9C + 0x20 + + + INC_SEL + Defines the Standard Incrementing Function for CTR block operation. Set this bit to 0 or 1 to choose INC32 or INC128. + 0 + 1 + read-write + + + + + AAD_BLOCK_NUM + Additional Authential Data block number register + 0xA0 + 0x20 + + + AAD_BLOCK_NUM + Those bits stores the number of AAD block. + 0 + 32 + read-write + + + + + REMAINDER_BIT_NUM + AES remainder bit number register + 0xA4 + 0x20 + + + REMAINDER_BIT_NUM + Those bits stores the number of remainder bit. + 0 + 7 + read-write + + + + + CONTINUE + AES continue register + 0xA8 + 0x20 + + + CONTINUE + Set this bit to 1 to continue GCM operation. + 0 + 1 + write-only + + + + + INT_CLR + AES Interrupt clear register + 0xAC + 0x20 + + + INT_CLEAR + Set this bit to 1 to clear AES interrupt. + 0 + 1 + write-only + + + + + INT_ENA + DMA-AES Interrupt enable register + 0xB0 + 0x20 + + + INT_ENA + Set this bit to 1 to enable AES interrupt and 0 to disable interrupt. This field is only effective for DMA-AES operation. + 0 + 1 + read-write + + + + + DATE + AES version control register + 0xB4 + 0x20 + 0x20191210 + + + DATE + This bits stores the version information of AES. + 0 + 30 + read-write + + + + + DMA_EXIT + AES-DMA exit config + 0xB8 + 0x20 + + + DMA_EXIT + Set this bit to 1 to exit AES operation. This field is only effective for DMA-AES operation. + 0 + 1 + write-only + + + + + + + APB_CTRL + APB (Advanced Peripheral Bus) Controller + APB_CTRL + 0x60026000 + + 0x0 + 0xCC + registers + + + + SYSCLK_CONF + ******* Description *********** + 0x0 + 0x20 + 0x00000001 + + + PRE_DIV_CNT + ******* Description *********** + 0 + 10 + read-write + + + CLK_320M_EN + ******* Description *********** + 10 + 1 + read-write + + + CLK_EN + ******* Description *********** + 11 + 1 + read-write + + + RST_TICK_CNT + ******* Description *********** + 12 + 1 + read-write + + + + + TICK_CONF + ******* Description *********** + 0x4 + 0x20 + 0x00010727 + + + XTAL_TICK_NUM + ******* Description *********** + 0 + 8 + read-write + + + CK8M_TICK_NUM + ******* Description *********** + 8 + 8 + read-write + + + TICK_ENABLE + ******* Description *********** + 16 + 1 + read-write + + + + + CLK_OUT_EN + ******* Description *********** + 0x8 + 0x20 + 0x000007FF + + + CLK20_OEN + ******* Description *********** + 0 + 1 + read-write + + + CLK22_OEN + ******* Description *********** + 1 + 1 + read-write + + + CLK44_OEN + ******* Description *********** + 2 + 1 + read-write + + + CLK_BB_OEN + ******* Description *********** + 3 + 1 + read-write + + + CLK80_OEN + ******* Description *********** + 4 + 1 + read-write + + + CLK160_OEN + ******* Description *********** + 5 + 1 + read-write + + + CLK_320M_OEN + ******* Description *********** + 6 + 1 + read-write + + + CLK_ADC_INF_OEN + ******* Description *********** + 7 + 1 + read-write + + + CLK_DAC_CPU_OEN + ******* Description *********** + 8 + 1 + read-write + + + CLK40X_BB_OEN + ******* Description *********** + 9 + 1 + read-write + + + CLK_XTAL_OEN + ******* Description *********** + 10 + 1 + read-write + + + + + WIFI_BB_CFG + ******* Description *********** + 0xC + 0x20 + + + WIFI_BB_CFG + ******* Description *********** + 0 + 32 + read-write + + + + + WIFI_BB_CFG_2 + ******* Description *********** + 0x10 + 0x20 + + + WIFI_BB_CFG_2 + ******* Description *********** + 0 + 32 + read-write + + + + + WIFI_CLK_EN + ******* Description *********** + 0x14 + 0x20 + 0xFFFCE030 + + + WIFI_CLK_EN + ******* Description *********** + 0 + 32 + read-write + + + + + WIFI_RST_EN + ******* Description *********** + 0x18 + 0x20 + + + WIFI_RST + ******* Description *********** + 0 + 32 + read-write + + + + + HOST_INF_SEL + ******* Description *********** + 0x1C + 0x20 + + + PERI_IO_SWAP + ******* Description *********** + 0 + 8 + read-write + + + + + EXT_MEM_PMS_LOCK + ******* Description *********** + 0x20 + 0x20 + + + EXT_MEM_PMS_LOCK + ******* Description *********** + 0 + 1 + read-write + + + + + EXT_MEM_WRITEBACK_BYPASS + ******* Description *********** + 0x24 + 0x20 + + + WRITEBACK_BYPASS + Set 1 to bypass cache writeback request to external memory so that spi will not check its attribute. + 0 + 1 + read-write + + + + + FLASH_ACE0_ATTR + ******* Description *********** + 0x28 + 0x20 + 0x000000FF + + + FLASH_ACE0_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + FLASH_ACE1_ATTR + ******* Description *********** + 0x2C + 0x20 + 0x000000FF + + + FLASH_ACE1_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + FLASH_ACE2_ATTR + ******* Description *********** + 0x30 + 0x20 + 0x000000FF + + + FLASH_ACE2_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + FLASH_ACE3_ATTR + ******* Description *********** + 0x34 + 0x20 + 0x000000FF + + + FLASH_ACE3_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + FLASH_ACE0_ADDR + ******* Description *********** + 0x38 + 0x20 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + FLASH_ACE1_ADDR + ******* Description *********** + 0x3C + 0x20 + 0x10000000 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + FLASH_ACE2_ADDR + ******* Description *********** + 0x40 + 0x20 + 0x20000000 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + FLASH_ACE3_ADDR + ******* Description *********** + 0x44 + 0x20 + 0x30000000 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + FLASH_ACE0_SIZE + ******* Description *********** + 0x48 + 0x20 + 0x00001000 + + + FLASH_ACE0_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + FLASH_ACE1_SIZE + ******* Description *********** + 0x4C + 0x20 + 0x00001000 + + + FLASH_ACE1_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + FLASH_ACE2_SIZE + ******* Description *********** + 0x50 + 0x20 + 0x00001000 + + + FLASH_ACE2_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + FLASH_ACE3_SIZE + ******* Description *********** + 0x54 + 0x20 + 0x00001000 + + + FLASH_ACE3_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + SRAM_ACE0_ATTR + ******* Description *********** + 0x58 + 0x20 + 0x000000FF + + + SRAM_ACE0_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + SRAM_ACE1_ATTR + ******* Description *********** + 0x5C + 0x20 + 0x000000FF + + + SRAM_ACE1_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + SRAM_ACE2_ATTR + ******* Description *********** + 0x60 + 0x20 + 0x000000FF + + + SRAM_ACE2_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + SRAM_ACE3_ATTR + ******* Description *********** + 0x64 + 0x20 + 0x000000FF + + + SRAM_ACE3_ATTR + ******* Description *********** + 0 + 9 + read-write + + + + + SRAM_ACE0_ADDR + ******* Description *********** + 0x68 + 0x20 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + SRAM_ACE1_ADDR + ******* Description *********** + 0x6C + 0x20 + 0x10000000 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + SRAM_ACE2_ADDR + ******* Description *********** + 0x70 + 0x20 + 0x20000000 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + SRAM_ACE3_ADDR + ******* Description *********** + 0x74 + 0x20 + 0x30000000 + + + S + ******* Description *********** + 0 + 32 + read-write + + + + + SRAM_ACE0_SIZE + ******* Description *********** + 0x78 + 0x20 + 0x00001000 + + + SRAM_ACE0_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + SRAM_ACE1_SIZE + ******* Description *********** + 0x7C + 0x20 + 0x00001000 + + + SRAM_ACE1_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + SRAM_ACE2_SIZE + ******* Description *********** + 0x80 + 0x20 + 0x00001000 + + + SRAM_ACE2_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + SRAM_ACE3_SIZE + ******* Description *********** + 0x84 + 0x20 + 0x00001000 + + + SRAM_ACE3_SIZE + ******* Description *********** + 0 + 16 + read-write + + + + + SPI_MEM_PMS_CTRL + ******* Description *********** + 0x88 + 0x20 + + + SPI_MEM_REJECT_INT + ******* Description *********** + 0 + 1 + read-only + + + SPI_MEM_REJECT_CLR + ******* Description *********** + 1 + 1 + write-only + + + SPI_MEM_REJECT_CDE + ******* Description *********** + 2 + 5 + read-only + + + + + SPI_MEM_REJECT_ADDR + ******* Description *********** + 0x8C + 0x20 + + + SPI_MEM_REJECT_ADDR + ******* Description *********** + 0 + 32 + read-only + + + + + SDIO_CTRL + ******* Description *********** + 0x90 + 0x20 + + + SDIO_WIN_ACCESS_EN + ******* Description *********** + 0 + 1 + read-write + + + + + REDCY_SIG0 + ******* Description *********** + 0x94 + 0x20 + + + REDCY_SIG0 + ******* Description *********** + 0 + 31 + read-write + + + REDCY_ANDOR + ******* Description *********** + 31 + 1 + read-only + + + + + REDCY_SIG1 + ******* Description *********** + 0x98 + 0x20 + + + REDCY_SIG1 + ******* Description *********** + 0 + 31 + read-write + + + REDCY_NANDOR + ******* Description *********** + 31 + 1 + read-only + + + + + FRONT_END_MEM_PD + ******* Description *********** + 0x9C + 0x20 + 0x00000055 + + + AGC_MEM_FORCE_PU + ******* Description *********** + 0 + 1 + read-write + + + AGC_MEM_FORCE_PD + ******* Description *********** + 1 + 1 + read-write + + + PBUS_MEM_FORCE_PU + ******* Description *********** + 2 + 1 + read-write + + + PBUS_MEM_FORCE_PD + ******* Description *********** + 3 + 1 + read-write + + + DC_MEM_FORCE_PU + ******* Description *********** + 4 + 1 + read-write + + + DC_MEM_FORCE_PD + ******* Description *********** + 5 + 1 + read-write + + + FREQ_MEM_FORCE_PU + ******* Description *********** + 6 + 1 + read-write + + + FREQ_MEM_FORCE_PD + ******* Description *********** + 7 + 1 + read-write + + + + + SPI_MEM_ECC_CTRL + ******* Description *********** + 0xA0 + 0x20 + 0x00200000 + + + FLASH_PAGE_SIZE + Set the page size of the used MSPI flash. 0: 256 bytes. 1: 512 bytes. 2: 1024 bytes. 3: 2048 bytes. + 18 + 2 + read-write + + + SRAM_PAGE_SIZE + Set the page size of the used MSPI external RAM. 0: 256 bytes. 1: 512 bytes. 2: 1024 bytes. 3: 2048 bytes. + 20 + 2 + read-write + + + + + CLKGATE_FORCE_ON + ******* Description *********** + 0xA8 + 0x20 + 0x00003FFF + + + ROM_CLKGATE_FORCE_ON + ******* Description *********** + 0 + 3 + read-write + + + SRAM_CLKGATE_FORCE_ON + ******* Description *********** + 3 + 11 + read-write + + + + + MEM_POWER_DOWN + ******* Description *********** + 0xAC + 0x20 + + + ROM_POWER_DOWN + ******* Description *********** + 0 + 3 + read-write + + + SRAM_POWER_DOWN + ******* Description *********** + 3 + 11 + read-write + + + + + MEM_POWER_UP + ******* Description *********** + 0xB0 + 0x20 + 0x00003FFF + + + ROM_POWER_UP + ******* Description *********** + 0 + 3 + read-write + + + SRAM_POWER_UP + ******* Description *********** + 3 + 11 + read-write + + + + + RETENTION_CTRL + ******* Description *********** + 0xB4 + 0x20 + + + RETENTION_CPU_LINK_ADDR + ******* Description *********** + 0 + 27 + read-write + + + NOBYPASS_CPU_ISO_RST + ******* Description *********** + 27 + 1 + read-write + + + + + RETENTION_CTRL1 + ******* Description *********** + 0xB8 + 0x20 + + + RETENTION_TAG_LINK_ADDR + ******* Description *********** + 0 + 27 + read-write + + + + + RETENTION_CTRL2 + ******* Description *********** + 0xBC + 0x20 + 0x001FEFF0 + + + RET_ICACHE_SIZE + ******* Description *********** + 4 + 8 + read-write + + + RET_ICACHE_VLD_SIZE + ******* Description *********** + 13 + 8 + read-write + + + RET_ICACHE_START_POINT + ******* Description *********** + 22 + 8 + read-write + + + RET_ICACHE_ENABLE + ******* Description *********** + 31 + 1 + read-write + + + + + RETENTION_CTRL3 + ******* Description *********** + 0xC0 + 0x20 + 0x003FFFF0 + + + RET_DCACHE_SIZE + ******* Description *********** + 4 + 9 + read-write + + + RET_DCACHE_VLD_SIZE + ******* Description *********** + 13 + 9 + read-write + + + RET_DCACHE_START_POINT + ******* Description *********** + 22 + 9 + read-write + + + RET_DCACHE_ENABLE + ******* Description *********** + 31 + 1 + read-write + + + + + RETENTION_CTRL4 + ******* Description *********** + 0xC4 + 0x20 + 0xFFFFFFFF + + + RETENTION_INV_CFG + ******* Description *********** + 0 + 32 + read-write + + + + + RETENTION_CTRL5 + ******* Description *********** + 0xC8 + 0x20 + + + RETENTION_DISABLE + ******* Description *********** + 0 + 1 + read-write + + + + + DATE + ******* Description *********** + 0x3FC + 0x20 + 0x02101150 + + + DATE + Version control + 0 + 32 + read-write + + + + + + + APB_SARADC + SAR (Successive Approximation Register) Analog-to-Digital Converter + APB_SARADC + 0x60040000 + + 0x0 + 0x70 + registers + + + APB_ADC + 65 + + + + CTRL + configure apb saradc controller + 0x0 + 0x20 + 0x407F8240 + + + SARADC_START_FORCE + enable start saradc by sw + 0 + 1 + read-write + + + SARADC_START + start saradc by sw + 1 + 1 + read-write + + + SARADC_WORK_MODE + 0: single mode, 1: double mode, 2: alternate mode + 3 + 2 + read-write + + + SARADC_SAR_SEL + 0: SAR1, 1: SAR2, only work for single SAR mode + 5 + 1 + read-write + + + SARADC_SAR_CLK_GATED + enable SAR CLK gate when saradc idle + 6 + 1 + read-write + + + SARADC_SAR_CLK_DIV + SAR clock divider + 7 + 8 + read-write + + + SARADC_SAR1_PATT_LEN + 0 ~ 15 means length 1 ~ 16 + 15 + 4 + read-write + + + SARADC_SAR2_PATT_LEN + 0 ~ 15 means length 1 ~ 16 + 19 + 4 + read-write + + + SARADC_SAR1_PATT_P_CLEAR + clear the pointer of pattern table for DIG ADC1 CTRL + 23 + 1 + read-write + + + SARADC_SAR2_PATT_P_CLEAR + clear the pointer of pattern table for DIG ADC2 CTRL + 24 + 1 + read-write + + + SARADC_DATA_SAR_SEL + 1: sar_sel will be coded by the MSB of the 16-bit output data, in this case the resolution should not be larger than 11 bits. + 25 + 1 + read-write + + + SARADC_DATA_TO_I2S + 1: I2S input data is from SAR ADC (for DMA), 0: I2S input data is from GPIO matrix + 26 + 1 + read-write + + + SARADC_XPD_SAR_FORCE + force option to xpd sar blocks + 27 + 2 + read-write + + + SARADC_WAIT_ARB_CYCLE + wait arbit signal stable after sar_done + 30 + 2 + read-write + + + + + CTRL2 + configure apb saradc controller + 0x4 + 0x20 + 0x0000A1FE + + + SARADC_MEAS_NUM_LIMIT + enable apb saradc limit the sample num + 0 + 1 + read-write + + + SARADC_MAX_MEAS_NUM + max conversion number + 1 + 8 + read-write + + + SARADC_SAR1_INV + 1: data to DIG ADC1 CTRL is inverted, otherwise not + 9 + 1 + read-write + + + SARADC_SAR2_INV + 1: data to DIG ADC2 CTRL is inverted, otherwise not + 10 + 1 + read-write + + + SARADC_TIMER_SEL + 1: select saradc timer 0: i2s_ws trigger + 11 + 1 + read-write + + + SARADC_TIMER_TARGET + to set saradc timer target + 12 + 12 + read-write + + + SARADC_TIMER_EN + to enable saradc timer trigger + 24 + 1 + read-write + + + + + FILTER_CTRL1 + configure saradc filter + 0x8 + 0x20 + + + FILTER_FACTOR1 + apb saradc factor1 + 26 + 3 + read-write + + + FILTER_FACTOR0 + apb saradc factor0 + 29 + 3 + read-write + + + + + FSM_WAIT + configure apb saradc fsm + 0xC + 0x20 + 0x00FF0808 + + + SARADC_XPD_WAIT + the cycle which saradc controller in xpd state + 0 + 8 + read-write + + + SARADC_RSTB_WAIT + the cycle which saradc controller in rst state + 8 + 8 + read-write + + + SARADC_STANDBY_WAIT + the cycle which saradc controller in standby state + 16 + 8 + read-write + + + + + SAR1_STATUS + saradc1 status for debug + 0x10 + 0x20 + + + SARADC_SAR1_STATUS + saradc1 status + 0 + 32 + read-only + + + + + SAR2_STATUS + saradc2 status for debug + 0x14 + 0x20 + + + SARADC_SAR2_STATUS + saradc2 status + 0 + 32 + read-only + + + + + SAR1_PATT_TAB1 + configure apb saradc pattern table + 0x18 + 0x20 + + + SARADC_SAR1_PATT_TAB1 + item 0 ~ 3 for pattern table 1 (each item 6bit) + 0 + 24 + read-write + + + + + SAR1_PATT_TAB2 + configure apb saradc pattern table + 0x1C + 0x20 + + + SARADC_SAR1_PATT_TAB2 + Item 4 ~ 7 for pattern table 1 (each item 6bit) + 0 + 24 + read-write + + + + + SAR1_PATT_TAB3 + configure apb saradc pattern table + 0x20 + 0x20 + + + SARADC_SAR1_PATT_TAB3 + Item 8 ~ 11 for pattern table 1 (each item 6bit) + 0 + 24 + read-write + + + + + SAR1_PATT_TAB4 + configure apb saradc pattern table + 0x24 + 0x20 + + + SARADC_SAR1_PATT_TAB4 + Item 12 ~ 15 for pattern table 1 (each item 6bit) + 0 + 24 + read-write + + + + + SAR2_PATT_TAB1 + configure apb saradc pattern table + 0x28 + 0x20 + + + SARADC_SAR2_PATT_TAB1 + item 0 ~ 3 for pattern table 2 (each item 6bit) + 0 + 24 + read-write + + + + + SAR2_PATT_TAB2 + configure apb saradc pattern table + 0x2C + 0x20 + + + SARADC_SAR2_PATT_TAB2 + Item 4 ~ 7 for pattern table 2 (each item 6bit) + 0 + 24 + read-write + + + + + SAR2_PATT_TAB3 + configure apb saradc pattern table + 0x30 + 0x20 + + + SARADC_SAR2_PATT_TAB3 + Item 8 ~ 11 for pattern table 2 (each item 6bit) + 0 + 24 + read-write + + + + + SAR2_PATT_TAB4 + configure apb saradc pattern table + 0x34 + 0x20 + + + SARADC_SAR2_PATT_TAB4 + Item 12 ~ 15 for pattern table 2 (each item 6bit) + 0 + 24 + read-write + + + + + ARB_CTRL + configure apb saradc arbit + 0x38 + 0x20 + 0x00000900 + + + ADC_ARB_APB_FORCE + adc2 arbiter force to enableapb controller + 2 + 1 + read-write + + + ADC_ARB_RTC_FORCE + adc2 arbiter force to enable rtc controller + 3 + 1 + read-write + + + ADC_ARB_WIFI_FORCE + adc2 arbiter force to enable wifi controller + 4 + 1 + read-write + + + ADC_ARB_GRANT_FORCE + adc2 arbiter force grant + 5 + 1 + read-write + + + ADC_ARB_APB_PRIORITY + Set adc2 arbiterapb priority + 6 + 2 + read-write + + + ADC_ARB_RTC_PRIORITY + Set adc2 arbiter rtc priority + 8 + 2 + read-write + + + ADC_ARB_WIFI_PRIORITY + Set adc2 arbiter wifi priority + 10 + 2 + read-write + + + ADC_ARB_FIX_PRIORITY + adc2 arbiter uses fixed priority + 12 + 1 + read-write + + + + + FILTER_CTRL0 + configure apb saradc arbit + 0x3C + 0x20 + 0x006B4000 + + + FILTER_CHANNEL1 + configure the filter1 channel + 14 + 5 + read-write + + + FILTER_CHANNEL0 + configure the filter0 channel + 19 + 5 + read-write + + + FILTER_RESET + enable apb_adc1_filter + 31 + 1 + read-write + + + + + APB_SARADC1_DATA_STATUS + get apb saradc sample data + 0x40 + 0x20 + + + APB_SARADC1_DATA + apbsaradc sample data + 0 + 17 + read-only + + + + + THRES0_CTRL + configure apb saradc thres monitor + 0x44 + 0x20 + 0x0003FFED + + + THRES0_CHANNEL + configure which channel thres0 monitor + 0 + 5 + read-write + + + THRES0_HIGH + thres0 monitor high thres + 5 + 13 + read-write + + + THRES0_LOW + thres0 monitor low thres + 18 + 13 + read-write + + + + + THRES1_CTRL + configure apb saradc thres monitor + 0x48 + 0x20 + 0x0003FFED + + + THRES1_CHANNEL + configure which channel thres0 monitor + 0 + 5 + read-write + + + THRES1_HIGH + thres1 monitor high thres + 5 + 13 + read-write + + + THRES1_LOW + thres1 monitor low thres + 18 + 13 + read-write + + + + + THRES_CTRL + configure thres monitor enable + 0x58 + 0x20 + + + THRES_ALL_EN + enable thres0 to monitor all channel + 27 + 1 + read-write + + + THRES3_EN + no public + 28 + 1 + read-write + + + THRES2_EN + no public + 29 + 1 + read-write + + + THRES1_EN + enable thres1 + 30 + 1 + read-write + + + THRES0_EN + enable thres0 + 31 + 1 + read-write + + + + + INT_ENA + enable interrupt + 0x5C + 0x20 + + + THRES1_LOW_INT_ENA + interrupt of thres1 low + 26 + 1 + read-write + + + THRES0_LOW_INT_ENA + interrupt of thres0 low + 27 + 1 + read-write + + + THRES1_HIGH_INT_ENA + interrupt of thres1 high + 28 + 1 + read-write + + + THRES0_HIGH_INT_ENA + interrupt of thres0 high + 29 + 1 + read-write + + + APB_SARADC2_DONE_INT_ENA + interrupt of sar2 done + 30 + 1 + read-write + + + APB_SARADC1_DONE_INT_ENA + interrupt of sar1 done + 31 + 1 + read-write + + + + + INT_RAW + raw of interrupt + 0x60 + 0x20 + + + THRES1_LOW_INT_RAW + interrupt of thres1 low + 26 + 1 + read-only + + + THRES0_LOW_INT_RAW + interrupt of thres0 low + 27 + 1 + read-only + + + THRES1_HIGH_INT_RAW + interrupt of thres1 high + 28 + 1 + read-only + + + THRES0_HIGH_INT_RAW + interrupt of thres0 high + 29 + 1 + read-only + + + APB_SARADC2_DONE_INT_RAW + interrupt of sar2 done + 30 + 1 + read-only + + + APB_SARADC1_DONE_INT_RAW + interrupt of sar1 done + 31 + 1 + read-only + + + + + INT_ST + state of interrupt + 0x64 + 0x20 + + + THRES1_LOW_INT_ST + interrupt of thres1 low + 26 + 1 + read-only + + + THRES0_LOW_INT_ST + interrupt of thres0 low + 27 + 1 + read-only + + + THRES1_HIGH_INT_ST + interrupt of thres1 high + 28 + 1 + read-only + + + THRES0_HIGH_INT_ST + interrupt of thres0 high + 29 + 1 + read-only + + + APB_SARADC2_DONE_INT_ST + interrupt of sar2 done + 30 + 1 + read-only + + + APB_SARADC1_DONE_INT_ST + interrupt of sar1 done + 31 + 1 + read-only + + + + + INT_CLR + clear interrupt + 0x68 + 0x20 + + + THRES1_LOW_INT_CLR + interrupt of thres1 low + 26 + 1 + write-only + + + THRES0_LOW_INT_CLR + interrupt of thres0 low + 27 + 1 + write-only + + + THRES1_HIGH_INT_CLR + interrupt of thres1 high + 28 + 1 + write-only + + + THRES0_HIGH_INT_CLR + interrupt of thres0 high + 29 + 1 + write-only + + + APB_SARADC2_DONE_INT_CLR + interrupt of sar2 done + 30 + 1 + write-only + + + APB_SARADC1_DONE_INT_CLR + interrupt of sar1 done + 31 + 1 + write-only + + + + + DMA_CONF + configure apb saradc dma + 0x6C + 0x20 + 0x000000FF + + + APB_ADC_EOF_NUM + the dma_in_suc_eof gen when sample cnt = spi_eof_num + 0 + 16 + read-write + + + APB_ADC_RESET_FSM + reset_apb_adc_state + 30 + 1 + read-write + + + APB_ADC_TRANS + enable apb_adc use spi_dma + 31 + 1 + read-write + + + + + CLKM_CONF + configure apb saradc clock + 0x70 + 0x20 + 0x00000004 + + + CLKM_DIV_NUM + Integral clock divider value + 0 + 8 + read-write + + + CLKM_DIV_B + Fractional clock divider numerator value + 8 + 6 + read-write + + + CLKM_DIV_A + Fractional clock divider denominator value + 14 + 6 + read-write + + + CLK_EN + no public + 20 + 1 + read-write + + + CLK_SEL + Set this bit to enable clk_apll + 21 + 2 + read-write + + + + + APB_SARADC2_DATA_STATUS + get apb saradc2 sample data + 0x78 + 0x20 + + + APB_SARADC2_DATA + apb saradc2 sample data + 0 + 17 + read-only + + + + + APB_CTRL_DATE + version + 0x3FC + 0x20 + 0x02101180 + + + APB_CTRL_DATE + version + 0 + 32 + read-write + + + + + + + BB + BB Peripheral + BB + 0x6001D000 + + 0x0 + 0x4 + registers + + + + BBPD_CTRL + Baseband control register + 0x54 + 0x20 + + + DC_EST_FORCE_PD + 0 + 1 + read-write + + + DC_EST_FORCE_PU + 1 + 1 + read-write + + + FFT_FORCE_PD + 2 + 1 + read-write + + + FFT_FORCE_PU + 3 + 1 + read-write + + + + + + + ASSIST_DEBUG + Debug Assist + DEBUG_ASSIST + 0x600CE000 + + 0x0 + 0x15C + registers + + + ASSIST_DEBUG + 83 + + + + CORE_0_INTERRUPT_ENA + core0 monitor enable configuration register + 0x0 + 0x20 + + + CORE_0_AREA_DRAM0_0_RD_ENA + Core0 dram0 area0 read monitor enable + 0 + 1 + read-write + + + CORE_0_AREA_DRAM0_0_WR_ENA + Core0 dram0 area0 write monitor enable + 1 + 1 + read-write + + + CORE_0_AREA_DRAM0_1_RD_ENA + Core0 dram0 area1 read monitor enable + 2 + 1 + read-write + + + CORE_0_AREA_DRAM0_1_WR_ENA + Core0 dram0 area1 write monitor enable + 3 + 1 + read-write + + + CORE_0_AREA_PIF_0_RD_ENA + Core0 PIF area0 read monitor enable + 4 + 1 + read-write + + + CORE_0_AREA_PIF_0_WR_ENA + Core0 PIF area0 write monitor enable + 5 + 1 + read-write + + + CORE_0_AREA_PIF_1_RD_ENA + Core0 PIF area1 read monitor enable + 6 + 1 + read-write + + + CORE_0_AREA_PIF_1_WR_ENA + Core0 PIF area1 write monitor enable + 7 + 1 + read-write + + + CORE_0_SP_SPILL_MIN_ENA + Core0 stackpoint overflow monitor enable + 8 + 1 + read-write + + + CORE_0_SP_SPILL_MAX_ENA + Core0 stackpoint underflow monitor enable + 9 + 1 + read-write + + + CORE_0_IRAM0_EXCEPTION_MONITOR_ENA + IBUS busy monitor enable + 10 + 1 + read-write + + + CORE_0_DRAM0_EXCEPTION_MONITOR_ENA + DBUS busy monitor enbale + 11 + 1 + read-write + + + + + CORE_0_INTERRUPT_RAW + core0 monitor interrupt status register + 0x4 + 0x20 + + + CORE_0_AREA_DRAM0_0_RD_RAW + Core0 dram0 area0 read monitor interrupt status + 0 + 1 + read-only + + + CORE_0_AREA_DRAM0_0_WR_RAW + Core0 dram0 area0 write monitor interrupt status + 1 + 1 + read-only + + + CORE_0_AREA_DRAM0_1_RD_RAW + Core0 dram0 area1 read monitor interrupt status + 2 + 1 + read-only + + + CORE_0_AREA_DRAM0_1_WR_RAW + Core0 dram0 area1 write monitor interrupt status + 3 + 1 + read-only + + + CORE_0_AREA_PIF_0_RD_RAW + Core0 PIF area0 read monitor interrupt status + 4 + 1 + read-only + + + CORE_0_AREA_PIF_0_WR_RAW + Core0 PIF area0 write monitor interrupt status + 5 + 1 + read-only + + + CORE_0_AREA_PIF_1_RD_RAW + Core0 PIF area1 read monitor interrupt status + 6 + 1 + read-only + + + CORE_0_AREA_PIF_1_WR_RAW + Core0 PIF area1 write monitor interrupt status + 7 + 1 + read-only + + + CORE_0_SP_SPILL_MIN_RAW + Core0 stackpoint overflow monitor interrupt status + 8 + 1 + read-only + + + CORE_0_SP_SPILL_MAX_RAW + Core0 stackpoint underflow monitor interrupt status + 9 + 1 + read-only + + + CORE_0_IRAM0_EXCEPTION_MONITOR_RAW + IBUS busy monitor interrupt status + 10 + 1 + read-only + + + CORE_0_DRAM0_EXCEPTION_MONITOR_RAW + DBUS busy monitor initerrupt status + 11 + 1 + read-only + + + + + CORE_0_INTERRUPT_RLS + core0 monitor interrupt enable register + 0x8 + 0x20 + + + CORE_0_AREA_DRAM0_0_RD_RLS + Core0 dram0 area0 read monitor interrupt enable + 0 + 1 + read-write + + + CORE_0_AREA_DRAM0_0_WR_RLS + Core0 dram0 area0 write monitor interrupt enable + 1 + 1 + read-write + + + CORE_0_AREA_DRAM0_1_RD_RLS + Core0 dram0 area1 read monitor interrupt enable + 2 + 1 + read-write + + + CORE_0_AREA_DRAM0_1_WR_RLS + Core0 dram0 area1 write monitor interrupt enable + 3 + 1 + read-write + + + CORE_0_AREA_PIF_0_RD_RLS + Core0 PIF area0 read monitor interrupt enable + 4 + 1 + read-write + + + CORE_0_AREA_PIF_0_WR_RLS + Core0 PIF area0 write monitor interrupt enable + 5 + 1 + read-write + + + CORE_0_AREA_PIF_1_RD_RLS + Core0 PIF area1 read monitor interrupt enable + 6 + 1 + read-write + + + CORE_0_AREA_PIF_1_WR_RLS + Core0 PIF area1 write monitor interrupt enable + 7 + 1 + read-write + + + CORE_0_SP_SPILL_MIN_RLS + Core0 stackpoint overflow monitor interrupt enable + 8 + 1 + read-write + + + CORE_0_SP_SPILL_MAX_RLS + Core0 stackpoint underflow monitor interrupt enable + 9 + 1 + read-write + + + CORE_0_IRAM0_EXCEPTION_MONITOR_RLS + IBUS busy monitor interrupt enable + 10 + 1 + read-write + + + CORE_0_DRAM0_EXCEPTION_MONITOR_RLS + DBUS busy monitor interrupt enbale + 11 + 1 + read-write + + + + + CORE_0_INTERRUPT_CLR + core0 monitor interrupt clr register + 0xC + 0x20 + + + CORE_0_AREA_DRAM0_0_RD_CLR + Core0 dram0 area0 read monitor interrupt clr + 0 + 1 + read-write + + + CORE_0_AREA_DRAM0_0_WR_CLR + Core0 dram0 area0 write monitor interrupt clr + 1 + 1 + read-write + + + CORE_0_AREA_DRAM0_1_RD_CLR + Core0 dram0 area1 read monitor interrupt clr + 2 + 1 + read-write + + + CORE_0_AREA_DRAM0_1_WR_CLR + Core0 dram0 area1 write monitor interrupt clr + 3 + 1 + read-write + + + CORE_0_AREA_PIF_0_RD_CLR + Core0 PIF area0 read monitor interrupt clr + 4 + 1 + read-write + + + CORE_0_AREA_PIF_0_WR_CLR + Core0 PIF area0 write monitor interrupt clr + 5 + 1 + read-write + + + CORE_0_AREA_PIF_1_RD_CLR + Core0 PIF area1 read monitor interrupt clr + 6 + 1 + read-write + + + CORE_0_AREA_PIF_1_WR_CLR + Core0 PIF area1 write monitor interrupt clr + 7 + 1 + read-write + + + CORE_0_SP_SPILL_MIN_CLR + Core0 stackpoint overflow monitor interrupt clr + 8 + 1 + read-write + + + CORE_0_SP_SPILL_MAX_CLR + Core0 stackpoint underflow monitor interrupt clr + 9 + 1 + read-write + + + CORE_0_IRAM0_EXCEPTION_MONITOR_CLR + IBUS busy monitor interrupt clr + 10 + 1 + read-write + + + CORE_0_DRAM0_EXCEPTION_MONITOR_CLR + DBUS busy monitor interrupt clr + 11 + 1 + read-write + + + + + CORE_0_AREA_DRAM0_0_MIN + core0 dram0 region0 addr configuration register + 0x10 + 0x20 + 0xFFFFFFFF + + + CORE_0_AREA_DRAM0_0_MIN + Core0 dram0 region0 start addr + 0 + 32 + read-write + + + + + CORE_0_AREA_DRAM0_0_MAX + core0 dram0 region0 addr configuration register + 0x14 + 0x20 + + + CORE_0_AREA_DRAM0_0_MAX + Core0 dram0 region0 end addr + 0 + 32 + read-write + + + + + CORE_0_AREA_DRAM0_1_MIN + core0 dram0 region1 addr configuration register + 0x18 + 0x20 + 0xFFFFFFFF + + + CORE_0_AREA_DRAM0_1_MIN + Core0 dram0 region1 start addr + 0 + 32 + read-write + + + + + CORE_0_AREA_DRAM0_1_MAX + core0 dram0 region1 addr configuration register + 0x1C + 0x20 + + + CORE_0_AREA_DRAM0_1_MAX + Core0 dram0 region1 end addr + 0 + 32 + read-write + + + + + CORE_0_AREA_PIF_0_MIN + core0 PIF region0 addr configuration register + 0x20 + 0x20 + 0xFFFFFFFF + + + CORE_0_AREA_PIF_0_MIN + Core0 PIF region0 start addr + 0 + 32 + read-write + + + + + CORE_0_AREA_PIF_0_MAX + core0 PIF region0 addr configuration register + 0x24 + 0x20 + + + CORE_0_AREA_PIF_0_MAX + Core0 PIF region0 end addr + 0 + 32 + read-write + + + + + CORE_0_AREA_PIF_1_MIN + core0 PIF region1 addr configuration register + 0x28 + 0x20 + 0xFFFFFFFF + + + CORE_0_AREA_PIF_1_MIN + Core0 PIF region1 start addr + 0 + 32 + read-write + + + + + CORE_0_AREA_PIF_1_MAX + core0 PIF region1 addr configuration register + 0x2C + 0x20 + + + CORE_0_AREA_PIF_1_MAX + Core0 PIF region1 end addr + 0 + 32 + read-write + + + + + CORE_0_AREA_SP + core0 area sp status register + 0x30 + 0x20 + 0xFFFFFFFF + + + CORE_0_AREA_SP + the stackpointer when first touch region monitor interrupt + 0 + 32 + read-only + + + + + CORE_0_AREA_PC + core0 area pc status register + 0x34 + 0x20 + + + CORE_0_AREA_PC + the PC when first touch region monitor interrupt + 0 + 32 + read-only + + + + + CORE_0_SP_UNSTABLE + core0 sp unstable configuration register + 0x38 + 0x20 + 0x0000000B + + + CORE_0_SP_UNSTABLE + unstable period when window change,during this period no check stackpointer + 0 + 8 + read-write + + + + + CORE_0_SP_MIN + core0 sp region configuration regsiter + 0x3C + 0x20 + + + CORE_0_SP_MIN + stack min value + 0 + 32 + read-write + + + + + CORE_0_SP_MAX + core0 sp region configuration regsiter + 0x40 + 0x20 + 0xFFFFFFFF + + + CORE_0_SP_MAX + stack max value + 0 + 32 + read-write + + + + + CORE_0_SP_PC + core0 sp pc status register + 0x44 + 0x20 + + + CORE_0_SP_PC + the PC when first touch stack monitor interrupt + 0 + 32 + read-only + + + + + CORE_0_RCD_PDEBUGENABLE + core0 pdebug configuration register + 0x48 + 0x20 + + + CORE_0_RCD_PDEBUGENABLE + Core0 Pdebugenable,set 1 to open core0 Pdebug interface,then can get core0 PC + 0 + 1 + read-write + + + + + CORE_0_RCD_RECORDING + core0 pdebug status register + 0x4C + 0x20 + + + CORE_0_RCD_RECORDING + Pdebug record enable,set 1 to record core0 pdebug interface signal + 0 + 1 + read-write + + + + + CORE_0_RCD_PDEBUGINST + core0 pdebug status register + 0x50 + 0x20 + + + CORE_0_RCD_PDEBUGINST + core0 pdebuginst + 0 + 32 + read-only + + + + + CORE_0_RCD_PDEBUGSTATUS + core0 pdebug status register + 0x54 + 0x20 + + + CORE_0_RCD_PDEBUGSTATUS + core0 pdebugstatus + 0 + 8 + read-only + + + + + CORE_0_RCD_PDEBUGDATA + core0 pdebug status register + 0x58 + 0x20 + + + CORE_0_RCD_PDEBUGDATA + core0_pdebugdata + 0 + 32 + read-only + + + + + CORE_0_RCD_PDEBUGPC + core0 pdebug status register + 0x5C + 0x20 + + + CORE_0_RCD_PDEBUGPC + core0_pdebugPC + 0 + 32 + read-only + + + + + CORE_0_RCD_PDEBUGLS0STAT + core0 pdebug status register + 0x60 + 0x20 + + + CORE_0_RCD_PDEBUGLS0STAT + core0_pdebug_s0stat + 0 + 32 + read-only + + + + + CORE_0_RCD_PDEBUGLS0ADDR + core0 pdebug status register + 0x64 + 0x20 + + + CORE_0_RCD_PDEBUGLS0ADDR + core0_pdebug_s0addr + 0 + 32 + read-only + + + + + CORE_0_RCD_PDEBUGLS0DATA + core0 pdebug status register + 0x68 + 0x20 + + + CORE_0_RCD_PDEBUGLS0DATA + core0_pdebug_s0data + 0 + 32 + read-only + + + + + CORE_0_RCD_SP + core0 pdebug status register + 0x6C + 0x20 + + + CORE_0_RCD_SP + core0_stack pointer + 0 + 32 + read-only + + + + + CORE_0_IRAM0_EXCEPTION_MONITOR_0 + core0 bus busy status regsiter + 0x70 + 0x20 + + + CORE_0_IRAM0_RECORDING_ADDR_0 + The first iram0's addr[25:2] status when trigger IRAM busy interrupt + 0 + 24 + read-only + + + CORE_0_IRAM0_RECORDING_WR_0 + The first iram0's wr status when trigger IRAM busy interrupt + 24 + 1 + read-only + + + CORE_0_IRAM0_RECORDING_LOADSTORE_0 + The first iram0's loadstore status when trigger IRAM busy interrupt + 25 + 1 + read-only + + + + + CORE_0_IRAM0_EXCEPTION_MONITOR_1 + core0 bus busy status regsiter + 0x74 + 0x20 + + + CORE_0_IRAM0_RECORDING_ADDR_1 + The second iram0's addr[25:2] status when trigger IRAM busy interrupt + 0 + 24 + read-only + + + CORE_0_IRAM0_RECORDING_WR_1 + The second iram0's wr status when trigger IRAM busy interrupt + 24 + 1 + read-only + + + CORE_0_IRAM0_RECORDING_LOADSTORE_1 + The second iram0's loadstore status when trigger IRAM busy interrupt + 25 + 1 + read-only + + + + + CORE_0_DRAM0_EXCEPTION_MONITOR_0 + core0 bus busy status regsiter + 0x78 + 0x20 + + + CORE_0_DRAM0_RECORDING_ADDR_0 + The first dram0's addr[25:4] status when trigger DRAM busy interrupt + 0 + 22 + read-only + + + CORE_0_DRAM0_RECORDING_WR_0 + The first dram0's wr status when trigger DRAM busy interrupt + 22 + 1 + read-only + + + + + CORE_0_DRAM0_EXCEPTION_MONITOR_1 + core0 bus busy status regsiter + 0x7C + 0x20 + + + CORE_0_DRAM0_RECORDING_BYTEEN_0 + The first dram0's byteen status when trigger DRAM busy interrupt + 0 + 16 + read-only + + + + + CORE_0_DRAM0_EXCEPTION_MONITOR_2 + core0 bus busy status regsiter + 0x80 + 0x20 + 0xFFFFFFFF + + + CORE_0_DRAM0_RECORDING_PC_0 + The first dram0's PC status when trigger DRAM busy interrupt + 0 + 32 + read-only + + + + + CORE_0_DRAM0_EXCEPTION_MONITOR_3 + core0 bus busy status regsiter + 0x84 + 0x20 + + + CORE_0_DRAM0_RECORDING_ADDR_1 + The second dram0's addr[25:4] status when trigger DRAM busy interrupt + 0 + 22 + read-only + + + CORE_0_DRAM0_RECORDING_WR_1 + The second dram0's wr status when trigger DRAM busy interrupt + 22 + 1 + read-only + + + + + CORE_0_DRAM0_EXCEPTION_MONITOR_4 + core0 bus busy configuration regsiter + 0x88 + 0x20 + + + CORE_0_DRAM0_RECORDING_BYTEEN_1 + The second dram0's byteen status when trigger DRAM busy interrupt + 0 + 16 + read-only + + + + + CORE_0_DRAM0_EXCEPTION_MONITOR_5 + core0 bus busy configuration regsiter + 0x8C + 0x20 + 0xFFFFFFFF + + + CORE_0_DRAM0_RECORDING_PC_1 + The second dram0's PC status when trigger DRAM busy interrupt + 0 + 32 + read-only + + + + + CORE_1_INTERRUPT_ENA + Core1 monitor enable configuration register + 0x90 + 0x20 + + + CORE_1_AREA_DRAM0_0_RD_ENA + Core1 dram0 area0 read monitor enable + 0 + 1 + read-write + + + CORE_1_AREA_DRAM0_0_WR_ENA + Core1 dram0 area0 write monitor enable + 1 + 1 + read-write + + + CORE_1_AREA_DRAM0_1_RD_ENA + Core1 dram0 area1 read monitor enable + 2 + 1 + read-write + + + CORE_1_AREA_DRAM0_1_WR_ENA + Core1 dram0 area1 write monitor enable + 3 + 1 + read-write + + + CORE_1_AREA_PIF_0_RD_ENA + Core1 PIF area0 read monitor enable + 4 + 1 + read-write + + + CORE_1_AREA_PIF_0_WR_ENA + Core1 PIF area0 write monitor enable + 5 + 1 + read-write + + + CORE_1_AREA_PIF_1_RD_ENA + Core1 PIF area1 read monitor enable + 6 + 1 + read-write + + + CORE_1_AREA_PIF_1_WR_ENA + Core1 PIF area1 write monitor enable + 7 + 1 + read-write + + + CORE_1_SP_SPILL_MIN_ENA + Core1 stackpoint overflow monitor enable + 8 + 1 + read-write + + + CORE_1_SP_SPILL_MAX_ENA + Core1 stackpoint underflow monitor enable + 9 + 1 + read-write + + + CORE_1_IRAM0_EXCEPTION_MONITOR_ENA + IBUS busy monitor enable + 10 + 1 + read-write + + + CORE_1_DRAM0_EXCEPTION_MONITOR_ENA + DBUS busy monitor enbale + 11 + 1 + read-write + + + + + CORE_1_INTERRUPT_RAW + Core1 monitor interrupt status register + 0x94 + 0x20 + + + CORE_1_AREA_DRAM0_0_RD_RAW + Core1 dram0 area0 read monitor interrupt status + 0 + 1 + read-only + + + CORE_1_AREA_DRAM0_0_WR_RAW + Core1 dram0 area0 write monitor interrupt status + 1 + 1 + read-only + + + CORE_1_AREA_DRAM0_1_RD_RAW + Core1 dram0 area1 read monitor interrupt status + 2 + 1 + read-only + + + CORE_1_AREA_DRAM0_1_WR_RAW + Core1 dram0 area1 write monitor interrupt status + 3 + 1 + read-only + + + CORE_1_AREA_PIF_0_RD_RAW + Core1 PIF area0 read monitor interrupt status + 4 + 1 + read-only + + + CORE_1_AREA_PIF_0_WR_RAW + Core1 PIF area0 write monitor interrupt status + 5 + 1 + read-only + + + CORE_1_AREA_PIF_1_RD_RAW + Core1 PIF area1 read monitor interrupt status + 6 + 1 + read-only + + + CORE_1_AREA_PIF_1_WR_RAW + Core1 PIF area1 write monitor interrupt status + 7 + 1 + read-only + + + CORE_1_SP_SPILL_MIN_RAW + Core1 stackpoint overflow monitor interrupt status + 8 + 1 + read-only + + + CORE_1_SP_SPILL_MAX_RAW + Core1 stackpoint underflow monitor interrupt status + 9 + 1 + read-only + + + CORE_1_IRAM0_EXCEPTION_MONITOR_RAW + IBUS busy monitor interrupt status + 10 + 1 + read-only + + + CORE_1_DRAM0_EXCEPTION_MONITOR_RAW + DBUS busy monitor initerrupt status + 11 + 1 + read-only + + + + + CORE_1_INTERRUPT_RLS + Core1 monitor interrupt enable register + 0x98 + 0x20 + + + CORE_1_AREA_DRAM0_0_RD_RLS + Core1 dram0 area0 read monitor interrupt enable + 0 + 1 + read-write + + + CORE_1_AREA_DRAM0_0_WR_RLS + Core1 dram0 area0 write monitor interrupt enable + 1 + 1 + read-write + + + CORE_1_AREA_DRAM0_1_RD_RLS + Core1 dram0 area1 read monitor interrupt enable + 2 + 1 + read-write + + + CORE_1_AREA_DRAM0_1_WR_RLS + Core1 dram0 area1 write monitor interrupt enable + 3 + 1 + read-write + + + CORE_1_AREA_PIF_0_RD_RLS + Core1 PIF area0 read monitor interrupt enable + 4 + 1 + read-write + + + CORE_1_AREA_PIF_0_WR_RLS + Core1 PIF area0 write monitor interrupt enable + 5 + 1 + read-write + + + CORE_1_AREA_PIF_1_RD_RLS + Core1 PIF area1 read monitor interrupt enable + 6 + 1 + read-write + + + CORE_1_AREA_PIF_1_WR_RLS + Core1 PIF area1 write monitor interrupt enable + 7 + 1 + read-write + + + CORE_1_SP_SPILL_MIN_RLS + Core1 stackpoint overflow monitor interrupt enable + 8 + 1 + read-write + + + CORE_1_SP_SPILL_MAX_RLS + Core1 stackpoint underflow monitor interrupt enable + 9 + 1 + read-write + + + CORE_1_IRAM0_EXCEPTION_MONITOR_RLS + IBUS busy monitor interrupt enable + 10 + 1 + read-write + + + CORE_1_DRAM0_EXCEPTION_MONITOR_RLS + DBUS busy monitor interrupt enbale + 11 + 1 + read-write + + + + + CORE_1_INTERRUPT_CLR + Core1 monitor interrupt clr register + 0x9C + 0x20 + + + CORE_1_AREA_DRAM0_0_RD_CLR + Core1 dram0 area0 read monitor interrupt clr + 0 + 1 + read-write + + + CORE_1_AREA_DRAM0_0_WR_CLR + Core1 dram0 area0 write monitor interrupt clr + 1 + 1 + read-write + + + CORE_1_AREA_DRAM0_1_RD_CLR + Core1 dram0 area1 read monitor interrupt clr + 2 + 1 + read-write + + + CORE_1_AREA_DRAM0_1_WR_CLR + Core1 dram0 area1 write monitor interrupt clr + 3 + 1 + read-write + + + CORE_1_AREA_PIF_0_RD_CLR + Core1 PIF area0 read monitor interrupt clr + 4 + 1 + read-write + + + CORE_1_AREA_PIF_0_WR_CLR + Core1 PIF area0 write monitor interrupt clr + 5 + 1 + read-write + + + CORE_1_AREA_PIF_1_RD_CLR + Core1 PIF area1 read monitor interrupt clr + 6 + 1 + read-write + + + CORE_1_AREA_PIF_1_WR_CLR + Core1 PIF area1 write monitor interrupt clr + 7 + 1 + read-write + + + CORE_1_SP_SPILL_MIN_CLR + Core1 stackpoint overflow monitor interrupt clr + 8 + 1 + read-write + + + CORE_1_SP_SPILL_MAX_CLR + Core1 stackpoint underflow monitor interrupt clr + 9 + 1 + read-write + + + CORE_1_IRAM0_EXCEPTION_MONITOR_CLR + IBUS busy monitor interrupt clr + 10 + 1 + read-write + + + CORE_1_DRAM0_EXCEPTION_MONITOR_CLR + DBUS busy monitor interrupt clr + 11 + 1 + read-write + + + + + CORE_1_AREA_DRAM0_0_MIN + Core1 dram0 region0 addr configuration register + 0xA0 + 0x20 + 0xFFFFFFFF + + + CORE_1_AREA_DRAM0_0_MIN + Core1 dram0 region0 start addr + 0 + 32 + read-write + + + + + CORE_1_AREA_DRAM0_0_MAX + Core1 dram0 region0 addr configuration register + 0xA4 + 0x20 + + + CORE_1_AREA_DRAM0_0_MAX + Core1 dram0 region0 end addr + 0 + 32 + read-write + + + + + CORE_1_AREA_DRAM0_1_MIN + Core1 dram0 region1 addr configuration register + 0xA8 + 0x20 + 0xFFFFFFFF + + + CORE_1_AREA_DRAM0_1_MIN + Core1 dram0 region1 start addr + 0 + 32 + read-write + + + + + CORE_1_AREA_DRAM0_1_MAX + Core1 dram0 region1 addr configuration register + 0xAC + 0x20 + + + CORE_1_AREA_DRAM0_1_MAX + Core1 dram0 region1 end addr + 0 + 32 + read-write + + + + + CORE_1_AREA_PIF_0_MIN + Core1 PIF region0 addr configuration register + 0xB0 + 0x20 + 0xFFFFFFFF + + + CORE_1_AREA_PIF_0_MIN + Core1 PIF region0 start addr + 0 + 32 + read-write + + + + + CORE_1_AREA_PIF_0_MAX + Core1 PIF region0 addr configuration register + 0xB4 + 0x20 + + + CORE_1_AREA_PIF_0_MAX + Core1 PIF region0 end addr + 0 + 32 + read-write + + + + + CORE_1_AREA_PIF_1_MIN + Core1 PIF region1 addr configuration register + 0xB8 + 0x20 + 0xFFFFFFFF + + + CORE_1_AREA_PIF_1_MIN + Core1 PIF region1 start addr + 0 + 32 + read-write + + + + + CORE_1_AREA_PIF_1_MAX + Core1 PIF region1 addr configuration register + 0xBC + 0x20 + + + CORE_1_AREA_PIF_1_MAX + Core1 PIF region1 end addr + 0 + 32 + read-write + + + + + CORE_1_AREA_PC + Core1 area sp status register + 0xC0 + 0x20 + + + CORE_1_AREA_PC + the stackpointer when first touch region monitor interrupt + 0 + 32 + read-only + + + + + CORE_1_AREA_SP + Core1 area pc status register + 0xC4 + 0x20 + + + CORE_1_AREA_SP + the PC when first touch region monitor interrupt + 0 + 32 + read-only + + + + + CORE_1_SP_UNSTABLE + Core1 sp unstable configuration register + 0xC8 + 0x20 + 0x0000000B + + + CORE_1_SP_UNSTABLE + unstable period when window change,during this period no check stackpointer + 0 + 8 + read-write + + + + + CORE_1_SP_MIN + Core1 sp region configuration regsiter + 0xCC + 0x20 + + + CORE_1_SP_MIN + stack min value + 0 + 32 + read-write + + + + + CORE_1_SP_MAX + Core1 sp region configuration regsiter + 0xD0 + 0x20 + 0xFFFFFFFF + + + CORE_1_SP_MAX + stack max value + 0 + 32 + read-write + + + + + CORE_1_SP_PC + Core1 sp pc status register + 0xD4 + 0x20 + + + CORE_1_SP_PC + the PC when first touch stack monitor interrupt + 0 + 32 + read-only + + + + + CORE_1_RCD_PDEBUGENABLE + Core1 pdebug configuration register + 0xD8 + 0x20 + + + CORE_1_RCD_PDEBUGENABLE + Core1 Pdebugenable,set 1 to open Core1 Pdebug interface, then can get Core1 PC + 0 + 1 + read-write + + + + + CORE_1_RCD_RECORDING + Core1 pdebug status register + 0xDC + 0x20 + + + CORE_1_RCD_RECORDING + Pdebug record enable,set 1 to record Core1 pdebug interface signal + 0 + 1 + read-write + + + + + CORE_1_RCD_PDEBUGINST + Core1 pdebug status register + 0xE0 + 0x20 + + + CORE_1_RCD_PDEBUGINST + Core1 pdebuginst + 0 + 32 + read-only + + + + + CORE_1_RCD_PDEBUGSTATUS + Core1 pdebug status register + 0xE4 + 0x20 + + + CORE_1_RCD_PDEBUGSTATUS + Core1 pdebugstatus + 0 + 8 + read-only + + + + + CORE_1_RCD_PDEBUGDATA + Core1 pdebug status register + 0xE8 + 0x20 + + + CORE_1_RCD_PDEBUGDATA + Core1_pdebugdata + 0 + 32 + read-only + + + + + CORE_1_RCD_PDEBUGPC + Core1 pdebug status register + 0xEC + 0x20 + + + CORE_1_RCD_PDEBUGPC + Core1_pdebugPC + 0 + 32 + read-only + + + + + CORE_1_RCD_PDEBUGLS0STAT + Core1 pdebug status register + 0xF0 + 0x20 + + + CORE_1_RCD_PDEBUGLS0STAT + Core1_pdebug_s0stat + 0 + 32 + read-only + + + + + CORE_1_RCD_PDEBUGLS0ADDR + Core1 pdebug status register + 0xF4 + 0x20 + + + CORE_1_RCD_PDEBUGLS0ADDR + Core1_pdebug_s0addr + 0 + 32 + read-only + + + + + CORE_1_RCD_PDEBUGLS0DATA + Core1 pdebug status register + 0xF8 + 0x20 + + + CORE_1_RCD_PDEBUGLS0DATA + Core1_pdebug_s0data + 0 + 32 + read-only + + + + + CORE_1_RCD_SP + Core1 pdebug status register + 0xFC + 0x20 + + + CORE_1_RCD_SP + Core1_stack pointer + 0 + 32 + read-only + + + + + CORE_1_IRAM0_EXCEPTION_MONITOR_0 + Core1 bus busy status regsiter + 0x100 + 0x20 + + + CORE_1_IRAM0_RECORDING_ADDR_0 + The first iram0's addr[25:2] status when trigger IRAM busy interrupt + 0 + 24 + read-only + + + CORE_1_IRAM0_RECORDING_WR_0 + The first iram0's wr status when trigger IRAM busy interrupt + 24 + 1 + read-only + + + CORE_1_IRAM0_RECORDING_LOADSTORE_0 + The first iram0's loadstore status when trigger IRAM busy interrupt + 25 + 1 + read-only + + + + + CORE_1_IRAM0_EXCEPTION_MONITOR_1 + Core1 bus busy status regsiter + 0x104 + 0x20 + + + CORE_1_IRAM0_RECORDING_ADDR_1 + The second iram0's addr[25:2] status when trigger IRAM busy interrupt + 0 + 24 + read-only + + + CORE_1_IRAM0_RECORDING_WR_1 + The second iram0's wr status when trigger IRAM busy interrupt + 24 + 1 + read-only + + + CORE_1_IRAM0_RECORDING_LOADSTORE_1 + The second iram0's loadstore status when trigger IRAM busy interrupt + 25 + 1 + read-only + + + + + CORE_1_DRAM0_EXCEPTION_MONITOR_0 + Core1 bus busy status regsiter + 0x108 + 0x20 + + + CORE_1_DRAM0_RECORDING_ADDR_0 + The first dram0's addr[25:4] status when trigger DRAM busy interrupt + 0 + 22 + read-only + + + CORE_1_DRAM0_RECORDING_WR_0 + The first dram0's wr status when trigger DRAM busy interrupt + 22 + 1 + read-only + + + + + CORE_1_DRAM0_EXCEPTION_MONITOR_1 + Core1 bus busy status regsiter + 0x10C + 0x20 + + + CORE_1_DRAM0_RECORDING_BYTEEN_0 + The first dram0's byteen status when trigger DRAM busy interrupt + 0 + 16 + read-only + + + + + CORE_1_DRAM0_EXCEPTION_MONITOR_2 + Core1 bus busy status regsiter + 0x110 + 0x20 + 0xFFFFFFFF + + + CORE_1_DRAM0_RECORDING_PC_0 + The first dram0's PC status when trigger DRAM busy interrupt + 0 + 32 + read-only + + + + + CORE_1_DRAM0_EXCEPTION_MONITOR_3 + Core1 bus busy status regsiter + 0x114 + 0x20 + + + CORE_1_DRAM0_RECORDING_ADDR_1 + The second dram0's addr[25:4] status when trigger DRAM busy interrupt + 0 + 22 + read-only + + + CORE_1_DRAM0_RECORDING_WR_1 + The second dram0's wr status when trigger DRAM busy interrupt + 22 + 1 + read-only + + + + + CORE_1_DRAM0_EXCEPTION_MONITOR_4 + Core1 bus busy status regsiter + 0x118 + 0x20 + + + CORE_1_DRAM0_RECORDING_BYTEEN_1 + The second dram0's byteen status when trigger DRAM busy interrupt + 0 + 16 + read-only + + + + + CORE_1_DRAM0_EXCEPTION_MONITOR_5 + Core1 bus busy status regsiter + 0x11C + 0x20 + 0xFFFFFFFF + + + CORE_1_DRAM0_RECORDING_PC_1 + The second dram0's PC status when trigger DRAM busy interrupt + 0 + 32 + read-only + + + + + CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_0 + bus busy configuration register + 0x120 + 0x20 + 0x000FFFFF + + + CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_0 + busy monitor window cycle + 0 + 20 + read-write + + + + + CORE_X_IRAM0_DRAM0_EXCEPTION_MONITOR_1 + bus busy configuration register + 0x124 + 0x20 + 0x000FFFFF + + + CORE_X_IRAM0_DRAM0_LIMIT_CYCLE_1 + non busy cycle,for example: when cycle=100 and cycle=10,it means that in 100 cycle, if busy access success time less than 10, it will trigger interrutpt + 0 + 20 + read-write + + + + + LOG_SETTING + log set register + 0x128 + 0x20 + 0x00000040 + + + LOG_ENA + bus moniter enable: [0]Core1,[1]core1,[2]dma + 0 + 3 + read-write + + + LOG_MODE + check_mode:0:write,1:word,2:halword,3:byte,4:doubleword,5:4word + 3 + 3 + read-write + + + LOG_MEM_LOOP_ENABLE + mem_loop enable,1 means that loop write + 6 + 1 + read-write + + + + + LOG_DATA_0 + log check data register + 0x12C + 0x20 + + + LOG_DATA_0 + check data0 + 0 + 32 + read-write + + + + + LOG_DATA_1 + log check data register + 0x130 + 0x20 + + + LOG_DATA_1 + check data1 + 0 + 32 + read-write + + + + + LOG_DATA_2 + log check data register + 0x134 + 0x20 + + + LOG_DATA_2 + check data2 + 0 + 32 + read-write + + + + + LOG_DATA_3 + log check data register + 0x138 + 0x20 + + + LOG_DATA_3 + check data3 + 0 + 32 + read-write + + + + + LOG_DATA_MASK + log check data mask register + 0x13C + 0x20 + + + LOG_DATA_SIZE + data mask + 0 + 16 + read-write + + + + + LOG_MIN + log check region configuration register + 0x140 + 0x20 + + + LOG_MIN + check region min addr + 0 + 32 + read-write + + + + + LOG_MAX + log check region configuration register + 0x144 + 0x20 + + + LOG_MAX + check region max addr + 0 + 32 + read-write + + + + + LOG_MEM_START + log mem region configuration register + 0x148 + 0x20 + + + LOG_MEM_START + mem start addr + 0 + 32 + read-write + + + + + LOG_MEM_END + log mem region configuration register + 0x14C + 0x20 + + + LOG_MEM_END + mem end addr + 0 + 32 + read-write + + + + + LOG_MEM_WRITING_ADDR + log mem addr status register + 0x150 + 0x20 + + + LOG_MEM_WRITING_ADDR + mem current addr, it means next writing addr + 0 + 32 + read-only + + + + + LOG_MEM_FULL_FLAG + log mem status register + 0x154 + 0x20 + + + LOG_MEM_FULL_FLAG + when it's 1,show that mem write loop morte than one time. + 0 + 1 + read-write + + + + + DATE + version register + 0x1FC + 0x20 + 0x02003040 + + + DATE + version register + 0 + 28 + read-write + + + + + + + DMA + DMA (Direct Memory Access) Controller + DMA + 0x6003F000 + + 0x0 + 0x320 + registers + + + DMA_IN_CH0 + 66 + + + DMA_IN_CH1 + 67 + + + DMA_IN_CH2 + 68 + + + DMA_IN_CH3 + 69 + + + DMA_IN_CH4 + 70 + + + DMA_OUT_CH0 + 71 + + + DMA_OUT_CH1 + 72 + + + DMA_OUT_CH2 + 73 + + + DMA_OUT_CH3 + 74 + + + DMA_OUT_CH4 + 75 + + + DMA_APBPERI_PMS + 84 + + + BACKUP_PMS_VIOLATE + 93 + + + DMA_EXTMEM_REJECT + 98 + + + + 5 + 0xC0 + IN_CONF0_CH%s + Configure 0 register of Rx channel 0 + 0x0 + 0x20 + + + IN_RST + This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer. + 0 + 1 + read-write + + + IN_LOOP_TEST + reserved + 1 + 1 + read-write + + + INDSCR_BURST_EN + Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM. + 2 + 1 + read-write + + + IN_DATA_BURST_EN + Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM. + 3 + 1 + read-write + + + MEM_TRANS_EN + Set this bit 1 to enable automatic transmitting data from memory to memory via DMA. + 4 + 1 + read-write + + + + + 5 + 0xC0 + IN_CONF1_CH%s + Configure 1 register of Rx channel 0 + 0x4 + 0x20 + 0x0000000C + + + DMA_INFIFO_FULL_THRS + This register is used to generate the INFIFO_FULL_WM_INT interrupt when Rx channel 0 received byte number in Rx FIFO is up to the value of the register. + 0 + 12 + read-write + + + IN_CHECK_OWNER + Set this bit to enable checking the owner attribute of the link descriptor. + 12 + 1 + read-write + + + IN_EXT_MEM_BK_SIZE + Block size of Rx channel 0 when DMA access external SRAM. 0: 16 bytes 1: 32 bytes 2/3:reserved + 13 + 2 + read-write + + + + + 5 + 0xC0 + IN_INT_RAW_CH%s + Raw status interrupt of Rx channel 0 + 0x8 + 0x20 + + + IN_DONE + The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. + 0 + 1 + read-write + + + IN_SUC_EOF + The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0, the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0. + 1 + 1 + read-write + + + IN_ERR_EOF + The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals, this raw interrupt is reserved. + 2 + 1 + read-write + + + IN_DSCR_ERR + The raw interrupt bit turns to high level when detecting inlink descriptor error, including owner error, the second and third word error of inlink descriptor for Rx channel 0. + 3 + 1 + read-write + + + IN_DSCR_EMPTY + The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed, but there is no more inlink for Rx channel 0. + 4 + 1 + read-write + + + INFIFO_FULL_WM + The raw interrupt bit turns to high level when received data byte number is up to threshold configured by REG_DMA_INFIFO_FULL_THRS_CH0 in Rx FIFO of channel 0. + 5 + 1 + read-write + + + INFIFO_OVF_L1 + This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow. + 6 + 1 + read-write + + + INFIFO_UDF_L1 + This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow. + 7 + 1 + read-write + + + INFIFO_OVF_L3 + This raw interrupt bit turns to high level when level 3 fifo of Rx channel 0 is overflow. + 8 + 1 + read-write + + + INFIFO_UDF_L3 + This raw interrupt bit turns to high level when level 3 fifo of Rx channel 0 is underflow. + 9 + 1 + read-write + + + + + 5 + 0xC0 + IN_INT_ST_CH%s + Masked interrupt of Rx channel 0 + 0xC + 0x20 + + + IN_DONE + The raw interrupt status bit for the IN_DONE_CH_INT interrupt. + 0 + 1 + read-only + + + IN_SUC_EOF + The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt. + 1 + 1 + read-only + + + IN_ERR_EOF + The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt. + 2 + 1 + read-only + + + IN_DSCR_ERR + The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt. + 3 + 1 + read-only + + + IN_DSCR_EMPTY + The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt. + 4 + 1 + read-only + + + INFIFO_FULL_WM + The raw interrupt status bit for the INFIFO_FULL_WM_CH_INT interrupt. + 5 + 1 + read-only + + + INFIFO_OVF_L1 + The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt. + 6 + 1 + read-only + + + INFIFO_UDF_L1 + The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt. + 7 + 1 + read-only + + + INFIFO_OVF_L3 + The raw interrupt status bit for the INFIFO_OVF_L3_CH_INT interrupt. + 8 + 1 + read-only + + + INFIFO_UDF_L3 + The raw interrupt status bit for the INFIFO_UDF_L3_CH_INT interrupt. + 9 + 1 + read-only + + + + + 5 + 0xC0 + IN_INT_ENA_CH%s + Interrupt enable bits of Rx channel 0 + 0x10 + 0x20 + + + IN_DONE + The interrupt enable bit for the IN_DONE_CH_INT interrupt. + 0 + 1 + read-write + + + IN_SUC_EOF + The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt. + 1 + 1 + read-write + + + IN_ERR_EOF + The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt. + 2 + 1 + read-write + + + IN_DSCR_ERR + The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt. + 3 + 1 + read-write + + + IN_DSCR_EMPTY + The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt. + 4 + 1 + read-write + + + INFIFO_FULL_WM + The interrupt enable bit for the INFIFO_FULL_WM_CH_INT interrupt. + 5 + 1 + read-write + + + INFIFO_OVF_L1 + The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt. + 6 + 1 + read-write + + + INFIFO_UDF_L1 + The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt. + 7 + 1 + read-write + + + INFIFO_OVF_L3 + The interrupt enable bit for the INFIFO_OVF_L3_CH_INT interrupt. + 8 + 1 + read-write + + + INFIFO_UDF_L3 + The interrupt enable bit for the INFIFO_UDF_L3_CH_INT interrupt. + 9 + 1 + read-write + + + + + 5 + 0xC0 + IN_INT_CLR_CH%s + Interrupt clear bits of Rx channel 0 + 0x14 + 0x20 + + + IN_DONE + Set this bit to clear the IN_DONE_CH_INT interrupt. + 0 + 1 + write-only + + + IN_SUC_EOF + Set this bit to clear the IN_SUC_EOF_CH_INT interrupt. + 1 + 1 + write-only + + + IN_ERR_EOF + Set this bit to clear the IN_ERR_EOF_CH_INT interrupt. + 2 + 1 + write-only + + + IN_DSCR_ERR + Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt. + 3 + 1 + write-only + + + IN_DSCR_EMPTY + Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt. + 4 + 1 + write-only + + + DMA_INFIFO_FULL_WM + Set this bit to clear the INFIFO_FULL_WM_CH_INT interrupt. + 5 + 1 + write-only + + + INFIFO_OVF_L1 + Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt. + 6 + 1 + write-only + + + INFIFO_UDF_L1 + Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt. + 7 + 1 + write-only + + + INFIFO_OVF_L3 + Set this bit to clear the INFIFO_OVF_L3_CH_INT interrupt. + 8 + 1 + write-only + + + INFIFO_UDF_L3 + Set this bit to clear the INFIFO_UDF_L3_CH_INT interrupt. + 9 + 1 + write-only + + + + + 5 + 0xC0 + INFIFO_STATUS_CH%s + Receive FIFO status of Rx channel 0 + 0x18 + 0x20 + 0x0F00003A + + + INFIFO_FULL_L1 + L1 Rx FIFO full signal for Rx channel 0. + 0 + 1 + read-only + + + INFIFO_EMPTY_L1 + L1 Rx FIFO empty signal for Rx channel 0. + 1 + 1 + read-only + + + INFIFO_FULL_L2 + L2 Rx FIFO full signal for Rx channel 0. + 2 + 1 + read-only + + + INFIFO_EMPTY_L2 + L2 Rx FIFO empty signal for Rx channel 0. + 3 + 1 + read-only + + + INFIFO_FULL_L3 + L3 Rx FIFO full signal for Rx channel 0. + 4 + 1 + read-only + + + INFIFO_EMPTY_L3 + L3 Rx FIFO empty signal for Rx channel 0. + 5 + 1 + read-only + + + INFIFO_CNT_L1 + The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0. + 6 + 6 + read-only + + + INFIFO_CNT_L2 + The register stores the byte number of the data in L2 Rx FIFO for Rx channel 0. + 12 + 7 + read-only + + + INFIFO_CNT_L3 + The register stores the byte number of the data in L3 Rx FIFO for Rx channel 0. + 19 + 5 + read-only + + + IN_REMAIN_UNDER_1B_L3 + reserved + 24 + 1 + read-only + + + IN_REMAIN_UNDER_2B_L3 + reserved + 25 + 1 + read-only + + + IN_REMAIN_UNDER_3B_L3 + reserved + 26 + 1 + read-only + + + IN_REMAIN_UNDER_4B_L3 + reserved + 27 + 1 + read-only + + + IN_BUF_HUNGRY + reserved + 28 + 1 + read-only + + + + + 5 + 0xC0 + IN_POP_CH%s + Pop control register of Rx channel 0 + 0x1C + 0x20 + 0x00000800 + + + INFIFO_RDATA + This register stores the data popping from DMA FIFO. + 0 + 12 + read-only + + + INFIFO_POP + Set this bit to pop data from DMA FIFO. + 12 + 1 + read-write + + + + + 5 + 0xC0 + IN_LINK_CH%s + Link descriptor configure and control register of Rx channel 0 + 0x20 + 0x20 + 0x01100000 + + + INLINK_ADDR + This register stores the 20 least significant bits of the first inlink descriptor's address. + 0 + 20 + read-write + + + INLINK_AUTO_RET + Set this bit to return to current inlink descriptor's address, when there are some errors in current receiving data. + 20 + 1 + read-write + + + INLINK_STOP + Set this bit to stop dealing with the inlink descriptors. + 21 + 1 + read-write + + + INLINK_START + Set this bit to start dealing with the inlink descriptors. + 22 + 1 + read-write + + + INLINK_RESTART + Set this bit to mount a new inlink descriptor. + 23 + 1 + read-write + + + INLINK_PARK + 1: the inlink descriptor's FSM is in idle state. 0: the inlink descriptor's FSM is working. + 24 + 1 + read-only + + + + + 5 + 0xC0 + IN_STATE_CH%s + Receive status of Rx channel 0 + 0x24 + 0x20 + + + INLINK_DSCR_ADDR + This register stores the current inlink descriptor's address. + 0 + 18 + read-only + + + IN_DSCR_STATE + reserved + 18 + 2 + read-only + + + IN_STATE + reserved + 20 + 3 + read-only + + + + + 5 + 0xC0 + IN_SUC_EOF_DES_ADDR_CH%s + Inlink descriptor address when EOF occurs of Rx channel 0 + 0x28 + 0x20 + + + IN_SUC_EOF_DES_ADDR + This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1. + 0 + 32 + read-only + + + + + 5 + 0xC0 + IN_ERR_EOF_DES_ADDR_CH%s + Inlink descriptor address when errors occur of Rx channel 0 + 0x2C + 0x20 + + + IN_ERR_EOF_DES_ADDR + This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0. + 0 + 32 + read-only + + + + + 5 + 0xC0 + IN_DSCR_CH%s + Current inlink descriptor address of Rx channel 0 + 0x30 + 0x20 + + + INLINK_DSCR + The address of the current inlink descriptor x. + 0 + 32 + read-only + + + + + 5 + 0xC0 + IN_DSCR_BF0_CH%s + The last inlink descriptor address of Rx channel 0 + 0x34 + 0x20 + + + INLINK_DSCR_BF0 + The address of the last inlink descriptor x-1. + 0 + 32 + read-only + + + + + 5 + 0xC0 + IN_DSCR_BF1_CH%s + The second-to-last inlink descriptor address of Rx channel 0 + 0x38 + 0x20 + + + INLINK_DSCR_BF1 + The address of the second-to-last inlink descriptor x-2. + 0 + 32 + read-only + + + + + 5 + 0xC0 + IN_WIGHT_CH%s + Weight register of Rx channel 0 + 0x3C + 0x20 + 0x00000F00 + + + RX_WEIGHT + The weight of Rx channel 0. + 8 + 4 + read-write + + + + + 5 + 0xC0 + IN_PRI_CH%s + Priority register of Rx channel 0 + 0x44 + 0x20 + + + RX_PRI + The priority of Rx channel 0. The larger of the value, the higher of the priority. + 0 + 4 + read-write + + + + + 5 + 0xC0 + IN_PERI_SEL_CH%s + Peripheral selection of Rx channel 0 + 0x48 + 0x20 + 0x0000003F + + + PERI_IN_SEL + This register is used to select peripheral for Rx channel 0. 0:SPI2. 1: SPI3. 2: UHCI0. 3: I2S0. 4: I2S1. 5: LCD_CAM. 6: AES. 7: SHA. 8: ADC_DAC. 9: RMT. + 0 + 6 + read-write + + + + + 5 + 0xC0 + OUT_CONF0_CH%s + Configure 0 register of Tx channel 0 + 0x60 + 0x20 + 0x00000008 + + + OUT_RST + This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer. + 0 + 1 + read-write + + + OUT_LOOP_TEST + reserved + 1 + 1 + read-write + + + OUT_AUTO_WRBACK + Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted. + 2 + 1 + read-write + + + OUT_EOF_MODE + EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA + 3 + 1 + read-write + + + OUTDSCR_BURST_EN + Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM. + 4 + 1 + read-write + + + OUT_DATA_BURST_EN + Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM. + 5 + 1 + read-write + + + + + 5 + 0xC0 + OUT_CONF1_CH%s + Configure 1 register of Tx channel 0 + 0x64 + 0x20 + + + OUT_CHECK_OWNER + Set this bit to enable checking the owner attribute of the link descriptor. + 12 + 1 + read-write + + + OUT_EXT_MEM_BK_SIZE + Block size of Tx channel 0 when DMA access external SRAM. 0: 16 bytes 1: 32 bytes 2/3:reserved + 13 + 2 + read-write + + + + + 5 + 0xC0 + OUT_INT_RAW_CH%s + Raw status interrupt of Tx channel 0 + 0x68 + 0x20 + + + OUT_DONE + The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0. + 0 + 1 + read-write + + + OUT_EOF + The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0. + 1 + 1 + read-write + + + OUT_DSCR_ERR + The raw interrupt bit turns to high level when detecting outlink descriptor error, including owner error, the second and third word error of outlink descriptor for Tx channel 0. + 2 + 1 + read-write + + + OUT_TOTAL_EOF + The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0. + 3 + 1 + read-write + + + OUTFIFO_OVF_L1 + This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow. + 4 + 1 + read-write + + + OUTFIFO_UDF_L1 + This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow. + 5 + 1 + read-write + + + OUTFIFO_OVF_L3 + This raw interrupt bit turns to high level when level 3 fifo of Tx channel 0 is overflow. + 6 + 1 + read-write + + + OUTFIFO_UDF_L3 + This raw interrupt bit turns to high level when level 3 fifo of Tx channel 0 is underflow. + 7 + 1 + read-write + + + + + 5 + 0xC0 + OUT_INT_ST_CH%s + Masked interrupt of Tx channel 0 + 0x6C + 0x20 + + + OUT_DONE + The raw interrupt status bit for the OUT_DONE_CH_INT interrupt. + 0 + 1 + read-only + + + OUT_EOF + The raw interrupt status bit for the OUT_EOF_CH_INT interrupt. + 1 + 1 + read-only + + + OUT_DSCR_ERR + The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt. + 2 + 1 + read-only + + + OUT_TOTAL_EOF + The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt. + 3 + 1 + read-only + + + OUTFIFO_OVF_L1 + The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt. + 4 + 1 + read-only + + + OUTFIFO_UDF_L1 + The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt. + 5 + 1 + read-only + + + OUTFIFO_OVF_L3 + The raw interrupt status bit for the OUTFIFO_OVF_L3_CH_INT interrupt. + 6 + 1 + read-only + + + OUTFIFO_UDF_L3 + The raw interrupt status bit for the OUTFIFO_UDF_L3_CH_INT interrupt. + 7 + 1 + read-only + + + + + 5 + 0xC0 + OUT_INT_ENA_CH%s + Interrupt enable bits of Tx channel 0 + 0x70 + 0x20 + + + OUT_DONE + The interrupt enable bit for the OUT_DONE_CH_INT interrupt. + 0 + 1 + read-write + + + OUT_EOF + The interrupt enable bit for the OUT_EOF_CH_INT interrupt. + 1 + 1 + read-write + + + OUT_DSCR_ERR + The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt. + 2 + 1 + read-write + + + OUT_TOTAL_EOF + The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt. + 3 + 1 + read-write + + + OUTFIFO_OVF_L1 + The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt. + 4 + 1 + read-write + + + OUTFIFO_UDF_L1 + The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt. + 5 + 1 + read-write + + + OUTFIFO_OVF_L3 + The interrupt enable bit for the OUTFIFO_OVF_L3_CH_INT interrupt. + 6 + 1 + read-write + + + OUTFIFO_UDF_L3 + The interrupt enable bit for the OUTFIFO_UDF_L3_CH_INT interrupt. + 7 + 1 + read-write + + + + + 5 + 0xC0 + OUT_INT_CLR_CH%s + Interrupt clear bits of Tx channel 0 + 0x74 + 0x20 + + + OUT_DONE + Set this bit to clear the OUT_DONE_CH_INT interrupt. + 0 + 1 + write-only + + + OUT_EOF + Set this bit to clear the OUT_EOF_CH_INT interrupt. + 1 + 1 + write-only + + + OUT_DSCR_ERR + Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt. + 2 + 1 + write-only + + + OUT_TOTAL_EOF + Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt. + 3 + 1 + write-only + + + OUTFIFO_OVF_L1 + Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt. + 4 + 1 + write-only + + + OUTFIFO_UDF_L1 + Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt. + 5 + 1 + write-only + + + OUTFIFO_OVF_L3 + Set this bit to clear the OUTFIFO_OVF_L3_CH_INT interrupt. + 6 + 1 + write-only + + + OUTFIFO_UDF_L3 + Set this bit to clear the OUTFIFO_UDF_L3_CH_INT interrupt. + 7 + 1 + write-only + + + + + 5 + 0xC0 + OUTFIFO_STATUS_CH%s + Transmit FIFO status of Tx channel 0 + 0x78 + 0x20 + 0x0780002A + + + OUTFIFO_FULL_L1 + L1 Tx FIFO full signal for Tx channel 0. + 0 + 1 + read-only + + + OUTFIFO_EMPTY_L1 + L1 Tx FIFO empty signal for Tx channel 0. + 1 + 1 + read-only + + + OUTFIFO_FULL_L2 + L2 Tx FIFO full signal for Tx channel 0. + 2 + 1 + read-only + + + OUTFIFO_EMPTY_L2 + L2 Tx FIFO empty signal for Tx channel 0. + 3 + 1 + read-only + + + OUTFIFO_FULL_L3 + L3 Tx FIFO full signal for Tx channel 0. + 4 + 1 + read-only + + + OUTFIFO_EMPTY_L3 + L3 Tx FIFO empty signal for Tx channel 0. + 5 + 1 + read-only + + + OUTFIFO_CNT_L1 + The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0. + 6 + 5 + read-only + + + OUTFIFO_CNT_L2 + The register stores the byte number of the data in L2 Tx FIFO for Tx channel 0. + 11 + 7 + read-only + + + OUTFIFO_CNT_L3 + The register stores the byte number of the data in L3 Tx FIFO for Tx channel 0. + 18 + 5 + read-only + + + OUT_REMAIN_UNDER_1B_L3 + reserved + 23 + 1 + read-only + + + OUT_REMAIN_UNDER_2B_L3 + reserved + 24 + 1 + read-only + + + OUT_REMAIN_UNDER_3B_L3 + reserved + 25 + 1 + read-only + + + OUT_REMAIN_UNDER_4B_L3 + reserved + 26 + 1 + read-only + + + + + 5 + 0xC0 + OUT_PUSH_CH%s + Push control register of Rx channel 0 + 0x7C + 0x20 + + + OUTFIFO_WDATA + This register stores the data that need to be pushed into DMA FIFO. + 0 + 9 + read-write + + + OUTFIFO_PUSH + Set this bit to push data into DMA FIFO. + 9 + 1 + read-write + + + + + 5 + 0xC0 + OUT_LINK_CH%s + Link descriptor configure and control register of Tx channel 0 + 0x80 + 0x20 + 0x00800000 + + + OUTLINK_ADDR + This register stores the 20 least significant bits of the first outlink descriptor's address. + 0 + 20 + read-write + + + OUTLINK_STOP + Set this bit to stop dealing with the outlink descriptors. + 20 + 1 + read-write + + + OUTLINK_START + Set this bit to start dealing with the outlink descriptors. + 21 + 1 + read-write + + + OUTLINK_RESTART + Set this bit to restart a new outlink from the last address. + 22 + 1 + read-write + + + OUTLINK_PARK + 1: the outlink descriptor's FSM is in idle state. 0: the outlink descriptor's FSM is working. + 23 + 1 + read-only + + + + + 5 + 0xC0 + OUT_STATE_CH%s + Transmit status of Tx channel 0 + 0x84 + 0x20 + + + OUTLINK_DSCR_ADDR + This register stores the current outlink descriptor's address. + 0 + 18 + read-only + + + OUT_DSCR_STATE + reserved + 18 + 2 + read-only + + + OUT_STATE + reserved + 20 + 3 + read-only + + + + + 5 + 0xC0 + OUT_EOF_DES_ADDR_CH%s + Outlink descriptor address when EOF occurs of Tx channel 0 + 0x88 + 0x20 + + + OUT_EOF_DES_ADDR + This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1. + 0 + 32 + read-only + + + + + 5 + 0xC0 + OUT_EOF_BFR_DES_ADDR_CH%s + The last outlink descriptor address when EOF occurs of Tx channel 0 + 0x8C + 0x20 + + + OUT_EOF_BFR_DES_ADDR + This register stores the address of the outlink descriptor before the last outlink descriptor. + 0 + 32 + read-only + + + + + 5 + 0xC0 + OUT_DSCR_CH%s + Current inlink descriptor address of Tx channel 0 + 0x90 + 0x20 + + + OUTLINK_DSCR + The address of the current outlink descriptor y. + 0 + 32 + read-only + + + + + 5 + 0xC0 + OUT_DSCR_BF0_CH%s + The last inlink descriptor address of Tx channel 0 + 0x94 + 0x20 + + + OUTLINK_DSCR_BF0 + The address of the last outlink descriptor y-1. + 0 + 32 + read-only + + + + + 5 + 0xC0 + OUT_DSCR_BF1_CH%s + The second-to-last inlink descriptor address of Tx channel 0 + 0x98 + 0x20 + + + OUTLINK_DSCR_BF1 + The address of the second-to-last inlink descriptor x-2. + 0 + 32 + read-only + + + + + 5 + 0xC0 + OUT_WIGHT_CH%s + Weight register of Rx channel 0 + 0x9C + 0x20 + 0x00000F00 + + + TX_WEIGHT + The weight of Tx channel 0. + 8 + 4 + read-write + + + + + 5 + 0xC0 + OUT_PRI_CH%s + Priority register of Tx channel 0. + 0xA4 + 0x20 + + + TX_PRI + The priority of Tx channel 0. The larger of the value, the higher of the priority. + 0 + 4 + read-write + + + + + 5 + 0xC0 + OUT_PERI_SEL_CH%s + Peripheral selection of Tx channel 0 + 0xA8 + 0x20 + 0x0000003F + + + PERI_OUT_SEL + This register is used to select peripheral for Tx channel 0. 0:SPI2. 1: SPI3. 2: UHCI0. 3: I2S0. 4: I2S1. 5: LCD_CAM. 6: AES. 7: SHA. 8: ADC_DAC. 9: RMT. + 0 + 6 + read-write + + + + + AHB_TEST + reserved + 0x3C0 + 0x20 + + + AHB_TESTMODE + reserved + 0 + 3 + read-write + + + AHB_TESTADDR + reserved + 4 + 2 + read-write + + + + + PD_CONF + reserved + 0x3C4 + 0x20 + 0x00000020 + + + DMA_RAM_FORCE_PD + Set this bit to force power down DMA internal memory. + 4 + 1 + read-write + + + DMA_RAM_FORCE_PU + Set this bit to force power up DMA internal memory + 5 + 1 + read-write + + + DMA_RAM_CLK_FO + 1: Force to open the clock and bypass the gate-clock when accessing the RAM in DMA. 0: A gate-clock will be used when accessing the RAM in DMA. + 6 + 1 + read-write + + + + + MISC_CONF + MISC register + 0x3C8 + 0x20 + + + AHBM_RST_INTER + Set this bit, then clear this bit to reset the internal ahb FSM. + 0 + 1 + read-write + + + AHBM_RST_EXTER + Set this bit, then clear this bit to reset the external ahb FSM. + 1 + 1 + read-write + + + ARB_PRI_DIS + Set this bit to disable priority arbitration function. + 2 + 1 + read-write + + + CLK_EN + 1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers. + 4 + 1 + read-write + + + + + 5 + 0x8 + IN_SRAM_SIZE_CH%s + Receive L2 FIFO depth of Rx channel 0 + 0x3CC + 0x20 + 0x0000000E + + + IN_SIZE + This register is used to configure the size of L2 Tx FIFO for Rx channel 0. 0:16 bytes. 1:24 bytes. 2:32 bytes. 3: 40 bytes. 4: 48 bytes. 5:56 bytes. 6: 64 bytes. 7: 72 bytes. 8: 80 bytes. + 0 + 7 + read-write + + + + + 5 + 0x8 + OUT_SRAM_SIZE_CH%s + Transmit L2 FIFO depth of Tx channel 0 + 0x3D0 + 0x20 + 0x0000000E + + + OUT_SIZE + This register is used to configure the size of L2 Tx FIFO for Tx channel 0. 0:16 bytes. 1:24 bytes. 2:32 bytes. 3: 40 bytes. 4: 48 bytes. 5:56 bytes. 6: 64 bytes. 7: 72 bytes. 8: 80 bytes. + 0 + 7 + read-write + + + + + EXTMEM_REJECT_ADDR + Reject address accessing external RAM + 0x3F4 + 0x20 + + + EXTMEM_REJECT_ADDR + This register store the first address rejected by permission control when accessing external RAM. + 0 + 32 + read-only + + + + + EXTMEM_REJECT_ST + Reject status accessing external RAM + 0x3F8 + 0x20 + + + EXTMEM_REJECT_ATRR + The reject accessing. Bit 0: if this bit is 1, the rejected accessing is READ. Bit 1: if this bit is 1, the rejected accessing is WRITE. + 0 + 2 + read-only + + + EXTMEM_REJECT_CHANNEL_NUM + The register indicate the reject accessing from which channel. + 2 + 4 + read-only + + + EXTMEM_REJECT_PERI_NUM + This register indicate reject accessing from which peripheral. + 6 + 6 + read-only + + + + + EXTMEM_REJECT_INT_RAW + Raw interrupt status of external RAM permission + 0x3FC + 0x20 + + + EXTMEM_REJECT_INT_RAW + The raw interrupt bit turns to high level when accessing external RAM is rejected by permission control. + 0 + 1 + read-write + + + + + EXTMEM_REJECT_INT_ST + Masked interrupt status of external RAM permission + 0x400 + 0x20 + + + EXTMEM_REJECT_INT_ST + The raw interrupt status bit for the EXTMEM_REJECT_INT interrupt. + 0 + 1 + read-only + + + + + EXTMEM_REJECT_INT_ENA + Interrupt enable bits of external RAM permission + 0x404 + 0x20 + + + EXTMEM_REJECT_INT_ENA + The interrupt enable bit for the EXTMEM_REJECT_INT interrupt. + 0 + 1 + read-write + + + + + EXTMEM_REJECT_INT_CLR + Interrupt clear bits of external RAM permission + 0x408 + 0x20 + + + EXTMEM_REJECT_INT_CLR + Set this bit to clear the EXTMEM_REJECT_INT interrupt. + 0 + 1 + write-only + + + + + DATE + Version control register + 0x40C + 0x20 + 0x02101180 + + + DATE + register version. + 0 + 32 + read-write + + + + + + + DS + Digital Signature + DS + 0x6003D000 + + 0x0 + 0xA5C + registers + + + + 1584 + 0x1 + C_MEM[%s] + Memory C + 0x0 + 0x8 + + + 4 + 0x4 + IV_%s + IV block data + 0x630 + 0x20 + + + IV_0 + Stores IV block data + 0 + 32 + read-write + + + + + 512 + 0x1 + X_MEM[%s] + Memory X + 0x800 + 0x8 + + + 512 + 0x1 + Z_MEM[%s] + Memory Z + 0xA00 + 0x8 + + + SET_START + Activates the DS peripheral + 0xE00 + 0x20 + + + SET_START + Write 1 to this register to active the DS peripheral + 0 + 1 + write-only + + + + + SET_ME + Starts DS operation + 0xE04 + 0x20 + + + SET_ME + Write 1 to this register to start DS operation. + 0 + 1 + write-only + + + + + SET_FINISH + Ends DS operation + 0xE08 + 0x20 + + + SET_FINISH + Write 1 to this register to end DS operation. + 0 + 1 + write-only + + + + + QUERY_BUSY + Status of the DS perihperal + 0xE0C + 0x20 + + + QUERY_BUSY + Stores the status of the DS peripheral. 1: The DS peripheral is busy. 0: The DS peripheral is idle. + 0 + 1 + read-only + + + + + QUERY_KEY_WRONG + Checks the reason why DS_KEY is not ready + 0xE10 + 0x20 + + + QUERY_KEY_WRONG + 1-15: HMAC was activated, but the DS peripheral did not successfully receive the DS_KEY from the HMAC peripheral. (The biggest value is 15). 0: HMAC is not activated. + 0 + 4 + read-only + + + + + QUERY_CHECK + Queries DS check result + 0xE14 + 0x20 + + + MD_ERROR + MD checkout result. 1: The MD check fails. 0: The MD check passes. + 0 + 1 + read-only + + + PADDING_BAD + padding checkout result. 1: The padding check fails. 0: The padding check passes. + 1 + 1 + read-only + + + + + DATE + DS version control register + 0xE20 + 0x20 + 0x20191217 + + + DATE + ds version information + 0 + 30 + read-write + + + + + + + EFUSE + eFuse Controller + EFUSE + 0x60007000 + + 0x0 + 0x1CC + registers + + + EFUSE + 36 + + + + PGM_DATA0 + Register 0 that stores data to be programmed. + 0x0 + 0x20 + + + PGM_DATA_0 + The content of the 0th 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA1 + Register 1 that stores data to be programmed. + 0x4 + 0x20 + + + PGM_DATA_1 + The content of the 1st 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA2 + Register 2 that stores data to be programmed. + 0x8 + 0x20 + + + PGM_DATA_2 + The content of the 2nd 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA3 + Register 3 that stores data to be programmed. + 0xC + 0x20 + + + PGM_DATA_3 + The content of the 3rd 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA4 + Register 4 that stores data to be programmed. + 0x10 + 0x20 + + + PGM_DATA_4 + The content of the 4th 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA5 + Register 5 that stores data to be programmed. + 0x14 + 0x20 + + + PGM_DATA_5 + The content of the 5th 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA6 + Register 6 that stores data to be programmed. + 0x18 + 0x20 + + + PGM_DATA_6 + The content of the 6th 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_DATA7 + Register 7 that stores data to be programmed. + 0x1C + 0x20 + + + PGM_DATA_7 + The content of the 7th 32-bit data to be programmed. + 0 + 32 + read-write + + + + + PGM_CHECK_VALUE0 + Register 0 that stores the RS code to be programmed. + 0x20 + 0x20 + + + PGM_RS_DATA_0 + The content of the 0th 32-bit RS code to be programmed. + 0 + 32 + read-write + + + + + PGM_CHECK_VALUE1 + Register 1 that stores the RS code to be programmed. + 0x24 + 0x20 + + + PGM_RS_DATA_1 + The content of the 1st 32-bit RS code to be programmed. + 0 + 32 + read-write + + + + + PGM_CHECK_VALUE2 + Register 2 that stores the RS code to be programmed. + 0x28 + 0x20 + + + PGM_RS_DATA_2 + The content of the 2nd 32-bit RS code to be programmed. + 0 + 32 + read-write + + + + + RD_WR_DIS + BLOCK0 data register 0. + 0x2C + 0x20 + + + WR_DIS + Disable programming of individual eFuses. + 0 + 32 + read-only + + + + + RD_REPEAT_DATA0 + BLOCK0 data register 1. + 0x30 + 0x20 + + + RD_DIS + Set this bit to disable reading from BlOCK4-10. + 0 + 7 + read-only + + + DIS_RTC_RAM_BOOT + Set this bit to disable boot from RTC RAM. + 7 + 1 + read-only + + + DIS_ICACHE + Set this bit to disable Icache. + 8 + 1 + read-only + + + DIS_DCACHE + Set this bit to disable Dcache. + 9 + 1 + read-only + + + DIS_DOWNLOAD_ICACHE + Set this bit to disable Icache in download mode (boot_mode[3:0] is 0, 1, 2, 3, 6, 7). + 10 + 1 + read-only + + + DIS_DOWNLOAD_DCACHE + Set this bit to disable Dcache in download mode ( boot_mode[3:0] is 0, 1, 2, 3, 6, 7). + 11 + 1 + read-only + + + DIS_FORCE_DOWNLOAD + Set this bit to disable the function that forces chip into download mode. + 12 + 1 + read-only + + + DIS_USB + Set this bit to disable USB function. + 13 + 1 + read-only + + + DIS_CAN + Set this bit to disable CAN function. + 14 + 1 + read-only + + + DIS_APP_CPU + Disable app cpu. + 15 + 1 + read-only + + + SOFT_DIS_JTAG + Set these bits to disable JTAG in the soft way (odd number 1 means disable ). JTAG can be enabled in HMAC module. + 16 + 3 + read-only + + + DIS_PAD_JTAG + Set this bit to disable JTAG in the hard way. JTAG is disabled permanently. + 19 + 1 + read-only + + + DIS_DOWNLOAD_MANUAL_ENCRYPT + Set this bit to disable flash encryption when in download boot modes. + 20 + 1 + read-only + + + USB_DREFH + Controls single-end input threshold vrefh, 1.76 V to 2 V with step of 80 mV, stored in eFuse. + 21 + 2 + read-only + + + USB_DREFL + Controls single-end input threshold vrefl, 0.8 V to 1.04 V with step of 80 mV, stored in eFuse. + 23 + 2 + read-only + + + USB_EXCHG_PINS + Set this bit to exchange USB D+ and D- pins. + 25 + 1 + read-only + + + EXT_PHY_ENABLE + Set this bit to enable external PHY. + 26 + 1 + read-only + + + BTLC_GPIO_ENABLE + Bluetooth GPIO signal output security level control. + 27 + 2 + read-only + + + VDD_SPI_MODECURLIM + SPI regulator switches current limit mode. + 29 + 1 + read-only + + + VDD_SPI_DREFH + SPI regulator high voltage reference. + 30 + 2 + read-only + + + + + RD_REPEAT_DATA1 + BLOCK0 data register 2. + 0x34 + 0x20 + + + VDD_SPI_DREFM + SPI regulator medium voltage reference. + 0 + 2 + read-only + + + VDD_SPI_DREFL + SPI regulator low voltage reference. + 2 + 2 + read-only + + + VDD_SPI_XPD + SPI regulator power up signal. + 4 + 1 + read-only + + + VDD_SPI_TIEH + SPI regulator output is short connected to VDD3P3_RTC_IO. + 5 + 1 + read-only + + + VDD_SPI_FORCE + Set this bit and force to use the configuration of eFuse to configure VDD_SPI. + 6 + 1 + read-only + + + VDD_SPI_EN_INIT + Set SPI regulator to 0 to configure init[1:0]=0. + 7 + 1 + read-only + + + VDD_SPI_ENCURLIM + Set SPI regulator to 1 to enable output current limit. + 8 + 1 + read-only + + + VDD_SPI_DCURLIM + Tunes the current limit threshold of SPI regulator when tieh=0, about 800 mA/(8+d). + 9 + 3 + read-only + + + VDD_SPI_INIT + Adds resistor from LDO output to ground. 0: no resistance 1: 6 K 2: 4 K 3: 2 K. + 12 + 2 + read-only + + + VDD_SPI_DCAP + Prevents SPI regulator from overshoot. + 14 + 2 + read-only + + + WDT_DELAY_SEL + Selects RTC watchdog timeout threshold, in unit of slow clock cycle. 0: 40000. 1: 80000. 2: 160000. 3:320000. + 16 + 2 + read-only + + + SPI_BOOT_CRYPT_CNT + Set this bit to enable SPI boot encrypt/decrypt. Odd number of 1: enable. even number of 1: disable. + 18 + 3 + read-only + + + SECURE_BOOT_KEY_REVOKE0 + Set this bit to enable revoking first secure boot key. + 21 + 1 + read-only + + + SECURE_BOOT_KEY_REVOKE1 + Set this bit to enable revoking second secure boot key. + 22 + 1 + read-only + + + SECURE_BOOT_KEY_REVOKE2 + Set this bit to enable revoking third secure boot key. + 23 + 1 + read-only + + + KEY_PURPOSE_0 + Purpose of Key0. + 24 + 4 + read-only + + + KEY_PURPOSE_1 + Purpose of Key1. + 28 + 4 + read-only + + + + + RD_REPEAT_DATA2 + BLOCK0 data register 3. + 0x38 + 0x20 + + + KEY_PURPOSE_2 + Purpose of Key2. + 0 + 4 + read-only + + + KEY_PURPOSE_3 + Purpose of Key3. + 4 + 4 + read-only + + + KEY_PURPOSE_4 + Purpose of Key4. + 8 + 4 + read-only + + + KEY_PURPOSE_5 + Purpose of Key5. + 12 + 4 + read-only + + + RPT4_RESERVED0 + Reserved (used for four backups method). + 16 + 4 + read-only + + + SECURE_BOOT_EN + Set this bit to enable secure boot. + 20 + 1 + read-only + + + SECURE_BOOT_AGGRESSIVE_REVOKE + Set this bit to enable revoking aggressive secure boot. + 21 + 1 + read-only + + + DIS_USB_JTAG + Set this bit to disable function of usb switch to jtag in module of usb device. + 22 + 1 + read-only + + + DIS_USB_DEVICE + Set this bit to disable usb device. + 23 + 1 + read-only + + + STRAP_JTAG_SEL + Set this bit to enable selection between usb_to_jtag and pad_to_jtag through strapping gpio10 when both reg_dis_usb_jtag and reg_dis_pad_jtag are equal to 0. + 24 + 1 + read-only + + + USB_PHY_SEL + This bit is used to switch internal PHY and external PHY for USB OTG and USB Device. 0: internal PHY is assigned to USB Device while external PHY is assigned to USB OTG. 1: internal PHY is assigned to USB OTG while external PHY is assigned to USB Device. + 25 + 1 + read-only + + + POWER_GLITCH_DSENSE + Sample delay configuration of power glitch. + 26 + 2 + read-only + + + FLASH_TPUW + Configures flash waiting time after power-up, in unit of ms. If the value is less than 15, the waiting time is the configurable value. Otherwise, the waiting time is twice the configurable value. + 28 + 4 + read-only + + + + + RD_REPEAT_DATA3 + BLOCK0 data register 4. + 0x3C + 0x20 + + + DIS_DOWNLOAD_MODE + Set this bit to disable download mode (boot_mode[3:0] = 0, 1, 2, 3, 6, 7). + 0 + 1 + read-only + + + DIS_LEGACY_SPI_BOOT + Set this bit to disable Legacy SPI boot mode (boot_mode[3:0] = 4). + 1 + 1 + read-only + + + UART_PRINT_CHANNEL + Selectes the default UART print channel. 0: UART0. 1: UART1. + 2 + 1 + read-only + + + FLASH_ECC_MODE + Set ECC mode in ROM, 0: ROM would Enable Flash ECC 16to18 byte mode. 1:ROM would use 16to17 byte mode. + 3 + 1 + read-only + + + DIS_USB_DOWNLOAD_MODE + Set this bit to disable UART download mode through USB. + 4 + 1 + read-only + + + ENABLE_SECURITY_DOWNLOAD + Set this bit to enable secure UART download mode. + 5 + 1 + read-only + + + UART_PRINT_CONTROL + Set the default UARTboot message output mode. 00: Enabled. 01: Enabled when GPIO8 is low at reset. 10: Enabled when GPIO8 is high at reset. 11:disabled. + 6 + 2 + read-only + + + PIN_POWER_SELECTION + GPIO33-GPIO37 power supply selection in ROM code. 0: VDD3P3_CPU. 1: VDD_SPI. + 8 + 1 + read-only + + + FLASH_TYPE + Set the maximum lines of SPI flash. 0: four lines. 1: eight lines. + 9 + 1 + read-only + + + FLASH_PAGE_SIZE + Set Flash page size. + 10 + 2 + read-only + + + FLASH_ECC_EN + Set 1 to enable ECC for flash boot. + 12 + 1 + read-only + + + FORCE_SEND_RESUME + Set this bit to force ROM code to send a resume command during SPI boot. + 13 + 1 + read-only + + + SECURE_VERSION + Secure version (used by ESP-IDF anti-rollback feature). + 14 + 16 + read-only + + + POWERGLITCH_EN + Set this bit to enable power glitch function. + 30 + 1 + read-only + + + RPT4_RESERVED1 + Reserved (used for four backups method). + 31 + 1 + read-only + + + + + RD_REPEAT_DATA4 + BLOCK0 data register 5. + 0x40 + 0x20 + + + RPT4_RESERVED2 + Reserved (used for four backups method). + 0 + 24 + read-only + + + + + RD_MAC_SPI_SYS_0 + BLOCK1 data register 0. + 0x44 + 0x20 + + + MAC_0 + Stores the low 32 bits of MAC address. + 0 + 32 + read-only + + + + + RD_MAC_SPI_SYS_1 + BLOCK1 data register 1. + 0x48 + 0x20 + + + MAC_1 + Stores the high 16 bits of MAC address. + 0 + 16 + read-only + + + SPI_PAD_CONF_0 + Stores the zeroth part of SPI_PAD_CONF. + 16 + 16 + read-only + + + + + RD_MAC_SPI_SYS_2 + BLOCK1 data register 2. + 0x4C + 0x20 + + + SPI_PAD_CONF_1 + Stores the first part of SPI_PAD_CONF. + 0 + 32 + read-only + + + + + RD_MAC_SPI_SYS_3 + BLOCK1 data register 3. + 0x50 + 0x20 + + + SPI_PAD_CONF_2 + Stores the second part of SPI_PAD_CONF. + 0 + 18 + read-only + + + SYS_DATA_PART0_0 + Stores the fist 14 bits of the zeroth part of system data. + 18 + 14 + read-only + + + + + RD_MAC_SPI_SYS_4 + BLOCK1 data register 4. + 0x54 + 0x20 + + + SYS_DATA_PART0_1 + Stores the fist 32 bits of the zeroth part of system data. + 0 + 32 + read-only + + + + + RD_MAC_SPI_SYS_5 + BLOCK1 data register 5. + 0x58 + 0x20 + + + SYS_DATA_PART0_2 + Stores the second 32 bits of the zeroth part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA0 + Register 0 of BLOCK2 (system). + 0x5C + 0x20 + + + SYS_DATA_PART1_0 + Stores the zeroth 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA1 + Register 1 of BLOCK2 (system). + 0x60 + 0x20 + + + SYS_DATA_PART1_1 + Stores the first 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA2 + Register 2 of BLOCK2 (system). + 0x64 + 0x20 + + + SYS_DATA_PART1_2 + Stores the second 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA3 + Register 3 of BLOCK2 (system). + 0x68 + 0x20 + + + SYS_DATA_PART1_3 + Stores the third 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA4 + Register 4 of BLOCK2 (system). + 0x6C + 0x20 + + + SYS_DATA_PART1_4 + Stores the fourth 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA5 + Register 5 of BLOCK2 (system). + 0x70 + 0x20 + + + SYS_DATA_PART1_5 + Stores the fifth 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA6 + Register 6 of BLOCK2 (system). + 0x74 + 0x20 + + + SYS_DATA_PART1_6 + Stores the sixth 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART1_DATA7 + Register 7 of BLOCK2 (system). + 0x78 + 0x20 + + + SYS_DATA_PART1_7 + Stores the seventh 32 bits of the first part of system data. + 0 + 32 + read-only + + + + + RD_USR_DATA0 + Register 0 of BLOCK3 (user). + 0x7C + 0x20 + + + USR_DATA0 + Stores the zeroth 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA1 + Register 1 of BLOCK3 (user). + 0x80 + 0x20 + + + USR_DATA1 + Stores the first 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA2 + Register 2 of BLOCK3 (user). + 0x84 + 0x20 + + + USR_DATA2 + Stores the second 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA3 + Register 3 of BLOCK3 (user). + 0x88 + 0x20 + + + USR_DATA3 + Stores the third 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA4 + Register 4 of BLOCK3 (user). + 0x8C + 0x20 + + + USR_DATA4 + Stores the fourth 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA5 + Register 5 of BLOCK3 (user). + 0x90 + 0x20 + + + USR_DATA5 + Stores the fifth 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA6 + Register 6 of BLOCK3 (user). + 0x94 + 0x20 + + + USR_DATA6 + Stores the sixth 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_USR_DATA7 + Register 7 of BLOCK3 (user). + 0x98 + 0x20 + + + USR_DATA7 + Stores the seventh 32 bits of BLOCK3 (user). + 0 + 32 + read-only + + + + + RD_KEY0_DATA0 + Register 0 of BLOCK4 (KEY0). + 0x9C + 0x20 + + + KEY0_DATA0 + Stores the zeroth 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA1 + Register 1 of BLOCK4 (KEY0). + 0xA0 + 0x20 + + + KEY0_DATA1 + Stores the first 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA2 + Register 2 of BLOCK4 (KEY0). + 0xA4 + 0x20 + + + KEY0_DATA2 + Stores the second 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA3 + Register 3 of BLOCK4 (KEY0). + 0xA8 + 0x20 + + + KEY0_DATA3 + Stores the third 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA4 + Register 4 of BLOCK4 (KEY0). + 0xAC + 0x20 + + + KEY0_DATA4 + Stores the fourth 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA5 + Register 5 of BLOCK4 (KEY0). + 0xB0 + 0x20 + + + KEY0_DATA5 + Stores the fifth 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA6 + Register 6 of BLOCK4 (KEY0). + 0xB4 + 0x20 + + + KEY0_DATA6 + Stores the sixth 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY0_DATA7 + Register 7 of BLOCK4 (KEY0). + 0xB8 + 0x20 + + + KEY0_DATA7 + Stores the seventh 32 bits of KEY0. + 0 + 32 + read-only + + + + + RD_KEY1_DATA0 + Register 0 of BLOCK5 (KEY1). + 0xBC + 0x20 + + + KEY1_DATA0 + Stores the zeroth 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA1 + Register 1 of BLOCK5 (KEY1). + 0xC0 + 0x20 + + + KEY1_DATA1 + Stores the first 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA2 + Register 2 of BLOCK5 (KEY1). + 0xC4 + 0x20 + + + KEY1_DATA2 + Stores the second 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA3 + Register 3 of BLOCK5 (KEY1). + 0xC8 + 0x20 + + + KEY1_DATA3 + Stores the third 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA4 + Register 4 of BLOCK5 (KEY1). + 0xCC + 0x20 + + + KEY1_DATA4 + Stores the fourth 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA5 + Register 5 of BLOCK5 (KEY1). + 0xD0 + 0x20 + + + KEY1_DATA5 + Stores the fifth 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA6 + Register 6 of BLOCK5 (KEY1). + 0xD4 + 0x20 + + + KEY1_DATA6 + Stores the sixth 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY1_DATA7 + Register 7 of BLOCK5 (KEY1). + 0xD8 + 0x20 + + + KEY1_DATA7 + Stores the seventh 32 bits of KEY1. + 0 + 32 + read-only + + + + + RD_KEY2_DATA0 + Register 0 of BLOCK6 (KEY2). + 0xDC + 0x20 + + + KEY2_DATA0 + Stores the zeroth 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA1 + Register 1 of BLOCK6 (KEY2). + 0xE0 + 0x20 + + + KEY2_DATA1 + Stores the first 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA2 + Register 2 of BLOCK6 (KEY2). + 0xE4 + 0x20 + + + KEY2_DATA2 + Stores the second 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA3 + Register 3 of BLOCK6 (KEY2). + 0xE8 + 0x20 + + + KEY2_DATA3 + Stores the third 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA4 + Register 4 of BLOCK6 (KEY2). + 0xEC + 0x20 + + + KEY2_DATA4 + Stores the fourth 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA5 + Register 5 of BLOCK6 (KEY2). + 0xF0 + 0x20 + + + KEY2_DATA5 + Stores the fifth 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA6 + Register 6 of BLOCK6 (KEY2). + 0xF4 + 0x20 + + + KEY2_DATA6 + Stores the sixth 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY2_DATA7 + Register 7 of BLOCK6 (KEY2). + 0xF8 + 0x20 + + + KEY2_DATA7 + Stores the seventh 32 bits of KEY2. + 0 + 32 + read-only + + + + + RD_KEY3_DATA0 + Register 0 of BLOCK7 (KEY3). + 0xFC + 0x20 + + + KEY3_DATA0 + Stores the zeroth 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA1 + Register 1 of BLOCK7 (KEY3). + 0x100 + 0x20 + + + KEY3_DATA1 + Stores the first 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA2 + Register 2 of BLOCK7 (KEY3). + 0x104 + 0x20 + + + KEY3_DATA2 + Stores the second 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA3 + Register 3 of BLOCK7 (KEY3). + 0x108 + 0x20 + + + KEY3_DATA3 + Stores the third 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA4 + Register 4 of BLOCK7 (KEY3). + 0x10C + 0x20 + + + KEY3_DATA4 + Stores the fourth 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA5 + Register 5 of BLOCK7 (KEY3). + 0x110 + 0x20 + + + KEY3_DATA5 + Stores the fifth 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA6 + Register 6 of BLOCK7 (KEY3). + 0x114 + 0x20 + + + KEY3_DATA6 + Stores the sixth 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY3_DATA7 + Register 7 of BLOCK7 (KEY3). + 0x118 + 0x20 + + + KEY3_DATA7 + Stores the seventh 32 bits of KEY3. + 0 + 32 + read-only + + + + + RD_KEY4_DATA0 + Register 0 of BLOCK8 (KEY4). + 0x11C + 0x20 + + + KEY4_DATA0 + Stores the zeroth 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA1 + Register 1 of BLOCK8 (KEY4). + 0x120 + 0x20 + + + KEY4_DATA1 + Stores the first 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA2 + Register 2 of BLOCK8 (KEY4). + 0x124 + 0x20 + + + KEY4_DATA2 + Stores the second 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA3 + Register 3 of BLOCK8 (KEY4). + 0x128 + 0x20 + + + KEY4_DATA3 + Stores the third 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA4 + Register 4 of BLOCK8 (KEY4). + 0x12C + 0x20 + + + KEY4_DATA4 + Stores the fourth 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA5 + Register 5 of BLOCK8 (KEY4). + 0x130 + 0x20 + + + KEY4_DATA5 + Stores the fifth 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA6 + Register 6 of BLOCK8 (KEY4). + 0x134 + 0x20 + + + KEY4_DATA6 + Stores the sixth 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY4_DATA7 + Register 7 of BLOCK8 (KEY4). + 0x138 + 0x20 + + + KEY4_DATA7 + Stores the seventh 32 bits of KEY4. + 0 + 32 + read-only + + + + + RD_KEY5_DATA0 + Register 0 of BLOCK9 (KEY5). + 0x13C + 0x20 + + + KEY5_DATA0 + Stores the zeroth 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA1 + Register 1 of BLOCK9 (KEY5). + 0x140 + 0x20 + + + KEY5_DATA1 + Stores the first 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA2 + Register 2 of BLOCK9 (KEY5). + 0x144 + 0x20 + + + KEY5_DATA2 + Stores the second 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA3 + Register 3 of BLOCK9 (KEY5). + 0x148 + 0x20 + + + KEY5_DATA3 + Stores the third 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA4 + Register 4 of BLOCK9 (KEY5). + 0x14C + 0x20 + + + KEY5_DATA4 + Stores the fourth 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA5 + Register 5 of BLOCK9 (KEY5). + 0x150 + 0x20 + + + KEY5_DATA5 + Stores the fifth 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA6 + Register 6 of BLOCK9 (KEY5). + 0x154 + 0x20 + + + KEY5_DATA6 + Stores the sixth 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_KEY5_DATA7 + Register 7 of BLOCK9 (KEY5). + 0x158 + 0x20 + + + KEY5_DATA7 + Stores the seventh 32 bits of KEY5. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA0 + Register 0 of BLOCK10 (system). + 0x15C + 0x20 + + + SYS_DATA_PART2_0 + Stores the 0th 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA1 + Register 1 of BLOCK9 (KEY5). + 0x160 + 0x20 + + + SYS_DATA_PART2_1 + Stores the 1st 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA2 + Register 2 of BLOCK10 (system). + 0x164 + 0x20 + + + SYS_DATA_PART2_2 + Stores the 2nd 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA3 + Register 3 of BLOCK10 (system). + 0x168 + 0x20 + + + SYS_DATA_PART2_3 + Stores the 3rd 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA4 + Register 4 of BLOCK10 (system). + 0x16C + 0x20 + + + SYS_DATA_PART2_4 + Stores the 4th 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA5 + Register 5 of BLOCK10 (system). + 0x170 + 0x20 + + + SYS_DATA_PART2_5 + Stores the 5th 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA6 + Register 6 of BLOCK10 (system). + 0x174 + 0x20 + + + SYS_DATA_PART2_6 + Stores the 6th 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_SYS_PART2_DATA7 + Register 7 of BLOCK10 (system). + 0x178 + 0x20 + + + SYS_DATA_PART2_7 + Stores the 7th 32 bits of the 2nd part of system data. + 0 + 32 + read-only + + + + + RD_REPEAT_ERR0 + Programming error record register 0 of BLOCK0. + 0x17C + 0x20 + + + RD_DIS_ERR + If any bits in this filed are 1, then it indicates a programming error. + 0 + 7 + read-only + + + DIS_RTC_RAM_BOOT_ERR + If any bits in this filed are 1, then it indicates a programming error. + 7 + 1 + read-only + + + DIS_ICACHE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 8 + 1 + read-only + + + DIS_DCACHE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 9 + 1 + read-only + + + DIS_DOWNLOAD_ICACHE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 10 + 1 + read-only + + + DIS_DOWNLOAD_DCACHE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 11 + 1 + read-only + + + DIS_FORCE_DOWNLOAD_ERR + If any bits in this filed are 1, then it indicates a programming error. + 12 + 1 + read-only + + + DIS_USB_ERR + If any bits in this filed are 1, then it indicates a programming error. + 13 + 1 + read-only + + + DIS_CAN_ERR + If any bits in this filed are 1, then it indicates a programming error. + 14 + 1 + read-only + + + DIS_APP_CPU_ERR + If any bits in this filed are 1, then it indicates a programming error. + 15 + 1 + read-only + + + SOFT_DIS_JTAG_ERR + If any bits in this filed are 1, then it indicates a programming error. + 16 + 3 + read-only + + + DIS_PAD_JTAG_ERR + If any bits in this filed are 1, then it indicates a programming error. + 19 + 1 + read-only + + + DIS_DOWNLOAD_MANUAL_ENCRYPT_ERR + If any bits in this filed are 1, then it indicates a programming error. + 20 + 1 + read-only + + + USB_DREFH_ERR + If any bits in this filed are 1, then it indicates a programming error. + 21 + 2 + read-only + + + USB_DREFL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 23 + 2 + read-only + + + USB_EXCHG_PINS_ERR + If any bits in this filed are 1, then it indicates a programming error. + 25 + 1 + read-only + + + EXT_PHY_ENABLE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 26 + 1 + read-only + + + BTLC_GPIO_ENABLE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 27 + 2 + read-only + + + VDD_SPI_MODECURLIM_ERR + If any bits in this filed are 1, then it indicates a programming error. + 29 + 1 + read-only + + + VDD_SPI_DREFH_ERR + If any bits in this filed are 1, then it indicates a programming error. + 30 + 2 + read-only + + + + + RD_REPEAT_ERR1 + Programming error record register 1 of BLOCK0. + 0x180 + 0x20 + + + VDD_SPI_DREFM_ERR + If any bits in this filed are 1, then it indicates a programming error. + 0 + 2 + read-only + + + VDD_SPI_DREFL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 2 + 2 + read-only + + + VDD_SPI_XPD_ERR + If any bits in this filed are 1, then it indicates a programming error. + 4 + 1 + read-only + + + VDD_SPI_TIEH_ERR + If any bits in this filed are 1, then it indicates a programming error. + 5 + 1 + read-only + + + VDD_SPI_FORCE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 6 + 1 + read-only + + + VDD_SPI_EN_INIT_ERR + If any bits in this filed are 1, then it indicates a programming error. + 7 + 1 + read-only + + + VDD_SPI_ENCURLIM_ERR + If any bits in this filed are 1, then it indicates a programming error. + 8 + 1 + read-only + + + VDD_SPI_DCURLIM_ERR + If any bits in this filed are 1, then it indicates a programming error. + 9 + 3 + read-only + + + VDD_SPI_INIT_ERR + If any bits in this filed are 1, then it indicates a programming error. + 12 + 2 + read-only + + + VDD_SPI_DCAP_ERR + If any bits in this filed are 1, then it indicates a programming error. + 14 + 2 + read-only + + + WDT_DELAY_SEL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 16 + 2 + read-only + + + SPI_BOOT_CRYPT_CNT_ERR + If any bits in this filed are 1, then it indicates a programming error. + 18 + 3 + read-only + + + SECURE_BOOT_KEY_REVOKE0_ERR + If any bits in this filed are 1, then it indicates a programming error. + 21 + 1 + read-only + + + SECURE_BOOT_KEY_REVOKE1_ERR + If any bits in this filed are 1, then it indicates a programming error. + 22 + 1 + read-only + + + SECURE_BOOT_KEY_REVOKE2_ERR + If any bits in this filed are 1, then it indicates a programming error. + 23 + 1 + read-only + + + KEY_PURPOSE_0_ERR + If any bits in this filed are 1, then it indicates a programming error. + 24 + 4 + read-only + + + KEY_PURPOSE_1_ERR + If any bits in this filed are 1, then it indicates a programming error. + 28 + 4 + read-only + + + + + RD_REPEAT_ERR2 + Programming error record register 2 of BLOCK0. + 0x184 + 0x20 + + + KEY_PURPOSE_2_ERR + If any bits in this filed are 1, then it indicates a programming error. + 0 + 4 + read-only + + + KEY_PURPOSE_3_ERR + If any bits in this filed are 1, then it indicates a programming error. + 4 + 4 + read-only + + + KEY_PURPOSE_4_ERR + If any bits in this filed are 1, then it indicates a programming error. + 8 + 4 + read-only + + + KEY_PURPOSE_5_ERR + If any bits in this filed are 1, then it indicates a programming error. + 12 + 4 + read-only + + + RPT4_RESERVED0_ERR + If any bits in this filed are 1, then it indicates a programming error. + 16 + 4 + read-only + + + SECURE_BOOT_EN_ERR + If any bits in this filed are 1, then it indicates a programming error. + 20 + 1 + read-only + + + SECURE_BOOT_AGGRESSIVE_REVOKE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 21 + 1 + read-only + + + DIS_USB_JTAG_ERR + If any bits in this filed are 1, then it indicates a programming error. + 22 + 1 + read-only + + + DIS_USB_DEVICE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 23 + 1 + read-only + + + STRAP_JTAG_SEL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 24 + 1 + read-only + + + USB_PHY_SEL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 25 + 1 + read-only + + + POWER_GLITCH_DSENSE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 26 + 2 + read-only + + + FLASH_TPUW_ERR + If any bits in this filed are 1, then it indicates a programming error. + 28 + 4 + read-only + + + + + RD_REPEAT_ERR3 + Programming error record register 3 of BLOCK0. + 0x188 + 0x20 + + + DIS_DOWNLOAD_MODE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 0 + 1 + read-only + + + DIS_LEGACY_SPI_BOOT_ERR + If any bits in this filed are 1, then it indicates a programming error. + 1 + 1 + read-only + + + UART_PRINT_CHANNEL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 2 + 1 + read-only + + + FLASH_ECC_MODE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 3 + 1 + read-only + + + DIS_USB_DOWNLOAD_MODE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 4 + 1 + read-only + + + ENABLE_SECURITY_DOWNLOAD_ERR + If any bits in this filed are 1, then it indicates a programming error. + 5 + 1 + read-only + + + UART_PRINT_CONTROL_ERR + If any bits in this filed are 1, then it indicates a programming error. + 6 + 2 + read-only + + + PIN_POWER_SELECTION_ERR + If any bits in this filed are 1, then it indicates a programming error. + 8 + 1 + read-only + + + FLASH_TYPE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 9 + 1 + read-only + + + FLASH_PAGE_SIZE_ERR + If any bits in this filed are 1, then it indicates a programming error. + 10 + 2 + read-only + + + FLASH_ECC_EN_ERR + If any bits in this filed are 1, then it indicates a programming error. + 12 + 1 + read-only + + + FORCE_SEND_RESUME_ERR + If any bits in this filed are 1, then it indicates a programming error. + 13 + 1 + read-only + + + SECURE_VERSION_ERR + If any bits in this filed are 1, then it indicates a programming error. + 14 + 16 + read-only + + + POWERGLITCH_EN_ERR + If any bits in this filed are 1, then it indicates a programming error. + 30 + 1 + read-only + + + RPT4_RESERVED1_ERR + Reserved. + 31 + 1 + read-only + + + + + RD_REPEAT_ERR4 + Programming error record register 4 of BLOCK0. + 0x190 + 0x20 + + + RPT4_RESERVED2_ERR + If any bits in this filed are 1, then it indicates a programming error. + 0 + 24 + read-only + + + + + RD_RS_ERR0 + Programming error record register 0 of BLOCK1-10. + 0x1C0 + 0x20 + + + MAC_SPI_8M_ERR_NUM + The value of this signal means the number of error bytes. + 0 + 3 + read-only + + + MAC_SPI_8M_FAIL + 0: Means no failure and that the data of MAC_SPI_8M is reliable 1: Means that programming user data failed and the number of error bytes is over 6. + 3 + 1 + read-only + + + SYS_PART1_NUM + The value of this signal means the number of error bytes. + 4 + 3 + read-only + + + SYS_PART1_FAIL + 0: Means no failure and that the data of system part1 is reliable 1: Means that programming user data failed and the number of error bytes is over 6. + 7 + 1 + read-only + + + USR_DATA_ERR_NUM + The value of this signal means the number of error bytes. + 8 + 3 + read-only + + + USR_DATA_FAIL + 0: Means no failure and that the user data is reliable 1: Means that programming user data failed and the number of error bytes is over 6. + 11 + 1 + read-only + + + KEY0_ERR_NUM + The value of this signal means the number of error bytes. + 12 + 3 + read-only + + + KEY0_FAIL + 0: Means no failure and that the data of key0 is reliable 1: Means that programming key0 failed and the number of error bytes is over 6. + 15 + 1 + read-only + + + KEY1_ERR_NUM + The value of this signal means the number of error bytes. + 16 + 3 + read-only + + + KEY1_FAIL + 0: Means no failure and that the data of key1 is reliable 1: Means that programming key1 failed and the number of error bytes is over 6. + 19 + 1 + read-only + + + KEY2_ERR_NUM + The value of this signal means the number of error bytes. + 20 + 3 + read-only + + + KEY2_FAIL + 0: Means no failure and that the data of key2 is reliable 1: Means that programming key2 failed and the number of error bytes is over 6. + 23 + 1 + read-only + + + KEY3_ERR_NUM + The value of this signal means the number of error bytes. + 24 + 3 + read-only + + + KEY3_FAIL + 0: Means no failure and that the data of key3 is reliable 1: Means that programming key3 failed and the number of error bytes is over 6. + 27 + 1 + read-only + + + KEY4_ERR_NUM + The value of this signal means the number of error bytes. + 28 + 3 + read-only + + + KEY4_FAIL + 0: Means no failure and that the data of key4 is reliable 1: Means that programming key4 failed and the number of error bytes is over 6. + 31 + 1 + read-only + + + + + RD_RS_ERR1 + Programming error record register 1 of BLOCK1-10. + 0x1C4 + 0x20 + + + KEY5_ERR_NUM + The value of this signal means the number of error bytes. + 0 + 3 + read-only + + + KEY5_FAIL + 0: Means no failure and that the data of KEY5 is reliable 1: Means that programming user data failed and the number of error bytes is over 6. + 3 + 1 + read-only + + + SYS_PART2_ERR_NUM + The value of this signal means the number of error bytes. + 4 + 3 + read-only + + + SYS_PART2_FAIL + 0: Means no failure and that the data of system part2 is reliable 1: Means that programming user data failed and the number of error bytes is over 6. + 7 + 1 + read-only + + + + + CLK + eFuse clcok configuration register. + 0x1C8 + 0x20 + 0x00000002 + + + EFUSE_MEM_FORCE_PD + Set this bit to force eFuse SRAM into power-saving mode. + 0 + 1 + read-write + + + MEM_CLK_FORCE_ON + Set this bit and force to activate clock signal of eFuse SRAM. + 1 + 1 + read-write + + + EFUSE_MEM_FORCE_PU + Set this bit to force eFuse SRAM into working mode. + 2 + 1 + read-write + + + EN + Set this bit and force to enable clock signal of eFuse memory. + 16 + 1 + read-write + + + + + CONF + eFuse operation mode configuraiton register + 0x1CC + 0x20 + + + OP_CODE + 0x5A5A: Operate programming command 0x5AA5: Operate read command. + 0 + 16 + read-write + + + + + STATUS + eFuse status register. + 0x1D0 + 0x20 + + + STATE + Indicates the state of the eFuse state machine. + 0 + 4 + read-only + + + OTP_LOAD_SW + The value of OTP_LOAD_SW. + 4 + 1 + read-only + + + OTP_VDDQ_C_SYNC2 + The value of OTP_VDDQ_C_SYNC2. + 5 + 1 + read-only + + + OTP_STROBE_SW + The value of OTP_STROBE_SW. + 6 + 1 + read-only + + + OTP_CSB_SW + The value of OTP_CSB_SW. + 7 + 1 + read-only + + + OTP_PGENB_SW + The value of OTP_PGENB_SW. + 8 + 1 + read-only + + + OTP_VDDQ_IS_SW + The value of OTP_VDDQ_IS_SW. + 9 + 1 + read-only + + + REPEAT_ERR_CNT + Indicates the number of error bits during programming BLOCK0. + 10 + 8 + read-only + + + + + CMD + eFuse command register. + 0x1D4 + 0x20 + + + READ_CMD + Set this bit to send read command. + 0 + 1 + read-write + + + PGM_CMD + Set this bit to send programming command. + 1 + 1 + read-write + + + BLK_NUM + The serial number of the block to be programmed. Value 0-10 corresponds to block number 0-10, respectively. + 2 + 4 + read-write + + + + + INT_RAW + eFuse raw interrupt register. + 0x1D8 + 0x20 + + + READ_DONE_INT_RAW + The raw bit signal for read_done interrupt. + 0 + 1 + read-write + + + PGM_DONE_INT_RAW + The raw bit signal for pgm_done interrupt. + 1 + 1 + read-write + + + + + INT_ST + eFuse interrupt status register. + 0x1DC + 0x20 + + + READ_DONE_INT_ST + The status signal for read_done interrupt. + 0 + 1 + read-only + + + PGM_DONE_INT_ST + The status signal for pgm_done interrupt. + 1 + 1 + read-only + + + + + INT_ENA + eFuse interrupt enable register. + 0x1E0 + 0x20 + + + READ_DONE_INT_ENA + The enable signal for read_done interrupt. + 0 + 1 + read-write + + + PGM_DONE_INT_ENA + The enable signal for pgm_done interrupt. + 1 + 1 + read-write + + + + + INT_CLR + eFuse interrupt clear register. + 0x1E4 + 0x20 + + + READ_DONE_INT_CLR + The clear signal for read_done interrupt. + 0 + 1 + write-only + + + PGM_DONE_INT_CLR + The clear signal for pgm_done interrupt. + 1 + 1 + write-only + + + + + DAC_CONF + Controls the eFuse programming voltage. + 0x1E8 + 0x20 + 0x0001FE1C + + + DAC_CLK_DIV + Controls the division factor of the rising clock of the programming voltage. + 0 + 8 + read-write + + + DAC_CLK_PAD_SEL + Don't care. + 8 + 1 + read-write + + + DAC_NUM + Controls the rising period of the programming voltage. + 9 + 8 + read-write + + + OE_CLR + Reduces the power supply of the programming voltage. + 17 + 1 + read-write + + + + + RD_TIM_CONF + Configures read timing parameters. + 0x1EC + 0x20 + 0x12000000 + + + READ_INIT_NUM + Configures the initial read time of eFuse. + 24 + 8 + read-write + + + + + WR_TIM_CONF1 + Configurarion register 1 of eFuse programming timing parameters. + 0x1F4 + 0x20 + 0x00288000 + + + PWR_ON_NUM + Configures the power up time for VDDQ. + 8 + 16 + read-write + + + + + WR_TIM_CONF2 + Configurarion register 2 of eFuse programming timing parameters. + 0x1F8 + 0x20 + 0x00000190 + + + PWR_OFF_NUM + Configures the power outage time for VDDQ. + 0 + 16 + read-write + + + + + DATE + eFuse version register. + 0x1FC + 0x20 + 0x02101290 + + + DATE + Stores eFuse version. + 0 + 28 + read-write + + + + + + + EXTMEM + External Memory + EXTMEM + 0x600C4000 + + 0x0 + 0x17C + registers + + + + DCACHE_CTRL + ******* Description *********** + 0x0 + 0x20 + + + DCACHE_ENABLE + The bit is used to activate the data cache. 0: disable, 1: enable + 0 + 1 + read-write + + + DCACHE_SIZE_MODE + The bit is used to configure cache memory size.0: 32KB, 1: 64KB + 2 + 1 + read-write + + + DCACHE_BLOCKSIZE_MODE + The bit is used to configure cache block size.0: 16 bytes, 1: 32 bytes,2: 64 bytes + 3 + 2 + read-write + + + + + DCACHE_CTRL1 + ******* Description *********** + 0x4 + 0x20 + 0x00000003 + + + DCACHE_SHUT_CORE0_BUS + The bit is used to disable core0 dbus, 0: enable, 1: disable + 0 + 1 + read-write + + + DCACHE_SHUT_CORE1_BUS + The bit is used to disable core1 dbus, 0: enable, 1: disable + 1 + 1 + read-write + + + + + DCACHE_TAG_POWER_CTRL + ******* Description *********** + 0x8 + 0x20 + 0x00000005 + + + DCACHE_TAG_MEM_FORCE_ON + The bit is used to close clock gating of dcache tag memory. 1: close gating, 0: open clock gating. + 0 + 1 + read-write + + + DCACHE_TAG_MEM_FORCE_PD + The bit is used to power dcache tag memory down, 0: follow rtc_lslp_pd, 1: power down + 1 + 1 + read-write + + + DCACHE_TAG_MEM_FORCE_PU + The bit is used to power dcache tag memory up, 0: follow rtc_lslp_pd, 1: power up + 2 + 1 + read-write + + + + + DCACHE_PRELOCK_CTRL + ******* Description *********** + 0xC + 0x20 + + + DCACHE_PRELOCK_SCT0_EN + The bit is used to enable the first section of prelock function. + 0 + 1 + read-write + + + DCACHE_PRELOCK_SCT1_EN + The bit is used to enable the second section of prelock function. + 1 + 1 + read-write + + + + + DCACHE_PRELOCK_SCT0_ADDR + ******* Description *********** + 0x10 + 0x20 + + + DCACHE_PRELOCK_SCT0_ADDR + The bits are used to configure the first start virtual address of data prelock, which is combined with DCACHE_PRELOCK_SCT0_SIZE_REG + 0 + 32 + read-write + + + + + DCACHE_PRELOCK_SCT1_ADDR + ******* Description *********** + 0x14 + 0x20 + + + DCACHE_PRELOCK_SCT1_ADDR + The bits are used to configure the second start virtual address of data prelock, which is combined with DCACHE_PRELOCK_SCT1_SIZE_REG + 0 + 32 + read-write + + + + + DCACHE_PRELOCK_SCT_SIZE + ******* Description *********** + 0x18 + 0x20 + + + DCACHE_PRELOCK_SCT1_SIZE + The bits are used to configure the second length of data locking, which is combined with DCACHE_PRELOCK_SCT1_ADDR_REG + 0 + 16 + read-write + + + DCACHE_PRELOCK_SCT0_SIZE + The bits are used to configure the first length of data locking, which is combined with DCACHE_PRELOCK_SCT0_ADDR_REG + 16 + 16 + read-write + + + + + DCACHE_LOCK_CTRL + ******* Description *********** + 0x1C + 0x20 + 0x00000004 + + + DCACHE_LOCK_ENA + The bit is used to enable lock operation. It will be cleared by hardware after lock operation done. + 0 + 1 + read-write + + + DCACHE_UNLOCK_ENA + The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done. + 1 + 1 + read-write + + + DCACHE_LOCK_DONE + The bit is used to indicate unlock/lock operation is finished. + 2 + 1 + read-only + + + + + DCACHE_LOCK_ADDR + ******* Description *********** + 0x20 + 0x20 + + + DCACHE_LOCK_ADDR + The bits are used to configure the start virtual address for lock operations. It should be combined with DCACHE_LOCK_SIZE_REG. + 0 + 32 + read-write + + + + + DCACHE_LOCK_SIZE + ******* Description *********** + 0x24 + 0x20 + + + DCACHE_LOCK_SIZE + The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with DCACHE_LOCK_ADDR_REG. + 0 + 16 + read-write + + + + + DCACHE_SYNC_CTRL + ******* Description *********** + 0x28 + 0x20 + 0x00000001 + + + DCACHE_INVALIDATE_ENA + The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done. + 0 + 1 + read-write + + + DCACHE_WRITEBACK_ENA + The bit is used to enable writeback operation. It will be cleared by hardware after writeback operation done. + 1 + 1 + read-write + + + DCACHE_CLEAN_ENA + The bit is used to enable clean operation. It will be cleared by hardware after clean operation done. + 2 + 1 + read-write + + + DCACHE_SYNC_DONE + The bit is used to indicate clean/writeback/invalidate operation is finished. + 3 + 1 + read-only + + + + + DCACHE_SYNC_ADDR + ******* Description *********** + 0x2C + 0x20 + + + DCACHE_SYNC_ADDR + The bits are used to configure the start virtual address for clean operations. It should be combined with DCACHE_SYNC_SIZE_REG. + 0 + 32 + read-write + + + + + DCACHE_SYNC_SIZE + ******* Description *********** + 0x30 + 0x20 + + + DCACHE_SYNC_SIZE + The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with DCACHE_SYNC_ADDR_REG. + 0 + 23 + read-write + + + + + DCACHE_OCCUPY_CTRL + ******* Description *********** + 0x34 + 0x20 + 0x00000002 + + + DCACHE_OCCUPY_ENA + The bit is used to enable occupy operation. It will be cleared by hardware after issuing Auot-Invalidate Operation. + 0 + 1 + read-write + + + DCACHE_OCCUPY_DONE + The bit is used to indicate occupy operation is finished. + 1 + 1 + read-only + + + + + DCACHE_OCCUPY_ADDR + ******* Description *********** + 0x38 + 0x20 + + + DCACHE_OCCUPY_ADDR + The bits are used to configure the start virtual address for occupy operation. It should be combined with DCACHE_OCCUPY_SIZE_REG. + 0 + 32 + read-write + + + + + DCACHE_OCCUPY_SIZE + ******* Description *********** + 0x3C + 0x20 + + + DCACHE_OCCUPY_SIZE + The bits are used to configure the length for occupy operation. The bits are the counts of cache block. It should be combined with DCACHE_OCCUPY_ADDR_REG. + 0 + 16 + read-write + + + + + DCACHE_PRELOAD_CTRL + ******* Description *********** + 0x40 + 0x20 + 0x00000002 + + + DCACHE_PRELOAD_ENA + The bit is used to enable preload operation. It will be cleared by hardware after preload operation done. + 0 + 1 + read-write + + + DCACHE_PRELOAD_DONE + The bit is used to indicate preload operation is finished. + 1 + 1 + read-only + + + DCACHE_PRELOAD_ORDER + The bit is used to configure the direction of preload operation. 1: descending, 0: ascending. + 2 + 1 + read-write + + + + + DCACHE_PRELOAD_ADDR + ******* Description *********** + 0x44 + 0x20 + + + DCACHE_PRELOAD_ADDR + The bits are used to configure the start virtual address for preload operation. It should be combined with DCACHE_PRELOAD_SIZE_REG. + 0 + 32 + read-write + + + + + DCACHE_PRELOAD_SIZE + ******* Description *********** + 0x48 + 0x20 + + + DCACHE_PRELOAD_SIZE + The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with DCACHE_PRELOAD_ADDR_REG.. + 0 + 16 + read-write + + + + + DCACHE_AUTOLOAD_CTRL + ******* Description *********** + 0x4C + 0x20 + 0x00000008 + + + DCACHE_AUTOLOAD_SCT0_ENA + The bits are used to enable the first section for autoload operation. + 0 + 1 + read-write + + + DCACHE_AUTOLOAD_SCT1_ENA + The bits are used to enable the second section for autoload operation. + 1 + 1 + read-write + + + DCACHE_AUTOLOAD_ENA + The bit is used to enable and disable autoload operation. It is combined with dcache_autoload_done. 1: enable, 0: disable. + 2 + 1 + read-write + + + DCACHE_AUTOLOAD_DONE + The bit is used to indicate autoload operation is finished. + 3 + 1 + read-only + + + DCACHE_AUTOLOAD_ORDER + The bits are used to configure the direction of autoload. 1: descending, 0: ascending. + 4 + 1 + read-write + + + DCACHE_AUTOLOAD_RQST + The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit. + 5 + 2 + read-write + + + DCACHE_AUTOLOAD_SIZE + The bits are used to configure the numbers of the cache block for the issuing autoload operation. + 7 + 2 + read-write + + + DCACHE_AUTOLOAD_BUFFER_CLEAR + The bit is used to clear autoload buffer in dcache. + 9 + 1 + read-write + + + + + DCACHE_AUTOLOAD_SCT0_ADDR + ******* Description *********** + 0x50 + 0x20 + + + DCACHE_AUTOLOAD_SCT0_ADDR + The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with dcache_autoload_sct0_ena. + 0 + 32 + read-write + + + + + DCACHE_AUTOLOAD_SCT0_SIZE + ******* Description *********** + 0x54 + 0x20 + + + DCACHE_AUTOLOAD_SCT0_SIZE + The bits are used to configure the length of the first section for autoload operation. It should be combined with dcache_autoload_sct0_ena. + 0 + 27 + read-write + + + + + DCACHE_AUTOLOAD_SCT1_ADDR + ******* Description *********** + 0x58 + 0x20 + + + DCACHE_AUTOLOAD_SCT1_ADDR + The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with dcache_autoload_sct1_ena. + 0 + 32 + read-write + + + + + DCACHE_AUTOLOAD_SCT1_SIZE + ******* Description *********** + 0x5C + 0x20 + + + DCACHE_AUTOLOAD_SCT1_SIZE + The bits are used to configure the length of the second section for autoload operation. It should be combined with dcache_autoload_sct1_ena. + 0 + 27 + read-write + + + + + ICACHE_CTRL + ******* Description *********** + 0x60 + 0x20 + + + ICACHE_ENABLE + The bit is used to activate the data cache. 0: disable, 1: enable + 0 + 1 + read-write + + + ICACHE_WAY_MODE + The bit is used to configure cache way mode.0: 4-way, 1: 8-way + 1 + 1 + read-write + + + ICACHE_SIZE_MODE + The bit is used to configure cache memory size.0: 16KB, 1: 32KB + 2 + 1 + read-write + + + ICACHE_BLOCKSIZE_MODE + The bit is used to configure cache block size.0: 16 bytes, 1: 32 bytes + 3 + 1 + read-write + + + + + ICACHE_CTRL1 + ******* Description *********** + 0x64 + 0x20 + 0x00000003 + + + ICACHE_SHUT_CORE0_BUS + The bit is used to disable core0 ibus, 0: enable, 1: disable + 0 + 1 + read-write + + + ICACHE_SHUT_CORE1_BUS + The bit is used to disable core1 ibus, 0: enable, 1: disable + 1 + 1 + read-write + + + + + ICACHE_TAG_POWER_CTRL + ******* Description *********** + 0x68 + 0x20 + 0x00000005 + + + ICACHE_TAG_MEM_FORCE_ON + The bit is used to close clock gating of icache tag memory. 1: close gating, 0: open clock gating. + 0 + 1 + read-write + + + ICACHE_TAG_MEM_FORCE_PD + The bit is used to power icache tag memory down, 0: follow rtc_lslp, 1: power down + 1 + 1 + read-write + + + ICACHE_TAG_MEM_FORCE_PU + The bit is used to power icache tag memory up, 0: follow rtc_lslp, 1: power up + 2 + 1 + read-write + + + + + ICACHE_PRELOCK_CTRL + ******* Description *********** + 0x6C + 0x20 + + + ICACHE_PRELOCK_SCT0_EN + The bit is used to enable the first section of prelock function. + 0 + 1 + read-write + + + ICACHE_PRELOCK_SCT1_EN + The bit is used to enable the second section of prelock function. + 1 + 1 + read-write + + + + + ICACHE_PRELOCK_SCT0_ADDR + ******* Description *********** + 0x70 + 0x20 + + + ICACHE_PRELOCK_SCT0_ADDR + The bits are used to configure the first start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT0_SIZE_REG + 0 + 32 + read-write + + + + + ICACHE_PRELOCK_SCT1_ADDR + ******* Description *********** + 0x74 + 0x20 + + + ICACHE_PRELOCK_SCT1_ADDR + The bits are used to configure the second start virtual address of data prelock, which is combined with ICACHE_PRELOCK_SCT1_SIZE_REG + 0 + 32 + read-write + + + + + ICACHE_PRELOCK_SCT_SIZE + ******* Description *********** + 0x78 + 0x20 + + + ICACHE_PRELOCK_SCT1_SIZE + The bits are used to configure the second length of data locking, which is combined with ICACHE_PRELOCK_SCT1_ADDR_REG + 0 + 16 + read-write + + + ICACHE_PRELOCK_SCT0_SIZE + The bits are used to configure the first length of data locking, which is combined with ICACHE_PRELOCK_SCT0_ADDR_REG + 16 + 16 + read-write + + + + + ICACHE_LOCK_CTRL + ******* Description *********** + 0x7C + 0x20 + 0x00000004 + + + ICACHE_LOCK_ENA + The bit is used to enable lock operation. It will be cleared by hardware after lock operation done. + 0 + 1 + read-write + + + ICACHE_UNLOCK_ENA + The bit is used to enable unlock operation. It will be cleared by hardware after unlock operation done. + 1 + 1 + read-write + + + ICACHE_LOCK_DONE + The bit is used to indicate unlock/lock operation is finished. + 2 + 1 + read-only + + + + + ICACHE_LOCK_ADDR + ******* Description *********** + 0x80 + 0x20 + + + ICACHE_LOCK_ADDR + The bits are used to configure the start virtual address for lock operations. It should be combined with ICACHE_LOCK_SIZE_REG. + 0 + 32 + read-write + + + + + ICACHE_LOCK_SIZE + ******* Description *********** + 0x84 + 0x20 + + + ICACHE_LOCK_SIZE + The bits are used to configure the length for lock operations. The bits are the counts of cache block. It should be combined with ICACHE_LOCK_ADDR_REG. + 0 + 16 + read-write + + + + + ICACHE_SYNC_CTRL + ******* Description *********** + 0x88 + 0x20 + 0x00000001 + + + ICACHE_INVALIDATE_ENA + The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done. + 0 + 1 + read-write + + + ICACHE_SYNC_DONE + The bit is used to indicate invalidate operation is finished. + 1 + 1 + read-only + + + + + ICACHE_SYNC_ADDR + ******* Description *********** + 0x8C + 0x20 + + + ICACHE_SYNC_ADDR + The bits are used to configure the start virtual address for clean operations. It should be combined with ICACHE_SYNC_SIZE_REG. + 0 + 32 + read-write + + + + + ICACHE_SYNC_SIZE + ******* Description *********** + 0x90 + 0x20 + + + ICACHE_SYNC_SIZE + The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with ICACHE_SYNC_ADDR_REG. + 0 + 23 + read-write + + + + + ICACHE_PRELOAD_CTRL + ******* Description *********** + 0x94 + 0x20 + 0x00000002 + + + ICACHE_PRELOAD_ENA + The bit is used to enable preload operation. It will be cleared by hardware after preload operation done. + 0 + 1 + read-write + + + ICACHE_PRELOAD_DONE + The bit is used to indicate preload operation is finished. + 1 + 1 + read-only + + + ICACHE_PRELOAD_ORDER + The bit is used to configure the direction of preload operation. 1: descending, 0: ascending. + 2 + 1 + read-write + + + + + ICACHE_PRELOAD_ADDR + ******* Description *********** + 0x98 + 0x20 + + + ICACHE_PRELOAD_ADDR + The bits are used to configure the start virtual address for preload operation. It should be combined with ICACHE_PRELOAD_SIZE_REG. + 0 + 32 + read-write + + + + + ICACHE_PRELOAD_SIZE + ******* Description *********** + 0x9C + 0x20 + + + ICACHE_PRELOAD_SIZE + The bits are used to configure the length for preload operation. The bits are the counts of cache block. It should be combined with ICACHE_PRELOAD_ADDR_REG.. + 0 + 16 + read-write + + + + + ICACHE_AUTOLOAD_CTRL + ******* Description *********** + 0xA0 + 0x20 + 0x00000008 + + + ICACHE_AUTOLOAD_SCT0_ENA + The bits are used to enable the first section for autoload operation. + 0 + 1 + read-write + + + ICACHE_AUTOLOAD_SCT1_ENA + The bits are used to enable the second section for autoload operation. + 1 + 1 + read-write + + + ICACHE_AUTOLOAD_ENA + The bit is used to enable and disable autoload operation. It is combined with icache_autoload_done. 1: enable, 0: disable. + 2 + 1 + read-write + + + ICACHE_AUTOLOAD_DONE + The bit is used to indicate autoload operation is finished. + 3 + 1 + read-only + + + ICACHE_AUTOLOAD_ORDER + The bits are used to configure the direction of autoload. 1: descending, 0: ascending. + 4 + 1 + read-write + + + ICACHE_AUTOLOAD_RQST + The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit. + 5 + 2 + read-write + + + ICACHE_AUTOLOAD_SIZE + The bits are used to configure the numbers of the cache block for the issuing autoload operation. + 7 + 2 + read-write + + + ICACHE_AUTOLOAD_BUFFER_CLEAR + The bit is used to clear autoload buffer in icache. + 9 + 1 + read-write + + + + + ICACHE_AUTOLOAD_SCT0_ADDR + ******* Description *********** + 0xA4 + 0x20 + + + ICACHE_AUTOLOAD_SCT0_ADDR + The bits are used to configure the start virtual address of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena. + 0 + 32 + read-write + + + + + ICACHE_AUTOLOAD_SCT0_SIZE + ******* Description *********** + 0xA8 + 0x20 + + + ICACHE_AUTOLOAD_SCT0_SIZE + The bits are used to configure the length of the first section for autoload operation. It should be combined with icache_autoload_sct0_ena. + 0 + 27 + read-write + + + + + ICACHE_AUTOLOAD_SCT1_ADDR + ******* Description *********** + 0xAC + 0x20 + + + ICACHE_AUTOLOAD_SCT1_ADDR + The bits are used to configure the start virtual address of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena. + 0 + 32 + read-write + + + + + ICACHE_AUTOLOAD_SCT1_SIZE + ******* Description *********** + 0xB0 + 0x20 + + + ICACHE_AUTOLOAD_SCT1_SIZE + The bits are used to configure the length of the second section for autoload operation. It should be combined with icache_autoload_sct1_ena. + 0 + 27 + read-write + + + + + IBUS_TO_FLASH_START_VADDR + ******* Description *********** + 0xB4 + 0x20 + 0x44000000 + + + IBUS_TO_FLASH_START_VADDR + The bits are used to configure the start virtual address of ibus to access flash. The register is used to give constraints to ibus access counter. + 0 + 32 + read-write + + + + + IBUS_TO_FLASH_END_VADDR + ******* Description *********** + 0xB8 + 0x20 + 0x47FFFFFF + + + IBUS_TO_FLASH_END_VADDR + The bits are used to configure the end virtual address of ibus to access flash. The register is used to give constraints to ibus access counter. + 0 + 32 + read-write + + + + + DBUS_TO_FLASH_START_VADDR + ******* Description *********** + 0xBC + 0x20 + + + DBUS_TO_FLASH_START_VADDR + The bits are used to configure the start virtual address of dbus to access flash. The register is used to give constraints to dbus access counter. + 0 + 32 + read-write + + + + + DBUS_TO_FLASH_END_VADDR + ******* Description *********** + 0xC0 + 0x20 + + + DBUS_TO_FLASH_END_VADDR + The bits are used to configure the end virtual address of dbus to access flash. The register is used to give constraints to dbus access counter. + 0 + 32 + read-write + + + + + CACHE_ACS_CNT_CLR + ******* Description *********** + 0xC4 + 0x20 + + + DCACHE_ACS_CNT_CLR + The bit is used to clear dcache counter. + 0 + 1 + write-only + + + ICACHE_ACS_CNT_CLR + The bit is used to clear icache counter. + 1 + 1 + write-only + + + + + IBUS_ACS_MISS_CNT + ******* Description *********** + 0xC8 + 0x20 + + + IBUS_ACS_MISS_CNT + The bits are used to count the number of the cache miss caused by ibus access flash/spiram. + 0 + 32 + read-only + + + + + IBUS_ACS_CNT + ******* Description *********** + 0xCC + 0x20 + + + IBUS_ACS_CNT + The bits are used to count the number of ibus access flash/spiram through icache. + 0 + 32 + read-only + + + + + DBUS_ACS_FLASH_MISS_CNT + ******* Description *********** + 0xD0 + 0x20 + + + DBUS_ACS_FLASH_MISS_CNT + The bits are used to count the number of the cache miss caused by dbus access flash. + 0 + 32 + read-only + + + + + DBUS_ACS_SPIRAM_MISS_CNT + ******* Description *********** + 0xD4 + 0x20 + + + DBUS_ACS_SPIRAM_MISS_CNT + The bits are used to count the number of the cache miss caused by dbus access spiram. + 0 + 32 + read-only + + + + + DBUS_ACS_CNT + ******* Description *********** + 0xD8 + 0x20 + + + DBUS_ACS_CNT + The bits are used to count the number of dbus access flash/spiram through dcache. + 0 + 32 + read-only + + + + + CACHE_ILG_INT_ENA + ******* Description *********** + 0xDC + 0x20 + + + ICACHE_SYNC_OP_FAULT_INT_ENA + The bit is used to enable interrupt by sync configurations fault. + 0 + 1 + read-write + + + ICACHE_PRELOAD_OP_FAULT_INT_ENA + The bit is used to enable interrupt by preload configurations fault. + 1 + 1 + read-write + + + DCACHE_SYNC_OP_FAULT_INT_ENA + The bit is used to enable interrupt by sync configurations fault. + 2 + 1 + read-write + + + DCACHE_PRELOAD_OP_FAULT_INT_ENA + The bit is used to enable interrupt by preload configurations fault. + 3 + 1 + read-write + + + DCACHE_WRITE_FLASH_INT_ENA + The bit is used to enable interrupt by dcache trying to write flash. + 4 + 1 + read-write + + + MMU_ENTRY_FAULT_INT_ENA + The bit is used to enable interrupt by mmu entry fault. + 5 + 1 + read-write + + + DCACHE_OCCUPY_EXC_INT_ENA + The bit is used to enable interrupt by dcache trying to replace a line whose blocks all have been occupied by occupy-mode. + 6 + 1 + read-write + + + IBUS_CNT_OVF_INT_ENA + The bit is used to enable interrupt by ibus counter overflow. + 7 + 1 + read-write + + + DBUS_CNT_OVF_INT_ENA + The bit is used to enable interrupt by dbus counter overflow. + 8 + 1 + read-write + + + + + CACHE_ILG_INT_CLR + ******* Description *********** + 0xE0 + 0x20 + + + ICACHE_SYNC_OP_FAULT_INT_CLR + The bit is used to clear interrupt by sync configurations fault. + 0 + 1 + write-only + + + ICACHE_PRELOAD_OP_FAULT_INT_CLR + The bit is used to clear interrupt by preload configurations fault. + 1 + 1 + write-only + + + DCACHE_SYNC_OP_FAULT_INT_CLR + The bit is used to clear interrupt by sync configurations fault. + 2 + 1 + write-only + + + DCACHE_PRELOAD_OP_FAULT_INT_CLR + The bit is used to clear interrupt by preload configurations fault. + 3 + 1 + write-only + + + DCACHE_WRITE_FLASH_INT_CLR + The bit is used to clear interrupt by dcache trying to write flash. + 4 + 1 + write-only + + + MMU_ENTRY_FAULT_INT_CLR + The bit is used to clear interrupt by mmu entry fault. + 5 + 1 + write-only + + + DCACHE_OCCUPY_EXC_INT_CLR + The bit is used to clear interrupt by dcache trying to replace a line whose blocks all have been occupied by occupy-mode. + 6 + 1 + write-only + + + IBUS_CNT_OVF_INT_CLR + The bit is used to clear interrupt by ibus counter overflow. + 7 + 1 + write-only + + + DBUS_CNT_OVF_INT_CLR + The bit is used to clear interrupt by dbus counter overflow. + 8 + 1 + write-only + + + + + CACHE_ILG_INT_ST + ******* Description *********** + 0xE4 + 0x20 + + + ICACHE_SYNC_OP_FAULT_ST + The bit is used to indicate interrupt by sync configurations fault. + 0 + 1 + read-only + + + ICACHE_PRELOAD_OP_FAULT_ST + The bit is used to indicate interrupt by preload configurations fault. + 1 + 1 + read-only + + + DCACHE_SYNC_OP_FAULT_ST + The bit is used to indicate interrupt by sync configurations fault. + 2 + 1 + read-only + + + DCACHE_PRELOAD_OP_FAULT_ST + The bit is used to indicate interrupt by preload configurations fault. + 3 + 1 + read-only + + + DCACHE_WRITE_FLASH_ST + The bit is used to indicate interrupt by dcache trying to write flash. + 4 + 1 + read-only + + + MMU_ENTRY_FAULT_ST + The bit is used to indicate interrupt by mmu entry fault. + 5 + 1 + read-only + + + DCACHE_OCCUPY_EXC_ST + The bit is used to indicate interrupt by dcache trying to replace a line whose blocks all have been occupied by occupy-mode. + 6 + 1 + read-only + + + IBUS_ACS_CNT_OVF_ST + The bit is used to indicate interrupt by ibus access flash/spiram counter overflow. + 7 + 1 + read-only + + + IBUS_ACS_MISS_CNT_OVF_ST + The bit is used to indicate interrupt by ibus access flash/spiram miss counter overflow. + 8 + 1 + read-only + + + DBUS_ACS_CNT_OVF_ST + The bit is used to indicate interrupt by dbus access flash/spiram counter overflow. + 9 + 1 + read-only + + + DBUS_ACS_FLASH_MISS_CNT_OVF_ST + The bit is used to indicate interrupt by dbus access flash miss counter overflow. + 10 + 1 + read-only + + + DBUS_ACS_SPIRAM_MISS_CNT_OVF_ST + The bit is used to indicate interrupt by dbus access spiram miss counter overflow. + 11 + 1 + read-only + + + + + CORE0_ACS_CACHE_INT_ENA + ******* Description *********** + 0xE8 + 0x20 + + + CORE0_IBUS_ACS_MSK_IC_INT_ENA + The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access. + 0 + 1 + read-write + + + CORE0_IBUS_WR_IC_INT_ENA + The bit is used to enable interrupt by ibus trying to write icache + 1 + 1 + read-write + + + CORE0_IBUS_REJECT_INT_ENA + The bit is used to enable interrupt by authentication fail. + 2 + 1 + read-write + + + CORE0_DBUS_ACS_MSK_DC_INT_ENA + The bit is used to enable interrupt by cpu access dcache while the corresponding dbus is disabled which include speculative access. + 3 + 1 + read-write + + + CORE0_DBUS_REJECT_INT_ENA + The bit is used to enable interrupt by authentication fail. + 4 + 1 + read-write + + + + + CORE0_ACS_CACHE_INT_CLR + ******* Description *********** + 0xEC + 0x20 + + + CORE0_IBUS_ACS_MSK_IC_INT_CLR + The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access. + 0 + 1 + write-only + + + CORE0_IBUS_WR_IC_INT_CLR + The bit is used to clear interrupt by ibus trying to write icache + 1 + 1 + write-only + + + CORE0_IBUS_REJECT_INT_CLR + The bit is used to clear interrupt by authentication fail. + 2 + 1 + write-only + + + CORE0_DBUS_ACS_MSK_DC_INT_CLR + The bit is used to clear interrupt by cpu access dcache while the corresponding dbus is disabled or dcache is disabled which include speculative access. + 3 + 1 + write-only + + + CORE0_DBUS_REJECT_INT_CLR + The bit is used to clear interrupt by authentication fail. + 4 + 1 + write-only + + + + + CORE0_ACS_CACHE_INT_ST + ******* Description *********** + 0xF0 + 0x20 + + + CORE0_IBUS_ACS_MSK_ICACHE_ST + The bit is used to indicate interrupt by cpu access icache while the core0_ibus is disabled or icache is disabled which include speculative access. + 0 + 1 + read-only + + + CORE0_IBUS_WR_ICACHE_ST + The bit is used to indicate interrupt by ibus trying to write icache + 1 + 1 + read-only + + + CORE0_IBUS_REJECT_ST + The bit is used to indicate interrupt by authentication fail. + 2 + 1 + read-only + + + CORE0_DBUS_ACS_MSK_DCACHE_ST + The bit is used to indicate interrupt by cpu access dcache while the core0_dbus is disabled or dcache is disabled which include speculative access. + 3 + 1 + read-only + + + CORE0_DBUS_REJECT_ST + The bit is used to indicate interrupt by authentication fail. + 4 + 1 + read-only + + + + + CORE1_ACS_CACHE_INT_ENA + ******* Description *********** + 0xF4 + 0x20 + + + CORE1_IBUS_ACS_MSK_IC_INT_ENA + The bit is used to enable interrupt by cpu access icache while the corresponding ibus is disabled which include speculative access. + 0 + 1 + read-write + + + CORE1_IBUS_WR_IC_INT_ENA + The bit is used to enable interrupt by ibus trying to write icache + 1 + 1 + read-write + + + CORE1_IBUS_REJECT_INT_ENA + The bit is used to enable interrupt by authentication fail. + 2 + 1 + read-write + + + CORE1_DBUS_ACS_MSK_DC_INT_ENA + The bit is used to enable interrupt by cpu access dcache while the corresponding dbus is disabled which include speculative access. + 3 + 1 + read-write + + + CORE1_DBUS_REJECT_INT_ENA + The bit is used to enable interrupt by authentication fail. + 4 + 1 + read-write + + + + + CORE1_ACS_CACHE_INT_CLR + ******* Description *********** + 0xF8 + 0x20 + + + CORE1_IBUS_ACS_MSK_IC_INT_CLR + The bit is used to clear interrupt by cpu access icache while the corresponding ibus is disabled or icache is disabled which include speculative access. + 0 + 1 + write-only + + + CORE1_IBUS_WR_IC_INT_CLR + The bit is used to clear interrupt by ibus trying to write icache + 1 + 1 + write-only + + + CORE1_IBUS_REJECT_INT_CLR + The bit is used to clear interrupt by authentication fail. + 2 + 1 + write-only + + + CORE1_DBUS_ACS_MSK_DC_INT_CLR + The bit is used to clear interrupt by cpu access dcache while the corresponding dbus is disabled or dcache is disabled which include speculative access. + 3 + 1 + write-only + + + CORE1_DBUS_REJECT_INT_CLR + The bit is used to clear interrupt by authentication fail. + 4 + 1 + write-only + + + + + CORE1_ACS_CACHE_INT_ST + ******* Description *********** + 0xFC + 0x20 + + + CORE1_IBUS_ACS_MSK_ICACHE_ST + The bit is used to indicate interrupt by cpu access icache while the core1_ibus is disabled or icache is disabled which include speculative access. + 0 + 1 + read-only + + + CORE1_IBUS_WR_ICACHE_ST + The bit is used to indicate interrupt by ibus trying to write icache + 1 + 1 + read-only + + + CORE1_IBUS_REJECT_ST + The bit is used to indicate interrupt by authentication fail. + 2 + 1 + read-only + + + CORE1_DBUS_ACS_MSK_DCACHE_ST + The bit is used to indicate interrupt by cpu access dcache while the core1_dbus is disabled or dcache is disabled which include speculative access. + 3 + 1 + read-only + + + CORE1_DBUS_REJECT_ST + The bit is used to indicate interrupt by authentication fail. + 4 + 1 + read-only + + + + + CORE0_DBUS_REJECT_ST + ******* Description *********** + 0x100 + 0x20 + + + CORE0_DBUS_TAG_ATTR + The bits are used to indicate the attribute of data from external memory when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able. + 0 + 3 + read-only + + + CORE0_DBUS_ATTR + The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able. + 3 + 3 + read-only + + + CORE0_DBUS_WORLD + The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1 + 6 + 1 + read-only + + + + + CORE0_DBUS_REJECT_VADDR + ******* Description *********** + 0x104 + 0x20 + 0xFFFFFFFF + + + CORE0_DBUS_VADDR + The bits are used to indicate the virtual address of CPU access dbus when authentication fail. + 0 + 32 + read-only + + + + + CORE0_IBUS_REJECT_ST + ******* Description *********** + 0x108 + 0x20 + + + CORE0_IBUS_TAG_ATTR + The bits are used to indicate the attribute of data from external memory when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able. + 0 + 3 + read-only + + + CORE0_IBUS_ATTR + The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able + 3 + 3 + read-only + + + CORE0_IBUS_WORLD + The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1 + 6 + 1 + read-only + + + + + CORE0_IBUS_REJECT_VADDR + ******* Description *********** + 0x10C + 0x20 + 0xFFFFFFFF + + + CORE0_IBUS_VADDR + The bits are used to indicate the virtual address of CPU access ibus when authentication fail. + 0 + 32 + read-only + + + + + CORE1_DBUS_REJECT_ST + ******* Description *********** + 0x110 + 0x20 + + + CORE1_DBUS_TAG_ATTR + The bits are used to indicate the attribute of data from external memory when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able. + 0 + 3 + read-only + + + CORE1_DBUS_ATTR + The bits are used to indicate the attribute of CPU access dbus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able. + 3 + 3 + read-only + + + CORE1_DBUS_WORLD + The bit is used to indicate the world of CPU access dbus when authentication fail. 0: WORLD0, 1: WORLD1 + 6 + 1 + read-only + + + + + CORE1_DBUS_REJECT_VADDR + ******* Description *********** + 0x114 + 0x20 + 0xFFFFFFFF + + + CORE1_DBUS_VADDR + The bits are used to indicate the virtual address of CPU access dbus when authentication fail. + 0 + 32 + read-only + + + + + CORE1_IBUS_REJECT_ST + ******* Description *********** + 0x118 + 0x20 + + + CORE1_IBUS_TAG_ATTR + The bits are used to indicate the attribute of data from external memory when authentication fail. 0: invalidate, 1: execute-able, 2: read-able, 4: write-able. + 0 + 3 + read-only + + + CORE1_IBUS_ATTR + The bits are used to indicate the attribute of CPU access ibus when authentication fail. 0: invalidate, 1: execute-able, 2: read-able + 3 + 3 + read-only + + + CORE1_IBUS_WORLD + The bit is used to indicate the world of CPU access ibus when authentication fail. 0: WORLD0, 1: WORLD1 + 6 + 1 + read-only + + + + + CORE1_IBUS_REJECT_VADDR + ******* Description *********** + 0x11C + 0x20 + 0xFFFFFFFF + + + CORE1_IBUS_VADDR + The bits are used to indicate the virtual address of CPU access ibus when authentication fail. + 0 + 32 + read-only + + + + + CACHE_MMU_FAULT_CONTENT + ******* Description *********** + 0x120 + 0x20 + + + CACHE_MMU_FAULT_CONTENT + The bits are used to indicate the content of mmu entry which cause mmu fault.. + 0 + 16 + read-only + + + CACHE_MMU_FAULT_CODE + The right-most 3 bits are used to indicate the operations which cause mmu fault occurrence. 0: default, 1: cpu miss, 2: preload miss, 3: writeback, 4: cpu miss evict recovery address, 5: load miss evict recovery address, 6: external dma tx, 7: external dma rx. The most significant bit is used to indicate this operation occurs in which one icache. + 16 + 4 + read-only + + + + + CACHE_MMU_FAULT_VADDR + ******* Description *********** + 0x124 + 0x20 + + + CACHE_MMU_FAULT_VADDR + The bits are used to indicate the virtual address which cause mmu fault.. + 0 + 32 + read-only + + + + + CACHE_WRAP_AROUND_CTRL + ******* Description *********** + 0x128 + 0x20 + + + CACHE_FLASH_WRAP_AROUND + The bit is used to enable wrap around mode when read data from flash. + 0 + 1 + read-write + + + CACHE_SRAM_RD_WRAP_AROUND + The bit is used to enable wrap around mode when read data from spiram. + 1 + 1 + read-write + + + + + CACHE_MMU_POWER_CTRL + ******* Description *********** + 0x12C + 0x20 + 0x00000005 + + + CACHE_MMU_MEM_FORCE_ON + The bit is used to enable clock gating to save power when access mmu memory, 0: enable, 1: disable + 0 + 1 + read-write + + + CACHE_MMU_MEM_FORCE_PD + The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power down + 1 + 1 + read-write + + + CACHE_MMU_MEM_FORCE_PU + The bit is used to power mmu memory down, 0: follow_rtc_lslp_pd, 1: power up + 2 + 1 + read-write + + + + + CACHE_STATE + ******* Description *********** + 0x130 + 0x20 + + + ICACHE_STATE + The bit is used to indicate whether icache main fsm is in idle state or not. 1: in idle state, 0: not in idle state + 0 + 12 + read-only + + + DCACHE_STATE + The bit is used to indicate whether dcache main fsm is in idle state or not. 1: in idle state, 0: not in idle state + 12 + 12 + read-only + + + + + CACHE_ENCRYPT_DECRYPT_RECORD_DISABLE + ******* Description *********** + 0x134 + 0x20 + + + RECORD_DISABLE_DB_ENCRYPT + Reserved + 0 + 1 + read-write + + + RECORD_DISABLE_G0CB_DECRYPT + Reserved + 1 + 1 + read-write + + + + + CACHE_ENCRYPT_DECRYPT_CLK_FORCE_ON + ******* Description *********** + 0x138 + 0x20 + 0x00000007 + + + CLK_FORCE_ON_MANUAL_CRYPT + The bit is used to close clock gating of manual crypt clock. 1: close gating, 0: open clock gating. + 0 + 1 + read-write + + + CLK_FORCE_ON_AUTO_CRYPT + The bit is used to close clock gating of automatic crypt clock. 1: close gating, 0: open clock gating. + 1 + 1 + read-write + + + CLK_FORCE_ON_CRYPT + The bit is used to close clock gating of external memory encrypt and decrypt clock. 1: close gating, 0: open clock gating. + 2 + 1 + read-write + + + + + CACHE_BRIDGE_ARBITER_CTRL + ******* Description *********** + 0x13C + 0x20 + + + ALLOC_WB_HOLD_ARBITER + Reserved + 0 + 1 + read-write + + + + + CACHE_PRELOAD_INT_CTRL + ******* Description *********** + 0x140 + 0x20 + + + ICACHE_PRELOAD_INT_ST + The bit is used to indicate the interrupt by icache pre-load done. + 0 + 1 + read-only + + + ICACHE_PRELOAD_INT_ENA + The bit is used to enable the interrupt by icache pre-load done. + 1 + 1 + read-write + + + ICACHE_PRELOAD_INT_CLR + The bit is used to clear the interrupt by icache pre-load done. + 2 + 1 + write-only + + + DCACHE_PRELOAD_INT_ST + The bit is used to indicate the interrupt by dcache pre-load done. + 3 + 1 + read-only + + + DCACHE_PRELOAD_INT_ENA + The bit is used to enable the interrupt by dcache pre-load done. + 4 + 1 + read-write + + + DCACHE_PRELOAD_INT_CLR + The bit is used to clear the interrupt by dcache pre-load done. + 5 + 1 + write-only + + + + + CACHE_SYNC_INT_CTRL + ******* Description *********** + 0x144 + 0x20 + + + ICACHE_SYNC_INT_ST + The bit is used to indicate the interrupt by icache sync done. + 0 + 1 + read-only + + + ICACHE_SYNC_INT_ENA + The bit is used to enable the interrupt by icache sync done. + 1 + 1 + read-write + + + ICACHE_SYNC_INT_CLR + The bit is used to clear the interrupt by icache sync done. + 2 + 1 + write-only + + + DCACHE_SYNC_INT_ST + The bit is used to indicate the interrupt by dcache sync done. + 3 + 1 + read-only + + + DCACHE_SYNC_INT_ENA + The bit is used to enable the interrupt by dcache sync done. + 4 + 1 + read-write + + + DCACHE_SYNC_INT_CLR + The bit is used to clear the interrupt by dcache sync done. + 5 + 1 + write-only + + + + + CACHE_MMU_OWNER + ******* Description *********** + 0x148 + 0x20 + + + CACHE_MMU_OWNER + The bits are used to specify the owner of MMU.bit0: icache, bit1: dcache, bit2: dma, bit3: reserved. + 0 + 24 + read-write + + + + + CACHE_CONF_MISC + ******* Description *********** + 0x14C + 0x20 + 0x00000007 + + + CACHE_IGNORE_PRELOAD_MMU_ENTRY_FAULT + The bit is used to disable checking mmu entry fault by preload operation. + 0 + 1 + read-write + + + CACHE_IGNORE_SYNC_MMU_ENTRY_FAULT + The bit is used to disable checking mmu entry fault by sync operation. + 1 + 1 + read-write + + + CACHE_TRACE_ENA + The bit is used to enable cache trace function. + 2 + 1 + read-write + + + + + DCACHE_FREEZE + ******* Description *********** + 0x150 + 0x20 + 0x00000004 + + + ENA + The bit is used to enable dcache freeze mode + 0 + 1 + read-write + + + MODE + The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert hit if CPU miss + 1 + 1 + read-write + + + DONE + The bit is used to indicate dcache freeze success + 2 + 1 + read-only + + + + + ICACHE_FREEZE + ******* Description *********** + 0x154 + 0x20 + 0x00000004 + + + ENA + The bit is used to enable icache freeze mode + 0 + 1 + read-write + + + MODE + The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert hit if CPU miss + 1 + 1 + read-write + + + DONE + The bit is used to indicate icache freeze success + 2 + 1 + read-only + + + + + ICACHE_ATOMIC_OPERATE_ENA + ******* Description *********** + 0x158 + 0x20 + 0x00000001 + + + ICACHE_ATOMIC_OPERATE_ENA + The bit is used to activate icache atomic operation protection. In this case, sync/lock operation can not interrupt miss-work. This feature does not work during invalidateAll operation. + 0 + 1 + read-write + + + + + DCACHE_ATOMIC_OPERATE_ENA + ******* Description *********** + 0x15C + 0x20 + 0x00000001 + + + DCACHE_ATOMIC_OPERATE_ENA + The bit is used to activate dcache atomic operation protection. In this case, sync/lock/occupy operation can not interrupt miss-work. This feature does not work during invalidateAll operation. + 0 + 1 + read-write + + + + + CACHE_REQUEST + ******* Description *********** + 0x160 + 0x20 + + + BYPASS + The bit is used to disable request recording which could cause performance issue + 0 + 1 + read-write + + + + + CLOCK_GATE + ******* Description *********** + 0x164 + 0x20 + 0x00000001 + + + CLK_EN + Reserved + 0 + 1 + read-write + + + + + CACHE_TAG_OBJECT_CTRL + ******* Description *********** + 0x180 + 0x20 + + + ICACHE_TAG_OBJECT + Set this bit to set icache tag memory as object. This bit should be onehot with the others fields inside this register. + 0 + 1 + read-write + + + DCACHE_TAG_OBJECT + Set this bit to set dcache tag memory as object. This bit should be onehot with the others fields inside this register. + 1 + 1 + read-write + + + + + CACHE_TAG_WAY_OBJECT + ******* Description *********** + 0x184 + 0x20 + + + CACHE_TAG_WAY_OBJECT + Set this bits to select which way of the tag-object will be accessed. 0: way0, 1: way1, 2: way2, 3: way3, .., 7: way7. + 0 + 3 + read-write + + + + + CACHE_VADDR + ******* Description *********** + 0x188 + 0x20 + + + CACHE_VADDR + Those bits stores the virtual address which will decide where inside the specified tag memory object will be accessed. + 0 + 32 + read-write + + + + + CACHE_TAG_CONTENT + ******* Description *********** + 0x18C + 0x20 + + + CACHE_TAG_CONTENT + This is a constant place where we can write data to or read data from the tag memory on the specified cache. + 0 + 32 + read-write + + + + + DATE + ******* Description *********** + 0x3FC + 0x20 + 0x02012310 + + + DATE + version information. + 0 + 28 + read-write + + + + + + + GPIO + General Purpose Input/Output + GPIO + 0x60004000 + + 0x0 + 0x634 + registers + + + GPIO + 16 + + + GPIO_NMI + 17 + + + GPIO_INTR_2 + 18 + + + GPIO_NMI_2 + 19 + + + + BT_SELECT + GPIO bit select register + 0x0 + 0x20 + + + BT_SEL + GPIO bit select register + 0 + 32 + read-write + + + + + OUT + GPIO output register for GPIO0-31 + 0x4 + 0x20 + + + DATA_ORIG + GPIO output register for GPIO0-31 + 0 + 32 + read-write + + + + + OUT_W1TS + GPIO output set register for GPIO0-31 + 0x8 + 0x20 + + + OUT_W1TS + GPIO output set register for GPIO0-31 + 0 + 32 + write-only + + + + + OUT_W1TC + GPIO output clear register for GPIO0-31 + 0xC + 0x20 + + + OUT_W1TC + GPIO output clear register for GPIO0-31 + 0 + 32 + write-only + + + + + OUT1 + GPIO output register for GPIO32-53 + 0x10 + 0x20 + + + DATA_ORIG + GPIO output register for GPIO32-53 + 0 + 22 + read-write + + + + + OUT1_W1TS + GPIO output set register for GPIO32-53 + 0x14 + 0x20 + + + OUT1_W1TS + GPIO output set register for GPIO32-53 + 0 + 22 + write-only + + + + + OUT1_W1TC + GPIO output clear register for GPIO32-53 + 0x18 + 0x20 + + + OUT1_W1TC + GPIO output clear register for GPIO32-53 + 0 + 22 + write-only + + + + + SDIO_SELECT + GPIO sdio select register + 0x1C + 0x20 + + + SDIO_SEL + GPIO sdio select register + 0 + 8 + read-write + + + + + ENABLE + GPIO output enable register for GPIO0-31 + 0x20 + 0x20 + + + DATA + GPIO output enable register for GPIO0-31 + 0 + 32 + read-write + + + + + ENABLE_W1TS + GPIO output enable set register for GPIO0-31 + 0x24 + 0x20 + + + ENABLE_W1TS + GPIO output enable set register for GPIO0-31 + 0 + 32 + write-only + + + + + ENABLE_W1TC + GPIO output enable clear register for GPIO0-31 + 0x28 + 0x20 + + + ENABLE_W1TC + GPIO output enable clear register for GPIO0-31 + 0 + 32 + write-only + + + + + ENABLE1 + GPIO output enable register for GPIO32-53 + 0x2C + 0x20 + + + DATA + GPIO output enable register for GPIO32-53 + 0 + 22 + read-write + + + + + ENABLE1_W1TS + GPIO output enable set register for GPIO32-53 + 0x30 + 0x20 + + + ENABLE1_W1TS + GPIO output enable set register for GPIO32-53 + 0 + 22 + write-only + + + + + ENABLE1_W1TC + GPIO output enable clear register for GPIO32-53 + 0x34 + 0x20 + + + ENABLE1_W1TC + GPIO output enable clear register for GPIO32-53 + 0 + 22 + write-only + + + + + STRAP + pad strapping register + 0x38 + 0x20 + + + STRAPPING + pad strapping register + 0 + 16 + read-only + + + + + IN + GPIO input register for GPIO0-31 + 0x3C + 0x20 + + + DATA_NEXT + GPIO input register for GPIO0-31 + 0 + 32 + read-write + + + + + IN1 + GPIO input register for GPIO32-53 + 0x40 + 0x20 + + + DATA_NEXT + GPIO input register for GPIO32-53 + 0 + 22 + read-write + + + + + STATUS + GPIO interrupt status register for GPIO0-31 + 0x44 + 0x20 + + + INTERRUPT + GPIO interrupt status register for GPIO0-31 + 0 + 32 + read-write + + + + + STATUS_W1TS + GPIO interrupt status set register for GPIO0-31 + 0x48 + 0x20 + + + STATUS_W1TS + GPIO interrupt status set register for GPIO0-31 + 0 + 32 + write-only + + + + + STATUS_W1TC + GPIO interrupt status clear register for GPIO0-31 + 0x4C + 0x20 + + + STATUS_W1TC + GPIO interrupt status clear register for GPIO0-31 + 0 + 32 + write-only + + + + + STATUS1 + GPIO interrupt status register for GPIO32-53 + 0x50 + 0x20 + + + INTERRUPT + GPIO interrupt status register for GPIO32-53 + 0 + 22 + read-write + + + + + STATUS1_W1TS + GPIO interrupt status set register for GPIO32-53 + 0x54 + 0x20 + + + STATUS1_W1TS + GPIO interrupt status set register for GPIO32-53 + 0 + 22 + write-only + + + + + STATUS1_W1TC + GPIO interrupt status clear register for GPIO32-53 + 0x58 + 0x20 + + + STATUS1_W1TC + GPIO interrupt status clear register for GPIO32-53 + 0 + 22 + write-only + + + + + PCPU_INT + GPIO PRO_CPU interrupt status register for GPIO0-31 + 0x5C + 0x20 + + + PROCPU_INT + GPIO PRO_CPU interrupt status register for GPIO0-31 + 0 + 32 + read-only + + + + + PCPU_NMI_INT + GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-31 + 0x60 + 0x20 + + + PROCPU_NMI_INT + GPIO PRO_CPU(not shielded) interrupt status register for GPIO0-31 + 0 + 32 + read-only + + + + + CPUSDIO_INT + GPIO CPUSDIO interrupt status register for GPIO0-31 + 0x64 + 0x20 + + + SDIO_INT + GPIO CPUSDIO interrupt status register for GPIO0-31 + 0 + 32 + read-only + + + + + PCPU_INT1 + GPIO PRO_CPU interrupt status register for GPIO32-53 + 0x68 + 0x20 + + + PROCPU_INT1 + GPIO PRO_CPU interrupt status register for GPIO32-53 + 0 + 22 + read-only + + + + + PCPU_NMI_INT1 + GPIO PRO_CPU(not shielded) interrupt status register for GPIO32-53 + 0x6C + 0x20 + + + PROCPU_NMI_INT1 + GPIO PRO_CPU(not shielded) interrupt status register for GPIO32-53 + 0 + 22 + read-only + + + + + CPUSDIO_INT1 + GPIO CPUSDIO interrupt status register for GPIO32-53 + 0x70 + 0x20 + + + SDIO_INT1 + GPIO CPUSDIO interrupt status register for GPIO32-53 + 0 + 22 + read-only + + + + + 54 + 0x4 + 0-53 + PIN%s + GPIO pin configuration register + 0x74 + 0x20 + + + SYNC2_BYPASS + set GPIO input_sync2 signal mode. 0:disable. 1:trigger at negedge. 2or3:trigger at posedge. + 0 + 2 + read-write + + + PAD_DRIVER + set this bit to select pad driver. 1:open-drain. 0:normal. + 2 + 1 + read-write + + + SYNC1_BYPASS + set GPIO input_sync1 signal mode. 0:disable. 1:trigger at negedge. 2or3:trigger at posedge. + 3 + 2 + read-write + + + INT_TYPE + set this value to choose interrupt mode. 0:disable GPIO interrupt. 1:trigger at posedge. 2:trigger at negedge. 3:trigger at any edge. 4:valid at low level. 5:valid at high level + 7 + 3 + read-write + + + WAKEUP_ENABLE + set this bit to enable GPIO wakeup.(can only wakeup CPU from Light-sleep Mode) + 10 + 1 + read-write + + + CONFIG + reserved + 11 + 2 + read-write + + + INT_ENA + set bit 13 to enable CPU interrupt. set bit 14 to enable CPU(not shielded) interrupt. + 13 + 5 + read-write + + + + + STATUS_NEXT + GPIO interrupt source register for GPIO0-31 + 0x14C + 0x20 + + + STATUS_INTERRUPT_NEXT + GPIO interrupt source register for GPIO0-31 + 0 + 32 + read-only + + + + + STATUS_NEXT1 + GPIO interrupt source register for GPIO32-53 + 0x150 + 0x20 + + + STATUS_INTERRUPT_NEXT1 + GPIO interrupt source register for GPIO32-53 + 0 + 22 + read-only + + + + + 256 + 0x4 + 0-255 + FUNC%s_IN_SEL_CFG + GPIO input function configuration register + 0x154 + 0x20 + + + IN_SEL + set this value: s=0-53: connect GPIO[s] to this port. s=0x38: set this port always high level. s=0x3C: set this port always low level. + 0 + 6 + read-write + + + IN_INV_SEL + set this bit to invert input signal. 1:invert. 0:not invert. + 6 + 1 + read-write + + + SEL + set this bit to bypass GPIO. 1:do not bypass GPIO. 0:bypass GPIO. + 7 + 1 + read-write + + + + + 54 + 0x4 + 0-53 + FUNC%s_OUT_SEL_CFG + GPIO output function select register + 0x554 + 0x20 + 0x00000100 + + + OUT_SEL + The value of the bits: 0<=s<=256. Set the value to select output signal. s=0-255: output of GPIO[n] equals input of peripheral[s]. s=256: output of GPIO[n] equals GPIO_OUT_REG[n]. + 0 + 9 + read-write + + + INV_SEL + set this bit to invert output signal.1:invert.0:not invert. + 9 + 1 + read-write + + + OEN_SEL + set this bit to select output enable signal.1:use GPIO_ENABLE_REG[n] as output enable signal.0:use peripheral output enable signal. + 10 + 1 + read-write + + + OEN_INV_SEL + set this bit to invert output enable signal.1:invert.0:not invert. + 11 + 1 + read-write + + + + + CLOCK_GATE + GPIO clock gate register + 0x62C + 0x20 + 0x00000001 + + + CLK_EN + set this bit to enable GPIO clock gate + 0 + 1 + read-write + + + + + REG_DATE + GPIO version register + 0x6FC + 0x20 + 0x01907040 + + + REG_DATE + version register + 0 + 28 + read-write + + + + + + + GPIO_SD + Sigma-Delta Modulation + GPIOSD + 0x60004F00 + + 0x0 + 0x2C + registers + + + + 8 + 0x4 + SIGMADELTA%s + Duty Cycle Configure Register of SDM%s + 0x0 + 0x20 + 0x0000FF00 + + + SD_IN + This field is used to configure the duty cycle of sigma delta modulation output. + 0 + 8 + read-write + + + SD_PRESCALE + This field is used to set a divider value to divide APB clock. + 8 + 8 + read-write + + + + + SIGMADELTA_CG + Clock Gating Configure Register + 0x20 + 0x20 + + + CLK_EN + Clock enable bit of configuration registers for sigma delta modulation. + 31 + 1 + read-write + + + + + SIGMADELTA_MISC + MISC Register + 0x24 + 0x20 + + + FUNCTION_CLK_EN + Clock enable bit of sigma delta modulation. + 30 + 1 + read-write + + + SPI_SWAP + Reserved. + 31 + 1 + read-write + + + + + SIGMADELTA_VERSION + Version Control Register + 0x28 + 0x20 + 0x01802260 + + + GPIO_SD_DATE + Version control register. + 0 + 28 + read-write + + + + + + + HMAC + HMAC (Hash-based Message Authentication Code) Accelerator + HMAC + 0x6003E000 + + 0x0 + 0xA4 + registers + + + + SET_START + Process control register 0. + 0x40 + 0x20 + + + SET_START + Start hmac operation. + 0 + 1 + write-only + + + + + SET_PARA_PURPOSE + Configure purpose. + 0x44 + 0x20 + + + PURPOSE_SET + Set hmac parameter purpose. + 0 + 4 + write-only + + + + + SET_PARA_KEY + Configure key. + 0x48 + 0x20 + + + KEY_SET + Set hmac parameter key. + 0 + 3 + write-only + + + + + SET_PARA_FINISH + Finish initial configuration. + 0x4C + 0x20 + + + SET_PARA_END + Finish hmac configuration. + 0 + 1 + write-only + + + + + SET_MESSAGE_ONE + Process control register 1. + 0x50 + 0x20 + + + SET_TEXT_ONE + Call SHA to calculate one message block. + 0 + 1 + write-only + + + + + SET_MESSAGE_ING + Process control register 2. + 0x54 + 0x20 + + + SET_TEXT_ING + Continue typical hmac. + 0 + 1 + write-only + + + + + SET_MESSAGE_END + Process control register 3. + 0x58 + 0x20 + + + SET_TEXT_END + Start hardware padding. + 0 + 1 + write-only + + + + + SET_RESULT_FINISH + Process control register 4. + 0x5C + 0x20 + + + SET_RESULT_END + After read result from upstream, then let hmac back to idle. + 0 + 1 + write-only + + + + + SET_INVALIDATE_JTAG + Invalidate register 0. + 0x60 + 0x20 + + + SET_INVALIDATE_JTAG + Clear result from hmac downstream JTAG. + 0 + 1 + write-only + + + + + SET_INVALIDATE_DS + Invalidate register 1. + 0x64 + 0x20 + + + SET_INVALIDATE_DS + Clear result from hmac downstream DS. + 0 + 1 + write-only + + + + + QUERY_ERROR + Error register. + 0x68 + 0x20 + + + QUREY_CHECK + Hmac configuration state. 0: key are agree with purpose. 1: error + 0 + 1 + read-only + + + + + QUERY_BUSY + Busy register. + 0x6C + 0x20 + + + BUSY_STATE + Hmac state. 1'b0: idle. 1'b1: busy + 0 + 1 + read-only + + + + + 64 + 0x1 + WR_MESSAGE_MEM[%s] + Message block memory. + 0x80 + 0x8 + + + 32 + 0x1 + RD_RESULT_MEM[%s] + Result from upstream. + 0xC0 + 0x8 + + + SET_MESSAGE_PAD + Process control register 5. + 0xF0 + 0x20 + + + SET_TEXT_PAD + Start software padding. + 0 + 1 + write-only + + + + + ONE_BLOCK + Process control register 6. + 0xF4 + 0x20 + + + SET_ONE_BLOCK + Don't have to do padding. + 0 + 1 + write-only + + + + + SOFT_JTAG_CTRL + Jtag register 0. + 0xF8 + 0x20 + + + SOFT_JTAG_CTRL + Turn on JTAG verification. + 0 + 1 + write-only + + + + + WR_JTAG + Jtag register 1. + 0xFC + 0x20 + + + WR_JTAG + 32-bit of key to be compared. + 0 + 32 + write-only + + + + + DATE + Date register. + 0x1FC + 0x20 + 0x02101070 + + + DATE + Hmac date information/ hmac version information. + 0 + 28 + read-write + + + + + + + I2C0 + I2C (Inter-Integrated Circuit) Controller 0 + I2C + 0x60013000 + + 0x0 + 0x90 + registers + + + I2C_MASTER + 11 + + + I2C_EXT0 + 42 + + + + SCL_LOW_PERIOD + Configures the low level width of the SCL +Clock + 0x0 + 0x20 + + + SCL_LOW_PERIOD + This register is used to configure for how long SCL remains low in master mode, in I2C module clock cycles. + 0 + 9 + read-write + + + + + CTR + Transmission setting + 0x4 + 0x20 + 0x0000020B + + + SDA_FORCE_OUT + 0: direct output; 1: open drain output. + 0 + 1 + read-write + + + SCL_FORCE_OUT + 0: direct output; 1: open drain output. + 1 + 1 + read-write + + + SAMPLE_SCL_LEVEL + This register is used to select the sample mode. +1: sample SDA data on the SCL low level. +0: sample SDA data on the SCL high level. + 2 + 1 + read-write + + + RX_FULL_ACK_LEVEL + This register is used to configure the ACK value that need to sent by master when the rx_fifo_cnt has reached the threshold. + 3 + 1 + read-write + + + MS_MODE + Set this bit to configure the module as an I2C Master. Clear this bit to configure the +module as an I2C Slave. + 4 + 1 + read-write + + + TRANS_START + Set this bit to start sending the data in txfifo. + 5 + 1 + write-only + + + TX_LSB_FIRST + This bit is used to control the sending mode for data needing to be sent. +1: send data from the least significant bit; +0: send data from the most significant bit. + 6 + 1 + read-write + + + RX_LSB_FIRST + This bit is used to control the storage mode for received data. +1: receive data from the least significant bit; +0: receive data from the most significant bit. + 7 + 1 + read-write + + + CLK_EN + Reserved + 8 + 1 + read-write + + + ARBITRATION_EN + This is the enable bit for arbitration_lost. + 9 + 1 + read-write + + + FSM_RST + This register is used to reset the scl FMS. + 10 + 1 + write-only + + + CONF_UPGATE + synchronization bit + 11 + 1 + write-only + + + SLV_TX_AUTO_START_EN + This is the enable bit for slave to send data automatically + 12 + 1 + read-write + + + ADDR_10BIT_RW_CHECK_EN + This is the enable bit to check if the r/w bit of 10bit addressing consists with I2C protocol + 13 + 1 + read-write + + + ADDR_BROADCASTING_EN + This is the enable bit to support the 7bit general call function. + 14 + 1 + read-write + + + + + SR + Describe I2C work status. + 0x8 + 0x20 + 0x0000C000 + + + RESP_REC + The received ACK value in master mode or slave mode. 0: ACK, 1: NACK. + 0 + 1 + read-only + + + SLAVE_RW + When in slave mode, 1: master reads from slave; 0: master writes to slave. + 1 + 1 + read-only + + + ARB_LOST + When the I2C controller loses control of SCL line, this register changes to 1. + 3 + 1 + read-only + + + BUS_BUSY + 1: the I2C bus is busy transferring data; 0: the I2C bus is in idle state. + 4 + 1 + read-only + + + SLAVE_ADDRESSED + When configured as an I2C Slave, and the address sent by the master is +equal to the address of the slave, then this bit will be of high level. + 5 + 1 + read-only + + + RXFIFO_CNT + This field represents the amount of data needed to be sent. + 8 + 6 + read-only + + + STRETCH_CAUSE + The cause of stretching SCL low in slave mode. 0: stretching SCL low at the beginning of I2C read data state. 1: stretching SCL low when I2C Tx FIFO is empty in slave mode. 2: stretching SCL low when I2C Rx FIFO is full in slave mode. + 14 + 2 + read-only + + + TXFIFO_CNT + This field stores the amount of received data in RAM. + 18 + 6 + read-only + + + SCL_MAIN_STATE_LAST + This field indicates the states of the I2C module state machine. +0: Idle; 1: Address shift; 2: ACK address; 3: Rx data; 4: Tx data; 5: Send ACK; 6: Wait ACK + 24 + 3 + read-only + + + SCL_STATE_LAST + This field indicates the states of the state machine used to produce SCL. +0: Idle; 1: Start; 2: Negative edge; 3: Low; 4: Positive edge; 5: High; 6: Stop + 28 + 3 + read-only + + + + + TO + Setting time out control for receiving data. + 0xC + 0x20 + 0x00000010 + + + TIME_OUT_VALUE + This register is used to configure the timeout for receiving a data bit in APB +clock cycles. + 0 + 5 + read-write + + + TIME_OUT_EN + This is the enable bit for time out control. + 5 + 1 + read-write + + + + + SLAVE_ADDR + Local slave address setting + 0x10 + 0x20 + + + SLAVE_ADDR + When configured as an I2C Slave, this field is used to configure the slave address. + 0 + 15 + read-write + + + ADDR_10BIT_EN + This field is used to enable the slave 10-bit addressing mode in master mode. + 31 + 1 + read-write + + + + + FIFO_ST + FIFO status register. + 0x14 + 0x20 + + + RXFIFO_RADDR + This is the offset address of the APB reading from rxfifo + 0 + 5 + read-only + + + RXFIFO_WADDR + This is the offset address of i2c module receiving data and writing to rxfifo. + 5 + 5 + read-only + + + TXFIFO_RADDR + This is the offset address of i2c module reading from txfifo. + 10 + 5 + read-only + + + TXFIFO_WADDR + This is the offset address of APB bus writing to txfifo. + 15 + 5 + read-only + + + SLAVE_RW_POINT + The received data in I2C slave mode. + 22 + 8 + read-only + + + + + FIFO_CONF + FIFO configuration register. + 0x18 + 0x20 + 0x0000408B + + + RXFIFO_WM_THRHD + The water mark threshold of rx FIFO in nonfifo access mode. When reg_reg_fifo_prt_en is 1 and rx FIFO counter is bigger than reg_rxfifo_wm_thrhd[4:0], reg_rxfifo_wm_int_raw bit will be valid. + 0 + 5 + read-write + + + TXFIFO_WM_THRHD + The water mark threshold of tx FIFO in nonfifo access mode. When reg_reg_fifo_prt_en is 1 and tx FIFO counter is smaller than reg_txfifo_wm_thrhd[4:0], reg_txfifo_wm_int_raw bit will be valid. + 5 + 5 + read-write + + + NONFIFO_EN + Set this bit to enable APB nonfifo access. + 10 + 1 + read-write + + + FIFO_ADDR_CFG_EN + When this bit is set to 1, the byte received after the I2C address byte represents the offset address in the I2C Slave RAM. + 11 + 1 + read-write + + + RX_FIFO_RST + Set this bit to reset rx-fifo. + 12 + 1 + read-write + + + TX_FIFO_RST + Set this bit to reset tx-fifo. + 13 + 1 + read-write + + + FIFO_PRT_EN + The control enable bit of FIFO pointer in non-fifo access mode. This bit controls the valid bits and the interrupts of tx/rx_fifo overflow, underflow, full and empty. + 14 + 1 + read-write + + + + + DATA + Rx FIFO read data. + 0x1C + 0x20 + + + FIFO_RDATA + The value of rx FIFO read data. + 0 + 8 + read-write + + + + + INT_RAW + Raw interrupt status + 0x20 + 0x20 + 0x00000002 + + + RXFIFO_WM_INT_RAW + The raw interrupt bit for I2C_RXFIFO_WM_INT interrupt. + 0 + 1 + read-only + + + TXFIFO_WM_INT_RAW + The raw interrupt bit for I2C_TXFIFO_WM_INT interrupt. + 1 + 1 + read-only + + + RXFIFO_OVF_INT_RAW + The raw interrupt bit for I2C_RXFIFO_OVF_INT interrupt. + 2 + 1 + read-only + + + END_DETECT_INT_RAW + The raw interrupt bit for the I2C_END_DETECT_INT interrupt. + 3 + 1 + read-only + + + BYTE_TRANS_DONE_INT_RAW + The raw interrupt bit for the I2C_END_DETECT_INT interrupt. + 4 + 1 + read-only + + + ARBITRATION_LOST_INT_RAW + The raw interrupt bit for the I2C_ARBITRATION_LOST_INT interrupt. + 5 + 1 + read-only + + + MST_TXFIFO_UDF_INT_RAW + The raw interrupt bit for I2C_TRANS_COMPLETE_INT interrupt. + 6 + 1 + read-only + + + TRANS_COMPLETE_INT_RAW + The raw interrupt bit for the I2C_TRANS_COMPLETE_INT interrupt. + 7 + 1 + read-only + + + TIME_OUT_INT_RAW + The raw interrupt bit for the I2C_TIME_OUT_INT interrupt. + 8 + 1 + read-only + + + TRANS_START_INT_RAW + The raw interrupt bit for the I2C_TRANS_START_INT interrupt. + 9 + 1 + read-only + + + NACK_INT_RAW + The raw interrupt bit for I2C_SLAVE_STRETCH_INT interrupt. + 10 + 1 + read-only + + + TXFIFO_OVF_INT_RAW + The raw interrupt bit for I2C_TXFIFO_OVF_INT interrupt. + 11 + 1 + read-only + + + RXFIFO_UDF_INT_RAW + The raw interrupt bit for I2C_RXFIFO_UDF_INT interrupt. + 12 + 1 + read-only + + + SCL_ST_TO_INT_RAW + The raw interrupt bit for I2C_SCL_ST_TO_INT interrupt. + 13 + 1 + read-only + + + SCL_MAIN_ST_TO_INT_RAW + The raw interrupt bit for I2C_SCL_MAIN_ST_TO_INT interrupt. + 14 + 1 + read-only + + + DET_START_INT_RAW + The raw interrupt bit for I2C_DET_START_INT interrupt. + 15 + 1 + read-only + + + SLAVE_STRETCH_INT_RAW + The raw interrupt bit for I2C_SLAVE_STRETCH_INT interrupt. + 16 + 1 + read-only + + + GENERAL_CALL_INT_RAW + The raw interrupt bit for I2C_GENARAL_CALL_INT interrupt. + 17 + 1 + read-only + + + + + INT_CLR + Interrupt clear bits + 0x24 + 0x20 + + + RXFIFO_WM_INT_CLR + Set this bit to clear I2C_RXFIFO_WM_INT interrupt. + 0 + 1 + write-only + + + TXFIFO_WM_INT_CLR + Set this bit to clear I2C_TXFIFO_WM_INT interrupt. + 1 + 1 + write-only + + + RXFIFO_OVF_INT_CLR + Set this bit to clear I2C_RXFIFO_OVF_INT interrupt. + 2 + 1 + write-only + + + END_DETECT_INT_CLR + Set this bit to clear the I2C_END_DETECT_INT interrupt. + 3 + 1 + write-only + + + BYTE_TRANS_DONE_INT_CLR + Set this bit to clear the I2C_END_DETECT_INT interrupt. + 4 + 1 + write-only + + + ARBITRATION_LOST_INT_CLR + Set this bit to clear the I2C_ARBITRATION_LOST_INT interrupt. + 5 + 1 + write-only + + + MST_TXFIFO_UDF_INT_CLR + Set this bit to clear I2C_TRANS_COMPLETE_INT interrupt. + 6 + 1 + write-only + + + TRANS_COMPLETE_INT_CLR + Set this bit to clear the I2C_TRANS_COMPLETE_INT interrupt. + 7 + 1 + write-only + + + TIME_OUT_INT_CLR + Set this bit to clear the I2C_TIME_OUT_INT interrupt. + 8 + 1 + write-only + + + TRANS_START_INT_CLR + Set this bit to clear the I2C_TRANS_START_INT interrupt. + 9 + 1 + write-only + + + NACK_INT_CLR + Set this bit to clear I2C_SLAVE_STRETCH_INT interrupt. + 10 + 1 + write-only + + + TXFIFO_OVF_INT_CLR + Set this bit to clear I2C_TXFIFO_OVF_INT interrupt. + 11 + 1 + write-only + + + RXFIFO_UDF_INT_CLR + Set this bit to clear I2C_RXFIFO_UDF_INT interrupt. + 12 + 1 + write-only + + + SCL_ST_TO_INT_CLR + Set this bit to clear I2C_SCL_ST_TO_INT interrupt. + 13 + 1 + write-only + + + SCL_MAIN_ST_TO_INT_CLR + Set this bit to clear I2C_SCL_MAIN_ST_TO_INT interrupt. + 14 + 1 + write-only + + + DET_START_INT_CLR + Set this bit to clear I2C_DET_START_INT interrupt. + 15 + 1 + write-only + + + SLAVE_STRETCH_INT_CLR + Set this bit to clear I2C_SLAVE_STRETCH_INT interrupt. + 16 + 1 + write-only + + + GENERAL_CALL_INT_CLR + Set this bit for I2C_GENARAL_CALL_INT interrupt. + 17 + 1 + write-only + + + + + INT_ENA + Interrupt enable bits + 0x28 + 0x20 + + + RXFIFO_WM_INT_ENA + The interrupt enable bit for I2C_RXFIFO_WM_INT interrupt. + 0 + 1 + read-write + + + TXFIFO_WM_INT_ENA + The interrupt enable bit for I2C_TXFIFO_WM_INT interrupt. + 1 + 1 + read-write + + + RXFIFO_OVF_INT_ENA + The interrupt enable bit for I2C_RXFIFO_OVF_INT interrupt. + 2 + 1 + read-write + + + END_DETECT_INT_ENA + The interrupt enable bit for the I2C_END_DETECT_INT interrupt. + 3 + 1 + read-write + + + BYTE_TRANS_DONE_INT_ENA + The interrupt enable bit for the I2C_END_DETECT_INT interrupt. + 4 + 1 + read-write + + + ARBITRATION_LOST_INT_ENA + The interrupt enable bit for the I2C_ARBITRATION_LOST_INT interrupt. + 5 + 1 + read-write + + + MST_TXFIFO_UDF_INT_ENA + The interrupt enable bit for I2C_TRANS_COMPLETE_INT interrupt. + 6 + 1 + read-write + + + TRANS_COMPLETE_INT_ENA + The interrupt enable bit for the I2C_TRANS_COMPLETE_INT interrupt. + 7 + 1 + read-write + + + TIME_OUT_INT_ENA + The interrupt enable bit for the I2C_TIME_OUT_INT interrupt. + 8 + 1 + read-write + + + TRANS_START_INT_ENA + The interrupt enable bit for the I2C_TRANS_START_INT interrupt. + 9 + 1 + read-write + + + NACK_INT_ENA + The interrupt enable bit for I2C_SLAVE_STRETCH_INT interrupt. + 10 + 1 + read-write + + + TXFIFO_OVF_INT_ENA + The interrupt enable bit for I2C_TXFIFO_OVF_INT interrupt. + 11 + 1 + read-write + + + RXFIFO_UDF_INT_ENA + The interrupt enable bit for I2C_RXFIFO_UDF_INT interrupt. + 12 + 1 + read-write + + + SCL_ST_TO_INT_ENA + The interrupt enable bit for I2C_SCL_ST_TO_INT interrupt. + 13 + 1 + read-write + + + SCL_MAIN_ST_TO_INT_ENA + The interrupt enable bit for I2C_SCL_MAIN_ST_TO_INT interrupt. + 14 + 1 + read-write + + + DET_START_INT_ENA + The interrupt enable bit for I2C_DET_START_INT interrupt. + 15 + 1 + read-write + + + SLAVE_STRETCH_INT_ENA + The interrupt enable bit for I2C_SLAVE_STRETCH_INT interrupt. + 16 + 1 + read-write + + + GENERAL_CALL_INT_ENA + The interrupt enable bit for I2C_GENARAL_CALL_INT interrupt. + 17 + 1 + read-write + + + + + INT_STATUS + Status of captured I2C communication events + 0x2C + 0x20 + + + RXFIFO_WM_INT_ST + The masked interrupt status bit for I2C_RXFIFO_WM_INT interrupt. + 0 + 1 + read-only + + + TXFIFO_WM_INT_ST + The masked interrupt status bit for I2C_TXFIFO_WM_INT interrupt. + 1 + 1 + read-only + + + RXFIFO_OVF_INT_ST + The masked interrupt status bit for I2C_RXFIFO_OVF_INT interrupt. + 2 + 1 + read-only + + + END_DETECT_INT_ST + The masked interrupt status bit for the I2C_END_DETECT_INT interrupt. + 3 + 1 + read-only + + + BYTE_TRANS_DONE_INT_ST + The masked interrupt status bit for the I2C_END_DETECT_INT interrupt. + 4 + 1 + read-only + + + ARBITRATION_LOST_INT_ST + The masked interrupt status bit for the I2C_ARBITRATION_LOST_INT interrupt. + 5 + 1 + read-only + + + MST_TXFIFO_UDF_INT_ST + The masked interrupt status bit for I2C_TRANS_COMPLETE_INT interrupt. + 6 + 1 + read-only + + + TRANS_COMPLETE_INT_ST + The masked interrupt status bit for the I2C_TRANS_COMPLETE_INT interrupt. + 7 + 1 + read-only + + + TIME_OUT_INT_ST + The masked interrupt status bit for the I2C_TIME_OUT_INT interrupt. + 8 + 1 + read-only + + + TRANS_START_INT_ST + The masked interrupt status bit for the I2C_TRANS_START_INT interrupt. + 9 + 1 + read-only + + + NACK_INT_ST + The masked interrupt status bit for I2C_SLAVE_STRETCH_INT interrupt. + 10 + 1 + read-only + + + TXFIFO_OVF_INT_ST + The masked interrupt status bit for I2C_TXFIFO_OVF_INT interrupt. + 11 + 1 + read-only + + + RXFIFO_UDF_INT_ST + The masked interrupt status bit for I2C_RXFIFO_UDF_INT interrupt. + 12 + 1 + read-only + + + SCL_ST_TO_INT_ST + The masked interrupt status bit for I2C_SCL_ST_TO_INT interrupt. + 13 + 1 + read-only + + + SCL_MAIN_ST_TO_INT_ST + The masked interrupt status bit for I2C_SCL_MAIN_ST_TO_INT interrupt. + 14 + 1 + read-only + + + DET_START_INT_ST + The masked interrupt status bit for I2C_DET_START_INT interrupt. + 15 + 1 + read-only + + + SLAVE_STRETCH_INT_ST + The masked interrupt status bit for I2C_SLAVE_STRETCH_INT interrupt. + 16 + 1 + read-only + + + GENERAL_CALL_INT_ST + The masked interrupt status bit for I2C_GENARAL_CALL_INT interrupt. + 17 + 1 + read-only + + + + + SDA_HOLD + Configures the hold time after a negative SCL edge. + 0x30 + 0x20 + + + TIME + This register is used to configure the time to hold the data after the negative +edge of SCL, in I2C module clock cycles. + 0 + 9 + read-write + + + + + SDA_SAMPLE + Configures the sample time after a positive SCL edge. + 0x34 + 0x20 + + + TIME + This register is used to configure for how long SDA is sampled, in I2C module clock cycles. + 0 + 9 + read-write + + + + + SCL_HIGH_PERIOD + Configures the high level width of SCL + 0x38 + 0x20 + + + SCL_HIGH_PERIOD + This register is used to configure for how long SCL remains high in master mode, in I2C module clock cycles. + 0 + 9 + read-write + + + SCL_WAIT_HIGH_PERIOD + This register is used to configure for the SCL_FSM's waiting period for SCL high level in master mode, in I2C module clock cycles. + 9 + 7 + read-write + + + + + SCL_START_HOLD + Configures the delay between the SDA and SCL negative edge for a start condition + 0x40 + 0x20 + 0x00000008 + + + TIME + This register is used to configure the time between the negative edge +of SDA and the negative edge of SCL for a START condition, in I2C module clock cycles. + 0 + 9 + read-write + + + + + SCL_RSTART_SETUP + Configures the delay between the positive +edge of SCL and the negative edge of SDA + 0x44 + 0x20 + 0x00000008 + + + TIME + This register is used to configure the time between the positive +edge of SCL and the negative edge of SDA for a RESTART condition, in I2C module clock cycles. + 0 + 9 + read-write + + + + + SCL_STOP_HOLD + Configures the delay after the SCL clock +edge for a stop condition + 0x48 + 0x20 + 0x00000008 + + + TIME + This register is used to configure the delay after the STOP condition, +in I2C module clock cycles. + 0 + 9 + read-write + + + + + SCL_STOP_SETUP + Configures the delay between the SDA and +SCL positive edge for a stop condition + 0x4C + 0x20 + 0x00000008 + + + TIME + This register is used to configure the time between the positive edge +of SCL and the positive edge of SDA, in I2C module clock cycles. + 0 + 9 + read-write + + + + + FILTER_CFG + SCL and SDA filter configuration register + 0x50 + 0x20 + 0x00000300 + + + SCL_FILTER_THRES + When a pulse on the SCL input has smaller width than this register value +in I2C module clock cycles, the I2C controller will ignore that pulse. + 0 + 4 + read-write + + + SDA_FILTER_THRES + When a pulse on the SDA input has smaller width than this register value +in I2C module clock cycles, the I2C controller will ignore that pulse. + 4 + 4 + read-write + + + SCL_FILTER_EN + This is the filter enable bit for SCL. + 8 + 1 + read-write + + + SDA_FILTER_EN + This is the filter enable bit for SDA. + 9 + 1 + read-write + + + + + CLK_CONF + I2C CLK configuration register + 0x54 + 0x20 + 0x00200000 + + + SCLK_DIV_NUM + the integral part of the fractional divisor for i2c module + 0 + 8 + read-write + + + SCLK_DIV_A + the numerator of the fractional part of the fractional divisor for i2c module + 8 + 6 + read-write + + + SCLK_DIV_B + the denominator of the fractional part of the fractional divisor for i2c module + 14 + 6 + read-write + + + SCLK_SEL + The clock selection for i2c module:0-XTAL;1-CLK_8MHz. + 20 + 1 + read-write + + + SCLK_ACTIVE + The clock switch for i2c module + 21 + 1 + read-write + + + + + 8 + 0x4 + 0-7 + COMD%s + I2C command register %s + 0x58 + 0x20 + + + COMMAND + This is the content of command 0. It consists of three parts: +op_code is the command, 0: RSTART; 1: WRITE; 2: READ; 3: STOP; 4: END. +Byte_num represents the number of bytes that need to be sent or received. +ack_check_en, ack_exp and ack are used to control the ACK bit. See I2C cmd structure for more +Information. + 0 + 14 + read-write + + + COMMAND_DONE + When command 0 is done in I2C Master mode, this bit changes to high +level. + 31 + 1 + read-write + + + + + SCL_ST_TIME_OUT + SCL status time out register + 0x78 + 0x20 + 0x00000010 + + + SCL_ST_TO_I2C + The threshold value of SCL_FSM state unchanged period. It should be o more than 23 + 0 + 5 + read-write + + + + + SCL_MAIN_ST_TIME_OUT + SCL main status time out register + 0x7C + 0x20 + 0x00000010 + + + SCL_MAIN_ST_TO_I2C + The threshold value of SCL_MAIN_FSM state unchanged period.nIt should be o more than 23 + 0 + 5 + read-write + + + + + SCL_SP_CONF + Power configuration register + 0x80 + 0x20 + + + SCL_RST_SLV_EN + When I2C master is IDLE, set this bit to send out SCL pulses. The number of pulses equals to reg_scl_rst_slv_num[4:0]. + 0 + 1 + read-write + + + SCL_RST_SLV_NUM + Configure the pulses of SCL generated in I2C master mode. Valid when reg_scl_rst_slv_en is 1. + 1 + 5 + read-write + + + SCL_PD_EN + The power down enable bit for the I2C output SCL line. 1: Power down. 0: Not power down. Set reg_scl_force_out and reg_scl_pd_en to 1 to stretch SCL low. + 6 + 1 + read-write + + + SDA_PD_EN + The power down enable bit for the I2C output SDA line. 1: Power down. 0: Not power down. Set reg_sda_force_out and reg_sda_pd_en to 1 to stretch SDA low. + 7 + 1 + read-write + + + + + SCL_STRETCH_CONF + Set SCL stretch of I2C slave + 0x84 + 0x20 + + + STRETCH_PROTECT_NUM + Configure the period of I2C slave stretching SCL line. + 0 + 10 + read-write + + + SLAVE_SCL_STRETCH_EN + The enable bit for slave SCL stretch function. 1: Enable. 0: Disable. The SCL output line will be stretched low when reg_slave_scl_stretch_en is 1 and stretch event happens. The stretch cause can be seen in reg_stretch_cause. + 10 + 1 + read-write + + + SLAVE_SCL_STRETCH_CLR + Set this bit to clear the I2C slave SCL stretch function. + 11 + 1 + write-only + + + SLAVE_BYTE_ACK_CTL_EN + The enable bit for slave to control ACK level function. + 12 + 1 + read-write + + + SLAVE_BYTE_ACK_LVL + Set the ACK level when slave controlling ACK level function enables. + 13 + 1 + read-write + + + + + DATE + Version register + 0xF8 + 0x20 + 0x20070201 + + + DATE + This is the the version register. + 0 + 32 + read-write + + + + + TXFIFO_START_ADDR + I2C TXFIFO base address register + 0x100 + 0x20 + + + TXFIFO_START_ADDR + This is the I2C txfifo first address. + 0 + 32 + read-only + + + + + RXFIFO_START_ADDR + I2C RXFIFO base address register + 0x180 + 0x20 + + + RXFIFO_START_ADDR + This is the I2C rxfifo first address. + 0 + 32 + read-only + + + + + + + I2C1 + I2C (Inter-Integrated Circuit) Controller 1 + 0x60027000 + + I2C_EXT1 + 43 + + + + I2S0 + I2S (Inter-IC Sound) Controller 0 + I2S + 0x6000F000 + + 0x0 + 0x5C + registers + + + I2S0 + 25 + + + + INT_RAW + I2S interrupt raw register, valid in level. + 0xC + 0x20 + + + RX_DONE_INT_RAW + The raw interrupt status bit for the i2s_rx_done_int interrupt + 0 + 1 + read-only + + + TX_DONE_INT_RAW + The raw interrupt status bit for the i2s_tx_done_int interrupt + 1 + 1 + read-only + + + RX_HUNG_INT_RAW + The raw interrupt status bit for the i2s_rx_hung_int interrupt + 2 + 1 + read-only + + + TX_HUNG_INT_RAW + The raw interrupt status bit for the i2s_tx_hung_int interrupt + 3 + 1 + read-only + + + + + INT_ST + I2S interrupt status register. + 0x10 + 0x20 + + + RX_DONE_INT_ST + The masked interrupt status bit for the i2s_rx_done_int interrupt + 0 + 1 + read-only + + + TX_DONE_INT_ST + The masked interrupt status bit for the i2s_tx_done_int interrupt + 1 + 1 + read-only + + + RX_HUNG_INT_ST + The masked interrupt status bit for the i2s_rx_hung_int interrupt + 2 + 1 + read-only + + + TX_HUNG_INT_ST + The masked interrupt status bit for the i2s_tx_hung_int interrupt + 3 + 1 + read-only + + + + + INT_ENA + I2S interrupt enable register. + 0x14 + 0x20 + + + RX_DONE_INT_ENA + The interrupt enable bit for the i2s_rx_done_int interrupt + 0 + 1 + read-write + + + TX_DONE_INT_ENA + The interrupt enable bit for the i2s_tx_done_int interrupt + 1 + 1 + read-write + + + RX_HUNG_INT_ENA + The interrupt enable bit for the i2s_rx_hung_int interrupt + 2 + 1 + read-write + + + TX_HUNG_INT_ENA + The interrupt enable bit for the i2s_tx_hung_int interrupt + 3 + 1 + read-write + + + + + INT_CLR + I2S interrupt clear register. + 0x18 + 0x20 + + + RX_DONE_INT_CLR + Set this bit to clear the i2s_rx_done_int interrupt + 0 + 1 + write-only + + + TX_DONE_INT_CLR + Set this bit to clear the i2s_tx_done_int interrupt + 1 + 1 + write-only + + + RX_HUNG_INT_CLR + Set this bit to clear the i2s_rx_hung_int interrupt + 2 + 1 + write-only + + + TX_HUNG_INT_CLR + Set this bit to clear the i2s_tx_hung_int interrupt + 3 + 1 + write-only + + + + + RX_CONF + I2S RX configure register + 0x20 + 0x20 + 0x00009600 + + + RX_RESET + Set this bit to reset receiver + 0 + 1 + write-only + + + RX_FIFO_RESET + Set this bit to reset Rx AFIFO + 1 + 1 + write-only + + + RX_START + Set this bit to start receiving data + 2 + 1 + read-write + + + RX_SLAVE_MOD + Set this bit to enable slave receiver mode + 3 + 1 + read-write + + + RX_MONO + Set this bit to enable receiver in mono mode + 5 + 1 + read-write + + + RX_BIG_ENDIAN + I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value. + 7 + 1 + read-write + + + RX_UPDATE + Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done. + 8 + 1 + read-write + + + RX_MONO_FST_VLD + 1: The first channel data value is valid in I2S RX mono mode. 0: The second channel data value is valid in I2S RX mono mode. + 9 + 1 + read-write + + + RX_PCM_CONF + I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. & + 10 + 2 + read-write + + + RX_PCM_BYPASS + Set this bit to bypass Compress/Decompress module for received data. + 12 + 1 + read-write + + + RX_STOP_MODE + 0 : I2S Rx only stop when reg_rx_start is cleared. 1: Stop when reg_rx_start is 0 or in_suc_eof is 1. 2: Stop I2S RX when reg_rx_start is 0 or RX FIFO is full. + 13 + 2 + read-write + + + RX_LEFT_ALIGN + 1: I2S RX left alignment mode. 0: I2S RX right alignment mode. + 15 + 1 + read-write + + + RX_24_FILL_EN + 1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits. + 16 + 1 + read-write + + + RX_WS_IDLE_POL + 0: WS should be 0 when receiving left channel data, and WS is 1in right channel. 1: WS should be 1 when receiving left channel data, and WS is 0in right channel. + 17 + 1 + read-write + + + RX_BIT_ORDER + I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first. + 18 + 1 + read-write + + + RX_TDM_EN + 1: Enable I2S TDM Rx mode . 0: Disable. + 19 + 1 + read-write + + + RX_PDM_EN + 1: Enable I2S PDM Rx mode . 0: Disable. + 20 + 1 + read-write + + + RX_PDM2PCM_EN + 1: Enable PDM2PCM RX mode. 0: DIsable. + 21 + 1 + read-write + + + RX_PDM_SINC_DSR_16_EN + Configure the down sampling rate of PDM RX filter group1 module. 1: The down sampling rate is 128. 0: down sampling rate is 64. + 22 + 1 + read-write + + + + + TX_CONF + I2S TX configure register + 0x24 + 0x20 + 0x0000B200 + + + TX_RESET + Set this bit to reset transmitter + 0 + 1 + write-only + + + TX_FIFO_RESET + Set this bit to reset Tx AFIFO + 1 + 1 + write-only + + + TX_START + Set this bit to start transmitting data + 2 + 1 + read-write + + + TX_SLAVE_MOD + Set this bit to enable slave transmitter mode + 3 + 1 + read-write + + + TX_MONO + Set this bit to enable transmitter in mono mode + 5 + 1 + read-write + + + TX_CHAN_EQUAL + 1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode. + 6 + 1 + read-write + + + TX_BIG_ENDIAN + I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr value. + 7 + 1 + read-write + + + TX_UPDATE + Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done. + 8 + 1 + read-write + + + TX_MONO_FST_VLD + 1: The first channel data value is valid in I2S TX mono mode. 0: The second channel data value is valid in I2S TX mono mode. + 9 + 1 + read-write + + + TX_PCM_CONF + I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. & + 10 + 2 + read-write + + + TX_PCM_BYPASS + Set this bit to bypass Compress/Decompress module for transmitted data. + 12 + 1 + read-write + + + TX_STOP_EN + Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + 13 + 1 + read-write + + + TX_LEFT_ALIGN + 1: I2S TX left alignment mode. 0: I2S TX right alignment mode. + 15 + 1 + read-write + + + TX_24_FILL_EN + 1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode + 16 + 1 + read-write + + + TX_WS_IDLE_POL + 0: WS should be 0 when sending left channel data, and WS is 1in right channel. 1: WS should be 1 when sending left channel data, and WS is 0in right channel. + 17 + 1 + read-write + + + TX_BIT_ORDER + I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first. + 18 + 1 + read-write + + + TX_TDM_EN + 1: Enable I2S TDM Tx mode . 0: Disable. + 19 + 1 + read-write + + + TX_PDM_EN + 1: Enable I2S PDM Tx mode . 0: Disable. + 20 + 1 + read-write + + + TX_CHAN_MOD + I2S transmitter channel mode configuration bits. + 24 + 3 + read-write + + + SIG_LOOPBACK + Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals. + 27 + 1 + read-write + + + + + RX_CONF1 + I2S RX configure register 1 + 0x28 + 0x20 + 0x2F3DE300 + + + RX_TDM_WS_WIDTH + The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck + 0 + 7 + read-write + + + RX_BCK_DIV_NUM + Bit clock configuration bits in receiver mode. + 7 + 6 + read-write + + + RX_BITS_MOD + Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode. + 13 + 5 + read-write + + + RX_HALF_SAMPLE_BITS + I2S Rx half sample bits -1. + 18 + 6 + read-write + + + RX_TDM_CHAN_BITS + The Rx bit number for each channel minus 1in TDM mode. + 24 + 5 + read-write + + + RX_MSB_SHIFT + Set this bit to enable receiver in Phillips standard mode + 29 + 1 + read-write + + + + + TX_CONF1 + I2S TX configure register 1 + 0x2C + 0x20 + 0x6F3DE300 + + + TX_TDM_WS_WIDTH + The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck + 0 + 7 + read-write + + + TX_BCK_DIV_NUM + Bit clock configuration bits in transmitter mode. + 7 + 6 + read-write + + + TX_BITS_MOD + Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode. + 13 + 5 + read-write + + + TX_HALF_SAMPLE_BITS + I2S Tx half sample bits -1. + 18 + 6 + read-write + + + TX_TDM_CHAN_BITS + The Tx bit number for each channel minus 1in TDM mode. + 24 + 5 + read-write + + + TX_MSB_SHIFT + Set this bit to enable transmitter in Phillips standard mode + 29 + 1 + read-write + + + TX_BCK_NO_DLY + 1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode. + 30 + 1 + read-write + + + + + RX_CLKM_CONF + I2S RX clock configure register + 0x30 + 0x20 + 0x00000002 + + + RX_CLKM_DIV_NUM + Integral I2S clock divider value + 0 + 8 + read-write + + + RX_CLK_ACTIVE + I2S Rx module clock enable signal. + 26 + 1 + read-write + + + RX_CLK_SEL + Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in. + 27 + 2 + read-write + + + MCLK_SEL + 0: UseI2S Tx module clock as I2S_MCLK_OUT. 1: UseI2S Rx module clock as I2S_MCLK_OUT. + 29 + 1 + read-write + + + + + TX_CLKM_CONF + I2S TX clock configure register + 0x34 + 0x20 + 0x00000002 + + + TX_CLKM_DIV_NUM + Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div. So the average combination will be: for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div. + 0 + 8 + read-write + + + TX_CLK_ACTIVE + I2S Tx module clock enable signal. + 26 + 1 + read-write + + + TX_CLK_SEL + Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in. + 27 + 2 + read-write + + + CLK_EN + Set this bit to enable clk gate + 29 + 1 + read-write + + + + + RX_CLKM_DIV_CONF + I2S RX module clock divider configure register + 0x38 + 0x20 + 0x00000200 + + + RX_CLKM_DIV_Z + For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b). + 0 + 9 + read-write + + + RX_CLKM_DIV_Y + For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)). + 9 + 9 + read-write + + + RX_CLKM_DIV_X + For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1. + 18 + 9 + read-write + + + RX_CLKM_DIV_YN1 + For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1. + 27 + 1 + read-write + + + + + TX_CLKM_DIV_CONF + I2S TX module clock divider configure register + 0x3C + 0x20 + 0x00000200 + + + TX_CLKM_DIV_Z + For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b). + 0 + 9 + read-write + + + TX_CLKM_DIV_Y + For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)). + 9 + 9 + read-write + + + TX_CLKM_DIV_X + For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1. + 18 + 9 + read-write + + + TX_CLKM_DIV_YN1 + For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1. + 27 + 1 + read-write + + + + + TX_PCM2PDM_CONF + I2S TX PCM2PDM configuration register + 0x40 + 0x20 + 0x004AA004 + + + TX_PDM_HP_BYPASS + I2S TX PDM bypass hp filter or not. The option has been removed. + 0 + 1 + read-write + + + TX_PDM_SINC_OSR2 + I2S TX PDM OSR2 value + 1 + 4 + read-write + + + TX_PDM_PRESCALE + I2S TX PDM prescale for sigmadelta + 5 + 8 + read-write + + + TX_PDM_HP_IN_SHIFT + I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4 + 13 + 2 + read-write + + + TX_PDM_LP_IN_SHIFT + I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4 + 15 + 2 + read-write + + + TX_PDM_SINC_IN_SHIFT + I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4 + 17 + 2 + read-write + + + TX_PDM_SIGMADELTA_IN_SHIFT + I2S TX PDM sigmadelta scale shift number: 0:/2 , 1:x1 , 2:x2 , 3: x4 + 19 + 2 + read-write + + + TX_PDM_SIGMADELTA_DITHER2 + I2S TX PDM sigmadelta dither2 value + 21 + 1 + read-write + + + TX_PDM_SIGMADELTA_DITHER + I2S TX PDM sigmadelta dither value + 22 + 1 + read-write + + + TX_PDM_DAC_2OUT_EN + I2S TX PDM dac mode enable + 23 + 1 + read-write + + + TX_PDM_DAC_MODE_EN + I2S TX PDM dac 2channel enable + 24 + 1 + read-write + + + PCM2PDM_CONV_EN + I2S TX PDM Converter enable + 25 + 1 + read-write + + + + + TX_PCM2PDM_CONF1 + I2S TX PCM2PDM configuration register + 0x44 + 0x20 + 0x03F783C0 + + + TX_PDM_FP + I2S TX PDM Fp + 0 + 10 + read-write + + + TX_PDM_FS + I2S TX PDM Fs + 10 + 10 + read-write + + + TX_IIR_HP_MULT12_5 + The fourth parameter of PDM TX IIR_HP filter stage 2 is (504 + I2S_TX_IIR_HP_MULT12_5[2:0]) + 20 + 3 + read-write + + + TX_IIR_HP_MULT12_0 + The fourth parameter of PDM TX IIR_HP filter stage 1 is (504 + I2S_TX_IIR_HP_MULT12_0[2:0]) + 23 + 3 + read-write + + + + + RX_TDM_CTRL + I2S TX TDM mode control register + 0x50 + 0x20 + 0x0000FFFF + + + RX_TDM_PDM_CHAN0_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0: Disable, just input 0 in this channel. + 0 + 1 + read-write + + + RX_TDM_PDM_CHAN1_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0: Disable, just input 0 in this channel. + 1 + 1 + read-write + + + RX_TDM_PDM_CHAN2_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0: Disable, just input 0 in this channel. + 2 + 1 + read-write + + + RX_TDM_PDM_CHAN3_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0: Disable, just input 0 in this channel. + 3 + 1 + read-write + + + RX_TDM_PDM_CHAN4_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0: Disable, just input 0 in this channel. + 4 + 1 + read-write + + + RX_TDM_PDM_CHAN5_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0: Disable, just input 0 in this channel. + 5 + 1 + read-write + + + RX_TDM_PDM_CHAN6_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0: Disable, just input 0 in this channel. + 6 + 1 + read-write + + + RX_TDM_PDM_CHAN7_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0: Disable, just input 0 in this channel. + 7 + 1 + read-write + + + RX_TDM_CHAN8_EN + 1: Enable the valid data input of I2S RX TDM channel 8. 0: Disable, just input 0 in this channel. + 8 + 1 + read-write + + + RX_TDM_CHAN9_EN + 1: Enable the valid data input of I2S RX TDM channel 9. 0: Disable, just input 0 in this channel. + 9 + 1 + read-write + + + RX_TDM_CHAN10_EN + 1: Enable the valid data input of I2S RX TDM channel 10. 0: Disable, just input 0 in this channel. + 10 + 1 + read-write + + + RX_TDM_CHAN11_EN + 1: Enable the valid data input of I2S RX TDM channel 11. 0: Disable, just input 0 in this channel. + 11 + 1 + read-write + + + RX_TDM_CHAN12_EN + 1: Enable the valid data input of I2S RX TDM channel 12. 0: Disable, just input 0 in this channel. + 12 + 1 + read-write + + + RX_TDM_CHAN13_EN + 1: Enable the valid data input of I2S RX TDM channel 13. 0: Disable, just input 0 in this channel. + 13 + 1 + read-write + + + RX_TDM_CHAN14_EN + 1: Enable the valid data input of I2S RX TDM channel 14. 0: Disable, just input 0 in this channel. + 14 + 1 + read-write + + + RX_TDM_CHAN15_EN + 1: Enable the valid data input of I2S RX TDM channel 15. 0: Disable, just input 0 in this channel. + 15 + 1 + read-write + + + RX_TDM_TOT_CHAN_NUM + The total channel number of I2S TX TDM mode. + 16 + 4 + read-write + + + + + TX_TDM_CTRL + I2S TX TDM mode control register + 0x54 + 0x20 + 0x0000FFFF + + + TX_TDM_CHAN0_EN + 1: Enable the valid data output of I2S TX TDM channel 0. 0: Disable, just output 0 in this channel. + 0 + 1 + read-write + + + TX_TDM_CHAN1_EN + 1: Enable the valid data output of I2S TX TDM channel 1. 0: Disable, just output 0 in this channel. + 1 + 1 + read-write + + + TX_TDM_CHAN2_EN + 1: Enable the valid data output of I2S TX TDM channel 2. 0: Disable, just output 0 in this channel. + 2 + 1 + read-write + + + TX_TDM_CHAN3_EN + 1: Enable the valid data output of I2S TX TDM channel 3. 0: Disable, just output 0 in this channel. + 3 + 1 + read-write + + + TX_TDM_CHAN4_EN + 1: Enable the valid data output of I2S TX TDM channel 4. 0: Disable, just output 0 in this channel. + 4 + 1 + read-write + + + TX_TDM_CHAN5_EN + 1: Enable the valid data output of I2S TX TDM channel 5. 0: Disable, just output 0 in this channel. + 5 + 1 + read-write + + + TX_TDM_CHAN6_EN + 1: Enable the valid data output of I2S TX TDM channel 6. 0: Disable, just output 0 in this channel. + 6 + 1 + read-write + + + TX_TDM_CHAN7_EN + 1: Enable the valid data output of I2S TX TDM channel 7. 0: Disable, just output 0 in this channel. + 7 + 1 + read-write + + + TX_TDM_CHAN8_EN + 1: Enable the valid data output of I2S TX TDM channel 8. 0: Disable, just output 0 in this channel. + 8 + 1 + read-write + + + TX_TDM_CHAN9_EN + 1: Enable the valid data output of I2S TX TDM channel 9. 0: Disable, just output 0 in this channel. + 9 + 1 + read-write + + + TX_TDM_CHAN10_EN + 1: Enable the valid data output of I2S TX TDM channel 10. 0: Disable, just output 0 in this channel. + 10 + 1 + read-write + + + TX_TDM_CHAN11_EN + 1: Enable the valid data output of I2S TX TDM channel 11. 0: Disable, just output 0 in this channel. + 11 + 1 + read-write + + + TX_TDM_CHAN12_EN + 1: Enable the valid data output of I2S TX TDM channel 12. 0: Disable, just output 0 in this channel. + 12 + 1 + read-write + + + TX_TDM_CHAN13_EN + 1: Enable the valid data output of I2S TX TDM channel 13. 0: Disable, just output 0 in this channel. + 13 + 1 + read-write + + + TX_TDM_CHAN14_EN + 1: Enable the valid data output of I2S TX TDM channel 14. 0: Disable, just output 0 in this channel. + 14 + 1 + read-write + + + TX_TDM_CHAN15_EN + 1: Enable the valid data output of I2S TX TDM channel 15. 0: Disable, just output 0 in this channel. + 15 + 1 + read-write + + + TX_TDM_TOT_CHAN_NUM + The total channel number of I2S TX TDM mode. + 16 + 4 + read-write + + + TX_TDM_SKIP_MSK_EN + When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels. + 20 + 1 + read-write + + + + + RX_TIMING + I2S RX timing control register + 0x58 + 0x20 + + + RX_SD_IN_DM + The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 0 + 2 + read-write + + + RX_SD1_IN_DM + The delay mode of I2S Rx SD1 input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 4 + 2 + read-write + + + RX_SD2_IN_DM + The delay mode of I2S Rx SD2 input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 8 + 2 + read-write + + + RX_SD3_IN_DM + The delay mode of I2S Rx SD3 input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 12 + 2 + read-write + + + RX_WS_OUT_DM + The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 16 + 2 + read-write + + + RX_BCK_OUT_DM + The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 20 + 2 + read-write + + + RX_WS_IN_DM + The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 24 + 2 + read-write + + + RX_BCK_IN_DM + The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 28 + 2 + read-write + + + + + TX_TIMING + I2S TX timing control register + 0x5C + 0x20 + + + TX_SD_OUT_DM + The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 0 + 2 + read-write + + + TX_SD1_OUT_DM + The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 4 + 2 + read-write + + + TX_WS_OUT_DM + The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 16 + 2 + read-write + + + TX_BCK_OUT_DM + The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 20 + 2 + read-write + + + TX_WS_IN_DM + The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 24 + 2 + read-write + + + TX_BCK_IN_DM + The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 28 + 2 + read-write + + + + + LC_HUNG_CONF + I2S HUNG configure register. + 0x60 + 0x20 + 0x00000810 + + + LC_FIFO_TIMEOUT + the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value + 0 + 8 + read-write + + + LC_FIFO_TIMEOUT_SHIFT + The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift + 8 + 3 + read-write + + + LC_FIFO_TIMEOUT_ENA + The enable bit for FIFO timeout + 11 + 1 + read-write + + + + + RXEOF_NUM + I2S RX data number control register. + 0x64 + 0x20 + 0x00000040 + + + RX_EOF_NUM + The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel. + 0 + 12 + read-write + + + + + CONF_SIGLE_DATA + I2S signal data register + 0x68 + 0x20 + + + SINGLE_DATA + The configured constant channel data to be sent out. + 0 + 32 + read-write + + + + + STATE + I2S TX status register + 0x6C + 0x20 + 0x00000001 + + + TX_IDLE + 1: i2s_tx is idle state. 0: i2s_tx is working. + 0 + 1 + read-only + + + + + DATE + Version control register + 0x80 + 0x20 + 0x02009070 + + + DATE + I2S version control register + 0 + 28 + read-write + + + + + + + I2S1 + I2S (Inter-IC Sound) Controller 1 + I2S1 + 0x6002D000 + + 0x0 + 0x54 + registers + + + I2S1 + 26 + + + + INT_RAW + I2S interrupt raw register, valid in level. + 0xC + 0x20 + + + RX_DONE_INT_RAW + The raw interrupt status bit for the i2s_rx_done_int interrupt + 0 + 1 + read-only + + + TX_DONE_INT_RAW + The raw interrupt status bit for the i2s_tx_done_int interrupt + 1 + 1 + read-only + + + RX_HUNG_INT_RAW + The raw interrupt status bit for the i2s_rx_hung_int interrupt + 2 + 1 + read-only + + + TX_HUNG_INT_RAW + The raw interrupt status bit for the i2s_tx_hung_int interrupt + 3 + 1 + read-only + + + + + INT_ST + I2S interrupt status register. + 0x10 + 0x20 + + + RX_DONE_INT_ST + The masked interrupt status bit for the i2s_rx_done_int interrupt + 0 + 1 + read-only + + + TX_DONE_INT_ST + The masked interrupt status bit for the i2s_tx_done_int interrupt + 1 + 1 + read-only + + + RX_HUNG_INT_ST + The masked interrupt status bit for the i2s_rx_hung_int interrupt + 2 + 1 + read-only + + + TX_HUNG_INT_ST + The masked interrupt status bit for the i2s_tx_hung_int interrupt + 3 + 1 + read-only + + + + + INT_ENA + I2S interrupt enable register. + 0x14 + 0x20 + + + RX_DONE_INT_ENA + The interrupt enable bit for the i2s_rx_done_int interrupt + 0 + 1 + read-write + + + TX_DONE_INT_ENA + The interrupt enable bit for the i2s_tx_done_int interrupt + 1 + 1 + read-write + + + RX_HUNG_INT_ENA + The interrupt enable bit for the i2s_rx_hung_int interrupt + 2 + 1 + read-write + + + TX_HUNG_INT_ENA + The interrupt enable bit for the i2s_tx_hung_int interrupt + 3 + 1 + read-write + + + + + INT_CLR + I2S interrupt clear register. + 0x18 + 0x20 + + + RX_DONE_INT_CLR + Set this bit to clear the i2s_rx_done_int interrupt + 0 + 1 + write-only + + + TX_DONE_INT_CLR + Set this bit to clear the i2s_tx_done_int interrupt + 1 + 1 + write-only + + + RX_HUNG_INT_CLR + Set this bit to clear the i2s_rx_hung_int interrupt + 2 + 1 + write-only + + + TX_HUNG_INT_CLR + Set this bit to clear the i2s_tx_hung_int interrupt + 3 + 1 + write-only + + + + + RX_CONF + I2S RX configure register + 0x20 + 0x20 + 0x00009600 + + + RX_RESET + Set this bit to reset receiver + 0 + 1 + write-only + + + RX_FIFO_RESET + Set this bit to reset Rx AFIFO + 1 + 1 + write-only + + + RX_START + Set this bit to start receiving data + 2 + 1 + read-write + + + RX_SLAVE_MOD + Set this bit to enable slave receiver mode + 3 + 1 + read-write + + + RX_MONO + Set this bit to enable receiver in mono mode + 5 + 1 + read-write + + + RX_BIG_ENDIAN + I2S Rx byte endian, 1: low addr value to high addr. 0: low addr with low addr value. + 7 + 1 + read-write + + + RX_UPDATE + Set 1 to update I2S RX registers from APB clock domain to I2S RX clock domain. This bit will be cleared by hardware after update register done. + 8 + 1 + read-write + + + RX_MONO_FST_VLD + 1: The first channel data value is valid in I2S RX mono mode. 0: The second channel data value is valid in I2S RX mono mode. + 9 + 1 + read-write + + + RX_PCM_CONF + I2S RX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. & + 10 + 2 + read-write + + + RX_PCM_BYPASS + Set this bit to bypass Compress/Decompress module for received data. + 12 + 1 + read-write + + + RX_STOP_MODE + 0 : I2S Rx only stop when reg_rx_start is cleared. 1: Stop when reg_rx_start is 0 or in_suc_eof is 1. 2: Stop I2S RX when reg_rx_start is 0 or RX FIFO is full. + 13 + 2 + read-write + + + RX_LEFT_ALIGN + 1: I2S RX left alignment mode. 0: I2S RX right alignment mode. + 15 + 1 + read-write + + + RX_24_FILL_EN + 1: store 24 channel bits to 32 bits. 0:store 24 channel bits to 24 bits. + 16 + 1 + read-write + + + RX_WS_IDLE_POL + 0: WS should be 0 when receiving left channel data, and WS is 1in right channel. 1: WS should be 1 when receiving left channel data, and WS is 0in right channel. + 17 + 1 + read-write + + + RX_BIT_ORDER + I2S Rx bit endian. 1:small endian, the LSB is received first. 0:big endian, the MSB is received first. + 18 + 1 + read-write + + + RX_TDM_EN + 1: Enable I2S TDM Rx mode . 0: Disable. + 19 + 1 + read-write + + + RX_PDM_EN + 1: Enable I2S PDM Rx mode . 0: Disable. + 20 + 1 + read-write + + + + + TX_CONF + I2S TX configure register + 0x24 + 0x20 + 0x0000B200 + + + TX_RESET + Set this bit to reset transmitter + 0 + 1 + write-only + + + TX_FIFO_RESET + Set this bit to reset Tx AFIFO + 1 + 1 + write-only + + + TX_START + Set this bit to start transmitting data + 2 + 1 + read-write + + + TX_SLAVE_MOD + Set this bit to enable slave transmitter mode + 3 + 1 + read-write + + + TX_MONO + Set this bit to enable transmitter in mono mode + 5 + 1 + read-write + + + TX_CHAN_EQUAL + 1: The value of Left channel data is equal to the value of right channel data in I2S TX mono mode or TDM channel select mode. 0: The invalid channel data is reg_i2s_single_data in I2S TX mono mode or TDM channel select mode. + 6 + 1 + read-write + + + TX_BIG_ENDIAN + I2S Tx byte endian, 1: low addr value to high addr. 0: low addr with low addr value. + 7 + 1 + read-write + + + TX_UPDATE + Set 1 to update I2S TX registers from APB clock domain to I2S TX clock domain. This bit will be cleared by hardware after update register done. + 8 + 1 + read-write + + + TX_MONO_FST_VLD + 1: The first channel data value is valid in I2S TX mono mode. 0: The second channel data value is valid in I2S TX mono mode. + 9 + 1 + read-write + + + TX_PCM_CONF + I2S TX compress/decompress configuration bit. & 0 (atol): A-Law decompress, 1 (ltoa) : A-Law compress, 2 (utol) : u-Law decompress, 3 (ltou) : u-Law compress. & + 10 + 2 + read-write + + + TX_PCM_BYPASS + Set this bit to bypass Compress/Decompress module for transmitted data. + 12 + 1 + read-write + + + TX_STOP_EN + Set this bit to stop disable output BCK signal and WS signal when tx FIFO is emtpy + 13 + 1 + read-write + + + TX_LEFT_ALIGN + 1: I2S TX left alignment mode. 0: I2S TX right alignment mode. + 15 + 1 + read-write + + + TX_24_FILL_EN + 1: Sent 32 bits in 24 channel bits mode. 0: Sent 24 bits in 24 channel bits mode + 16 + 1 + read-write + + + TX_WS_IDLE_POL + 0: WS should be 0 when sending left channel data, and WS is 1in right channel. 1: WS should be 1 when sending left channel data, and WS is 0in right channel. + 17 + 1 + read-write + + + TX_BIT_ORDER + I2S Tx bit endian. 1:small endian, the LSB is sent first. 0:big endian, the MSB is sent first. + 18 + 1 + read-write + + + TX_TDM_EN + 1: Enable I2S TDM Tx mode . 0: Disable. + 19 + 1 + read-write + + + TX_PDM_EN + 1: Enable I2S PDM Tx mode . 0: Disable. + 20 + 1 + read-write + + + TX_CHAN_MOD + I2S transmitter channel mode configuration bits. + 24 + 3 + read-write + + + SIG_LOOPBACK + Enable signal loop back mode with transmitter module and receiver module sharing the same WS and BCK signals. + 27 + 1 + read-write + + + + + RX_CONF1 + I2S RX configure register 1 + 0x28 + 0x20 + 0x2F3DE300 + + + RX_TDM_WS_WIDTH + The width of rx_ws_out in TDM mode is (I2S_RX_TDM_WS_WIDTH[6:0] +1) * T_bck + 0 + 7 + read-write + + + RX_BCK_DIV_NUM + Bit clock configuration bits in receiver mode. + 7 + 6 + read-write + + + RX_BITS_MOD + Set the bits to configure the valid data bit length of I2S receiver channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode. + 13 + 5 + read-write + + + RX_HALF_SAMPLE_BITS + I2S Rx half sample bits -1. + 18 + 6 + read-write + + + RX_TDM_CHAN_BITS + The Rx bit number for each channel minus 1in TDM mode. + 24 + 5 + read-write + + + RX_MSB_SHIFT + Set this bit to enable receiver in Phillips standard mode + 29 + 1 + read-write + + + + + TX_CONF1 + I2S TX configure register 1 + 0x2C + 0x20 + 0x6F3DE300 + + + TX_TDM_WS_WIDTH + The width of tx_ws_out in TDM mode is (I2S_TX_TDM_WS_WIDTH[6:0] +1) * T_bck + 0 + 7 + read-write + + + TX_BCK_DIV_NUM + Bit clock configuration bits in transmitter mode. + 7 + 6 + read-write + + + TX_BITS_MOD + Set the bits to configure the valid data bit length of I2S transmitter channel. 7: all the valid channel data is in 8-bit-mode. 15: all the valid channel data is in 16-bit-mode. 23: all the valid channel data is in 24-bit-mode. 31:all the valid channel data is in 32-bit-mode. + 13 + 5 + read-write + + + TX_HALF_SAMPLE_BITS + I2S Tx half sample bits -1. + 18 + 6 + read-write + + + TX_TDM_CHAN_BITS + The Tx bit number for each channel minus 1in TDM mode. + 24 + 5 + read-write + + + TX_MSB_SHIFT + Set this bit to enable transmitter in Phillips standard mode + 29 + 1 + read-write + + + TX_BCK_NO_DLY + 1: BCK is not delayed to generate pos/neg edge in master mode. 0: BCK is delayed to generate pos/neg edge in master mode. + 30 + 1 + read-write + + + + + RX_CLKM_CONF + I2S RX clock configure register + 0x30 + 0x20 + 0x00000002 + + + RX_CLKM_DIV_NUM + Integral I2S clock divider value + 0 + 8 + read-write + + + RX_CLK_ACTIVE + I2S Rx module clock enable signal. + 26 + 1 + read-write + + + RX_CLK_SEL + Select I2S Rx module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in. + 27 + 2 + read-write + + + MCLK_SEL + 0: UseI2S Tx module clock as I2S_MCLK_OUT. 1: UseI2S Rx module clock as I2S_MCLK_OUT. + 29 + 1 + read-write + + + + + TX_CLKM_CONF + I2S TX clock configure register + 0x34 + 0x20 + 0x00000002 + + + TX_CLKM_DIV_NUM + Integral I2S TX clock divider value. f_I2S_CLK = f_I2S_CLK_S/(N+b/a). There will be (a-b) * n-div and b * (n+1)-div. So the average combination will be: for b <= a/2, z * [x * n-div + (n+1)-div] + y * n-div. For b > a/2, z * [n-div + x * (n+1)-div] + y * (n+1)-div. + 0 + 8 + read-write + + + TX_CLK_ACTIVE + I2S Tx module clock enable signal. + 26 + 1 + read-write + + + TX_CLK_SEL + Select I2S Tx module source clock. 0: XTAL clock. 1: APLL. 2: CLK160. 3: I2S_MCLK_in. + 27 + 2 + read-write + + + CLK_EN + Set this bit to enable clk gate + 29 + 1 + read-write + + + + + RX_CLKM_DIV_CONF + I2S RX module clock divider configure register + 0x38 + 0x20 + 0x00000200 + + + RX_CLKM_DIV_Z + For b <= a/2, the value of I2S_RX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_RX_CLKM_DIV_Z is (a-b). + 0 + 9 + read-write + + + RX_CLKM_DIV_Y + For b <= a/2, the value of I2S_RX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_RX_CLKM_DIV_Y is (a%(a-b)). + 9 + 9 + read-write + + + RX_CLKM_DIV_X + For b <= a/2, the value of I2S_RX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_RX_CLKM_DIV_X is (a/(a-b)) - 1. + 18 + 9 + read-write + + + RX_CLKM_DIV_YN1 + For b <= a/2, the value of I2S_RX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_RX_CLKM_DIV_YN1 is 1. + 27 + 1 + read-write + + + + + TX_CLKM_DIV_CONF + I2S TX module clock divider configure register + 0x3C + 0x20 + 0x00000200 + + + TX_CLKM_DIV_Z + For b <= a/2, the value of I2S_TX_CLKM_DIV_Z is b. For b > a/2, the value of I2S_TX_CLKM_DIV_Z is (a-b). + 0 + 9 + read-write + + + TX_CLKM_DIV_Y + For b <= a/2, the value of I2S_TX_CLKM_DIV_Y is (a%b) . For b > a/2, the value of I2S_TX_CLKM_DIV_Y is (a%(a-b)). + 9 + 9 + read-write + + + TX_CLKM_DIV_X + For b <= a/2, the value of I2S_TX_CLKM_DIV_X is (a/b) - 1. For b > a/2, the value of I2S_TX_CLKM_DIV_X is (a/(a-b)) - 1. + 18 + 9 + read-write + + + TX_CLKM_DIV_YN1 + For b <= a/2, the value of I2S_TX_CLKM_DIV_YN1 is 0 . For b > a/2, the value of I2S_TX_CLKM_DIV_YN1 is 1. + 27 + 1 + read-write + + + + + RX_TDM_CTRL + I2S TX TDM mode control register + 0x50 + 0x20 + 0x0000FFFF + + + RX_TDM_PDM_CHAN0_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 0. 0: Disable, just input 0 in this channel. + 0 + 1 + read-write + + + RX_TDM_PDM_CHAN1_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 1. 0: Disable, just input 0 in this channel. + 1 + 1 + read-write + + + RX_TDM_PDM_CHAN2_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 2. 0: Disable, just input 0 in this channel. + 2 + 1 + read-write + + + RX_TDM_PDM_CHAN3_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 3. 0: Disable, just input 0 in this channel. + 3 + 1 + read-write + + + RX_TDM_PDM_CHAN4_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 4. 0: Disable, just input 0 in this channel. + 4 + 1 + read-write + + + RX_TDM_PDM_CHAN5_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 5. 0: Disable, just input 0 in this channel. + 5 + 1 + read-write + + + RX_TDM_PDM_CHAN6_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 6. 0: Disable, just input 0 in this channel. + 6 + 1 + read-write + + + RX_TDM_PDM_CHAN7_EN + 1: Enable the valid data input of I2S RX TDM or PDM channel 7. 0: Disable, just input 0 in this channel. + 7 + 1 + read-write + + + RX_TDM_CHAN8_EN + 1: Enable the valid data input of I2S RX TDM channel 8. 0: Disable, just input 0 in this channel. + 8 + 1 + read-write + + + RX_TDM_CHAN9_EN + 1: Enable the valid data input of I2S RX TDM channel 9. 0: Disable, just input 0 in this channel. + 9 + 1 + read-write + + + RX_TDM_CHAN10_EN + 1: Enable the valid data input of I2S RX TDM channel 10. 0: Disable, just input 0 in this channel. + 10 + 1 + read-write + + + RX_TDM_CHAN11_EN + 1: Enable the valid data input of I2S RX TDM channel 11. 0: Disable, just input 0 in this channel. + 11 + 1 + read-write + + + RX_TDM_CHAN12_EN + 1: Enable the valid data input of I2S RX TDM channel 12. 0: Disable, just input 0 in this channel. + 12 + 1 + read-write + + + RX_TDM_CHAN13_EN + 1: Enable the valid data input of I2S RX TDM channel 13. 0: Disable, just input 0 in this channel. + 13 + 1 + read-write + + + RX_TDM_CHAN14_EN + 1: Enable the valid data input of I2S RX TDM channel 14. 0: Disable, just input 0 in this channel. + 14 + 1 + read-write + + + RX_TDM_CHAN15_EN + 1: Enable the valid data input of I2S RX TDM channel 15. 0: Disable, just input 0 in this channel. + 15 + 1 + read-write + + + RX_TDM_TOT_CHAN_NUM + The total channel number of I2S TX TDM mode. + 16 + 4 + read-write + + + + + TX_TDM_CTRL + I2S TX TDM mode control register + 0x54 + 0x20 + 0x0000FFFF + + + TX_TDM_CHAN0_EN + 1: Enable the valid data output of I2S TX TDM channel 0. 0: Disable, just output 0 in this channel. + 0 + 1 + read-write + + + TX_TDM_CHAN1_EN + 1: Enable the valid data output of I2S TX TDM channel 1. 0: Disable, just output 0 in this channel. + 1 + 1 + read-write + + + TX_TDM_CHAN2_EN + 1: Enable the valid data output of I2S TX TDM channel 2. 0: Disable, just output 0 in this channel. + 2 + 1 + read-write + + + TX_TDM_CHAN3_EN + 1: Enable the valid data output of I2S TX TDM channel 3. 0: Disable, just output 0 in this channel. + 3 + 1 + read-write + + + TX_TDM_CHAN4_EN + 1: Enable the valid data output of I2S TX TDM channel 4. 0: Disable, just output 0 in this channel. + 4 + 1 + read-write + + + TX_TDM_CHAN5_EN + 1: Enable the valid data output of I2S TX TDM channel 5. 0: Disable, just output 0 in this channel. + 5 + 1 + read-write + + + TX_TDM_CHAN6_EN + 1: Enable the valid data output of I2S TX TDM channel 6. 0: Disable, just output 0 in this channel. + 6 + 1 + read-write + + + TX_TDM_CHAN7_EN + 1: Enable the valid data output of I2S TX TDM channel 7. 0: Disable, just output 0 in this channel. + 7 + 1 + read-write + + + TX_TDM_CHAN8_EN + 1: Enable the valid data output of I2S TX TDM channel 8. 0: Disable, just output 0 in this channel. + 8 + 1 + read-write + + + TX_TDM_CHAN9_EN + 1: Enable the valid data output of I2S TX TDM channel 9. 0: Disable, just output 0 in this channel. + 9 + 1 + read-write + + + TX_TDM_CHAN10_EN + 1: Enable the valid data output of I2S TX TDM channel 10. 0: Disable, just output 0 in this channel. + 10 + 1 + read-write + + + TX_TDM_CHAN11_EN + 1: Enable the valid data output of I2S TX TDM channel 11. 0: Disable, just output 0 in this channel. + 11 + 1 + read-write + + + TX_TDM_CHAN12_EN + 1: Enable the valid data output of I2S TX TDM channel 12. 0: Disable, just output 0 in this channel. + 12 + 1 + read-write + + + TX_TDM_CHAN13_EN + 1: Enable the valid data output of I2S TX TDM channel 13. 0: Disable, just output 0 in this channel. + 13 + 1 + read-write + + + TX_TDM_CHAN14_EN + 1: Enable the valid data output of I2S TX TDM channel 14. 0: Disable, just output 0 in this channel. + 14 + 1 + read-write + + + TX_TDM_CHAN15_EN + 1: Enable the valid data output of I2S TX TDM channel 15. 0: Disable, just output 0 in this channel. + 15 + 1 + read-write + + + TX_TDM_TOT_CHAN_NUM + The total channel number of I2S TX TDM mode. + 16 + 4 + read-write + + + TX_TDM_SKIP_MSK_EN + When DMA TX buffer stores the data of (REG_TX_TDM_TOT_CHAN_NUM + 1) channels, and only the data of the enabled channels is sent, then this bit should be set. Clear it when all the data stored in DMA TX buffer is for enabled channels. + 20 + 1 + read-write + + + + + RX_TIMING + I2S RX timing control register + 0x58 + 0x20 + + + RX_SD_IN_DM + The delay mode of I2S Rx SD input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 0 + 2 + read-write + + + RX_WS_OUT_DM + The delay mode of I2S Rx WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 16 + 2 + read-write + + + RX_BCK_OUT_DM + The delay mode of I2S Rx BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 20 + 2 + read-write + + + RX_WS_IN_DM + The delay mode of I2S Rx WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 24 + 2 + read-write + + + RX_BCK_IN_DM + The delay mode of I2S Rx BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 28 + 2 + read-write + + + + + TX_TIMING + I2S TX timing control register + 0x5C + 0x20 + + + TX_SD_OUT_DM + The delay mode of I2S TX SD output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 0 + 2 + read-write + + + TX_SD1_OUT_DM + The delay mode of I2S TX SD1 output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 4 + 2 + read-write + + + TX_WS_OUT_DM + The delay mode of I2S TX WS output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 16 + 2 + read-write + + + TX_BCK_OUT_DM + The delay mode of I2S TX BCK output signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 20 + 2 + read-write + + + TX_WS_IN_DM + The delay mode of I2S TX WS input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 24 + 2 + read-write + + + TX_BCK_IN_DM + The delay mode of I2S TX BCK input signal. 0: bypass. 1: delay by pos edge. 2: delay by neg edge. 3: not used. + 28 + 2 + read-write + + + + + LC_HUNG_CONF + I2S HUNG configure register. + 0x60 + 0x20 + 0x00000810 + + + LC_FIFO_TIMEOUT + the i2s_tx_hung_int interrupt or the i2s_rx_hung_int interrupt will be triggered when fifo hung counter is equal to this value + 0 + 8 + read-write + + + LC_FIFO_TIMEOUT_SHIFT + The bits are used to scale tick counter threshold. The tick counter is reset when counter value >= 88000/2^i2s_lc_fifo_timeout_shift + 8 + 3 + read-write + + + LC_FIFO_TIMEOUT_ENA + The enable bit for FIFO timeout + 11 + 1 + read-write + + + + + RXEOF_NUM + I2S RX data number control register. + 0x64 + 0x20 + 0x00000040 + + + RX_EOF_NUM + The receive data bit length is (I2S_RX_BITS_MOD[4:0] + 1) * (REG_RX_EOF_NUM[11:0] + 1) . It will trigger in_suc_eof interrupt in the configured DMA RX channel. + 0 + 12 + read-write + + + + + CONF_SIGLE_DATA + I2S signal data register + 0x68 + 0x20 + + + SINGLE_DATA + The configured constant channel data to be sent out. + 0 + 32 + read-write + + + + + STATE + I2S TX status register + 0x6C + 0x20 + 0x00000001 + + + TX_IDLE + 1: i2s_tx is idle state. 0: i2s_tx is working. + 0 + 1 + read-only + + + + + DATE + Version control register + 0x80 + 0x20 + 0x02009070 + + + DATE + I2S version control register + 0 + 28 + read-write + + + + + + + INTERRUPT_CORE0 + Interrupt Controller (Core 0) + INTERRUPT_CORE0 + 0x600C2000 + + 0x0 + 0x1A4 + registers + + + WIFI_MAC + 0 + + + WIFI_NMI + 1 + + + WIFI_PWR + 2 + + + WIFI_BB + 3 + + + BT_MAC + 4 + + + BT_BB + 5 + + + BT_BB_NMI + 6 + + + RWBT + 7 + + + RWBLE + 8 + + + RWBT_NMI + 9 + + + RWBLE_NMI + 10 + + + SLC0 + 12 + + + SLC1 + 13 + + + SDIO_HOST + 30 + + + WDT + 47 + + + CACHE_IA + 56 + + + DCACHE_PRELOAD0 + 61 + + + ICACHE_PRELOAD0 + 62 + + + DCACHE_SYNC0 + 63 + + + ICACHE_SYNC0 + 64 + + + FROM_CPU_INTR0 + 79 + + + FROM_CPU_INTR1 + 80 + + + FROM_CPU_INTR2 + 81 + + + FROM_CPU_INTR3 + 82 + + + CORE0_IRAM0_PMS + 85 + + + CORE0_DRAM0_PMS + 86 + + + CORE0_PIF_PMS + 87 + + + CORE0_PIF_PMS_SIZE + 88 + + + CACHE_CORE0_ACS + 94 + + + + PRO_MAC_INTR_MAP + mac interrupt configuration register + 0x0 + 0x20 + 0x00000010 + + + MAC_INTR_MAP + this register used to map mac interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + MAC_NMI_MAP + mac_nmi interrupt configuration register + 0x4 + 0x20 + 0x00000010 + + + MAC_NMI_MAP + this register used to map_nmi interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PWR_INTR_MAP + pwr interrupt configuration register + 0x8 + 0x20 + 0x00000010 + + + PWR_INTR_MAP + this register used to map pwr interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + BB_INT_MAP + bb interrupt configuration register + 0xC + 0x20 + 0x00000010 + + + BB_INT_MAP + this register used to map bb interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + BT_MAC_INT_MAP + bb_mac interrupt configuration register + 0x10 + 0x20 + 0x00000010 + + + BT_MAC_INT_MAP + this register used to map bb_mac interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + BT_BB_INT_MAP + bt_bb interrupt configuration register + 0x14 + 0x20 + 0x00000010 + + + BT_BB_INT_MAP + this register used to map bt_bb interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + BT_BB_NMI_MAP + bt_bb_nmi interrupt configuration register + 0x18 + 0x20 + 0x00000010 + + + BT_BB_NMI_MAP + this register used to map bb_bt_nmi interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + RWBT_IRQ_MAP + rwbt_irq interrupt configuration register + 0x1C + 0x20 + 0x00000010 + + + RWBT_IRQ_MAP + this register used to map rwbt_irq interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + RWBLE_IRQ_MAP + rwble_irq interrupt configuration register + 0x20 + 0x20 + 0x00000010 + + + RWBLE_IRQ_MAP + this register used to map rwble_irq interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + RWBT_NMI_MAP + rwbt_nmi interrupt configuration register + 0x24 + 0x20 + 0x00000010 + + + RWBT_NMI_MAP + this register used to map mac rwbt_nmi to one of core0's external interrupt + 0 + 5 + read-write + + + + + RWBLE_NMI_MAP + rwble_nmi interrupt configuration register + 0x28 + 0x20 + 0x00000010 + + + RWBLE_NMI_MAP + this register used to map rwble_nmi interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + I2C_MST_INT_MAP + i2c_mst interrupt configuration register + 0x2C + 0x20 + 0x00000010 + + + I2C_MST_INT_MAP + this register used to map i2c_mst interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SLC0_INTR_MAP + slc0 interrupt configuration register + 0x30 + 0x20 + 0x00000010 + + + SLC0_INTR_MAP + this register used to map slc0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SLC1_INTR_MAP + slc1 interrupt configuration register + 0x34 + 0x20 + 0x00000010 + + + SLC1_INTR_MAP + this register used to map slc1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + UHCI0_INTR_MAP + uhci0 interrupt configuration register + 0x38 + 0x20 + 0x00000010 + + + UHCI0_INTR_MAP + this register used to map uhci0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + UHCI1_INTR_MAP + uhci1 interrupt configuration register + 0x3C + 0x20 + 0x00000010 + + + UHCI1_INTR_MAP + this register used to map uhci1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_PRO_MAP + gpio_interrupt_pro interrupt configuration register + 0x40 + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_PRO_MAP + this register used to map gpio_interrupt_pro interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_PRO_NMI_MAP + gpio_interrupt_pro_nmi interrupt configuration register + 0x44 + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_PRO_NMI_MAP + this register used to map gpio_interrupt_pro_nmi interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_APP_MAP + gpio_interrupt_app interrupt configuration register + 0x48 + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_APP_MAP + this register used to map gpio_interrupt_app interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_APP_NMI_MAP + gpio_interrupt_app_nmi interrupt configuration register + 0x4C + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_APP_NMI_MAP + this register used to map gpio_interrupt_app_nmi interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_1_MAP + spi_intr_1 interrupt configuration register + 0x50 + 0x20 + 0x00000010 + + + SPI_INTR_1_MAP + this register used to map spi_intr_1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_2_MAP + spi_intr_2 interrupt configuration register + 0x54 + 0x20 + 0x00000010 + + + SPI_INTR_2_MAP + this register used to map spi_intr_2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_3_MAP + spi_intr_3 interrupt configuration register + 0x58 + 0x20 + 0x00000010 + + + SPI_INTR_3_MAP + this register used to map spi_intr_3 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_4_MAP + spi_intr_4 interrupt configuration register + 0x5C + 0x20 + 0x00000010 + + + SPI_INTR_4_MAP + this register used to map spi_intr_4 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + LCD_CAM_INT_MAP + lcd_cam interrupt configuration register + 0x60 + 0x20 + 0x00000010 + + + LCD_CAM_INT_MAP + this register used to map lcd_cam interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + I2S0_INT_MAP + i2s0 interrupt configuration register + 0x64 + 0x20 + 0x00000010 + + + I2S0_INT_MAP + this register used to map i2s0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + I2S1_INT_MAP + i2s1 interrupt configuration register + 0x68 + 0x20 + 0x00000010 + + + I2S1_INT_MAP + this register used to map i2s1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + UART_INTR_MAP + uart interrupt configuration register + 0x6C + 0x20 + 0x00000010 + + + UART_INTR_MAP + this register used to map uart interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + UART1_INTR_MAP + uart1 interrupt configuration register + 0x70 + 0x20 + 0x00000010 + + + UART1_INTR_MAP + this register used to map uart1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + UART2_INTR_MAP + uart2 interrupt configuration register + 0x74 + 0x20 + 0x00000010 + + + UART2_INTR_MAP + this register used to map uart2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SDIO_HOST_INTERRUPT_MAP + sdio_host interrupt configuration register + 0x78 + 0x20 + 0x00000010 + + + SDIO_HOST_INTERRUPT_MAP + this register used to map sdio_host interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PWM0_INTR_MAP + pwm0 interrupt configuration register + 0x7C + 0x20 + 0x00000010 + + + PWM0_INTR_MAP + this register used to map pwm0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PWM1_INTR_MAP + pwm1 interrupt configuration register + 0x80 + 0x20 + 0x00000010 + + + PWM1_INTR_MAP + this register used to map pwm1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PWM2_INTR_MAP + pwm2 interrupt configuration register + 0x84 + 0x20 + 0x00000010 + + + PWM2_INTR_MAP + this register used to map pwm2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PWM3_INTR_MAP + pwm3 interrupt configuration register + 0x88 + 0x20 + 0x00000010 + + + PWM3_INTR_MAP + this register used to map pwm3 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + LEDC_INT_MAP + ledc interrupt configuration register + 0x8C + 0x20 + 0x00000010 + + + LEDC_INT_MAP + this register used to map ledc interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + EFUSE_INT_MAP + efuse interrupt configuration register + 0x90 + 0x20 + 0x00000010 + + + EFUSE_INT_MAP + this register used to map efuse interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CAN_INT_MAP + can interrupt configuration register + 0x94 + 0x20 + 0x00000010 + + + CAN_INT_MAP + this register used to map can interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + USB_INTR_MAP + usb interrupt configuration register + 0x98 + 0x20 + 0x00000010 + + + USB_INTR_MAP + this register used to map usb interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + RTC_CORE_INTR_MAP + rtc_core interrupt configuration register + 0x9C + 0x20 + 0x00000010 + + + RTC_CORE_INTR_MAP + this register used to map rtc_core interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + RMT_INTR_MAP + rmt interrupt configuration register + 0xA0 + 0x20 + 0x00000010 + + + RMT_INTR_MAP + this register used to map rmt interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PCNT_INTR_MAP + pcnt interrupt configuration register + 0xA4 + 0x20 + 0x00000010 + + + PCNT_INTR_MAP + this register used to map pcnt interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + I2C_EXT0_INTR_MAP + i2c_ext0 interrupt configuration register + 0xA8 + 0x20 + 0x00000010 + + + I2C_EXT0_INTR_MAP + this register used to map i2c_ext0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + I2C_EXT1_INTR_MAP + i2c_ext1 interrupt configuration register + 0xAC + 0x20 + 0x00000010 + + + I2C_EXT1_INTR_MAP + this register used to map i2c_ext1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI2_DMA_INT_MAP + spi2_dma interrupt configuration register + 0xB0 + 0x20 + 0x00000010 + + + SPI2_DMA_INT_MAP + this register used to map spi2_dma interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI3_DMA_INT_MAP + spi3_dma interrupt configuration register + 0xB4 + 0x20 + 0x00000010 + + + SPI3_DMA_INT_MAP + this register used to map spi3_dma interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI4_DMA_INT_MAP + spi4_dma interrupt configuration register + 0xB8 + 0x20 + 0x00000010 + + + SPI4_DMA_INT_MAP + this register used to map spi4_dma interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + WDG_INT_MAP + wdg interrupt configuration register + 0xBC + 0x20 + 0x00000010 + + + WDG_INT_MAP + this register used to map wdg interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TIMER_INT1_MAP + timer_int1 interrupt configuration register + 0xC0 + 0x20 + 0x00000010 + + + TIMER_INT1_MAP + this register used to map timer_int1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TIMER_INT2_MAP + timer_int2 interrupt configuration register + 0xC4 + 0x20 + 0x00000010 + + + TIMER_INT2_MAP + this register used to map timer_int2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TG_T0_INT_MAP + tg_t0 interrupt configuration register + 0xC8 + 0x20 + 0x00000010 + + + TG_T0_INT_MAP + this register used to map tg_t0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TG_T1_INT_MAP + tg_t1 interrupt configuration register + 0xCC + 0x20 + 0x00000010 + + + TG_T1_INT_MAP + this register used to map tg_t1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TG_WDT_INT_MAP + tg_wdt interrupt configuration register + 0xD0 + 0x20 + 0x00000010 + + + TG_WDT_INT_MAP + this register used to map rg_wdt interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TG1_T0_INT_MAP + tg1_t0 interrupt configuration register + 0xD4 + 0x20 + 0x00000010 + + + TG1_T0_INT_MAP + this register used to map tg1_t0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TG1_T1_INT_MAP + tg1_t1 interrupt configuration register + 0xD8 + 0x20 + 0x00000010 + + + TG1_T1_INT_MAP + this register used to map tg1_t1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + TG1_WDT_INT_MAP + tg1_wdt interrupt configuration register + 0xDC + 0x20 + 0x00000010 + + + TG1_WDT_INT_MAP + this register used to map tg1_wdt interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CACHE_IA_INT_MAP + cache_ia interrupt configuration register + 0xE0 + 0x20 + 0x00000010 + + + CACHE_IA_INT_MAP + this register used to map cache_ia interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SYSTIMER_TARGET0_INT_MAP + systimer_target0 interrupt configuration register + 0xE4 + 0x20 + 0x00000010 + + + SYSTIMER_TARGET0_INT_MAP + this register used to map systimer_target0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SYSTIMER_TARGET1_INT_MAP + systimer_target1 interrupt configuration register + 0xE8 + 0x20 + 0x00000010 + + + SYSTIMER_TARGET1_INT_MAP + this register used to map systimer_target1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SYSTIMER_TARGET2_INT_MAP + systimer_target2 interrupt configuration register + 0xEC + 0x20 + 0x00000010 + + + SYSTIMER_TARGET2_INT_MAP + this register used to map systimer_target2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SPI_MEM_REJECT_INTR_MAP + spi_mem_reject interrupt configuration register + 0xF0 + 0x20 + 0x00000010 + + + SPI_MEM_REJECT_INTR_MAP + this register used to map spi_mem_reject interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DCACHE_PRELOAD_INT_MAP + dcache_prelaod interrupt configuration register + 0xF4 + 0x20 + 0x00000010 + + + DCACHE_PRELOAD_INT_MAP + this register used to map dcache_prelaod interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + ICACHE_PRELOAD_INT_MAP + icache_preload interrupt configuration register + 0xF8 + 0x20 + 0x00000010 + + + ICACHE_PRELOAD_INT_MAP + this register used to map icache_preload interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DCACHE_SYNC_INT_MAP + dcache_sync interrupt configuration register + 0xFC + 0x20 + 0x00000010 + + + DCACHE_SYNC_INT_MAP + this register used to map dcache_sync interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + ICACHE_SYNC_INT_MAP + icache_sync interrupt configuration register + 0x100 + 0x20 + 0x00000010 + + + ICACHE_SYNC_INT_MAP + this register used to map icache_sync interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + APB_ADC_INT_MAP + apb_adc interrupt configuration register + 0x104 + 0x20 + 0x00000010 + + + APB_ADC_INT_MAP + this register used to map apb_adc interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH0_INT_MAP + dma_in_ch0 interrupt configuration register + 0x108 + 0x20 + 0x00000010 + + + DMA_IN_CH0_INT_MAP + this register used to map dma_in_ch0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH1_INT_MAP + dma_in_ch1 interrupt configuration register + 0x10C + 0x20 + 0x00000010 + + + DMA_IN_CH1_INT_MAP + this register used to map dma_in_ch1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH2_INT_MAP + dma_in_ch2 interrupt configuration register + 0x110 + 0x20 + 0x00000010 + + + DMA_IN_CH2_INT_MAP + this register used to map dma_in_ch2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH3_INT_MAP + dma_in_ch3 interrupt configuration register + 0x114 + 0x20 + 0x00000010 + + + DMA_IN_CH3_INT_MAP + this register used to map dma_in_ch3 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH4_INT_MAP + dma_in_ch4 interrupt configuration register + 0x118 + 0x20 + 0x00000010 + + + DMA_IN_CH4_INT_MAP + this register used to map dma_in_ch4 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH0_INT_MAP + dma_out_ch0 interrupt configuration register + 0x11C + 0x20 + 0x00000010 + + + DMA_OUT_CH0_INT_MAP + this register used to map dma_out_ch0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH1_INT_MAP + dma_out_ch1 interrupt configuration register + 0x120 + 0x20 + 0x00000010 + + + DMA_OUT_CH1_INT_MAP + this register used to map dma_out_ch1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH2_INT_MAP + dma_out_ch2 interrupt configuration register + 0x124 + 0x20 + 0x00000010 + + + DMA_OUT_CH2_INT_MAP + this register used to map dma_out_ch2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH3_INT_MAP + dma_out_ch3 interrupt configuration register + 0x128 + 0x20 + 0x00000010 + + + DMA_OUT_CH3_INT_MAP + this register used to map dma_out_ch3 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH4_INT_MAP + dma_out_ch4 interrupt configuration register + 0x12C + 0x20 + 0x00000010 + + + DMA_OUT_CH4_INT_MAP + this register used to map dma_out_ch4 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + RSA_INT_MAP + rsa interrupt configuration register + 0x130 + 0x20 + 0x00000010 + + + RSA_INT_MAP + this register used to map rsa interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + AES_INT_MAP + aes interrupt configuration register + 0x134 + 0x20 + 0x00000010 + + + AES_INT_MAP + this register used to map aes interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + SHA_INT_MAP + sha interrupt configuration register + 0x138 + 0x20 + 0x00000010 + + + SHA_INT_MAP + this register used to map sha interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_0_MAP + cpu_intr_from_cpu_0 interrupt configuration register + 0x13C + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_0_MAP + this register used to map cpu_intr_from_cpu_0 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_1_MAP + cpu_intr_from_cpu_1 interrupt configuration register + 0x140 + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_1_MAP + this register used to map cpu_intr_from_cpu_1 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_2_MAP + cpu_intr_from_cpu_2 interrupt configuration register + 0x144 + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_2_MAP + this register used to map cpu_intr_from_cpu_2 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_3_MAP + cpu_intr_from_cpu_3 interrupt configuration register + 0x148 + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_3_MAP + this register used to map cpu_intr_from_cpu_3 interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + ASSIST_DEBUG_INTR_MAP + assist_debug interrupt configuration register + 0x14C + 0x20 + 0x00000010 + + + ASSIST_DEBUG_INTR_MAP + this register used to map assist_debug interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP + dma_pms_monitor_violatile interrupt configuration register + 0x150 + 0x20 + 0x00000010 + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map dma_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core0_IRam0_pms_monitor_violatile interrupt configuration register + 0x154 + 0x20 + 0x00000010 + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core0_IRam0_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core0_DRam0_pms_monitor_violatile interrupt configuration register + 0x158 + 0x20 + 0x00000010 + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core0_DRam0_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + core0_PIF_pms_monitor_violatile interrupt configuration register + 0x15C + 0x20 + 0x00000010 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core0_PIF_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + core0_PIF_pms_monitor_violatile_size interrupt configuration register + 0x160 + 0x20 + 0x00000010 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + this register used to map core0_PIF_pms_monitor_violatile_size interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core1_IRam0_pms_monitor_violatile interrupt configuration register + 0x164 + 0x20 + 0x00000010 + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core1_IRam0_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core1_DRam0_pms_monitor_violatile interrupt configuration register + 0x168 + 0x20 + 0x00000010 + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core1_DRam0_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + core1_PIF_pms_monitor_violatile interrupt configuration register + 0x16C + 0x20 + 0x00000010 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core1_PIF_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + core1_PIF_pms_monitor_violatile_size interrupt configuration register + 0x170 + 0x20 + 0x00000010 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + this register used to map core1_PIF_pms_monitor_violatile_size interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + BACKUP_PMS_VIOLATE_INTR_MAP + backup_pms_monitor_violatile interrupt configuration register + 0x174 + 0x20 + 0x00000010 + + + BACKUP_PMS_VIOLATE_INTR_MAP + this register used to map backup_pms_monitor_violatile interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CACHE_CORE0_ACS_INT_MAP + cache_core0_acs interrupt configuration register + 0x178 + 0x20 + 0x00000010 + + + CACHE_CORE0_ACS_INT_MAP + this register used to map cache_core0_acs interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + CACHE_CORE1_ACS_INT_MAP + cache_core1_acs interrupt configuration register + 0x17C + 0x20 + 0x00000010 + + + CACHE_CORE1_ACS_INT_MAP + this register used to map cache_core1_acs interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + USB_DEVICE_INT_MAP + usb_device interrupt configuration register + 0x180 + 0x20 + 0x00000010 + + + USB_DEVICE_INT_MAP + this register used to map usb_device interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PERI_BACKUP_INT_MAP + peri_backup interrupt configuration register + 0x184 + 0x20 + 0x00000010 + + + PERI_BACKUP_INT_MAP + this register used to map peri_backup interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + DMA_EXTMEM_REJECT_INT_MAP + dma_extmem_reject interrupt configuration register + 0x188 + 0x20 + 0x00000010 + + + DMA_EXTMEM_REJECT_INT_MAP + this register used to map dma_extmem_reject interrupt to one of core0's external interrupt + 0 + 5 + read-write + + + + + PRO_INTR_STATUS_0 + interrupt status register + 0x18C + 0x20 + + + INTR_STATUS_0 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + PRO_INTR_STATUS_1 + interrupt status register + 0x190 + 0x20 + + + INTR_STATUS_1 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + PRO_INTR_STATUS_2 + interrupt status register + 0x194 + 0x20 + + + INTR_STATUS_2 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + PRO_INTR_STATUS_3 + interrupt status register + 0x198 + 0x20 + + + INTR_STATUS_3 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + CLOCK_GATE + clock gate register + 0x19C + 0x20 + 0x00000001 + + + REG_CLK_EN + this register uesd to control clock-gating interupt martrix + 0 + 1 + read-write + + + + + DATE + version register + 0x7FC + 0x20 + 0x02012300 + + + INTERRUPT_REG_DATE + version register + 0 + 28 + read-write + + + + + + + INTERRUPT_CORE1 + Interrupt Controller (Core 1) + INTERRUPT_CORE1 + 0x600C2800 + + 0x0 + 0x1A4 + registers + + + CORE1_IRAM0_PMS + 89 + + + CORE1_DRAM0_PMS + 90 + + + CORE1_PIF_PMS + 91 + + + CORE1_PIF_PMS_SIZE + 92 + + + CACHE_CORE1_ACS + 95 + + + + APP_MAC_INTR_MAP + mac interrupt configuration register + 0x800 + 0x20 + 0x00000010 + + + MAC_INTR_MAP + this register used to map mac interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + MAC_NMI_MAP + mac_nmi interrupt configuration register + 0x804 + 0x20 + 0x00000010 + + + MAC_NMI_MAP + this register used to map_nmi interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PWR_INTR_MAP + pwr interrupt configuration register + 0x808 + 0x20 + 0x00000010 + + + PWR_INTR_MAP + this register used to map pwr interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + BB_INT_MAP + bb interrupt configuration register + 0x80C + 0x20 + 0x00000010 + + + BB_INT_MAP + this register used to map bb interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + BT_MAC_INT_MAP + bb_mac interrupt configuration register + 0x810 + 0x20 + 0x00000010 + + + BT_MAC_INT_MAP + this register used to map bb_mac interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + BT_BB_INT_MAP + bt_bb interrupt configuration register + 0x814 + 0x20 + 0x00000010 + + + BT_BB_INT_MAP + this register used to map bt_bb interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + BT_BB_NMI_MAP + bt_bb_nmi interrupt configuration register + 0x818 + 0x20 + 0x00000010 + + + BT_BB_NMI_MAP + this register used to map bb_bt_nmi interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RWBT_IRQ_MAP + rwbt_irq interrupt configuration register + 0x81C + 0x20 + 0x00000010 + + + RWBT_IRQ_MAP + this register used to map rwbt_irq interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RWBLE_IRQ_MAP + rwble_irq interrupt configuration register + 0x820 + 0x20 + 0x00000010 + + + RWBLE_IRQ_MAP + this register used to map rwble_irq interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RWBT_NMI_MAP + rwbt_nmi interrupt configuration register + 0x824 + 0x20 + 0x00000010 + + + RWBT_NMI_MAP + this register used to map rwbt_nmi interupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RWBLE_NMI_MAP + rwble_nmi interrupt configuration register + 0x828 + 0x20 + 0x00000010 + + + RWBLE_NMI_MAP + this register used to map rwble_nmi interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + I2C_MST_INT_MAP + i2c_mst interrupt configuration register + 0x82C + 0x20 + 0x00000010 + + + I2C_MST_INT_MAP + this register used to map i2c_mst interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SLC0_INTR_MAP + slc0 interrupt configuration register + 0x830 + 0x20 + 0x00000010 + + + SLC0_INTR_MAP + this register used to map slc0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SLC1_INTR_MAP + slc1 interrupt configuration register + 0x834 + 0x20 + 0x00000010 + + + SLC1_INTR_MAP + this register used to map slc1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + UHCI0_INTR_MAP + uhci0 interrupt configuration register + 0x838 + 0x20 + 0x00000010 + + + UHCI0_INTR_MAP + this register used to map uhci0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + UHCI1_INTR_MAP + uhci1 interrupt configuration register + 0x83C + 0x20 + 0x00000010 + + + UHCI1_INTR_MAP + this register used to map uhci1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_PRO_MAP + gpio_interrupt_pro interrupt configuration register + 0x840 + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_PRO_MAP + this register used to map gpio_interrupt_pro interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_PRO_NMI_MAP + gpio_interrupt_pro_nmi interrupt configuration register + 0x844 + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_PRO_NMI_MAP + this register used to map gpio_interrupt_pro_nmi interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_APP_MAP + gpio_interrupt_app interrupt configuration register + 0x848 + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_APP_MAP + this register used to map gpio_interrupt_app interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + GPIO_INTERRUPT_APP_NMI_MAP + gpio_interrupt_app_nmi interrupt configuration register + 0x84C + 0x20 + 0x00000010 + + + GPIO_INTERRUPT_APP_NMI_MAP + this register used to map gpio_interrupt_app_nmi interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_1_MAP + spi_intr_1 interrupt configuration register + 0x850 + 0x20 + 0x00000010 + + + SPI_INTR_1_MAP + this register used to map spi_intr_1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_2_MAP + spi_intr_2 interrupt configuration register + 0x854 + 0x20 + 0x00000010 + + + SPI_INTR_2_MAP + this register used to map spi_intr_2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_3_MAP + spi_intr_3 interrupt configuration register + 0x858 + 0x20 + 0x00000010 + + + SPI_INTR_3_MAP + this register used to map spi_intr_3 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI_INTR_4_MAP + spi_intr_4 interrupt configuration register + 0x85C + 0x20 + 0x00000010 + + + SPI_INTR_4_MAP + this register used to map spi_intr_4 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + LCD_CAM_INT_MAP + lcd_cam interrupt configuration register + 0x860 + 0x20 + 0x00000010 + + + LCD_CAM_INT_MAP + this register used to map lcd_cam interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + I2S0_INT_MAP + i2s0 interrupt configuration register + 0x864 + 0x20 + 0x00000010 + + + I2S0_INT_MAP + this register used to map i2s0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + I2S1_INT_MAP + i2s1 interrupt configuration register + 0x868 + 0x20 + 0x00000010 + + + I2S1_INT_MAP + this register used to map i2s1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + UART_INTR_MAP + uart interrupt configuration register + 0x86C + 0x20 + 0x00000010 + + + UART_INTR_MAP + this register used to map uart interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + UART1_INTR_MAP + uart1 interrupt configuration register + 0x870 + 0x20 + 0x00000010 + + + UART1_INTR_MAP + this register used to map uart1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + UART2_INTR_MAP + uart2 interrupt configuration register + 0x874 + 0x20 + 0x00000010 + + + UART2_INTR_MAP + this register used to map uart2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SDIO_HOST_INTERRUPT_MAP + sdio_host interrupt configuration register + 0x878 + 0x20 + 0x00000010 + + + SDIO_HOST_INTERRUPT_MAP + this register used to map sdio_host interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PWM0_INTR_MAP + pwm0 interrupt configuration register + 0x87C + 0x20 + 0x00000010 + + + PWM0_INTR_MAP + this register used to map pwm0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PWM1_INTR_MAP + pwm1 interrupt configuration register + 0x880 + 0x20 + 0x00000010 + + + PWM1_INTR_MAP + this register used to map pwm1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PWM2_INTR_MAP + pwm2 interrupt configuration register + 0x884 + 0x20 + 0x00000010 + + + PWM2_INTR_MAP + this register used to map pwm2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PWM3_INTR_MAP + pwm3 interrupt configuration register + 0x888 + 0x20 + 0x00000010 + + + PWM3_INTR_MAP + this register used to map pwm3 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + LEDC_INT_MAP + ledc interrupt configuration register + 0x88C + 0x20 + 0x00000010 + + + LEDC_INT_MAP + this register used to map ledc interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + EFUSE_INT_MAP + efuse interrupt configuration register + 0x890 + 0x20 + 0x00000010 + + + EFUSE_INT_MAP + this register used to map efuse interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CAN_INT_MAP + can interrupt configuration register + 0x894 + 0x20 + 0x00000010 + + + CAN_INT_MAP + this register used to map can interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + USB_INTR_MAP + usb interrupt configuration register + 0x898 + 0x20 + 0x00000010 + + + USB_INTR_MAP + this register used to map usb interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RTC_CORE_INTR_MAP + rtc_core interrupt configuration register + 0x89C + 0x20 + 0x00000010 + + + RTC_CORE_INTR_MAP + this register used to map rtc_core interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RMT_INTR_MAP + rmt interrupt configuration register + 0x8A0 + 0x20 + 0x00000010 + + + RMT_INTR_MAP + this register used to map rmt interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PCNT_INTR_MAP + pcnt interrupt configuration register + 0x8A4 + 0x20 + 0x00000010 + + + PCNT_INTR_MAP + this register used to map pcnt interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + I2C_EXT0_INTR_MAP + i2c_ext0 interrupt configuration register + 0x8A8 + 0x20 + 0x00000010 + + + I2C_EXT0_INTR_MAP + this register used to map i2c_ext0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + I2C_EXT1_INTR_MAP + i2c_ext1 interrupt configuration register + 0x8AC + 0x20 + 0x00000010 + + + I2C_EXT1_INTR_MAP + this register used to map i2c_ext1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI2_DMA_INT_MAP + spi2_dma interrupt configuration register + 0x8B0 + 0x20 + 0x00000010 + + + SPI2_DMA_INT_MAP + this register used to map spi2_dma interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI3_DMA_INT_MAP + spi3_dma interrupt configuration register + 0x8B4 + 0x20 + 0x00000010 + + + SPI3_DMA_INT_MAP + this register used to map spi3_dma interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI4_DMA_INT_MAP + spi4_dma interrupt configuration register + 0x8B8 + 0x20 + 0x00000010 + + + SPI4_DMA_INT_MAP + this register used to map spi4_dma interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + WDG_INT_MAP + wdg interrupt configuration register + 0x8BC + 0x20 + 0x00000010 + + + WDG_INT_MAP + this register used to map wdg interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TIMER_INT1_MAP + timer_int1 interrupt configuration register + 0x8C0 + 0x20 + 0x00000010 + + + TIMER_INT1_MAP + this register used to map timer_int1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TIMER_INT2_MAP + timer_int2 interrupt configuration register + 0x8C4 + 0x20 + 0x00000010 + + + TIMER_INT2_MAP + this register used to map timer_int2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TG_T0_INT_MAP + tg_t0 interrupt configuration register + 0x8C8 + 0x20 + 0x00000010 + + + TG_T0_INT_MAP + this register used to map tg_t0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TG_T1_INT_MAP + tg_t1 interrupt configuration register + 0x8CC + 0x20 + 0x00000010 + + + TG_T1_INT_MAP + this register used to map tg_t1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TG_WDT_INT_MAP + tg_wdt interrupt configuration register + 0x8D0 + 0x20 + 0x00000010 + + + TG_WDT_INT_MAP + this register used to map rg_wdt interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TG1_T0_INT_MAP + tg1_t0 interrupt configuration register + 0x8D4 + 0x20 + 0x00000010 + + + TG1_T0_INT_MAP + this register used to map tg1_t0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TG1_T1_INT_MAP + tg1_t1 interrupt configuration register + 0x8D8 + 0x20 + 0x00000010 + + + TG1_T1_INT_MAP + this register used to map tg1_t1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + TG1_WDT_INT_MAP + tg1_wdt interrupt configuration register + 0x8DC + 0x20 + 0x00000010 + + + TG1_WDT_INT_MAP + this register used to map tg1_wdt interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CACHE_IA_INT_MAP + cache_ia interrupt configuration register + 0x8E0 + 0x20 + 0x00000010 + + + CACHE_IA_INT_MAP + this register used to map cache_ia interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SYSTIMER_TARGET0_INT_MAP + systimer_target0 interrupt configuration register + 0x8E4 + 0x20 + 0x00000010 + + + SYSTIMER_TARGET0_INT_MAP + this register used to map systimer_target0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SYSTIMER_TARGET1_INT_MAP + systimer_target1 interrupt configuration register + 0x8E8 + 0x20 + 0x00000010 + + + SYSTIMER_TARGET1_INT_MAP + this register used to map systimer_target1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SYSTIMER_TARGET2_INT_MAP + systimer_target2 interrupt configuration register + 0x8EC + 0x20 + 0x00000010 + + + SYSTIMER_TARGET2_INT_MAP + this register used to map systimer_target2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SPI_MEM_REJECT_INTR_MAP + spi_mem_reject interrupt configuration register + 0x8F0 + 0x20 + 0x00000010 + + + SPI_MEM_REJECT_INTR_MAP + this register used to map spi_mem_reject interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DCACHE_PRELOAD_INT_MAP + dcache_prelaod interrupt configuration register + 0x8F4 + 0x20 + 0x00000010 + + + DCACHE_PRELOAD_INT_MAP + this register used to map dcache_prelaod interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + ICACHE_PRELOAD_INT_MAP + icache_preload interrupt configuration register + 0x8F8 + 0x20 + 0x00000010 + + + ICACHE_PRELOAD_INT_MAP + this register used to map icache_preload interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DCACHE_SYNC_INT_MAP + dcache_sync interrupt configuration register + 0x8FC + 0x20 + 0x00000010 + + + DCACHE_SYNC_INT_MAP + this register used to map dcache_sync interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + ICACHE_SYNC_INT_MAP + icache_sync interrupt configuration register + 0x900 + 0x20 + 0x00000010 + + + ICACHE_SYNC_INT_MAP + this register used to map icache_sync interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + APB_ADC_INT_MAP + apb_adc interrupt configuration register + 0x904 + 0x20 + 0x00000010 + + + APB_ADC_INT_MAP + this register used to map apb_adc interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH0_INT_MAP + dma_in_ch0 interrupt configuration register + 0x908 + 0x20 + 0x00000010 + + + DMA_IN_CH0_INT_MAP + this register used to map dma_in_ch0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH1_INT_MAP + dma_in_ch1 interrupt configuration register + 0x90C + 0x20 + 0x00000010 + + + DMA_IN_CH1_INT_MAP + this register used to map dma_in_ch1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH2_INT_MAP + dma_in_ch2 interrupt configuration register + 0x910 + 0x20 + 0x00000010 + + + DMA_IN_CH2_INT_MAP + this register used to map dma_in_ch2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH3_INT_MAP + dma_in_ch3 interrupt configuration register + 0x914 + 0x20 + 0x00000010 + + + DMA_IN_CH3_INT_MAP + this register used to map dma_in_ch3 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_IN_CH4_INT_MAP + dma_in_ch4 interrupt configuration register + 0x918 + 0x20 + 0x00000010 + + + DMA_IN_CH4_INT_MAP + this register used to map dma_in_ch4 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH0_INT_MAP + dma_out_ch0 interrupt configuration register + 0x91C + 0x20 + 0x00000010 + + + DMA_OUT_CH0_INT_MAP + this register used to map dma_out_ch0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH1_INT_MAP + dma_out_ch1 interrupt configuration register + 0x920 + 0x20 + 0x00000010 + + + DMA_OUT_CH1_INT_MAP + this register used to map dma_out_ch1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH2_INT_MAP + dma_out_ch2 interrupt configuration register + 0x924 + 0x20 + 0x00000010 + + + DMA_OUT_CH2_INT_MAP + this register used to map dma_out_ch2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH3_INT_MAP + dma_out_ch3 interrupt configuration register + 0x928 + 0x20 + 0x00000010 + + + DMA_OUT_CH3_INT_MAP + this register used to map dma_out_ch3 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_OUT_CH4_INT_MAP + dma_out_ch4 interrupt configuration register + 0x92C + 0x20 + 0x00000010 + + + DMA_OUT_CH4_INT_MAP + this register used to map dma_out_ch4 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + RSA_INT_MAP + rsa interrupt configuration register + 0x930 + 0x20 + 0x00000010 + + + RSA_INT_MAP + this register used to map rsa interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + AES_INT_MAP + aes interrupt configuration register + 0x934 + 0x20 + 0x00000010 + + + AES_INT_MAP + this register used to map aes interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + SHA_INT_MAP + sha interrupt configuration register + 0x938 + 0x20 + 0x00000010 + + + SHA_INT_MAP + this register used to map sha interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_0_MAP + cpu_intr_from_cpu_0 interrupt configuration register + 0x93C + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_0_MAP + this register used to map cpu_intr_from_cpu_0 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_1_MAP + cpu_intr_from_cpu_1 interrupt configuration register + 0x940 + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_1_MAP + this register used to map cpu_intr_from_cpu_1 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_2_MAP + cpu_intr_from_cpu_2 interrupt configuration register + 0x944 + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_2_MAP + this register used to map cpu_intr_from_cpu_2 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CPU_INTR_FROM_CPU_3_MAP + cpu_intr_from_cpu_3 interrupt configuration register + 0x948 + 0x20 + 0x00000010 + + + CPU_INTR_FROM_CPU_3_MAP + this register used to map cpu_intr_from_cpu_3 interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + ASSIST_DEBUG_INTR_MAP + assist_debug interrupt configuration register + 0x94C + 0x20 + 0x00000010 + + + ASSIST_DEBUG_INTR_MAP + this register used to map assist_debug interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP + dma_pms_monitor_violatile interrupt configuration register + 0x950 + 0x20 + 0x00000010 + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map dma_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core0_IRam0_pms_monitor_violatile interrupt configuration register + 0x954 + 0x20 + 0x00000010 + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core0_IRam0_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core0_DRam0_pms_monitor_violatile interrupt configuration register + 0x958 + 0x20 + 0x00000010 + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core0_DRam0_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + core0_PIF_pms_monitor_violatile interrupt configuration register + 0x95C + 0x20 + 0x00000010 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core0_PIF_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + core0_PIF_pms_monitor_violatile_size interrupt configuration register + 0x960 + 0x20 + 0x00000010 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + this register used to map core0_PIF_pms_monitor_violatile_size interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core1_IRam0_pms_monitor_violatile interrupt configuration register + 0x964 + 0x20 + 0x00000010 + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core1_IRam0_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + core1_DRam0_pms_monitor_violatile interrupt configuration register + 0x968 + 0x20 + 0x00000010 + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core1_DRam0_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + core1_PIF_pms_monitor_violatile interrupt configuration register + 0x96C + 0x20 + 0x00000010 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_INTR_MAP + this register used to map core1_PIF_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + core1_PIF_pms_monitor_violatile_size interrupt configuration register + 0x970 + 0x20 + 0x00000010 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_SIZE_INTR_MAP + this register used to map core1_PIF_pms_monitor_violatile_size interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + BACKUP_PMS_VIOLATE_INTR_MAP + backup_pms_monitor_violatile interrupt configuration register + 0x974 + 0x20 + 0x00000010 + + + BACKUP_PMS_VIOLATE_INTR_MAP + this register used to map backup_pms_monitor_violatile interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CACHE_CORE0_ACS_INT_MAP + cache_core0_acs interrupt configuration register + 0x978 + 0x20 + 0x00000010 + + + CACHE_CORE0_ACS_INT_MAP + this register used to map cache_core0_acs interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + CACHE_CORE1_ACS_INT_MAP + cache_core1_acs interrupt configuration register + 0x97C + 0x20 + 0x00000010 + + + CACHE_CORE1_ACS_INT_MAP + this register used to map cache_core1_acs interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + USB_DEVICE_INT_MAP + usb_device interrupt configuration register + 0x980 + 0x20 + 0x00000010 + + + USB_DEVICE_INT_MAP + this register used to map usb_device interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + PERI_BACKUP_INT_MAP + peri_backup interrupt configuration register + 0x984 + 0x20 + 0x00000010 + + + PERI_BACKUP_INT_MAP + this register used to map peri_backup interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + DMA_EXTMEM_REJECT_INT_MAP + dma_extmem_reject interrupt configuration register + 0x988 + 0x20 + 0x00000010 + + + DMA_EXTMEM_REJECT_INT_MAP + this register used to map dma_extmem_reject interrupt to one of core1's external interrupt + 0 + 5 + read-write + + + + + APP_INTR_STATUS_0 + interrupt status register + 0x98C + 0x20 + + + INTR_STATUS_0 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + APP_INTR_STATUS_1 + interrupt status register + 0x990 + 0x20 + + + INTR_STATUS_1 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + APP_INTR_STATUS_2 + interrupt status register + 0x994 + 0x20 + + + INTR_STATUS_2 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + APP_INTR_STATUS_3 + interrupt status register + 0x998 + 0x20 + + + INTR_STATUS_3 + this register store the status of the first 32 interrupt source + 0 + 32 + read-only + + + + + CLOCK_GATE + clock gate register + 0x99C + 0x20 + 0x00000001 + + + REG_CLK_EN + this register uesd to control clock-gating interupt martrix + 0 + 1 + read-write + + + + + DATE + version register + 0xFFC + 0x20 + 0x02012300 + + + INTERRUPT_DATE + version register + 0 + 28 + read-write + + + + + + + IO_MUX + Input/Output Multiplexer + IO_MUX + 0x60009000 + + 0x0 + 0xCC + registers + + + + PIN_CTRL + Clock Output Configuration Register + 0x0 + 0x20 + 0x000007FF + + + CLK_OUT1 + If you want to output clock for I2S to CLK_OUT_out1, set this register to 0x0. CLK_OUT_out1 can be found in peripheral output signals. + 0 + 4 + read-write + + + CLK_OUT2 + If you want to output clock for I2S to CLK_OUT_out2, set this register to 0x0. CLK_OUT_out2 can be found in peripheral output signals. + 4 + 4 + read-write + + + CLK_OUT3 + If you want to output clock for I2S to CLK_OUT_out3, set this register to 0x0. CLK_OUT_out3 can be found in peripheral output signals. + 8 + 4 + read-write + + + + + 49 + 0x4 + GPIO%s + IO MUX Configure Register for pad GPIO0 + 0x4 + 0x20 + 0x00000B00 + + + MCU_OE + Output enable of the pad in sleep mode. 1: output enabled; 0: output disabled. + 0 + 1 + read-write + + + SLP_SEL + Sleep mode selection of this pad. Set to 1 to put the pad in pad mode. + 1 + 1 + read-write + + + MCU_WPD + Pull-down enable of the pad in sleep mode. 1: internal pull-down enabled; 0: internal pull-down disabled. + 2 + 1 + read-write + + + MCU_WPU + Pull-up enable of the pad during sleep mode. 1: internal pull-up enabled; 0: internal pull-up disabled. + 3 + 1 + read-write + + + MCU_IE + Input enable of the pad during sleep mode. 1: input enabled; 0: input disabled. + 4 + 1 + read-write + + + FUN_WPD + Pull-down enable of the pad. 1: internal pull-down enabled; 0: internal pull-down disabled. + 7 + 1 + read-write + + + FUN_WPU + Pull-up enable of the pad. 1: internal pull-up enabled; 0: internal pull-up disabled. + 8 + 1 + read-write + + + FUN_IE + Input enable of the pad. 1: input enabled; 0: input disabled. + 9 + 1 + read-write + + + FUN_DRV + Select the drive strength of the pad. 0: ~5 mA; 1: ~10mA; 2: ~20mA; 3: ~40mA. + 10 + 2 + read-write + + + MCU_SEL + Select IO MUX function for this signal. 0: Select Function 1; 1: Select Function 2; etc. + 12 + 3 + read-write + + + FILTER_EN + Enable filter for pin input signals. 1: Filter enabled; 2: Filter disabled. + 15 + 1 + read-write + + + + + DATE + IO MUX Version Control Register + 0xFC + 0x20 + 0x01907160 + + + REG_DATE + Version control register + 0 + 28 + read-write + + + + + + + LCD_CAM + LCD_CAM Peripheral + LCD_CAM + 0x60041000 + + 0x0 + 0x48 + registers + + + LCD_CAM + 24 + + + + LCD_CLOCK + LCD clock register + 0x0 + 0x20 + 0x00000843 + + + LCD_CLKCNT_N + f_LCD_PCLK = f_LCD_CLK / (reg_clkcnt_N + 1) when reg_clk_equ_sysclk is 0. + 0 + 6 + read-write + + + LCD_CLK_EQU_SYSCLK + 1: f_LCD_PCLK = f_LCD_CLK. 0: f_LCD_PCLK = f_LCD_CLK / (reg_clkcnt_N + 1). + 6 + 1 + read-write + + + LCD_CK_IDLE_EDGE + 1: LCD_PCLK line is high when idle 0: LCD_PCLK line is low when idle. + 7 + 1 + read-write + + + LCD_CK_OUT_EDGE + 1: LCD_PCLK high in first half clock cycle. 0: LCD_PCLK low in first half clock cycle. + 8 + 1 + read-write + + + LCD_CLKM_DIV_NUM + Integral LCD clock divider value + 9 + 8 + read-write + + + LCD_CLKM_DIV_B + Fractional clock divider numerator value + 17 + 6 + read-write + + + LCD_CLKM_DIV_A + Fractional clock divider denominator value + 23 + 6 + read-write + + + LCD_CLK_SEL + Select LCD module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: no clock. + 29 + 2 + read-write + + + CLK_EN + Set this bit to enable clk gate + 31 + 1 + read-write + + + + + CAM_CTRL + Camera configuration register + 0x4 + 0x20 + 0x00000800 + + + CAM_STOP_EN + Camera stop enable signal, 1: camera stops when DMA Rx FIFO is full. 0: Not stop. + 0 + 1 + read-write + + + CAM_VSYNC_FILTER_THRES + Filter threshold value for CAM_VSYNC signal. + 1 + 3 + read-write + + + CAM_UPDATE + 1: Update Camera registers, will be cleared by hardware. 0 : Not care. + 4 + 1 + read-write + + + CAM_BYTE_ORDER + 1: Change data bit order, change CAM_DATA_in[7:0] to CAM_DATA_in[0:7] in one byte mode, and bits[15:0] to bits[0:15] in two byte mode. 0: Not change. + 5 + 1 + read-write + + + CAM_BIT_ORDER + 1: invert data byte order, only valid in 2 byte mode. 0: Not change. + 6 + 1 + read-write + + + CAM_LINE_INT_EN + 1: Enable to generate CAM_HS_INT. 0: Disable. + 7 + 1 + read-write + + + CAM_VS_EOF_EN + 1: CAM_VSYNC to generate in_suc_eof. 0: in_suc_eof is controlled by reg_cam_rec_data_cyclelen. + 8 + 1 + read-write + + + CAM_CLKM_DIV_NUM + Integral Camera clock divider value + 9 + 8 + read-write + + + CAM_CLKM_DIV_B + Fractional clock divider numerator value + 17 + 6 + read-write + + + CAM_CLKM_DIV_A + Fractional clock divider denominator value + 23 + 6 + read-write + + + CAM_CLK_SEL + Select Camera module source clock. 0: no clock. 1: APLL. 2: CLK160. 3: no clock. + 29 + 2 + read-write + + + + + CAM_CTRL1 + Camera configuration register + 0x8 + 0x20 + + + CAM_REC_DATA_BYTELEN + Camera receive data byte length minus 1 to set DMA in_suc_eof_int. + 0 + 16 + read-write + + + CAM_LINE_INT_NUM + The line number minus 1 to generate cam_hs_int. + 16 + 6 + read-write + + + CAM_CLK_INV + 1: Invert the input signal CAM_PCLK. 0: Not invert. + 22 + 1 + read-write + + + CAM_VSYNC_FILTER_EN + 1: Enable CAM_VSYNC filter function. 0: bypass. + 23 + 1 + read-write + + + CAM_2BYTE_EN + 1: The bit number of input data is 9~16. 0: The bit number of input data is 0~8. + 24 + 1 + read-write + + + CAM_DE_INV + CAM_DE invert enable signal, valid in high level. + 25 + 1 + read-write + + + CAM_HSYNC_INV + CAM_HSYNC invert enable signal, valid in high level. + 26 + 1 + read-write + + + CAM_VSYNC_INV + CAM_VSYNC invert enable signal, valid in high level. + 27 + 1 + read-write + + + CAM_VH_DE_MODE_EN + 1: Input control signals are CAM_DE CAM_HSYNC and CAM_VSYNC is 1. 0: Input control signals are CAM_DE and CAM_VSYNC. CAM_HSYNC and CAM_DE are all 1 the the same time. + 28 + 1 + read-write + + + CAM_START + Camera module start signal. + 29 + 1 + read-write + + + CAM_RESET + Camera module reset signal. + 30 + 1 + write-only + + + CAM_AFIFO_RESET + Camera AFIFO reset signal. + 31 + 1 + write-only + + + + + CAM_RGB_YUV + Camera configuration register + 0xC + 0x20 + 0x00C00000 + + + CAM_CONV_8BITS_DATA_INV + 1:invert every two 8bits input data. 2. disabled. + 21 + 1 + read-write + + + CAM_CONV_YUV2YUV_MODE + 0: to yuv422. 1: to yuv420. 2: to yuv411. 3: disabled. To enable yuv2yuv mode, trans_mode must be set to 1. + 22 + 2 + read-write + + + CAM_CONV_YUV_MODE + 0: yuv422. 1: yuv420. 2: yuv411. When in yuv2yuv mode, yuv_mode decides the yuv mode of Data_in + 24 + 2 + read-write + + + CAM_CONV_PROTOCOL_MODE + 0:BT601. 1:BT709. + 26 + 1 + read-write + + + CAM_CONV_DATA_OUT_MODE + LIMIT or FULL mode of Data out. 0: limit. 1: full + 27 + 1 + read-write + + + CAM_CONV_DATA_IN_MODE + LIMIT or FULL mode of Data in. 0: limit. 1: full + 28 + 1 + read-write + + + CAM_CONV_MODE_8BITS_ON + 0: 16bits mode. 1: 8bits mode. + 29 + 1 + read-write + + + CAM_CONV_TRANS_MODE + 0: YUV to RGB. 1: RGB to YUV. + 30 + 1 + read-write + + + CAM_CONV_BYPASS + 0: Bypass converter. 1: Enable converter. + 31 + 1 + read-write + + + + + LCD_RGB_YUV + LCD configuration register + 0x10 + 0x20 + 0x00C00000 + + + LCD_CONV_8BITS_DATA_INV + 1:invert every two 8bits input data. 2. disabled. + 20 + 1 + read-write + + + LCD_CONV_TXTORX + 0: txtorx mode off. 1: txtorx mode on. + 21 + 1 + read-write + + + LCD_CONV_YUV2YUV_MODE + 0: to yuv422. 1: to yuv420. 2: to yuv411. 3: disabled. To enable yuv2yuv mode, trans_mode must be set to 1. + 22 + 2 + read-write + + + LCD_CONV_YUV_MODE + 0: yuv422. 1: yuv420. 2: yuv411. When in yuv2yuv mode, yuv_mode decides the yuv mode of Data_in + 24 + 2 + read-write + + + LCD_CONV_PROTOCOL_MODE + 0:BT601. 1:BT709. + 26 + 1 + read-write + + + LCD_CONV_DATA_OUT_MODE + LIMIT or FULL mode of Data out. 0: limit. 1: full + 27 + 1 + read-write + + + LCD_CONV_DATA_IN_MODE + LIMIT or FULL mode of Data in. 0: limit. 1: full + 28 + 1 + read-write + + + LCD_CONV_MODE_8BITS_ON + 0: 16bits mode. 1: 8bits mode. + 29 + 1 + read-write + + + LCD_CONV_TRANS_MODE + 0: YUV to RGB. 1: RGB to YUV. + 30 + 1 + read-write + + + LCD_CONV_BYPASS + 0: Bypass converter. 1: Enable converter. + 31 + 1 + read-write + + + + + LCD_USER + LCD configuration register + 0x14 + 0x20 + 0x00000001 + + + LCD_DOUT_CYCLELEN + The output data cycles minus 1 of LCD module. + 0 + 13 + read-write + + + LCD_ALWAYS_OUT_EN + LCD always output when LCD is in LCD_DOUT state, unless reg_lcd_start is cleared or reg_lcd_reset is set. + 13 + 1 + read-write + + + LCD_8BITS_ORDER + 1: invert every two data byte, valid in 1 byte mode. 0: Not change. + 19 + 1 + read-write + + + LCD_UPDATE + 1: Update LCD registers, will be cleared by hardware. 0 : Not care. + 20 + 1 + read-write + + + LCD_BIT_ORDER + 1: Change data bit order, change LCD_DATA_out[7:0] to LCD_DATA_out[0:7] in one byte mode, and bits[15:0] to bits[0:15] in two byte mode. 0: Not change. + 21 + 1 + read-write + + + LCD_BYTE_ORDER + 1: invert data byte order, only valid in 2 byte mode. 0: Not change. + 22 + 1 + read-write + + + LCD_2BYTE_EN + 1: The bit number of output LCD data is 9~16. 0: The bit number of output LCD data is 0~8. + 23 + 1 + read-write + + + LCD_DOUT + 1: Be able to send data out in LCD sequence when LCD starts. 0: Disable. + 24 + 1 + read-write + + + LCD_DUMMY + 1: Enable DUMMY phase in LCD sequence when LCD starts. 0: Disable. + 25 + 1 + read-write + + + LCD_CMD + 1: Be able to send command in LCD sequence when LCD starts. 0: Disable. + 26 + 1 + read-write + + + LCD_START + LCD start sending data enable signal, valid in high level. + 27 + 1 + read-write + + + LCD_RESET + The value of command. + 28 + 1 + write-only + + + LCD_DUMMY_CYCLELEN + The dummy cycle length minus 1. + 29 + 2 + read-write + + + LCD_CMD_2_CYCLE_EN + The cycle length of command phase. 1: 2 cycles. 0: 1 cycle. + 31 + 1 + read-write + + + + + LCD_MISC + LCD configuration register + 0x18 + 0x20 + 0x000000D6 + + + LCD_AFIFO_THRESHOLD_NUM + The awfull threshold number of lcd_afifo. + 1 + 5 + read-write + + + LCD_VFK_CYCLELEN + The setup cycle length minus 1 in LCD non-RGB mode. + 6 + 6 + read-write + + + LCD_VBK_CYCLELEN + The vertical back blank region cycle length minus 1 in LCD RGB mode, or the hold time cycle length in LCD non-RGB mode. + 12 + 13 + read-write + + + LCD_NEXT_FRAME_EN + 1: Send the next frame data when the current frame is sent out. 0: LCD stops when the current frame is sent out. + 25 + 1 + read-write + + + LCD_BK_EN + 1: Enable blank region when LCD sends data out. 0: No blank region. + 26 + 1 + read-write + + + LCD_AFIFO_RESET + LCD AFIFO reset signal. + 27 + 1 + write-only + + + LCD_CD_DATA_SET + 1: LCD_CD = !reg_cd_idle_edge when lcd_st[2:0] is in LCD_DOUT state. 0: LCD_CD = reg_cd_idle_edge. + 28 + 1 + read-write + + + LCD_CD_DUMMY_SET + 1: LCD_CD = !reg_cd_idle_edge when lcd_st[2:0] is in LCD_DUMMY state. 0: LCD_CD = reg_cd_idle_edge. + 29 + 1 + read-write + + + LCD_CD_CMD_SET + 1: LCD_CD = !reg_cd_idle_edge when lcd_st[2:0] is in LCD_CMD state. 0: LCD_CD = reg_cd_idle_edge. + 30 + 1 + read-write + + + LCD_CD_IDLE_EDGE + The default value of LCD_CD. + 31 + 1 + read-write + + + + + LCD_CTRL + LCD configuration register + 0x1C + 0x20 + + + LCD_HB_FRONT + It is the horizontal blank front porch of a frame. + 0 + 11 + read-write + + + LCD_VA_HEIGHT + It is the vertical active height of a frame. + 11 + 10 + read-write + + + LCD_VT_HEIGHT + It is the vertical total height of a frame. + 21 + 10 + read-write + + + LCD_RGB_MODE_EN + 1: Enable reg mode input vsync, hsync, de. 0: Disable. + 31 + 1 + read-write + + + + + LCD_CTRL1 + LCD configuration register + 0x20 + 0x20 + + + LCD_VB_FRONT + It is the vertical blank front porch of a frame. + 0 + 8 + read-write + + + LCD_HA_WIDTH + It is the horizontal active width of a frame. + 8 + 12 + read-write + + + LCD_HT_WIDTH + It is the horizontal total width of a frame. + 20 + 12 + read-write + + + + + LCD_CTRL2 + LCD configuration register + 0x24 + 0x20 + 0x00010001 + + + LCD_VSYNC_WIDTH + It is the position of LCD_VSYNC active pulse in a line. + 0 + 7 + read-write + + + LCD_VSYNC_IDLE_POL + It is the idle value of LCD_VSYNC. + 7 + 1 + read-write + + + LCD_DE_IDLE_POL + It is the idle value of LCD_DE. + 8 + 1 + read-write + + + LCD_HS_BLANK_EN + 1: The pulse of LCD_HSYNC is out in vertical blanking lines RGB mode. 0: LCD_HSYNC pulse is valid only in active region lines in RGB mode. + 9 + 1 + read-write + + + LCD_HSYNC_WIDTH + It is the position of LCD_HSYNC active pulse in a line. + 16 + 7 + read-write + + + LCD_HSYNC_IDLE_POL + It is the idle value of LCD_HSYNC. + 23 + 1 + read-write + + + LCD_HSYNC_POSITION + It is the position of LCD_HSYNC active pulse in a line. + 24 + 8 + read-write + + + + + LCD_CMD_VAL + LCD configuration register + 0x28 + 0x20 + + + LCD_CMD_VALUE + The LCD write command value. + 0 + 32 + read-write + + + + + LCD_DLY_MODE + LCD configuration register + 0x30 + 0x20 + + + LCD_CD_MODE + The output LCD_CD is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 0 + 2 + read-write + + + LCD_DE_MODE + The output LCD_DE is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 2 + 2 + read-write + + + LCD_HSYNC_MODE + The output LCD_HSYNC is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 4 + 2 + read-write + + + LCD_VSYNC_MODE + The output LCD_VSYNC is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 6 + 2 + read-write + + + + + LCD_DATA_DOUT_MODE + LCD configuration register + 0x38 + 0x20 + + + DOUT0_MODE + The output data bit 0 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 0 + 2 + read-write + + + DOUT1_MODE + The output data bit 2 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 2 + 2 + read-write + + + DOUT2_MODE + The output data bit 4 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 4 + 2 + read-write + + + DOUT3_MODE + The output data bit 6 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 6 + 2 + read-write + + + DOUT4_MODE + The output data bit 8 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 8 + 2 + read-write + + + DOUT5_MODE + The output data bit 10 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 10 + 2 + read-write + + + DOUT6_MODE + The output data bit 12 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 12 + 2 + read-write + + + DOUT7_MODE + The output data bit 14 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 14 + 2 + read-write + + + DOUT8_MODE + The output data bit 16 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 16 + 2 + read-write + + + DOUT9_MODE + The output data bit 18 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 18 + 2 + read-write + + + DOUT10_MODE + The output data bit 20 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 20 + 2 + read-write + + + DOUT11_MODE + The output data bit 22 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 22 + 2 + read-write + + + DOUT12_MODE + The output data bit 24 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 24 + 2 + read-write + + + DOUT13_MODE + The output data bit 26 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 26 + 2 + read-write + + + DOUT14_MODE + The output data bit 28 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 28 + 2 + read-write + + + DOUT15_MODE + The output data bit 30 is delayed by module clock LCD_CLK. 0: output without delayed. 1: delay by the positive edge of LCD_CLK. 2: delay by the negative edge of LCD_CLK. + 30 + 2 + read-write + + + + + LC_DMA_INT_ENA + LCD_camera DMA inturrupt enable register + 0x64 + 0x20 + + + LCD_VSYNC_INT_ENA + The enable bit for LCD frame end interrupt. + 0 + 1 + read-write + + + LCD_TRANS_DONE_INT_ENA + The enable bit for lcd transfer end interrupt. + 1 + 1 + read-write + + + CAM_VSYNC_INT_ENA + The enable bit for Camera frame end interrupt. + 2 + 1 + read-write + + + CAM_HS_INT_ENA + The enable bit for Camera line interrupt. + 3 + 1 + read-write + + + + + LC_DMA_INT_RAW + LCD_camera DMA raw inturrupt status register + 0x68 + 0x20 + + + LCD_VSYNC_INT_RAW + The raw bit for LCD frame end interrupt. + 0 + 1 + read-only + + + LCD_TRANS_DONE_INT_RAW + The raw bit for lcd transfer end interrupt. + 1 + 1 + read-only + + + CAM_VSYNC_INT_RAW + The raw bit for Camera frame end interrupt. + 2 + 1 + read-only + + + CAM_HS_INT_RAW + The raw bit for Camera line interrupt. + 3 + 1 + read-only + + + + + LC_DMA_INT_ST + LCD_camera DMA masked inturrupt status register + 0x6C + 0x20 + + + LCD_VSYNC_INT_ST + The status bit for LCD frame end interrupt. + 0 + 1 + read-only + + + LCD_TRANS_DONE_INT_ST + The status bit for lcd transfer end interrupt. + 1 + 1 + read-only + + + CAM_VSYNC_INT_ST + The status bit for Camera frame end interrupt. + 2 + 1 + read-only + + + CAM_HS_INT_ST + The status bit for Camera transfer end interrupt. + 3 + 1 + read-only + + + + + LC_DMA_INT_CLR + LCD_camera DMA inturrupt clear register + 0x70 + 0x20 + + + LCD_VSYNC_INT_CLR + The clear bit for LCD frame end interrupt. + 0 + 1 + write-only + + + LCD_TRANS_DONE_INT_CLR + The clear bit for lcd transfer end interrupt. + 1 + 1 + write-only + + + CAM_VSYNC_INT_CLR + The clear bit for Camera frame end interrupt. + 2 + 1 + write-only + + + CAM_HS_INT_CLR + The clear bit for Camera line interrupt. + 3 + 1 + write-only + + + + + LC_REG_DATE + Version register + 0xFC + 0x20 + 0x02003020 + + + LC_DATE + LCD_CAM version control register + 0 + 28 + read-write + + + + + + + LEDC + LED Control PWM (Pulse Width Modulation) + LEDC + 0x60019000 + + 0x0 + 0xD8 + registers + + + LEDC + 35 + + + TIMER1 + 48 + + + TIMER2 + 49 + + + + 8 + 0x14 + CH%s_CONF0 + Configuration register 0 for channel %s + 0x0 + 0x20 + + + TIMER_SEL + This field is used to select one of timers for channel %s. + +0: select timer0 + +1: select timer1 + +2: select timer2 + +3: select timer3 + 0 + 2 + read-write + + + SIG_OUT_EN + Set this bit to enable signal output on channel %s. + 2 + 1 + read-write + + + IDLE_LV + This bit is used to control the output value when channel %s is inactive (when LEDC_SIG_OUT_EN_CH%s is 0). + 3 + 1 + read-write + + + PARA_UP + This bit is used to update LEDC_HPOINT_CH%s, LEDC_DUTY_START_CH%s, LEDC_SIG_OUT_EN_CH%s, LEDC_TIMER_SEL_CH%s, LEDC_DUTY_NUM_CH%s, LEDC_DUTY_CYCLE_CH%s, LEDC_DUTY_SCALE_CH%s, LEDC_DUTY_INC_CH%s, and LEDC_OVF_CNT_EN_CH%s fields for channel %s, and will be automatically cleared by hardware. + 4 + 1 + write-only + + + OVF_NUM + This register is used to configure the maximum times of overflow minus 1. + +The LEDC_OVF_CNT_CH%s_INT interrupt will be triggered when channel %s overflows for (LEDC_OVF_NUM_CH%s + 1) times. + 5 + 10 + read-write + + + OVF_CNT_EN + This bit is used to enable the ovf_cnt of channel %s. + 15 + 1 + read-write + + + OVF_CNT_RESET + Set this bit to reset the ovf_cnt of channel %s. + 16 + 1 + write-only + + + OVF_CNT_RESET_ST + This is the status bit of LEDC_OVF_CNT_RESET_CH%s. + 17 + 1 + read-write + + + + + 8 + 0x14 + CH%s_HPOINT + High point register for channel %s + 0x4 + 0x20 + + + HPOINT + The output value changes to high when the selected timers has reached the value specified by this register. + 0 + 14 + read-write + + + + + 8 + 0x14 + CH%s_DUTY + Initial duty cycle for channel %s + 0x8 + 0x20 + + + DUTY + This register is used to change the output duty by controlling the Lpoint. + +The output value turns to low when the selected timers has reached the Lpoint. + 0 + 19 + read-write + + + + + 8 + 0x14 + CH%s_CONF1 + Configuration register 1 for channel %s + 0xC + 0x20 + 0x40000000 + + + DUTY_SCALE + This register is used to configure the changing step scale of duty on channel %s. + 0 + 10 + read-write + + + DUTY_CYCLE + The duty will change every LEDC_DUTY_CYCLE_CH%s on channel %s. + 10 + 10 + read-write + + + DUTY_NUM + This register is used to control the number of times the duty cycle will be changed. + 20 + 10 + read-write + + + DUTY_INC + This register is used to increase or decrease the duty of output signal on channel %s. 1: Increase; 0: Decrease. + 30 + 1 + read-write + + + DUTY_START + Other configured fields in LEDC_CH%s_CONF1_REG will start to take effect when this bit is set to 1. + 31 + 1 + read-write + + + + + 8 + 0x14 + CH%s_DUTY_R + Current duty cycle for channel %s + 0x10 + 0x20 + + + DUTY_R + This register stores the current duty of output signal on channel %s. + 0 + 19 + read-only + + + + + 4 + 0x8 + TIMER%s_CONF + Timer %s configuration + 0xA0 + 0x20 + 0x00800000 + + + DUTY_RES + This register is used to control the range of the counter in timer %s. + 0 + 4 + read-write + + + CLK_DIV + This register is used to configure the divisor for the divider in timer %s. + +The least significant eight bits represent the fractional part. + 4 + 18 + read-write + + + PAUSE + This bit is used to suspend the counter in timer %s. + 22 + 1 + read-write + + + RST + This bit is used to reset timer %s. The counter will show 0 after reset. + 23 + 1 + read-write + + + TICK_SEL + This bit is used to select clock for timer %s. When this bit is set to 1 LEDC_APB_CLK_SEL[1:0] should be 1, otherwise the timer clock may be not accurate. + +1'h0: SLOW_CLK 1'h1: REF_TICK + 24 + 1 + read-write + + + PARA_UP + Set this bit to update LEDC_CLK_DIV_TIMER%s and LEDC_TIMER%s_DUTY_RES. + 25 + 1 + write-only + + + + + 4 + 0x8 + TIMER%s_VALUE + Timer %s current counter value + 0xA4 + 0x20 + + + CNT + This register stores the current counter value of timer %s. + 0 + 14 + read-only + + + + + INT_RAW + Raw interrupt status + 0xC0 + 0x20 + + + TIMER0_OVF_INT_RAW + Triggered when the timer0 has reached its maximum counter value. + 0 + 1 + read-write + + + TIMER1_OVF_INT_RAW + Triggered when the timer1 has reached its maximum counter value. + 1 + 1 + read-write + + + TIMER2_OVF_INT_RAW + Triggered when the timer2 has reached its maximum counter value. + 2 + 1 + read-write + + + TIMER3_OVF_INT_RAW + Triggered when the timer3 has reached its maximum counter value. + 3 + 1 + read-write + + + DUTY_CHNG_END_CH0_INT_RAW + Interrupt raw bit for channel 0. Triggered when the gradual change of duty has finished. + 4 + 1 + read-write + + + DUTY_CHNG_END_CH1_INT_RAW + Interrupt raw bit for channel 1. Triggered when the gradual change of duty has finished. + 5 + 1 + read-write + + + DUTY_CHNG_END_CH2_INT_RAW + Interrupt raw bit for channel 2. Triggered when the gradual change of duty has finished. + 6 + 1 + read-write + + + DUTY_CHNG_END_CH3_INT_RAW + Interrupt raw bit for channel 3. Triggered when the gradual change of duty has finished. + 7 + 1 + read-write + + + DUTY_CHNG_END_CH4_INT_RAW + Interrupt raw bit for channel 4. Triggered when the gradual change of duty has finished. + 8 + 1 + read-write + + + DUTY_CHNG_END_CH5_INT_RAW + Interrupt raw bit for channel 5. Triggered when the gradual change of duty has finished. + 9 + 1 + read-write + + + DUTY_CHNG_END_CH6_INT_RAW + Interrupt raw bit for channel 6. Triggered when the gradual change of duty has finished. + 10 + 1 + read-write + + + DUTY_CHNG_END_CH7_INT_RAW + Interrupt raw bit for channel 7. Triggered when the gradual change of duty has finished. + 11 + 1 + read-write + + + OVF_CNT_CH0_INT_RAW + Interrupt raw bit for channel 0. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH0. + 12 + 1 + read-write + + + OVF_CNT_CH1_INT_RAW + Interrupt raw bit for channel 1. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH1. + 13 + 1 + read-write + + + OVF_CNT_CH2_INT_RAW + Interrupt raw bit for channel 2. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH2. + 14 + 1 + read-write + + + OVF_CNT_CH3_INT_RAW + Interrupt raw bit for channel 3. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH3. + 15 + 1 + read-write + + + OVF_CNT_CH4_INT_RAW + Interrupt raw bit for channel 4. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH4. + 16 + 1 + read-write + + + OVF_CNT_CH5_INT_RAW + Interrupt raw bit for channel 5. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH5. + 17 + 1 + read-write + + + OVF_CNT_CH6_INT_RAW + Interrupt raw bit for channel 6. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH6. + 18 + 1 + read-write + + + OVF_CNT_CH7_INT_RAW + Interrupt raw bit for channel 7. Triggered when the ovf_cnt has reached the value specified by LEDC_OVF_NUM_CH7. + 19 + 1 + read-write + + + + + INT_ST + Masked interrupt status + 0xC4 + 0x20 + + + TIMER0_OVF_INT_ST + This is the masked interrupt status bit for the LEDC_TIMER0_OVF_INT interrupt when LEDC_TIMER0_OVF_INT_ENA is set to 1. + 0 + 1 + read-only + + + TIMER1_OVF_INT_ST + This is the masked interrupt status bit for the LEDC_TIMER1_OVF_INT interrupt when LEDC_TIMER1_OVF_INT_ENA is set to 1. + 1 + 1 + read-only + + + TIMER2_OVF_INT_ST + This is the masked interrupt status bit for the LEDC_TIMER2_OVF_INT interrupt when LEDC_TIMER2_OVF_INT_ENA is set to 1. + 2 + 1 + read-only + + + TIMER3_OVF_INT_ST + This is the masked interrupt status bit for the LEDC_TIMER3_OVF_INT interrupt when LEDC_TIMER3_OVF_INT_ENA is set to 1. + 3 + 1 + read-only + + + DUTY_CHNG_END_CH0_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH0_INT interrupt when LEDC_DUTY_CHNG_END_CH0_INT_ENAIS set to 1. + 4 + 1 + read-only + + + DUTY_CHNG_END_CH1_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH1_INT interrupt when LEDC_DUTY_CHNG_END_CH1_INT_ENAIS set to 1. + 5 + 1 + read-only + + + DUTY_CHNG_END_CH2_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH2_INT interrupt when LEDC_DUTY_CHNG_END_CH2_INT_ENAIS set to 1. + 6 + 1 + read-only + + + DUTY_CHNG_END_CH3_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH3_INT interrupt when LEDC_DUTY_CHNG_END_CH3_INT_ENAIS set to 1. + 7 + 1 + read-only + + + DUTY_CHNG_END_CH4_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH4_INT interrupt when LEDC_DUTY_CHNG_END_CH4_INT_ENAIS set to 1. + 8 + 1 + read-only + + + DUTY_CHNG_END_CH5_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH5_INT interrupt when LEDC_DUTY_CHNG_END_CH5_INT_ENAIS set to 1. + 9 + 1 + read-only + + + DUTY_CHNG_END_CH6_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH6_INT interrupt when LEDC_DUTY_CHNG_END_CH6_INT_ENAIS set to 1. + 10 + 1 + read-only + + + DUTY_CHNG_END_CH7_INT_ST + This is the masked interrupt status bit for the LEDC_DUTY_CHNG_END_CH7_INT interrupt when LEDC_DUTY_CHNG_END_CH7_INT_ENAIS set to 1. + 11 + 1 + read-only + + + OVF_CNT_CH0_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH0_INT interrupt when LEDC_OVF_CNT_CH0_INT_ENA is set to 1. + 12 + 1 + read-only + + + OVF_CNT_CH1_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH1_INT interrupt when LEDC_OVF_CNT_CH1_INT_ENA is set to 1. + 13 + 1 + read-only + + + OVF_CNT_CH2_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH2_INT interrupt when LEDC_OVF_CNT_CH2_INT_ENA is set to 1. + 14 + 1 + read-only + + + OVF_CNT_CH3_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH3_INT interrupt when LEDC_OVF_CNT_CH3_INT_ENA is set to 1. + 15 + 1 + read-only + + + OVF_CNT_CH4_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH4_INT interrupt when LEDC_OVF_CNT_CH4_INT_ENA is set to 1. + 16 + 1 + read-only + + + OVF_CNT_CH5_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH5_INT interrupt when LEDC_OVF_CNT_CH5_INT_ENA is set to 1. + 17 + 1 + read-only + + + OVF_CNT_CH6_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH6_INT interrupt when LEDC_OVF_CNT_CH6_INT_ENA is set to 1. + 18 + 1 + read-only + + + OVF_CNT_CH7_INT_ST + This is the masked interrupt status bit for the LEDC_OVF_CNT_CH7_INT interrupt when LEDC_OVF_CNT_CH7_INT_ENA is set to 1. + 19 + 1 + read-only + + + + + INT_ENA + Interrupt enable bits + 0xC8 + 0x20 + + + TIMER0_OVF_INT_ENA + The interrupt enable bit for the LEDC_TIMER0_OVF_INT interrupt. + 0 + 1 + read-write + + + TIMER1_OVF_INT_ENA + The interrupt enable bit for the LEDC_TIMER1_OVF_INT interrupt. + 1 + 1 + read-write + + + TIMER2_OVF_INT_ENA + The interrupt enable bit for the LEDC_TIMER2_OVF_INT interrupt. + 2 + 1 + read-write + + + TIMER3_OVF_INT_ENA + The interrupt enable bit for the LEDC_TIMER3_OVF_INT interrupt. + 3 + 1 + read-write + + + DUTY_CHNG_END_CH0_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH0_INT interrupt. + 4 + 1 + read-write + + + DUTY_CHNG_END_CH1_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH1_INT interrupt. + 5 + 1 + read-write + + + DUTY_CHNG_END_CH2_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH2_INT interrupt. + 6 + 1 + read-write + + + DUTY_CHNG_END_CH3_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH3_INT interrupt. + 7 + 1 + read-write + + + DUTY_CHNG_END_CH4_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH4_INT interrupt. + 8 + 1 + read-write + + + DUTY_CHNG_END_CH5_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH5_INT interrupt. + 9 + 1 + read-write + + + DUTY_CHNG_END_CH6_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH6_INT interrupt. + 10 + 1 + read-write + + + DUTY_CHNG_END_CH7_INT_ENA + The interrupt enable bit for the LEDC_DUTY_CHNG_END_CH7_INT interrupt. + 11 + 1 + read-write + + + OVF_CNT_CH0_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH0_INT interrupt. + 12 + 1 + read-write + + + OVF_CNT_CH1_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH1_INT interrupt. + 13 + 1 + read-write + + + OVF_CNT_CH2_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH2_INT interrupt. + 14 + 1 + read-write + + + OVF_CNT_CH3_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH3_INT interrupt. + 15 + 1 + read-write + + + OVF_CNT_CH4_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH4_INT interrupt. + 16 + 1 + read-write + + + OVF_CNT_CH5_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH5_INT interrupt. + 17 + 1 + read-write + + + OVF_CNT_CH6_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH6_INT interrupt. + 18 + 1 + read-write + + + OVF_CNT_CH7_INT_ENA + The interrupt enable bit for the LEDC_OVF_CNT_CH7_INT interrupt. + 19 + 1 + read-write + + + + + INT_CLR + Interrupt clear bits + 0xCC + 0x20 + + + TIMER0_OVF_INT_CLR + Set this bit to clear the LEDC_TIMER0_OVF_INT interrupt. + 0 + 1 + write-only + + + TIMER1_OVF_INT_CLR + Set this bit to clear the LEDC_TIMER1_OVF_INT interrupt. + 1 + 1 + write-only + + + TIMER2_OVF_INT_CLR + Set this bit to clear the LEDC_TIMER2_OVF_INT interrupt. + 2 + 1 + write-only + + + TIMER3_OVF_INT_CLR + Set this bit to clear the LEDC_TIMER3_OVF_INT interrupt. + 3 + 1 + write-only + + + DUTY_CHNG_END_CH0_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH0_INT interrupt. + 4 + 1 + write-only + + + DUTY_CHNG_END_CH1_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH1_INT interrupt. + 5 + 1 + write-only + + + DUTY_CHNG_END_CH2_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH2_INT interrupt. + 6 + 1 + write-only + + + DUTY_CHNG_END_CH3_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH3_INT interrupt. + 7 + 1 + write-only + + + DUTY_CHNG_END_CH4_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH4_INT interrupt. + 8 + 1 + write-only + + + DUTY_CHNG_END_CH5_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH5_INT interrupt. + 9 + 1 + write-only + + + DUTY_CHNG_END_CH6_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH6_INT interrupt. + 10 + 1 + write-only + + + DUTY_CHNG_END_CH7_INT_CLR + Set this bit to clear the LEDC_DUTY_CHNG_END_CH7_INT interrupt. + 11 + 1 + write-only + + + OVF_CNT_CH0_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH0_INT interrupt. + 12 + 1 + write-only + + + OVF_CNT_CH1_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH1_INT interrupt. + 13 + 1 + write-only + + + OVF_CNT_CH2_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH2_INT interrupt. + 14 + 1 + write-only + + + OVF_CNT_CH3_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH3_INT interrupt. + 15 + 1 + write-only + + + OVF_CNT_CH4_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH4_INT interrupt. + 16 + 1 + write-only + + + OVF_CNT_CH5_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH5_INT interrupt. + 17 + 1 + write-only + + + OVF_CNT_CH6_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH6_INT interrupt. + 18 + 1 + write-only + + + OVF_CNT_CH7_INT_CLR + Set this bit to clear the LEDC_OVF_CNT_CH7_INT interrupt. + 19 + 1 + write-only + + + + + CONF + Global ledc configuration register + 0xD0 + 0x20 + + + APB_CLK_SEL + This bit is used to select clock source for the 4 timers . + +2'd1: APB_CLK 2'd2: RTC8M_CLK 2'd3: XTAL_CLK + 0 + 2 + read-write + + + CLK_EN + This bit is used to control clock. + +1'b1: Force clock on for register. 1'h0: Support clock only when application writes registers. + 31 + 1 + read-write + + + + + DATE + Version control register + 0xFC + 0x20 + 0x19040200 + + + DATE + This is the version control register. + 0 + 32 + read-write + + + + + + + PCNT + Pulse Count Controller + PCNT + 0x60017000 + + 0x0 + 0x68 + registers + + + PCNT + 41 + + + + 4 + 0xC + U%s_CONF0 + Configuration register 0 for unit %s + 0x0 + 0x20 + 0x00003C10 + + + FILTER_THRES + This sets the maximum threshold, in APB_CLK cycles, for the filter. + +Any pulses with width less than this will be ignored when the filter is enabled. + 0 + 10 + read-write + + + FILTER_EN + This is the enable bit for unit %s's input filter. + 10 + 1 + read-write + + + THR_ZERO_EN + This is the enable bit for unit %s's zero comparator. + 11 + 1 + read-write + + + THR_H_LIM_EN + This is the enable bit for unit %s's thr_h_lim comparator. + 12 + 1 + read-write + + + THR_L_LIM_EN + This is the enable bit for unit %s's thr_l_lim comparator. + 13 + 1 + read-write + + + THR_THRES0_EN + This is the enable bit for unit %s's thres0 comparator. + 14 + 1 + read-write + + + THR_THRES1_EN + This is the enable bit for unit %s's thres1 comparator. + 15 + 1 + read-write + + + CH0_NEG_MODE + This register sets the behavior when the signal input of channel 0 detects a negative edge. + +1: Increase the counter;2: Decrease the counter;0, 3: No effect on counter + 16 + 2 + read-write + + + CH0_POS_MODE + This register sets the behavior when the signal input of channel 0 detects a positive edge. + +1: Increase the counter;2: Decrease the counter;0, 3: No effect on counter + 18 + 2 + read-write + + + CH0_HCTRL_MODE + This register configures how the CH%s_POS_MODE/CH%s_NEG_MODE settings will be modified when the control signal is high. + +0: No modification;1: Invert behavior (increase -> decrease, decrease -> increase);2, 3: Inhibit counter modification + 20 + 2 + read-write + + + CH0_LCTRL_MODE + This register configures how the CH%s_POS_MODE/CH%s_NEG_MODE settings will be modified when the control signal is low. + +0: No modification;1: Invert behavior (increase -> decrease, decrease -> increase);2, 3: Inhibit counter modification + 22 + 2 + read-write + + + CH1_NEG_MODE + This register sets the behavior when the signal input of channel 1 detects a negative edge. + +1: Increment the counter;2: Decrement the counter;0, 3: No effect on counter + 24 + 2 + read-write + + + CH1_POS_MODE + This register sets the behavior when the signal input of channel 1 detects a positive edge. + +1: Increment the counter;2: Decrement the counter;0, 3: No effect on counter + 26 + 2 + read-write + + + CH1_HCTRL_MODE + This register configures how the CH%s_POS_MODE/CH%s_NEG_MODE settings will be modified when the control signal is high. + +0: No modification;1: Invert behavior (increase -> decrease, decrease -> increase);2, 3: Inhibit counter modification + 28 + 2 + read-write + + + CH1_LCTRL_MODE + This register configures how the CH%s_POS_MODE/CH%s_NEG_MODE settings will be modified when the control signal is low. + +0: No modification;1: Invert behavior (increase -> decrease, decrease -> increase);2, 3: Inhibit counter modification + 30 + 2 + read-write + + + + + 4 + 0xC + U%s_CONF1 + Configuration register 1 for unit %s + 0x4 + 0x20 + + + CNT_THRES0 + This register is used to configure the thres0 value for unit %s. + 0 + 16 + read-write + + + CNT_THRES1 + This register is used to configure the thres1 value for unit %s. + 16 + 16 + read-write + + + + + 4 + 0xC + U%s_CONF2 + Configuration register 2 for unit %s + 0x8 + 0x20 + + + CNT_H_LIM + This register is used to configure the thr_h_lim value for unit %s. + 0 + 16 + read-write + + + CNT_L_LIM + This register is used to configure the thr_l_lim value for unit %s. + 16 + 16 + read-write + + + + + 4 + 0x4 + U%s_CNT + Counter value for unit %s + 0x30 + 0x20 + + + CNT + This register stores the current pulse count value for unit %s. + 0 + 16 + read-only + + + + + INT_RAW + Interrupt raw status register + 0x40 + 0x20 + + + CNT_THR_EVENT_U0 + The raw interrupt status bit for the PCNT_CNT_THR_EVENT_U0_INT interrupt. + 0 + 1 + read-only + + + CNT_THR_EVENT_U1 + The raw interrupt status bit for the PCNT_CNT_THR_EVENT_U1_INT interrupt. + 1 + 1 + read-only + + + CNT_THR_EVENT_U2 + The raw interrupt status bit for the PCNT_CNT_THR_EVENT_U2_INT interrupt. + 2 + 1 + read-only + + + CNT_THR_EVENT_U3 + The raw interrupt status bit for the PCNT_CNT_THR_EVENT_U3_INT interrupt. + 3 + 1 + read-only + + + + + INT_ST + Interrupt status register + 0x44 + 0x20 + + + CNT_THR_EVENT_U0 + The masked interrupt status bit for the PCNT_CNT_THR_EVENT_U0_INT interrupt. + 0 + 1 + read-only + + + CNT_THR_EVENT_U1 + The masked interrupt status bit for the PCNT_CNT_THR_EVENT_U1_INT interrupt. + 1 + 1 + read-only + + + CNT_THR_EVENT_U2 + The masked interrupt status bit for the PCNT_CNT_THR_EVENT_U2_INT interrupt. + 2 + 1 + read-only + + + CNT_THR_EVENT_U3 + The masked interrupt status bit for the PCNT_CNT_THR_EVENT_U3_INT interrupt. + 3 + 1 + read-only + + + + + INT_ENA + Interrupt enable register + 0x48 + 0x20 + + + CNT_THR_EVENT_U0 + The interrupt enable bit for the PCNT_CNT_THR_EVENT_U0_INT interrupt. + 0 + 1 + read-write + + + CNT_THR_EVENT_U1 + The interrupt enable bit for the PCNT_CNT_THR_EVENT_U1_INT interrupt. + 1 + 1 + read-write + + + CNT_THR_EVENT_U2 + The interrupt enable bit for the PCNT_CNT_THR_EVENT_U2_INT interrupt. + 2 + 1 + read-write + + + CNT_THR_EVENT_U3 + The interrupt enable bit for the PCNT_CNT_THR_EVENT_U3_INT interrupt. + 3 + 1 + read-write + + + + + INT_CLR + Interrupt clear register + 0x4C + 0x20 + + + CNT_THR_EVENT_U0 + Set this bit to clear the PCNT_CNT_THR_EVENT_U0_INT interrupt. + 0 + 1 + write-only + + + CNT_THR_EVENT_U1 + Set this bit to clear the PCNT_CNT_THR_EVENT_U1_INT interrupt. + 1 + 1 + write-only + + + CNT_THR_EVENT_U2 + Set this bit to clear the PCNT_CNT_THR_EVENT_U2_INT interrupt. + 2 + 1 + write-only + + + CNT_THR_EVENT_U3 + Set this bit to clear the PCNT_CNT_THR_EVENT_U3_INT interrupt. + 3 + 1 + write-only + + + + + 4 + 0x4 + U%s_STATUS + PNCT UNIT%s status register + 0x50 + 0x20 + + + ZERO_MODE + The pulse counter status of PCNT_U%s corresponding to 0. 0: pulse counter decreases from positive to 0. 1: pulse counter increases from negative to 0. 2: pulse counter is negative. 3: pulse counter is positive. + 0 + 2 + read-only + + + THRES1 + The latched value of thres1 event of PCNT_U%s when threshold event interrupt is valid. 1: the current pulse counter equals to thres1 and thres1 event is valid. 0: others + 2 + 1 + read-only + + + THRES0 + The latched value of thres0 event of PCNT_U%s when threshold event interrupt is valid. 1: the current pulse counter equals to thres0 and thres0 event is valid. 0: others + 3 + 1 + read-only + + + L_LIM + The latched value of low limit event of PCNT_U%s when threshold event interrupt is valid. 1: the current pulse counter equals to thr_l_lim and low limit event is valid. 0: others + 4 + 1 + read-only + + + H_LIM + The latched value of high limit event of PCNT_U%s when threshold event interrupt is valid. 1: the current pulse counter equals to thr_h_lim and high limit event is valid. 0: others + 5 + 1 + read-only + + + ZERO + The latched value of zero threshold event of PCNT_U%s when threshold event interrupt is valid. 1: the current pulse counter equals to 0 and zero threshold event is valid. 0: others + 6 + 1 + read-only + + + + + CTRL + Control register for all counters + 0x60 + 0x20 + 0x00000001 + + + CNT_RST_U0 + Set this bit to clear unit 0's counter. + 0 + 1 + read-write + + + CNT_PAUSE_U0 + Set this bit to freeze unit 0's counter. + 1 + 1 + read-write + + + CNT_RST_U1 + Set this bit to clear unit 1's counter. + 2 + 1 + read-write + + + CNT_PAUSE_U1 + Set this bit to freeze unit 1's counter. + 3 + 1 + read-write + + + CNT_RST_U2 + Set this bit to clear unit 2's counter. + 4 + 1 + read-write + + + CNT_PAUSE_U2 + Set this bit to freeze unit 2's counter. + 5 + 1 + read-write + + + CNT_RST_U3 + Set this bit to clear unit 3's counter. + 6 + 1 + read-write + + + CNT_PAUSE_U3 + Set this bit to freeze unit 3's counter. + 7 + 1 + read-write + + + CLK_EN + The registers clock gate enable signal of PCNT module. 1: the registers can be read and written by application. 0: the registers can not be read or written by application + 16 + 1 + read-write + + + + + DATE + PCNT version control register + 0xFC + 0x20 + 0x19072601 + + + DATE + This is the PCNT version control register. + 0 + 32 + read-write + + + + + + + PERI_BACKUP + PERI_BACKUP Peripheral + PERI_BACKUP + 0x6002A000 + + 0x0 + 0x30 + registers + + + PERI_BACKUP + 97 + + + + CONFIG + x + 0x0 + 0x20 + 0x00006480 + + + FLOW_ERR + x + 0 + 3 + read-only + + + ADDR_MAP_MODE + x + 3 + 1 + read-write + + + BURST_LIMIT + x + 4 + 5 + read-write + + + TOUT_THRES + x + 9 + 10 + read-write + + + SIZE + x + 19 + 10 + read-write + + + START + x + 29 + 1 + write-only + + + TO_MEM + x + 30 + 1 + read-write + + + ENA + x + 31 + 1 + read-write + + + + + APB_ADDR + x + 0x4 + 0x20 + + + APB_START_ADDR + x + 0 + 32 + read-write + + + + + MEM_ADDR + x + 0x8 + 0x20 + + + MEM_START_ADDR + x + 0 + 32 + read-write + + + + + REG_MAP0 + x + 0xC + 0x20 + + + MAP0 + x + 0 + 32 + read-write + + + + + REG_MAP1 + x + 0x10 + 0x20 + + + MAP1 + x + 0 + 32 + read-write + + + + + REG_MAP2 + x + 0x14 + 0x20 + + + MAP2 + x + 0 + 32 + read-write + + + + + REG_MAP3 + x + 0x18 + 0x20 + + + MAP3 + x + 0 + 32 + read-write + + + + + INT_RAW + x + 0x1C + 0x20 + + + DONE_INT_RAW + x + 0 + 1 + read-only + + + ERR_INT_RAW + x + 1 + 1 + read-only + + + + + INT_ST + x + 0x20 + 0x20 + + + DONE_INT_ST + x + 0 + 1 + read-only + + + ERR_INT_ST + x + 1 + 1 + read-only + + + + + INT_ENA + x + 0x24 + 0x20 + + + DONE_INT_ENA + x + 0 + 1 + read-write + + + ERR_INT_ENA + x + 1 + 1 + read-write + + + + + INT_CLR + x + 0x28 + 0x20 + + + DONE_INT_CLR + x + 0 + 1 + write-only + + + ERR_INT_CLR + x + 1 + 1 + write-only + + + + + DATE + x + 0xFC + 0x20 + 0x02012300 + + + DATE + x + 0 + 28 + read-write + + + CLK_EN + register file clk gating + 31 + 1 + read-write + + + + + + + MCPWM0 + Motor Control Pulse-Width Modulation 0 + PWM + 0x6001E000 + + 0x0 + 0x128 + registers + + + MCPWM0 + 31 + + + + CLK_CFG + PWM clock prescaler register. + 0x0 + 0x20 + + + CLK_PRESCALE + Period of PWM_clk = 6.25ns * (PWM_CLK_PRESCALE + 1) + 0 + 8 + read-write + + + + + TIMER0_CFG0 + PWM timer0 period and update method configuration register. + 0x4 + 0x20 + 0x0000FF00 + + + TIMER0_PRESCALE + period of PT0_clk = Period of PWM_clk * (PWM_TIMER0_PRESCALE + 1) + 0 + 8 + read-write + + + TIMER0_PERIOD + period shadow register of PWM timer0 + 8 + 16 + read-write + + + TIMER0_PERIOD_UPMETHOD + Update method for active register of PWM timer0 period, 0: immediate, 1: TEZ, 2: sync, 3: TEZ | sync. TEZ here and below means timer equal zero event + 24 + 2 + read-write + + + + + TIMER0_CFG1 + PWM timer0 working mode and start/stop control configuration register. + 0x8 + 0x20 + + + TIMER0_START + PWM timer0 start and stop control. 0: if PWM timer0 starts, then stops at TEZ, 1: if timer0 starts, then stops at TEP, 2: PWM timer0 starts and runs on, 3: timer0 starts and stops at the next TEZ, 4: timer0 starts and stops at the next TEP. TEP here and below means the event that happens when the timer equals to period + 0 + 3 + read-write + + + TIMER0_MOD + PWM timer0 working mode, 0: freeze, 1: increase mode, 2: decrease mode, 3: up-down mode + 3 + 2 + read-write + + + + + TIMER0_SYNC + PWM timer0 sync function configuration register. + 0xC + 0x20 + + + TIMER0_SYNCI_EN + When set, timer reloading with phase on sync input event is enabled. + 0 + 1 + read-write + + + SW + Toggling this bit will trigger a software sync. + 1 + 1 + read-write + + + TIMER0_SYNCO_SEL + PWM timer0 sync_out selection, 0: synci, 1: TEZ, 2: TEP, otherwise:sync out is software sync + 2 + 2 + read-write + + + TIMER0_PHASE + phase for timer reload on sync event + 4 + 16 + read-write + + + TIMER0_PHASE_DIRECTION + Configure the PWM timer0's direction when timer0 mode is up-down mode. 0: increase; 1: decrease. + 20 + 1 + read-write + + + + + TIMER0_STATUS + PWM timer0 status register. + 0x10 + 0x20 + + + TIMER0_VALUE + current PWM timer0 counter value + 0 + 16 + read-only + + + TIMER0_DIRECTION + current PWM timer0 counter direction, 0: increment 1: decrement + 16 + 1 + read-only + + + + + TIMER1_CFG0 + PWM timer1 period and update method configuration register. + 0x14 + 0x20 + 0x0000FF00 + + + TIMER1_PRESCALE + period of PT0_clk = Period of PWM_clk * (PWM_timer1_PRESCALE + 1) + 0 + 8 + read-write + + + TIMER1_PERIOD + period shadow register of PWM timer1 + 8 + 16 + read-write + + + TIMER1_PERIOD_UPMETHOD + Update method for active register of PWM timer1 period, 0: immediate, 1: TEZ, 2: sync, 3: TEZ | sync. TEZ here and below means timer equal zero event + 24 + 2 + read-write + + + + + TIMER1_CFG1 + PWM timer1 working mode and start/stop control configuration register. + 0x18 + 0x20 + + + TIMER1_START + PWM timer1 start and stop control. 0: if PWM timer1 starts, then stops at TEZ, 1: if timer1 starts, then stops at TEP, 2: PWM timer1 starts and runs on, 3: timer1 starts and stops at the next TEZ, 4: timer1 starts and stops at the next TEP. TEP here and below means the event that happens when the timer equals to period + 0 + 3 + read-write + + + TIMER1_MOD + PWM timer1 working mode, 0: freeze, 1: increase mode, 2: decrease mode, 3: up-down mode + 3 + 2 + read-write + + + + + TIMER1_SYNC + PWM timer1 sync function configuration register. + 0x1C + 0x20 + + + TIMER1_SYNCI_EN + When set, timer reloading with phase on sync input event is enabled. + 0 + 1 + read-write + + + SW + Toggling this bit will trigger a software sync. + 1 + 1 + read-write + + + TIMER1_SYNCO_SEL + PWM timer1 sync_out selection, 0: synci, 1: TEZ, 2: TEP, otherwise:sync out is software sync + 2 + 2 + read-write + + + TIMER1_PHASE + phase for timer reload on sync event + 4 + 16 + read-write + + + TIMER1_PHASE_DIRECTION + Configure the PWM timer1's direction when timer1 mode is up-down mode. 0: increase; 1: decrease. + 20 + 1 + read-write + + + + + TIMER1_STATUS + PWM timer1 status register. + 0x20 + 0x20 + + + TIMER1_VALUE + current PWM timer1 counter value + 0 + 16 + read-only + + + TIMER1_DIRECTION + current PWM timer1 counter direction, 0: increment 1: decrement + 16 + 1 + read-only + + + + + TIMER2_CFG0 + PWM timer2 period and update method configuration register. + 0x24 + 0x20 + 0x0000FF00 + + + TIMER2_PRESCALE + period of PT0_clk = Period of PWM_clk * (PWM_timer2_PRESCALE + 1) + 0 + 8 + read-write + + + TIMER2_PERIOD + period shadow register of PWM timer2 + 8 + 16 + read-write + + + TIMER2_PERIOD_UPMETHOD + Update method for active register of PWM timer2 period, 0: immediate, 1: TEZ, 2: sync, 3: TEZ | sync. TEZ here and below means timer equal zero event + 24 + 2 + read-write + + + + + TIMER2_CFG1 + PWM timer2 working mode and start/stop control configuration register. + 0x28 + 0x20 + + + TIMER2_START + PWM timer2 start and stop control. 0: if PWM timer2 starts, then stops at TEZ, 1: if timer2 starts, then stops at TEP, 2: PWM timer2 starts and runs on, 3: timer2 starts and stops at the next TEZ, 4: timer2 starts and stops at the next TEP. TEP here and below means the event that happens when the timer equals to period + 0 + 3 + read-write + + + TIMER2_MOD + PWM timer2 working mode, 0: freeze, 1: increase mode, 2: decrease mode, 3: up-down mode + 3 + 2 + read-write + + + + + TIMER2_SYNC + PWM timer2 sync function configuration register. + 0x2C + 0x20 + + + TIMER2_SYNCI_EN + When set, timer reloading with phase on sync input event is enabled. + 0 + 1 + read-write + + + SW + Toggling this bit will trigger a software sync. + 1 + 1 + read-write + + + TIMER2_SYNCO_SEL + PWM timer2 sync_out selection, 0: synci, 1: TEZ, 2: TEP, otherwise:sync out is software sync + 2 + 2 + read-write + + + TIMER2_PHASE + phase for timer reload on sync event + 4 + 16 + read-write + + + TIMER2_PHASE_DIRECTION + Configure the PWM timer2's direction when timer2 mode is up-down mode. 0: increase; 1: decrease. + 20 + 1 + read-write + + + + + TIMER2_STATUS + PWM timer2 status register. + 0x30 + 0x20 + + + TIMER2_VALUE + current PWM timer2 counter value + 0 + 16 + read-only + + + TIMER2_DIRECTION + current PWM timer2 counter direction, 0: increment 1: decrement + 16 + 1 + read-only + + + + + TIMER_SYNCI_CFG + Synchronization input selection for three PWM timers. + 0x34 + 0x20 + + + TIMER0_SYNCISEL + select sync input for PWM timer0, 1: PWM timer0 sync_out, 2: PWM timer1 sync_out, 3: PWM timer2 sync_out, 4: SYNC0 from GPIO matrix, 5: SYNC1 from GPIO matrix, 6: SYNC2 from GPIO matrix, other values: no sync input selected + 0 + 3 + read-write + + + TIMER1_SYNCISEL + select sync input for PWM timer1, 1: PWM timer0 sync_out, 2: PWM timer1 sync_out, 3: PWM timer2 sync_out, 4: SYNC0 from GPIO matrix, 5: SYNC1 from GPIO matrix, 6: SYNC2 from GPIO matrix, other values: no sync input selected + 3 + 3 + read-write + + + TIMER2_SYNCISEL + select sync input for PWM timer2, 1: PWM timer0 sync_out, 2: PWM timer1 sync_out, 3: PWM timer2 sync_out, 4: SYNC0 from GPIO matrix, 5: SYNC1 from GPIO matrix, 6: SYNC2 from GPIO matrix, other values: no sync input selected + 6 + 3 + read-write + + + EXTERNAL_SYNCI0_INVERT + invert SYNC0 from GPIO matrix + 9 + 1 + read-write + + + EXTERNAL_SYNCI1_INVERT + invert SYNC1 from GPIO matrix + 10 + 1 + read-write + + + EXTERNAL_SYNCI2_INVERT + invert SYNC2 from GPIO matrix + 11 + 1 + read-write + + + + + OPERATOR_TIMERSEL + Select specific timer for PWM operators. + 0x38 + 0x20 + + + OPERATOR0_TIMERSEL + Select which PWM timer's is the timing reference for PWM operator0, 0: timer0, 1: timer1, 2: timer2 + 0 + 2 + read-write + + + OPERATOR1_TIMERSEL + Select which PWM timer's is the timing reference for PWM operator1, 0: timer0, 1: timer1, 2: timer2 + 2 + 2 + read-write + + + OPERATOR2_TIMERSEL + Select which PWM timer's is the timing reference for PWM operator2, 0: timer0, 1: timer1, 2: timer2 + 4 + 2 + read-write + + + + + CMPR0_CFG + Transfer status and update method for time stamp registers A and B + 0x3C + 0x20 + + + CMPR0_A_UPMETHOD + Update method for PWM generator 0 time stamp A's active register. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: TEP,when bit2 is set to 1: sync, when bit3 is set to 1: disable the update. + 0 + 4 + read-write + + + CMPR0_B_UPMETHOD + Update method for PWM generator 0 time stamp B's active register. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: TEP,when bit2 is set to 1: sync, when bit3 is set to 1: disable the update. + 4 + 4 + read-write + + + CMPR0_A_SHDW_FULL + Set and reset by hardware. If set, PWM generator 0 time stamp A's shadow reg is filled and waiting to be transferred to A's active reg. If cleared, A's active reg has been updated with shadow register latest value + 8 + 1 + read-write + + + CMPR0_B_SHDW_FULL + Set and reset by hardware. If set, PWM generator 0 time stamp B's shadow reg is filled and waiting to be transferred to B's active reg. If cleared, B's active reg has been updated with shadow register latest value + 9 + 1 + read-write + + + + + CMPR0_VALUE0 + Shadow register for register A. + 0x40 + 0x20 + + + CMPR0_A + PWM generator 0 time stamp A's shadow register + 0 + 16 + read-write + + + + + CMPR0_VALUE1 + Shadow register for register B. + 0x44 + 0x20 + + + CMPR0_B + PWM generator 0 time stamp B's shadow register + 0 + 16 + read-write + + + + + GEN0_CFG0 + Fault event T0 and T1 handling + 0x48 + 0x20 + + + GEN0_CFG_UPMETHOD + Update method for PWM generator 0's active register of configuration. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: + 0 + 4 + read-write + + + GEN0_T0_SEL + Source selection for PWM generator 0 event_t0, take effect immediately, 0: fault_event0, 1: fault_event1, 2: fault_event2, 3: sync_taken, 4: none + 4 + 3 + read-write + + + GEN0_T1_SEL + Source selection for PWM generator 0 event_t1, take effect immediately, 0: fault_event0, 1: fault_event1, 2: fault_event2, 3: sync_taken, 4: none + 7 + 3 + read-write + + + + + GEN0_FORCE + Permissives to force PWM0A and PWM0B outputs by software + 0x4C + 0x20 + 0x00000020 + + + GEN0_CNTUFORCE_UPMETHOD + Updating method for continuous software force of PWM generator0. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ,,when bit1 is set to 1: TEP, when bit2 is set to 1: TEA, when bit3 is set to 1: TEB, when bit4 is set to 1: sync, when bit5 is set to 1: disable update. (TEA/B here and below means an event generated when the timer's value equals to that of register A/B.) + 0 + 6 + read-write + + + GEN0_A_CNTUFORCE_MODE + Continuous software force mode for PWM0A. 0: disabled, 1: low, 2: high, 3: disabled + 6 + 2 + read-write + + + GEN0_B_CNTUFORCE_MODE + Continuous software force mode for PWM0B. 0: disabled, 1: low, 2: high, 3: disabled + 8 + 2 + read-write + + + GEN0_A_NCIFORCE + Trigger of non-continuous immediate software-force event for PWM0A, a toggle will trigger a force event. + 10 + 1 + read-write + + + GEN0_A_NCIFORCE_MODE + non-continuous immediate software force mode for PWM0A, 0: disabled, 1: low, 2: high, 3: disabled + 11 + 2 + read-write + + + GEN0_B_NCIFORCE + Trigger of non-continuous immediate software-force event for PWM0B, a toggle will trigger a force event. + 13 + 1 + read-write + + + GEN0_B_NCIFORCE_MODE + non-continuous immediate software force mode for PWM0B, 0: disabled, 1: low, 2: high, 3: disabled + 14 + 2 + read-write + + + + + GEN0_A + Actions triggered by events on PWM0A + 0x50 + 0x20 + + + UTEZ + Action on PWM0A triggered by event TEZ when timer increasing + 0 + 2 + read-write + + + UTEP + Action on PWM0A triggered by event TEP when timer increasing + 2 + 2 + read-write + + + UTEA + Action on PWM0A triggered by event TEA when timer increasing + 4 + 2 + read-write + + + UTEB + Action on PWM0A triggered by event TEB when timer increasing + 6 + 2 + read-write + + + UT0 + Action on PWM0A triggered by event_t0 when timer increasing + 8 + 2 + read-write + + + UT1 + Action on PWM0A triggered by event_t1 when timer increasing + 10 + 2 + read-write + + + DTEZ + Action on PWM0A triggered by event TEZ when timer decreasing + 12 + 2 + read-write + + + DTEP + Action on PWM0A triggered by event TEP when timer decreasing + 14 + 2 + read-write + + + DTEA + Action on PWM0A triggered by event TEA when timer decreasing + 16 + 2 + read-write + + + DTEB + Action on PWM0A triggered by event TEB when timer decreasing + 18 + 2 + read-write + + + DT0 + Action on PWM0A triggered by event_t0 when timer decreasing + 20 + 2 + read-write + + + DT1 + Action on PWM0A triggered by event_t1 when timer decreasing. 0: no change, 1: low, 2: high, 3: toggle + 22 + 2 + read-write + + + + + GEN0_B + Actions triggered by events on PWM0B + 0x54 + 0x20 + + + UTEZ + Action on PWM0B triggered by event TEZ when timer increasing + 0 + 2 + read-write + + + UTEP + Action on PWM0B triggered by event TEP when timer increasing + 2 + 2 + read-write + + + UTEA + Action on PWM0B triggered by event TEA when timer increasing + 4 + 2 + read-write + + + UTEB + Action on PWM0B triggered by event TEB when timer increasing + 6 + 2 + read-write + + + UT0 + Action on PWM0B triggered by event_t0 when timer increasing + 8 + 2 + read-write + + + UT1 + Action on PWM0B triggered by event_t1 when timer increasing + 10 + 2 + read-write + + + DTEZ + Action on PWM0B triggered by event TEZ when timer decreasing + 12 + 2 + read-write + + + DTEP + Action on PWM0B triggered by event TEP when timer decreasing + 14 + 2 + read-write + + + DTEA + Action on PWM0B triggered by event TEA when timer decreasing + 16 + 2 + read-write + + + DTEB + Action on PWM0B triggered by event TEB when timer decreasing + 18 + 2 + read-write + + + DT0 + Action on PWM0B triggered by event_t0 when timer decreasing + 20 + 2 + read-write + + + DT1 + Action on PWM0B triggered by event_t1 when timer decreasing. 0: no change, 1: low, 2: high, 3: toggle + 22 + 2 + read-write + + + + + DB0_CFG + dead time type selection and configuration + 0x58 + 0x20 + 0x00018000 + + + DB0_FED_UPMETHOD + Update method for FED (falling edge delay) active register. 0: immediate, bit0: tez, bit1: tep, bit2: sync, bit3: freeze + 0 + 4 + read-write + + + DB0_RED_UPMETHOD + Update method for RED (rising edge delay) active register. 0: immediate, bit0: tez, bit1: tep, bit2: sync, bit3: freeze + 4 + 4 + read-write + + + DB0_DEB_MODE + S8 in documentation, dual-edge B mode, 0: fed/red take effect on different path separately, 1: fed/red take effect on B path, A out is in bypass or dulpB mode + 8 + 1 + read-write + + + DB0_A_OUTSWAP + S6 in documentation + 9 + 1 + read-write + + + DB0_B_OUTSWAP + S7 in documentation + 10 + 1 + read-write + + + DB0_RED_INSEL + S4 in documentation + 11 + 1 + read-write + + + DB0_FED_INSEL + S5 in documentation + 12 + 1 + read-write + + + DB0_RED_OUTINVERT + S2 in documentation + 13 + 1 + read-write + + + DB0_FED_OUTINVERT + S3 in documentation + 14 + 1 + read-write + + + DB0_A_OUTBYPASS + S1 in documentation + 15 + 1 + read-write + + + DB0_B_OUTBYPASS + S0 in documentation + 16 + 1 + read-write + + + DB0_CLK_SEL + Dead time generator 0 clock selection. 0: PWM_clk, 1: PT_clk + 17 + 1 + read-write + + + + + DB0_FED_CFG + Shadow register for falling edge delay (FED). + 0x5C + 0x20 + + + DB0_FED + Shadow register for FED + 0 + 16 + read-write + + + + + DB0_RED_CFG + Shadow register for rising edge delay (RED). + 0x60 + 0x20 + + + DB0_RED + Shadow register for RED + 0 + 16 + read-write + + + + + CHOPPER0_CFG + Carrier enable and configuratoin + 0x64 + 0x20 + + + CHOPPER0_EN + When set, carrier0 function is enabled. When cleared, carrier0 is bypassed + 0 + 1 + read-write + + + CHOPPER0_PRESCALE + PWM carrier0 clock (PC_clk) prescale value. Period of PC_clk = period of PWM_clk * (PWM_CARRIER0_PRESCALE + 1) + 1 + 4 + read-write + + + CHOPPER0_DUTY + carrier duty selection. Duty = PWM_CARRIER0_DUTY / 8 + 5 + 3 + read-write + + + CHOPPER0_OSHTWTH + width of the fist pulse in number of periods of the carrier + 8 + 4 + read-write + + + CHOPPER0_OUT_INVERT + when set, invert the output of PWM0A and PWM0B for this submodule + 12 + 1 + read-write + + + CHOPPER0_IN_INVERT + when set, invert the input of PWM0A and PWM0B for this submodule + 13 + 1 + read-write + + + + + TZ0_CFG0 + Actions on PWM0A and PWM0B trip events + 0x68 + 0x20 + + + TZ0_SW_CBC + Enable register for software force cycle-by-cycle mode action. 0: disable, 1: enable + 0 + 1 + read-write + + + TZ0_F2_CBC + event_f2 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 1 + 1 + read-write + + + TZ0_F1_CBC + event_f1 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 2 + 1 + read-write + + + TZ0_F0_CBC + event_f0 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 3 + 1 + read-write + + + TZ0_SW_OST + Enable register for software force one-shot mode action. 0: disable, 1: enable + 4 + 1 + read-write + + + TZ0_F2_OST + event_f2 will trigger one-shot mode action. 0: disable, 1: enable + 5 + 1 + read-write + + + TZ0_F1_OST + event_f1 will trigger one-shot mode action. 0: disable, 1: enable + 6 + 1 + read-write + + + TZ0_F0_OST + event_f0 will trigger one-shot mode action. 0: disable, 1: enable + 7 + 1 + read-write + + + TZ0_A_CBC_D + Cycle-by-cycle mode action on PWM0A when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 8 + 2 + read-write + + + TZ0_A_CBC_U + Cycle-by-cycle mode action on PWM0A when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 10 + 2 + read-write + + + TZ0_A_OST_D + One-shot mode action on PWM0A when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 12 + 2 + read-write + + + TZ0_A_OST_U + One-shot mode action on PWM0A when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 14 + 2 + read-write + + + TZ0_B_CBC_D + Cycle-by-cycle mode action on PWM0B when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 16 + 2 + read-write + + + TZ0_B_CBC_U + Cycle-by-cycle mode action on PWM0B when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 18 + 2 + read-write + + + TZ0_B_OST_D + One-shot mode action on PWM0B when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 20 + 2 + read-write + + + TZ0_B_OST_U + One-shot mode action on PWM0B when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 22 + 2 + read-write + + + + + TZ0_CFG1 + Software triggers for fault handler actions + 0x6C + 0x20 + + + TZ0_CLR_OST + a rising edge will clear on going one-shot mode action + 0 + 1 + read-write + + + TZ0_CBCPULSE + cycle-by-cycle mode action refresh moment selection. Bit0: TEZ, bit1:TEP + 1 + 2 + read-write + + + TZ0_FORCE_CBC + a toggle trigger a cycle-by-cycle mode action + 3 + 1 + read-write + + + TZ0_FORCE_OST + a toggle (software negate its value) triggers a one-shot mode action + 4 + 1 + read-write + + + + + TZ0_STATUS + Status of fault events. + 0x70 + 0x20 + + + TZ0_CBC_ON + Set and reset by hardware. If set, a cycle-by-cycle mode action is on going + 0 + 1 + read-only + + + TZ0_OST_ON + Set and reset by hardware. If set, an one-shot mode action is on going + 1 + 1 + read-only + + + + + CMPR1_CFG + Transfer status and update method for time stamp registers A and B + 0x74 + 0x20 + + + CMPR1_A_UPMETHOD + Update method for PWM generator 1 time stamp A's active register. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: TEP,when bit2 is set to 1: sync, when bit3 is set to 1: disable the update. + 0 + 4 + read-write + + + CMPR1_B_UPMETHOD + Update method for PWM generator 1 time stamp B's active register. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: TEP,when bit2 is set to 1: sync, when bit3 is set to 1: disable the update. + 4 + 4 + read-write + + + CMPR1_A_SHDW_FULL + Set and reset by hardware. If set, PWM generator 1 time stamp A's shadow reg is filled and waiting to be transferred to A's active reg. If cleared, A's active reg has been updated with shadow register latest value + 8 + 1 + read-write + + + CMPR1_B_SHDW_FULL + Set and reset by hardware. If set, PWM generator 1 time stamp B's shadow reg is filled and waiting to be transferred to B's active reg. If cleared, B's active reg has been updated with shadow register latest value + 9 + 1 + read-write + + + + + CMPR1_VALUE0 + Shadow register for register A. + 0x78 + 0x20 + + + CMPR1_A + PWM generator 1 time stamp A's shadow register + 0 + 16 + read-write + + + + + CMPR1_VALUE1 + Shadow register for register B. + 0x7C + 0x20 + + + CMPR1_B + PWM generator 1 time stamp B's shadow register + 0 + 16 + read-write + + + + + GEN1_CFG0 + Fault event T0 and T1 handling + 0x80 + 0x20 + + + GEN1_CFG_UPMETHOD + Update method for PWM generator 1's active register of configuration. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: + 0 + 4 + read-write + + + GEN1_T0_SEL + Source selection for PWM generator 1 event_t0, take effect immediately, 0: fault_event0, 1: fault_event1, 2: fault_event2, 3: sync_taken, 4: none + 4 + 3 + read-write + + + GEN1_T1_SEL + Source selection for PWM generator 1 event_t1, take effect immediately, 0: fault_event0, 1: fault_event1, 2: fault_event2, 3: sync_taken, 4: none + 7 + 3 + read-write + + + + + GEN1_FORCE + Permissives to force PWM1A and PWM1B outputs by software + 0x84 + 0x20 + 0x00000020 + + + GEN1_CNTUFORCE_UPMETHOD + Updating method for continuous software force of PWM generator 1. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ,,when bit1 is set to 1: TEP, when bit2 is set to 1: TEA, when bit3 is set to 1: TEB, when bit4 is set to 1: sync, when bit5 is set to 1: disable update. (TEA/B here and below means an event generated when the timer's value equals to that of register A/B.) + 0 + 6 + read-write + + + GEN1_A_CNTUFORCE_MODE + Continuous software force mode for PWM1A. 0: disabled, 1: low, 2: high, 3: disabled + 6 + 2 + read-write + + + GEN1_B_CNTUFORCE_MODE + Continuous software force mode for PWM1B. 0: disabled, 1: low, 2: high, 3: disabled + 8 + 2 + read-write + + + GEN1_A_NCIFORCE + Trigger of non-continuous immediate software-force event for PWM1A, a toggle will trigger a force event. + 10 + 1 + read-write + + + GEN1_A_NCIFORCE_MODE + non-continuous immediate software force mode for PWM1A, 0: disabled, 1: low, 2: high, 3: disabled + 11 + 2 + read-write + + + GEN1_B_NCIFORCE + Trigger of non-continuous immediate software-force event for PWM1B, a toggle will trigger a force event. + 13 + 1 + read-write + + + GEN1_B_NCIFORCE_MODE + non-continuous immediate software force mode for PWM1B, 0: disabled, 1: low, 2: high, 3: disabled + 14 + 2 + read-write + + + + + GEN1_A + Actions triggered by events on PWM1A + 0x88 + 0x20 + + + UTEZ + Action on PWM1A triggered by event TEZ when timer increasing + 0 + 2 + read-write + + + UTEP + Action on PWM1A triggered by event TEP when timer increasing + 2 + 2 + read-write + + + UTEA + Action on PWM1A triggered by event TEA when timer increasing + 4 + 2 + read-write + + + UTEB + Action on PWM1A triggered by event TEB when timer increasing + 6 + 2 + read-write + + + UT0 + Action on PWM1A triggered by event_t0 when timer increasing + 8 + 2 + read-write + + + UT1 + Action on PWM1A triggered by event_t1 when timer increasing + 10 + 2 + read-write + + + DTEZ + Action on PWM1A triggered by event TEZ when timer decreasing + 12 + 2 + read-write + + + DTEP + Action on PWM1A triggered by event TEP when timer decreasing + 14 + 2 + read-write + + + DTEA + Action on PWM1A triggered by event TEA when timer decreasing + 16 + 2 + read-write + + + DTEB + Action on PWM1A triggered by event TEB when timer decreasing + 18 + 2 + read-write + + + DT0 + Action on PWM1A triggered by event_t0 when timer decreasing + 20 + 2 + read-write + + + DT1 + Action on PWM1A triggered by event_t1 when timer decreasing. 0: no change, 1: low, 2: high, 3: toggle + 22 + 2 + read-write + + + + + GEN1_B + Actions triggered by events on PWM1B + 0x8C + 0x20 + + + UTEZ + Action on PWM1B triggered by event TEZ when timer increasing + 0 + 2 + read-write + + + UTEP + Action on PWM1B triggered by event TEP when timer increasing + 2 + 2 + read-write + + + UTEA + Action on PWM1B triggered by event TEA when timer increasing + 4 + 2 + read-write + + + UTEB + Action on PWM1B triggered by event TEB when timer increasing + 6 + 2 + read-write + + + UT0 + Action on PWM1B triggered by event_t0 when timer increasing + 8 + 2 + read-write + + + UT1 + Action on PWM1B triggered by event_t1 when timer increasing + 10 + 2 + read-write + + + DTEZ + Action on PWM1B triggered by event TEZ when timer decreasing + 12 + 2 + read-write + + + DTEP + Action on PWM1B triggered by event TEP when timer decreasing + 14 + 2 + read-write + + + DTEA + Action on PWM1B triggered by event TEA when timer decreasing + 16 + 2 + read-write + + + DTEB + Action on PWM1B triggered by event TEB when timer decreasing + 18 + 2 + read-write + + + DT0 + Action on PWM1B triggered by event_t0 when timer decreasing + 20 + 2 + read-write + + + DT1 + Action on PWM1B triggered by event_t1 when timer decreasing. 0: no change, 1: low, 2: high, 3: toggle + 22 + 2 + read-write + + + + + DB1_CFG + dead time type selection and configuration + 0x90 + 0x20 + 0x00018000 + + + DB1_FED_UPMETHOD + Update method for FED (falling edge delay) active register. 0: immediate, bit0: tez, bit1: tep, bit2: sync, bit3: freeze + 0 + 4 + read-write + + + DB1_RED_UPMETHOD + Update method for RED (rising edge delay) active register. 0: immediate, bit0: tez, bit1: tep, bit2: sync, bit3: freeze + 4 + 4 + read-write + + + DB1_DEB_MODE + S8 in documentation, dual-edge B mode, 0: fed/red take effect on different path separately, 1: fed/red take effect on B path, A out is in bypass or dulpB mode + 8 + 1 + read-write + + + DB1_A_OUTSWAP + S6 in documentation + 9 + 1 + read-write + + + DB1_B_OUTSWAP + S7 in documentation + 10 + 1 + read-write + + + DB1_RED_INSEL + S4 in documentation + 11 + 1 + read-write + + + DB1_FED_INSEL + S5 in documentation + 12 + 1 + read-write + + + DB1_RED_OUTINVERT + S2 in documentation + 13 + 1 + read-write + + + DB1_FED_OUTINVERT + S3 in documentation + 14 + 1 + read-write + + + DB1_A_OUTBYPASS + S1 in documentation + 15 + 1 + read-write + + + DB1_B_OUTBYPASS + S0 in documentation + 16 + 1 + read-write + + + DB1_CLK_SEL + Dead time generator 1 clock selection. 0: PWM_clk, 1: PT_clk + 17 + 1 + read-write + + + + + DB1_FED_CFG + Shadow register for falling edge delay (FED). + 0x94 + 0x20 + + + DB1_FED + Shadow register for FED + 0 + 16 + read-write + + + + + DB1_RED_CFG + Shadow register for rising edge delay (RED). + 0x98 + 0x20 + + + DB1_RED + Shadow register for RED + 0 + 16 + read-write + + + + + CHOPPER1_CFG + Carrier enable and configuratoin + 0x9C + 0x20 + + + CHOPPER1_EN + When set, carrier0 function is enabled. When cleared, carrier0 is bypassed + 0 + 1 + read-write + + + CHOPPER1_PRESCALE + PWM carrier0 clock (PC_clk) prescale value. Period of PC_clk = period of PWM_clk * (PWM_CARRIER0_PRESCALE + 1) + 1 + 4 + read-write + + + CHOPPER1_DUTY + carrier duty selection. Duty = PWM_CARRIER0_DUTY / 8 + 5 + 3 + read-write + + + CHOPPER1_OSHTWTH + width of the fist pulse in number of periods of the carrier + 8 + 4 + read-write + + + CHOPPER1_OUT_INVERT + when set, invert the output of PWM1A and PWM1B for this submodule + 12 + 1 + read-write + + + CHOPPER1_IN_INVERT + when set, invert the input of PWM1A and PWM1B for this submodule + 13 + 1 + read-write + + + + + TZ1_CFG0 + Actions on PWM1A and PWM1B trip events + 0xA0 + 0x20 + + + TZ1_SW_CBC + Enable register for software force cycle-by-cycle mode action. 0: disable, 1: enable + 0 + 1 + read-write + + + TZ1_F2_CBC + event_f2 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 1 + 1 + read-write + + + TZ1_F1_CBC + event_f1 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 2 + 1 + read-write + + + TZ1_F0_CBC + event_f0 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 3 + 1 + read-write + + + TZ1_SW_OST + Enable register for software force one-shot mode action. 0: disable, 1: enable + 4 + 1 + read-write + + + TZ1_F2_OST + event_f2 will trigger one-shot mode action. 0: disable, 1: enable + 5 + 1 + read-write + + + TZ1_F1_OST + event_f1 will trigger one-shot mode action. 0: disable, 1: enable + 6 + 1 + read-write + + + TZ1_F0_OST + event_f0 will trigger one-shot mode action. 0: disable, 1: enable + 7 + 1 + read-write + + + TZ1_A_CBC_D + Cycle-by-cycle mode action on PWM1A when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 8 + 2 + read-write + + + TZ1_A_CBC_U + Cycle-by-cycle mode action on PWM1A when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 10 + 2 + read-write + + + TZ1_A_OST_D + One-shot mode action on PWM1A when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 12 + 2 + read-write + + + TZ1_A_OST_U + One-shot mode action on PWM1A when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 14 + 2 + read-write + + + TZ1_B_CBC_D + Cycle-by-cycle mode action on PWM1B when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 16 + 2 + read-write + + + TZ1_B_CBC_U + Cycle-by-cycle mode action on PWM1B when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 18 + 2 + read-write + + + TZ1_B_OST_D + One-shot mode action on PWM1B when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 20 + 2 + read-write + + + TZ1_B_OST_U + One-shot mode action on PWM1B when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 22 + 2 + read-write + + + + + TZ1_CFG1 + Software triggers for fault handler actions + 0xA4 + 0x20 + + + TZ1_CLR_OST + a rising edge will clear on going one-shot mode action + 0 + 1 + read-write + + + TZ1_CBCPULSE + cycle-by-cycle mode action refresh moment selection. Bit0: TEZ, bit1:TEP + 1 + 2 + read-write + + + TZ1_FORCE_CBC + a toggle trigger a cycle-by-cycle mode action + 3 + 1 + read-write + + + TZ1_FORCE_OST + a toggle (software negate its value) triggers a one-shot mode action + 4 + 1 + read-write + + + + + TZ1_STATUS + Status of fault events. + 0xA8 + 0x20 + + + TZ1_CBC_ON + Set and reset by hardware. If set, a cycle-by-cycle mode action is on going + 0 + 1 + read-only + + + TZ1_OST_ON + Set and reset by hardware. If set, an one-shot mode action is on going + 1 + 1 + read-only + + + + + CMPR2_CFG + Transfer status and update method for time stamp registers A and B + 0xAC + 0x20 + + + CMPR2_A_UPMETHOD + Update method for PWM generator 2 time stamp A's active register. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: TEP,when bit2 is set to 1: sync, when bit3 is set to 1: disable the update. + 0 + 4 + read-write + + + CMPR2_B_UPMETHOD + Update method for PWM generator 2 time stamp B's active register. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: TEP,when bit2 is set to 1: sync, when bit3 is set to 1: disable the update. + 4 + 4 + read-write + + + CMPR2_A_SHDW_FULL + Set and reset by hardware. If set, PWM generator 2 time stamp A's shadow reg is filled and waiting to be transferred to A's active reg. If cleared, A's active reg has been updated with shadow register latest value + 8 + 1 + read-write + + + CMPR2_B_SHDW_FULL + Set and reset by hardware. If set, PWM generator 2 time stamp B's shadow reg is filled and waiting to be transferred to B's active reg. If cleared, B's active reg has been updated with shadow register latest value + 9 + 1 + read-write + + + + + CMPR2_VALUE0 + Shadow register for register A. + 0xB0 + 0x20 + + + CMPR2_A + PWM generator 2 time stamp A's shadow register + 0 + 16 + read-write + + + + + CMPR2_VALUE1 + Shadow register for register B. + 0xB4 + 0x20 + + + CMPR2_B + PWM generator 2 time stamp B's shadow register + 0 + 16 + read-write + + + + + GEN2_CFG0 + Fault event T0 and T1 handling + 0xB8 + 0x20 + + + GEN2_CFG_UPMETHOD + Update method for PWM generator 2's active register of configuration. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ, when bit1 is set to 1: + 0 + 4 + read-write + + + GEN2_T0_SEL + Source selection for PWM generator 2 event_t0, take effect immediately, 0: fault_event0, 1: fault_event1, 2: fault_event2, 3: sync_taken, 4: none + 4 + 3 + read-write + + + GEN2_T1_SEL + Source selection for PWM generator 2 event_t1, take effect immediately, 0: fault_event0, 1: fault_event1, 2: fault_event2, 3: sync_taken, 4: none + 7 + 3 + read-write + + + + + GEN2_FORCE + Permissives to force PWM2A and PWM2B outputs by software + 0xBC + 0x20 + 0x00000020 + + + GEN2_CNTUFORCE_UPMETHOD + Updating method for continuous software force of PWM generator 2. When all bits are set to 0: immediately, when bit0 is set to 1: TEZ,,when bit1 is set to 1: TEP, when bit2 is set to 1: TEA, when bit3 is set to 1: TEB, when bit4 is set to 1: sync, when bit5 is set to 1: disable update. (TEA/B here and below means an event generated when the timer's value equals to that of register A/B.) + 0 + 6 + read-write + + + GEN2_A_CNTUFORCE_MODE + Continuous software force mode for PWM2A. 0: disabled, 1: low, 2: high, 3: disabled + 6 + 2 + read-write + + + GEN2_B_CNTUFORCE_MODE + Continuous software force mode for PWM2B. 0: disabled, 1: low, 2: high, 3: disabled + 8 + 2 + read-write + + + GEN2_A_NCIFORCE + Trigger of non-continuous immediate software-force event for PWM2A, a toggle will trigger a force event. + 10 + 1 + read-write + + + GEN2_A_NCIFORCE_MODE + non-continuous immediate software force mode for PWM2A, 0: disabled, 1: low, 2: high, 3: disabled + 11 + 2 + read-write + + + GEN2_B_NCIFORCE + Trigger of non-continuous immediate software-force event for PWM2B, a toggle will trigger a force event. + 13 + 1 + read-write + + + GEN2_B_NCIFORCE_MODE + non-continuous immediate software force mode for PWM2B, 0: disabled, 1: low, 2: high, 3: disabled + 14 + 2 + read-write + + + + + GEN2_A + Actions triggered by events on PWM2A + 0xC0 + 0x20 + + + UTEZ + Action on PWM2A triggered by event TEZ when timer increasing + 0 + 2 + read-write + + + UTEP + Action on PWM2A triggered by event TEP when timer increasing + 2 + 2 + read-write + + + UTEA + Action on PWM2A triggered by event TEA when timer increasing + 4 + 2 + read-write + + + UTEB + Action on PWM2A triggered by event TEB when timer increasing + 6 + 2 + read-write + + + UT0 + Action on PWM2A triggered by event_t0 when timer increasing + 8 + 2 + read-write + + + UT1 + Action on PWM2A triggered by event_t1 when timer increasing + 10 + 2 + read-write + + + DTEZ + Action on PWM2A triggered by event TEZ when timer decreasing + 12 + 2 + read-write + + + DTEP + Action on PWM2A triggered by event TEP when timer decreasing + 14 + 2 + read-write + + + DTEA + Action on PWM2A triggered by event TEA when timer decreasing + 16 + 2 + read-write + + + DTEB + Action on PWM2A triggered by event TEB when timer decreasing + 18 + 2 + read-write + + + DT0 + Action on PWM2A triggered by event_t0 when timer decreasing + 20 + 2 + read-write + + + DT1 + Action on PWM2A triggered by event_t1 when timer decreasing. 0: no change, 1: low, 2: high, 3: toggle + 22 + 2 + read-write + + + + + GEN2_B + Actions triggered by events on PWM2B + 0xC4 + 0x20 + + + UTEZ + Action on PWM2B triggered by event TEZ when timer increasing + 0 + 2 + read-write + + + UTEP + Action on PWM2B triggered by event TEP when timer increasing + 2 + 2 + read-write + + + UTEA + Action on PWM2B triggered by event TEA when timer increasing + 4 + 2 + read-write + + + UTEB + Action on PWM2B triggered by event TEB when timer increasing + 6 + 2 + read-write + + + UT0 + Action on PWM2B triggered by event_t0 when timer increasing + 8 + 2 + read-write + + + UT1 + Action on PWM2B triggered by event_t1 when timer increasing + 10 + 2 + read-write + + + DTEZ + Action on PWM2B triggered by event TEZ when timer decreasing + 12 + 2 + read-write + + + DTEP + Action on PWM2B triggered by event TEP when timer decreasing + 14 + 2 + read-write + + + DTEA + Action on PWM2B triggered by event TEA when timer decreasing + 16 + 2 + read-write + + + DTEB + Action on PWM2B triggered by event TEB when timer decreasing + 18 + 2 + read-write + + + DT0 + Action on PWM2B triggered by event_t0 when timer decreasing + 20 + 2 + read-write + + + DT1 + Action on PWM2B triggered by event_t1 when timer decreasing. 0: no change, 1: low, 2: high, 3: toggle + 22 + 2 + read-write + + + + + DB2_CFG + dead time type selection and configuration + 0xC8 + 0x20 + 0x00018000 + + + DB2_FED_UPMETHOD + Update method for FED (falling edge delay) active register. 0: immediate, bit0: tez, bit1: tep, bit2: sync, bit3: freeze + 0 + 4 + read-write + + + DB2_RED_UPMETHOD + Update method for RED (rising edge delay) active register. 0: immediate, bit0: tez, bit1: tep, bit2: sync, bit3: freeze + 4 + 4 + read-write + + + DB2_DEB_MODE + S8 in documentation, dual-edge B mode, 0: fed/red take effect on different path separately, 1: fed/red take effect on B path, A out is in bypass or dulpB mode + 8 + 1 + read-write + + + DB2_A_OUTSWAP + S6 in documentation + 9 + 1 + read-write + + + DB2_B_OUTSWAP + S7 in documentation + 10 + 1 + read-write + + + DB2_RED_INSEL + S4 in documentation + 11 + 1 + read-write + + + DB2_FED_INSEL + S5 in documentation + 12 + 1 + read-write + + + DB2_RED_OUTINVERT + S2 in documentation + 13 + 1 + read-write + + + DB2_FED_OUTINVERT + S3 in documentation + 14 + 1 + read-write + + + DB2_A_OUTBYPASS + S1 in documentation + 15 + 1 + read-write + + + DB2_B_OUTBYPASS + S0 in documentation + 16 + 1 + read-write + + + DB2_CLK_SEL + Dead time generator 2 clock selection. 0: PWM_clk, 1: PT_clk + 17 + 1 + read-write + + + + + DB2_FED_CFG + Shadow register for falling edge delay (FED). + 0xCC + 0x20 + + + DB2_FED + Shadow register for FED + 0 + 16 + read-write + + + + + DB2_RED_CFG + Shadow register for rising edge delay (RED). + 0xD0 + 0x20 + + + DB2_RED + Shadow register for RED + 0 + 16 + read-write + + + + + CHOPPER2_CFG + Carrier enable and configuratoin + 0xD4 + 0x20 + + + CHOPPER2_EN + When set, carrier0 function is enabled. When cleared, carrier0 is bypassed + 0 + 1 + read-write + + + CHOPPER2_PRESCALE + PWM carrier0 clock (PC_clk) prescale value. Period of PC_clk = period of PWM_clk * (PWM_CARRIER0_PRESCALE + 1) + 1 + 4 + read-write + + + CHOPPER2_DUTY + carrier duty selection. Duty = PWM_CARRIER0_DUTY / 8 + 5 + 3 + read-write + + + CHOPPER2_OSHTWTH + width of the fist pulse in number of periods of the carrier + 8 + 4 + read-write + + + CHOPPER2_OUT_INVERT + when set, invert the output of PWM2A and PWM2B for this submodule + 12 + 1 + read-write + + + CHOPPER2_IN_INVERT + when set, invert the input of PWM2A and PWM2B for this submodule + 13 + 1 + read-write + + + + + TZ2_CFG0 + Actions on PWM2A and PWM2B trip events + 0xD8 + 0x20 + + + TZ2_SW_CBC + Enable register for software force cycle-by-cycle mode action. 0: disable, 1: enable + 0 + 1 + read-write + + + TZ2_F2_CBC + event_f2 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 1 + 1 + read-write + + + TZ2_F1_CBC + event_f1 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 2 + 1 + read-write + + + TZ2_F0_CBC + event_f0 will trigger cycle-by-cycle mode action. 0: disable, 1: enable + 3 + 1 + read-write + + + TZ2_SW_OST + Enable register for software force one-shot mode action. 0: disable, 1: enable + 4 + 1 + read-write + + + TZ2_F2_OST + event_f2 will trigger one-shot mode action. 0: disable, 1: enable + 5 + 1 + read-write + + + TZ2_F1_OST + event_f1 will trigger one-shot mode action. 0: disable, 1: enable + 6 + 1 + read-write + + + TZ2_F0_OST + event_f0 will trigger one-shot mode action. 0: disable, 1: enable + 7 + 1 + read-write + + + TZ2_A_CBC_D + Cycle-by-cycle mode action on PWM2A when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 8 + 2 + read-write + + + TZ2_A_CBC_U + Cycle-by-cycle mode action on PWM2A when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 10 + 2 + read-write + + + TZ2_A_OST_D + One-shot mode action on PWM2A when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 12 + 2 + read-write + + + TZ2_A_OST_U + One-shot mode action on PWM2A when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 14 + 2 + read-write + + + TZ2_B_CBC_D + Cycle-by-cycle mode action on PWM2B when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 16 + 2 + read-write + + + TZ2_B_CBC_U + Cycle-by-cycle mode action on PWM2B when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 18 + 2 + read-write + + + TZ2_B_OST_D + One-shot mode action on PWM2B when fault event occurs and timer is decreasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 20 + 2 + read-write + + + TZ2_B_OST_U + One-shot mode action on PWM2B when fault event occurs and timer is increasing. 0: do nothing, 1: force lo, 2: force hi, 3: toggle + 22 + 2 + read-write + + + + + TZ2_CFG1 + Software triggers for fault handler actions + 0xDC + 0x20 + + + TZ2_CLR_OST + a rising edge will clear on going one-shot mode action + 0 + 1 + read-write + + + TZ2_CBCPULSE + cycle-by-cycle mode action refresh moment selection. Bit0: TEZ, bit1:TEP + 1 + 2 + read-write + + + TZ2_FORCE_CBC + a toggle trigger a cycle-by-cycle mode action + 3 + 1 + read-write + + + TZ2_FORCE_OST + a toggle (software negate its value) triggers a one-shot mode action + 4 + 1 + read-write + + + + + TZ2_STATUS + Status of fault events. + 0xE0 + 0x20 + + + TZ2_CBC_ON + Set and reset by hardware. If set, a cycle-by-cycle mode action is on going + 0 + 1 + read-only + + + TZ2_OST_ON + Set and reset by hardware. If set, an one-shot mode action is on going + 1 + 1 + read-only + + + + + FAULT_DETECT + Fault detection configuration and status + 0xE4 + 0x20 + + + F0_EN + When set, event_f0 generation is enabled + 0 + 1 + read-write + + + F1_EN + When set, event_f1 generation is enabled + 1 + 1 + read-write + + + F2_EN + When set, event_f2 generation is enabled + 2 + 1 + read-write + + + F0_POLE + Set event_f0 trigger polarity on FAULT2 source from GPIO matrix. 0: level low, 1: level high + 3 + 1 + read-write + + + F1_POLE + Set event_f1 trigger polarity on FAULT2 source from GPIO matrix. 0: level low, 1: level high + 4 + 1 + read-write + + + F2_POLE + Set event_f2 trigger polarity on FAULT2 source from GPIO matrix. 0: level low, 1: level high + 5 + 1 + read-write + + + EVENT_F0 + Set and reset by hardware. If set, event_f0 is on going + 6 + 1 + read-only + + + EVENT_F1 + Set and reset by hardware. If set, event_f1 is on going + 7 + 1 + read-only + + + EVENT_F2 + Set and reset by hardware. If set, event_f2 is on going + 8 + 1 + read-only + + + + + CAP_TIMER_CFG + Configure capture timer + 0xE8 + 0x20 + + + CAP_TIMER_EN + When set, capture timer incrementing under APB_clk is enabled. + 0 + 1 + read-write + + + CAP_SYNCI_EN + When set, capture timer sync is enabled. + 1 + 1 + read-write + + + CAP_SYNCI_SEL + capture module sync input selection. 0: none, 1: timer0 sync_out, 2: timer1 sync_out, 3: timer2 sync_out, 4: SYNC0 from GPIO matrix, 5: SYNC1 from GPIO matrix, 6: SYNC2 from GPIO matrix + 2 + 3 + read-write + + + CAP_SYNC_SW + Write 1 will force a capture timer sync, capture timer is loaded with value in phase register. + 5 + 1 + write-only + + + + + CAP_TIMER_PHASE + Phase for capture timer sync + 0xEC + 0x20 + + + CAP_PHASE + Phase value for capture timer sync operation. + 0 + 32 + read-write + + + + + CAP_CH0_CFG + Capture channel 0 configuration and enable + 0xF0 + 0x20 + + + CAP0_EN + When set, capture on channel 0 is enabled + 0 + 1 + read-write + + + CAP0_MODE + Edge of capture on channel 0 after prescaling. When bit0 is set to 1: enable capture on the negative edge, When bit1 is set to 1: enable capture on the positive edge. + 1 + 2 + read-write + + + CAP0_PRESCALE + Value of prescaling on possitive edge of CAP0. Prescale value = PWM_CAP0_PRESCALE + 1 + 3 + 8 + read-write + + + CAP0_IN_INVERT + when set, CAP0 form GPIO matrix is inverted before prescale + 11 + 1 + read-write + + + CAP0_SW + Write 1 will trigger a software forced capture on channel 0 + 12 + 1 + write-only + + + + + CAP_CH1_CFG + Capture channel 1 configuration and enable + 0xF4 + 0x20 + + + CAP1_EN + When set, capture on channel 2 is enabled + 0 + 1 + read-write + + + CAP1_MODE + Edge of capture on channel 1 after prescaling. When bit0 is set to 1: enable capture on the negative edge, When bit1 is set to 1: enable capture on the positive edge. + 1 + 2 + read-write + + + CAP1_PRESCALE + Value of prescaling on possitive edge of CAP1. Prescale value = PWM_CAP1_PRESCALE + 1 + 3 + 8 + read-write + + + CAP1_IN_INVERT + when set, CAP1 form GPIO matrix is inverted before prescale + 11 + 1 + read-write + + + CAP1_SW + Write 1 will trigger a software forced capture on channel 1 + 12 + 1 + write-only + + + + + CAP_CH2_CFG + Capture channel 2 configuration and enable + 0xF8 + 0x20 + + + CAP2_EN + When set, capture on channel 2 is enabled + 0 + 1 + read-write + + + CAP2_MODE + Edge of capture on channel 2 after prescaling. When bit0 is set to 1: enable capture on the negative edge, When bit1 is set to 1: enable capture on the positive edge. + 1 + 2 + read-write + + + CAP2_PRESCALE + Value of prescaling on possitive edge of CAP2. Prescale value = PWM_CAP2_PRESCALE + 1 + 3 + 8 + read-write + + + CAP2_IN_INVERT + when set, CAP2 form GPIO matrix is inverted before prescale + 11 + 1 + read-write + + + CAP2_SW + Write 1 will trigger a software forced capture on channel 2 + 12 + 1 + write-only + + + + + CAP_CH0 + Value of last capture on channel 0 + 0xFC + 0x20 + + + CAP0_VALUE + Value of last capture on channel 0 + 0 + 32 + read-only + + + + + CAP_CH1 + Value of last capture on channel 1 + 0x100 + 0x20 + + + CAP1_VALUE + Value of last capture on channel 1 + 0 + 32 + read-only + + + + + CAP_CH2 + Value of last capture on channel 2 + 0x104 + 0x20 + + + CAP2_VALUE + Value of last capture on channel 2 + 0 + 32 + read-only + + + + + CAP_STATUS + Edge of last capture trigger + 0x108 + 0x20 + + + CAP0_EDGE + Edge of last capture trigger on channel 0, 0: posedge, 1: negedge + 0 + 1 + read-only + + + CAP1_EDGE + Edge of last capture trigger on channel 1, 0: posedge, 1: negedge + 1 + 1 + read-only + + + CAP2_EDGE + Edge of last capture trigger on channel 2, 0: posedge, 1: negedge + 2 + 1 + read-only + + + + + UPDATE_CFG + Enable update. + 0x10C + 0x20 + 0x00000055 + + + GLOBAL_UP_EN + The global enable of update of all active registers in MCPWM module + 0 + 1 + read-write + + + GLOBAL_FORCE_UP + a toggle (software invert its value) will trigger a forced update of all active registers in MCPWM module + 1 + 1 + read-write + + + OP0_UP_EN + When set and PWM_GLOBAL_UP_EN is set, update of active registers in PWM operator 0 are enabled + 2 + 1 + read-write + + + OP0_FORCE_UP + a toggle (software invert its value) will trigger a forced update of active registers in PWM operator 0 + 3 + 1 + read-write + + + OP1_UP_EN + When set and PWM_GLOBAL_UP_EN is set, update of active registers in PWM operator 1 are enabled + 4 + 1 + read-write + + + OP1_FORCE_UP + a toggle (software invert its value) will trigger a forced update of active registers in PWM operator 1 + 5 + 1 + read-write + + + OP2_UP_EN + When set and PWM_GLOBAL_UP_EN is set, update of active registers in PWM operator 2 are enabled + 6 + 1 + read-write + + + OP2_FORCE_UP + a toggle (software invert its value) will trigger a forced update of active registers in PWM operator 2 + 7 + 1 + read-write + + + + + INT_ENA + Interrupt enable bits + 0x110 + 0x20 + + + TIMER0_STOP_INT_ENA + The enable bit for the interrupt triggered when the timer 0 stops. + 0 + 1 + read-write + + + TIMER1_STOP_INT_ENA + The enable bit for the interrupt triggered when the timer 1 stops. + 1 + 1 + read-write + + + TIMER2_STOP_INT_ENA + The enable bit for the interrupt triggered when the timer 2 stops. + 2 + 1 + read-write + + + TIMER0_TEZ_INT_ENA + The enable bit for the interrupt triggered by a PWM timer 0 TEZ event. + 3 + 1 + read-write + + + TIMER1_TEZ_INT_ENA + The enable bit for the interrupt triggered by a PWM timer 1 TEZ event. + 4 + 1 + read-write + + + TIMER2_TEZ_INT_ENA + The enable bit for the interrupt triggered by a PWM timer 2 TEZ event. + 5 + 1 + read-write + + + TIMER0_TEP_INT_ENA + The enable bit for the interrupt triggered by a PWM timer 0 TEP event. + 6 + 1 + read-write + + + TIMER1_TEP_INT_ENA + The enable bit for the interrupt triggered by a PWM timer 1 TEP event. + 7 + 1 + read-write + + + TIMER2_TEP_INT_ENA + The enable bit for the interrupt triggered by a PWM timer 2 TEP event. + 8 + 1 + read-write + + + FAULT0_INT_ENA + The enable bit for the interrupt triggered when event_f0 starts. + 9 + 1 + read-write + + + FAULT1_INT_ENA + The enable bit for the interrupt triggered when event_f1 starts. + 10 + 1 + read-write + + + FAULT2_INT_ENA + The enable bit for the interrupt triggered when event_f2 starts. + 11 + 1 + read-write + + + FAULT0_CLR_INT_ENA + The enable bit for the interrupt triggered when event_f0 ends. + 12 + 1 + read-write + + + FAULT1_CLR_INT_ENA + The enable bit for the interrupt triggered when event_f1 ends. + 13 + 1 + read-write + + + FAULT2_CLR_INT_ENA + The enable bit for the interrupt triggered when event_f2 ends. + 14 + 1 + read-write + + + CMPR0_TEA_INT_ENA + The enable bit for the interrupt triggered by a PWM operator 0 TEA event + 15 + 1 + read-write + + + CMPR1_TEA_INT_ENA + The enable bit for the interrupt triggered by a PWM operator 1 TEA event + 16 + 1 + read-write + + + CMPR2_TEA_INT_ENA + The enable bit for the interrupt triggered by a PWM operator 2 TEA event + 17 + 1 + read-write + + + CMPR0_TEB_INT_ENA + The enable bit for the interrupt triggered by a PWM operator 0 TEB event + 18 + 1 + read-write + + + CMPR1_TEB_INT_ENA + The enable bit for the interrupt triggered by a PWM operator 1 TEB event + 19 + 1 + read-write + + + CMPR2_TEB_INT_ENA + The enable bit for the interrupt triggered by a PWM operator 2 TEB event + 20 + 1 + read-write + + + TZ0_CBC_INT_ENA + The enable bit for the interrupt triggered by a cycle-by-cycle mode action on PWM0. + 21 + 1 + read-write + + + TZ1_CBC_INT_ENA + The enable bit for the interrupt triggered by a cycle-by-cycle mode action on PWM1. + 22 + 1 + read-write + + + TZ2_CBC_INT_ENA + The enable bit for the interrupt triggered by a cycle-by-cycle mode action on PWM2. + 23 + 1 + read-write + + + TZ0_OST_INT_ENA + The enable bit for the interrupt triggered by a one-shot mode action on PWM0. + 24 + 1 + read-write + + + TZ1_OST_INT_ENA + The enable bit for the interrupt triggered by a one-shot mode action on PWM1. + 25 + 1 + read-write + + + TZ2_OST_INT_ENA + The enable bit for the interrupt triggered by a one-shot mode action on PWM2. + 26 + 1 + read-write + + + CAP0_INT_ENA + The enable bit for the interrupt triggered by capture on channel 0. + 27 + 1 + read-write + + + CAP1_INT_ENA + The enable bit for the interrupt triggered by capture on channel 1. + 28 + 1 + read-write + + + CAP2_INT_ENA + The enable bit for the interrupt triggered by capture on channel 2. + 29 + 1 + read-write + + + + + INT_RAW + Raw interrupt status + 0x114 + 0x20 + + + TIMER0_STOP_INT_RAW + The raw status bit for the interrupt triggered when the timer 0 stops. + 0 + 1 + read-write + + + TIMER1_STOP_INT_RAW + The raw status bit for the interrupt triggered when the timer 1 stops. + 1 + 1 + read-write + + + TIMER2_STOP_INT_RAW + The raw status bit for the interrupt triggered when the timer 2 stops. + 2 + 1 + read-write + + + TIMER0_TEZ_INT_RAW + The raw status bit for the interrupt triggered by a PWM timer 0 TEZ event. + 3 + 1 + read-write + + + TIMER1_TEZ_INT_RAW + The raw status bit for the interrupt triggered by a PWM timer 1 TEZ event. + 4 + 1 + read-write + + + TIMER2_TEZ_INT_RAW + The raw status bit for the interrupt triggered by a PWM timer 2 TEZ event. + 5 + 1 + read-write + + + TIMER0_TEP_INT_RAW + The raw status bit for the interrupt triggered by a PWM timer 0 TEP event. + 6 + 1 + read-write + + + TIMER1_TEP_INT_RAW + The raw status bit for the interrupt triggered by a PWM timer 1 TEP event. + 7 + 1 + read-write + + + TIMER2_TEP_INT_RAW + The raw status bit for the interrupt triggered by a PWM timer 2 TEP event. + 8 + 1 + read-write + + + FAULT0_INT_RAW + The raw status bit for the interrupt triggered when event_f0 starts. + 9 + 1 + read-write + + + FAULT1_INT_RAW + The raw status bit for the interrupt triggered when event_f1 starts. + 10 + 1 + read-write + + + FAULT2_INT_RAW + The raw status bit for the interrupt triggered when event_f2 starts. + 11 + 1 + read-write + + + FAULT0_CLR_INT_RAW + The raw status bit for the interrupt triggered when event_f0 ends. + 12 + 1 + read-write + + + FAULT1_CLR_INT_RAW + The raw status bit for the interrupt triggered when event_f1 ends. + 13 + 1 + read-write + + + FAULT2_CLR_INT_RAW + The raw status bit for the interrupt triggered when event_f2 ends. + 14 + 1 + read-write + + + CMPR0_TEA_INT_RAW + The raw status bit for the interrupt triggered by a PWM operator 0 TEA event + 15 + 1 + read-write + + + CMPR1_TEA_INT_RAW + The raw status bit for the interrupt triggered by a PWM operator 1 TEA event + 16 + 1 + read-write + + + CMPR2_TEA_INT_RAW + The raw status bit for the interrupt triggered by a PWM operator 2 TEA event + 17 + 1 + read-write + + + CMPR0_TEB_INT_RAW + The raw status bit for the interrupt triggered by a PWM operator 0 TEB event + 18 + 1 + read-write + + + CMPR1_TEB_INT_RAW + The raw status bit for the interrupt triggered by a PWM operator 1 TEB event + 19 + 1 + read-write + + + CMPR2_TEB_INT_RAW + The raw status bit for the interrupt triggered by a PWM operator 2 TEB event + 20 + 1 + read-write + + + TZ0_CBC_INT_RAW + The raw status bit for the interrupt triggered by a cycle-by-cycle mode action on PWM0. + 21 + 1 + read-write + + + TZ1_CBC_INT_RAW + The raw status bit for the interrupt triggered by a cycle-by-cycle mode action on PWM1. + 22 + 1 + read-write + + + TZ2_CBC_INT_RAW + The raw status bit for the interrupt triggered by a cycle-by-cycle mode action on PWM2. + 23 + 1 + read-write + + + TZ0_OST_INT_RAW + The raw status bit for the interrupt triggered by a one-shot mode action on PWM0. + 24 + 1 + read-write + + + TZ1_OST_INT_RAW + The raw status bit for the interrupt triggered by a one-shot mode action on PWM1. + 25 + 1 + read-write + + + TZ2_OST_INT_RAW + The raw status bit for the interrupt triggered by a one-shot mode action on PWM2. + 26 + 1 + read-write + + + CAP0_INT_RAW + The raw status bit for the interrupt triggered by capture on channel 0. + 27 + 1 + read-write + + + CAP1_INT_RAW + The raw status bit for the interrupt triggered by capture on channel 1. + 28 + 1 + read-write + + + CAP2_INT_RAW + The raw status bit for the interrupt triggered by capture on channel 2. + 29 + 1 + read-write + + + + + INT_ST + Masked interrupt status + 0x118 + 0x20 + + + TIMER0_STOP_INT_ST + The masked status bit for the interrupt triggered when the timer 0 stops. + 0 + 1 + read-only + + + TIMER1_STOP_INT_ST + The masked status bit for the interrupt triggered when the timer 1 stops. + 1 + 1 + read-only + + + TIMER2_STOP_INT_ST + The masked status bit for the interrupt triggered when the timer 2 stops. + 2 + 1 + read-only + + + TIMER0_TEZ_INT_ST + The masked status bit for the interrupt triggered by a PWM timer 0 TEZ event. + 3 + 1 + read-only + + + TIMER1_TEZ_INT_ST + The masked status bit for the interrupt triggered by a PWM timer 1 TEZ event. + 4 + 1 + read-only + + + TIMER2_TEZ_INT_ST + The masked status bit for the interrupt triggered by a PWM timer 2 TEZ event. + 5 + 1 + read-only + + + TIMER0_TEP_INT_ST + The masked status bit for the interrupt triggered by a PWM timer 0 TEP event. + 6 + 1 + read-only + + + TIMER1_TEP_INT_ST + The masked status bit for the interrupt triggered by a PWM timer 1 TEP event. + 7 + 1 + read-only + + + TIMER2_TEP_INT_ST + The masked status bit for the interrupt triggered by a PWM timer 2 TEP event. + 8 + 1 + read-only + + + FAULT0_INT_ST + The masked status bit for the interrupt triggered when event_f0 starts. + 9 + 1 + read-only + + + FAULT1_INT_ST + The masked status bit for the interrupt triggered when event_f1 starts. + 10 + 1 + read-only + + + FAULT2_INT_ST + The masked status bit for the interrupt triggered when event_f2 starts. + 11 + 1 + read-only + + + FAULT0_CLR_INT_ST + The masked status bit for the interrupt triggered when event_f0 ends. + 12 + 1 + read-only + + + FAULT1_CLR_INT_ST + The masked status bit for the interrupt triggered when event_f1 ends. + 13 + 1 + read-only + + + FAULT2_CLR_INT_ST + The masked status bit for the interrupt triggered when event_f2 ends. + 14 + 1 + read-only + + + CMPR0_TEA_INT_ST + The masked status bit for the interrupt triggered by a PWM operator 0 TEA event + 15 + 1 + read-only + + + CMPR1_TEA_INT_ST + The masked status bit for the interrupt triggered by a PWM operator 1 TEA event + 16 + 1 + read-only + + + CMPR2_TEA_INT_ST + The masked status bit for the interrupt triggered by a PWM operator 2 TEA event + 17 + 1 + read-only + + + CMPR0_TEB_INT_ST + The masked status bit for the interrupt triggered by a PWM operator 0 TEB event + 18 + 1 + read-only + + + CMPR1_TEB_INT_ST + The masked status bit for the interrupt triggered by a PWM operator 1 TEB event + 19 + 1 + read-only + + + CMPR2_TEB_INT_ST + The masked status bit for the interrupt triggered by a PWM operator 2 TEB event + 20 + 1 + read-only + + + TZ0_CBC_INT_ST + The masked status bit for the interrupt triggered by a cycle-by-cycle mode action on PWM0. + 21 + 1 + read-only + + + TZ1_CBC_INT_ST + The masked status bit for the interrupt triggered by a cycle-by-cycle mode action on PWM1. + 22 + 1 + read-only + + + TZ2_CBC_INT_ST + The masked status bit for the interrupt triggered by a cycle-by-cycle mode action on PWM2. + 23 + 1 + read-only + + + TZ0_OST_INT_ST + The masked status bit for the interrupt triggered by a one-shot mode action on PWM0. + 24 + 1 + read-only + + + TZ1_OST_INT_ST + The masked status bit for the interrupt triggered by a one-shot mode action on PWM1. + 25 + 1 + read-only + + + TZ2_OST_INT_ST + The masked status bit for the interrupt triggered by a one-shot mode action on PWM2. + 26 + 1 + read-only + + + CAP0_INT_ST + The masked status bit for the interrupt triggered by capture on channel 0. + 27 + 1 + read-only + + + CAP1_INT_ST + The masked status bit for the interrupt triggered by capture on channel 1. + 28 + 1 + read-only + + + CAP2_INT_ST + The masked status bit for the interrupt triggered by capture on channel 2. + 29 + 1 + read-only + + + + + INT_CLR + Interrupt clear bits + 0x11C + 0x20 + + + TIMER0_STOP_INT_CLR + Set this bit to clear the interrupt triggered when the timer 0 stops. + 0 + 1 + write-only + + + TIMER1_STOP_INT_CLR + Set this bit to clear the interrupt triggered when the timer 1 stops. + 1 + 1 + write-only + + + TIMER2_STOP_INT_CLR + Set this bit to clear the interrupt triggered when the timer 2 stops. + 2 + 1 + write-only + + + TIMER0_TEZ_INT_CLR + Set this bit to clear the interrupt triggered by a PWM timer 0 TEZ event. + 3 + 1 + write-only + + + TIMER1_TEZ_INT_CLR + Set this bit to clear the interrupt triggered by a PWM timer 1 TEZ event. + 4 + 1 + write-only + + + TIMER2_TEZ_INT_CLR + Set this bit to clear the interrupt triggered by a PWM timer 2 TEZ event. + 5 + 1 + write-only + + + TIMER0_TEP_INT_CLR + Set this bit to clear the interrupt triggered by a PWM timer 0 TEP event. + 6 + 1 + write-only + + + TIMER1_TEP_INT_CLR + Set this bit to clear the interrupt triggered by a PWM timer 1 TEP event. + 7 + 1 + write-only + + + TIMER2_TEP_INT_CLR + Set this bit to clear the interrupt triggered by a PWM timer 2 TEP event. + 8 + 1 + write-only + + + FAULT0_INT_CLR + Set this bit to clear the interrupt triggered when event_f0 starts. + 9 + 1 + write-only + + + FAULT1_INT_CLR + Set this bit to clear the interrupt triggered when event_f1 starts. + 10 + 1 + write-only + + + FAULT2_INT_CLR + Set this bit to clear the interrupt triggered when event_f2 starts. + 11 + 1 + write-only + + + FAULT0_CLR_INT_CLR + Set this bit to clear the interrupt triggered when event_f0 ends. + 12 + 1 + write-only + + + FAULT1_CLR_INT_CLR + Set this bit to clear the interrupt triggered when event_f1 ends. + 13 + 1 + write-only + + + FAULT2_CLR_INT_CLR + Set this bit to clear the interrupt triggered when event_f2 ends. + 14 + 1 + write-only + + + CMPR0_TEA_INT_CLR + Set this bit to clear the interrupt triggered by a PWM operator 0 TEA event + 15 + 1 + write-only + + + CMPR1_TEA_INT_CLR + Set this bit to clear the interrupt triggered by a PWM operator 1 TEA event + 16 + 1 + write-only + + + CMPR2_TEA_INT_CLR + Set this bit to clear the interrupt triggered by a PWM operator 2 TEA event + 17 + 1 + write-only + + + CMPR0_TEB_INT_CLR + Set this bit to clear the interrupt triggered by a PWM operator 0 TEB event + 18 + 1 + write-only + + + CMPR1_TEB_INT_CLR + Set this bit to clear the interrupt triggered by a PWM operator 1 TEB event + 19 + 1 + write-only + + + CMPR2_TEB_INT_CLR + Set this bit to clear the interrupt triggered by a PWM operator 2 TEB event + 20 + 1 + write-only + + + TZ0_CBC_INT_CLR + Set this bit to clear the interrupt triggered by a cycle-by-cycle mode action on PWM0. + 21 + 1 + write-only + + + TZ1_CBC_INT_CLR + Set this bit to clear the interrupt triggered by a cycle-by-cycle mode action on PWM1. + 22 + 1 + write-only + + + TZ2_CBC_INT_CLR + Set this bit to clear the interrupt triggered by a cycle-by-cycle mode action on PWM2. + 23 + 1 + write-only + + + TZ0_OST_INT_CLR + Set this bit to clear the interrupt triggered by a one-shot mode action on PWM0. + 24 + 1 + write-only + + + TZ1_OST_INT_CLR + Set this bit to clear the interrupt triggered by a one-shot mode action on PWM1. + 25 + 1 + write-only + + + TZ2_OST_INT_CLR + Set this bit to clear the interrupt triggered by a one-shot mode action on PWM2. + 26 + 1 + write-only + + + CAP0_INT_CLR + Set this bit to clear the interrupt triggered by capture on channel 0. + 27 + 1 + write-only + + + CAP1_INT_CLR + Set this bit to clear the interrupt triggered by capture on channel 1. + 28 + 1 + write-only + + + CAP2_INT_CLR + Set this bit to clear the interrupt triggered by capture on channel 2. + 29 + 1 + write-only + + + + + CLK + MCPWM APB configuration register + 0x120 + 0x20 + + + EN + Force clock on for this register file + 0 + 1 + read-write + + + + + VERSION + Version register. + 0x124 + 0x20 + 0x01509110 + + + DATE + Version of this register file + 0 + 28 + read-write + + + + + + + MCPWM1 + Motor Control Pulse-Width Modulation 1 + 0x6002C000 + + MCPWM1 + 32 + + + + RMT + Remote Control + RMT + 0x60016000 + + 0x0 + 0xD0 + registers + + + RMT + 40 + + + + 4 + 0x4 + TX_CH%sDATA + The read and write data register for CHANNEL%s by apb fifo access. + 0x0 + 0x20 + + + CHDATA + Read and write data for channel %s via APB FIFO. + 0 + 32 + read-only + + + + + 4 + 0x4 + RX_CH%sDATA + The read and write data register for CHANNEL$n by apb fifo access. + 0x10 + 0x20 + + + CHDATA + Read and write data for channel 0 via APB FIFO. + 0 + 32 + read-only + + + + + 4 + 0x4 + CH%s_TX_CONF0 + Channel %s configure register 0 + 0x20 + 0x20 + 0x00710200 + + + TX_START + Set this bit to start sending data on CHANNEL%s. + 0 + 1 + write-only + + + MEM_RD_RST + Set this bit to reset read ram address for CHANNEL%s by accessing transmitter. + 1 + 1 + write-only + + + APB_MEM_RST + Set this bit to reset W/R ram address for CHANNEL%s by accessing apb fifo. + 2 + 1 + write-only + + + TX_CONTI_MODE + Set this bit to restart transmission from the first data to the last data in CHANNEL%s. + 3 + 1 + read-write + + + MEM_TX_WRAP_EN + This is the channel %s enable bit for wraparound mode: it will resume sending at the start when the data to be sent is more than its memory size. + 4 + 1 + read-write + + + IDLE_OUT_LV + This bit configures the level of output signal in CHANNEL%s when the latter is in IDLE state. + 5 + 1 + read-write + + + IDLE_OUT_EN + This is the output enable-control bit for CHANNEL%s in IDLE state. + 6 + 1 + read-write + + + TX_STOP + Set this bit to stop the transmitter of CHANNEL%s sending data out. + 7 + 1 + read-write + + + DIV_CNT + This register is used to configure the divider for clock of CHANNEL%s. + 8 + 8 + read-write + + + MEM_SIZE + This register is used to configure the maximum size of memory allocated to CHANNEL%s. + 16 + 4 + read-write + + + CARRIER_EFF_EN + 1: Add carrier modulation on the output signal only at the send data state for CHANNEL%s. 0: Add carrier modulation on the output signal at all state for CHANNEL%s. Only valid when RMT_CARRIER_EN_CH%s is 1. + 20 + 1 + read-write + + + CARRIER_EN + This is the carrier modulation enable-control bit for CHANNEL%s. 1: Add carrier modulation in the output signal. 0: No carrier modulation in sig_out. + 21 + 1 + read-write + + + CARRIER_OUT_LV + This bit is used to configure the position of carrier wave for CHANNEL%s. + +1'h0: add carrier wave on low level. + +1'h1: add carrier wave on high level. + 22 + 1 + read-write + + + AFIFO_RST + Reserved + 23 + 1 + write-only + + + CONF_UPDATE + synchronization bit for CHANNEL%s + 24 + 1 + write-only + + + + + 4 + 0x8 + CH%s_RX_CONF0 + Channel %s configure register 0 + 0x30 + 0x20 + 0x317FFF02 + + + DIV_CNT + This register is used to configure the divider for clock of CHANNEL%s. + 0 + 8 + read-write + + + IDLE_THRES + When no edge is detected on the input signal and continuous clock cycles is longer than this register value, received process is finished. + 8 + 15 + read-write + + + MEM_SIZE + This register is used to configure the maximum size of memory allocated to CHANNEL%s. + 24 + 4 + read-write + + + CARRIER_EN + This is the carrier modulation enable-control bit for CHANNEL%s. 1: Add carrier modulation in the output signal. 0: No carrier modulation in sig_out. + 28 + 1 + read-write + + + CARRIER_OUT_LV + This bit is used to configure the position of carrier wave for CHANNEL%s. + +1'h0: add carrier wave on low level. + +1'h1: add carrier wave on high level. + 29 + 1 + read-write + + + + + 4 + 0x8 + CH%s_RX_CONF1 + Channel %s configure register 1 + 0x34 + 0x20 + 0x000001E8 + + + RX_EN + Set this bit to enable receiver to receive data on CHANNEL%s. + 0 + 1 + read-write + + + MEM_WR_RST + Set this bit to reset write ram address for CHANNEL%s by accessing receiver. + 1 + 1 + write-only + + + APB_MEM_RST + Set this bit to reset W/R ram address for CHANNEL%s by accessing apb fifo. + 2 + 1 + write-only + + + MEM_OWNER + This register marks the ownership of CHANNEL%s's ram block. + +1'h1: Receiver is using the ram. + +1'h0: APB bus is using the ram. + 3 + 1 + read-write + + + RX_FILTER_EN + This is the receive filter's enable bit for CHANNEL%s. + 4 + 1 + read-write + + + RX_FILTER_THRES + Ignores the input pulse when its width is smaller than this register value in APB clock periods (in receive mode). + 5 + 8 + read-write + + + MEM_RX_WRAP_EN + This is the channel %s enable bit for wraparound mode: it will resume receiving at the start when the data to be received is more than its memory size. + 13 + 1 + read-write + + + AFIFO_RST + Reserved + 14 + 1 + write-only + + + CONF_UPDATE + synchronization bit for CHANNEL%s + 15 + 1 + write-only + + + + + 4 + 0x4 + CH%s_TX_STATUS + Channel %s status register + 0x50 + 0x20 + + + MEM_RADDR_EX + This register records the memory address offset when transmitter of CHANNEL%s is using the RAM. + 0 + 10 + read-only + + + APB_MEM_WADDR + This register records the memory address offset when writes RAM over APB bus. + 11 + 10 + read-only + + + STATE + This register records the FSM status of CHANNEL%s. + 22 + 3 + read-only + + + MEM_EMPTY + This status bit will be set when the data to be set is more than memory size and the wraparound mode is disabled. + 25 + 1 + read-only + + + APB_MEM_WR_ERR + This status bit will be set if the offset address out of memory size when writes via APB bus. + 26 + 1 + read-only + + + + + 4 + 0x4 + CH%s_RX_STATUS + Channel %s status register + 0x60 + 0x20 + 0x000600C0 + + + MEM_WADDR_EX + This register records the memory address offset when receiver of CHANNEL%s is using the RAM. + 0 + 10 + read-only + + + APB_MEM_RADDR + This register records the memory address offset when reads RAM over APB bus. + 11 + 10 + read-only + + + STATE + This register records the FSM status of CHANNEL%s. + 22 + 3 + read-only + + + MEM_OWNER_ERR + This status bit will be set when the ownership of memory block is wrong. + 25 + 1 + read-only + + + MEM_FULL + This status bit will be set if the receiver receives more data than the memory size. + 26 + 1 + read-only + + + APB_MEM_RD_ERR + This status bit will be set if the offset address out of memory size when reads via APB bus. + 27 + 1 + read-only + + + + + INT_RAW + Raw interrupt status + 0x70 + 0x20 + + + 4 + 0x1 + 0-3 + CH%s_TX_END_INT_RAW + The interrupt raw bit for CHANNEL%s. Triggered when transmission done. + 0 + 1 + read-write + + + 4 + 0x1 + 0-3 + CH%s_TX_ERR_INT_RAW + The interrupt raw bit for CHANNEL%s. Triggered when error occurs. + 4 + 1 + read-write + + + 4 + 0x1 + 0-3 + CH%s_TX_THR_EVENT_INT_RAW + The interrupt raw bit for CHANNEL%s. Triggered when transmitter sent more data than configured value. + 8 + 1 + read-write + + + 4 + 0x1 + 0-3 + CH%s_TX_LOOP_INT_RAW + The interrupt raw bit for CHANNEL%s. Triggered when the loop count reaches the configured threshold value. + 12 + 1 + read-write + + + 4 + 0x1 + 4-7 + CH%s_RX_END_INT_RAW + The interrupt raw bit for CHANNEL4. Triggered when reception done. + 16 + 1 + read-write + + + 4 + 0x1 + 4-7 + CH%s_RX_ERR_INT_RAW + The interrupt raw bit for CHANNEL4. Triggered when error occurs. + 20 + 1 + read-write + + + CH4_RX_THR_EVENT_INT_RAW + The interrupt raw bit for CHANNEL4. Triggered when receiver receive more data than configured value. + 24 + 1 + read-write + + + CH5_RX_THR_EVENT_INT_RAW + The interrupt raw bit for CHANNEL5. Triggered when receiver receive more data than configured value. + 25 + 1 + read-write + + + CH6_RX_THR_EVENT_INT_RAW + The interrupt raw bit for CHANNEL6. Triggered when receiver receive more data than configured value. + 26 + 1 + read-write + + + CH7_RX_THR_EVENT_INT_RAW + The interrupt raw bit for CHANNEL7. Triggered when receiver receive more data than configured value. + 27 + 1 + read-write + + + TX_CH3_DMA_ACCESS_FAIL_INT_RAW + The interrupt raw bit for CHANNEL3. Triggered when dma accessing CHANNEL3 fails. + 28 + 1 + read-write + + + RX_CH7_DMA_ACCESS_FAIL_INT_RAW + The interrupt raw bit for CHANNEL7. Triggered when dma accessing CHANNEL7 fails. + 29 + 1 + read-write + + + + + INT_ST + Masked interrupt status + 0x74 + 0x20 + + + 4 + 0x1 + 0-3 + CH%s_TX_END_INT_ST + The masked interrupt status bit for CH%s_TX_END_INT. + 0 + 1 + read-only + + + 4 + 0x1 + 0-3 + CH%s_TX_ERR_INT_ST + The masked interrupt status bit for CH%s_ERR_INT. + 4 + 1 + read-only + + + 4 + 0x1 + 0-3 + CH%s_TX_THR_EVENT_INT_ST + The masked interrupt status bit for CH%s_TX_THR_EVENT_INT. + 8 + 1 + read-only + + + 4 + 0x1 + 0-3 + CH%s_TX_LOOP_INT_ST + The masked interrupt status bit for CH%s_TX_LOOP_INT. + 12 + 1 + read-only + + + 4 + 0x1 + 4-7 + CH%s_RX_END_INT_ST + The masked interrupt status bit for CH4_RX_END_INT. + 16 + 1 + read-only + + + 4 + 0x1 + 4-7 + CH%s_RX_ERR_INT_ST + The masked interrupt status bit for CH4_ERR_INT. + 20 + 1 + read-only + + + CH4_RX_THR_EVENT_INT_ST + The masked interrupt status bit for CH4_RX_THR_EVENT_INT. + 24 + 1 + read-only + + + CH5_RX_THR_EVENT_INT_ST + The masked interrupt status bit for CH5_RX_THR_EVENT_INT. + 25 + 1 + read-only + + + CH6_RX_THR_EVENT_INT_ST + The masked interrupt status bit for CH6_RX_THR_EVENT_INT. + 26 + 1 + read-only + + + CH7_RX_THR_EVENT_INT_ST + The masked interrupt status bit for CH7_RX_THR_EVENT_INT. + 27 + 1 + read-only + + + TX_CH3_DMA_ACCESS_FAIL_INT_ST + The masked interrupt status bit for CH3_DMA_ACCESS_FAIL_INT. + 28 + 1 + read-only + + + RX_CH7_DMA_ACCESS_FAIL_INT_ST + The masked interrupt status bit for CH7_DMA_ACCESS_FAIL_INT. + 29 + 1 + read-only + + + + + INT_ENA + Interrupt enable bits + 0x78 + 0x20 + + + 4 + 0x1 + 0-3 + CH%s_TX_END_INT_ENA + The interrupt enable bit for CH%s_TX_END_INT. + 0 + 1 + read-write + + + 4 + 0x1 + 0-3 + CH%s_TX_ERR_INT_ENA + The interrupt enable bit for CH%s_ERR_INT. + 4 + 1 + read-write + + + 4 + 0x1 + 0-3 + CH%s_TX_THR_EVENT_INT_ENA + The interrupt enable bit for CH%s_TX_THR_EVENT_INT. + 8 + 1 + read-write + + + 4 + 0x1 + 0-3 + CH%s_TX_LOOP_INT_ENA + The interrupt enable bit for CH%s_TX_LOOP_INT. + 12 + 1 + read-write + + + 4 + 0x1 + 4-7 + CH%s_RX_END_INT_ENA + The interrupt enable bit for CH4_RX_END_INT. + 16 + 1 + read-write + + + 4 + 0x1 + 4-7 + CH%s_RX_ERR_INT_ENA + The interrupt enable bit for CH4_ERR_INT. + 20 + 1 + read-write + + + CH4_RX_THR_EVENT_INT_ENA + The interrupt enable bit for CH4_RX_THR_EVENT_INT. + 24 + 1 + read-write + + + CH5_RX_THR_EVENT_INT_ENA + The interrupt enable bit for CH5_RX_THR_EVENT_INT. + 25 + 1 + read-write + + + CH6_RX_THR_EVENT_INT_ENA + The interrupt enable bit for CH6_RX_THR_EVENT_INT. + 26 + 1 + read-write + + + CH7_RX_THR_EVENT_INT_ENA + The interrupt enable bit for CH7_RX_THR_EVENT_INT. + 27 + 1 + read-write + + + TX_CH3_DMA_ACCESS_FAIL_INT_ENA + The interrupt enable bit for CH3_DMA_ACCESS_FAIL_INT. + 28 + 1 + read-write + + + RX_CH7_DMA_ACCESS_FAIL_INT_ENA + The interrupt enable bit for CH7_DMA_ACCESS_FAIL_INT. + 29 + 1 + read-write + + + + + INT_CLR + Interrupt clear bits + 0x7C + 0x20 + + + 4 + 0x1 + 0-3 + CH%s_TX_END_INT_CLR + Set this bit to clear theCH%s_TX_END_INT interrupt. + 0 + 1 + write-only + + + 4 + 0x1 + 0-3 + CH%s_TX_ERR_INT_CLR + Set this bit to clear theCH%s_ERR_INT interrupt. + 4 + 1 + write-only + + + 4 + 0x1 + 0-3 + CH%s_TX_THR_EVENT_INT_CLR + Set this bit to clear theCH%s_TX_THR_EVENT_INT interrupt. + 8 + 1 + write-only + + + 4 + 0x1 + 0-3 + CH%s_TX_LOOP_INT_CLR + Set this bit to clear theCH%s_TX_LOOP_INT interrupt. + 12 + 1 + write-only + + + 4 + 0x1 + 4-7 + CH%s_RX_END_INT_CLR + Set this bit to clear theCH4_RX_END_INT interrupt. + 16 + 1 + write-only + + + 4 + 0x1 + RX_CH4,RX_CH5,RX_CH6,RX_CH7 + CH%s_RX_ERR_INT_CLR + Set this bit to clear theCH4_ERR_INT interrupt. + 20 + 1 + write-only + + + CH4_RX_THR_EVENT_INT_CLR + Set this bit to clear theCH4_RX_THR_EVENT_INT interrupt. + 24 + 1 + write-only + + + CH5_RX_THR_EVENT_INT_CLR + Set this bit to clear theCH5_RX_THR_EVENT_INT interrupt. + 25 + 1 + write-only + + + CH6_RX_THR_EVENT_INT_CLR + Set this bit to clear theCH6_RX_THR_EVENT_INT interrupt. + 26 + 1 + write-only + + + CH7_RX_THR_EVENT_INT_CLR + Set this bit to clear theCH7_RX_THR_EVENT_INT interrupt. + 27 + 1 + write-only + + + TX_CH3_DMA_ACCESS_FAIL_INT_CLR + Set this bit to clear the CH3_DMA_ACCESS_FAIL_INT interrupt. + 28 + 1 + write-only + + + RX_CH7_DMA_ACCESS_FAIL_INT_CLR + Set this bit to clear the CH7_DMA_ACCESS_FAIL_INT interrupt. + 29 + 1 + write-only + + + + + 4 + 0x4 + CH%sCARRIER_DUTY + Channel %s duty cycle configuration register + 0x80 + 0x20 + 0x00400040 + + + CARRIER_LOW + This register is used to configure carrier wave 's low level clock period for CHANNEL%s. + 0 + 16 + read-write + + + CARRIER_HIGH + This register is used to configure carrier wave 's high level clock period for CHANNEL%s. + 16 + 16 + read-write + + + + + 4 + 0x4 + CH%s_RX_CARRIER_RM + Channel %s carrier remove register + 0x90 + 0x20 + + + CARRIER_LOW_THRES + The low level period in a carrier modulation mode is (REG_RMT_REG_CARRIER_LOW_THRES_CH%s + 1) for channel %s. + 0 + 16 + read-write + + + CARRIER_HIGH_THRES + The high level period in a carrier modulation mode is (REG_RMT_REG_CARRIER_HIGH_THRES_CH%s + 1) for channel %s. + 16 + 16 + read-write + + + + + 4 + 0x4 + CH%s_TX_LIM + Channel %s Tx event configuration register + 0xA0 + 0x20 + 0x00000080 + + + TX_LIM + This register is used to configure the maximum entries that CHANNEL%s can send out. + 0 + 9 + read-write + + + TX_LOOP_NUM + This register is used to configure the maximum loop count when tx_conti_mode is valid. + 9 + 10 + read-write + + + TX_LOOP_CNT_EN + This register is the enabled bit for loop count. + 19 + 1 + read-write + + + LOOP_COUNT_RESET + This register is used to reset the loop count when tx_conti_mode is valid. + 20 + 1 + write-only + + + LOOP_STOP_EN + This bit is used to enable the loop send stop function after the loop counter counts to loop number for CHANNEL%s. + 21 + 1 + read-write + + + + + 4 + 0x4 + CH%s_RX_LIM + Channel %s Rx event configuration register + 0xB0 + 0x20 + 0x00000080 + + + RX_LIM + This register is used to configure the maximum entries that CHANNEL%s can receive. + 0 + 9 + read-write + + + + + SYS_CONF + RMT apb configuration register + 0xC0 + 0x20 + 0x05000010 + + + APB_FIFO_MASK + 1'h1: access memory directly. 1'h0: access memory by FIFO. + 0 + 1 + read-write + + + MEM_CLK_FORCE_ON + Set this bit to enable the clock for RMT memory. + 1 + 1 + read-write + + + MEM_FORCE_PD + Set this bit to power down RMT memory. + 2 + 1 + read-write + + + MEM_FORCE_PU + 1: Disable RMT memory light sleep power down function. 0: Power down RMT memory when RMT is in light sleep mode. + 3 + 1 + read-write + + + SCLK_DIV_NUM + the integral part of the fractional divisor + 4 + 8 + read-write + + + SCLK_DIV_A + the numerator of the fractional part of the fractional divisor + 12 + 6 + read-write + + + SCLK_DIV_B + the denominator of the fractional part of the fractional divisor + 18 + 6 + read-write + + + SCLK_SEL + choose the clock source of rmt_sclk. 1:CLK_80Mhz;2:CLK_8MHz; 2:XTAL + 24 + 2 + read-write + + + SCLK_ACTIVE + rmt_sclk switch + 26 + 1 + read-write + + + CLK_EN + RMT register clock gate enable signal. 1: Power up the drive clock of registers. 0: Power down the drive clock of registers + 31 + 1 + read-write + + + + + TX_SIM + RMT TX synchronous register + 0xC4 + 0x20 + + + CH0 + Set this bit to enable CHANNEL0 to start sending data synchronously with other enabled channels. + 0 + 1 + read-write + + + CH1 + Set this bit to enable CHANNEL1 to start sending data synchronously with other enabled channels. + 1 + 1 + read-write + + + CH2 + Set this bit to enable CHANNEL2 to start sending data synchronously with other enabled channels. + 2 + 1 + read-write + + + CH3 + Set this bit to enable CHANNEL3 to start sending data synchronously with other enabled channels. + 3 + 1 + read-write + + + EN + This register is used to enable multiple of channels to start sending data synchronously. + 4 + 1 + read-write + + + + + REF_CNT_RST + RMT clock divider reset register + 0xC8 + 0x20 + + + 8 + 0x1 + TX_REF_CNT_RST_CH0,TX_REF_CNT_RST_CH1,TX_REF_CNT_RST_CH2,TX_REF_CNT_RST_CH3,RX_REF_CNT_RST_CH4,RX_REF_CNT_RST_CH5,RX_REF_CNT_RST_CH6,RX_REF_CNT_RST_CH7 + CH%s + This register is used to reset the clock divider of CHANNEL0. + 0 + 1 + write-only + + + + + DATE + RMT version register + 0xCC + 0x20 + 0x02101181 + + + DATE + This is the version register. + 0 + 28 + read-write + + + + + + + RNG + Hardware Random Number Generator + RNG + 0x60034F6C + + 0x0 + 0x4 + registers + + + + DATA + Random number data + 0x110 + 0x20 + read-only + + + + + RSA + RSA (Rivest Shamir Adleman) Accelerator + RSA + 0x6003C000 + + 0x0 + 0x834 + registers + + + RSA + 76 + + + + 512 + 0x1 + M_MEM[%s] + Memory M + 0x0 + 0x8 + write-only + + + 512 + 0x1 + Z_MEM[%s] + Memory Z + 0x200 + 0x8 + read-write + + + 512 + 0x1 + Y_MEM[%s] + Memory Y + 0x400 + 0x8 + write-only + + + 512 + 0x1 + X_MEM[%s] + Memory X + 0x600 + 0x8 + write-only + + + M_PRIME + RSA M' register + 0x800 + 0x20 + + + M_PRIME + Stores M' + 0 + 32 + read-write + + + + + MODE + RSA length mode register + 0x804 + 0x20 + + + MODE + Stores the RSA length mode + 0 + 7 + read-write + + + + + CLEAN + RSA clean register + 0x808 + 0x20 + + + CLEAN + The content of this bit is 1 when memories complete initialization. + 0 + 1 + read-only + + + + + MODEXP_START + Modular exponentiation trigger register. + 0x80C + 0x20 + + + MODEXP_START + Set this bit to 1 to start the modular exponentiation. + 0 + 1 + write-only + + + + + MODMULT_START + Modular multiplication trigger register. + 0x810 + 0x20 + + + MODMULT_START + Set this bit to 1 to start the modular multiplication + 0 + 1 + write-only + + + + + MULT_START + Normal multiplication trigger register. + 0x814 + 0x20 + + + MULT_START + Set this bit to 1 to start the multiplicaiton. + 0 + 1 + write-only + + + + + IDLE + RSA idle register + 0x818 + 0x20 + + + IDLE + The content of this bit is 1 when the RSA accelerator is idle. + 0 + 1 + read-only + + + + + CLEAR_INTERRUPT + RSA interrupt clear register + 0x81C + 0x20 + + + CLEAR_INTERRUPT + set this bit to 1 to clear the RSA interrupt. + 0 + 1 + write-only + + + + + CONSTANT_TIME + CONSTANT_TIME option control register + 0x820 + 0x20 + 0x00000001 + + + CONSTANT_TIME + Controls the CONSTANT_TIME option. 0: acceleration. 1: no acceleration(by default). + 0 + 1 + read-write + + + + + SEARCH_ENABLE + SEARCH option enable register + 0x824 + 0x20 + + + SEARCH_ENABLE + Controls the SEARCH option. 0: no acceleration(by default). 1: acceleration. + 0 + 1 + read-write + + + + + SEARCH_POS + RSA search position configure register + 0x828 + 0x20 + + + SEARCH_POS + This field is used to configure the starting search position when the acceleration option of SEARCH is used. + 0 + 12 + read-write + + + + + INTERRUPT_ENA + RSA interrupt enable register + 0x82C + 0x20 + + + INTERRUPT_ENA + Set this bit to 1 to enable the RSA interrupt. This option is enabled by default. + 0 + 1 + read-write + + + + + DATE + RSA version control register + 0x830 + 0x20 + 0x20191231 + + + DATE + rsa version information + 0 + 30 + read-write + + + + + + + RTC_CNTL + Real-Time Clock Control + RTC_CNTL + 0x60008000 + + 0x0 + 0x15C + registers + + + RTC_CORE + 39 + + + + OPTIONS0 + RTC common configure register + 0x0 + 0x20 + 0x1C00A000 + + + SW_STALL_APPCPU_C0 + {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU + 0 + 2 + read-write + + + SW_STALL_PROCPU_C0 + {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU + 2 + 2 + read-write + + + SW_APPCPU_RST + APP CPU SW reset + 4 + 1 + write-only + + + SW_PROCPU_RST + PRO CPU SW reset + 5 + 1 + write-only + + + BB_I2C_FORCE_PD + BB_I2C force power down + 6 + 1 + read-write + + + BB_I2C_FORCE_PU + BB_I2C force power up + 7 + 1 + read-write + + + BBPLL_I2C_FORCE_PD + BB_PLL _I2C force power down + 8 + 1 + read-write + + + BBPLL_I2C_FORCE_PU + BB_PLL_I2C force power up + 9 + 1 + read-write + + + BBPLL_FORCE_PD + BB_PLL force power down + 10 + 1 + read-write + + + BBPLL_FORCE_PU + BB_PLL force power up + 11 + 1 + read-write + + + XTL_FORCE_PD + crystall force power down + 12 + 1 + read-write + + + XTL_FORCE_PU + crystall force power up + 13 + 1 + read-write + + + XTL_EN_WAIT + wait bias_sleep and current source wakeup + 14 + 4 + read-write + + + XTL_FORCE_ISO + No public + 23 + 1 + read-write + + + PLL_FORCE_ISO + No public + 24 + 1 + read-write + + + ANALOG_FORCE_ISO + No public + 25 + 1 + read-write + + + XTL_FORCE_NOISO + No public + 26 + 1 + read-write + + + PLL_FORCE_NOISO + No public + 27 + 1 + read-write + + + ANALOG_FORCE_NOISO + No public + 28 + 1 + read-write + + + DG_WRAP_FORCE_RST + digital wrap force reset in deep sleep + 29 + 1 + read-write + + + DG_WRAP_FORCE_NORST + digital core force no reset in deep sleep + 30 + 1 + read-write + + + SW_SYS_RST + SW system reset + 31 + 1 + write-only + + + + + SLP_TIMER0 + configure min sleep time + 0x4 + 0x20 + + + SLP_VAL_LO + RTC sleep timer low 32 bits + 0 + 32 + read-write + + + + + SLP_TIMER1 + configure sleep time hi + 0x8 + 0x20 + + + SLP_VAL_HI + RTC sleep timer high 16 bits + 0 + 16 + read-write + + + MAIN_TIMER_ALARM_EN + timer alarm enable bit + 16 + 1 + write-only + + + + + TIME_UPDATE + update rtc main timer + 0xC + 0x20 + + + TIMER_SYS_STALL + Enable to record system stall time + 27 + 1 + read-write + + + TIMER_XTL_OFF + Enable to record 40M XTAL OFF time + 28 + 1 + read-write + + + TIMER_SYS_RST + enable to record system reset time + 29 + 1 + read-write + + + TIME_UPDATE + Set 1: to update register with RTC timer + 31 + 1 + write-only + + + + + TIME_LOW0 + read rtc_main timer low bits + 0x10 + 0x20 + + + TIMER_VALUE0_LOW + RTC timer low 32 bits + 0 + 32 + read-only + + + + + TIME_HIGH0 + read rtc_main timer high bits + 0x14 + 0x20 + + + TIMER_VALUE0_HIGH + RTC timer high 16 bits + 0 + 16 + read-only + + + + + STATE0 + configure chip sleep + 0x18 + 0x20 + + + SW_CPU_INT + rtc software interrupt to main cpu + 0 + 1 + write-only + + + SLP_REJECT_CAUSE_CLR + clear rtc sleep reject cause + 1 + 1 + write-only + + + APB2RTC_BRIDGE_SEL + 1: APB to RTC using bridge, 0: APB to RTC using sync + 22 + 1 + read-write + + + SDIO_ACTIVE_IND + SDIO active indication + 28 + 1 + read-only + + + SLP_WAKEUP + leep wakeup bit + 29 + 1 + read-write + + + SLP_REJECT + leep reject bit + 30 + 1 + read-write + + + SLEEP_EN + sleep enable bit + 31 + 1 + read-write + + + + + TIMER1 + rtc state wait time + 0x1C + 0x20 + 0x28140403 + + + CPU_STALL_EN + CPU stall enable bit + 0 + 1 + read-write + + + CPU_STALL_WAIT + CPU stall wait cycles in fast_clk_rtc + 1 + 5 + read-write + + + CK8M_WAIT + CK8M wait cycles in slow_clk_rtc + 6 + 8 + read-write + + + XTL_BUF_WAIT + XTAL wait cycles in slow_clk_rtc + 14 + 10 + read-write + + + PLL_BUF_WAIT + PLL wait cycles in slow_clk_rtc + 24 + 8 + read-write + + + + + TIMER2 + rtc monitor state delay time + 0x20 + 0x20 + 0x01080000 + + + ULPCP_TOUCH_START_WAIT + wait cycles in slow_clk_rtc before ULP-coprocessor / touch controller start to work + 15 + 9 + read-write + + + MIN_TIME_CK8M_OFF + minimal cycles in slow_clk_rtc for CK8M in power down state + 24 + 8 + read-write + + + + + TIMER3 + No public + 0x24 + 0x20 + 0x14160A08 + + + WIFI_WAIT_TIMER + No public + 0 + 9 + read-write + + + WIFI_POWERUP_TIMER + No public + 9 + 7 + read-write + + + BT_WAIT_TIMER + No public + 16 + 9 + read-write + + + BT_POWERUP_TIMER + No public + 25 + 7 + read-write + + + + + TIMER4 + No public + 0x28 + 0x20 + 0x10200A08 + + + WAIT_TIMER + No public + 0 + 9 + read-write + + + POWERUP_TIMER + No public + 9 + 7 + read-write + + + DG_WRAP_WAIT_TIMER + No public + 16 + 9 + read-write + + + DG_WRAP_POWERUP_TIMER + No public + 25 + 7 + read-write + + + + + TIMER5 + configure min sleep time + 0x2C + 0x20 + 0x00008000 + + + MIN_SLP_VAL + minimal sleep cycles in slow_clk_rtc + 8 + 8 + read-write + + + + + TIMER6 + No public + 0x30 + 0x20 + 0x10200A08 + + + CPU_TOP_WAIT_TIMER + No public + 0 + 9 + read-write + + + CPU_TOP_POWERUP_TIMER + No public + 9 + 7 + read-write + + + DG_PERI_WAIT_TIMER + No public + 16 + 9 + read-write + + + DG_PERI_POWERUP_TIMER + No public + 25 + 7 + read-write + + + + + ANA_CONF + analog configure register + 0x34 + 0x20 + 0x00440000 + + + I2C_RESET_POR_FORCE_PD + force down I2C_RESET_POR + 18 + 1 + read-write + + + I2C_RESET_POR_FORCE_PU + force on I2C_RESET_POR + 19 + 1 + read-write + + + GLITCH_RST_EN + enable clk glitch + 20 + 1 + read-write + + + SAR_I2C_PU + PLLA force power up + 22 + 1 + read-write + + + ANALOG_TOP_ISO_SLEEP + PLLA force power down + 23 + 1 + read-write + + + ANALOG_TOP_ISO_MONITOR + PLLA force power up + 24 + 1 + read-write + + + BBPLL_CAL_SLP_START + start BBPLL calibration during sleep + 25 + 1 + read-write + + + PVTMON_PU + 1: PVTMON power up, otherwise power down + 26 + 1 + read-write + + + TXRF_I2C_PU + 1: TXRF_I2C power up, otherwise power down + 27 + 1 + read-write + + + RFRX_PBUS_PU + 1: RFRX_PBUS power up, otherwise power down + 28 + 1 + read-write + + + CKGEN_I2C_PU + 1: CKGEN_I2C power up, otherwise power down + 30 + 1 + read-write + + + PLL_I2C_PU + power on pll i2c + 31 + 1 + read-write + + + + + RESET_STATE + get reset state + 0x38 + 0x20 + 0x00003000 + + + RESET_CAUSE_PROCPU + reset cause of PRO CPU + 0 + 6 + read-only + + + RESET_CAUSE_APPCPU + reset cause of APP CPU + 6 + 6 + read-only + + + APPCPU_STAT_VECTOR_SEL + APP CPU state vector sel + 12 + 1 + read-write + + + PROCPU_STAT_VECTOR_SEL + PRO CPU state vector sel + 13 + 1 + read-write + + + RESET_FLAG_PROCPU + PRO CPU reset_flag + 14 + 1 + read-only + + + RESET_FLAG_APPCPU + APP CPU reset flag + 15 + 1 + read-only + + + RESET_FLAG_PROCPU_CLR + clear PRO CPU reset_flag + 16 + 1 + write-only + + + RESET_FLAG_APPCPU_CLR + clear APP CPU reset flag + 17 + 1 + write-only + + + APPCPU_OCD_HALT_ON_RESET + APPCPU OcdHaltOnReset + 18 + 1 + read-write + + + PROCPU_OCD_HALT_ON_RESET + PROCPU OcdHaltOnReset + 19 + 1 + read-write + + + RESET_FLAG_JTAG_PROCPU + jtag reset flag + 20 + 1 + read-only + + + RESET_FLAG_JTAG_APPCPU + jtag reset flag + 21 + 1 + read-only + + + RESET_FLAG_JTAG_PROCPU_CLR + clear jtag reset flag + 22 + 1 + write-only + + + RESET_FLAG_JTAG_APPCPU_CLR + clear jtag reset flag + 23 + 1 + write-only + + + APP_DRESET_MASK + bypass cpu1 dreset + 24 + 1 + read-write + + + PRO_DRESET_MASK + bypass cpu0 dreset + 25 + 1 + read-write + + + + + WAKEUP_STATE + configure wakeup state + 0x3C + 0x20 + 0x00060000 + + + WAKEUP_ENA + wakeup enable bitmap + 15 + 17 + read-write + + + + + INT_ENA_RTC + configure rtc interrupt register + 0x40 + 0x20 + + + SLP_WAKEUP_INT_ENA + enable sleep wakeup interrupt + 0 + 1 + read-write + + + SLP_REJECT_INT_ENA + enable sleep reject interrupt + 1 + 1 + read-write + + + SDIO_IDLE_INT_ENA + enable SDIO idle interrupt + 2 + 1 + read-write + + + WDT_INT_ENA + enable RTC WDT interrupt + 3 + 1 + read-write + + + TOUCH_SCAN_DONE_INT_ENA + enable touch scan done interrupt + 4 + 1 + read-write + + + ULP_CP_INT_ENA + enable ULP-coprocessor interrupt + 5 + 1 + read-write + + + TOUCH_DONE_INT_ENA + enable touch done interrupt + 6 + 1 + read-write + + + TOUCH_ACTIVE_INT_ENA + enable touch active interrupt + 7 + 1 + read-write + + + TOUCH_INACTIVE_INT_ENA + enable touch inactive interrupt + 8 + 1 + read-write + + + BROWN_OUT_INT_ENA + enable brown out interrupt + 9 + 1 + read-write + + + MAIN_TIMER_INT_ENA + enable RTC main timer interrupt + 10 + 1 + read-write + + + SARADC1_INT_ENA + enable saradc1 interrupt + 11 + 1 + read-write + + + TSENS_INT_ENA + enable tsens interrupt + 12 + 1 + read-write + + + COCPU_INT_ENA + enable riscV cocpu interrupt + 13 + 1 + read-write + + + SARADC2_INT_ENA + enable saradc2 interrupt + 14 + 1 + read-write + + + SWD_INT_ENA + enable super watch dog interrupt + 15 + 1 + read-write + + + XTAL32K_DEAD_INT_ENA + enable xtal32k_dead interrupt + 16 + 1 + read-write + + + COCPU_TRAP_INT_ENA + enable cocpu trap interrupt + 17 + 1 + read-write + + + TOUCH_TIMEOUT_INT_ENA + enable touch timeout interrupt + 18 + 1 + read-write + + + GLITCH_DET_INT_ENA + enbale gitch det interrupt + 19 + 1 + read-write + + + TOUCH_APPROACH_LOOP_DONE_INT_ENA + touch approach mode loop interrupt + 20 + 1 + read-write + + + + + INT_RAW_RTC + rtc interrupt register + 0x44 + 0x20 + + + SLP_WAKEUP_INT_RAW + sleep wakeup interrupt raw + 0 + 1 + read-only + + + SLP_REJECT_INT_RAW + sleep reject interrupt raw + 1 + 1 + read-only + + + SDIO_IDLE_INT_RAW + SDIO idle interrupt raw + 2 + 1 + read-only + + + WDT_INT_RAW + RTC WDT interrupt raw + 3 + 1 + read-only + + + TOUCH_SCAN_DONE_INT_RAW + enable touch scan done interrupt raw + 4 + 1 + read-only + + + ULP_CP_INT_RAW + ULP-coprocessor interrupt raw + 5 + 1 + read-only + + + TOUCH_DONE_INT_RAW + touch interrupt raw + 6 + 1 + read-only + + + TOUCH_ACTIVE_INT_RAW + touch active interrupt raw + 7 + 1 + read-only + + + TOUCH_INACTIVE_INT_RAW + touch inactive interrupt raw + 8 + 1 + read-only + + + BROWN_OUT_INT_RAW + brown out interrupt raw + 9 + 1 + read-only + + + MAIN_TIMER_INT_RAW + RTC main timer interrupt raw + 10 + 1 + read-only + + + SARADC1_INT_RAW + saradc1 interrupt raw + 11 + 1 + read-only + + + TSENS_INT_RAW + tsens interrupt raw + 12 + 1 + read-only + + + COCPU_INT_RAW + riscV cocpu interrupt raw + 13 + 1 + read-only + + + SARADC2_INT_RAW + saradc2 interrupt raw + 14 + 1 + read-only + + + SWD_INT_RAW + super watch dog interrupt raw + 15 + 1 + read-only + + + XTAL32K_DEAD_INT_RAW + xtal32k dead detection interrupt raw + 16 + 1 + read-only + + + COCPU_TRAP_INT_RAW + cocpu trap interrupt raw + 17 + 1 + read-only + + + TOUCH_TIMEOUT_INT_RAW + touch timeout interrupt raw + 18 + 1 + read-only + + + GLITCH_DET_INT_RAW + glitch_det_interrupt_raw + 19 + 1 + read-only + + + TOUCH_APPROACH_LOOP_DONE_INT_RAW + touch approach mode loop interrupt raw + 20 + 1 + read-write + + + + + INT_ST_RTC + rtc interrupt register + 0x48 + 0x20 + + + SLP_WAKEUP_INT_ST + sleep wakeup interrupt state + 0 + 1 + read-only + + + SLP_REJECT_INT_ST + sleep reject interrupt state + 1 + 1 + read-only + + + SDIO_IDLE_INT_ST + SDIO idle interrupt state + 2 + 1 + read-only + + + WDT_INT_ST + RTC WDT interrupt state + 3 + 1 + read-only + + + TOUCH_SCAN_DONE_INT_ST + enable touch scan done interrupt raw + 4 + 1 + read-only + + + ULP_CP_INT_ST + ULP-coprocessor interrupt state + 5 + 1 + read-only + + + TOUCH_DONE_INT_ST + touch done interrupt state + 6 + 1 + read-only + + + TOUCH_ACTIVE_INT_ST + touch active interrupt state + 7 + 1 + read-only + + + TOUCH_INACTIVE_INT_ST + touch inactive interrupt state + 8 + 1 + read-only + + + BROWN_OUT_INT_ST + brown out interrupt state + 9 + 1 + read-only + + + MAIN_TIMER_INT_ST + RTC main timer interrupt state + 10 + 1 + read-only + + + SARADC1_INT_ST + saradc1 interrupt state + 11 + 1 + read-only + + + TSENS_INT_ST + tsens interrupt state + 12 + 1 + read-only + + + COCPU_INT_ST + riscV cocpu interrupt state + 13 + 1 + read-only + + + SARADC2_INT_ST + saradc2 interrupt state + 14 + 1 + read-only + + + SWD_INT_ST + super watch dog interrupt state + 15 + 1 + read-only + + + XTAL32K_DEAD_INT_ST + xtal32k dead detection interrupt state + 16 + 1 + read-only + + + COCPU_TRAP_INT_ST + cocpu trap interrupt state + 17 + 1 + read-only + + + TOUCH_TIMEOUT_INT_ST + Touch timeout interrupt state + 18 + 1 + read-only + + + GLITCH_DET_INT_ST + glitch_det_interrupt state + 19 + 1 + read-only + + + TOUCH_APPROACH_LOOP_DONE_INT_ST + touch approach mode loop interrupt state + 20 + 1 + read-only + + + + + INT_CLR_RTC + rtc interrupt register + 0x4C + 0x20 + + + SLP_WAKEUP_INT_CLR + Clear sleep wakeup interrupt state + 0 + 1 + write-only + + + SLP_REJECT_INT_CLR + Clear sleep reject interrupt state + 1 + 1 + write-only + + + SDIO_IDLE_INT_CLR + Clear SDIO idle interrupt state + 2 + 1 + write-only + + + WDT_INT_CLR + Clear RTC WDT interrupt state + 3 + 1 + write-only + + + TOUCH_SCAN_DONE_INT_CLR + clear touch scan done interrupt raw + 4 + 1 + write-only + + + ULP_CP_INT_CLR + Clear ULP-coprocessor interrupt state + 5 + 1 + write-only + + + TOUCH_DONE_INT_CLR + Clear touch done interrupt state + 6 + 1 + write-only + + + TOUCH_ACTIVE_INT_CLR + Clear touch active interrupt state + 7 + 1 + write-only + + + TOUCH_INACTIVE_INT_CLR + Clear touch inactive interrupt state + 8 + 1 + write-only + + + BROWN_OUT_INT_CLR + Clear brown out interrupt state + 9 + 1 + write-only + + + MAIN_TIMER_INT_CLR + Clear RTC main timer interrupt state + 10 + 1 + write-only + + + SARADC1_INT_CLR + Clear saradc1 interrupt state + 11 + 1 + write-only + + + TSENS_INT_CLR + Clear tsens interrupt state + 12 + 1 + write-only + + + COCPU_INT_CLR + Clear riscV cocpu interrupt state + 13 + 1 + write-only + + + SARADC2_INT_CLR + Clear saradc2 interrupt state + 14 + 1 + write-only + + + SWD_INT_CLR + Clear super watch dog interrupt state + 15 + 1 + write-only + + + XTAL32K_DEAD_INT_CLR + Clear RTC WDT interrupt state + 16 + 1 + write-only + + + COCPU_TRAP_INT_CLR + Clear cocpu trap interrupt state + 17 + 1 + write-only + + + TOUCH_TIMEOUT_INT_CLR + Clear touch timeout interrupt state + 18 + 1 + write-only + + + GLITCH_DET_INT_CLR + Clear glitch det interrupt state + 19 + 1 + write-only + + + TOUCH_APPROACH_LOOP_DONE_INT_CLR + cleartouch approach mode loop interrupt state + 20 + 1 + write-only + + + + + STORE0 + Reserved register + 0x50 + 0x20 + + + SCRATCH0 + Reserved register + 0 + 32 + read-write + + + + + STORE1 + Reserved register + 0x54 + 0x20 + + + SCRATCH1 + Reserved register + 0 + 32 + read-write + + + + + STORE2 + Reserved register + 0x58 + 0x20 + + + SCRATCH2 + Reserved register + 0 + 32 + read-write + + + + + STORE3 + Reserved register + 0x5C + 0x20 + + + SCRATCH3 + Reserved register + 0 + 32 + read-write + + + + + EXT_XTL_CONF + Reserved register + 0x60 + 0x20 + 0x00066C80 + + + XTAL32K_WDT_EN + xtal 32k watch dog enable + 0 + 1 + read-write + + + XTAL32K_WDT_CLK_FO + xtal 32k watch dog clock force on + 1 + 1 + read-write + + + XTAL32K_WDT_RESET + xtal 32k watch dog sw reset + 2 + 1 + read-write + + + XTAL32K_EXT_CLK_FO + xtal 32k external xtal clock force on + 3 + 1 + read-write + + + XTAL32K_AUTO_BACKUP + xtal 32k switch to back up clock when xtal is dead + 4 + 1 + read-write + + + XTAL32K_AUTO_RESTART + xtal 32k restart xtal when xtal is dead + 5 + 1 + read-write + + + XTAL32K_AUTO_RETURN + xtal 32k switch back xtal when xtal is restarted + 6 + 1 + read-write + + + XTAL32K_XPD_FORCE + Xtal 32k xpd control by sw or fsm + 7 + 1 + read-write + + + ENCKINIT_XTAL_32K + apply an internal clock to help xtal 32k to start + 8 + 1 + read-write + + + DBUF_XTAL_32K + 0: single-end buffer 1: differential buffer + 9 + 1 + read-write + + + DGM_XTAL_32K + xtal_32k gm control + 10 + 3 + read-write + + + DRES_XTAL_32K + DRES_XTAL_32K + 13 + 3 + read-write + + + XPD_XTAL_32K + XPD_XTAL_32K + 16 + 1 + read-write + + + DAC_XTAL_32K + DAC_XTAL_32K + 17 + 3 + read-write + + + WDT_STATE + state of 32k_wdt + 20 + 3 + read-only + + + XTAL32K_GPIO_SEL + XTAL_32K sel. 0: external XTAL_32K, 1: CLK from RTC pad X32P_C + 23 + 1 + read-write + + + XTL_EXT_CTR_LV + 0: power down XTAL at high level, 1: power down XTAL at low level + 30 + 1 + read-write + + + XTL_EXT_CTR_EN + Reserved register + 31 + 1 + read-write + + + + + EXT_WAKEUP_CONF + ext wakeup configure + 0x64 + 0x20 + + + GPIO_WAKEUP_FILTER + enable filter for gpio wakeup event + 29 + 1 + read-write + + + EXT_WAKEUP0_LV + 0: external wakeup at low level, 1: external wakeup at high level + 30 + 1 + read-write + + + EXT_WAKEUP1_LV + 0: external wakeup at low level, 1: external wakeup at high level + 31 + 1 + read-write + + + + + SLP_REJECT_CONF + reject sleep register + 0x68 + 0x20 + + + SLEEP_REJECT_ENA + sleep reject enable + 12 + 18 + read-write + + + LIGHT_SLP_REJECT_EN + enable reject for light sleep + 30 + 1 + read-write + + + DEEP_SLP_REJECT_EN + enable reject for deep sleep + 31 + 1 + read-write + + + + + CPU_PERIOD_CONF + conigure cpu freq + 0x6C + 0x20 + + + CPUSEL_CONF + CPU sel option + 29 + 1 + read-write + + + CPUPERIOD_SEL + conigure cpu freq + 30 + 2 + read-write + + + + + SDIO_ACT_CONF + No public + 0x70 + 0x20 + + + SDIO_ACT_DNUM + No public + 22 + 10 + read-write + + + + + CLK_CONF + configure clock register + 0x74 + 0x20 + 0x1158321C + + + EFUSE_CLK_FORCE_GATING + force efuse clk gating + 1 + 1 + read-write + + + EFUSE_CLK_FORCE_NOGATING + force efuse clk nogating + 2 + 1 + read-write + + + CK8M_DIV_SEL_VLD + used to sync reg_ck8m_div_sel bus. Clear vld before set reg_ck8m_div_sel, then set vld to actually switch the clk + 3 + 1 + read-write + + + CK8M_DIV + CK8M_D256_OUT divider. 00: div128, 01: div256, 10: div512, 11: div1024. + 4 + 2 + read-write + + + ENB_CK8M + disable CK8M and CK8M_D256_OUT + 6 + 1 + read-write + + + ENB_CK8M_DIV + 1: CK8M_D256_OUT is actually CK8M, 0: CK8M_D256_OUT is CK8M divided by 256 + 7 + 1 + read-write + + + DIG_XTAL32K_EN + enable CK_XTAL_32K for digital core (no relationship with RTC core) + 8 + 1 + read-write + + + DIG_CLK8M_D256_EN + enable CK8M_D256_OUT for digital core (no relationship with RTC core) + 9 + 1 + read-write + + + DIG_CLK8M_EN + enable CK8M for digital core (no relationship with RTC core) + 10 + 1 + read-write + + + CK8M_DIV_SEL + divider = reg_ck8m_div_sel + 1 + 12 + 3 + read-write + + + XTAL_FORCE_NOGATING + XTAL force no gating during sleep + 15 + 1 + read-write + + + CK8M_FORCE_NOGATING + CK8M force no gating during sleep + 16 + 1 + read-write + + + CK8M_DFREQ + CK8M_DFREQ + 17 + 8 + read-write + + + CK8M_FORCE_PD + CK8M force power down + 25 + 1 + read-write + + + CK8M_FORCE_PU + CK8M force power up + 26 + 1 + read-write + + + XTAL_GLOBAL_FORCE_GATING + force global xtal gating + 27 + 1 + read-write + + + XTAL_GLOBAL_FORCE_NOGATING + force global xtal no gating + 28 + 1 + read-write + + + FAST_CLK_RTC_SEL + fast_clk_rtc sel. 0: XTAL div 4, 1: CK8M + 29 + 1 + read-write + + + ANA_CLK_RTC_SEL + select slow clock + 30 + 2 + read-write + + + + + SLOW_CLK_CONF + configure slow clk + 0x78 + 0x20 + 0x00400000 + + + ANA_CLK_DIV_VLD + used to sync div bus. clear vld before set reg_rtc_ana_clk_div, then set vld to actually switch the clk + 22 + 1 + read-write + + + ANA_CLK_DIV + rtc clk div + 23 + 8 + read-write + + + SLOW_CLK_NEXT_EDGE + No public + 31 + 1 + read-write + + + + + SDIO_CONF + configure flash power + 0x7C + 0x20 + 0x0AB0BE0A + + + SDIO_TIMER_TARGET + timer count to apply reg_sdio_dcap after sdio power on + 0 + 8 + read-write + + + SDIO_DTHDRV + Tieh = 1 mode drive ability. Initially set to 0 to limit charge current, set to 3 after several us. + 9 + 2 + read-write + + + SDIO_DCAP + ability to prevent LDO from overshoot + 11 + 2 + read-write + + + SDIO_INITI + add resistor from ldo output to ground. 0: no res, 1: 6k,2:4k,3:2k + 13 + 2 + read-write + + + SDIO_EN_INITI + 0 to set init[1:0]=0 + 15 + 1 + read-write + + + SDIO_DCURLIM + tune current limit threshold when tieh = 0. About 800mA/(8+d) + 16 + 3 + read-write + + + SDIO_MODECURLIM + select current limit mode + 19 + 1 + read-write + + + SDIO_ENCURLIM + enable current limit + 20 + 1 + read-write + + + SDIO_REG_PD_EN + power down SDIO_REG in sleep. Only active when reg_sdio_force = 0 + 21 + 1 + read-write + + + SDIO_FORCE + 1: use SW option to control SDIO_REG, 0: use state machine + 22 + 1 + read-write + + + SDIO_TIEH + SW option for SDIO_TIEH. Only active when reg_sdio_force = 1 + 23 + 1 + read-write + + + REG1P8_READY + read only register for REG1P8_READY + 24 + 1 + read-only + + + DREFL_SDIO + SW option for DREFL_SDIO. Only active when reg_sdio_force = 1 + 25 + 2 + read-write + + + DREFM_SDIO + SW option for DREFM_SDIO. Only active when reg_sdio_force = 1 + 27 + 2 + read-write + + + DREFH_SDIO + SW option for DREFH_SDIO. Only active when reg_sdio_force = 1 + 29 + 2 + read-write + + + XPD_SDIO + power on flash regulator + 31 + 1 + read-write + + + + + BIAS_CONF + No public + 0x80 + 0x20 + 0x00010800 + + + BIAS_BUF_IDLE + No public + 10 + 1 + read-write + + + BIAS_BUF_WAKE + No public + 11 + 1 + read-write + + + BIAS_BUF_DEEP_SLP + No public + 12 + 1 + read-write + + + BIAS_BUF_MONITOR + No public + 13 + 1 + read-write + + + PD_CUR_DEEP_SLP + xpd cur when rtc in sleep_state + 14 + 1 + read-write + + + PD_CUR_MONITOR + xpd cur when rtc in monitor state + 15 + 1 + read-write + + + BIAS_SLEEP_DEEP_SLP + bias_sleep when rtc in sleep_state + 16 + 1 + read-write + + + BIAS_SLEEP_MONITOR + bias_sleep when rtc in monitor state + 17 + 1 + read-write + + + DBG_ATTEN_DEEP_SLP + DBG_ATTEN when rtc in sleep state + 18 + 4 + read-write + + + DBG_ATTEN_MONITOR + DBG_ATTEN when rtc in monitor state + 22 + 4 + read-write + + + DBG_ATTEN_WAKEUP + No public + 26 + 4 + read-write + + + + + RTC + configure rtc regulator + 0x84 + 0x20 + 0xA0000000 + + + DIG_REG_CAL_EN + enable dig regulator cali + 7 + 1 + read-write + + + SCK_DCAP + SCK_DCAP + 14 + 8 + read-write + + + DBOOST_FORCE_PD + RTC_DBOOST force power down + 28 + 1 + read-write + + + DBOOST_FORCE_PU + RTC_DBOOST force power up + 29 + 1 + read-write + + + REGULATOR_FORCE_PD + RTC_REG force power down (for RTC_REG power down means decrease the voltage to 0.8v or lower ) + 30 + 1 + read-write + + + REGULATOR_FORCE_PU + RTC_REG force power on (for RTC_REG power down means decrease the voltage to 0.8v or lower ) + 31 + 1 + read-write + + + + + PWC + configure rtc power + 0x88 + 0x20 + 0x00000925 + + + FASTMEM_FORCE_NOISO + Fast RTC memory force no ISO + 0 + 1 + read-write + + + FASTMEM_FORCE_ISO + Fast RTC memory force ISO + 1 + 1 + read-write + + + SLOWMEM_FORCE_NOISO + RTC memory force no ISO + 2 + 1 + read-write + + + SLOWMEM_FORCE_ISO + RTC memory force ISO + 3 + 1 + read-write + + + FORCE_ISO + rtc_peri force ISO + 4 + 1 + read-write + + + FORCE_NOISO + rtc_peri force no ISO + 5 + 1 + read-write + + + FASTMEM_FOLW_CPU + 1: Fast RTC memory PD following CPU, 0: fast RTC memory PD following RTC state machine + 6 + 1 + read-write + + + FASTMEM_FORCE_LPD + Fast RTC memory force PD + 7 + 1 + read-write + + + FASTMEM_FORCE_LPU + Fast RTC memory force no PD + 8 + 1 + read-write + + + SLOWMEM_FOLW_CPU + 1: RTC memory PD following CPU, 0: RTC memory PD following RTC state machine + 9 + 1 + read-write + + + SLOWMEM_FORCE_LPD + RTC memory force PD + 10 + 1 + read-write + + + SLOWMEM_FORCE_LPU + RTC memory force no PD + 11 + 1 + read-write + + + FORCE_PD + rtc_peri force power down + 18 + 1 + read-write + + + FORCE_PU + rtc_peri force power up + 19 + 1 + read-write + + + PD_EN + enable power down rtc_peri in sleep + 20 + 1 + read-write + + + PAD_FORCE_HOLD + rtc pad force hold + 21 + 1 + read-write + + + + + REGULATOR_DRV_CTRL + No public + 0x8C + 0x20 + + + REGULATOR_DRV_B_MONITOR + No public + 0 + 6 + read-write + + + REGULATOR_DRV_B_SLP + No public + 6 + 6 + read-write + + + DG_VDD_DRV_B_SLP + No public + 12 + 8 + read-write + + + DG_VDD_DRV_B_MONITOR + No public + 20 + 8 + read-write + + + + + DIG_PWC + configure digital power + 0x90 + 0x20 + 0x00545010 + + + LSLP_MEM_FORCE_PD + memories in digital core force PD in sleep + 3 + 1 + read-write + + + LSLP_MEM_FORCE_PU + memories in digital core force no PD in sleep + 4 + 1 + read-write + + + BT_FORCE_PD + internal SRAM 2 force power down + 11 + 1 + read-write + + + BT_FORCE_PU + internal SRAM 2 force power up + 12 + 1 + read-write + + + DG_PERI_FORCE_PD + internal SRAM 3 force power down + 13 + 1 + read-write + + + DG_PERI_FORCE_PU + internal SRAM 3 force power up + 14 + 1 + read-write + + + WIFI_FORCE_PD + wifi force power down + 17 + 1 + read-write + + + WIFI_FORCE_PU + wifi force power up + 18 + 1 + read-write + + + DG_WRAP_FORCE_PD + digital core force power down + 19 + 1 + read-write + + + DG_WRAP_FORCE_PU + digital core force power up + 20 + 1 + read-write + + + CPU_TOP_FORCE_PD + digital dcdc force power down + 21 + 1 + read-write + + + CPU_TOP_FORCE_PU + digital dcdc force power up + 22 + 1 + read-write + + + BT_PD_EN + enable power down internal SRAM 2 in sleep + 27 + 1 + read-write + + + DG_PERI_PD_EN + enable power down internal SRAM 3 in sleep + 28 + 1 + read-write + + + CPU_TOP_PD_EN + enable power down internal SRAM 4 in sleep + 29 + 1 + read-write + + + WIFI_PD_EN + enable power down wifi in sleep + 30 + 1 + read-write + + + DG_WRAP_PD_EN + enable power down all digital logic + 31 + 1 + read-write + + + + + DIG_ISO + congigure digital power isolation + 0x94 + 0x20 + 0xAA805080 + + + FORCE_OFF + No public + 7 + 1 + read-write + + + FORCE_ON + No public + 8 + 1 + read-write + + + DG_PAD_AUTOHOLD + read only register to indicate digital pad auto-hold status + 9 + 1 + read-only + + + CLR_DG_PAD_AUTOHOLD + wtite only register to clear digital pad auto-hold + 10 + 1 + write-only + + + DG_PAD_AUTOHOLD_EN + digital pad enable auto-hold + 11 + 1 + read-write + + + DG_PAD_FORCE_NOISO + digital pad force no ISO + 12 + 1 + read-write + + + DG_PAD_FORCE_ISO + digital pad force ISO + 13 + 1 + read-write + + + DG_PAD_FORCE_UNHOLD + digital pad force un-hold + 14 + 1 + read-write + + + DG_PAD_FORCE_HOLD + digital pad force hold + 15 + 1 + read-write + + + BT_FORCE_ISO + internal SRAM 2 force ISO + 22 + 1 + read-write + + + BT_FORCE_NOISO + internal SRAM 2 force no ISO + 23 + 1 + read-write + + + DG_PERI_FORCE_ISO + internal SRAM 3 force ISO + 24 + 1 + read-write + + + DG_PERI_FORCE_NOISO + internal SRAM 3 force no ISO + 25 + 1 + read-write + + + CPU_TOP_FORCE_ISO + internal SRAM 4 force ISO + 26 + 1 + read-write + + + CPU_TOP_FORCE_NOISO + internal SRAM 4 force no ISO + 27 + 1 + read-write + + + WIFI_FORCE_ISO + wifi force ISO + 28 + 1 + read-write + + + WIFI_FORCE_NOISO + wifi force no ISO + 29 + 1 + read-write + + + DG_WRAP_FORCE_ISO + digital core force ISO + 30 + 1 + read-write + + + DG_WRAP_FORCE_NOISO + digita core force no ISO + 31 + 1 + read-write + + + + + WDTCONFIG0 + configure rtc watch dog + 0x98 + 0x20 + 0x00013214 + + + WDT_CHIP_RESET_WIDTH + chip reset siginal pulse width + 0 + 8 + read-write + + + WDT_CHIP_RESET_EN + wdt reset whole chip enable + 8 + 1 + read-write + + + WDT_PAUSE_IN_SLP + pause WDT in sleep + 9 + 1 + read-write + + + WDT_APPCPU_RESET_EN + enable WDT reset APP CPU + 10 + 1 + read-write + + + WDT_PROCPU_RESET_EN + enable WDT reset PRO CPU + 11 + 1 + read-write + + + WDT_FLASHBOOT_MOD_EN + enable WDT in flash boot + 12 + 1 + read-write + + + WDT_SYS_RESET_LENGTH + system reset counter length + 13 + 3 + read-write + + + WDT_CPU_RESET_LENGTH + CPU reset counter length + 16 + 3 + read-write + + + WDT_STG3 + 1: interrupt stage en 2: CPU reset stage en 3: system reset stage en 4: RTC reset stage en + 19 + 3 + read-write + + + WDT_STG2 + 1: interrupt stage en 2: CPU reset stage en 3: system reset stage en 4: RTC reset stage en + 22 + 3 + read-write + + + WDT_STG1 + 1: interrupt stage en 2: CPU reset stage en 3: system reset stage en 4: RTC reset stage en + 25 + 3 + read-write + + + WDT_STG0 + 1: interrupt stage en 2: CPU reset stage en 3: system reset stage en 4: RTC reset stage en + 28 + 3 + read-write + + + WDT_EN + enable rtc watch dog + 31 + 1 + read-write + + + + + WDTCONFIG1 + stage0 hold time + 0x9C + 0x20 + 0x00030D40 + + + WDT_STG0_HOLD + stage0 hold time + 0 + 32 + read-write + + + + + WDTCONFIG2 + stage1 hold time + 0xA0 + 0x20 + 0x00013880 + + + WDT_STG1_HOLD + stage1 hold time + 0 + 32 + read-write + + + + + WDTCONFIG3 + stage2 hold time + 0xA4 + 0x20 + 0x00000FFF + + + WDT_STG2_HOLD + stage2 hold time + 0 + 32 + read-write + + + + + WDTCONFIG4 + stage3 hold time + 0xA8 + 0x20 + 0x00000FFF + + + WDT_STG3_HOLD + stage3 hold time + 0 + 32 + read-write + + + + + WDTFEED + rtc wdt feed + 0xAC + 0x20 + + + WDT_FEED + rtc wdt feed + 31 + 1 + write-only + + + + + WDTWPROTECT + configure rtc watch dog + 0xB0 + 0x20 + 0x50D83AA1 + + + WDT_WKEY + rtc watch dog key + 0 + 32 + read-write + + + + + SWD_CONF + congfigure super watch dog + 0xB4 + 0x20 + 0x04B00000 + + + SWD_RESET_FLAG + swd reset flag + 0 + 1 + read-only + + + SWD_FEED_INT + swd interrupt for feeding + 1 + 1 + read-only + + + SWD_BYPASS_RST + bypass super watch dog reset + 17 + 1 + read-write + + + SWD_SIGNAL_WIDTH + adjust signal width send to swd + 18 + 10 + read-write + + + SWD_RST_FLAG_CLR + reset swd reset flag + 28 + 1 + write-only + + + SWD_FEED + Sw feed swd + 29 + 1 + write-only + + + SWD_DISABLE + disabel SWD + 30 + 1 + read-write + + + SWD_AUTO_FEED_EN + automatically feed swd when int comes + 31 + 1 + read-write + + + + + SWD_WPROTECT + super watch dog key + 0xB8 + 0x20 + 0x8F1D312A + + + SWD_WKEY + super watch dog key + 0 + 32 + read-write + + + + + SW_CPU_STALL + configure cpu stall by sw + 0xBC + 0x20 + + + SW_STALL_APPCPU_C1 + {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU + 20 + 6 + read-write + + + SW_STALL_PROCPU_C1 + {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU + 26 + 6 + read-write + + + + + STORE4 + reserved register + 0xC0 + 0x20 + + + SCRATCH4 + reserved register + 0 + 32 + read-write + + + + + STORE5 + reserved register + 0xC4 + 0x20 + + + SCRATCH5 + reserved register + 0 + 32 + read-write + + + + + STORE6 + reserved register + 0xC8 + 0x20 + + + SCRATCH6 + reserved register + 0 + 32 + read-write + + + + + STORE7 + reserved register + 0xCC + 0x20 + + + SCRATCH7 + reserved register + 0 + 32 + read-write + + + + + LOW_POWER_ST + reserved register + 0xD0 + 0x20 + + + XPD_ROM0 + rom0 power down + 0 + 1 + read-only + + + XPD_DIG_DCDC + External DCDC power down + 2 + 1 + read-only + + + PERI_ISO + rtc peripheral iso + 3 + 1 + read-only + + + XPD_RTC_PERI + rtc peripheral power down + 4 + 1 + read-only + + + WIFI_ISO + wifi iso + 5 + 1 + read-only + + + XPD_WIFI + wifi wrap power down + 6 + 1 + read-only + + + DIG_ISO + digital wrap iso + 7 + 1 + read-only + + + XPD_DIG + digital wrap power down + 8 + 1 + read-only + + + TOUCH_STATE_START + touch should start to work + 9 + 1 + read-only + + + TOUCH_STATE_SWITCH + touch is about to working. Switch rtc main state + 10 + 1 + read-only + + + TOUCH_STATE_SLP + touch is in sleep state + 11 + 1 + read-only + + + TOUCH_STATE_DONE + touch is done + 12 + 1 + read-only + + + COCPU_STATE_START + ulp/cocpu should start to work + 13 + 1 + read-only + + + COCPU_STATE_SWITCH + ulp/cocpu is about to working. Switch rtc main state + 14 + 1 + read-only + + + COCPU_STATE_SLP + ulp/cocpu is in sleep state + 15 + 1 + read-only + + + COCPU_STATE_DONE + ulp/cocpu is done + 16 + 1 + read-only + + + MAIN_STATE_XTAL_ISO + no use any more + 17 + 1 + read-only + + + MAIN_STATE_PLL_ON + rtc main state machine is in states that pll should be running + 18 + 1 + read-only + + + RDY_FOR_WAKEUP + rtc is ready to receive wake up trigger from wake up source + 19 + 1 + read-only + + + MAIN_STATE_WAIT_END + rtc main state machine has been waited for some cycles + 20 + 1 + read-only + + + IN_WAKEUP_STATE + rtc main state machine is in the states of wakeup process + 21 + 1 + read-only + + + IN_LOW_POWER_STATE + rtc main state machine is in the states of low power + 22 + 1 + read-only + + + MAIN_STATE_IN_WAIT_8M + rtc main state machine is in wait 8m state + 23 + 1 + read-only + + + MAIN_STATE_IN_WAIT_PLL + rtc main state machine is in wait pll state + 24 + 1 + read-only + + + MAIN_STATE_IN_WAIT_XTL + rtc main state machine is in wait xtal state + 25 + 1 + read-only + + + MAIN_STATE_IN_SLP + rtc main state machine is in sleep state + 26 + 1 + read-only + + + MAIN_STATE_IN_IDLE + rtc main state machine is in idle state + 27 + 1 + read-only + + + MAIN_STATE + rtc main state machine status + 28 + 4 + read-only + + + + + DIAG0 + No public + 0xD4 + 0x20 + + + LOW_POWER_DIAG1 + No public + 0 + 32 + read-only + + + + + PAD_HOLD + rtc pad hold configure + 0xD8 + 0x20 + + + TOUCH_PAD0_HOLD + hold rtc pad0 + 0 + 1 + read-write + + + TOUCH_PAD1_HOLD + hold rtc pad-1 + 1 + 1 + read-write + + + TOUCH_PAD2_HOLD + hold rtc pad-2 + 2 + 1 + read-write + + + TOUCH_PAD3_HOLD + hold rtc pad-3 + 3 + 1 + read-write + + + TOUCH_PAD4_HOLD + hold rtc pad-4 + 4 + 1 + read-write + + + TOUCH_PAD5_HOLD + hold rtc pad-5 + 5 + 1 + read-write + + + TOUCH_PAD6_HOLD + hold rtc pad-6 + 6 + 1 + read-write + + + TOUCH_PAD7_HOLD + hold rtc pad-7 + 7 + 1 + read-write + + + TOUCH_PAD8_HOLD + hold rtc pad-8 + 8 + 1 + read-write + + + TOUCH_PAD9_HOLD + hold rtc pad-9 + 9 + 1 + read-write + + + TOUCH_PAD10_HOLD + hold rtc pad-10 + 10 + 1 + read-write + + + TOUCH_PAD11_HOLD + hold rtc pad-11 + 11 + 1 + read-write + + + TOUCH_PAD12_HOLD + hold rtc pad-12 + 12 + 1 + read-write + + + TOUCH_PAD13_HOLD + hold rtc pad-13 + 13 + 1 + read-write + + + TOUCH_PAD14_HOLD + hold rtc pad-14 + 14 + 1 + read-write + + + X32P_HOLD + hold rtc pad-15 + 15 + 1 + read-write + + + X32N_HOLD + hold rtc pad-16 + 16 + 1 + read-write + + + PDAC1_HOLD + hold rtc pad-17 + 17 + 1 + read-write + + + PDAC2_HOLD + hold rtc pad-18 + 18 + 1 + read-write + + + PAD19_HOLD + hold rtc pad-19 + 19 + 1 + read-write + + + PAD20_HOLD + hold rtc pad-20 + 20 + 1 + read-write + + + PAD21_HOLD + hold rtc pad-21 + 21 + 1 + read-write + + + + + DIG_PAD_HOLD + configure digtal pad hold + 0xDC + 0x20 + + + DIG_PAD_HOLD + configure digtal pad hold + 0 + 32 + read-write + + + + + EXT_WAKEUP1 + configure ext1 wakeup + 0xE0 + 0x20 + + + EXT_WAKEUP1_SEL + Bitmap to select RTC pads for ext wakeup1 + 0 + 22 + read-write + + + EXT_WAKEUP1_STATUS_CLR + clear ext wakeup1 status + 22 + 1 + write-only + + + + + EXT_WAKEUP1_STATUS + check ext wakeup1 status + 0xE4 + 0x20 + + + EXT_WAKEUP1_STATUS + ext wakeup1 status + 0 + 22 + read-only + + + + + BROWN_OUT + congfigure brownout + 0xE8 + 0x20 + 0x43FF0010 + + + BROWN_OUT_INT_WAIT + brown out interrupt wait cycles + 4 + 10 + read-write + + + BROWN_OUT_CLOSE_FLASH_ENA + enable close flash when brown out happens + 14 + 1 + read-write + + + BROWN_OUT_PD_RF_ENA + enable power down RF when brown out happens + 15 + 1 + read-write + + + BROWN_OUT_RST_WAIT + brown out reset wait cycles + 16 + 10 + read-write + + + BROWN_OUT_RST_ENA + enable brown out reset + 26 + 1 + read-write + + + BROWN_OUT_RST_SEL + 1: 4-pos reset, 0: sys_reset + 27 + 1 + read-write + + + BROWN_OUT_ANA_RST_EN + enable brown out reset en + 28 + 1 + read-write + + + BROWN_OUT_CNT_CLR + clear brown out counter + 29 + 1 + write-only + + + BROWN_OUT_ENA + enable brown out + 30 + 1 + read-write + + + DET + get brown out detect + 31 + 1 + read-only + + + + + TIME_LOW1 + RTC timer low 32 bits + 0xEC + 0x20 + + + TIMER_VALUE1_LOW + RTC timer low 32 bits + 0 + 32 + read-only + + + + + TIME_HIGH1 + RTC timer high 16 bits + 0xF0 + 0x20 + + + TIMER_VALUE1_HIGH + RTC timer high 16 bits + 0 + 16 + read-only + + + + + XTAL32K_CLK_FACTOR + xtal 32k watch dog backup clock factor + 0xF4 + 0x20 + + + XTAL32K_CLK_FACTOR + xtal 32k watch dog backup clock factor + 0 + 32 + read-write + + + + + XTAL32K_CONF + configure xtal32k + 0xF8 + 0x20 + 0x0FF00000 + + + XTAL32K_RETURN_WAIT + cycles to wait to return noral xtal 32k + 0 + 4 + read-write + + + XTAL32K_RESTART_WAIT + cycles to wait to repower on xtal 32k + 4 + 16 + read-write + + + XTAL32K_WDT_TIMEOUT + If no clock detected for this amount of time 32k is regarded as dead + 20 + 8 + read-write + + + XTAL32K_STABLE_THRES + if restarted xtal32k period is smaller than this, it is regarded as stable + 28 + 4 + read-write + + + + + ULP_CP_TIMER + configure ulp + 0xFC + 0x20 + + + ULP_CP_PC_INIT + ULP-coprocessor PC initial address + 0 + 11 + read-write + + + ULP_CP_GPIO_WAKEUP_ENA + ULP-coprocessor wakeup by GPIO enable + 29 + 1 + read-write + + + ULP_CP_GPIO_WAKEUP_CLR + ULP-coprocessor wakeup by GPIO state clear + 30 + 1 + write-only + + + ULP_CP_SLP_TIMER_EN + ULP-coprocessor timer enable bit + 31 + 1 + read-write + + + + + ULP_CP_CTRL + configure ulp + 0x100 + 0x20 + 0x00100200 + + + ULP_CP_MEM_ADDR_INIT + No public + 0 + 11 + read-write + + + ULP_CP_MEM_ADDR_SIZE + No public + 11 + 11 + read-write + + + ULP_CP_MEM_OFFST_CLR + No public + 22 + 1 + write-only + + + ULP_CP_CLK_FO + ulp coprocessor clk force on + 28 + 1 + read-write + + + ULP_CP_RESET + ulp coprocessor clk software reset + 29 + 1 + read-write + + + ULP_CP_FORCE_START_TOP + 1: ULP-coprocessor is started by SW + 30 + 1 + read-write + + + ULP_CP_START_TOP + Write 1 to start ULP-coprocessor + 31 + 1 + read-write + + + + + COCPU_CTRL + configure ulp-riscv + 0x104 + 0x20 + 0x008A0810 + + + COCPU_CLK_FO + cocpu clk force on + 0 + 1 + read-write + + + COCPU_START_2_RESET_DIS + time from start cocpu to pull down reset + 1 + 6 + read-write + + + COCPU_START_2_INTR_EN + time from start cocpu to give start interrupt + 7 + 6 + read-write + + + COCPU_SHUT + to shut cocpu + 13 + 1 + read-write + + + COCPU_SHUT_2_CLK_DIS + time from shut cocpu to disable clk + 14 + 8 + read-write + + + COCPU_SHUT_RESET_EN + to reset cocpu + 22 + 1 + read-write + + + COCPU_SEL + 1: old ULP 0: new riscV + 23 + 1 + read-write + + + COCPU_DONE_FORCE + 1: select riscv done 0: select ulp done + 24 + 1 + read-write + + + COCPU_DONE + done signal used by riscv to control timer. + 25 + 1 + read-write + + + COCPU_SW_INT_TRIGGER + trigger cocpu register interrupt + 26 + 1 + write-only + + + COCPU_CLKGATE_EN + open ulp-riscv clk gate + 27 + 1 + read-write + + + + + TOUCH_CTRL1 + configure touch controller + 0x108 + 0x20 + 0x10000100 + + + TOUCH_SLEEP_CYCLES + sleep cycles for timer + 0 + 16 + read-write + + + TOUCH_MEAS_NUM + the meas length (in 8MHz) + 16 + 16 + read-write + + + + + TOUCH_CTRL2 + configure touch controller + 0x10C + 0x20 + 0x000840CC + + + TOUCH_DRANGE + TOUCH_DRANGE + 2 + 2 + read-write + + + TOUCH_DREFL + TOUCH_DREFL + 4 + 2 + read-write + + + TOUCH_DREFH + TOUCH_DREFH + 6 + 2 + read-write + + + TOUCH_XPD_BIAS + TOUCH_XPD_BIAS + 8 + 1 + read-write + + + TOUCH_REFC + TOUCH pad0 reference cap + 9 + 3 + read-write + + + TOUCH_DBIAS + 1:use self bias 0:use bandgap bias + 12 + 1 + read-write + + + TOUCH_SLP_TIMER_EN + touch timer enable bit + 13 + 1 + read-write + + + TOUCH_START_FSM_EN + 1: TOUCH_START & TOUCH_XPD is controlled by touch fsm + 14 + 1 + read-write + + + TOUCH_START_EN + 1: start touch fsm + 15 + 1 + read-write + + + TOUCH_START_FORCE + 1: to start touch fsm by SW + 16 + 1 + read-write + + + TOUCH_XPD_WAIT + the waiting cycles (in 8MHz) between TOUCH_START and TOUCH_XPD + 17 + 8 + read-write + + + TOUCH_SLP_CYC_DIV + when a touch pad is active sleep cycle could be divided by this number + 25 + 2 + read-write + + + TOUCH_TIMER_FORCE_DONE + force touch timer done + 27 + 2 + read-write + + + TOUCH_RESET + reset upgrade touch + 29 + 1 + read-write + + + TOUCH_CLK_FO + touch clock force on + 30 + 1 + read-write + + + TOUCH_CLKGATE_EN + touch clock enable + 31 + 1 + read-write + + + + + TOUCH_SCAN_CTRL + configure touch controller + 0x110 + 0x20 + 0xF0000102 + + + TOUCH_DENOISE_RES + De-noise resolution: 12/10/8/4 bit + 0 + 2 + read-write + + + TOUCH_DENOISE_EN + touch pad0 will be used to de-noise + 2 + 1 + read-write + + + TOUCH_INACTIVE_CONNECTION + inactive touch pads connect to 1: gnd 0: HighZ + 8 + 1 + read-write + + + TOUCH_SHIELD_PAD_EN + touch pad14 will be used as shield + 9 + 1 + read-write + + + TOUCH_SCAN_PAD_MAP + touch scan mode pad enable map + 10 + 15 + read-write + + + TOUCH_BUFDRV + touch7 buffer driver strength + 25 + 3 + read-write + + + TOUCH_OUT_RING + select out ring pad + 28 + 4 + read-write + + + + + TOUCH_SLP_THRES + configure touch controller + 0x114 + 0x20 + 0x78000000 + + + TOUCH_SLP_TH + the threshold for sleep touch pad + 0 + 22 + read-write + + + TOUCH_SLP_APPROACH_EN + sleep pad approach function enable + 26 + 1 + read-write + + + TOUCH_SLP_PAD + configure which pad as slp pad + 27 + 5 + read-write + + + + + TOUCH_APPROACH + configure touch controller + 0x118 + 0x20 + 0x50000000 + + + TOUCH_SLP_CHANNEL_CLR + clear touch slp channel + 23 + 1 + write-only + + + TOUCH_APPROACH_MEAS_TIME + approach pads total meas times + 24 + 8 + read-write + + + + + TOUCH_FILTER_CTRL + configure touch controller + 0x11C + 0x20 + 0x96AA8800 + + + TOUCH_BYPASS_NEG_NOISE_THRES + bypass neg noise thres + 7 + 1 + read-write + + + TOUCH_BYPASS_NOISE_THRES + bypaas noise thres + 8 + 1 + read-write + + + TOUCH_SMOOTH_LVL + smooth filter factor + 9 + 2 + read-write + + + TOUCH_JITTER_STEP + touch jitter step + 11 + 4 + read-write + + + TOUCH_NEG_NOISE_LIMIT + negative threshold counter limit + 15 + 4 + read-write + + + TOUCH_NEG_NOISE_THRES + neg noise thres + 19 + 2 + read-write + + + TOUCH_NOISE_THRES + noise thres + 21 + 2 + read-write + + + TOUCH_HYSTERESIS + hysteresis + 23 + 2 + read-write + + + TOUCH_DEBOUNCE + debounce counter + 25 + 3 + read-write + + + TOUCH_FILTER_MODE + 0: IIR ? 1: IIR ? 2: IIR 1/8 3: Jitter + 28 + 3 + read-write + + + TOUCH_FILTER_EN + touch filter enable + 31 + 1 + read-write + + + + + USB_CONF + usb configure + 0x120 + 0x20 + + + USB_VREFH + reg_usb_vrefh + 0 + 2 + read-write + + + USB_VREFL + reg_usb_vrefl + 2 + 2 + read-write + + + USB_VREF_OVERRIDE + reg_usb_vref_override + 4 + 1 + read-write + + + USB_PAD_PULL_OVERRIDE + reg_usb_pad_pull_override + 5 + 1 + read-write + + + USB_DP_PULLUP + reg_usb_dp_pullup + 6 + 1 + read-write + + + USB_DP_PULLDOWN + reg_usb_dp_pulldown + 7 + 1 + read-write + + + USB_DM_PULLUP + reg_usb_dm_pullup + 8 + 1 + read-write + + + USB_DM_PULLDOWN + reg_usb_dm_pulldown + 9 + 1 + read-write + + + USB_PULLUP_VALUE + reg_usb_pullup_value + 10 + 1 + read-write + + + USB_PAD_ENABLE_OVERRIDE + reg_usb_pad_enable_override + 11 + 1 + read-write + + + USB_PAD_ENABLE + reg_usb_pad_enable + 12 + 1 + read-write + + + USB_TXM + reg_usb_txm + 13 + 1 + read-write + + + USB_TXP + reg_usb_txp + 14 + 1 + read-write + + + USB_TX_EN + reg_usb_tx_en + 15 + 1 + read-write + + + USB_TX_EN_OVERRIDE + reg_usb_tx_en_override + 16 + 1 + read-write + + + USB_RESET_DISABLE + reg_usb_reset_disable + 17 + 1 + read-write + + + IO_MUX_RESET_DISABLE + reg_io_mux_reset_disable + 18 + 1 + read-write + + + SW_USB_PHY_SEL + reg_sw_usb_phy_sel + 19 + 1 + read-write + + + SW_HW_USB_PHY_SEL + reg_sw_hw_usb_phy_sel + 20 + 1 + read-write + + + + + TOUCH_TIMEOUT_CTRL + configure touch controller + 0x124 + 0x20 + 0x007FFFFF + + + TOUCH_TIMEOUT_NUM + configure touch timerout time + 0 + 22 + read-write + + + TOUCH_TIMEOUT_EN + enable touch timerout + 22 + 1 + read-write + + + + + SLP_REJECT_CAUSE + get reject casue + 0x128 + 0x20 + + + REJECT_CAUSE + sleep reject cause + 0 + 18 + read-only + + + + + OPTION1 + rtc common configure + 0x12C + 0x20 + + + FORCE_DOWNLOAD_BOOT + force chip entry download boot by sw + 0 + 1 + read-write + + + + + SLP_WAKEUP_CAUSE + get wakeup cause + 0x130 + 0x20 + + + WAKEUP_CAUSE + sleep wakeup cause + 0 + 17 + read-only + + + + + ULP_CP_TIMER_1 + configure ulp sleep time + 0x134 + 0x20 + 0x0000C800 + + + ULP_CP_TIMER_SLP_CYCLE + sleep cycles for ULP-coprocessor timer + 8 + 24 + read-write + + + + + INT_ENA_RTC_W1TS + oneset rtc interrupt + 0x138 + 0x20 + + + SLP_WAKEUP_INT_ENA_W1TS + enable sleep wakeup interrupt + 0 + 1 + write-only + + + SLP_REJECT_INT_ENA_W1TS + enable sleep reject interrupt + 1 + 1 + write-only + + + SDIO_IDLE_INT_ENA_W1TS + enable SDIO idle interrupt + 2 + 1 + write-only + + + WDT_INT_ENA_W1TS + enable RTC WDT interrupt + 3 + 1 + write-only + + + TOUCH_SCAN_DONE_INT_ENA_W1TS + enable touch scan done interrupt + 4 + 1 + write-only + + + ULP_CP_INT_ENA_W1TS + enable ULP-coprocessor interrupt + 5 + 1 + write-only + + + TOUCH_DONE_INT_ENA_W1TS + enable touch done interrupt + 6 + 1 + write-only + + + TOUCH_ACTIVE_INT_ENA_W1TS + enable touch active interrupt + 7 + 1 + write-only + + + TOUCH_INACTIVE_INT_ENA_W1TS + enable touch inactive interrupt + 8 + 1 + write-only + + + BROWN_OUT_INT_ENA_W1TS + enable brown out interrupt + 9 + 1 + write-only + + + MAIN_TIMER_INT_ENA_W1TS + enable RTC main timer interrupt + 10 + 1 + write-only + + + SARADC1_INT_ENA_W1TS + enable saradc1 interrupt + 11 + 1 + write-only + + + TSENS_INT_ENA_W1TS + enable tsens interrupt + 12 + 1 + write-only + + + COCPU_INT_ENA_W1TS + enable riscV cocpu interrupt + 13 + 1 + write-only + + + SARADC2_INT_ENA_W1TS + enable saradc2 interrupt + 14 + 1 + write-only + + + SWD_INT_ENA_W1TS + enable super watch dog interrupt + 15 + 1 + write-only + + + XTAL32K_DEAD_INT_ENA_W1TS + enable xtal32k_dead interrupt + 16 + 1 + write-only + + + COCPU_TRAP_INT_ENA_W1TS + enable cocpu trap interrupt + 17 + 1 + write-only + + + TOUCH_TIMEOUT_INT_ENA_W1TS + enable touch timeout interrupt + 18 + 1 + write-only + + + GLITCH_DET_INT_ENA_W1TS + enbale gitch det interrupt + 19 + 1 + write-only + + + TOUCH_APPROACH_LOOP_DONE_INT_ENA_W1TS + enbale touch approach_loop done interrupt + 20 + 1 + write-only + + + + + INT_ENA_RTC_W1TC + oneset clr rtc interrupt enable + 0x13C + 0x20 + + + SLP_WAKEUP_INT_ENA_W1TC + enable sleep wakeup interrupt + 0 + 1 + write-only + + + SLP_REJECT_INT_ENA_W1TC + enable sleep reject interrupt + 1 + 1 + write-only + + + SDIO_IDLE_INT_ENA_W1TC + enable SDIO idle interrupt + 2 + 1 + write-only + + + WDT_INT_ENA_W1TC + enable RTC WDT interrupt + 3 + 1 + write-only + + + TOUCH_SCAN_DONE_INT_ENA_W1TC + enable touch scan done interrupt + 4 + 1 + write-only + + + ULP_CP_INT_ENA_W1TC + enable ULP-coprocessor interrupt + 5 + 1 + write-only + + + TOUCH_DONE_INT_ENA_W1TC + enable touch done interrupt + 6 + 1 + write-only + + + TOUCH_ACTIVE_INT_ENA_W1TC + enable touch active interrupt + 7 + 1 + write-only + + + TOUCH_INACTIVE_INT_ENA_W1TC + enable touch inactive interrupt + 8 + 1 + write-only + + + BROWN_OUT_INT_ENA_W1TC + enable brown out interrupt + 9 + 1 + write-only + + + MAIN_TIMER_INT_ENA_W1TC + enable RTC main timer interrupt + 10 + 1 + write-only + + + SARADC1_INT_ENA_W1TC + enable saradc1 interrupt + 11 + 1 + write-only + + + TSENS_INT_ENA_W1TC + enable tsens interrupt + 12 + 1 + write-only + + + COCPU_INT_ENA_W1TC + enable riscV cocpu interrupt + 13 + 1 + write-only + + + SARADC2_INT_ENA_W1TC + enable saradc2 interrupt + 14 + 1 + write-only + + + SWD_INT_ENA_W1TC + enable super watch dog interrupt + 15 + 1 + write-only + + + XTAL32K_DEAD_INT_ENA_W1TC + enable xtal32k_dead interrupt + 16 + 1 + write-only + + + COCPU_TRAP_INT_ENA_W1TC + enable cocpu trap interrupt + 17 + 1 + write-only + + + TOUCH_TIMEOUT_INT_ENA_W1TC + enable touch timeout interrupt + 18 + 1 + write-only + + + GLITCH_DET_INT_ENA_W1TC + enbale gitch det interrupt + 19 + 1 + write-only + + + TOUCH_APPROACH_LOOP_DONE_INT_ENA_W1TC + enbale touch approach_loop done interrupt + 20 + 1 + write-only + + + + + RETENTION_CTRL + configure retention + 0x140 + 0x20 + 0x28340000 + + + RETENTION_TAG_MODE + No public + 10 + 4 + read-write + + + RETENTION_TARGET + congfigure retention target cpu and/or tag + 14 + 2 + read-write + + + RETENTION_CLK_SEL + No public + 16 + 1 + read-write + + + RETENTION_DONE_WAIT + wait retention done cycle + 17 + 3 + read-write + + + RETENTION_CLKOFF_WAIT + wait clk off cycle + 20 + 4 + read-write + + + RETENTION_EN + enable retention + 24 + 1 + read-write + + + RETENTION_WAIT + wait cycles for rention operation + 25 + 7 + read-write + + + + + PG_CTRL + configure power glitch + 0x144 + 0x20 + + + POWER_GLITCH_DSENSE + GLITCH_DSENSE + 26 + 2 + read-write + + + POWER_GLITCH_FORCE_PD + force power glitch disable + 28 + 1 + read-write + + + POWER_GLITCH_FORCE_PU + force power glitch enable + 29 + 1 + read-write + + + POWER_GLITCH_EFUSE_SEL + select use analog fib signal + 30 + 1 + read-write + + + POWER_GLITCH_EN + enable power glitch + 31 + 1 + read-write + + + + + FIB_SEL + No public + 0x148 + 0x20 + 0x00000007 + + + FIB_SEL + No public + 0 + 3 + read-write + + + + + TOUCH_DAC + configure touch dac + 0x14C + 0x20 + + + TOUCH_PAD9_DAC + configure touch pad dac9 + 2 + 3 + read-write + + + TOUCH_PAD8_DAC + configure touch pad dac8 + 5 + 3 + read-write + + + TOUCH_PAD7_DAC + configure touch pad dac7 + 8 + 3 + read-write + + + TOUCH_PAD6_DAC + configure touch pad dac6 + 11 + 3 + read-write + + + TOUCH_PAD5_DAC + configure touch pad dac5 + 14 + 3 + read-write + + + TOUCH_PAD4_DAC + configure touch pad dac4 + 17 + 3 + read-write + + + TOUCH_PAD3_DAC + configure touch pad dac3 + 20 + 3 + read-write + + + TOUCH_PAD2_DAC + configure touch pad dac2 + 23 + 3 + read-write + + + TOUCH_PAD1_DAC + configure touch pad dac1 + 26 + 3 + read-write + + + TOUCH_PAD0_DAC + configure touch pad dac0 + 29 + 3 + read-write + + + + + TOUCH_DAC1 + configure touch dac + 0x150 + 0x20 + + + TOUCH_PAD14_DAC + configure touch pad dac14 + 17 + 3 + read-write + + + TOUCH_PAD13_DAC + configure touch pad dac13 + 20 + 3 + read-write + + + TOUCH_PAD12_DAC + configure touch pad dac12 + 23 + 3 + read-write + + + TOUCH_PAD11_DAC + configure touch pad dac11 + 26 + 3 + read-write + + + TOUCH_PAD10_DAC + configure touch pad dac10 + 29 + 3 + read-write + + + + + COCPU_DISABLE + configure ulp diable + 0x154 + 0x20 + + + DISABLE_RTC_CPU + configure ulp diable + 31 + 1 + read-write + + + + + DATE + version register + 0x1FC + 0x20 + 0x02101271 + + + DATE + version register + 0 + 28 + read-write + + + + + + + RTC_I2C + RTC_I2C Peripheral + RTC_I2C + 0x60008C00 + + 0x0 + 0x7C + registers + + + + SCL_LOW + configure low scl period + 0x0 + 0x20 + 0x00000100 + + + PERIOD + time period that scl =0 + 0 + 20 + read-write + + + + + CTRL + configure i2c ctrl + 0x4 + 0x20 + + + SDA_FORCE_OUT + 1=push pull,0=open drain + 0 + 1 + read-write + + + SCL_FORCE_OUT + 1=push pull,0=open drain + 1 + 1 + read-write + + + MS_MODE + 1=master,0=slave + 2 + 1 + read-write + + + TRANS_START + force start + 3 + 1 + read-write + + + TX_LSB_FIRST + transit lsb first + 4 + 1 + read-write + + + RX_LSB_FIRST + receive lsb first + 5 + 1 + read-write + + + I2C_CTRL_CLK_GATE_EN + configure i2c ctrl clk enable + 29 + 1 + read-write + + + I2C_RESET + rtc i2c sw reset + 30 + 1 + read-write + + + I2CCLK_EN + rtc i2c reg clk gating + 31 + 1 + read-write + + + + + STATUS + get i2c status + 0x8 + 0x20 + + + ACK_REC + ack response + 0 + 1 + read-only + + + SLAVE_RW + slave read or write + 1 + 1 + read-only + + + ARB_LOST + arbitration is lost + 2 + 1 + read-only + + + BUS_BUSY + bus is busy + 3 + 1 + read-only + + + SLAVE_ADDRESSED + slave reg sub address + 4 + 1 + read-only + + + BYTE_TRANS + One byte transit done + 5 + 1 + read-only + + + OP_CNT + which operation is working + 6 + 2 + read-only + + + SHIFT + shifter content + 16 + 8 + read-only + + + SCL_MAIN_STATE_LAST + i2c last main status + 24 + 3 + read-only + + + SCL_STATE_LAST + scl last status + 28 + 3 + read-only + + + + + TO + configure time out + 0xC + 0x20 + 0x00010000 + + + TIME_OUT + time out threshold + 0 + 20 + read-write + + + + + SLAVE_ADDR + configure slave id + 0x10 + 0x20 + + + SLAVE_ADDR + slave address + 0 + 15 + read-write + + + ADDR_10BIT_EN + i2c 10bit mode enable + 31 + 1 + read-write + + + + + SCL_HIGH + configure high scl period + 0x14 + 0x20 + 0x00000100 + + + PERIOD + time period that scl = 1 + 0 + 20 + read-write + + + + + SDA_DUTY + configure sda duty + 0x18 + 0x20 + 0x00000010 + + + NUM + time period for SDA to toggle after SCL goes low + 0 + 20 + read-write + + + + + SCL_START_PERIOD + configure scl start period + 0x1C + 0x20 + 0x00000008 + + + SCL_START_PERIOD + time period for SCL to toggle after I2C start is triggered + 0 + 20 + read-write + + + + + SCL_STOP_PERIOD + configure scl stop period + 0x20 + 0x20 + 0x00000008 + + + SCL_STOP_PERIOD + time period for SCL to stop after I2C end is triggered + 0 + 20 + read-write + + + + + INT_CLR + interrupt clear register + 0x24 + 0x20 + + + SLAVE_TRAN_COMP_INT_CLR + clear slave transit complete interrupt + 0 + 1 + write-only + + + ARBITRATION_LOST_INT_CLR + clear arbitration lost interrupt + 1 + 1 + write-only + + + MASTER_TRAN_COMP_INT_CLR + clear master transit complete interrupt + 2 + 1 + write-only + + + TRANS_COMPLETE_INT_CLR + clear transit complete interrupt + 3 + 1 + write-only + + + TIME_OUT_INT_CLR + clear time out interrupt + 4 + 1 + write-only + + + ACK_ERR_INT_CLR + clear ack error interrupt + 5 + 1 + write-only + + + RX_DATA_INT_CLR + clear receive data interrupt + 6 + 1 + write-only + + + TX_DATA_INT_CLR + clear transit load data complete interrupt + 7 + 1 + write-only + + + DETECT_START_INT_CLR + clear detect start interrupt + 8 + 1 + write-only + + + + + INT_RAW + interrupt raw register + 0x28 + 0x20 + + + SLAVE_TRAN_COMP_INT_RAW + slave transit complete interrupt raw + 0 + 1 + read-only + + + ARBITRATION_LOST_INT_RAW + arbitration lost interrupt raw + 1 + 1 + read-only + + + MASTER_TRAN_COMP_INT_RAW + master transit complete interrupt raw + 2 + 1 + read-only + + + TRANS_COMPLETE_INT_RAW + transit complete interrupt raw + 3 + 1 + read-only + + + TIME_OUT_INT_RAW + time out interrupt raw + 4 + 1 + read-only + + + ACK_ERR_INT_RAW + ack error interrupt raw + 5 + 1 + read-only + + + RX_DATA_INT_RAW + receive data interrupt raw + 6 + 1 + read-only + + + TX_DATA_INT_RAW + transit data interrupt raw + 7 + 1 + read-only + + + DETECT_START_INT_RAW + detect start interrupt raw + 8 + 1 + read-only + + + + + INT_ST + interrupt state register + 0x2C + 0x20 + + + SLAVE_TRAN_COMP_INT_ST + slave transit complete interrupt state + 0 + 1 + read-only + + + ARBITRATION_LOST_INT_ST + arbitration lost interrupt state + 1 + 1 + read-only + + + MASTER_TRAN_COMP_INT_ST + master transit complete interrupt state + 2 + 1 + read-only + + + TRANS_COMPLETE_INT_ST + transit complete interrupt state + 3 + 1 + read-only + + + TIME_OUT_INT_ST + time out interrupt state + 4 + 1 + read-only + + + ACK_ERR_INT_ST + ack error interrupt state + 5 + 1 + read-only + + + RX_DATA_INT_ST + receive data interrupt state + 6 + 1 + read-only + + + TX_DATA_INT_ST + transit data interrupt state + 7 + 1 + read-only + + + DETECT_START_INT_ST + detect start interrupt state + 8 + 1 + read-only + + + + + INT_ENA + interrupt enable register + 0x30 + 0x20 + + + SLAVE_TRAN_COMP_INT_ENA + enable slave transit complete interrupt + 0 + 1 + read-write + + + ARBITRATION_LOST_INT_ENA + enable arbitration lost interrupt + 1 + 1 + read-write + + + MASTER_TRAN_COMP_INT_ENA + enable master transit complete interrupt + 2 + 1 + read-write + + + TRANS_COMPLETE_INT_ENA + enable transit complete interrupt + 3 + 1 + read-write + + + TIME_OUT_INT_ENA + enable time out interrupt + 4 + 1 + read-write + + + ACK_ERR_INT_ENA + enable eack error interrupt + 5 + 1 + read-write + + + RX_DATA_INT_ENA + enable receive data interrupt + 6 + 1 + read-write + + + TX_DATA_INT_ENA + enable transit data interrupt + 7 + 1 + read-write + + + DETECT_START_INT_ENA + enable detect start interrupt + 8 + 1 + read-write + + + + + DATA + get i2c data status + 0x34 + 0x20 + + + I2C_RDATA + data received + 0 + 8 + read-only + + + SLAVE_TX_DATA + data sent by slave + 8 + 8 + read-write + + + I2C_DONE + i2c done + 31 + 1 + read-only + + + + + CMD0 + i2c commond0 register + 0x38 + 0x20 + 0x00000903 + + + COMMAND0 + command0 + 0 + 14 + read-write + + + COMMAND0_DONE + command0_done + 31 + 1 + read-only + + + + + CMD1 + i2c commond1 register + 0x3C + 0x20 + 0x00001901 + + + COMMAND1 + command1 + 0 + 14 + read-write + + + COMMAND1_DONE + command1_done + 31 + 1 + read-only + + + + + CMD2 + i2c commond2 register + 0x40 + 0x20 + 0x00000902 + + + COMMAND2 + command2 + 0 + 14 + read-write + + + COMMAND2_DONE + command2_done + 31 + 1 + read-only + + + + + CMD3 + i2c commond3 register + 0x44 + 0x20 + 0x00000101 + + + COMMAND3 + command3 + 0 + 14 + read-write + + + COMMAND3_DONE + command3_done + 31 + 1 + read-only + + + + + CMD4 + i2c commond4 register + 0x48 + 0x20 + 0x00000901 + + + COMMAND4 + command4 + 0 + 14 + read-write + + + COMMAND4_DONE + command4_done + 31 + 1 + read-only + + + + + CMD5 + i2c commond5_register + 0x4C + 0x20 + 0x00001701 + + + COMMAND5 + command5 + 0 + 14 + read-write + + + COMMAND5_DONE + command5_done + 31 + 1 + read-only + + + + + CMD6 + i2c commond6 register + 0x50 + 0x20 + 0x00001901 + + + COMMAND6 + command6 + 0 + 14 + read-write + + + COMMAND6_DONE + command6_done + 31 + 1 + read-only + + + + + CMD7 + i2c commond7 register + 0x54 + 0x20 + 0x00000904 + + + COMMAND7 + command7 + 0 + 14 + read-write + + + COMMAND7_DONE + command7_done + 31 + 1 + read-only + + + + + CMD8 + i2c commond8 register + 0x58 + 0x20 + 0x00001901 + + + COMMAND8 + command8 + 0 + 14 + read-write + + + COMMAND8_DONE + command8_done + 31 + 1 + read-only + + + + + CMD9 + i2c commond9 register + 0x5C + 0x20 + 0x00000903 + + + COMMAND9 + command9 + 0 + 14 + read-write + + + COMMAND9_DONE + command9_done + 31 + 1 + read-only + + + + + CMD10 + i2c commond10 register + 0x60 + 0x20 + 0x00000101 + + + COMMAND10 + command10 + 0 + 14 + read-write + + + COMMAND10_DONE + command10_done + 31 + 1 + read-only + + + + + CMD11 + i2c commond11 register + 0x64 + 0x20 + 0x00000901 + + + COMMAND11 + command11 + 0 + 14 + read-write + + + COMMAND11_DONE + command11_done + 31 + 1 + read-only + + + + + CMD12 + i2c commond12 register + 0x68 + 0x20 + 0x00001701 + + + COMMAND12 + command12 + 0 + 14 + read-write + + + COMMAND12_DONE + command12_done + 31 + 1 + read-only + + + + + CMD13 + i2c commond13 register + 0x6C + 0x20 + 0x00001901 + + + COMMAND13 + command13 + 0 + 14 + read-write + + + COMMAND13_DONE + command13_done + 31 + 1 + read-only + + + + + CMD14 + i2c commond14 register + 0x70 + 0x20 + + + COMMAND14 + command14 + 0 + 14 + read-write + + + COMMAND14_DONE + command14_done + 31 + 1 + read-only + + + + + CMD15 + i2c commond15 register + 0x74 + 0x20 + + + COMMAND15 + command15 + 0 + 14 + read-write + + + COMMAND15_DONE + command15_done + 31 + 1 + read-only + + + + + DATE + version register + 0xFC + 0x20 + 0x01905310 + + + I2C_DATE + version + 0 + 28 + read-write + + + + + + + RTC_IO + RTC_IO Peripheral + RTC_IO + 0x60008400 + + 0x0 + 0xF0 + registers + + + + RTC_GPIO_OUT + RTC GPIO 0 ~ 21 output data register + 0x0 + 0x20 + + + DATA + RTC GPIO 0 ~ 21 output data + 10 + 22 + read-write + + + + + RTC_GPIO_OUT_W1TS + one set RTC GPIO output data + 0x4 + 0x20 + + + RTC_GPIO_OUT_DATA_W1TS + RTC GPIO 0 ~ 21 output data write 1 to set + 10 + 22 + write-only + + + + + RTC_GPIO_OUT_W1TC + one clear RTC GPIO output data + 0x8 + 0x20 + + + RTC_GPIO_OUT_DATA_W1TC + RTC GPIO 0 ~ 21 output data write 1 to clear + 10 + 22 + write-only + + + + + RTC_GPIO_ENABLE + Configure RTC GPIO output enable + 0xC + 0x20 + + + RTC_GPIO_ENABLE + RTC GPIO 0 ~ 21 enable + 10 + 22 + read-write + + + + + RTC_GPIO_ENABLE_W1TS + one set RTC GPIO output enable + 0x10 + 0x20 + + + RTC_GPIO_ENABLE_W1TS + RTC GPIO 0 ~ 21 enable write 1 to set + 10 + 22 + write-only + + + + + ENABLE_W1TC + one clear RTC GPIO output enable + 0x14 + 0x20 + + + ENABLE_W1TC + RTC GPIO 0 ~ 21 enable write 1 to clear + 10 + 22 + write-only + + + + + RTC_GPIO_STATUS + RTC GPIO 0 ~ 21 interrupt status + 0x18 + 0x20 + + + INT + RTC GPIO 0 ~ 21 interrupt status + 10 + 22 + read-write + + + + + RTC_GPIO_STATUS_W1TS + One set RTC GPIO 0 ~ 21 interrupt status + 0x1C + 0x20 + + + RTC_GPIO_STATUS_INT_W1TS + RTC GPIO 0 ~ 21 interrupt status write 1 to set + 10 + 22 + write-only + + + + + RTC_GPIO_STATUS_W1TC + One clear RTC GPIO 0 ~ 21 interrupt status + 0x20 + 0x20 + + + RTC_GPIO_STATUS_INT_W1TC + RTC GPIO 0 ~ 21 interrupt status write 1 to clear + 10 + 22 + write-only + + + + + RTC_GPIO_IN + RTC GPIO input data + 0x24 + 0x20 + + + NEXT + RTC GPIO input data + 10 + 22 + read-only + + + + + 22 + 0x4 + 0-21 + PIN%s + configure RTC GPIO%s + 0x28 + 0x20 + + + PAD_DRIVER + if set to 0: normal output, if set to 1: open drain + 2 + 1 + read-write + + + INT_TYPE + if set to 0: GPIO interrupt disable, if set to 1: rising edge trigger, if set to 2: falling edge trigger, if set to 3: any edge trigger, if set to 4: low level trigger, if set to 5: high level trigger + 7 + 3 + read-write + + + WAKEUP_ENABLE + RTC GPIO wakeup enable bit + 10 + 1 + read-write + + + + + RTC_DEBUG_SEL + configure rtc debug + 0x80 + 0x20 + + + RTC_DEBUG_SEL0 + configure rtc debug + 0 + 5 + read-write + + + RTC_DEBUG_SEL1 + configure rtc debug + 5 + 5 + read-write + + + RTC_DEBUG_SEL2 + configure rtc debug + 10 + 5 + read-write + + + RTC_DEBUG_SEL3 + configure rtc debug + 15 + 5 + read-write + + + RTC_DEBUG_SEL4 + configure rtc debug + 20 + 5 + read-write + + + RTC_DEBUG_12M_NO_GATING + configure rtc debug + 25 + 1 + read-write + + + + + TOUCH_PAD0 + configure RTC PAD0 + 0x84 + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD1 + configure RTC PAD1 + 0x88 + 0x20 + 0x48000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD2 + configure RTC PAD2 + 0x8C + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD3 + configure RTC PAD3 + 0x90 + 0x20 + 0x48000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD4 + configure RTC PAD4 + 0x94 + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD5 + configure RTC PAD5 + 0x98 + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD6 + configure RTC PAD6 + 0x9C + 0x20 + 0x48000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD7 + configure RTC PAD7 + 0xA0 + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD8 + configure RTC PAD8 + 0xA4 + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD9 + configure RTC PAD9 + 0xA8 + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD10 + configure RTC PAD10 + 0xAC + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD11 + configure RTC PAD11 + 0xB0 + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD12 + configure RTC PAD12 + 0xB4 + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD13 + configure RTC PAD13 + 0xB8 + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + TOUCH_PAD14 + configure RTC PAD14 + 0xBC + 0x20 + 0x40000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + XPD + TOUCH_XPD + 20 + 1 + read-write + + + TIE_OPT + TOUCH_TIE_OPT + 21 + 1 + read-write + + + START + TOUCH_START + 22 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + XTAL_32P_PAD + configure RTC PAD15 + 0xC0 + 0x20 + 0x40000000 + + + X32P_FUN_IE + input enable in work mode + 13 + 1 + read-write + + + X32P_SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + X32P_SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + X32P_SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + X32P_FUN_SEL + function sel + 17 + 2 + read-write + + + X32P_MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + X32P_RUE + RUE + 27 + 1 + read-write + + + X32P_RDE + RDE + 28 + 1 + read-write + + + X32P_DRV + DRV + 29 + 2 + read-write + + + + + XTAL_32N_PAD + configure RTC PAD16 + 0xC4 + 0x20 + 0x40000000 + + + X32N_FUN_IE + input enable in work mode + 13 + 1 + read-write + + + X32N_SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + X32N_SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + X32N_SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + X32N_FUN_SEL + function sel + 17 + 2 + read-write + + + X32N_MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + X32N_RUE + RUE + 27 + 1 + read-write + + + X32N_RDE + RDE + 28 + 1 + read-write + + + X32N_DRV + DRV + 29 + 2 + read-write + + + + + PAD_DAC1 + configure RTC PAD17 + 0xC8 + 0x20 + 0x40000000 + + + PDAC1_DAC + PDAC1_DAC + 3 + 8 + read-write + + + PDAC1_XPD_DAC + PDAC1_XPD_DAC + 11 + 1 + read-write + + + PDAC1_DAC_XPD_FORCE + 1: use reg_pdac1_xpd_dac to control PDAC1_XPD_DAC,0: use SAR ADC FSM to control PDAC1_XPD_DAC + 12 + 1 + read-write + + + PDAC1_FUN_IE + input enable in work mode + 13 + 1 + read-write + + + PDAC1_SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + PDAC1_SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + PDAC1_SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + PDAC1_FUN_SEL + PDAC1 function sel + 17 + 2 + read-write + + + PDAC1_MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + PDAC1_RUE + PDAC1_RUE + 27 + 1 + read-write + + + PDAC1_RDE + PDAC1_RDE + 28 + 1 + read-write + + + PDAC1_DRV + PDAC1_DRV + 29 + 2 + read-write + + + + + PAD_DAC2 + configure RTC PAD18 + 0xCC + 0x20 + 0x40000000 + + + PDAC2_DAC + PDAC2_DAC + 3 + 8 + read-write + + + PDAC2_XPD_DAC + PDAC2_XPD_DAC + 11 + 1 + read-write + + + PDAC2_DAC_XPD_FORCE + 1: use reg_pdac2_xpd_dac to control PDAC2_XPD_DAC,0: use SAR ADC FSM to control PDAC2_XPD_DAC + 12 + 1 + read-write + + + PDAC2_FUN_IE + input enable in work mode + 13 + 1 + read-write + + + PDAC2_SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + PDAC2_SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + PDAC2_SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + PDAC2_FUN_SEL + PDAC1 function sel + 17 + 2 + read-write + + + PDAC2_MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + PDAC2_RUE + PDAC2_RUE + 27 + 1 + read-write + + + PDAC2_RDE + PDAC2_RDE + 28 + 1 + read-write + + + PDAC2_DRV + PDAC2_DRV + 29 + 2 + read-write + + + + + RTC_PAD19 + configure RTC PAD19 + 0xD0 + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + RTC_PAD20 + configure RTC PAD20 + 0xD4 + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + RTC_PAD21 + configure RTC PAD21 + 0xD8 + 0x20 + 0x50000000 + + + FUN_IE + input enable in work mode + 13 + 1 + read-write + + + SLP_OE + output enable in sleep mode + 14 + 1 + read-write + + + SLP_IE + input enable in sleep mode + 15 + 1 + read-write + + + SLP_SEL + 1: enable sleep mode during sleep,0: no sleep mode + 16 + 1 + read-write + + + FUN_SEL + function sel + 17 + 2 + read-write + + + MUX_SEL + 1: use RTC GPIO,0: use digital GPIO + 19 + 1 + read-write + + + RUE + RUE + 27 + 1 + read-write + + + RDE + RDE + 28 + 1 + read-write + + + DRV + DRV + 29 + 2 + read-write + + + + + EXT_WAKEUP0 + configure EXT0 wakeup + 0xDC + 0x20 + + + SEL + ******* Description configure*** + 27 + 5 + read-write + + + + + XTL_EXT_CTR + configure gpio pd XTAL + 0xE0 + 0x20 + + + SEL + select RTC GPIO 0 ~ 17 to control XTAL + 27 + 5 + read-write + + + + + SAR_I2C_IO + configure rtc i2c mux + 0xE4 + 0x20 + + + SAR_DEBUG_BIT_SEL + ******* Description configure*** + 23 + 5 + read-write + + + SAR_I2C_SCL_SEL + ******* Description configure*** + 28 + 2 + read-write + + + SAR_I2C_SDA_SEL + ******* Description configure*** + 30 + 2 + read-write + + + + + TOUCH_CTRL + configure touch pad bufmode + 0xE8 + 0x20 + + + IO_TOUCH_BUFSEL + BUF_SEL when touch work without fsm + 0 + 4 + read-write + + + IO_TOUCH_BUFMODE + BUF_MODE when touch work without fsm + 4 + 1 + read-write + + + + + DATE + version + 0x1FC + 0x20 + 0x02101180 + + + DATE + version + 0 + 28 + read-write + + + + + + + SENS + SENS Peripheral + SENS + 0x60008800 + + 0x0 + 0x11C + registers + + + + SAR_READER1_CTRL + configure saradc1 reader + 0x0 + 0x20 + 0x20040002 + + + SAR_SAR1_CLK_DIV + clock divider + 0 + 8 + read-write + + + SAR_SAR1_CLK_GATED + no public + 18 + 1 + read-write + + + SAR_SAR1_SAMPLE_NUM + no public + 19 + 8 + read-write + + + SAR_SAR1_DATA_INV + Invert SAR ADC1 data + 28 + 1 + read-write + + + SAR_SAR1_INT_EN + enable saradc1 to send out interrupt + 29 + 1 + read-write + + + + + SAR_READER1_STATUS + get saradc1 reader controller status + 0x4 + 0x20 + + + SAR_SAR1_READER_STATUS + get saradc1 reader controller status + 0 + 32 + read-only + + + + + SAR_MEAS1_CTRL1 + no public + 0x8 + 0x20 + + + FORCE_XPD_AMP + no public + 24 + 2 + read-write + + + AMP_RST_FB_FORCE + no public + 26 + 2 + read-write + + + AMP_SHORT_REF_FORCE + no public + 28 + 2 + read-write + + + AMP_SHORT_REF_GND_FORCE + no public + 30 + 2 + read-write + + + + + SAR_MEAS1_CTRL2 + configure saradc1 controller + 0xC + 0x20 + + + MEAS1_DATA_SAR + SAR ADC1 data + 0 + 16 + read-only + + + MEAS1_DONE_SAR + SAR ADC1 conversion done indication + 16 + 1 + read-only + + + MEAS1_START_SAR + SAR ADC1 controller (in RTC) starts conversion + 17 + 1 + read-write + + + MEAS1_START_FORCE + 1: SAR ADC1 controller (in RTC) is started by SW + 18 + 1 + read-write + + + SAR1_EN_PAD + SAR ADC1 pad enable bitmap + 19 + 12 + read-write + + + SAR1_EN_PAD_FORCE + 1: SAR ADC1 pad enable bitmap is controlled by SW + 31 + 1 + read-write + + + + + SAR_MEAS1_MUX + configure saradc1 controller + 0x10 + 0x20 + + + SAR1_DIG_FORCE + 1: SAR ADC1 controlled by DIG ADC1 CTRL + 31 + 1 + read-write + + + + + SAR_ATTEN1 + configure saradc1 controller + 0x14 + 0x20 + 0xFFFFFFFF + + + SAR1_ATTEN + 2-bit attenuation for each pad + 0 + 32 + read-write + + + + + SAR_AMP_CTRL1 + no public + 0x18 + 0x20 + 0x000A000A + + + SAR_AMP_WAIT1 + no public + 0 + 16 + read-write + + + SAR_AMP_WAIT2 + no public + 16 + 16 + read-write + + + + + SAR_AMP_CTRL2 + no public + 0x1C + 0x20 + 0x000A0000 + + + SAR_SAR1_DAC_XPD_FSM_IDLE + no public + 0 + 1 + read-write + + + SAR_XPD_SAR_AMP_FSM_IDLE + no public + 1 + 1 + read-write + + + SAR_AMP_RST_FB_FSM_IDLE + no public + 2 + 1 + read-write + + + SAR_AMP_SHORT_REF_FSM_IDLE + no public + 3 + 1 + read-write + + + SAR_AMP_SHORT_REF_GND_FSM_IDLE + no public + 4 + 1 + read-write + + + SAR_XPD_SAR_FSM_IDLE + no public + 5 + 1 + read-write + + + SAR_RSTB_FSM_IDLE + no public + 6 + 1 + read-write + + + SAR_AMP_WAIT3 + no public + 16 + 16 + read-write + + + + + SAR_AMP_CTRL3 + no public + 0x20 + 0x20 + 0x007338F3 + + + SAR1_DAC_XPD_FSM + no public + 0 + 4 + read-write + + + XPD_SAR_AMP_FSM + no public + 4 + 4 + read-write + + + AMP_RST_FB_FSM + no public + 8 + 4 + read-write + + + AMP_SHORT_REF_FSM + no public + 12 + 4 + read-write + + + AMP_SHORT_REF_GND_FSM + no public + 16 + 4 + read-write + + + XPD_SAR_FSM + no public + 20 + 4 + read-write + + + RSTB_FSM + no public + 24 + 4 + read-write + + + + + SAR_READER2_CTRL + configure saradc2 reader + 0x24 + 0x20 + 0x40050002 + + + SAR_SAR2_CLK_DIV + clock divider + 0 + 8 + read-write + + + SAR_SAR2_WAIT_ARB_CYCLE + wait arbit stable after sar_done + 16 + 2 + read-write + + + SAR_SAR2_CLK_GATED + ******* Description *********** + 18 + 1 + read-write + + + SAR_SAR2_SAMPLE_NUM + ******* Description *********** + 19 + 8 + read-write + + + SAR_SAR2_DATA_INV + Invert SAR ADC2 data + 29 + 1 + read-write + + + SAR_SAR2_INT_EN + enable saradc2 to send out interrupt + 30 + 1 + read-write + + + + + SAR_READER2_STATUS + get saradc1 reader controller status + 0x28 + 0x20 + + + SAR_SAR2_READER_STATUS + get saradc1 reader controller status + 0 + 32 + read-only + + + + + SAR_MEAS2_CTRL1 + configure saradc2 controller + 0x2C + 0x20 + 0x07020200 + + + SAR_SAR2_CNTL_STATE + saradc2_cntl_fsm + 0 + 3 + read-only + + + SAR_SAR2_PWDET_CAL_EN + rtc control pwdet enable + 3 + 1 + read-write + + + SAR_SAR2_PKDET_CAL_EN + rtc control pkdet enable + 4 + 1 + read-write + + + SAR_SAR2_EN_TEST + SAR2_EN_TEST + 5 + 1 + read-write + + + SAR_SAR2_RSTB_FORCE + no public + 6 + 2 + read-write + + + SAR_SAR2_STANDBY_WAIT + no public + 8 + 8 + read-write + + + SAR_SAR2_RSTB_WAIT + no public + 16 + 8 + read-write + + + SAR_SAR2_XPD_WAIT + no public + 24 + 8 + read-write + + + + + SAR_MEAS2_CTRL2 + configure saradc2 controller + 0x30 + 0x20 + + + MEAS2_DATA_SAR + SAR ADC2 data + 0 + 16 + read-only + + + MEAS2_DONE_SAR + SAR ADC2 conversion done indication + 16 + 1 + read-only + + + MEAS2_START_SAR + SAR ADC2 controller (in RTC) starts conversion + 17 + 1 + read-write + + + MEAS2_START_FORCE + 1: SAR ADC2 controller (in RTC) is started by SW + 18 + 1 + read-write + + + SAR2_EN_PAD + SAR ADC2 pad enable bitmap + 19 + 12 + read-write + + + SAR2_EN_PAD_FORCE + 1: SAR ADC2 pad enable bitmap is controlled by SW + 31 + 1 + read-write + + + + + SAR_MEAS2_MUX + configure saradc2 controller + 0x34 + 0x20 + + + SAR2_PWDET_CCT + SAR2_PWDET_CCT + 28 + 3 + read-write + + + SAR2_RTC_FORCE + in sleep, force to use rtc to control ADC + 31 + 1 + read-write + + + + + SAR_ATTEN2 + configure saradc2 controller + 0x38 + 0x20 + 0xFFFFFFFF + + + SAR2_ATTEN + 2-bit attenuation for each pad + 0 + 32 + read-write + + + + + SAR_POWER_XPD_SAR + configure power of saradc + 0x3C + 0x20 + + + FORCE_XPD_SAR + force power on/off saradc + 29 + 2 + read-write + + + SARCLK_EN + no public + 31 + 1 + read-write + + + + + SAR_SLAVE_ADDR1 + configure i2c slave address + 0x40 + 0x20 + + + SAR_I2C_SLAVE_ADDR1 + configure i2c slave address1 + 0 + 11 + read-write + + + SAR_I2C_SLAVE_ADDR0 + configure i2c slave address0 + 11 + 11 + read-write + + + SAR_SARADC_MEAS_STATUS + no public + 22 + 8 + read-only + + + + + SAR_SLAVE_ADDR2 + configure i2c slave address + 0x44 + 0x20 + + + SAR_I2C_SLAVE_ADDR3 + configure i2c slave address3 + 0 + 11 + read-write + + + SAR_I2C_SLAVE_ADDR2 + configure i2c slave address2 + 11 + 11 + read-write + + + + + SAR_SLAVE_ADDR3 + configure i2c slave address + 0x48 + 0x20 + + + SAR_I2C_SLAVE_ADDR5 + configure i2c slave address5 + 0 + 11 + read-write + + + SAR_I2C_SLAVE_ADDR4 + configure i2c slave address4 + 11 + 11 + read-write + + + + + SAR_SLAVE_ADDR4 + configure i2c slave address + 0x4C + 0x20 + + + SAR_I2C_SLAVE_ADDR7 + configure i2c slave address7 + 0 + 11 + read-write + + + SAR_I2C_SLAVE_ADDR6 + configure i2c slave address6 + 11 + 11 + read-write + + + + + SAR_TSENS_CTRL + configure tsens controller + 0x50 + 0x20 + 0x00019000 + + + SAR_TSENS_OUT + temperature sensor data out + 0 + 8 + read-only + + + SAR_TSENS_READY + indicate temperature sensor out ready + 8 + 1 + read-only + + + SAR_TSENS_INT_EN + enable temperature sensor to send out interrupt + 12 + 1 + read-write + + + SAR_TSENS_IN_INV + invert temperature sensor data + 13 + 1 + read-write + + + SAR_TSENS_CLK_DIV + temperature sensor clock divider + 14 + 8 + read-write + + + SAR_TSENS_POWER_UP + temperature sensor power up + 22 + 1 + read-write + + + SAR_TSENS_POWER_UP_FORCE + 1: dump out & power up controlled by SW 0: by FSM + 23 + 1 + read-write + + + SAR_TSENS_DUMP_OUT + temperature sensor dump out only active when reg_tsens_power_up_force = 1 + 24 + 1 + read-write + + + + + SAR_TSENS_CTRL2 + configure tsens controller + 0x54 + 0x20 + 0x00004002 + + + SAR_TSENS_XPD_WAIT + no public + 0 + 12 + read-write + + + SAR_TSENS_XPD_FORCE + no public + 12 + 2 + read-write + + + SAR_TSENS_CLK_INV + no public + 14 + 1 + read-write + + + + + SAR_I2C_CTRL + configure rtc i2c controller by sw + 0x58 + 0x20 + + + SAR_I2C_CTRL + I2C control data only active when reg_sar_i2c_start_force = 1 + 0 + 28 + read-write + + + SAR_I2C_START + start I2C only active when reg_sar_i2c_start_force = 1 + 28 + 1 + read-write + + + SAR_I2C_START_FORCE + 1: I2C started by SW 0: I2C started by FSM + 29 + 1 + read-write + + + + + SAR_TOUCH_CONF + configure touch controller + 0x5C + 0x20 + 0xFFF07FFF + + + SAR_TOUCH_OUTEN + touch controller output enable + 0 + 15 + read-write + + + SAR_TOUCH_STATUS_CLR + clear all touch active status + 15 + 1 + write-only + + + SAR_TOUCH_DATA_SEL + 3: smooth data 2: baseline 1,0: raw_data + 16 + 2 + read-write + + + SAR_TOUCH_DENOISE_END + touch_denoise_done + 18 + 1 + read-only + + + SAR_TOUCH_UNIT_END + touch_unit_done + 19 + 1 + read-only + + + SAR_TOUCH_APPROACH_PAD2 + indicate which pad is approach pad2 + 20 + 4 + read-write + + + SAR_TOUCH_APPROACH_PAD1 + indicate which pad is approach pad1 + 24 + 4 + read-write + + + SAR_TOUCH_APPROACH_PAD0 + indicate which pad is approach pad0 + 28 + 4 + read-write + + + + + SAR_TOUCH_DENOISE + configure touch controller + 0x60 + 0x20 + + + DATA + configure touch controller + 0 + 22 + read-only + + + + + SAR_TOUCH_THRES1 + configure touch thres of touch pad + 0x64 + 0x20 + + + SAR_TOUCH_OUT_TH1 + Finger threshold for touch pad 1 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES2 + configure touch thres of touch pad + 0x68 + 0x20 + + + SAR_TOUCH_OUT_TH2 + Finger threshold for touch pad 2 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES3 + configure touch thres of touch pad + 0x6C + 0x20 + + + SAR_TOUCH_OUT_TH3 + Finger threshold for touch pad 3 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES4 + configure touch thres of touch pad + 0x70 + 0x20 + + + SAR_TOUCH_OUT_TH4 + Finger threshold for touch pad 4 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES5 + configure touch thres of touch pad + 0x74 + 0x20 + + + SAR_TOUCH_OUT_TH5 + Finger threshold for touch pad 5 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES6 + configure touch thres of touch pad + 0x78 + 0x20 + + + SAR_TOUCH_OUT_TH6 + Finger threshold for touch pad 6 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES7 + configure touch thres of touch pad + 0x7C + 0x20 + + + SAR_TOUCH_OUT_TH7 + Finger threshold for touch pad 7 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES8 + configure touch thres of touch pad + 0x80 + 0x20 + + + SAR_TOUCH_OUT_TH8 + Finger threshold for touch pad 8 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES9 + configure touch thres of touch pad + 0x84 + 0x20 + + + SAR_TOUCH_OUT_TH9 + Finger threshold for touch pad 9 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES10 + configure touch thres of touch pad + 0x88 + 0x20 + + + SAR_TOUCH_OUT_TH10 + Finger threshold for touch pad 10 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES11 + configure touch thres of touch pad + 0x8C + 0x20 + + + SAR_TOUCH_OUT_TH11 + Finger threshold for touch pad 11 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES12 + configure touch thres of touch pad + 0x90 + 0x20 + + + SAR_TOUCH_OUT_TH12 + Finger threshold for touch pad 12 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES13 + configure touch thres of touch pad + 0x94 + 0x20 + + + SAR_TOUCH_OUT_TH13 + Finger threshold for touch pad 13 + 0 + 22 + read-write + + + + + SAR_TOUCH_THRES14 + configure touch thres of touch pad + 0x98 + 0x20 + + + SAR_TOUCH_OUT_TH14 + Finger threshold for touch pad 14 + 0 + 22 + read-write + + + + + SAR_TOUCH_CHN_ST + Get touch channel status + 0x9C + 0x20 + + + SAR_TOUCH_PAD_ACTIVE + touch active status + 0 + 15 + read-only + + + SAR_TOUCH_CHANNEL_CLR + Clear touch channel + 15 + 15 + write-only + + + SAR_TOUCH_MEAS_DONE + get touch meas done + 31 + 1 + read-only + + + + + SAR_TOUCH_STATUS0 + get touch scan status + 0xA0 + 0x20 + + + SAR_TOUCH_SCAN_CURR + current sample channel + 22 + 4 + read-only + + + + + SAR_TOUCH_STATUS1 + touch channel status of touch pad 1 + 0xA4 + 0x20 + + + SAR_TOUCH_PAD1_DATA + touch data debounce of touch pad 1 + 0 + 22 + read-only + + + SAR_TOUCH_PAD1_DEBOUNCE + touch current debounce of touch pad 1 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS2 + touch channel status of touch pad 2 + 0xA8 + 0x20 + + + SAR_TOUCH_PAD2_DATA + touch data debounce of touch pad 2 + 0 + 22 + read-only + + + SAR_TOUCH_PAD2_DEBOUNCE + touch current debounce of touch pad 2 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS3 + touch channel status of touch pad 3 + 0xAC + 0x20 + + + SAR_TOUCH_PAD3_DATA + touch data debounce of touch pad 3 + 0 + 22 + read-only + + + SAR_TOUCH_PAD3_DEBOUNCE + touch current debounce of touch pad 3 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS4 + touch channel status of touch pad 4 + 0xB0 + 0x20 + + + SAR_TOUCH_PAD4_DATA + touch data debounce of touch pad 4 + 0 + 22 + read-only + + + SAR_TOUCH_PAD4_DEBOUNCE + touch current debounce of touch pad 4 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS5 + touch channel status of touch pad 5 + 0xB4 + 0x20 + + + SAR_TOUCH_PAD5_DATA + touch data debounce of touch pad 5 + 0 + 22 + read-only + + + SAR_TOUCH_PAD5_DEBOUNCE + touch current debounce of touch pad 5 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS6 + touch channel status of touch pad 6 + 0xB8 + 0x20 + + + SAR_TOUCH_PAD6_DATA + touch data debounce of touch pad 6 + 0 + 22 + read-only + + + SAR_TOUCH_PAD6_DEBOUNCE + touch current debounce of touch pad 6 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS7 + touch channel status of touch pad 7 + 0xBC + 0x20 + + + SAR_TOUCH_PAD7_DATA + touch data debounce of touch pad 7 + 0 + 22 + read-only + + + SAR_TOUCH_PAD7_DEBOUNCE + touch current debounce of touch pad 7 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS8 + touch channel status of touch pad 8 + 0xC0 + 0x20 + + + SAR_TOUCH_PAD8_DATA + touch data debounce of touch pad 8 + 0 + 22 + read-only + + + SAR_TOUCH_PAD8_DEBOUNCE + touch current debounce of touch pad 8 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS9 + touch channel status of touch pad 9 + 0xC4 + 0x20 + + + SAR_TOUCH_PAD9_DATA + touch data debounce of touch pad 9 + 0 + 22 + read-only + + + SAR_TOUCH_PAD9_DEBOUNCE + touch current debounce of touch pad 9 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS10 + touch channel status of touch pad 10 + 0xC8 + 0x20 + + + SAR_TOUCH_PAD10_DATA + touch data debounce of touch pad 10 + 0 + 22 + read-only + + + SAR_TOUCH_PAD10_DEBOUNCE + touch current debounce of touch pad 10 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS11 + touch channel status of touch pad 11 + 0xCC + 0x20 + + + SAR_TOUCH_PAD11_DATA + touch data debounce of touch pad 11 + 0 + 22 + read-only + + + SAR_TOUCH_PAD11_DEBOUNCE + touch current debounce of touch pad 11 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS12 + touch channel status of touch pad 12 + 0xD0 + 0x20 + + + SAR_TOUCH_PAD12_DATA + touch data debounce of touch pad 12 + 0 + 22 + read-only + + + SAR_TOUCH_PAD12_DEBOUNCE + touch current debounce of touch pad 12 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS13 + touch channel status of touch pad 13 + 0xD4 + 0x20 + + + SAR_TOUCH_PAD13_DATA + touch data debounce of touch pad 13 + 0 + 22 + read-only + + + SAR_TOUCH_PAD13_DEBOUNCE + touch current debounce of touch pad 13 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS14 + touch channel status of touch pad 14 + 0xD8 + 0x20 + + + SAR_TOUCH_PAD14_DATA + touch data debounce of touch pad 14 + 0 + 22 + read-only + + + SAR_TOUCH_PAD14_DEBOUNCE + touch current debounce of touch pad 14 + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS15 + touch channel status of sleep pad + 0xDC + 0x20 + + + SAR_TOUCH_SLP_DATA + touch data debounce of sleep pad + 0 + 22 + read-only + + + SAR_TOUCH_SLP_DEBOUNCE + touch current debounce of sleep pad + 29 + 3 + read-only + + + + + SAR_TOUCH_STATUS16 + touch channel status of approach mode + 0xE0 + 0x20 + + + SAR_TOUCH_APPROACH_PAD2_CNT + touch current approach count of approach pad2 + 0 + 8 + read-only + + + SAR_TOUCH_APPROACH_PAD1_CNT + touch current approach count of approach pad1 + 8 + 8 + read-only + + + SAR_TOUCH_APPROACH_PAD0_CNT + touch current approach count of approach pad0 + 16 + 8 + read-only + + + SAR_TOUCH_SLP_APPROACH_CNT + touch current approach count of slp pad + 24 + 8 + read-only + + + + + SAR_COCPU_STATE + get cocpu status + 0xE4 + 0x20 + + + SAR_COCPU_DBG_TRIGGER + trigger cocpu debug registers + 25 + 1 + write-only + + + SAR_COCPU_CLK_EN_ST + check cocpu whether clk on + 26 + 1 + read-only + + + SAR_COCPU_RESET_N + check cocpu whether in reset state + 27 + 1 + read-only + + + SAR_COCPU_EOI + check cocpu whether in interrupt state + 28 + 1 + read-only + + + SAR_COCPU_TRAP + check cocpu whether in trap state + 29 + 1 + read-only + + + SAR_COCPU_EBREAK + check cocpu whether in ebreak + 30 + 1 + read-only + + + + + SAR_COCPU_INT_RAW + the interrupt raw of ulp + 0xE8 + 0x20 + + + SAR_COCPU_TOUCH_DONE_INT_RAW + int from touch done + 0 + 1 + read-only + + + SAR_COCPU_TOUCH_INACTIVE_INT_RAW + int from touch inactive + 1 + 1 + read-only + + + SAR_COCPU_TOUCH_ACTIVE_INT_RAW + int from touch active + 2 + 1 + read-only + + + SAR_COCPU_SARADC1_INT_RAW + int from saradc1 + 3 + 1 + read-only + + + SAR_COCPU_SARADC2_INT_RAW + int from saradc2 + 4 + 1 + read-only + + + SAR_COCPU_TSENS_INT_RAW + int from tsens + 5 + 1 + read-only + + + SAR_COCPU_START_INT_RAW + int from start + 6 + 1 + read-only + + + SAR_COCPU_SW_INT_RAW + int from software + 7 + 1 + read-only + + + SAR_COCPU_SWD_INT_RAW + int from super watch dog + 8 + 1 + read-only + + + SAR_COCPU_TOUCH_TIMEOUT_INT_RAW + int from timeout done + 9 + 1 + read-only + + + SAR_COCPU_TOUCH_APPROACH_LOOP_DONE_INT_RAW + int from approach loop done + 10 + 1 + read-only + + + SAR_COCPU_TOUCH_SCAN_DONE_INT_RAW + int from touch scan done + 11 + 1 + read-only + + + + + SAR_COCPU_INT_ENA + the interrupt enable of ulp + 0xEC + 0x20 + + + SAR_COCPU_TOUCH_DONE_INT_ENA + int enable of touch done + 0 + 1 + read-write + + + SAR_COCPU_TOUCH_INACTIVE_INT_ENA + int enable of from touch inactive + 1 + 1 + read-write + + + SAR_COCPU_TOUCH_ACTIVE_INT_ENA + int enable of touch active + 2 + 1 + read-write + + + SAR_COCPU_SARADC1_INT_ENA + int enable of from saradc1 + 3 + 1 + read-write + + + SAR_COCPU_SARADC2_INT_ENA + int enable of from saradc2 + 4 + 1 + read-write + + + SAR_COCPU_TSENS_INT_ENA + int enable of tsens + 5 + 1 + read-write + + + SAR_COCPU_START_INT_ENA + int enable of start + 6 + 1 + read-write + + + SAR_COCPU_SW_INT_ENA + int enable of software + 7 + 1 + read-write + + + SAR_COCPU_SWD_INT_ENA + int enable of super watch dog + 8 + 1 + read-write + + + SAR_COCPU_TOUCH_TIMEOUT_INT_ENA + int enable of timeout done + 9 + 1 + read-write + + + SAR_COCPU_TOUCH_APPROACH_LOOP_DONE_INT_ENA + int enable of approach loop done + 10 + 1 + read-write + + + SAR_COCPU_TOUCH_SCAN_DONE_INT_ENA + int enable of touch scan done + 11 + 1 + read-write + + + + + SAR_COCPU_INT_ST + the interrupt state of ulp + 0xF0 + 0x20 + + + SAR_COCPU_TOUCH_DONE_INT_ST + int state of touch done + 0 + 1 + read-only + + + SAR_COCPU_TOUCH_INACTIVE_INT_ST + int state of from touch inactive + 1 + 1 + read-only + + + SAR_COCPU_TOUCH_ACTIVE_INT_ST + int state of touch active + 2 + 1 + read-only + + + SAR_COCPU_SARADC1_INT_ST + int state of from saradc1 + 3 + 1 + read-only + + + SAR_COCPU_SARADC2_INT_ST + int state of from saradc2 + 4 + 1 + read-only + + + SAR_COCPU_TSENS_INT_ST + int state of tsens + 5 + 1 + read-only + + + SAR_COCPU_START_INT_ST + int state of start + 6 + 1 + read-only + + + SAR_COCPU_SW_INT_ST + int state of software + 7 + 1 + read-only + + + SAR_COCPU_SWD_INT_ST + int state of super watch dog + 8 + 1 + read-only + + + SAR_COCPU_TOUCH_TIMEOUT_INT_ST + int state of timeout done + 9 + 1 + read-only + + + SAR_COCPU_TOUCH_APPROACH_LOOP_DONE_INT_ST + int state of approach loop done + 10 + 1 + read-only + + + SAR_COCPU_TOUCH_SCAN_DONE_INT_ST + int state of touch scan done + 11 + 1 + read-only + + + + + SAR_COCPU_INT_CLR + the interrupt clear of ulp + 0xF4 + 0x20 + + + SAR_COCPU_TOUCH_DONE_INT_CLR + int clear of touch done + 0 + 1 + write-only + + + SAR_COCPU_TOUCH_INACTIVE_INT_CLR + int clear of from touch inactive + 1 + 1 + write-only + + + SAR_COCPU_TOUCH_ACTIVE_INT_CLR + int clear of touch active + 2 + 1 + write-only + + + SAR_COCPU_SARADC1_INT_CLR + int clear of from saradc1 + 3 + 1 + write-only + + + SAR_COCPU_SARADC2_INT_CLR + int clear of from saradc2 + 4 + 1 + write-only + + + SAR_COCPU_TSENS_INT_CLR + int clear of tsens + 5 + 1 + write-only + + + SAR_COCPU_START_INT_CLR + int clear of start + 6 + 1 + write-only + + + SAR_COCPU_SW_INT_CLR + int clear of software + 7 + 1 + write-only + + + SAR_COCPU_SWD_INT_CLR + int clear of super watch dog + 8 + 1 + write-only + + + SAR_COCPU_TOUCH_TIMEOUT_INT_CLR + int clear of timeout done + 9 + 1 + write-only + + + SAR_COCPU_TOUCH_APPROACH_LOOP_DONE_INT_CLR + int clear of approach loop done + 10 + 1 + write-only + + + SAR_COCPU_TOUCH_SCAN_DONE_INT_CLR + int clear of touch scan done + 11 + 1 + write-only + + + + + SAR_COCPU_DEBUG + Ulp-riscv debug signal + 0xF8 + 0x20 + + + SAR_COCPU_PC + cocpu Program counter + 0 + 13 + read-only + + + SAR_COCPU_MEM_VLD + cocpu mem valid output + 13 + 1 + read-only + + + SAR_COCPU_MEM_RDY + cocpu mem ready input + 14 + 1 + read-only + + + SAR_COCPU_MEM_WEN + cocpu mem write enable output + 15 + 4 + read-only + + + SAR_COCPU_MEM_ADDR + cocpu mem address output + 19 + 13 + read-only + + + + + SAR_HALL_CTRL + no public + 0xFC + 0x20 + 0xA0000000 + + + XPD_HALL + Power on hall sensor and connect to VP and VN + 28 + 1 + read-write + + + XPD_HALL_FORCE + 1: XPD HALL is controlled by SW. 0: XPD HALL is controlled by FSM in ULP-coprocessor + 29 + 1 + read-write + + + HALL_PHASE + Reverse phase of hall sensor + 30 + 1 + read-write + + + HALL_PHASE_FORCE + 1: HALL PHASE is controlled by SW 0: HALL PHASE is controlled by FSM in ULP-coprocessor + 31 + 1 + read-write + + + + + SAR_NOUSE + no public + 0x100 + 0x20 + + + SAR_NOUSE + no public + 0 + 32 + read-write + + + + + SAR_PERI_CLK_GATE_CONF + the peri clock gate of rtc peri + 0x104 + 0x20 + + + RTC_I2C_CLK_EN + enable rtc i2c clock + 27 + 1 + read-write + + + TSENS_CLK_EN + enable tsens clock + 29 + 1 + read-write + + + SARADC_CLK_EN + enbale saradc clock + 30 + 1 + read-write + + + IOMUX_CLK_EN + enable io_mux clock + 31 + 1 + read-write + + + + + SAR_PERI_RESET_CONF + the peri reset of rtc peri + 0x108 + 0x20 + + + SAR_COCPU_RESET + enable ulp-riscv reset + 25 + 1 + read-write + + + SAR_RTC_I2C_RESET + Reserved. + 27 + 1 + read-write + + + SAR_TSENS_RESET + enbale saradc reset + 29 + 1 + read-write + + + SAR_SARADC_RESET + enable io_mux reset + 30 + 1 + read-write + + + + + SAR_COCPU_INT_ENA_W1TS + the interrupt enable of ulp + 0x10C + 0x20 + + + SAR_COCPU_TOUCH_DONE_INT_ENA_W1TS + int enable of touch done + 0 + 1 + write-only + + + SAR_COCPU_TOUCH_INACTIVE_INT_ENA_W1TS + int enable of from touch inactive + 1 + 1 + write-only + + + SAR_COCPU_TOUCH_ACTIVE_INT_ENA_W1TS + int enable of touch active + 2 + 1 + write-only + + + SAR_COCPU_SARADC1_INT_ENA_W1TS + int enable of from saradc1 + 3 + 1 + write-only + + + SAR_COCPU_SARADC2_INT_ENA_W1TS + int enable of from saradc2 + 4 + 1 + write-only + + + SAR_COCPU_TSENS_INT_ENA_W1TS + int enable of tsens + 5 + 1 + write-only + + + SAR_COCPU_START_INT_ENA_W1TS + int enable of start + 6 + 1 + write-only + + + SAR_COCPU_SW_INT_ENA_W1TS + int enable of software + 7 + 1 + write-only + + + SAR_COCPU_SWD_INT_ENA_W1TS + int enable of super watch dog + 8 + 1 + write-only + + + SAR_COCPU_TOUCH_TIMEOUT_INT_ENA_W1TS + int enable of timeout done + 9 + 1 + write-only + + + SAR_COCPU_TOUCH_APPROACH_LOOP_DONE_INT_ENA_W1TS + int enable of approach loop done + 10 + 1 + write-only + + + SAR_COCPU_TOUCH_SCAN_DONE_INT_ENA_W1TS + int enable of touch scan done + 11 + 1 + write-only + + + + + SAR_COCPU_INT_ENA_W1TC + the interrupt enable clear of ulp + 0x110 + 0x20 + + + SAR_COCPU_TOUCH_DONE_INT_ENA_W1TC + Clear int enable of touch done + 0 + 1 + write-only + + + SAR_COCPU_TOUCH_INACTIVE_INT_ENA_W1TC + Clear int enable of from touch inactive + 1 + 1 + write-only + + + SAR_COCPU_TOUCH_ACTIVE_INT_ENA_W1TC + Clear int enable of touch active + 2 + 1 + write-only + + + SAR_COCPU_SARADC1_INT_ENA_W1TC + Clear int enable of from saradc1 + 3 + 1 + write-only + + + SAR_COCPU_SARADC2_INT_ENA_W1TC + Clear int enable of from saradc2 + 4 + 1 + write-only + + + SAR_COCPU_TSENS_INT_ENA_W1TC + Clear int enable of tsens + 5 + 1 + write-only + + + SAR_COCPU_START_INT_ENA_W1TC + Clear int enable of start + 6 + 1 + write-only + + + SAR_COCPU_SW_INT_ENA_W1TC + Clear int enable of software + 7 + 1 + write-only + + + SAR_COCPU_SWD_INT_ENA_W1TC + Clear int enable of super watch dog + 8 + 1 + write-only + + + SAR_COCPU_TOUCH_TIMEOUT_INT_ENA_W1TC + Clear int enable of timeout done + 9 + 1 + write-only + + + SAR_COCPU_TOUCH_APPROACH_LOOP_DONE_INT_ENA_W1TC + Clear int enable of approach loop done + 10 + 1 + write-only + + + SAR_COCPU_TOUCH_SCAN_DONE_INT_ENA_W1TC + Clear int enable of touch scan done + 11 + 1 + write-only + + + + + SAR_DEBUG_CONF + rtc peri debug configure + 0x114 + 0x20 + + + SAR_DEBUG_BIT_SEL + no public + 0 + 5 + read-write + + + + + SAR_SARDATE + version + 0x1FC + 0x20 + 0x02101180 + + + SAR_DATE + version + 0 + 28 + read-write + + + + + + + SENSITIVE + SENSITIVE Peripheral + SENSITIVE + 0x600C1000 + + 0x0 + 0x314 + registers + + + + CACHE_DATAARRAY_CONNECT_0 + Cache data array configuration register 0. + 0x0 + 0x20 + + + CACHE_DATAARRAY_CONNECT_LOCK + Set 1 to lock cache data array registers. + 0 + 1 + read-write + + + + + CACHE_DATAARRAY_CONNECT_1 + Cache data array configuration register 1. + 0x4 + 0x20 + 0x000000FF + + + CACHE_DATAARRAY_CONNECT_FLATTEN + Cache data array connection configuration. + 0 + 8 + read-write + + + + + APB_PERIPHERAL_ACCESS_0 + APB peripheral configuration register 0. + 0x8 + 0x20 + + + APB_PERIPHERAL_ACCESS_LOCK + Set 1 to lock APB peripheral Configuration Register. + 0 + 1 + read-write + + + + + APB_PERIPHERAL_ACCESS_1 + APB peripheral configuration register 1. + 0xC + 0x20 + 0x00000001 + + + APB_PERIPHERAL_ACCESS_SPLIT_BURST + Set 1 to support split function for AHB access to APB peripherals. + 0 + 1 + read-write + + + + + INTERNAL_SRAM_USAGE_0 + Internal SRAM configuration register 0. + 0x10 + 0x20 + + + INTERNAL_SRAM_USAGE_LOCK + Set 1 to lock internal SRAM Configuration Register. + 0 + 1 + read-write + + + + + INTERNAL_SRAM_USAGE_1 + Internal SRAM configuration register 1. + 0x14 + 0x20 + 0x000007FF + + + INTERNAL_SRAM_ICACHE_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by icache. + 0 + 2 + read-write + + + INTERNAL_SRAM_DCACHE_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by dcache. + 2 + 2 + read-write + + + INTERNAL_SRAM_CPU_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by cpu. + 4 + 7 + read-write + + + + + INTERNAL_SRAM_USAGE_2 + Internal SRAM configuration register 2. + 0x18 + 0x20 + + + INTERNAL_SRAM_CORE0_TRACE_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by core0 trace bus. + 0 + 7 + read-write + + + INTERNAL_SRAM_CORE1_TRACE_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by core1 trace bus. + 7 + 7 + read-write + + + INTERNAL_SRAM_CORE0_TRACE_ALLOC + Which internal SRAM bank (16KB) of 64KB can be accessed by core0 trace bus. + 14 + 2 + read-write + + + INTERNAL_SRAM_CORE1_TRACE_ALLOC + Which internal SRAM bank (16KB) of 64KB can be accessed by core1 trace bus. + 16 + 2 + read-write + + + + + INTERNAL_SRAM_USAGE_3 + Internal SRAM configuration register 3. + 0x1C + 0x20 + + + INTERNAL_SRAM_MAC_DUMP_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by mac dump. + 0 + 4 + read-write + + + + + INTERNAL_SRAM_USAGE_4 + Internal SRAM configuration register 4. + 0x20 + 0x20 + + + INTERNAL_SRAM_LOG_USAGE + Set 1 to someone bit means corresponding internal SRAM level can be accessed by log bus. + 0 + 7 + read-write + + + + + RETENTION_DISABLE + Retention configuration register. + 0x24 + 0x20 + + + RETENTION_DISABLE + Set 1 to disable retention function and lock disable state. + 0 + 1 + read-write + + + + + CACHE_TAG_ACCESS_0 + Cache tag configuration register 0. + 0x28 + 0x20 + + + CACHE_TAG_ACCESS_LOCK + Set 1 to lock cache tag Configuration Register. + 0 + 1 + read-write + + + + + CACHE_TAG_ACCESS_1 + Cache tag configuration register 1. + 0x2C + 0x20 + 0x0000000F + + + PRO_I_TAG_RD_ACS + Set 1 to enable Icache read access tag memory. + 0 + 1 + read-write + + + PRO_I_TAG_WR_ACS + Set 1 to enable Icache wrtie access tag memory. + 1 + 1 + read-write + + + PRO_D_TAG_RD_ACS + Set 1 to enable Dcache read access tag memory. + 2 + 1 + read-write + + + PRO_D_TAG_WR_ACS + Set 1 to enable Dcache wrtie access tag memory. + 3 + 1 + read-write + + + + + CACHE_MMU_ACCESS_0 + Cache MMU configuration register 0. + 0x30 + 0x20 + + + CACHE_MMU_ACCESS_LOCK + Set 1 to lock cache MMU registers. + 0 + 1 + read-write + + + + + CACHE_MMU_ACCESS_1 + Cache MMU configuration register 1. + 0x34 + 0x20 + 0x00000003 + + + PRO_MMU_RD_ACS + Set 1 to enable read access MMU memory. + 0 + 1 + read-write + + + PRO_MMU_WR_ACS + Set 1 to enable write access MMU memory. + 1 + 1 + read-write + + + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_0 + spi2 dma permission configuration register 0. + 0x38 + 0x20 + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_LOCK + Set 1 to lock spi2 dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_1 + spi2 dma permission configuration register 1. + 0x3C + 0x20 + 0x00000FFF + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_PMS_0 + spi2's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_PMS_1 + spi2's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_PMS_2 + spi2's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_PMS_3 + spi2's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + spi2's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_SPI2_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + spi2's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_0 + spi3 dma permission configuration register 0. + 0x40 + 0x20 + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_LOCK + Set 1 to lock spi3 dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_1 + spi3 dma permission configuration register 1. + 0x44 + 0x20 + 0x00000FFF + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_SRAM_PMS_0 + spi3's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_SRAM_PMS_1 + spi3's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_SRAM_PMS_2 + spi3's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_SRAM_PMS_3 + spi3's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + spi3's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_SPI3_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + spi3's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_0 + uhci0 dma permission configuration register 0. + 0x48 + 0x20 + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_LOCK + Set 1 to lock uhci0 dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_1 + uhci0 dma permission configuration register 1. + 0x4C + 0x20 + 0x00000FFF + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_SRAM_PMS_0 + uhci0's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_SRAM_PMS_1 + uhci0's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_SRAM_PMS_2 + uhci0's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_SRAM_PMS_3 + uhci0's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + uhci0's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_UHCI0_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + uhci0's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_0 + i2s0 dma permission configuration register 0. + 0x50 + 0x20 + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_LOCK + Set 1 to lock i2s0 dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_1 + i2s0 dma permission configuration register 1. + 0x54 + 0x20 + 0x00000FFF + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_PMS_0 + i2s0's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_PMS_1 + i2s0's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_PMS_2 + i2s0's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_PMS_3 + i2s0's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + i2s0's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_I2S0_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + i2s0's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_0 + i2s1 dma permission configuration register 0. + 0x58 + 0x20 + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_LOCK + Set 1 to lock i2s1 dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_1 + i2s1 dma permission configuration register 1. + 0x5C + 0x20 + 0x00000FFF + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_SRAM_PMS_0 + i2s1's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_SRAM_PMS_1 + i2s1's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_SRAM_PMS_2 + i2s1's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_SRAM_PMS_3 + i2s1's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + i2s1's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_I2S1_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + i2s1's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_0 + mac dma permission configuration register 0. + 0x60 + 0x20 + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_LOCK + Set 1 to lock mac dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_1 + mac dma permission configuration register 1. + 0x64 + 0x20 + 0x00000FFF + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_PMS_0 + mac's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_PMS_1 + mac's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_PMS_2 + mac's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_PMS_3 + mac's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + mac's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_MAC_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + mac's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_0 + backup dma permission configuration register 0. + 0x68 + 0x20 + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_LOCK + Set 1 to lock backup dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_1 + backup dma permission configuration register 1. + 0x6C + 0x20 + 0x00000FFF + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_PMS_0 + backup's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_PMS_1 + backup's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_PMS_2 + backup's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_PMS_3 + backup's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + backup's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_BACKUP_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + backup's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_AES_PMS_CONSTRAIN_0 + aes dma permission configuration register 0. + 0x70 + 0x20 + + + DMA_APBPERI_AES_PMS_CONSTRAIN_LOCK + Set 1 to lock aes dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_AES_PMS_CONSTRAIN_1 + aes dma permission configuration register 1. + 0x74 + 0x20 + 0x00000FFF + + + DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_PMS_0 + aes's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_PMS_1 + aes's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_PMS_2 + aes's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_PMS_3 + aes's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + aes's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_AES_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + aes's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_0 + sha dma permission configuration register 0. + 0x78 + 0x20 + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_LOCK + Set 1 to lock sha dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_1 + sha dma permission configuration register 1. + 0x7C + 0x20 + 0x00000FFF + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_PMS_0 + sha's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_PMS_1 + sha's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_PMS_2 + sha's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_PMS_3 + sha's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + sha's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_SHA_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + sha's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_0 + adc_dac dma permission configuration register 0. + 0x80 + 0x20 + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_LOCK + Set 1 to lock adc_dac dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_1 + adc_dac dma permission configuration register 1. + 0x84 + 0x20 + 0x00000FFF + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_PMS_0 + adc_dac's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_PMS_1 + adc_dac's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_PMS_2 + adc_dac's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_PMS_3 + adc_dac's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + adc_dac's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_ADC_DAC_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + adc_dac's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_0 + rmt dma permission configuration register 0. + 0x88 + 0x20 + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_LOCK + Set 1 to lock rmt dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_1 + rmt dma permission configuration register 1. + 0x8C + 0x20 + 0x00000FFF + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_SRAM_PMS_0 + rmt's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_SRAM_PMS_1 + rmt's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_SRAM_PMS_2 + rmt's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_SRAM_PMS_3 + rmt's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + rmt's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_RMT_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + rmt's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_0 + lcd_cam dma permission configuration register 0. + 0x90 + 0x20 + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_LOCK + Set 1 to lock lcd_cam dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_1 + lcd_cam dma permission configuration register 1. + 0x94 + 0x20 + 0x00000FFF + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_SRAM_PMS_0 + lcd_cam's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_SRAM_PMS_1 + lcd_cam's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_SRAM_PMS_2 + lcd_cam's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_SRAM_PMS_3 + lcd_cam's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + lcd_cam's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_LCD_CAM_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + lcd_cam's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_USB_PMS_CONSTRAIN_0 + usb dma permission configuration register 0. + 0x98 + 0x20 + + + DMA_APBPERI_USB_PMS_CONSTRAIN_LOCK + Set 1 to lock usb dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_USB_PMS_CONSTRAIN_1 + usb dma permission configuration register 1. + 0x9C + 0x20 + 0x00000FFF + + + DMA_APBPERI_USB_PMS_CONSTRAIN_SRAM_PMS_0 + usb's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_USB_PMS_CONSTRAIN_SRAM_PMS_1 + usb's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_USB_PMS_CONSTRAIN_SRAM_PMS_2 + usb's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_USB_PMS_CONSTRAIN_SRAM_PMS_3 + usb's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_USB_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + usb's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_USB_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + usb's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_LC_PMS_CONSTRAIN_0 + lc dma permission configuration register 0. + 0xA0 + 0x20 + + + DMA_APBPERI_LC_PMS_CONSTRAIN_LOCK + Set 1 to lock lc dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_LC_PMS_CONSTRAIN_1 + lc dma permission configuration register 1. + 0xA4 + 0x20 + 0x00000FFF + + + DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_PMS_0 + lc's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_PMS_1 + lc's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_PMS_2 + lc's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_PMS_3 + lc's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + lc's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_LC_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + lc's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_0 + sdio dma permission configuration register 0. + 0xA8 + 0x20 + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_LOCK + Set 1 to lock sdio dma permission Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_1 + sdio dma permission configuration register 1. + 0xAC + 0x20 + 0x00000FFF + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_SRAM_PMS_0 + sdio's permission(store,load) in data region0 of SRAM + 0 + 2 + read-write + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_SRAM_PMS_1 + sdio's permission(store,load) in data region1 of SRAM + 2 + 2 + read-write + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_SRAM_PMS_2 + sdio's permission(store,load) in data region2 of SRAM + 4 + 2 + read-write + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_SRAM_PMS_3 + sdio's permission(store,load) in data region3 of SRAM + 6 + 2 + read-write + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_0 + sdio's permission(store,load) in dcache data sram block0 + 8 + 2 + read-write + + + DMA_APBPERI_SDIO_PMS_CONSTRAIN_SRAM_CACHEDATAARRAY_PMS_1 + sdio's permission(store,load) in dcache data sram block1 + 10 + 2 + read-write + + + + + DMA_APBPERI_PMS_MONITOR_0 + dma permission monitor configuration register 0. + 0xB0 + 0x20 + + + DMA_APBPERI_PMS_MONITOR_LOCK + Set 1 to lock dma permission monitor Configuration Register. + 0 + 1 + read-write + + + + + DMA_APBPERI_PMS_MONITOR_1 + dma permission monitor configuration register 1. + 0xB4 + 0x20 + 0x00000003 + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear dma_pms_monitor_violate interrupt + 0 + 1 + read-write + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_EN + Set 1 to enable dma pms monitor, if dma access violated permission, will trigger interrupt. + 1 + 1 + read-write + + + + + DMA_APBPERI_PMS_MONITOR_2 + dma permission monitor configuration register 2. + 0xB8 + 0x20 + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_INTR + recorded dma's interrupt status when dma access violated permission + 0 + 1 + read-only + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WORLD + recorded dma's world status when dma access violated permission + 1 + 2 + read-only + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_ADDR + recorded dma's address bit[25:4] status when dma access violated permission, real address is 0x3c00_0000+addr*16 + 3 + 22 + read-only + + + + + DMA_APBPERI_PMS_MONITOR_3 + dma permission monitor configuration register 3. + 0xBC + 0x20 + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_WR + recorded dma's write status when dma access violated permission, 1(write), 0(read) + 0 + 1 + read-only + + + DMA_APBPERI_PMS_MONITOR_VIOLATE_STATUS_BYTEEN + recorded dma's byte enable status when dma access violated permission + 1 + 16 + read-only + + + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_0 + sram split line configuration register 0 + 0xC0 + 0x20 + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_LOCK + Set 1 to lock sram split configuration register + 0 + 1 + read-write + + + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_1 + sram split line configuration register 1 + 0xC4 + 0x20 + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_0 + category0 of core_x_iram0_dram_dma_line, if the splitaddress in block0 of SRAM, configured as 0x10, else if the splitaddress below block0 of SRAM, configured as 0x11, else if splitaddress higher than block0 of SRAM, configured as 0x00 + 0 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_1 + category1 of core_x_iram0_dram_dma_line, if the splitaddress in block1 of SRAM, configured as 0x10, else if the splitaddress below block1 of SRAM, configured as 0x11, else if splitaddress higher than block1 of SRAM, configured as 0x00 + 2 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_2 + category2 of core_x_iram0_dram_dma_line, if the splitaddress in block2 of SRAM, configured as 0x10, else if the splitaddress below block2 of SRAM, configured as 0x11, else if splitaddress higher than block2 of SRAM, configured as 0x00 + 4 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_3 + category3 of core_x_iram0_dram_dma_line, if the splitaddress in block3 of SRAM, configured as 0x10, else if the splitaddress below block3 of SRAM, configured as 0x11, else if splitaddress higher than block3 of SRAM, configured as 0x00 + 6 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_4 + category4 of core_x_iram0_dram_dma_line, if the splitaddress in block4 of SRAM, configured as 0x10, else if the splitaddress below block4 of SRAM, configured as 0x11, else if splitaddress higher than block4 of SRAM, configured as 0x00 + 8 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_5 + category5 of core_x_iram0_dram_dma_line, if the splitaddress in block5 of SRAM, configured as 0x10, else if the splitaddress below block5 of SRAM, configured as 0x11, else if splitaddress higher than block5 of SRAM, configured as 0x00 + 10 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_6 + category6 of core_x_iram0_dram_dma_line, if the splitaddress in block6 of SRAM, configured as 0x10, else if the splitaddress below block6 of SRAM, configured as 0x11, else if splitaddress higher than block6 of SRAM, configured as 0x00 + 12 + 2 + read-write + + + CORE_X_IRAM0_DRAM0_DMA_SRAM_SPLITADDR + splitaddr of core_x_iram0_dram_dma_line, configured as [15:8]bit of actual address + 14 + 8 + read-write + + + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_2 + sram split line configuration register 1 + 0xC8 + 0x20 + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_0 + category0 of core_x_iram0_dram_dma_line, if the splitaddress in block0 of SRAM, configured as 0x10, else if the splitaddress below block0 of SRAM, configured as 0x11, else if splitaddress higher than block0 of SRAM, configured as 0x00 + 0 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_1 + category1 of core_x_iram0_dram_dma_line, if the splitaddress in block1 of SRAM, configured as 0x10, else if the splitaddress below block1 of SRAM, configured as 0x11, else if splitaddress higher than block1 of SRAM, configured as 0x00 + 2 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_2 + category2 of core_x_iram0_dram_dma_line, if the splitaddress in block2 of SRAM, configured as 0x10, else if the splitaddress below block2 of SRAM, configured as 0x11, else if splitaddress higher than block2 of SRAM, configured as 0x00 + 4 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_3 + category3 of core_x_iram0_dram_dma_line, if the splitaddress in block3 of SRAM, configured as 0x10, else if the splitaddress below block3 of SRAM, configured as 0x11, else if splitaddress higher than block3 of SRAM, configured as 0x00 + 6 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_4 + category4 of core_x_iram0_dram_dma_line, if the splitaddress in block4 of SRAM, configured as 0x10, else if the splitaddress below block4 of SRAM, configured as 0x11, else if splitaddress higher than block4 of SRAM, configured as 0x00 + 8 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_5 + category5 of core_x_iram0_dram_dma_line, if the splitaddress in block5 of SRAM, configured as 0x10, else if the splitaddress below block5 of SRAM, configured as 0x11, else if splitaddress higher than block5 of SRAM, configured as 0x00 + 10 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_CATEGORY_6 + category6 of core_x_iram0_dram_dma_line, if the splitaddress in block6 of SRAM, configured as 0x10, else if the splitaddress below block6 of SRAM, configured as 0x11, else if splitaddress higher than block6 of SRAM, configured as 0x00 + 12 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_0_SPLITADDR + splitaddr of core_x_iram0_dram_dma_line, configured as [15:8]bit of actual address + 14 + 8 + read-write + + + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_3 + sram split line configuration register 1 + 0xCC + 0x20 + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_0 + category0 of core_x_iram0_dram_dma_line, if the splitaddress in block0 of SRAM, configured as 0x10, else if the splitaddress below block0 of SRAM, configured as 0x11, else if splitaddress higher than block0 of SRAM, configured as 0x00 + 0 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_1 + category1 of core_x_iram0_dram_dma_line, if the splitaddress in block1 of SRAM, configured as 0x10, else if the splitaddress below block1 of SRAM, configured as 0x11, else if splitaddress higher than block1 of SRAM, configured as 0x00 + 2 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_2 + category2 of core_x_iram0_dram_dma_line, if the splitaddress in block2 of SRAM, configured as 0x10, else if the splitaddress below block2 of SRAM, configured as 0x11, else if splitaddress higher than block2 of SRAM, configured as 0x00 + 4 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_3 + category3 of core_x_iram0_dram_dma_line, if the splitaddress in block3 of SRAM, configured as 0x10, else if the splitaddress below block3 of SRAM, configured as 0x11, else if splitaddress higher than block3 of SRAM, configured as 0x00 + 6 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_4 + category4 of core_x_iram0_dram_dma_line, if the splitaddress in block4 of SRAM, configured as 0x10, else if the splitaddress below block4 of SRAM, configured as 0x11, else if splitaddress higher than block4 of SRAM, configured as 0x00 + 8 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_5 + category5 of core_x_iram0_dram_dma_line, if the splitaddress in block5 of SRAM, configured as 0x10, else if the splitaddress below block5 of SRAM, configured as 0x11, else if splitaddress higher than block5 of SRAM, configured as 0x00 + 10 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_CATEGORY_6 + category6 of core_x_iram0_dram_dma_line, if the splitaddress in block6 of SRAM, configured as 0x10, else if the splitaddress below block6 of SRAM, configured as 0x11, else if splitaddress higher than block6 of SRAM, configured as 0x00 + 12 + 2 + read-write + + + CORE_X_IRAM0_SRAM_LINE_1_SPLITADDR + splitaddr of core_x_iram0_dram_dma_line, configured as [15:8]bit of actual address + 14 + 8 + read-write + + + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_4 + sram split line configuration register 1 + 0xD0 + 0x20 + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_0 + category0 of core_x_iram0_dram_dma_line, if the splitaddress in block0 of SRAM, configured as 0x10, else if the splitaddress below block0 of SRAM, configured as 0x11, else if splitaddress higher than block0 of SRAM, configured as 0x00 + 0 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_1 + category1 of core_x_iram0_dram_dma_line, if the splitaddress in block1 of SRAM, configured as 0x10, else if the splitaddress below block1 of SRAM, configured as 0x11, else if splitaddress higher than block1 of SRAM, configured as 0x00 + 2 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_2 + category2 of core_x_iram0_dram_dma_line, if the splitaddress in block2 of SRAM, configured as 0x10, else if the splitaddress below block2 of SRAM, configured as 0x11, else if splitaddress higher than block2 of SRAM, configured as 0x00 + 4 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_3 + category3 of core_x_iram0_dram_dma_line, if the splitaddress in block3 of SRAM, configured as 0x10, else if the splitaddress below block3 of SRAM, configured as 0x11, else if splitaddress higher than block3 of SRAM, configured as 0x00 + 6 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_4 + category4 of core_x_iram0_dram_dma_line, if the splitaddress in block4 of SRAM, configured as 0x10, else if the splitaddress below block4 of SRAM, configured as 0x11, else if splitaddress higher than block4 of SRAM, configured as 0x00 + 8 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_5 + category5 of core_x_iram0_dram_dma_line, if the splitaddress in block5 of SRAM, configured as 0x10, else if the splitaddress below block5 of SRAM, configured as 0x11, else if splitaddress higher than block5 of SRAM, configured as 0x00 + 10 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_CATEGORY_6 + category6 of core_x_iram0_dram_dma_line, if the splitaddress in block6 of SRAM, configured as 0x10, else if the splitaddress below block6 of SRAM, configured as 0x11, else if splitaddress higher than block6 of SRAM, configured as 0x00 + 12 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_0_SPLITADDR + splitaddr of core_x_iram0_dram_dma_line, configured as [15:8]bit of actual address + 14 + 8 + read-write + + + + + CORE_X_IRAM0_DRAM0_DMA_SPLIT_LINE_CONSTRAIN_5 + sram split line configuration register 1 + 0xD4 + 0x20 + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_0 + category0 of core_x_iram0_dram_dma_line, if the splitaddress in block0 of SRAM, configured as 0x10, else if the splitaddress below block0 of SRAM, configured as 0x11, else if splitaddress higher than block0 of SRAM, configured as 0x00 + 0 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_1 + category1 of core_x_iram0_dram_dma_line, if the splitaddress in block1 of SRAM, configured as 0x10, else if the splitaddress below block1 of SRAM, configured as 0x11, else if splitaddress higher than block1 of SRAM, configured as 0x00 + 2 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_2 + category2 of core_x_iram0_dram_dma_line, if the splitaddress in block2 of SRAM, configured as 0x10, else if the splitaddress below block2 of SRAM, configured as 0x11, else if splitaddress higher than block2 of SRAM, configured as 0x00 + 4 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_3 + category3 of core_x_iram0_dram_dma_line, if the splitaddress in block3 of SRAM, configured as 0x10, else if the splitaddress below block3 of SRAM, configured as 0x11, else if splitaddress higher than block3 of SRAM, configured as 0x00 + 6 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_4 + category4 of core_x_iram0_dram_dma_line, if the splitaddress in block4 of SRAM, configured as 0x10, else if the splitaddress below block4 of SRAM, configured as 0x11, else if splitaddress higher than block4 of SRAM, configured as 0x00 + 8 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_5 + category5 of core_x_iram0_dram_dma_line, if the splitaddress in block5 of SRAM, configured as 0x10, else if the splitaddress below block5 of SRAM, configured as 0x11, else if splitaddress higher than block5 of SRAM, configured as 0x00 + 10 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_CATEGORY_6 + category6 of core_x_iram0_dram_dma_line, if the splitaddress in block6 of SRAM, configured as 0x10, else if the splitaddress below block6 of SRAM, configured as 0x11, else if splitaddress higher than block6 of SRAM, configured as 0x00 + 12 + 2 + read-write + + + CORE_X_DRAM0_DMA_SRAM_LINE_1_SPLITADDR + splitaddr of core_x_iram0_dram_dma_line, configured as [15:8]bit of actual address + 14 + 8 + read-write + + + + + CORE_X_IRAM0_PMS_CONSTRAIN_0 + corex iram0 permission configuration register 0 + 0xD8 + 0x20 + + + CORE_X_IRAM0_PMS_CONSTRAIN_LOCK + Set 1 to lock corex iram0 permission configuration register + 0 + 1 + read-write + + + + + CORE_X_IRAM0_PMS_CONSTRAIN_1 + corex iram0 permission configuration register 0 + 0xDC + 0x20 + 0x001FFFFF + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0 + core0/core1's permission of instruction region0 of SRAM in world1 + 0 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1 + core0/core1's permission of instruction region1 of SRAM in world1 + 3 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2 + core0/core1's permission of instruction region2 of SRAM in world1 + 6 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3 + core0/core1's permission of instruction region3 of SRAM in world1 + 9 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0 + core0/core1's permission of icache data sram block0 in world1 + 12 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_1 + core0/core1's permission of icache data sram block1 in world1 + 15 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS + core0/core1's permission of rom in world1 + 18 + 3 + read-write + + + + + CORE_X_IRAM0_PMS_CONSTRAIN_2 + corex iram0 permission configuration register 1 + 0xE0 + 0x20 + 0x001FFFFF + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0 + core0/core1's permission of instruction region0 of SRAM in world1 + 0 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1 + core0/core1's permission of instruction region1 of SRAM in world1 + 3 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2 + core0/core1's permission of instruction region2 of SRAM in world1 + 6 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3 + core0/core1's permission of instruction region3 of SRAM in world1 + 9 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0 + core0/core1's permission of icache data sram block0 in world1 + 12 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_1 + core0/core1's permission of icache data sram block1 in world1 + 15 + 3 + read-write + + + CORE_X_IRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS + core0/core1's permission of rom in world1 + 18 + 3 + read-write + + + + + CORE_0_IRAM0_PMS_MONITOR_0 + core0 iram0 permission monitor configuration register 0 + 0xE4 + 0x20 + + + CORE_0_IRAM0_PMS_MONITOR_LOCK + Set 1 to lock core0 iram0 permission monitor register + 0 + 1 + read-write + + + + + CORE_0_IRAM0_PMS_MONITOR_1 + core0 iram0 permission monitor configuration register 1 + 0xE8 + 0x20 + 0x00000003 + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear core0 iram0 permission violated interrupt + 0 + 1 + read-write + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_EN + Set 1 to enable core0 iram0 permission monitor, when core0_iram violated permission, will trigger interrupt + 1 + 1 + read-write + + + + + CORE_0_IRAM0_PMS_MONITOR_2 + core0 iram0 permission monitor configuration register 2 + 0xEC + 0x20 + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_INTR + recorded core0 iram0 pms monitor interrupt status. + 0 + 1 + read-only + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR + recorded core0 iram0 wr status, only if loadstore is 1 have meaning, 1(store), 0(load). + 1 + 1 + read-only + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE + recorded core0 iram0 loadstore status, indicated the type of operation, 0(fetch), 1(load/store). + 2 + 1 + read-only + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD + recorded core0 iram0 world status, 0x01 means world0, 0x10 means world1. + 3 + 2 + read-only + + + CORE_0_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR + recorded core0 iram0 address [25:2] status when core0 iram0 violated permission, the real address is 0x40000000+addr*4 + 5 + 24 + read-only + + + + + CORE_1_IRAM0_PMS_MONITOR_0 + core1 iram0 permission monitor configuration register 0 + 0xF0 + 0x20 + + + CORE_1_IRAM0_PMS_MONITOR_LOCK + Set 1 to lock core1 iram0 permission monitor register + 0 + 1 + read-write + + + + + CORE_1_IRAM0_PMS_MONITOR_1 + core1 iram0 permission monitor configuration register 1 + 0xF4 + 0x20 + 0x00000003 + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear core1 iram0 permission violated interrupt + 0 + 1 + read-write + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_EN + Set 1 to enable core1 iram0 permission monitor, when core1_iram violated permission, will trigger interrupt + 1 + 1 + read-write + + + + + CORE_1_IRAM0_PMS_MONITOR_2 + core1 iram0 permission monitor configuration register 2 + 0xF8 + 0x20 + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_INTR + recorded core1 iram0 pms monitor interrupt status. + 0 + 1 + read-only + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WR + recorded core1 iram0 wr status, only if loadstore is 1 have meaning, 1(store), 0(load). + 1 + 1 + read-only + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_STATUS_LOADSTORE + recorded core1 iram0 loadstore status, indicated the type of operation, 0(fetch), 1(load/store). + 2 + 1 + read-only + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD + recorded core1 iram0 world status, 0x01 means world0, 0x10 means world1. + 3 + 2 + read-only + + + CORE_1_IRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR + recorded core1 iram0 address [25:2] status when core1 iram0 violated permission, the real address is 0x40000000+addr*4 + 5 + 24 + read-only + + + + + CORE_X_DRAM0_PMS_CONSTRAIN_0 + corex dram0 permission configuration register 0 + 0xFC + 0x20 + + + CORE_X_DRAM0_PMS_CONSTRAIN_LOCK + Set 1 to lock corex dram0 permission configuration register + 0 + 1 + read-write + + + + + CORE_X_DRAM0_PMS_CONSTRAIN_1 + corex dram0 permission configuration register 1 + 0x100 + 0x20 + 0x0FFFFFFF + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_0 + core0/core1's permission of data region0 of SRAM in world0. + 0 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_1 + core0/core1's permission of data region1 of SRAM in world0. + 2 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_2 + core0/core1's permission of data region2 of SRAM in world0. + 4 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_PMS_3 + core0/core1's permission of data region3 of SRAM in world0. + 6 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_0 + core0/core1's permission of dcache data sram block0 in world0. + 8 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_0_CACHEDATAARRAY_PMS_1 + core0/core1's permission of dcache data sram block1 in world0. + 10 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_0 + core0/core1's permission of data region0 of SRAM in world1. + 12 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_1 + core0/core1's permission of data region1 of SRAM in world1. + 14 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_2 + core0/core1's permission of data region2 of SRAM in world1. + 16 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_PMS_3 + core0/core1's permission of data region3 of SRAM in world1. + 18 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_0 + core0/core1's permission of dcache data sram block0 in world1. + 20 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_SRAM_WORLD_1_CACHEDATAARRAY_PMS_1 + core0/core1's permission of dcache data sram block1 in world1. + 22 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_0_PMS + core0/core1's permission(sotre,load) of rom in world0. + 24 + 2 + read-write + + + CORE_X_DRAM0_PMS_CONSTRAIN_ROM_WORLD_1_PMS + core0/core1's permission(sotre,load) of rom in world1. + 26 + 2 + read-write + + + + + CORE_0_DRAM0_PMS_MONITOR_0 + core0 dram0 permission monitor configuration register 0 + 0x104 + 0x20 + + + CORE_0_DRAM0_PMS_MONITOR_LOCK + Set 1 to lock core0 dram0 permission monitor configuration register. + 0 + 1 + read-write + + + + + CORE_0_DRAM0_PMS_MONITOR_1 + core0 dram0 permission monitor configuration register 1 + 0x108 + 0x20 + 0x00000003 + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear core0 dram0 permission monior interrupt. + 0 + 1 + read-write + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_EN + Set 1 to enable core0 dram0 permission monitor interrupt. + 1 + 1 + read-write + + + + + CORE_0_DRAM0_PMS_MONITOR_2 + core0 dram0 permission monitor configuration register 2. + 0x10C + 0x20 + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_INTR + recorded core0 dram0 permission monitor interrupt status. + 0 + 1 + read-only + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK + recorded core0 dram0 lock status, 1 means s32c1i access. + 1 + 1 + read-only + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD + recorded core0 dram0 world status, 0x1 means world0, 0x2 means world1. + 2 + 2 + read-only + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR + recorded core0 dram0 address[25:4] status when core0 dram0 violated permission,the real address is 0x3c000000+addr*16 + 4 + 22 + read-only + + + + + CORE_0_DRAM0_PMS_MONITOR_3 + core0 dram0 permission monitor configuration register 3. + 0x110 + 0x20 + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR + recorded core0 dram0 wr status, 1 means store, 0 means load. + 0 + 1 + read-only + + + CORE_0_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN + recorded core0 dram0 byteen status. + 1 + 16 + read-only + + + + + CORE_1_DRAM0_PMS_MONITOR_0 + core1 dram0 permission monitor configuration register 0 + 0x114 + 0x20 + + + CORE_1_DRAM0_PMS_MONITOR_LOCK + Set 1 to lock core1 dram0 permission monitor configuration register. + 0 + 1 + read-write + + + + + CORE_1_DRAM0_PMS_MONITOR_1 + core1 dram0 permission monitor configuration register 1 + 0x118 + 0x20 + 0x00000003 + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear core1 dram0 permission monior interrupt. + 0 + 1 + read-write + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_EN + Set 1 to enable core1 dram0 permission monitor interrupt. + 1 + 1 + read-write + + + + + CORE_1_DRAM0_PMS_MONITOR_2 + core1 dram0 permission monitor configuration register 2. + 0x11C + 0x20 + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_INTR + recorded core1 dram0 permission monitor interrupt status. + 0 + 1 + read-only + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_STATUS_LOCK + recorded core1 dram0 lock status, 1 means s32c1i access. + 1 + 1 + read-only + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WORLD + recorded core1 dram0 world status, 0x1 means world0, 0x2 means world1. + 2 + 2 + read-only + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_STATUS_ADDR + recorded core1 dram0 address[25:4] status when core1 dram0 violated permission,the real address is 0x3c000000+addr*16 + 4 + 22 + read-only + + + + + CORE_1_DRAM0_PMS_MONITOR_3 + core1 dram0 permission monitor configuration register 3. + 0x120 + 0x20 + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_STATUS_WR + recorded core1 dram0 wr status, 1 means store, 0 means load. + 0 + 1 + read-only + + + CORE_1_DRAM0_PMS_MONITOR_VIOLATE_STATUS_BYTEEN + recorded core1 dram0 byteen status. + 1 + 16 + read-only + + + + + CORE_0_PIF_PMS_CONSTRAIN_0 + Core0 access peripherals permission configuration register 0. + 0x124 + 0x20 + + + CORE_0_PIF_PMS_CONSTRAIN_LOCK + Set 1 to lock core0 access peripherals permission Configuration Register. + 0 + 1 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_1 + Core0 access peripherals permission configuration register 1. + 0x128 + 0x20 + 0xFF33CFFF + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART + Core0 access uart permission in world0. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1 + Core0 access g0spi_1 permission in world0. + 2 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0 + Core0 access g0spi_0 permission in world0. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_GPIO + Core0 access gpio permission in world0. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE2 + Core0 access fe2 permission in world0. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_FE + Core0 access fe permission in world0. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RTC + Core0 access rtc permission in world0. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX + Core0 access io_mux permission in world0. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_HINF + Core0 access hinf permission in world0. + 20 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_MISC + Core0 access misc permission in world0. + 24 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C + Core0 access i2c permission in world0. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S0 + Core0 access i2s0 permission in world0. + 28 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART1 + Core0 access uart1 permission in world0. + 30 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_2 + Core0 access peripherals permission configuration register 2. + 0x12C + 0x20 + 0xFFCFFFF3 + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT + Core0 access bt permission in world0. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0 + Core0 access i2c_ext0 permission in world0. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0 + Core0 access uhci0 permission in world0. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SLCHOST + Core0 access slchost permission in world0. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RMT + Core0 access rmt permission in world0. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PCNT + Core0 access pcnt permission in world0. + 12 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SLC + Core0 access slc permission in world0. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LEDC + Core0 access ledc permission in world0. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BACKUP + Core0 access backup permission in world0. + 18 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BB + Core0 access bb permission in world0. + 22 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWM0 + Core0 access pwm0 permission in world0. + 24 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP + Core0 access timergroup permission in world0. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1 + Core0 access timergroup1 permission in world0. + 28 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER + Core0 access systimer permission in world0. + 30 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_3 + Core0 access peripherals permission configuration register 3. + 0x130 + 0x20 + 0x3CC3FFFF + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2 + Core0 access spi_2 permission in world0. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SPI_3 + Core0 access spi_3 permission in world0. + 2 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL + Core0 access apb_ctrl permission in world0. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT1 + Core0 access i2c_ext1 permission in world0. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SDIO_HOST + Core0 access sdio_host permission in world0. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CAN + Core0 access can permission in world0. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWM1 + Core0 access pwm1 permission in world0. + 12 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_I2S1 + Core0 access i2s1 permission in world0. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_UART2 + Core0 access uart2 permission in world0. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_RWBT + Core0 access rwbt permission in world0. + 22 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC + Core0 access wifimac permission in world0. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_PWR + Core0 access pwr permission in world0. + 28 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_4 + Core0 access peripherals permission configuration register 4. + 0x134 + 0x20 + 0xFFFFFFFF + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE + Core0 access usb_device permission in world0. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP + Core0 access usb_wrap permission in world0. + 2 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI + Core0 access crypto_peri permission in world0. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA + Core0 access crypto_dma permission in world0. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC + Core0 access apb_adc permission in world0. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_LCD_CAM + Core0 access lcd_cam permission in world0. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR + Core0 access bt_pwr permission in world0. + 12 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_USB + Core0 access usb permission in world0. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM + Core0 access system permission in world0. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE + Core0 access sensitive permission in world0. + 18 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT + Core0 access interrupt permission in world0. + 20 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY + Core0 access dma_copy permission in world0. + 22 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG + Core0 access cache_config permission in world0. + 24 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_AD + Core0 access ad permission in world0. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_DIO + Core0 access dio permission in world0. + 28 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER + Core0 access world_controller permission in world0. + 30 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_5 + Core0 access peripherals permission configuration register 5. + 0x138 + 0x20 + 0xFF33CFFF + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART + Core0 access uart permission in world1. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1 + Core0 access g0spi_1 permission in world1. + 2 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0 + Core0 access g0spi_0 permission in world1. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_GPIO + Core0 access gpio permission in world1. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE2 + Core0 access fe2 permission in world1. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_FE + Core0 access fe permission in world1. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RTC + Core0 access rtc permission in world1. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX + Core0 access io_mux permission in world1. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_HINF + Core0 access hinf permission in world1. + 20 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_MISC + Core0 access misc permission in world1. + 24 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C + Core0 access i2c permission in world1. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S0 + Core0 access i2s0 permission in world1. + 28 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART1 + Core0 access uart1 permission in world1. + 30 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_6 + Core0 access peripherals permission configuration register 6. + 0x13C + 0x20 + 0xFFCFFFF3 + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT + Core0 access bt permission in world1. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0 + Core0 access i2c_ext0 permission in world1. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0 + Core0 access uhci0 permission in world1. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SLCHOST + Core0 access slchost permission in world1. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RMT + Core0 access rmt permission in world1. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PCNT + Core0 access pcnt permission in world1. + 12 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SLC + Core0 access slc permission in world1. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LEDC + Core0 access ledc permission in world1. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BACKUP + Core0 access backup permission in world1. + 18 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BB + Core0 access bb permission in world1. + 22 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWM0 + Core0 access pwm0 permission in world1. + 24 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP + Core0 access timergroup permission in world1. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1 + Core0 access timergroup1 permission in world1. + 28 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER + Core0 access systimer permission in world1. + 30 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_7 + Core0 access peripherals permission configuration register 7. + 0x140 + 0x20 + 0x3CC3FFFF + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2 + Core0 access spi_2 permission in world1. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SPI_3 + Core0 access spi_3 permission in world1. + 2 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL + Core0 access apb_ctrl permission in world1. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT1 + Core0 access i2c_ext1 permission in world1. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SDIO_HOST + Core0 access sdio_host permission in world1. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CAN + Core0 access can permission in world1. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWM1 + Core0 access pwm1 permission in world1. + 12 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_I2S1 + Core0 access i2s1 permission in world1. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_UART2 + Core0 access uart2 permission in world1. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_RWBT + Core0 access rwbt permission in world1. + 22 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC + Core0 access wifimac permission in world1. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_PWR + Core0 access pwr permission in world1. + 28 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_8 + Core0 access peripherals permission configuration register 8. + 0x144 + 0x20 + 0xFFFFFFFF + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE + Core0 access usb_device permission in world1. + 0 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP + Core0 access usb_wrap permission in world1. + 2 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI + Core0 access crypto_peri permission in world1. + 4 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA + Core0 access crypto_dma permission in world1. + 6 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC + Core0 access apb_adc permission in world1. + 8 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_LCD_CAM + Core0 access lcd_cam permission in world1. + 10 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR + Core0 access bt_pwr permission in world1. + 12 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_USB + Core0 access usb permission in world1. + 14 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM + Core0 access system permission in world1. + 16 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE + Core0 access sensitive permission in world1. + 18 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT + Core0 access interrupt permission in world1. + 20 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY + Core0 access dma_copy permission in world1. + 22 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG + Core0 access cache_config permission in world1. + 24 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_AD + Core0 access ad permission in world1. + 26 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_DIO + Core0 access dio permission in world1. + 28 + 2 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER + Core0 access world_controller permission in world1. + 30 + 2 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_9 + Core0 access peripherals permission configuration register 9. + 0x148 + 0x20 + 0x003FFFFF + + + CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0 + RTCFast memory split address in world 0 for core0. + 0 + 11 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1 + RTCFast memory split address in world 1 for core0. + 11 + 11 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_10 + Core0 access peripherals permission configuration register 10. + 0x14C + 0x20 + 0x00000FFF + + + CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L + RTCFast memory low region permission in world 0 for core0. + 0 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H + RTCFast memory high region permission in world 0 for core0. + 3 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L + RTCFast memory low region permission in world 1 for core0. + 6 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H + RTCFast memory high region permission in world 1 for core0. + 9 + 3 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_11 + Core0 access peripherals permission configuration register 11. + 0x150 + 0x20 + 0x003FFFFF + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_0_SPLTADDR_WORLD_0 + RTCSlow_0 memory split address in world 0 for core0. + 0 + 11 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_0_SPLTADDR_WORLD_1 + RTCSlow_0 memory split address in world 1 for core0. + 11 + 11 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_12 + Core0 access peripherals permission configuration register 12. + 0x154 + 0x20 + 0x00000FFF + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_0_L + RTCSlow_0 memory low region permission in world 0 for core0. + 0 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_0_H + RTCSlow_0 memory high region permission in world 0 for core0. + 3 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_1_L + RTCSlow_0 memory low region permission in world 1 for core0. + 6 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_1_H + RTCSlow_0 memory high region permission in world 1 for core0. + 9 + 3 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_13 + Core0 access peripherals permission configuration register 13. + 0x158 + 0x20 + 0x003FFFFF + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_1_SPLTADDR_WORLD_0 + RTCSlow_1 memory split address in world 0 for core0. + 0 + 11 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_1_SPLTADDR_WORLD_1 + RTCSlow_1 memory split address in world 1 for core0. + 11 + 11 + read-write + + + + + CORE_0_PIF_PMS_CONSTRAIN_14 + Core0 access peripherals permission configuration register 14. + 0x15C + 0x20 + 0x00000FFF + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_0_L + RTCSlow_1 memory low region permission in world 0 for core0. + 0 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_0_H + RTCSlow_1 memory high region permission in world 0 for core0. + 3 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_1_L + RTCSlow_1 memory low region permission in world 1 for core0. + 6 + 3 + read-write + + + CORE_0_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_1_H + RTCSlow_1 memory high region permission in world 1 for core0. + 9 + 3 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_0 + Core0 region permission register 0. + 0x160 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_LOCK + Set 1 to lock core0 region permission registers. + 0 + 1 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_1 + Core0 region permission register 1. + 0x164 + 0x20 + 0x003FFFFF + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_0 + Region 0 permission in world 0 for core0. + 0 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_1 + Region 1 permission in world 0 for core0. + 2 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_2 + Region 2 permission in world 0 for core0. + 4 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_3 + Region 3 permission in world 0 for core0. + 6 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_4 + Region 4 permission in world 0 for core0. + 8 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_5 + Region 5 permission in world 0 for core0. + 10 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_6 + Region 6 permission in world 0 for core0. + 12 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_7 + Region 7 permission in world 0 for core0. + 14 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_8 + Region 8 permission in world 0 for core0. + 16 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_9 + Region 9 permission in world 0 for core0. + 18 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_0_AREA_10 + Region 10 permission in world 0 for core0. + 20 + 2 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_2 + Core0 region permission register 2. + 0x168 + 0x20 + 0x003FFFFF + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_0 + Region 0 permission in world 1 for core0. + 0 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_1 + Region 1 permission in world 1 for core0. + 2 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_2 + Region 2 permission in world 1 for core0. + 4 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_3 + Region 3 permission in world 1 for core0. + 6 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_4 + Region 4 permission in world 1 for core0. + 8 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_5 + Region 5 permission in world 1 for core0. + 10 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_6 + Region 6 permission in world 1 for core0. + 12 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_7 + Region 7 permission in world 1 for core0. + 14 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_8 + Region 8 permission in world 1 for core0. + 16 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_9 + Region 9 permission in world 1 for core0. + 18 + 2 + read-write + + + CORE_0_REGION_PMS_CONSTRAIN_WORLD_1_AREA_10 + Region 10 permission in world 1 for core0. + 20 + 2 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_3 + Core0 region permission register 3. + 0x16C + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_0 + Region 0 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_4 + Core0 region permission register 4. + 0x170 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_1 + Region 0 end address and Region 1 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_5 + Core0 region permission register 5. + 0x174 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_2 + Region 1 end address and Region 2 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_6 + Core0 region permission register 6. + 0x178 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_3 + Region 2 end address and Region 3 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_7 + Core0 region permission register 7. + 0x17C + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_4 + Region 3 end address and Region 4 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_8 + Core0 region permission register 8. + 0x180 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_5 + Region 4 end address and Region 5 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_9 + Core0 region permission register 9. + 0x184 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_6 + Region 5 end address and Region 6 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_10 + Core0 region permission register 10. + 0x188 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_7 + Region 6 end address and Region 7 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_11 + Core0 region permission register 11. + 0x18C + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_8 + Region 7 end address and Region 8 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_12 + Core0 region permission register 12. + 0x190 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_9 + Region 8 end address and Region 9 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_13 + Core0 region permission register 13. + 0x194 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_10 + Region 9 end address and Region 10 start address for core0. + 0 + 30 + read-write + + + + + CORE_0_REGION_PMS_CONSTRAIN_14 + Core0 region permission register 14. + 0x198 + 0x20 + + + CORE_0_REGION_PMS_CONSTRAIN_ADDR_11 + Region 10 end address for core0. + 0 + 30 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_0 + Core0 permission report register 0. + 0x19C + 0x20 + + + CORE_0_PIF_PMS_MONITOR_LOCK + Set 1 to lock core0 permission report registers. + 0 + 1 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_1 + Core0 permission report register 1. + 0x1A0 + 0x20 + 0x00000003 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear interrupt that core0 initiate illegal PIF bus access. + 0 + 1 + read-write + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_EN + Set 1 to enable interrupt that core0 initiate illegal PIF bus access. + 1 + 1 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_2 + Core0 permission report register 2. + 0x1A4 + 0x20 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_INTR + Record core0 illegal access interrupt state. + 0 + 1 + read-only + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0 + Record hport information when core0 initiate illegal access. + 1 + 1 + read-only + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE + Record access type when core0 initate illegal access. + 2 + 3 + read-only + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE + Record access direction when core0 initiate illegal access. + 5 + 1 + read-only + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD + Record world information when core0 initiate illegal access. + 6 + 2 + read-only + + + + + CORE_0_PIF_PMS_MONITOR_3 + Core0 permission report register 3. + 0x1A8 + 0x20 + + + CORE_0_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR + Record address information when core0 initiate illegal access. + 0 + 32 + read-only + + + + + CORE_0_PIF_PMS_MONITOR_4 + Core0 permission report register 4. + 0x1AC + 0x20 + 0x00000003 + + + CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR + Set 1 to clear interrupt that core0 initiate unsupported access type. + 0 + 1 + read-write + + + CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN + Set 1 to enable interrupt that core0 initiate unsupported access type. + 1 + 1 + read-write + + + + + CORE_0_PIF_PMS_MONITOR_5 + Core0 permission report register 5. + 0x1B0 + 0x20 + + + CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR + Record core0 unsupported access type interrupt state. + 0 + 1 + read-only + + + CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE + Record access type when core0 initiate unsupported access type. + 1 + 2 + read-only + + + CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD + Record world information when core0 initiate unsupported access type. + 3 + 2 + read-only + + + + + CORE_0_PIF_PMS_MONITOR_6 + Core0 permission report register 6. + 0x1B4 + 0x20 + + + CORE_0_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR + Record address information when core0 initiate unsupported access type. + 0 + 32 + read-only + + + + + CORE_0_VECBASE_OVERRIDE_LOCK + core0 vecbase override configuration register 0 + 0x1B8 + 0x20 + + + CORE_0_VECBASE_OVERRIDE_LOCK + Set 1 to lock core0 vecbase configuration register + 0 + 1 + read-write + + + + + CORE_0_VECBASE_OVERRIDE_0 + core0 vecbase override configuration register 0 + 0x1BC + 0x20 + 0x00000001 + + + CORE_0_VECBASE_WORLD_MASK + Set 1 to mask world, then only world0_value will work. + 0 + 1 + read-write + + + + + CORE_0_VECBASE_OVERRIDE_1 + core0 vecbase override configuration register 1 + 0x1C0 + 0x20 + + + CORE_0_VECBASE_OVERRIDE_WORLD0_VALUE + world0 vecbase_override register, when core0 in world0 use this register to override vecbase register. + 0 + 22 + read-write + + + CORE_0_VECBASE_OVERRIDE_SEL + Set 0x3 to sel vecbase_override to override vecbase register. + 22 + 2 + read-write + + + + + CORE_0_VECBASE_OVERRIDE_2 + core0 vecbase override configuration register 1 + 0x1C4 + 0x20 + + + CORE_0_VECBASE_OVERRIDE_WORLD1_VALUE + world1 vecbase_override register, when core0 in world1 use this register to override vecbase register. + 0 + 22 + read-write + + + + + CORE_0_TOOMANYEXCEPTIONS_M_OVERRIDE_0 + core0 toomanyexception override configuration register 0. + 0x1C8 + 0x20 + + + CORE_0_TOOMANYEXCEPTIONS_M_OVERRIDE_LOCK + Set 1 to lock core0 toomanyexception override configuration register + 0 + 1 + read-write + + + + + CORE_0_TOOMANYEXCEPTIONS_M_OVERRIDE_1 + core0 toomanyexception override configuration register 1. + 0x1CC + 0x20 + 0x00000001 + + + CORE_0_TOOMANYEXCEPTIONS_M_OVERRIDE + Set 1 to mask toomanyexception. + 0 + 1 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_0 + Core1 access peripherals permission configuration register 0. + 0x1D0 + 0x20 + + + CORE_1_PIF_PMS_CONSTRAIN_LOCK + Set 1 to lock core1 pif permission configuration register. + 0 + 1 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_1 + Core1 access peripherals permission configuration register 1. + 0x1D4 + 0x20 + 0xFF33CFFF + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_UART + Core1 access uart permission in world0. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_1 + Core1 access g0spi_1 permission in world0. + 2 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_G0SPI_0 + Core1 access g0spi_0 permission in world0. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_GPIO + Core1 access gpio permission in world0. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_FE2 + Core1 access fe2 permission in world0. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_FE + Core1 access fe permission in world0. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_RTC + Core1 access rtc permission in world0. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_IO_MUX + Core1 access io_mux permission in world0. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_HINF + Core1 access hinf permission in world0. + 20 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_MISC + Core1 access misc permission in world0. + 24 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_I2C + Core1 access i2c permission in world0. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_I2S0 + Core1 access i2s0 permission in world0. + 28 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_UART1 + Core1 access uart1 permission in world0. + 30 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_2 + Core1 access peripherals permission configuration register 2. + 0x1D8 + 0x20 + 0xFFCFFFF3 + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_BT + Core1 access bt permission in world0. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT0 + Core1 access i2c_ext0 permission in world0. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_UHCI0 + Core1 access uhci0 permission in world0. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SLCHOST + Core1 access slchost permission in world0. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_RMT + Core1 access rmt permission in world0. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_PCNT + Core1 access pcnt permission in world0. + 12 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SLC + Core1 access slc permission in world0. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_LEDC + Core1 access ledc permission in world0. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_BACKUP + Core1 access backup permission in world0. + 18 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_BB + Core1 access bb permission in world0. + 22 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_PWM0 + Core1 access pwm0 permission in world0. + 24 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP + Core1 access timergroup permission in world0. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_TIMERGROUP1 + Core1 access timergroup1 permission in world0. + 28 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SYSTIMER + Core1 access systimer permission in world0. + 30 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_3 + Core1 access peripherals permission configuration register 3. + 0x1DC + 0x20 + 0x3CC3FFFF + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SPI_2 + Core1 access spi_2 permission in world0. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SPI_3 + Core1 access spi_3 permission in world0. + 2 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_APB_CTRL + Core1 access apb_ctrl permission in world0. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_I2C_EXT1 + Core1 access i2c_ext1 permission in world0. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SDIO_HOST + Core1 access sdio_host permission in world0. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_CAN + Core1 access can permission in world0. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_PWM1 + Core1 access pwm1 permission in world0. + 12 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_I2S1 + Core1 access i2s1 permission in world0. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_UART2 + Core1 access uart2 permission in world0. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_RWBT + Core1 access rwbt permission in world0. + 22 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_WIFIMAC + Core1 access wifimac permission in world0. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_PWR + Core1 access pwr permission in world0. + 28 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_4 + Core1 access peripherals permission configuration register 4. + 0x1E0 + 0x20 + 0xFFFFFFFF + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_USB_DEVICE + Core1 access usb_device permission in world0. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_USB_WRAP + Core1 access usb_wrap permission in world0. + 2 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_PERI + Core1 access crypto_peri permission in world0. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_CRYPTO_DMA + Core1 access crypto_dma permission in world0. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_APB_ADC + Core1 access apb_adc permission in world0. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_LCD_CAM + Core1 access lcd_cam permission in world0. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_BT_PWR + Core1 access bt_pwr permission in world0. + 12 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_USB + Core1 access usb permission in world0. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SYSTEM + Core1 access system permission in world0. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_SENSITIVE + Core1 access sensitive permission in world0. + 18 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_INTERRUPT + Core1 access interrupt permission in world0. + 20 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_DMA_COPY + Core1 access dma_copy permission in world0. + 22 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_CACHE_CONFIG + Core1 access cache_config permission in world0. + 24 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_AD + Core1 access ad permission in world0. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_DIO + Core1 access dio permission in world0. + 28 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_0_WORLD_CONTROLLER + Core1 access world_controller permission in world0. + 30 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_5 + Core1 access peripherals permission configuration register 5. + 0x1E4 + 0x20 + 0xFF33CFFF + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_UART + Core1 access uart permission in world1. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_1 + Core1 access g0spi_1 permission in world1. + 2 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_G0SPI_0 + Core1 access g0spi_0 permission in world1. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_GPIO + Core1 access gpio permission in world1. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_FE2 + Core1 access fe2 permission in world1. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_FE + Core1 access fe permission in world1. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_RTC + Core1 access rtc permission in world1. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_IO_MUX + Core1 access io_mux permission in world1. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_HINF + Core1 access hinf permission in world1. + 20 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_MISC + Core1 access misc permission in world1. + 24 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_I2C + Core1 access i2c permission in world1. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_I2S0 + Core1 access i2s0 permission in world1. + 28 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_UART1 + Core1 access uart1 permission in world1. + 30 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_6 + Core1 access peripherals permission configuration register 6. + 0x1E8 + 0x20 + 0xFFCFFFF3 + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_BT + Core1 access bt permission in world1. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT0 + Core1 access i2c_ext0 permission in world1. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_UHCI0 + Core1 access uhci0 permission in world1. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SLCHOST + Core1 access slchost permission in world1. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_RMT + Core1 access rmt permission in world1. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_PCNT + Core1 access pcnt permission in world1. + 12 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SLC + Core1 access slc permission in world1. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_LEDC + Core1 access ledc permission in world1. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_BACKUP + Core1 access backup permission in world1. + 18 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_BB + Core1 access bb permission in world1. + 22 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_PWM0 + Core1 access pwm0 permission in world1. + 24 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP + Core1 access timergroup permission in world1. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_TIMERGROUP1 + Core1 access timergroup1 permission in world1. + 28 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SYSTIMER + Core1 access systimer permission in world1. + 30 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_7 + Core1 access peripherals permission configuration register 7. + 0x1EC + 0x20 + 0x3CC3FFFF + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SPI_2 + Core1 access spi_2 permission in world1. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SPI_3 + Core1 access spi_3 permission in world1. + 2 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_APB_CTRL + Core1 access apb_ctrl permission in world1. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_I2C_EXT1 + Core1 access i2c_ext1 permission in world1. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SDIO_HOST + Core1 access sdio_host permission in world1. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_CAN + Core1 access can permission in world1. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_PWM1 + Core1 access pwm1 permission in world1. + 12 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_I2S1 + Core1 access i2s1 permission in world1. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_UART2 + Core1 access uart2 permission in world1. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_RWBT + Core1 access rwbt permission in world1. + 22 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_WIFIMAC + Core1 access wifimac permission in world1. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_PWR + Core1 access pwr permission in world1. + 28 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_8 + Core1 access peripherals permission configuration register 8. + 0x1F0 + 0x20 + 0xFFFFFFFF + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_USB_DEVICE + Core1 access usb_device permission in world1. + 0 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_USB_WRAP + Core1 access usb_wrap permission in world1. + 2 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_PERI + Core1 access crypto_peri permission in world1. + 4 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_CRYPTO_DMA + Core1 access crypto_dma permission in world1. + 6 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_APB_ADC + Core1 access apb_adc permission in world1. + 8 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_LCD_CAM + Core1 access lcd_cam permission in world1. + 10 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_BT_PWR + Core1 access bt_pwr permission in world1. + 12 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_USB + Core1 access usb permission in world1. + 14 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SYSTEM + Core1 access system permission in world1. + 16 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_SENSITIVE + Core1 access sensitive permission in world1. + 18 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_INTERRUPT + Core1 access interrupt permission in world1. + 20 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_DMA_COPY + Core1 access dma_copy permission in world1. + 22 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_CACHE_CONFIG + Core1 access cache_config permission in world1. + 24 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_AD + Core1 access ad permission in world1. + 26 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_DIO + Core1 access dio permission in world1. + 28 + 2 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_WORLD_1_WORLD_CONTROLLER + Core1 access world_controller permission in world1. + 30 + 2 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_9 + Core1 access peripherals permission configuration register 9. + 0x1F4 + 0x20 + 0x003FFFFF + + + CORE_1_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_0 + RTCFast memory split address in world 0 for core1. + 0 + 11 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCFAST_SPLTADDR_WORLD_1 + RTCFast memory split address in world 1 for core1. + 11 + 11 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_10 + core1 access peripherals permission configuration register 10. + 0x1F8 + 0x20 + 0x00000FFF + + + CORE_1_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_L + RTCFast memory low region permission in world 0 for core1. + 0 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_0_H + RTCFast memory high region permission in world 0 for core1. + 3 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_L + RTCFast memory low region permission in world 1 for core1. + 6 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCFAST_WORLD_1_H + RTCFast memory high region permission in world 1 for core1. + 9 + 3 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_11 + core1 access peripherals permission configuration register 11. + 0x1FC + 0x20 + 0x003FFFFF + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_0_SPLTADDR_WORLD_0 + RTCSlow_0 memory split address in world 0 for core1. + 0 + 11 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_0_SPLTADDR_WORLD_1 + RTCSlow_0 memory split address in world 1 for core1. + 11 + 11 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_12 + core1 access peripherals permission configuration register 12. + 0x200 + 0x20 + 0x00000FFF + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_0_L + RTCSlow_0 memory low region permission in world 0 for core1. + 0 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_0_H + RTCSlow_0 memory high region permission in world 0 for core1. + 3 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_1_L + RTCSlow_0 memory low region permission in world 1 for core1. + 6 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_0_WORLD_1_H + RTCSlow_0 memory high region permission in world 1 for core1. + 9 + 3 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_13 + core1 access peripherals permission configuration register 13. + 0x204 + 0x20 + 0x003FFFFF + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_1_SPLTADDR_WORLD_0 + RTCSlow_1 memory split address in world 0 for core1. + 0 + 11 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_1_SPLTADDR_WORLD_1 + RTCSlow_1 memory split address in world 1 for core1. + 11 + 11 + read-write + + + + + CORE_1_PIF_PMS_CONSTRAIN_14 + core1 access peripherals permission configuration register 14. + 0x208 + 0x20 + 0x00000FFF + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_0_L + RTCSlow_1 memory low region permission in world 0 for core1. + 0 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_0_H + RTCSlow_1 memory high region permission in world 0 for core1. + 3 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_1_L + RTCSlow_1 memory low region permission in world 1 for core1. + 6 + 3 + read-write + + + CORE_1_PIF_PMS_CONSTRAIN_RTCSLOW_1_WORLD_1_H + RTCSlow_1 memory high region permission in world 1 for core1. + 9 + 3 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_0 + core1 region permission register 0. + 0x20C + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_LOCK + Set 1 to lock core1 region permission registers. + 0 + 1 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_1 + core1 region permission register 1. + 0x210 + 0x20 + 0x003FFFFF + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_0 + Region 0 permission in world 0 for core1. + 0 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_1 + Region 1 permission in world 0 for core1. + 2 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_2 + Region 2 permission in world 0 for core1. + 4 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_3 + Region 3 permission in world 0 for core1. + 6 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_4 + Region 4 permission in world 0 for core1. + 8 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_5 + Region 5 permission in world 0 for core1. + 10 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_6 + Region 6 permission in world 0 for core1. + 12 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_7 + Region 7 permission in world 0 for core1. + 14 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_8 + Region 8 permission in world 0 for core1. + 16 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_9 + Region 9 permission in world 0 for core1. + 18 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_0_AREA_10 + Region 10 permission in world 0 for core1. + 20 + 2 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_2 + core1 region permission register 2. + 0x214 + 0x20 + 0x003FFFFF + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_0 + Region 0 permission in world 1 for core1. + 0 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_1 + Region 1 permission in world 1 for core1. + 2 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_2 + Region 2 permission in world 1 for core1. + 4 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_3 + Region 3 permission in world 1 for core1. + 6 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_4 + Region 4 permission in world 1 for core1. + 8 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_5 + Region 5 permission in world 1 for core1. + 10 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_6 + Region 6 permission in world 1 for core1. + 12 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_7 + Region 7 permission in world 1 for core1. + 14 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_8 + Region 8 permission in world 1 for core1. + 16 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_9 + Region 9 permission in world 1 for core1. + 18 + 2 + read-write + + + CORE_1_REGION_PMS_CONSTRAIN_WORLD_1_AREA_10 + Region 10 permission in world 1 for core1. + 20 + 2 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_3 + core1 region permission register 3. + 0x218 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_0 + Region 0 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_4 + core1 region permission register 4. + 0x21C + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_1 + Region 0 end address and Region 1 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_5 + core1 region permission register 5. + 0x220 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_2 + Region 1 end address and Region 2 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_6 + core1 region permission register 6. + 0x224 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_3 + Region 2 end address and Region 3 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_7 + core1 region permission register 7. + 0x228 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_4 + Region 3 end address and Region 4 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_8 + core1 region permission register 8. + 0x22C + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_5 + Region 4 end address and Region 5 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_9 + core1 region permission register 9. + 0x230 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_6 + Region 5 end address and Region 6 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_10 + core1 region permission register 10. + 0x234 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_7 + Region 6 end address and Region 7 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_11 + core1 region permission register 11. + 0x238 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_8 + Region 7 end address and Region 8 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_12 + core1 region permission register 12. + 0x23C + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_9 + Region 8 end address and Region 9 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_13 + core1 region permission register 13. + 0x240 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_10 + Region 9 end address and Region 10 start address for core1. + 0 + 30 + read-write + + + + + CORE_1_REGION_PMS_CONSTRAIN_14 + core1 region permission register 14. + 0x244 + 0x20 + + + CORE_1_REGION_PMS_CONSTRAIN_ADDR_11 + Region 10 end address for core1. + 0 + 30 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_0 + core1 permission report register 0. + 0x248 + 0x20 + + + CORE_1_PIF_PMS_MONITOR_LOCK + Set 1 to lock core1 permission report registers. + 0 + 1 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_1 + core1 permission report register 1. + 0x24C + 0x20 + 0x00000003 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear interrupt that core1 initiate illegal PIF bus access. + 0 + 1 + read-write + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_EN + Set 1 to enable interrupt that core1 initiate illegal PIF bus access. + 1 + 1 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_2 + core1 permission report register 2. + 0x250 + 0x20 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_INTR + Record core1 illegal access interrupt state. + 0 + 1 + read-only + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_STATUS_HPORT_0 + Record hport information when core1 initiate illegal access. + 1 + 1 + read-only + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_STATUS_HSIZE + Record access type when core1 initate illegal access. + 2 + 3 + read-only + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_STATUS_HWRITE + Record access direction when core1 initiate illegal access. + 5 + 1 + read-only + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_STATUS_HWORLD + Record world information when core1 initiate illegal access. + 6 + 2 + read-only + + + + + CORE_1_PIF_PMS_MONITOR_3 + core1 permission report register 3. + 0x254 + 0x20 + + + CORE_1_PIF_PMS_MONITOR_VIOLATE_STATUS_HADDR + Record address information when core1 initiate illegal access. + 0 + 32 + read-only + + + + + CORE_1_PIF_PMS_MONITOR_4 + core1 permission report register 4. + 0x258 + 0x20 + 0x00000003 + + + CORE_1_PIF_PMS_MONITOR_NONWORD_VIOLATE_CLR + Set 1 to clear interrupt that core1 initiate unsupported access type. + 0 + 1 + read-write + + + CORE_1_PIF_PMS_MONITOR_NONWORD_VIOLATE_EN + Set 1 to enable interrupt that core1 initiate unsupported access type. + 1 + 1 + read-write + + + + + CORE_1_PIF_PMS_MONITOR_5 + core1 permission report register 5. + 0x25C + 0x20 + + + CORE_1_PIF_PMS_MONITOR_NONWORD_VIOLATE_INTR + Record core1 unsupported access type interrupt state. + 0 + 1 + read-only + + + CORE_1_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HSIZE + Record access type when core1 initiate unsupported access type. + 1 + 2 + read-only + + + CORE_1_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HWORLD + Record world information when core1 initiate unsupported access type. + 3 + 2 + read-only + + + + + CORE_1_PIF_PMS_MONITOR_6 + core1 permission report register 6. + 0x260 + 0x20 + + + CORE_1_PIF_PMS_MONITOR_NONWORD_VIOLATE_STATUS_HADDR + Record address information when core1 initiate unsupported access type. + 0 + 32 + read-only + + + + + CORE_1_VECBASE_OVERRIDE_LOCK + core1 vecbase override configuration register 0 + 0x264 + 0x20 + + + CORE_1_VECBASE_OVERRIDE_LOCK + Set 1 to lock core1 vecbase configuration register + 0 + 1 + read-write + + + + + CORE_1_VECBASE_OVERRIDE_0 + core1 vecbase override configuration register 0 + 0x268 + 0x20 + 0x00000001 + + + CORE_1_VECBASE_WORLD_MASK + Set 1 to mask world, then only world0_value will work. + 0 + 1 + read-write + + + + + CORE_1_VECBASE_OVERRIDE_1 + core1 vecbase override configuration register 1 + 0x26C + 0x20 + + + CORE_1_VECBASE_OVERRIDE_WORLD0_VALUE + world0 vecbase_override register, when core1 in world0 use this register to override vecbase register. + 0 + 22 + read-write + + + CORE_1_VECBASE_OVERRIDE_SEL + Set 0x3 to sel vecbase_override to override vecbase register. + 22 + 2 + read-write + + + + + CORE_1_VECBASE_OVERRIDE_2 + core1 vecbase override configuration register 1 + 0x270 + 0x20 + + + CORE_1_VECBASE_OVERRIDE_WORLD1_VALUE + world1 vecbase_override register, when core1 in world1 use this register to override vecbase register. + 0 + 22 + read-write + + + + + CORE_1_TOOMANYEXCEPTIONS_M_OVERRIDE_0 + core1 toomanyexception override configuration register 0. + 0x274 + 0x20 + + + CORE_1_TOOMANYEXCEPTIONS_M_OVERRIDE_LOCK + Set 1 to lock core1 toomanyexception override configuration register + 0 + 1 + read-write + + + + + CORE_1_TOOMANYEXCEPTIONS_M_OVERRIDE_1 + core1 toomanyexception override configuration register 1. + 0x278 + 0x20 + 0x00000001 + + + CORE_1_TOOMANYEXCEPTIONS_M_OVERRIDE + Set 1 to mask toomanyexception. + 0 + 1 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_0 + BackUp access peripherals permission configuration register 0. + 0x27C + 0x20 + + + BACKUP_BUS_PMS_CONSTRAIN_LOCK + Set 1 to lock BackUp permission configuration registers. + 0 + 1 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_1 + BackUp access peripherals permission configuration register 1. + 0x280 + 0x20 + 0xFF33CFFF + + + BACKUP_BUS_PMS_CONSTRAIN_UART + BackUp access uart permission. + 0 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_G0SPI_1 + BackUp access g0spi_1 permission. + 2 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_G0SPI_0 + BackUp access g0spi_0 permission. + 4 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_GPIO + BackUp access gpio permission. + 6 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_FE2 + BackUp access fe2 permission. + 8 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_FE + BackUp access fe permission. + 10 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_RTC + BackUp access rtc permission. + 14 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_IO_MUX + BackUp access io_mux permission. + 16 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_HINF + BackUp access hinf permission. + 20 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_MISC + BackUp access misc permission. + 24 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_I2C + BackUp access i2c permission. + 26 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_I2S0 + BackUp access i2s0 permission. + 28 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_UART1 + BackUp access uart1 permission. + 30 + 2 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_2 + BackUp access peripherals permission configuration register 2. + 0x284 + 0x20 + 0xFFCFFFF3 + + + BACKUP_BUS_PMS_CONSTRAIN_BT + BackUp access bt permission. + 0 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT0 + BackUp access i2c_ext0 permission. + 4 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_UHCI0 + BackUp access uhci0 permission. + 6 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SLCHOST + BackUp access slchost permission. + 8 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_RMT + BackUp access rmt permission. + 10 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_PCNT + BackUp access pcnt permission. + 12 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SLC + BackUp access slc permission. + 14 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_LEDC + BackUp access ledc permission. + 16 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_BACKUP + BackUp access backup permission. + 18 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_BB + BackUp access bb permission. + 22 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_PWM0 + BackUp access pwm0 permission. + 24 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP + BackUp access timergroup permission. + 26 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_TIMERGROUP1 + BackUp access timergroup1 permission. + 28 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SYSTIMER + BackUp access systimer permission. + 30 + 2 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_3 + BackUp access peripherals permission configuration register 3. + 0x288 + 0x20 + 0x3CC3FFFF + + + BACKUP_BUS_PMS_CONSTRAIN_SPI_2 + BackUp access spi_2 permission. + 0 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SPI_3 + BackUp access spi_3 permission. + 2 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_APB_CTRL + BackUp access apb_ctrl permission. + 4 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_I2C_EXT1 + BackUp access i2c_ext1 permission. + 6 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SDIO_HOST + BackUp access sdio_host permission. + 8 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_CAN + BackUp access can permission. + 10 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_PWM1 + BackUp access pwm1 permission. + 12 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_I2S1 + BackUp access i2s1 permission. + 14 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_UART2 + BackUp access uart2 permission. + 16 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_RWBT + BackUp access rwbt permission. + 22 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_WIFIMAC + BackUp access wifimac permission. + 26 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_PWR + BackUp access pwr permission. + 28 + 2 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_4 + BackUp access peripherals permission configuration register 4. + 0x28C + 0x20 + 0xFFFFFFFF + + + BACKUP_BUS_PMS_CONSTRAIN_USB_DEVICE + BackUp access usb_device permission. + 0 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_USB_WRAP + BackUp access usb_wrap permission. + 2 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_PERI + BackUp access crypto_peri permission. + 4 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_CRYPTO_DMA + BackUp access crypto_dma permission. + 6 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_APB_ADC + BackUp access apb_adc permission. + 8 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_LCD_CAM + BackUp access lcd_cam permission. + 10 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_BT_PWR + BackUp access bt_pwr permission. + 12 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_USB + BackUp access usb permission. + 14 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SYSTEM + BackUp access system permission. + 16 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_SENSITIVE + BackUp access sensitive permission. + 18 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_INTERRUPT + BackUp access interrupt permission. + 20 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_DMA_COPY + BackUp access dma_copy permission. + 22 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_CACHE_CONFIG + BackUp access cache_config permission. + 24 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_AD + BackUp access ad permission. + 26 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_DIO + BackUp access dio permission. + 28 + 2 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_WORLD_CONTROLLER + BackUp access world_controller permission. + 30 + 2 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_5 + BackUp access peripherals permission configuration register 5. + 0x290 + 0x20 + 0x000007FF + + + BACKUP_BUS_PMS_CONSTRAIN_RTCFAST_SPLTADDR + BackUp access rtcfast_spltaddr permission. + 0 + 11 + read-write + + + + + BACKUP_BUS_PMS_CONSTRAIN_6 + BackUp access peripherals permission configuration register 6. + 0x294 + 0x20 + 0x0000003F + + + BACKUP_BUS_PMS_CONSTRAIN_RTCFAST_L + BackUp access rtcfast_l permission. + 0 + 3 + read-write + + + BACKUP_BUS_PMS_CONSTRAIN_RTCFAST_H + BackUp access rtcfast_h permission. + 3 + 3 + read-write + + + + + BACKUP_BUS_PMS_MONITOR_0 + BackUp permission report register 0. + 0x298 + 0x20 + + + BACKUP_BUS_PMS_MONITOR_LOCK + Set 1 to lock BackUp permission report registers. + 0 + 1 + read-write + + + + + BACKUP_BUS_PMS_MONITOR_1 + BackUp permission report register 1. + 0x29C + 0x20 + 0x00000003 + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_CLR + Set 1 to clear interrupt that BackUp initiate illegal access. + 0 + 1 + read-write + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_EN + Set 1 to enable interrupt that BackUp initiate illegal access. + 1 + 1 + read-write + + + + + BACKUP_BUS_PMS_MONITOR_2 + BackUp permission report register 2. + 0x2A0 + 0x20 + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_INTR + Record BackUp illegal access interrupt state. + 0 + 1 + read-only + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HTRANS + Record htrans when BackUp initate illegal access. + 1 + 2 + read-only + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HSIZE + Record access type when BackUp initate illegal access. + 3 + 3 + read-only + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_STATUS_HWRITE + Record access direction when BackUp initiate illegal access. + 6 + 1 + read-only + + + + + BACKUP_BUS_PMS_MONITOR_3 + BackUp permission report register 3. + 0x2A4 + 0x20 + + + BACKUP_BUS_PMS_MONITOR_VIOLATE_HADDR + Record address information when BackUp initiate illegal access. + 0 + 32 + read-only + + + + + EDMA_BOUNDARY_LOCK + EDMA boundary lock register. + 0x2A8 + 0x20 + + + EDMA_BOUNDARY_LOCK + Set 1 to lock EDMA boundary registers. + 0 + 1 + read-write + + + + + EDMA_BOUNDARY_0 + EDMA boundary 0 configuration + 0x2AC + 0x20 + + + EDMA_BOUNDARY_0 + This field is used to configure the boundary 0 of external RAM. The unit is 4K. For example, set this field to 0x80, then the address boundary 0 would be 0x3C080000 (0x3C000000 + 0x80 * 4K). + 0 + 14 + read-write + + + + + EDMA_BOUNDARY_1 + EDMA boundary 1 configuration + 0x2B0 + 0x20 + 0x00002000 + + + EDMA_BOUNDARY_1 + This field is used to configure the boundary 1 of external RAM. The unit is 4K. For example, set this field to 0x80, then the address boundary 0 would be 0x3C080000 (0x3C000000 + 0x80 * 4K). + 0 + 14 + read-write + + + + + EDMA_BOUNDARY_2 + EDMA boundary 2 configuration + 0x2B4 + 0x20 + 0x00002000 + + + EDMA_BOUNDARY_2 + This field is used to configure the boundary 2 of external RAM. The unit is 4K. For example, set this field to 0x80, then the address boundary 0 would be 0x3C080000 (0x3C000000 + 0x80 * 4K). + 0 + 14 + read-write + + + + + EDMA_PMS_SPI2_LOCK + EDMA-SPI2 permission lock register. + 0x2B8 + 0x20 + + + EDMA_PMS_SPI2_LOCK + Set 1 to lock EDMA-SPI2 permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_SPI2 + EDMA-SPI2 permission control register. + 0x2BC + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of SPI2 accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of SPI2 accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_SPI3_LOCK + EDMA-SPI3 permission lock register. + 0x2C0 + 0x20 + + + EDMA_PMS_SPI3_LOCK + Set 1 to lock EDMA-SPI3 permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_SPI3 + EDMA-SPI3 permission control register. + 0x2C4 + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of SPI3 accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of SPI3 accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_UHCI0_LOCK + EDMA-UHCI0 permission lock register. + 0x2C8 + 0x20 + + + EDMA_PMS_UHCI0_LOCK + Set 1 to lock EDMA-UHCI0 permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_UHCI0 + EDMA-UHCI0 permission control register. + 0x2CC + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of UHCI0 accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of UHCI0 accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_I2S0_LOCK + EDMA-I2S0 permission lock register. + 0x2D0 + 0x20 + + + EDMA_PMS_I2S0_LOCK + Set 1 to lock EDMA-I2S0 permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_I2S0 + EDMA-I2S0 permission control register. + 0x2D4 + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of I2S0 accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of I2S0 accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_I2S1_LOCK + EDMA-I2S1 permission lock register. + 0x2D8 + 0x20 + + + EDMA_PMS_I2S1_LOCK + Set 1 to lock EDMA-I2S1 permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_I2S1 + EDMA-I2S1 permission control register. + 0x2DC + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of I2S1 accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of I2S1 accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_LCD_CAM_LOCK + EDMA-LCD/CAM permission lock register. + 0x2E0 + 0x20 + + + EDMA_PMS_LCD_CAM_LOCK + Set 1 to lock EDMA-LCD/CAM permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_LCD_CAM + EDMA-LCD/CAM permission control register. + 0x2E4 + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of LCD/CAM accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of LCD/CAM accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_AES_LOCK + EDMA-AES permission lock register. + 0x2E8 + 0x20 + + + EDMA_PMS_AES_LOCK + Set 1 to lock EDMA-AES permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_AES + EDMA-AES permission control register. + 0x2EC + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of AES accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of AES accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_SHA_LOCK + EDMA-SHA permission lock register. + 0x2F0 + 0x20 + + + EDMA_PMS_SHA_LOCK + Set 1 to lock EDMA-SHA permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_SHA + EDMA-SHA permission control register. + 0x2F4 + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of SHA accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of SHA accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_ADC_DAC_LOCK + EDMA-ADC/DAC permission lock register. + 0x2F8 + 0x20 + + + EDMA_PMS_ADC_DAC_LOCK + Set 1 to lock EDMA-ADC/DAC permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_ADC_DAC + EDMA-ADC/DAC permission control register. + 0x2FC + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of ADC/DAC accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of ADC/DAC accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + EDMA_PMS_RMT_LOCK + EDMA-RMT permission lock register. + 0x300 + 0x20 + + + EDMA_PMS_RMT_LOCK + Set 1 to lock EDMA-RMT permission control registers. + 0 + 1 + read-write + + + + + EDMA_PMS_RMT + EDMA-RMT permission control register. + 0x304 + 0x20 + 0x0000000F + + + ATTR1 + This field is used to configure the permission of RMT accessing address, which is larger than boundary 0 and less than boundary 1, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 0 + 2 + read-write + + + ATTR2 + This field is used to configure the permission of RMT accessing address, which is larger than boundary 1 and less than boundary 2, through EDMA. Bit 0: set this bit to enable read permission. Bit 1: set this bit to enable write permission. + 2 + 2 + read-write + + + + + CLOCK_GATE + Sensitive module clock gate configuration register. + 0x308 + 0x20 + 0x00000001 + + + REG_CLK_EN + Set 1 to enable clock gate function. + 0 + 1 + read-write + + + + + RTC_PMS + RTC coprocessor permission register. + 0x30C + 0x20 + + + DIS_RTC_CPU + Set 1 to disable rtc coprocessor. + 0 + 1 + read-write + + + + + DATE + Sensitive version register. + 0xFFC + 0x20 + 0x02101280 + + + DATE + Sensitive Date register. + 0 + 28 + read-write + + + + + + + SHA + SHA (Secure Hash Algorithm) Accelerator + SHA + 0x6003B000 + + 0x0 + 0xB0 + registers + + + SHA + 77 + + + + MODE + Initial configuration register. + 0x0 + 0x20 + + + MODE + sha mode + 0 + 3 + read-write + + + + + T_STRING + SHA 512/t configuration register 0. + 0x4 + 0x20 + + + T_STRING + sha t_string(used if and only if mode == sha_256/t) + 0 + 32 + read-write + + + + + T_LENGTH + SHA 512/t configuration register 1. + 0x8 + 0x20 + + + T_LENGTH + sha t_length(used if and only if mode == sha_256/t) + 0 + 6 + read-write + + + + + DMA_BLOCK_NUM + DMA configuration register 0. + 0xC + 0x20 + + + DMA_BLOCK_NUM + dma-sha block number + 0 + 6 + read-write + + + + + START + Typical SHA configuration register 0. + 0x10 + 0x20 + + + START + reserved. + 1 + 31 + read-only + + + + + CONTINUE + Typical SHA configuration register 1. + 0x14 + 0x20 + + + CONTINUE + reserved. + 1 + 31 + read-only + + + + + BUSY + Busy register. + 0x18 + 0x20 + + + STATE + sha busy state. 1'b0: idle 1'b1: busy + 0 + 1 + read-only + + + + + DMA_START + DMA configuration register 1. + 0x1C + 0x20 + + + DMA_START + start dma-sha + 0 + 1 + write-only + + + + + DMA_CONTINUE + DMA configuration register 2. + 0x20 + 0x20 + + + DMA_CONTINUE + continue dma-sha + 0 + 1 + write-only + + + + + CLEAR_IRQ + Interrupt clear register. + 0x24 + 0x20 + + + CLEAR_INTERRUPT + clear sha interrupt + 0 + 1 + write-only + + + + + IRQ_ENA + Interrupt enable register. + 0x28 + 0x20 + + + INTERRUPT_ENA + sha interrupt enable register. 1'b0: disable(default) 1'b1: enable + 0 + 1 + read-write + + + + + DATE + Date register. + 0x2C + 0x20 + 0x20190402 + + + DATE + sha date information/ sha version information + 0 + 30 + read-write + + + + + 64 + 0x1 + H_MEM[%s] + Sha H memory which contains intermediate hash or finial hash. + 0x40 + 0x8 + + + 64 + 0x1 + M_MEM[%s] + Sha M memory which contains message. + 0x80 + 0x8 + + + + + SPI0 + SPI (Serial Peripheral Interface) Controller 0 + SPI0 + 0x60003000 + + 0x0 + 0x98 + registers + + + SPI_MEM_REJECT_CACHE + 60 + + + + CTRL + SPI0 control register. + 0x8 + 0x20 + 0x002C2000 + + + FDUMMY_OUT + In the DUMMY phase the signal level of SPI bus is output by the SPI0 controller. + 3 + 1 + read-write + + + FDOUT_OCT + Set this bit to enable 8-bit-mode(8-bm) in DOUT phase. + 4 + 1 + read-write + + + FDIN_OCT + Set this bit to enable 8-bit-mode(8-bm) in DIN phase. + 5 + 1 + read-write + + + FADDR_OCT + Set this bit to enable 8-bit-mode(8-bm) in ADDR phase. + 6 + 1 + read-write + + + FCMD_DUAL + Set this bit to enable 2-bit-mode(2-bm) in CMD phase. + 7 + 1 + read-write + + + FCMD_QUAD + Set this bit to enable 4-bit-mode(4-bm) in CMD phase. + 8 + 1 + read-write + + + FCMD_OCT + Set this bit to enable 8-bit-mode(8-bm) in CMD phase. + 9 + 1 + read-write + + + FASTRD_MODE + This bit should be set when SPI_MEM_FREAD_QIO, SPI_MEM_FREAD_DIO, SPI_MEM_FREAD_QUAD or SPI_MEM_FREAD_DUAL is set. + 13 + 1 + read-write + + + FREAD_DUAL + In hardware 0x3B read operation, DIN phase apply 2 signals. 1: enable 0: disable. + 14 + 1 + read-write + + + Q_POL + The bit is used to set MISO line polarity, 1: high 0, low + 18 + 1 + read-write + + + D_POL + The bit is used to set MOSI line polarity, 1: high 0, low + 19 + 1 + read-write + + + FREAD_QUAD + In hardware 0x6B read operation, DIN phase apply 4 signals(4-bit-mode). 1: enable 0: disable. + 20 + 1 + read-write + + + WP + Write protect signal output when SPI is idle. 1: output high, 0: output low. + 21 + 1 + read-write + + + FREAD_DIO + In hardware 0xBB read operation, ADDR phase and DIN phase apply 2 signals(2-bit-mode). 1: enable 0: disable. + 23 + 1 + read-write + + + FREAD_QIO + In hardware 0xEB read operation, ADDR phase and DIN phase apply 4 signals(4-bit-mode). 1: enable 0: disable. + 24 + 1 + read-write + + + + + CTRL1 + SPI0 control 1 register. + 0xC + 0x20 + + + CLK_MODE + SPI Bus clock (SPI_CLK) mode bits. 0: SPI Bus clock (SPI_CLK) is off when CS inactive 1: SPI_CLK is delayed one cycle after SPI_CS inactive 2: SPI_CLK is delayed two cycles after SPI_CS inactive 3: SPI_CLK is always on. + 0 + 2 + read-write + + + RXFIFO_RST + SPI0 RX FIFO reset signal. Set this bit and clear it before SPI0 transfer starts. + 30 + 1 + read-write + + + + + CTRL2 + SPI0 control 2 register. + 0x10 + 0x20 + 0x00002C21 + + + CS_SETUP_TIME + (cycles-1) of PREP phase by SPI_CLK, which is the SPI_CS setup time. These bits are combined with SPI_MEM_CS_SETUP bit. + 0 + 5 + read-write + + + CS_HOLD_TIME + SPI Bus CS (SPI_CS) signal is delayed to inactive by SPI Bus clock (SPI_CLK), which is the SPI_CS hold time in non-ECC mode. These bits are combined with SPI_MEM_CS_HOLD bit. + 5 + 5 + read-write + + + ECC_CS_HOLD_TIME + SPI_MEM_CS_HOLD_TIME + SPI_MEM_ECC_CS_HOLD_TIME is the SPI_CS hold cycle in ECC mode when accessed flash. + 10 + 3 + read-write + + + ECC_SKIP_PAGE_CORNER + 1: MSPI skips page corner when accesses flash. 0: Not skip page corner when accesses flash. + 13 + 1 + read-write + + + ECC_16TO18_BYTE_EN + Set this bit to enable MSPI ECC 16 bytes data with 2 ECC bytes mode when accesses flash. + 14 + 1 + read-write + + + CS_HOLD_DELAY + These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to flash. tSHSL is (SPI_MEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles. + 25 + 6 + read-write + + + SYNC_RESET + The FSM will be reset. + 31 + 1 + read-write + + + + + CLOCK + SPI_CLK clock division register when SPI0 accesses to flash. + 0x14 + 0x20 + 0x00030103 + + + CLKCNT_L + It must equal to the value of SPI_MEM_CLKCNT_N. + 0 + 8 + read-write + + + CLKCNT_H + It must be a floor value of ((SPI_MEM_CLKCNT_N+1)/2-1). + 8 + 8 + read-write + + + CLKCNT_N + When SPI0 accesses flash, f_SPI_CLK = f_MSPI_CORE_CLK/(SPI_MEM_CLKCNT_N+1) + 16 + 8 + read-write + + + CLK_EQU_SYSCLK + When SPI0 accesses flash, set this bit in 1-division mode, f_SPI_CLK = f_MSPI_CORE_CLK. + 31 + 1 + read-write + + + + + USER + SPI0 user register. + 0x18 + 0x20 + + + CS_HOLD + Set this bit to keep SPI_CS low when MSPI is in DONE state. + 6 + 1 + read-write + + + CS_SETUP + Set this bit to keep SPI_CS low when MSPI is in PREP state. + 7 + 1 + read-write + + + CK_OUT_EDGE + This bit, combined with SPI_MEM_CK_IDLE_EDGE bit, is used to change the clock mode 0~3 of SPI_CLK. + 9 + 1 + read-write + + + USR_DUMMY_IDLE + SPI_CLK is disabled(No clock edges) in DUMMY phase when the bit is enable. + 26 + 1 + read-write + + + USR_DUMMY + This bit enable the DUMMY phase of an SPI transfer. + 29 + 1 + read-write + + + + + USER1 + SPI0 user1 register. + 0x1C + 0x20 + 0x5C000007 + + + USR_DUMMY_CYCLELEN + The SPI_CLK cycle length minus 1 of DUMMY phase. + 0 + 6 + read-write + + + USR_ADDR_BITLEN + The length in bits of ADDR phase. The register value shall be (bit_num-1). + 26 + 6 + read-write + + + + + USER2 + SPI0 user2 register. + 0x20 + 0x20 + 0x70000000 + + + USR_COMMAND_VALUE + The value of user defined(USR) command. + 0 + 16 + read-write + + + USR_COMMAND_BITLEN + The length in bits of CMD phase. The register value shall be (bit_num-1) + 28 + 4 + read-write + + + + + RD_STATUS + SPI0 read control register. + 0x2C + 0x20 + + + WB_MODE + Mode bits in the flash fast read mode it is combined with SPI_MEM_FASTRD_MODE bit. + 16 + 8 + read-write + + + + + EXT_ADDR + SPI0 extended address register. + 0x30 + 0x20 + + + EXT_ADDR + The register are the higher 32bits in the 64 bits address mode. + 0 + 32 + read-write + + + + + MISC + SPI0 misc register + 0x34 + 0x20 + + + FSUB_PIN + Flash is connected to SPI SUBPIN bus. + 7 + 1 + read-write + + + SSUB_PIN + Ext_RAM is connected to SPI SUBPIN bus. + 8 + 1 + read-write + + + CK_IDLE_EDGE + 1: SPI_CLK line is high when idle. 0: SPI_CLK line is low when idle + 9 + 1 + read-write + + + CS_KEEP_ACTIVE + SPI_CS line keep low when the bit is set. + 10 + 1 + read-write + + + + + CACHE_FCTRL + SPI0 external RAM bit mode control register. + 0x3C + 0x20 + + + CACHE_REQ_EN + Set this bit to enable Cache's access and SPI0's transfer. + 0 + 1 + read-write + + + CACHE_USR_CMD_4BYTE + Set this bit to enable SPI0 read flash with 32 bits address. The value of SPI_MEM_USR_ADDR_BITLEN should be 31. + 1 + 1 + read-write + + + CACHE_FLASH_USR_CMD + 1: The command value of SPI0 reads flash is SPI_MEM_USR_COMMAND_VALUE. 0: Hardware read command value, controlled by SPI_MEM_FREAD_QIO, SPI_MEM_FREAD_DIO, SPI_MEM_FREAD_QUAD, SPI_MEM_FREAD_DUAL and SPI_MEM_FASTRD_MODE bits. + 2 + 1 + read-write + + + FDIN_DUAL + When SPI0 accesses to flash, set this bit to enable 2-bm in DIN phase. + 3 + 1 + read-write + + + FDOUT_DUAL + When SPI0 accesses to flash, set this bit to enable 2-bm in DOUT phase. + 4 + 1 + read-write + + + FADDR_DUAL + When SPI0 accesses to flash, set this bit to enable 2-bm in ADDR phase. + 5 + 1 + read-write + + + FDIN_QUAD + When SPI0 accesses to flash, set this bit to enable 4-bm in DIN phase. + 6 + 1 + read-write + + + FDOUT_QUAD + When SPI0 accesses to flash, set this bit to enable 4-bm in DOUT phase. + 7 + 1 + read-write + + + FADDR_QUAD + When SPI0 accesses to flash, set this bit to enable 4-bm in ADDR phase. + 8 + 1 + read-write + + + + + CACHE_SCTRL + SPI0 external RAM control register + 0x40 + 0x20 + 0x0055C070 + + + CACHE_USR_SCMD_4BYTE + Set this bit to enable SPI0 read Ext_RAM with 32 bits address. The value of SPI_MEM_SRAM_ADDR_BITLEN should be 31. + 0 + 1 + read-write + + + USR_SRAM_DIO + Set the bit to enable 2-bm in all the phases of SPI0 Ext_RAM transfer. + 1 + 1 + read-write + + + USR_SRAM_QIO + Set the bit to enable QPI mode in all SPI0 Ext_RAM transfer. + 2 + 1 + read-write + + + USR_WR_SRAM_DUMMY + When SPI0 accesses to Ext_RAM, set this bit to enable DUMMY phase in write operations. + 3 + 1 + read-write + + + USR_RD_SRAM_DUMMY + When SPI0 accesses to Ext_RAM, set this bit to enable DUMMY phase in read operations. + 4 + 1 + read-write + + + CACHE_SRAM_USR_RCMD + 1: The command value of SPI0 read Ext_RAM is SPI_MEM_CACHE_SRAM_USR_WR_CMD_VALUE. 0: The value is 0x2. + 5 + 1 + read-write + + + SRAM_RDUMMY_CYCLELEN + When SPI0 accesses to Ext_RAM, it is the SPI_CLK cycles minus 1 of DUMMY phase in read data transfer. + 6 + 6 + read-write + + + SRAM_ADDR_BITLEN + When SPI0 accesses to Ext_RAM, it is the length in bits of ADDR phase. The register value shall be (bit_num-1). + 14 + 6 + read-write + + + CACHE_SRAM_USR_WCMD + 1: The command value of SPI0 write Ext_RAM is SPI_MEM_CACHE_SRAM_USR_RD_CMD_VALUE. 0: The value is 0x3. + 20 + 1 + read-write + + + SRAM_OCT + Set the bit to enable OPI mode in all SPI0 Ext_RAM transfer. + 21 + 1 + read-write + + + SRAM_WDUMMY_CYCLELEN + When SPI0 accesses to Ext_RAM, it is the SPI_CLK cycles minus 1 of DUMMY phase in write data transfer. + 22 + 6 + read-write + + + + + SRAM_CMD + SPI0 external RAM mode control register + 0x44 + 0x20 + + + SCLK_MODE + SPI_CLK mode bits when SPI0 accesses to Ext_RAM. 0: SPI_CLK is off when CS inactive 1: SPI_CLK is delayed one cycle after CS inactive 2: SPI_CLK is delayed two cycles after CS inactive 3: SPI_CLK is always on. + 0 + 2 + read-write + + + SWB_MODE + Mode bits when SPI0 accesses to Ext_RAM. + 2 + 8 + read-write + + + SDIN_DUAL + When SPI0 accesses to Ext_RAM, set this bit to enable 2-bm in DIN phase. + 10 + 1 + read-write + + + SDOUT_DUAL + When SPI0 accesses to Ext_RAM, set this bit to enable 2-bm in DOUT phase. + 11 + 1 + read-write + + + SADDR_DUAL + When SPI0 accesses to Ext_RAM, set this bit to enable 2-bm in ADDR phase. + 12 + 1 + read-write + + + SCMD_DUAL + When SPI0 accesses to Ext_RAM, set this bit to enable 2-bm in CMD phase. + 13 + 1 + read-write + + + SDIN_QUAD + When SPI0 accesses to Ext_RAM, set this bit to enable 4-bm in DIN phase. + 14 + 1 + read-write + + + SDOUT_QUAD + When SPI0 accesses to Ext_RAM, set this bit to enable 4-bm in DOUT phase. + 15 + 1 + read-write + + + SADDR_QUAD + When SPI0 accesses to Ext_RAM, set this bit to enable 4-bm in ADDR phase. + 16 + 1 + read-write + + + SCMD_QUAD + When SPI0 accesses to Ext_RAM, set this bit to enable 4-bm in CMD phase. + 17 + 1 + read-write + + + SDIN_OCT + When SPI0 accesses to Ext_RAM, set this bit to enable 8-bm in DIN phase. + 18 + 1 + read-write + + + SDOUT_OCT + When SPI0 accesses to Ext_RAM, set this bit to enable 8-bm in DOUT phase. + 19 + 1 + read-write + + + SADDR_OCT + When SPI0 accesses to Ext_RAM, set this bit to enable 8-bm in ADDR phase. + 20 + 1 + read-write + + + SCMD_OCT + When SPI0 accesses to Ext_RAM, set this bit to enable 8-bm in CMD phase. + 21 + 1 + read-write + + + SDUMMY_OUT + When SPI0 accesses to Ext_RAM, in the DUMMY phase the signal level of SPI bus is output by the SPI0 controller. + 22 + 1 + read-write + + + + + SRAM_DRD_CMD + SPI0 external RAM DDR read command control register + 0x48 + 0x20 + + + CACHE_SRAM_USR_RD_CMD_VALUE + When SPI0 reads Ext_RAM, it is the command value of CMD phase. + 0 + 16 + read-write + + + CACHE_SRAM_USR_RD_CMD_BITLEN + When SPI0 reads Ext_RAM, it is the length in bits of CMD phase. The register value shall be (bit_num-1). + 28 + 4 + read-write + + + + + SRAM_DWR_CMD + SPI0 external RAM DDR write command control register + 0x4C + 0x20 + + + CACHE_SRAM_USR_WR_CMD_VALUE + When SPI0 writes Ext_RAM, it is the command value of CMD phase. + 0 + 16 + read-write + + + CACHE_SRAM_USR_WR_CMD_BITLEN + When SPI0 writes Ext_RAM, it is the length in bits of CMD phase. The register value shall be (bit_num-1). + 28 + 4 + read-write + + + + + SRAM_CLK + SPI_CLK clock division register when SPI0 accesses to Ext_RAM. + 0x50 + 0x20 + 0x00030103 + + + SCLKCNT_L + It must equal to the value of SPI_MEM_SCLKCNT_N. + 0 + 8 + read-write + + + SCLKCNT_H + It must be a floor value of ((SPI_MEM_SCLKCNT_N+1)/2-1). + 8 + 8 + read-write + + + SCLKCNT_N + When SPI0 accesses to Ext_RAM, f_SPI_CLK = f_MSPI_CORE_CLK/(SPI_MEM_SCLKCNT_N+1) + 16 + 8 + read-write + + + SCLK_EQU_SYSCLK + When SPI0 accesses to Ext_RAM, set this bit in 1-division mode, f_SPI_CLK = f_MSPI_CORE_CLK. + 31 + 1 + read-write + + + + + FSM + SPI0 state machine(FSM) status register. + 0x54 + 0x20 + + + ST + The status of SPI0 state machine. 0: idle state(IDLE), 1: preparation state(PREP), 2: send command state(CMD), 3: send address state(ADDR), 4: red data state(DIN), 5:write data state(DOUT), 6: wait state(DUMMY), 7: done state(DONE). + 0 + 3 + read-only + + + + + TIMING_CALI + SPI0 timing compensation register when accesses to flash. + 0xA8 + 0x20 + + + TIMING_CLK_ENA + Set this bit to power on HCLK. When PLL is powered on, the frequency of HCLK equals to that of PLL. Otherwise, the frequency equals to that of XTAL. + 0 + 1 + read-write + + + TIMING_CALI + Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operations. + 1 + 1 + read-write + + + EXTRA_DUMMY_CYCLELEN + Extra SPI_CLK cycles added in DUMMY phase for timing compensation, when SPI0 accesses to flash. Active when SPI_MEM_TIMING_CALI bit is set. + 2 + 3 + read-write + + + + + DIN_MODE + MSPI input timing delay mode control register when accesses to flash. + 0xAC + 0x20 + + + DIN0_MODE + SPI_D input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN0_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN0_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN0_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN0_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN0_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 0 + 3 + read-write + + + DIN1_MODE + SPI_Q input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN3_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN3_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN3_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN3_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN3_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 3 + 3 + read-write + + + DIN2_MODE + SPI_WP input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN6_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN6_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN6_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN6_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN6_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 6 + 3 + read-write + + + DIN3_MODE + SPI_HD input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN9_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN9_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN9_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN9_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN9_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 9 + 3 + read-write + + + DIN4_MODE + SPI_IO4 input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN12_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN12_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN12_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN12_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN12_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 12 + 3 + read-write + + + DIN5_MODE + SPI_IO5 input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN15_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN15_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN15_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN15_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN15_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 15 + 3 + read-write + + + DIN6_MODE + SPI_IO6 input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN18_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN18_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN18_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN18_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN18_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 18 + 3 + read-write + + + DIN7_MODE + SPI_IO7 input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DIN21_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DIN21_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DIN21_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DIN21_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DIN21_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 21 + 3 + read-write + + + DINS_MODE + SPI_DQS input delay mode. 0: No delay. 1: Delay for (SPI_MEM_DINS_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_MEM_DINS_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_MEM_DINS_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_MEM_DINS_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_MEM_DINS_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 24 + 3 + read-write + + + + + DIN_NUM + MSPI input timing delay number control register when accesses to flash. + 0xB0 + 0x20 + + + DIN0_NUM + SPI_D input delay number. + 0 + 2 + read-write + + + DIN1_NUM + SPI_Q input delay number. + 2 + 2 + read-write + + + DIN2_NUM + SPI_WP input delay number. + 4 + 2 + read-write + + + DIN3_NUM + SPI_HD input delay number. + 6 + 2 + read-write + + + DIN4_NUM + SPI_IO4 input delay number. + 8 + 2 + read-write + + + DIN5_NUM + SPI_IO5 input delay number. + 10 + 2 + read-write + + + DIN6_NUM + SPI_IO6 input delay number. + 12 + 2 + read-write + + + DIN7_NUM + SPI_IO7 input delay number. + 14 + 2 + read-write + + + DINS_NUM + SPI_DQS input delay number. + 16 + 2 + read-write + + + + + DOUT_MODE + MSPI output timing delay mode control register when accesses to flash. + 0xB4 + 0x20 + + + DOUT0_MODE + SPI_D output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 0 + 1 + read-write + + + DOUT1_MODE + SPI_Q output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 1 + 1 + read-write + + + DOUT2_MODE + SPI_WP output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 2 + 1 + read-write + + + DOUT3_MODE + SPI_HD output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 3 + 1 + read-write + + + DOUT4_MODE + SPI_IO4 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 4 + 1 + read-write + + + DOUT5_MODE + SPI_IO5 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 5 + 1 + read-write + + + DOUT6_MODE + SPI_IO6 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 6 + 1 + read-write + + + DOUT7_MODE + SPI_IO7 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 7 + 1 + read-write + + + DOUTS_MODE + SPI_DQS output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 8 + 1 + read-write + + + + + SPI_SMEM_TIMING_CALI + SPI0 Ext_RAM timing compensation register. + 0xBC + 0x20 + + + SPI_SMEM_TIMING_CLK_ENA + Set this bit to power on HCLK. When PLL is powered on, the frequency of HCLK equals to that of PLL. Otherwise, the frequency equals to that of XTAL. + 0 + 1 + read-write + + + SPI_SMEM_TIMING_CALI + Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operations. + 1 + 1 + read-write + + + SPI_SMEM_EXTRA_DUMMY_CYCLELEN + Extra SPI_CLK cycles added in DUMMY phase for timing compensation, when SPI0 accesses to Ext_RAM. Active when SPI_SMEM_TIMING_CALI bit is set. + 2 + 3 + read-write + + + + + SPI_SMEM_DIN_MODE + MSPI input timing delay mode control register when accesses to Ext_RAM. + 0xC0 + 0x20 + + + SPI_SMEM_DIN0_MODE + SPI_D input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN0_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN0_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN0_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN0_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN0_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 0 + 3 + read-write + + + SPI_SMEM_DIN1_MODE + SPI_Q input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN3_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN3_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN3_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN3_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN3_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 3 + 3 + read-write + + + SPI_SMEM_DIN2_MODE + SPI_WP input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN6_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN6_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN6_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN6_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN6_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 6 + 3 + read-write + + + SPI_SMEM_DIN3_MODE + SPI_HD input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN9_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN9_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN9_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN9_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN9_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 9 + 3 + read-write + + + SPI_SMEM_DIN4_MODE + SPI_IO4 input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN12_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN12_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN12_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN12_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN12_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 12 + 3 + read-write + + + SPI_SMEM_DIN5_MODE + SPI_IO5 input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN15_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN15_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN15_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN15_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN15_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 15 + 3 + read-write + + + SPI_SMEM_DIN6_MODE + SPI_IO6 input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN18_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN18_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN18_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN18_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN18_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 18 + 3 + read-write + + + SPI_SMEM_DIN7_MODE + SPI_IO7 input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DIN21_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DIN21_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DIN21_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DIN21_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DIN21_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 21 + 3 + read-write + + + SPI_SMEM_DINS_MODE + SPI_DQS input delay mode. 0: No delay. 1: Delay for (SPI_SMEM_DINS_NUM+1) cycles at MSPI_CORE_CLK negative edge. 2: Delay for (SPI_SMEM_DINS_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK positive edge. 3: Delay for (SPI_SMEM_DINS_NUM+1) cycles at HCLK positive edge and one cycle at MSPI_CORE_CLK negative edge. 4: Delay for (SPI_SMEM_DINS_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK positive edge. 5: Delay for (SPI_SMEM_DINS_NUM+1) cycles at HCLK negative edge and one cycle at MSPI_CORE_CLK negative edge. + 24 + 3 + read-write + + + + + SPI_SMEM_DIN_NUM + MSPI input timing delay number control register when accesses to Ext_RAM. + 0xC4 + 0x20 + + + SPI_SMEM_DIN0_NUM + SPI_D input delay number. + 0 + 2 + read-write + + + SPI_SMEM_DIN1_NUM + SPI_Q input delay number. + 2 + 2 + read-write + + + SPI_SMEM_DIN2_NUM + SPI_WP input delay number. + 4 + 2 + read-write + + + SPI_SMEM_DIN3_NUM + SPI_HD input delay number. + 6 + 2 + read-write + + + SPI_SMEM_DIN4_NUM + SPI_IO4 input delay number. + 8 + 2 + read-write + + + SPI_SMEM_DIN5_NUM + SPI_IO5 input delay number. + 10 + 2 + read-write + + + SPI_SMEM_DIN6_NUM + SPI_IO6 input delay number. + 12 + 2 + read-write + + + SPI_SMEM_DIN7_NUM + SPI_IO7 input delay number. + 14 + 2 + read-write + + + SPI_SMEM_DINS_NUM + SPI_DQS input delay number. + 16 + 2 + read-write + + + + + SPI_SMEM_DOUT_MODE + MSPI output timing delay mode control register when accesses to Ext_RAM. + 0xC8 + 0x20 + + + SPI_SMEM_DOUT0_MODE + SPI_D output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 0 + 1 + read-write + + + SPI_SMEM_DOUT1_MODE + SPI_Q output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 1 + 1 + read-write + + + SPI_SMEM_DOUT2_MODE + SPI_WP output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 2 + 1 + read-write + + + SPI_SMEM_DOUT3_MODE + SPI_HD output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 3 + 1 + read-write + + + SPI_SMEM_DOUT4_MODE + SPI_IO4 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 4 + 1 + read-write + + + SPI_SMEM_DOUT5_MODE + SPI_IO5 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 5 + 1 + read-write + + + SPI_SMEM_DOUT6_MODE + SPI_IO6 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 6 + 1 + read-write + + + SPI_SMEM_DOUT7_MODE + SPI_IO7 output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 7 + 1 + read-write + + + SPI_SMEM_DOUTS_MODE + SPI_DQS output delay mode. 0: No delay. 1: Delay one cycle at MSPI_CORE_CLK negative edge. + 8 + 1 + read-write + + + + + ECC_CTRL + MSPI ECC control register + 0xCC + 0x20 + 0x0000000A + + + ECC_ERR_INT_NUM + Set the error times of MSPI ECC read to generate MSPI SPI_MEM_ECC_ERR_INT interrupt. + 0 + 8 + read-write + + + SPI_FMEM_ECC_ERR_INT_EN + Set this bit to calculate the error times of MSPI ECC read when accesses to flash. + 8 + 1 + read-write + + + + + ECC_ERR_ADDR + MSPI ECC error address register + 0xD0 + 0x20 + + + ECC_ERR_ADDR + These bits show the first MSPI ECC error address when SPI_FMEM_ECC_ERR_INT_EN/SPI_SMEM_ECC_ERR_INT_EN is set and accessed to flash/Ext_RAM, including ECC byte error and data error. It is cleared by when SPI_MEM_ECC_ERR_INT_CLR bit is set. + 0 + 32 + read-only + + + + + ECC_ERR_BIT + MSPI ECC error bits register + 0xD4 + 0x20 + + + ECC_DATA_ERR_BIT + It records the first ECC data error bit number when SPI_FMEM_ECC_ERR_INT_EN/SPI_SMEM_ECC_ERR_INT_EN is set and accessed to flash/Ext_RAM. The value ranges from 0~127, corresponding to the bit number in 16 data bytes. It is cleared by SPI_MEM_ECC_ERR_INT_CLR bit. + 6 + 7 + read-only + + + ECC_CHK_ERR_BIT + When SPI_MEM_ECC_BYTE_ERR is set, these bits show the error bit number of ECC byte. + 13 + 3 + read-only + + + ECC_BYTE_ERR + It records the first ECC byte error when SPI_FMEM_ECC_ERR_INT_EN/SPI_SMEM_ECC_ERR_INT_EN is set and accessed to flash/Ext_RAM. It is cleared by SPI_MEM_ECC_ERR_INT_CLR bit. + 16 + 1 + read-only + + + ECC_ERR_CNT + This bits show the error times of MSPI ECC read, including ECC byte error and data byte error. It is cleared by when SPI_MEM_ECC_ERR_INT_CLR bit is set. + 17 + 8 + read-only + + + + + SPI_SMEM_AC + MSPI external RAM ECC and SPI CS timing control register + 0xDC + 0x20 + 0x0000B084 + + + SPI_SMEM_CS_SETUP + Set this bit to keep SPI_CS low when MSPI is in PREP state. + 0 + 1 + read-write + + + SPI_SMEM_CS_HOLD + Set this bit to keep SPI_CS low when MSPI is in DONE state. + 1 + 1 + read-write + + + SPI_SMEM_CS_SETUP_TIME + (cycles-1) of PREP phase by SPI_CLK, which is the SPI_CS setup time. These bits are combined with SPI_MEM_CS_SETUP bit. + 2 + 5 + read-write + + + SPI_SMEM_CS_HOLD_TIME + SPI Bus CS (SPI_CS) signal is delayed to inactive by SPI Bus clock (SPI_CLK), which is the SPI_CS hold time in non-ECC mode. These bits are combined with SPI_MEM_CS_HOLD bit. + 7 + 5 + read-write + + + SPI_SMEM_ECC_CS_HOLD_TIME + SPI_SMEM_CS_HOLD_TIME + SPI_SMEM_ECC_CS_HOLD_TIME is the MSPI CS hold cycles in ECC mode when accesses to external RAM. + 12 + 3 + read-write + + + SPI_SMEM_ECC_SKIP_PAGE_CORNER + 1: MSPI skips page corner when accesses to external RAM. 0: Not skip page corner when accesses to external RAM. + 15 + 1 + read-write + + + SPI_SMEM_ECC_16TO18_BYTE_EN + Set this bit to enable MSPI ECC 16 bytes data with 2 ECC bytes mode when accesses to external RAM. + 16 + 1 + read-write + + + SPI_SMEM_ECC_ERR_INT_EN + Set this bit to calculate the error times of MSPI ECC read when accesses to external RAM. + 24 + 1 + read-write + + + SPI_SMEM_CS_HOLD_DELAY + These bits are used to set the minimum CS high time tSHSL between SPI burst transfer when accesses to external RAM. tSHSL is (SPI_SMEM_CS_HOLD_DELAY[5:0] + 1) MSPI core clock cycles. + 25 + 6 + read-write + + + + + DDR + SPI0 flash DDR mode control register + 0xE0 + 0x20 + 0x00003020 + + + SPI_FMEM_DDR_EN + 1: in ddr mode, 0 in sdr mode + 0 + 1 + read-write + + + SPI_FMEM_VAR_DUMMY + Set the bit to enable variable dummy cycle in DDR mode. + 1 + 1 + read-write + + + SPI_FMEM_DDR_RDAT_SWP + Set the bit to reorder RX data of the word in DDR mode. + 2 + 1 + read-write + + + SPI_FMEM_DDR_WDAT_SWP + Set the bit to swap TX data of a word in DDR mode. + 3 + 1 + read-write + + + SPI_FMEM_DDR_CMD_DIS + the bit is used to disable dual edge in CMD phase when ddr mode. + 4 + 1 + read-write + + + SPI_FMEM_OUTMINBYTELEN + It is the minimum output data length in the panda device. + 5 + 7 + read-write + + + SPI_FMEM_TX_DDR_MSK_EN + Set this bit to mask the first or the last byte in MSPI ECC DDR write mode, when accesses to flash. + 12 + 1 + read-write + + + SPI_FMEM_RX_DDR_MSK_EN + Set this bit to mask the first or the last byte in MSPI ECC DDR read mode, when accesses to flash. + 13 + 1 + read-write + + + SPI_FMEM_USR_DDR_DQS_THD + The delay number of data strobe which from memory based on SPI_CLK. + 14 + 7 + read-write + + + SPI_FMEM_DDR_DQS_LOOP + 1: Use internal signal as data strobe, the strobe can not be delayed by input timing module. 0: Use input SPI_DQS signal from PAD as data strobe, the strobe can be delayed by input timing module + 21 + 1 + read-write + + + SPI_FMEM_DDR_DQS_LOOP_MODE + When SPI_FMEM_DDR_DQS_LOOP and SPI_FMEM_DDR_EN are set, 1: Use internal SPI_CLK as data strobe. 0: Use internal ~SPI_CLK as data strobe. Otherwise this bit is not active. + 22 + 1 + read-write + + + SPI_FMEM_CLK_DIFF_EN + Set this bit to enable the differential SPI_CLK#. + 24 + 1 + read-write + + + SPI_FMEM_HYPERBUS_MODE + Set this bit to enable the SPI HyperBus mode. + 25 + 1 + read-write + + + SPI_FMEM_DQS_CA_IN + Set this bit to enable the input of SPI_DQS signal in SPI phases of CMD and ADDR. + 26 + 1 + read-write + + + SPI_FMEM_HYPERBUS_DUMMY_2X + Set this bit to enable the vary dummy function in SPI HyperBus mode, when SPI0 accesses to flash or SPI1 accesses flash or sram. + 27 + 1 + read-write + + + SPI_FMEM_CLK_DIFF_INV + Set this bit to invert SPI_DIFF when accesses to flash. . + 28 + 1 + read-write + + + SPI_FMEM_OCTA_RAM_ADDR + Set this bit to enable octa_ram address out when accesses to flash, which means ADDR_OUT[31:0] = {spi_usr_addr_value[25:4], 6'd0, spi_usr_addr_value[3:1], 1'b0}. + 29 + 1 + read-write + + + SPI_FMEM_HYPERBUS_CA + Set this bit to enable HyperRAM address out when accesses to flash, which means ADDR_OUT[31:0] = {spi_usr_addr_value[19:4], 13'd0, spi_usr_addr_value[3:1]}. + 30 + 1 + read-write + + + + + SPI_SMEM_DDR + SPI0 external RAM DDR mode control register + 0xE4 + 0x20 + 0x00003020 + + + EN + 1: in ddr mode, 0 in sdr mode + 0 + 1 + read-write + + + SPI_SMEM_VAR_DUMMY + Set the bit to enable variable dummy cycle in spi ddr mode. + 1 + 1 + read-write + + + RDAT_SWP + Set the bit to reorder rx data of the word in spi ddr mode. + 2 + 1 + read-write + + + WDAT_SWP + Set the bit to reorder tx data of the word in spi ddr mode. + 3 + 1 + read-write + + + CMD_DIS + the bit is used to disable dual edge in CMD phase when ddr mode. + 4 + 1 + read-write + + + SPI_SMEM_OUTMINBYTELEN + It is the minimum output data length in the ddr psram. + 5 + 7 + read-write + + + SPI_SMEM_TX_DDR_MSK_EN + Set this bit to mask the first or the last byte in MSPI ECC DDR write mode, when accesses to external RAM. + 12 + 1 + read-write + + + SPI_SMEM_RX_DDR_MSK_EN + Set this bit to mask the first or the last byte in MSPI ECC DDR read mode, when accesses to external RAM. + 13 + 1 + read-write + + + SPI_SMEM_USR_DDR_DQS_THD + The delay number of data strobe which from memory based on SPI_CLK. + 14 + 7 + read-write + + + DQS_LOOP + 1: Use internal signal as data strobe, the strobe can not be delayed by input timing module. 0: Use input SPI_DQS signal from PAD as data strobe, the strobe can be delayed by input timing module + 21 + 1 + read-write + + + DQS_LOOP_MODE + When SPI_SMEM_DDR_DQS_LOOP and SPI_SMEM_DDR_EN are set, 1: Use internal SPI_CLK as data strobe. 0: Use internal ~SPI_CLK as data strobe. Otherwise this bit is not active. + 22 + 1 + read-write + + + SPI_SMEM_CLK_DIFF_EN + Set this bit to enable the differential SPI_CLK#. + 24 + 1 + read-write + + + SPI_SMEM_HYPERBUS_MODE + Set this bit to enable the SPI HyperBus mode. + 25 + 1 + read-write + + + SPI_SMEM_DQS_CA_IN + Set this bit to enable the input of SPI_DQS signal in SPI phases of CMD and ADDR. + 26 + 1 + read-write + + + SPI_SMEM_HYPERBUS_DUMMY_2X + Set this bit to enable the vary dummy function in SPI HyperBus mode, when SPI0 accesses to flash or SPI1 accesses flash or sram. + 27 + 1 + read-write + + + SPI_SMEM_CLK_DIFF_INV + Set this bit to invert SPI_DIFF when accesses to external RAM. . + 28 + 1 + read-write + + + SPI_SMEM_OCTA_RAM_ADDR + Set this bit to enable octa_ram address out when accesses to external RAM, which means ADDR_OUT[31:0] = {spi_usr_addr_value[25:4], 6'd0, spi_usr_addr_value[3:1], 1'b0}. + 29 + 1 + read-write + + + SPI_SMEM_HYPERBUS_CA + Set this bit to enable HyperRAM address out when accesses to external RAM, which means ADDR_OUT[31:0] = {spi_usr_addr_value[19:4], 13'd0, spi_usr_addr_value[3:1]}. + 30 + 1 + read-write + + + + + CLOCK_GATE + SPI0 clk_gate register + 0xE8 + 0x20 + 0x00000001 + + + CLK_EN + Register clock gate enable signal. 1: Enable. 0: Disable. + 0 + 1 + read-write + + + + + CORE_CLK_SEL + SPI0 module clock select register + 0xEC + 0x20 + + + CORE_CLK_SEL + When the digital system clock selects PLL clock and the frequency of PLL clock is 480MHz, the value of SPI_MEM_CORE_CLK_SEL: 0: SPI0/1 module clock (MSPI_CORE_CLK) is 80MHz. 1: MSPI_CORE_CLK is 120MHz. 2: MSPI_CORE_CLK is 160MHz. 3: MSPI_CORE_CLK is 240MHz. When the digital system clock selects PLL clock and the frequency of PLL clock is 320MHz, the value of SPI_MEM_CORE_CLK_SEL: 0: MSPI_CORE_CLK is 80MHz. 1: MSPI_CORE_CLK is 80MHz. 2: MSPI_CORE_CLK 160MHz. 3: Not used. + 0 + 2 + read-write + + + + + INT_ENA + SPI1 interrupt enable register + 0xF0 + 0x20 + + + TOTAL_TRANS_END_INT_ENA + The enable bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + 2 + 1 + read-write + + + ECC_ERR_INT_ENA + The enable bit for SPI_MEM_ECC_ERR_INT interrupt. + 4 + 1 + read-write + + + + + INT_CLR + SPI1 interrupt clear register + 0xF4 + 0x20 + + + TOTAL_TRANS_END_INT_CLR + The clear bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + 2 + 1 + write-only + + + ECC_ERR_INT_CLR + The clear bit for SPI_MEM_ECC_ERR_INT interrupt. SPI_MEM_ECC_ERR_ADDR and SPI_MEM_ECC_ERR_CNT will be cleared by the pulse of this bit. + 4 + 1 + write-only + + + + + INT_RAW + SPI1 interrupt raw register + 0xF8 + 0x20 + + + TOTAL_TRANS_END_INT_RAW + The raw bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. 1: Triggered when SPI1 transfer is done and flash is already idle. When WRSR/PP/SE/BE/CE is sent and PES/PER command is sent, this bit is set when WRSR/PP/SE/BE/CE is success. 0: Others. + 2 + 1 + read-write + + + ECC_ERR_INT_RAW + The raw bit for SPI_MEM_ECC_ERR_INT interrupt. When APB_CTRL_FECC_ERR_INT_EN is set and APB_CTRL_SECC_ERR_INT_EN is cleared, this bit is triggered when the error times of SPI0/1 ECC read flash are equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN is cleared and APB_CTRL_SECC_ERR_INT_EN is set, this bit is triggered when the error times of SPI0/1 ECC read external RAM are equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN and APB_CTRL_SECC_ERR_INT_EN are set, this bit is triggered when the total error times of SPI0/1 ECC read external RAM and flash are equal or bigger than APB_CTRL_ECC_ERR_INT_NUM. When APB_CTRL_FECC_ERR_INT_EN and APB_CTRL_SECC_ERR_INT_EN are cleared, this bit will not be triggered. + 4 + 1 + read-write + + + + + INT_ST + SPI1 interrupt status register + 0xFC + 0x20 + + + TOTAL_TRANS_END_INT_ST + The status bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + 2 + 1 + read-only + + + ECC_ERR_INT_ST + The status bit for SPI_MEM_ECC_ERR_INT interrupt. + 4 + 1 + read-only + + + + + DATE + SPI0 version control register + 0x3FC + 0x20 + 0x02101040 + + + SPI_SMEM_SPICLK_FUN_DRV + The driver of SPI_CLK PAD is controlled by the bits SPI_SMEM_SPICLK_FUN_DRV[1:0] when the bit SPI_SPICLK_PAD_DRV_CTL_EN is set and MSPI accesses to external RAM. + 0 + 2 + read-write + + + SPI_FMEM_SPICLK_FUN_DRV + The driver of SPI_CLK PAD is controlled by the bits SPI_FMEM_SPICLK_FUN_DRV[1:0] when the bit SPI_SPICLK_PAD_DRV_CTL_EN is set and MSPI accesses to flash. + 2 + 2 + read-write + + + SPI_SPICLK_PAD_DRV_CTL_EN + SPI_CLK PAD driver control signal. 1: The driver of SPI_CLK PAD is controlled by the bits SPI_FMEM_SPICLK_FUN_DRV[1:0] and SPI_SMEM_SPICLK_FUN_DRV[1:0]. 0: The driver of SPI_CLK PAD is controlled by the bits IO_MUX_FUNC_DRV[1:0] of SPICLK PAD. + 4 + 1 + read-write + + + DATE + SPI register version. + 5 + 23 + read-write + + + + + + + SPI1 + SPI (Serial Peripheral Interface) Controller 1 + SPI1 + 0x60002000 + + 0x0 + 0xB4 + registers + + + SPI1 + 20 + + + + CMD + SPI1 memory command register + 0x0 + 0x20 + + + FLASH_PE + In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with SPI_MEM_USR bit. The bit will be cleared once the operation done.1: enable 0: disable. + 17 + 1 + read-write + + + USR + User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 18 + 1 + read-write + + + FLASH_HPM + Drive Flash into high performance mode. The bit will be cleared once the operation done.1: enable 0: disable. + 19 + 1 + read-write + + + FLASH_RES + This bit combined with SPI_MEM_RESANDRES bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable. + 20 + 1 + read-write + + + FLASH_DP + Drive Flash into power down. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 21 + 1 + read-write + + + FLASH_CE + Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 22 + 1 + read-write + + + FLASH_BE + Block erase enable(32KB) . Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 23 + 1 + read-write + + + FLASH_SE + Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 24 + 1 + read-write + + + FLASH_PP + Page program enable(1 byte ~64 bytes data to be programmed). Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable. + 25 + 1 + read-write + + + FLASH_WRSR + Write status register enable. Write status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 26 + 1 + read-write + + + FLASH_RDSR + Read status register-1. Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 27 + 1 + read-write + + + FLASH_RDID + Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + 28 + 1 + read-write + + + FLASH_WRDI + Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + 29 + 1 + read-write + + + FLASH_WREN + Write flash enable. Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + 30 + 1 + read-write + + + FLASH_READ + Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + 31 + 1 + read-write + + + + + ADDR + SPI1 address register + 0x4 + 0x20 + + + USR_ADDR_VALUE + In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer. + 0 + 32 + read-write + + + + + CTRL + SPI1 control register + 0x8 + 0x20 + 0x002CA000 + + + FDUMMY_OUT + In the DUMMY phase the signal level of SPI bus is output by the SPI0 controller. + 3 + 1 + read-write + + + FDOUT_OCT + Set this bit to enable 8-bit-mode(8-bm) in DOUT phase. + 4 + 1 + read-write + + + FDIN_OCT + Set this bit to enable 8-bit-mode(8-bm) in DIN phase. + 5 + 1 + read-write + + + FADDR_OCT + Set this bit to enable 8-bit-mode(8-bm) in ADDR phase. + 6 + 1 + read-write + + + FCMD_DUAL + Set this bit to enable 2-bit-mode(2-bm) in CMD phase. + 7 + 1 + read-write + + + FCMD_QUAD + Set this bit to enable 4-bit-mode(4-bm) in CMD phase. + 8 + 1 + read-write + + + FCMD_OCT + Set this bit to enable 8-bit-mode(8-bm) in CMD phase. + 9 + 1 + read-write + + + FCS_CRC_EN + For SPI1, initialize crc32 module before writing encrypted data to flash. Active low. + 10 + 1 + read-write + + + TX_CRC_EN + For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable + 11 + 1 + read-write + + + FASTRD_MODE + This bit should be set when SPI_MEM_FREAD_QIO, SPI_MEM_FREAD_DIO, SPI_MEM_FREAD_QUAD or SPI_MEM_FREAD_DUAL is set. + 13 + 1 + read-write + + + FREAD_DUAL + In hardware 0x3B read operation, DIN phase apply 2 signals. 1: enable 0: disable. + 14 + 1 + read-write + + + RESANDRES + The Device ID is read out to SPI_MEM_RD_STATUS register, this bit combine with spi_mem_flash_res bit. 1: enable 0: disable. + 15 + 1 + read-write + + + Q_POL + The bit is used to set MISO line polarity, 1: high 0, low + 18 + 1 + read-write + + + D_POL + The bit is used to set MOSI line polarity, 1: high 0, low + 19 + 1 + read-write + + + FREAD_QUAD + In hardware 0x6B read operation, DIN phase apply 4 signals(4-bit-mode). 1: enable 0: disable. + 20 + 1 + read-write + + + WP + Write protect signal output when SPI is idle. 1: output high, 0: output low. + 21 + 1 + read-write + + + WRSR_2B + Two bytes data will be written to status register when it is set. 1: enable 0: disable. + 22 + 1 + read-write + + + FREAD_DIO + In hardware 0xBB read operation, ADDR phase and DIN phase apply 2 signals(2-bit-mode). 1: enable 0: disable. + 23 + 1 + read-write + + + FREAD_QIO + In hardware 0xEB read operation, ADDR phase and DIN phase apply 4 signals(4-bit-mode). 1: enable 0: disable. + 24 + 1 + read-write + + + + + CTRL1 + SPI1 control1 register + 0xC + 0x20 + 0x00000FFC + + + CLK_MODE + SPI Bus clock (SPI_CLK) mode bits. 0: SPI Bus clock (SPI_CLK) is off when CS inactive 1: SPI_CLK is delayed one cycle after SPI_CS inactive 2: SPI_CLK is delayed two cycles after SPI_CS inactive 3: SPI_CLK is always on. + 0 + 2 + read-write + + + CS_HOLD_DLY_RES + After RES/DP/HPM/PES/PER command is sent, SPI1 may waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or * 256) SPI_CLK cycles. + 2 + 10 + read-write + + + + + CTRL2 + SPI1 control2 register + 0x10 + 0x20 + + + SYNC_RESET + The FSM will be reset. + 31 + 1 + read-write + + + + + CLOCK + SPI_CLK clock division register when SPI1 accesses to flash or Ext_RAM. + 0x14 + 0x20 + 0x00030103 + + + CLKCNT_L + It must equal to the value of SPI_MEM_CLKCNT_N. + 0 + 8 + read-write + + + CLKCNT_H + It must be a floor value of ((SPI_MEM_CLKCNT_N+1)/2-1). + 8 + 8 + read-write + + + CLKCNT_N + When SPI1 accesses to flash or Ext_RAM, f_SPI_CLK = f_MSPI_CORE_CLK/(SPI_MEM_CLKCNT_N+1) + 16 + 8 + read-write + + + CLK_EQU_SYSCLK + When SPI1 access to flash or Ext_RAM, set this bit in 1-division mode, f_SPI_CLK = f_MSPI_CORE_CLK. + 31 + 1 + read-write + + + + + USER + SPI1 user register. + 0x18 + 0x20 + 0x80000000 + + + CK_OUT_EDGE + This bit, combined with SPI_MEM_CK_IDLE_EDGE bit, is used to change the clock mode 0~3 of SPI_CLK. + 9 + 1 + read-write + + + FWRITE_DUAL + Set this bit to enable 2-bm in DOUT phase in SPI1 write operation. + 12 + 1 + read-write + + + FWRITE_QUAD + Set this bit to enable 4-bm in DOUT phase in SPI1 write operation. + 13 + 1 + read-write + + + FWRITE_DIO + Set this bit to enable 2-bm in ADDR and DOUT phase in SPI1 write operation. + 14 + 1 + read-write + + + FWRITE_QIO + Set this bit to enable 4-bit-mode(4-bm) in ADDR and DOUT phase in SPI1 write operation. + 15 + 1 + read-write + + + USR_MISO_HIGHPART + DIN phase only access to high-part of the buffer SPI_MEM_W8_REG~SPI_MEM_W15_REG. 1: enable 0: disable. + 24 + 1 + read-write + + + USR_MOSI_HIGHPART + DOUT phase only access to high-part of the buffer SPI_MEM_W8_REG~SPI_MEM_W15_REG. 1: enable 0: disable. + 25 + 1 + read-write + + + USR_DUMMY_IDLE + SPI_CLK is disabled(No clock edges) in DUMMY phase when the bit is enable. + 26 + 1 + read-write + + + USR_MOSI + Set this bit to enable the DOUT phase of an write-data operation. + 27 + 1 + read-write + + + USR_MISO + Set this bit to enable enable the DIN phase of a read-data operation. + 28 + 1 + read-write + + + USR_DUMMY + Set this bit to enable enable the DUMMY phase of an operation. + 29 + 1 + read-write + + + USR_ADDR + Set this bit to enable enable the ADDR phase of an operation. + 30 + 1 + read-write + + + USR_COMMAND + Set this bit to enable enable the CMD phase of an operation. + 31 + 1 + read-write + + + + + USER1 + SPI1 user1 register. + 0x1C + 0x20 + 0x5C000007 + + + USR_DUMMY_CYCLELEN + The SPI_CLK cycle length minus 1 of DUMMY phase. + 0 + 6 + read-write + + + USR_ADDR_BITLEN + The length in bits of ADDR phase. The register value shall be (bit_num-1). + 26 + 6 + read-write + + + + + USER2 + SPI1 user2 register. + 0x20 + 0x20 + 0x70000000 + + + USR_COMMAND_VALUE + The value of user defined(USR) command. + 0 + 16 + read-write + + + USR_COMMAND_BITLEN + The length in bits of CMD phase. The register value shall be (bit_num-1) + 28 + 4 + read-write + + + + + MOSI_DLEN + SPI1 write-data bit length register. + 0x24 + 0x20 + + + USR_MOSI_DBITLEN + The length in bits of DOUT phase. The register value shall be (bit_num-1). + 0 + 10 + read-write + + + + + MISO_DLEN + SPI1 read-data bit length register. + 0x28 + 0x20 + + + USR_MISO_DBITLEN + The length in bits of DIN phase. The register value shall be (bit_num-1). + 0 + 10 + read-write + + + + + RD_STATUS + SPI1 read control register. + 0x2C + 0x20 + + + STATUS + The value is stored when set SPI_MEM_FLASH_RDSR bit and SPI_MEM_FLASH_RES bit. + 0 + 16 + read-write + + + WB_MODE + Mode bits in the flash fast read mode it is combined with SPI_MEM_FASTRD_MODE bit. + 16 + 8 + read-write + + + + + EXT_ADDR + SPI1 extended address register. + 0x30 + 0x20 + + + EXT_ADDR + The register are the higher 32bits in the 64 bits address mode. + 0 + 32 + read-write + + + + + MISC + SPI1 misc register. + 0x34 + 0x20 + 0x00000002 + + + CS0_DIS + Set this bit to raise high SPI_CS pin, which means that the SPI device(flash) connected to SPI_CS is in low level when SPI1 transfer starts. + 0 + 1 + read-write + + + CS1_DIS + Set this bit to raise high SPI_CS1 pin, which means that the SPI device(Ext_RAM) connected to SPI_CS1 is in low level when SPI1 transfer starts. + 1 + 1 + read-write + + + CK_IDLE_EDGE + 1: SPI_CLK line is high when MSPI is idle. 0: SPI_CLK line is low when MSPI is idle. + 9 + 1 + read-write + + + CS_KEEP_ACTIVE + SPI_CS line keep low when the bit is set. + 10 + 1 + read-write + + + AUTO_PER + Set this bit to enable auto PER function. Hardware will sent out PER command if PES command is sent. + 11 + 1 + read-write + + + + + TX_CRC + SPI1 CRC data register. + 0x38 + 0x20 + 0xFFFFFFFF + + + DATA + For SPI1, the value of crc32. + 0 + 32 + read-only + + + + + CACHE_FCTRL + SPI1 bit mode control register. + 0x3C + 0x20 + + + CACHE_USR_CMD_4BYTE + Set this bit to enable SPI1 transfer with 32 bits address. The value of SPI_MEM_USR_ADDR_BITLEN should be 31. + 1 + 1 + read-write + + + FDIN_DUAL + When SPI1 accesses to flash or Ext_RAM, set this bit to enable 2-bm in DIN phase. + 3 + 1 + read-write + + + FDOUT_DUAL + When SPI1 accesses to flash or Ext_RAM, set this bit to enable 2-bm in DOUT phase. + 4 + 1 + read-write + + + FADDR_DUAL + When SPI1 accesses to flash or Ext_RAM, set this bit to enable 2-bm in ADDR phase. + 5 + 1 + read-write + + + FDIN_QUAD + When SPI1 accesses to flash or Ext_RAM, set this bit to enable 4-bm in DIN phase. + 6 + 1 + read-write + + + FDOUT_QUAD + When SPI1 accesses to flash or Ext_RAM, set this bit to enable 4-bm in DOUT phase. + 7 + 1 + read-write + + + FADDR_QUAD + When SPI1 accesses to flash or Ext_RAM, set this bit to enable 4-bm in ADDR phase. + 8 + 1 + read-write + + + + + FSM + SPI1 state machine(FSM) status register. + 0x54 + 0x20 + + + ST + The status of SPI1 state machine. 0: idle state(IDLE), 1: preparation state(PREP), 2: send command state(CMD), 3: send address state(ADDR), 4: red data state(DIN), 5:write data state(DOUT), 6: wait state(DUMMY), 7: done state(DONE). + 0 + 3 + read-only + + + + + W0 + SPI1 memory data buffer0 + 0x58 + 0x20 + + + BUF0 + data buffer + 0 + 32 + read-write + + + + + W1 + SPI1 memory data buffer1 + 0x5C + 0x20 + + + BUF1 + data buffer + 0 + 32 + read-write + + + + + W2 + SPI1 memory data buffer2 + 0x60 + 0x20 + + + BUF2 + data buffer + 0 + 32 + read-write + + + + + W3 + SPI1 memory data buffer3 + 0x64 + 0x20 + + + BUF3 + data buffer + 0 + 32 + read-write + + + + + W4 + SPI1 memory data buffer4 + 0x68 + 0x20 + + + BUF4 + data buffer + 0 + 32 + read-write + + + + + W5 + SPI1 memory data buffer5 + 0x6C + 0x20 + + + BUF5 + data buffer + 0 + 32 + read-write + + + + + W6 + SPI1 memory data buffer6 + 0x70 + 0x20 + + + BUF6 + data buffer + 0 + 32 + read-write + + + + + W7 + SPI1 memory data buffer7 + 0x74 + 0x20 + + + BUF7 + data buffer + 0 + 32 + read-write + + + + + W8 + SPI1 memory data buffer8 + 0x78 + 0x20 + + + BUF8 + data buffer + 0 + 32 + read-write + + + + + W9 + SPI1 memory data buffer9 + 0x7C + 0x20 + + + BUF9 + data buffer + 0 + 32 + read-write + + + + + W10 + SPI1 memory data buffer10 + 0x80 + 0x20 + + + BUF10 + data buffer + 0 + 32 + read-write + + + + + W11 + SPI1 memory data buffer11 + 0x84 + 0x20 + + + BUF11 + data buffer + 0 + 32 + read-write + + + + + W12 + SPI1 memory data buffer12 + 0x88 + 0x20 + + + BUF12 + data buffer + 0 + 32 + read-write + + + + + W13 + SPI1 memory data buffer13 + 0x8C + 0x20 + + + BUF13 + data buffer + 0 + 32 + read-write + + + + + W14 + SPI1 memory data buffer14 + 0x90 + 0x20 + + + BUF14 + data buffer + 0 + 32 + read-write + + + + + W15 + SPI1 memory data buffer15 + 0x94 + 0x20 + + + BUF15 + data buffer + 0 + 32 + read-write + + + + + FLASH_WAITI_CTRL + SPI1 wait idle control register + 0x98 + 0x20 + 0x00000014 + + + WAITI_EN + Set this bit to enable auto-waiting flash idle operation when PP/SE/BE/CE/WRSR/PES command is sent. + 0 + 1 + read-write + + + WAITI_DUMMY + Set this bit to enable DUMMY phase in auto wait flash idle transfer(RDSR). + 1 + 1 + read-write + + + WAITI_CMD + The command value of auto wait flash idle transfer(RDSR). + 2 + 8 + read-write + + + WAITI_DUMMY_CYCLELEN + The dummy cycle length when wait flash idle(RDSR). + 10 + 6 + read-write + + + + + FLASH_SUS_CMD + SPI1 flash suspend control register + 0x9C + 0x20 + + + FLASH_PER + program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 0 + 1 + read-write + + + FLASH_PES + program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + 1 + 1 + read-write + + + FLASH_PER_WAIT_EN + Set this bit to add delay time after program erase resume(PER) is sent. + 2 + 1 + read-write + + + FLASH_PES_WAIT_EN + Set this bit to add delay time after program erase suspend(PES) command is sent. + 3 + 1 + read-write + + + PES_PER_EN + Set this bit to enable PES transfer trigger PES transfer option. + 4 + 1 + read-write + + + PESR_IDLE_EN + 1: Separate PER flash wait idle and PES flash wait idle. 0: Not separate. + 5 + 1 + read-write + + + + + FLASH_SUS_CTRL + SPI1 flash suspend command register + 0xA0 + 0x20 + 0x0000EAF4 + + + FLASH_PES_EN + Set this bit to enable auto-suspend function. + 0 + 1 + read-write + + + FLASH_PER_COMMAND + Program/Erase resume command value. + 1 + 8 + read-write + + + FLASH_PES_COMMAND + Program/Erase suspend command value. + 9 + 8 + read-write + + + + + SUS_STATUS + SPI1 flash suspend status register + 0xA4 + 0x20 + + + FLASH_SUS + The status of flash suspend. This bit is set when PES command is sent, and cleared when PER is sent. Only used in SPI1. + 0 + 1 + read-write + + + FLASH_HPM_DLY_256 + 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent. + 2 + 1 + read-write + + + FLASH_RES_DLY_256 + 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent. + 3 + 1 + read-write + + + FLASH_DP_DLY_256 + 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent. + 4 + 1 + read-write + + + FLASH_PER_DLY_256 + Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent. + 5 + 1 + read-write + + + FLASH_PES_DLY_256 + Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent. + 6 + 1 + read-write + + + + + TIMING_CALI + SPI1 timing compensation register when accesses to flash or Ext_RAM. + 0xA8 + 0x20 + + + TIMING_CALI + Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operations. + 1 + 1 + read-write + + + EXTRA_DUMMY_CYCLELEN + Extra SPI_CLK cycles added in DUMMY phase for timing compensation. Active when SPI_MEM_TIMING_CALI bit is set. + 2 + 3 + read-write + + + + + DDR + SPI1 DDR control register + 0xE0 + 0x20 + 0x00000020 + + + SPI_FMEM_DDR_EN + 1: in DDR mode, 0: in SDR mode. + 0 + 1 + read-write + + + SPI_FMEM_VAR_DUMMY + Set the bit to enable variable dummy cycle in DDRmode. + 1 + 1 + read-write + + + SPI_FMEM_DDR_RDAT_SWP + Set the bit to reorder RX data of the word in DDR mode. + 2 + 1 + read-write + + + SPI_FMEM_DDR_WDAT_SWP + Set the bit to reorder TX data of the word in DDR mode. + 3 + 1 + read-write + + + SPI_FMEM_DDR_CMD_DIS + the bit is used to disable dual edge in command phase when DDR mode. + 4 + 1 + read-write + + + SPI_FMEM_OUTMINBYTELEN + It is the minimum output data length in the panda device. + 5 + 7 + read-write + + + SPI_FMEM_USR_DDR_DQS_THD + The delay number of data strobe which from memory based on SPI_CLK. + 14 + 7 + read-write + + + SPI_FMEM_DDR_DQS_LOOP + 1: Use internal signal as data strobe, the strobe can not be delayed by input timing module. 0: Use input SPI_DQS signal from PAD as data strobe, the strobe can be delayed by input timing module + 21 + 1 + read-write + + + SPI_FMEM_DDR_DQS_LOOP_MODE + When SPI_FMEM_DDR_DQS_LOOP and SPI_FMEM_DDR_EN are set, 1: Use internal SPI_CLK as data strobe. 0: Use internal ~SPI_CLK as data strobe. Otherwise this bit is not active. + 22 + 1 + read-write + + + SPI_FMEM_CLK_DIFF_EN + Set this bit to enable the differential SPI_CLK#. + 24 + 1 + read-write + + + SPI_FMEM_HYPERBUS_MODE + Set this bit to enable the SPI HyperBus mode. + 25 + 1 + read-write + + + SPI_FMEM_DQS_CA_IN + Set this bit to enable the input of SPI_DQS signal in SPI phases of CMD and ADDR. + 26 + 1 + read-write + + + SPI_FMEM_HYPERBUS_DUMMY_2X + Set this bit to enable the vary dummy function in SPI HyperBus mode, when SPI0 accesses flash or SPI1 accesses flash or sram. + 27 + 1 + read-write + + + SPI_FMEM_CLK_DIFF_INV + Set this bit to invert SPI_DIFF when accesses to flash. . + 28 + 1 + read-write + + + SPI_FMEM_OCTA_RAM_ADDR + Set this bit to enable octa_ram address out when accesses to flash, which means ADDR_OUT[31:0] = {spi_usr_addr_value[25:4], 6'd0, spi_usr_addr_value[3:1], 1'b0}. + 29 + 1 + read-write + + + SPI_FMEM_HYPERBUS_CA + Set this bit to enable HyperRAM address out when accesses to flash, which means ADDR_OUT[31:0] = {spi_usr_addr_value[19:4], 13'd0, spi_usr_addr_value[3:1]}. + 30 + 1 + read-write + + + + + CLOCK_GATE + SPI1 clk_gate register + 0xE8 + 0x20 + 0x00000001 + + + CLK_EN + Register clock gate enable signal. 1: Enable. 0: Disable. + 0 + 1 + read-write + + + + + INT_ENA + SPI1 interrupt enable register + 0xF0 + 0x20 + + + PER_END_INT_ENA + The enable bit for SPI_MEM_PER_END_INT interrupt. + 0 + 1 + read-write + + + PES_END_INT_ENA + The enable bit for SPI_MEM_PES_END_INT interrupt. + 1 + 1 + read-write + + + TOTAL_TRANS_END_INT_ENA + The enable bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + 2 + 1 + read-write + + + BROWN_OUT_INT_ENA + The enable bit for SPI_MEM_BROWN_OUT_INT interrupt. + 3 + 1 + read-write + + + + + INT_CLR + SPI1 interrupt clear register + 0xF4 + 0x20 + + + PER_END_INT_CLR + The clear bit for SPI_MEM_PER_END_INT interrupt. + 0 + 1 + write-only + + + PES_END_INT_CLR + The clear bit for SPI_MEM_PES_END_INT interrupt. + 1 + 1 + write-only + + + TOTAL_TRANS_END_INT_CLR + The clear bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + 2 + 1 + write-only + + + BROWN_OUT_INT_CLR + The status bit for SPI_MEM_BROWN_OUT_INT interrupt. + 3 + 1 + write-only + + + + + INT_RAW + SPI1 interrupt raw register + 0xF8 + 0x20 + + + PER_END_INT_RAW + The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed successfully. 0: Others. + 0 + 1 + read-write + + + PES_END_INT_RAW + The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended successfully. 0: Others. + 1 + 1 + read-write + + + TOTAL_TRANS_END_INT_RAW + The raw bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. 1: Triggered when SPI1 transfer is done and flash is already idle. When WRSR/PP/SE/BE/CE is sent and PES/PER command is sent, this bit is set when WRSR/PP/SE/BE/CE is success. 0: Others. + 2 + 1 + read-write + + + BROWN_OUT_INT_RAW + The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is loosing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others. + 3 + 1 + read-write + + + + + INT_ST + SPI1 interrupt status register + 0xFC + 0x20 + + + PER_END_INT_ST + The status bit for SPI_MEM_PER_END_INT interrupt. + 0 + 1 + read-only + + + PES_END_INT_ST + The status bit for SPI_MEM_PES_END_INT interrupt. + 1 + 1 + read-only + + + TOTAL_TRANS_END_INT_ST + The status bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + 2 + 1 + read-only + + + BROWN_OUT_INT_ST + The status bit for SPI_MEM_BROWN_OUT_INT interrupt. + 3 + 1 + read-only + + + + + DATE + SPI0 version control register + 0x3FC + 0x20 + 0x02101040 + + + DATE + SPI register version. + 0 + 28 + read-write + + + + + + + SPI2 + SPI (Serial Peripheral Interface) Controller 2 + SPI2 + 0x60024000 + + 0x0 + 0x98 + registers + + + SPI2 + 21 + + + SPI2_DMA + 44 + + + + CMD + Command control register + 0x0 + 0x20 + + + CONF_BITLEN + Define the APB cycles of SPI_CONF state. Can be configured in CONF state. + 0 + 18 + read-write + + + UPDATE + Set this bit to synchronize SPI registers from APB clock domain into SPI module clock domain, which is only used in SPI master mode. + 23 + 1 + read-write + + + USR + User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. Can not be changed by CONF_buf. + 24 + 1 + read-write + + + + + ADDR + Address value register + 0x4 + 0x20 + + + USR_ADDR_VALUE + Address to slave. Can be configured in CONF state. + 0 + 32 + read-write + + + + + CTRL + SPI control register + 0x8 + 0x20 + 0x003C0000 + + + DUMMY_OUT + 0: In the dummy phase, the FSPI bus signals are not output. 1: In the dummy phase, the FSPI bus signals are output. Can be configured in CONF state. + 3 + 1 + read-write + + + FADDR_DUAL + Apply 2 signals during addr phase 1:enable 0: disable. Can be configured in CONF state. + 5 + 1 + read-write + + + FADDR_QUAD + Apply 4 signals during addr phase 1:enable 0: disable. Can be configured in CONF state. + 6 + 1 + read-write + + + FADDR_OCT + Apply 8 signals during addr phase 1:enable 0: disable. Can be configured in CONF state. + 7 + 1 + read-write + + + FCMD_DUAL + Apply 2 signals during command phase 1:enable 0: disable. Can be configured in CONF state. + 8 + 1 + read-write + + + FCMD_QUAD + Apply 4 signals during command phase 1:enable 0: disable. Can be configured in CONF state. + 9 + 1 + read-write + + + FCMD_OCT + Apply 8 signals during command phase 1:enable 0: disable. Can be configured in CONF state. + 10 + 1 + read-write + + + FREAD_DUAL + In the read operations, read-data phase apply 2 signals. 1: enable 0: disable. Can be configured in CONF state. + 14 + 1 + read-write + + + FREAD_QUAD + In the read operations read-data phase apply 4 signals. 1: enable 0: disable. Can be configured in CONF state. + 15 + 1 + read-write + + + FREAD_OCT + In the read operations read-data phase apply 8 signals. 1: enable 0: disable. Can be configured in CONF state. + 16 + 1 + read-write + + + Q_POL + The bit is used to set MISO line polarity, 1: high 0, low. Can be configured in CONF state. + 18 + 1 + read-write + + + D_POL + The bit is used to set MOSI line polarity, 1: high 0, low. Can be configured in CONF state. + 19 + 1 + read-write + + + HOLD_POL + SPI_HOLD output value when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state. + 20 + 1 + read-write + + + WP_POL + Write protect signal output when SPI is idle. 1: output high, 0: output low. Can be configured in CONF state. + 21 + 1 + read-write + + + RD_BIT_ORDER + In read-data (MISO) phase 1: LSB first 0: MSB first. Can be configured in CONF state. + 23 + 2 + read-write + + + WR_BIT_ORDER + In command address write-data (MOSI) phases 1: LSB firs 0: MSB first. Can be configured in CONF state. + 25 + 2 + read-write + + + + + CLOCK + SPI clock control register + 0xC + 0x20 + 0x80003043 + + + CLKCNT_L + In the master mode it must be equal to spi_clkcnt_N. In the slave mode it must be 0. Can be configured in CONF state. + 0 + 6 + read-write + + + CLKCNT_H + In the master mode it must be floor((spi_clkcnt_N+1)/2-1). In the slave mode it must be 0. Can be configured in CONF state. + 6 + 6 + read-write + + + CLKCNT_N + In the master mode it is the divider of spi_clk. So spi_clk frequency is system/(spi_clkdiv_pre+1)/(spi_clkcnt_N+1). Can be configured in CONF state. + 12 + 6 + read-write + + + CLKDIV_PRE + In the master mode it is pre-divider of spi_clk. Can be configured in CONF state. + 18 + 4 + read-write + + + CLK_EQU_SYSCLK + In the master mode 1: spi_clk is eqaul to system 0: spi_clk is divided from system clock. Can be configured in CONF state. + 31 + 1 + read-write + + + + + USER + SPI USER control register + 0x10 + 0x20 + 0x800000C0 + + + DOUTDIN + Set the bit to enable full duplex communication. 1: enable 0: disable. Can be configured in CONF state. + 0 + 1 + read-write + + + QPI_MODE + Both for master mode and slave mode. 1: spi controller is in QPI mode. 0: others. Can be configured in CONF state. + 3 + 1 + read-write + + + OPI_MODE + Just for master mode. 1: spi controller is in OPI mode (all in 8-b-m). 0: others. Can be configured in CONF state. + 4 + 1 + read-write + + + TSCK_I_EDGE + In the slave mode, this bit can be used to change the polarity of tsck. 0: tsck = spi_ck_i. 1:tsck = !spi_ck_i. + 5 + 1 + read-write + + + CS_HOLD + spi cs keep low when spi is in done phase. 1: enable 0: disable. Can be configured in CONF state. + 6 + 1 + read-write + + + CS_SETUP + spi cs is enable when spi is in prepare phase. 1: enable 0: disable. Can be configured in CONF state. + 7 + 1 + read-write + + + RSCK_I_EDGE + In the slave mode, this bit can be used to change the polarity of rsck. 0: rsck = !spi_ck_i. 1:rsck = spi_ck_i. + 8 + 1 + read-write + + + CK_OUT_EDGE + the bit combined with spi_mosi_delay_mode bits to set mosi signal delay mode. Can be configured in CONF state. + 9 + 1 + read-write + + + FWRITE_DUAL + In the write operations read-data phase apply 2 signals. Can be configured in CONF state. + 12 + 1 + read-write + + + FWRITE_QUAD + In the write operations read-data phase apply 4 signals. Can be configured in CONF state. + 13 + 1 + read-write + + + FWRITE_OCT + In the write operations read-data phase apply 8 signals. Can be configured in CONF state. + 14 + 1 + read-write + + + USR_CONF_NXT + 1: Enable the DMA CONF phase of next seg-trans operation, which means seg-trans will continue. 0: The seg-trans will end after the current SPI seg-trans or this is not seg-trans mode. Can be configured in CONF state. + 15 + 1 + read-write + + + SIO + Set the bit to enable 3-line half duplex communication mosi and miso signals share the same pin. 1: enable 0: disable. Can be configured in CONF state. + 17 + 1 + read-write + + + USR_MISO_HIGHPART + read-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state. + 24 + 1 + read-write + + + USR_MOSI_HIGHPART + write-data phase only access to high-part of the buffer spi_w8~spi_w15. 1: enable 0: disable. Can be configured in CONF state. + 25 + 1 + read-write + + + USR_DUMMY_IDLE + spi clock is disable in dummy phase when the bit is enable. Can be configured in CONF state. + 26 + 1 + read-write + + + USR_MOSI + This bit enable the write-data phase of an operation. Can be configured in CONF state. + 27 + 1 + read-write + + + USR_MISO + This bit enable the read-data phase of an operation. Can be configured in CONF state. + 28 + 1 + read-write + + + USR_DUMMY + This bit enable the dummy phase of an operation. Can be configured in CONF state. + 29 + 1 + read-write + + + USR_ADDR + This bit enable the address phase of an operation. Can be configured in CONF state. + 30 + 1 + read-write + + + USR_COMMAND + This bit enable the command phase of an operation. Can be configured in CONF state. + 31 + 1 + read-write + + + + + USER1 + SPI USER control register 1 + 0x14 + 0x20 + 0xB8410007 + + + USR_DUMMY_CYCLELEN + The length in spi_clk cycles of dummy phase. The register value shall be (cycle_num-1). Can be configured in CONF state. + 0 + 8 + read-write + + + MST_WFULL_ERR_END_EN + 1: SPI transfer is ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI RX AFIFO wfull error is valid in GP-SPI master FD/HD-mode. + 16 + 1 + read-write + + + CS_SETUP_TIME + (cycles+1) of prepare phase by spi clock this bits are combined with spi_cs_setup bit. Can be configured in CONF state. + 17 + 5 + read-write + + + CS_HOLD_TIME + delay cycles of cs pin by spi clock this bits are combined with spi_cs_hold bit. Can be configured in CONF state. + 22 + 5 + read-write + + + USR_ADDR_BITLEN + The length in bits of address phase. The register value shall be (bit_num-1). Can be configured in CONF state. + 27 + 5 + read-write + + + + + USER2 + SPI USER control register 2 + 0x18 + 0x20 + 0x78000000 + + + USR_COMMAND_VALUE + The value of command. Can be configured in CONF state. + 0 + 16 + read-write + + + MST_REMPTY_ERR_END_EN + 1: SPI transfer is ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. 0: SPI transfer is not ended when SPI TX AFIFO read empty error is valid in GP-SPI master FD/HD-mode. + 27 + 1 + read-write + + + USR_COMMAND_BITLEN + The length in bits of command phase. The register value shall be (bit_num-1). Can be configured in CONF state. + 28 + 4 + read-write + + + + + MS_DLEN + SPI data bit length control register + 0x1C + 0x20 + + + MS_DATA_BITLEN + The value of these bits is the configured SPI transmission data bit length in master mode DMA controlled transfer or CPU controlled transfer. The value is also the configured bit length in slave mode DMA RX controlled transfer. The register value shall be (bit_num-1). Can be configured in CONF state. + 0 + 18 + read-write + + + + + MISC + SPI misc register + 0x20 + 0x20 + 0x0000003E + + + CS0_DIS + SPI CS0 pin enable, 1: disable CS0, 0: spi_cs0 signal is from/to CS0 pin. Can be configured in CONF state. + 0 + 1 + read-write + + + CS1_DIS + SPI CS1 pin enable, 1: disable CS1, 0: spi_cs1 signal is from/to CS1 pin. Can be configured in CONF state. + 1 + 1 + read-write + + + CS2_DIS + SPI CS2 pin enable, 1: disable CS2, 0: spi_cs2 signal is from/to CS2 pin. Can be configured in CONF state. + 2 + 1 + read-write + + + CS3_DIS + SPI CS3 pin enable, 1: disable CS3, 0: spi_cs3 signal is from/to CS3 pin. Can be configured in CONF state. + 3 + 1 + read-write + + + CS4_DIS + SPI CS4 pin enable, 1: disable CS4, 0: spi_cs4 signal is from/to CS4 pin. Can be configured in CONF state. + 4 + 1 + read-write + + + CS5_DIS + SPI CS5 pin enable, 1: disable CS5, 0: spi_cs5 signal is from/to CS5 pin. Can be configured in CONF state. + 5 + 1 + read-write + + + CK_DIS + 1: spi clk out disable, 0: spi clk out enable. Can be configured in CONF state. + 6 + 1 + read-write + + + MASTER_CS_POL + In the master mode the bits are the polarity of spi cs line, the value is equivalent to spi_cs ^ spi_master_cs_pol. Can be configured in CONF state. + 7 + 6 + read-write + + + CLK_DATA_DTR_EN + 1: SPI master DTR mode is applied to SPI clk, data and spi_dqs. 0: SPI master DTR mode is only applied to spi_dqs. This bit should be used with bit 17/18/19. + 16 + 1 + read-write + + + DATA_DTR_EN + 1: SPI clk and data of SPI_DOUT and SPI_DIN state are in DTR mode, including master 1/2/4/8-bm. 0: SPI clk and data of SPI_DOUT and SPI_DIN state are in STR mode. Can be configured in CONF state. + 17 + 1 + read-write + + + ADDR_DTR_EN + 1: SPI clk and data of SPI_SEND_ADDR state are in DTR mode, including master 1/2/4/8-bm. 0: SPI clk and data of SPI_SEND_ADDR state are in STR mode. Can be configured in CONF state. + 18 + 1 + read-write + + + CMD_DTR_EN + 1: SPI clk and data of SPI_SEND_CMD state are in DTR mode, including master 1/2/4/8-bm. 0: SPI clk and data of SPI_SEND_CMD state are in STR mode. Can be configured in CONF state. + 19 + 1 + read-write + + + SLAVE_CS_POL + spi slave input cs polarity select. 1: inv 0: not change. Can be configured in CONF state. + 23 + 1 + read-write + + + DQS_IDLE_EDGE + The default value of spi_dqs. Can be configured in CONF state. + 24 + 1 + read-write + + + CK_IDLE_EDGE + 1: spi clk line is high when idle 0: spi clk line is low when idle. Can be configured in CONF state. + 29 + 1 + read-write + + + CS_KEEP_ACTIVE + spi cs line keep low when the bit is set. Can be configured in CONF state. + 30 + 1 + read-write + + + QUAD_DIN_PIN_SWAP + 1: SPI quad input swap enable, swap FSPID with FSPIQ, swap FSPIWP with FSPIHD. 0: spi quad input swap disable. Can be configured in CONF state. + 31 + 1 + read-write + + + + + DIN_MODE + SPI input delay mode configuration + 0x24 + 0x20 + + + DIN0_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 0 + 2 + read-write + + + DIN1_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 2 + 2 + read-write + + + DIN2_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 4 + 2 + read-write + + + DIN3_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 6 + 2 + read-write + + + DIN4_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 8 + 2 + read-write + + + DIN5_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 10 + 2 + read-write + + + DIN6_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 12 + 2 + read-write + + + DIN7_MODE + the input signals are delayed by SPI module clock cycles, 0: input without delayed, 1: input with the posedge of clk_apb,2 input with the negedge of clk_apb, 3: input with the spi_clk. Can be configured in CONF state. + 14 + 2 + read-write + + + TIMING_HCLK_ACTIVE + 1:enable hclk in SPI input timing module. 0: disable it. Can be configured in CONF state. + 16 + 1 + read-write + + + + + DIN_NUM + SPI input delay number configuration + 0x28 + 0x20 + + + DIN0_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 0 + 2 + read-write + + + DIN1_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 2 + 2 + read-write + + + DIN2_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 4 + 2 + read-write + + + DIN3_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 6 + 2 + read-write + + + DIN4_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 8 + 2 + read-write + + + DIN5_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 10 + 2 + read-write + + + DIN6_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 12 + 2 + read-write + + + DIN7_NUM + the input signals are delayed by SPI module clock cycles, 0: delayed by 1 cycle, 1: delayed by 2 cycles,... Can be configured in CONF state. + 14 + 2 + read-write + + + + + DOUT_MODE + SPI output delay mode configuration + 0x2C + 0x20 + + + DOUT0_MODE + The output signal 0 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 0 + 1 + read-write + + + DOUT1_MODE + The output signal 1 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 1 + 1 + read-write + + + DOUT2_MODE + The output signal 2 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 2 + 1 + read-write + + + DOUT3_MODE + The output signal 3 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 3 + 1 + read-write + + + DOUT4_MODE + The output signal 4 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 4 + 1 + read-write + + + DOUT5_MODE + The output signal 5 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 5 + 1 + read-write + + + DOUT6_MODE + The output signal 6 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 6 + 1 + read-write + + + DOUT7_MODE + The output signal 7 is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 7 + 1 + read-write + + + D_DQS_MODE + The output signal SPI_DQS is delayed by the SPI module clock, 0: output without delayed, 1: output delay for a SPI module clock cycle at its negative edge. Can be configured in CONF state. + 8 + 1 + read-write + + + + + DMA_CONF + SPI DMA control register + 0x30 + 0x20 + 0x00000003 + + + DMA_OUTFIFO_EMPTY + Records the status of DMA TX FIFO. 1: DMA TX FIFO is not ready for sending data. 0: DMA TX FIFO is ready for sending data. + 0 + 1 + read-only + + + DMA_INFIFO_FULL + Records the status of DMA RX FIFO. 1: DMA RX FIFO is not ready for receiving data. 0: DMA RX FIFO is ready for receiving data. + 1 + 1 + read-only + + + DMA_SLV_SEG_TRANS_EN + Enable dma segment transfer in spi dma half slave mode. 1: enable. 0: disable. + 18 + 1 + read-write + + + SLV_RX_SEG_TRANS_CLR_EN + 1: spi_dma_infifo_full_vld is cleared by spi slave cmd 5. 0: spi_dma_infifo_full_vld is cleared by spi_trans_done. + 19 + 1 + read-write + + + SLV_TX_SEG_TRANS_CLR_EN + 1: spi_dma_outfifo_empty_vld is cleared by spi slave cmd 6. 0: spi_dma_outfifo_empty_vld is cleared by spi_trans_done. + 20 + 1 + read-write + + + RX_EOF_EN + 1: spi_dma_inlink_eof is set when the number of dma pushed data bytes is equal to the value of spi_slv/mst_dma_rd_bytelen[19:0] in spi dma transition. 0: spi_dma_inlink_eof is set by spi_trans_done in non-seg-trans or spi_dma_seg_trans_done in seg-trans. + 21 + 1 + read-write + + + DMA_RX_ENA + Set this bit to enable SPI DMA controlled receive data mode. + 27 + 1 + read-write + + + DMA_TX_ENA + Set this bit to enable SPI DMA controlled send data mode. + 28 + 1 + read-write + + + RX_AFIFO_RST + Set this bit to reset RX AFIFO, which is used to receive data in SPI master and slave mode transfer. + 29 + 1 + write-only + + + BUF_AFIFO_RST + Set this bit to reset BUF TX AFIFO, which is used send data out in SPI slave CPU controlled mode transfer and master mode transfer. + 30 + 1 + write-only + + + DMA_AFIFO_RST + Set this bit to reset DMA TX AFIFO, which is used to send data out in SPI slave DMA controlled mode transfer. + 31 + 1 + write-only + + + + + DMA_INT_ENA + SPI interrupt enable register + 0x34 + 0x20 + + + DMA_INFIFO_FULL_ERR_INT_ENA + The enable bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt. + 0 + 1 + read-write + + + DMA_OUTFIFO_EMPTY_ERR_INT_ENA + The enable bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt. + 1 + 1 + read-write + + + SLV_EX_QPI_INT_ENA + The enable bit for SPI slave Ex_QPI interrupt. + 2 + 1 + read-write + + + SLV_EN_QPI_INT_ENA + The enable bit for SPI slave En_QPI interrupt. + 3 + 1 + read-write + + + SLV_CMD7_INT_ENA + The enable bit for SPI slave CMD7 interrupt. + 4 + 1 + read-write + + + SLV_CMD8_INT_ENA + The enable bit for SPI slave CMD8 interrupt. + 5 + 1 + read-write + + + SLV_CMD9_INT_ENA + The enable bit for SPI slave CMD9 interrupt. + 6 + 1 + read-write + + + SLV_CMDA_INT_ENA + The enable bit for SPI slave CMDA interrupt. + 7 + 1 + read-write + + + SLV_RD_DMA_DONE_INT_ENA + The enable bit for SPI_SLV_RD_DMA_DONE_INT interrupt. + 8 + 1 + read-write + + + SLV_WR_DMA_DONE_INT_ENA + The enable bit for SPI_SLV_WR_DMA_DONE_INT interrupt. + 9 + 1 + read-write + + + SLV_RD_BUF_DONE_INT_ENA + The enable bit for SPI_SLV_RD_BUF_DONE_INT interrupt. + 10 + 1 + read-write + + + SLV_WR_BUF_DONE_INT_ENA + The enable bit for SPI_SLV_WR_BUF_DONE_INT interrupt. + 11 + 1 + read-write + + + TRANS_DONE_INT_ENA + The enable bit for SPI_TRANS_DONE_INT interrupt. + 12 + 1 + read-write + + + DMA_SEG_TRANS_DONE_INT_ENA + The enable bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. + 13 + 1 + read-write + + + SEG_MAGIC_ERR_INT_ENA + The enable bit for SPI_SEG_MAGIC_ERR_INT interrupt. + 14 + 1 + read-write + + + SLV_BUF_ADDR_ERR_INT_ENA + The enable bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. + 15 + 1 + read-write + + + SLV_CMD_ERR_INT_ENA + The enable bit for SPI_SLV_CMD_ERR_INT interrupt. + 16 + 1 + read-write + + + MST_RX_AFIFO_WFULL_ERR_INT_ENA + The enable bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. + 17 + 1 + read-write + + + MST_TX_AFIFO_REMPTY_ERR_INT_ENA + The enable bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. + 18 + 1 + read-write + + + APP2_INT_ENA + The enable bit for SPI_APP2_INT interrupt. + 19 + 1 + read-write + + + APP1_INT_ENA + The enable bit for SPI_APP1_INT interrupt. + 20 + 1 + read-write + + + + + DMA_INT_CLR + SPI interrupt clear register + 0x38 + 0x20 + + + DMA_INFIFO_FULL_ERR_INT_CLR + The clear bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt. + 0 + 1 + write-only + + + DMA_OUTFIFO_EMPTY_ERR_INT_CLR + The clear bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt. + 1 + 1 + write-only + + + SLV_EX_QPI_INT_CLR + The clear bit for SPI slave Ex_QPI interrupt. + 2 + 1 + write-only + + + SLV_EN_QPI_INT_CLR + The clear bit for SPI slave En_QPI interrupt. + 3 + 1 + write-only + + + SLV_CMD7_INT_CLR + The clear bit for SPI slave CMD7 interrupt. + 4 + 1 + write-only + + + SLV_CMD8_INT_CLR + The clear bit for SPI slave CMD8 interrupt. + 5 + 1 + write-only + + + SLV_CMD9_INT_CLR + The clear bit for SPI slave CMD9 interrupt. + 6 + 1 + write-only + + + SLV_CMDA_INT_CLR + The clear bit for SPI slave CMDA interrupt. + 7 + 1 + write-only + + + SLV_RD_DMA_DONE_INT_CLR + The clear bit for SPI_SLV_RD_DMA_DONE_INT interrupt. + 8 + 1 + write-only + + + SLV_WR_DMA_DONE_INT_CLR + The clear bit for SPI_SLV_WR_DMA_DONE_INT interrupt. + 9 + 1 + write-only + + + SLV_RD_BUF_DONE_INT_CLR + The clear bit for SPI_SLV_RD_BUF_DONE_INT interrupt. + 10 + 1 + write-only + + + SLV_WR_BUF_DONE_INT_CLR + The clear bit for SPI_SLV_WR_BUF_DONE_INT interrupt. + 11 + 1 + write-only + + + TRANS_DONE_INT_CLR + The clear bit for SPI_TRANS_DONE_INT interrupt. + 12 + 1 + write-only + + + DMA_SEG_TRANS_DONE_INT_CLR + The clear bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. + 13 + 1 + write-only + + + SEG_MAGIC_ERR_INT_CLR + The clear bit for SPI_SEG_MAGIC_ERR_INT interrupt. + 14 + 1 + write-only + + + SLV_BUF_ADDR_ERR_INT_CLR + The clear bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. + 15 + 1 + write-only + + + SLV_CMD_ERR_INT_CLR + The clear bit for SPI_SLV_CMD_ERR_INT interrupt. + 16 + 1 + write-only + + + MST_RX_AFIFO_WFULL_ERR_INT_CLR + The clear bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. + 17 + 1 + write-only + + + MST_TX_AFIFO_REMPTY_ERR_INT_CLR + The clear bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. + 18 + 1 + write-only + + + APP2_INT_CLR + The clear bit for SPI_APP2_INT interrupt. + 19 + 1 + write-only + + + APP1_INT_CLR + The clear bit for SPI_APP1_INT interrupt. + 20 + 1 + write-only + + + + + DMA_INT_RAW + SPI interrupt raw register + 0x3C + 0x20 + + + DMA_INFIFO_FULL_ERR_INT_RAW + 1: The current data rate of DMA Rx is smaller than that of SPI, which will lose the receive data. 0: Others. + 0 + 1 + read-write + + + DMA_OUTFIFO_EMPTY_ERR_INT_RAW + 1: The current data rate of DMA TX is smaller than that of SPI. SPI will stop in master mode and send out all 0 in slave mode. 0: Others. + 1 + 1 + read-write + + + SLV_EX_QPI_INT_RAW + The raw bit for SPI slave Ex_QPI interrupt. 1: SPI slave mode Ex_QPI transmission is ended. 0: Others. + 2 + 1 + read-write + + + SLV_EN_QPI_INT_RAW + The raw bit for SPI slave En_QPI interrupt. 1: SPI slave mode En_QPI transmission is ended. 0: Others. + 3 + 1 + read-write + + + SLV_CMD7_INT_RAW + The raw bit for SPI slave CMD7 interrupt. 1: SPI slave mode CMD7 transmission is ended. 0: Others. + 4 + 1 + read-write + + + SLV_CMD8_INT_RAW + The raw bit for SPI slave CMD8 interrupt. 1: SPI slave mode CMD8 transmission is ended. 0: Others. + 5 + 1 + read-write + + + SLV_CMD9_INT_RAW + The raw bit for SPI slave CMD9 interrupt. 1: SPI slave mode CMD9 transmission is ended. 0: Others. + 6 + 1 + read-write + + + SLV_CMDA_INT_RAW + The raw bit for SPI slave CMDA interrupt. 1: SPI slave mode CMDA transmission is ended. 0: Others. + 7 + 1 + read-write + + + SLV_RD_DMA_DONE_INT_RAW + The raw bit for SPI_SLV_RD_DMA_DONE_INT interrupt. 1: SPI slave mode Rd_DMA transmission is ended. 0: Others. + 8 + 1 + read-write + + + SLV_WR_DMA_DONE_INT_RAW + The raw bit for SPI_SLV_WR_DMA_DONE_INT interrupt. 1: SPI slave mode Wr_DMA transmission is ended. 0: Others. + 9 + 1 + read-write + + + SLV_RD_BUF_DONE_INT_RAW + The raw bit for SPI_SLV_RD_BUF_DONE_INT interrupt. 1: SPI slave mode Rd_BUF transmission is ended. 0: Others. + 10 + 1 + read-write + + + SLV_WR_BUF_DONE_INT_RAW + The raw bit for SPI_SLV_WR_BUF_DONE_INT interrupt. 1: SPI slave mode Wr_BUF transmission is ended. 0: Others. + 11 + 1 + read-write + + + TRANS_DONE_INT_RAW + The raw bit for SPI_TRANS_DONE_INT interrupt. 1: SPI master mode transmission is ended. 0: others. + 12 + 1 + read-write + + + DMA_SEG_TRANS_DONE_INT_RAW + The raw bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. 1: spi master DMA full-duplex/half-duplex seg-conf-trans ends or slave half-duplex seg-trans ends. And data has been pushed to corresponding memory. 0: seg-conf-trans or seg-trans is not ended or not occurred. + 13 + 1 + read-write + + + SEG_MAGIC_ERR_INT_RAW + The raw bit for SPI_SEG_MAGIC_ERR_INT interrupt. 1: The magic value in CONF buffer is error in the DMA seg-conf-trans. 0: others. + 14 + 1 + read-write + + + SLV_BUF_ADDR_ERR_INT_RAW + The raw bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. 1: The accessing data address of the current SPI slave mode CPU controlled FD, Wr_BUF or Rd_BUF transmission is bigger than 63. 0: Others. + 15 + 1 + read-write + + + SLV_CMD_ERR_INT_RAW + The raw bit for SPI_SLV_CMD_ERR_INT interrupt. 1: The slave command value in the current SPI slave HD mode transmission is not supported. 0: Others. + 16 + 1 + read-write + + + MST_RX_AFIFO_WFULL_ERR_INT_RAW + The raw bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. 1: There is a RX AFIFO write-full error when SPI inputs data in master mode. 0: Others. + 17 + 1 + read-write + + + MST_TX_AFIFO_REMPTY_ERR_INT_RAW + The raw bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. 1: There is a TX BUF AFIFO read-empty error when SPI outputs data in master mode. 0: Others. + 18 + 1 + read-write + + + APP2_INT_RAW + The raw bit for SPI_APP2_INT interrupt. The value is only controlled by software. + 19 + 1 + read-write + + + APP1_INT_RAW + The raw bit for SPI_APP1_INT interrupt. The value is only controlled by software. + 20 + 1 + read-write + + + + + DMA_INT_ST + SPI interrupt status register + 0x40 + 0x20 + + + DMA_INFIFO_FULL_ERR_INT_ST + The status bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt. + 0 + 1 + read-only + + + DMA_OUTFIFO_EMPTY_ERR_INT_ST + The status bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt. + 1 + 1 + read-only + + + SLV_EX_QPI_INT_ST + The status bit for SPI slave Ex_QPI interrupt. + 2 + 1 + read-only + + + SLV_EN_QPI_INT_ST + The status bit for SPI slave En_QPI interrupt. + 3 + 1 + read-only + + + SLV_CMD7_INT_ST + The status bit for SPI slave CMD7 interrupt. + 4 + 1 + read-only + + + SLV_CMD8_INT_ST + The status bit for SPI slave CMD8 interrupt. + 5 + 1 + read-only + + + SLV_CMD9_INT_ST + The status bit for SPI slave CMD9 interrupt. + 6 + 1 + read-only + + + SLV_CMDA_INT_ST + The status bit for SPI slave CMDA interrupt. + 7 + 1 + read-only + + + SLV_RD_DMA_DONE_INT_ST + The status bit for SPI_SLV_RD_DMA_DONE_INT interrupt. + 8 + 1 + read-only + + + SLV_WR_DMA_DONE_INT_ST + The status bit for SPI_SLV_WR_DMA_DONE_INT interrupt. + 9 + 1 + read-only + + + SLV_RD_BUF_DONE_INT_ST + The status bit for SPI_SLV_RD_BUF_DONE_INT interrupt. + 10 + 1 + read-only + + + SLV_WR_BUF_DONE_INT_ST + The status bit for SPI_SLV_WR_BUF_DONE_INT interrupt. + 11 + 1 + read-only + + + TRANS_DONE_INT_ST + The status bit for SPI_TRANS_DONE_INT interrupt. + 12 + 1 + read-only + + + DMA_SEG_TRANS_DONE_INT_ST + The status bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. + 13 + 1 + read-only + + + SEG_MAGIC_ERR_INT_ST + The status bit for SPI_SEG_MAGIC_ERR_INT interrupt. + 14 + 1 + read-only + + + SLV_BUF_ADDR_ERR_INT_ST + The status bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. + 15 + 1 + read-only + + + SLV_CMD_ERR_INT_ST + The status bit for SPI_SLV_CMD_ERR_INT interrupt. + 16 + 1 + read-only + + + MST_RX_AFIFO_WFULL_ERR_INT_ST + The status bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. + 17 + 1 + read-only + + + MST_TX_AFIFO_REMPTY_ERR_INT_ST + The status bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. + 18 + 1 + read-only + + + APP2_INT_ST + The status bit for SPI_APP2_INT interrupt. + 19 + 1 + read-only + + + APP1_INT_ST + The status bit for SPI_APP1_INT interrupt. + 20 + 1 + read-only + + + + + DMA_INT_SET + SPI interrupt software set register + 0x44 + 0x20 + + + DMA_INFIFO_FULL_ERR_INT_SET + The software set bit for SPI_DMA_INFIFO_FULL_ERR_INT interrupt. + 0 + 1 + write-only + + + DMA_OUTFIFO_EMPTY_ERR_INT_SET + The software set bit for SPI_DMA_OUTFIFO_EMPTY_ERR_INT interrupt. + 1 + 1 + write-only + + + SLV_EX_QPI_INT_SET + The software set bit for SPI slave Ex_QPI interrupt. + 2 + 1 + write-only + + + SLV_EN_QPI_INT_SET + The software set bit for SPI slave En_QPI interrupt. + 3 + 1 + write-only + + + SLV_CMD7_INT_SET + The software set bit for SPI slave CMD7 interrupt. + 4 + 1 + write-only + + + SLV_CMD8_INT_SET + The software set bit for SPI slave CMD8 interrupt. + 5 + 1 + write-only + + + SLV_CMD9_INT_SET + The software set bit for SPI slave CMD9 interrupt. + 6 + 1 + write-only + + + SLV_CMDA_INT_SET + The software set bit for SPI slave CMDA interrupt. + 7 + 1 + write-only + + + SLV_RD_DMA_DONE_INT_SET + The software set bit for SPI_SLV_RD_DMA_DONE_INT interrupt. + 8 + 1 + write-only + + + SLV_WR_DMA_DONE_INT_SET + The software set bit for SPI_SLV_WR_DMA_DONE_INT interrupt. + 9 + 1 + write-only + + + SLV_RD_BUF_DONE_INT_SET + The software set bit for SPI_SLV_RD_BUF_DONE_INT interrupt. + 10 + 1 + write-only + + + SLV_WR_BUF_DONE_INT_SET + The software set bit for SPI_SLV_WR_BUF_DONE_INT interrupt. + 11 + 1 + write-only + + + TRANS_DONE_INT_SET + The software set bit for SPI_TRANS_DONE_INT interrupt. + 12 + 1 + write-only + + + DMA_SEG_TRANS_DONE_INT_SET + The software set bit for SPI_DMA_SEG_TRANS_DONE_INT interrupt. + 13 + 1 + write-only + + + SEG_MAGIC_ERR_INT_SET + The software set bit for SPI_SEG_MAGIC_ERR_INT interrupt. + 14 + 1 + write-only + + + SLV_BUF_ADDR_ERR_INT_SET + The software set bit for SPI_SLV_BUF_ADDR_ERR_INT interrupt. + 15 + 1 + write-only + + + SLV_CMD_ERR_INT_SET + The software set bit for SPI_SLV_CMD_ERR_INT interrupt. + 16 + 1 + write-only + + + MST_RX_AFIFO_WFULL_ERR_INT_SET + The software set bit for SPI_MST_RX_AFIFO_WFULL_ERR_INT interrupt. + 17 + 1 + write-only + + + MST_TX_AFIFO_REMPTY_ERR_INT_SET + The software set bit for SPI_MST_TX_AFIFO_REMPTY_ERR_INT interrupt. + 18 + 1 + write-only + + + APP2_INT_SET + The software set bit for SPI_APP2_INT interrupt. + 19 + 1 + write-only + + + APP1_INT_SET + The software set bit for SPI_APP1_INT interrupt. + 20 + 1 + write-only + + + + + W0 + SPI CPU-controlled buffer0 + 0x98 + 0x20 + + + BUF0 + data buffer + 0 + 32 + read-write + + + + + W1 + SPI CPU-controlled buffer1 + 0x9C + 0x20 + + + BUF1 + data buffer + 0 + 32 + read-write + + + + + W2 + SPI CPU-controlled buffer2 + 0xA0 + 0x20 + + + BUF2 + data buffer + 0 + 32 + read-write + + + + + W3 + SPI CPU-controlled buffer3 + 0xA4 + 0x20 + + + BUF3 + data buffer + 0 + 32 + read-write + + + + + W4 + SPI CPU-controlled buffer4 + 0xA8 + 0x20 + + + BUF4 + data buffer + 0 + 32 + read-write + + + + + W5 + SPI CPU-controlled buffer5 + 0xAC + 0x20 + + + BUF5 + data buffer + 0 + 32 + read-write + + + + + W6 + SPI CPU-controlled buffer6 + 0xB0 + 0x20 + + + BUF6 + data buffer + 0 + 32 + read-write + + + + + W7 + SPI CPU-controlled buffer7 + 0xB4 + 0x20 + + + BUF7 + data buffer + 0 + 32 + read-write + + + + + W8 + SPI CPU-controlled buffer8 + 0xB8 + 0x20 + + + BUF8 + data buffer + 0 + 32 + read-write + + + + + W9 + SPI CPU-controlled buffer9 + 0xBC + 0x20 + + + BUF9 + data buffer + 0 + 32 + read-write + + + + + W10 + SPI CPU-controlled buffer10 + 0xC0 + 0x20 + + + BUF10 + data buffer + 0 + 32 + read-write + + + + + W11 + SPI CPU-controlled buffer11 + 0xC4 + 0x20 + + + BUF11 + data buffer + 0 + 32 + read-write + + + + + W12 + SPI CPU-controlled buffer12 + 0xC8 + 0x20 + + + BUF12 + data buffer + 0 + 32 + read-write + + + + + W13 + SPI CPU-controlled buffer13 + 0xCC + 0x20 + + + BUF13 + data buffer + 0 + 32 + read-write + + + + + W14 + SPI CPU-controlled buffer14 + 0xD0 + 0x20 + + + BUF14 + data buffer + 0 + 32 + read-write + + + + + W15 + SPI CPU-controlled buffer15 + 0xD4 + 0x20 + + + BUF15 + data buffer + 0 + 32 + read-write + + + + + SLAVE + SPI slave control register + 0xE0 + 0x20 + 0x02800000 + + + CLK_MODE + SPI clock mode bits. 0: SPI clock is off when CS inactive 1: SPI clock is delayed one cycle after CS inactive 2: SPI clock is delayed two cycles after CS inactive 3: SPI clock is alwasy on. Can be configured in CONF state. + 0 + 2 + read-write + + + CLK_MODE_13 + {CPOL, CPHA},1: support spi clk mode 1 and 3, first edge output data B[0]/B[7]. 0: support spi clk mode 0 and 2, first edge output data B[1]/B[6]. + 2 + 1 + read-write + + + RSCK_DATA_OUT + It saves half a cycle when tsck is the same as rsck. 1: output data at rsck posedge 0: output data at tsck posedge + 3 + 1 + read-write + + + SLV_RDDMA_BITLEN_EN + 1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in DMA controlled mode(Rd_DMA). 0: others + 8 + 1 + read-write + + + SLV_WRDMA_BITLEN_EN + 1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in DMA controlled mode(Wr_DMA). 0: others + 9 + 1 + read-write + + + SLV_RDBUF_BITLEN_EN + 1: SPI_SLV_DATA_BITLEN stores data bit length of master-read-slave data length in CPU controlled mode(Rd_BUF). 0: others + 10 + 1 + read-write + + + SLV_WRBUF_BITLEN_EN + 1: SPI_SLV_DATA_BITLEN stores data bit length of master-write-to-slave data length in CPU controlled mode(Wr_BUF). 0: others + 11 + 1 + read-write + + + DMA_SEG_MAGIC_VALUE + The magic value of BM table in master DMA seg-trans. + 22 + 4 + read-write + + + MODE + Set SPI work mode. 1: slave mode 0: master mode. + 26 + 1 + read-write + + + SOFT_RESET + Software reset enable, reset the spi clock line cs line and data lines. Can be configured in CONF state. + 27 + 1 + write-only + + + USR_CONF + 1: Enable the DMA CONF phase of current seg-trans operation, which means seg-trans will start. 0: This is not seg-trans mode. + 28 + 1 + read-write + + + + + SLAVE1 + SPI slave control register 1 + 0xE4 + 0x20 + + + SLV_DATA_BITLEN + The transferred data bit length in SPI slave FD and HD mode. + 0 + 18 + read-write + + + SLV_LAST_COMMAND + In the slave mode it is the value of command. + 18 + 8 + read-write + + + SLV_LAST_ADDR + In the slave mode it is the value of address. + 26 + 6 + read-write + + + + + CLK_GATE + SPI module clock and register clock control + 0xE8 + 0x20 + + + CLK_EN + Set this bit to enable clk gate + 0 + 1 + read-write + + + MST_CLK_ACTIVE + Set this bit to power on the SPI module clock. + 1 + 1 + read-write + + + MST_CLK_SEL + This bit is used to select SPI module clock source in master mode. 1: PLL_CLK_80M. 0: XTAL CLK. + 2 + 1 + read-write + + + + + DATE + Version control + 0xF0 + 0x20 + 0x02101190 + + + DATE + SPI register version. + 0 + 28 + read-write + + + + + + + SPI3 + SPI (Serial Peripheral Interface) Controller 3 + 0x60025000 + + SPI3 + 22 + + + SPI3_DMA + 45 + + + + SYSTEM + System Configuration Registers + SYSTEM + 0x600C0000 + + 0x0 + 0xA8 + registers + + + + CORE_1_CONTROL_0 + Core0 control regiter 0 + 0x0 + 0x20 + 0x00000004 + + + CONTROL_CORE_1_RUNSTALL + Set 1 to stall core1 + 0 + 1 + read-write + + + CONTROL_CORE_1_CLKGATE_EN + Set 1 to open core1 clock + 1 + 1 + read-write + + + CONTROL_CORE_1_RESETING + Set 1 to let core1 reset + 2 + 1 + read-write + + + + + CORE_1_CONTROL_1 + Core0 control regiter 1 + 0x4 + 0x20 + + + CONTROL_CORE_1_MESSAGE + it's only a R/W register, no function, software can write any value + 0 + 32 + read-write + + + + + CPU_PERI_CLK_EN + cpu_peripheral clock configuration register + 0x8 + 0x20 + + + CLK_EN_ASSIST_DEBUG + Set 1 to open assist_debug module clock + 6 + 1 + read-write + + + CLK_EN_DEDICATED_GPIO + Set 1 to open dedicated_gpio module clk + 7 + 1 + read-write + + + + + CPU_PERI_RST_EN + cpu_peripheral reset configuration regsiter + 0xC + 0x20 + 0x000000C0 + + + RST_EN_ASSIST_DEBUG + Set 1 to let assist_debug module reset + 6 + 1 + read-write + + + RST_EN_DEDICATED_GPIO + Set 1 to let dedicated_gpio module reset + 7 + 1 + read-write + + + + + CPU_PER_CONF + cpu peripheral clock configuration register + 0x10 + 0x20 + 0x0000000C + + + CPUPERIOD_SEL + This field used to sel cpu clock frequent. + 0 + 2 + read-write + + + PLL_FREQ_SEL + This field used to sel pll frequent. + 2 + 1 + read-write + + + CPU_WAIT_MODE_FORCE_ON + Set 1 to force cpu_waiti_clk enable. + 3 + 1 + read-write + + + CPU_WAITI_DELAY_NUM + This field used to set delay cycle when cpu enter waiti mode, after delay waiti_clk will close + 4 + 4 + read-write + + + + + MEM_PD_MASK + memory power down mask configuration register + 0x14 + 0x20 + 0x00000001 + + + LSLP_MEM_PD_MASK + Set 1 to mask memory power down. + 0 + 1 + read-write + + + + + PERIP_CLK_EN0 + peripheral clock configuration regsiter 0 + 0x18 + 0x20 + 0xF9C1E06F + + + TIMERS_CLK_EN + Set 1 to enable TIMERS clock + 0 + 1 + read-write + + + SPI01_CLK_EN + Set 1 to enable SPI01 clock + 1 + 1 + read-write + + + UART_CLK_EN + Set 1 to enable UART clock + 2 + 1 + read-write + + + WDG_CLK_EN + Set 1 to enable WDG clock + 3 + 1 + read-write + + + I2S0_CLK_EN + Set 1 to enable I2S0 clock + 4 + 1 + read-write + + + UART1_CLK_EN + Set 1 to enable UART1 clock + 5 + 1 + read-write + + + SPI2_CLK_EN + Set 1 to enable SPI2 clock + 6 + 1 + read-write + + + I2C_EXT0_CLK_EN + Set 1 to enable I2C_EXT0 clock + 7 + 1 + read-write + + + UHCI0_CLK_EN + Set 1 to enable UHCI0 clock + 8 + 1 + read-write + + + RMT_CLK_EN + Set 1 to enable RMT clock + 9 + 1 + read-write + + + PCNT_CLK_EN + Set 1 to enable PCNT clock + 10 + 1 + read-write + + + LEDC_CLK_EN + Set 1 to enable LEDC clock + 11 + 1 + read-write + + + UHCI1_CLK_EN + Set 1 to enable UHCI1 clock + 12 + 1 + read-write + + + TIMERGROUP_CLK_EN + Set 1 to enable TIMERGROUP clock + 13 + 1 + read-write + + + EFUSE_CLK_EN + Set 1 to enable EFUSE clock + 14 + 1 + read-write + + + TIMERGROUP1_CLK_EN + Set 1 to enable TIMERGROUP1 clock + 15 + 1 + read-write + + + SPI3_CLK_EN + Set 1 to enable SPI3 clock + 16 + 1 + read-write + + + PWM0_CLK_EN + Set 1 to enable PWM0 clock + 17 + 1 + read-write + + + I2C_EXT1_CLK_EN + Set 1 to enable I2C_EXT1 clock + 18 + 1 + read-write + + + TWAI_CLK_EN + Set 1 to enable CAN clock + 19 + 1 + read-write + + + PWM1_CLK_EN + Set 1 to enable PWM1 clock + 20 + 1 + read-write + + + I2S1_CLK_EN + Set 1 to enable I2S1 clock + 21 + 1 + read-write + + + SPI2_DMA_CLK_EN + Set 1 to enable SPI2_DMA clock + 22 + 1 + read-write + + + USB_CLK_EN + Set 1 to enable USB clock + 23 + 1 + read-write + + + UART_MEM_CLK_EN + Set 1 to enable UART_MEM clock + 24 + 1 + read-write + + + PWM2_CLK_EN + Set 1 to enable PWM2 clock + 25 + 1 + read-write + + + PWM3_CLK_EN + Set 1 to enable PWM3 clock + 26 + 1 + read-write + + + SPI3_DMA_CLK_EN + Set 1 to enable SPI4 clock + 27 + 1 + read-write + + + APB_SARADC_CLK_EN + Set 1 to enable APB_SARADC clock + 28 + 1 + read-write + + + SYSTIMER_CLK_EN + Set 1 to enable SYSTEMTIMER clock + 29 + 1 + read-write + + + ADC2_ARB_CLK_EN + Set 1 to enable ADC2_ARB clock + 30 + 1 + read-write + + + SPI4_CLK_EN + Set 1 to enable SPI4 clock + 31 + 1 + read-write + + + + + PERIP_CLK_EN1 + peripheral clock configuration regsiter 1 + 0x1C + 0x20 + 0x00000600 + + + PERI_BACKUP_CLK_EN + Set 1 to enable BACKUP clock + 0 + 1 + read-write + + + CRYPTO_AES_CLK_EN + Set 1 to enable AES clock + 1 + 1 + read-write + + + CRYPTO_SHA_CLK_EN + Set 1 to enable SHA clock + 2 + 1 + read-write + + + CRYPTO_RSA_CLK_EN + Set 1 to enable RSA clock + 3 + 1 + read-write + + + CRYPTO_DS_CLK_EN + Set 1 to enable DS clock + 4 + 1 + read-write + + + CRYPTO_HMAC_CLK_EN + Set 1 to enable HMAC clock + 5 + 1 + read-write + + + DMA_CLK_EN + Set 1 to enable DMA clock + 6 + 1 + read-write + + + SDIO_HOST_CLK_EN + Set 1 to enable SDIO_HOST clock + 7 + 1 + read-write + + + LCD_CAM_CLK_EN + Set 1 to enable LCD_CAM clock + 8 + 1 + read-write + + + UART2_CLK_EN + Set 1 to enable UART2 clock + 9 + 1 + read-write + + + USB_DEVICE_CLK_EN + Set 1 to enable USB_DEVICE clock + 10 + 1 + read-write + + + + + PERIP_RST_EN0 + peripheral reset configuration register0 + 0x20 + 0x20 + + + TIMERS_RST + Set 1 to let TIMERS reset + 0 + 1 + read-write + + + SPI01_RST + Set 1 to let SPI01 reset + 1 + 1 + read-write + + + UART_RST + Set 1 to let UART reset + 2 + 1 + read-write + + + WDG_RST + Set 1 to let WDG reset + 3 + 1 + read-write + + + I2S0_RST + Set 1 to let I2S0 reset + 4 + 1 + read-write + + + UART1_RST + Set 1 to let UART1 reset + 5 + 1 + read-write + + + SPI2_RST + Set 1 to let SPI2 reset + 6 + 1 + read-write + + + I2C_EXT0_RST + Set 1 to let I2C_EXT0 reset + 7 + 1 + read-write + + + UHCI0_RST + Set 1 to let UHCI0 reset + 8 + 1 + read-write + + + RMT_RST + Set 1 to let RMT reset + 9 + 1 + read-write + + + PCNT_RST + Set 1 to let PCNT reset + 10 + 1 + read-write + + + LEDC_RST + Set 1 to let LEDC reset + 11 + 1 + read-write + + + UHCI1_RST + Set 1 to let UHCI1 reset + 12 + 1 + read-write + + + TIMERGROUP_RST + Set 1 to let TIMERGROUP reset + 13 + 1 + read-write + + + EFUSE_RST + Set 1 to let EFUSE reset + 14 + 1 + read-write + + + TIMERGROUP1_RST + Set 1 to let TIMERGROUP1 reset + 15 + 1 + read-write + + + SPI3_RST + Set 1 to let SPI3 reset + 16 + 1 + read-write + + + PWM0_RST + Set 1 to let PWM0 reset + 17 + 1 + read-write + + + I2C_EXT1_RST + Set 1 to let I2C_EXT1 reset + 18 + 1 + read-write + + + TWAI_RST + Set 1 to let CAN reset + 19 + 1 + read-write + + + PWM1_RST + Set 1 to let PWM1 reset + 20 + 1 + read-write + + + I2S1_RST + Set 1 to let I2S1 reset + 21 + 1 + read-write + + + SPI2_DMA_RST + Set 1 to let SPI2 reset + 22 + 1 + read-write + + + USB_RST + Set 1 to let USB reset + 23 + 1 + read-write + + + UART_MEM_RST + Set 1 to let UART_MEM reset + 24 + 1 + read-write + + + PWM2_RST + Set 1 to let PWM2 reset + 25 + 1 + read-write + + + PWM3_RST + Set 1 to let PWM3 reset + 26 + 1 + read-write + + + SPI3_DMA_RST + Set 1 to let SPI3 reset + 27 + 1 + read-write + + + APB_SARADC_RST + Set 1 to let APB_SARADC reset + 28 + 1 + read-write + + + SYSTIMER_RST + Set 1 to let SYSTIMER reset + 29 + 1 + read-write + + + ADC2_ARB_RST + Set 1 to let ADC2_ARB reset + 30 + 1 + read-write + + + SPI4_RST + Set 1 to let SPI4 reset + 31 + 1 + read-write + + + + + PERIP_RST_EN1 + peripheral reset configuration regsiter 1 + 0x24 + 0x20 + 0x000001FE + + + PERI_BACKUP_RST + Set 1 to let BACKUP reset + 0 + 1 + read-write + + + CRYPTO_AES_RST + Set 1 to let CRYPTO_AES reset + 1 + 1 + read-write + + + CRYPTO_SHA_RST + Set 1 to let CRYPTO_SHA reset + 2 + 1 + read-write + + + CRYPTO_RSA_RST + Set 1 to let CRYPTO_RSA reset + 3 + 1 + read-write + + + CRYPTO_DS_RST + Set 1 to let CRYPTO_DS reset + 4 + 1 + read-write + + + CRYPTO_HMAC_RST + Set 1 to let CRYPTO_HMAC reset + 5 + 1 + read-write + + + DMA_RST + Set 1 to let DMA reset + 6 + 1 + read-write + + + SDIO_HOST_RST + Set 1 to let SDIO_HOST reset + 7 + 1 + read-write + + + LCD_CAM_RST + Set 1 to let LCD_CAM reset + 8 + 1 + read-write + + + UART2_RST + Set 1 to let UART2 reset + 9 + 1 + read-write + + + USB_DEVICE_RST + Set 1 to let USB_DEVICE reset + 10 + 1 + read-write + + + + + BT_LPCK_DIV_INT + low power clock frequent division factor configuration regsiter + 0x28 + 0x20 + 0x000000FF + + + BT_LPCK_DIV_NUM + This field is lower power clock frequent division factor + 0 + 12 + read-write + + + + + BT_LPCK_DIV_FRAC + low power clock configuration register + 0x2C + 0x20 + 0x02001001 + + + BT_LPCK_DIV_B + This field is lower power clock frequent division factor b + 0 + 12 + read-write + + + BT_LPCK_DIV_A + This field is lower power clock frequent division factor a + 12 + 12 + read-write + + + LPCLK_SEL_RTC_SLOW + Set 1 to select rtc-slow clock as rtc low power clock + 24 + 1 + read-write + + + LPCLK_SEL_8M + Set 1 to select 8m clock as rtc low power clock + 25 + 1 + read-write + + + LPCLK_SEL_XTAL + Set 1 to select xtal clock as rtc low power clock + 26 + 1 + read-write + + + LPCLK_SEL_XTAL32K + Set 1 to select xtal32k clock as low power clock + 27 + 1 + read-write + + + LPCLK_RTC_EN + Set 1 to enable RTC low power clock + 28 + 1 + read-write + + + + + CPU_INTR_FROM_CPU_0 + interrupt source register 0 + 0x30 + 0x20 + + + CPU_INTR_FROM_CPU_0 + Set 1 to generate cpu interrupt 0 + 0 + 1 + read-write + + + + + CPU_INTR_FROM_CPU_1 + interrupt source register 1 + 0x34 + 0x20 + + + CPU_INTR_FROM_CPU_1 + Set 1 to generate cpu interrupt 1 + 0 + 1 + read-write + + + + + CPU_INTR_FROM_CPU_2 + interrupt source register 2 + 0x38 + 0x20 + + + CPU_INTR_FROM_CPU_2 + Set 1 to generate cpu interrupt 2 + 0 + 1 + read-write + + + + + CPU_INTR_FROM_CPU_3 + interrupt source register 3 + 0x3C + 0x20 + + + CPU_INTR_FROM_CPU_3 + Set 1 to generate cpu interrupt 3 + 0 + 1 + read-write + + + + + RSA_PD_CTRL + rsa memory power control register + 0x40 + 0x20 + 0x00000001 + + + RSA_MEM_PD + Set 1 to power down RSA memory. This bit has the lowest priority.When Digital Signature occupies the RSA, this bit is invalid. + 0 + 1 + read-write + + + RSA_MEM_FORCE_PU + Set 1 to force power up RSA memory, this bit has the second highest priority. + 1 + 1 + read-write + + + RSA_MEM_FORCE_PD + Set 1 to force power down RSA memory,this bit has the highest priority. + 2 + 1 + read-write + + + + + EDMA_CTRL + EDMA control register + 0x44 + 0x20 + 0x00000001 + + + EDMA_CLK_ON + Set 1 to enable EDMA clock. + 0 + 1 + read-write + + + EDMA_RESET + Set 1 to let EDMA reset + 1 + 1 + read-write + + + + + CACHE_CONTROL + Cache control register + 0x48 + 0x20 + 0x00000005 + + + ICACHE_CLK_ON + Set 1 to enable icache clock + 0 + 1 + read-write + + + ICACHE_RESET + Set 1 to let icache reset + 1 + 1 + read-write + + + DCACHE_CLK_ON + Set 1 to enable dcache clock + 2 + 1 + read-write + + + DCACHE_RESET + Set 1 to let dcache reset + 3 + 1 + read-write + + + + + EXTERNAL_DEVICE_ENCRYPT_DECRYPT_CONTROL + External memory encrypt and decrypt control register + 0x4C + 0x20 + + + ENABLE_SPI_MANUAL_ENCRYPT + Set 1 to enable the SPI manual encrypt. + 0 + 1 + read-write + + + ENABLE_DOWNLOAD_DB_ENCRYPT + Set 1 to enable download DB encrypt. + 1 + 1 + read-write + + + ENABLE_DOWNLOAD_G0CB_DECRYPT + Set 1 to enable download G0CB decrypt + 2 + 1 + read-write + + + ENABLE_DOWNLOAD_MANUAL_ENCRYPT + Set 1 to enable download manual encrypt + 3 + 1 + read-write + + + + + RTC_FASTMEM_CONFIG + RTC fast memory configuration register + 0x50 + 0x20 + 0x7FF00000 + + + RTC_MEM_CRC_START + Set 1 to start the CRC of RTC memory + 8 + 1 + read-write + + + RTC_MEM_CRC_ADDR + This field is used to set address of RTC memory for CRC. + 9 + 11 + read-write + + + RTC_MEM_CRC_LEN + This field is used to set length of RTC memory for CRC based on start address. + 20 + 11 + read-write + + + RTC_MEM_CRC_FINISH + This bit stores the status of RTC memory CRC.1 means finished. + 31 + 1 + read-only + + + + + RTC_FASTMEM_CRC + RTC fast memory CRC control register + 0x54 + 0x20 + + + RTC_MEM_CRC_RES + This field stores the CRC result of RTC memory. + 0 + 32 + read-only + + + + + REDUNDANT_ECO_CTRL + ******* Description *********** + 0x58 + 0x20 + + + REDUNDANT_ECO_DRIVE + ******* Description *********** + 0 + 1 + read-write + + + REDUNDANT_ECO_RESULT + ******* Description *********** + 1 + 1 + read-only + + + + + CLOCK_GATE + ******* Description *********** + 0x5C + 0x20 + 0x00000001 + + + CLK_EN + ******* Description *********** + 0 + 1 + read-write + + + + + SYSCLK_CONF + System clock configuration register. + 0x60 + 0x20 + 0x00000001 + + + PRE_DIV_CNT + This field is used to set the count of prescaler of XTAL_CLK. + 0 + 10 + read-write + + + SOC_CLK_SEL + This field is used to select soc clock. + 10 + 2 + read-write + + + CLK_XTAL_FREQ + This field is used to read xtal frequency in MHz. + 12 + 7 + read-only + + + CLK_DIV_EN + Reserved. + 19 + 1 + read-only + + + + + MEM_PVT + ******* Description *********** + 0x64 + 0x20 + 0x00000003 + + + MEM_PATH_LEN + ******* Description *********** + 0 + 4 + read-write + + + MEM_ERR_CNT_CLR + ******* Description *********** + 4 + 1 + write-only + + + MONITOR_EN + ******* Description *********** + 5 + 1 + read-write + + + MEM_TIMING_ERR_CNT + ******* Description *********** + 6 + 16 + read-only + + + MEM_VT_SEL + ******* Description *********** + 22 + 2 + read-write + + + + + COMB_PVT_LVT_CONF + ******* Description *********** + 0x68 + 0x20 + 0x00000003 + + + COMB_PATH_LEN_LVT + ******* Description *********** + 0 + 5 + read-write + + + COMB_ERR_CNT_CLR_LVT + ******* Description *********** + 5 + 1 + write-only + + + COMB_PVT_MONITOR_EN_LVT + ******* Description *********** + 6 + 1 + read-write + + + + + COMB_PVT_NVT_CONF + ******* Description *********** + 0x6C + 0x20 + 0x00000003 + + + COMB_PATH_LEN_NVT + ******* Description *********** + 0 + 5 + read-write + + + COMB_ERR_CNT_CLR_NVT + ******* Description *********** + 5 + 1 + write-only + + + COMB_PVT_MONITOR_EN_NVT + ******* Description *********** + 6 + 1 + read-write + + + + + COMB_PVT_HVT_CONF + ******* Description *********** + 0x70 + 0x20 + 0x00000003 + + + COMB_PATH_LEN_HVT + ******* Description *********** + 0 + 5 + read-write + + + COMB_ERR_CNT_CLR_HVT + ******* Description *********** + 5 + 1 + write-only + + + COMB_PVT_MONITOR_EN_HVT + ******* Description *********** + 6 + 1 + read-write + + + + + COMB_PVT_ERR_LVT_SITE0 + ******* Description *********** + 0x74 + 0x20 + + + COMB_TIMING_ERR_CNT_LVT_SITE0 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_NVT_SITE0 + ******* Description *********** + 0x78 + 0x20 + + + COMB_TIMING_ERR_CNT_NVT_SITE0 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_HVT_SITE0 + ******* Description *********** + 0x7C + 0x20 + + + COMB_TIMING_ERR_CNT_HVT_SITE0 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_LVT_SITE1 + ******* Description *********** + 0x80 + 0x20 + + + COMB_TIMING_ERR_CNT_LVT_SITE1 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_NVT_SITE1 + ******* Description *********** + 0x84 + 0x20 + + + COMB_TIMING_ERR_CNT_NVT_SITE1 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_HVT_SITE1 + ******* Description *********** + 0x88 + 0x20 + + + COMB_TIMING_ERR_CNT_HVT_SITE1 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_LVT_SITE2 + ******* Description *********** + 0x8C + 0x20 + + + COMB_TIMING_ERR_CNT_LVT_SITE2 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_NVT_SITE2 + ******* Description *********** + 0x90 + 0x20 + + + COMB_TIMING_ERR_CNT_NVT_SITE2 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_HVT_SITE2 + ******* Description *********** + 0x94 + 0x20 + + + COMB_TIMING_ERR_CNT_HVT_SITE2 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_LVT_SITE3 + ******* Description *********** + 0x98 + 0x20 + + + COMB_TIMING_ERR_CNT_LVT_SITE3 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_NVT_SITE3 + ******* Description *********** + 0x9C + 0x20 + + + COMB_TIMING_ERR_CNT_NVT_SITE3 + ******* Description *********** + 0 + 16 + read-only + + + + + COMB_PVT_ERR_HVT_SITE3 + ******* Description *********** + 0xA0 + 0x20 + + + COMB_TIMING_ERR_CNT_HVT_SITE3 + ******* Description *********** + 0 + 16 + read-only + + + + + DATE + version register + 0xFFC + 0x20 + 0x02101220 + + + DATE + version register + 0 + 28 + read-write + + + + + + + SYSTIMER + System Timer + SYSTIMER + 0x60023000 + + 0x0 + 0x90 + registers + + + SYSTIMER_TARGET0 + 57 + + + SYSTIMER_TARGET1 + 58 + + + SYSTIMER_TARGET2 + 59 + + + + CONF + Configure system timer clock + 0x0 + 0x20 + 0x46000000 + + + SYSTIMER_CLK_FO + systimer clock force on + 0 + 1 + read-write + + + TARGET2_WORK_EN + target2 work enable + 22 + 1 + read-write + + + TARGET1_WORK_EN + target1 work enable + 23 + 1 + read-write + + + TARGET0_WORK_EN + target0 work enable + 24 + 1 + read-write + + + TIMER_UNIT1_CORE1_STALL_EN + If timer unit1 is stalled when core1 stalled + 25 + 1 + read-write + + + TIMER_UNIT1_CORE0_STALL_EN + If timer unit1 is stalled when core0 stalled + 26 + 1 + read-write + + + TIMER_UNIT0_CORE1_STALL_EN + If timer unit0 is stalled when core1 stalled + 27 + 1 + read-write + + + TIMER_UNIT0_CORE0_STALL_EN + If timer unit0 is stalled when core0 stalled + 28 + 1 + read-write + + + TIMER_UNIT1_WORK_EN + timer unit1 work enable + 29 + 1 + read-write + + + TIMER_UNIT0_WORK_EN + timer unit0 work enable + 30 + 1 + read-write + + + CLK_EN + register file clk gating + 31 + 1 + read-write + + + + + UNIT0_OP + system timer unit0 value update register + 0x4 + 0x20 + + + TIMER_UNIT0_VALUE_VALID + timer value is sync and valid + 29 + 1 + read-only + + + TIMER_UNIT0_UPDATE + update timer_unit0 + 30 + 1 + write-only + + + + + UNIT1_OP + system timer unit1 value update register + 0x8 + 0x20 + + + TIMER_UNIT1_VALUE_VALID + timer value is sync and valid + 29 + 1 + read-only + + + TIMER_UNIT1_UPDATE + update timer unit1 + 30 + 1 + write-only + + + + + UNIT0_LOAD_HI + system timer unit0 value high load register + 0xC + 0x20 + + + TIMER_UNIT0_LOAD_HI + timer unit0 load high 20 bits + 0 + 20 + read-write + + + + + UNIT0_LOAD_LO + system timer unit0 value low load register + 0x10 + 0x20 + + + TIMER_UNIT0_LOAD_LO + timer unit0 load low 32 bits + 0 + 32 + read-write + + + + + UNIT1_LOAD_HI + system timer unit1 value high load register + 0x14 + 0x20 + + + TIMER_UNIT1_LOAD_HI + timer unit1 load high 20 bits + 0 + 20 + read-write + + + + + UNIT1_LOAD_LO + system timer unit1 value low load register + 0x18 + 0x20 + + + TIMER_UNIT1_LOAD_LO + timer unit1 load low 32 bits + 0 + 32 + read-write + + + + + TARGET0_HI + system timer comp0 value high register + 0x1C + 0x20 + + + TIMER_TARGET0_HI + timer taget0 high 20 bits + 0 + 20 + read-write + + + + + TARGET0_LO + system timer comp0 value low register + 0x20 + 0x20 + + + TIMER_TARGET0_LO + timer taget0 low 32 bits + 0 + 32 + read-write + + + + + TARGET1_HI + system timer comp1 value high register + 0x24 + 0x20 + + + TIMER_TARGET1_HI + timer taget1 high 20 bits + 0 + 20 + read-write + + + + + TARGET1_LO + system timer comp1 value low register + 0x28 + 0x20 + + + TIMER_TARGET1_LO + timer taget1 low 32 bits + 0 + 32 + read-write + + + + + TARGET2_HI + system timer comp2 value high register + 0x2C + 0x20 + + + TIMER_TARGET2_HI + timer taget2 high 20 bits + 0 + 20 + read-write + + + + + TARGET2_LO + system timer comp2 value low register + 0x30 + 0x20 + + + TIMER_TARGET2_LO + timer taget2 low 32 bits + 0 + 32 + read-write + + + + + TARGET0_CONF + system timer comp0 target mode register + 0x34 + 0x20 + + + TARGET0_PERIOD + target0 period + 0 + 26 + read-write + + + TARGET0_PERIOD_MODE + Set target0 to period mode + 30 + 1 + read-write + + + TARGET0_TIMER_UNIT_SEL + select which unit to compare + 31 + 1 + read-write + + + + + TARGET1_CONF + system timer comp1 target mode register + 0x38 + 0x20 + + + TARGET1_PERIOD + target1 period + 0 + 26 + read-write + + + TARGET1_PERIOD_MODE + Set target1 to period mode + 30 + 1 + read-write + + + TARGET1_TIMER_UNIT_SEL + select which unit to compare + 31 + 1 + read-write + + + + + TARGET2_CONF + system timer comp2 target mode register + 0x3C + 0x20 + + + TARGET2_PERIOD + target2 period + 0 + 26 + read-write + + + TARGET2_PERIOD_MODE + Set target2 to period mode + 30 + 1 + read-write + + + TARGET2_TIMER_UNIT_SEL + select which unit to compare + 31 + 1 + read-write + + + + + UNIT0_VALUE_HI + system timer unit0 value high register + 0x40 + 0x20 + + + TIMER_UNIT0_VALUE_HI + timer read value high 20bits + 0 + 20 + read-only + + + + + UNIT0_VALUE_LO + system timer unit0 value low register + 0x44 + 0x20 + + + TIMER_UNIT0_VALUE_LO + timer read value low 32bits + 0 + 32 + read-only + + + + + UNIT1_VALUE_HI + system timer unit1 value high register + 0x48 + 0x20 + + + TIMER_UNIT1_VALUE_HI + timer read value high 20bits + 0 + 20 + read-only + + + + + UNIT1_VALUE_LO + system timer unit1 value low register + 0x4C + 0x20 + + + TIMER_UNIT1_VALUE_LO + timer read value low 32bits + 0 + 32 + read-only + + + + + COMP0_LOAD + system timer comp0 conf sync register + 0x50 + 0x20 + + + TIMER_COMP0_LOAD + timer comp0 sync enable signal + 0 + 1 + write-only + + + + + COMP1_LOAD + system timer comp1 conf sync register + 0x54 + 0x20 + + + TIMER_COMP1_LOAD + timer comp1 sync enable signal + 0 + 1 + write-only + + + + + COMP2_LOAD + system timer comp2 conf sync register + 0x58 + 0x20 + + + TIMER_COMP2_LOAD + timer comp2 sync enable signal + 0 + 1 + write-only + + + + + UNIT0_LOAD + system timer unit0 conf sync register + 0x5C + 0x20 + + + TIMER_UNIT0_LOAD + timer unit0 sync enable signal + 0 + 1 + write-only + + + + + UNIT1_LOAD + system timer unit1 conf sync register + 0x60 + 0x20 + + + TIMER_UNIT1_LOAD + timer unit1 sync enable signal + 0 + 1 + write-only + + + + + INT_ENA + systimer interrupt enable register + 0x64 + 0x20 + + + TARGET0_INT_ENA + interupt0 enable + 0 + 1 + read-write + + + TARGET1_INT_ENA + interupt1 enable + 1 + 1 + read-write + + + TARGET2_INT_ENA + interupt2 enable + 2 + 1 + read-write + + + + + INT_RAW + systimer interrupt raw register + 0x68 + 0x20 + + + TARGET0_INT_RAW + interupt0 raw + 0 + 1 + read-write + + + TARGET1_INT_RAW + interupt1 raw + 1 + 1 + read-write + + + TARGET2_INT_RAW + interupt2 raw + 2 + 1 + read-write + + + + + INT_CLR + systimer interrupt clear register + 0x6C + 0x20 + + + TARGET0_INT_CLR + interupt0 clear + 0 + 1 + write-only + + + TARGET1_INT_CLR + interupt1 clear + 1 + 1 + write-only + + + TARGET2_INT_CLR + interupt2 clear + 2 + 1 + write-only + + + + + INT_ST + systimer interrupt status register + 0x70 + 0x20 + + + TARGET0_INT_ST + interupt0 status + 0 + 1 + read-only + + + TARGET1_INT_ST + interupt1 status + 1 + 1 + read-only + + + TARGET2_INT_ST + interupt2 status + 2 + 1 + read-only + + + + + REAL_TARGET0_LO + system timer comp0 actual target value low register + 0x74 + 0x20 + + + TARGET0_LO_RO + actual target value value low 32bits + 0 + 32 + read-only + + + + + REAL_TARGET0_HI + system timer comp0 actual target value high register + 0x78 + 0x20 + + + TARGET0_HI_RO + actual target value value high 20bits + 0 + 20 + read-only + + + + + REAL_TARGET1_LO + system timer comp1 actual target value low register + 0x7C + 0x20 + + + TARGET1_LO_RO + actual target value value low 32bits + 0 + 32 + read-only + + + + + REAL_TARGET1_HI + system timer comp1 actual target value high register + 0x80 + 0x20 + + + TARGET1_HI_RO + actual target value value high 20bits + 0 + 20 + read-only + + + + + REAL_TARGET2_LO + system timer comp2 actual target value low register + 0x84 + 0x20 + + + TARGET2_LO_RO + actual target value value low 32bits + 0 + 32 + read-only + + + + + REAL_TARGET2_HI + system timer comp2 actual target value high register + 0x88 + 0x20 + + + TARGET2_HI_RO + actual target value value high 20bits + 0 + 20 + read-only + + + + + DATE + system timer version control register + 0xFC + 0x20 + 0x02012251 + + + DATE + systimer register version + 0 + 32 + read-write + + + + + + + TIMG0 + Timer Group 0 + TIMG + 0x6001F000 + + 0x0 + 0x8C + registers + + + TG0_T0_LEVEL + 50 + + + TG0_T1_LEVEL + 51 + + + TG0_WDT_LEVEL + 52 + + + + 2 + 0x24 + T%sCONFIG + Timer %s configuration register + 0x0 + 0x20 + 0x60002000 + + + USE_XTAL + 1: Use XTAL_CLK as the source clock of timer group. 0: Use APB_CLK as the source clock of timer group. + 9 + 1 + read-write + + + ALARM_EN + When set, the alarm is enabled. This bit is automatically cleared once an +alarm occurs. + 10 + 1 + read-write + + + DIVIDER + Timer %s clock (T%s_clk) prescaler value. + 13 + 16 + read-write + + + AUTORELOAD + When set, timer %s auto-reload at alarm is enabled. + 29 + 1 + read-write + + + INCREASE + When set, the timer %s time-base counter will increment every clock tick. When +cleared, the timer %s time-base counter will decrement. + 30 + 1 + read-write + + + EN + When set, the timer %s time-base counter is enabled. + 31 + 1 + read-write + + + + + 2 + 0x24 + T%sLO + Timer %s current value, low 32 bits + 0x4 + 0x20 + + + LO + After writing to TIMG_T%sUPDATE_REG, the low 32 bits of the time-base counter +of timer %s can be read here. + 0 + 32 + read-only + + + + + 2 + 0x24 + T%sHI + Timer %s current value, high 22 bits + 0x8 + 0x20 + + + HI + After writing to TIMG_T%sUPDATE_REG, the high 22 bits of the time-base counter +of timer %s can be read here. + 0 + 22 + read-only + + + + + 2 + 0x24 + T%sUPDATE + Write to copy current timer value to TIMGn_T%s_(LO/HI)_REG + 0xC + 0x20 + + + UPDATE + After writing 0 or 1 to TIMG_T%sUPDATE_REG, the counter value is latched. + 31 + 1 + read-write + + + + + 2 + 0x24 + T%sALARMLO + Timer %s alarm value, low 32 bits + 0x10 + 0x20 + + + ALARM_LO + Timer %s alarm trigger time-base counter value, low 32 bits. + 0 + 32 + read-write + + + + + 2 + 0x24 + T%sALARMHI + Timer %s alarm value, high bits + 0x14 + 0x20 + + + ALARM_HI + Timer %s alarm trigger time-base counter value, high 22 bits. + 0 + 22 + read-write + + + + + 2 + 0x24 + T%sLOADLO + Timer %s reload value, low 32 bits + 0x18 + 0x20 + + + LOAD_LO + Low 32 bits of the value that a reload will load onto timer %s time-base +Counter. + 0 + 32 + read-write + + + + + 2 + 0x24 + T%sLOADHI + Timer %s reload value, high 22 bits + 0x1C + 0x20 + + + LOAD_HI + High 22 bits of the value that a reload will load onto timer %s time-base +counter. + 0 + 22 + read-write + + + + + 2 + 0x24 + T%sLOAD + Write to reload timer from TIMG_T%s_(LOADLOLOADHI)_REG + 0x20 + 0x20 + + + LOAD + +Write any value to trigger a timer %s time-base counter reload. + 0 + 32 + write-only + + + + + WDTCONFIG0 + Watchdog timer configuration register + 0x48 + 0x20 + 0x0004C000 + + + WDT_APPCPU_RESET_EN + Reserved + 12 + 1 + read-write + + + WDT_PROCPU_RESET_EN + WDT reset CPU enable. + 13 + 1 + read-write + + + WDT_FLASHBOOT_MOD_EN + When set, Flash boot protection is enabled. + 14 + 1 + read-write + + + WDT_SYS_RESET_LENGTH + System reset signal length selection. 0: 100 ns, 1: 200 ns, +2: 300 ns, 3: 400 ns, 4: 500 ns, 5: 800 ns, 6: 1.6 us, 7: 3.2 us. + 15 + 3 + read-write + + + WDT_CPU_RESET_LENGTH + CPU reset signal length selection. 0: 100 ns, 1: 200 ns, +2: 300 ns, 3: 400 ns, 4: 500 ns, 5: 800 ns, 6: 1.6 us, 7: 3.2 us. + 18 + 3 + read-write + + + WDT_STG3 + Stage 3 configuration. 0: off, 1: interrupt, 2: reset CPU, 3: reset system. + + 23 + 2 + read-write + + + WDT_STG2 + Stage 2 configuration. 0: off, 1: interrupt, 2: reset CPU, 3: reset system. + + 25 + 2 + read-write + + + WDT_STG1 + Stage 1 configuration. 0: off, 1: interrupt, 2: reset CPU, 3: reset system. + + 27 + 2 + read-write + + + WDT_STG0 + Stage 0 configuration. 0: off, 1: interrupt, 2: reset CPU, 3: reset system. + + 29 + 2 + read-write + + + WDT_EN + When set, MWDT is enabled. + 31 + 1 + read-write + + + + + WDTCONFIG1 + Watchdog timer prescaler register + 0x4C + 0x20 + 0x00010000 + + + WDT_CLK_PRESCALE + MWDT clock prescaler value. MWDT clock period = 12.5 ns * +TIMG_WDT_CLK_PRESCALE. + 16 + 16 + read-write + + + + + WDTCONFIG2 + Watchdog timer stage 0 timeout value + 0x50 + 0x20 + 0x018CBA80 + + + WDT_STG0_HOLD + Stage 0 timeout value, in MWDT clock cycles. + 0 + 32 + read-write + + + + + WDTCONFIG3 + Watchdog timer stage 1 timeout value + 0x54 + 0x20 + 0x07FFFFFF + + + WDT_STG1_HOLD + Stage 1 timeout value, in MWDT clock cycles. + 0 + 32 + read-write + + + + + WDTCONFIG4 + Watchdog timer stage 2 timeout value + 0x58 + 0x20 + 0x000FFFFF + + + WDT_STG2_HOLD + Stage 2 timeout value, in MWDT clock cycles. + 0 + 32 + read-write + + + + + WDTCONFIG5 + Watchdog timer stage 3 timeout value + 0x5C + 0x20 + 0x000FFFFF + + + WDT_STG3_HOLD + Stage 3 timeout value, in MWDT clock cycles. + 0 + 32 + read-write + + + + + WDTFEED + Write to feed the watchdog timer + 0x60 + 0x20 + + + WDT_FEED + Write any value to feed the MWDT. (WO) + 0 + 32 + write-only + + + + + WDTWPROTECT + Watchdog write protect register + 0x64 + 0x20 + 0x50D83AA1 + + + WDT_WKEY + If the register contains a different value than its reset value, write +protection is enabled. + 0 + 32 + read-write + + + + + RTCCALICFG + RTC calibration configure register + 0x68 + 0x20 + 0x00013000 + + + RTC_CALI_START_CYCLING + Reserved + 12 + 1 + read-write + + + RTC_CALI_CLK_SEL + 0:rtc slow clock. 1:clk_80m. 2:xtal_32k. + 13 + 2 + read-write + + + RTC_CALI_RDY + Reserved + 15 + 1 + read-only + + + RTC_CALI_MAX + Reserved + 16 + 15 + read-write + + + RTC_CALI_START + Reserved + 31 + 1 + read-write + + + + + RTCCALICFG1 + RTC calibration configure1 register + 0x6C + 0x20 + + + RTC_CALI_CYCLING_DATA_VLD + Reserved + 0 + 1 + read-only + + + RTC_CALI_VALUE + Reserved + 7 + 25 + read-only + + + + + INT_ENA_TIMERS + Interrupt enable bits + 0x70 + 0x20 + + + T0_INT_ENA + The interrupt enable bit for the TIMG_T0_INT interrupt. + 0 + 1 + read-write + + + T1_INT_ENA + The interrupt enable bit for the TIMG_T1_INT interrupt. + 1 + 1 + read-write + + + WDT_INT_ENA + The interrupt enable bit for the TIMG_WDT_INT interrupt. + 2 + 1 + read-write + + + + + INT_RAW_TIMERS + Raw interrupt status + 0x74 + 0x20 + + + T0_INT_RAW + The raw interrupt status bit for the TIMG_T0_INT interrupt. + 0 + 1 + read-write + + + T1_INT_RAW + The raw interrupt status bit for the TIMG_T1_INT interrupt. + 1 + 1 + read-write + + + WDT_INT_RAW + The raw interrupt status bit for the TIMG_WDT_INT interrupt. + 2 + 1 + read-write + + + + + INT_ST_TIMERS + Masked interrupt status + 0x78 + 0x20 + + + T0_INT_ST + The masked interrupt status bit for the TIMG_T0_INT interrupt. + 0 + 1 + read-only + + + T1_INT_ST + The masked interrupt status bit for the TIMG_T1_INT interrupt. + 1 + 1 + read-only + + + WDT_INT_ST + The masked interrupt status bit for the TIMG_WDT_INT interrupt. + 2 + 1 + read-only + + + + + INT_CLR_TIMERS + Interrupt clear bits + 0x7C + 0x20 + + + T0_INT_CLR + Set this bit to clear the TIMG_T0_INT interrupt. + 0 + 1 + write-only + + + T1_INT_CLR + Set this bit to clear the TIMG_T1_INT interrupt. + 1 + 1 + write-only + + + WDT_INT_CLR + Set this bit to clear the TIMG_WDT_INT interrupt. + 2 + 1 + write-only + + + + + RTCCALICFG2 + Timer group calibration register + 0x80 + 0x20 + 0xFFFFFF98 + + + RTC_CALI_TIMEOUT + RTC calibration timeout indicator + 0 + 1 + read-only + + + RTC_CALI_TIMEOUT_RST_CNT + Cycles that release calibration timeout reset + 3 + 4 + read-write + + + RTC_CALI_TIMEOUT_THRES + Threshold value for the RTC calibration timer. If the calibration timer's value exceeds this threshold, a timeout is triggered. + 7 + 25 + read-write + + + + + NTIMERS_DATE + Timer version control register + 0xF8 + 0x20 + 0x02003071 + + + NTIMERS_DATE + Timer version control register + 0 + 28 + read-write + + + + + REGCLK + Timer group clock gate register + 0xFC + 0x20 + + + CLK_EN + Register clock gate signal. 1: The clock for software to read and write registers is always on. 0: The clock for software to read and write registers only exits when the operation happens. + 31 + 1 + read-write + + + + + + + TIMG1 + Timer Group 1 + 0x60020000 + + TG1_T0_LEVEL + 53 + + + TG1_T1_LEVEL + 54 + + + TG1_WDT_LEVEL + 55 + + + + TWAI0 + Two-Wire Automotive Interface + TWAI + 0x6002B000 + + 0x0 + 0x6C + registers + + + TWAI0 + 37 + + + + MODE + Mode Register + 0x0 + 0x20 + 0x00000001 + + + RESET_MODE + This bit is used to configure the operating mode of the TWAI Controller. 1: Reset mode; 0: Operating mode. + 0 + 1 + read-write + + + LISTEN_ONLY_MODE + 1: Listen only mode. In this mode the nodes will only receive messages from the bus, without generating the acknowledge signal nor updating the RX error counter. + 1 + 1 + read-write + + + SELF_TEST_MODE + 1: Self test mode. In this mode the TX nodes can perform a successful transmission without receiving the acknowledge signal. This mode is often used to test a single node with the self reception request command. + 2 + 1 + read-write + + + RX_FILTER_MODE + This bit is used to configure the filter mode. 0: Dual filter mode; 1: Single filter mode. + 3 + 1 + read-write + + + + + CMD + Command Register + 0x4 + 0x20 + + + TX_REQ + Set the bit to 1 to allow the driving nodes start transmission. + 0 + 1 + write-only + + + ABORT_TX + Set the bit to 1 to cancel a pending transmission request. + 1 + 1 + write-only + + + RELEASE_BUF + Set the bit to 1 to release the RX buffer. + 2 + 1 + write-only + + + CLR_OVERRUN + Set the bit to 1 to clear the data overrun status bit. + 3 + 1 + write-only + + + SELF_RX_REQ + Self reception request command. Set the bit to 1 to allow a message be transmitted and received simultaneously. + 4 + 1 + write-only + + + + + STATUS + Status register + 0x8 + 0x20 + + + RX_BUF_ST + 1: The data in the RX buffer is not empty, with at least one received data packet. + 0 + 1 + read-only + + + OVERRUN_ST + 1: The RX FIFO is full and data overrun has occurred. + 1 + 1 + read-only + + + TX_BUF_ST + 1: The TX buffer is empty, the CPU may write a message into it. + 2 + 1 + read-only + + + TX_COMPLETE + 1: The TWAI controller has successfully received a packet from the bus. + 3 + 1 + read-only + + + RX_ST + 1: The TWAI Controller is receiving a message from the bus. + 4 + 1 + read-only + + + TX_ST + 1: The TWAI Controller is transmitting a message to the bus. + 5 + 1 + read-only + + + ERR_ST + 1: At least one of the RX/TX error counter has reached or exceeded the value set in register TWAI_ERR_WARNING_LIMIT_REG. + 6 + 1 + read-only + + + BUS_OFF_ST + 1: In bus-off status, the TWAI Controller is no longer involved in bus activities. + 7 + 1 + read-only + + + MISS_ST + This bit reflects whether the data packet in the RX FIFO is complete. 1: The current packet is missing; 0: The current packet is complete + 8 + 1 + read-only + + + + + INT_RAW + Interrupt Register + 0xC + 0x20 + + + RX_INT_ST + Receive interrupt. If this bit is set to 1, it indicates there are messages to be handled in the RX FIFO. + 0 + 1 + read-only + + + TX_INT_ST + Transmit interrupt. If this bit is set to 1, it indicates the message transmitting mis- sion is finished and a new transmission is able to execute. + 1 + 1 + read-only + + + ERR_WARN_INT_ST + Error warning interrupt. If this bit is set to 1, it indicates the error status signal and the bus-off status signal of Status register have changed (e.g., switched from 0 to 1 or from 1 to 0). + 2 + 1 + read-only + + + OVERRUN_INT_ST + Data overrun interrupt. If this bit is set to 1, it indicates a data overrun interrupt is generated in the RX FIFO. + 3 + 1 + read-only + + + ERR_PASSIVE_INT_ST + Error passive interrupt. If this bit is set to 1, it indicates the TWAI Controller is switched between error active status and error passive status due to the change of error counters. + 5 + 1 + read-only + + + ARB_LOST_INT_ST + Arbitration lost interrupt. If this bit is set to 1, it indicates an arbitration lost interrupt is generated. + 6 + 1 + read-only + + + BUS_ERR_INT_ST + Error interrupt. If this bit is set to 1, it indicates an error is detected on the bus. + 7 + 1 + read-only + + + + + INT_ENA + Interrupt Enable Register + 0x10 + 0x20 + + + RX_INT_ENA + Set this bit to 1 to enable receive interrupt. + 0 + 1 + read-write + + + TX_INT_ENA + Set this bit to 1 to enable transmit interrupt. + 1 + 1 + read-write + + + ERR_WARN_INT_ENA + Set this bit to 1 to enable error warning interrupt. + 2 + 1 + read-write + + + OVERRUN_INT_ENA + Set this bit to 1 to enable data overrun interrupt. + 3 + 1 + read-write + + + ERR_PASSIVE_INT_ENA + Set this bit to 1 to enable error passive interrupt. + 5 + 1 + read-write + + + ARB_LOST_INT_ENA + Set this bit to 1 to enable arbitration lost interrupt. + 6 + 1 + read-write + + + BUS_ERR_INT_ENA + Set this bit to 1 to enable error interrupt. + 7 + 1 + read-write + + + + + BUS_TIMING_0 + Bus Timing Register 0 + 0x18 + 0x20 + + + BAUD_PRESC + Baud Rate Prescaler, determines the frequency dividing ratio. + 0 + 14 + read-write + + + SYNC_JUMP_WIDTH + Synchronization Jump Width (SJW), 1 \verb+~+ 14 Tq wide. + 14 + 2 + read-write + + + + + BUS_TIMING_1 + Bus Timing Register 1 + 0x1C + 0x20 + + + TIME_SEG1 + The width of PBS1. + 0 + 4 + read-write + + + TIME_SEG2 + The width of PBS2. + 4 + 3 + read-write + + + TIME_SAMP + The number of sample points. 0: the bus is sampled once; 1: the bus is sampled three times + 7 + 1 + read-write + + + + + ARB_LOST_CAP + Arbitration Lost Capture Register + 0x2C + 0x20 + + + ARB_LOST_CAP + This register contains information about the bit position of lost arbitration. + 0 + 5 + read-only + + + + + ERR_CODE_CAP + Error Code Capture Register + 0x30 + 0x20 + + + ECC_SEGMENT + This register contains information about the location of errors, see Table 181 for details. + 0 + 5 + read-only + + + ECC_DIRECTION + This register contains information about transmission direction of the node when error occurs. 1: Error occurs when receiving a message; 0: Error occurs when transmitting a message + 5 + 1 + read-only + + + ECC_TYPE + This register contains information about error types: 00: bit error; 01: form error; 10: stuff error; 11: other type of error + 6 + 2 + read-only + + + + + ERR_WARNING_LIMIT + Error Warning Limit Register + 0x34 + 0x20 + 0x00000060 + + + ERR_WARNING_LIMIT + Error warning threshold. In the case when any of a error counter value exceeds the threshold, or all the error counter values are below the threshold, an error warning interrupt will be triggered (given the enable signal is valid). + 0 + 8 + read-write + + + + + RX_ERR_CNT + Receive Error Counter Register + 0x38 + 0x20 + + + RX_ERR_CNT + The RX error counter register, reflects value changes under reception status. + 0 + 8 + read-write + + + + + TX_ERR_CNT + Transmit Error Counter Register + 0x3C + 0x20 + + + TX_ERR_CNT + The TX error counter register, reflects value changes under transmission status. + 0 + 8 + read-write + + + + + DATA_0 + Data register 0 + 0x40 + 0x20 + + + TX_BYTE_0 + In reset mode, it is acceptance code register 0 with R/W Permission. In operation mode, it stores the 0th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_1 + Data register 1 + 0x44 + 0x20 + + + TX_BYTE_1 + In reset mode, it is acceptance code register 1 with R/W Permission. In operation mode, it stores the 1st byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_2 + Data register 2 + 0x48 + 0x20 + + + TX_BYTE_2 + In reset mode, it is acceptance code register 2 with R/W Permission. In operation mode, it stores the 2nd byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_3 + Data register 3 + 0x4C + 0x20 + + + TX_BYTE_3 + In reset mode, it is acceptance code register 3 with R/W Permission. In operation mode, it stores the 3rd byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_4 + Data register 4 + 0x50 + 0x20 + + + TX_BYTE_4 + In reset mode, it is acceptance mask register 0 with R/W Permission. In operation mode, it stores the 4th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_5 + Data register 5 + 0x54 + 0x20 + + + TX_BYTE_5 + In reset mode, it is acceptance mask register 1 with R/W Permission. In operation mode, it stores the 5th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_6 + Data register 6 + 0x58 + 0x20 + + + TX_BYTE_6 + In reset mode, it is acceptance mask register 2 with R/W Permission. In operation mode, it stores the 6th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_7 + Data register 7 + 0x5C + 0x20 + + + TX_BYTE_7 + In reset mode, it is acceptance mask register 3 with R/W Permission. In operation mode, it stores the 7th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_8 + Data register 8 + 0x60 + 0x20 + + + TX_BYTE_8 + Stored the 8th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_9 + Data register 9 + 0x64 + 0x20 + + + TX_BYTE_9 + Stored the 9th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_10 + Data register 10 + 0x68 + 0x20 + + + TX_BYTE_10 + Stored the 10th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_11 + Data register 11 + 0x6C + 0x20 + + + TX_BYTE_11 + Stored the 11th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + DATA_12 + Data register 12 + 0x70 + 0x20 + + + TX_BYTE_12 + Stored the 12th byte information of the data to be transmitted under operating mode. + 0 + 8 + read-write + + + + + RX_MESSAGE_CNT + Receive Message Counter Register + 0x74 + 0x20 + + + RX_MESSAGE_COUNTER + This register reflects the number of messages available within the RX FIFO. + 0 + 7 + read-only + + + + + CLOCK_DIVIDER + Clock Divider register + 0x7C + 0x20 + + + CD + These bits are used to configure frequency dividing coefficients of the external CLKOUT pin. + 0 + 8 + read-write + + + CLOCK_OFF + This bit can be configured under reset mode. 1: Disable the external CLKOUT pin; 0: Enable the external CLKOUT pin + 8 + 1 + read-write + + + + + + + UART0 + UART (Universal Asynchronous Receiver-Transmitter) Controller 0 + UART + 0x60000000 + + 0x0 + 0x84 + registers + + + UART0 + 27 + + + + FIFO + FIFO data register + 0x0 + 0x20 + + + RXFIFO_RD_BYTE + UART 0 accesses FIFO via this register. + 0 + 8 + read-write + + + + + INT_RAW + Raw interrupt status + 0x4 + 0x20 + 0x00000002 + + + RXFIFO_FULL_INT_RAW + This interrupt raw bit turns to high level when receiver receives more data than what rxfifo_full_thrhd specifies. + 0 + 1 + read-write + + + TXFIFO_EMPTY_INT_RAW + This interrupt raw bit turns to high level when the amount of data in Tx-FIFO is less than what txfifo_empty_thrhd specifies . + 1 + 1 + read-write + + + PARITY_ERR_INT_RAW + This interrupt raw bit turns to high level when receiver detects a parity error in the data. + 2 + 1 + read-write + + + FRM_ERR_INT_RAW + This interrupt raw bit turns to high level when receiver detects a data frame error . + 3 + 1 + read-write + + + RXFIFO_OVF_INT_RAW + This interrupt raw bit turns to high level when receiver receives more data than the FIFO can store. + 4 + 1 + read-write + + + DSR_CHG_INT_RAW + This interrupt raw bit turns to high level when receiver detects the edge change of DSRn signal. + 5 + 1 + read-write + + + CTS_CHG_INT_RAW + This interrupt raw bit turns to high level when receiver detects the edge change of CTSn signal. + 6 + 1 + read-write + + + BRK_DET_INT_RAW + This interrupt raw bit turns to high level when receiver detects a 0 after the stop bit. + 7 + 1 + read-write + + + RXFIFO_TOUT_INT_RAW + This interrupt raw bit turns to high level when receiver takes more time than rx_tout_thrhd to receive a byte. + 8 + 1 + read-write + + + SW_XON_INT_RAW + This interrupt raw bit turns to high level when receiver recevies Xon char when uart_sw_flow_con_en is set to 1. + 9 + 1 + read-write + + + SW_XOFF_INT_RAW + This interrupt raw bit turns to high level when receiver receives Xoff char when uart_sw_flow_con_en is set to 1. + 10 + 1 + read-write + + + GLITCH_DET_INT_RAW + This interrupt raw bit turns to high level when receiver detects a glitch in the middle of a start bit. + 11 + 1 + read-write + + + TX_BRK_DONE_INT_RAW + This interrupt raw bit turns to high level when transmitter completes sending NULL characters, after all data in Tx-FIFO are sent. + 12 + 1 + read-write + + + TX_BRK_IDLE_DONE_INT_RAW + This interrupt raw bit turns to high level when transmitter has kept the shortest duration after sending the last data. + 13 + 1 + read-write + + + TX_DONE_INT_RAW + This interrupt raw bit turns to high level when transmitter has send out all data in FIFO. + 14 + 1 + read-write + + + RS485_PARITY_ERR_INT_RAW + This interrupt raw bit turns to high level when receiver detects a parity error from the echo of transmitter in rs485 mode. + 15 + 1 + read-write + + + RS485_FRM_ERR_INT_RAW + This interrupt raw bit turns to high level when receiver detects a data frame error from the echo of transmitter in rs485 mode. + 16 + 1 + read-write + + + RS485_CLASH_INT_RAW + This interrupt raw bit turns to high level when detects a clash between transmitter and receiver in rs485 mode. + 17 + 1 + read-write + + + AT_CMD_CHAR_DET_INT_RAW + This interrupt raw bit turns to high level when receiver detects the configured at_cmd char. + 18 + 1 + read-write + + + WAKEUP_INT_RAW + This interrupt raw bit turns to high level when input rxd edge changes more times than what reg_active_threshold specifies in light sleeping mode. + 19 + 1 + read-write + + + + + INT_ST + Masked interrupt status + 0x8 + 0x20 + + + RXFIFO_FULL_INT_ST + This is the status bit for rxfifo_full_int_raw when rxfifo_full_int_ena is set to 1. + 0 + 1 + read-only + + + TXFIFO_EMPTY_INT_ST + This is the status bit for txfifo_empty_int_raw when txfifo_empty_int_ena is set to 1. + 1 + 1 + read-only + + + PARITY_ERR_INT_ST + This is the status bit for parity_err_int_raw when parity_err_int_ena is set to 1. + 2 + 1 + read-only + + + FRM_ERR_INT_ST + This is the status bit for frm_err_int_raw when frm_err_int_ena is set to 1. + 3 + 1 + read-only + + + RXFIFO_OVF_INT_ST + This is the status bit for rxfifo_ovf_int_raw when rxfifo_ovf_int_ena is set to 1. + 4 + 1 + read-only + + + DSR_CHG_INT_ST + This is the status bit for dsr_chg_int_raw when dsr_chg_int_ena is set to 1. + 5 + 1 + read-only + + + CTS_CHG_INT_ST + This is the status bit for cts_chg_int_raw when cts_chg_int_ena is set to 1. + 6 + 1 + read-only + + + BRK_DET_INT_ST + This is the status bit for brk_det_int_raw when brk_det_int_ena is set to 1. + 7 + 1 + read-only + + + RXFIFO_TOUT_INT_ST + This is the status bit for rxfifo_tout_int_raw when rxfifo_tout_int_ena is set to 1. + 8 + 1 + read-only + + + SW_XON_INT_ST + This is the status bit for sw_xon_int_raw when sw_xon_int_ena is set to 1. + 9 + 1 + read-only + + + SW_XOFF_INT_ST + This is the status bit for sw_xoff_int_raw when sw_xoff_int_ena is set to 1. + 10 + 1 + read-only + + + GLITCH_DET_INT_ST + This is the status bit for glitch_det_int_raw when glitch_det_int_ena is set to 1. + 11 + 1 + read-only + + + TX_BRK_DONE_INT_ST + This is the status bit for tx_brk_done_int_raw when tx_brk_done_int_ena is set to 1. + 12 + 1 + read-only + + + TX_BRK_IDLE_DONE_INT_ST + This is the stauts bit for tx_brk_idle_done_int_raw when tx_brk_idle_done_int_ena is set to 1. + 13 + 1 + read-only + + + TX_DONE_INT_ST + This is the status bit for tx_done_int_raw when tx_done_int_ena is set to 1. + 14 + 1 + read-only + + + RS485_PARITY_ERR_INT_ST + This is the status bit for rs485_parity_err_int_raw when rs485_parity_int_ena is set to 1. + 15 + 1 + read-only + + + RS485_FRM_ERR_INT_ST + This is the status bit for rs485_frm_err_int_raw when rs485_fm_err_int_ena is set to 1. + 16 + 1 + read-only + + + RS485_CLASH_INT_ST + This is the status bit for rs485_clash_int_raw when rs485_clash_int_ena is set to 1. + 17 + 1 + read-only + + + AT_CMD_CHAR_DET_INT_ST + This is the status bit for at_cmd_det_int_raw when at_cmd_char_det_int_ena is set to 1. + 18 + 1 + read-only + + + WAKEUP_INT_ST + This is the status bit for uart_wakeup_int_raw when uart_wakeup_int_ena is set to 1. + 19 + 1 + read-only + + + + + INT_ENA + Interrupt enable bits + 0xC + 0x20 + + + RXFIFO_FULL_INT_ENA + This is the enable bit for rxfifo_full_int_st register. + 0 + 1 + read-write + + + TXFIFO_EMPTY_INT_ENA + This is the enable bit for txfifo_empty_int_st register. + 1 + 1 + read-write + + + PARITY_ERR_INT_ENA + This is the enable bit for parity_err_int_st register. + 2 + 1 + read-write + + + FRM_ERR_INT_ENA + This is the enable bit for frm_err_int_st register. + 3 + 1 + read-write + + + RXFIFO_OVF_INT_ENA + This is the enable bit for rxfifo_ovf_int_st register. + 4 + 1 + read-write + + + DSR_CHG_INT_ENA + This is the enable bit for dsr_chg_int_st register. + 5 + 1 + read-write + + + CTS_CHG_INT_ENA + This is the enable bit for cts_chg_int_st register. + 6 + 1 + read-write + + + BRK_DET_INT_ENA + This is the enable bit for brk_det_int_st register. + 7 + 1 + read-write + + + RXFIFO_TOUT_INT_ENA + This is the enable bit for rxfifo_tout_int_st register. + 8 + 1 + read-write + + + SW_XON_INT_ENA + This is the enable bit for sw_xon_int_st register. + 9 + 1 + read-write + + + SW_XOFF_INT_ENA + This is the enable bit for sw_xoff_int_st register. + 10 + 1 + read-write + + + GLITCH_DET_INT_ENA + This is the enable bit for glitch_det_int_st register. + 11 + 1 + read-write + + + TX_BRK_DONE_INT_ENA + This is the enable bit for tx_brk_done_int_st register. + 12 + 1 + read-write + + + TX_BRK_IDLE_DONE_INT_ENA + This is the enable bit for tx_brk_idle_done_int_st register. + 13 + 1 + read-write + + + TX_DONE_INT_ENA + This is the enable bit for tx_done_int_st register. + 14 + 1 + read-write + + + RS485_PARITY_ERR_INT_ENA + This is the enable bit for rs485_parity_err_int_st register. + 15 + 1 + read-write + + + RS485_FRM_ERR_INT_ENA + This is the enable bit for rs485_parity_err_int_st register. + 16 + 1 + read-write + + + RS485_CLASH_INT_ENA + This is the enable bit for rs485_clash_int_st register. + 17 + 1 + read-write + + + AT_CMD_CHAR_DET_INT_ENA + This is the enable bit for at_cmd_char_det_int_st register. + 18 + 1 + read-write + + + WAKEUP_INT_ENA + This is the enable bit for uart_wakeup_int_st register. + 19 + 1 + read-write + + + + + INT_CLR + Interrupt clear bits + 0x10 + 0x20 + + + RXFIFO_FULL_INT_CLR + Set this bit to clear the rxfifo_full_int_raw interrupt. + 0 + 1 + write-only + + + TXFIFO_EMPTY_INT_CLR + Set this bit to clear txfifo_empty_int_raw interrupt. + 1 + 1 + write-only + + + PARITY_ERR_INT_CLR + Set this bit to clear parity_err_int_raw interrupt. + 2 + 1 + write-only + + + FRM_ERR_INT_CLR + Set this bit to clear frm_err_int_raw interrupt. + 3 + 1 + write-only + + + RXFIFO_OVF_INT_CLR + Set this bit to clear rxfifo_ovf_int_raw interrupt. + 4 + 1 + write-only + + + DSR_CHG_INT_CLR + Set this bit to clear the dsr_chg_int_raw interrupt. + 5 + 1 + write-only + + + CTS_CHG_INT_CLR + Set this bit to clear the cts_chg_int_raw interrupt. + 6 + 1 + write-only + + + BRK_DET_INT_CLR + Set this bit to clear the brk_det_int_raw interrupt. + 7 + 1 + write-only + + + RXFIFO_TOUT_INT_CLR + Set this bit to clear the rxfifo_tout_int_raw interrupt. + 8 + 1 + write-only + + + SW_XON_INT_CLR + Set this bit to clear the sw_xon_int_raw interrupt. + 9 + 1 + write-only + + + SW_XOFF_INT_CLR + Set this bit to clear the sw_xoff_int_raw interrupt. + 10 + 1 + write-only + + + GLITCH_DET_INT_CLR + Set this bit to clear the glitch_det_int_raw interrupt. + 11 + 1 + write-only + + + TX_BRK_DONE_INT_CLR + Set this bit to clear the tx_brk_done_int_raw interrupt.. + 12 + 1 + write-only + + + TX_BRK_IDLE_DONE_INT_CLR + Set this bit to clear the tx_brk_idle_done_int_raw interrupt. + 13 + 1 + write-only + + + TX_DONE_INT_CLR + Set this bit to clear the tx_done_int_raw interrupt. + 14 + 1 + write-only + + + RS485_PARITY_ERR_INT_CLR + Set this bit to clear the rs485_parity_err_int_raw interrupt. + 15 + 1 + write-only + + + RS485_FRM_ERR_INT_CLR + Set this bit to clear the rs485_frm_err_int_raw interrupt. + 16 + 1 + write-only + + + RS485_CLASH_INT_CLR + Set this bit to clear the rs485_clash_int_raw interrupt. + 17 + 1 + write-only + + + AT_CMD_CHAR_DET_INT_CLR + Set this bit to clear the at_cmd_char_det_int_raw interrupt. + 18 + 1 + write-only + + + WAKEUP_INT_CLR + Set this bit to clear the uart_wakeup_int_raw interrupt. + 19 + 1 + write-only + + + + + CLKDIV + Clock divider configuration + 0x14 + 0x20 + 0x000002B6 + + + CLKDIV + The integral part of the frequency divider factor. + 0 + 12 + read-write + + + FRAG + The decimal part of the frequency divider factor. + 20 + 4 + read-write + + + + + RX_FILT + Rx Filter configuration + 0x18 + 0x20 + 0x00000008 + + + GLITCH_FILT + when input pulse width is lower than this value, the pulse is ignored. + 0 + 8 + read-write + + + GLITCH_FILT_EN + Set this bit to enable Rx signal filter. + 8 + 1 + read-write + + + + + STATUS + UART status register + 0x1C + 0x20 + 0xE000C000 + + + RXFIFO_CNT + Stores the byte number of valid data in Rx-FIFO. + 0 + 10 + read-only + + + DSRN + The register represent the level value of the internal uart dsr signal. + 13 + 1 + read-only + + + CTSN + This register represent the level value of the internal uart cts signal. + 14 + 1 + read-only + + + RXD + This register represent the level value of the internal uart rxd signal. + 15 + 1 + read-only + + + TXFIFO_CNT + Stores the byte number of data in Tx-FIFO. + 16 + 10 + read-only + + + DTRN + This bit represents the level of the internal uart dtr signal. + 29 + 1 + read-only + + + RTSN + This bit represents the level of the internal uart rts signal. + 30 + 1 + read-only + + + TXD + This bit represents the level of the internal uart txd signal. + 31 + 1 + read-only + + + + + CONF0 + a + 0x20 + 0x20 + 0x1000001C + + + PARITY + This register is used to configure the parity check mode. + 0 + 1 + read-write + + + PARITY_EN + Set this bit to enable uart parity check. + 1 + 1 + read-write + + + BIT_NUM + This register is used to set the length of data. + 2 + 2 + read-write + + + STOP_BIT_NUM + This register is used to set the length of stop bit. + 4 + 2 + read-write + + + SW_RTS + This register is used to configure the software rts signal which is used in software flow control. + 6 + 1 + read-write + + + SW_DTR + This register is used to configure the software dtr signal which is used in software flow control. + 7 + 1 + read-write + + + TXD_BRK + Set this bit to enbale transmitter to send NULL when the process of sending data is done. + 8 + 1 + read-write + + + IRDA_DPLX + Set this bit to enable IrDA loopback mode. + 9 + 1 + read-write + + + IRDA_TX_EN + This is the start enable bit for IrDA transmitter. + 10 + 1 + read-write + + + IRDA_WCTL + 1'h1: The IrDA transmitter's 11th bit is the same as 10th bit. 1'h0: Set IrDA transmitter's 11th bit to 0. + 11 + 1 + read-write + + + IRDA_TX_INV + Set this bit to invert the level of IrDA transmitter. + 12 + 1 + read-write + + + IRDA_RX_INV + Set this bit to invert the level of IrDA receiver. + 13 + 1 + read-write + + + LOOPBACK + Set this bit to enable uart loopback test mode. + 14 + 1 + read-write + + + TX_FLOW_EN + Set this bit to enable flow control function for transmitter. + 15 + 1 + read-write + + + IRDA_EN + Set this bit to enable IrDA protocol. + 16 + 1 + read-write + + + RXFIFO_RST + Set this bit to reset the uart receive-FIFO. + 17 + 1 + read-write + + + TXFIFO_RST + Set this bit to reset the uart transmit-FIFO. + 18 + 1 + read-write + + + RXD_INV + Set this bit to inverse the level value of uart rxd signal. + 19 + 1 + read-write + + + CTS_INV + Set this bit to inverse the level value of uart cts signal. + 20 + 1 + read-write + + + DSR_INV + Set this bit to inverse the level value of uart dsr signal. + 21 + 1 + read-write + + + TXD_INV + Set this bit to inverse the level value of uart txd signal. + 22 + 1 + read-write + + + RTS_INV + Set this bit to inverse the level value of uart rts signal. + 23 + 1 + read-write + + + DTR_INV + Set this bit to inverse the level value of uart dtr signal. + 24 + 1 + read-write + + + CLK_EN + 1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers. + 25 + 1 + read-write + + + ERR_WR_MASK + 1'h1: Receiver stops storing data into FIFO when data is wrong. 1'h0: Receiver stores the data even if the received data is wrong. + 26 + 1 + read-write + + + AUTOBAUD_EN + This is the enable bit for detecting baudrate. + 27 + 1 + read-write + + + MEM_CLK_EN + UART memory clock gate enable signal. + 28 + 1 + read-write + + + + + CONF1 + Configuration register 1 + 0x24 + 0x20 + 0x00018060 + + + RXFIFO_FULL_THRHD + It will produce rxfifo_full_int interrupt when receiver receives more data than this register value. + 0 + 10 + read-write + + + TXFIFO_EMPTY_THRHD + It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value. + 10 + 10 + read-write + + + DIS_RX_DAT_OVF + Disable UART Rx data overflow detect. + 20 + 1 + read-write + + + RX_TOUT_FLOW_DIS + Set this bit to stop accumulating idle_cnt when hardware flow control works. + 21 + 1 + read-write + + + RX_FLOW_EN + This is the flow enable bit for UART receiver. + 22 + 1 + read-write + + + RX_TOUT_EN + This is the enble bit for uart receiver's timeout function. + 23 + 1 + read-write + + + + + LOWPULSE + Autobaud minimum low pulse duration register + 0x28 + 0x20 + 0x00000FFF + + + MIN_CNT + This register stores the value of the minimum duration time of the low level pulse. It is used in baud rate-detect process. + 0 + 12 + read-only + + + + + HIGHPULSE + Autobaud minimum high pulse duration register + 0x2C + 0x20 + 0x00000FFF + + + MIN_CNT + This register stores the value of the maxinum duration time for the high level pulse. It is used in baud rate-detect process. + 0 + 12 + read-only + + + + + RXD_CNT + Autobaud edge change count register + 0x30 + 0x20 + + + RXD_EDGE_CNT + This register stores the count of rxd edge change. It is used in baud rate-detect process. + 0 + 10 + read-only + + + + + FLOW_CONF + Software flow-control configuration + 0x34 + 0x20 + + + SW_FLOW_CON_EN + Set this bit to enable software flow control. It is used with register sw_xon or sw_xoff. + 0 + 1 + read-write + + + XONOFF_DEL + Set this bit to remove flow control char from the received data. + 1 + 1 + read-write + + + FORCE_XON + Set this bit to enable the transmitter to go on sending data. + 2 + 1 + read-write + + + FORCE_XOFF + Set this bit to stop the transmitter from sending data. + 3 + 1 + read-write + + + SEND_XON + Set this bit to send Xon char. It is cleared by hardware automatically. + 4 + 1 + read-write + + + SEND_XOFF + Set this bit to send Xoff char. It is cleared by hardware automatically. + 5 + 1 + read-write + + + + + SLEEP_CONF + Sleep-mode configuration + 0x38 + 0x20 + 0x000000F0 + + + ACTIVE_THRESHOLD + The uart is activated from light sleeping mode when the input rxd edge changes more times than this register value. + 0 + 10 + read-write + + + + + SWFC_CONF0 + Software flow-control character configuration + 0x3C + 0x20 + 0x00004CE0 + + + XOFF_THRESHOLD + When the data amount in Rx-FIFO is more than this register value with uart_sw_flow_con_en set to 1, it will send a Xoff char. + 0 + 10 + read-write + + + XOFF_CHAR + This register stores the Xoff flow control char. + 10 + 8 + read-write + + + + + SWFC_CONF1 + Software flow-control character configuration + 0x40 + 0x20 + 0x00004400 + + + XON_THRESHOLD + When the data amount in Rx-FIFO is less than this register value with uart_sw_flow_con_en set to 1, it will send a Xon char. + 0 + 10 + read-write + + + XON_CHAR + This register stores the Xon flow control char. + 10 + 8 + read-write + + + + + TXBRK_CONF + Tx Break character configuration + 0x44 + 0x20 + 0x0000000A + + + TX_BRK_NUM + This register is used to configure the number of 0 to be sent after the process of sending data is done. It is active when txd_brk is set to 1. + 0 + 8 + read-write + + + + + IDLE_CONF + Frame-end idle configuration + 0x48 + 0x20 + 0x00040100 + + + RX_IDLE_THRHD + It will produce frame end signal when receiver takes more time to receive one byte data than this register value. + 0 + 10 + read-write + + + TX_IDLE_NUM + This register is used to configure the duration time between transfers. + 10 + 10 + read-write + + + + + RS485_CONF + RS485 mode configuration + 0x4C + 0x20 + + + RS485_EN + Set this bit to choose the rs485 mode. + 0 + 1 + read-write + + + DL0_EN + Set this bit to delay the stop bit by 1 bit. + 1 + 1 + read-write + + + DL1_EN + Set this bit to delay the stop bit by 1 bit. + 2 + 1 + read-write + + + RS485TX_RX_EN + Set this bit to enable receiver could receive data when the transmitter is transmitting data in rs485 mode. + 3 + 1 + read-write + + + RS485RXBY_TX_EN + 1'h1: enable rs485 transmitter to send data when rs485 receiver line is busy. + 4 + 1 + read-write + + + RS485_RX_DLY_NUM + This register is used to delay the receiver's internal data signal. + 5 + 1 + read-write + + + RS485_TX_DLY_NUM + This register is used to delay the transmitter's internal data signal. + 6 + 4 + read-write + + + + + AT_CMD_PRECNT + Pre-sequence timing configuration + 0x50 + 0x20 + 0x00000901 + + + PRE_IDLE_NUM + This register is used to configure the idle duration time before the first at_cmd is received by receiver. + 0 + 16 + read-write + + + + + AT_CMD_POSTCNT + Post-sequence timing configuration + 0x54 + 0x20 + 0x00000901 + + + POST_IDLE_NUM + This register is used to configure the duration time between the last at_cmd and the next data. + 0 + 16 + read-write + + + + + AT_CMD_GAPTOUT + Timeout configuration + 0x58 + 0x20 + 0x0000000B + + + RX_GAP_TOUT + This register is used to configure the duration time between the at_cmd chars. + 0 + 16 + read-write + + + + + AT_CMD_CHAR + AT escape sequence detection configuration + 0x5C + 0x20 + 0x0000032B + + + AT_CMD_CHAR + This register is used to configure the content of at_cmd char. + 0 + 8 + read-write + + + CHAR_NUM + This register is used to configure the num of continuous at_cmd chars received by receiver. + 8 + 8 + read-write + + + + + MEM_CONF + UART threshold and allocation configuration + 0x60 + 0x20 + 0x00140012 + + + RX_SIZE + This register is used to configure the amount of mem allocated for receive-FIFO. The default number is 128 bytes. + 1 + 3 + read-write + + + TX_SIZE + This register is used to configure the amount of mem allocated for transmit-FIFO. The default number is 128 bytes. + 4 + 3 + read-write + + + RX_FLOW_THRHD + This register is used to configure the maximum amount of data that can be received when hardware flow control works. + 7 + 10 + read-write + + + RX_TOUT_THRHD + This register is used to configure the threshold time that receiver takes to receive one byte. The rxfifo_tout_int interrupt will be trigger when the receiver takes more time to receive one byte with rx_tout_en set to 1. + 17 + 10 + read-write + + + MEM_FORCE_PD + Set this bit to force power down UART memory. + 27 + 1 + read-write + + + MEM_FORCE_PU + Set this bit to force power up UART memory. + 28 + 1 + read-write + + + + + MEM_TX_STATUS + Tx-FIFO write and read offset address. + 0x64 + 0x20 + + + APB_TX_WADDR + This register stores the offset address in Tx-FIFO when software writes Tx-FIFO via APB. + 0 + 10 + read-only + + + TX_RADDR + This register stores the offset address in Tx-FIFO when Tx-FSM reads data via Tx-FIFO_Ctrl. + 11 + 10 + read-only + + + + + MEM_RX_STATUS + Rx-FIFO write and read offset address. + 0x68 + 0x20 + 0x00100200 + + + APB_RX_RADDR + This register stores the offset address in RX-FIFO when software reads data from Rx-FIFO via APB. UART0 is 10'h200. UART1 is 10'h280. UART2 is 10'h300. + 0 + 10 + read-only + + + RX_WADDR + This register stores the offset address in Rx-FIFO when Rx-FIFO_Ctrl writes Rx-FIFO. UART0 is 10'h200. UART1 is 10'h280. UART2 is 10'h300. + 11 + 10 + read-only + + + + + FSM_STATUS + UART transmit and receive status. + 0x6C + 0x20 + + + ST_URX_OUT + This is the status register of receiver. + 0 + 4 + read-only + + + ST_UTX_OUT + This is the status register of transmitter. + 4 + 4 + read-only + + + + + POSPULSE + Autobaud high pulse register + 0x70 + 0x20 + 0x00000FFF + + + POSEDGE_MIN_CNT + This register stores the minimal input clock count between two positive edges. It is used in boudrate-detect process. + 0 + 12 + read-only + + + + + NEGPULSE + Autobaud low pulse register + 0x74 + 0x20 + 0x00000FFF + + + NEGEDGE_MIN_CNT + This register stores the minimal input clock count between two negative edges. It is used in boudrate-detect process. + 0 + 12 + read-only + + + + + CLK_CONF + UART core clock configuration + 0x78 + 0x20 + 0x03701000 + + + SCLK_DIV_B + The denominator of the frequency divider factor. + 0 + 6 + read-write + + + SCLK_DIV_A + The numerator of the frequency divider factor. + 6 + 6 + read-write + + + SCLK_DIV_NUM + The integral part of the frequency divider factor. + 12 + 8 + read-write + + + SCLK_SEL + UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL. + 20 + 2 + read-write + + + SCLK_EN + Set this bit to enable UART Tx/Rx clock. + 22 + 1 + read-write + + + RST_CORE + Write 1 then write 0 to this bit, reset UART Tx/Rx. + 23 + 1 + read-write + + + TX_SCLK_EN + Set this bit to enable UART Tx clock. + 24 + 1 + read-write + + + RX_SCLK_EN + Set this bit to enable UART Rx clock. + 25 + 1 + read-write + + + TX_RST_CORE + Write 1 then write 0 to this bit, reset UART Tx. + 26 + 1 + read-write + + + RX_RST_CORE + Write 1 then write 0 to this bit, reset UART Rx. + 27 + 1 + read-write + + + + + DATE + UART Version register + 0x7C + 0x20 + 0x02008270 + + + DATE + This is the version register. + 0 + 32 + read-write + + + + + ID + UART ID register + 0x80 + 0x20 + 0x40000500 + + + ID + This register is used to configure the uart_id. + 0 + 30 + read-write + + + HIGH_SPEED + This bit used to select synchronize mode. 1: Registers are auto synchronized into UART Core clock and UART core should be keep the same with APB clock. 0: After configure registers, software needs to write 1 to UART_REG_UPDATE to synchronize registers. + 30 + 1 + read-write + + + REG_UPDATE + Software write 1 would synchronize registers into UART Core clock domain and would be cleared by hardware after synchronization is done. + 31 + 1 + read-write + + + + + + + UART1 + UART (Universal Asynchronous Receiver-Transmitter) Controller 1 + 0x60010000 + + UART1 + 28 + + + + UART2 + UART (Universal Asynchronous Receiver-Transmitter) Controller 2 + 0x6002E000 + + UART2 + 29 + + + + UHCI0 + Universal Host Controller Interface 0 + UHCI + 0x60014000 + + 0x0 + 0x88 + registers + + + UHCI0 + 14 + + + + CONF0 + UHCI configuration register + 0x0 + 0x20 + 0x000006E0 + + + TX_RST + Write 1, then write 0 to this bit to reset decode state machine. + 0 + 1 + read-write + + + RX_RST + Write 1, then write 0 to this bit to reset encode state machine. + 1 + 1 + read-write + + + UART0_CE + Set this bit to link up HCI and UART0. + 2 + 1 + read-write + + + UART1_CE + Set this bit to link up HCI and UART1. + 3 + 1 + read-write + + + UART2_CE + Set this bit to link up HCI and UART2. + 4 + 1 + read-write + + + SEPER_EN + Set this bit to separate the data frame using a special char. + 5 + 1 + read-write + + + HEAD_EN + Set this bit to encode the data packet with a formatting header. + 6 + 1 + read-write + + + CRC_REC_EN + Set this bit to enable UHCI to receive the 16 bit CRC. + 7 + 1 + read-write + + + UART_IDLE_EOF_EN + If this bit is set to 1, UHCI will end the payload receiving process when UART has been in idle state. + 8 + 1 + read-write + + + LEN_EOF_EN + If this bit is set to 1, UHCI decoder receiving payload data is end when the receiving byte count has reached the specified value. The value is payload length indicated by UHCI packet header when UHCI_HEAD_EN is 1 or the value is configuration value when UHCI_HEAD_EN is 0. If this bit is set to 0, UHCI decoder receiving payload data is end when 0xc0 is received. + 9 + 1 + read-write + + + ENCODE_CRC_EN + Set this bit to enable data integrity checking by appending a 16 bit CCITT-CRC to end of the payload. + 10 + 1 + read-write + + + CLK_EN + 1'b1: Force clock on for register. 1'b0: Support clock only when application writes registers. + 11 + 1 + read-write + + + UART_RX_BRK_EOF_EN + If this bit is set to 1, UHCI will end payload receive process when NULL frame is received by UART. + 12 + 1 + read-write + + + + + INT_RAW + Raw interrupt status + 0x4 + 0x20 + + + RX_START_INT_RAW + This is the interrupt raw bit. Triggered when a separator char has been sent. + 0 + 1 + read-write + + + TX_START_INT_RAW + This is the interrupt raw bit. Triggered when UHCI detects a separator char. + 1 + 1 + read-write + + + RX_HUNG_INT_RAW + This is the interrupt raw bit. Triggered when UHCI takes more time to receive data than configure value. + 2 + 1 + read-write + + + TX_HUNG_INT_RAW + This is the interrupt raw bit. Triggered when UHCI takes more time to read data from RAM than the configured value. + 3 + 1 + read-write + + + SEND_S_REG_Q_INT_RAW + This is the interrupt raw bit. Triggered when UHCI has sent out a short packet using single_send registers. + 4 + 1 + read-write + + + SEND_A_REG_Q_INT_RAW + This is the interrupt raw bit. Triggered when UHCI has sent out a short packet using always_send registers. + 5 + 1 + read-write + + + OUT_EOF_INT_RAW + This is the interrupt raw bit. Triggered when there are some errors in EOF in the transmit data. + 6 + 1 + read-write + + + APP_CTRL0_INT_RAW + This is the interrupt raw bit. Triggered when set UHCI_APP_CTRL0_IN_SET. + 7 + 1 + read-write + + + APP_CTRL1_INT_RAW + This is the interrupt raw bit. Triggered when set UHCI_APP_CTRL1_IN_SET. + 8 + 1 + read-write + + + + + INT_ST + Masked interrupt status + 0x8 + 0x20 + + + RX_START_INT_ST + This is the masked interrupt bit for UHCI_RX_START_INT interrupt when UHCI_RX_START_INT_ENA is set to 1. + 0 + 1 + read-only + + + TX_START_INT_ST + This is the masked interrupt bit for UHCI_TX_START_INT interrupt when UHCI_TX_START_INT_ENA is set to 1. + 1 + 1 + read-only + + + RX_HUNG_INT_ST + This is the masked interrupt bit for UHCI_RX_HUNG_INT interrupt when UHCI_RX_HUNG_INT_ENA is set to 1. + 2 + 1 + read-only + + + TX_HUNG_INT_ST + This is the masked interrupt bit for UHCI_TX_HUNG_INT interrupt when UHCI_TX_HUNG_INT_ENA is set to 1. + 3 + 1 + read-only + + + SEND_S_REG_Q_INT_ST + This is the masked interrupt bit for UHCI_SEND_S_REQ_Q_INT interrupt when UHCI_SEND_S_REQ_Q_INT_ENA is set to 1. + 4 + 1 + read-only + + + SEND_A_REG_Q_INT_ST + This is the masked interrupt bit for UHCI_SEND_A_REQ_Q_INT interrupt when UHCI_SEND_A_REQ_Q_INT_ENA is set to 1. + 5 + 1 + read-only + + + OUTLINK_EOF_ERR_INT_ST + This is the masked interrupt bit for UHCI_OUTLINK_EOF_ERR_INT interrupt when UHCI_OUTLINK_EOF_ERR_INT_ENA is set to 1. + 6 + 1 + read-only + + + APP_CTRL0_INT_ST + This is the masked interrupt bit for UHCI_APP_CTRL0_INT interrupt when UHCI_APP_CTRL0_INT_ENA is set to 1. + 7 + 1 + read-only + + + APP_CTRL1_INT_ST + This is the masked interrupt bit for UHCI_APP_CTRL1_INT interrupt when UHCI_APP_CTRL1_INT_ENA is set to 1. + 8 + 1 + read-only + + + + + INT_ENA + Interrupt enable bits + 0xC + 0x20 + + + RX_START_INT_ENA + This is the interrupt enable bit for UHCI_RX_START_INT interrupt. + 0 + 1 + read-write + + + TX_START_INT_ENA + This is the interrupt enable bit for UHCI_TX_START_INT interrupt. + 1 + 1 + read-write + + + RX_HUNG_INT_ENA + This is the interrupt enable bit for UHCI_RX_HUNG_INT interrupt. + 2 + 1 + read-write + + + TX_HUNG_INT_ENA + This is the interrupt enable bit for UHCI_TX_HUNG_INT interrupt. + 3 + 1 + read-write + + + SEND_S_REG_Q_INT_ENA + This is the interrupt enable bit for UHCI_SEND_S_REQ_Q_INT interrupt. + 4 + 1 + read-write + + + SEND_A_REG_Q_INT_ENA + This is the interrupt enable bit for UHCI_SEND_A_REQ_Q_INT interrupt. + 5 + 1 + read-write + + + OUTLINK_EOF_ERR_INT_ENA + This is the interrupt enable bit for UHCI_OUTLINK_EOF_ERR_INT interrupt. + 6 + 1 + read-write + + + APP_CTRL0_INT_ENA + This is the interrupt enable bit for UHCI_APP_CTRL0_INT interrupt. + 7 + 1 + read-write + + + APP_CTRL1_INT_ENA + This is the interrupt enable bit for UHCI_APP_CTRL1_INT interrupt. + 8 + 1 + read-write + + + + + INT_CLR + Interrupt clear bits + 0x10 + 0x20 + + + RX_START_INT_CLR + Set this bit to clear UHCI_RX_START_INT interrupt. + 0 + 1 + write-only + + + TX_START_INT_CLR + Set this bit to clear UHCI_TX_START_INT interrupt. + 1 + 1 + write-only + + + RX_HUNG_INT_CLR + Set this bit to clear UHCI_RX_HUNG_INT interrupt. + 2 + 1 + write-only + + + TX_HUNG_INT_CLR + Set this bit to clear UHCI_TX_HUNG_INT interrupt. + 3 + 1 + write-only + + + SEND_S_REG_Q_INT_CLR + Set this bit to clear UHCI_SEND_S_REQ_Q_INT interrupt. + 4 + 1 + write-only + + + SEND_A_REG_Q_INT_CLR + Set this bit to clear UHCI_SEND_A_REQ_Q_INT interrupt. + 5 + 1 + write-only + + + OUTLINK_EOF_ERR_INT_CLR + Set this bit to clear UHCI_OUTLINK_EOF_ERR_INT interrupt. + 6 + 1 + write-only + + + APP_CTRL0_INT_CLR + Set this bit to clear UHCI_APP_CTRL0_INT interrupt. + 7 + 1 + write-only + + + APP_CTRL1_INT_CLR + Set this bit to clear UHCI_APP_CTRL1_INT interrupt. + 8 + 1 + write-only + + + + + APP_INT_SET + Software interrupt trigger source + 0x14 + 0x20 + + + APP_CTRL0_INT_SET + This bit is software interrupt trigger source of UHCI_APP_CTRL0_INT. + 0 + 1 + write-only + + + APP_CTRL1_INT_SET + This bit is software interrupt trigger source of UHCI_APP_CTRL1_INT. + 1 + 1 + write-only + + + + + CONF1 + UHCI configuration register + 0x18 + 0x20 + 0x00000033 + + + CHECK_SUM_EN + This is the enable bit to check header checksum when UHCI receives a data packet. + 0 + 1 + read-write + + + CHECK_SEQ_EN + This is the enable bit to check sequence number when UHCI receives a data packet. + 1 + 1 + read-write + + + CRC_DISABLE + Set this bit to support CRC calculation. Data Integrity Check Present bit in UHCI packet frame should be 1. + 2 + 1 + read-write + + + SAVE_HEAD + Set this bit to save the packet header when HCI receives a data packet. + 3 + 1 + read-write + + + TX_CHECK_SUM_RE + Set this bit to encode the data packet with a checksum. + 4 + 1 + read-write + + + TX_ACK_NUM_RE + Set this bit to encode the data packet with an acknowledgment when a reliable packet is to be transmit. + 5 + 1 + read-write + + + WAIT_SW_START + The uhci-encoder will jump to ST_SW_WAIT status if this register is set to 1. + 7 + 1 + read-write + + + SW_START + If current UHCI_ENCODE_STATE is ST_SW_WAIT, the UHCI will start to send data packet out when this bit is set to 1. + 8 + 1 + read-write + + + + + STATE0 + UHCI receive status + 0x1C + 0x20 + + + RX_ERR_CAUSE + This register indicates the error type when DMA has received a packet with error. 3'b001: Checksum error in HCI packet. 3'b010: Sequence number error in HCI packet. 3'b011: CRC bit error in HCI packet. 3'b100: 0xc0 is found but received HCI packet is not end. 3'b101: 0xc0 is not found when receiving HCI packet is end. 3'b110: CRC check error. + 0 + 3 + read-only + + + DECODE_STATE + UHCI decoder status. + 3 + 3 + read-only + + + + + STATE1 + UHCI transmit status + 0x20 + 0x20 + + + ENCODE_STATE + UHCI encoder status. + 0 + 3 + read-only + + + + + ESCAPE_CONF + Escape character configuration + 0x24 + 0x20 + 0x00000033 + + + TX_C0_ESC_EN + Set this bit to enable decoding char 0xc0 when DMA receives data. + 0 + 1 + read-write + + + TX_DB_ESC_EN + Set this bit to enable decoding char 0xdb when DMA receives data. + 1 + 1 + read-write + + + TX_11_ESC_EN + Set this bit to enable decoding flow control char 0x11 when DMA receives data. + 2 + 1 + read-write + + + TX_13_ESC_EN + Set this bit to enable decoding flow control char 0x13 when DMA receives data. + 3 + 1 + read-write + + + RX_C0_ESC_EN + Set this bit to enable replacing 0xc0 by special char when DMA sends data. + 4 + 1 + read-write + + + RX_DB_ESC_EN + Set this bit to enable replacing 0xdb by special char when DMA sends data. + 5 + 1 + read-write + + + RX_11_ESC_EN + Set this bit to enable replacing flow control char 0x11 by special char when DMA sends data. + 6 + 1 + read-write + + + RX_13_ESC_EN + Set this bit to enable replacing flow control char 0x13 by special char when DMA sends data. + 7 + 1 + read-write + + + + + HUNG_CONF + Timeout configuration + 0x28 + 0x20 + 0x00810810 + + + TXFIFO_TIMEOUT + This register stores the timeout value. It will produce the UHCI_TX_HUNG_INT interrupt when DMA takes more time to receive data. + 0 + 8 + read-write + + + TXFIFO_TIMEOUT_SHIFT + This register is used to configure the tick count maximum value. + 8 + 3 + read-write + + + TXFIFO_TIMEOUT_ENA + This is the enable bit for Tx-FIFO receive-data timeout. + 11 + 1 + read-write + + + RXFIFO_TIMEOUT + This register stores the timeout value. It will produce the UHCI_RX_HUNG_INT interrupt when DMA takes more time to read data from RAM. + 12 + 8 + read-write + + + RXFIFO_TIMEOUT_SHIFT + This register is used to configure the tick count maximum value. + 20 + 3 + read-write + + + RXFIFO_TIMEOUT_ENA + This is the enable bit for DMA send-data timeout. + 23 + 1 + read-write + + + + + ACK_NUM + UHCI ACK number configuration + 0x2C + 0x20 + 0x00000008 + + + ACK_NUM + This ACK number used in software flow control. + 0 + 3 + read-write + + + LOAD + Set this bit to 1, the value configured by UHCI_ACK_NUM would be loaded. + 3 + 1 + write-only + + + + + RX_HEAD + UHCI packet header register + 0x30 + 0x20 + + + RX_HEAD + This register stores the header of the current received packet. + 0 + 32 + read-only + + + + + QUICK_SENT + UHCI quick send configuration register + 0x34 + 0x20 + + + SINGLE_SEND_NUM + This register is used to specify the single_send register. + 0 + 3 + read-write + + + SINGLE_SEND_EN + Set this bit to enable single_send mode to send short packet. + 3 + 1 + read-write + + + ALWAYS_SEND_NUM + This register is used to specify the always_send register. + 4 + 3 + read-write + + + ALWAYS_SEND_EN + Set this bit to enable always_send mode to send short packet. + 7 + 1 + read-write + + + + + REG_Q0_WORD0 + Q0_WORD0 quick_sent register + 0x38 + 0x20 + + + SEND_Q0_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q0_WORD1 + Q0_WORD1 quick_sent register + 0x3C + 0x20 + + + SEND_Q0_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q1_WORD0 + Q1_WORD0 quick_sent register + 0x40 + 0x20 + + + SEND_Q1_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q1_WORD1 + Q1_WORD1 quick_sent register + 0x44 + 0x20 + + + SEND_Q1_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q2_WORD0 + Q2_WORD0 quick_sent register + 0x48 + 0x20 + + + SEND_Q2_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q2_WORD1 + Q2_WORD1 quick_sent register + 0x4C + 0x20 + + + SEND_Q2_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q3_WORD0 + Q3_WORD0 quick_sent register + 0x50 + 0x20 + + + SEND_Q3_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q3_WORD1 + Q3_WORD1 quick_sent register + 0x54 + 0x20 + + + SEND_Q3_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q4_WORD0 + Q4_WORD0 quick_sent register + 0x58 + 0x20 + + + SEND_Q4_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q4_WORD1 + Q4_WORD1 quick_sent register + 0x5C + 0x20 + + + SEND_Q4_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q5_WORD0 + Q5_WORD0 quick_sent register + 0x60 + 0x20 + + + SEND_Q5_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q5_WORD1 + Q5_WORD1 quick_sent register + 0x64 + 0x20 + + + SEND_Q5_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q6_WORD0 + Q6_WORD0 quick_sent register + 0x68 + 0x20 + + + SEND_Q6_WORD0 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + REG_Q6_WORD1 + Q6_WORD1 quick_sent register + 0x6C + 0x20 + + + SEND_Q6_WORD1 + This register is used as a quick_sent register when specified by UHCI_ALWAYS_SEND_NUM or UHCI_SINGLE_SEND_NUM. + 0 + 32 + read-write + + + + + ESC_CONF0 + Escape sequence configuration register 0 + 0x70 + 0x20 + 0x00DCDBC0 + + + SEPER_CHAR + This register is used to define the separate char that need to be encoded, default is 0xc0. + 0 + 8 + read-write + + + SEPER_ESC_CHAR0 + This register is used to define the first char of slip escape sequence when encoding the separate char, default is 0xdb. + 8 + 8 + read-write + + + SEPER_ESC_CHAR1 + This register is used to define the second char of slip escape sequence when encoding the separate char, default is 0xdc. + 16 + 8 + read-write + + + + + ESC_CONF1 + Escape sequence configuration register 1 + 0x74 + 0x20 + 0x00DDDBDB + + + ESC_SEQ0 + This register is used to define a char that need to be encoded, default is 0xdb that used as the first char of slip escape sequence. + 0 + 8 + read-write + + + ESC_SEQ0_CHAR0 + This register is used to define the first char of slip escape sequence when encoding the UHCI_ESC_SEQ0, default is 0xdb. + 8 + 8 + read-write + + + ESC_SEQ0_CHAR1 + This register is used to define the second char of slip escape sequence when encoding the UHCI_ESC_SEQ0, default is 0xdd. + 16 + 8 + read-write + + + + + ESC_CONF2 + Escape sequence configuration register 2 + 0x78 + 0x20 + 0x00DEDB11 + + + ESC_SEQ1 + This register is used to define a char that need to be encoded, default is 0x11 that used as flow control char. + 0 + 8 + read-write + + + ESC_SEQ1_CHAR0 + This register is used to define the first char of slip escape sequence when encoding the UHCI_ESC_SEQ1, default is 0xdb. + 8 + 8 + read-write + + + ESC_SEQ1_CHAR1 + This register is used to define the second char of slip escape sequence when encoding the UHCI_ESC_SEQ1, default is 0xde. + 16 + 8 + read-write + + + + + ESC_CONF3 + Escape sequence configuration register 3 + 0x7C + 0x20 + 0x00DFDB13 + + + ESC_SEQ2 + This register is used to define a char that need to be decoded, default is 0x13 that used as flow control char. + 0 + 8 + read-write + + + ESC_SEQ2_CHAR0 + This register is used to define the first char of slip escape sequence when encoding the UHCI_ESC_SEQ2, default is 0xdb. + 8 + 8 + read-write + + + ESC_SEQ2_CHAR1 + This register is used to define the second char of slip escape sequence when encoding the UHCI_ESC_SEQ2, default is 0xdf. + 16 + 8 + read-write + + + + + PKT_THRES + Configure register for packet length + 0x80 + 0x20 + 0x00000080 + + + PKT_THRS + This register is used to configure the maximum value of the packet length when UHCI_HEAD_EN is 0. + 0 + 13 + read-write + + + + + DATE + UHCI version control register + 0x84 + 0x20 + 0x02010090 + + + DATE + This is the version control register. + 0 + 32 + read-write + + + + + + + UHCI1 + Universal Host Controller Interface 1 + 0x6000C000 + + UHCI1 + 15 + + + + USB0 + USB OTG (On-The-Go) + USB + 0x60080000 + + 0x0 + 0x2A0 + registers + + + USB + 38 + + + + GOTGCTL + 0x0 + 0x20 + + + SESREQSCS + 0 + 1 + read-only + + + SESREQ + 1 + 1 + read-write + + + VBVALIDOVEN + 2 + 1 + read-write + + + VBVALIDOVVAL + 3 + 1 + read-write + + + AVALIDOVEN + 4 + 1 + read-write + + + AVALIDOVVAL + 5 + 1 + read-write + + + BVALIDOVEN + 6 + 1 + read-write + + + BVALIDOVVAL + 7 + 1 + read-write + + + HSTNEGSCS + 8 + 1 + read-only + + + HNPREQ + 9 + 1 + read-write + + + HSTSETHNPEN + 10 + 1 + read-write + + + DEVHNPEN + 11 + 1 + read-write + + + EHEN + 12 + 1 + read-write + + + DBNCEFLTRBYPASS + 15 + 1 + read-write + + + CONIDSTS + 16 + 1 + read-only + + + DBNCTIME + 17 + 1 + read-only + + + ASESVLD + 18 + 1 + read-only + + + BSESVLD + 19 + 1 + read-only + + + OTGVER + 20 + 1 + read-write + + + CURMOD + 21 + 1 + read-only + + + + + GOTGINT + 0x4 + 0x20 + + + SESENDDET + 2 + 1 + read-write + + + SESREQSUCSTSCHNG + 8 + 1 + read-write + + + HSTNEGSUCSTSCHNG + 9 + 1 + read-write + + + HSTNEGDET + 17 + 1 + read-write + + + ADEVTOUTCHG + 18 + 1 + read-write + + + DBNCEDONE + 19 + 1 + read-write + + + + + GAHBCFG + 0x8 + 0x20 + + + GLBLLNTRMSK + 0 + 1 + read-write + + + HBSTLEN + 1 + 4 + read-write + + + DMAEN + 5 + 1 + read-write + + + NPTXFEMPLVL + 7 + 1 + read-write + + + PTXFEMPLVL + 8 + 1 + read-write + + + REMMEMSUPP + 21 + 1 + read-write + + + NOTIALLDMAWRIT + 22 + 1 + read-write + + + AHBSINGLE + 23 + 1 + read-write + + + INVDESCENDIANESS + 24 + 1 + read-write + + + + + GUSBCFG + 0xC + 0x20 + 0x00001440 + + + TOUTCAL + 0 + 3 + read-write + + + PHYIF + 3 + 1 + read-write + + + ULPI_UTMI_SEL + 4 + 1 + read-only + + + FSINTF + 5 + 1 + read-write + + + PHYSEL + 6 + 1 + read-only + + + SRPCAP + 8 + 1 + read-write + + + HNPCAP + 9 + 1 + read-write + + + USBTRDTIM + 10 + 4 + read-write + + + TERMSELDLPULSE + 22 + 1 + read-write + + + TXENDDELAY + 28 + 1 + read-write + + + FORCEHSTMODE + 29 + 1 + read-write + + + FORCEDEVMODE + 30 + 1 + read-write + + + CORRUPTTXPKT + 31 + 1 + read-write + + + + + GRSTCTL + 0x10 + 0x20 + + + CSFTRST + 0 + 1 + read-write + + + PIUFSSFTRST + 1 + 1 + read-write + + + FRMCNTRRST + 2 + 1 + read-write + + + RXFFLSH + 4 + 1 + read-write + + + TXFFLSH + 5 + 1 + read-write + + + TXFNUM + 6 + 5 + read-write + + + DMAREQ + 30 + 1 + read-only + + + AHBIDLE + 31 + 1 + read-only + + + + + GINTSTS + 0x14 + 0x20 + + + CURMOD_INT + 0 + 1 + read-only + + + MODEMIS + 1 + 1 + read-write + + + OTGINT + 2 + 1 + read-only + + + SOF + 3 + 1 + read-write + + + RXFLVI + 4 + 1 + read-only + + + NPTXFEMP + 5 + 1 + read-only + + + GINNAKEFF + 6 + 1 + read-only + + + GOUTNAKEFF + 7 + 1 + read-only + + + ERLYSUSP + 10 + 1 + read-write + + + USBSUSP + 11 + 1 + read-write + + + USBRST + 12 + 1 + read-write + + + ENUMDONE + 13 + 1 + read-write + + + ISOOUTDROP + 14 + 1 + read-write + + + EOPF + 15 + 1 + read-write + + + EPMIS + 17 + 1 + read-write + + + IEPINT + 18 + 1 + read-only + + + OEPINT + 19 + 1 + read-only + + + INCOMPISOIN + 20 + 1 + read-write + + + INCOMPIP + 21 + 1 + read-write + + + FETSUSP + 22 + 1 + read-write + + + RESETDET + 23 + 1 + read-write + + + PRTLNT + 24 + 1 + read-only + + + HCHLNT + 25 + 1 + read-only + + + PTXFEMP + 26 + 1 + read-only + + + CONIDSTSCHNG + 28 + 1 + read-write + + + DISCONNINT + 29 + 1 + read-write + + + SESSREQINT + 30 + 1 + read-write + + + WKUPINT + 31 + 1 + read-write + + + + + GINTMSK + 0x18 + 0x20 + + + MODEMISMSK + 1 + 1 + read-write + + + OTGINTMSK + 2 + 1 + read-write + + + SOFMSK + 3 + 1 + read-write + + + RXFLVIMSK + 4 + 1 + read-write + + + NPTXFEMPMSK + 5 + 1 + read-write + + + GINNAKEFFMSK + 6 + 1 + read-write + + + GOUTNACKEFFMSK + 7 + 1 + read-write + + + ERLYSUSPMSK + 10 + 1 + read-write + + + USBSUSPMSK + 11 + 1 + read-write + + + USBRSTMSK + 12 + 1 + read-write + + + ENUMDONEMSK + 13 + 1 + read-write + + + ISOOUTDROPMSK + 14 + 1 + read-write + + + EOPFMSK + 15 + 1 + read-write + + + EPMISMSK + 17 + 1 + read-write + + + IEPINTMSK + 18 + 1 + read-write + + + OEPINTMSK + 19 + 1 + read-write + + + INCOMPISOINMSK + 20 + 1 + read-write + + + INCOMPIPMSK + 21 + 1 + read-write + + + FETSUSPMSK + 22 + 1 + read-write + + + RESETDETMSK + 23 + 1 + read-write + + + PRTLNTMSK + 24 + 1 + read-write + + + HCHINTMSK + 25 + 1 + read-write + + + PTXFEMPMSK + 26 + 1 + read-write + + + CONIDSTSCHNGMSK + 28 + 1 + read-write + + + DISCONNINTMSK + 29 + 1 + read-write + + + SESSREQINTMSK + 30 + 1 + read-write + + + WKUPINTMSK + 31 + 1 + read-write + + + + + GRXSTSR + 0x1C + 0x20 + + + G_CHNUM + 0 + 4 + read-only + + + G_BCNT + 4 + 11 + read-only + + + G_DPID + 15 + 2 + read-only + + + G_PKTSTS + 17 + 4 + read-only + + + G_FN + 21 + 4 + read-only + + + + + GRXSTSP + 0x20 + 0x20 + + + CHNUM + 0 + 4 + read-only + + + BCNT + 4 + 11 + read-only + + + DPID + 15 + 2 + read-only + + + PKTSTS + 17 + 4 + read-only + + + FN + 21 + 4 + read-only + + + + + GRXFSIZ + 0x24 + 0x20 + 0x00000100 + + + RXFDEP + 0 + 16 + read-write + + + + + GNPTXFSIZ + 0x28 + 0x20 + 0x01000100 + + + NPTXFSTADDR + 0 + 16 + read-write + + + NPTXFDEP + 16 + 16 + read-write + + + + + GNPTXSTS + 0x2C + 0x20 + 0x00040100 + + + NPTXFSPCAVAIL + 0 + 16 + read-only + + + NPTXQSPCAVAIL + 16 + 4 + read-only + + + NPTXQTOP + 24 + 7 + read-only + + + + + GSNPSID + 0x40 + 0x20 + 0x4F54400A + + + SYNOPSYSID + 0 + 32 + read-only + + + + + GHWCFG1 + 0x44 + 0x20 + + + EPDIR + 0 + 32 + read-only + + + + + GHWCFG2 + 0x48 + 0x20 + 0x224DD930 + + + OTGMODE + 0 + 3 + read-only + + + OTGARCH + 3 + 2 + read-only + + + SINGPNT + 5 + 1 + read-only + + + HSPHYTYPE + 6 + 2 + read-only + + + FSPHYTYPE + 8 + 2 + read-only + + + NUMDEVEPS + 10 + 4 + read-only + + + NUMHSTCHNL + 14 + 4 + read-only + + + PERIOSUPPORT + 18 + 1 + read-only + + + DYNFIFOSIZING + 19 + 1 + read-only + + + MULTIPROCINTRPT + 20 + 1 + read-only + + + NPTXQDEPTH + 22 + 2 + read-only + + + PTXQDEPTH + 24 + 2 + read-only + + + TKNQDEPTH + 26 + 5 + read-only + + + OTG_ENABLE_IC_USB + 31 + 1 + read-only + + + + + GHWCFG3 + 0x4C + 0x20 + 0x010004B5 + + + XFERSIZEWIDTH + 0 + 4 + read-only + + + PKTSIZEWIDTH + 4 + 3 + read-only + + + OTGEN + 7 + 1 + read-only + + + I2CINTSEL + 8 + 1 + read-only + + + VNDCTLSUPT + 9 + 1 + read-only + + + OPTFEATURE + 10 + 1 + read-only + + + RSTTYPE + 11 + 1 + read-only + + + ADPSUPPORT + 12 + 1 + read-only + + + HSICMODE + 13 + 1 + read-only + + + BCSUPPORT + 14 + 1 + read-only + + + LPMMODE + 15 + 1 + read-only + + + DFIFODEPTH + 16 + 16 + read-only + + + + + GHWCFG4 + 0x50 + 0x20 + 0xD3F0A030 + + + G_NUMDEVPERIOEPS + 0 + 4 + read-only + + + G_PARTIALPWRDN + 4 + 1 + read-only + + + G_AHBFREQ + 5 + 1 + read-only + + + G_HIBERNATION + 6 + 1 + read-only + + + G_EXTENDEDHIBERNATION + 7 + 1 + read-only + + + G_ACGSUPT + 12 + 1 + read-only + + + G_ENHANCEDLPMSUPT + 13 + 1 + read-only + + + G_PHYDATAWIDTH + 14 + 2 + read-only + + + G_NUMCTLEPS + 16 + 4 + read-only + + + G_IDDQFLTR + 20 + 1 + read-only + + + G_VBUSVALIDFLTR + 21 + 1 + read-only + + + G_AVALIDFLTR + 22 + 1 + read-only + + + G_BVALIDFLTR + 23 + 1 + read-only + + + G_SESSENDFLTR + 24 + 1 + read-only + + + G_DEDFIFOMODE + 25 + 1 + read-only + + + G_INEPS + 26 + 4 + read-only + + + G_DESCDMAENABLED + 30 + 1 + read-only + + + G_DESCDMA + 31 + 1 + read-only + + + + + GDFIFOCFG + 0x5C + 0x20 + + + GDFIFOCFG + 0 + 16 + read-write + + + EPINFOBASEADDR + 16 + 16 + read-write + + + + + HPTXFSIZ + 0x100 + 0x20 + 0x10000200 + + + PTXFSTADDR + 0 + 16 + read-write + + + PTXFSIZE + 16 + 16 + read-write + + + + + DIEPTXF1 + 0x104 + 0x20 + 0x10000200 + + + INEP1TXFSTADDR + 0 + 16 + read-write + + + INEP1TXFDEP + 16 + 16 + read-write + + + + + DIEPTXF2 + 0x108 + 0x20 + 0x10000200 + + + INEP2TXFSTADDR + 0 + 16 + read-write + + + INEP2TXFDEP + 16 + 16 + read-write + + + + + DIEPTXF3 + 0x10C + 0x20 + 0x10000200 + + + INEP3TXFSTADDR + 0 + 16 + read-write + + + INEP3TXFDEP + 16 + 16 + read-write + + + + + DIEPTXF4 + 0x110 + 0x20 + 0x10000200 + + + INEP4TXFSTADDR + 0 + 16 + read-write + + + INEP4TXFDEP + 16 + 16 + read-write + + + + + HCFG + 0x400 + 0x20 + + + H_FSLSPCLKSEL + 0 + 2 + read-write + + + H_FSLSSUPP + 2 + 1 + read-write + + + H_ENA32KHZS + 7 + 1 + read-write + + + H_DESCDMA + 23 + 1 + read-write + + + H_FRLISTEN + 24 + 2 + read-write + + + H_PERSCHEDENA + 26 + 1 + read-write + + + H_MODECHTIMEN + 31 + 1 + read-write + + + + + HFIR + 0x404 + 0x20 + 0x000017D7 + + + FRINT + 0 + 16 + read-write + + + HFIRRLDCTRL + 16 + 1 + read-write + + + + + HFNUM + 0x408 + 0x20 + 0x00003FFF + + + FRNUM + 0 + 14 + read-only + + + FRREM + 16 + 16 + read-only + + + + + HPTXSTS + 0x410 + 0x20 + 0x00080100 + + + PTXFSPCAVAIL + 0 + 16 + read-only + + + PTXQSPCAVAIL + 16 + 5 + read-only + + + PTXQTOP + 24 + 8 + read-only + + + + + HAINT + 0x414 + 0x20 + + + HAINT + 0 + 8 + read-only + + + + + HAINTMSK + 0x418 + 0x20 + + + HAINTMSK + 0 + 8 + read-write + + + + + HFLBADDR + 0x41C + 0x20 + + + HFLBADDR + 0 + 32 + read-write + + + + + HPRT + 0x440 + 0x20 + + + PRTCONNSTS + 0 + 1 + read-only + + + PRTCONNDET + 1 + 1 + read-write + + + PRTENA + 2 + 1 + read-write + + + PRTENCHNG + 3 + 1 + read-write + + + PRTOVRCURRACT + 4 + 1 + read-only + + + PRTOVRCURRCHNG + 5 + 1 + read-write + + + PRTRES + 6 + 1 + read-write + + + PRTSUSP + 7 + 1 + read-write + + + PRTRST + 8 + 1 + read-write + + + PRTLNSTS + 10 + 2 + read-only + + + PRTPWR + 12 + 1 + read-write + + + PRTTSTCTL + 13 + 4 + read-write + + + PRTSPD + 17 + 2 + read-only + + + + + HCCHAR0 + 0x500 + 0x20 + + + H_MPS0 + 0 + 11 + read-write + + + H_EPNUM0 + 11 + 4 + read-write + + + H_EPDIR0 + 15 + 1 + read-write + + + H_LSPDDEV0 + 17 + 1 + read-write + + + H_EPTYPE0 + 18 + 2 + read-write + + + H_EC0 + 21 + 1 + read-write + + + H_DEVADDR0 + 22 + 7 + read-write + + + H_ODDFRM0 + 29 + 1 + read-write + + + H_CHDIS0 + 30 + 1 + read-write + + + H_CHENA0 + 31 + 1 + read-write + + + + + HCINT0 + 0x508 + 0x20 + + + H_XFERCOMPL0 + 0 + 1 + read-write + + + H_CHHLTD0 + 1 + 1 + read-write + + + H_AHBERR0 + 2 + 1 + read-write + + + H_STALL0 + 3 + 1 + read-write + + + H_NACK0 + 4 + 1 + read-write + + + H_ACK0 + 5 + 1 + read-write + + + H_NYET0 + 6 + 1 + read-write + + + H_XACTERR0 + 7 + 1 + read-write + + + H_BBLERR0 + 8 + 1 + read-write + + + H_FRMOVRUN0 + 9 + 1 + read-write + + + H_DATATGLERR0 + 10 + 1 + read-write + + + H_BNAINTR0 + 11 + 1 + read-write + + + H_XCS_XACT_ERR0 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR0 + 13 + 1 + read-write + + + + + HCINTMSK0 + 0x50C + 0x20 + + + H_XFERCOMPLMSK0 + 0 + 1 + read-write + + + H_CHHLTDMSK0 + 1 + 1 + read-write + + + H_AHBERRMSK0 + 2 + 1 + read-write + + + H_STALLMSK0 + 3 + 1 + read-write + + + H_NAKMSK0 + 4 + 1 + read-write + + + H_ACKMSK0 + 5 + 1 + read-write + + + H_NYETMSK0 + 6 + 1 + read-write + + + H_XACTERRMSK0 + 7 + 1 + read-write + + + H_BBLERRMSK0 + 8 + 1 + read-write + + + H_FRMOVRUNMSK0 + 9 + 1 + read-write + + + H_DATATGLERRMSK0 + 10 + 1 + read-write + + + H_BNAINTRMSK0 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK0 + 13 + 1 + read-write + + + + + HCTSIZ0 + 0x510 + 0x20 + + + H_XFERSIZE0 + 0 + 19 + read-write + + + H_PKTCNT0 + 19 + 10 + read-write + + + H_PID0 + 29 + 2 + read-write + + + H_DOPNG0 + 31 + 1 + read-write + + + + + HCDMA0 + 0x514 + 0x20 + + + H_DMAADDR0 + 0 + 32 + read-write + + + + + HCDMAB0 + 0x51C + 0x20 + + + H_HCDMAB0 + 0 + 32 + read-only + + + + + HCCHAR1 + 0x520 + 0x20 + + + H_MPS1 + 0 + 11 + read-write + + + H_EPNUM1 + 11 + 4 + read-write + + + H_EPDIR1 + 15 + 1 + read-write + + + H_LSPDDEV1 + 17 + 1 + read-write + + + H_EPTYPE1 + 18 + 2 + read-write + + + H_EC1 + 21 + 1 + read-write + + + H_DEVADDR1 + 22 + 7 + read-write + + + H_ODDFRM1 + 29 + 1 + read-write + + + H_CHDIS1 + 30 + 1 + read-write + + + H_CHENA1 + 31 + 1 + read-write + + + + + HCINT1 + 0x528 + 0x20 + + + H_XFERCOMPL1 + 0 + 1 + read-write + + + H_CHHLTD1 + 1 + 1 + read-write + + + H_AHBERR1 + 2 + 1 + read-write + + + H_STALL1 + 3 + 1 + read-write + + + H_NACK1 + 4 + 1 + read-write + + + H_ACK1 + 5 + 1 + read-write + + + H_NYET1 + 6 + 1 + read-write + + + H_XACTERR1 + 7 + 1 + read-write + + + H_BBLERR1 + 8 + 1 + read-write + + + H_FRMOVRUN1 + 9 + 1 + read-write + + + H_DATATGLERR1 + 10 + 1 + read-write + + + H_BNAINTR1 + 11 + 1 + read-write + + + H_XCS_XACT_ERR1 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR1 + 13 + 1 + read-write + + + + + HCINTMSK1 + 0x52C + 0x20 + + + H_XFERCOMPLMSK1 + 0 + 1 + read-write + + + H_CHHLTDMSK1 + 1 + 1 + read-write + + + H_AHBERRMSK1 + 2 + 1 + read-write + + + H_STALLMSK1 + 3 + 1 + read-write + + + H_NAKMSK1 + 4 + 1 + read-write + + + H_ACKMSK1 + 5 + 1 + read-write + + + H_NYETMSK1 + 6 + 1 + read-write + + + H_XACTERRMSK1 + 7 + 1 + read-write + + + H_BBLERRMSK1 + 8 + 1 + read-write + + + H_FRMOVRUNMSK1 + 9 + 1 + read-write + + + H_DATATGLERRMSK1 + 10 + 1 + read-write + + + H_BNAINTRMSK1 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK1 + 13 + 1 + read-write + + + + + HCTSIZ1 + 0x530 + 0x20 + + + H_XFERSIZE1 + 0 + 19 + read-write + + + H_PKTCNT1 + 19 + 10 + read-write + + + H_PID1 + 29 + 2 + read-write + + + H_DOPNG1 + 31 + 1 + read-write + + + + + HCDMA1 + 0x534 + 0x20 + + + H_DMAADDR1 + 0 + 32 + read-write + + + + + HCDMAB1 + 0x53C + 0x20 + + + H_HCDMAB1 + 0 + 32 + read-only + + + + + HCCHAR2 + 0x540 + 0x20 + + + H_MPS2 + 0 + 11 + read-write + + + H_EPNUM2 + 11 + 4 + read-write + + + H_EPDIR2 + 15 + 1 + read-write + + + H_LSPDDEV2 + 17 + 1 + read-write + + + H_EPTYPE2 + 18 + 2 + read-write + + + H_EC2 + 21 + 1 + read-write + + + H_DEVADDR2 + 22 + 7 + read-write + + + H_ODDFRM2 + 29 + 1 + read-write + + + H_CHDIS2 + 30 + 1 + read-write + + + H_CHENA2 + 31 + 1 + read-write + + + + + HCINT2 + 0x548 + 0x20 + + + H_XFERCOMPL2 + 0 + 1 + read-write + + + H_CHHLTD2 + 1 + 1 + read-write + + + H_AHBERR2 + 2 + 1 + read-write + + + H_STALL2 + 3 + 1 + read-write + + + H_NACK2 + 4 + 1 + read-write + + + H_ACK2 + 5 + 1 + read-write + + + H_NYET2 + 6 + 1 + read-write + + + H_XACTERR2 + 7 + 1 + read-write + + + H_BBLERR2 + 8 + 1 + read-write + + + H_FRMOVRUN2 + 9 + 1 + read-write + + + H_DATATGLERR2 + 10 + 1 + read-write + + + H_BNAINTR2 + 11 + 1 + read-write + + + H_XCS_XACT_ERR2 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR2 + 13 + 1 + read-write + + + + + HCINTMSK2 + 0x54C + 0x20 + + + H_XFERCOMPLMSK2 + 0 + 1 + read-write + + + H_CHHLTDMSK2 + 1 + 1 + read-write + + + H_AHBERRMSK2 + 2 + 1 + read-write + + + H_STALLMSK2 + 3 + 1 + read-write + + + H_NAKMSK2 + 4 + 1 + read-write + + + H_ACKMSK2 + 5 + 1 + read-write + + + H_NYETMSK2 + 6 + 1 + read-write + + + H_XACTERRMSK2 + 7 + 1 + read-write + + + H_BBLERRMSK2 + 8 + 1 + read-write + + + H_FRMOVRUNMSK2 + 9 + 1 + read-write + + + H_DATATGLERRMSK2 + 10 + 1 + read-write + + + H_BNAINTRMSK2 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK2 + 13 + 1 + read-write + + + + + HCTSIZ2 + 0x550 + 0x20 + + + H_XFERSIZE2 + 0 + 19 + read-write + + + H_PKTCNT2 + 19 + 10 + read-write + + + H_PID2 + 29 + 2 + read-write + + + H_DOPNG2 + 31 + 1 + read-write + + + + + HCDMA2 + 0x554 + 0x20 + + + H_DMAADDR2 + 0 + 32 + read-write + + + + + HCDMAB2 + 0x55C + 0x20 + + + H_HCDMAB2 + 0 + 32 + read-only + + + + + HCCHAR3 + 0x560 + 0x20 + + + H_MPS3 + 0 + 11 + read-write + + + H_EPNUM3 + 11 + 4 + read-write + + + H_EPDIR3 + 15 + 1 + read-write + + + H_LSPDDEV3 + 17 + 1 + read-write + + + H_EPTYPE3 + 18 + 2 + read-write + + + H_EC3 + 21 + 1 + read-write + + + H_DEVADDR3 + 22 + 7 + read-write + + + H_ODDFRM3 + 29 + 1 + read-write + + + H_CHDIS3 + 30 + 1 + read-write + + + H_CHENA3 + 31 + 1 + read-write + + + + + HCINT3 + 0x568 + 0x20 + + + H_XFERCOMPL3 + 0 + 1 + read-write + + + H_CHHLTD3 + 1 + 1 + read-write + + + H_AHBERR3 + 2 + 1 + read-write + + + H_STALL3 + 3 + 1 + read-write + + + H_NACK3 + 4 + 1 + read-write + + + H_ACK3 + 5 + 1 + read-write + + + H_NYET3 + 6 + 1 + read-write + + + H_XACTERR3 + 7 + 1 + read-write + + + H_BBLERR3 + 8 + 1 + read-write + + + H_FRMOVRUN3 + 9 + 1 + read-write + + + H_DATATGLERR3 + 10 + 1 + read-write + + + H_BNAINTR3 + 11 + 1 + read-write + + + H_XCS_XACT_ERR3 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR3 + 13 + 1 + read-write + + + + + HCINTMSK3 + 0x56C + 0x20 + + + H_XFERCOMPLMSK3 + 0 + 1 + read-write + + + H_CHHLTDMSK3 + 1 + 1 + read-write + + + H_AHBERRMSK3 + 2 + 1 + read-write + + + H_STALLMSK3 + 3 + 1 + read-write + + + H_NAKMSK3 + 4 + 1 + read-write + + + H_ACKMSK3 + 5 + 1 + read-write + + + H_NYETMSK3 + 6 + 1 + read-write + + + H_XACTERRMSK3 + 7 + 1 + read-write + + + H_BBLERRMSK3 + 8 + 1 + read-write + + + H_FRMOVRUNMSK3 + 9 + 1 + read-write + + + H_DATATGLERRMSK3 + 10 + 1 + read-write + + + H_BNAINTRMSK3 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK3 + 13 + 1 + read-write + + + + + HCTSIZ3 + 0x570 + 0x20 + + + H_XFERSIZE3 + 0 + 19 + read-write + + + H_PKTCNT3 + 19 + 10 + read-write + + + H_PID3 + 29 + 2 + read-write + + + H_DOPNG3 + 31 + 1 + read-write + + + + + HCDMA3 + 0x574 + 0x20 + + + H_DMAADDR3 + 0 + 32 + read-write + + + + + HCDMAB3 + 0x57C + 0x20 + + + H_HCDMAB3 + 0 + 32 + read-only + + + + + HCCHAR4 + 0x580 + 0x20 + + + H_MPS4 + 0 + 11 + read-write + + + H_EPNUM4 + 11 + 4 + read-write + + + H_EPDIR4 + 15 + 1 + read-write + + + H_LSPDDEV4 + 17 + 1 + read-write + + + H_EPTYPE4 + 18 + 2 + read-write + + + H_EC4 + 21 + 1 + read-write + + + H_DEVADDR4 + 22 + 7 + read-write + + + H_ODDFRM4 + 29 + 1 + read-write + + + H_CHDIS4 + 30 + 1 + read-write + + + H_CHENA4 + 31 + 1 + read-write + + + + + HCINT4 + 0x588 + 0x20 + + + H_XFERCOMPL4 + 0 + 1 + read-write + + + H_CHHLTD4 + 1 + 1 + read-write + + + H_AHBERR4 + 2 + 1 + read-write + + + H_STALL4 + 3 + 1 + read-write + + + H_NACK4 + 4 + 1 + read-write + + + H_ACK4 + 5 + 1 + read-write + + + H_NYET4 + 6 + 1 + read-write + + + H_XACTERR4 + 7 + 1 + read-write + + + H_BBLERR4 + 8 + 1 + read-write + + + H_FRMOVRUN4 + 9 + 1 + read-write + + + H_DATATGLERR4 + 10 + 1 + read-write + + + H_BNAINTR4 + 11 + 1 + read-write + + + H_XCS_XACT_ERR4 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR4 + 13 + 1 + read-write + + + + + HCINTMSK4 + 0x58C + 0x20 + + + H_XFERCOMPLMSK4 + 0 + 1 + read-write + + + H_CHHLTDMSK4 + 1 + 1 + read-write + + + H_AHBERRMSK4 + 2 + 1 + read-write + + + H_STALLMSK4 + 3 + 1 + read-write + + + H_NAKMSK4 + 4 + 1 + read-write + + + H_ACKMSK4 + 5 + 1 + read-write + + + H_NYETMSK4 + 6 + 1 + read-write + + + H_XACTERRMSK4 + 7 + 1 + read-write + + + H_BBLERRMSK4 + 8 + 1 + read-write + + + H_FRMOVRUNMSK4 + 9 + 1 + read-write + + + H_DATATGLERRMSK4 + 10 + 1 + read-write + + + H_BNAINTRMSK4 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK4 + 13 + 1 + read-write + + + + + HCTSIZ4 + 0x590 + 0x20 + + + H_XFERSIZE4 + 0 + 19 + read-write + + + H_PKTCNT4 + 19 + 10 + read-write + + + H_PID4 + 29 + 2 + read-write + + + H_DOPNG4 + 31 + 1 + read-write + + + + + HCDMA4 + 0x594 + 0x20 + + + H_DMAADDR4 + 0 + 32 + read-write + + + + + HCDMAB4 + 0x59C + 0x20 + + + H_HCDMAB4 + 0 + 32 + read-only + + + + + HCCHAR5 + 0x5A0 + 0x20 + + + H_MPS5 + 0 + 11 + read-write + + + H_EPNUM5 + 11 + 4 + read-write + + + H_EPDIR5 + 15 + 1 + read-write + + + H_LSPDDEV5 + 17 + 1 + read-write + + + H_EPTYPE5 + 18 + 2 + read-write + + + H_EC5 + 21 + 1 + read-write + + + H_DEVADDR5 + 22 + 7 + read-write + + + H_ODDFRM5 + 29 + 1 + read-write + + + H_CHDIS5 + 30 + 1 + read-write + + + H_CHENA5 + 31 + 1 + read-write + + + + + HCINT5 + 0x5A8 + 0x20 + + + H_XFERCOMPL5 + 0 + 1 + read-write + + + H_CHHLTD5 + 1 + 1 + read-write + + + H_AHBERR5 + 2 + 1 + read-write + + + H_STALL5 + 3 + 1 + read-write + + + H_NACK5 + 4 + 1 + read-write + + + H_ACK5 + 5 + 1 + read-write + + + H_NYET5 + 6 + 1 + read-write + + + H_XACTERR5 + 7 + 1 + read-write + + + H_BBLERR5 + 8 + 1 + read-write + + + H_FRMOVRUN5 + 9 + 1 + read-write + + + H_DATATGLERR5 + 10 + 1 + read-write + + + H_BNAINTR5 + 11 + 1 + read-write + + + H_XCS_XACT_ERR5 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR5 + 13 + 1 + read-write + + + + + HCINTMSK5 + 0x5AC + 0x20 + + + H_XFERCOMPLMSK5 + 0 + 1 + read-write + + + H_CHHLTDMSK5 + 1 + 1 + read-write + + + H_AHBERRMSK5 + 2 + 1 + read-write + + + H_STALLMSK5 + 3 + 1 + read-write + + + H_NAKMSK5 + 4 + 1 + read-write + + + H_ACKMSK5 + 5 + 1 + read-write + + + H_NYETMSK5 + 6 + 1 + read-write + + + H_XACTERRMSK5 + 7 + 1 + read-write + + + H_BBLERRMSK5 + 8 + 1 + read-write + + + H_FRMOVRUNMSK5 + 9 + 1 + read-write + + + H_DATATGLERRMSK5 + 10 + 1 + read-write + + + H_BNAINTRMSK5 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK5 + 13 + 1 + read-write + + + + + HCTSIZ5 + 0x5B0 + 0x20 + + + H_XFERSIZE5 + 0 + 19 + read-write + + + H_PKTCNT5 + 19 + 10 + read-write + + + H_PID5 + 29 + 2 + read-write + + + H_DOPNG5 + 31 + 1 + read-write + + + + + HCDMA5 + 0x5B4 + 0x20 + + + H_DMAADDR5 + 0 + 32 + read-write + + + + + HCDMAB5 + 0x5BC + 0x20 + + + H_HCDMAB5 + 0 + 32 + read-only + + + + + HCCHAR6 + 0x5C0 + 0x20 + + + H_MPS6 + 0 + 11 + read-write + + + H_EPNUM6 + 11 + 4 + read-write + + + H_EPDIR6 + 15 + 1 + read-write + + + H_LSPDDEV6 + 17 + 1 + read-write + + + H_EPTYPE6 + 18 + 2 + read-write + + + H_EC6 + 21 + 1 + read-write + + + H_DEVADDR6 + 22 + 7 + read-write + + + H_ODDFRM6 + 29 + 1 + read-write + + + H_CHDIS6 + 30 + 1 + read-write + + + H_CHENA6 + 31 + 1 + read-write + + + + + HCINT6 + 0x5C8 + 0x20 + + + H_XFERCOMPL6 + 0 + 1 + read-write + + + H_CHHLTD6 + 1 + 1 + read-write + + + H_AHBERR6 + 2 + 1 + read-write + + + H_STALL6 + 3 + 1 + read-write + + + H_NACK6 + 4 + 1 + read-write + + + H_ACK6 + 5 + 1 + read-write + + + H_NYET6 + 6 + 1 + read-write + + + H_XACTERR6 + 7 + 1 + read-write + + + H_BBLERR6 + 8 + 1 + read-write + + + H_FRMOVRUN6 + 9 + 1 + read-write + + + H_DATATGLERR6 + 10 + 1 + read-write + + + H_BNAINTR6 + 11 + 1 + read-write + + + H_XCS_XACT_ERR6 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR6 + 13 + 1 + read-write + + + + + HCINTMSK6 + 0x5CC + 0x20 + + + H_XFERCOMPLMSK6 + 0 + 1 + read-write + + + H_CHHLTDMSK6 + 1 + 1 + read-write + + + H_AHBERRMSK6 + 2 + 1 + read-write + + + H_STALLMSK6 + 3 + 1 + read-write + + + H_NAKMSK6 + 4 + 1 + read-write + + + H_ACKMSK6 + 5 + 1 + read-write + + + H_NYETMSK6 + 6 + 1 + read-write + + + H_XACTERRMSK6 + 7 + 1 + read-write + + + H_BBLERRMSK6 + 8 + 1 + read-write + + + H_FRMOVRUNMSK6 + 9 + 1 + read-write + + + H_DATATGLERRMSK6 + 10 + 1 + read-write + + + H_BNAINTRMSK6 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK6 + 13 + 1 + read-write + + + + + HCTSIZ6 + 0x5D0 + 0x20 + + + H_XFERSIZE6 + 0 + 19 + read-write + + + H_PKTCNT6 + 19 + 10 + read-write + + + H_PID6 + 29 + 2 + read-write + + + H_DOPNG6 + 31 + 1 + read-write + + + + + HCDMA6 + 0x5D4 + 0x20 + + + H_DMAADDR6 + 0 + 32 + read-write + + + + + HCDMAB6 + 0x5DC + 0x20 + + + H_HCDMAB6 + 0 + 32 + read-only + + + + + HCCHAR7 + 0x5E0 + 0x20 + + + H_MPS7 + 0 + 11 + read-write + + + H_EPNUM7 + 11 + 4 + read-write + + + H_EPDIR7 + 15 + 1 + read-write + + + H_LSPDDEV7 + 17 + 1 + read-write + + + H_EPTYPE7 + 18 + 2 + read-write + + + H_EC7 + 21 + 1 + read-write + + + H_DEVADDR7 + 22 + 7 + read-write + + + H_ODDFRM7 + 29 + 1 + read-write + + + H_CHDIS7 + 30 + 1 + read-write + + + H_CHENA7 + 31 + 1 + read-write + + + + + HCINT7 + 0x5E8 + 0x20 + + + H_XFERCOMPL7 + 0 + 1 + read-write + + + H_CHHLTD7 + 1 + 1 + read-write + + + H_AHBERR7 + 2 + 1 + read-write + + + H_STALL7 + 3 + 1 + read-write + + + H_NACK7 + 4 + 1 + read-write + + + H_ACK7 + 5 + 1 + read-write + + + H_NYET7 + 6 + 1 + read-write + + + H_XACTERR7 + 7 + 1 + read-write + + + H_BBLERR7 + 8 + 1 + read-write + + + H_FRMOVRUN7 + 9 + 1 + read-write + + + H_DATATGLERR7 + 10 + 1 + read-write + + + H_BNAINTR7 + 11 + 1 + read-write + + + H_XCS_XACT_ERR7 + 12 + 1 + read-write + + + H_DESC_LST_ROLLINTR7 + 13 + 1 + read-write + + + + + HCINTMSK7 + 0x5EC + 0x20 + + + H_XFERCOMPLMSK7 + 0 + 1 + read-write + + + H_CHHLTDMSK7 + 1 + 1 + read-write + + + H_AHBERRMSK7 + 2 + 1 + read-write + + + H_STALLMSK7 + 3 + 1 + read-write + + + H_NAKMSK7 + 4 + 1 + read-write + + + H_ACKMSK7 + 5 + 1 + read-write + + + H_NYETMSK7 + 6 + 1 + read-write + + + H_XACTERRMSK7 + 7 + 1 + read-write + + + H_BBLERRMSK7 + 8 + 1 + read-write + + + H_FRMOVRUNMSK7 + 9 + 1 + read-write + + + H_DATATGLERRMSK7 + 10 + 1 + read-write + + + H_BNAINTRMSK7 + 11 + 1 + read-write + + + H_DESC_LST_ROLLINTRMSK7 + 13 + 1 + read-write + + + + + HCTSIZ7 + 0x5F0 + 0x20 + + + H_XFERSIZE7 + 0 + 19 + read-write + + + H_PKTCNT7 + 19 + 10 + read-write + + + H_PID7 + 29 + 2 + read-write + + + H_DOPNG7 + 31 + 1 + read-write + + + + + HCDMA7 + 0x5F4 + 0x20 + + + H_DMAADDR7 + 0 + 32 + read-write + + + + + HCDMAB7 + 0x5FC + 0x20 + + + H_HCDMAB7 + 0 + 32 + read-only + + + + + DCFG + 0x800 + 0x20 + 0x08100000 + + + NZSTSOUTHSHK + 2 + 1 + read-write + + + DEVADDR + 4 + 7 + read-write + + + PERFRLINT + 11 + 2 + read-write + + + ENDEVOUTNAK + 13 + 1 + read-write + + + XCVRDLY + 14 + 1 + read-write + + + ERRATICINTMSK + 15 + 1 + read-write + + + EPMISCNT + 18 + 5 + read-write + + + DESCDMA + 23 + 1 + read-write + + + PERSCHINTVL + 24 + 2 + read-write + + + RESVALID + 26 + 6 + read-write + + + + + DCTL + 0x804 + 0x20 + 0x00002000 + + + RMTWKUPSIG + 0 + 1 + read-write + + + SFTDISCON + 1 + 1 + read-write + + + GNPINNAKSTS + 2 + 1 + read-only + + + GOUTNAKSTS + 3 + 1 + read-only + + + TSTCTL + 4 + 3 + read-write + + + SGNPINNAK + 7 + 1 + write-only + + + CGNPINNAK + 8 + 1 + write-only + + + SGOUTNAK + 9 + 1 + write-only + + + CGOUTNAK + 10 + 1 + write-only + + + PWRONPRGDONE + 11 + 1 + read-write + + + GMC + 13 + 2 + read-write + + + IGNRFRMNUM + 15 + 1 + read-write + + + NAKONBBLE + 16 + 1 + read-write + + + ENCOUNTONBNA + 17 + 1 + read-write + + + DEEPSLEEPBESLREJECT + 18 + 1 + read-write + + + + + DSTS + 0x808 + 0x20 + 0x00000002 + + + SUSPSTS + 0 + 1 + read-only + + + ENUMSPD + 1 + 2 + read-only + + + ERRTICERR + 3 + 1 + read-only + + + SOFFN + 8 + 14 + read-only + + + DEVLNSTS + 22 + 2 + read-only + + + + + DIEPMSK + 0x810 + 0x20 + + + DI_XFERCOMPLMSK + 0 + 1 + read-write + + + DI_EPDISBLDMSK + 1 + 1 + read-write + + + DI_AHBERMSK + 2 + 1 + read-write + + + TIMEOUTMSK + 3 + 1 + read-write + + + INTKNTXFEMPMSK + 4 + 1 + read-write + + + INTKNEPMISMSK + 5 + 1 + read-write + + + INEPNAKEFFMSK + 6 + 1 + read-write + + + TXFIFOUNDRNMSK + 8 + 1 + read-write + + + BNAININTRMSK + 9 + 1 + read-write + + + DI_NAKMSK + 13 + 1 + read-write + + + + + DOEPMSK + 0x814 + 0x20 + + + XFERCOMPLMSK + 0 + 1 + read-write + + + EPDISBLDMSK + 1 + 1 + read-write + + + AHBERMSK + 2 + 1 + read-write + + + SETUPMSK + 3 + 1 + read-write + + + OUTTKNEPDISMSK + 4 + 1 + read-write + + + STSPHSERCVDMSK + 5 + 1 + read-write + + + BACK2BACKSETUP + 6 + 1 + read-write + + + OUTPKTERRMSK + 8 + 1 + read-write + + + BNAOUTINTRMSK + 9 + 1 + read-write + + + BBLEERRMSK + 12 + 1 + read-write + + + NAKMSK + 13 + 1 + read-write + + + NYETMSK + 14 + 1 + read-write + + + + + DAINT + 0x818 + 0x20 + + + INEPINT0 + 0 + 1 + read-only + + + INEPINT1 + 1 + 1 + read-only + + + INEPINT2 + 2 + 1 + read-only + + + INEPINT3 + 3 + 1 + read-only + + + INEPINT4 + 4 + 1 + read-only + + + INEPINT5 + 5 + 1 + read-only + + + INEPINT6 + 6 + 1 + read-only + + + OUTEPINT0 + 16 + 1 + read-only + + + OUTEPINT1 + 17 + 1 + read-only + + + OUTEPINT2 + 18 + 1 + read-only + + + OUTEPINT3 + 19 + 1 + read-only + + + OUTEPINT4 + 20 + 1 + read-only + + + OUTEPINT5 + 21 + 1 + read-only + + + OUTEPINT6 + 22 + 1 + read-only + + + + + DAINTMSK + 0x81C + 0x20 + + + INEPMSK0 + 0 + 1 + read-write + + + INEPMSK1 + 1 + 1 + read-write + + + INEPMSK2 + 2 + 1 + read-write + + + INEPMSK3 + 3 + 1 + read-write + + + INEPMSK4 + 4 + 1 + read-write + + + INEPMSK5 + 5 + 1 + read-write + + + INEPMSK6 + 6 + 1 + read-write + + + OUTEPMSK0 + 16 + 1 + read-write + + + OUTEPMSK1 + 17 + 1 + read-write + + + OUTEPMSK2 + 18 + 1 + read-write + + + OUTEPMSK3 + 19 + 1 + read-write + + + OUTEPMSK4 + 20 + 1 + read-write + + + OUTEPMSK5 + 21 + 1 + read-write + + + OUTEPMSK6 + 22 + 1 + read-write + + + + + DVBUSDIS + 0x828 + 0x20 + 0x000017D7 + + + DVBUSDIS + 0 + 16 + read-write + + + + + DVBUSPULSE + 0x82C + 0x20 + 0x000005B8 + + + DVBUSPULSE + 0 + 12 + read-write + + + + + DTHRCTL + 0x830 + 0x20 + 0x08020020 + + + NONISOTHREN + 0 + 1 + read-write + + + ISOTHREN + 1 + 1 + read-write + + + TXTHRLEN + 2 + 9 + read-write + + + AHBTHRRATIO + 11 + 2 + read-write + + + RXTHREN + 16 + 1 + read-write + + + RXTHRLEN + 17 + 9 + read-write + + + ARBPRKEN + 27 + 1 + read-write + + + + + DIEPEMPMSK + 0x834 + 0x20 + + + D_INEPTXFEMPMSK + 0 + 16 + read-write + + + + + DIEPCTL0 + 0x900 + 0x20 + 0x00008000 + + + D_MPS0 + 0 + 2 + read-write + + + D_USBACTEP0 + 15 + 1 + read-only + + + D_NAKSTS0 + 17 + 1 + read-only + + + D_EPTYPE0 + 18 + 2 + read-only + + + D_STALL0 + 21 + 1 + read-write + + + D_TXFNUM0 + 22 + 4 + read-write + + + D_CNAK0 + 26 + 1 + write-only + + + DI_SNAK0 + 27 + 1 + write-only + + + D_EPDIS0 + 30 + 1 + read-write + + + D_EPENA0 + 31 + 1 + read-write + + + + + DIEPINT0 + 0x908 + 0x20 + + + D_XFERCOMPL0 + 0 + 1 + read-write + + + D_EPDISBLD0 + 1 + 1 + read-write + + + D_AHBERR0 + 2 + 1 + read-write + + + D_TIMEOUT0 + 3 + 1 + read-write + + + D_INTKNTXFEMP0 + 4 + 1 + read-write + + + D_INTKNEPMIS0 + 5 + 1 + read-write + + + D_INEPNAKEFF0 + 6 + 1 + read-write + + + D_TXFEMP0 + 7 + 1 + read-only + + + D_TXFIFOUNDRN0 + 8 + 1 + read-write + + + D_BNAINTR0 + 9 + 1 + read-write + + + D_PKTDRPSTS0 + 11 + 1 + read-write + + + D_BBLEERR0 + 12 + 1 + read-write + + + D_NAKINTRPT0 + 13 + 1 + read-write + + + D_NYETINTRPT0 + 14 + 1 + read-write + + + + + DIEPTSIZ0 + 0x910 + 0x20 + + + D_XFERSIZE0 + 0 + 7 + read-write + + + D_PKTCNT0 + 19 + 2 + read-write + + + + + DIEPDMA0 + 0x914 + 0x20 + + + D_DMAADDR0 + 0 + 32 + read-write + + + + + DTXFSTS0 + 0x918 + 0x20 + + + D_INEPTXFSPCAVAIL0 + 0 + 16 + read-only + + + + + DIEPDMAB0 + 0x91C + 0x20 + + + D_DMABUFFERADDR0 + 0 + 32 + read-only + + + + + DIEPCTL1 + 0x920 + 0x20 + 0x00008000 + + + D_MPS1 + 0 + 2 + read-write + + + D_USBACTEP1 + 15 + 1 + read-only + + + D_NAKSTS1 + 17 + 1 + read-only + + + D_EPTYPE1 + 18 + 2 + read-only + + + D_STALL1 + 21 + 1 + read-write + + + D_TXFNUM1 + 22 + 4 + read-write + + + D_CNAK1 + 26 + 1 + write-only + + + DI_SNAK1 + 27 + 1 + write-only + + + DI_SETD0PID1 + 28 + 1 + write-only + + + DI_SETD1PID1 + 29 + 1 + write-only + + + D_EPDIS1 + 30 + 1 + read-write + + + D_EPENA1 + 31 + 1 + read-write + + + + + DIEPINT1 + 0x928 + 0x20 + + + D_XFERCOMPL1 + 0 + 1 + read-write + + + D_EPDISBLD1 + 1 + 1 + read-write + + + D_AHBERR1 + 2 + 1 + read-write + + + D_TIMEOUT1 + 3 + 1 + read-write + + + D_INTKNTXFEMP1 + 4 + 1 + read-write + + + D_INTKNEPMIS1 + 5 + 1 + read-write + + + D_INEPNAKEFF1 + 6 + 1 + read-write + + + D_TXFEMP1 + 7 + 1 + read-only + + + D_TXFIFOUNDRN1 + 8 + 1 + read-write + + + D_BNAINTR1 + 9 + 1 + read-write + + + D_PKTDRPSTS1 + 11 + 1 + read-write + + + D_BBLEERR1 + 12 + 1 + read-write + + + D_NAKINTRPT1 + 13 + 1 + read-write + + + D_NYETINTRPT1 + 14 + 1 + read-write + + + + + DIEPTSIZ1 + 0x930 + 0x20 + + + D_XFERSIZE1 + 0 + 7 + read-write + + + D_PKTCNT1 + 19 + 2 + read-write + + + + + DIEPDMA1 + 0x934 + 0x20 + + + D_DMAADDR1 + 0 + 32 + read-write + + + + + DTXFSTS1 + 0x938 + 0x20 + + + D_INEPTXFSPCAVAIL1 + 0 + 16 + read-only + + + + + DIEPDMAB1 + 0x93C + 0x20 + + + D_DMABUFFERADDR1 + 0 + 32 + read-only + + + + + DIEPCTL2 + 0x940 + 0x20 + 0x00008000 + + + D_MPS2 + 0 + 2 + read-write + + + D_USBACTEP2 + 15 + 1 + read-only + + + D_NAKSTS2 + 17 + 1 + read-only + + + D_EPTYPE2 + 18 + 2 + read-only + + + D_STALL2 + 21 + 1 + read-write + + + D_TXFNUM2 + 22 + 4 + read-write + + + D_CNAK2 + 26 + 1 + write-only + + + DI_SNAK2 + 27 + 1 + write-only + + + DI_SETD0PID2 + 28 + 1 + write-only + + + DI_SETD1PID2 + 29 + 1 + write-only + + + D_EPDIS2 + 30 + 1 + read-write + + + D_EPENA2 + 31 + 1 + read-write + + + + + DIEPINT2 + 0x948 + 0x20 + + + D_XFERCOMPL2 + 0 + 1 + read-write + + + D_EPDISBLD2 + 1 + 1 + read-write + + + D_AHBERR2 + 2 + 1 + read-write + + + D_TIMEOUT2 + 3 + 1 + read-write + + + D_INTKNTXFEMP2 + 4 + 1 + read-write + + + D_INTKNEPMIS2 + 5 + 1 + read-write + + + D_INEPNAKEFF2 + 6 + 1 + read-write + + + D_TXFEMP2 + 7 + 1 + read-only + + + D_TXFIFOUNDRN2 + 8 + 1 + read-write + + + D_BNAINTR2 + 9 + 1 + read-write + + + D_PKTDRPSTS2 + 11 + 1 + read-write + + + D_BBLEERR2 + 12 + 1 + read-write + + + D_NAKINTRPT2 + 13 + 1 + read-write + + + D_NYETINTRPT2 + 14 + 1 + read-write + + + + + DIEPTSIZ2 + 0x950 + 0x20 + + + D_XFERSIZE2 + 0 + 7 + read-write + + + D_PKTCNT2 + 19 + 2 + read-write + + + + + DIEPDMA2 + 0x954 + 0x20 + + + D_DMAADDR2 + 0 + 32 + read-write + + + + + DTXFSTS2 + 0x958 + 0x20 + + + D_INEPTXFSPCAVAIL2 + 0 + 16 + read-only + + + + + DIEPDMAB2 + 0x95C + 0x20 + + + D_DMABUFFERADDR2 + 0 + 32 + read-only + + + + + DIEPCTL3 + 0x960 + 0x20 + 0x00008000 + + + DI_MPS3 + 0 + 2 + read-write + + + DI_USBACTEP3 + 15 + 1 + read-only + + + DI_NAKSTS3 + 17 + 1 + read-only + + + DI_EPTYPE3 + 18 + 2 + read-only + + + DI_STALL3 + 21 + 1 + read-write + + + DI_TXFNUM3 + 22 + 4 + read-write + + + DI_CNAK3 + 26 + 1 + write-only + + + DI_SNAK3 + 27 + 1 + write-only + + + DI_SETD0PID3 + 28 + 1 + write-only + + + DI_SETD1PID3 + 29 + 1 + write-only + + + DI_EPDIS3 + 30 + 1 + read-write + + + DI_EPENA3 + 31 + 1 + read-write + + + + + DIEPINT3 + 0x968 + 0x20 + + + D_XFERCOMPL3 + 0 + 1 + read-write + + + D_EPDISBLD3 + 1 + 1 + read-write + + + D_AHBERR3 + 2 + 1 + read-write + + + D_TIMEOUT3 + 3 + 1 + read-write + + + D_INTKNTXFEMP3 + 4 + 1 + read-write + + + D_INTKNEPMIS3 + 5 + 1 + read-write + + + D_INEPNAKEFF3 + 6 + 1 + read-write + + + D_TXFEMP3 + 7 + 1 + read-only + + + D_TXFIFOUNDRN3 + 8 + 1 + read-write + + + D_BNAINTR3 + 9 + 1 + read-write + + + D_PKTDRPSTS3 + 11 + 1 + read-write + + + D_BBLEERR3 + 12 + 1 + read-write + + + D_NAKINTRPT3 + 13 + 1 + read-write + + + D_NYETINTRPT3 + 14 + 1 + read-write + + + + + DIEPTSIZ3 + 0x970 + 0x20 + + + D_XFERSIZE3 + 0 + 7 + read-write + + + D_PKTCNT3 + 19 + 2 + read-write + + + + + DIEPDMA3 + 0x974 + 0x20 + + + D_DMAADDR3 + 0 + 32 + read-write + + + + + DTXFSTS3 + 0x978 + 0x20 + + + D_INEPTXFSPCAVAIL3 + 0 + 16 + read-only + + + + + DIEPDMAB3 + 0x97C + 0x20 + + + D_DMABUFFERADDR3 + 0 + 32 + read-only + + + + + DIEPCTL4 + 0x980 + 0x20 + 0x00008000 + + + D_MPS4 + 0 + 2 + read-write + + + D_USBACTEP4 + 15 + 1 + read-only + + + D_NAKSTS4 + 17 + 1 + read-only + + + D_EPTYPE4 + 18 + 2 + read-only + + + D_STALL4 + 21 + 1 + read-write + + + D_TXFNUM4 + 22 + 4 + read-write + + + D_CNAK4 + 26 + 1 + write-only + + + DI_SNAK4 + 27 + 1 + write-only + + + DI_SETD0PID4 + 28 + 1 + write-only + + + DI_SETD1PID4 + 29 + 1 + write-only + + + D_EPDIS4 + 30 + 1 + read-write + + + D_EPENA4 + 31 + 1 + read-write + + + + + DIEPINT4 + 0x988 + 0x20 + + + D_XFERCOMPL4 + 0 + 1 + read-write + + + D_EPDISBLD4 + 1 + 1 + read-write + + + D_AHBERR4 + 2 + 1 + read-write + + + D_TIMEOUT4 + 3 + 1 + read-write + + + D_INTKNTXFEMP4 + 4 + 1 + read-write + + + D_INTKNEPMIS4 + 5 + 1 + read-write + + + D_INEPNAKEFF4 + 6 + 1 + read-write + + + D_TXFEMP4 + 7 + 1 + read-only + + + D_TXFIFOUNDRN4 + 8 + 1 + read-write + + + D_BNAINTR4 + 9 + 1 + read-write + + + D_PKTDRPSTS4 + 11 + 1 + read-write + + + D_BBLEERR4 + 12 + 1 + read-write + + + D_NAKINTRPT4 + 13 + 1 + read-write + + + D_NYETINTRPT4 + 14 + 1 + read-write + + + + + DIEPTSIZ4 + 0x990 + 0x20 + + + D_XFERSIZE4 + 0 + 7 + read-write + + + D_PKTCNT4 + 19 + 2 + read-write + + + + + DIEPDMA4 + 0x994 + 0x20 + + + D_DMAADDR4 + 0 + 32 + read-write + + + + + DTXFSTS4 + 0x998 + 0x20 + + + D_INEPTXFSPCAVAIL4 + 0 + 16 + read-only + + + + + DIEPDMAB4 + 0x99C + 0x20 + + + D_DMABUFFERADDR4 + 0 + 32 + read-only + + + + + DIEPCTL5 + 0x9A0 + 0x20 + 0x00008000 + + + DI_MPS5 + 0 + 2 + read-write + + + DI_USBACTEP5 + 15 + 1 + read-only + + + DI_NAKSTS5 + 17 + 1 + read-only + + + DI_EPTYPE5 + 18 + 2 + read-only + + + DI_STALL5 + 21 + 1 + read-write + + + DI_TXFNUM5 + 22 + 4 + read-write + + + DI_CNAK5 + 26 + 1 + write-only + + + DI_SNAK5 + 27 + 1 + write-only + + + DI_SETD0PID5 + 28 + 1 + write-only + + + DI_SETD1PID5 + 29 + 1 + write-only + + + DI_EPDIS5 + 30 + 1 + read-write + + + DI_EPENA5 + 31 + 1 + read-write + + + + + DIEPINT5 + 0x9A8 + 0x20 + + + D_XFERCOMPL5 + 0 + 1 + read-write + + + D_EPDISBLD5 + 1 + 1 + read-write + + + D_AHBERR5 + 2 + 1 + read-write + + + D_TIMEOUT5 + 3 + 1 + read-write + + + D_INTKNTXFEMP5 + 4 + 1 + read-write + + + D_INTKNEPMIS5 + 5 + 1 + read-write + + + D_INEPNAKEFF5 + 6 + 1 + read-write + + + D_TXFEMP5 + 7 + 1 + read-only + + + D_TXFIFOUNDRN5 + 8 + 1 + read-write + + + D_BNAINTR5 + 9 + 1 + read-write + + + D_PKTDRPSTS5 + 11 + 1 + read-write + + + D_BBLEERR5 + 12 + 1 + read-write + + + D_NAKINTRPT5 + 13 + 1 + read-write + + + D_NYETINTRPT5 + 14 + 1 + read-write + + + + + DIEPTSIZ5 + 0x9B0 + 0x20 + + + D_XFERSIZE5 + 0 + 7 + read-write + + + D_PKTCNT5 + 19 + 2 + read-write + + + + + DIEPDMA5 + 0x9B4 + 0x20 + + + D_DMAADDR5 + 0 + 32 + read-write + + + + + DTXFSTS5 + 0x9B8 + 0x20 + + + D_INEPTXFSPCAVAIL5 + 0 + 16 + read-only + + + + + DIEPDMAB5 + 0x9BC + 0x20 + + + D_DMABUFFERADDR5 + 0 + 32 + read-only + + + + + DIEPCTL6 + 0x9C0 + 0x20 + 0x00008000 + + + D_MPS6 + 0 + 2 + read-write + + + D_USBACTEP6 + 15 + 1 + read-only + + + D_NAKSTS6 + 17 + 1 + read-only + + + D_EPTYPE6 + 18 + 2 + read-only + + + D_STALL6 + 21 + 1 + read-write + + + D_TXFNUM6 + 22 + 4 + read-write + + + D_CNAK6 + 26 + 1 + write-only + + + DI_SNAK6 + 27 + 1 + write-only + + + DI_SETD0PID6 + 28 + 1 + write-only + + + DI_SETD1PID6 + 29 + 1 + write-only + + + D_EPDIS6 + 30 + 1 + read-write + + + D_EPENA6 + 31 + 1 + read-write + + + + + DIEPINT6 + 0x9C8 + 0x20 + + + D_XFERCOMPL6 + 0 + 1 + read-write + + + D_EPDISBLD6 + 1 + 1 + read-write + + + D_AHBERR6 + 2 + 1 + read-write + + + D_TIMEOUT6 + 3 + 1 + read-write + + + D_INTKNTXFEMP6 + 4 + 1 + read-write + + + D_INTKNEPMIS6 + 5 + 1 + read-write + + + D_INEPNAKEFF6 + 6 + 1 + read-write + + + D_TXFEMP6 + 7 + 1 + read-only + + + D_TXFIFOUNDRN6 + 8 + 1 + read-write + + + D_BNAINTR6 + 9 + 1 + read-write + + + D_PKTDRPSTS6 + 11 + 1 + read-write + + + D_BBLEERR6 + 12 + 1 + read-write + + + D_NAKINTRPT6 + 13 + 1 + read-write + + + D_NYETINTRPT6 + 14 + 1 + read-write + + + + + DIEPTSIZ6 + 0x9D0 + 0x20 + + + D_XFERSIZE6 + 0 + 7 + read-write + + + D_PKTCNT6 + 19 + 2 + read-write + + + + + DIEPDMA6 + 0x9D4 + 0x20 + + + D_DMAADDR6 + 0 + 32 + read-write + + + + + DTXFSTS6 + 0x9D8 + 0x20 + + + D_INEPTXFSPCAVAIL6 + 0 + 16 + read-only + + + + + DIEPDMAB6 + 0x9DC + 0x20 + + + D_DMABUFFERADDR6 + 0 + 32 + read-only + + + + + DOEPCTL0 + 0xB00 + 0x20 + 0x00008000 + + + MPS0 + 0 + 2 + read-only + + + USBACTEP0 + 15 + 1 + read-only + + + NAKSTS0 + 17 + 1 + read-only + + + EPTYPE0 + 18 + 2 + read-only + + + SNP0 + 20 + 1 + read-write + + + STALL0 + 21 + 1 + read-write + + + CNAK0 + 26 + 1 + write-only + + + DO_SNAK0 + 27 + 1 + write-only + + + EPDIS0 + 30 + 1 + read-only + + + EPENA0 + 31 + 1 + read-write + + + + + DOEPINT0 + 0xB08 + 0x20 + + + XFERCOMPL0 + 0 + 1 + read-write + + + EPDISBLD0 + 1 + 1 + read-write + + + AHBERR0 + 2 + 1 + read-write + + + SETUP0 + 3 + 1 + read-write + + + OUTTKNEPDIS0 + 4 + 1 + read-write + + + STSPHSERCVD0 + 5 + 1 + read-write + + + BACK2BACKSETUP0 + 6 + 1 + read-write + + + OUTPKTERR0 + 8 + 1 + read-write + + + BNAINTR0 + 9 + 1 + read-write + + + PKTDRPSTS0 + 11 + 1 + read-write + + + BBLEERR0 + 12 + 1 + read-write + + + NAKINTRPT0 + 13 + 1 + read-write + + + NYEPINTRPT0 + 14 + 1 + read-write + + + STUPPKTRCVD0 + 15 + 1 + read-write + + + + + DOEPTSIZ0 + 0xB10 + 0x20 + + + XFERSIZE0 + 0 + 7 + read-write + + + PKTCNT0 + 19 + 1 + read-write + + + SUPCNT0 + 29 + 2 + read-write + + + + + DOEPDMA0 + 0xB14 + 0x20 + + + DMAADDR0 + 0 + 32 + read-write + + + + + DOEPDMAB0 + 0xB1C + 0x20 + + + DMABUFFERADDR0 + 0 + 32 + read-write + + + + + DOEPCTL1 + 0xB20 + 0x20 + 0x00008000 + + + MPS1 + 0 + 11 + read-only + + + USBACTEP1 + 15 + 1 + read-only + + + NAKSTS1 + 17 + 1 + read-only + + + EPTYPE1 + 18 + 2 + read-only + + + SNP1 + 20 + 1 + read-write + + + STALL1 + 21 + 1 + read-write + + + CNAK1 + 26 + 1 + write-only + + + DO_SNAK1 + 27 + 1 + write-only + + + DO_SETD0PID1 + 28 + 1 + write-only + + + DO_SETD1PID1 + 29 + 1 + write-only + + + EPDIS1 + 30 + 1 + read-only + + + EPENA1 + 31 + 1 + read-write + + + + + DOEPINT1 + 0xB28 + 0x20 + + + XFERCOMPL1 + 0 + 1 + read-write + + + EPDISBLD1 + 1 + 1 + read-write + + + AHBERR1 + 2 + 1 + read-write + + + SETUP1 + 3 + 1 + read-write + + + OUTTKNEPDIS1 + 4 + 1 + read-write + + + STSPHSERCVD1 + 5 + 1 + read-write + + + BACK2BACKSETUP1 + 6 + 1 + read-write + + + OUTPKTERR1 + 8 + 1 + read-write + + + BNAINTR1 + 9 + 1 + read-write + + + PKTDRPSTS1 + 11 + 1 + read-write + + + BBLEERR1 + 12 + 1 + read-write + + + NAKINTRPT1 + 13 + 1 + read-write + + + NYEPINTRPT1 + 14 + 1 + read-write + + + STUPPKTRCVD1 + 15 + 1 + read-write + + + + + DOEPTSIZ1 + 0xB30 + 0x20 + + + XFERSIZE1 + 0 + 7 + read-write + + + PKTCNT1 + 19 + 1 + read-write + + + SUPCNT1 + 29 + 2 + read-write + + + + + DOEPDMA1 + 0xB34 + 0x20 + + + DMAADDR1 + 0 + 32 + read-write + + + + + DOEPDMAB1 + 0xB3C + 0x20 + + + DMABUFFERADDR1 + 0 + 32 + read-write + + + + + DOEPCTL2 + 0xB40 + 0x20 + 0x00008000 + + + MPS2 + 0 + 11 + read-only + + + USBACTEP2 + 15 + 1 + read-only + + + NAKSTS2 + 17 + 1 + read-only + + + EPTYPE2 + 18 + 2 + read-only + + + SNP2 + 20 + 1 + read-write + + + STALL2 + 21 + 1 + read-write + + + CNAK2 + 26 + 1 + write-only + + + DO_SNAK2 + 27 + 1 + write-only + + + DO_SETD0PID2 + 28 + 1 + write-only + + + DO_SETD1PID2 + 29 + 1 + write-only + + + EPDIS2 + 30 + 1 + read-only + + + EPENA2 + 31 + 1 + read-write + + + + + DOEPINT2 + 0xB48 + 0x20 + + + XFERCOMPL2 + 0 + 1 + read-write + + + EPDISBLD2 + 1 + 1 + read-write + + + AHBERR2 + 2 + 1 + read-write + + + SETUP2 + 3 + 1 + read-write + + + OUTTKNEPDIS2 + 4 + 1 + read-write + + + STSPHSERCVD2 + 5 + 1 + read-write + + + BACK2BACKSETUP2 + 6 + 1 + read-write + + + OUTPKTERR2 + 8 + 1 + read-write + + + BNAINTR2 + 9 + 1 + read-write + + + PKTDRPSTS2 + 11 + 1 + read-write + + + BBLEERR2 + 12 + 1 + read-write + + + NAKINTRPT2 + 13 + 1 + read-write + + + NYEPINTRPT2 + 14 + 1 + read-write + + + STUPPKTRCVD2 + 15 + 1 + read-write + + + + + DOEPTSIZ2 + 0xB50 + 0x20 + + + XFERSIZE2 + 0 + 7 + read-write + + + PKTCNT2 + 19 + 1 + read-write + + + SUPCNT2 + 29 + 2 + read-write + + + + + DOEPDMA2 + 0xB54 + 0x20 + + + DMAADDR2 + 0 + 32 + read-write + + + + + DOEPDMAB2 + 0xB5C + 0x20 + + + DMABUFFERADDR2 + 0 + 32 + read-write + + + + + DOEPCTL3 + 0xB60 + 0x20 + 0x00008000 + + + MPS3 + 0 + 11 + read-only + + + USBACTEP3 + 15 + 1 + read-only + + + NAKSTS3 + 17 + 1 + read-only + + + EPTYPE3 + 18 + 2 + read-only + + + SNP3 + 20 + 1 + read-write + + + STALL3 + 21 + 1 + read-write + + + CNAK3 + 26 + 1 + write-only + + + DO_SNAK3 + 27 + 1 + write-only + + + DO_SETD0PID3 + 28 + 1 + write-only + + + DO_SETD1PID3 + 29 + 1 + write-only + + + EPDIS3 + 30 + 1 + read-only + + + EPENA3 + 31 + 1 + read-write + + + + + DOEPINT3 + 0xB68 + 0x20 + + + XFERCOMPL3 + 0 + 1 + read-write + + + EPDISBLD3 + 1 + 1 + read-write + + + AHBERR3 + 2 + 1 + read-write + + + SETUP3 + 3 + 1 + read-write + + + OUTTKNEPDIS3 + 4 + 1 + read-write + + + STSPHSERCVD3 + 5 + 1 + read-write + + + BACK2BACKSETUP3 + 6 + 1 + read-write + + + OUTPKTERR3 + 8 + 1 + read-write + + + BNAINTR3 + 9 + 1 + read-write + + + PKTDRPSTS3 + 11 + 1 + read-write + + + BBLEERR3 + 12 + 1 + read-write + + + NAKINTRPT3 + 13 + 1 + read-write + + + NYEPINTRPT3 + 14 + 1 + read-write + + + STUPPKTRCVD3 + 15 + 1 + read-write + + + + + DOEPTSIZ3 + 0xB70 + 0x20 + + + XFERSIZE3 + 0 + 7 + read-write + + + PKTCNT3 + 19 + 1 + read-write + + + SUPCNT3 + 29 + 2 + read-write + + + + + DOEPDMA3 + 0xB74 + 0x20 + + + DMAADDR3 + 0 + 32 + read-write + + + + + DOEPDMAB3 + 0xB7C + 0x20 + + + DMABUFFERADDR3 + 0 + 32 + read-write + + + + + DOEPCTL4 + 0xB80 + 0x20 + 0x00008000 + + + MPS4 + 0 + 11 + read-only + + + USBACTEP4 + 15 + 1 + read-only + + + NAKSTS4 + 17 + 1 + read-only + + + EPTYPE4 + 18 + 2 + read-only + + + SNP4 + 20 + 1 + read-write + + + STALL4 + 21 + 1 + read-write + + + CNAK4 + 26 + 1 + write-only + + + DO_SNAK4 + 27 + 1 + write-only + + + DO_SETD0PID4 + 28 + 1 + write-only + + + DO_SETD1PID4 + 29 + 1 + write-only + + + EPDIS4 + 30 + 1 + read-only + + + EPENA4 + 31 + 1 + read-write + + + + + DOEPINT4 + 0xB88 + 0x20 + + + XFERCOMPL4 + 0 + 1 + read-write + + + EPDISBLD4 + 1 + 1 + read-write + + + AHBERR4 + 2 + 1 + read-write + + + SETUP4 + 3 + 1 + read-write + + + OUTTKNEPDIS4 + 4 + 1 + read-write + + + STSPHSERCVD4 + 5 + 1 + read-write + + + BACK2BACKSETUP4 + 6 + 1 + read-write + + + OUTPKTERR4 + 8 + 1 + read-write + + + BNAINTR4 + 9 + 1 + read-write + + + PKTDRPSTS4 + 11 + 1 + read-write + + + BBLEERR4 + 12 + 1 + read-write + + + NAKINTRPT4 + 13 + 1 + read-write + + + NYEPINTRPT4 + 14 + 1 + read-write + + + STUPPKTRCVD4 + 15 + 1 + read-write + + + + + DOEPTSIZ4 + 0xB90 + 0x20 + + + XFERSIZE4 + 0 + 7 + read-write + + + PKTCNT4 + 19 + 1 + read-write + + + SUPCNT4 + 29 + 2 + read-write + + + + + DOEPDMA4 + 0xB94 + 0x20 + + + DMAADDR4 + 0 + 32 + read-write + + + + + DOEPDMAB4 + 0xB9C + 0x20 + + + DMABUFFERADDR4 + 0 + 32 + read-write + + + + + DOEPCTL5 + 0xBA0 + 0x20 + 0x00008000 + + + MPS5 + 0 + 11 + read-only + + + USBACTEP5 + 15 + 1 + read-only + + + NAKSTS5 + 17 + 1 + read-only + + + EPTYPE5 + 18 + 2 + read-only + + + SNP5 + 20 + 1 + read-write + + + STALL5 + 21 + 1 + read-write + + + CNAK5 + 26 + 1 + write-only + + + DO_SNAK5 + 27 + 1 + write-only + + + DO_SETD0PID5 + 28 + 1 + write-only + + + DO_SETD1PID5 + 29 + 1 + write-only + + + EPDIS5 + 30 + 1 + read-only + + + EPENA5 + 31 + 1 + read-write + + + + + DOEPINT5 + 0xBA8 + 0x20 + + + XFERCOMPL5 + 0 + 1 + read-write + + + EPDISBLD5 + 1 + 1 + read-write + + + AHBERR5 + 2 + 1 + read-write + + + SETUP5 + 3 + 1 + read-write + + + OUTTKNEPDIS5 + 4 + 1 + read-write + + + STSPHSERCVD5 + 5 + 1 + read-write + + + BACK2BACKSETUP5 + 6 + 1 + read-write + + + OUTPKTERR5 + 8 + 1 + read-write + + + BNAINTR5 + 9 + 1 + read-write + + + PKTDRPSTS5 + 11 + 1 + read-write + + + BBLEERR5 + 12 + 1 + read-write + + + NAKINTRPT5 + 13 + 1 + read-write + + + NYEPINTRPT5 + 14 + 1 + read-write + + + STUPPKTRCVD5 + 15 + 1 + read-write + + + + + DOEPTSIZ5 + 0xBB0 + 0x20 + + + XFERSIZE5 + 0 + 7 + read-write + + + PKTCNT5 + 19 + 1 + read-write + + + SUPCNT5 + 29 + 2 + read-write + + + + + DOEPDMA5 + 0xBB4 + 0x20 + + + DMAADDR5 + 0 + 32 + read-write + + + + + DOEPDMAB5 + 0xBBC + 0x20 + + + DMABUFFERADDR5 + 0 + 32 + read-write + + + + + DOEPCTL6 + 0xBC0 + 0x20 + 0x00008000 + + + MPS6 + 0 + 11 + read-only + + + USBACTEP6 + 15 + 1 + read-only + + + NAKSTS6 + 17 + 1 + read-only + + + EPTYPE6 + 18 + 2 + read-only + + + SNP6 + 20 + 1 + read-write + + + STALL6 + 21 + 1 + read-write + + + CNAK6 + 26 + 1 + write-only + + + DO_SNAK6 + 27 + 1 + write-only + + + DO_SETD0PID6 + 28 + 1 + write-only + + + DO_SETD1PID6 + 29 + 1 + write-only + + + EPDIS6 + 30 + 1 + read-only + + + EPENA6 + 31 + 1 + read-write + + + + + DOEPINT6 + 0xBC8 + 0x20 + + + XFERCOMPL6 + 0 + 1 + read-write + + + EPDISBLD6 + 1 + 1 + read-write + + + AHBERR6 + 2 + 1 + read-write + + + SETUP6 + 3 + 1 + read-write + + + OUTTKNEPDIS6 + 4 + 1 + read-write + + + STSPHSERCVD6 + 5 + 1 + read-write + + + BACK2BACKSETUP6 + 6 + 1 + read-write + + + OUTPKTERR6 + 8 + 1 + read-write + + + BNAINTR6 + 9 + 1 + read-write + + + PKTDRPSTS6 + 11 + 1 + read-write + + + BBLEERR6 + 12 + 1 + read-write + + + NAKINTRPT6 + 13 + 1 + read-write + + + NYEPINTRPT6 + 14 + 1 + read-write + + + STUPPKTRCVD6 + 15 + 1 + read-write + + + + + DOEPTSIZ6 + 0xBD0 + 0x20 + + + XFERSIZE6 + 0 + 7 + read-write + + + PKTCNT6 + 19 + 1 + read-write + + + SUPCNT6 + 29 + 2 + read-write + + + + + DOEPDMA6 + 0xBD4 + 0x20 + + + DMAADDR6 + 0 + 32 + read-write + + + + + DOEPDMAB6 + 0xBDC + 0x20 + + + DMABUFFERADDR6 + 0 + 32 + read-write + + + + + PCGCCTL + 0xE00 + 0x20 + + + STOPPCLK + 0 + 1 + read-write + + + GATEHCLK + 1 + 1 + read-write + + + PWRCLMP + 2 + 1 + read-write + + + RSTPDWNMODULE + 3 + 1 + read-write + + + PHYSLEEP + 6 + 1 + read-only + + + L1SUSPENDED + 7 + 1 + read-only + + + RESETAFTERSUSP + 8 + 1 + read-write + + + + + + + USB_DEVICE + Full-speed USB Serial/JTAG Controller + USB_DEVICE + 0x60038000 + + 0x0 + 0x50 + registers + + + USB_DEVICE + 96 + + + + EP1 + Endpoint 1 FIFO register + 0x0 + 0x20 + + + RDWR_BYTE + Write and read byte data to/from UART Tx/Rx FIFO through this field. When USB_DEVICE_SERIAL_IN_EMPTY_INT is set, then user can write data (up to 64 bytes) into UART Tx FIFO. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is set, user can check USB_DEVICE_OUT_EP1_WR_ADDR USB_DEVICE_OUT_EP0_RD_ADDR to know how many data is received, then read data from UART Rx FIFO. + 0 + 8 + read-write + + + + + EP1_CONF + Endpoint 1 configure and status register + 0x4 + 0x20 + 0x00000002 + + + WR_DONE + Set this bit to indicate writing byte data to UART Tx FIFO is done. + 0 + 1 + write-only + + + SERIAL_IN_EP_DATA_FREE + 1'b1: Indicate UART Tx FIFO is not full and can write data into in. After writing USB_DEVICE_WR_DONE, this bit would be 0 until data in UART Tx FIFO is read by USB Host. + 1 + 1 + read-only + + + SERIAL_OUT_EP_DATA_AVAIL + 1'b1: Indicate there is data in UART Rx FIFO. + 2 + 1 + read-only + + + + + INT_RAW + Raw status interrupt + 0x8 + 0x20 + 0x00000008 + + + JTAG_IN_FLUSH_INT_RAW + The raw interrupt bit turns to high level when flush cmd is received for IN endpoint 2 of JTAG. + 0 + 1 + read-write + + + SOF_INT_RAW + The raw interrupt bit turns to high level when SOF frame is received. + 1 + 1 + read-write + + + SERIAL_OUT_RECV_PKT_INT_RAW + The raw interrupt bit turns to high level when Serial Port OUT Endpoint received one packet. + 2 + 1 + read-write + + + SERIAL_IN_EMPTY_INT_RAW + The raw interrupt bit turns to high level when Serial Port IN Endpoint is empty. + 3 + 1 + read-write + + + PID_ERR_INT_RAW + The raw interrupt bit turns to high level when pid error is detected. + 4 + 1 + read-write + + + CRC5_ERR_INT_RAW + The raw interrupt bit turns to high level when CRC5 error is detected. + 5 + 1 + read-write + + + CRC16_ERR_INT_RAW + The raw interrupt bit turns to high level when CRC16 error is detected. + 6 + 1 + read-write + + + STUFF_ERR_INT_RAW + The raw interrupt bit turns to high level when stuff error is detected. + 7 + 1 + read-write + + + IN_TOKEN_REC_IN_EP1_INT_RAW + The raw interrupt bit turns to high level when IN token for IN endpoint 1 is received. + 8 + 1 + read-write + + + USB_BUS_RESET_INT_RAW + The raw interrupt bit turns to high level when usb bus reset is detected. + 9 + 1 + read-write + + + OUT_EP1_ZERO_PAYLOAD_INT_RAW + The raw interrupt bit turns to high level when OUT endpoint 1 received packet with zero palyload. + 10 + 1 + read-write + + + OUT_EP2_ZERO_PAYLOAD_INT_RAW + The raw interrupt bit turns to high level when OUT endpoint 2 received packet with zero palyload. + 11 + 1 + read-write + + + + + INT_ST + Masked interrupt + 0xC + 0x20 + + + JTAG_IN_FLUSH_INT_ST + The raw interrupt status bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt. + 0 + 1 + read-only + + + SOF_INT_ST + The raw interrupt status bit for the USB_DEVICE_SOF_INT interrupt. + 1 + 1 + read-only + + + SERIAL_OUT_RECV_PKT_INT_ST + The raw interrupt status bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt. + 2 + 1 + read-only + + + SERIAL_IN_EMPTY_INT_ST + The raw interrupt status bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt. + 3 + 1 + read-only + + + PID_ERR_INT_ST + The raw interrupt status bit for the USB_DEVICE_PID_ERR_INT interrupt. + 4 + 1 + read-only + + + CRC5_ERR_INT_ST + The raw interrupt status bit for the USB_DEVICE_CRC5_ERR_INT interrupt. + 5 + 1 + read-only + + + CRC16_ERR_INT_ST + The raw interrupt status bit for the USB_DEVICE_CRC16_ERR_INT interrupt. + 6 + 1 + read-only + + + STUFF_ERR_INT_ST + The raw interrupt status bit for the USB_DEVICE_STUFF_ERR_INT interrupt. + 7 + 1 + read-only + + + IN_TOKEN_REC_IN_EP1_INT_ST + The raw interrupt status bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt. + 8 + 1 + read-only + + + USB_BUS_RESET_INT_ST + The raw interrupt status bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt. + 9 + 1 + read-only + + + OUT_EP1_ZERO_PAYLOAD_INT_ST + The raw interrupt status bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt. + 10 + 1 + read-only + + + OUT_EP2_ZERO_PAYLOAD_INT_ST + The raw interrupt status bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt. + 11 + 1 + read-only + + + + + INT_ENA + Interrupt enable bits + 0x10 + 0x20 + + + JTAG_IN_FLUSH_INT_ENA + The interrupt enable bit for the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt. + 0 + 1 + read-write + + + SOF_INT_ENA + The interrupt enable bit for the USB_DEVICE_SOF_INT interrupt. + 1 + 1 + read-write + + + SERIAL_OUT_RECV_PKT_INT_ENA + The interrupt enable bit for the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt. + 2 + 1 + read-write + + + SERIAL_IN_EMPTY_INT_ENA + The interrupt enable bit for the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt. + 3 + 1 + read-write + + + PID_ERR_INT_ENA + The interrupt enable bit for the USB_DEVICE_PID_ERR_INT interrupt. + 4 + 1 + read-write + + + CRC5_ERR_INT_ENA + The interrupt enable bit for the USB_DEVICE_CRC5_ERR_INT interrupt. + 5 + 1 + read-write + + + CRC16_ERR_INT_ENA + The interrupt enable bit for the USB_DEVICE_CRC16_ERR_INT interrupt. + 6 + 1 + read-write + + + STUFF_ERR_INT_ENA + The interrupt enable bit for the USB_DEVICE_STUFF_ERR_INT interrupt. + 7 + 1 + read-write + + + IN_TOKEN_REC_IN_EP1_INT_ENA + The interrupt enable bit for the USB_DEVICE_IN_TOKEN_REC_IN_EP1_INT interrupt. + 8 + 1 + read-write + + + USB_BUS_RESET_INT_ENA + The interrupt enable bit for the USB_DEVICE_USB_BUS_RESET_INT interrupt. + 9 + 1 + read-write + + + OUT_EP1_ZERO_PAYLOAD_INT_ENA + The interrupt enable bit for the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt. + 10 + 1 + read-write + + + OUT_EP2_ZERO_PAYLOAD_INT_ENA + The interrupt enable bit for the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt. + 11 + 1 + read-write + + + + + INT_CLR + Interrupt clear bits + 0x14 + 0x20 + + + JTAG_IN_FLUSH_INT_CLR + Set this bit to clear the USB_DEVICE_JTAG_IN_FLUSH_INT interrupt. + 0 + 1 + write-only + + + SOF_INT_CLR + Set this bit to clear the USB_DEVICE_JTAG_SOF_INT interrupt. + 1 + 1 + write-only + + + SERIAL_OUT_RECV_PKT_INT_CLR + Set this bit to clear the USB_DEVICE_SERIAL_OUT_RECV_PKT_INT interrupt. + 2 + 1 + write-only + + + SERIAL_IN_EMPTY_INT_CLR + Set this bit to clear the USB_DEVICE_SERIAL_IN_EMPTY_INT interrupt. + 3 + 1 + write-only + + + PID_ERR_INT_CLR + Set this bit to clear the USB_DEVICE_PID_ERR_INT interrupt. + 4 + 1 + write-only + + + CRC5_ERR_INT_CLR + Set this bit to clear the USB_DEVICE_CRC5_ERR_INT interrupt. + 5 + 1 + write-only + + + CRC16_ERR_INT_CLR + Set this bit to clear the USB_DEVICE_CRC16_ERR_INT interrupt. + 6 + 1 + write-only + + + STUFF_ERR_INT_CLR + Set this bit to clear the USB_DEVICE_STUFF_ERR_INT interrupt. + 7 + 1 + write-only + + + IN_TOKEN_REC_IN_EP1_INT_CLR + Set this bit to clear the USB_DEVICE_IN_TOKEN_IN_EP1_INT interrupt. + 8 + 1 + write-only + + + USB_BUS_RESET_INT_CLR + Set this bit to clear the USB_DEVICE_USB_BUS_RESET_INT interrupt. + 9 + 1 + write-only + + + OUT_EP1_ZERO_PAYLOAD_INT_CLR + Set this bit to clear the USB_DEVICE_OUT_EP1_ZERO_PAYLOAD_INT interrupt. + 10 + 1 + write-only + + + OUT_EP2_ZERO_PAYLOAD_INT_CLR + Set this bit to clear the USB_DEVICE_OUT_EP2_ZERO_PAYLOAD_INT interrupt. + 11 + 1 + write-only + + + + + CONF0 + Configure 0 register + 0x18 + 0x20 + 0x00004200 + + + PHY_SEL + Select internal/external PHY + 0 + 1 + read-write + + + EXCHG_PINS_OVERRIDE + Enable software control USB D+ D- exchange + 1 + 1 + read-write + + + EXCHG_PINS + USB D+ D- exchange + 2 + 1 + read-write + + + VREFH + Control single-end input high threshold,1.76V to 2V, step 80mV + 3 + 2 + read-write + + + VREFL + Control single-end input low threshold,0.8V to 1.04V, step 80mV + 5 + 2 + read-write + + + VREF_OVERRIDE + Enable software control input threshold + 7 + 1 + read-write + + + PAD_PULL_OVERRIDE + Enable software control USB D+ D- pullup pulldown + 8 + 1 + read-write + + + DP_PULLUP + Control USB D+ pull up. + 9 + 1 + read-write + + + DP_PULLDOWN + Control USB D+ pull down. + 10 + 1 + read-write + + + DM_PULLUP + Control USB D- pull up. + 11 + 1 + read-write + + + DM_PULLDOWN + Control USB D- pull down. + 12 + 1 + read-write + + + PULLUP_VALUE + Control pull up value. + 13 + 1 + read-write + + + USB_PAD_ENABLE + Enable USB pad function. + 14 + 1 + read-write + + + PHY_TX_EDGE_SEL + 0: TX output at clock negedge. 1: Tx output at clock posedge. + 15 + 1 + read-write + + + USB_JTAG_BRIDGE_EN + Set this bit usb_jtag, the connection between usb_jtag and internal JTAG is disconnected, and MTMS, MTDI, MTCK are output through GPIO Matrix, MTDO is input through GPIO Matrix. + 16 + 1 + read-write + + + + + TEST + USB Internal PHY test register + 0x1C + 0x20 + + + ENABLE + Enable test of the USB pad + 0 + 1 + read-write + + + USB_OE + USB pad oen in test + 1 + 1 + read-write + + + TX_DP + USB D+ tx value in test + 2 + 1 + read-write + + + TX_DM + USB D- tx value in test + 3 + 1 + read-write + + + RX_RCV + USB differential rx value in test + 4 + 1 + read-only + + + RX_DP + USB D+ rx value in test + 5 + 1 + read-only + + + RX_DM + USB D- rx value in test + 6 + 1 + read-only + + + + + JFIFO_ST + USB-JTAG FIFO status + 0x20 + 0x20 + 0x00000044 + + + IN_FIFO_CNT + JTAT in fifo counter. + 0 + 2 + read-only + + + IN_FIFO_EMPTY + 1: JTAG in fifo is empty. + 2 + 1 + read-only + + + IN_FIFO_FULL + 1: JTAG in fifo is full. + 3 + 1 + read-only + + + OUT_FIFO_CNT + JTAT out fifo counter. + 4 + 2 + read-only + + + OUT_FIFO_EMPTY + 1: JTAG out fifo is empty. + 6 + 1 + read-only + + + OUT_FIFO_FULL + 1: JTAG out fifo is full. + 7 + 1 + read-only + + + IN_FIFO_RESET + Write 1 to reset JTAG in fifo. + 8 + 1 + read-write + + + OUT_FIFO_RESET + Write 1 to reset JTAG out fifo. + 9 + 1 + read-write + + + + + FRAM_NUM + SOF frame number + 0x24 + 0x20 + + + SOF_FRAME_INDEX + Frame index of received SOF frame. + 0 + 11 + read-only + + + + + IN_EP0_ST + IN Endpoint 0 status + 0x28 + 0x20 + 0x00000001 + + + IN_EP0_STATE + State of IN Endpoint 0. + 0 + 2 + read-only + + + IN_EP0_WR_ADDR + Write data address of IN endpoint 0. + 2 + 7 + read-only + + + IN_EP0_RD_ADDR + Read data address of IN endpoint 0. + 9 + 7 + read-only + + + + + IN_EP1_ST + IN Endpoint 1 status + 0x2C + 0x20 + 0x00000001 + + + IN_EP1_STATE + State of IN Endpoint 1. + 0 + 2 + read-only + + + IN_EP1_WR_ADDR + Write data address of IN endpoint 1. + 2 + 7 + read-only + + + IN_EP1_RD_ADDR + Read data address of IN endpoint 1. + 9 + 7 + read-only + + + + + IN_EP2_ST + IN Endpoint 2 status + 0x30 + 0x20 + 0x00000001 + + + IN_EP2_STATE + State of IN Endpoint 2. + 0 + 2 + read-only + + + IN_EP2_WR_ADDR + Write data address of IN endpoint 2. + 2 + 7 + read-only + + + IN_EP2_RD_ADDR + Read data address of IN endpoint 2. + 9 + 7 + read-only + + + + + IN_EP3_ST + IN Endpoint 3 status + 0x34 + 0x20 + 0x00000001 + + + IN_EP3_STATE + State of IN Endpoint 3. + 0 + 2 + read-only + + + IN_EP3_WR_ADDR + Write data address of IN endpoint 3. + 2 + 7 + read-only + + + IN_EP3_RD_ADDR + Read data address of IN endpoint 3. + 9 + 7 + read-only + + + + + OUT_EP0_ST + OUT Endpoint 0 status + 0x38 + 0x20 + + + OUT_EP0_STATE + State of OUT Endpoint 0. + 0 + 2 + read-only + + + OUT_EP0_WR_ADDR + Write data address of OUT endpoint 0. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP0_WR_ADDR-2 bytes data in OUT EP0. + 2 + 7 + read-only + + + OUT_EP0_RD_ADDR + Read data address of OUT endpoint 0. + 9 + 7 + read-only + + + + + OUT_EP1_ST + OUT Endpoint 1 status + 0x3C + 0x20 + + + OUT_EP1_STATE + State of OUT Endpoint 1. + 0 + 2 + read-only + + + OUT_EP1_WR_ADDR + Write data address of OUT endpoint 1. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP1_WR_ADDR-2 bytes data in OUT EP1. + 2 + 7 + read-only + + + OUT_EP1_RD_ADDR + Read data address of OUT endpoint 1. + 9 + 7 + read-only + + + OUT_EP1_REC_DATA_CNT + Data count in OUT endpoint 1 when one packet is received. + 16 + 7 + read-only + + + + + OUT_EP2_ST + OUT Endpoint 2 status + 0x40 + 0x20 + + + OUT_EP2_STATE + State of OUT Endpoint 2. + 0 + 2 + read-only + + + OUT_EP2_WR_ADDR + Write data address of OUT endpoint 2. When USB_DEVICE_SERIAL_OUT_RECV_PKT_INT is detected, there are USB_DEVICE_OUT_EP2_WR_ADDR-2 bytes data in OUT EP2. + 2 + 7 + read-only + + + OUT_EP2_RD_ADDR + Read data address of OUT endpoint 2. + 9 + 7 + read-only + + + + + MISC_CONF + MISC register + 0x44 + 0x20 + + + CLK_EN + 1'h1: Force clock on for register. 1'h0: Support clock only when application writes registers. + 0 + 1 + read-write + + + + + MEM_CONF + Power control + 0x48 + 0x20 + 0x00000002 + + + USB_MEM_PD + 1: power down usb memory. + 0 + 1 + read-write + + + USB_MEM_CLK_EN + 1: Force clock on for usb memory. + 1 + 1 + read-write + + + + + DATE + Version control register + 0x80 + 0x20 + 0x02101200 + + + DATE + register version. + 0 + 32 + read-write + + + + + + + USB_WRAP + USB_WRAP Peripheral + USB_WRAP + 0x60039000 + + 0x0 + 0xC + registers + + + + OTG_CONF + USB OTG Wrapper Configure Register + 0x0 + 0x20 + 0x001C0000 + + + SRP_SESSEND_OVERRIDE + This bit is used to enable the software over-ride of srp session end signal. 1'b0: the signal is controlled by the chip input. 1'b1: the signal is controlled by the software. + 0 + 1 + read-write + + + SRP_SESSEND_VALUE + Software over-ride value of srp session end signal. + 1 + 1 + read-write + + + PHY_SEL + Select internal external PHY. 1'b0: Select internal PHY. 1'b1: Select external PHY. + 2 + 1 + read-write + + + DFIFO_FORCE_PD + Force the dfifo to go into low power mode. The data in dfifo will not lost. + 3 + 1 + read-write + + + DBNCE_FLTR_BYPASS + Bypass Debounce filters for avalid,bvalid,vbusvalid,session end, id signals + 4 + 1 + read-write + + + EXCHG_PINS_OVERRIDE + Enable software controlle USB D+ D- exchange + 5 + 1 + read-write + + + EXCHG_PINS + USB D+ D- exchange. 1'b0: don't change. 1'b1: exchange D+ D- + 6 + 1 + read-write + + + VREFH + Control single-end input high threshold,1.76V to 2V, step 80mV + 7 + 2 + read-write + + + VREFL + Control single-end input low threshold,0.8V to 1.04V, step 80mV + 9 + 2 + read-write + + + VREF_OVERRIDE + Enable software controlle input threshold + 11 + 1 + read-write + + + PAD_PULL_OVERRIDE + Enable software controlle USB D+ D- pullup pulldown + 12 + 1 + read-write + + + DP_PULLUP + Controlle USB D+ pullup + 13 + 1 + read-write + + + DP_PULLDOWN + Controlle USB D+ pulldown + 14 + 1 + read-write + + + DM_PULLUP + Controlle USB D+ pullup + 15 + 1 + read-write + + + DM_PULLDOWN + Controlle USB D+ pulldown + 16 + 1 + read-write + + + PULLUP_VALUE + Controlle pullup value. 1'b0: typical value is 2.4K. 1'b1: typical value is 1.2K. + 17 + 1 + read-write + + + USB_PAD_ENABLE + Enable USB pad function + 18 + 1 + read-write + + + AHB_CLK_FORCE_ON + Force ahb clock always on + 19 + 1 + read-write + + + PHY_CLK_FORCE_ON + Force phy clock always on + 20 + 1 + read-write + + + PHY_TX_EDGE_SEL + Select phy tx signal output clock edge. 1'b0: negedge. 1'b1: posedge. + 21 + 1 + read-write + + + DFIFO_FORCE_PU + Disable the dfifo to go into low power mode. The data in dfifo will not lost. + 22 + 1 + read-write + + + CLK_EN + Disable auto clock gating of CSR registers + 31 + 1 + read-write + + + + + TEST_CONF + USB Internal PHY Testing Register + 0x4 + 0x20 + + + TEST_ENABLE + Enable test of the USB pad + 0 + 1 + read-write + + + TEST_USB_OE + USB pad oen in test + 1 + 1 + read-write + + + TEST_TX_DP + USB D+ tx value in test + 2 + 1 + read-write + + + TEST_TX_DM + USB D- tx value in test + 3 + 1 + read-write + + + TEST_RX_RCV + USB differential rx value in test + 4 + 1 + read-only + + + TEST_RX_DP + USB D+ rx value in test + 5 + 1 + read-only + + + TEST_RX_DM + USB D- rx value in test + 6 + 1 + read-only + + + + + DATE + Version Control Register + 0x3FC + 0x20 + 0x02102010 + + + USB_WRAP_DATE + Date register + 0 + 32 + read-write + + + + + + + WCL + WCL Peripheral + WCL + 0x600D0000 + + 0x0 + 0x160 + registers + + + + Core_0_ENTRY_1_ADDR + Core_0 Entry 1 address configuration Register + 0x0 + 0x20 + + + CORE_0_ENTRY_1_ADDR + Core_0 Entry 1 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_2_ADDR + Core_0 Entry 2 address configuration Register + 0x4 + 0x20 + + + CORE_0_ENTRY_2_ADDR + Core_0 Entry 2 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_3_ADDR + Core_0 Entry 3 address configuration Register + 0x8 + 0x20 + + + CORE_0_ENTRY_3_ADDR + Core_0 Entry 3 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_4_ADDR + Core_0 Entry 4 address configuration Register + 0xC + 0x20 + + + CORE_0_ENTRY_4_ADDR + Core_0 Entry 4 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_5_ADDR + Core_0 Entry 5 address configuration Register + 0x10 + 0x20 + + + CORE_0_ENTRY_5_ADDR + Core_0 Entry 5 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_6_ADDR + Core_0 Entry 6 address configuration Register + 0x14 + 0x20 + + + CORE_0_ENTRY_6_ADDR + Core_0 Entry 6 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_7_ADDR + Core_0 Entry 7 address configuration Register + 0x18 + 0x20 + + + CORE_0_ENTRY_7_ADDR + Core_0 Entry 7 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_8_ADDR + Core_0 Entry 8 address configuration Register + 0x1C + 0x20 + + + CORE_0_ENTRY_8_ADDR + Core_0 Entry 8 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_9_ADDR + Core_0 Entry 9 address configuration Register + 0x20 + 0x20 + + + CORE_0_ENTRY_9_ADDR + Core_0 Entry 9 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_10_ADDR + Core_0 Entry 10 address configuration Register + 0x24 + 0x20 + + + CORE_0_ENTRY_10_ADDR + Core_0 Entry 10 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_11_ADDR + Core_0 Entry 11 address configuration Register + 0x28 + 0x20 + + + CORE_0_ENTRY_11_ADDR + Core_0 Entry 11 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_12_ADDR + Core_0 Entry 12 address configuration Register + 0x2C + 0x20 + + + CORE_0_ENTRY_12_ADDR + Core_0 Entry 12 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_13_ADDR + Core_0 Entry 13 address configuration Register + 0x30 + 0x20 + + + CORE_0_ENTRY_13_ADDR + Core_0 Entry 13 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_0_ENTRY_CHECK + Core_0 Entry check configuration Register + 0x7C + 0x20 + 0x00000002 + + + CORE_0_ENTRY_CHECK + This filed is used to enable entry address check + 1 + 13 + read-write + + + + + Core_0_STATUSTABLE1 + Status register of world switch of entry 1 + 0x80 + 0x20 + + + CORE_0_FROM_WORLD_1 + This bit is used to confirm world before enter entry 1 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_1 + This filed is used to confirm in which entry before enter entry 1 + 1 + 4 + read-write + + + CORE_0_CURRENT_1 + This bit is used to confirm whether the current state is in entry 1 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE2 + Status register of world switch of entry 2 + 0x84 + 0x20 + + + CORE_0_FROM_WORLD_2 + This bit is used to confirm world before enter entry 2 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_2 + This filed is used to confirm in which entry before enter entry 2 + 1 + 4 + read-write + + + CORE_0_CURRENT_2 + This bit is used to confirm whether the current state is in entry 2 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE3 + Status register of world switch of entry 3 + 0x88 + 0x20 + + + CORE_0_FROM_WORLD_3 + This bit is used to confirm world before enter entry 3 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_3 + This filed is used to confirm in which entry before enter entry 3 + 1 + 4 + read-write + + + CORE_0_CURRENT_3 + This bit is used to confirm whether the current state is in entry 3 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE4 + Status register of world switch of entry 4 + 0x8C + 0x20 + + + CORE_0_FROM_WORLD_4 + This bit is used to confirm world before enter entry 4 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_4 + This filed is used to confirm in which entry before enter entry 4 + 1 + 4 + read-write + + + CORE_0_CURRENT_4 + This bit is used to confirm whether the current state is in entry 4 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE5 + Status register of world switch of entry 5 + 0x90 + 0x20 + + + CORE_0_FROM_WORLD_5 + This bit is used to confirm world before enter entry 5 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_5 + This filed is used to confirm in which entry before enter entry 5 + 1 + 4 + read-write + + + CORE_0_CURRENT_5 + This bit is used to confirm whether the current state is in entry 5 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE6 + Status register of world switch of entry 6 + 0x94 + 0x20 + + + CORE_0_FROM_WORLD_6 + This bit is used to confirm world before enter entry 6 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_6 + This filed is used to confirm in which entry before enter entry 6 + 1 + 4 + read-write + + + CORE_0_CURRENT_6 + This bit is used to confirm whether the current state is in entry 6 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE7 + Status register of world switch of entry 7 + 0x98 + 0x20 + + + CORE_0_FROM_WORLD_7 + This bit is used to confirm world before enter entry 7 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_7 + This filed is used to confirm in which entry before enter entry 7 + 1 + 4 + read-write + + + CORE_0_CURRENT_7 + This bit is used to confirm whether the current state is in entry 7 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE8 + Status register of world switch of entry 8 + 0x9C + 0x20 + + + CORE_0_FROM_WORLD_8 + This bit is used to confirm world before enter entry 8 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_8 + This filed is used to confirm in which entry before enter entry 8 + 1 + 4 + read-write + + + CORE_0_CURRENT_8 + This bit is used to confirm whether the current state is in entry 8 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE9 + Status register of world switch of entry 9 + 0xA0 + 0x20 + + + CORE_0_FROM_WORLD_9 + This bit is used to confirm world before enter entry 9 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_9 + This filed is used to confirm in which entry before enter entry 9 + 1 + 4 + read-write + + + CORE_0_CURRENT_9 + This bit is used to confirm whether the current state is in entry 9 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE10 + Status register of world switch of entry 10 + 0xA4 + 0x20 + + + CORE_0_FROM_WORLD_10 + This bit is used to confirm world before enter entry 10 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_10 + This filed is used to confirm in which entry before enter entry 10 + 1 + 4 + read-write + + + CORE_0_CURRENT_10 + This bit is used to confirm whether the current state is in entry 10 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE11 + Status register of world switch of entry 11 + 0xA8 + 0x20 + + + CORE_0_FROM_WORLD_11 + This bit is used to confirm world before enter entry 11 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_11 + This filed is used to confirm in which entry before enter entry 11 + 1 + 4 + read-write + + + CORE_0_CURRENT_11 + This bit is used to confirm whether the current state is in entry 11 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE12 + Status register of world switch of entry 12 + 0xAC + 0x20 + + + CORE_0_FROM_WORLD_12 + This bit is used to confirm world before enter entry 12 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_12 + This filed is used to confirm in which entry before enter entry 12 + 1 + 4 + read-write + + + CORE_0_CURRENT_12 + This bit is used to confirm whether the current state is in entry 12 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE13 + Status register of world switch of entry 13 + 0xB0 + 0x20 + + + CORE_0_FROM_WORLD_13 + This bit is used to confirm world before enter entry 13 + 0 + 1 + read-write + + + CORE_0_FROM_ENTRY_13 + This filed is used to confirm in which entry before enter entry 13 + 1 + 4 + read-write + + + CORE_0_CURRENT_13 + This bit is used to confirm whether the current state is in entry 13 + 5 + 1 + read-write + + + + + Core_0_STATUSTABLE_CURRENT + Status register of statustable current + 0xFC + 0x20 + + + CORE_0_STATUSTABLE_CURRENT + This field is used to quickly read and rewrite the current field of all STATUSTABLE registers,for example,bit 1 represents the current field of STATUSTABLE1,bit2 represents the current field of STATUSTABLE2 + 1 + 13 + read-write + + + + + Core_0_MESSAGE_ADDR + Clear writer_buffer write address configuration register + 0x100 + 0x20 + + + CORE_0_MESSAGE_ADDR + This field is used to set address that need to write when enter WORLD0 + 0 + 32 + read-write + + + + + Core_0_MESSAGE_MAX + Clear writer_buffer write number configuration register + 0x104 + 0x20 + + + CORE_0_MESSAGE_MAX + This filed is used to set the max value of clear write_buffer + 0 + 4 + read-write + + + + + Core_0_MESSAGE_PHASE + Clear writer_buffer status register + 0x108 + 0x20 + + + CORE_0_MESSAGE_MATCH + This bit indicates whether the check is successful + 0 + 1 + read-only + + + CORE_0_MESSAGE_EXPECT + This field indicates the data to be written next time + 1 + 4 + read-only + + + CORE_0_MESSAGE_DATAPHASE + If this bit is 1, it means that is checking clear write_buffer operation,and is checking data + 5 + 1 + read-only + + + CORE_0_MESSAGE_ADDRESSPHASE + If this bit is 1, it means that is checking clear write_buffer operation,and is checking address. + 6 + 1 + read-only + + + + + Core_0_World_TRIGGER_ADDR + Core_0 trigger address configuration Register + 0x140 + 0x20 + + + CORE_0_WORLD_TRIGGER_ADDR + This field is used to configure the entry address from WORLD0 to WORLD1,when the CPU executes to this address,switch to WORLD1 + 0 + 32 + read-write + + + + + Core_0_World_PREPARE + Core_0 prepare world configuration Register + 0x144 + 0x20 + + + CORE_0_WORLD_PREPARE + This field to used to set world to enter, 2'b01 means WORLD0, 2'b10 means WORLD1 + 0 + 2 + read-write + + + + + Core_0_World_UPDATE + Core_0 configuration update register + 0x148 + 0x20 + + + CORE_0_UPDATE + This field is used to update configuration completed, can write any value,the hardware only checks the write operation of this register and does not case about its value + 0 + 32 + write-only + + + + + Core_0_World_Cancel + Core_0 configuration cancel register + 0x14C + 0x20 + + + CORE_0_WORLD_CANCEL + This field is used to cancel switch world configuration,if the trigger address and update configuration complete,use this register to cancel world switch, jujst need write any value,the hardware only checks the write operation of this register and does not case about its value + 0 + 32 + write-only + + + + + Core_0_World_IRam0 + Core_0 Iram0 world register + 0x150 + 0x20 + + + CORE_0_WORLD_IRAM0 + this field is used to read current world of Iram0 bus + 0 + 2 + read-write + + + + + Core_0_World_DRam0_PIF + Core_0 dram0 and PIF world register + 0x154 + 0x20 + + + CORE_0_WORLD_DRAM0_PIF + this field is used to read current world of Dram0 bus and PIF bus + 0 + 2 + read-write + + + + + Core_0_World_Phase + Core_0 world status register + 0x158 + 0x20 + + + CORE_0_WORLD_PHASE + This bit indicates whether is preparing to switch to WORLD1, 1 means value. + 0 + 1 + read-only + + + + + Core_0_NMI_MASK_ENABLE + Core_0 NMI mask enable register + 0x180 + 0x20 + + + CORE_0_NMI_MASK_ENABLE + this field is used to set NMI mask,it can write any value,when write this register,the hardware start masking NMI interrupt + 0 + 32 + write-only + + + + + Core_0_NMI_MASK_TRIGGER_ADDR + Core_0 NMI mask trigger address register + 0x184 + 0x20 + + + CORE_0_NMI_MASK_TRIGGER_ADDR + this field to used to set trigger address, when CPU executes to this address,NMI mask automatically fails + 0 + 32 + read-write + + + + + Core_0_NMI_MASK_DISABLE + Core_0 NMI mask disable register + 0x188 + 0x20 + + + CORE_0_NMI_MASK_DISABLE + this field is used to disable NMI mask,it will not take effect immediately,only when the CPU executes to the trigger address will it start to cancel NMI mask + 0 + 32 + write-only + + + + + Core_0_NMI_MASK_CANCLE + Core_0 NMI mask disable register + 0x18C + 0x20 + + + CORE_0_NMI_MASK_CANCEL + this field is used to cancel NMI mask disable function. + 0 + 32 + write-only + + + + + Core_0_NMI_MASK + Core_0 NMI mask register + 0x190 + 0x20 + + + CORE_0_NMI_MASK + this bit is used to mask NMI interrupt,it can directly mask NMI interrupt + 0 + 1 + read-write + + + + + Core_0_NMI_MASK_PHASE + Core_0 NMI mask phase register + 0x194 + 0x20 + + + CORE_0_NMI_MASK_PHASE + this bit is used to indicates whether the NMI interrupt is being masked, 1 means NMI interrupt is being masked + 0 + 1 + read-only + + + + + Core_1_ENTRY_1_ADDR + Core_1 Entry 1 address configuration Register + 0x400 + 0x20 + + + CORE_1_ENTRY_1_ADDR + Core_1 Entry 1 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_2_ADDR + Core_1 Entry 2 address configuration Register + 0x404 + 0x20 + + + CORE_1_ENTRY_2_ADDR + Core_1 Entry 2 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_3_ADDR + Core_1 Entry 3 address configuration Register + 0x408 + 0x20 + + + CORE_1_ENTRY_3_ADDR + Core_1 Entry 3 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_4_ADDR + Core_1 Entry 4 address configuration Register + 0x40C + 0x20 + + + CORE_1_ENTRY_4_ADDR + Core_1 Entry 4 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_5_ADDR + Core_1 Entry 5 address configuration Register + 0x410 + 0x20 + + + CORE_1_ENTRY_5_ADDR + Core_1 Entry 5 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_6_ADDR + Core_1 Entry 6 address configuration Register + 0x414 + 0x20 + + + CORE_1_ENTRY_6_ADDR + Core_1 Entry 6 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_7_ADDR + Core_1 Entry 7 address configuration Register + 0x418 + 0x20 + + + CORE_1_ENTRY_7_ADDR + Core_1 Entry 7 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_8_ADDR + Core_1 Entry 8 address configuration Register + 0x41C + 0x20 + + + CORE_1_ENTRY_8_ADDR + Core_1 Entry 8 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_9_ADDR + Core_1 Entry 9 address configuration Register + 0x420 + 0x20 + + + CORE_1_ENTRY_9_ADDR + Core_1 Entry 9 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_10_ADDR + Core_1 Entry 10 address configuration Register + 0x424 + 0x20 + + + CORE_1_ENTRY_10_ADDR + Core_1 Entry 10 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_11_ADDR + Core_1 Entry 11 address configuration Register + 0x428 + 0x20 + + + CORE_1_ENTRY_11_ADDR + Core_1 Entry 11 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_12_ADDR + Core_1 Entry 12 address configuration Register + 0x42C + 0x20 + + + CORE_1_ENTRY_12_ADDR + Core_1 Entry 12 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_13_ADDR + Core_1 Entry 13 address configuration Register + 0x430 + 0x20 + + + CORE_1_ENTRY_13_ADDR + Core_1 Entry 13 address from WORLD1 to WORLD0 + 0 + 32 + read-write + + + + + Core_1_ENTRY_CHECK + Core_1 Entry check configuration Register + 0x47C + 0x20 + 0x00000002 + + + CORE_1_ENTRY_CHECK + This filed is used to enable entry address check + 1 + 13 + read-write + + + + + Core_1_STATUSTABLE1 + Status register of world switch of entry 1 + 0x480 + 0x20 + + + CORE_1_FROM_WORLD_1 + This bit is used to confirm world before enter entry 1 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_1 + This filed is used to confirm in which entry before enter entry 1 + 1 + 4 + read-write + + + CORE_1_CURRENT_1 + This bit is used to confirm whether the current state is in entry 1 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE2 + Status register of world switch of entry 2 + 0x484 + 0x20 + + + CORE_1_FROM_WORLD_2 + This bit is used to confirm world before enter entry 2 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_2 + This filed is used to confirm in which entry before enter entry 2 + 1 + 4 + read-write + + + CORE_1_CURRENT_2 + This bit is used to confirm whether the current state is in entry 2 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE3 + Status register of world switch of entry 3 + 0x488 + 0x20 + + + CORE_1_FROM_WORLD_3 + This bit is used to confirm world before enter entry 3 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_3 + This filed is used to confirm in which entry before enter entry 3 + 1 + 4 + read-write + + + CORE_1_CURRENT_3 + This bit is used to confirm whether the current state is in entry 3 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE4 + Status register of world switch of entry 4 + 0x48C + 0x20 + + + CORE_1_FROM_WORLD_4 + This bit is used to confirm world before enter entry 4 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_4 + This filed is used to confirm in which entry before enter entry 4 + 1 + 4 + read-write + + + CORE_1_CURRENT_4 + This bit is used to confirm whether the current state is in entry 4 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE5 + Status register of world switch of entry 5 + 0x490 + 0x20 + + + CORE_1_FROM_WORLD_5 + This bit is used to confirm world before enter entry 5 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_5 + This filed is used to confirm in which entry before enter entry 5 + 1 + 4 + read-write + + + CORE_1_CURRENT_5 + This bit is used to confirm whether the current state is in entry 5 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE6 + Status register of world switch of entry 6 + 0x494 + 0x20 + + + CORE_1_FROM_WORLD_6 + This bit is used to confirm world before enter entry 6 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_6 + This filed is used to confirm in which entry before enter entry 6 + 1 + 4 + read-write + + + CORE_1_CURRENT_6 + This bit is used to confirm whether the current state is in entry 6 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE7 + Status register of world switch of entry 7 + 0x498 + 0x20 + + + CORE_1_FROM_WORLD_7 + This bit is used to confirm world before enter entry 7 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_7 + This filed is used to confirm in which entry before enter entry 7 + 1 + 4 + read-write + + + CORE_1_CURRENT_7 + This bit is used to confirm whether the current state is in entry 7 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE8 + Status register of world switch of entry 8 + 0x49C + 0x20 + + + CORE_1_FROM_WORLD_8 + This bit is used to confirm world before enter entry 8 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_8 + This filed is used to confirm in which entry before enter entry 8 + 1 + 4 + read-write + + + CORE_1_CURRENT_8 + This bit is used to confirm whether the current state is in entry 8 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE9 + Status register of world switch of entry 9 + 0x4A0 + 0x20 + + + CORE_1_FROM_WORLD_9 + This bit is used to confirm world before enter entry 9 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_9 + This filed is used to confirm in which entry before enter entry 9 + 1 + 4 + read-write + + + CORE_1_CURRENT_9 + This bit is used to confirm whether the current state is in entry 9 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE10 + Status register of world switch of entry 10 + 0x4A4 + 0x20 + + + CORE_1_FROM_WORLD_10 + This bit is used to confirm world before enter entry 10 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_10 + This filed is used to confirm in which entry before enter entry 10 + 1 + 4 + read-write + + + CORE_1_CURRENT_10 + This bit is used to confirm whether the current state is in entry 10 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE11 + Status register of world switch of entry 11 + 0x4A8 + 0x20 + + + CORE_1_FROM_WORLD_11 + This bit is used to confirm world before enter entry 11 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_11 + This filed is used to confirm in which entry before enter entry 11 + 1 + 4 + read-write + + + CORE_1_CURRENT_11 + This bit is used to confirm whether the current state is in entry 11 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE12 + Status register of world switch of entry 12 + 0x4AC + 0x20 + + + CORE_1_FROM_WORLD_12 + This bit is used to confirm world before enter entry 12 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_12 + This filed is used to confirm in which entry before enter entry 12 + 1 + 4 + read-write + + + CORE_1_CURRENT_12 + This bit is used to confirm whether the current state is in entry 12 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE13 + Status register of world switch of entry 13 + 0x4B0 + 0x20 + + + CORE_1_FROM_WORLD_13 + This bit is used to confirm world before enter entry 13 + 0 + 1 + read-write + + + CORE_1_FROM_ENTRY_13 + This filed is used to confirm in which entry before enter entry 13 + 1 + 4 + read-write + + + CORE_1_CURRENT_13 + This bit is used to confirm whether the current state is in entry 13 + 5 + 1 + read-write + + + + + Core_1_STATUSTABLE_CURRENT + Status register of statustable current + 0x4FC + 0x20 + + + CORE_1_STATUSTABLE_CURRENT + This field is used to quickly read and rewrite the current field of all STATUSTABLE registers,for example,bit 1 represents the current field of STATUSTABLE1 + 1 + 13 + read-write + + + + + Core_1_MESSAGE_ADDR + Clear writer_buffer write address configuration register + 0x500 + 0x20 + + + CORE_1_MESSAGE_ADDR + This field is used to set address that need to write when enter WORLD0 + 0 + 32 + read-write + + + + + Core_1_MESSAGE_MAX + Clear writer_buffer write number configuration register + 0x504 + 0x20 + + + CORE_1_MESSAGE_MAX + This filed is used to set the max value of clear write_buffer + 0 + 4 + read-write + + + + + Core_1_MESSAGE_PHASE + Clear writer_buffer status register + 0x508 + 0x20 + + + CORE_1_MESSAGE_MATCH + This bit indicates whether the check is successful + 0 + 1 + read-only + + + CORE_1_MESSAGE_EXPECT + This field indicates the data to be written next time + 1 + 4 + read-only + + + CORE_1_MESSAGE_DATAPHASE + If this bit is 1, it means that is checking clear write_buffer operation, and is checking data + 5 + 1 + read-only + + + CORE_1_MESSAGE_ADDRESSPHASE + If this bit is 1, it means that is checking clear write_buffer operation, and is checking address. + 6 + 1 + read-only + + + + + Core_1_World_TRIGGER_ADDR + Core_1 trigger address configuration Register + 0x540 + 0x20 + + + CORE_1_WORLD_TRIGGER_ADDR + This field is used to configure the entry address from WORLD0 to WORLD1,when the CPU executes to this address,switch to WORLD1 + 0 + 32 + read-write + + + + + Core_1_World_PREPARE + Core_1 prepare world configuration Register + 0x544 + 0x20 + + + CORE_1_WORLD_PREPARE + This field to used to set world to enter,2'b01 means WORLD0, 2'b10 means WORLD1 + 0 + 2 + read-write + + + + + Core_1_World_UPDATE + Core_1 configuration update register + 0x548 + 0x20 + + + CORE_1_UPDATE + This field is used to update configuration completed, can write any value,the hardware only checks the write operation of this register and does not case about its value + 0 + 32 + write-only + + + + + Core_1_World_Cancel + Core_1 configuration cancel register + 0x54C + 0x20 + + + CORE_1_WORLD_CANCEL + This field is used to cancel switch world configuration,if the trigger address and update configuration complete,can use this register to cancel world switch. can write any value, the hardware only checks the write operation of this register and does not case about its value + 0 + 32 + write-only + + + + + Core_1_World_IRam0 + Core_1 Iram0 world register + 0x550 + 0x20 + + + CORE_1_WORLD_IRAM0 + this field is used to read current world of Iram0 bus + 0 + 2 + read-write + + + + + Core_1_World_DRam0_PIF + Core_1 dram0 and PIF world register + 0x554 + 0x20 + + + CORE_1_WORLD_DRAM0_PIF + this field is used to read current world of Dram0 bus and PIF bus + 0 + 2 + read-write + + + + + Core_1_World_Phase + Core_0 world status register + 0x558 + 0x20 + + + CORE_1_WORLD_PHASE + This bit indicates whether is preparing to switch to WORLD1,1 means value. + 0 + 1 + read-only + + + + + Core_1_NMI_MASK_ENABLE + Core_1 NMI mask enable register + 0x580 + 0x20 + + + CORE_1_NMI_MASK_ENABLE + this field is used to set NMI mask, it can write any value, when write this register,the hardware start masking NMI interrupt + 0 + 32 + write-only + + + + + Core_1_NMI_MASK_TRIGGER_ADDR + Core_1 NMI mask trigger addr register + 0x584 + 0x20 + + + CORE_1_NMI_MASK_TRIGGER_ADDR + this field to used to set trigger address + 0 + 32 + read-write + + + + + Core_1_NMI_MASK_DISABLE + Core_1 NMI mask disable register + 0x588 + 0x20 + + + CORE_1_NMI_MASK_DISABLE + this field is used to disable NMI mask, it will not take effect immediately,only when the CPU executes to the trigger address will it start to cancel NMI mask + 0 + 32 + write-only + + + + + Core_1_NMI_MASK_CANCLE + Core_1 NMI mask disable register + 0x58C + 0x20 + + + CORE_1_NMI_MASK_CANCEL + this field is used to cancel NMI mask disable function. + 0 + 32 + write-only + + + + + Core_1_NMI_MASK + Core_1 NMI mask register + 0x590 + 0x20 + + + CORE_1_NMI_MASK + this bit is used to mask NMI interrupt,it can directly mask NMI interrupt + 0 + 1 + read-write + + + + + Core_1_NMI_MASK_PHASE + Core_1 NMI mask phase register + 0x594 + 0x20 + + + CORE_1_NMI_MASK_PHASE + this bit is used to indicates whether the NMI interrupt is being masked, 1 means NMI interrupt is being masked + 0 + 1 + read-only + + + + + + + XTS_AES + XTS-AES-128 Flash Encryption + XTS_AES + 0x600CC000 + + 0x0 + 0x60 + registers + + + + 16 + 0x4 + PLAIN_%s + Plaintext register %s + 0x0 + 0x20 + + + PLAIN_0 + Stores the nth 32-bit piece of plaintext. + 0 + 32 + read-write + + + + + LINESIZE + XTS-AES line-size register + 0x40 + 0x20 + + + LINESIZE + Configures the data size of one encryption. + 0 + 1 + read-write + + + + + DESTINATION + XTS-AES destination register + 0x44 + 0x20 + + + DESTINATION + Configures the type of the external memory. Currently, it must be set to 0, as the Manual Encryption block only supports flash encryption. Errors may occurs if users write 1. 0:flash. 1: external RAM. + 0 + 1 + read-write + + + + + PHYSICAL_ADDRESS + physical address + 0x48 + 0x20 + + + PHYSICAL_ADDRESS + Those bits stores the physical address. If linesize is 16-byte, the physical address should be aligned of 16 bytes. If linesize is 32-byte, the physical address should be aligned of 32 bytes. If linesize is 64-byte, the physical address should be aligned of 64 bytes. + 0 + 30 + read-write + + + + + TRIGGER + XTS-AES trigger register + 0x4C + 0x20 + + + TRIGGER + Write 1 to activate manual encryption. + 0 + 1 + write-only + + + + + RELEASE + XTS-AES release control register + 0x50 + 0x20 + + + RELEASE + Write 1 to grant SPI1 access to encrypted result. + 0 + 1 + write-only + + + + + DESTROY + XTS-AES destroy control register + 0x54 + 0x20 + + + DESTROY + Write 1 to destroy encrypted result. + 0 + 1 + write-only + + + + + STATE + XTS-AES status register + 0x58 + 0x20 + + + STATE + Those bits indicates the status of the Manual Encryption block. 0X0 (XTS_AES_IDLE): idle. 0X1 (XTS_AES_BUSY): busy with encryption. 0X2 (XTS_AES_DONE): encryption is completed, but the encrypted result is not accessible to SPI. 0X3 (XTS_AES_AVAILABLE) encrypted result is accessible and available to SPI. + 0 + 2 + read-only + + + + + DATE + XTS-AES version control register + 0x5C + 0x20 + 0x20200111 + + + DATE + Manual Encryption block version information. + 0 + 30 + read-write + + + + + + + diff --git a/partition-table.bin b/partition-table.bin new file mode 100644 index 0000000000000000000000000000000000000000..7c55f7e14fb03d1b82567a68b36158af8435aaa1 GIT binary patch literal 3072 zcmZ1#z{tcffq{X+fq@~ftQg2Z1*-xW85k}A#S|DA@=Fp^5=# + + + netstandard2.1 + AMD64 + $PATH_TO_RENODE + + + + + $(RenodePath)/AdvancedLoggerViewerPlugin.dll + + + $(RenodePath)/AntShell.dll + + + $(RenodePath)/AsyncIO.dll + + + $(RenodePath)/CookComputing.XmlRpcV2.dll + + + $(RenodePath)/cores-arm.dll + + + $(RenodePath)/cores-arm-m.dll + + + $(RenodePath)/cores-i386.dll + + + $(RenodePath)/cores-ppc.dll + + + $(RenodePath)/cores-ppc64.dll + + + $(RenodePath)/cores-riscv.dll + + + $(RenodePath)/cores-riscv64.dll + + + $(RenodePath)/cores-sparc.dll + + + $(RenodePath)/CxxDemangler.dll + + + $(RenodePath)/Dynamitey.dll + + + $(RenodePath)/ELFSharp.dll + + + $(RenodePath)/Emulator.dll + + + $(RenodePath)/Extensions.dll + + + $(RenodePath)/FdtSharp.dll + + + $(RenodePath)/IronPython.dll + + + $(RenodePath)/IronPython.Modules.dll + + + $(RenodePath)/libtftp.dll + + + $(RenodePath)/LLVMDisassembler.dll + + + $(RenodePath)/Lucene.Net.dll + + + $(RenodePath)/LZ4.dll + + + $(RenodePath)/Microsoft.Dynamic.dll + + + $(RenodePath)/Microsoft.Scripting.dll + + + $(RenodePath)/Microsoft.Scripting.Metadata.dll + + + $(RenodePath)/Migrant.dll + + + $(RenodePath)/Mono.Cecil.dll + + + $(RenodePath)/NetMQ.dll + + + $(RenodePath)/Nini.dll + + + $(RenodePath)/OptionsParser.dll + + + $(RenodePath)/PacketDotNet.dll + + + $(RenodePath)/Renode.exe + + + $(RenodePath)/Renode-peripherals.dll + + + $(RenodePath)/SampleCommandPlugin.dll + + + $(RenodePath)/Sprache.dll + + + $(RenodePath)/TermSharp.dll + + + $(RenodePath)/TracePlugin.dll + + + $(RenodePath)/UI.dll + + + $(RenodePath)/VerilatorPlugin.dll + + + $(RenodePath)/WiresharkPlugin.dll + + + $(RenodePath)/Xwt.dll + + + $(RenodePath)/Xwt.WPF.dll + + + + diff --git a/peripherals/ESP32S3_EFUSE.cs b/peripherals/ESP32S3_EFUSE.cs new file mode 100644 index 0000000..5435d3e --- /dev/null +++ b/peripherals/ESP32S3_EFUSE.cs @@ -0,0 +1,109 @@ +// +// Copyright (c) 2010-2023 Antmicro +// Copyright (c) 2011-2015 Realtime Embedded +// +// This file is licensed under the MIT License. +// Full license text is available in 'licenses/MIT.txt'. +// +using System; +using Antmicro.Renode.Peripherals.Bus; +using Antmicro.Renode.Peripherals; +using Antmicro.Renode.Utilities; +using Antmicro.Renode.Logging; +using System.Collections.Generic; + +namespace Antmicro.Renode.Peripherals.Memory +{ + public class ArrayMemory : IBytePeripheral, IWordPeripheral, IDoubleWordPeripheral, IKnownSize, IMemory, IMultibyteWritePeripheral, IQuadWordPeripheral + { + public ArrayMemory(byte[] source) + { + array = source; + } + + public ArrayMemory(int size) + { + array = new byte[size]; + } + + public virtual ulong ReadQuadWord(long offset) + { + var intOffset = (int)offset; + var result = BitConverter.ToUInt64(array, intOffset); + return result; + } + + public virtual void WriteQuadWord(long offset, ulong value) + { + var bytes = BitConverter.GetBytes(value); + bytes.CopyTo(array, offset); + } + + public uint ReadDoubleWord(long offset) + { + var intOffset = (int)offset; + var result = BitConverter.ToUInt32(array, intOffset); + return result; + } + + public virtual void WriteDoubleWord(long offset, uint value) + { + var bytes = BitConverter.GetBytes(value); + bytes.CopyTo(array, offset); + + } + + public void Reset() + { + // nothing happens + } + + public ushort ReadWord(long offset) + { + var intOffset = (int)offset; + var result = BitConverter.ToUInt16(array, intOffset); + return result; + } + + public virtual void WriteWord(long offset, ushort value) + { + var bytes = BitConverter.GetBytes(value); + bytes.CopyTo(array, offset); + } + + public byte ReadByte(long offset) + { + var intOffset = (int)offset; + var result = array[intOffset]; + return result; + } + + public virtual void WriteByte(long offset, byte value) + { + var intOffset = (int)offset; + array[intOffset] = value; + } + + public byte[] ReadBytes(long offset, int count) + { + var result = new byte[count]; + Array.Copy(array, offset, result, 0, count); + return result; + } + + public void WriteBytes(long offset, byte[] bytes, int startingIndex, int count) + { + Array.Copy(bytes, startingIndex, array, offset, count); + } + + public long Size + { + get + { + return array.Length; + } + } + + protected readonly byte[] array; + } +} diff --git a/peripherals/ESP32S3_EXTMEM.cs b/peripherals/ESP32S3_EXTMEM.cs new file mode 100644 index 0000000..a4ed04b --- /dev/null +++ b/peripherals/ESP32S3_EXTMEM.cs @@ -0,0 +1,177 @@ +// +// Copyright (c) 2010-2023 Antmicro +// Copyright (c) 2011-2015 Realtime Embedded +// +// This file is licensed under the MIT License. +// Full license text is available in 'licenses/MIT.txt'. +// +using System; +using Antmicro.Renode.Peripherals.Bus; +using Antmicro.Renode.Core; +using Antmicro.Renode.Peripherals; +using Antmicro.Renode.Utilities; +using Antmicro.Renode.Logging; +using System.Collections.Generic; +using Antmicro.Renode.Core.Structure.Registers; + +namespace Antmicro.Renode.Peripherals.Miscellaneous +{ + public class ESP32S3_EXTMEM : IBytePeripheral, IDoubleWordPeripheral, IKnownSize + { + public ESP32S3_EXTMEM(Machine machine) + { + var registersMap = new Dictionary + { + {(long)Registers.DCACHE_CTRL, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "DCACHE_ENABLE") // The bit is used to activate the data cache. 0: disable, 1: enable + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "DCACHE_SIZE_MODE") // The bit is used to configure cache memory size.0: 32KB, 1: 64KB + .WithValueField(2, 2, FieldMode.Read | FieldMode.Write, name: "DCACHE_BLOCKSIZE_MODE") // The bit is used to configure cache block size.0: 16 bytes, 1: 32 bytes,2: 64 bytes + }, + {(long)Registers.DCACHE_CTRL1, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "DCACHE_SHUT_CORE0_BUS") // The bit is used to disable core0 dbus, 0: enable, 1: disable + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "DCACHE_SHUT_CORE1_BUS") // The bit is used to disable core1 dbus, 0: enable, 1: disable + }, + {(long)Registers.DCACHE_SYNC_CTRL, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => false, name: "DCACHE_INVALIDATE_ENA") // The bit is used to enable invalidate operation. It will be cleared by hardware after invalidate operation done. + .WithFlag(1, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => false, name: "DCACHE_WRITEBACK_ENA") // The bit is used to enable writeback operation. It will be cleared by hardware after writeback operation done. + .WithFlag(2, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => false, name: "DCACHE_CLEAN_ENA") // The bit is used to enable clean operation. It will be cleared by hardware after clean operation done. + .WithFlag(3, FieldMode.Read, valueProviderCallback: (_) => true, name: "DCACHE_SYNC_DONE") // The bit is used to indicate clean/writeback/invalidate operation is finished. + }, + {(long)Registers.DCACHE_SYNC_ADDR, new DoubleWordRegister(this) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => 0, name: "DCACHE_SYNC_ADDR") // The bits are used to configure the start virtual address for clean operations. It should be combined with DCACHE_SYNC_SIZE_REG. + }, + {(long)Registers.DCACHE_SYNC_SIZE, new DoubleWordRegister(this) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => 0, name: "DCACHE_SYNC_SIZE") // The bits are used to configure the length for sync operations. The bits are the counts of cache block. It should be combined with DCACHE_SYNC_ADDR_REG. + }, + {(long)Registers.DCACHE_PRELOAD_CTRL, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => false, name: "DCACHE_PRELOAD_ENA") // The bit is used to enable preload operation. It will be cleared by hardware after preload operation done. + .WithFlag(1, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => true, name: "DCACHE_PRELOAD_DONE") // The bit is used to indicate preload operation is finished. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "DCACHE_PRELOAD_ORDER") // The bit is used to configure the direction of preload operation. 1: descending, 0: ascending. + }, + {(long)Registers.DCACHE_AUTOLOAD_CTRL, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "DCACHE_AUTOLOAD_SCT0_ENA") // The bits are used to enable the first section for autoload operation. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "DCACHE_AUTOLOAD_SCT1_ENA") // The bits are used to enable the second section for autoload operation. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "DCACHE_AUTOLOAD_ENA") // The bit is used to enable and disable autoload operation. It is combined with dcache_autoload_done. 1: enable, 0: disable. + .WithFlag(3, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => true, name: "DCACHE_AUTOLOAD_DONE") // The bit is used to indicate autoload operation is finished. + .WithFlag(4, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => false, name: "DCACHE_AUTOLOAD_ORDER") // The bits are used to configure the direction of autoload. 1: descending, 0: ascending. + .WithValueField(5, 2, FieldMode.Read | FieldMode.Write, name: "DCACHE_AUTOLOAD_RQST") // The bits are used to configure trigger conditions for autoload. 0/3: cache miss, 1: cache hit, 2: both cache miss and hit. + .WithValueField(7, 2, FieldMode.Read | FieldMode.Write, name: "DCACHE_AUTOLOAD_SIZE") // The bits are used to configure the numbers of the cache block for the issuing autoload operation. + .WithFlag(9, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => false, name: "DCACHE_AUTOLOAD_BUFFER_CLEAR") // The bit is used to clear autoload buffer in dcache. + }, + {(long)Registers.CACHE_ILG_INT_CLR, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "ICACHE_SYNC_OP_FAULT_INT_CLR") // The bit is used to clear interrupt by sync configurations fault. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "ICACHE_PRELOAD_OP_FAULT_INT_CLR") // The bit is used to clear interrupt by preload configurations fault. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "DCACHE_SYNC_OP_FAULT_INT_CLR") // The bit is used to clear interrupt by sync configurations fault. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "DCACHE_PRELOAD_OP_FAULT_INT_CLR") // The bit is used to clear interrupt by preload configurations fault. + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "DCACHE_WRITE_FLASH_INT_CLR") // The bit is used to clear interrupt by dcache trying to write flash. + .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "MMU_ENTRY_FAULT_INT_CLR") // The bit is used to clear interrupt by mmu entry fault. + .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "DCACHE_OCCUPY_EXC_INT_CLR") // The bit is used to clear interrupt by dcache trying to replace a line whose blocks all have been occupied by occupy-mode. + .WithFlag(7, FieldMode.Read | FieldMode.Write, name: "IBUS_CNT_OVF_INT_CLR") // The bit is used to clear interrupt by ibus counter overflow. + .WithFlag(8, FieldMode.Read | FieldMode.Write, name: "DBUS_CNT_OVF_INT_CLR") // The bit is used to clear interrupt by dbus counter overflow. + }, + {(long)Registers.CACHE_WRAP_AROUND_CTRL, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "CACHE_FLASH_WRAP_AROUND") // The bit is used to enable wrap around mode when read data from flash. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "CACHE_SRAM_RD_WRAP_AROUND") // The bit is used to enable wrap around mode when read data from spiram. + + // .WithValueField(0, 2, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => 0, name: "SW_STALL_APPCPU_C0") // {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU + // .WithValueField(2, 2, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => 0, name: "SW_STALL_PROCPU_C0") // {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU + // .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "SW_APPCPU_RST") // APP CPU SW reset + // .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "SW_PROCPU_RST") // PRO CPU SW reset + // .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "BB_I2C_FORCE_PD") // BB_I2C force power down + // .WithFlag(7, FieldMode.Read | FieldMode.Write, name: "BB_I2C_FORCE_PU") // BB_I2C force power up + // .WithFlag(8, FieldMode.Read | FieldMode.Write, name: "BBPLL_I2C_FORCE_PD") // BB_PLL _I2C force power down + // .WithFlag(9, FieldMode.Read | FieldMode.Write, name: "BBPLL_I2C_FORCE_PU") // BB_PLL_I2C force power up + // .WithFlag(10, FieldMode.Read | FieldMode.Write, name: "BBPLL_FORCE_PD") // BB_PLL force power down + // .WithFlag(11, FieldMode.Read | FieldMode.Write, name: "BBPLL_FORCE_PU") // BB_PLL force power up + // .WithFlag(12, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_PD") // crystall force power down + // .WithFlag(13, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_PU") // crystall force power up + // .WithValueField(14, 4, FieldMode.Read | FieldMode.Write, name: "XTL_EN_WAIT") // wait bias_sleep and current source wakeup + // .WithFlag(23, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_ISO") // No public + // .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "PLL_FORCE_ISO") // No public + // .WithFlag(25, FieldMode.Read | FieldMode.Write, name: "ANALOG_FORCE_ISO") // No public + // .WithFlag(26, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_NOISO") // No public + // .WithFlag(27, FieldMode.Read | FieldMode.Write, name: "PLL_FORCE_NOISO") // No public + // .WithFlag(28, FieldMode.Read | FieldMode.Write, name: "ANALOG_FORCE_NOISO") // No public + // .WithFlag(29, FieldMode.Read | FieldMode.Write, name: "DG_WRAP_FORCE_RST") // digital wrap force reset in deep sleep + // .WithFlag(30, FieldMode.Read | FieldMode.Write, name: "DG_WRAP_FORCE_NORST") // digital core force no reset in deep sleep + // .WithFlag(31, FieldMode.Write, name: "SW_SYS_RST") // SW system reset + }, + {(long)Registers.CACHE_MMU_OWNER, new DoubleWordRegister(this) + .WithValueField(7, 2, FieldMode.Read | FieldMode.Write, name: "CACHE_MMU_OWNER") // The bits are used to specify the owner of MMU.bit0: icache, bit1: dcache, bit2: dma, bit3: reserved. + }, + {(long)Registers.DCACHE_FREEZE, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "ENA") // The bit is used to enable dcache freeze mode + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "MODE") // The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert hit if CPU miss + .WithFlag(2, FieldMode.Read, valueProviderCallback: (_) => true, name: "DONE") // The bit is used to indicate dcache freeze success + }, + {(long)Registers.ICACHE_FREEZE, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "ENA") // The bit is used to enable icache freeze mode + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "MODE") // The bit is used to configure freeze mode, 0: assert busy if CPU miss 1: assert hit if CPU miss + .WithFlag(2, FieldMode.Read, valueProviderCallback: (_) => true, name: "DONE") // The bit is used to indicate icache freeze success + }, + }; + + registers = new DoubleWordRegisterCollection(this, registersMap); + } + + public uint ReadDoubleWord(long offset) + { + return registers.Read(offset); + } + + public byte ReadByte(long offset) + { + if (offset % 4 != 0) + { + // in the current configuration, only the lowest byte + // contains a meaningful data + return 0; + } + return (byte)ReadDoubleWord(offset); + } + + public void Reset() + { + // base.Reset(); + registers.Reset(); + + // UpdateInterrupts(); + } + + public void WriteDoubleWord(long offset, uint value) + { + registers.Write(offset, value); + } + + public void WriteByte(long offset, byte value) + { + if (offset % 4 != 0) + { + // in the current configuration, only the lowest byte + // contains a meaningful data + return; + } + + WriteDoubleWord(offset, value); + } + + public long Size => 0x17C; + private readonly DoubleWordRegisterCollection registers; + + private enum Registers : long + { + DCACHE_CTRL = 0x00, + DCACHE_CTRL1 = 0x04, + DCACHE_SYNC_CTRL = 0x28, + DCACHE_SYNC_ADDR = 0x2C, + DCACHE_SYNC_SIZE = 0x30, + DCACHE_PRELOAD_CTRL = 0x40, + DCACHE_AUTOLOAD_CTRL = 0x4C, + CACHE_ILG_INT_CLR = 0xE0, + CACHE_WRAP_AROUND_CTRL = 0x128, + CACHE_MMU_OWNER = 0x148, + DCACHE_FREEZE = 0x150, + ICACHE_FREEZE = 0x154, + } + } +} diff --git a/peripherals/ESP32S3_GPIO.cs b/peripherals/ESP32S3_GPIO.cs new file mode 100644 index 0000000..f76774c --- /dev/null +++ b/peripherals/ESP32S3_GPIO.cs @@ -0,0 +1,269 @@ +// +// Copyright (c) 2010-2021 Antmicro +// +// This file is licensed under the MIT License. +// Full license text is available in 'licenses/MIT.txt'. +// +using System.Collections.Generic; +using Antmicro.Renode.Core; +using Antmicro.Renode.Utilities; +using Antmicro.Renode.Peripherals.Bus; +using Antmicro.Renode.Core.Structure.Registers; +using Antmicro.Renode.Logging; + +namespace Antmicro.Renode.Peripherals.GPIOPort +{ + public class ESP32S3_GPIO : BaseGPIOPort, IDoubleWordPeripheral, IKnownSize + { + public ESP32S3_GPIO(Machine machine) : base(machine, NumberOfPins) + { + locker = new object(); + IRQ = new GPIO(); + registers = new DoubleWordRegisterCollection(this, BuildRegisterMap()); + data = new bool[NumberOfPins]; + directionOutNotIn = new bool[NumberOfPins]; + interruptEnabled = new bool[NumberOfPins]; + interruptRequest = new bool[NumberOfPins]; + edgeSelect = new bool[NumberOfPins]; + interruptConfig = new InterruptConfig[NumberOfPins]; + } + + public override void Reset() + { + lock(locker) + { + base.Reset(); + IRQ.Unset(); + registers.Reset(); + for(var i = 0; i < NumberOfPins; ++i) + { + data[i] = false; + directionOutNotIn[i] = false; + interruptEnabled[i] = false; + interruptRequest[i] = false; + edgeSelect[i] = false; + interruptConfig[i] = InterruptConfig.Low; + } + } + } + + public uint ReadDoubleWord(long offset) + { + lock(locker) + { + return registers.Read(offset); + } + } + + public void WriteDoubleWord(long offset, uint value) + { + lock(locker) + { + registers.Write(offset, value); + } + } + + public override void OnGPIO(int number, bool value) + { + // if(!CheckPinNumber(number)) + // { + // return; + // } + + // if(directionOutNotIn[number]) + // { + // this.Log(LogLevel.Warning, "gpio {0} is set to output, signal ignored.", number); + // return; + // } + + // lock(locker) + // { + // var previousState = State[number]; + // base.OnGPIO(number, value); + + // UpdateSingleInterruptRequest(number, value, previousState != value); + // UpdateIRQ(); + // } + } + + public long Size => 0x634; + + public GPIO IRQ { get; } + + private Dictionary BuildRegisterMap() + { + var registersDictionary = new Dictionary + { + {(long)Registers.STRAP, new DoubleWordRegister(this) + .WithFlag(2, FieldMode.Read, valueProviderCallback: (_) => !EnableBootMessages, name: "GPIO46") // GND = enable boot messages + .WithFlag(3, FieldMode.Read, valueProviderCallback: (_) => !EnterBootloader, name: "GPIO0") // GND = enter bootloader + .WithFlag(4, FieldMode.Read, valueProviderCallback: (_) => false, name: "GPIO45") // GND = VDD_SPI @ 3.3V + .WithFlag(5, FieldMode.Read, valueProviderCallback: (_) => false, name: "GPIO3") // GND = JTAG from pins, not USB + }, + // {(long)Registers.Data, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, name: "GR / GPIO data register", + // writeCallback: (id, _, val) => { data[id] = val; }, + // valueProviderCallback: (id, _) => + // { + // return (directionOutNotIn[id]) + // ? data[id] + // : State[id]; + // }) + // .WithWriteCallback((_, __) => UpdateConnections()) + // }, + // {(long)Registers.Direction, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, name: "GDIR / GPIO direction register", + // writeCallback: (id, _, val) => { directionOutNotIn[id] = val; }, + // valueProviderCallback: (id, _) => directionOutNotIn[id]) + // .WithWriteCallback((_, __) => UpdateConnections()) + // }, + // {(long)Registers.PadStatus, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, FieldMode.Read, name: "PSR / GPIO pad status register", + // valueProviderCallback: (id, _) => State[id]) + // }, + // {(long)Registers.Mask, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, name: "IMR / GPIO interrupt mask register", + // writeCallback: (id, _, val) => { interruptEnabled[id] = val; }, + // valueProviderCallback: (id, _) => interruptEnabled[id]) + // .WithWriteCallback((_, __) => UpdateIRQ()) + // }, + // {(long)Registers.Status, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, FieldMode.Read | FieldMode.WriteOneToClear, name: "ISR / GPIO interrupt status register", + // writeCallback: (id, _, val) => + // { + // if(val) + // { + // interruptRequest[id] = false; + // } + // }, + // valueProviderCallback: (id, _) => interruptRequest[id]) + // .WithWriteCallback((_, __) => UpdateIRQ()) + // }, + // {(long)Registers.EdgeSelect, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, name: "EDGE_SEL / GPIO edge select register", + // writeCallback: (id, _, val) => { edgeSelect[id] = val; }, + // valueProviderCallback: (id, _) => edgeSelect[id]) + // }, + // {(long)Registers.DataSet, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, FieldMode.Write, name: "DR_SET / GPIO data register SET", + // writeCallback: (id, _, __) => { data[id] = true; }) + // .WithWriteCallback((_, __) => UpdateConnections()) + // }, + // {(long)Registers.DataClear, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, FieldMode.Write, name: "DR_CLEAR / GPIO data register CLEAR", + // writeCallback: (id, _, __) => { data[id] = false; }) + // .WithWriteCallback((_, __) => UpdateConnections()) + // }, + // {(long)Registers.DataToggle, new DoubleWordRegister(this) + // .WithFlags(0, NumberOfPins, FieldMode.Write, name: "DR_TOGGLE / GPIO data register TOGGLE", + // writeCallback: (id, _, __) => { data[id] ^= true; }) + // .WithWriteCallback((_, __) => UpdateConnections()) + // }, + }; + + // var config1 = new DoubleWordRegister(this); + // var config2 = new DoubleWordRegister(this); + // var half = NumberOfPins / 2; + // for(var i = 0; i < half; ++i) + // { + // var j = i; + // config1.WithEnumField(j * 2, 2, + // name: $"ICR{j} / Interrupt configuration {j}", + // writeCallback: (_, val) => { interruptConfig[j] = val; }, + // valueProviderCallback: _ => interruptConfig[j]); + // config2.WithEnumField(j * 2, 2, + // name: $"ICR{half + j} / Interrupt configuration {half + j}", + // writeCallback: (_, val) => { interruptConfig[half + j] = val; }, + // valueProviderCallback: _ => interruptConfig[half + j]); + // } + // config1.WithWriteCallback((_, __) => UpdateAllInterruptRequests()); + // config2.WithWriteCallback((_, __) => UpdateAllInterruptRequests()); + // registersDictionary.Add((long)Registers.Config1, config1); + // registersDictionary.Add((long)Registers.Config2, config2); + return registersDictionary; + } + + private void UpdateIRQ() + { + var flag = false; + for(var i = 0; i < NumberOfPins; ++i) + { + flag |= interruptEnabled[i] && interruptRequest[i]; + } + IRQ.Set(flag); + } + + private void UpdateConnections() + { + for(var i = 0; i < NumberOfPins; ++i) + { + Connections[i].Set(directionOutNotIn[i] && data[i]); + } + UpdateIRQ(); + } + + private void UpdateAllInterruptRequests() + { + for(var i = 0; i < NumberOfPins; ++i) + { + UpdateSingleInterruptRequest(i, State[i]); + } + UpdateIRQ(); + } + + private void UpdateSingleInterruptRequest(int i, bool currentState, bool stateChanged = false) + { + if(edgeSelect[i]) + { + interruptRequest[i] |= stateChanged; + } + else + { + switch(interruptConfig[i]) + { + case InterruptConfig.Low: + interruptRequest[i] |= !currentState; + break; + case InterruptConfig.High: + interruptRequest[i] |= currentState; + break; + case InterruptConfig.Rising: + interruptRequest[i] |= stateChanged && currentState; + break; + case InterruptConfig.Falling: + interruptRequest[i] |= stateChanged && !currentState; + break; + default: + this.Log(LogLevel.Error, "Invalid state (interruptConfig[{0}]: 0x{1:X}).", i, interruptConfig[i]); + break; + } + } + } + + private readonly DoubleWordRegisterCollection registers; + private readonly object locker; + private readonly bool[] data; + private readonly bool[] directionOutNotIn; + private readonly bool[] interruptEnabled; + private readonly bool[] interruptRequest; + private readonly bool[] edgeSelect; + private readonly InterruptConfig[] interruptConfig; + public bool EnableBootMessages = true; + public bool EnterBootloader = false; + + private const int NumberOfPins = 54; + + private enum InterruptConfig + { + Low = 0b00, + High = 0b01, + Rising = 0b10, + Falling = 0b11, + } + + private enum Registers : long + { + STRAP = 0x38, + } + } +} diff --git a/peripherals/ESP32S3_RTC_CNTL.cs b/peripherals/ESP32S3_RTC_CNTL.cs new file mode 100644 index 0000000..acc6428 --- /dev/null +++ b/peripherals/ESP32S3_RTC_CNTL.cs @@ -0,0 +1,194 @@ +// +// Copyright (c) 2010-2023 Antmicro +// Copyright (c) 2011-2015 Realtime Embedded +// +// This file is licensed under the MIT License. +// Full license text is available in 'licenses/MIT.txt'. +// +using System; +using Antmicro.Renode.Peripherals.Bus; +using Antmicro.Renode.Core; +using Antmicro.Renode.Peripherals; +using Antmicro.Renode.Utilities; +using Antmicro.Renode.Logging; +using System.Collections.Generic; +using Antmicro.Renode.Core.Structure.Registers; + +namespace Antmicro.Renode.Peripherals.Miscellaneous +{ + public class ESP32S3_RTC_CNTL : IBytePeripheral, IDoubleWordPeripheral, IKnownSize + { + public ESP32S3_RTC_CNTL(Machine machine) + { + var registersMap = new Dictionary + { + {(long)Registers.OPTIONS0, new DoubleWordRegister(this) + .WithValueField(0, 2, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => 0, name: "SW_STALL_APPCPU_C0") // {reg_sw_stall_appcpu_c1[5:0], reg_sw_stall_appcpu_c0[1:0]} == 0x86 will stall APP CPU + .WithValueField(2, 2, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => 0, name: "SW_STALL_PROCPU_C0") // {reg_sw_stall_procpu_c1[5:0], reg_sw_stall_procpu_c0[1:0]} == 0x86 will stall PRO CPU + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "SW_APPCPU_RST") // APP CPU SW reset + .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "SW_PROCPU_RST") // PRO CPU SW reset + .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "BB_I2C_FORCE_PD") // BB_I2C force power down + .WithFlag(7, FieldMode.Read | FieldMode.Write, name: "BB_I2C_FORCE_PU") // BB_I2C force power up + .WithFlag(8, FieldMode.Read | FieldMode.Write, name: "BBPLL_I2C_FORCE_PD") // BB_PLL _I2C force power down + .WithFlag(9, FieldMode.Read | FieldMode.Write, name: "BBPLL_I2C_FORCE_PU") // BB_PLL_I2C force power up + .WithFlag(10, FieldMode.Read | FieldMode.Write, name: "BBPLL_FORCE_PD") // BB_PLL force power down + .WithFlag(11, FieldMode.Read | FieldMode.Write, name: "BBPLL_FORCE_PU") // BB_PLL force power up + .WithFlag(12, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_PD") // crystall force power down + .WithFlag(13, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_PU") // crystall force power up + .WithValueField(14, 4, FieldMode.Read | FieldMode.Write, name: "XTL_EN_WAIT") // wait bias_sleep and current source wakeup + .WithFlag(23, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_ISO") // No public + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "PLL_FORCE_ISO") // No public + .WithFlag(25, FieldMode.Read | FieldMode.Write, name: "ANALOG_FORCE_ISO") // No public + .WithFlag(26, FieldMode.Read | FieldMode.Write, name: "XTL_FORCE_NOISO") // No public + .WithFlag(27, FieldMode.Read | FieldMode.Write, name: "PLL_FORCE_NOISO") // No public + .WithFlag(28, FieldMode.Read | FieldMode.Write, name: "ANALOG_FORCE_NOISO") // No public + .WithFlag(29, FieldMode.Read | FieldMode.Write, name: "DG_WRAP_FORCE_RST") // digital wrap force reset in deep sleep + .WithFlag(30, FieldMode.Read | FieldMode.Write, name: "DG_WRAP_FORCE_NORST") // digital core force no reset in deep sleep + .WithFlag(31, FieldMode.Write, name: "SW_SYS_RST") // SW system reset + }, + {(long)Registers.RESET_STATE, new DoubleWordRegister(this) + .WithValueField(0, 6, FieldMode.Read, valueProviderCallback: (_) => (ulong)ResetReason.POWERON, name: "RESET_CAUSE_PROCPU") + .WithValueField(6, 6, FieldMode.Read, valueProviderCallback: (_) => 1, name: "RESET_CAUSE_APPCPU") + .WithFlag(12, FieldMode.Read | FieldMode.Write, name: "APPCPU_STAT_VECTOR_SEL") + .WithFlag(13, FieldMode.Read | FieldMode.Write, name: "PROCPU_STAT_VECTOR_SEL") + .WithFlag(14, FieldMode.Read, valueProviderCallback: (_) => true, name: "RESET_FLAG_PROCPU") + .WithFlag(15, FieldMode.Read, valueProviderCallback: (_) => true, name: "RESET_FLAG_APPCPU") + .WithFlag(16, FieldMode.Write, name: "RESET_FLAG_PROCPU_CLR") + .WithFlag(17, FieldMode.Write, name: "RESET_FLAG_APPCPU_CLR") + .WithFlag(18, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => true, name: "PROCPU_OCD_HALT_ON_RESET") + .WithFlag(19, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => true, name: "RESET_FLAG_APPCPU") + .WithFlag(20, FieldMode.Read, valueProviderCallback: (_) => true, name: "RESET_FLAG_JTAG_PROCPU") + .WithFlag(21, FieldMode.Read, valueProviderCallback: (_) => true, name: "RESET_FLAG_JTAG_APPCPU") + .WithFlag(22, FieldMode.Write, name: "RESET_FLAG_JTAG_PROCPU_CLR") + .WithFlag(23, FieldMode.Write, name: "RESET_FLAG_JTAG_APPCPU_CLR") + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "APP_DRESET_MASK") + .WithFlag(25, FieldMode.Read | FieldMode.Write, valueProviderCallback: (_) => true, name: "PRO_DRESET_MASK") + }, + {(long)Registers.PWC, new DoubleWordRegister(this) + .WithValueField(0, 32) + }, + {(long)Registers.DIG_ISO, new DoubleWordRegister(this) + .WithValueField(0, 32) + }, + {(long)Registers.SWD_CONF, new DoubleWordRegister(this) + .WithValueField(0, 32) + }, + {(long)Registers.STORE4, new DoubleWordRegister(this) + .WithValueField(0, 32, name: "SCRATCH4") + }, + {(long)Registers.DIG_PAD_HOLD, new DoubleWordRegister(this) + .WithValueField(0, 32) + }, + // {(long)Registers.STATUS, new DoubleWordRegister(this) + // .WithValueField(0, 10, FieldMode.Read, name: "RXFIFO_CNT") + // .WithFlag(13, FieldMode.Read, name: "UART_DSRN") + // .WithFlag(14, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_CTSN") + // .WithFlag(15, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_RXD") + // .WithValueField(16, 10, FieldMode.Read, name: "TXFIFO_CNT") + // .WithFlag(29, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_DTRN") + // .WithFlag(30, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_RTSN") + // .WithFlag(31, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_TXD") + // }, + // {(long)Registers.TxFull, new DoubleWordRegister(this) + // .WithFlag(0, FieldMode.Read) //tx is never full + // }, + // {(long)Registers.RxEmpty, new DoubleWordRegister(this) + // .WithFlag(0, FieldMode.Read, valueProviderCallback: _ => Count == 0) + // }, + // {(long)Registers.EventPending, new DoubleWordRegister(this) + // // `txEventPending` implements `WriteOneToClear` semantics to avoid fake warnings + // // `txEventPending` is generated on the falling edge of TxFull; in our case it means never + // .WithFlag(0, FieldMode.Read | FieldMode.WriteOneToClear, valueProviderCallback: _ => false, name: "txEventPending") + // .WithFlag(1, out rxEventPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "rxEventPending") + // .WithWriteCallback((_, __) => UpdateInterrupts()) + // }, + // {(long)Registers.EventEnable, new DoubleWordRegister(this) + // .WithFlag(0, name: "txEventEnabled") + // .WithFlag(1, out rxEventEnabled) + // .WithWriteCallback((_, __) => UpdateInterrupts()) + // }, + }; + + registers = new DoubleWordRegisterCollection(this, registersMap); + } + + public uint ReadDoubleWord(long offset) + { + return registers.Read(offset); + } + + public byte ReadByte(long offset) + { + if (offset % 4 != 0) + { + // in the current configuration, only the lowest byte + // contains a meaningful data + return 0; + } + return (byte)ReadDoubleWord(offset); + } + + public void Reset() + { + // base.Reset(); + registers.Reset(); + + // UpdateInterrupts(); + } + + public void WriteDoubleWord(long offset, uint value) + { + registers.Write(offset, value); + } + + public void WriteByte(long offset, byte value) + { + if (offset % 4 != 0) + { + // in the current configuration, only the lowest byte + // contains a meaningful data + return; + } + + WriteDoubleWord(offset, value); + } + + public long Size => 0x15C; + private readonly DoubleWordRegisterCollection registers; + + private enum Registers : long + { + OPTIONS0 = 0x00, // RTC common configure register + RESET_STATE = 0x38, // get reset state + PWC = 0x88, // configure rtc power + DIG_ISO = 0x94, // congigure digital power isolation + SWD_CONF = 0xB4, // congfigure super watch dog + STORE4 = 0xC0, // reserved register + DIG_PAD_HOLD = 0xDC, // configure digtal pad hold + } + + private enum ResetReason : long + { + POWERON = 0x01, + JTAG = 0x02, + RTC_SW_SYS_RST = 0x03, + DSLEEP = 0x05, + TG0WDT_SYS_RST = 0x07, + TG1WDT_SYS_RST = 0x08, + RTCWDT_SYS_RST = 0x09, + INTRUSION_RST = 0x0A, + TG0WDT_CPU_RST = 0x0B, + RTC_SW_CPU_RST = 0x0C, + RTCWDT_CPU_RST = 0x0D, + BROWNOUT_RST = 0x0F, + RTCWDT_RTC_RST = 0x10, + TG01DT_CPU_RST = 0x11, + SUPER_WDT_RST = 0x12, + GLITCH_RTC_RST = 0x13, + EFUSE_RST = 0x14, + USB_UART_CHIP_RESET = 0x15, + USB_JTAG_CHIP_RESET = 0x16, + POWER_GLITCH_RESET = 0x17, + } + } +} diff --git a/peripherals/ESP32_SPIController.cs b/peripherals/ESP32_SPIController.cs new file mode 100644 index 0000000..70a424e --- /dev/null +++ b/peripherals/ESP32_SPIController.cs @@ -0,0 +1,435 @@ +using System.Linq; +using System.Collections.Generic; +using Antmicro.Renode.Core; +using Antmicro.Renode.Core.Structure; +using Antmicro.Renode.Core.Structure.Registers; +using Antmicro.Renode.Logging; +using Antmicro.Renode.Peripherals.Bus; +using Antmicro.Renode.Peripherals.Memory; +using Antmicro.Renode.Peripherals.MTD; + +namespace Antmicro.Renode.Peripherals.SPI +{ + public class ESP32_SPIController : NullRegistrationPointPeripheralContainer, IDoubleWordPeripheral, IProvidesRegisterCollection, IKnownSize + { + public GPIO IRQ { get; private set; } + public DoubleWordRegisterCollection RegistersCollection { get; } + public long Size => 0x1000; // 0xb4 + private readonly Machine machine; + + public ESP32_SPIController(Machine machine) : base(machine) + { + this.machine = machine; + + IRQ = new GPIO(); + + RegistersCollection = new DoubleWordRegisterCollection(this); + DefineRegisters(); + Reset(); + } + + private void DefineRegisters() + { + // SPI1 memory command register + Registers.CMD.Define(this, 0x0) + .WithFlag(17, FieldMode.Read | FieldMode.Write, name: "FLASH_PE") // In user mode, it is set to indicate that program/erase operation will be triggered. The bit is combined with SPI_MEM_USR bit. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(18, FieldMode.Read | FieldMode.Write, name: "USR") // User define command enable. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(19, FieldMode.Read | FieldMode.Write, name: "FLASH_HPM") // Drive Flash into high performance mode. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(20, FieldMode.Read | FieldMode.Write, name: "FLASH_RES") // This bit combined with SPI_MEM_RESANDRES bit releases Flash from the power-down state or high performance mode and obtains the devices ID. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(21, FieldMode.Read | FieldMode.Write, name: "FLASH_DP") // Drive Flash into power down. An operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(22, FieldMode.Read | FieldMode.Write, name: "FLASH_CE") // Chip erase enable. Chip erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(23, FieldMode.Read | FieldMode.Write, name: "FLASH_BE") // Block erase enable(32KB) . Block erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "FLASH_SE") // Sector erase enable(4KB). Sector erase operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(25, FieldMode.Read | FieldMode.Write, name: "FLASH_PP") // Page program enable(1 byte ~64 bytes data to be programmed). Page program operation will be triggered when the bit is set. The bit will be cleared once the operation done .1: enable 0: disable. + .WithFlag(26, FieldMode.Read | FieldMode.Write, name: "FLASH_WRSR") // Write status register enable. Write status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(27, FieldMode.Read | FieldMode.Write, name: "FLASH_RDSR") // Read status register-1. Read status operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(28, FieldMode.Read | FieldMode.Write, name: "FLASH_RDID") // Read JEDEC ID . Read ID command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + .WithFlag(29, FieldMode.Read | FieldMode.Write, name: "FLASH_WRDI") // Write flash disable. Write disable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + .WithFlag(30, FieldMode.Read | FieldMode.Write, name: "FLASH_WREN") // Write flash enable. Write enable command will be sent when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + .WithFlag(31, FieldMode.Read | FieldMode.Write, name: "FLASH_READ") // Read flash enable. Read flash operation will be triggered when the bit is set. The bit will be cleared once the operation done. 1: enable 0: disable. + ; + + // SPI1 address register + Registers.ADDR.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "USR_ADDR_VALUE") // In user mode, it is the memory address. other then the bit0-bit23 is the memory address, the bit24-bit31 are the byte length of a transfer. + ; + + // SPI1 control register + Registers.CTRL.Define(this, 0x2ca000) + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "FDUMMY_OUT") // In the DUMMY phase the signal level of SPI bus is output by the SPI0 controller. + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "FDOUT_OCT") // Set this bit to enable 8-bit-mode(8-bm) in DOUT phase. + .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "FDIN_OCT") // Set this bit to enable 8-bit-mode(8-bm) in DIN phase. + .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "FADDR_OCT") // Set this bit to enable 8-bit-mode(8-bm) in ADDR phase. + .WithFlag(7, FieldMode.Read | FieldMode.Write, name: "FCMD_DUAL") // Set this bit to enable 2-bit-mode(2-bm) in CMD phase. + .WithFlag(8, FieldMode.Read | FieldMode.Write, name: "FCMD_QUAD") // Set this bit to enable 4-bit-mode(4-bm) in CMD phase. + .WithFlag(9, FieldMode.Read | FieldMode.Write, name: "FCMD_OCT") // Set this bit to enable 8-bit-mode(8-bm) in CMD phase. + .WithFlag(10, FieldMode.Read | FieldMode.Write, name: "FCS_CRC_EN") // For SPI1, initialize crc32 module before writing encrypted data to flash. Active low. + .WithFlag(11, FieldMode.Read | FieldMode.Write, name: "TX_CRC_EN") // For SPI1, enable crc32 when writing encrypted data to flash. 1: enable 0:disable + .WithFlag(13, FieldMode.Read | FieldMode.Write, name: "FASTRD_MODE") // This bit should be set when SPI_MEM_FREAD_QIO, SPI_MEM_FREAD_DIO, SPI_MEM_FREAD_QUAD or SPI_MEM_FREAD_DUAL is set. + .WithFlag(14, FieldMode.Read | FieldMode.Write, name: "FREAD_DUAL") // In hardware 0x3B read operation, DIN phase apply 2 signals. 1: enable 0: disable. + .WithFlag(15, FieldMode.Read | FieldMode.Write, name: "RESANDRES") // The Device ID is read out to SPI_MEM_RD_STATUS register, this bit combine with spi_mem_flash_res bit. 1: enable 0: disable. + .WithFlag(18, FieldMode.Read | FieldMode.Write, name: "Q_POL") // The bit is used to set MISO line polarity, 1: high 0, low + .WithFlag(19, FieldMode.Read | FieldMode.Write, name: "D_POL") // The bit is used to set MOSI line polarity, 1: high 0, low + .WithFlag(20, FieldMode.Read | FieldMode.Write, name: "FREAD_QUAD") // In hardware 0x6B read operation, DIN phase apply 4 signals(4-bit-mode). 1: enable 0: disable. + .WithFlag(21, FieldMode.Read | FieldMode.Write, name: "WP") // Write protect signal output when SPI is idle. 1: output high, 0: output low. + .WithFlag(22, FieldMode.Read | FieldMode.Write, name: "WRSR_2B") // Two bytes data will be written to status register when it is set. 1: enable 0: disable. + .WithFlag(23, FieldMode.Read | FieldMode.Write, name: "FREAD_DIO") // In hardware 0xBB read operation, ADDR phase and DIN phase apply 2 signals(2-bit-mode). 1: enable 0: disable. + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "FREAD_QIO") // In hardware 0xEB read operation, ADDR phase and DIN phase apply 4 signals(4-bit-mode). 1: enable 0: disable. + ; + + // SPI1 control1 register + Registers.CTRL1.Define(this, 0xffc) + .WithValueField(0, 2, FieldMode.Read | FieldMode.Write, name: "CLK_MODE") // SPI Bus clock (SPI_CLK) mode bits. 0: SPI Bus clock (SPI_CLK) is off when CS inactive 1: SPI_CLK is delayed one cycle after SPI_CS inactive 2: SPI_CLK is delayed two cycles after SPI_CS inactive 3: SPI_CLK is always on. + .WithValueField(2, 10, FieldMode.Read | FieldMode.Write, name: "CS_HOLD_DLY_RES") // After RES/DP/HPM/PES/PER command is sent, SPI1 may waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4 or * 256) SPI_CLK cycles. + ; + + // SPI1 control2 register + Registers.CTRL2.Define(this, 0x0) + .WithFlag(31, FieldMode.Read | FieldMode.Write, name: "SYNC_RESET") // The FSM will be reset. + ; + + // SPI_CLK clock division register when SPI1 accesses to flash or Ext_RAM. + Registers.CLOCK.Define(this, 0x30103) + .WithValueField(0, 8, FieldMode.Read | FieldMode.Write, name: "CLKCNT_L") // It must equal to the value of SPI_MEM_CLKCNT_N. + .WithValueField(8, 8, FieldMode.Read | FieldMode.Write, name: "CLKCNT_H") // It must be a floor value of ((SPI_MEM_CLKCNT_N+1)/2-1). + .WithValueField(16, 8, FieldMode.Read | FieldMode.Write, name: "CLKCNT_N") // When SPI1 accesses to flash or Ext_RAM, f_SPI_CLK = f_MSPI_CORE_CLK/(SPI_MEM_CLKCNT_N+1) + .WithFlag(31, FieldMode.Read | FieldMode.Write, name: "CLK_EQU_SYSCLK") // When SPI1 access to flash or Ext_RAM, set this bit in 1-division mode, f_SPI_CLK = f_MSPI_CORE_CLK. + ; + + // SPI1 user register. + Registers.USER.Define(this, 0x80000000) + .WithFlag(9, FieldMode.Read | FieldMode.Write, name: "CK_OUT_EDGE") // This bit, combined with SPI_MEM_CK_IDLE_EDGE bit, is used to change the clock mode 0~3 of SPI_CLK. + .WithFlag(12, FieldMode.Read | FieldMode.Write, name: "FWRITE_DUAL") // Set this bit to enable 2-bm in DOUT phase in SPI1 write operation. + .WithFlag(13, FieldMode.Read | FieldMode.Write, name: "FWRITE_QUAD") // Set this bit to enable 4-bm in DOUT phase in SPI1 write operation. + .WithFlag(14, FieldMode.Read | FieldMode.Write, name: "FWRITE_DIO") // Set this bit to enable 2-bm in ADDR and DOUT phase in SPI1 write operation. + .WithFlag(15, FieldMode.Read | FieldMode.Write, name: "FWRITE_QIO") // Set this bit to enable 4-bit-mode(4-bm) in ADDR and DOUT phase in SPI1 write operation. + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "USR_MISO_HIGHPART") // DIN phase only access to high-part of the buffer SPI_MEM_W8_REG~SPI_MEM_W15_REG. 1: enable 0: disable. + .WithFlag(25, FieldMode.Read | FieldMode.Write, name: "USR_MOSI_HIGHPART") // DOUT phase only access to high-part of the buffer SPI_MEM_W8_REG~SPI_MEM_W15_REG. 1: enable 0: disable. + .WithFlag(26, FieldMode.Read | FieldMode.Write, name: "USR_DUMMY_IDLE") // SPI_CLK is disabled(No clock edges) in DUMMY phase when the bit is enable. + .WithFlag(27, FieldMode.Read | FieldMode.Write, name: "USR_MOSI") // Set this bit to enable the DOUT phase of an write-data operation. + .WithFlag(28, FieldMode.Read | FieldMode.Write, name: "USR_MISO") // Set this bit to enable enable the DIN phase of a read-data operation. + .WithFlag(29, FieldMode.Read | FieldMode.Write, name: "USR_DUMMY") // Set this bit to enable enable the DUMMY phase of an operation. + .WithFlag(30, FieldMode.Read | FieldMode.Write, name: "USR_ADDR") // Set this bit to enable enable the ADDR phase of an operation. + .WithFlag(31, FieldMode.Read | FieldMode.Write, name: "USR_COMMAND") // Set this bit to enable enable the CMD phase of an operation. + ; + + // SPI1 user1 register. + Registers.USER1.Define(this, 0x5c000007) + .WithValueField(0, 6, FieldMode.Read | FieldMode.Write, name: "USR_DUMMY_CYCLELEN") // The SPI_CLK cycle length minus 1 of DUMMY phase. + .WithValueField(26, 6, FieldMode.Read | FieldMode.Write, name: "USR_ADDR_BITLEN") // The length in bits of ADDR phase. The register value shall be (bit_num-1). + ; + + // SPI1 user2 register. + Registers.USER2.Define(this, 0x70000000) + .WithValueField(0, 16, FieldMode.Read | FieldMode.Write, name: "USR_COMMAND_VALUE") // The value of user defined(USR) command. + .WithValueField(28, 4, FieldMode.Read | FieldMode.Write, name: "USR_COMMAND_BITLEN") // The length in bits of CMD phase. The register value shall be (bit_num-1) + ; + + // SPI1 write-data bit length register. + Registers.MOSI_DLEN.Define(this, 0x0) + .WithValueField(0, 10, FieldMode.Read | FieldMode.Write, name: "USR_MOSI_DBITLEN") // The length in bits of DOUT phase. The register value shall be (bit_num-1). + ; + + // SPI1 read-data bit length register. + Registers.MISO_DLEN.Define(this, 0x0) + .WithValueField(0, 10, FieldMode.Read | FieldMode.Write, name: "USR_MISO_DBITLEN") // The length in bits of DIN phase. The register value shall be (bit_num-1). + ; + + // SPI1 read control register. + Registers.RD_STATUS.Define(this, 0x0) + .WithValueField(0, 16, FieldMode.Read | FieldMode.Write, name: "STATUS") // The value is stored when set SPI_MEM_FLASH_RDSR bit and SPI_MEM_FLASH_RES bit. + .WithValueField(16, 8, FieldMode.Read | FieldMode.Write, name: "WB_MODE") // Mode bits in the flash fast read mode it is combined with SPI_MEM_FASTRD_MODE bit. + ; + + // SPI1 extended address register. + Registers.EXT_ADDR.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "EXT_ADDR") // The register are the higher 32bits in the 64 bits address mode. + ; + + // SPI1 misc register. + Registers.MISC.Define(this, 0x2) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "CS0_DIS") // Set this bit to raise high SPI_CS pin, which means that the SPI device(flash) connected to SPI_CS is in low level when SPI1 transfer starts. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "CS1_DIS") // Set this bit to raise high SPI_CS1 pin, which means that the SPI device(Ext_RAM) connected to SPI_CS1 is in low level when SPI1 transfer starts. + .WithFlag(9, FieldMode.Read | FieldMode.Write, name: "CK_IDLE_EDGE") // 1: SPI_CLK line is high when MSPI is idle. 0: SPI_CLK line is low when MSPI is idle. + .WithFlag(10, FieldMode.Read | FieldMode.Write, name: "CS_KEEP_ACTIVE") // SPI_CS line keep low when the bit is set. + .WithFlag(11, FieldMode.Read | FieldMode.Write, name: "AUTO_PER") // Set this bit to enable auto PER function. Hardware will sent out PER command if PES command is sent. + ; + + // SPI1 CRC data register. + Registers.TX_CRC.Define(this, 0xffffffff) + .WithValueField(0, 32, FieldMode.Read, name: "DATA") // For SPI1, the value of crc32. + ; + + // SPI1 bit mode control register. + Registers.CACHE_FCTRL.Define(this, 0x0) + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "CACHE_USR_CMD_4BYTE") // Set this bit to enable SPI1 transfer with 32 bits address. The value of SPI_MEM_USR_ADDR_BITLEN should be 31. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "FDIN_DUAL") // When SPI1 accesses to flash or Ext_RAM, set this bit to enable 2-bm in DIN phase. + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "FDOUT_DUAL") // When SPI1 accesses to flash or Ext_RAM, set this bit to enable 2-bm in DOUT phase. + .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "FADDR_DUAL") // When SPI1 accesses to flash or Ext_RAM, set this bit to enable 2-bm in ADDR phase. + .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "FDIN_QUAD") // When SPI1 accesses to flash or Ext_RAM, set this bit to enable 4-bm in DIN phase. + .WithFlag(7, FieldMode.Read | FieldMode.Write, name: "FDOUT_QUAD") // When SPI1 accesses to flash or Ext_RAM, set this bit to enable 4-bm in DOUT phase. + .WithFlag(8, FieldMode.Read | FieldMode.Write, name: "FADDR_QUAD") // When SPI1 accesses to flash or Ext_RAM, set this bit to enable 4-bm in ADDR phase. + ; + + // SPI1 state machine(FSM) status register. + Registers.FSM.Define(this, 0x0) + .WithValueField(0, 3, FieldMode.Read, name: "ST") // The status of SPI1 state machine. 0: idle state(IDLE), 1: preparation state(PREP), 2: send command state(CMD), 3: send address state(ADDR), 4: red data state(DIN), 5:write data state(DOUT), 6: wait state(DUMMY), 7: done state(DONE). + ; + + // SPI1 memory data buffer0 + Registers.W0.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF0") // data buffer + ; + + // SPI1 memory data buffer1 + Registers.W1.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF1") // data buffer + ; + + // SPI1 memory data buffer2 + Registers.W2.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF2") // data buffer + ; + + // SPI1 memory data buffer3 + Registers.W3.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF3") // data buffer + ; + + // SPI1 memory data buffer4 + Registers.W4.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF4") // data buffer + ; + + // SPI1 memory data buffer5 + Registers.W5.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF5") // data buffer + ; + + // SPI1 memory data buffer6 + Registers.W6.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF6") // data buffer + ; + + // SPI1 memory data buffer7 + Registers.W7.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF7") // data buffer + ; + + // SPI1 memory data buffer8 + Registers.W8.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF8") // data buffer + ; + + // SPI1 memory data buffer9 + Registers.W9.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF9") // data buffer + ; + + // SPI1 memory data buffer10 + Registers.W10.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF10") // data buffer + ; + + // SPI1 memory data buffer11 + Registers.W11.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF11") // data buffer + ; + + // SPI1 memory data buffer12 + Registers.W12.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF12") // data buffer + ; + + // SPI1 memory data buffer13 + Registers.W13.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF13") // data buffer + ; + + // SPI1 memory data buffer14 + Registers.W14.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF14") // data buffer + ; + + // SPI1 memory data buffer15 + Registers.W15.Define(this, 0x0) + .WithValueField(0, 32, FieldMode.Read | FieldMode.Write, name: "BUF15") // data buffer + ; + + // SPI1 wait idle control register + Registers.FLASH_WAITI_CTRL.Define(this, 0x14) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "WAITI_EN") // Set this bit to enable auto-waiting flash idle operation when PP/SE/BE/CE/WRSR/PES command is sent. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "WAITI_DUMMY") // Set this bit to enable DUMMY phase in auto wait flash idle transfer(RDSR). + .WithValueField(2, 8, FieldMode.Read | FieldMode.Write, name: "WAITI_CMD") // The command value of auto wait flash idle transfer(RDSR). + .WithValueField(10, 6, FieldMode.Read | FieldMode.Write, name: "WAITI_DUMMY_CYCLELEN") // The dummy cycle length when wait flash idle(RDSR). + ; + + // SPI1 flash suspend control register + Registers.FLASH_SUS_CMD.Define(this, 0x0) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "FLASH_PER") // program erase resume bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "FLASH_PES") // program erase suspend bit, program erase suspend operation will be triggered when the bit is set. The bit will be cleared once the operation done.1: enable 0: disable. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "FLASH_PER_WAIT_EN") // Set this bit to add delay time after program erase resume(PER) is sent. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "FLASH_PES_WAIT_EN") // Set this bit to add delay time after program erase suspend(PES) command is sent. + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "PES_PER_EN") // Set this bit to enable PES transfer trigger PES transfer option. + .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "PESR_IDLE_EN") // 1: Separate PER flash wait idle and PES flash wait idle. 0: Not separate. + ; + + // SPI1 flash suspend command register + Registers.FLASH_SUS_CTRL.Define(this, 0xeaf4) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "FLASH_PES_EN") // Set this bit to enable auto-suspend function. + .WithValueField(1, 8, FieldMode.Read | FieldMode.Write, name: "FLASH_PER_COMMAND") // Program/Erase resume command value. + .WithValueField(9, 8, FieldMode.Read | FieldMode.Write, name: "FLASH_PES_COMMAND") // Program/Erase suspend command value. + ; + + // SPI1 flash suspend status register + Registers.SUS_STATUS.Define(this, 0x0) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "FLASH_SUS") // The status of flash suspend. This bit is set when PES command is sent, and cleared when PER is sent. Only used in SPI1. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "FLASH_HPM_DLY_256") // 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after HPM command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after HPM command is sent. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "FLASH_RES_DLY_256") // 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after RES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after RES command is sent. + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "FLASH_DP_DLY_256") // 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after DP command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after DP command is sent. + .WithFlag(5, FieldMode.Read | FieldMode.Write, name: "FLASH_PER_DLY_256") // Valid when SPI_MEM_FLASH_PER_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after PER command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PER command is sent. + .WithFlag(6, FieldMode.Read | FieldMode.Write, name: "FLASH_PES_DLY_256") // Valid when SPI_MEM_FLASH_PES_WAIT_EN is 1. 1: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 256) SPI_CLK cycles after PES command is sent. 0: SPI1 waits (SPI_MEM_CS_HOLD_DELAY_RES[9:0] * 4) SPI_CLK cycles after PES command is sent. + ; + + // SPI1 timing compensation register when accesses to flash or Ext_RAM. + Registers.TIMING_CALI.Define(this, 0x0) + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "TIMING_CALI") // Set this bit to add extra SPI_CLK cycles in DUMMY phase for all reading operations. + .WithValueField(2, 3, FieldMode.Read | FieldMode.Write, name: "EXTRA_DUMMY_CYCLELEN") // Extra SPI_CLK cycles added in DUMMY phase for timing compensation. Active when SPI_MEM_TIMING_CALI bit is set. + ; + + // SPI1 DDR control register + Registers.DDR.Define(this, 0x20) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DDR_EN") // 1: in DDR mode, 0: in SDR mode. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_VAR_DUMMY") // Set the bit to enable variable dummy cycle in DDRmode. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DDR_RDAT_SWP") // Set the bit to reorder RX data of the word in DDR mode. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DDR_WDAT_SWP") // Set the bit to reorder TX data of the word in DDR mode. + .WithFlag(4, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DDR_CMD_DIS") // the bit is used to disable dual edge in command phase when DDR mode. + .WithValueField(5, 7, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_OUTMINBYTELEN") // It is the minimum output data length in the panda device. + .WithValueField(14, 7, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_USR_DDR_DQS_THD") // The delay number of data strobe which from memory based on SPI_CLK. + .WithFlag(21, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DDR_DQS_LOOP") // 1: Use internal signal as data strobe, the strobe can not be delayed by input timing module. 0: Use input SPI_DQS signal from PAD as data strobe, the strobe can be delayed by input timing module + .WithFlag(22, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DDR_DQS_LOOP_MODE") // When SPI_FMEM_DDR_DQS_LOOP and SPI_FMEM_DDR_EN are set, 1: Use internal SPI_CLK as data strobe. 0: Use internal ~SPI_CLK as data strobe. Otherwise this bit is not active. + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_CLK_DIFF_EN") // Set this bit to enable the differential SPI_CLK#. + .WithFlag(25, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_HYPERBUS_MODE") // Set this bit to enable the SPI HyperBus mode. + .WithFlag(26, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_DQS_CA_IN") // Set this bit to enable the input of SPI_DQS signal in SPI phases of CMD and ADDR. + .WithFlag(27, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_HYPERBUS_DUMMY_2X") // Set this bit to enable the vary dummy function in SPI HyperBus mode, when SPI0 accesses flash or SPI1 accesses flash or sram. + .WithFlag(28, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_CLK_DIFF_INV") // Set this bit to invert SPI_DIFF when accesses to flash. . + .WithFlag(29, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_OCTA_RAM_ADDR") // Set this bit to enable octa_ram address out when accesses to flash, which means ADDR_OUT[31:0] = {spi_usr_addr_value[25:4], 6'd0, spi_usr_addr_value[3:1], 1'b0}. + .WithFlag(30, FieldMode.Read | FieldMode.Write, name: "SPI_FMEM_HYPERBUS_CA") // Set this bit to enable HyperRAM address out when accesses to flash, which means ADDR_OUT[31:0] = {spi_usr_addr_value[19:4], 13'd0, spi_usr_addr_value[3:1]}. + ; + + // SPI1 clk_gate register + Registers.CLOCK_GATE.Define(this, 0x1) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "CLK_EN") // Register clock gate enable signal. 1: Enable. 0: Disable. + ; + + // SPI1 interrupt enable register + Registers.INT_ENA.Define(this, 0x0) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "PER_END_INT_ENA") // The enable bit for SPI_MEM_PER_END_INT interrupt. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "PES_END_INT_ENA") // The enable bit for SPI_MEM_PES_END_INT interrupt. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "TOTAL_TRANS_END_INT_ENA") // The enable bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "BROWN_OUT_INT_ENA") // The enable bit for SPI_MEM_BROWN_OUT_INT interrupt. + ; + + // SPI1 interrupt clear register + Registers.INT_CLR.Define(this, 0x0) + .WithFlag(0, FieldMode.Write, name: "PER_END_INT_CLR") // The clear bit for SPI_MEM_PER_END_INT interrupt. + .WithFlag(1, FieldMode.Write, name: "PES_END_INT_CLR") // The clear bit for SPI_MEM_PES_END_INT interrupt. + .WithFlag(2, FieldMode.Write, name: "TOTAL_TRANS_END_INT_CLR") // The clear bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + .WithFlag(3, FieldMode.Write, name: "BROWN_OUT_INT_CLR") // The status bit for SPI_MEM_BROWN_OUT_INT interrupt. + ; + + // SPI1 interrupt raw register + Registers.INT_RAW.Define(this, 0x0) + .WithFlag(0, FieldMode.Read | FieldMode.Write, name: "PER_END_INT_RAW") // The raw bit for SPI_MEM_PER_END_INT interrupt. 1: Triggered when Auto Resume command (0x7A) is sent and flash is resumed successfully. 0: Others. + .WithFlag(1, FieldMode.Read | FieldMode.Write, name: "PES_END_INT_RAW") // The raw bit for SPI_MEM_PES_END_INT interrupt.1: Triggered when Auto Suspend command (0x75) is sent and flash is suspended successfully. 0: Others. + .WithFlag(2, FieldMode.Read | FieldMode.Write, name: "TOTAL_TRANS_END_INT_RAW") // The raw bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. 1: Triggered when SPI1 transfer is done and flash is already idle. When WRSR/PP/SE/BE/CE is sent and PES/PER command is sent, this bit is set when WRSR/PP/SE/BE/CE is success. 0: Others. + .WithFlag(3, FieldMode.Read | FieldMode.Write, name: "BROWN_OUT_INT_RAW") // The raw bit for SPI_MEM_BROWN_OUT_INT interrupt. 1: Triggered condition is that chip is loosing power and RTC module sends out brown out close flash request to SPI1. After SPI1 sends out suspend command to flash, this interrupt is triggered and MSPI returns to idle state. 0: Others. + ; + + // SPI1 interrupt status register + Registers.INT_ST.Define(this, 0x0) + .WithFlag(0, FieldMode.Read, name: "PER_END_INT_ST") // The status bit for SPI_MEM_PER_END_INT interrupt. + .WithFlag(1, FieldMode.Read, name: "PES_END_INT_ST") // The status bit for SPI_MEM_PES_END_INT interrupt. + .WithFlag(2, FieldMode.Read, name: "TOTAL_TRANS_END_INT_ST") // The status bit for SPI_MEM_TOTAL_TRANS_END_INT interrupt. + .WithFlag(3, FieldMode.Read, name: "BROWN_OUT_INT_ST") // The status bit for SPI_MEM_BROWN_OUT_INT interrupt. + ; + + // SPI0 version control register + Registers.DATE.Define(this, 0x2101040) + .WithValueField(0, 28, FieldMode.Read | FieldMode.Write, name: "DATE") // SPI register version. + ; + + } + + public override void Reset() + { + RegistersCollection.Reset(); + UpdateInterrupts(); + } + + public uint ReadDoubleWord(long offset) + { + return RegistersCollection.Read(offset); + } + + public void WriteDoubleWord(long offset, uint value) + { + RegistersCollection.Write(offset, value); + } + private void UpdateInterrupts() + { + var status = false; + this.Log(LogLevel.Noisy, "Setting IRQ to {0}", status); + IRQ.Set(status); + } + + private enum Registers + { + CMD = 0x0, + ADDR = 0x4, + CTRL = 0x8, + CTRL1 = 0xc, + CTRL2 = 0x10, + CLOCK = 0x14, + USER = 0x18, + USER1 = 0x1c, + USER2 = 0x20, + MOSI_DLEN = 0x24, + MISO_DLEN = 0x28, + RD_STATUS = 0x2c, + EXT_ADDR = 0x30, + MISC = 0x34, + TX_CRC = 0x38, + CACHE_FCTRL = 0x3c, + FSM = 0x54, + W0 = 0x58, + W1 = 0x5c, + W2 = 0x60, + W3 = 0x64, + W4 = 0x68, + W5 = 0x6c, + W6 = 0x70, + W7 = 0x74, + W8 = 0x78, + W9 = 0x7c, + W10 = 0x80, + W11 = 0x84, + W12 = 0x88, + W13 = 0x8c, + W14 = 0x90, + W15 = 0x94, + FLASH_WAITI_CTRL = 0x98, + FLASH_SUS_CMD = 0x9c, + FLASH_SUS_CTRL = 0xa0, + SUS_STATUS = 0xa4, + TIMING_CALI = 0xa8, + DDR = 0xe0, + CLOCK_GATE = 0xe8, + INT_ENA = 0xf0, + INT_CLR = 0xf4, + INT_RAW = 0xf8, + INT_ST = 0xfc, + DATE = 0x3fc, + } + } +} diff --git a/peripherals/ESP32_UART.cs b/peripherals/ESP32_UART.cs new file mode 100644 index 0000000..ef47cec --- /dev/null +++ b/peripherals/ESP32_UART.cs @@ -0,0 +1,214 @@ +// +// Copyright (c) 2010-2018 Antmicro +// +// This file is licensed under the MIT License. +// Full license text is available in 'licenses/MIT.txt'. +// +using System.Collections.Generic; +using Antmicro.Renode.Peripherals.Bus; +using Antmicro.Renode.Core.Structure.Registers; +using Antmicro.Renode.Core; +using Antmicro.Renode.Logging; + +namespace Antmicro.Renode.Peripherals.UART +{ + public class ESP32_UART : UARTBase, IDoubleWordPeripheral, IBytePeripheral, IKnownSize + { + public ESP32_UART(Machine machine) : base(machine) + { + IRQ = new GPIO(); + var registersMap = new Dictionary + { + {(long)Registers.FIFO, new DoubleWordRegister(this) + .WithValueField(0, 8, writeCallback: (_, value) => this.TransmitCharacter((byte)value), + valueProviderCallback: _ => { + if(!TryGetCharacter(out var character)) + { + this.Log(LogLevel.Warning, "Trying to read from an empty FIFO."); + } + return character; + }) + }, + {(long)Registers.INT_ENA, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Write, name: "UART_RXFIFO_FULL_INT_ENA") + }, + {(long)Registers.INT_CLR, new DoubleWordRegister(this) + .WithValueField(0, 32, FieldMode.Write) // Temporary hack + }, + {(long)Registers.RX_FILT, new DoubleWordRegister(this) + .WithValueField(0, 8, FieldMode.Read | FieldMode.Write, name: "GLITCH_FILT") // when input pulse width is lower than this value, the pulse is ignored. + .WithFlag(8, FieldMode.Read | FieldMode.Write, name: "GLITCH_FILT_EN") // Set this bit to enable Rx signal filter. + }, + {(long)Registers.STATUS, new DoubleWordRegister(this) + .WithValueField(0, 10, FieldMode.Read, name: "RXFIFO_CNT") + .WithFlag(13, FieldMode.Read, name: "UART_DSRN") + .WithFlag(14, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_CTSN") + .WithFlag(15, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_RXD") + .WithValueField(16, 10, FieldMode.Read, name: "TXFIFO_CNT") + .WithFlag(29, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_DTRN") + .WithFlag(30, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_RTSN") + .WithFlag(31, FieldMode.Read, valueProviderCallback: (_) => true, name: "UART_TXD") + }, + {(long)Registers.CONF0, new DoubleWordRegister(this) + .WithFlag(0, FieldMode.Write, name: "UART_PARITY") + .WithFlag(1, FieldMode.Write, name: "UART_PARITY_EN") + .WithValueField(2, 2, FieldMode.Read, name: "UART_BIT_NUM") + .WithValueField(4, 2, FieldMode.Read, name: "UART_STOPBIT_NUM") + .WithFlag(17, FieldMode.Write, name: "UART_RXFIFO_RST") + .WithFlag(18, FieldMode.Write, name: "UART_TXFIFO_RST") + .WithFlag(26, FieldMode.Write, name: "UART_ERR_WR_MASK") + .WithFlag(27, FieldMode.Write, name: "UART_AUTOBAUD_EN") + }, + {(long)Registers.CONF1, new DoubleWordRegister(this) + .WithValueField(0, 10, FieldMode.Read | FieldMode.Write, name: "RXFIFO_FULL_THRHD") // It will produce rxfifo_full_int interrupt when receiver receives more data than this register value. + .WithValueField(10, 10, FieldMode.Read | FieldMode.Write, name: "TXFIFO_EMPTY_THRHD") // It will produce txfifo_empty_int interrupt when the data amount in Tx-FIFO is less than this register value. + .WithFlag(20, FieldMode.Read | FieldMode.Write, name: "DIS_RX_DAT_OVF") // Disable UART Rx data overflow detect. + .WithFlag(21, FieldMode.Read | FieldMode.Write, name: "RX_TOUT_FLOW_DIS") // Set this bit to stop accumulating idle_cnt when hardware flow control works. + .WithFlag(22, FieldMode.Read | FieldMode.Write, name: "RX_FLOW_EN") // This is the flow enable bit for UART receiver. + .WithFlag(23, FieldMode.Read | FieldMode.Write, name: "RX_TOUT_EN") // This is the enble bit for uart receiver's timeout function. + }, + {(long)Registers.RXD_CNT, new DoubleWordRegister(this) + .WithValueField(0, 10, FieldMode.Read, name: "RXD_EDGE_CNT") // This register stores the count of rxd edge change. It is used in baud rate-detect process. + }, + {(long)Registers.CLKDIV, new DoubleWordRegister(this) + .WithValueField(0, 12, FieldMode.Read | FieldMode.Write, name: "CLKDIV") // Clock divider configuration + .WithValueField(20, 4, FieldMode.Read | FieldMode.Write, name: "FRAG") // The decimal part of the frequency divider factor. + }, + {(long)Registers.CLK_CONF, new DoubleWordRegister(this) + .WithValueField(0, 6, FieldMode.Read | FieldMode.Write, name: "SCLK_DIV_B") // The denominator of the frequency divider factor. + .WithValueField(6, 6, FieldMode.Read | FieldMode.Write, name: "SCLK_DIV_A") // The numerator of the frequency divider factor. + .WithValueField(12, 8, FieldMode.Read | FieldMode.Write, name: "SCLK_DIV_NUM") // The integral part of the frequency divider factor. + .WithValueField(20, 2, FieldMode.Read | FieldMode.Write, name: "SCLK_SEL") // UART clock source select. 1: 80Mhz, 2: 8Mhz, 3: XTAL. + .WithFlag(22, FieldMode.Read | FieldMode.Write, name: "SCLK_EN") // Set this bit to enable UART Tx/Rx clock. + .WithFlag(23, FieldMode.Read | FieldMode.Write, name: "RST_CORE") // Write 1 then write 0 to this bit, reset UART Tx/Rx. + .WithFlag(24, FieldMode.Read | FieldMode.Write, name: "TX_SCLK_EN") // Set this bit to enable UART Tx clock. + .WithFlag(25, FieldMode.Read | FieldMode.Write, name: "RX_SCLK_EN") // Set this bit to enable UART Rx clock. + .WithFlag(26, FieldMode.Read | FieldMode.Write, name: "TX_RST_CORE") // Write 1 then write 0 to this bit, reset UART Tx. + .WithFlag(27, FieldMode.Read | FieldMode.Write, name: "RX_RST_CORE") // Write 1 then write 0 to this bit, reset UART Rx. + }, + }; + + registers = new DoubleWordRegisterCollection(this, registersMap); + } + + public uint ReadDoubleWord(long offset) + { + return registers.Read(offset); + } + + public byte ReadByte(long offset) + { + if (offset % 4 != 0) + { + // in the current configuration, only the lowest byte + // contains a meaningful data + return 0; + } + return (byte)ReadDoubleWord(offset); + } + + public override void Reset() + { + base.Reset(); + registers.Reset(); + + UpdateInterrupts(); + } + + public void WriteDoubleWord(long offset, uint value) + { + registers.Write(offset, value); + } + + public void WriteByte(long offset, byte value) + { + if (offset % 4 != 0) + { + // in the current configuration, only the lowest byte + // contains a meaningful data + return; + } + + WriteDoubleWord(offset, value); + } + + public long Size => 0x100; + + public GPIO IRQ { get; private set; } + + public override Bits StopBits => Bits.One; + + public override Parity ParityBit => Parity.None; + + public override uint BaudRate => 115200; + + protected override void CharWritten() + { + UpdateInterrupts(); + } + + protected override void QueueEmptied() + { + UpdateInterrupts(); + } + + private void UpdateInterrupts() + { + IRQ.Set(false); + } + + private IFlagRegisterField rxEventEnabled; + private IFlagRegisterField rxEventPending; + private readonly DoubleWordRegisterCollection registers; + + private enum Registers : long + { + // FIFO Configuration + FIFO = 0x00, + MEM_CONF = 0x60, + + // UART interrupt register + INT_RAW = 0x04, + INT_ST = 0x08, + INT_ENA = 0x0c, + INT_CLR = 0x10, + + // Configuration register + CLKDIV = 0x14, + RX_FILT = 0x18, + CONF0 = 0x20, + CONF1 = 0x24, + FLOW_CONF = 0x34, + SLEEP_CONF = 0x38, + SWFC_CONF0 = 0x3c, + SWFC_CONF1 = 0x40, + TXBRK_CONF = 0x44, + IDLE_CONF = 0x48, + RS485_CONF = 0x4c, + CLK_CONF = 0x78, + + // Status register + STATUS = 0x1c, + MEM_TX_STATUS = 0x64, + MEM_RX_STATUS = 0x68, + FSM_STATUS = 0x6c, + + // Autobaud register + LOWPULSE = 0x28, + HIGHPULSE = 0x2c, + RXD_CNT = 0x30, + POSPULSE = 0x70, + NEGPULSE = 0x74, + + // Escape sequence selection configuration + AT_CMD_PRECNT = 0x50, + AT_CMD_POSTCNT = 0x54, + AT_CMD_GAPTOUT = 0x58, + AT_CMD_CHAR = 0x5c, + + // Version + DATE = 0x7c, + ID = 0x80, + } + } +} diff --git a/svd-to-renode.py b/svd-to-renode.py new file mode 100644 index 0000000..1de2926 --- /dev/null +++ b/svd-to-renode.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +import xml.etree.ElementTree as ET + + +class SVDExtractor: + def __init__(self, filename): + self.tree = ET.parse(filename) + self.root = self.tree.getroot() + self.peripherals = self.root.find("peripherals") + + def extract( + self, + peripheral_to_print, + namespace, + generated_peripheral_name, + imports=None, + extra_subclasses=None, + ): + for peripheral in self.peripherals.iter("peripheral"): + peripheral_name = peripheral.find("name").text + if peripheral_name != peripheral_to_print: + continue + + register_list = dict() + + peripheral_size = int(peripheral.find("addressBlock").find("size").text, 0) + registers = peripheral.find("registers") + + if imports is not None: + for i in imports: + print(f"using {i};") + print() + + print(f"namespace {namespace}") + print("{") + print(f" public class {generated_peripheral_name} : ", end="") + if extra_subclasses is not None: + for esc in extra_subclasses: + print(f"{esc}, ", end="") + print( + "IDoubleWordPeripheral, IProvidesRegisterCollection, IKnownSize" + ) + print(" {") + + print(" public GPIO IRQ { get; private set; }") + print( + " public DoubleWordRegisterCollection RegistersCollection { get; }" + ) + print(f" public long Size => 0x1000; // {hex(peripheral_size)}") + print(" private readonly Machine machine;") + print() + + print( + f" public {generated_peripheral_name}(Machine machine) : base(machine)" + ) + print(" {") + print(" this.machine = machine;") + print() + print(" IRQ = new GPIO();") + print() + print( + " RegistersCollection = new DoubleWordRegisterCollection(this);" + ) + print(" DefineRegisters();") + print(" Reset();") + print(" }") + print() + + print(" private void DefineRegisters()") + print(" {") + + for register in registers.iter("register"): + register_name = register.find("name").text + register_description = register.find("description").text + register_offset = int(register.find("addressOffset").text, 0) + register_default = 0 + register_reset_value_field = register.find("resetValue") + if register_reset_value_field is not None: + register_default = int(register_reset_value_field.text, 0) + register_list[register_offset] = register_name + + if "\n" in register_description: + raise Exception("Register description contains a newline") + print(f" // {register_description}") + print(f" Registers.{register_name}.Define(this, {hex(register_default)})") + for field in register.find("fields").iter("field"): + field_offset = int(field.find("bitOffset").text, 0) + field_width = int(field.find("bitWidth").text, 0) + field_name = field.find("name").text + field_description = field.find("description").text + field_access = field.find("access").text + + field_access_mask = "" + if field_access == "read-write": + field_access_mask = "FieldMode.Read | FieldMode.Write, " + elif field_access == "read-only": + field_access_mask = "FieldMode.Read, " + elif field_access == "write-only": + field_access_mask = "FieldMode.Write, " + else: + raise Exception( + f"Unrecognized field access type: {field_access}" + ) + + if "\n" in field_description: + raise Exception("Field description contains a newline") + + if field_width == 1: + print( + f' .WithFlag({field_offset}, {field_access_mask}name: "{field_name}") // {field_description}' + ) + else: + print( + f' .WithValueField({field_offset}, {field_width}, {field_access_mask}name: "{field_name}") // {field_description}' + ) + print(" ;") + print() + print(" }") + print() + + print(" public override void Reset()") + print(" {") + print(" RegistersCollection.Reset();") + print(" UpdateInterrupts();") + print(" }") + print() + print(" public uint ReadDoubleWord(long offset)") + print(" {") + print(" return RegistersCollection.Read(offset);") + print(" }") + print() + print(" public void WriteDoubleWord(long offset, uint value)") + print(" {") + print(" RegistersCollection.Write(offset, value);") + print(" }") + + print(" private void UpdateInterrupts()") + print(" {") + print(" var status = false;") + print(" this.Log(LogLevel.Noisy, \"Setting IRQ to {0}\", status);") + print(" IRQ.Set(status);") + print(" }") + print() + print(" private enum Registers") + print(" {") + for offset, name in register_list.items(): + print(f" {name} = {hex(offset)},") + print(" }") + print(" }") + print("}") + + +if __name__ == "__main__": + extractor = SVDExtractor("esp32s3.svd") + extractor.extract( + "SPI1", + "Antmicro.Renode.Peripherals.SPI", + "ESP32_SPIController", + imports=[ + "System.Linq", + "System.Collections.Generic", + "Antmicro.Renode.Core", + "Antmicro.Renode.Core.Structure", + "Antmicro.Renode.Core.Structure.Registers", + "Antmicro.Renode.Logging", + "Antmicro.Renode.Peripherals.Bus", + "Antmicro.Renode.Peripherals.Memory", + "Antmicro.Renode.Peripherals.MTD", + ], + extra_subclasses=["NullRegistrationPointPeripheralContainer"], + )