Home
General Guide
Renesas
Microchip
Texas Instruments
Analog Devices
ADSP21369 Register Header
ADSP21369 Design Notes
16-bit SDRAM
Plug-in Flash Driver
Boot Second Program
Mobile Devices
.NET Tips
Miscellaneous
Contact Us
Forum

 

ADSP-21369 Register Structural Header File

Applying the same idea about register structural header file described in Register File under General Guide, the ADSP-21369 register structural header file (ES_ADSP21369Reg.h) is given below.

 

/*********************************************************************************
*
* Embedded Studio (C) 2007
*
* File: ES_Def21369.h
* Desc: Analog Device ADSP-21369 register structural definition file
*
**********************************************************************************/

#ifndef __ES_ADSP21369REG_H_
#define __ES_ADSP21369REG_H_

/********************************************************************************/
/* ADSP-21369 Series Include File */
/********************************************************************************/


typedef union st_eemustat /* Enhanced Emulation Status Register */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :15; /* bit[31:17], reserved */
int STATIOY :1; /* bit[16], IOY Memory Breakpoint Status */
int EEMUINENS :1; /* bit[15], EEMUIN Interrupt Enable */
int OSPIDENS :1; /* bit[14], OSPID Register Enable */
int EEMUENS :1; /* bit[13], Enhanced Emulation Feature Enable */
int EEMUINFULL :1; /* bit[12], Enhanced Emulation EEMUIN Register Status */
int EEMUOUTFULL :1; /* bit[11], Enhanced Emulation EEMUOUT FIFO Status */
int EEMUOUTRDY :1; /* bit[10], Enhanced Emulation EEMUOUT Ready */
int EEMUOUTIRQEN :1; /* bit[9], Enhanced Emulation EEMUOUT Interrupt Enable */
int RSRVD1 :1; /* bit[8], reserved */
int STATIO :1; /* bit[7], I/O Address Breakpoint Hit */
int STATIA3 :1; /* bit[6], Instruction Address Breakpoint Hit */
int STATIA2 :1; /* bit[5], Instruction Address Breakpoint Hit */
int STATIA1 :1; /* bit[4], Instruction Address Breakpoint Hit */
int STATIA0 :1; /* bit[3], Instruction Address Breakpoint Hit */
int STATDA1 :1; /* bit[2], Data Memory Breakpoint Hit */
int STATDA0 :1; /* bit[1], Data Memory Breakpoint Hit */
int STATPA :1; /* bit[0], Program Memory Data Breakpoint Hit */
} BIT;
}ST_EEMUSTAT;

typedef union st_sysctl /* System Control Register (SYSCTL) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int BUSLK :1; /* bit[29], Bus Lock Request */
int FSYNC :1; /* bit[28], Force Synchronization of the Shared Memory Bus */
int PWM12_15 :1; /* bit[27], Pulse Width Modulation Select */
int PWM8_11 :1; /* bit[26], Pulse Width Modulation Select */
int PWM4_7 :1; /* bit[25], Pulse Width Modulation Select */
int PWM0_3 :1; /* bit[24], Pulse Width Modulation Select */
int EPDATA :3; /* bit[23:21], Data Pin Mode Select */
int MSEN :1; /* bit[20], Memory Select */
int TMREXPEN :1; /* bit[19], Flag Timer Expired Mode */
int IRQ2EN :1; /* bit[18], Flag2 Interrupt Mode */
int IRQ1EN :1; /* bit[17], Flag1 Interrupt Mode */
int IRQ0EN :1; /* bit[16], Flag0 Interrupt Mode */
int RSRVD1 :3; /* bit[15:13], reserved */
int IMDW3 :1; /* bit[12], Internal Memory Data Width 3 */
int IMDW2 :1; /* bit[11], Internal Memory Data Width 2 */
int IMDW1 :1; /* bit[10], Internal Memory Data Width 1 */
int IMDW0 :1; /* bit[9], Internal Memory Data Width 0 */
int RSRVD2 :1; /* bit[8], reserved */
int RBPR :1; /* bit[7], Rotating Priority Bus Arbitration */
int RSRVD3 :4; /* bit[6:3], reserved */
int IIVT :1; /* bit[2], Internal Interrupt Vector Table */
int RSRVD4 :1; /* bit[1], reserved */
int SRST :1; /* bit[0], Software Reset */
} BIT;
}ST_SYSCTL;

typedef union st_brkctl /* Hardware Breakpoint Control Register */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :4; /* bit[31:28], reserved */
int ENBIOX :1; /* bit[27], IOX Breakpoint Enable */
int ENBIOY :1; /* bit[26], IOY Breakpoint Enable */
int UMODE :1; /* bit[25], User Mode Breakpoint Functionality Enable */
int ANDBKP :1; /* bit[24], AND Composite Breakpoints */
int ENBEP :1; /* bit[23], Enable External Port Address Breakpoint */
int RSRVD1 :1; /* bit[22], reserved */
int ENBIA :1; /* bit[21], Enable Instruction Address Breakpoints */
int ENBDA :1; /* bit[20], Enable Data Memory Address Breakpoints */
int ENBPA :1; /* bit[19], Enable Program Memory Data Address Breakpoints */
int NEGEP1 :1; /* bit[18], Negate EP Address Breakpoint */
int NEGIO1 :1; /* bit[17], Negate I/O Address Breakpoint */
int NEGIA4 :1; /* bit[16], Negate Instruction Address Breakpoint #4 */
int NEGIA3 :1; /* bit[15], Negate Instruction Address Breakpoint #3 */
int NEGIA2 :1; /* bit[14], Negate Instruction Address Breakpoint #2 */
int NEGIA1 :1; /* bit[13], Negate Instruction Address Breakpoint #1 */
int NEGDA2 :1; /* bit[12], Negate Data Memory Address Breakpoint #2 */
int NEGDA1 :1; /* bit[11], Negate Data Memory Address Breakpoint #1 */
int NEGPA1 :1; /* bit[10], Negate Program Memory Data Address Breakpoint */
int EP1MODE :2; /* bit[9:8], EP1 Triggering Mode */
int IO1MODE :2; /* bit[7:6], IO1 Triggering Mode */
int DA2MODE :2; /* bit[5:4], DA2 Triggering Mode */
int DA1MODE :2; /* bit[3:2], DA1 Triggering Mode */
int PA1MODE :2; /* bit[1:0], PA1Triggering Mode */
} BIT;
}ST_BRKCTL;

// IOP registers for SDRAM controller

typedef union st_sdctl /* SDRAM Control Register (SDCTL) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int NO_BSTOP :1; /* bit[31], No Burst Mode */
int PGSZ128 :1; /* bit[30], Program the SDRAM Controller for Page Size of 128 Words */
int SDRAW :3; /* bit[29:27], Row Address Width */
int SDTRCD :3; /* bit[26:24], SDRAM tRCD Specification */
int SDBUF :1; /* bit[23], Pipeline Option with External Register Buffer */
int FORCE_LMR :1; /* bit[22], Force Load Mode Register Write */
int FORCE_PC :1; /* bit[21], Force Precharge */
int FORCE_AR :1; /* bit[20], Force Auto Refresh */
int SDORF :1; /* bit[19], Optional Refresh */
int SDTWR :2; /* bit[18:17], SDRAM tWR Specification */
int X16DE :1; /* bit[16], SDRAM External Data Path Width */
int SDSRF :1; /* bit[15], Self Refresh Enable */
int SDPSS :1; /* bit[14], SDRAM Power-Up Sequence Start */
int SDCAW :2; /* bit[13:12], SDRAM Bank Column Address Width */
int SDPM :1; /* bit[11], SDRAM Power-Up Mode */
int SDTRP :3; /* bit[10:8], tRP Specification */
int SDTRAS :4; /* bit[7:4], tRAS Specification */
int DSDCLK1 :1; /* bit[3], Disable SDRAM Clock 1 */
int DSDCTL :1; /* bit[2], Disable SDCLK and Control Signals */
int SDCL :2; /* bit[1:0], SDRAM CAS Latency */
} BIT;
}ST_SDCTL;

typedef union st_epctl /* External Port Control Register (EPCTL) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :13; /* bit[31:19], reserved */
int DATE :4; /* bit[18:15], Data Enable */
int FRZCR :2; /* bit[14:13], Arbitration Freezing Length for CORE Accesses */
int RSRVD1 :2; /* bit[12:11], reserved */
int FRZDMA :2; /* bit[10:9], Arbitration Freezing Length for DMA */
int RSRVD2 :1; /* bit[8], reserved */
int DMAPR :2; /* bit[7:6], DMA Channel Priority for CH0 and CH1 */
int EPBR :2; /* bit[5:4], External Port Bus Priority */
int B3SD :1; /* bit[3], Select Bank 3 SDRAM */
int B2SD :1; /* bit[2], Select Bank 2 SDRAM */
int B1SD :1; /* bit[1], Select Bank 1 SDRAM */
int B0SD :1; /* bit[0], Select Bank 0 SDRAM */
} BIT;
}ST_EPCTL;

// IOP registers for SDRAM controller

typedef union st_sdrrc /* SDRAM Refresh Rate Control Register (SDRRC) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :11; /* bit[31:21], reserved */
int SDMODIFY :4; /* bit[20:17], Used for Predictive Addressing (0-15) */
int SDROPT :1; /* bit[16], SDRAM Optimization */
int RSRVD1 :4; /* bit[15:12], reserved */
int RDIV :12; /* bit[11:0], Delay (SDCLK cycles) between consecutive refresh counter time-outs */
} BIT;
}ST_SDRRC;

typedef union st_sdstat /* SDRAM Control Status Register (SDSTAT) */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int SDRS :1; /* bit[3], SDRAMs In Reset State */
int SDPUA :1; /* bit[2], SDRAM Optimization */
int SDSRA :1; /* bit[1], SDRAM Self-Refresh Active */
int SDCI :1; /* bit[0], SDRAM Controller Idle */
} BIT;
}ST_SDSTAT;

typedef union st_systat /* System Status Register (SYSTAT) */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :21; /* bit[31:11], reserved */
int IDC :3; /* bit[10:8], ID Code */
int RSRVD1 :1; /* bit[7], reserved */
int CRBM :3; /* bit[6:4], Current Bus Master */
int RSRVD2 :3; /* bit[3:1], reserved */
int BSYN :1; /* bit[0], Bus Synchronized */
} BIT;
}ST_SYSTAT;

typedef union st_amictl /* AMI Control Registers (AMICTLx) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :10; /* bit[31:22], reserved */
int NO_OPT :1; /* bit[21], Disable Predictive Reads */
int RHC :3; /* bit[20:18], Read Hold Cycle at the End of Read Access */
int FLSH :1; /* bit[17], AMI Buffer Flush (Write-only) */
int IC :3; /* bit[16:14], Bus Idle Cycle */
int HC :3; /* bit[13:11], Bus Hold Cycle at the End of Write Access */
int WS :5; /* bit[10:6], Wait States */
int ACKEN :1; /* bit[5], Enable the ACK pin */
int MSWF :1; /* bit[4], Most Significant Word First */
int PKDIS :1; /* bit[3], Disable Packing/Unpacking */
int BW :2; /* bit[2:1], External Data Bus Width */
int AMIEN :1; /* bit[0], AMI Enable */
} BIT;
}ST_AMICTL;

typedef union st_amistat /* AMI Status Register (AMISTAT) */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int AMIRXS :1; /* bit[3], AMI External Receive Register (AMIRX) Status */
int AMITXS :1; /* bit[2], AMI External Transmit Register (AMITX) Status */
int AMIS :1; /* bit[1], External Interface Status */
int AMIMS :1; /* bit[0], AMI Master */
} BIT;
}ST_AMISTAT;

//DMA address registers

typedef union st_dmac /* External Port DMA Control Registers (DMACx) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :15; /* bit[31:17], reserved */
int DIRS :1; /* bit[16], DMA Transfer Direction Status (read-only) */
int EXTS :1; /* bit[15], DMA External Interface Status (read-only) */
int WBS :1; /* bit[14], Delay Line Write Pointer Write Back Status (read-only) */
int TLS :1; /* bit[13], Tap List Loading Status (read-only) */
int CHS :1; /* bit[12], DMA Chaining Status (read-only) */
int DMAS :1; /* bit[11], DMA Transfer Status (read-only) */
int TFS :2; /* bit[10:9], Tap List FIFO Status (read-only) */
int DFS :2; /* bit[8:7], DMA FIFO Status (read-only) */
int TFLSH :1; /* bit[6], Flush Tap List FIFO (write-only) */
int DFLSH :1; /* bit[5], Flush DMA FIFO (write-only) */
int CBEN :1; /* bit[4], Circular Buffering Enable */
int DLEN :1; /* bit[3], Enable Delay Line DMA */
int CHEN :1; /* bit[2], Enable Chaining */
int DMADR :1; /* bit[1], DMA Direction */
int DMAEN :1; /* bit[0], DMA Enable */
} BIT;
}ST_DMAC;

// Serial Port registers (SP01)

typedef union st_sperrstat /* SPORT Error Status Register (SPERRSTAT) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :8; /* bit[31:24], reserved */
int FSERR7 :1; /* bit[23], SP7 FSERR Int Status */
int FSERR6 :1; /* bit[22], SP6 FSERR Int Status */
int FSERR5 :1; /* bit[21], SP5 FSERR Int Status */
int FSERR4 :1; /* bit[20], SP4 FSERR Int Status */
int FSERR3 :1; /* bit[19], SP3 FSERR Int Status */
int FSERR2 :1; /* bit[18], SP2 FSERR Int Status */
int FSERR1 :1; /* bit[17], SP1 FSERR Int Status */
int FSERR0 :1; /* bit[16], SP0 FSERR Int Status */
int DERRB7 :1; /* bit[15], SP7 DERRB Int Status */
int DERRA7 :1; /* bit[14], SP7 DERRA Int Status */
int DERRB6 :1; /* bit[13], SP6 DERRB Int Status */
int DERRA6 :1; /* bit[12], SP6 DERRA Int Status */
int DERRB5 :1; /* bit[11], SP5 DERRB Int Status */
int DERRA5 :1; /* bit[10], SP5 DERRA Int Status */
int DERRB4 :1; /* bit[9], SP4 DERRB Int Status */
int DERRA4 :1; /* bit[8], SP4 DERRA Int Status */
int DERRB3 :1; /* bit[7], SP3 DERRB Int Status */
int DERRA3 :1; /* bit[6], SP3 DERRA Int Status */
int DERRB2 :1; /* bit[5], SP2 DERRB Int Status */
int DERRA2 :1; /* bit[4], SP2 DERRA Int Status */
int DERRB1 :1; /* bit[3], SP1 DERRB Int Status */
int DERRA1 :1; /* bit[2], SP1 DERRA Int Status */
int DERRB0 :1; /* bit[1], SP0 DERRB Int Status */
int DERRA0 :1; /* bit[0], SP0 DERRA Int Status */
} BIT;
}ST_SPERRSTAT;

typedef union st_spctl /* SPORT Serial Control Registers (SPCTLx) */
{
union
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int DXS_A :2; /* bit[31:30], Data Buffer Channel A Status (read-only) */
int DERR_A :1; /* bit[29], Channel A Error Status (sticky, read-only) */
int DXS_B :2; /* bit[28:27], Data Buffer Channel B Status */
int DERR_B :1; /* bit[26], Channel B Error Status (sticky) */
int SPTRAN :1; /* bit[25], SPORT Data Direction */
int SPEN_B :1; /* bit[24], SPORT Data Direction */
int BHD :1; /* bit[23], Buffer Hang Disable */
int FS_BOTH :1; /* bit[22], Frame Sync Both */
int SCHEN_B :1; /* bit[21], DMA Channel B */
int SDEN_B :1; /* bit[20], DMA Channel B Enable */
int SCHEN_A :1; /* bit[19], DMA Channel A */
int SDEN_A :1; /* bit[18], DMA Channel A Enable */
int LAFS :1; /* bit[17], Late Frame Sync */
int LFS :1; /* bit[16], Active Low Frame Sync */
int DIFS :1; /* bit[15], Data Independent TX FS (if SPTRAN=1) or RX FS (if SPTRAN=0) */
int IFS :1; /* bit[14], Internally-Generated FS */
int FSR :1; /* bit[13], Frame Sync Requirement */
int CKRE :1; /* bit[12], Clock Edge for Data Frame Sync */
int OP_MODE :1; /* bit[11], SPORT Operation Mode */
int ICLK :1; /* bit[10], Internally-Generated SPORTx_CLK */
int PACK :1; /* bit[9], 16/32 Packing */
int SLEN :5; /* bit[8:4], Serial Word Length=1 */
int LSBF :1; /* bit[3], Least Significant Bit Format */
int DTYPE :2; /* bit[2:1], Data Type */
int SPEN_A :1; /* bit[0], SPORT Enable A */
} BIT;
} STANDARD_MODE;

union
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int DXS_A :2; /* bit[31:30], Data Buffer Channel A Status (read-only) */
int DERR_A :1; /* bit[29], Channel A Error Status (sticky, read-only) */
int DXS_B :2; /* bit[28:27], Data Buffer Channel B Status */
int DERR_B :1; /* bit[26], Channel B Error Status (sticky) */
int SPTRAN :1; /* bit[25], SPORT Data Direction */
int SPEN_B :1; /* bit[24], SPORT Data Direction */
int BHD :1; /* bit[23], Buffer Hang Disable */
int RSRVD0 :1; /* bit[22], reserved */
int SCHEN_B :1; /* bit[21], DMA Channel B */
int SDEN_B :1; /* bit[20], DMA Channel B Enable */
int SCHEN_A :1; /* bit[19], DMA Channel A */
int SDEN_A :1; /* bit[18], DMA Channel A Enable */
int LAFS :1; /* bit[17], Late Frame Sync */
int FRFS :1; /* bit[16], Active Low Frame Sync */
int DIFS :1; /* bit[15], Data Independent TX FS (if SPTRAN=1) or RX FS (if SPTRAN=0) */
int RSRVD1 :3; /* bit[14:12], reserved */
int OP_MODE :1; /* bit[11], SPORT Operation Mode */
int MSTR :1; /* bit[10], I2S Serial and L/R Clock Master2 */
int PACK :1; /* bit[9], 16/32 Packing */
int SLEN :5; /* bit[8:4], Serial Word Length=1 */
int DTYPE :3; /* bit[3:1], reserved */
int SPEN_A :1; /* bit[0], SPORT Enable A */
} BIT;
} I2S_MODE;

union
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int DXS_A :2; /* bit[31:30], Data Buffer Channel A Status (read-only) */
int DERR_A :1; /* bit[29], Channel A Error Status (sticky, read-only) */
int DXS_B :2; /* bit[28:27], Data Buffer Channel B Status */
int DERR_B :1; /* bit[26], Channel B Error Status (sticky) */
int SPTRAN :1; /* bit[25], SPORT Data Direction */
int RSRVD0 :1; /* bit[24], reserved */
int BHD :1; /* bit[23], Buffer Hang Disable */
int RSRVD1 :1; /* bit[22], reserved */
int SCHEN_B :1; /* bit[21], DMA Channel B */
int SDEN_B :1; /* bit[20], DMA Channel B Enable */
int SCHEN_A :1; /* bit[19], DMA Channel A */
int SDEN_A :1; /* bit[18], DMA Channel A Enable */
int RSRVD2 :1; /* bit[17], reserved */
int LMFS :1; /* bit[16], Active Low Multichannel Frame */
int RSRVD3 :1; /* bit[15], reserved */
int IMFS :1; /* bit[14], Internally Generated Multichannel Frame Sync */
int RSRVD4 :1; /* bit[13], reserved */
int CKRE :1; /* bit[12], Active Clock Edge for Data and Frame Sync Sampling */
int OP_MODE :1; /* bit[11], SPORT Operation Mode */
int ICLK :1; /* bit[10], Internally Generated Clock */
int PACK :1; /* bit[9], 16/32 Packing */
int SLEN :5; /* bit[8:4], Serial Word Length=1 */
int LSBF :1; /* bit[3], Serial Word Bit Order */
int DTYPE :2; /* bit[2:1], Data Type */
int RSRVD5 :1; /* bit[0], reserved */
} BIT;
} I2S_MCH_MODE;
}ST_SPCTL;

typedef union st_div /* SPORT Divisor Registers (DIVx) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int FSDIV :16; /* bit[31:16], Frame Sync Divisor */
int CLKDIV :15; /* bit[15:1], Clock Divisor */
int RSRVD0 :1; /* bit[0], reserved */
} BIT;
}ST_DIV;

typedef union st_spmctl /* SPORT Multichannel Control Registers (SPMCTLx) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int DMACHSxy :4; /* bit[31:28], DMA Chaining Status */
int DMASxy :4; /* bit[27:24], DMA Status */
int MCEB :1; /* bit[23], Multichannel Enable, B Channels */
int CHNL :7; /* bit[22:16], Current Channel Selected (read-only, sticky) */
int RSRVD0 :3; /* bit[15:13], reserved */
int SPL :1; /* bit[12], SPORT Loopback Mode */
int NCH :7; /* bit[11:5], Number of Multichannel Slots (minus one) */
int MFD :4; /* bit[4:1], Multichannel Frame Delay */
int MCEA :1; /* bit[0], Multichannel Mode Enable */
} BIT;
}ST_SPMCTL;

typedef union st_sperrctl /* SPORT Error Control Register (SPERRCTLx) */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :26; /* bit[31:6], reserved */
int DERRA_STAT :1; /* bit[5], Channel A Interrupt Status (W1C) */
int DERRB_STAT :1; /* bit[4], Channel B Interrupt Status (W1C) */
int FSERRA_STAT :1; /* bit[3], Frame Sync Interrupt Status (W1C) */
int FSERRA_EN :1; /* bit[2], Enable Frame Sync Error */
int DERRB_EN :1; /* bit[1], Enable Channel B Error */
int DERRA_EN :1; /* bit[0], Enable Channel A Error */
} BIT;
}ST_SPERRCTL;

// SPI Registers
typedef union st_spictl /* SPI Control Registers (SPICTL, SPICTLB) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :11; /* bit[31:21], reserved */
int ILPBK :1; /* bit[20], Internal Loop Back */
int RXFLSH :1; /* bit[19], Clear RXSPI */
int TXFLSH :1; /* bit[18], Flush Transmit Buffer */
int SMLS :1; /* bit[17], Seamless Transfer */
int SGN :1; /* bit[16], Sign Extend */
int PACKEN :1; /* bit[15], PACKEN */
int SPIEN :1; /* bit[14], SPI Port Enable */
int OPD :1; /* bit[13], Open Drain Output Enable */
int SPIMS :1; /* bit[12], SPI Master Select */
int CLKPL :1; /* bit[11], Clock Polarity */
int CPHASE :1; /* bit[10], Clock Phase */
int MSBF :1; /* bit[9], Most Significant Byte First */
int WL :2; /* bit[8:7], Word Length */
int RSRVD1 :1; /* bit[6], reserved */
int DMISO :1; /* bit[5], Disable MISO Pin */
int ISSEN :1; /* bit[4], Input Slave-Select Enable */
int GM :1; /* bit[3], When RXSPI is full, get data or discard incoming data */
int SENDZ :1; /* bit[2], Send zero or the last word when TXSPI is empty */
int TIMOD :2; /* bit[1:0], Transfer Initiation Mode */
} BIT;
}ST_SPICTL;

typedef union st_spibaud /* SPIBAUD, SPIBAUDB Register */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD1 :16; /* bit[31:16], reserved */
int BAUD_DIVISOR :15; /* bit[15:1], baud rate divisor */
int RSRVD0 :1; /* bit[0], reserved */
} BIT;
}ST_SPIBAUD;

typedef union st_spiflg /* SPI Port Flags Registers (SPIFLG, SPIFLGB) */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :20; /* bit[31:12], reserved */
int SPIFLG3 :1; /* bit[11], SPI Device Select Control */
int SPIFLG2 :1; /* bit[10], SPI Device Select Control */
int SPIFLG1 :1; /* bit[9], SPI Device Select Control */
int SPIFLG0 :1; /* bit[8], SPI Device Select Control */
int ISSS :1; /* bit[7], Input Service Select */
int RSRVD1 :3; /* bit[6:4], reserved */
int DS3EN :1; /* bit[3], SPI Device Select Enable */
int DS2EN :1; /* bit[2], SPI Device Select Enable */
int DS1EN :1; /* bit[1], SPI Device Select Enable */
int DS0EN :1; /* bit[0], SPI Device Select Enable */
} BIT;
}ST_SPIFLG;

typedef union st_spistat /* SPI Port Status (SPISTAT, SPISTATB) Registers */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int SPIFE :1; /* bit[7], External Transaction Complete */
int TXCOL :1; /* bit[6], Transmit Collision Error */
int RXS :1; /* bit[5], Receive Data Buffer Status */
int ROVF :1; /* bit[4], Reception Error */
int TXS :1; /* bit[3], Transmit Data Buffer Status */
int TUNF :1; /* bit[2], Transmission Error */
int MME :1; /* bit[1], Multimaster Error or Mode-Fault Error */
int SPIF :1; /* bit[0], SPI Transmit or Receive Transfer Complete */
} BIT;
}ST_SPISTAT;

typedef union st_spidmac /* SPI DMA Configuration Registers (SPIDMAC, SPIDMACB) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :15; /* bit[31:17], reserved */
int SPICHS :1; /* bit[16], DMA Chain Loading Status */
int SPIDMAS :1; /* bit[15], DMA Transfer Status */
int SPIERRS :1; /* bit[14], DMA Error Status */
int SPISx :2; /* bit[13:12], DMA FIFO Status */
int SPIMME :1; /* bit[11], Multimaster Error */
int SPIUNF :1; /* bit[10], Transmit Underflow Error (SPIRCV = 0) */
int SPIOVF :1; /* bit[9], Receive OverFlow Error (SPIRCV = 1) */
int INTERR :1; /* bit[8], Enable Interrupt on Error */
int FIFOFLSH :1; /* bit[7], DMA FIFO Clear */
int RSRVD1 :2; /* bit[6:5], reserved */
int SPICHEN :1; /* bit[4], SPI DMA Chaining Enable */
int RSRVD2 :1; /* bit[3], reserved */
int INTEN :1; /* bit[2], Enable DMA Interrupt on Transfer */
int SPIRCV :1; /* bit[1], DMA Write/Read */
int SPIDEN :1; /* bit[0], DMA Enable */
} BIT;
}ST_SPIDMAC;

// Timer Registers
typedef union st_tmstat /* Timer Global Status and Control (TMSTAT) Register */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :18; /* bit[31:14], reserved */
int TIM2DIS :1; /* bit[13], Timer 2 Disable */
int TIM2EN :1; /* bit[12], Timer 2 Enable */
int TIM1DIS :1; /* bit[11], Timer 1 Disable */
int TIM1EN :1; /* bit[10], Timer 1 Enable */
int TIM0DIS :1; /* bit[9], Timer 0 Disable */
int TIM0EN :1; /* bit[8], Timer 0 Enable */
int RSRVD1 :1; /* bit[7], reserved */
int TIM2OVF :1; /* bit[6], Timer 2 Overflow/Error */
int TIM1OVF :1; /* bit[5], Timer 1 Overflow/Error */
int TIM0OVF :1; /* bit[4], Timer 0 Overflow/Error */
int RSRVD2 :1; /* bit[3], reserved */
int TIM2IRQ :1; /* bit[2], Timer 2 Interrupt Latch */
int TIM1IRQ :1; /* bit[1], Timer 1 Interrupt Latch */
int TIM0IRQ :1; /* bit[0], Timer 0 Interrupt Latch */
} BIT;
}ST_TMSTAT;

typedef union st_tmctl /* Timer Configuration Registers (TMxCTL) */
{
int ALL; /* all 32 bits */
struct
{
int RSRVD0 :26; /* bit[31:6], reserved */
int AUX :1; /* bit[5], Timer Input Select */
int IRQEN :1; /* bit[4], Interrupt Enable */
int PRDCNT :1; /* bit[3], Period Count */
int PULSE :1; /* bit[2], Pulse Edge Select */
int TIMODE :2; /* bit[1:0], Timer Mode */
} BIT;
}ST_TMCTL;

// POWER MGT Registers
typedef union st_pmctl /* Power Management Control Register (PMCTL) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int TMEROFF :1; /* bit[31], Timer Enable/Disable */
int SPIOFF :1; /* bit[30], SPI Enable/Disable */
int SP45OFF :1; /* bit[29], SPORT4, 5 Enable/Disable */
int SP23OFF :1; /* bit[28], SPORT2, 3 Enable/Disable */
int SP01OFF :1; /* bit[27], SPORT0, 1 Enable/Disable */
int PPPDN :1; /* bit[26], External Port Enable/Disable */
int SRCOFF :1; /* bit[25], SRC Off */
int DTCPOFF :1; /* bit[24], DTCP Clock Enable */
int PWMOFF :1; /* bit[23], PWM Clock Enable */
int SDRAMOFF :1; /* bit[22], SDRAM Clock Enable */
int TWIOFF :1; /* bit[21], TWI Clock Enable */
int SDCKR :3; /* bit[20:18], SDCLK Ratio */
int CRAT1 :1; /* bit[17], PLL Clock Ratio, CLKIN to CK (read only) */
int CRAT0 :1; /* bit[16], PLL Clock Ratio, CLKIN to CK (read only) */
int PLLBP :1; /* bit[15], PLL Bypass Mode Indication */
int UART1OFF :1; /* bit[14], UART1 Clock Enable */
int UART0OFF :1; /* bit[13], UART0 Clock Enable */
int CLKOUTEN :1; /* bit[12], Clockout Enable */
int SP67OFF :1; /* bit[11], Serial Port 6, 7 Clock Enable */
int RSRVD0 :1; /* bit[10], reserved */
int DIVEN :1; /* bit[9], Enable PLL Divider Value Loading (read/write) */
int INDIV :1; /* bit[8], Input Divisor (read/write) */
int PLLD :2; /* bit[7:6], PLL Divider (read/write) */
int PLLM :6; /* bit[5:0], PLL Multiplier (read/write) */
} BIT;
}ST_PMCTL;

// SRU Registers
typedef union st_sru_clk0 /* SRU Clock Control Register 0 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SPORT5_CLK_I :5; /* bit[29:25], Serial Port 5 Clock Input */
int SPORT4_CLK_I :5; /* bit[24:20], Serial Port 4 Clock Input */
int SPORT3_CLK_I :5; /* bit[19:15], Serial Port 3 Clock Input */
int SPORT2_CLK_I :5; /* bit[14:10], Serial Port 2 Clock Input */
int SPORT1_CLK_I :5; /* bit[9:5], Serial Port 1 Clock Input */
int SPORT0_CLK_I :5; /* bit[4:0], Serial Port 0 Clock Input */
} BIT;
}ST_SRU_CLK0;

typedef union st_sru_clk1 /* SRU Clock Control Register 1 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SRC2_CLK_OP_I :5; /* bit[29:25], Sample Rate Converter 2 Clock Output Input */
int SRC2_CLK_IP_I :5; /* bit[24:20], Sample Rate Converter 2 Clock Input Input */
int SRC1_CLK_OP_I :5; /* bit[19:15], Sample Rate Converter 1 Clock Output Input */
int SRC1_CLK_IP_I :5; /* bit[14:10], Sample Rate Converter 1 Clock Input Input */
int SRC0_CLK_OP_I :5; /* bit[9:5], Sample Rate Converter 0 Clock Output Input */
int SRC0_CLK_IP_I :5; /* bit[4:0], Sample Rate Converter 0 Clock Input Input */
} BIT;
}ST_SRU_CLK1;

typedef union st_sru_clk2 /* SRU Clock Control Register 2 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int IDP2_CLK_I :5; /* bit[29:25], Input Data Port 2 Clock Input */
int IDP1_CLK_I :5; /* bit[24:20], Input Data Port 1 Clock Input */
int IDP0_CLK_I :5; /* bit[19:15], Input Data Port 0 Clock Input */
int DIT_CLK_I :5; /* bit[14:10], SPDIF Transmitter Clock Input */
int SRC3_CLK_OP_I :5; /* bit[9:5], Sample Rate Converter 3 Clock Output Input */
int SRC3_CLK_IP_I :5; /* bit[4:0], Sample Rate Converter 3 Clock Input Input */
} BIT;
}ST_SRU_CLK2;

typedef union st_sru_clk3 /* SRU Clock Control Register 3 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DIT_HFCLK_I :5; /* bit[29:25], SPDIF Oversampling Clock Input */
int IDP7_CLK_I :5; /* bit[24:20], Input Data Port Channel 7 Clock Input */
int IDP6_CLK_I :5; /* bit[19:15], Input Data Port Channel 6 Clock Input */
int IDP5_CLK_I :5; /* bit[14:10], Input Data Port Channel 5 Clock Input */
int IDP4_CLK_I :5; /* bit[9:5], Input Data Port Channel 4 Clock Input */
int IDP3_CLK_I :5; /* bit[4:0], Input Data Port Channel 3 Clock Input */
} BIT;
}ST_SRU_CLK3;

typedef union st_sru_clk4 /* SRU Clock Control Register 4 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int PCG_SYNC_CLKB_I :5; /* bit[29:25], Precision Clock Generator Clock B Sync Input */
int PCG_SYNC_CLKA_I :5; /* bit[24:20], Precision Clock Generator Clock A Sync Input */
int RSRVD1 :5; /* bit[19:15], reserved */
int SPDIF_EXTPLLCLK_I:5; /* bit[14:10], External 512 x FS PLL Clock Input */
int PCG_EXTB_I :5; /* bit[9:5], Precision Clock Generator External Clock B Input */
int PCG_EXTA_I :5; /* bit[4:0], Precision Clock Generator External Clock A Input */
} BIT;
}ST_SRU_CLK4;

typedef union st_sru_clk5 /* SRU Clock Control Register 5 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int PCG_EXTD_I :5; /* bit[29:25], Precision Clock Generator External Clock D Input */
int PCG_EXTC_I :5; /* bit[24:20], Precision Clock Generator External Clock C Input */
int PCG_SYNC_CLKD_I :5; /* bit[19:15], Precision Clock Generator Clock D Sync Input */
int PCG_SYNC_CLKC_I :5; /* bit[14:10], Precision Clock Generator Clock C Sync Input */
int SPORT7_CLK_I :5; /* bit[9:5], Serial Port 7 Clock Input */
int SPORT6_CLK_I :5; /* bit[4:0], Serial Port 6 Clock Input */
} BIT;
}ST_SRU_CLK5;

typedef union st_sru_dat0 /* SRU Data Control Register 0 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SPORT2_DA_I :6; /* bit[29:24], Serial Port 2 Data Channel A Input */
int SPORT1_DB_I :6; /* bit[23:18], Serial Port 1 Data Channel B Input */
int SPORT1_DA_I :6; /* bit[17:12], Serial Port 1 Data Channel A Input */
int SPORT0_DB_I :6; /* bit[11:6], Serial Port 0 Data Channel B Input */
int SPORT0_DA_I :6; /* bit[5:0], Serial Port 0 Data Channel A Input */
} BIT;
}ST_SRU_DAT0;

typedef union st_sru_dat1 /* SRU Data Control Register 1 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SPORT4_DB_I :6; /* bit[29:24], Serial Port 4 Data Channel B Input */
int SPORT4_DA_I :6; /* bit[23:18], Serial Port 4 Data Channel A Input */
int SPORT3_DB_I :6; /* bit[17:12], Serial Port 3 Data Channel B Input */
int SPORT3_DA_I :6; /* bit[11:6], Serial Port 3 Data Channel A Input */
int SPORT2_DB_I :6; /* bit[5:0], Serial Port 2 Data Channel B Input */
} BIT;
}ST_SRU_DAT1;

typedef union st_sru_dat2 /* SRU Data Control Register 2 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SRC2_DAT_IP_I :6; /* bit[29:24], Sample Rate Converter 2 Data Input Input */
int SRC1_DAT_IP_I :6; /* bit[23:18], Sample Rate Converter 1 Data Input Input */
int SRC0_DAT_IP_I :6; /* bit[17:12], Sample Rate Converter 0 Data Input Input */
int SPORT5_DB_I :6; /* bit[11:6], Serial Port 5 Data Channel B Input */
int SPORT5_DA_I :6; /* bit[5:0], Serial Port 5 Data Channel A Input */
} BIT;
}ST_SRU_DAT2;

typedef union st_sru_dat3 /* SRU Data Control Register 3 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SRC3_TDM_OP_I :6; /* bit[29:24], Sample Rate Converter 3 TDM Output Input */
int SRC2_TDM_OP_I :6; /* bit[23:18], Sample Rate Converter 2 TDM Output Input */
int SRC1_TDM_OP_I :6; /* bit[17:12], Sample Rate Converter 1 TDM Output Input */
int SRC0_TDM_OP_I :6; /* bit[11:6], Sample Rate Converter 0 TDM Output Input */
int SRC3_DAT_IP_I :6; /* bit[5:0], Sample Rate Converter 3 Data Input Inpu */
} BIT;
}ST_SRU_DAT3;

typedef union st_sru_dat4 /* SRU Data Control Register 4 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int IDP3_DAT_I :6; /* bit[29:24], Input Data Port 3 Data Input */
int IDP2_DAT_I :6; /* bit[23:18], Input Data Port 2 Data Input */
int IDP1_DAT_I :6; /* bit[17:12], Input Data Port 1 Data Input */
int IDP0_DAT_I :6; /* bit[11:6], Input Data Port 0 Data Input */
int DIT_DAT_I :6; /* bit[5:0], SPDIF Transmit Data Input */
} BIT;
}ST_SRU_DAT4;

typedef union st_sru_dat5 /* SRU Data Control Register 5 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DIR_DAT_I :6; /* bit[29:24], SPDIF Receive Data Input */
int IDP7_DAT_I :6; /* bit[23:18], Input Data Port 7 Data Input */
int IDP6_DAT_I :6; /* bit[17:12], Input Data Port 6 Data Input */
int IDP5_DAT_I :6; /* bit[11:6], Input Data Port 5 Data Input */
int IDP4_DAT_I :6; /* bit[5:0], Input Data Port 4 Data Channel A Input */
} BIT;
}ST_SRU_DAT5;

typedef union st_sru_dat6 /* SRU Data Control Register 6 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :8; /* bit[31:24], reserved */
int SPORT7_DB_I :6; /* bit[23:18], Serial Port 7 Data Channel B Input */
int SPORT7_DA_I :6; /* bit[17:12], Serial Port 7 Data Channel A Input */
int SPORT6_DB_I :6; /* bit[11:6], Serial Port 6 Data Channel B Input */
int SPORT6_DA_I :6; /* bit[5:0], Serial Port 6 Data Channel A Input Input */
} BIT;
}ST_SRU_DAT6;

typedef union st_sru_fs0 /* SRU FS Control Register 0 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SPORT5_FS_I :5; /* bit[29:25], Serial Port 5 Frame Sync Input */
int SPORT4_FS_I :5; /* bit[24:20], Serial Port 4 Frame Sync Input */
int SPORT3_FS_I :5; /* bit[19:15], Serial Port 3 Frame Sync Input */
int SPORT2_FS_I :5; /* bit[14:10], Serial Port 2 Frame Sync Input */
int SPORT1_FS_I :5; /* bit[9:5], Serial Port 1 Frame Sync Input */
int SPORT0_FS_I :5; /* bit[4:0], Serial Port 0 Frame Sync Input */
} BIT;
}ST_SRU_FS0;

typedef union st_sru_fs1 /* SRU FS Control Register 1 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SRC2_FS_OP_I :5; /* bit[29:25], Sample Rate Converter 2 Frame Sync Output Input */
int SRC2_FS_IP_I :5; /* bit[24:20], Sample Rate Converter 2 Frame Sync Input Input */
int SRC1_FS_OP_I :5; /* bit[19:15], Sample Rate Converter 1 Frame Sync Output Input */
int SRC1_FS_IP_I :5; /* bit[14:10], Sample Rate Converter 1 Frame Sync Input Input */
int SRC0_FS_OP_I :5; /* bit[9:5], Sample Rate Converter 0 Frame Sync Output Input */
int SRC0_FS_IP_I :5; /* bit[4:0], Sample Rate Converter 0 Frame Sync Input Input */
} BIT;
}ST_SRU_FS1;

typedef union st_sru_fs2 /* SRU FS Control Register 2 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int IDP2_FS_I :5; /* bit[29:25], Input Data Port Channel 2 Frame Sync Input */
int IDP1_FS_I :5; /* bit[24:20], Input Data Port Channel 1 Frame Sync Input */
int IDP0_FS_I :5; /* bit[19:15], Input Data Port Channel 0 Frame Sync Input */
int SPDIF_TX_FS_I :5; /* bit[14:10], SPDIF 3 Oversampling Clock Input */
int SRC3_FS_OP_I :5; /* bit[9:5], Sample Rate Converter 3 Frame Sync Output Input */
int SRC3_FS_IP_I :5; /* bit[4:0], Sample Rate Converter 3 Frame Sync Input Input */
} BIT;
}ST_SRU_FS2;

typedef union st_sru_fs3 /* SRU FS Control Register 3 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SPDIF_RX_I :5; /* bit[29:25], SPDIF Receiver Biphase Encoded Data Input */
int IDP7_FS_I :5; /* bit[24:20], Input Data Port Channel 7 Frame Sync Input */
int IDP6_FS_I :5; /* bit[19:15], Input Data Port Channel 6 Frame Sync Input */
int IDP5_FS_I :5; /* bit[14:10], Input Data Port Channel 5 Frame Sync Input */
int IDP4_FS_I :5; /* bit[9:5], Input Data Port Channel 4 Frame Sync Input */
int IDP3_FS_I :5; /* bit[4:0], Input Data Port Channel 3 Frame Sync Input */
} BIT;
}ST_SRU_FS3;

typedef union st_sru_fs4 /* SRU FS Control Register 4 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :22; /* bit[31:10], reserved */
int SPORT7_FS_I :5; /* bit[9:5], Serial Port 7 Frame Sync Input */
int SPORT6_FS_I :5; /* bit[4:0], Serial Port 6 Frame Sync Input */
} BIT;
}ST_SRU_FS4;

typedef union st_sru_pin0 /* SRU Pin Control Register 0 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :4; /* bit[31:28], reserved */
int DAI_PB04_I :7; /* bit[27:21], DAI Pin Buffer 4 Input */
int DAI_PB03_I :7; /* bit[20:14], DAI Pin Buffer 3 Input */
int DAI_PB02_I :7; /* bit[13:7], DAI Pin Buffer 2 Input */
int DAI_PB01_I :7; /* bit[6:0], DAI Pin Buffer 1 Input */
} BIT;
}ST_SRU_PIN0;

typedef union st_sru_pin1 /* SRU Pin Control Register 1 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :4; /* bit[31:28], reserved */
int DAI_PB08_I :7; /* bit[27:21], DAI Pin Buffer 8 Input */
int DAI_PB07_I :7; /* bit[20:14], DAI Pin Buffer 7 Input */
int DAI_PB06_I :7; /* bit[13:7], DAI Pin Buffer 6 Input */
int DAI_PB05_I :7; /* bit[6:0], DAI Pin Buffer 5 Input */
} BIT;
}ST_SRU_PIN1;

typedef union st_sru_pin2 /* SRU Pin Control Register 2 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :4; /* bit[31:28], reserved */
int DAI_PB12_I :7; /* bit[27:21], DAI Pin Buffer 12 Input */
int DAI_PB11_I :7; /* bit[20:14], DAI Pin Buffer 11 Input */
int DAI_PB10_I :7; /* bit[13:7], DAI Pin Buffer 10 Input */
int DAI_PB09_I :7; /* bit[6:0], DAI Pin Buffer 9 Input */
} BIT;
}ST_SRU_PIN2;

typedef union st_sru_pin3 /* SRU Pin Control Register 3 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :4; /* bit[31:28], reserved */
int DAI_PB16_I :7; /* bit[27:21], DAI Pin Buffer 16 Input */
int DAI_PB15_I :7; /* bit[20:14], DAI Pin Buffer 15 Input */
int DAI_PB14_I :7; /* bit[13:7], DAI Pin Buffer 14 Input */
int DAI_PB13_I :7; /* bit[6:0], DAI Pin Buffer 13 Input */
} BIT;
}ST_SRU_PIN3;

typedef union st_sru_pin4 /* SRU Pin Control Register 4 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :4; /* bit[31:28], reserved */
int DAI_PB20_I :7; /* bit[27:21], DAI Pin Buffer 20 Input */
int DAI_PB19_I :7; /* bit[20:14], DAI Pin Buffer 19 Input */
int DAI_PB18_I :7; /* bit[13:7], DAI Pin Buffer 18 Input */
int DAI_PB17_I :7; /* bit[6:0], DAI Pin Buffer 17 Input */
} BIT;
}ST_SRU_PIN4;

typedef union st_sru_ext_misca /* SRU External Misc. A Control Register */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int MISCA5_INVERT :1; /* bit[31], Invert Miscellaneous Channel A 5 */
int MISCA4_INVERT :1; /* bit[30], Invert Miscellaneous Channel A 4 */
int MISCA5_I :5; /* bit[29:25], External Miscellaneous Channel A 5 */
int MISCA4_I :5; /* bit[24:20], External Miscellaneous Channel A 4 */
int MISCA3_I :5; /* bit[19:15], External Miscellaneous Channel A 3, DAI Interrupt 31 */
int MISCA2_I :5; /* bit[14:10], External Miscellaneous Channel A 2, DAI Interrupt 30 */
int MISCA1_I :5; /* bit[9:5], External Miscellaneous Channel A 1, DAI Interrupt 29 */
int MISCA0_I :5; /* bit[4:0], External Miscellaneous Channel A 0, DAI Interrupt 28 */
} BIT;
}ST_SRU_MISCA;

typedef union st_sru_ext_miscb /* SRU External Misc. B Control Register */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DAI_INT_27 :5; /* bit[29:25], DAI Interrupt 27 */
int DAI_INT_26 :5; /* bit[24:20], DAI Interrupt 26 */
int DAI_INT_25 :5; /* bit[19:15], DAI Interrupt 25 */
int DAI_INT_24 :5; /* bit[14:10], DAI Interrupt 24 */
int DAI_INT_23 :5; /* bit[9:5], DAI Interrupt 23 */
int DAI_INT_22 :5; /* bit[4:0], DAI Interrupt 22 */
} BIT;
}ST_SRU_MISCB;

typedef union st_sru_pben0 /* SRU Pin Enable Register 0 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int PBEN05I :6; /* bit[29:24], DAI Port 5 Pin Buffer Enable Input */
int PBEN04I :6; /* bit[23:18], DAI Port 4 Pin Buffer Enable Input */
int PBEN03I :6; /* bit[17:12], DAI Port 3 Pin Buffer Enable Input */
int PBEN02I :6; /* bit[11:6], DAI Port 2 Pin Buffer Enable Input */
int PBEN01I :6; /* bit[5:0], DAI Port 1 Pin Buffer Enable Input */
} BIT;
}ST_SRU_PBEN0;

typedef union st_sru_pben1 /* SRU Pin Enable Register 1 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int PBEN10I :6; /* bit[29:24], DAI Port 10 Pin Buffer Enable Input */
int PBEN09I :6; /* bit[23:18], DAI Port 9 Pin Buffer Enable Input */
int PBEN08I :6; /* bit[17:12], DAI Port 8 Pin Buffer Enable Input */
int PBEN07I :6; /* bit[11:6], DAI Port 7 Pin Buffer Enable Input */
int PBEN06I :6; /* bit[5:0], DAI Port 6 Pin Buffer Enable Input */
} BIT;
}ST_SRU_PBEN1;

typedef union st_sru_pben2 /* SRU Pin Enable Register 2 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int PBEN15I :6; /* bit[29:24], DAI Port 15 Pin Buffer Enable Input */
int PBEN14I :6; /* bit[23:18], DAI Port 14 Pin Buffer Enable Input */
int PBEN13I :6; /* bit[17:12], DAI Port 13 Pin Buffer Enable Input */
int PBEN12I :6; /* bit[11:6], DAI Port 12 Pin Buffer Enable Input */
int PBEN11I :6; /* bit[5:0], DAI Port 11 Pin Buffer Enable Input */
} BIT;
}ST_SRU_PBEN2;

typedef union st_sru_pben3 /* SRU Pin Enable Register 3 */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int PBEN20I :6; /* bit[29:24], DAI Port 20 Pin Buffer Enable Input */
int PBEN19I :6; /* bit[23:18], DAI Port 19 Pin Buffer Enable Input */
int PBEN18I :6; /* bit[17:12], DAI Port 18 Pin Buffer Enable Input */
int PBEN17I :6; /* bit[11:6], DAI Port 17 Pin Buffer Enable Input */
int PBEN16I :6; /* bit[5:0], DAI Port 16 Pin Buffer Enable Input */
} BIT;
}ST_SRU_PBEN3;

typedef union st_dai_pin_pullup /* DAI Resistor Pull-up Enable Register (DAI_PIN_PULLUP) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :12; /* bit[31:20], reserved */
int DAI_P20_PULLUP :1; /* bit[19], Setting to 1 enables a pull-up resistor */
int DAI_P19_PULLUP :1; /* bit[18], Setting to 1 enables a pull-up resistor */
int DAI_P18_PULLUP :1; /* bit[17], Setting to 1 enables a pull-up resistor */
int DAI_P17_PULLUP :1; /* bit[16], Setting to 1 enables a pull-up resistor */
int DAI_P16_PULLUP :1; /* bit[15], Setting to 1 enables a pull-up resistor */
int DAI_P15_PULLUP :1; /* bit[14], Setting to 1 enables a pull-up resistor */
int DAI_P14_PULLUP :1; /* bit[13], Setting to 1 enables a pull-up resistor */
int DAI_P13_PULLUP :1; /* bit[12], Setting to 1 enables a pull-up resistor */
int DAI_P12_PULLUP :1; /* bit[11], Setting to 1 enables a pull-up resistor */
int DAI_P11_PULLUP :1; /* bit[10], Setting to 1 enables a pull-up resistor */
int DAI_P10_PULLUP :1; /* bit[9], Setting to 1 enables a pull-up resistor */
int DAI_P09_PULLUP :1; /* bit[8], Setting to 1 enables a pull-up resistor */
int DAI_P08_PULLUP :1; /* bit[7], Setting to 1 enables a pull-up resistor */
int DAI_P07_PULLUP :1; /* bit[6], Setting to 1 enables a pull-up resistor */
int DAI_P06_PULLUP :1; /* bit[5], Setting to 1 enables a pull-up resistor */
int DAI_P05_PULLUP :1; /* bit[4], Setting to 1 enables a pull-up resistor */
int DAI_P04_PULLUP :1; /* bit[3], Setting to 1 enables a pull-up resistor */
int DAI_P03_PULLUP :1; /* bit[2], Setting to 1 enables a pull-up resistor */
int DAI_P02_PULLUP :1; /* bit[1], Setting to 1 enables a pull-up resistor */
int DAI_P01_PULLUP :1; /* bit[0], Setting to 1 enables a pull-up resistor */
} BIT;
}ST_SRU_PULLUP;

typedef union st_dai_irptl /* DAI Interrupt Controller Registers */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int SRU_EXTMISCA3_INT:1; /* bit[31], */
int SRU_EXTMISCA2_INT:1; /* bit[30], */
int SRU_EXTMISCA1_INT:1; /* bit[29], */
int SRU_EXTMISCA0_INT:1; /* bit[28], */
int SRU_EXTMISCB5_INT:1; /* bit[27], */
int SRU_EXTMISCB4_INT:1; /* bit[26], */
int SRU_EXTMISCB3_INT:1; /* bit[25], */
int SRU_EXTMISCB2_INT:1; /* bit[24], */
int SRU_EXTMISCB1_INT:1; /* bit[23], */
int SRU_EXTMISCB0_INT:1; /* bit[22], */
int SRC3_MUTE_INT :1; /* bit[21], */
int SRC2_MUTE_INT :1; /* bit[20], */
int SRC1_MUTE_INT :1; /* bit[19], */
int SRC0_MUTE_INT :1; /* bit[18], */
int IDP_DMA7_INT :1; /* bit[17], */
int IDP_DMA6_INT :1; /* bit[16], */
int IDP_DMA5_INT :1; /* bit[15], */
int IDP_DMA4_INT :1; /* bit[14], */
int IDP_DMA3_INT :1; /* bit[13], */
int IDP_DMA2_INT :1; /* bit[12], */
int IDP_DMA1_INT :1; /* bit[11], */
int IDP_DMA0_INT :1; /* bit[10], */
int IDP_FIFO_OVR_INT:1; /* bit[9], */
int IDP_FIFO_GTN_INT:1; /* bit[8], */
int SPDIF_RX_CH_STAT_CHNG:1; /* bit[7], */
int SPDIF_RX_PARITY_ERROR:1; /* bit[6], */
int SPDIF_RX_EMPHASIS:1; /* bit[5], */
int SPDIF_RX_NON_AUDIO:1; /* bit[4], */
int SPDIF_RX_CRC_ERROR:1; /* bit[3], */
int SPDIF_RX_NO_STREAM:1; /* bit[2], */
int SPDIF_RX_LOCK_START:1; /* bit[1], */
int SPDIF_RX_VALID :1; /* bit[0], */
} BIT;
}ST_DAI_IRPTL;

//Input Data Port Register
typedef union st_idp_ctl0 /* Input Data Port Control Register 0 (IDP_CTL0) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int IDP_SMODE7 :3; /* bit[31:29], Serial Input Mode Select */
int IDP_SMODE6 :3; /* bit[28:26], Serial Input Mode Select */
int IDP_SMODE5 :3; /* bit[25:23], Serial Input Mode Select */
int IDP_SMODE4 :3; /* bit[22:20], Serial Input Mode Select */
int IDP_SMODE3 :3; /* bit[19:17], Serial Input Mode Select */
int IDP_SMODE2 :3; /* bit[16:14], Serial Input Mode Select */
int IDP_SMODE1 :3; /* bit[13:11], Serial Input Mode Select */
int IDP_SMODE0 :3; /* bit[10:8], Serial Input Mode Select */
int IDP_ENABLE :1; /* bit[7], Enable IDP. 1 to 0 transition on this bit clears IDP_FIFO. */
int IDP_CLROVR :1; /* bit[6], FIFO Overflow Clear Bit */
int IDP_DMA_EN :1; /* bit[5], DMA Enable. Enables DMA on all IDP channels */
int IDP_BHD :1; /* bit[4], IDP Buffer Hang Disable */
int IDP_NSET :4; /* bit[3:0], Monitors number of FIFO entries where N > samples */
/* raises interrupt controller bit 8 */
} BIT;
}ST_IDP_CTL0;

typedef union st_idp_ctl1 /* Input Data Port Control Register 1 (IDP_CTL1) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int IDP_FFCLR :1; /* bit[31], Clear IDP FIFO */
int RSRVD0 :7; /* bit[30:24], reserved */
int IDP_PING7 :1; /* bit[23], DMA Channel 7 Ping-Pong Enable */
int IDP_PING6 :1; /* bit[22], DMA Channel 6 Ping-Pong Enable */
int IDP_PING5 :1; /* bit[21], DMA Channel 5 Ping-Pong Enable */
int IDP_PING4 :1; /* bit[20], DMA Channel 4 Ping-Pong Enable */
int IDP_PING3 :1; /* bit[19], DMA Channel 3 Ping-Pong Enable */
int IDP_PING2 :1; /* bit[18], DMA Channel 2 Ping-Pong Enable */
int IDP_PING1 :1; /* bit[17], DMA Channel 1 Ping-Pong Enable */
int IDP_PING0 :1; /* bit[16], DMA Channel 0 Ping-Pong Enable */
int IDP_DMA_EN7 :1; /* bit[15], IDP DMA Channel 7 Enable */
int IDP_DMA_EN6 :1; /* bit[14], IDP DMA Channel 6 Enable */
int IDP_DMA_EN5 :1; /* bit[13], IDP DMA Channel 5 Enable */
int IDP_DMA_EN4 :1; /* bit[12], IDP DMA Channel 4 Enable */
int IDP_DMA_EN3 :1; /* bit[11], IDP DMA Channel 3 Enable */
int IDP_DMA_EN2 :1; /* bit[10], IDP DMA Channel 2 Enable */
int IDP_DMA_EN1 :1; /* bit[9], IDP DMA Channel 1 Enable */
int IDP_DMA_EN0 :1; /* bit[8], IDP DMA Channel 0 Enable */
int IDP_EN7 :1; /* bit[7], IDP Channel 7 Enable */
int IDP_EN6 :1; /* bit[6], IDP Channel 6 Enable */
int IDP_EN5 :1; /* bit[5], IDP Channel 5 Enable */
int IDP_EN4 :1; /* bit[4], IDP Channel 4 Enable */
int IDP_EN3 :1; /* bit[3], IDP Channel 3 Enable */
int IDP_EN2 :1; /* bit[2], IDP Channel 2 Enable */
int IDP_EN1 :1; /* bit[1], IDP Channel 1 Enable */
int IDP_EN0 :1; /* bit[0], IDP Channel 0 Enable */
} BIT;
}ST_IDP_CTL1;

typedef union st_idp_pp_ctl /* Parallel Data Acquisition Port Control Register (IDP_PP_CTL) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int IDP_PDAP_EN :1; /* bit[31], PDAP Enable */
int IDP_PDAP_RESET :1; /* bit[30], PDAP Reset */
int IDP_PDAP_CLKEDGE:1; /* bit[29], PDAP (Rising or Falling) Clock Edge */
int IDP_PDAP_PACKING:2; /* bit[28:27], Selects PDAP packing mode */
int IDP_PORT_SELECT :1; /* bit[26], Port Select: Input Pins Select */
int RSRVD0 :6; /* bit[25:20], reserved */
int IDP_P20_PDAPMASK:1; /* bit[19], Parallel Data Acquisition Port Mask */
int IDP_P19_PDAPMASK:1; /* bit[18], Parallel Data Acquisition Port Mask */
int IDP_P18_PDAPMASK:1; /* bit[17], Parallel Data Acquisition Port Mask */
int IDP_P17_PDAPMASK:1; /* bit[16], Parallel Data Acquisition Port Mask */
int IDP_P16_PDAPMASK:1; /* bit[15], Parallel Data Acquisition Port Mask */
int IDP_P15_PDAPMASK:1; /* bit[14], Parallel Data Acquisition Port Mask */
int IDP_P14_PDAPMASK:1; /* bit[13], Parallel Data Acquisition Port Mask */
int IDP_P13_PDAPMASK:1; /* bit[12], Parallel Data Acquisition Port Mask */
int IDP_P12_PDAPMASK:1; /* bit[11], Parallel Data Acquisition Port Mask */
int IDP_P11_PDAPMASK:1; /* bit[10], Parallel Data Acquisition Port Mask */
int IDP_P10_PDAPMASK:1; /* bit[9], Parallel Data Acquisition Port Mask */
int IDP_P09_PDAPMASK:1; /* bit[8], Parallel Data Acquisition Port Mask */
int IDP_P08_PDAPMASK:1; /* bit[7], Parallel Data Acquisition Port Mask */
int IDP_P07_PDAPMASK:1; /* bit[6], Parallel Data Acquisition Port Mask */
int IDP_P06_PDAPMASK:1; /* bit[5], Parallel Data Acquisition Port Mask */
int IDP_P05_PDAPMASK:1; /* bit[4], Parallel Data Acquisition Port Mask */
int IDP_P04_PDAPMASK:1; /* bit[3], Parallel Data Acquisition Port Mask */
int IDP_P03_PDAPMASK:1; /* bit[2], Parallel Data Acquisition Port Mask */
int IDP_P02_PDAPMASK:1; /* bit[1], Parallel Data Acquisition Port Mask */
int IDP_P01_PDAPMASK:1; /* bit[0], Parallel Data Acquisition Port Mask */
} BIT;
}ST_IDP_PP_CTL;

typedef union st_dai_stat /* DAI Status Register */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int IDP_FIFOSZ :4; /* bit[31:28], Number of samples in the IDP FIFO */
int RSRVD0 :3; /* bit[27:25], reserved */
int IDP_DMA7_STAT :1; /* bit[24], Input Data Port DMA 7 Status */
int IDP_DMA6_STAT :1; /* bit[23], Input Data Port DMA 6 Status */
int IDP_DMA5_STAT :1; /* bit[22], Input Data Port DMA 5 Status */
int IDP_DMA4_STAT :1; /* bit[21], Input Data Port DMA 4 Status */
int IDP_DMA3_STAT :1; /* bit[20], Input Data Port DMA 3 Status */
int IDP_DMA2_STAT :1; /* bit[19], Input Data Port DMA 2 Status */
int IDP_DMA1_STAT :1; /* bit[18], Input Data Port DMA 1 Status */
int IDP_DMA0_STAT :1; /* bit[17], Input Data Port DMA 0 Status */
int RSRVD1 :1; /* bit[16], reserved */
int SRU_OVF7 :1; /* bit[15], Sticky Overflow Status (Channel 7) */
int SRU_OVF6 :1; /* bit[14], Sticky Overflow Status (Channel 6) */
int SRU_OVF5 :1; /* bit[13], Sticky Overflow Status (Channel 5) */
int SRU_OVF4 :1; /* bit[12], Sticky Overflow Status (Channel 4) */
int SRU_OVF3 :1; /* bit[11], Sticky Overflow Status (Channel 3) */
int SRU_OVF2 :1; /* bit[10], Sticky Overflow Status (Channel 2) */
int SRU_OVF1 :1; /* bit[9], Sticky Overflow Status (Channel 1) */
int SRU_OVF0 :1; /* bit[8], Sticky Overflow Status (Channel 0) */
int SRU_PING7_STAT :1; /* bit[7], Ping-pong DMA Status (Channel 7) */
int SRU_PING6_STAT :1; /* bit[6], Ping-pong DMA Status (Channel 6) */
int SRU_PING5_STAT :1; /* bit[5], Ping-pong DMA Status (Channel 5) */
int SRU_PING4_STAT :1; /* bit[4], Ping-pong DMA Status (Channel 4) */
int SRU_PING3_STAT :1; /* bit[3], Ping-pong DMA Status (Channel 3) */
int SRU_PING2_STAT :1; /* bit[2], Ping-pong DMA Status (Channel 2) */
int SRU_PING1_STAT :1; /* bit[1], Ping-pong DMA Status (Channel 1) */
int SRU_PING0_STAT :1; /* bit[0], Ping-pong DMA Status (Channel 0) */
} BIT;
}ST_DAI_STAT;

typedef union st_dai_pin_stat /* DAI Pin Buffer Status Register (DAI_PIN_STAT) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :12; /* bit[31:20], reserved */
int DAI_PB20 :1; /* bit[19], DAI PB20 Status */
int DAI_PB19 :1; /* bit[18], DAI PB19 Status */
int DAI_PB18 :1; /* bit[17], DAI PB18 Status */
int DAI_PB17 :1; /* bit[16], DAI PB17 Status */
int DAI_PB16 :1; /* bit[15], DAI PB16 Status */
int DAI_PB15 :1; /* bit[14], DAI PB15 Status */
int DAI_PB14 :1; /* bit[13], DAI PB14 Status */
int DAI_PB13 :1; /* bit[12], DAI PB13 Status */
int DAI_PB12 :1; /* bit[11], DAI PB12 Status */
int DAI_PB11 :1; /* bit[10], DAI PB11 Status */
int DAI_PB10 :1; /* bit[9], DAI PB10 Status */
int DAI_PB09 :1; /* bit[8], DAI PB9 Status */
int DAI_PB08 :1; /* bit[7], DAI PB8 Status */
int DAI_PB07 :1; /* bit[6], DAI PB7 Status */
int DAI_PB06 :1; /* bit[5], DAI PB6 Status */
int DAI_PB05 :1; /* bit[4], DAI PB5 Status */
int DAI_PB04 :1; /* bit[3], DAI PB4 Status */
int DAI_PB03 :1; /* bit[2], DAI PB3 Status */
int DAI_PB02 :1; /* bit[1], DAI PB2 Status */
int DAI_PB01 :1; /* bit[0], DAI PB1 Status */
} BIT;
}ST_DAI_PIN_STAT;

typedef union st_idp_fifo /* Input Data Port FIFO Register (IDP_FIFO) */
{
int ALL; /* all 32 bits */
struct
{
int H :16;
int L :16;
} WORD;
struct
{
int DATA :28; /* bit[31:4], Input Data (Serial) */
int LR_STAT :1; /* bit[3], Left/Right channel as specified by frame sync */
int CH :3; /* bit[2:0], IDP Channel Encoding */
} BIT;
}ST_IDP_FIFO;

//DPI Registers
typedef union st_sru2_input0 /* SRU2_INPUT0 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int SPIB_MISO_I :5; /* bit[29:25], SPI B MISO Input */
int SPIB_MOSI_I :5; /* bit[24:20], SPI B MOSI Input */
int SPI_CLK_I :5; /* bit[19:15], SPI Clock Input */
int SPI_DS_I :5; /* bit[14:10], SPI Device Select Input */
int SPI_MISO_I :5; /* bit[9:5], SPI MOSI Input */
int SPI_MOSI_I :5; /* bit[4:0], SPI MISO Input */
} BIT;
}ST_SRU2_INPUT0;

typedef union st_sru2_input1 /* SRU2_INPUT1 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int TWI_SCLK_I :5; /* bit[29:25], TWI Serial Clock Input */
int TWI_SDATA_I :5; /* bit[24:20], TWI Serial Data Input */
int UART1_RX_I :5; /* bit[19:15], UART 1 Receiver Input */
int UART0_RX_I :5; /* bit[14:10], UART 0 Receiver Input */
int SPIB_CLK_I :5; /* bit[9:5], SPI B Clock Input */
int SPIB_DS_I :5; /* bit[4:0], SPIB Device Select Input */
} BIT;
}ST_SRU2_INPUT1;

typedef union st_sru2_input2 /* SRU2_INPUT2 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int FLAG6_I :5; /* bit[29:25], Flag 6 Input */
int FLAG5_I :5; /* bit[24:20], Flag 5 Input */
int FLAG4_I :5; /* bit[19:15], Flag 4 Input */
int TIMER2_I :5; /* bit[14:10], Timer 2 Input */
int TIMER1_I :5; /* bit[9:5], Timer 1 Input */
int TIMER0_I :5; /* bit[4:0], Timer 0 Input */
} BIT;
}ST_SRU2_INPUT2;

typedef union st_sru2_input3 /* SRU2_INPUT3 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int FLAG12_I :5; /* bit[29:25], Flag 12 Input */
int FLAG11_I :5; /* bit[24:20], Flag 11 Input */
int FLAG10_I :5; /* bit[19:15], Flag 10 Input */
int FLAG9_I :5; /* bit[14:10], Flag 9 Input */
int FLAG8_I :5; /* bit[9:5], Flag 8 Input */
int FLAG7_I :5; /* bit[4:0], Flag 7 Input */
} BIT;
}ST_SRU2_INPUT3;

typedef union st_sru2_input4 /* SRU2_INPUT4 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int MISC2_I :5; /* bit[29:25], Miscellaneous 2 Input */
int MISC1_I :5; /* bit[24:20], Miscellaneous 1 Input */
int MISC0_I :5; /* bit[19:15], Miscellaneous 0 Input */
int FLAG15_I :5; /* bit[14:10], Flag 15 Input */
int FLAG14_I :5; /* bit[9:5], Flag 14 Input */
int FLAG13_I :5; /* bit[4:0], Flag 13 Input */
} BIT;
}ST_SRU2_INPUT4;

typedef union st_sru2_input5 /* SRU2_INPUT5 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int MISC8_I :5; /* bit[29:25], Miscellaneous 8 Input */
int MISC7_I :5; /* bit[24:20], Miscellaneous 7 Input */
int MISC6_I :5; /* bit[19:15], Miscellaneous 6 Input */
int MISC5_I :5; /* bit[14:10], Miscellaneous 5 Input */
int MISC4_I :5; /* bit[9:5], Miscellaneous 4 Input */
int MISC3_I :5; /* bit[4:0], Miscellaneous 3 Input */
} BIT;
}ST_SRU2_INPUT5;

typedef union st_sru2_pin0 /* SRU2_PIN0 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DPI_PB05_I :6; /* bit[29:24], DPI pin buffer 5 Input */
int DPI_PB04_I :6; /* bit[23:18], DPI pin buffer 4 Input */
int DPI_PB03_I :6; /* bit[17:12], DPI pin buffer 3 Input */
int DPI_PB02_I :6; /* bit[11:6], DPI pin buffer 2 Input */
int DPI_PB01_I :6; /* bit[5:0], DPI pin buffer 1 Input */
} BIT;
}ST_SRU2_PIN0;

typedef union st_sru2_pin1 /* SRU2_PIN1 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DPI_PB10_I :6; /* bit[29:24], DPI pin buffer 10 Input */
int DPI_PB09_I :6; /* bit[23:18], DPI pin buffer 9 Input */
int DPI_PB08_I :6; /* bit[17:12], DPI pin buffer 8 Input */
int DPI_PB07_I :6; /* bit[11:6], DPI pin buffer 7 Input */
int DPI_PB06_I :6; /* bit[5:0], DPI pin buffer 6 Input */
} BIT;
}ST_SRU2_PIN1;

typedef union st_sru2_pin2 /* SRU2_PIN2 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :8; /* bit[31:24], reserved */
int DPI_PB14_I :6; /* bit[23:18], DPI pin buffer 14 Input */
int DPI_PB13_I :6; /* bit[17:12], DPI pin buffer 13 Input */
int DPI_PB12_I :6; /* bit[11:6], DPI pin buffer 12 Input */
int DPI_PB11_I :6; /* bit[5:0], DPI pin buffer 11 Input */
} BIT;
}ST_SRU2_PIN2;

typedef union st_sru2_pben0 /* SRU2_PBEN0 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DPI_PBEN05_I :6; /* bit[29:24], DPI Pin Buffer Enable 5 Input */
int DPI_PBEN04_I :6; /* bit[23:18], DPI Pin Buffer Enable 4 Input */
int DPI_PBEN03_I :6; /* bit[17:12], DPI Pin Buffer Enable 3 Input */
int DPI_PBEN02_I :6; /* bit[11:6], DPI Pin Buffer Enable 2 Input */
int DPI_PBEN01_I :6; /* bit[5:0], DPI Pin Buffer Enable 1 Input */
} BIT;
}ST_SRU2_PBEN0;

typedef union st_sru2_pben1 /* SRU2_PBEN1 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int DPI_PBEN10_I :6; /* bit[29:24], DPI Pin Buffer Enable 10 Input */
int DPI_PBEN09_I :6; /* bit[23:18], DPI Pin Buffer Enable 9 Input */
int DPI_PBEN08_I :6; /* bit[17:12], DPI Pin Buffer Enable 8 Input */
int DPI_PBEN07_I :6; /* bit[11:6], DPI Pin Buffer Enable 7 Input */
int DPI_PBEN06_I :6; /* bit[5:0], DPI Pin Buffer Enable 6 Input */
} BIT;
}ST_SRU2_PBEN1;

typedef union st_sru2_pben2 /* SRU2_PBEN2 Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :8; /* bit[31:24], reserved */
int DPI_PBEN14_I :6; /* bit[23:18], DPI Pin Buffer Enable 14 Input */
int DPI_PBEN13_I :6; /* bit[17:12], DPI Pin Buffer Enable 13 Input */
int DPI_PBEN12_I :6; /* bit[11:6], DPI Pin Buffer Enable 12 Input */
int DPI_PBEN11_I :6; /* bit[5:0], DPI Pin Buffer Enable 11 Input */
} BIT;
}ST_SRU2_PBEN2;

//DPI Registers

typedef union st_dpi_pin_pullup /* DPI Resistor Pull-up Enable Register (DPI_PIN_PULLUP) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :18; /* bit[31:14], reserved */
int DPI_P14_PULLUP :1; /* bit[13], DPI Pin 14 Pullup Enable */
int DPI_P13_PULLUP :1; /* bit[12], DPI Pin 13 Pullup Enable */
int DPI_P12_PULLUP :1; /* bit[11], DPI Pin 12 Pullup Enable */
int DPI_P11_PULLUP :1; /* bit[10], DPI Pin 11 Pullup Enable */
int DPI_P10_PULLUP :1; /* bit[9], DPI Pin 10 Pullup Enable */
int DPI_P09_PULLUP :1; /* bit[8], DPI Pin 9 Pullup Enable */
int DPI_P08_PULLUP :1; /* bit[7], DPI Pin 8 Pullup Enable */
int DPI_P07_PULLUP :1; /* bit[6], DPI Pin 7 Pullup Enable */
int DPI_P06_PULLUP :1; /* bit[5], DPI Pin 6 Pullup Enable */
int DPI_P05_PULLUP :1; /* bit[4], DPI Pin 5 Pullup Enable */
int DPI_P04_PULLUP :1; /* bit[3], DPI Pin 4 Pullup Enable */
int DPI_P03_PULLUP :1; /* bit[2], DPI Pin 3 Pullup Enable */
int DPI_P02_PULLUP :1; /* bit[1], DPI Pin 2 Pullup Enable */
int DPI_P01_PULLUP :1; /* bit[0], DPI Pin 1 Pullup Enable */
} BIT;
}ST_DPI_PIN_PULLUP;

typedef union st_dpi_pin_stat /* DPI Pin Buffer Status Register (DPI_PIN_STAT) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :18; /* bit[31:14], reserved */
int DPI_PB14 :1; /* bit[13], DPI Pin 14 Status */
int DPI_PB13 :1; /* bit[12], DPI Pin 13 Status */
int DPI_PB12 :1; /* bit[11], DPI Pin 12 Status */
int DPI_PB11 :1; /* bit[10], DPI Pin 11 Status */
int DPI_PB10 :1; /* bit[9], DPI Pin 10 Status */
int DPI_PB09 :1; /* bit[8], DPI Pin 9 Status */
int DPI_PB08 :1; /* bit[7], DPI Pin 8 Status */
int DPI_PB07 :1; /* bit[6], DPI Pin 7 Status */
int DPI_PB06 :1; /* bit[5], DPI Pin 6 Status */
int DPI_PB05 :1; /* bit[4], DPI Pin 5 Status */
int DPI_PB04 :1; /* bit[3], DPI Pin 4 Status */
int DPI_PB03 :1; /* bit[2], DPI Pin 3 Status */
int DPI_PB02 :1; /* bit[1], DPI Pin 2 Status */
int DPI_PB01 :1; /* bit[0], DPI Pin 1 Status */
} BIT;
}ST_DPI_PIN_STAT;

typedef union st_dpi_irptl /* DPI Interrupt Latch Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :18; /* bit[31:14], reserved */
int EXT_MISC_8_INT :1; /* bit[13], External misc 8 interrupt */
int EXT_MISC_7_INT :1; /* bit[12], External misc 7 interrupt */
int EXT_MISC_6_INT :1; /* bit[11], External misc 6 interrupt */
int EXT_MISC_5_INT :1; /* bit[10], External misc 5 interrupt */
int EXT_MISC_4_INT :1; /* bit[9], External misc 4 interrupt */
int EXT_MISC_3_INT :1; /* bit[8], External misc 3 interrupt */
int EXT_MISC_2_INT :1; /* bit[7], External misc 2 interrupt */
int EXT_MISC_1_INT :1; /* bit[6], External misc 1 interrupt */
int EXT_MISC_0_INT :1; /* bit[5], External misc 0 interrupt */
int TWI_INT :1; /* bit[4], TWI Interrupt */
int UART1_RX_INT :1; /* bit[3], UART1 Rx Interrupt */
int UART0_RX_INT :1; /* bit[2], UART0 Rx Interrupt */
int UART1_TX_INT :1; /* bit[1], UART1 Tx Interrupt */
int UART0_TX_INT :1; /* bit[0], UART0 Tx Interrupt */
} BIT;
}ST_DPI_IRPTL;

//Precision Clock Control Registers
typedef union st_pcg_ctl0 /* Precision Clock A/B/C/D Control Register 0 */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int ENCLK :1; /* bit[31], Enable Clock */
int ENFS :1; /* bit[30], Enable Frame Sync */
int FS_PHASE_HI :10; /* bit[29:20], Phase HI for Frame Sync */
int FS_DIV :20; /* bit[19:0], Divisor for Frame Sync */
} BIT;
}ST_PCG_CTL0;

typedef union st_pcg_ctl1 /* Precision Clock A/B/C/D Control Register 1 */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int CLK_SOURCE :1; /* bit[31], Clock Source */
int FS_SOURCE :1; /* bit[30], Frame Sync Source */
int FS_PHASE_LO :10; /* bit[29:20], Phase Low for Frame Sync */
int CLK_DIV :20; /* bit[19:0], Divisor for Clock */
} BIT;
}ST_PCG_CTL1;

typedef union st_pcg_pw /* PCG Pulse Width Registers */
{
union
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int PWFSB :16; /* bit[31:16], Pulse Width Frame Sync B/D */
int PWFSA :16; /* bit[15:0], Pulse Width Frame Sync A/C */
} WORD;
} NORMAL_MODE;

union
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :14; /* bit[31:18], reserved */
int INVFSB :1; /* bit[17], Active Low Frame Sync B/D */
int STROBEB :1; /* bit[16], One Shot Frame Sync B/D */
int RSRVD1 :14; /* bit[15:2], reserved */
int INVFSA :1; /* bit[1], Active Low Frame Sync A/C */
int STROBEA :1; /* bit[0], One Shot Frame Sync A/C */
} BIT;
} BYPASS_MODE;
}ST_PCG_PW;

typedef union st_pcg_sync /* PCG Frame Synchronization Registers (PCG_SYNC) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :12; /* bit[31:20], reserved */
int FSB_SOURCE_IOP :1; /* bit[19], Enable frame sync B input source */
int CLKB_SOURCE_IOP :1; /* bit[18], Enable clock B input source */
int CLKB_SYNC :1; /* bit[17], Enable synchronization of clock B with external LRCLK */
int FSB_SYNC :1; /* bit[16], Enable synchronization of FSB with external LRCLK */
int RSRVD1 :12; /* bit[15:4], reserved */
int FSA_SOURCE_IOP :1; /* bit[3], Enable frame sync A input source */
int CLKA_SOURCE_IOP :1; /* bit[2], Enable clock A input source */
int CLKA_SYNC :1; /* bit[1], Enable synchronization of clock A with external LRCLK */
int FSA_SYNC :1; /* bit[0], Enable synchronization of FSA with external LRCLK */
} BIT;
}ST_PCG_SYNC;

typedef union st_pcg_sync2 /* PCG Frame Synchronization Register 2 (PCG_SYNC2) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :12; /* bit[31:20], reserved */
int FSD_SOURCE_IOP :1; /* bit[19], Enable frame sync D input source */
int CLKD_SOURCE_IOP :1; /* bit[18], Enable clock D input source */
int CLKD_SYNC :1; /* bit[17], Enable synchronization of clock D with external LRCLK */
int FSD_SYNC :1; /* bit[16], Enable synchronization of FSD with external LRCLK */
int RSRVD1 :12; /* bit[15:4], reserved */
int FSC_SOURCE_IOP :1; /* bit[3], Enable frame sync C input source */
int CLKC_SOURCE_IOP :1; /* bit[2], Enable clock C input source */
int CLKC_SYNC :1; /* bit[1], Enable synchronization of clock C with external LRCLK */
int FSC_SYNC :1; /* bit[0], Enable synchronization of FSC with external LRCLK */
} BIT;
}ST_PCG_SYNC2;

typedef union st_picr0 /* Peripheral Interrupt Priority0 Control Register (PICR0) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int P5I :5; /* bit[29:25], SPORT5 Interrupt Programmable Interrupt 5 */
int P4I :5; /* bit[24:20], SPORT3 Interrupt Programmable Interrupt 4 */
int P3I :5; /* bit[19:15], SPORT1 Interrupt Programmable Interrupt 3 */
int P2I :5; /* bit[14:10], SPORT2 General-Purpose IOP Timer0 Interrupt Programmable Interrupt 2 */
int P1I :5; /* bit[9:5], SPI Interrupt Programmable Interrupt 1 */
int P0I :5; /* bit[4:0], DAI High Priority Interrupt Programmable Interrupt 0 */
} BIT;
}ST_PICR0;

typedef union st_picr1 /* Peripheral Interrupt Priority1 Control Register (PICR1) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int P11I :5; /* bit[29:25], SPORT7 Interrupt Programmable Interrupt 11 */
int P10I :5; /* bit[24:20], General-Purpose I/O Timer1 Interrupt Programmable Interrupt 10 */
int P9I :5; /* bit[19:15], External Port DMA Channel 0 Interrupt Programmable Interrupt 9 */
int P8I :5; /* bit[14:10], SPORT4 Interrupt Programmable Interrupt 8 */
int P7I :5; /* bit[9:5], SPORT2 Interrupt Programmable Interrupt 7 */
int P6I :5; /* bit[4:0], SPORT0 Interrupt Programmable Interrupt 6 */
} BIT;
}ST_PICR1;

typedef union st_picr2 /* Peripheral Interrupt Priority2 Control Register (PICR2) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :2; /* bit[31:30], reserved */
int P17I :5; /* bit[29:25], General-Purpose I/O Timer1 Interrupt Programmable Interrupt 17 */
int P16I :5; /* bit[24:20], Memory-to-Memory Interrupt Programmable Interrupt 15 */
int P15I :5; /* bit[19:15], External Port DMA Channel 0 Interrupt Programmable Interrupt 9 */
int P14I :5; /* bit[14:10], DPI Interrupt Programmable Interrupt 14 */
int P13I :5; /* bit[9:5], External Port DMA Channel 1 Interrupt Programmable Interrupt 13 */
int P12I :5; /* bit[4:0], DAI Interrupt Low Programmable Interrupt 12 */
} BIT;
}ST_PICR2;

typedef union st_picr3 /* Peripheral Interrupt Priority3 Control Register (PICR3) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :27; /* bit[31:5], reserved */
int P18I :5; /* bit[4:0], SPI B Interrupt Programmable Interrupt 18 */
} BIT;
}ST_PICR3;

// MTM Registers
typedef union st_mtmctl /* Memory-to-Memory DMA Control Register */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int MTMDMA0ACT :1; /* bit[31], Memory Write DMA Status */
int MTMDMA1ACT :1; /* bit[30], Memory Read DMA Status */
int RSRVD0 :28; /* bit[29:2], reserved */
int MTMFLUSH :1; /* bit[1], 1=Flush the FIFO and reset the read/write pointers */
int MTMDEN :1; /* bit[0], MTM DMA Enable */
} BIT;
}ST_MTMCTL;

//PWM Registers
typedef union st_pwmgctl /* PWM Global Control Register (PWMGCTL) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :16; /* bit[31:16], reserved */
int PWM_SYNCDIS3 :1; /* bit[15], PWM Sync Group 3 Disable */
int PWM_SYNCEN3 :1; /* bit[14], PWM Sync Group 3 Enable */
int PWM_SYNCDIS2 :1; /* bit[13], PWM Sync Group 2 Disable */
int PWM_SYNCEN2 :1; /* bit[12], PWM Sync Group 2 Enable */
int PWM_SYNCDIS1 :1; /* bit[11], PWM Sync Group 1 Disable */
int PWM_SYNCEN1 :1; /* bit[10], PWM Sync Group 1 Enable */
int PWM_SYNCDIS0 :1; /* bit[9], PWM Sync Group 0 Disable */
int PWM_SYNCEN0 :1; /* bit[8], PWM Sync Group 0 Enable */
int PWM_DIS3 :1; /* bit[7], PWM Group 3 Disable */
int PWM_EN3 :1; /* bit[6], PWM Group 3 Enable */
int PWM_DIS2 :1; /* bit[5], PWM Group 2 Disable */
int PWM_EN2 :1; /* bit[4], PWM Group 2 Enable */
int PWM_DIS1 :1; /* bit[3], PWM Group 1 Disable */
int PWM_EN1 :1; /* bit[2], PWM Group 1 Enable */
int PWM_DIS0 :1; /* bit[1], PWM Group 0 Disable */
int PWM_EN0 :1; /* bit[0], PWM Group 0 Enable */
} BIT;
}ST_PWMGCTL;

typedef union st_pwmgstat /* PWM Global Status Register (PWMGSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int PWM_STAT3 :1; /* bit[3], PWM Group 3 Period Completion Status */
int PWM_STAT2 :1; /* bit[2], PWM Group 2 Period Completion Status */
int PWM_STAT1 :1; /* bit[1], PWM Group 1 Period Completion Status */
int PWM_STAT0 :1; /* bit[0], PWM Group 0 Period Completion Status */
} BIT;
}ST_PWMGSTAT;

typedef union st_pwmctl /* PWM Control Register (PWMCTLx) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :26; /* bit[31:6], reserved */
int PWM_IRQEN :1; /* bit[5], Enable PWM Interrupts */
int RSRVD1 :2; /* bit[4:3], reserved */
int PWM_UPDATE :1; /* bit[2], Update Mode */
int PWM_PAIR :1; /* bit[1], Pair Mode */
int PWM_ALIGN :1; /* bit[0], Align Mode */
} BIT;
}ST_PWMCTL;

typedef union st_pwmstat /* PWM Status Registers (PWMSTATx) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :29; /* bit[31:3], reserved */
int PWM_PAIRSTAT :1; /* bit[2], PWM Paired Mode Status */
int RSRVD1 :1; /* bit[1], reserved */
int PWM_PHASE :1; /* bit[0], PWM Phase Status */
} BIT;
}ST_PWMSTAT;

typedef union st_pwmseg /* PWM Output Disable Registers (PWMSEGx) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int PWM_AL :1; /* bit[3], Channel A Low Disable */
int PWM_AH :1; /* bit[2], Channel A High Disable */
int PWM_BL :1; /* bit[1], Channel B Low Disable */
int PWM_BH :1; /* bit[0], Channel B High Disable */
} BIT;
}ST_PWMSEG;

typedef union st_pwmpol /* PWM Polarity Select Registers (PWMPOLx) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int PWM_POL0BH :1; /* bit[7], Write to set channel B High Polarity 0 */
int PWM_POL1BH :1; /* bit[6], Write to set channel B High Polarity 1 */
int PWM_POL0BL :1; /* bit[5], Write to Set Channel B Low Polarity 0 */
int PWM_POL1BL :1; /* bit[4], Write to Set Channel B Low Polarity 1 */
int PWM_POL0AH :1; /* bit[3], Write to set channel A High Polarity 0 */
int PWM_POL1AH :1; /* bit[2], Write to set channel A High Polarity 1 */
int PWM_POL0AL :1; /* bit[1], Write to Set Channel A Low Polarity 0 */
int PWM_POL1AL :1; /* bit[0], Write to Set Channel A Low Polarity 1 */
} BIT;
}ST_PWMPOL;

//UART Registers
typedef union st_uartthr /* Transmit Hold Registers (UARTxTHR) */
{
union
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :23; /* bit[31:9], reserved */
int TX9D :1; /* bit[8], low byte Tx9 bit */
int BYTE :8; /* bit[7:0], data byte */
} BIT;
} NORMAL_MODE;

union
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :7; /* bit[31:25], reserved */
int TX9D1 :1; /* bit[24], high byte Tx9 bit */
int HI_BYTE :8; /* bit[23:16], high byte */
int RSRVD1 :7; /* bit[15:9], reserved */
int TX9D0 :1; /* bit[8], low byte Tx9 bit */
int LO_BYTE :8; /* bit[7:0], low byte */
} BIT;
} PACK_MODE;
}ST_UARTTHR;

typedef union st_uartrbr /* Receive Buffer Registers (UARTxRBR) */
{
union
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :23; /* bit[31:9], reserved */
int RX9D :1; /* bit[8], low byte Rx9 bit */
int BYTE :8; /* bit[7:0], data byte */
} BIT;
} NORMAL_MODE;

union
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSRVD0 :7; /* bit[31:25], reserved */
int RX9D1 :1; /* bit[24], high byte Rx9 bit */
int HI_BYTE :8; /* bit[23:16], high byte */
int RSRVD1 :7; /* bit[15:9], reserved */
int RX9D0 :1; /* bit[8], low byte Rx9 bit */
int LO_BYTE :8; /* bit[7:0], low byte */
} BIT;
} PACK_MODE;
}ST_UARTRBR;

typedef union st_uartier /* Interrupt Enable Registers (UARTxIER) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :27; /* bit[31:5], reserved */
int UARTADIE :1; /* bit[4], Enable Address Detect Interrupt in 9-Bit Mode */
int UARTTXFIE :1; /* bit[3], Enable Transmit Complete Interrupt */
int UARTLSIE :1; /* bit[2], Enable RX Status Interrupt */
int UARTTBEIE :1; /* bit[1], Enable Transmit Buffer Empty Interrupt */
int UARTRBFIE :1; /* bit[0], Enable Receive Buffer Full Interrupt */
} BIT;
}ST_UARTIER;

/*
In the order of interrupt priority, highest first.
011=Receive line status. Read UART_LSR to clear interrupt request.
100=Address detect. Read RBR to clear interrupt request.
010=Receive data ready. Read UART RBR to clear interrupt request.
001=UART_THR empty. Write UART_THR or read UART_IIR to clear interrupt request, when priority = 4.
000=UART THR & TSR empty (TEMT = transmit complete). Write UART_THR or read UART_IIR to clear interrupt request, when priority = 5 */
typedef union st_uartiir /* Interrupt Identification Registers (UARTxIIR) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int UARTISTAT :3; /* bit[3:1], UART Interrupt Status */
int UARTNOINT :1; /* bit[0], Pending Interrupt Status, 0=Interrupt pending */
/* 1=No interrupt pending */
} BIT;
}ST_UARTIIR;

typedef union st_uartlcr /* Line Control Registers (UARTxLCR) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int UARTDLAB :1; /* bit[7], Divisor Latch Access */
int UARTSB :1; /* bit[6], Set Break */
int UARTSTP :1; /* bit[5], Forces parity to defined value if set and PEN = 1 */
int UARTEPS :1; /* bit[4], Even Parity Select */
int UARTPEN :1; /* bit[3], Parity Enable */
int UARTSTB :1; /* bit[2], Stop Bits */
int UARTWLS :2; /* bit[1:0], Word Length Select */
} BIT;
}ST_UARTLCR;

typedef union st_uartmode /* Mode Registers (UARTxMODE) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :25; /* bit[31:7], reserved */
int UARTPST :2; /* bit[6:5], Pin Status */
int UARTAEN :1; /* bit[4], Enable Address Detect (if Rx9 = 1) */
int UARTRX9 :1; /* bit[3], Enable 9-Bit Tx in Receiver */
int UARTTX9 :1; /* bit[2], Enable 9-Bit Tx in Transmitter */
int UARTPKSYN :1; /* bit[1], Synchronize Data Packing in Rx */
int UARTPACK :1; /* bit[0], Packing Enable */
} BIT;
}ST_UARTMODE;

typedef union st_uartlsr /* Line Status Registers (UARTxLSR) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int UARTRX9D :1; /* bit[7], 9th bit of the received character-address detect */
int UARTTEMT :1; /* bit[6], TSR and UARTx_THR Empty */
int UARTTHRE :1; /* bit[5], UARTx_THR Empty */
int UARTBI :1; /* bit[4], Break Interrupt */
int UARTFE :1; /* bit[3], Framing Error */
int UARTPE :1; /* bit[2], Parity Error */
int UARTOE :1; /* bit[1], Overrun Error */
int UARTDR :1; /* bit[0], Data Ready */
} BIT;
}ST_UARTLSR;

typedef union st_uartctl /* DMA Control Registers (UARTxTXCTL, UARTxRXCTL) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :29; /* bit[31:3], reserved */
int UARTCHEN :1; /* bit[2], Chain Pointer DMA Enable */
int UARTDEN :1; /* bit[1], DMA Enable */
int UARTEN :1; /* bit[0], DMA Transmit Buffer Enable */
} BIT;
}ST_UARTCTL;

typedef union st_uarttxstat /* DMA Status Registers (UARTxTXSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :29; /* bit[31:3], reserved */
int UARTCHSTAT :1; /* bit[2], DMA Chaining Status */
int UARTDMASTAT :1; /* bit[1], DMA Status */
int RSRVD1 :1; /* bit[0], reserved */
} BIT;
}ST_UARTTXSTAT;

typedef union st_uartrxstat /* DMA Status Registers (UARTxRXSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :29; /* bit[31:3], reserved */
int UARTCHSTAT :1; /* bit[2], DMA Chaining Status */
int UARTDMASTAT :1; /* bit[1], DMA Status */
int UARTERRIRQ :1; /* bit[0], Receive Channel Error Interrupt */
} BIT;
}ST_UARTRXSTAT;

//TWI Registers
typedef union st_twidiv /* TWI Serial Clock Divider */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :16; /* bit[31:16], reserved */
int CLKHI :8; /* bit[15:8], value used to create the high durations of the serial clock (SCL) */
int CLKLOW :8; /* bit[7:0], value used to create the high durations of the serial clock (SCL) */
} BIT;
}ST_TWIDIV;

typedef union st_twisctl /* Slave Mode Control Register (TWISCTL) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :27; /* bit[31:5], reserved */
int TWIGCE :1; /* bit[4], General Call Enable */
int TWINAK :1; /* bit[3], Not Acknowledge */
int TWIDVAL :1; /* bit[2], Slave Transmit Data Valid */
int TWISLEN :1; /* bit[1], Slave Address Length */
int TWISEN :1; /* bit[0], Slave Enable */
} BIT;
}ST_TWISCTL;

typedef union st_twisstat /* Slave Status Register (TWISSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :30; /* bit[31:2], reserved */
int TWIGC :1; /* bit[1], General Call */
int TWISDIR :1; /* bit[0], Slave Transfer Direction */
} BIT;
}ST_TWISSTAT;

typedef union st_twimctl /* Master Control Register (TWIMCTL) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :16; /* bit[31:16], reserved */
int TWISCLOVR :1; /* bit[15], Serial Clock (SCL) Override */
int TWISDAOVR :1; /* bit[14], Serial Data (SDA) Override */
int TWIDCNT :8; /* bit[13:6], Data Transfer Count */
int TWIRSTART :1; /* bit[5], Repeat START */
int TWISTOP :1; /* bit[4], Issue STOP Condition */
int TWIFAST :1; /* bit[3], Fast Mode */
int TWIMDIR :1; /* bit[2], Master Transfer Direction */
int TWIMLEN :1; /* bit[1], Master Address Length */
int TWIMEN :1; /* bit[0], Master Mode Enable */
} BIT;
}ST_TWIMCTL;

typedef union st_twimstat /* Master Status Register (TWIMSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :23; /* bit[31:9], reserved */
int TWIBUSY :1; /* bit[8], Bus Busy */
int TWISCLSEN :1; /* bit[7], Serial Clock Sense */
int TWISDASEN :1; /* bit[6], Serial Data Sense */
int TWIWERR :1; /* bit[5], Buffer Write Error */
int TWIRERR :1; /* bit[4], Buffer Read Error */
int TWIDNAK :1; /* bit[3], Data Not Acknowledged */
int TWIANAK :1; /* bit[2], Address Not Acknowledged */
int TWILOST :1; /* bit[1], Lost Arbitration */
int TWIMPROG :1; /* bit[0], Master Tx in Progress */
} BIT;
}ST_TWIMSTAT;

typedef union st_twiirptl /* Interrupt Source Register (TWIIRPTL) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int TWIRXINT :1; /* bit[7], Receive FIFO Service */
int TWITXINT :1; /* bit[6], Transmit FIFO Service */
int TWIMERR :1; /* bit[5], Master Transfer Error */
int TWIMCOM :1; /* bit[4], Master Transfer Complete */
int TWISOVF :1; /* bit[3], Slave Overflow */
int TWISERR :1; /* bit[2], Slave Transfer Error */
int TWISCOMP :1; /* bit[1], Slave Transfer Complete */
int TWISINIT :1; /* bit[0], Slave Transfer Initiated */
} BIT;
}ST_TWIIRPTL;

typedef union st_twiimask /* Interrupt Enable Register (TWIIMASK) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int TWIRXINT :1; /* bit[7], Receive FIFO Service Interrupt Enable */
int TWITXINT :1; /* bit[6], Transmit FIFO Service Interrupt Enable */
int TWIMERR :1; /* bit[5], Master Transfer Error Interrupt Enable */
int TWIMCOM :1; /* bit[4], Master Transfer Complete Interrupt Enable */
int TWISOVF :1; /* bit[3], Slave Overflow Interrupt Enable */
int TWISERR :1; /* bit[2], Slave Transfer Error Interrupt Enable */
int TWISCOMP :1; /* bit[1], Slave Transfer Complete Interrupt Enable */
int TWISINIT :1; /* bit[0], Slave Transfer Initiated Interrupt Enable */
} BIT;
}ST_TWIIMASK;

typedef union st_twififoctl /* FIFO Control Register (TWIFIFOCTL) */
{
int ALL; /* All 16 bits */
struct
{
int :11; /* bit[15:5], reserved */
int _TWIBHD :1; /* bit[4], Buffer Hang Disable */
int _TWIRXINT2 :1; /* bit[3], Receive Buffer Interrupt Length */
int _TWITXINT2 :1; /* bit[2], Transmit Buffer Interrupt Length */
int _TWIRXFLUSH :1; /* bit[1], Receive Buffer Flush */
int _TWITXFLUSH :1; /* bit[0], Transmit Buffer Flush */
} BIT;
}ST_TWIFIFOCTL;

typedef union st_twififostat /* FIFO Status Register (TWIFIFOSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int TWIRXS :2; /* bit[3:2], Receive FIFO Status */
int TWITXS :2; /* bit[1:0], Transmit FIFO Status */
} BIT;
}ST_TWIFIFOSTAT;

typedef union st_twi16 /* 16-Bit Transmit/Receive FIFO Register (TXTWI16/RXTWI16) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :8; /* bit[31:24], reserved */
int BYTE1 :8; /* bit[23:16], Byte1-Transmitted second */
int RSRVD1 :8; /* bit[15:8], reserved */
int BYTE0 :8; /* bit[7:0], Byte0-Transmitted first */
} BIT;
}ST_TWI16;

// Sample Rate Converter registers

typedef union st_srcctl0 /* SRC Control Registers (SRCCTLx) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int SRC1_ENABLE :1; /* bit[31], SRC Enable */
int SRC1_MPHASE :1; /* bit[30], Match-Phase Mode Select */
int SRC1_LENOUT :2; /* bit[29:28], Output Word Length Select */
int SRC1_SMODEOUT :2; /* bit[27:26], Serial Output Format */
int SRC1_DITHER :1; /* bit[25], Dither Select */
int SRC1_SOFTMUTE :1; /* bit[24], Soft Mute */
int SRC1_DEEMPHASIS :2; /* bit[23:22], De-emphasis Filter Select */
int SRC1_BYPASS :1; /* bit[21], Bypass Mode Enable */
int SRC1_SMODEIN :3; /* bit[20:18], Serial Input Format */
int SRC1_AUTO_MUTE :1; /* bit[17], Auto Hard Mute */
int SRC1_HARD_MUTE :1; /* bit[16], Hard Mute */
int SRC0_ENABLE :1; /* bit[15], SRC0 Enable */
int SRC0_MPHASE :1; /* bit[14], Match-Phase Mode Select */
int SRC0_LENOUT :2; /* bit[13:12], Output Word Length Select */
int SRC0_SMODEOUT :2; /* bit[11:10], Serial Output Format */
int SRC0_DITHER :1; /* bit[9], Dither Select */
int SRC0_SOFTMUTE :1; /* bit[8], Soft Mute */
int SRC0_DEEMPHASIS :2; /* bit[7:6], De-emphasis Filter Select */
int SRC0_BYPASS :1; /* bit[5], Bypass SRC0 */
int SRC0_SMODEIN :3; /* bit[4:2], Serial Input Format */
int SRC0_AUTO_MUTE :1; /* bit[1], Auto Hard Mute */
int SRC0_HARD_MUTE :1; /* bit[0], Hard Mute */
} BIT;
}ST_SRCCTL0;

typedef union st_srcctl1 /* SRC Control Registers (SRCCTLx) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int SRC3_ENABLE :1; /* bit[31], SRC 3 Enable */
int SRC3_MPHASE :1; /* bit[30], Match-Phase Mode Select */
int SRC3_LENOUT :2; /* bit[29:28], Output Word Length Select */
int SRC3_SMODEOUT :2; /* bit[27:26], Serial Output Format */
int SRC3_DITHER :1; /* bit[25], Dither Select */
int SRC3_SOFTMUTE :1; /* bit[24], Soft Mute */
int SRC3_DEEMPHASIS :2; /* bit[23:22], De-emphasis Filter Select */
int SRC3_BYPASS :1; /* bit[21], Bypass Mode Enable */
int SRC3_SMODEIN :3; /* bit[20:18], Serial Input Format */
int SRC3_AUTO_MUTE :1; /* bit[17], Auto Hard Mute */
int SRC3_HARD_MUTE :1; /* bit[16], Hard Mute */
int SRC2_ENABLE :1; /* bit[15], SRC2 Enable */
int SRC2_MPHASE :1; /* bit[14], Match-Phase Mode Select */
int SRC2_LENOUT :2; /* bit[13:12], Output Word Length Select */
int SRC2_SMODEOUT :2; /* bit[11:10], Serial Output Format */
int SRC2_DITHER :1; /* bit[9], Dither Select */
int SRC2_SOFTMUTE :1; /* bit[8], Soft Mute */
int SRC2_DEEMPHASIS :2; /* bit[7:6], De-emphasis Filter Select */
int SRC2_BYPASS :1; /* bit[5], Bypass SRC2 */
int SRC2_SMODEIN :3; /* bit[4:2], Serial Input Format */
int SRC2_AUTO_MUTE :1; /* bit[1], Auto Hard Mute */
int SRC2_HARD_MUTE :1; /* bit[0], Hard Mute */
} BIT;
}ST_SRCCTL1;

typedef union st_srcmute /* SRC Mute Register (SRCMUTE) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :28; /* bit[31:4], reserved */
int SRC3_MUTE_EN :1; /* bit[3], SRC3 Mute Enable */
int SRC2_MUTE_EN :1; /* bit[2], SRC2 Mute Enable */
int SRC1_MUTE_EN :1; /* bit[1], SRC1 Mute Enable */
int SRC0_MUTE_EN :1; /* bit[0], SRC0 Mute Enable */
} BIT;
}ST_SRCMUTE;

typedef union st_srcrat0 /* SRC Ratio Registers (SRCRAT0) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int SRC1_MUTEOUT :1; /* bit[31], SRC1 Mute Output Enabled */
int SRC1_RATIO1 :15; /* bit[30:16], SRC1 Ratio Bit Field */
int SRC0_MUTEOUT :1; /* bit[15], SRC0 Mute Output Enabled */
int SRC0_RATIO1 :15; /* bit[14:0], SRC0 Ratio Bit Field */
} BIT;
}ST_SRCRAT0;

typedef union st_srcrat1 /* SRC Ratio Registers (SRCRAT1) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int SRC3_MUTEOUT :1; /* bit[31], SRC3 Mute Output Enabled */
int SRC3_RATIO1 :15; /* bit[30:16], SRC3 Ratio Bit Field */
int SRC2_MUTEOUT :1; /* bit[15], SRC2 Mute Output Enabled */
int SRC2_RATIO1 :15; /* bit[14:0], SRC2 Ratio Bit Field */
} BIT;
}ST_SRCRAT1;

typedef union st_ditctl /* Transmitter Control Register (DITCTL) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int DIT_B0CHANR :8; /* bit[31:24], Channel status byte 0 for subframe B */
int DIT_B0CHANL :8; /* bit[23:16], Channel status byte 0 for subframe A */
int DIT_EXT_SYNCEN :1; /* bit[15], External Sync Enable */
int RSRVD0 :1; /* bit[14], reserved */
int DIT_USERS :1; /* bit[13], User Bits Status */
int DIT_BLK_STAT :1; /* bit[12], Block Status (read-only) */
int DIT_VALIDR :1; /* bit[11], Validity Bit B */
int DIT_VALIDL :1; /* bit[10], Validity Bit A */
int DIT_STANDALONE_MODE :1; /* bit[9], Standalone Mode Enable */
int DIT_SMODEIN :3; /* bit[8:6], Serial Data Input Format */
int DIT_SCDF_LR :1; /* bit[5], Select single-channel, double-frequency mode channel */
int DIT_SCDF :1; /* bit[4], Transmit Single-Channel, Double-Frequency Enable */
int DIT_FREQ :2; /* bit[3:2], Frequency Multiplier */
int DIT_MUTE :1; /* bit[1], Mutes the serial data output */
int DIT_EN :1; /* bit[0], Transmitter Enable */
} BIT;
}ST_DITCTL;

typedef union st_ditchan0 /* Left Channel Status for Subframe A Register (DITCHANA0/B0) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE4 :8; /* bit[31:24], byte 4 */
int BYTE3 :8; /* bit[23:16], byte 3 */
int BYTE2 :8; /* bit[15:8], byte 2 */
int BYTE1 :8; /* bit[7:0], byte 1 */
} BYTE;
}ST_DITCHAN0;

typedef union st_ditchan1 /* Left Channel Status for Subframe A Register (DITCHANA1/B1) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE8 :8; /* bit[31:24], byte 8 */
int BYTE7 :8; /* bit[23:16], byte 7 */
int BYTE6 :8; /* bit[15:8], byte 6 */
int BYTE5 :8; /* bit[7:0], byte 5 */
} BYTE;
}ST_DITCHAN1;

typedef union st_ditchan2 /* Left Channel Status for Subframe A Register (DITCHANA2/B2) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE12 :8; /* bit[31:24], byte 12 */
int BYTE11 :8; /* bit[23:16], byte 11 */
int BYTE10 :8; /* bit[15:8], byte 10 */
int BYTE9 :8; /* bit[7:0], byte 9 */
} BYTE;
}ST_DITCHAN2;

typedef union st_ditchan3 /* Left Channel Status for Subframe A Register (DITCHANA3/B3) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE16 :8; /* bit[31:24], byte 16 */
int BYTE15 :8; /* bit[23:16], byte 15 */
int BYTE14 :8; /* bit[15:8], byte 14 */
int BYTE13 :8; /* bit[7:0], byte 13 */
} BYTE;
}ST_DITCHAN3;

typedef union st_ditchan4 /* Left Channel Status for Subframe A Register (DITCHANA4/B4) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE20 :8; /* bit[31:24], byte 20 */
int BYTE19 :8; /* bit[23:16], byte 19 */
int BYTE18 :8; /* bit[15:8], byte 18 */
int BYTE17 :8; /* bit[7:0], byte 17 */
} BYTE;
}ST_DITCHAN4;

typedef union st_ditchan5 /* Left Channel Status for Subframe A Register (DITCHANA5/B5) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int RSVD :8; /* bit[31:24], reserved */
int BYTE23 :8; /* bit[23:16], byte 23 */
int BYTE22 :8; /* bit[15:8], byte 22 */
int BYTE21 :8; /* bit[7:0], byte 21 */
} BYTE;
}ST_DITCHAN5;

typedef union st_ditusrbit0 /* User Bits Buffer Registers for Subframe A/B Registers */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE3 :8; /* bit[31:24], byte 3 */
int BYTE2 :8; /* bit[23:16], byte 2 */
int BYTE1 :8; /* bit[15:8], byte 1 */
int BYTE0 :8; /* bit[7:0], byte 0 */
} BYTE;
}ST_DITUSRBIT0;

typedef union st_ditusrbit1 /* User Bits Buffer Registers for Subframe A/B Registers */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE7 :8; /* bit[31:24], byte 7 */
int BYTE6 :8; /* bit[23:16], byte 6 */
int BYTE5 :8; /* bit[15:8], byte 5 */
int BYTE4 :8; /* bit[7:0], byte 4 */
} BYTE;
}ST_DITUSRBIT1;

typedef union st_ditusrbit2 /* User Bits Buffer Registers for Subframe A/B Registers */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE11 :8; /* bit[31:24], byte 11 */
int BYTE10 :8; /* bit[23:16], byte 10 */
int BYTE9 :8; /* bit[15:8], byte 9 */
int BYTE8 :8; /* bit[7:0], byte 8 */
} BYTE;
}ST_DITUSRBIT2;

typedef union st_ditusrbit3 /* User Bits Buffer Registers for Subframe A/B Registers */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE15 :8; /* bit[31:24], byte 15 */
int BYTE14 :8; /* bit[23:16], byte 14 */
int BYTE13 :8; /* bit[15:8], byte 13 */
int BYTE12 :8; /* bit[7:0], byte 12 */
} BYTE;
}ST_DITUSRBIT3;

typedef union st_ditusrbit4 /* User Bits Buffer Registers for Subframe A/B Registers */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE19 :8; /* bit[31:24], byte 19 */
int BYTE18 :8; /* bit[23:16], byte 18 */
int BYTE17 :8; /* bit[15:8], byte 17 */
int BYTE16 :8; /* bit[7:0], byte 16 */
} BYTE;
}ST_DITUSRBIT4;

typedef union st_ditusrbit5 /* User Bits Buffer Registers for Subframe A/B Registers */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int BYTE23 :8; /* bit[31:24], byte 23 */
int BYTE22 :8; /* bit[23:16], byte 22 */
int BYTE21 :8; /* bit[15:8], byte 21 */
int BYTE20 :8; /* bit[7:0], byte 20 */
} BYTE;
}ST_DITUSRBIT5;

typedef union st_dirctl /* Receiver Control Register (DIRCTL) */
{
int ALL; /* All 32 bits */
struct
{
int RSRVD0 :24; /* bit[31:8], reserved */
int DIR_PLLDIS :1; /* bit[7], Disable PLL */
int DIR_MUTE :1; /* bit[6], Mute */
int DIR_SCDF :1; /* bit[5], Single-Channel, Double-Frequency Mode Enable */
int DIR_SCDF_LR :1; /* bit[4], Single-Channel, Double-Frequency Channel Select */
int DIR_LOCK :2; /* bit[3:2], Lock Error Control */
int DIR_BIPHASE :2; /* bit[1:0], Parity Biphase Error Control */
} BIT;
}ST_DIRCTL;

typedef union st_dirstat /* Receiver Status Register (DIRSTAT) */
{
int ALL; /* All 32 bits */
struct
{
int DIR_B0CHANR :8; /* bit[31:24], Channel Status Byte 0 for Subframe B */
int DIR_B0CHANL :8; /* bit[23:16], Channel Status Byte 0 for Subframe A */
int RSRVD0 :8; /* bit[15:8], reserved */
int DIR_BIPHASEERROR:1; /* bit[7], Biphase Error */
int DIR_PARITYERROR :1; /* bit[6], Indicates Parity Error */
int DIR_NOSTREAM :1; /* bit[5], Stream Disconnected */
int DIR_LOCK :1; /* bit[4], Lock Receiver */
int DIR_VALID :1; /* bit[3], Validity Bit. ORed Value of Channel 1 and 2 */
int DIR_NOAUDIOLR :1; /* bit[2], Non-Audio Subframe Mode Channel 1 and 2 */
int DIR_NOAUDIOR :1; /* bit[1], Non-Audio Subframe Mode Channel 2 */
int DIR_NOAUDIOL :1; /* bit[0], Non-Audio Subframe Mode Channel 1 */
} BIT;
}ST_DIRSTAT;

typedef union st_dirchanl /* Left Channel Status for Subframe A Register (DIRCHANL) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int DIR_B4CHANL :8; /* bit[31:24], Channel status byte 4 for subframe A */
int DIR_B3CHANL :8; /* bit[23:16], Channel status byte 3 for subframe A */
int DIR_B2CHANL :8; /* bit[15:8], Channel status byte 2 for subframe A */
int DIR_B1CHANL :8; /* bit[7:0], Channel status byte 1 for subframe A */
} BYTE;
}ST_DIRCHANL;

typedef union st_dirchanr /* Left Channel Status for Subframe B Register (DIRCHANR) */
{
int ALL; /* All 32 bits */
struct /* Word Access */
{
int H :16;
int L :16;
} WORD;
struct
{
int DIR_B4CHANR :8; /* bit[31:24], Channel status byte 4 for subframe R */
int DIR_B3CHANR :8; /* bit[23:16], Channel status byte 3 for subframe R */
int DIR_B2CHANR :8; /* bit[15:8], Channel status byte 2 for subframe R */
int DIR_B1CHANR :8; /* bit[7:0], Channel status byte 1 for subframe R */
} BYTE;
}ST_DIRCHANR;

//==============================================================================
//
// I/O Processor Register Address Memory Map
//
//==============================================================================

// Emulation/Breakpoint Registers
#define EEMUIN (*(volatile int *)0x30020) // Emulator Input FIFO
#define EEMUSTAT (*(volatile ST_EEMUSTAT *)0x30021) // Enhanced Emulation Status Register
#define EEMUOUT (*(volatile int *)0x30022) // Emulator Output FIFO
#define OSPID (*(volatile int *)0x30023) // Operating System Process ID
#define SYSCTL (*(volatile ST_SYSCTL *)0x30024) // System Control Register
#define BRKCTL (*(volatile ST_BRKCTL *)0x30025) // Hardware Breakpoint Control Register
#define REVPID (*(volatile int *)0x30026) // Emulation/Revision ID Register
#define PSA1S (*(volatile int *)0x300a0) // Instruction Breakpoint Address Start #1
#define PSA1E (*(volatile int *)0x300a1) // Instruction Breakpoint Address End #1
#define PSA2S (*(volatile int *)0x300a2) // Instruction Breakpoint Address Start #2
#define PSA2E (*(volatile int *)0x300a3) // Instruction Breakpoint Address End #2
#define PSA3S (*(volatile int *)0x300a4) // Instruction Breakpoint Address Start #3
#define PSA3E (*(volatile int *)0x300a5) // Instruction Breakpoint Address End #3
#define PSA4S (*(volatile int *)0x300a6) // Instruction Breakpoint Address Start #4
#define PSA4E (*(volatile int *)0x300a7) // Instruction Breakpoint Address End #4
#define DMA1S (*(volatile int *)0x300b2) // Data Memory Breakpoint Address Start #1
#define DMA1E (*(volatile int *)0x300b3) // Data Memory Breakpoint Address Start #1
#define DMA2S (*(volatile int *)0x300b4) // Data Memory Breakpoint Address Start #2
#define DMA2E (*(volatile int *)0x300b5) // Data Memory Breakpoint Address Start #2
#define D1IC (*(volatile int *)0x300b6)
#define D1ID (*(volatile int *)0x300b7)
#define PMDAS (*(volatile int *)0x300b8) // Program Memory Breakpoint Address Start #1
#define PMDAE (*(volatile int *)0x300b9) // Program Memory Breakpoint Address Start #1
#define D2IC (*(volatile int *)0x300bc)
#define D2ID (*(volatile int *)0x300bd)
#define EMUN (*(volatile int *)0x300ae) // Number of Breakpoints before EMU interrupt

// IOP registers for SDRAM controller
#define SDCTL (*(volatile ST_SDCTL *)0x1800) // SDRAM Control Register
#define EPCTL (*(volatile ST_EPCTL *)0x1801) // External Port Global Control Register
#define SDRRC (*(volatile ST_SDRRC *)0x1802) // SDRAM Refresh Rate Control Register
#define SDSTAT (*(volatile ST_SDSTAT *)0x1803) // SDRAM Status Register

#define BMAX (*(volatile int *)0x180d) // Bus time-out maximum
#define BCNT (*(volatile int *)0x180e) // Bus time-out counter
#define SYSTAT (*(volatile ST_SYSTAT *)0x180f) // System Shared Bus Status Register

#define AMICTL0 (*(volatile ST_AMICTL *)0x1804) // Asynchronous Memory Interface Control Register for Bank 1
#define AMICTL1 (*(volatile ST_AMICTL *)0x1805) // Asynchronous Memory Interface Control Register for Bank 2
#define AMICTL2 (*(volatile ST_AMICTL *)0x1806) // Asynchronous Memory Interface Control Register for Bank 3
#define AMICTL3 (*(volatile ST_AMICTL *)0x1807) // Asynchronous Memory Interface Control Register for Bank 4
#define AMISTAT (*(volatile ST_AMISTAT *)0x180a) // Asynchronous Memory Interface Status Register

//DMA address registers
#define DMAC0 (*(volatile ST_DMAC *)0x180b) // External Port DMA Channel 0 Control Register
#define DMAC1 (*(volatile ST_DMAC *)0x180c) // External Port DMA Channel 1 Control Register

#define EIEP0 (*(volatile int *)0x1820) // External Port DMA external index address
#define EMEP0 (*(volatile int *)0x1821) // External Port DMA external modifier
#define ECEP0 (*(volatile int *)0x1822) // External Port DMA external count
#define IIEP0 (*(volatile int *)0x1823) // External Port DMA internal index address
#define IMEP0 (*(volatile int *)0x1824) // External Port DMA internal modifier
#define ICEP0 (*(volatile int *)0x1825) // External Port DMA internal count
#define CEP0 (*(volatile int *)0x1825) // External Port DMA internal count
#define CPEP0 (*(volatile int *)0x1826) // External Port DMA chain pointer
#define EBEP0 (*(volatile int *)0x1827) // External Port DMA external base address
#define TPEP0 (*(volatile int *)0x1828) // External Port DMA tap pointer
#define ELEP0 (*(volatile int *)0x1829) // External Port DMA external length
#define DFEP0 (*(volatile int *)0x182c) // Data FIFO
#define TFEP0 (*(volatile int *)0x182d) // Tap List FIFO

#define EIEP1 (*(volatile int *)0x1830) // External Port DMA external index address
#define EMEP1 (*(volatile int *)0x1831) // External Port DMA external modifier
#define ECEP1 (*(volatile int *)0x1832) // External Port DMA external count
#define IIEP1 (*(volatile int *)0x1833) // External Port DMA internal index address
#define IMEP1 (*(volatile int *)0x1834) // External Port DMA internal modifier
#define ICEP1 (*(volatile int *)0x1835) // External Port DMA internal count
#define CEP1 (*(volatile int *)0x1835) // External Port DMA internal count
#define CPEP1 (*(volatile int *)0x1836) // External Port DMA chain pointer
#define EBEP1 (*(volatile int *)0x1837) // External Port DMA external base address
#define TPEP1 (*(volatile int *)0x1838) // External Port DMA tap pointer
#define ELEP1 (*(volatile int *)0x1839) // External Port DMA external length
#define DFEP1 (*(volatile int *)0x183c) // Data FIFO
#define TFEP1 (*(volatile int *)0x183d) // Tap List FIFO

// SPORT
#define SPERRSTAT (*(volatile ST_SPERRSTAT *)0x2300) // SPORT Global Interrupt Status Register

// Serial Port registers (SP01)
#define SPCTL0 (*(volatile ST_SPCTL *)0xc00) // SPORT 0 control register
#define SPCTL1 (*(volatile ST_SPCTL *)0xc01) // SPORT 1 control register
#define DIV0 (*(volatile ST_DIV *)0xc02) // SPORT 0 divisor for transmit/receive SCLK0 and FS0
#define DIV1 (*(volatile ST_DIV *)0xc03) // SPORT 1 divisor for transmit/receive SCLK1 and FS1
#define SPMCTL0 (*(volatile ST_SPMCTL *)0xc04) // SPORT 0 Multichannel Control Register

// MT and MR registers are included here for code compatibility
#define MT0CS0 (*(volatile int *)0xc05) // SPORT 0 multichannel tx select, channels 31 - 0
#define MT0CS1 (*(volatile int *)0xc06) // SPORT 0 multichannel tx select, channels 63 - 32
#define MT0CS2 (*(volatile int *)0xc07) // SPORT 0 multichannel tx select, channels 95 - 64
#define MT0CS3 (*(volatile int *)0xc08) // SPORT 0 multichannel tx select, channels 127 - 96
#define MR1CS0 (*(volatile int *)0xc09) // SPORT 1 multichannel rx select, channels 31 - 0
#define MR1CS1 (*(volatile int *)0xc0A) // SPORT 1 multichannel rx select, channels 63 - 32
#define MR1CS2 (*(volatile int *)0xc0B) // SPORT 1 multichannel rx select, channels 95 - 64
#define MR1CS3 (*(volatile int *)0xc0C) // SPORT 1 multichannel rx select, channels 127 - 96
#define MT0CCS0 (*(volatile int *)0xc0D) // SPORT 0 multichannel tx compand select, channels 31 - 0
#define MT0CCS1 (*(volatile int *)0xc0E) // SPORT 0 multichannel tx compand select, channels 63 - 32
#define MT0CCS2 (*(volatile int *)0xc0F) // SPORT 0 multichannel tx compand select, channels 95 - 64
#define MT0CCS3 (*(volatile int *)0xc10) // SPORT 0 multichannel tx compand select, channels 127 - 96
#define MR1CCS0 (*(volatile int *)0xc11) // SPORT 1 multichannel rx compand select, channels 31 - 0
#define MR1CCS1 (*(volatile int *)0xc12) // SPORT 1 multichannel rx compand select, channels 63 - 32
#define MR1CCS2 (*(volatile int *)0xc13) // SPORT 1 multichannel rx compand select, channels 95 - 64
#define MR1CCS3 (*(volatile int *)0xc14) // SPORT 1 multichannel rx compand select, channels 127 - 96

#define SPCNT0 (*(volatile int *)0xc15) // SPORT Count register - status information for internal clock and fs
#define SPCNT1 (*(volatile int *)0xc16) // SPORT Count register - status information for internal clock and fs
#define SPMCTL1 (*(volatile ST_SPMCTL *)0xc17) // SPORT 1 Multichannel Control Register
#define SPERRCTL0 (*(volatile ST_SPERRCTL *)0xc18) // SPORT 0 Error Interrupt Control Register
#define SPERRCTL1 (*(volatile ST_SPERRCTL *)0xc19) // SPORT 1 Error Interrupt Control Register

// SPORT TDM registers - Naming changed since the direction is programmable now
#define SP0CS0 (*(volatile int *)0xc05) // SPORT 0 multichannel select, channels 31 - 0
#define SP0CS1 (*(volatile int *)0xc06) // SPORT 0 multichannel select, channels 63 - 32
#define SP0CS2 (*(volatile int *)0xc07) // SPORT 0 multichannel select, channels 95 - 64
#define SP0CS3 (*(volatile int *)0xc08) // SPORT 0 multichannel select, channels 127 - 96
#define SP1CS0 (*(volatile int *)0xc09) // SPORT 1 multichannel select, channels 31 - 0
#define SP1CS1 (*(volatile int *)0xc0A) // SPORT 1 multichannel select, channels 63 - 32
#define SP1CS2 (*(volatile int *)0xc0B) // SPORT 1 multichannel select, channels 95 - 64
#define SP1CS3 (*(volatile int *)0xc0C) // SPORT 1 multichannel select, channels 127 - 96
#define SP0CCS0 (*(volatile int *)0xc0D) // SPORT 0 multichannel compand select, channels 31 - 0
#define SP0CCS1 (*(volatile int *)0xc0E) // SPORT 0 multichannel compand select, channels 63 - 32
#define SP0CCS2 (*(volatile int *)0xc0F) // SPORT 0 multichannel compand select, channels 95 - 64
#define SP0CCS3 (*(volatile int *)0xc10) // SPORT 0 multichannel compand select, channels 127 - 96
#define SP1CCS0 (*(volatile int *)0xc11) // SPORT 1 multichannel compand select, channels 31 - 0
#define SP1CCS1 (*(volatile int *)0xc12) // SPORT 1 multichannel compand select, channels 63 - 32
#define SP1CCS2 (*(volatile int *)0xc13) // SPORT 1 multichannel compand select, channels 95 - 64
#define SP1CCS3 (*(volatile int *)0xc14) // SPORT 1 multichannel compand select, channels 127 - 96

#define IISP0A (*(volatile int *)0xc40) // Internal memory DMA address
#define IMSP0A (*(volatile int *)0xc41) // Internal memory DMA access modifier
#define CSP0A (*(volatile int *)0xc42) // Contains number of DMA transfers remaining
#define CPSP0A (*(volatile int *)0xc43) // Points to next DMA parameters
#define IISP0B (*(volatile int *)0xc44) // Internal memory DMA address
#define IMSP0B (*(volatile int *)0xc45) // Internal memory DMA access modifier
#define CSP0B (*(volatile int *)0xc46) // Contains number of DMA transfers remaining
#define CPSP0B (*(volatile int *)0xc47) // Points to next DMA parameters
#define IISP1A (*(volatile int *)0xc48) // Internal memory DMA address
#define IMSP1A (*(volatile int *)0xc49) // Internal memory DMA access modifier
#define CSP1A (*(volatile int *)0xc4A) // Contains number of DMA transfers remaining
#define CPSP1A (*(volatile int *)0xc4B) // Points to next DMA parameters
#define IISP1B (*(volatile int *)0xc4C) // Internal memory DMA address
#define IMSP1B (*(volatile int *)0xc4D) // Internal memory DMA access modifier
#define CSP1B (*(volatile int *)0xc4E) // Contains number of DMA transfers remaining
#define CPSP1B (*(volatile int *)0xc4F) // Points to next DMA parameters
#define TXSP0A (*(volatile int *)0xc60) // SPORT 0A transmit data register
#define RXSP0A (*(volatile int *)0xc61) // SPORT 0A receive data register
#define TXSP0B (*(volatile int *)0xc62) // SPORT 0B transmit data register
#define RXSP0B (*(volatile int *)0xc63) // SPORT 0B receive data register
#define TXSP1A (*(volatile int *)0xc64) // SPORT 1A transmit data register
#define RXSP1A (*(volatile int *)0xc65) // SPORT 1A receive data register
#define TXSP1B (*(volatile int *)0xc66) // SPORT 1B transmit data register
#define RXSP1B (*(volatile int *)0xc67) // SPORT 1B receive data register

// Serial Port registers (SP23)
#define SPCTL2 (*(volatile ST_SPCTL *)0x400) // SPORT 2 control register
#define SPCTL3 (*(volatile ST_SPCTL *)0x401) // SPORT 3 control register
#define DIV2 (*(volatile ST_DIV *)0x402) // SPORT 2 divisor for transmit/receive SCLK2 and FS2
#define DIV3 (*(volatile ST_DIV *)0x403) // SPORT 3 divisor for transmit/receive SCLK3 and FS3
#define SPMCTL2 (*(volatile ST_SPMCTL *)0x404) // SPORT 2 Multichannel Control Register

// MT and MR registers are included here for code compatibility
#define MT2CS0 (*(volatile int *)0x405) // SPORT 2 multichannel tx select, channels 31 - 0
#define MT2CS1 (*(volatile int *)0x406) // SPORT 2 multichannel tx select, channels 63 - 32
#define MT2CS2 (*(volatile int *)0x407) // SPORT 2 multichannel tx select, channels 95 - 64
#define MT2CS3 (*(volatile int *)0x408) // SPORT 2 multichannel tx select, channels 127 - 96
#define MR3CS0 (*(volatile int *)0x409) // SPORT 3 multichannel rx select, channels 31 - 0
#define MR3CS1 (*(volatile int *)0x40A) // SPORT 3 multichannel rx select, channels 63 - 32
#define MR3CS2 (*(volatile int *)0x40B) // SPORT 3 multichannel rx select, channels 95 - 64
#define MR3CS3 (*(volatile int *)0x40C) // SPORT 3 multichannel rx select, channels 127 - 96
#define MT2CCS0 (*(volatile int *)0x40D) // SPORT 2 multichannel tx compand select, channels 31 - 0
#define MT2CCS1 (*(volatile int *)0x40E) // SPORT 2 multichannel tx compand select, channels 63 - 32
#define MT2CCS2 (*(volatile int *)0x40F) // SPORT 2 multichannel tx compand select, channels 95 - 64
#define MT2CCS3 (*(volatile int *)0x410) // SPORT 2 multichannel tx compand select, channels 127 - 96
#define MR3CCS0 (*(volatile int *)0x411) // SPORT 3 multichannel rx compand select, channels 31 - 0
#define MR3CCS1 (*(volatile int *)0x412) // SPORT 3 multichannel rx compand select, channels 63 - 32
#define MR3CCS2 (*(volatile int *)0x413) // SPORT 3 multichannel rx compand select, channels 95 - 64
#define MR3CCS3 (*(volatile int *)0x414) // SPORT 3 multichannel rx compand select, channels 127 - 96

#define SPCNT2 (*(volatile int *)0x415) // SPORT Count register - status information for internal clock and fs
#define SPCNT3 (*(volatile int *)0x416) // SPORT Count register - status information for internal clock and fs
#define SPMCTL3 (*(volatile ST_SPMCTL *)0x417) // SPORT 3 Multichannel Control Register
#define SPERRCTL2 (*(volatile ST_SPERRCTL *)0x418) // SPORT 2 Error Interrupt Control Register
#define SPERRCTL3 (*(volatile ST_SPERRCTL *)0x419) // SPORT 3 Error Interrupt Control Register

// SPORT TDM registers - Naming changed since the direction is programmable now
#define SP2CS0 (*(volatile int *)0x405) // SPORT 2 multichannel select, channels 31 - 0
#define SP2CS1 (*(volatile int *)0x406) // SPORT 2 multichannel select, channels 63 - 32
#define SP2CS2 (*(volatile int *)0x407) // SPORT 2 multichannel select, channels 95 - 64
#define SP2CS3 (*(volatile int *)0x408) // SPORT 2 multichannel select, channels 127 - 96
#define SP3CS0 (*(volatile int *)0x409) // SPORT 3 multichannel select, channels 31 - 0
#define SP3CS1 (*(volatile int *)0x40A) // SPORT 3 multichannel select, channels 63 - 32
#define SP3CS2 (*(volatile int *)0x40B) // SPORT 3 multichannel select, channels 95 - 64
#define SP3CS3 (*(volatile int *)0x40C) // SPORT 3 multichannel select, channels 127 - 96
#define SP2CCS0 (*(volatile int *)0x40D) // SPORT 2 multichannel compand select, channels 31 - 0
#define SP2CCS1 (*(volatile int *)0x40E) // SPORT 2 multichannel compand select, channels 63 - 32
#define SP2CCS2 (*(volatile int *)0x40F) // SPORT 2 multichannel compand select, channels 95 - 64
#define SP2CCS3 (*(volatile int *)0x410) // SPORT 2 multichannel compand select, channels 127 - 96
#define SP3CCS0 (*(volatile int *)0x411) // SPORT 3 multichannel compand select, channels 31 - 0
#define SP3CCS1 (*(volatile int *)0x412) // SPORT 3 multichannel compand select, channels 63 - 32
#define SP3CCS2 (*(volatile int *)0x413) // SPORT 3 multichannel compand select, channels 95 - 64
#define SP3CCS3 (*(volatile int *)0x414) // SPORT 3 multichannel compand select, channels 127 - 96

#define IISP2A (*(volatile int *)0x440) // Internal memory DMA address
#define IMSP2A (*(volatile int *)0x441) // Internal memory DMA access modifier
#define CSP2A (*(volatile int *)0x442) // Contains number of DMA transfers remaining
#define CPSP2A (*(volatile int *)0x443) // Points to next DMA parameters
#define IISP2B (*(volatile int *)0x444) // Internal memory DMA address
#define IMSP2B (*(volatile int *)0x445) // Internal memory DMA access modifier
#define CSP2B (*(volatile int *)0x446) // Contains number of DMA transfers remaining
#define CPSP2B (*(volatile int *)0x447) // Points to next DMA parameters
#define IISP3A (*(volatile int *)0x448) // Internal memory DMA address
#define IMSP3A (*(volatile int *)0x449) // Internal memory DMA access modifier
#define CSP3A (*(volatile int *)0x44A) // Contains number of DMA transfers remaining
#define CPSP3A (*(volatile int *)0x44B) // Points to next DMA parameters
#define IISP3B (*(volatile int *)0x44C) // Internal memory DMA address
#define IMSP3B (*(volatile int *)0x44D) // Internal memory DMA access modifier
#define CSP3B (*(volatile int *)0x44E) // Contains number of DMA transfers remaining
#define CPSP3B (*(volatile int *)0x44F) // Points to next DMA parameters
#define TXSP2A (*(volatile int *)0x460) // SPORT 2A transmit data register
#define RXSP2A (*(volatile int *)0x461) // SPORT 2A receive data register
#define TXSP2B (*(volatile int *)0x462) // SPORT 2B transmit data register
#define RXSP2B (*(volatile int *)0x463) // SPORT 2B receive data register
#define TXSP3A (*(volatile int *)0x464) // SPORT 3A transmit data register
#define RXSP3A (*(volatile int *)0x465) // SPORT 3A receive data register
#define TXSP3B (*(volatile int *)0x466) // SPORT 3B transmit data register
#define RXSP3B (*(volatile int *)0x467) // SPORT 3B receive data register

// Serial Port registers (SP45)
#define SPCTL4 (*(volatile ST_SPCTL *)0x800) // SPORT 4 control register
#define SPCTL5 (*(volatile ST_SPCTL *)0x801) // SPORT 5 control register
#define DIV4 (*(volatile ST_DIV *)0x802) // SPORT 4 divisor for transmit/receive SCLK4 and FS4
#define DIV5 (*(volatile ST_DIV *)0x803) // SPORT 5 divisor for transmit/receive SCLK5 and FS5
#define SPMCTL4 (*(volatile ST_SPMCTL *)0x804) // SPORT 4 Multichannel Control Register

// MT and MR registers are included here for code compatibility
#define MT4CS0 (*(volatile int *)0x805) // SPORT 4 multichannel tx select, channels 31 - 0
#define MT4CS1 (*(volatile int *)0x806) // SPORT 4 multichannel tx select, channels 63 - 32
#define MT4CS2 (*(volatile int *)0x807) // SPORT 4 multichannel tx select, channels 95 - 64
#define MT4CS3 (*(volatile int *)0x808) // SPORT 4 multichannel tx select, channels 127 - 96
#define MR5CS0 (*(volatile int *)0x809) // SPORT 5 multichannel rx select, channels 31 - 0
#define MR5CS1 (*(volatile int *)0x80A) // SPORT 5 multichannel rx select, channels 63 - 32
#define MR5CS2 (*(volatile int *)0x80B) // SPORT 5 multichannel rx select, channels 95 - 64
#define MR5CS3 (*(volatile int *)0x80C) // SPORT 5 multichannel rx select, channels 127 - 96
#define MT4CCS0 (*(volatile int *)0x80D) // SPORT 4 multichannel tx compand select, channels 31 - 0
#define MT4CCS1 (*(volatile int *)0x80E) // SPORT 4 multichannel tx compand select, channels 63 - 32
#define MT4CCS2 (*(volatile int *)0x80F) // SPORT 4 multichannel tx compand select, channels 95 - 64
#define MT4CCS3 (*(volatile int *)0x810) // SPORT 4 multichannel tx compand select, channels 127 - 96
#define MR5CCS0 (*(volatile int *)0x811) // SPORT 5 multichannel rx compand select, channels 31 - 0
#define MR5CCS1 (*(volatile int *)0x812) // SPORT 5 multichannel rx compand select, channels 63 - 32
#define MR5CCS2 (*(volatile int *)0x813) // SPORT 5 multichannel rx compand select, channels 95 - 64
#define MR5CCS3 (*(volatile int *)0x814) // SPORT 5 multichannel rx compand select, channels 127 - 96

#define SPCNT4 (*(volatile int *)0x815) // SPORT Count register - status information for internal clock and fs
#define SPCNT5 (*(volatile int *)0x816) // SPORT Count register - status information for internal clock and fs
#define SPMCTL5 (*(volatile ST_SPMCTL *)0x817) // SPORT 5 Multichannel Control Register
#define SPERRCTL4 (*(volatile ST_SPERRCTL *)0x818) // SPORT 4 Error Interrupt Control Register
#define SPERRCTL5 (*(volatile ST_SPERRCTL *)0x819) // SPORT 5 Error Interrupt Control Register

// SPORT TDM registers - Naming changed since the direction is programmable now
#define SP4CS0 (*(volatile int *)0x805) // SPORT 4 multichannel select, channels 31 - 0
#define SP4CS1 (*(volatile int *)0x806) // SPORT 4 multichannel select, channels 63 - 32
#define SP4CS2 (*(volatile int *)0x807) // SPORT 4 multichannel select, channels 95 - 64
#define SP4CS3 (*(volatile int *)0x808) // SPORT 4 multichannel select, channels 127 - 96
#define SP5CS0 (*(volatile int *)0x809) // SPORT 5 multichannel select, channels 31 - 0
#define SP5CS1 (*(volatile int *)0x80A) // SPORT 5 multichannel select, channels 63 - 32
#define SP5CS2 (*(volatile int *)0x80B) // SPORT 5 multichannel select, channels 95 - 64
#define SP5CS3 (*(volatile int *)0x80C) // SPORT 5 multichannel select, channels 127 - 96
#define SP4CCS0 (*(volatile int *)0x80D) // SPORT 4 multichannel compand select, channels 31 - 0
#define SP4CCS1 (*(volatile int *)0x80E) // SPORT 4 multichannel compand select, channels 63 - 32
#define SP4CCS2 (*(volatile int *)0x80F) // SPORT 4 multichannel compand select, channels 95 - 64
#define SP4CCS3 (*(volatile int *)0x810) // SPORT 4 multichannel compand select, channels 127 - 96
#define SP5CCS0 (*(volatile int *)0x811) // SPORT 5 multichannel compand select, channels 31 - 0
#define SP5CCS1 (*(volatile int *)0x812) // SPORT 5 multichannel compand select, channels 63 - 32
#define SP5CCS2 (*(volatile int *)0x813) // SPORT 5 multichannel compand select, channels 95 - 64
#define SP5CCS3 (*(volatile int *)0x814) // SPORT 5 multichannel compand select, channels 127 - 96

#define IISP4A (*(volatile int *)0x840) // Internal memory DMA address
#define IMSP4A (*(volatile int *)0x841) // Internal memory DMA access modifier
#define CSP4A (*(volatile int *)0x842) // Contains number of DMA transfers remaining
#define CPSP4A (*(volatile int *)0x843) // Points to next DMA parameters
#define IISP4B (*(volatile int *)0x844) // Internal memory DMA address
#define IMSP4B (*(volatile int *)0x845) // Internal memory DMA access modifier
#define CSP4B (*(volatile int *)0x846) // Contains number of DMA transfers remaining
#define CPSP4B (*(volatile int *)0x847) // Points to next DMA parameters
#define IISP5A (*(volatile int *)0x848) // Internal memory DMA address
#define IMSP5A (*(volatile int *)0x849) // Internal memory DMA access modifier
#define CSP5A (*(volatile int *)0x84A) // Contains number of DMA transfers remaining
#define CPSP5A (*(volatile int *)0x84B) // Points to next DMA parameters
#define IISP5B (*(volatile int *)0x84C) // Internal memory DMA address
#define IMSP5B (*(volatile int *)0x84D) // Internal memory DMA access modifier
#define CSP5B (*(volatile int *)0x84E) // Contains number of DMA transfers remaining
#define CPSP5B (*(volatile int *)0x84F) // Points to next DMA parameters
#define TXSP4A (*(volatile int *)0x860) // SPORT 4A transmit data register
#define RXSP4A (*(volatile int *)0x861) // SPORT 4A receive data register
#define TXSP4B (*(volatile int *)0x862) // SPORT 4B transmit data register
#define RXSP4B (*(volatile int *)0x863) // SPORT 4B receive data register
#define TXSP5A (*(volatile int *)0x864) // SPORT 5A transmit data register
#define RXSP5A (*(volatile int *)0x865) // SPORT 5A receive data register
#define TXSP5B (*(volatile int *)0x866) // SPORT 5B transmit data register
#define RXSP5B (*(volatile int *)0x867) // SPORT 5B receive data register

// SP67
#define SPCTL6 (*(volatile ST_SPCTL *)0x4800) // SPORT 6 control register
#define SPCTL7 (*(volatile ST_SPCTL *)0x4801) // SPORT 7 control register
#define DIV6 (*(volatile ST_DIV *)0x4802) // SPORT 6 divisor for transmit/receive SCLK4 and FS4
#define DIV7 (*(volatile ST_DIV *)0x4803) // SPORT 7 divisor for transmit/receive SCLK5 and FS5
#define SPMCTL6 (*(volatile ST_SPMCTL *)0x4804) // SPORT 6 Multichannel Control Register

// MT and MR registers are included here for code compatibility
#define MT6CS0 (*(volatile int *)0x4805) // SPORT 6 multichannel tx select, channels 31 - 0
#define MT6CS1 (*(volatile int *)0x4806) // SPORT 6 multichannel tx select, channels 63 - 32
#define MT6CS2 (*(volatile int *)0x4807) // SPORT 6 multichannel tx select, channels 95 - 64
#define MT6CS3 (*(volatile int *)0x4808) // SPORT 6 multichannel tx select, channels 127 - 96
#define MR7CS0 (*(volatile int *)0x4809) // SPORT 7 multichannel rx select, channels 31 - 0
#define MR7CS1 (*(volatile int *)0x480A) // SPORT 7 multichannel rx select, channels 63 - 32
#define MR7CS2 (*(volatile int *)0x480B) // SPORT 7 multichannel rx select, channels 95 - 64
#define MR7CS3 (*(volatile int *)0x480C) // SPORT 7 multichannel rx select, channels 127 - 96
#define MT6CCS0 (*(volatile int *)0x480D) // SPORT 6 multichannel tx compand select, channels 31 - 0
#define MT6CCS1 (*(volatile int *)0x480E) // SPORT 6 multichannel tx compand select, channels 63 - 32
#define MT6CCS2 (*(volatile int *)0x480F) // SPORT 6 multichannel tx compand select, channels 95 - 64
#define MT6CCS3 (*(volatile int *)0x4810) // SPORT 6 multichannel tx compand select, channels 127 - 96
#define MR7CCS0 (*(volatile int *)0x4811) // SPORT 7 multichannel rx compand select, channels 31 - 0
#define MR7CCS1 (*(volatile int *)0x4812) // SPORT 7 multichannel rx compand select, channels 63 - 32
#define MR7CCS2 (*(volatile int *)0x4813) // SPORT 7 multichannel rx compand select, channels 95 - 64
#define MR7CCS3 (*(volatile int *)0x4814) // SPORT 7 multichannel rx compand select, channels 127 - 96

#define SPCNT6 (*(volatile int *)0x4815) // SPORT Count register - status information for internal clock and fs
#define SPCNT7 (*(volatile int *)0x4816) // SPORT Count register - status information for internal clock and fs
#define SPMCTL7 (*(volatile ST_SPMCTL *)0x4817) // SPORT 7 Multichannel Control Register
#define SPERRCTL6 (*(volatile ST_SPERRCTL *)0x4818) // SPORT 6 Error Interrupt Control Register
#define SPERRCTL7 (*(volatile ST_SPERRCTL *)0x4819) // SPORT 7 Error Interrupt Control Register

// SPORT TDM registers - Naming changed since the direction is programmable now
#define SP6CS0 (*(volatile int *)0x4805) // SPORT 6 multichannel select, channels 31 - 0
#define SP6CS1 (*(volatile int *)0x4806) // SPORT 6 multichannel select, channels 63 - 32
#define SP6CS2 (*(volatile int *)0x4807) // SPORT 6 multichannel select, channels 95 - 64
#define SP6CS3 (*(volatile int *)0x4808) // SPORT 6 multichannel select, channels 127 - 96
#define SP7CS0 (*(volatile int *)0x4809) // SPORT 7 multichannel select, channels 31 - 0
#define SP7CS1 (*(volatile int *)0x480A) // SPORT 7 multichannel select, channels 63 - 32
#define SP7CS2 (*(volatile int *)0x480B) // SPORT 7 multichannel select, channels 95 - 64
#define SP7CS3 (*(volatile int *)0x480C) // SPORT 7 multichannel select, channels 127 - 96
#define SP6CCS0 (*(volatile int *)0x480D) // SPORT 6 multichannel compand select, channels 31 - 0
#define SP6CCS1 (*(volatile int *)0x480E) // SPORT 6 multichannel compand select, channels 63 - 32
#define SP6CCS2 (*(volatile int *)0x480F) // SPORT 6 multichannel compand select, channels 95 - 64
#define SP6CCS3 (*(volatile int *)0x4810) // SPORT 6 multichannel compand select, channels 127 - 96
#define SP7CCS0 (*(volatile int *)0x4811) // SPORT 7 multichannel compand select, channels 31 - 0
#define SP7CCS1 (*(volatile int *)0x4812) // SPORT 7 multichannel compand select, channels 63 - 32
#define SP7CCS2 (*(volatile int *)0x4813) // SPORT 7 multichannel compand select, channels 95 - 64
#define SP7CCS3 (*(volatile int *)0x4814) // SPORT 7 multichannel compand select, channels 127 - 96

#define IISP6A (*(volatile int *)0x4840) // Internal memory DMA address
#define IMSP6A (*(volatile int *)0x4841) // Internal memory DMA access modifier
#define CSP6A (*(volatile int *)0x4842) // Contains number of DMA transfers remaining
#define CPSP6A (*(volatile int *)0x4843) // Points to next DMA parameters
#define IISP6B (*(volatile int *)0x4844) // Internal memory DMA address
#define IMSP6B (*(volatile int *)0x4845) // Internal memory DMA access modifier
#define CSP6B (*(volatile int *)0x4846) // Contains number of DMA transfers remaining
#define CPSP6B (*(volatile int *)0x4847) // Points to next DMA parameters
#define IISP7A (*(volatile int *)0x4848) // Internal memory DMA address
#define IMSP7A (*(volatile int *)0x4849) // Internal memory DMA access modifier
#define CSP7A (*(volatile int *)0x484A) // Contains number of DMA transfers remaining
#define CPSP7A (*(volatile int *)0x484B) // Points to next DMA parameters
#define IISP7B (*(volatile int *)0x484C) // Internal memory DMA address
#define IMSP7B (*(volatile int *)0x484D) // Internal memory DMA access modifier
#define CSP7B (*(volatile int *)0x484E) // Contains number of DMA transfers remaining
#define CPSP7B (*(volatile int *)0x484F) // Points to next DMA parameters
#define TXSP6A (*(volatile int *)0x4860) // SPORT 4A transmit data register
#define RXSP6A (*(volatile int *)0x4861) // SPORT 4A receive data register
#define TXSP6B (*(volatile int *)0x4862) // SPORT 4B transmit data register
#define RXSP6B (*(volatile int *)0x4863) // SPORT 4B receive data register
#define TXSP7A (*(volatile int *)0x4864) // SPORT 5A transmit data register
#define RXSP7A (*(volatile int *)0x4865) // SPORT 5A receive data register
#define TXSP7B (*(volatile int *)0x4866) // SPORT 5B transmit data register
#define RXSP7B (*(volatile int *)0x4867) // SPORT 5B receive data register

// SPI Registers
#define SPICTL (*(volatile ST_SPICTL *)0x1000) // SPI Control Register
#define SPIFLG (*(volatile ST_SPIFLG *)0x1001) // SPI Flag register
#define SPISTAT (*(volatile ST_SPISTAT *)0x1002) // SPI Status register
#define TXSPI (*(volatile int *)0x1003) // SPI transmit data register
#define RXSPI (*(volatile int *)0x1004) // SPI receive data register
#define SPIBAUD (*(volatile ST_SPIBAUD *)0x1005) // SPI baud setup register
#define RXSPI_SHADOW (*(volatile int *)0x1006) // SPI receive data shadow register
#define IISPI (*(volatile int *)0x1080) // Internal memory DMA address
#define IMSPI (*(volatile int *)0x1081) // Internal memory DMA access modifier
#define CSPI (*(volatile int *)0x1082) // Contains number of DMA transfers remaining
#define CPSPI (*(volatile int *)0x1083) // Points to next DMA parameters
#define SPIDMAC (*(volatile ST_SPIDMAC *)0x1084) // SPI DMA control register

// SPIB Registers: This SPI port is routed through the DAI
#define SPICTLB (*(volatile ST_SPICTL *)0x2800) // SPIB Control Register
#define SPIFLGB (*(volatile ST_SPIFLG *)0x2801) // SPIB Flag register
#define SPISTATB (*(volatile ST_SPISTAT *)0x2802) // SPIB Status register
#define TXSPIB (*(volatile int *)0x2803) // SPIB transmit data register
#define RXSPIB (*(volatile int *)0x2804) // SPIB receive data register
#define SPIBAUDB (*(volatile ST_SPIBAUD *)0x2805) // SPIB baud setup register
#define RXSPIB_SHADOW (*(volatile int *)0x2806) // SPIB receive data shadow register
#define IISPIB (*(volatile int *)0x2880) // Internal memory DMA address
#define IMSPIB (*(volatile int *)0x2881) // Internal memory DMA access modifier
#define CSPIB (*(volatile int *)0x2882) // Contains number of DMA transfers remaining
#define CPSPIB (*(volatile int *)0x2883) // Points to next DMA parameters
#define SPIDMACB (*(volatile ST_SPIDMAC *)0x2884) // SPIB DMA control register

// Timer Registers
#define TMSTAT (*(volatile ST_TMSTAT *)0x1400) // GP Timer Status Register
// TMxSTAT all address the same register (TMSTAT)
#define TM0STAT (*(volatile ST_TMSTAT *)0x1400) // GP Timer 0 Status register
#define TM0CTL (*(volatile ST_TMCTL *)0x1401) // GP Timer 0 Control register
#define TM0CNT (*(volatile int *)0x1402) // GP Timer 0 Count register
#define TM0PRD (*(volatile int *)0x1403) // GP Timer 0 Period register
#define TM0W (*(volatile int *)0x1404) // GP Timer 0 Width register
#define TM1STAT (*(volatile ST_TMSTAT *)0x1408) // GP Timer 1 Status register
#define TM1CTL (*(volatile ST_TMCTL *)0x1409) // GP Timer 1 Control register
#define TM1CNT (*(volatile int *)0x140a) // GP Timer 1 Count register
#define TM1PRD (*(volatile int *)0x140b) // GP Timer 1 Period register
#define TM1W (*(volatile int *)0x140c) // GP Timer 1 Width register
#define TM2STAT (*(volatile ST_TMSTAT *)0x1410) // GP Timer 2 Status register
#define TM2CTL (*(volatile ST_TMCTL *)0x1411) // GP Timer 2 Control register
#define TM2CNT (*(volatile int *)0x1412) // GP Timer 2 Count register
#define TM2PRD (*(volatile int *)0x1413) // GP Timer 2 Period register
#define TM2W (*(volatile int *)0x1414) // GP Timer 2 Width register

// POWER MGT Registers
#define PMCTL (*(volatile ST_PMCTL *)0x2000) // Power management control register
#define ROMID (*(volatile int *)0x20FF)

// DAI Registers

// DMA Parameter Registers
#define IDP_DMA_I0 (*(volatile int *)0x2400) // IDP DMA Channel 0 Index Register
#define IDP_DMA_I1 (*(volatile int *)0x2401) // IDP DMA Channel 1 Index Register
#define IDP_DMA_I2 (*(volatile int *)0x2402) // IDP DMA Channel 2 Index Register
#define IDP_DMA_I3 (*(volatile int *)0x2403) // IDP DMA Channel 3 Index Register
#define IDP_DMA_I4 (*(volatile int *)0x2404) // IDP DMA Channel 4 Index Register
#define IDP_DMA_I5 (*(volatile int *)0x2405) // IDP DMA Channel 5 Index Register
#define IDP_DMA_I6 (*(volatile int *)0x2406) // IDP DMA Channel 6 Index Register
#define IDP_DMA_I7 (*(volatile int *)0x2407) // IDP DMA Channel 7 Index Register
#define IDP_DMA_I0A (*(volatile int *)0x2408) // IDP DMA Channel 0 Index A Register for Ping Pong DMA
#define IDP_DMA_I1A (*(volatile int *)0x2409) // IDP DMA Channel 1 Index A Register for Ping Pong DMA
#define IDP_DMA_I2A (*(volatile int *)0x240a) // IDP DMA Channel 2 Index A Register for Ping Pong DMA
#define IDP_DMA_I3A (*(volatile int *)0x240b) // IDP DMA Channel 3 Index A Register for Ping Pong DMA
#define IDP_DMA_I4A (*(volatile int *)0x240c) // IDP DMA Channel 4 Index A Register for Ping Pong DMA
#define IDP_DMA_I5A (*(volatile int *)0x240d) // IDP DMA Channel 5 Index A Register for Ping Pong DMA
#define IDP_DMA_I6A (*(volatile int *)0x240e) // IDP DMA Channel 6 Index A Register for Ping Pong DMA
#define IDP_DMA_I7A (*(volatile int *)0x240f) // IDP DMA Channel 7 Index A Register for Ping Pong DMA
#define IDP_DMA_I0B (*(volatile int *)0x2418) // IDP DMA Channel 0 Index B Register for Ping Pong DMA
#define IDP_DMA_I1B (*(volatile int *)0x2419) // IDP DMA Channel 1 Index B Register for Ping Pong DMA
#define IDP_DMA_I2B (*(volatile int *)0x241a) // IDP DMA Channel 2 Index B Register for Ping Pong DMA
#define IDP_DMA_I3B (*(volatile int *)0x241b) // IDP DMA Channel 3 Index B Register for Ping Pong DMA
#define IDP_DMA_I4B (*(volatile int *)0x241c) // IDP DMA Channel 4 Index B Register for Ping Pong DMA
#define IDP_DMA_I5B (*(volatile int *)0x241d) // IDP DMA Channel 5 Index B Register for Ping Pong DMA
#define IDP_DMA_I6B (*(volatile int *)0x241e) // IDP DMA Channel 6 Index B Register for Ping Pong DMA
#define IDP_DMA_I7B (*(volatile int *)0x241f) // IDP DMA Channel 7 Index B Register for Ping Pong DMA
#define IDP_DMA_M0 (*(volatile int *)0x2410) // IDP DMA Channel 0 Modify Register
#define IDP_DMA_M1 (*(volatile int *)0x2411) // IDP DMA Channel 1 Modify Register
#define IDP_DMA_M2 (*(volatile int *)0x2412) // IDP DMA Channel 2 Modify Register
#define IDP_DMA_M3 (*(volatile int *)0x2413) // IDP DMA Channel 3 Modify Register
#define IDP_DMA_M4 (*(volatile int *)0x2414) // IDP DMA Channel 4 Modify Register
#define IDP_DMA_M5 (*(volatile int *)0x2415) // IDP DMA Channel 5 Modify Register
#define IDP_DMA_M6 (*(volatile int *)0x2416) // IDP DMA Channel 6 Modify Register
#define IDP_DMA_M7 (*(volatile int *)0x2417) // IDP DMA Channel 7 Modify Register
#define IDP_DMA_C0 (*(volatile int *)0x2420) // IDP DMA Channel 0 Count Register
#define IDP_DMA_C1 (*(volatile int *)0x2421) // IDP DMA Channel 1 Count Register
#define IDP_DMA_C2 (*(volatile int *)0x2422) // IDP DMA Channel 2 Count Register
#define IDP_DMA_C3 (*(volatile int *)0x2423) // IDP DMA Channel 3 Count Register
#define IDP_DMA_C4 (*(volatile int *)0x2424) // IDP DMA Channel 4 Count Register
#define IDP_DMA_C5 (*(volatile int *)0x2425) // IDP DMA Channel 5 Count Register
#define IDP_DMA_C6 (*(volatile int *)0x2426) // IDP DMA Channel 6 Count Register
#define IDP_DMA_C7 (*(volatile int *)0x2427) // IDP DMA Channel 7 Count Register
#define IDP_DMA_PC0 (*(volatile int *)0x2428) // IDP DMA Channel 0 Ping Pong Count Register
#define IDP_DMA_PC1 (*(volatile int *)0x2429) // IDP DMA Channel 1 Ping Pong Count Register
#define IDP_DMA_PC2 (*(volatile int *)0x242a) // IDP DMA Channel 2 Ping Pong Count Register
#define IDP_DMA_PC3 (*(volatile int *)0x242b) // IDP DMA Channel 3 Ping Pong Count Register
#define IDP_DMA_PC4 (*(volatile int *)0x242c) // IDP DMA Channel 4 Ping Pong Count Register
#define IDP_DMA_PC5 (*(volatile int *)0x242d) // IDP DMA Channel 5 Ping Pong Count Register
#define IDP_DMA_PC6 (*(volatile int *)0x242e) // IDP DMA Channel 6 Ping Pong Count Register
#define IDP_DMA_PC7 (*(volatile int *)0x242f) // IDP DMA Channel 7 Ping Pong Count Register

// SRU Registers
#define SRU_CLK0 (*(volatile ST_SRU_CLK0 *)0x2430) // SRU Clock Control Register 0
#define SRU_CLK1 (*(volatile ST_SRU_CLK1 *)0x2431) // SRU Clock Control Register 1
#define SRU_CLK2 (*(volatile ST_SRU_CLK2 *)0x2432) // SRU Clock Control Register 2
#define SRU_CLK3 (*(volatile ST_SRU_CLK3 *)0x2433) // SRU Clock Control Register 3
#define SRU_CLK4 (*(volatile ST_SRU_CLK4 *)0x2434) // SRU Clock Control Register 4
#define SRU_CLK5 (*(volatile ST_SRU_CLK5 *)0x2435) // SRU Clock Control Register 4

#define SRU_DAT0 (*(volatile ST_SRU_DAT0 *)0x2440) // SRU Data Control Register 0
#define SRU_DAT1 (*(volatile ST_SRU_DAT1 *)0x2441) // SRU Data Control Register 1
#define SRU_DAT2 (*(volatile ST_SRU_DAT2 *)0x2442) // SRU Data Control Register 2
#define SRU_DAT3 (*(volatile ST_SRU_DAT3 *)0x2443) // SRU Data Control Register 3
#define SRU_DAT4 (*(volatile ST_SRU_DAT4 *)0x2444) // SRU Data Control Register 4
#define SRU_DAT5 (*(volatile ST_SRU_DAT5 *)0x2445) // SRU Data Control Register 5
#define SRU_DAT6 (*(volatile ST_SRU_DAT6 *)0x2446) // SRU Data Control Register 5

#define SRU_FS0 (*(volatile ST_SRU_FS0 *)0x2450) // SRU FS Control Register 0
#define SRU_FS1 (*(volatile ST_SRU_FS1 *)0x2451) // SRU FS Control Register 1
#define SRU_FS2 (*(volatile ST_SRU_FS2 *)0x2452) // SRU FS Control Register 2
#define SRU_FS3 (*(volatile ST_SRU_FS3 *)0x2453) // SRU FS Control Register 3
#define SRU_FS4 (*(volatile ST_SRU_FS4 *)0x2454) // SRU FS Control Register 3

#define SRU_PIN0 (*(volatile ST_SRU_PIN0 *)0x2460) // SRU Pin Control Register 0
#define SRU_PIN1 (*(volatile ST_SRU_PIN1 *)0x2461) // SRU Pin Control Register 1
#define SRU_PIN2 (*(volatile ST_SRU_PIN2 *)0x2462) // SRU Pin Control Register 2
#define SRU_PIN3 (*(volatile ST_SRU_PIN3 *)0x2463) // SRU Pin Control Register 3
#define SRU_PIN4 (*(volatile ST_SRU_PIN4 *)0x2464) // SRU Pin Control Register 4

#define SRU_EXT_MISCA (*(volatile ST_SRU_MISCA *)0x2470) // SRU External Misc. A Control Register
#define SRU_EXT_MISCB (*(volatile ST_SRU_MISCB *)0x2471) // SRU External Misc. B Control Register

#define SRU_PBEN0 (*(volatile ST_SRU_PBEN0 *)0x2478) // SRU Pin Enable Register 0
#define SRU_PBEN1 (*(volatile ST_SRU_PBEN1 *)0x2479) // SRU Pin Enable Register 1
#define SRU_PBEN2 (*(volatile ST_SRU_PBEN2 *)0x247A) // SRU Pin Enable Register 2
#define SRU_PBEN3 (*(volatile ST_SRU_PBEN3 *)0x247B) // SRU Pin Enable Register 3

#define DAI_PIN_PULLUP (*(volatile ST_SRU_PULLUP *)0x247D) // Controls whether DAI bin buffers have pullups enabled

#define DAI_IRPTL_FE (*(volatile ST_DAI_IRPTL *)0x2480) // DAI Falling Edge Interrupt Latch Register
#define DAI_IRPTL_RE (*(volatile ST_DAI_IRPTL *)0x2481) // DAI Rising Edge Interrupt Latch Register
#define DAI_IRPTL_PRI (*(volatile ST_DAI_IRPTL *)0x2484) // DAI Interrupt Priority Register
#define DAI_IRPTL_H (*(volatile ST_DAI_IRPTL *)0x2488) // DAI High Priority Interrupt Latch Register
#define DAI_IRPTL_L (*(volatile ST_DAI_IRPTL *)0x2489) // DAI Low Priority Interrupt Latch Register
#define DAI_IRPTL_HS (*(volatile ST_DAI_IRPTL *)0x248C) // Shadow DAI High Priority Interrupt Latch Register
#define DAI_IRPTL_LS (*(volatile ST_DAI_IRPTL *)0x248D) // Shadow DAI Low Priority Interrupt Latch Register

#define IDP_CTL (*(volatile ST_IDP_CTL0 *)0x24B0) // IDP Control Register 0
#define IDP_CTL0 (*(volatile ST_IDP_CTL0 *)0x24B0) // IDP Control Register 0
#define IDP_PP_CTL (*(volatile ST_IDP_PP_CTL *)0x24B1) // IDP Parallel Port Control Register
#define IDP_CTL1 (*(volatile ST_IDP_CTL1 *)0x24B2) // IDP Control Register 1

#define DAI_STAT (*(volatile ST_DAI_STAT *)0x24B8) // DAI Status Register
#define DAI_STAT0 (*(volatile ST_DAI_STAT *)0x24B8) // DAI Status Register
#define DAI_PIN_STAT (*(volatile ST_DAI_PIN_STAT *)0x24B9) // DAI Pin Buffer Status Register
#define DAI_STAT1 (*(volatile int *)0x24BA) // DAI Status Register

#define IDP_FIFO (*(volatile ST_IDP_FIFO *)0x24D0) // IDP FIFO packing mode register

// DPI
#define SRU2_INPUT0 (*(volatile ST_SRU2_INPUT0 *)0x1C00) //SRU2_INPUT0 Register
#define SRU2_INPUT1 (*(volatile ST_SRU2_INPUT1 *)0x1C01) //SRU2_INPUT1 Register
#define SRU2_INPUT2 (*(volatile ST_SRU2_INPUT2 *)0x1C02) //SRU2_INPUT2 Register
#define SRU2_INPUT3 (*(volatile ST_SRU2_INPUT3 *)0x1C03) //SRU2_INPUT3 Register
#define SRU2_INPUT4 (*(volatile ST_SRU2_INPUT4 *)0x1C04) //SRU2_INPUT4 Register
#define SRU2_INPUT5 (*(volatile ST_SRU2_INPUT5 *)0x1C05) //SRU2_INPUT5 Register
#define SRU2_PIN0 (*(volatile ST_SRU2_PIN0 *)0x1C10) //SRU2_PIN0 Register
#define SRU2_PIN1 (*(volatile ST_SRU2_PIN1 *)0x1C11) //SRU2_PIN1 Register
#define SRU2_PIN2 (*(volatile ST_SRU2_PIN2 *)0x1C12) //SRU2_PIN2 Register
#define SRU2_PBEN0 (*(volatile ST_SRU2_PBEN0 *)0x1C20) //SRU2_PBEN0 Register
#define SRU2_PBEN1 (*(volatile ST_SRU2_PBEN1 *)0x1C21) //SRU2_PBEN1 Register
#define SRU2_PBEN2 (*(volatile ST_SRU2_PBEN2 *)0x1C22) //SRU2_PBEN2 Register

#define DPI_PIN_PULLUP (*(volatile ST_DPI_PIN_PULLUP *)0x1C30) //DPI Resistor Pull-up Enable Register
#define DPI_PIN_STAT (*(volatile ST_DPI_PIN_STAT *)0x1C31) //DPI Pin Buffer Status Register
#define DPI_IRPTL (*(volatile ST_DPI_IRPTL *)0x1C32) //DPI Interrupt Latch Register
#define DPI_IRPTL_SH (*(volatile ST_DPI_IRPTL *)0x1C33) //DPI_IRPTL Shadow Register
#define DPI_IRPTL_FE (*(volatile ST_DPI_IRPTL *)0x1C34) //Falling Edge Interrupt Mask Register
#define DPI_IRPTL_RE (*(volatile ST_DPI_IRPTL *)0x1C35) //Rising Edge Interrupt Mask Register

// PCG
#define PCG_CTLA0 (*(volatile ST_PCG_CTL0 *)0x24C0) // Precision Clock A Control Register 0
#define PCG_CTLA1 (*(volatile ST_PCG_CTL1 *)0x24C1) // Precision Clock A Control Register 1
#define PCG_CTLB0 (*(volatile ST_PCG_CTL0 *)0x24C2) // Precision Clock B Control Register 0
#define PCG_CTLB1 (*(volatile ST_PCG_CTL1 *)0x24C3) // Precision Clock B Control Register 1
#define PCG_PW (*(volatile ST_PCG_PW *)0x24C4) // Precision Clock Pulse Width Control Register
#define PCG_SYNC (*(volatile ST_PCG_SYNC *)0x24C5) // Precision Clock Frame Sync Synchronization
#define PCG_PW1 (*(volatile ST_PCG_PW *)0x24C4) // Precision Clock Pulse Width Control Register
#define PCG_SYNC1 (*(volatile ST_PCG_SYNC *)0x24C5) // Precision Clock Frame Sync Synchronization

#define PCG_CTLC0 (*(volatile ST_PCG_CTL0 *)0x24C6) // Precision Clock A Control Register 0
#define PCG_CTLC1 (*(volatile ST_PCG_CTL1 *)0x24C7) // Precision Clock A Control Register 1
#define PCG_CTLD0 (*(volatile ST_PCG_CTL0 *)0x24C8) // Precision Clock B Control Register 0
#define PCG_CTLD1 (*(volatile ST_PCG_CTL1 *)0x24C9) // Precision Clock B Control Register 1
#define PCG_PW2 (*(volatile ST_PCG_PW *)0x24CA) // Precision Clock Pulse Width Control Register
#define PCG_SYNC2 (*(volatile ST_PCG_SYNC2 *)0x24CB) // Precision Clock Frame Sync Synchronization

// Peripheral Interrupt priority control register
#define PICR0 (*(volatile ST_PICR0 *)0x2200) //Peripheral Interrupt Priority0 Control Register
#define PICR1 (*(volatile ST_PICR1 *)0x2201) //Peripheral Interrupt Priority1 Control Register
#define PICR2 (*(volatile ST_PICR2 *)0x2202) //Peripheral Interrupt Priority2 Control Register
#define PICR3 (*(volatile ST_PICR3 *)0x2203) //Peripheral Interrupt Priority3 Control Register

// MTM registers
#define MTMCTL (*(volatile ST_MTMCTL *)0x2c01) //Memory-to-Memory DMA Control Register
#define IIMTMW (*(volatile int *)0x2c10) //MTM DMA Destination Index Register
#define IIMTMR (*(volatile int *)0x2c11) //MTM DMA Source Index Register
#define IMMTMW (*(volatile int *)0x2c0e) //MTM DMA Destination Modify Register
#define IMMTMR (*(volatile int *)0x2c0f) //MTM DMA Source Modify Register
#define CMTMW (*(volatile int *)0x2c16) //MTM DMA Destination Count Register
#define CMTMR (*(volatile int *)0x2c17) //MTM DMA Source Count Register

// PWM
#define PWMGCTL (*(volatile ST_PWMGCTL *)0x3800) // PWM Global Control Register
#define PWMGSTAT (*(volatile ST_PWMGSTAT *)0x3801) // PWM Global Status Register

#define PWMCTL0 (*(volatile ST_PWMCTL *)0x3000) // PWM Control
#define PWMSTAT0 (*(volatile ST_PWMSTAT *)0x3001) // PWM Status
#define PWMPERIOD0 (*(volatile int *)0x3002) // PWM Period Register
#define PWMDT0 (*(volatile int *)0x3003) // PWM Dead Time Register
#define PWMA0 (*(volatile int *)0x3005) // PWM Channel A Duty Control
#define PWMB0 (*(volatile int *)0x3006) // PWM Channel B Duty Control
#define PWMSEG0 (*(volatile ST_PWMSEG *)0x3008) // PWM Output Enable
#define PWMAL0 (*(volatile int *)0x300A) // PWM Channel AL Duty Control
#define PWMBL0 (*(volatile int *)0x300B) // PWM Channel BL Duty Control
#define PWMDBG0 (*(volatile int *)0x300E) // PWM Debug Status
#define PWMPOL0 (*(volatile ST_PWMPOL *)0x300F) // PWM Output polarity select

#define PWMCTL1 (*(volatile ST_PWMCTL *)0x3010) // PWM Control
#define PWMSTAT1 (*(volatile ST_PWMSTAT *)0x3011) // PWM Status
#define PWMPERIOD1 (*(volatile int *)0x3012) // PWM Period Register
#define PWMDT1 (*(volatile int *)0x3013) // PWM Dead Time Register
#define PWMA1 (*(volatile int *)0x3015) // PWM Channel A Duty Control
#define PWMB1 (*(volatile int *)0x3016) // PWM Channel B Duty Control
#define PWMSEG1 (*(volatile ST_PWMSEG *)0x3018) // PWM Output Enable
#define PWMAL1 (*(volatile int *)0x301A) // PWM Channel AL Duty Control
#define PWMBL1 (*(volatile int *)0x301B) // PWM Channel BL Duty Control
#define PWMDBG1 (*(volatile int *)0x301E) // PWM Debug Status
#define PWMPOL1 (*(volatile ST_PWMPOL *)0x301F) // PWM Output polarity select

#define PWMCTL2 (*(volatile ST_PWMCTL *)0x3400) // PWM Control
#define PWMSTAT2 (*(volatile ST_PWMSTAT *)0x3401) // PWM Status
#define PWMPERIOD2 (*(volatile int *)0x3402) // PWM Period Register
#define PWMDT2 (*(volatile int *)0x3403) // PWM Dead Time Register
#define PWMA2 (*(volatile int *)0x3405) // PWM Channel A Duty Control
#define PWMB2 (*(volatile int *)0x3406) // PWM Channel B Duty Control
#define PWMSEG2 (*(volatile ST_PWMSEG *)0x3408) // PWM Output Enable
#define PWMAL2 (*(volatile int *)0x340A) // PWM Channel AL Duty Control
#define PWMBL2 (*(volatile int *)0x340B) // PWM Channel BL Duty Control
#define PWMDBG2 (*(volatile int *)0x340E) // PWM Debug Status
#define PWMPOL2 (*(volatile ST_PWMPOL *)0x340F) // PWM Output polarity select

#define PWMCTL3 (*(volatile ST_PWMCTL *)0x3410) // PWM Control
#define PWMSTAT3 (*(volatile ST_PWMSTAT *)0x3411) // PWM Status
#define PWMPERIOD3 (*(volatile int *)0x3412) // PWM Period Register
#define PWMDT3 (*(volatile int *)0x3413) // PWM Dead Time Register
#define PWMA3 (*(volatile int *)0x3415) // PWM Channel A Duty Control
#define PWMB3 (*(volatile int *)0x3416) // PWM Channel B Duty Control
#define PWMSEG3 (*(volatile ST_PWMSEG *)0x3418) // PWM Output Enable
#define PWMAL3 (*(volatile int *)0x341A) // PWM Channel AL Duty Control
#define PWMBL3 (*(volatile int *)0x341B) // PWM Channel BL Duty Control
#define PWMDBG3 (*(volatile int *)0x341E) // PWM Debug Status
#define PWMPOL3 (*(volatile ST_PWMPOL *)0x341F) // PWM Output polarity select

// Registers for UART0
#define UART0THR (*(volatile ST_UARTTHR *)0x3c00) // Transmit Holding Register
#define UART0RBR (*(volatile ST_UARTRBR *)0x3c00) // Receive Buffer Register
#define UART0DLL (*(volatile int *)0x3c00) // Divisor Latch Low Byte
#define UART0IER (*(volatile ST_UARTIER *)0x3c01) // Interrupt Enable Register
#define UART0DLH (*(volatile int *)0x3c01) // Divisor Latch High Byte
#define UART0IIR (*(volatile ST_UARTIIR *)0x3c02) // Interrupt Identification Register
#define UART0LCR (*(volatile ST_UARTLCR *)0x3c03) // Line Control Register
#define UART0MODE (*(volatile ST_UARTMODE *)0x3c04) // Mode Register
#define UART0LSR (*(volatile ST_UARTLSR *)0x3c05) // Line Status Register
#define UART0SCR (*(volatile int *)0x3c07) // Scratch Register
#define UART0RBRSH (*(volatile ST_UARTRBR *)0x3c08) // Read Buffer Shadow Register
#define UART0IIRSH (*(volatile ST_UARTIIR *)0x3c09) // Interrupt Identification Shadow Register
#define UART0LSRSH (*(volatile ST_UARTLSR *)0x3c0a) // Line Status Shadow Register

#define IIUART0RX (*(volatile int *)0x3e00) // Internal Memory address for DMA access with UART Receiver
#define IMUART0RX (*(volatile int *)0x3e01) // Internal Memory modifier for DMA access with UART Receiver
#define CUART0RX (*(volatile int *)0x3e02) // Word Count for DMA access with UART Receiver
#define CPUART0RX (*(volatile int *)0x3e03) // Chain Point for DMA access with UART Receiver
#define UART0RXCTL (*(volatile ST_UARTCTL *)0x3e04) // UART Receiver control register
#define UART0RXSTAT (*(volatile ST_UARTRXSTAT *)0x3e05) // UART Receiver status register

#define IIUART0TX (*(volatile int *)0x3f00) // Internal Memory address for DMA access with UART Transmitter
#define IMUART0TX (*(volatile int *)0x3f01) // Internal Memory modifier for DMA access with UART Transmitter
#define CUART0TX (*(volatile int *)0x3f02) // Word Count for DMA access with UART Transmitter
#define CPUART0TX (*(volatile int *)0x3f03) // Chain Point for DMA access with UART Transmitter
#define UART0TXCTL (*(volatile ST_UARTCTL *)0x3f04) // UART Transmitter control register
#define UART0TXSTAT (*(volatile ST_UARTTXSTAT *)0x3f05) // UART Transmitter status register

/* Register definition for UART1 */
#define UART1THR (*(volatile ST_UARTTHR *)0x4000) // Transmit Holding Register
#define UART1RBR (*(volatile ST_UARTRBR *)0x4000) // Receive Buffer Register
#define UART1DLL (*(volatile int *)0x4000) // Divisor Latch Low Byte
#define UART1IER (*(volatile ST_UARTIER *)0x4001) // Interrupt Enable Register
#define UART1DLH (*(volatile int *)0x4001) // Divisor Latch High Byte
#define UART1IIR (*(volatile ST_UARTIIR *)0x4002) // Interrupt Identification Register
#define UART1LCR (*(volatile ST_UARTLCR *)0x4003) // Line Control Register
#define UART1MODE (*(volatile ST_UARTMODE *)0x4004) // Mode Register
#define UART1LSR (*(volatile ST_UARTLSR *)0x4005) // Line Status Register
#define UART1SCR (*(volatile int *)0x4007) // Scratch Register
#define UART1RBRSH (*(volatile ST_UARTRBR *)0x4008) // Read Buffer Shadow Register
#define UART1IIRSH (*(volatile ST_UARTIIR *)0x4009) // Interrupt Identification Shadow Register
#define UART1LSRSH (*(volatile ST_UARTLSR *)0x400a) // Line Status Shadow Register

#define IIUART1RX (*(volatile int *)0x4200) // Internal Memory address for DMA access with Receiver
#define IMUART1RX (*(volatile int *)0x4201) // Internal Memory modifier for DMA access with Receiver
#define CUART1RX (*(volatile int *)0x4202) // Word Count for DMA access with Receiver
#define CPUART1RX (*(volatile int *)0x4203) // Chain Point for DMA access with Receiver
#define UART1RXCTL (*(volatile ST_UARTCTL *)0x4204) // Receiver control register
#define UART1RXSTAT (*(volatile ST_UARTRXSTAT *)0x4205) // Receiver status register

#define IIUART1TX (*(volatile int *)0x4300) // Internal Memory address for DMA access with Transmitter
#define IMUART1TX (*(volatile int *)0x4301) // Internal Memory modifier for DMA access with Transmitter
#define CUART1TX (*(volatile int *)0x4302) // Word Count for DMA access with Transmitter
#define CPUART1TX (*(volatile int *)0x4303) // Chain Point for DMA access with Transmitter
#define UART1TXCTL (*(volatile ST_UARTCTL *)0x4304) // Transmitter control register
#define UART1TXSTAT (*(volatile ST_UARTTXSTAT *)0x4305) // Transmitter status register

// Registers Poiter for UART0
#define pUART0THR ((volatile ST_UARTTHR *)0x3c00) // Transmit Holding Register
#define pUART0RBR ((volatile ST_UARTRBR *)0x3c00) // Receive Buffer Register
#define pUART0DLL ((volatile int *)0x3c00) // Divisor Latch Low Byte
#define pUART0IER ((volatile ST_UARTIER *)0x3c01) // Interrupt Enable Register
#define pUART0DLH ((volatile int *)0x3c01) // Divisor Latch High Byte
#define pUART0IIR ((volatile ST_UARTIIR *)0x3c02) // Interrupt Identification Register
#define pUART0LCR ((volatile ST_UARTLCR *)0x3c03) // Line Control Register
#define pUART0MODE ((volatile ST_UARTMODE *)0x3c04) // Mode Register
#define pUART0LSR ((volatile ST_UARTLSR *)0x3c05) // Line Status Register
#define pUART0SCR ((volatile int *)0x3c07) // Scratch Register
#define pUART0RBRSH ((volatile ST_UARTRBR *)0x3c08) // Read Buffer Shadow Register
#define pUART0IIRSH ((volatile ST_UARTIIR *)0x3c09) // Interrupt Identification Shadow Register
#define pUART0LSRSH ((volatile ST_UARTLSR *)0x3c0a) // Line Status Shadow Register

#define pIIUART0RX ((volatile int *)0x3e00) // Internal Memory address for DMA access with UART Receiver
#define pIMUART0RX ((volatile int *)0x3e01) // Internal Memory modifier for DMA access with UART Receiver
#define pCUART0RX ((volatile int *)0x3e02) // Word Count for DMA access with UART Receiver
#define pCPUART0RX ((volatile int *)0x3e03) // Chain Point for DMA access with UART Receiver
#define pUART0RXCTL ((volatile ST_UARTCTL *)0x3e04) // UART Receiver control register
#define pUART0RXSTAT ((volatile ST_UARTRXSTAT *)0x3e05) // UART Receiver status register

#define pIIUART0TX ((volatile int *)0x3f00) // Internal Memory address for DMA access with UART Transmitter
#define pIMUART0TX ((volatile int *)0x3f01) // Internal Memory modifier for DMA access with UART Transmitter
#define pCUART0TX ((volatile int *)0x3f02) // Word Count for DMA access with UART Transmitter
#define pCPUART0TX ((volatile int *)0x3f03) // Chain Point for DMA access with UART Transmitter
#define pUART0TXCTL ((volatile ST_UARTCTL *)0x3f04) // UART Transmitter control register
#define pUART0TXSTAT ((volatile ST_UARTTXSTAT *)0x3f05) // UART Transmitter status register

/* Register Poiter for UART1 */
#define pUART1THR ((volatile ST_UARTTHR *)0x4000) // Transmit Holding Register
#define pUART1RBR ((volatile ST_UARTRBR *)0x4000) // Receive Buffer Register
#define pUART1DLL ((volatile int *)0x4000) // Divisor Latch Low Byte
#define pUART1IER ((volatile ST_UARTIER *)0x4001) // Interrupt Enable Register
#define pUART1DLH ((volatile int *)0x4001) // Divisor Latch High Byte
#define pUART1IIR ((volatile ST_UARTIIR *)0x4002) // Interrupt Identification Register
#define pUART1LCR ((volatile ST_UARTLCR *)0x4003) // Line Control Register
#define pUART1MODE ((volatile ST_UARTMODE *)0x4004) // Mode Register
#define pUART1LSR ((volatile ST_UARTLSR *)0x4005) // Line Status Register
#define pUART1SCR ((volatile int *)0x4007) // Scratch Register
#define pUART1RBRSH ((volatile ST_UARTRBR *)0x4008) // Read Buffer Shadow Register
#define pUART1IIRSH ((volatile ST_UARTIIR *)0x4009) // Interrupt Identification Shadow Register
#define pUART1LSRSH ((volatile ST_UARTLSR *)0x400a) // Line Status Shadow Register

#define pIIUART1RX ((volatile int *)0x4200) // Internal Memory address for DMA access with Receiver
#define pIMUART1RX ((volatile int *)0x4201) // Internal Memory modifier for DMA access with Receiver
#define pCUART1RX ((volatile int *)0x4202) // Word Count for DMA access with Receiver
#define pCPUART1RX ((volatile int *)0x4203) // Chain Point for DMA access with Receiver
#define pUART1RXCTL ((volatile ST_UARTCTL *)0x4204) // Receiver control register
#define pUART1RXSTAT ((volatile ST_UARTRXSTAT *)0x4205) // Receiver status register

#define pIIUART1TX ((volatile int *)0x4300) // Internal Memory address for DMA access with Transmitter
#define pIMUART1TX ((volatile int *)0x4301) // Internal Memory modifier for DMA access with Transmitter
#define pCUART1TX ((volatile int *)0x4302) // Word Count for DMA access with Transmitter
#define pCPUART1TX ((volatile int *)0x4303) // Chain Point for DMA access with Transmitter
#define pUART1TXCTL ((volatile ST_UARTCTL *)0x4304) // Transmitter control register
#define pUART1TXSTAT ((volatile ST_UARTTXSTAT *)0x4305) // Transmitter status register

/* TWI Registers */
#define TWIDIV (*(volatile ST_TWIDIV *)0x4400) // TWI Serial Clock Divider
#define TWIMITR (*(volatile int *)0x4404) // TWI Master Internal Time Reference
#define TWISCTL (*(volatile ST_TWISCTL *)0x4408) // TWI Slave Mode Control Register
#define TWISSTAT (*(volatile ST_TWISSTAT *)0x440C) // TWI Slave Mode Status Register
#define TWISADDR (*(volatile int *)0x4410) // TWI Slave Mode Address Comparison Register
#define TWIMCTL (*(volatile ST_TWIMCTL *)0x4414) // TWI Master Mode Control Register
#define TWIMSTAT (*(volatile ST_TWIMSTAT *)0x4418) // TWI Master Mode Status Register
#define TWIMADDR (*(volatile int *)0x441C) // TWI Master Mode Address Register
#define TWIIRPTL (*(volatile ST_TWIIRPTL *)0x4420) // TWI Interrupt Latch Register
#define TWIIMASK (*(volatile ST_TWIIMASK *)0x4424) // TWI Interrupt Mask Register
#define TWIFIFOCTL (*(volatile ST_TWIFIFOCTL *)0x4428) // TWI FIFO Control Register
#define TWIFIFOSTAT (*(volatile ST_TWIFIFOSTAT *)0x442C) // TWI FIFO Status Register
#define TXTWI8 (*(volatile int *)0x4480) // TWI 8-Bit Transmit FIFO Register
#define TXTWI16 (*(volatile ST_TWI16 *)0x4484) // TWI 16-Bit Transmit FIFO Register
#define RXTWI8 (*(volatile int *)0x4488) // TWI 8-Bit Receive FIFO Register
#define RXTWI16 (*(volatile ST_TWI16 *)0x448C) // TWI 16-Bit Receive FIFO Register

// Sample Rate Converter registers
#define SRCCTL0 (*(volatile ST_SRCCTL0 *)0x2490) // SRC0 Control register
#define SRCCTL1 (*(volatile ST_SRCCTL1 *)0x2491) // SRC1 Control register
#define SRCMUTE (*(volatile ST_SRCMUTE *)0x2492) // SRC Mute register
#define SRCRAT0 (*(volatile ST_SRCRAT0 *)0x2498) // SRC0 Output to Input Ratio
#define SRCRAT1 (*(volatile ST_SRCRAT1 *)0x2499) // SRC1 Output to Input Ratio

// SPDIF Transmit registers
#define DITCTL (*(volatile ST_DITCTL *)0x24A0) // Digital Interface Transmit Control Register

// Channel Status buffer
#define DITCHANA0 (*(volatile ST_DITCHAN0 *)0x24A1) //Left Channel Status for Subframe A Register 0
#define DITCHANA1 (*(volatile ST_DITCHAN1 *)0x24D4) //Left Channel Status for Subframe A Register 1
#define DITCHANA2 (*(volatile ST_DITCHAN2 *)0x24D5) //Left Channel Status for Subframe A Register 2
#define DITCHANA3 (*(volatile ST_DITCHAN3 *)0x24D6) //Left Channel Status for Subframe A Register 3
#define DITCHANA4 (*(volatile ST_DITCHAN4 *)0x24D7) //Left Channel Status for Subframe A Register 4
#define DITCHANA5 (*(volatile ST_DITCHAN5 *)0x24D8) //Left Channel Status for Subframe A Register 5
#define DITCHANB0 (*(volatile ST_DITCHAN0 *)0x24A2) //Right Channel Status for Subframe B Register 0
#define DITCHANB1 (*(volatile ST_DITCHAN1 *)0x24DA) //Right Channel Status for Subframe B Register 1
#define DITCHANB2 (*(volatile ST_DITCHAN2 *)0x24DB) //Right Channel Status for Subframe B Register 2
#define DITCHANB3 (*(volatile ST_DITCHAN3 *)0x24DC) //Right Channel Status for Subframe B Register 3
#define DITCHANB4 (*(volatile ST_DITCHAN4 *)0x24DD) //Right Channel Status for Subframe B Register 4
#define DITCHANB5 (*(volatile ST_DITCHAN5 *)0x24DE) //Right Channel Status for Subframe B Register 5

// User bit buffers
#define DITUSRBITA0 (*(volatile ST_DITUSRBIT0 *)0x24E0) //User Bits Buffer Registers for Subframe A Register 0
#define DITUSRBITA1 (*(volatile ST_DITUSRBIT1 *)0x24E1) //User Bits Buffer Registers for Subframe A Register 1
#define DITUSRBITA2 (*(volatile ST_DITUSRBIT2 *)0x24E2) //User Bits Buffer Registers for Subframe A Register 2
#define DITUSRBITA3 (*(volatile ST_DITUSRBIT3 *)0x24E3) //User Bits Buffer Registers for Subframe A Register 3
#define DITUSRBITA4 (*(volatile ST_DITUSRBIT4 *)0x24E4) //User Bits Buffer Registers for Subframe A Register 4
#define DITUSRBITA5 (*(volatile ST_DITUSRBIT5 *)0x24E5) //User Bits Buffer Registers for Subframe A Register 5

#define DITUSRBITB0 (*(volatile ST_DITUSRBIT0 *)0x24E8) //User Bits Buffer Registers for Subframe B Register 0
#define DITUSRBITB1 (*(volatile ST_DITUSRBIT1 *)0x24E9) //User Bits Buffer Registers for Subframe B Register 1
#define DITUSRBITB2 (*(volatile ST_DITUSRBIT2 *)0x24EA) //User Bits Buffer Registers for Subframe B Register 2
#define DITUSRBITB3 (*(volatile ST_DITUSRBIT3 *)0x24EB) //User Bits Buffer Registers for Subframe B Register 3
#define DITUSRBITB4 (*(volatile ST_DITUSRBIT4 *)0x24EC) //User Bits Buffer Registers for Subframe B Register 4
#define DITUSRBITB5 (*(volatile ST_DITUSRBIT5 *)0x24ED) //User Bits Buffer Registers for Subframe B Register 5

// SPDIF Receiver registers
#define DIRCTL (*(volatile ST_DIRCTL *)0x24A8) // Digital Interface Receiver Control Register
#define DIRSTAT (*(volatile ST_DIRSTAT *)0x24A9) // Digital Interface Receiver Status
#define DIRCHANL (*(volatile ST_DIRCHANL *)0x24AA) // Digital Interface Receiver Left Channel Status
#define DIRCHANR (*(volatile ST_DIRCHANR *)0x24AB) // Digital Interface Receiver Right Channel Status

#endif  //__ES_ADSP21369REG_H_