Mercurial > flash_v2
diff packages/hal/sh/arch/current/include/sh_regs.h @ 128:0c2b7be0d798 ecos-sw-2000-10-12
Merge from eCos master repository on 2000-10-12-08:46:24-BST
| author | jlarmour |
|---|---|
| date | Thu, 12 Oct 2000 20:31:43 +0000 |
| parents | 6bd9d475ed4b |
| children | eb9fd8c04db3 |
line wrap: on
line diff
--- a/packages/hal/sh/arch/current/include/sh_regs.h +++ b/packages/hal/sh/arch/current/include/sh_regs.h @@ -116,6 +116,17 @@ #define CYGARC_REG_CCR_CE 0x00000001 +//-------------------------------------------------------------------------- +// Address array access +// Address part (base/top/step specified in mod file) +#define CYGARC_REG_CACHE_ADDRESS_ADDRESS 0x00000008 // compare address + +// Data part +#define CYGARC_REG_CACHE_ADDRESS_TAG_Mask 0x1ffffc00 +#define CYGARC_REG_CACHE_ADDRESS_U 0x00000002 // updated (contains dirty data) +#define CYGARC_REG_CACHE_ADDRESS_V 0x00000001 // valid + + //++++++ Module BSC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //-------------------------------------------------------------------------- @@ -225,6 +236,32 @@ #define CYGARC_REG_WCR2_10WS 7 +//----------------------------------------------------------------------------- +// Calculate constants needed to drive the proper SDRAM refresh rate. Argument +// is delay between required refresh events in microseconds (us). Should be +// available off the SDRAM spec sheet. +// These should be a part of a fully CDLicized memory controller setup. +#define CYGARC_RTCSR_PRESCALE(_r_) \ +(((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(4*1000000))<256) ? 4 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(16*1000000))<256) ? 16 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(64*1000000))<256) ? 64 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(256*1000000))<256) ? 256 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(1024*1000000))<256) ? 1024 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(2048*1000000))<256) ? 2048 : 4096) + +// These two macros provide the static values we need to stuff into the +// registers. +#define CYGARC_RTCSR_CKSx(_r_) \ + (( 4 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x08 : \ + ( 16 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x10 : \ + ( 64 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x18 : \ + ( 256 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x20 : \ + (1024 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x28 : \ + (2048 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x30 : 0x38 ) + +#define CYGARC_RTCSR_N(_r_) \ + (CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(CYGARC_RTCSR_PRESCALE(_r_)*1000000)) + //++++++ Module UBC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -233,17 +270,22 @@ #define CYGARC_REG_BRCR 0xffffff98 // 16 bit #define CYGARC_REG_BARA 0xffffffb0 // 32 bit -#define CYGARC_REG_BAMRA 0xffffffb4 // 8 bit +#define CYGARC_REG_BAMRA 0xffffffb4 // 8 bit (v1) / 32 bit #define CYGARC_REG_BBRA 0xffffffb8 // 16 bit #define CYGARC_REG_BASRA 0xffffffe4 // 8 bit #define CYGARC_REG_BARB 0xffffffa0 // 32 bit -#define CYGARC_REG_BAMRB 0xffffffa4 // 8 bit +#define CYGARC_REG_BAMRB 0xffffffa4 // 8 bit (v1) / 32 bit #define CYGARC_REG_BASRB 0xffffffe8 // 8 bit #define CYGARC_REG_BBRB 0xffffffa8 // 16 bit #define CYGARC_REG_BDRB 0xffffff90 // 32 bit #define CYGARC_REG_BDMRB 0xffffff94 // 32 bit +#ifdef CYGARC_SH_MOD_UBC_V3 +#define CYGARC_REG_BETR 0xffffff9c // 16 bit +#define CYGARC_REG_BRSR 0xffffffac // 32 bit +#define CYGARC_REG_BRDR 0xffffffbc // 32 bit +#endif #define CYGARC_REG_BRCR_CMFA 0x8000 // condition match flag A #define CYGARC_REG_BRCR_CMFB 0x4000 // condition match flag B @@ -252,12 +294,20 @@ #define CYGARC_REG_BRCR_PCBB 0x0040 // post execute channel B #define CYGARC_REG_BRCR_SEQ 0x0008 // sequence condition select +#ifdef CYGARC_SH_MOD_UBC_V1 #define CYGARC_REG_BAMRA_BASMA 0x04 // BASRA masked #define CYGARC_REG_BAMRA_BARA_UNMASKED 0x00 // BARA not masked #define CYGARC_REG_BAMRA_BARA_10BIT 0x01 // Lowest 10 bit masked #define CYGARC_REG_BAMRA_BARA_12BIT 0x02 // Lowest 12 bit masked #define CYGARC_REG_BAMRA_BARA_MASKED 0x03 // All bits masked +#else +// mask is fully configurable in other versions of the UBC +#endif +#ifdef CYGARC_SH_MOD_UBC_V3 +#define CYGARC_REG_BBRA_DMA 0x0080 // Break on DMAC cycle +#define CYGARC_REG_BBRA_CPU 0x0040 // Break on CPU cycle +#endif #define CYGARC_REG_BBRA_DFETCH 0x0020 // Break on DFETCH #define CYGARC_REG_BBRA_IFETCH 0x0010 // Break on IFETCH #define CYGARC_REG_BBRA_WRITE 0x0008 // Break on WRITE @@ -289,10 +339,159 @@ #define CYGARC_REG_WTCSR_CKS0 0x01 // clock select 0 #define CYGARC_REG_WTCSR_CKSx_MASK 0x07 // clock select mask // This is the period (in us) between watchdog reset and overflow. -// (used by the watchdog driver - board specific) -// Based on a 15MHz clock with max delay: 15Mhz/(4096 * 256) +// Note: We use max timeout delay for now. #define CYGARC_REG_WTCSR_CKSx_SETTING 0x07 // max delay -#define CYGARC_REG_WTCSR_PERIOD 69905067 // ~69.9 ms + +#define CYGARC_REG_WTCSR_PERIOD ((1000000000/(CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/4096))*256) + +// Translate various CDL clock configurations to register equivalents +// for the various CPG versions +#if defined(CYGARC_SH_MOD_CPG_V1) // ---------------------------- V1 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 +#else +# error "Unsupported PLL1 setting" +#endif + +// Divider1 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 +#else +# error "Unsupported Divider1 setting" +#endif + +// Divider2 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 +#else +# error "Unsupported Divider1 setting" +#endif + +// CKOEN - set in all modes but 7 +#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE != 7) +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#elif defined(CYGARC_SH_MOD_CPG_V2) // ---------------------------- V2 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 +#else +# error "Unsupported PLL1 setting" +#endif + +// Divider1 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 +#else +# error "Unsupported Divider1 setting" +#endif + +// Divider2 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 +#else +# error "Unsupported Divider1 setting" +#endif + +// CKOEN - set in all modes but 2 +#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE != 2) +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#elif defined(CYGARC_SH_MOD_CPG_V3) // ---------------------------- V3 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 3) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x8000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 6) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x8010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 8) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0030 +#else +# error "Unsupported PLL1 setting" +#endif + +// Divider1 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x4000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 +#else +# error "Unsupported Divider1 setting" +#endif + +// Divider2 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x2000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 6) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x2002 +#else +# error "Unsupported Divider2 setting" +#endif + +// CKOEN - set in modes 0-2 +#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE <= 2) +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#else + +# error "Unsupported CPG version" + +#endif + +// Init value +#define CYGARC_REG_FRQCR_INIT (CYGARC_REG_FRQCR_INIT_PLL1|CYGARC_REG_FRQCR_INIT_DIVIDER1|CYGARC_REG_FRQCR_INIT_DIVIDER2|CYGARC_REG_FRQCR_INIT_CKOEN) //++++++ Module TMU ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -325,6 +524,11 @@ #define CYGARC_REG_TCR_UNIE 0x0020 #define CYGARC_REG_TCR_UNF 0x0100 +#define CYGARC_REG_TCR_TPSC_4 (0) +#define CYGARC_REG_TCR_TPSC_16 (CYGARC_REG_TCR_TPSC0) +#define CYGARC_REG_TCR_TPSC_64 (CYGARC_REG_TCR_TPSC1) +#define CYGARC_REG_TCR_TPSC_256 (CYGARC_REG_TCR_TPSC0|CYGARC_REG_TCR_TPSC1) + // TCR2 additional bits #define CYGARC_REG_TCR_ICPE0 0x0040 #define CYGARC_REG_TCR_ICPE1 0x0080 @@ -419,6 +623,17 @@ #define CYGARC_REG_ICR1_SENSE_LEVEL 0x2 #define CYGARC_REG_ICR1_SENSE_UP 0x1 +// The (initial) IRQ mode is controlled by configuration. +#ifdef CYGHWR_HAL_SH_IRQ_USE_IRQLVL +# ifdef CYGHWR_HAL_SH_IRQ_ENABLE_IRLS_INTERRUPTS +# define CYGARC_REG_ICR1_INIT (CYGARC_REG_ICR1_IRLSEN|CYGARC_REG_ICR1_IRQLVL) +# else +# define CYGARC_REG_ICR1_INIT (CYGARC_REG_ICR1_IRQLVL) +# endif +#else +# define CYGARC_REG_ICR1_INIT 0x0000 +#endif + #define CYGARC_REG_IRR0_PINT07 0x80 #define CYGARC_REG_IRR0_PINT8F 0x40 #define CYGARC_REG_IRR0_IRQ5 0x20 @@ -530,17 +745,33 @@ // to prevent other bits than the one of interest to be cleared. #define CYGARC_REG_SCSSR_CLEARMASK 0xf8 -// Baud rate values calculated for peripheral clock = 15MHz (Pf = 15). +// Baud rate values calculation, depending on peripheral clock (Pf) // n is CKS setting (0-3) -// N = (Pf/(64*2^(2n-1)*B))*10^6-1 -// E(%) = ((Pf*10^6/((N+1)*B*(64^(n-1)))-1)*100 -// So this macro is only valid when serial is configured for n=0: -// N = (Pf/(32*B))*10^6-1 +// N = (Pf/(64*2^(2n-1)*B))-1 +// With CYGARC_SCBRR_CKSx providing the values 1, 4, 16, 64 we get +// N = (Pf/(32*_CKS*B))-1 +// +// The CYGARC_SCBRR_OPTIMAL_CKS macro should compute the minimal CKS +// setting for the given baud rate and peripheral clock. +// +// The error of the CKS+count value can be computed by: +// E(%) = ((Pf/((N+1)*B*(64^(n-1)))-1)*100 +// +#define CYGARC_SCBRR_PRESCALE(_b_) \ +((((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/1/(_b_))-1)<256) ? 1 : \ + (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/4/(_b_))-1)<256) ? 4 : \ + (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/16/(_b_))-1)<256) ? 16 : 64) + +// These two macros provide the static values we need to stuff into the +// registers. +#define CYGARC_SCBRR_CKSx(_b_) \ + ((1 == CYGARC_SCBRR_PRESCALE(_b_)) ? 0 : \ + (4 == CYGARC_SCBRR_PRESCALE(_b_)) ? 1 : \ + (16 == CYGARC_SCBRR_PRESCALE(_b_)) ? 2 : 3) #define CYGARC_SCBRR_N(_b_) \ (((_b_) < 4800) ? 0 : \ ((_b_) > 115200) ? 0 : \ - (CYGHWR_HAL_SH_BOARD_SPEED*1000000/(32*(_b_))-1)) -#define CYGARC_SCBRR_CKSx(_b_) 0 + ((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/CYGARC_SCBRR_PRESCALE(_b_)/(_b_))-1)) //++++++ Module IRDA +++++++++++++++++++++++++++++++++++++++++++++++++++++++ #ifdef CYGARC_SH_MOD_IRDA @@ -617,18 +848,6 @@ #define CYGARC_REG_SCFDR1_TCOUNT_MASK 0x1f00 // number of chars in t fifo #define CYGARC_REG_SCFDR1_TCOUNT_shift 8 -// Baud rate values calculated for peripheral clock = 15MHz (Pf = 15). -// n is CKS setting (0-3) -// N = (Pf/(64*2^(2n-1)*B))*10^6-1 -// E(%) = ((Pf*10^6/((N+1)*B*(64^(n-1)))-1)*100 -// So this macro is only valid when serial is configured for n=0: -// N = (Pf/(32*B))*10^6-1 -#define CYGARC_SCBRR1_N(_b_) \ - (((_b_) < 4800) ? 0 : \ - ((_b_) > 115200) ? 0 : \ - (CYGHWR_HAL_SH_BOARD_SPEED*1000000/(32*(_b_))-1)) -#define CYGARC_SCBRR1_CKSx(_b_) 0 - #endif // CYGARC_SH_MOD_IRDA //++++++ Module SCIF +++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -707,19 +926,6 @@ #define CYGARC_REG_SCFDR2_TCOUNT_MASK 0x1f00 // number of chars in t fifo #define CYGARC_REG_SCFDR2_TCOUNT_shift 8 -// Baud rate values calculated for peripheral clock = 15MHz (Pf = 15). -// n is CKS setting (0-3) -// N = (Pf/(64*2^(2n-1)*B))*10^6-1 -// E(%) = ((Pf*10^6/((N+1)*B*(64^(n-1)))-1)*100 -// So this macro is only valid when serial is configured for n=0: -// N = (Pf/(32*B))*10^6-1 -#define CYGARC_SCBRR2_N(_b_) \ - (((_b_) < 4800) ? 0 : \ - ((_b_) > 115200) ? 0 : \ - (CYGHWR_HAL_SH_BOARD_SPEED*1000000/(32*(_b_))-1)) -#define CYGARC_SCBRR2_CKSx(_b_) 0 - - #endif // CYGARC_SH_MOD_SCIF //++++++ Module DMAC +++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -746,79 +952,48 @@ #define CYGARC_REG_CHCR3 0xa400005c #define CYGARC_REG_DMAOR 0xa4000060 -// DMA Channel Control Register 0 -#define CYGARC_REG_CHCR0_RL 0x00040000 // request check level -#define CYGARC_REG_CHCR0_AM 0x00020000 // acknowledge mode -#define CYGARC_REG_CHCR0_AL 0x00010000 // acknowledge level -#define CYGARC_REG_CHCR0_DM1 0x00008000 // destination address mode -#define CYGARC_REG_CHCR0_DM0 0x00004000 -#define CYGARC_REG_CHCR0_SM1 0x00002000 // source address mode -#define CYGARC_REG_CHCR0_SM2 0x00001000 -#define CYGARC_REG_CHCR0_RS3 0x00000800 // resource select -#define CYGARC_REG_CHCR0_RS2 0x00000400 -#define CYGARC_REG_CHCR0_RS1 0x00000200 -#define CYGARC_REG_CHCR0_RS0 0x00000100 -#define CYGARC_REG_CHCR0_DS 0x00000040 // DREQ select -#define CYGARC_REG_CHCR0_TM 0x00000020 // transmit mode -#define CYGARC_REG_CHCR0_TS1 0x00000010 // transmit size -#define CYGARC_REG_CHCR0_TS0 0x00000008 -#define CYGARC_REG_CHCR0_IE 0x00000004 // interrupt enable -#define CYGARC_REG_CHCR0_TE 0x00000002 // transfer end -#define CYGARC_REG_CHCR0_DE 0x00000001 // DMAC enable +// Offsets from base register +#define CYGARC_REG_SAR 0x00 +#define CYGARC_REG_DAR 0x04 +#define CYGARC_REG_DMATCR 0x08 +#define CYGARC_REG_CHCR 0x0c + -// DMA Channel Control Register 1 -#define CYGARC_REG_CHCR1_RL 0x00040000 // request check level -#define CYGARC_REG_CHCR1_AM 0x00020000 // acknowledge mode -#define CYGARC_REG_CHCR1_AL 0x00010000 // acknowledge level -#define CYGARC_REG_CHCR1_DM1 0x00008000 // destination address mode -#define CYGARC_REG_CHCR1_DM0 0x00004000 -#define CYGARC_REG_CHCR1_SM1 0x00002000 // source address mode -#define CYGARC_REG_CHCR1_SM2 0x00001000 -#define CYGARC_REG_CHCR1_RS3 0x00000800 // resource select -#define CYGARC_REG_CHCR1_RS2 0x00000400 -#define CYGARC_REG_CHCR1_RS1 0x00000200 -#define CYGARC_REG_CHCR1_RS0 0x00000100 -#define CYGARC_REG_CHCR1_DS 0x00000040 // DREQ select -#define CYGARC_REG_CHCR1_TM 0x00000020 // transmit mode -#define CYGARC_REG_CHCR1_TS1 0x00000010 // transmit size -#define CYGARC_REG_CHCR1_TS0 0x00000008 -#define CYGARC_REG_CHCR1_IE 0x00000004 // interrupt enable -#define CYGARC_REG_CHCR1_TE 0x00000002 // transfer end -#define CYGARC_REG_CHCR1_DE 0x00000001 // DMAC enable - -// DMA Channel Control Register 2 +// DMA Channel Control Register. If there's a digit suffix to CHCR the flag +// is only valid in the listed channels. +#define CYGARC_REG_CHCR3_DI 0x00100000 // direct/indirect selection #define CYGARC_REG_CHCR2_RO 0x00080000 // source address reload -#define CYGARC_REG_CHCR2_DM1 0x00008000 // destination address mode -#define CYGARC_REG_CHCR2_DM0 0x00004000 -#define CYGARC_REG_CHCR2_SM1 0x00002000 // source address mode -#define CYGARC_REG_CHCR2_SM2 0x00001000 -#define CYGARC_REG_CHCR2_RS3 0x00000800 // resource select -#define CYGARC_REG_CHCR2_RS2 0x00000400 -#define CYGARC_REG_CHCR2_RS1 0x00000200 -#define CYGARC_REG_CHCR2_RS0 0x00000100 -#define CYGARC_REG_CHCR2_TM 0x00000020 // transmit mode -#define CYGARC_REG_CHCR2_TS1 0x00000010 // transmit size -#define CYGARC_REG_CHCR2_TS0 0x00000008 -#define CYGARC_REG_CHCR2_IE 0x00000004 // interrupt enable -#define CYGARC_REG_CHCR2_TE 0x00000002 // transfer end -#define CYGARC_REG_CHCR2_DE 0x00000001 // DMAC enable +#define CYGARC_REG_CHCR01_RL 0x00040000 // request check level +#define CYGARC_REG_CHCR01_AM 0x00020000 // acknowledge mode +#define CYGARC_REG_CHCR01_AL 0x00010000 // acknowledge level +#define CYGARC_REG_CHCR_DM1 0x00008000 // destination address mode +#define CYGARC_REG_CHCR_DM0 0x00004000 +#define CYGARC_REG_CHCR_SM1 0x00002000 // source address mode +#define CYGARC_REG_CHCR_SM0 0x00001000 +#define CYGARC_REG_CHCR_RS3 0x00000800 // resource select +#define CYGARC_REG_CHCR_RS2 0x00000400 +#define CYGARC_REG_CHCR_RS1 0x00000200 +#define CYGARC_REG_CHCR_RS0 0x00000100 +#define CYGARC_REG_CHCR01_DS 0x00000040 // DREQ select +#define CYGARC_REG_CHCR_TM 0x00000020 // transmit mode +#define CYGARC_REG_CHCR_TS1 0x00000010 // transmit size +#define CYGARC_REG_CHCR_TS0 0x00000008 +#define CYGARC_REG_CHCR_IE 0x00000004 // interrupt enable +#define CYGARC_REG_CHCR_TE 0x00000002 // transfer end +#define CYGARC_REG_CHCR_DE 0x00000001 // DMAC enable -// DMA Channel Control Register 3 -#define CYGARC_REG_CHCR3_DI 0x00100000 // direct/indirect selection -#define CYGARC_REG_CHCR3_DM1 0x00008000 // destination address mode -#define CYGARC_REG_CHCR3_DM0 0x00004000 -#define CYGARC_REG_CHCR3_SM1 0x00002000 // source address mode -#define CYGARC_REG_CHCR3_SM2 0x00001000 -#define CYGARC_REG_CHCR3_RS3 0x00000800 // resource select -#define CYGARC_REG_CHCR3_RS2 0x00000400 -#define CYGARC_REG_CHCR3_RS1 0x00000200 -#define CYGARC_REG_CHCR3_RS0 0x00000100 -#define CYGARC_REG_CHCR3_TM 0x00000020 // transmit mode -#define CYGARC_REG_CHCR3_TS1 0x00000010 // transmit size -#define CYGARC_REG_CHCR3_TS0 0x00000008 -#define CYGARC_REG_CHCR3_IE 0x00000004 // interrupt enable -#define CYGARC_REG_CHCR3_TE 0x00000002 // transfer end -#define CYGARC_REG_CHCR3_DE 0x00000001 // DMAC enable +// Resource select options +#define CYGARC_REG_CHCR_RS_EXT_DUAL 0x00000000 +#define CYGARC_REG_CHCR_RS_EXT_EX_DAC 0x00000100 +#define CYGARC_REG_CHCR_RS_EXT_DAC_EX 0x00000300 +#define CYGARC_REG_CHCR_RS_AUTO 0x00000400 +#define CYGARC_REG_CHCR_RS_IRDA_TX 0x00000a00 +#define CYGARC_REG_CHCR_RS_IRDA_RX 0x00000b00 +#define CYGARC_REG_CHCR_RS_SCIF_TX 0x00000c00 +#define CYGARC_REG_CHCR_RS_SCIF_RX 0x00000d00 +#define CYGARC_REG_CHCR_RS_AD 0x00000e00 +#define CYGARC_REG_CHCR_RS_CMT 0x00000f00 + // DMA Operation Register #define CYGARC_REG_DMAOR_PR1 0x0200 // priority level
