]> git.sur5r.net Git - freertos/commitdiff
Core kernel files:
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 8 Oct 2014 20:31:14 +0000 (20:31 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 8 Oct 2014 20:31:14 +0000 (20:31 +0000)
+ Change how queues are allocated and deleted so only one pvPortMalloc() or vPortFree() is required in place of the previous 2.
+ Where the TCB is allocated in relation to the stack is now dependent on the stack growth direction.  The stack will not grow into the TCB.
+ Introduce the configAPPLICATION_ALLOCATED_HEAP constant to allow the application to provide the array used by heap_4.c as its heap.  This allows the application writer to use qualifiers on the array to, for example, force the memory into faster RAM.

Demo application:
+ Add demo for SAMA5D4 using IAR.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2311 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

196 files changed:
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/board.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ads7843.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/bmp.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/board_lowlevel.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/board_memories.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/dbg_util.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/dbgu_console.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacb.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacd.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmii.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/hamming.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/iso7816_4.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_color.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_draw.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_font.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_font10x14.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_gimp_image.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcdd.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/led.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/math.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/mcid.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/omnivision.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ov.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ovyuv.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/qt1070.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/rand.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/rtc_calib.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/syscalls.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/timetick.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/tsd.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/tsd_com.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/twid.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/wav.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/wm8904.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/xdma_hardware_interface.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/xdmad.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x-ek-ddram.mac [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x-ek-sram.mac [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/ddram.icf [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/sram.icf [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/bmp.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_cstartup_gnu.S [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_cstartup_iar.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_lowlevel.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_memories.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/dbg_util.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/dbgu_console.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/gmacb.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/gmacd.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/hamming.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/iso7816_4.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_draw.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_font.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_font10x14.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcdd.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/led.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/math.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/mcid_dma.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/omnivision.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov2640_config.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov2643_config.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov5640_config.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov7740_config.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov9740_config.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/qt1070.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rand.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rtc_calib.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/timetick.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/trace.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/tsd_com.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/tsd_tsadc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/twid.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/wav.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/wm8904.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/xdma_hardware_interface.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/xdmad.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/chip.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/core.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_asm_gcc.S [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_asm_iar.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_pmu.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_pmu.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/SAMA5D4.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/USBD_Config.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/USBD_LEDs.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/adc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aes.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aesb.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aic.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/async.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/catb.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/emac.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/fuse.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/gmac.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/hsmci.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/icm.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/isi.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/l2cc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/mmu.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pio.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pio_it.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pit.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pmc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pwmc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/rstc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/rtc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/sha.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/smcNfc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/spi.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/ssc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/tc.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/tdes.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/trace.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/trng.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/twi.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/udphs.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/usart.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/video.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/wdt.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/xdmac.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Initialized.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Resumed.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Suspended.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBD_HAL.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/adc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aes.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aesb.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aic.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/async.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/can.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/emac.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/gmac.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/hsmci.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/icm.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/isi.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/l2cc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/mmu.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pio.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pio_it.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pit.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pmc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pwmc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/rstc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/rtc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/sha.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/smcNfc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/spi.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/ssc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/tc.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/tdes.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/trng.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/twi.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/usart.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/wdt.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/xdmac.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/matrix.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_macros.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_vectors_gcc.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_vectors_iar.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/monitor.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/nw_entry_gcc.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/nw_entry_iar.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/tz_matrix.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Blinky_Demo/main_blinky.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/CDCCommandConsole.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOSConfig.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOS_tick_config.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.h [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/main_full.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/reg_test.S [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/LEDs.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.ewd [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.ewp [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.eww [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/cstartup_with_FreeRTOS_vectors.s [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/main.c [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.crun [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.dbgdt [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.dni [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.sram.cspy.bat [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.wsdt [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.wspos [new file with mode: 0644]
FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo_sram.jlink [new file with mode: 0644]
FreeRTOS/Demo/Common/Minimal/TimerDemo.c
FreeRTOS/Source/include/FreeRTOS.h
FreeRTOS/Source/portable/GCC/ARM_CA9/port.c
FreeRTOS/Source/portable/IAR/MSP430/portmacro.h
FreeRTOS/Source/portable/MSVC-MingW/port.c
FreeRTOS/Source/portable/MemMang/heap_4.c
FreeRTOS/Source/queue.c
FreeRTOS/Source/tasks.c

diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/board.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/board.h
new file mode 100644 (file)
index 0000000..8044685
--- /dev/null
@@ -0,0 +1,736 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \page sama5d4_ek_board_desc sama5d4-EK - Board Description\r
+ *\r
+ * \section Purpose\r
+ *\r
+ * This file is dedicated to describe the sama5d4-EK board.\r
+ *\r
+ * \section Contents\r
+ *\r
+ *  - sama5d4-EK \r
+ *  - For sama5d4-EK information, see \subpage sama5d4_ek_board_info.\r
+ *  - For operating frequency information, see \subpage sama5d4_ek_opfreq.\r
+ *  - For using portable PIO definitions, see \subpage sama5d4_ek_piodef.\r
+ *  - For on-board memories, see \subpage sama5d4_ek_mem.\r
+ *  - Several USB definitions are included here, see \subpage sama5d4_ek_usb.\r
+ *  - For External components, see \subpage sama5d4_ek_extcomp.\r
+ *  - For Individual chip definition, see \subpage sama5d4_ek_chipdef.\r
+ *\r
+ * To get more software details and the full list of parameters related to the\r
+ * sama5d4-EK board configuration, please have a look at the source file:\r
+ * \ref board.h\n\r
+ *\r
+ * \section Usage\r
+ *\r
+ *  - The code for booting the board is provided by board_cstartup_xxx.c and\r
+ *    board_lowlevel.c.\r
+ *  - For using board PIOs, board characteristics (clock, etc.) and external\r
+ *    components, see board.h.\r
+ *  - For manipulating memories, see board_memories.h.\r
+ *\r
+ * This file can be used as a template and modified to fit a custom board, with\r
+ * specific PIOs usage or memory connections.\r
+ */\r
+\r
+/**\r
+ *  \file board.h\r
+ *\r
+ *  Definition of sama5d4-EK \r
+ *  characteristics, sama5d4-dependant PIOs and external components interfacing.\r
+ */\r
+\r
+#ifndef _BOARD_\r
+#define _BOARD_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+/**\r
+ * Libc porting layers\r
+ */\r
+#if defined   ( __CC_ARM   ) /* Keil uvision 4 */\r
+#    include "include/rand.h"\r
+#elif defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */\r
+#    include "include/rand.h"\r
+#elif defined (  __GNUC__  ) /* GCC CS3 2009q3-68/2010q1-188 */\r
+#    include "include/rand.h"\r
+#    include "include/syscalls.h" /** RedHat Newlib minimal stub */\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ * \page sama5d4_ek_board_info "sama5d4-EK - Board informations"\r
+ * This page lists several definition related to the board description.\r
+ *\r
+ * \section Definitions\r
+ * - \ref BOARD_NAME\r
+ */\r
+\r
+/** Name of the board */\r
+#define BOARD_NAME "sama5d4x-EK"\r
+/** Board definition */\r
+#define sama5d4ek\r
+/** Family definition (already defined) */\r
+#if !defined sama5d4\r
+#define sama5d4\r
+#endif\r
+/** Core definition */\r
+#define cortexa5\r
+\r
+\r
+//#define BOARD_REV_A_VB\r
+//#define BOARD_REV_A_EK\r
+#define BOARD_REV_B_EK\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ *  \page sama5d4_ek_opfreq "sama5d4-EK - Operating frequencies"\r
+ *  This page lists several definition related to the board operating frequency\r
+ *  (when using the initialization done by board_lowlevel.c).\r
+ *\r
+ *  \section Definitions\r
+ *  - \ref BOARD_MAINOSC\r
+ *  - \ref BOARD_MCK\r
+ */\r
+\r
+/** Frequency of the board main oscillator */\r
+#define BOARD_MAINOSC           12000000\r
+\r
+/** Master clock frequency (when using board_lowlevel.c) */\r
+#define BOARD_MCK               ((unsigned long)((BOARD_MAINOSC / 3 / 2) * 88 ))\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ * \page sama5d4_ek_piodef "sama5d4-EK - PIO definitions"\r
+ * This pages lists all the pio definitions contained in board.h. The constants\r
+ * are named using the following convention: PIN_* for a constant which defines\r
+ * a single Pin instance (but may include several PIOs sharing the same\r
+ * controller), and PINS_* for a list of Pin instances.\r
+ *\r
+ * DBGU\r
+ * - \ref PINS_DBGU\r
+ *\r
+ * USART0\r
+ * - \ref PIN_USART0_TXD\r
+ * - \ref PIN_USART0_RXD\r
+ * - \ref PIN_USART0_RTS\r
+ * - \ref PIN_USART0_CTS\r
+ * - \ref PIN_USART0_SCK\r
+ * \r
+ * TWI0\r
+ * - \ref PIN_TWI_TWD0\r
+ * - \ref PIN_TWI_TWCK0\r
+ * - \ref PINS_TWI0\r
+ *\r
+ * SPI0\r
+ * - \ref PIN_SPI0_MISO\r
+ * - \ref PIN_SPI0_MOSI\r
+ * - \ref PIN_SPI0_SPCK\r
+ * - \ref PIN_SPI0_NPCS0\r
+ * - \ref PINS_SPI0\r
+ *\r
+ * SSC\r
+ * - \ref PIN_SSC_TD\r
+ * - \ref PIN_SSC_TK\r
+ * - \ref PIN_SSC_TF\r
+ * - \ref PIN_SSC_RD\r
+ * - \ref PIN_SSC_RK\r
+ * - \ref PIN_SSC_RF\r
+ * - \ref PINS_SSC_CODEC\r
+ *\r
+ * EMAC0\r
+ * - \ref PIN_EMAC0_TXCK\r
+ * - \ref PIN_EMAC0_TX0\r
+ * - \ref PIN_EMAC0_TX1\r
+ * - \ref PIN_EMAC0_TX2\r
+ * - \ref PIN_EMAC0_TX3\r
+ * - \ref PIN_EMAC0_TXEN\r
+ * - \ref PIN_EMAC0_RXER\r
+ * - \ref PIN_EMAC0_RXDV\r
+ * - \ref PIN_EMAC0_RX0\r
+ * - \ref PIN_EMAC0_RX1\r
+ * - \ref PIN_EMAC0_RX2\r
+ * - \ref PIN_EMAC0_RX3\r
+ * - \ref PIN_EMAC0_MDC\r
+ * - \ref PIN_EMAC0_MDIO\r
+ * - \ref PIN_EMAC0_INTR\r
+ * - \ref PINS_EMAC0_MII\r
+ * - \ref PINS_EMAC0_RMII\r
+ * LCD\r
+ * - \ref PINS_LCD\r
+ *\r
+ * ADC\r
+ * - \ref PIN_ADTRG\r
+ *\r
+ * ISI\r
+ * - \ref PIN_ISI_MCK\r
+ * - \ref PIN_ISI_VSYNC\r
+ * - \ref PIN_ISI_HSYNC\r
+ * - \ref PIN_ISI_PCK\r
+ * - \ref PIN_ISI_PINS_DATA\r
+ * - \ref PINS_ISI \r
+ */\r
+\r
+/** List of all DBGU pin definitions. */\r
+\r
+/** DBGU Monitor IO pin (detect any DBGU operation). */\r
+#define PIN_DBGU_MON {PIO_PB24A_DRXD, PIOB, ID_PIOB, PIO_INPUT, PIO_IT_RISE_EDGE}\r
+/** DBGU pin definition. */\r
+#define PINS_DBGU   {PIO_PB24A_DRXD | PIO_PB25A_DTXD, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+\r
+/** List of all USART pin definitions. */\r
+\r
+/** USART0 TXD pin definition. */\r
+#define PIN_USART0_TXD  {PIO_PD13A_TXD0, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART0 RXD pin definition. */\r
+#define PIN_USART0_RXD  {PIO_PD12A_RXD0, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART0 RTS pin definition. */\r
+#define PIN_USART0_RTS  {PIO_PD11A_RTS0, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART0 CTS pin definition. */\r
+#define PIN_USART0_CTS  {PIO_PD10A_CTS0, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART0 SCK pin definition. */\r
+#define PIN_USART0_SCK  {PIO_PD28A_SCK0, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+\r
+/** USART1 TXD pin definition. */\r
+#define PIN_USART1_TXD  {PIO_PD17A_TXD1, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART1 RXD pin definition. */\r
+#define PIN_USART1_RXD  {PIO_PD16A_RXD1, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART1 RTS pin definition. */\r
+#define PIN_USART1_RTS  {PIO_PD15A_RTS1, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART1 CTS pin definition. */\r
+#define PIN_USART1_CTS  {PIO_PD14A_CTS1, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** USART1 SCK pin definition. */\r
+#define PIN_USART1_SCK  {PIO_PD29A_SCK1, PIOD, ID_PIOD, PIO_PERIPH_A, PIO_DEFAULT}\r
+\r
+/** USART2 TXD pin definition. */\r
+#define PIN_USART2_TXD  {PIO_PE26B_TXD2, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART2 RXD pin definition. */\r
+#define PIN_USART2_RXD  {PIO_PE25B_RXD2, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART2 RTS pin definition. */\r
+#define PIN_USART2_RTS  {PIO_PE24B_RTS2, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART2 CTS pin definition. */\r
+#define PIN_USART2_CTS  {PIO_PE23B_CTS2, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART2 SCK pin definition. */\r
+#define PIN_USART2_SCK  {PIO_PE20B_SCK2, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+/** USART3 TXD pin definition. */\r
+#define PIN_USART3_TXD  {PIO_PE17B_TXD3, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART3 RXD pin definition. */\r
+#define PIN_USART3_RXD  {PIO_PE16B_RXD3, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART3 SCK pin definition. */\r
+#define PIN_USART3_SCK  {PIO_PE15B_SCK3, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+\r
+/** USART4 TXD pin definition. */\r
+//#define PIN_USART4_TXD  {PIO_PE27B_TXD4, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART4 RXD pin definition. */\r
+//#define PIN_USART4_RXD  {PIO_PE26B_RXD4, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART4 RTS pin definition. */\r
+//#define PIN_USART4_RTS  {PIO_PE28B_RTS4, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** USART4 CTS pin definition. */\r
+//#define PIN_USART4_CTS  {PIO_PE0C_CTS4, PIOE, ID_PIOE, PIO_PERIPH_C, PIO_DEFAULT}\r
+/** USART4 SCK pin definition. */\r
+//#define PIN_USART4_SCK  {PIO_PE25B_SCK4, PIOE, ID_PIOE, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+/** PIN used for reset the smartcard */\r
+#define PIN_ISO7816_RSTMC       {1 << 10, PIOD, ID_PIOD, PIO_OUTPUT_0, PIO_DEFAULT}\r
+/** Pins used for connect the smartcard */\r
+#define PINS_ISO7816            PIN_USART1_TXD, PIN_USART1_SCK,PIN_ISO7816_RSTMC\r
+\r
+/** List of all TWI pin definitions. */\r
+\r
+/** TWI0 data pin */\r
+#define PIN_TWI_TWD0   {PIO_PA30A_TWD0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** TWI0 clock pin */\r
+#define PIN_TWI_TWCK0  {PIO_PA31A_TWCK0, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** TWI0 pins */\r
+#define PINS_TWI0      PIN_TWI_TWD0, PIN_TWI_TWCK0\r
+\r
+/** TWI1 data pin */\r
+#define PIN_TWI_TWD1   {PIO_PE29C_TWD1, PIOE, ID_PIOE, PIO_PERIPH_C, PIO_DEFAULT}\r
+/** TWI1 clock pin */\r
+#define PIN_TWI_TWCK1  {PIO_PE30C_TWCK1, PIOE, ID_PIOE, PIO_PERIPH_C, PIO_DEFAULT}\r
+/** TWI1 pins */\r
+#define PINS_TWI1      PIN_TWI_TWD1, PIN_TWI_TWCK1\r
+\r
+/** TWI2 data pin */\r
+#define PIN_TWI_TWD2   {PIO_PB29A_TWD2, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** TWI2 clock pin */\r
+#define PIN_TWI_TWCK2  {PIO_PB30A_TWCK2, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** TWI2 pins */\r
+#define PINS_TWI2      PIN_TWI_TWD2, PIN_TWI_TWCK2\r
+\r
+/** TWI3 data pin */\r
+#define PIN_TWI_TWD3   {PIO_PC25B_TWD3, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT} \r
+/** TWI3 clock pin */\r
+#define PIN_TWI_TWCK3  {PIO_PC26B_TWCK3, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** TWI3 pins */\r
+#define PINS_TWI3      PIN_TWI_TWD3, PIN_TWI_TWCK3  \r
+\r
+/** List of all CAN pin deinitions. */\r
+/** CAN0 pin TX */\r
+#define PIN_CAN0_TX     {PIO_PD15C_CANTX0, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT}\r
+/** CAN0 pin RX */\r
+#define PIN_CAN0_RX     {PIO_PD14C_CANRX0, PIOD, ID_PIOD, PIO_PERIPH_C, PIO_DEFAULT}\r
+/** CAN0 pins */\r
+#define PINS_CAN0       PIN_CAN0_TX, PIN_CAN0_RX\r
+/** CAN1 pin TX */\r
+#define PIN_CAN1_TX     {PIO_PB15B_CANTX1, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** CAN1 pin RX */\r
+#define PIN_CAN1_RX     {PIO_PB14B_CANRX1, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** CAN0 pins */\r
+#define PINS_CAN1       PIN_CAN1_TX, PIN_CAN1_RX\r
+\r
+\r
+/** List of all SPI pin definitions. */\r
+\r
+/** SPI0 MISO pin definition. */\r
+#define PIN_SPI0_MISO     {PIO_PC0A_SPI0_MISO, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI0 MOSI pin definition. */\r
+#define PIN_SPI0_MOSI     {PIO_PC1A_SPI0_MOSI, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI0 SPCK pin definition. */\r
+#define PIN_SPI0_SPCK     {PIO_PC2A_SPI0_SPCK, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI0 chip select pin definition. */\r
+#define PIN_SPI0_NPCS0    {PIO_PC3A_SPI0_NPCS0, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** List of SPI0 pin definitions (MISO, MOSI & SPCK). */\r
+#define PINS_SPI0         PIN_SPI0_MISO, PIN_SPI0_MOSI, PIN_SPI0_SPCK\r
+\r
+/** SPI1 MISO pin definition. */\r
+#define PIN_SPI1_MISO     {PIO_PB18A_SPI1_MISO, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI1 MOSI pin definition. */\r
+#define PIN_SPI1_MOSI     {PIO_PB19A_SPI1_MOSI, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI1 SPCK pin definition. */\r
+#define PIN_SPI1_SPCK     {PIO_PB20A_SPI1_SPCK, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI1 chip select pin definition. */\r
+#define PIN_SPI1_NPCS0    {PIO_PB21A_SPI1_NPCS0, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** SPI1 chip select pin definition. */\r
+#define PIN_SPI1_NPCS2    {PIO_PB23A_SPI1_NPCS2, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** List of SPI1 pin definitions (MISO, MOSI & SPCK). */\r
+#define PINS_SPI1         PIN_SPI1_MISO, PIN_SPI1_MOSI, PIN_SPI1_SPCK\r
+\r
+\r
+/** SPI2 MISO pin definition. */\r
+#define PIN_SPI2_MISO     {PIO_PD11B_SPI2_MISO, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SPI2 MOSI pin definition. */\r
+#define PIN_SPI2_MOSI     {PIO_PD13B_SPI2_MOSI, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SPI2 SPCK pin definition. */\r
+#define PIN_SPI2_SPCK     {PIO_PD15B_SPI2_SPCK, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SPI2 chip select 0 pin definition. */\r
+#define PIN_SPI2_NPCS0    {PIO_PD17B_SPI2_NPCS0, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SPI2 chip select 1 pin definition. */\r
+#define PIN_SPI2_NPCS1    {PIO_PB14B_SPI2_NPCS1, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** List of SPI1 pin definitions (MISO, MOSI & SPCK). */\r
+#define PINS_SPI2         PIN_SPI2_MISO, PIN_SPI2_MOSI, PIN_SPI2_SPCK\r
+\r
+/** List of all SSC pin definitions. */\r
+\r
+/** SSC pin Transmitter Data (TD) */\r
+#define PIN_SSC_TD0      {PIO_PB28B_TD0, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin Transmitter Clock (TK) */\r
+#define PIN_SSC_TK0      {PIO_PB27B_TK0, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin Transmitter FrameSync (TF) */\r
+#define PIN_SSC_TF0      {PIO_PB31B_TF0, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin RD */\r
+#define PIN_SSC_RD0      {PIO_PB29B_RD0, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin RK */\r
+#define PIN_SSC_RK0      {PIO_PB26B_RK0, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin RF */\r
+#define PIN_SSC_RF0      {PIO_PB30B_RF0, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+/** SSC pin Transmitter Data (TD) */\r
+#define PIN_SSC_TD1      {0x1 << 21, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin Transmitter Clock (TK) */\r
+#define PIN_SSC_TK1      {0x1 << 19, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin Transmitter FrameSync (TF) */\r
+#define PIN_SSC_TF1      {0x1 << 20, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin RD */\r
+#define PIN_SSC_RD1      {0x1 << 23, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin RK */\r
+#define PIN_SSC_RK1      {0x1 << 24, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+/** SSC pin RF */\r
+#define PIN_SSC_RF1      {0x1 << 22, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+\r
+/** SSC pins definition for codec. */\r
+#define PINS_SSC_CODEC   PIN_SSC_TD0,  PIN_SSC_TK0, PIN_SSC_TF0, PIN_SSC_RD0,  PIN_SSC_RK0, PIN_SSC_RF0\r
+\r
+\r
+/** LCD pin list. */\r
+#define PINS_LCD_PIOA   {0x3FFEFEFE, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}\r
+#define PINS_LCD        PINS_LCD_PIOA\r
+/** ADC ADTRG pin (PD19). */\r
+#define PIN_ADTRG       {PIO_PE31A_ADTRG, PIOE, ID_PIOE, PIO_PERIPH_A, PIO_PULLUP}\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ * \page sama5d4_ek_usb "sama5d4-EK - USB device"\r
+ *\r
+ * \section Definitions\r
+ * - \ref BOARD_USB_BMATTRIBUTES\r
+ * - \ref CHIP_USB_UDP\r
+ * - \ref CHIP_USB_PULLUP_INTERNAL\r
+ * - \ref CHIP_USB_NUMENDPOINTS\r
+ * - \ref CHIP_USB_ENDPOINTS_MAXPACKETSIZE\r
+ * - \ref CHIP_USB_ENDPOINTS_BANKS\r
+ */\r
+\r
+/** USB VBus pin */\r
+#define PIN_USB_VBUS      {PIO_PE31, PIOE, ID_PIOE, PIO_INPUT, PIO_DEFAULT}\r
+/** USB OverCurrent detection*/\r
+#define PIN_USB_OVCUR     {PIO_PD9, PIOD, ID_PIOD, PIO_INPUT, PIO_PULLUP}\r
+/** USB Power Enable A:MicroAB:Active low */\r
+#define PIN_USB_POWER_ENA {PIO_PE10, PIOE, ID_PIOE, PIO_OUTPUT_1, PIO_DEFAULT}\r
+/** USB Power Enable B:A:Active low  */\r
+#define PIN_USB_POWER_ENB {PIO_PE11, PIOE, ID_PIOE, PIO_OUTPUT_1, PIO_DEFAULT}\r
+/** USB Power Enable C:A:Active low  */\r
+#define PIN_USB_POWER_ENC {PIO_PE12, PIOE, ID_PIOE, PIO_OUTPUT_1, PIO_DEFAULT}\r
+\r
+/** USB attributes configuration descriptor (bus or self powered, remote wakeup) */\r
+#define BOARD_USB_BMATTRIBUTES   USBConfigurationDescriptor_SELFPOWERED_NORWAKEUP\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ * \page sama5d4_ek_mem "sama5d4-EK - Memories"\r
+ * This page lists definitions related to internal & external on-board memories.\r
+ *\r
+ * \section Sdram\r
+ *\r
+ * - \ref EBI_SDRAM_PINS\r
+ *\r
+ * \section Nandflash\r
+ * - \ref PINS_NANDFLASH\r
+ * - \ref BOARD_NF_IO_PINS\r
+ * - \ref BOARD_NF_CE_PIN\r
+ * - \ref BOARD_NF_RB_PIN\r
+ */\r
+\r
+\r
+/** Nandflash IO pin definition.*/\r
+#define BOARD_NF_IO_PINS        {0x0007FFE0, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_PULLUP}\r
+#define BOARD_NF_CE_PIN         {0, 0, 0, 0, 0}\r
+/** Nandflash controller peripheral pins definition. */\r
+#define PINS_NANDFLASH          BOARD_NF_IO_PINS\r
+\r
+/** Address for transferring command bytes to the nandflash, CLE A22*/\r
+#define BOARD_NF_COMMAND_ADDR   0x80400000\r
+/** Address for transferring address bytes to the nandflash, ALE A21*/\r
+#define BOARD_NF_ADDRESS_ADDR   0x80200000 \r
+/** Address for transferring data bytes to the nandflash.*/ \r
+#define BOARD_NF_DATA_ADDR      0x80000000\r
+\r
+/** Address for transferring command bytes to the norflash. */\r
+#define BOARD_NORFLASH_ADDR     0x10000000\r
+/** Default NOR bus size after power up reset */\r
+#define BOARD_NORFLASH_DFT_BUS_SIZE 16\r
+\r
+/** Ddram type */\r
+#define DDRAM_MT47H64M16HR    0\r
+#define DDRAM_MT47H128M16RT   1\r
+#define BOARD_DDRAM_TYPE      DDRAM_MT47H128M16RT\r
+\r
+/** PHY address */\r
+#define BOARD_EMAC_PHY_ADDR         1\r
+/** PHY Component */\r
+#define BOARD_EMAC_PHY_COMP_KSZ8051RNL 1\r
+/** Board EMAC power control - ALWAYS ON */\r
+#define BOARD_EMAC_POWER_ALWAYS_ON\r
+/** Board EMAC work mode - RMII/MII ( 1 / 0 ) */\r
+#define BOARD_EMAC_MODE_RMII        1\r
+\r
+/** The PIN list of PIO for EMAC */\r
+#define BOARD_EMAC_PINS          {0x3FF, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT},\\r
+                                 {(1<<30),PIOE, ID_PIOE, PIO_INPUT, PIO_PULLUP}\r
+\r
+/** The runtime pin configure list for EMAC */\r
+#define BOARD_EMAC_RUN_PINS BOARD_EMAC_PINS\r
+\r
+/** PHY address */\r
+#define BOARD_GMAC_PHY_ADDR         0\r
+#define BOARD_GMAC_PHY_COMP_KSZ9021RNL 1\r
+#define BOARD_GMAC_PHY_COMP_KSZ8081RNL 1\r
+#define BOARD_GMAC_POWER_ALWAYS_ON\r
+#define BOARD_GMAC_MODE_RGMII        1\r
+\r
+/// The PIN list of PIO for EMAC\r
+#define BOARD_GMAC_PINS0          {0x333C5, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT},\\r
+                                  {(1<<6),PIOE, ID_PIOE, PIO_INPUT,    PIO_PULLUP}\r
+/// The runtime pin configure list for EMAC\r
+#define BOARD_GMAC_RUN_PINS0 BOARD_GMAC_PINS0\r
+\r
+/// The PIN list of PIO for EMAC\r
+#define BOARD_GMAC_PINS1          {0xC0FC14, PIOA, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT},\\r
+                                  {(1<<7),PIOE, ID_PIOE, PIO_INPUT,    PIO_PULLUP}\r
+/// The runtime pin configure list for EMAC\r
+#define BOARD_GMAC_RUN_PINS1 BOARD_GMAC_PINS1\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ * \page sama5d4_ek_extcomp "sama5d4-EK - External components"\r
+ * This page lists the definitions related to external on-board components\r
+ * located in the board.h file for the sama5d4-EK.\r
+ *\r
+ * \section board_sdmmc SD/MMC\r
+ * - \ref BOARD_MCI0_PINS\r
+ * - \ref BOARD_MCI0_PIN_CD\r
+ * - \ref BOARD_MCI1_PINS\r
+ * - \ref BOARD_MCI1_PIN_CD\r
+ * - \ref BOARD_NUM_MCI\r
+ *\r
+ * \section board_emac EMAC\r
+ * - \ref BOARD_EMAC_RST_PINS\r
+ * - \ref BOARD_EMAC_PHY_ADDR\r
+ * - \ref BOARD_EMAC_RUN_PINS\r
+ * \r
+ * \section board_lcd LCD Properties\r
+ * - \ref BOARD_LCD_WIDTH\r
+ * - \ref BOARD_LCD_HEIGHT\r
+ * - \ref BOARD_LCD_IFWIDTH\r
+ * - \ref BOARD_LCD_FRAMESIZE\r
+ * - \ref BOARD_LCD_TIMING_VFP\r
+ * - \ref BOARD_LCD_TIMING_VBP\r
+ * - \ref BOARD_LCD_TIMING_VPW\r
+ * - \ref BOARD_LCD_TIMING_HFP\r
+ * - \ref BOARD_LCD_TIMING_HBP\r
+ * - \ref BOARD_LCD_TIMING_HPW\r
+ * - \ref BOARD_LCD_FRAMERATE\r
+ * - \ref BOARD_LCD_PIXELCLOCK\r
+ *\r
+ * \section board_ts Touchscreen ADC Properties\r
+ * - \ref BOARD_TOUCHSCREEN_ADCCLK\r
+ * - \ref BOARD_TOUCHSCREEN_STARTUP\r
+ * - \ref BOARD_TOUCHSCREEN_SHTIM\r
+ * - \ref BOARD_TOUCHSCREEN_DEBOUNCE\r
+ */\r
+\r
+\r
+/** MCI0 Card detect pin definition. (PE5) */\r
+#define BOARD_MCI0_PIN_CD       {PIO_PE5, PIOE, ID_PIOE, PIO_INPUT, PIO_PULLUP}\r
+/** MCI0 power control. */\r
+//#define BOARD_MCI0_PIN_POWER    {PIO_PE15, PIOE, ID_PIOE, PIO_OUTPUT_0, PIO_PULLUP}\r
+/** MCI0 Clock . */\r
+#define BOARD_MCI0_PIN_CK       {PIO_PC4, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+/** MCI0 Solt A IO pins definition. (PC4-PC13) */\r
+#define BOARD_MCI0_PINS_SLOTA   {0x3FF0, PIOC, ID_PIOC, PIO_PERIPH_B, PIO_DEFAULT}\r
+//MCI0_CDB PE0, MCI0_DB0, MCI0_DB1,MCI0_DB2, MCI0_DB3\r
+\r
+/** MCI1 Card detect pin definition. (PE14) */\r
+#define BOARD_MCI1_PIN_CD       {PIO_PE6, PIOE, ID_PIOE, PIO_INPUT, PIO_PULLUP}\r
+/** MCI1 power control */\r
+#define BOARD_MCI1_PIN_POWER    {PIO_PE15, PIOE, ID_PIOE, PIO_OUTPUT_0, PIO_PULLUP}\r
+\r
+#define BOARD_MCI0_PINS        BOARD_MCI0_PINS_SLOTA\r
+/** MCI1 IO pins definition. (PE18-PE23) */\r
+#define BOARD_MCI1_PINS        {0xFC0000, PIOE, ID_PIOE, PIO_PERIPH_C, PIO_DEFAULT}\r
+\r
+/** Total number of MCI interface */\r
+#define BOARD_NUM_MCI           2\r
+\r
+/** Display width in pixels. */\r
+#define BOARD_LCD_WIDTH             800\r
+/** Display height in pixels. */\r
+#define BOARD_LCD_HEIGHT            480\r
+\r
+/** Display interface width in bits. */\r
+#define BOARD_LCD_IFWIDTH           24\r
+/** Frame size in words (height * width * bpp / 32) */\r
+#define BOARD_LCD_FRAMESIZE         (BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT * BOARD_LCD_IFWIDTH / 32)\r
+\r
+/** Vertical front porch in number of lines. */\r
+#define BOARD_LCD_TIMING_VFP        22\r
+/** Vertical back porch in number of lines. */\r
+#define BOARD_LCD_TIMING_VBP        21\r
+/** Vertical pulse width in number of lines. */\r
+#define BOARD_LCD_TIMING_VPW        2\r
+/** Horizontal front porch in LCDDOTCLK cycles. */\r
+#define BOARD_LCD_TIMING_HFP        64\r
+/** Horizontal back porch in LCDDOTCLK cycles. */\r
+#define BOARD_LCD_TIMING_HBP        64\r
+/** Horizontal pulse width in LCDDOTCLK cycles. */\r
+#define BOARD_LCD_TIMING_HPW        128\r
+\r
+/** Frame rate in Hz. */\r
+#define BOARD_LCD_FRAMERATE         40\r
+\r
+/** Pixel clock rate in Hz (HS period * VS period * BOARD_LCD_FRAMERATE). */\r
+#define BOARD_LCD_PIXELCLOCK        ((BOARD_LCD_TIMING_HPW+BOARD_LCD_TIMING_HBP+BOARD_LCD_WIDTH+BOARD_LCD_TIMING_HFP)\\r
+                                    *(BOARD_LCD_TIMING_VPW+BOARD_LCD_TIMING_VBP+BOARD_LCD_HEIGHT+BOARD_LCD_TIMING_VFP)\\r
+                                    *BOARD_LCD_FRAMERATE)\r
+\r
+#define BOARD_ISI_VSYNC     {PIO_PB3C_ISI_VSYNC, PIOB, ID_PIOB, PIO_PERIPH_C, PIO_DEFAULT}\r
+#define BOARD_ISI_HSYNC     {PIO_PB4C_ISI_HSYNC, PIOB, ID_PIOB, PIO_PERIPH_C, PIO_DEFAULT}\r
+#define BOARD_ISI_PCK       {PIO_PB1C_ISI_PCK, PIOB, ID_PIOB, PIO_PERIPH_C, PIO_DEFAULT}\r
+#define BOARD_ISI_PINS_DATA {0x07F80000, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT} //pc19-26\r
+//#define BOARD_ISI_PINS_DATA2 {0x00000003, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}\r
+\r
+#define PIN_ISI_RST       {1 << 11, PIOB, ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}\r
+#define PIN_ISI_RSTN      {1 << 5, PIOB, ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}\r
+\r
+#define PINS_ISI          BOARD_ISI_VSYNC, BOARD_ISI_HSYNC, BOARD_ISI_PCK , BOARD_ISI_PINS_DATA\r
+\r
+/** Touchscreen ADC clock frequency to use. */\r
+#define BOARD_TOUCHSCREEN_ADCCLK    300000 /* 8MHz max */\r
+/** Touchscreen ADC startup time in Âµseconds. */\r
+#define BOARD_TOUCHSCREEN_STARTUP   40\r
+/** Touchscreen ADC track and hold time in nanoseconds. */\r
+#define BOARD_TOUCHSCREEN_SHTIM     2000    /* min 1µs at 8MHz */\r
+/** Touchscreen pen debounce time in nanoseconds. */\r
+#define BOARD_TOUCHSCREEN_DEBOUNCE  10000000\r
+\r
+#define PIN_AD0      {PIO_PC27A_AD0, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+#define PIN_AD1      {PIO_PC28A_AD1, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+#define PIN_AD2      {PIO_PC29A_AD2, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+#define PIN_AD3      {PIO_PC30A_AD3, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+#define PIN_AD4      {PIO_PC31A_AD4, PIOC, ID_PIOC, PIO_PERIPH_A, PIO_DEFAULT}\r
+\r
+//#define PINS_TOUCH_SCREEN   PIN_AD0_XP, PIN_AD1_XM, PIN_AD2_YP, PIN_AD3_YM, PIN_AD4_LR\r
+\r
+/** HDMI reset pins. */\r
+#define PIN_HDMI_RESET_L  {PIO_PC31, PIOC, ID_PIOC, PIO_OUTPUT_0, PIO_DEFAULT}\r
+#define PIN_HDMI_RESET_H  {PIO_PC31, PIOC, ID_PIOC, PIO_OUTPUT_1, PIO_DEFAULT}\r
+\r
+/*----------------------------------------------------------------------------*/\r
+/**\r
+ * \page sama5d4_ek_chipdef "sama5d4-EK - Individual chip definition"\r
+ * This page lists the definitions related to different chip's definition\r
+ * located in the board.h file for the sama5d4-EK.\r
+ *\r
+ * LEDs\r
+ * - \ref PIN_LED_0\r
+ * - \ref PIN_LED_1\r
+ * - \ref PIN_LED_2\r
+ * - \ref PINS_LEDS\r
+ *\r
+ * Push buttons\r
+ * - \ref PIN_PUSHBUTTON_1\r
+  * - \ref PINS_PUSHBUTTONS\r
\r
+ *\r
+ * PCK0 \r
+ * - \ref PIN_PCK0\r
+ *\r
+ * PCK1 \r
+ * - \ref  PIN_PCK1\r
+ */\r
+\r
+#if defined(BOARD_REV_A_EK)||defined(BOARD_REV_B_EK)\r
+#define LED_BLUE      0\r
+#define LED_RED       1\r
+\r
+/** LED #0 pin definition (LED_BLUE). */\r
+#define PIN_LED_0   {(PIO_PE8), PIOE, ID_PIOE, PIO_OUTPUT_1, PIO_DEFAULT}\r
+/** LED #1 pin definition (LED_RED). */\r
+#define PIN_LED_1   {(PIO_PE9), PIOE, ID_PIOE, PIO_OUTPUT_0, PIO_DEFAULT}\r
+/** LED #2 pin definition (LED_GREEN). */\r
+#define PIN_LED_2   {(PIO_PE28), PIOE, ID_PIOE, PIO_OUTPUT_0, PIO_DEFAULT}\r
+\r
+/** List of all LEDs definitions. */\r
+#define PINS_LEDS   PIN_LED_0, PIN_LED_1,PIN_LED_2\r
+#endif\r
+\r
+/** Push button #1 definition. Attributes = pull-up + debounce + interrupt on rising edge. */\r
+#define PIN_PUSHBUTTON_1    {PIO_PE13, PIOE, ID_PIOE, PIO_INPUT, PIO_PULLUP | PIO_DEBOUNCE | PIO_IT_FALL_EDGE}\r
+#define PIN_PUSHBUTTON_2    {PIO_PE13, PIOE, ID_PIOE, PIO_INPUT, PIO_PULLUP | PIO_DEBOUNCE | PIO_IT_FALL_EDGE}\r
+/** List of all push button definitions. */\r
+#define PINS_PUSHBUTTONS    PIN_PUSHBUTTON_1 \r
+\r
+/** Push button #1 index. */\r
+#define PUSHBUTTON_BP1   0\r
+/** Push button #2 index. */\r
+#define PUSHBUTTON_BP2   1\r
+\r
+/** catb button */\r
+#define PIN_SBUTTON0    {1 << 18, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+#define PIN_SBUTTON1    {1 << 19, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+#define PIN_SBUTTON2    {1 << 20, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+#define PIN_SBUTTON3    {1 << 21, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+#define PIN_SBUTTON4    {1 << 22, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+#define PIN_SBUTTON_DIS {1 << 29, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+#define PINS_SBUTTON PIN_SBUTTON0, PIN_SBUTTON1, PIN_SBUTTON2, PIN_SBUTTON3, PIN_SBUTTON4, PIN_SBUTTON_DIS\r
+\r
+\r
+/** PCK0 */\r
+#define PIN_PCK0        {PIO_PB26A_PCK0, PIOB, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT}\r
+/** PCK1 */\r
+#define PIN_PCK1        {PIO_PD31B_PCK1, PIOD, ID_PIOD, PIO_PERIPH_B, PIO_DEFAULT}\r
+//#define PIN_PCK1        {PIO_PC4C_PCK1, PIOC, ID_PIOC, PIO_PERIPH_C, PIO_DEFAULT}\r
+/** PCK2 */\r
+#define PIN_PCK2        {PIO_PB10B_PCK2, PIOB, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT}\r
+\r
+\r
+/** PWM0 */\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers for board\r
+ *----------------------------------------------------------------------------*/\r
\r
+#include "include/board_lowlevel.h"\r
+#include "include/bmp.h"\r
+#include "include/dbgu_console.h"\r
+#include "include/dbg_util.h"\r
+#include "include/hamming.h"\r
+#include "include/led.h"\r
+#include "include/math.h"\r
+#include "include/timetick.h"\r
+#include "include/wav.h"\r
+#include "include/twid.h"\r
+#include "include/xdma_hardware_interface.h"\r
+#include "include/xdmad.h"\r
+#include "include/board_memories.h"\r
+#include "include/iso7816_4.h"\r
+#include "include/lcdd.h"\r
+#include "include/lcd_draw.h"\r
+#include "include/lcd_font10x14.h"\r
+#include "include/lcd_font.h"\r
+#include "include/lcd_color.h"\r
+#include "include/mcid.h"\r
+#include "include/gmii.h"\r
+#include "include/gmacd.h"\r
+#include "include/gmacb.h"\r
+#include "include/ov.h"\r
+#include "include/omnivision.h"\r
+#include "include/ovyuv.h"\r
+#include "include/tsd.h"\r
+#include "include/tsd_com.h"\r
+#include "include/wm8904.h"\r
+#include "include/rtc_calib.h"\r
+\r
+#endif /* #ifndef _BOARD_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ads7843.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ads7843.h
new file mode 100644 (file)
index 0000000..c265184
--- /dev/null
@@ -0,0 +1,55 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for ADS7843 driver.\r
+ */\r
+\r
+#ifndef _ADS7843_\r
+#define _ADS7843_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void ADS7843_Initialize( void ) ;\r
+\r
+extern void ADS7843_Reset( void ) ;\r
+\r
+extern void ADS7843_GetPosition( uint32_t *px_pos, uint32_t *py_pos ) ;\r
+\r
+#endif /* #ifndef _ADS7843_H */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/bmp.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/bmp.h
new file mode 100644 (file)
index 0000000..60470f3
--- /dev/null
@@ -0,0 +1,250 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *  \section Purpose\r
+ * \r
+ *  Utility for BMP\r
+ * \r
+ */\r
+\r
+#ifndef BMP_H\r
+#define BMP_H\r
+\r
+/**  BMP magic number ('BM'). */\r
+#define BMP_TYPE       0x4D42\r
+\r
+/**  headerSize must be set to 40 */\r
+#define BITMAPINFOHEADER   40\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported types\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/*\r
+ * In case of IAR EWARM use, we define an empty macro to turn useless GCC and MDK __attribute__ keyword\r
+ */\r
+#if defined __ICCARM__ || defined __CC_ARM || defined __GNUC__\r
+#    pragma pack( 1 )\r
+#endif\r
+\r
+/** BMP (Windows) File Header Format */\r
+typedef struct _BMPFileHeader\r
+{\r
+    /** signature, must be 4D42 hex */\r
+    uint16_t type;\r
+    /** size of BMP file in bytes (unreliable) */\r
+    uint32_t fileSize;\r
+    /** reserved, must be zero */\r
+    uint16_t reserved1;\r
+    /** reserved, must be zero */\r
+    uint16_t reserved2;\r
+    /** offset to start of image data in bytes */\r
+    uint32_t offset;\r
+} BMPFileHeader;\r
+\r
+/** BMP (Windows 2.x) Header */\r
+typedef struct _BMP2XHeader\r
+{\r
+    /** size of this header in bytes */\r
+    uint32_t size;\r
+    /** image width in pixels */\r
+    uint16_t width;\r
+    /** image height in pixels */\r
+    uint16_t height;\r
+    /** number of color planes */\r
+    uint16_t planes;\r
+    /** number of bits per pixel */\r
+    uint16_t bitsPerPixel;\r
+} BMP2XHeader;\r
+\r
+/** BMP (Windows 3.x) Header, 40 bytes */\r
+typedef struct _BMP3XHeader\r
+{\r
+    /** size of this header in bytes */\r
+    uint32_t size;\r
+    /** image width in pixels */\r
+    int32_t  width;\r
+    /** image height in pixels */\r
+    int32_t  height;\r
+    /** number of color planes */\r
+    uint16_t planes;\r
+    /** number of bits per pixel */\r
+    uint16_t bitsPerPixel;\r
+    /** Compression methods used */\r
+    uint32_t compression;\r
+    /** Size of bitmap in bytes */\r
+    uint32_t sizeOfBitmap;\r
+    /** horizontal resolution in pixels per meter */\r
+    int32_t  xResolution;\r
+    /** vertical resolution in pixels per meter */\r
+    int32_t  yResolution;\r
+    /** number of colors in the image */\r
+    uint32_t colorsUsed;\r
+    /** minimum number of important colors */\r
+    uint32_t colorsImportant;\r
+}  BMP3XHeader;\r
+\r
+/** BMP (Windows 95, V4) Header, 108 bytes */\r
+typedef struct _BMP4Header\r
+{\r
+    /** size of this header in bytes */\r
+    uint32_t size;\r
+    /** image width in pixels */\r
+    int32_t  width;\r
+    /** image height in pixels */\r
+    int32_t  height;\r
+    /** number of color planes */\r
+    uint16_t planes;\r
+    /** number of bits per pixel */\r
+    uint16_t bitsPerPixel;\r
+    /** Compression methods used */\r
+    uint32_t compression;\r
+    /** Size of bitmap in bytes */\r
+    uint32_t sizeOfBitmap;\r
+    /** horizontal resolution in pixels per meter */\r
+    int32_t  xResolution;\r
+    /** vertical resolution in pixels per meter */\r
+    int32_t  yResolution;\r
+    /** number of colors in the image */\r
+    uint32_t colorsUsed;\r
+    /** minimum number of important colors */\r
+    uint32_t colorsImportant;\r
+\r
+    /** Mask identifying bits of red component */\r
+    uint32_t redMask;\r
+    /** Mask identifying bits of green component */\r
+    uint32_t greenMask;\r
+    /** Mask identifying bits of blue component */\r
+    uint32_t blueMask;\r
+    /** Mask identifying bits of alpha component */\r
+    uint32_t alphaMask;\r
+    /** Color space type */\r
+    uint32_t csType;\r
+    /** X coordinate of red endpoint */\r
+    int32_t  redX;\r
+    /** Y coordinate of red endpoint */\r
+    int32_t  redY;\r
+    /** Z coordinate of red endpoint */\r
+    int32_t  redZ;\r
+    /** X coordinate of green endpoint */\r
+    int32_t  greenX;\r
+    /** Y coordinate of green endpoint */\r
+    int32_t  greenY;\r
+    /** Z coordinate of green endpoint */\r
+    int32_t  greenZ;\r
+    /** X coordinate of blue endpoint */\r
+    int32_t  blueX;\r
+    /** Y coordinate of blue endpoint */\r
+    int32_t  blueY;\r
+    /** Z coordinate of blue endpoint */\r
+    int32_t  blueZ;\r
+    /** Gamma red coordinate scale value */\r
+    uint32_t gammaRed;\r
+    /** Gamma green coordinate scale value */\r
+    uint32_t gammaGreen;\r
+    /** Gamma blue coordinate scale value */\r
+    uint32_t gammaBlue;\r
+}  BMP4Header;\r
+\r
+/** BMP (Windows) Header Format */\r
+typedef struct _BMPHeader\r
+{\r
+    /*  signature, must be 4D42 hex */\r
+    uint16_t type;\r
+    /*  size of BMP file in bytes (unreliable) */\r
+    uint32_t fileSize;\r
+    /*  reserved, must be zero */\r
+    uint16_t reserved1;\r
+    /*  reserved, must be zero */\r
+    uint16_t reserved2;\r
+    /*  offset to start of image data in bytes */\r
+    uint32_t offset;\r
+    /*  size of BITMAPINFOHEADER structure, must be 40 */\r
+    uint32_t headerSize;\r
+    /*  image width in pixels */\r
+    uint32_t width;\r
+    /*  image height in pixels */\r
+    uint32_t height;\r
+    /*  number of planes in the image, must be 1 */\r
+    uint16_t planes;\r
+    /*  number of bits per pixel (1, 4, 8, 16, 24, 32) */\r
+    uint16_t bits;\r
+    /*  compression type (0=none, 1=RLE-8, 2=RLE-4) */\r
+    uint32_t compression;\r
+    /*  size of image data in bytes (including padding) */\r
+    uint32_t imageSize;\r
+    /*  horizontal resolution in pixels per meter (unreliable) */\r
+    uint32_t xresolution;\r
+    /*  vertical resolution in pixels per meter (unreliable) */\r
+    uint32_t yresolution;\r
+    /*  number of colors in image, or zero */\r
+    uint32_t ncolours;\r
+    /*  number of important colors, or zero */\r
+    uint32_t importantcolours;\r
+\r
+} BMPHeader  ; // GCC\r
+\r
+#if defined __ICCARM__ || defined __CC_ARM || defined __GNUC__\r
+#    pragma pack()\r
+#endif\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+extern uint8_t BMP_IsValid(void *file);\r
+\r
+extern uint32_t BMP_GetFileSize(void *file);\r
+\r
+extern uint8_t BMP_Decode(\r
+    void *file,\r
+    uint8_t*buffer,\r
+    uint32_t width,\r
+    uint32_t height,\r
+    unsigned char bpp);\r
+\r
+extern void WriteBMPheader(uint32_t* pAddressHeader,\r
+                    uint32_t  bmpHSize,\r
+                    uint32_t  bmpVSize,\r
+                    uint8_t bmpRgb,\r
+                    uint8_t nbByte_Pixels);\r
+\r
+extern void BMP_displayHeader(uint32_t* pAddressHeader);\r
+\r
+extern void RGB565toBGR555(\r
+    uint8_t *fileSource,\r
+    uint8_t *fileDestination,\r
+    uint32_t width,\r
+    uint32_t height,\r
+    uint8_t bpp);\r
+\r
+#endif //#ifndef BMP_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/board_lowlevel.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/board_lowlevel.h
new file mode 100644 (file)
index 0000000..bb03363
--- /dev/null
@@ -0,0 +1,124 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for the low-level initialization function.\r
+ *\r
+ */\r
+\r
+#ifndef BOARD_LOWLEVEL_H\r
+#define BOARD_LOWLEVEL_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void defaultSpuriousHandler( void );\r
+extern void defaultFiqHandler( void );\r
+extern void defaultIrqHandler( void );\r
+\r
+/* Cortex-A5 core handlers */\r
+/*\r
+*/\r
+\r
+extern void SYS_IrqHandler( void ) ;\r
+extern void Spurious_handler( void ) ;\r
+\r
+/* Peripherals handlers */\r
+extern void SAIC0_Handler(void);\r
+extern void ARM_IrqHandler(void);\r
+extern void PIT_IrqHandler(void);\r
+extern void WDT_IrqHandler(void);\r
+extern void PIOD_IrqHandler(void);\r
+extern void USART0_IrqHandler(void);\r
+extern void USART1_IrqHandler(void);\r
+extern void XDMAC0_IrqHandler(void);\r
+extern void ICM_IrqHandler(void);\r
+extern void PKCC_IrqHandler(void);\r
+extern void SCI_IrqHandler(void);\r
+extern void AES_IrqHandler(void);\r
+extern void AESB_IrqHandler(void);\r
+extern void TDES_IrqHandler(void);\r
+extern void SHA_IrqHandler(void);\r
+extern void MPDDRC_IrqHandler(void);\r
+extern void H32MX_IrqHandler(void);\r
+extern void H64MX_IrqHandler(void);\r
+extern void VDEC_IrqHandler(void);\r
+extern void SECUMOD_IrqHandler(void);\r
+extern void MSADCC_IrqHandler(void);\r
+extern void HSMC_IrqHandler(void);\r
+extern void PIOA_IrqHandler(void);\r
+extern void PIOB_IrqHandler(void);\r
+extern void PIOC_IrqHandler(void);\r
+extern void PIOE_IrqHandler(void);\r
+extern void UART0_IrqHandler(void);\r
+extern void UART1_IrqHandler(void);\r
+extern void USART2_IrqHandler(void);\r
+extern void USART3_IrqHandler(void);\r
+extern void USART4_IrqHandler(void);\r
+extern void TWI0_IrqHandler(void);\r
+extern void TWI1_IrqHandler(void);\r
+extern void TWI2_IrqHandler(void);\r
+extern void HSMCI0_IrqHandler(void);\r
+extern void HSMCI1_IrqHandler(void);\r
+extern void SPI0_IrqHandler(void);\r
+extern void SPI1_IrqHandler(void);\r
+extern void SPI2_IrqHandler(void);\r
+extern void TC0_IrqHandler(void);\r
+extern void TC1_IrqHandler(void);\r
+extern void TC2_IrqHandler(void);\r
+extern void PWM_IrqHandler(void);\r
+extern void ADC_IrqHandler(void);\r
+extern void DBGU_IrqHandler(void);\r
+extern void UHPHS_IrqHandler(void);\r
+extern void UDPHS_IrqHandler(void);\r
+extern void SSC0_IrqHandler(void);\r
+extern void SSC1_IrqHandler(void);\r
+extern void XDMAC1_IrqHandler(void);\r
+extern void LCDC_IrqHandler(void);\r
+extern void ISI_IrqHandler(void);\r
+extern void TRNG_IrqHandler(void);\r
+extern void GMAC0_IrqHandler(void);\r
+extern void GMAC1_IrqHandler(void);\r
+extern void AIC0_IrqHandler(void);\r
+extern void SFC_IrqHandler(void);\r
+extern void SECURAM_IrqHandler(void);\r
+extern void CTB_IrqHandler(void);\r
+extern void SMD_IrqHandler(void);\r
+extern void TWI3_IrqHandler(void);\r
+extern void CATB_IrqHandler(void);\r
+extern void SFR_IrqHandler(void);\r
+extern void AIC1_IrqHandler(void);\r
+extern void SAIC1_IrqHandler(void); \r
+extern void L2CC_IrqHandler(void);\r
+extern void LowLevelInit( void ) ;\r
+\r
+#endif /* BOARD_LOWLEVEL_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/board_memories.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/board_memories.h
new file mode 100644 (file)
index 0000000..05755a6
--- /dev/null
@@ -0,0 +1,53 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for memories configuration on board.\r
+ *\r
+ */\r
+\r
+#ifndef BOARD_MEMORIES_H\r
+#define BOARD_MEMORIES_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
\r
+extern void BOARD_RemapRom( void );\r
+extern void BOARD_RemapRam( void );\r
+extern void BOARD_ConfigureVddMemSel(uint8_t VddMemSel) ;\r
+extern void BOARD_ConfigureDdram( void );\r
+extern void BOARD_ConfigureSdram( void );\r
+extern void BOARD_ConfigureNandFlash( uint8_t busWidth ) ;\r
+extern void BOARD_ConfigureNorFlash( uint8_t busWidth ) ;\r
+extern void BOARD_ConfigureLpDdram(void);\r
+#endif /* #ifndef BOARD_MEMORIES_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/dbg_util.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/dbg_util.h
new file mode 100644 (file)
index 0000000..e87e2ce
--- /dev/null
@@ -0,0 +1,66 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Implements DBG utility that uses DBGU and System tick to get byte or binary\r
+ *  stream from DBGU console.\r
+ */\r
+\r
+#ifndef _DBG_UTIL_\r
+#define _DBG_UTIL_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern uint8_t DbgReceiveByte(uint8_t * pByte,uint32_t timeOut);\r
+\r
+extern uint32_t DbgReceiveBinary(uint8_t start,\r
+                                 uint32_t address,\r
+                                 uint32_t maxSize);\r
+\r
+extern uint32_t DbgReceive1KXModem(uint8_t * pktBuffer,\r
+                                   uint32_t address,\r
+                                   uint32_t maxSize);\r
+\r
+#endif /* _DBG_UTIL_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/dbgu_console.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/dbgu_console.h
new file mode 100644 (file)
index 0000000..e543202
--- /dev/null
@@ -0,0 +1,56 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2009, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+#ifndef _DBGU_CONSOLE_\r
+#define _DBGU_CONSOLE_\r
+\r
+#include <stdint.h>\r
+\r
+/** Console baudrate always using 115200. */\r
+#define CONSOLE_BAUDRATE    115200\r
+\r
+extern void DBGU_ConsoleUseDBGU(void);\r
+extern void DBGU_ConsoleUseUSART0(void);\r
+extern void DBGU_ConsoleUseUSART1(void);\r
+extern void DBGU_ConsoleUseUSART3(void);\r
+\r
+extern void DBGU_Configure( uint32_t dwBaudrate, uint32_t dwMasterClock ) ;\r
+extern void DBGU_PutChar( uint8_t uc ) ;\r
+extern uint32_t DBGU_GetChar( void ) ;\r
+extern uint32_t DBGU_IsRxReady( void ) ;\r
+\r
+\r
+extern void DBGU_DumpFrame( uint8_t* pucFrame, uint32_t dwSize ) ;\r
+extern void DBGU_DumpMemory( uint8_t* pucBuffer, uint32_t dwSize, uint32_t dwAddress ) ;\r
+extern uint32_t DBGU_GetInteger( uint32_t* pdwValue ) ;\r
+extern uint32_t DBGU_GetIntegerMinMax( uint32_t* pdwValue, uint32_t dwMin, uint32_t dwMax ) ;\r
+extern uint32_t DBGU_GetHexa32( uint32_t* pdwValue ) ;\r
+\r
+#endif /* _DBGU_CONSOLE_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacb.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacb.h
new file mode 100644 (file)
index 0000000..7f8c794
--- /dev/null
@@ -0,0 +1,112 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup gmacb_module Ethernet GMACB Driver\r
+ *@{\r
+ *  Implement GEMAC PHY driver, that initialize the PHY to prepare for\r
+ *  ethernet transfer.\r
+ *\r
+ *  \section Usage\r
+ *  -# EMAC related pins and Driver should be initialized at first.\r
+ *  -# Initialize GMACB Driver instance by invoking GMACB_Init().\r
+ *  -# Initialize PHY connected via GMACB_InitPhy(), PHY address is\r
+ *     automatically adjusted by attempt to read.\r
+ *  -# Perform PHY auto negotiate through GMACB_AutoNegotiate(), so\r
+ *     connection established.\r
+ *\r
+ *\r
+ *  Related files:\n\r
+ *  \ref gmacb.h\n\r
+ *  \ref gmacb.c\n\r
+ *  \ref gmii.h.\n\r
+ *\r
+ */\r
+/**@}*/\r
+\r
+#ifndef _GMACB_H\r
+#define _GMACB_H\r
+\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <board.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Definitions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/** The reset length setting for external reset configuration */\r
+#define GMACB_RESET_LENGTH         0xD\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Types\r
+ *---------------------------------------------------------------------------*/\r
\r
\r
+/** The DM9161 instance */\r
+typedef struct _GMacb {\r
+    sGmacd *pGmacd;     /**< Driver */\r
+    /** The retry & timeout settings */\r
+    uint32_t retryMax;\r
+    /** PHY address ( pre-defined by pins on reset ) */\r
+    uint8_t phyAddress;\r
+} GMacb;\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+extern void GMACB_SetupTimeout(GMacb *pMacb, uint32_t toMax);\r
+\r
+extern void GMACB_Init(GMacb *pMacb, sGmacd *pGmacd, uint8_t phyAddress);\r
+\r
+extern uint8_t GMACB_InitPhy(GMacb *pMacb, \r
+                                    uint32_t mck,\r
+                                    const Pin *pResetPins,\r
+                                    uint32_t nbResetPins,\r
+                                    const Pin *pEmacPins,\r
+                                    uint32_t nbEmacPins);\r
+\r
+extern uint8_t GMACB_AutoNegotiate(GMacb *pMacb);\r
+\r
+extern uint8_t GMACB_GetLinkSpeed(GMacb *pMacb, uint8_t applySettings);\r
+\r
+extern uint8_t GMACB_Send(GMacb *pMacb, void *pBuffer, uint32_t size);\r
+\r
+extern uint32_t GMACB_Poll(GMacb *pMacb, uint8_t *pBuffer, uint32_t size);\r
+\r
+extern void GMACB_DumpRegisters(GMacb *pMacb);\r
+\r
+extern uint8_t GMACB_ResetPhy(GMacb *pMacb);\r
+\r
+#endif // #ifndef _GMACB_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacd.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmacd.h
new file mode 100644 (file)
index 0000000..b43d663
--- /dev/null
@@ -0,0 +1,198 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup gmacd_module\r
+ * @{\r
+ * Implement GMAC data transfer and PHY management functions.\r
+ *\r
+ * \section Usage\r
+ * -# Implement GMAC interrupt handler, which must invoke GMACD_Handler()\r
+ *    to handle GMAC interrupt events.\r
+ * -# Implement sGmacd instance in application.\r
+ * -# Initialize the instance with GMACD_Init() and GMACD_InitTransfer(),\r
+ *    so that GMAC data can be transmitted/received.\r
+ * -# Some management callbacks can be set by GMACD_SetRxCallback()\r
+ *    and GMACD_SetTxWakeupCallback().\r
+ * -# Send ethernet packets using GMACD_Send(), GMACD_TxLoad() is used\r
+ *    to check the free space in TX queue.\r
+ * -# Check and obtain received ethernet packets via GMACD_Poll().\r
+ *\r
+ * \sa \ref gmacb_module, \ref gmac_module\r
+ *\r
+ * Related files:\n\r
+ * \ref gmacd.c\n\r
+ * \ref gmacd.h.\n\r
+ *\r
+ *  \defgroup gmacd_defines GMAC Driver Defines\r
+ *  \defgroup gmacd_types GMAC Driver Types\r
+ *  \defgroup gmacd_functions GMAC Driver Functions\r
+ */\r
+/**@}*/\r
+\r
+#ifndef _GMACD_H_\r
+#define _GMACD_H_\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <board.h>\r
+\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Definitions\r
+ *---------------------------------------------------------------------------*/\r
+/** \addtogroup gmacd_defines\r
+    @{*/\r
+\r
+/** \addtogroup gmacd_buf_size GMACD Default Buffer Size\r
+        @{*/\r
+#define GMAC_RX_UNITSIZE            128     /**< Fixed size for RX buffer  */\r
+#define GMAC_TX_UNITSIZE            1518    /**< Size for ETH frame length */\r
+/**     @}*/\r
+\r
+/** \addtogroup gmacd_rc GMACD Return Codes\r
+        @{*/\r
+#define GMACD_OK                0   /**< Operation OK */\r
+#define GMACD_TX_BUSY           1   /**< TX in progress */\r
+#define GMACD_RX_NULL           1   /**< No data received */\r
+/** Buffer size not enough */\r
+#define GMACD_SIZE_TOO_SMALL    2\r
+/** Parameter error, TX packet invalid or RX size too small */\r
+#define GMACD_PARAM             3\r
+/** Transter is not initialized */\r
+#define GMACD_NOT_INITIALIZED   4\r
+/**     @}*/\r
+\r
+/** @}*/\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Types\r
+ *---------------------------------------------------------------------------*/\r
+/** \addtogroup gmacd_types\r
+    @{*/\r
+\r
+/** RX callback */\r
+typedef void (*fGmacdTransferCallback)(uint32_t status);\r
+/** Wakeup callback */\r
+typedef void (*fGmacdWakeupCallback)(void);\r
+\r
+/**\r
+ * GMAC driver struct.\r
+ */\r
+typedef struct _GmacDriver {\r
+\r
+    /** Pointer to HW register base */\r
+    Gmac *pHw;\r
+\r
+    uint8_t *pTxBuffer;\r
+    /** Pointer to allocated RX buffer */\r
+    uint8_t *pRxBuffer;\r
+\r
+    /** Pointer to Rx TDs (must be 8-byte aligned) */\r
+    sGmacRxDescriptor *pRxD;\r
+    /** Pointer to Tx TDs (must be 8-byte aligned) */\r
+    sGmacTxDescriptor *pTxD;\r
+\r
+    /** Optional callback to be invoked once a frame has been received */\r
+    fGmacdTransferCallback fRxCb;\r
+    /** Optional callback to be invoked once several TD have been released */\r
+    fGmacdWakeupCallback fWakupCb;\r
+    /** Optional callback list to be invoked once TD has been processed */\r
+    fGmacdTransferCallback *fTxCbList;\r
+\r
+      /** RX TD list size */\r
+    uint16_t wRxListSize;\r
+    /** RX index for current processing TD */\r
+    uint16_t wRxI;\r
+\r
+    /** TX TD list size */\r
+    uint16_t wTxListSize;\r
+    /** Circular buffer head pointer by upper layer (buffer to be sent) */\r
+    uint16_t wTxHead;\r
+    /** Circular buffer tail pointer incremented by handlers (buffer sent) */\r
+    uint16_t wTxTail;\r
+\r
+    /** Number of free TD before wakeup callback is invoked */\r
+    uint8_t  bWakeupThreshold;\r
+    /** HW ID */\r
+    uint8_t bId;\r
+} sGmacd;\r
+\r
+/** @}*/\r
+\r
+/** \addtogroup gmacd_functions\r
+    @{*/\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         GMAC Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+extern void GMACD_Handler(sGmacd *pGmacd );\r
+\r
+extern void GMACD_Init(sGmacd *pGmacd,\r
+                       Gmac *pHw,\r
+                       uint8_t bID, \r
+                       uint8_t enableCAF, \r
+                       uint8_t enableNBC );\r
+\r
+extern uint8_t GMACD_InitTransfer( sGmacd *pGmacd,\r
+                                   uint8_t *pRxBuffer, \r
+                                   sGmacRxDescriptor *pRxD,\r
+                                   uint16_t wRxSize,\r
+                                   uint8_t *pTxBuffer, \r
+                                   sGmacTxDescriptor *pTxD, \r
+                                   fGmacdTransferCallback *pTxCb,\r
+                                   uint16_t wTxSize);\r
+\r
+extern void GMACD_Reset(sGmacd *pGmacd);\r
+\r
+extern uint8_t GMACD_Send(sGmacd *pGmacd,\r
+                         void *pBuffer,\r
+                         uint32_t size,\r
+                         fGmacdTransferCallback fTxCb );\r
+\r
+extern  uint32_t GMACD_TxLoad(sGmacd *pGmacd);\r
+\r
+extern  uint8_t GMACD_Poll(sGmacd * pGmacd, \r
+                          uint8_t *pFrame, \r
+                          uint32_t frameSize, \r
+                          uint32_t *pRcvSize);\r
+\r
+extern void GMACD_SetRxCallback(sGmacd * pGmacd, fGmacdTransferCallback fRxCb);\r
+\r
+extern uint8_t GMACD_SetTxWakeupCallback(sGmacd * pGmacd,\r
+                                         fGmacdWakeupCallback fWakeup,\r
+                                         uint8_t bThreshold);\r
+\r
+/** @}*/\r
+\r
+#endif // #ifndef _GMACD_H_\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmii.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/gmii.h
new file mode 100644 (file)
index 0000000..0505913
--- /dev/null
@@ -0,0 +1,122 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2008, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _GMII_DEFINE_H\r
+#define _GMII_DEFINE_H\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+///         Definitions\r
+//-----------------------------------------------------------------------------\r
+//IEEE defined Registers\r
+#define GMII_BMCR        0x0   // Basic Mode Control Register\r
+#define GMII_BMSR        0x1   // Basic Mode Status Register\r
+#define GMII_PHYID1R     0x2   // PHY Idendifier Register 1\r
+#define GMII_PHYID2R     0x3   // PHY Idendifier Register 2\r
+#define GMII_ANAR        0x4   // Auto_Negotiation Advertisement Register\r
+#define GMII_ANLPAR      0x5   // Auto_negotiation Link Partner Ability Register\r
+#define GMII_ANER        0x6   // Auto-negotiation Expansion Register\r
+#define GMII_ANNPR       0x7   // Auto-negotiation Next Page Register\r
+#define GMII_ANLPNPAR    0x8   // Auto_negotiation Link Partner Next Page Ability Register\r
+#define GMII_DRCR        0x10   // Digital Reserved Control Register\r
+#define GMII_AFEC1R      0x11   // AFE Control 1 Register\r
+#define GMII_RXERCR      0x15   // RXER Couter Register\r
+#define GMII_OMSOR       0x16   // Operation Mode Strap Override Register\r
+#define GMII_OMSSR       0x17   // Operation Mode Strap Status Register\r
+#define GMII_ECR         0x18   // Expanded Control Register\r
+#define GMII_ICSR        0x1B   // Interrupt Control/Status Register\r
+#define GMII_LCSR        0x1D   // LinkMD® Control/Status Register\r
+#define GMII_PC1R        0x1E   // PHY Control 1 Register\r
+#define GMII_PC2R        0x1F  // PHY Control 2 Register\r
+\r
+\r
+// PHY ID Identifier Register\r
+#define GMII_LSB_MASK           0xF\r
+// definitions: MII_PHYID1\r
+#define GMII_OUI_MSB            0x0022\r
+// definitions: MII_PHYID2\r
+#define GMII_OUI_LSB            0x1560\r
+\r
+\r
+\r
+// Basic Mode Control Register (BMCR)\r
+// Bit definitions: MII_BMCR\r
+#define GMII_RESET             (1 << 15) // 1= Software Reset; 0=Normal Operation\r
+#define GMII_LOOPBACK          (1 << 14) // 1=loopback Enabled; 0=Normal Operation\r
+#define GMII_SPEED_SELECT_LSB  (1 << 13) // 1,0=1000Mbps 0,1=100Mbps; 0,0=10Mbps\r
+#define GMII_AUTONEG           (1 << 12) // Auto-negotiation Enable\r
+#define GMII_POWER_DOWN        (1 << 11) // 1=Power down 0=Normal operation\r
+#define GMII_ISOLATE           (1 << 10) // 1 = Isolates 0 = Normal operation\r
+#define GMII_RESTART_AUTONEG   (1 << 9)  // 1 = Restart auto-negotiation 0 = Normal operation\r
+#define GMII_DUPLEX_MODE       (1 << 8)  // 1 = Full duplex operation 0 = Normal operation\r
+//      Reserved                7        // Read as 0, ignore on write\r
+#define GMII_SPEED_SELECT_MSB  (1 << 6)  // \r
+//      Reserved                5 to 0   // Read as 0, ignore on write\r
+\r
+\r
+// Basic Mode Status Register (BMSR)\r
+// Bit definitions: MII_BMSR\r
+#define GMII_100BASE_T4        (1 << 15) // 100BASE-T4 Capable\r
+#define GMII_100BASE_TX_FD     (1 << 14) // 100BASE-TX Full Duplex Capable\r
+#define GMII_100BASE_T4_HD     (1 << 13) // 100BASE-TX Half Duplex Capable\r
+#define GMII_10BASE_T_FD       (1 << 12) // 10BASE-T Full Duplex Capable\r
+#define GMII_10BASE_T_HD       (1 << 11) // 10BASE-T Half Duplex Capable\r
+//      Reserved                10 to 9  // Read as 0, ignore on write\r
+#define GMII_EXTEND_STATUS     (1 << 8)  // 1 = Extend Status Information In Reg 15\r
+//      Reserved                7\r
+#define GMII_MF_PREAMB_SUPPR   (1 << 6)  // MII Frame Preamble Suppression\r
+#define GMII_AUTONEG_COMP      (1 << 5)  // Auto-negotiation Complete\r
+#define GMII_REMOTE_FAULT      (1 << 4)  // Remote Fault\r
+#define GMII_AUTONEG_ABILITY   (1 << 3)  // Auto Configuration Ability\r
+#define GMII_LINK_STATUS       (1 << 2)  // Link Status\r
+#define GMII_JABBER_DETECT     (1 << 1)  // Jabber Detect\r
+#define GMII_EXTEND_CAPAB      (1 << 0)  // Extended Capability\r
+\r
+\r
+// Auto-negotiation Advertisement Register (ANAR)\r
+// Auto-negotiation Link Partner Ability Register (ANLPAR)\r
+// Bit definitions: MII_ANAR, MII_ANLPAR\r
+#define GMII_NP               (1 << 15) // Next page Indication\r
+//      Reserved               7\r
+#define GMII_RF               (1 << 13) // Remote Fault\r
+//      Reserved               12       // Write as 0, ignore on read\r
+#define GMII_PAUSE_MASK       (3 << 11) // 0,0 = No Pause 1,0 = Asymmetric Pause(link partner)\r
+                                        // 0,1 = Symmetric Pause 1,1 = Symmetric&Asymmetric Pause(local device)   \r
+#define GMII_T4               (1 << 9)  // 100BASE-T4 Support\r
+#define GMII_TX_FDX           (1 << 8)  // 100BASE-TX Full Duplex Support\r
+#define GMII_TX_HDX           (1 << 7)  // 100BASE-TX Support\r
+#define GMII_10_FDX           (1 << 6)  // 10BASE-T Full Duplex Support\r
+#define GMII_10_HDX           (1 << 5)  // 10BASE-T Support\r
+//      Selector                 4 to 0   // Protocol Selection Bits\r
+#define GMII_AN_IEEE_802_3      0x0001\r
+\r
+\r
+\r
+#endif // #ifndef _MII_DEFINE_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/hamming.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/hamming.h
new file mode 100644 (file)
index 0000000..f5f4e39
--- /dev/null
@@ -0,0 +1,64 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2008, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _HAMMING_\r
+#define _HAMMING_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Defines\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  These are the possible errors when trying to verify a block of data encoded\r
+ *  using a Hamming code:\r
+ *\r
+ *  \section Errors\r
+ *   - Hamming_ERROR_SINGLEBIT\r
+ *   - Hamming_ERROR_ECC\r
+ *   - Hamming_ERROR_MULTIPLEBITS\r
+ */\r
+\r
+/**  A single bit was incorrect but has been recovered. */\r
+#define Hamming_ERROR_SINGLEBIT         1\r
+\r
+/** The original code has been corrupted. */\r
+#define Hamming_ERROR_ECC               2\r
+\r
+/** Multiple bits are incorrect in the data and they cannot be corrected. */\r
+#define Hamming_ERROR_MULTIPLEBITS      3\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+extern void Hamming_Compute256x( const uint8_t* pucData, uint32_t dwSize, uint8_t* pucCode ) ;\r
+\r
+extern uint8_t Hamming_Verify256x( uint8_t* pucData, uint32_t dwSize, const uint8_t* pucCode ) ;\r
+\r
+#endif /* _HAMMING_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/iso7816_4.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/iso7816_4.h
new file mode 100644 (file)
index 0000000..2d3c6c0
--- /dev/null
@@ -0,0 +1,87 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+//------------------------------------------------------------------------------\r
+/** \page\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Definition of methods for ISO7816 driver.\r
+ *\r
+ *  \section Usage\r
+ *\r
+ *  -# ISO7816_Init\r
+ *  -# ISO7816_IccPowerOff\r
+ *  -# ISO7816_XfrBlockTPDU_T0\r
+ *  -# ISO7816_Escape\r
+ *  -# ISO7816_RestartClock\r
+ *  -# ISO7816_StopClock\r
+ *  -# ISO7816_toAPDU\r
+ *  -# ISO7816_Datablock_ATR\r
+ *  -# ISO7816_SetDataRateandClockFrequency\r
+ *  -# ISO7816_StatusReset\r
+ *  -# ISO7816_cold_reset\r
+ *  -# ISO7816_warm_reset\r
+ *  -# ISO7816_Decode_ATR\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#ifndef ISO7816_4_H\r
+#define ISO7816_4_H\r
+\r
+/*------------------------------------------------------------------------------\r
+ * Constants Definition\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Size max of Answer To Reset */\r
+#define ATR_SIZE_MAX            55\r
+\r
+/** NULL byte to restart byte procedure */\r
+#define ISO_NULL_VAL            0x60\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void ISO7816_Init( const Pin pPinIso7816RstMC );\r
+extern void ISO7816_IccPowerOff(void);\r
+extern uint16_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,\r
+                                        uint8_t *pMessage,\r
+                                        uint16_t wLength );\r
+extern void ISO7816_Escape( void );\r
+extern void ISO7816_RestartClock(void);\r
+extern void ISO7816_StopClock( void );\r
+extern void ISO7816_toAPDU( void );\r
+extern void ISO7816_Datablock_ATR( uint8_t* pAtr, uint8_t* pLength );\r
+extern void ISO7816_SetDataRateandClockFrequency( uint32_t dwClockFrequency, uint32_t dwDataRate );\r
+extern uint8_t ISO7816_StatusReset( void );\r
+extern void ISO7816_cold_reset( void );\r
+extern void ISO7816_warm_reset( void );\r
+extern void ISO7816_Decode_ATR( uint8_t* pAtr );\r
+\r
+#endif /* ISO7816_4_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_color.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_color.h
new file mode 100644 (file)
index 0000000..43fb9ba
--- /dev/null
@@ -0,0 +1,85 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef COLOR_H\r
+#define COLOR_H\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * RGB 24-bits color table definition.\r
+ *\r
+ */\r
+\r
+/*\r
+ * RGB 24 Bpp\r
+ * RGB 888\r
+ * R7R6R5R4 R3R2R1R0 G7G6G5G4 G3G2G1G0 B7B6B5B4 B3B2B1B0\r
+ */\r
+#define COLOR_BLACK          0x000000\r
+#define COLOR_WHITE          0xFFFFFF\r
+\r
+#define COLOR_BLUE           0x0000FF\r
+#define COLOR_GREEN          0x00FF00\r
+#define COLOR_RED            0xFF0000\r
+\r
+#define COLOR_NAVY           0x000080\r
+#define COLOR_DARKBLUE       0x00008B\r
+#define COLOR_DARKGREEN      0x006400\r
+#define COLOR_DARKCYAN       0x008B8B\r
+#define COLOR_CYAN           0x00FFFF\r
+#define COLOR_TURQUOISE      0x40E0D0\r
+#define COLOR_INDIGO         0x4B0082\r
+#define COLOR_DARKRED        0x800000\r
+#define COLOR_OLIVE          0x808000\r
+#define COLOR_GRAY           0x808080\r
+#define COLOR_SKYBLUE        0x87CEEB\r
+#define COLOR_BLUEVIOLET     0x8A2BE2\r
+#define COLOR_LIGHTGREEN     0x90EE90\r
+#define COLOR_DARKVIOLET     0x9400D3\r
+#define COLOR_YELLOWGREEN    0x9ACD32\r
+#define COLOR_BROWN          0xA52A2A\r
+#define COLOR_DARKGRAY       0xA9A9A9\r
+#define COLOR_SIENNA         0xA0522D\r
+#define COLOR_LIGHTBLUE      0xADD8E6\r
+#define COLOR_GREENYELLOW    0xADFF2F\r
+#define COLOR_SILVER         0xC0C0C0\r
+#define COLOR_LIGHTGREY      0xD3D3D3\r
+#define COLOR_LIGHTCYAN      0xE0FFFF\r
+#define COLOR_VIOLET         0xEE82EE\r
+#define COLOR_AZUR           0xF0FFFF\r
+#define COLOR_BEIGE          0xF5F5DC\r
+#define COLOR_MAGENTA        0xFF00FF\r
+#define COLOR_TOMATO         0xFF6347\r
+#define COLOR_GOLD           0xFFD700\r
+#define COLOR_ORANGE         0xFFA500\r
+#define COLOR_SNOW           0xFFFAFA\r
+#define COLOR_YELLOW         0xFFFF00\r
+\r
+#endif /* #define COLOR_H */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_draw.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_draw.h
new file mode 100644 (file)
index 0000000..51dd211
--- /dev/null
@@ -0,0 +1,108 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup lcdd_draw Drawing On LCD\r
+ *\r
+ * Interface for drawing function on LCD.\r
+ *\r
+ * \note Before drawing, <b>canvas</b> should be selected via\r
+ *       LCDD_SelectCanvas(), or created by LCDD_CreateCanvas().\r
+ *\r
+ * Following functions can use:\r
+ * - Simple drawing:\r
+ *   - LCDD_Fill()\r
+ *   - LCDD_DrawPixel()\r
+ *   - LCDD_ReadPixel()\r
+ *   - LCDD_DrawLine()\r
+ *   - LCDD_DrawRectangle(), LCDD_DrawFilledRectangle()\r
+ *   - LCDD_DrawCircle(), LCDD_DrawFilledCircle()\r
+ *   - LCDD_DrawImage()\r
+ * - String related:\r
+ *   - LCDD_DrawString()\r
+ *   - LCDD_GetStringSize()\r
+ *\r
+ * \sa \ref lcdd_module, \ref lcdd_font\r
+ */\r
+\r
+#ifndef DRAW_H\r
+#define DRAW_H\r
+/** \addtogroup lcdd_draw\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+#include "lcd_gimp_image.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup lcdd_draw_func LCD Drawing Functions */\r
+/** @{*/\r
+extern void LCDD_Fill0( void ) ;\r
+\r
+extern void LCDD_Fill( uint32_t color ) ;\r
+\r
+extern void LCDD_DrawPixel( uint32_t x, uint32_t y, uint32_t c ) ;\r
+\r
+extern uint32_t LCDD_ReadPixel( uint32_t x, uint32_t y ) ;\r
+\r
+extern void LCDD_DrawLine( uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t color ) ;\r
+\r
+extern void LCDD_DrawRectangle( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;\r
+\r
+extern void LCDD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2, uint32_t dwColor ) ;\r
+\r
+extern void LCDD_DrawCircle( uint32_t x, uint32_t y, uint32_t r, uint32_t color ) ;\r
+extern void LCDD_DrawFilledCircle(uint32_t dwX,uint32_t dwY,uint32_t dwR,uint32_t dwColor);\r
+\r
+extern void LCDD_DrawString( uint32_t x, uint32_t y, const char *pString, uint32_t color ) ;\r
+\r
+extern void LCDD_DrawStringWithBGColor( uint32_t x, uint32_t y, const char *pString, uint32_t fontColor, uint32_t bgColor ) ;\r
+\r
+extern void LCDD_GetStringSize( const char *pString, uint32_t *pWidth, uint32_t *pHeight ) ;\r
+\r
+extern void LCDD_DrawImage( uint32_t x, uint32_t y, const uint8_t *pImage, uint32_t width, uint32_t height ) ;\r
+\r
+void LCDD_DrawGIMPImage( uint32_t dwX, uint32_t dwY, const SGIMPImage* pGIMPImage, uint32_t dwWidth, uint32_t dwHeight ) ;\r
+\r
+extern void LCDD_ClearWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor ) ;\r
+/** @}*/\r
+/**@}*/\r
+#endif /* #ifndef DRAW_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_font.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_font.h
new file mode 100644 (file)
index 0000000..e760602
--- /dev/null
@@ -0,0 +1,108 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for draw font on LCD.\r
+ *\r
+ */\r
+\r
+/**\r
+ * \addtogroup lcdd_font LCD Font Drawing\r
+ *\r
+ * \section Purpose\r
+ *\r
+ * The lcd_font.h files declares a font structure and a LCDD_DrawChar() function\r
+ * that must be implemented by a font definition file to be used with the\r
+ * LCDD_DrawString() method of draw.h.\r
+ *\r
+ * The font10x14.c implements the necessary variable and function for a 10x14\r
+ * font.\r
+ *\r
+ * \note Before drawing fonts, <b>canvas</b> should be selected via\r
+ *       LCDD_SelectCanvas(), or created by LCDD_CreateCanvas().\r
+ *\r
+ * \section Usage\r
+ *\r
+ * -# Declare a gFont global variable with the necessary Font information.\r
+ * -# Implement an LCDD_DrawChar() function which displays the specified\r
+ *    character on the LCD.\r
+ * -# Select or create canvas via LCDD_SelectCanvas() or LCDD_CreateCanvas().\r
+ * -# Use the LCDD_DrawString() method defined in draw.h to display a complete\r
+ *    string.\r
+ *\r
+ * \sa \ref lcdd_module, \ref lcdd_draw.\r
+ */\r
+\r
+#ifndef _LCD_FONT_\r
+#define _LCD_FONT_\r
+/** \addtogroup lcdd_font\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \brief Describes the font (width, height, supported characters, etc.) used by\r
+ * the LCD driver draw API.\r
+ */\r
+typedef struct _Font {\r
+    /* Font width in pixels. */\r
+    uint8_t width;\r
+    /* Font height in pixels. */\r
+    uint8_t height;\r
+} Font;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern const Font gFont;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup lcdd_font_func Font Functions */\r
+/** @{*/\r
+\r
+extern void LCDD_DrawChar( uint32_t x, uint32_t y, uint8_t c, uint32_t color ) ;\r
+\r
+extern void LCDD_DrawCharWithBGColor( uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor, uint32_t bgColor );\r
+/** @}*/\r
+/**@}*/\r
+#endif /* #ifndef LCD_FONT_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_font10x14.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_font10x14.h
new file mode 100644 (file)
index 0000000..427877a
--- /dev/null
@@ -0,0 +1,50 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup lcdd_font\r
+ * @{\r
+ *    \addtogroup font_10x14 Font 10x14\r
+ */\r
+/**@}*/\r
+\r
+#ifndef _LCD_FONT_10x14_\r
+#define _LCD_FONT_10x14_\r
+/** \addtogroup font_10x14\r
+ *  @{\r
+ */\r
+\r
+#include <stdint.h>\r
+\r
+extern const uint8_t pCharset10x14[] ;\r
+\r
+/** @}*/\r
+#endif /* #ifdef _LCD_FONT_10x14_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_gimp_image.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcd_gimp_image.h
new file mode 100644 (file)
index 0000000..01d2e1e
--- /dev/null
@@ -0,0 +1,43 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _GIMP_IMAGE_\r
+#define _GIMP_IMAGE_\r
+\r
+#include <stdint.h>\r
+\r
+typedef struct _SGIMPImage\r
+{\r
+  uint32_t dwWidth;\r
+  uint32_t dwHeight;\r
+  uint32_t dwBytes_per_pixel; /* 3:RGB, 4:RGBA */ \r
+  uint8_t* pucPixel_data ;\r
+} SGIMPImage ;\r
+\r
+#endif // _GIMP_IMAGE_\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcdd.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/lcdd.h
new file mode 100644 (file)
index 0000000..72cbad3
--- /dev/null
@@ -0,0 +1,194 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/**\r
+ * \ingroup lib_board\r
+ * \addtogroup lcdd_module LCD Driver\r
+ *\r
+ * \section Purpose\r
+ *\r
+ * Implement driver functions for LCD control and image display.\r
+ * - Implement basic LCD controler configuration.\r
+ * - Implement display functions for LCD layers.\r
+ * - Implement simple drawing functions.\r
+ * - Implement string display functions.\r
+ *\r
+ * \section lcdd_base_usage Usage\r
+ *\r
+ * Uses following functions for LCD basic configuration and displaying:\r
+ * -# Uses LCDD_Initialize() to initialize the controller and LCD.\r
+ * -# LCDD_On() and LCDD_Off() is used to turn LCD ON/OFF.\r
+ * -# LCDD_SetBacklight() is used to change LCD backlight level.\r
+ * -# To display a image (BMP format) on LCD, LCDD_ShowBMPRotated()\r
+ *    LCDD_ShowBMPScaled() and LCDD_ShowBMP() can be used.\r
+ * -# To change configuration for an overlay layer, the following functions\r
+ *    can use:\r
+ *    -# LCDD_EnableLayer(), LCDD_IsLayerOn(): Turn ON/OFF layer, check status.\r
+ *    -# LCDD_SetPosition(), LCDD_SetPrioty(), LCDD_EnableAlpha(),\r
+ *       LCDD_SetAlpha(), LCDD_SetColorKeying(): Change display options.\r
+ * -# Shortcuts for layer display are as following:\r
+ *    -# LCDD_ShowBase(), LCDD_StopBase()\r
+ *    -# LCDD_ShowOvr1(), LCDD_StopOvr1()\r
+ *    -# LCDD_ShowHeo(), LCDD_StopHeo()\r
+ *    -# LCDD_ShowHcr(), LCDD_StopHcr()\r
+ * -# Drawing supporting fucntions, for drawing canvas:\r
+ *    -# LCDD_CreateCanvas(): Create blank canvas on specified layer for\r
+ *                            drawing on\r
+ *    -# LCDD_SelectCanvas(): Select a displayer as canvas to drawing on\r
+ *    -# LCDD_GetCanvas():    Get current selected canvas layer\r
+ *\r
+ * For LCD drawing functions, refer to \ref lcdd_draw.\r
+ *\r
+ * For LCD string display, refer to \ref lcdd_font.\r
+ *\r
+ * @{\r
+ *   \defgroup lcdd_base LCD Driver General Operations\r
+ *   @{\r
+ *     Implementation of LCD driver, Include LCD initialization,\r
+ *     LCD on/off and LCD backlight control.\r
+ *\r
+ *     \sa \ref lcdd_base_usage "LCD Driver General Usage"\r
+ *   @}\r
+ *   \defgroup lcdd_draw LCD Driver Simple Drawing\r
+ *   @{\r
+ *   @}\r
+ *   \defgroup lcdd_font LCD Driver Font Display\r
+ *   @{\r
+ *   @}\r
+ * @}\r
+ */\r
+\r
+#ifndef LCDD_H\r
+#define LCDD_H\r
+/** \addtogroup lcdd_base\r
+ *  @{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Defines\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup lcdd_disp_id LCD display layers IDs\r
+ *      @{\r
+ */\r
+/** LCD controller ID, no display, configuration ONLY */\r
+#define LCDD_CONTROLLER     0\r
+/** LCD base layer, display fixed size image */\r
+#define LCDD_BASE           1\r
+/** LCD Overlay 1 */\r
+#define LCDD_OVR1           2\r
+/** LCD Overlay 2 */\r
+#define LCDD_OVR2           4\r
+/** LCD HighEndOverlay, support resize */\r
+#define LCDD_HEO            3\r
+/** LCD Cursor, max size 128x128 */\r
+#define LCDD_CUR            6\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** LCD display layer information */\r
+typedef struct _LcddLayer {\r
+    void* pBuffer;      /**< Display image buffer */\r
+    uint16_t wImgW;     /**< Display image width */\r
+    uint16_t wImgH;     /**< Display image height */\r
+    uint8_t  bMode;     /**< Image bpp (16,24,32) for RGB mode */\r
+    uint8_t  bLayer;    /**< Layer ID */\r
+} sLCDDLayer;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void LCDD_Initialize(void);\r
+\r
+extern void LCDD_On(void);\r
+extern void LCDD_Off(void);\r
+extern void LCDD_SetBacklight (uint32_t step);\r
+\r
+extern void LCDD_EnableLayer(uint8_t bLayer,uint8_t bEnDis);\r
+extern uint8_t LCDD_IsLayerOn(uint8_t bLayer);\r
+extern void LCDD_SetPosition(uint8_t bLayer,uint32_t x,uint32_t y);\r
+extern void LCDD_SetPrioty(uint8_t bLayer,uint8_t bPri);\r
+extern uint8_t LCDD_GetPrioty(uint8_t bLayer);\r
+extern void LCDD_EnableAlpha(uint8_t bLayer,uint8_t bEnDisLA,uint8_t bEnDisGA);\r
+extern void LCDD_SetAlpha(uint8_t bLayer, uint8_t bReverse, uint8_t bAlpha);\r
+extern uint8_t LCDD_GetAlpha(uint8_t bLayer);\r
+extern void LCDD_SetColorKeying(uint8_t bLayer,\r
+                                uint8_t bDstSrc,\r
+                                uint32_t dwColor,uint32_t dwMask);\r
+extern void LCDD_DisableColorKeying(uint8_t bLayer);\r
+extern void LCDD_SetCLUT(uint8_t bLayer,\r
+                         uint32_t * pCLUT,\r
+                         uint8_t bpp,uint8_t nbColors);\r
+\r
+extern void LCDD_Refresh(uint8_t bLayer);\r
+\r
+extern void *LCDD_ShowBMPRotated(uint8_t bLayer,\r
+                                 void * pBuffer,uint8_t bpp,\r
+                                 uint32_t x,uint32_t y,int32_t w,int32_t h,\r
+                                 uint32_t imgW,uint32_t imgH,\r
+                                 int16_t wRotate);\r
+extern void *LCDD_ShowBMPScaled(uint8_t bLayer,\r
+                                void * pBuffer,uint8_t bpp,\r
+                                uint32_t x,uint32_t y,int32_t w,int32_t h,\r
+                                uint32_t imgW,uint32_t imgH);\r
+extern void *LCDD_ShowBMP(uint8_t bLayer,\r
+                         void * pBuffer,uint8_t bpp,\r
+                         uint32_t x,uint32_t y,int32_t w,int32_t h);\r
+\r
+extern void *LCDD_ShowBase(void * pBuffer, uint8_t bpp, uint8_t bScanBottomUp);\r
+extern void LCDD_StopBase(void);\r
+\r
+extern void *LCDD_ShowOvr1(void * pBuffer, uint8_t bpp,\r
+                          uint32_t x,uint32_t y,int32_t w,int32_t h);\r
+extern void LCDD_StopOvr1(void);\r
+\r
+extern void *LCDD_ShowHeo(void * pBuffer, uint8_t bpp,\r
+                         uint32_t x,uint32_t y,int32_t w,int32_t h,\r
+                         uint32_t memW,uint32_t memH);\r
+extern void LCDD_StopHeo(void);\r
+\r
+extern void *LCDD_ShowHcr(void * pBuffer, uint8_t bpp,\r
+                         uint32_t x,uint32_t y,int32_t w,int32_t h);\r
+extern void LCDD_StopHcr(void);\r
+\r
+extern sLCDDLayer *LCDD_GetCanvas(void);\r
+extern uint8_t LCDD_SelectCanvas(uint8_t bLayer);\r
+extern void *LCDD_CreateCanvas(uint8_t bLayer,\r
+                               void * pBuffer,uint8_t bBPP,\r
+                               uint16_t wX,uint16_t wY,uint16_t wW,uint16_t wH);\r
+extern void LCDD_Flush_CurrentCanvas(void);\r
+/**  @}*/\r
+#endif /* #ifndef LCDD_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/led.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/led.h
new file mode 100644 (file)
index 0000000..4f7da31
--- /dev/null
@@ -0,0 +1,72 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ *  \section Purpose\r
+ * \r
+ *  Small set of functions for simple and portable LED usage.\r
+ * \r
+ *  \section Usage\r
+ * \r
+ *  -# Configure one or more LEDs using LED_Configure and\r
+ *     LED_ConfigureAll.\r
+ *  -# Set, clear and toggle LEDs using LED_Set, LED_Clear and\r
+ *     LED_Toggle.\r
+ * \r
+ *  LEDs are numbered starting from 0; the number of LEDs depend on the\r
+ *  board being used. All the functions defined here will compile properly\r
+ *  regardless of whether the LED is defined or not; they will simply\r
+ *  return 0 when a LED which does not exist is given as an argument.\r
+ *  Also, these functions take into account how each LED is connected on to\r
+ *  board; thus, \ref LED_Set might change the level on the corresponding pin\r
+ *  to 0 or 1, but it will always light the LED on; same thing for the other\r
+ *  methods.\r
+ */\r
+\r
+#ifndef _LED_\r
+#define _LED_\r
+\r
+#include <stdint.h>\r
+\r
+//------------------------------------------------------------------------------\r
+//         Global Functions\r
+//------------------------------------------------------------------------------\r
+\r
+extern uint32_t LED_Configure( uint32_t dwLed ) ;\r
+\r
+extern uint32_t LED_Set( uint32_t dwLed ) ;\r
+\r
+extern uint32_t LED_Clear( uint32_t dwLed ) ;\r
+\r
+extern uint32_t LED_Toggle( uint32_t dwLed ) ;\r
+\r
+#endif /* #ifndef LED_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/math.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/math.h
new file mode 100644 (file)
index 0000000..13d6bbf
--- /dev/null
@@ -0,0 +1,43 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+#ifndef _MATH_\r
+#define _MATH_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+extern uint32_t min( uint32_t dwA, uint32_t dwB ) ;\r
+extern uint32_t absv( int32_t lValue ) ;\r
+extern uint32_t power( uint32_t dwX, uint32_t dwY ) ;\r
+\r
+#endif /* #ifndef _MATH_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/mcid.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/mcid.h
new file mode 100644 (file)
index 0000000..7c7d768
--- /dev/null
@@ -0,0 +1,172 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/** \file */\r
+\r
+/**\r
+ * \ingroup sdmmc_hal\r
+ * \addtogroup mcid_module MCI Driver (HAL for SD/MMC Lib)\r
+ *\r
+ * \section Purpose\r
+ *\r
+ * This driver implements SD(IO)/MMC command operations and MCI configuration\r
+ * routines to perform SD(IO)/MMC access. It's used for upper layer\r
+ * (\ref libsdmmc_module "SD/MMC driver") to perform SD/MMC operations.\r
+ *\r
+ * \section Usage\r
+ *\r
+ * -# MCID_Init(): Initializes a MCI driver instance and the underlying\r
+ *                 peripheral.\r
+ * -# MCID_SendCmd(): Starts a MCI transfer which described by\r
+ *                    \ref sSdmmcCommand.\r
+ * -# MCID_CancelCmd(): Cancel a pending command.\r
+ * -# MCID_IsCmdCompleted(): Check if MCI transfer is finished.\r
+ * -# MCID_Handler(): Interrupt handler which is called by ISR handler.\r
+ * -# MCID_IOCtrl(): IO control function to report HW attributes to upper\r
+ *                   layer driver and modify HW settings (such as clock\r
+ *                   frequency, High-speed support, etc. See\r
+ *                   \ref sdmmc_ioctrls).\r
+ *\r
+ * \sa \ref dmad_module "DMA Driver", \ref hsmci_module "HSMCI",\r
+ *     \ref libsdmmc_module "SD/MMC Library"\r
+ *\r
+ * Related files:\n\r
+ * \ref mcid.h\n\r
+ * \ref mcid_dma.c.\n\r
+ */\r
+\r
+#ifndef MCID_H\r
+#define MCID_H\r
+/** \addtogroup mcid_module\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+#include <stdio.h>\r
+\r
+/** \addtogroup mcid_defines MCI Driver Defines\r
+ *      @{*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Constants\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** MCI States */\r
+#define MCID_IDLE   0       /**< Idle */\r
+#define MCID_LOCKED 1       /**< Locked for specific slot */\r
+#define MCID_CMD    2       /**< Processing the command */\r
+#define MCID_ERROR  3       /**< Command error */\r
+\r
+/** MCI Initialize clock 400K Hz */\r
+#define MCI_INITIAL_SPEED   400000\r
+\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Types\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup mcid_structs MCI Driver Data Structs\r
+ *      @{\r
+ */\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/**\r
+ *  \brief MCI Driver\r
+ */\r
+typedef struct _Mcid\r
+{\r
+    /** Pointer to a MCI peripheral. */\r
+    Hsmci         *pMciHw;\r
+    /** Pointer to a DMA driver */\r
+    sXdmad         *pXdmad;\r
+    /** Pointer to currently executing command. */\r
+    void          *pCmd;\r
+    /** MCK source, Hz */\r
+    uint32_t       dwMck;\r
+    /** DMA transfer channel */\r
+    uint32_t       dwDmaCh;\r
+    /** DMA transferred data index (bytes) */\r
+    uint32_t       dwXfrNdx;\r
+    /** DMA transfer size (bytes) */\r
+    uint32_t       dwXSize;\r
+    /** MCI peripheral identifier. */\r
+    uint8_t        bID;\r
+    /** Polling mode */\r
+    uint8_t        bPolling;\r
+    /** Reserved */\r
+    uint8_t        reserved;\r
+    /** state. */\r
+    volatile uint8_t bState;\r
+} sMcid;\r
+\r
+/**     @}*/\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup mcid_functions MCI Driver Functions\r
+        @{*/\r
+extern void MCID_Init(sMcid * pMcid,\r
+                      Hsmci * pMci, uint8_t bID, uint32_t dwMck,\r
+                      sXdmad * pXdmad,\r
+                      uint8_t bPolling);\r
+\r
+extern void MCID_Reset(sMcid * pMcid);\r
+\r
+extern void MCID_SetSlot(Hsmci *pMci, uint8_t slot);\r
+\r
+extern uint32_t MCID_Lock(sMcid * pMcid, uint8_t bSlot);\r
+\r
+extern uint32_t MCID_Release(sMcid * pMcid);\r
+\r
+extern void MCID_Handler(sMcid * pMcid);\r
+\r
+extern uint32_t MCID_SendCmd(sMcid * pMcid, void * pCmd);\r
+\r
+extern uint32_t MCID_CancelCmd(sMcid * pMcid);\r
+\r
+extern uint32_t MCID_IsCmdCompleted(sMcid * pMcid);\r
+\r
+extern uint32_t MCID_IOCtrl(sMcid * pMcid,uint32_t bCtl,uint32_t param);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+/**     @}*/\r
+/**@}*/\r
+#endif //#ifndef HSMCID_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/omnivision.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/omnivision.h
new file mode 100644 (file)
index 0000000..577b7dc
--- /dev/null
@@ -0,0 +1,74 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef OMNIVISION_H\r
+#define OMNIVISION_H\r
+\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         TYPE\r
+ *---------------------------------------------------------------------------*/\r
+/** define a structure for ovxxxx register initialization values */\r
+struct ov_reg\r
+{\r
+    /* Register to be written */\r
+    uint16_t reg;\r
+    /* Value to be written in the register */\r
+    uint8_t val;\r
+};\r
+\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         DEFINITAION\r
+ *---------------------------------------------------------------------------*/\r
+#define OV_2640          0x00\r
+#define OV_2643          0x01\r
+#define OV_5640          0x02\r
+#define OV_7740          0x03\r
+#define OV_9740          0x04\r
+#define OV_UNKNOWN       0xFF\r
\r
+/*----------------------------------------------------------------------------\r
+ *       Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern uint8_t ov_init(Twid *pTwid);\r
+extern void ov_DumpRegisters8(Twid *pTwid);\r
+extern void ov_DumpRegisters16(Twid *pTwid);\r
+extern uint32_t ov_write_regs8(Twid *pTwid, const struct ov_reg* pReglist);\r
+extern uint32_t ov_write_regs16(Twid *pTwid, const struct ov_reg* pReglist);\r
+extern uint8_t ov_read_reg8(Twid *pTwid, uint8_t reg, uint8_t *pData);\r
+extern uint8_t ov_read_reg16(Twid *pTwid, uint16_t reg, uint8_t *pData);\r
+extern uint8_t ov_write_reg8(Twid *pTwid, uint8_t reg, uint8_t val);\r
+extern uint8_t ov_write_reg16(Twid *pTwid, uint16_t reg, uint8_t val);\r
+extern void isOV5640_AF_InitDone(Twid *pTwid);\r
+extern uint32_t ov_5640_AF_single(Twid *pTwid);\r
+extern uint32_t ov_5640_AF_continue(Twid *pTwid);\r
+extern uint32_t ov_5640_AFPause(Twid *pTwid);\r
+extern uint32_t ov_5640_AFrelease(Twid *pTwid);\r
+#endif\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ov.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ov.h
new file mode 100644 (file)
index 0000000..929039c
--- /dev/null
@@ -0,0 +1,50 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+#ifndef OV_H\r
+#define OV_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Captor capture size */\r
+struct capture_size {\r
+    uint32_t width;\r
+    uint32_t height;\r
+};\r
+\r
+/*----------------------------------------------------------------------------\r
+ *       Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void ov_configure(Twid *pTwid, uint8_t type, uint32_t width, uint32_t heigth);\r
+extern void ov_5640Afc_Firmware(Twid *pTwid);\r
+#endif\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ovyuv.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/ovyuv.h
new file mode 100644 (file)
index 0000000..6bf2d8e
--- /dev/null
@@ -0,0 +1,58 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _YUV_H_\r
+#define _YUV_H_\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <board.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Exported variable\r
+ *---------------------------------------------------------------------------*/\r
+extern const struct ov_reg ov2640_yuv_vga[];\r
+extern const struct ov_reg ov2640_yuv_qvga[];\r
+\r
+extern const struct ov_reg ov2643_yuv_vga[];\r
+extern const struct ov_reg ov2643_yuv_swvga[];\r
+extern const struct ov_reg ov2643_yuv_uxga[];\r
+\r
+extern const struct ov_reg ov5640_yuv_vga[];\r
+extern const struct ov_reg ov5640_yuv_sxga[];\r
+extern const struct ov_reg ov5640_afc[];\r
+\r
+extern const struct ov_reg ov7740_yuv_vga[];\r
+extern const struct ov_reg ov9740_yuv_sxga[];\r
+extern const struct ov_reg ov9740_yuv_vga[];\r
+\r
+#endif // #ifndef _YUV_H_\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/qt1070.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/qt1070.h
new file mode 100644 (file)
index 0000000..c0671df
--- /dev/null
@@ -0,0 +1,155 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/**\r
+  * \file\r
+  *\r
+  * Implementation QT1070 driver.\r
+  *\r
+  */\r
+\r
+#ifndef QT1070_H\r
+#define QT1070_H\r
+\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Definitions\r
+ *----------------------------------------------------------------------------*/\r
+/** Slave address */\r
+#define QT1070_SLAVE_ADDRESS    0x1B\r
+\r
+/** Internal Register Address Allocation */\r
+\r
+/** Chip ID register*/\r
+#define QT1070_CHIP_ID          0\r
+/** Firmware version register*/\r
+#define QT1070_REG_FIRMWARE_VERSION 1\r
+/** Detection status*/\r
+#define QT1070_REG_DETECTION_STATUS 2\r
+/** Key status*/\r
+#define QT1070_REG_KEY_STATUS       3 \r
+/** Key signal */\r
+#define QT1070_REG_KEY0_SIGNAL_MSB  4\r
+#define QT1070_REG_KEY0_SIGNAL_LSB  5\r
+#define QT1070_REG_KEY1_SIGNAL_MSB  6\r
+#define QT1070_REG_KEY1_SIGNAL_LSB  7\r
+#define QT1070_REG_KEY2_SIGNAL_MSB  8\r
+#define QT1070_REG_KEY2_SIGNAL_LSB  9\r
+#define QT1070_REG_KEY3_SIGNAL_MSB  10\r
+#define QT1070_REG_KEY3_SIGNAL_LSB  11\r
+#define QT1070_REG_KEY4_SIGNAL_MSB  12\r
+#define QT1070_REG_KEY4_SIGNAL_LSB  13\r
+#define QT1070_REG_KEY5_SIGNAL_MSB  14\r
+#define QT1070_REG_KEY5_SIGNAL_LSB  15\r
+#define QT1070_REG_KEY6_SIGNAL_MSB  16\r
+#define QT1070_REG_KEY6_SIGNAL_LSB  17\r
+\r
+/** Reference date */\r
+#define QT1070_REG_REFDATA0_MSB     18\r
+#define QT1070_REG_REFDATA0_LSB     19\r
+#define QT1070_REG_REFDATA1_MSB     20\r
+#define QT1070_REG_REFDATA1_LSB     21\r
+#define QT1070_REG_REFDATA2_MSB     22\r
+#define QT1070_REG_REG_REFDATA2_LSB 23\r
+#define QT1070_REG_REFDATA3_MSB     24\r
+#define QT1070_REG_REG_REFDATA3_LSB 25\r
+#define QT1070_REG_REFDATA4_MSB     26\r
+#define QT1070_REG_REFDATA4_LSB     27\r
+#define QT1070_REG_REFDATA5_MSB     28\r
+#define QT1070_REG_REFDATA5_LSB     29\r
+#define QT1070_REG_REFDATA6_MSB     30\r
+#define QT1070_REG_REFDATA6_LSB     31\r
+\r
+/** Negative threshold level */\r
+#define QT1070_REG_NTHR_KEY0        32\r
+#define QT1070_REG_NTHR_KEY1        33\r
+#define QT1070_REG_NTHR_KEY2        34\r
+#define QT1070_REG_NTHR_KEY3        35\r
+#define QT1070_REG_NTHR_KEY4        36\r
+#define QT1070_REG_NTHR_KEY5        37\r
+#define QT1070_REG_NTHR_KEY6        38\r
+\r
+/** Adjacent key suppression level */\r
+#define QT1070_REG_AVEAKS_KEY0      39\r
+#define QT1070_REG_AVEAKS_KEY1      40\r
+#define QT1070_REG_AVEAKS_KEY2      41\r
+#define QT1070_REG_AVEAKS_KEY3      42\r
+#define QT1070_REG_AVEAKS_KEY4      43\r
+#define QT1070_REG_AVEAKS_KEY5      44\r
+#define QT1070_REG_AVEAKS_KEY6      45\r
+\r
+/** Detection interator conter for key*/\r
+#define QT1070_REG_DI_KEY0          46\r
+#define QT1070_REG_DI_KEY1          47\r
+#define QT1070_REG_DI_KEY2          48\r
+#define QT1070_REG_DI_KEY3          49\r
+#define QT1070_REG_DI_KEY4          50\r
+#define QT1070_REG_DI_KEY5          51\r
+#define QT1070_REG_DI_KEY6          52\r
+\r
+/** Low power mode */\r
+#define QT1070_REG_LOWPOWER_MODE    54\r
+/** Maximum on duration */\r
+#define QT1070_REG_MAX_DURATION     55\r
+/** Calibrate */\r
+#define QT1070_REG_CALIRATE         56\r
+/** Reset */\r
+#define QT1070_REG_RESET            57\r
+\r
+/** Detection Status. */\r
+/** This bit is set during a calibration sequence.*/\r
+#define QT_CALIBRATE_BIT        7\r
+/** This bit is set if the time to acquire all key signals exceeds 8 ms*/\r
+#define QT_OVERFLOW_BIT         6\r
+/** This bit is set if Comms mode is enabled. */\r
+#define QT_COMMSENABLED_BIT     5\r
+/** This bit is set if any keys are in detect. */\r
+#define QT_TOUCH_BIT            0\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern uint8_t QT1070_GetChipId(Twid *pTwid);\r
+extern uint8_t QT1070_GetFirmwareVersion(Twid *pTwid);\r
+extern uint8_t QT1070_GetDetection_Status(Twid *pTwid);\r
+extern uint8_t QT1070_GetKey_Status(Twid *pTwid);\r
+extern uint16_t QT1070_GetKey_Signal(Twid *pTwid, uint8_t key);\r
+extern uint16_t QT1070_GetKey_Reference(Twid *pTwid, uint8_t key);\r
+extern void QT1070_SetThreshold(Twid *pTwid, uint8_t key, uint8_t threshold);\r
+extern void QT1070_SetAveAks(Twid *pTwid, uint8_t key, uint8_t Ave, uint8_t Aks);\r
+extern void QT1070_SetDetectionIntegrator(Twid *pTwid, uint8_t key, uint8_t di);\r
+extern void QT1070_StartCalibrate(Twid *pTwid);\r
+extern void QT1070_StartReset(Twid *pTwid);\r
+#endif // QT1070_H\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/rand.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/rand.h
new file mode 100644 (file)
index 0000000..f58ff8a
--- /dev/null
@@ -0,0 +1,48 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *  Small function for gererating random number.\r
+ *\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#ifndef _RAND_\r
+#define _RAND_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global Functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+extern void srand( uint32_t dwSeed ) ;\r
+extern uint32_t rand( void ) ;\r
+\r
+#endif /* #ifndef _RAND_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/rtc_calib.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/rtc_calib.h
new file mode 100644 (file)
index 0000000..f26e477
--- /dev/null
@@ -0,0 +1,50 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Real Time Clock calibration (RTC) .\r
+ *\r
+ */\r
\r
+/** RTC crystal **/\r
+\r
+\r
+typedef struct\r
+{\r
+  int8_t Tempr;\r
+  int16_t PPM;\r
+  uint8_t NEGPPM;\r
+  uint8_t HIGHPPM;\r
+  uint16_t CORRECTION;\r
+}RTC_PPMLookup;\r
+\r
+\r
+extern void RTC_ClockCalibration( Rtc* pRtc, int32_t CurrentTempr);\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/syscalls.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/syscalls.h
new file mode 100644 (file)
index 0000000..10e81a3
--- /dev/null
@@ -0,0 +1,65 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+  * \file syscalls.h\r
+  *\r
+  * Implementation of newlib syscall.\r
+  *\r
+  */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+#include <stdio.h>\r
+#include <stdarg.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern caddr_t _sbrk ( int incr ) ;\r
+\r
+extern int link( char *old, char *new ) ;\r
+\r
+extern int _close( int file ) ;\r
+\r
+extern int _fstat( int file, struct stat *st ) ;\r
+\r
+extern int _isatty( int file ) ;\r
+\r
+extern int _lseek( int file, int ptr, int dir ) ;\r
+\r
+extern int _read(int file, char *ptr, int len) ;\r
+\r
+extern int _write( int file, char *ptr, int len ) ;\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/timetick.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/timetick.h
new file mode 100644 (file)
index 0000000..fdeb9be
--- /dev/null
@@ -0,0 +1,80 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/**\r
+ *  \file\r
+ *\r
+ *  \par Purpose\r
+ *\r
+ *  Methods and definitions for Global time tick and wait functions.\r
+ *\r
+ *  Defines a common and simpliest use of Time Tick, to increase tickCount\r
+ *  every 1ms, the application can get this value through GetTickCount().\r
+ *\r
+ *  \par Usage\r
+ *\r
+ *  -# Configure the System Tick with TimeTick_Configure() when MCK changed\r
+ *     \note\r
+ *     Must be done before any invoke of GetTickCount(), Wait() or Sleep().\r
+ *  -# Uses GetTickCount to get current tick value.\r
+ *  -# Uses Wait to wait several ms.\r
+ *  -# Uses Sleep to enter wait for interrupt mode to wait several ms.\r
+ *\r
+ */\r
+\r
+#ifndef _TIMETICK_\r
+#define _TIMETICK_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern uint32_t TimeTick_Configure( uint32_t dwNew_MCK ) ;\r
+\r
+extern void TimeTick_Increment( uint32_t dwInc ) ;\r
+\r
+extern uint32_t GetDelayInTicks(uint32_t startTick,uint32_t endTick);\r
+\r
+extern uint32_t GetTickCount( void ) ;\r
+\r
+extern void Wait( volatile uint32_t dwMs ) ;\r
+\r
+extern void Sleep( volatile uint32_t dwMs ) ;\r
+\r
+#endif /* _TIMETICK_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/tsd.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/tsd.h
new file mode 100644 (file)
index 0000000..77d2ad9
--- /dev/null
@@ -0,0 +1,86 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/**\r
+ * \addtogroup tsd_module TouchScreen Driver\r
+ *\r
+ * \section Purpose\r
+ * \r
+ * This unit provides a very powerful touchscreen driver which handles all the\r
+ * complexity. This includes touchscreen calibration, retrieving measurements,\r
+ * configuring the TSADC, etc.\r
+ * \r
+ * \section Usage\r
+ *\r
+ * -# Implement ADC interrupt handler in application, to invoke TSD_Handler()\r
+ *    to handle ADC sampling events for touchscreen monitor.\r
+ * -# Call TSD_Initialize() to initialize ADC used for touchscreen.\r
+ * -# Call TSD_Calibrate() to do touchscreen calibration with LCD, and enable\r
+ *    touchscreen monitor if calibration success.\r
+ * -# Call TSD_Enable() to enable or disable touchscreen monitoring.\r
+ * -# Declare a global TSD_PenPressed() function anywhere in your code. This\r
+ *    function will get called every time the pen is pressed on the screen.\r
+ * -# Declare a global TSD_PenMoved() function, which will get called whenever\r
+ *    the pen stays in contact with the screen but changes position.\r
+ * -# Declare a global TSD_PenReleased() function, which will be invoked as the\r
+ *    pen is lifted from the screen.\r
+ */\r
+\r
+#ifndef TSD_H\r
+#define TSD_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void TSD_Handler(uint32_t dwAdcStatus);\r
+extern void TSD_Initialize(void);\r
+extern void TSD_DeInitialize(void);\r
+extern void TSD_Enable(uint8_t bEnDis);\r
+extern uint8_t TSD_Calibrate(void);\r
+\r
+/* calibration used functions */\r
+extern void TSD_GetRawMeasurement(uint32_t * pData);\r
+extern void TSD_WaitPenPressed(void);\r
+extern void TSD_WaitPenReleased(void);\r
+\r
+/* callbacks */\r
+extern void TSD_PenPressed(uint32_t x, uint32_t y, uint32_t pressure);\r
+extern void TSD_PenMoved(uint32_t x, uint32_t y, uint32_t pressure);\r
+extern void TSD_PenReleased(uint32_t x, uint32_t y);\r
+\r
+#endif //#ifndef TSD_H\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/tsd_com.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/tsd_com.h
new file mode 100644 (file)
index 0000000..2869c1b
--- /dev/null
@@ -0,0 +1,50 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+#ifndef TSD_COM_H\r
+#define TSD_COM_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void TSDCom_InterpolateMeasurement(\r
+                const uint32_t *pData,\r
+                uint32_t *pPoint);\r
+\r
+uint8_t TSDCom_Calibrate(void);\r
+\r
+uint8_t TSDCom_IsCalibrationOk(void);\r
+\r
+void TSDCom_ReadCalibrateData(void *pBuffer, uint32_t size);\r
+void TSDCom_RestoreCalibrateData(void *pBuffer, uint32_t size);\r
+\r
+#endif /* #ifndef TSD_COM_H */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/twid.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/twid.h
new file mode 100644 (file)
index 0000000..5ffe4c4
--- /dev/null
@@ -0,0 +1,114 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _TWID_\r
+#define _TWID_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** TWI driver is currently busy. */\r
+#define TWID_ERROR_BUSY              1\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \brief TWI driver structure. Holds the internal state of the driver.*/\r
+typedef struct _Twid\r
+{\r
+    /** Pointer to the underlying TWI peripheral.*/\r
+    Twi *pTwi ;\r
+    /** Current asynchronous transfer being processed.*/\r
+    Async *pTransfer ;\r
+} Twid;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Export functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void TWID_Initialize( Twid *pTwid, Twi *pTwi ) ;\r
+\r
+extern void TWID_Handler( Twid *pTwid ) ;\r
+\r
+extern uint8_t TWID_Read(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync);\r
+    \r
+extern uint8_t TWID_DmaRead(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync,\r
+    uint8_t TWI_ID);\r
+\r
+extern uint8_t TWID_Write(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync);\r
+\r
+extern uint8_t TWID_DmaWrite(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync,\r
+    uint8_t TWI_ID);\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif //#ifndef TWID_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/wav.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/wav.h
new file mode 100644 (file)
index 0000000..be75b91
--- /dev/null
@@ -0,0 +1,78 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef WAV_H\r
+#define WAV_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/* Standard WAV file header information. */\r
+typedef struct _WavHeader\r
+{\r
+    /* Contains the letters "RIFF" in ASCII form. */\r
+    unsigned int  chunkID;\r
+    /* Size of the rest of the chunk following this number.*/\r
+    unsigned int  chunkSize;\r
+    /* Contains the letters "WAVE".*/\r
+    unsigned int format;\r
+    /* Contains the letters "fmt ".*/\r
+    unsigned int subchunk1ID;\r
+    /* 16 for PCM.  This is the size of the rest of the Subchunk which follows this number.*/\r
+    unsigned int  subchunk1Size;\r
+    /* PCM = 1 (i.e. Linear quantization). Values other than 1 indicate some form of compression.*/\r
+    unsigned short audioFormat;\r
+    /* Mono = 1, Stereo = 2, etc.*/\r
+    unsigned short numChannels;\r
+    /* 8000, 44100, etc.*/\r
+    unsigned int   sampleRate;\r
+    /* SampleRate * NumChannels * BitsPerSample/8*/\r
+    unsigned int   byteRate;\r
+    /* NumChannels * BitsPerSample/8*/\r
+    unsigned short blockAlign; \r
+    /* 8 bits = 8, 16 bits = 16, etc.*/\r
+    unsigned short bitsPerSample;\r
+    /* Contains the letters "data".*/\r
+    unsigned int subchunk2ID;\r
+    /* Number of bytes in the data.*/\r
+    unsigned int subchunk2Size;\r
+\r
+} WavHeader;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern unsigned char WAV_IsValid(const WavHeader *header);\r
+\r
+extern void WAV_DisplayInfo(const WavHeader *header);\r
+\r
+#endif //#ifndef WAV_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/wm8904.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/wm8904.h
new file mode 100644 (file)
index 0000000..6e59beb
--- /dev/null
@@ -0,0 +1,158 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+  * \file\r
+  *\r
+  * Implementation WM8904 driver.\r
+  *\r
+  */\r
+\r
+#ifndef WM8904_H\r
+#define WM8904_H\r
+\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Definitions\r
+ *----------------------------------------------------------------------------*/\r
+#define WM8904_CSB_STATE            (0x0 << 0)\r
+\r
+/** Slave address */\r
+#define WM8904_SLAVE_ADDRESS        0x1a | WM8904_CSB_STATE\r
+\r
+\r
+/** Reset register*/\r
+#define WM8904_REG_RESET                           0x00\r
+\r
+/** Bias control 0 register*/\r
+#define WM8904_REG_BIAS_CTRL0                      0x04\r
+\r
+/** VMID control 0 register*/\r
+#define WM8904_REG_VMID_CTRL0                      0x05\r
+\r
+/** MIC Bias control 0 register*/\r
+#define WM8904_REG_MICBIAS_CTRL0                   0x06\r
+\r
+/** Bias control 1 register*/\r
+#define WM8904_REG_BIAS_CTRL1                      0x07\r
+\r
+/** Power management control 0 register*/\r
+#define WM8904_REG_POWER_MANG0                     0x0C\r
+/** Power management control 2 register*/\r
+#define WM8904_REG_POWER_MANG2                     0x0E\r
+/** Power management control 3 register*/\r
+#define WM8904_REG_POWER_MANG3                     0x0F\r
+/** Power management control 6 register*/\r
+#define WM8904_REG_POWER_MANG6                     0x12\r
+\r
+/** Clock rate0 register*/\r
+#define WM8904_REG_CLOCK_RATE0                     0x14\r
+/** Clock rate1 register*/\r
+#define WM8904_REG_CLOCK_RATE1                     0x15\r
+\r
+/** Clock rate2 register*/\r
+#define WM8904_REG_CLOCK_RATE2                     0x16\r
+\r
+/** Audio interface0 register*/\r
+#define WM8904_REG_AUD_INF0                        0x18\r
+\r
+/** Audio interface1 register*/\r
+#define WM8904_REG_AUD_INF1                        0x19\r
+/** Audio interface2 register*/\r
+#define WM8904_REG_AUD_INF2                        0x1A\r
+/** Audio interface3 register*/\r
+#define WM8904_REG_AUD_INF3                        0x1B\r
+\r
+/** ADC digital 0 register*/\r
+#define WM8904_REG_ADC_DIG0                        0x20\r
+/** ADC digital 1 register*/\r
+#define WM8904_REG_ADC_DIG1                        0x21\r
+\r
+/** Analogue left input 0 register*/\r
+#define WM8904_REG_ANALOGUE_LIN0                   0x2C\r
+/** Analogue right input 0 register*/\r
+#define WM8904_REG_ANALOGUE_RIN0                   0x2D\r
+\r
+/** Analogue left input 1 register*/\r
+#define WM8904_REG_ANALOGUE_LIN1                   0x2E\r
+/** Analogue right input 1 register*/\r
+#define WM8904_REG_ANALOGUE_RIN1                   0x2F\r
+\r
+/** Analogue left output 1 register*/\r
+#define WM8904_REG_ANALOGUE_LOUT1                  0x39\r
+/** Analogue right output 1 register*/\r
+#define WM8904_REG_ANALOGUE_ROUT1                  0x3A\r
+\r
+/** Analogue left output 2 register*/\r
+#define WM8904_REG_ANALOGUE_LOUT2                  0x3B\r
+/** Analogue right output 2 register*/\r
+#define WM8904_REG_ANALOGUE_ROUT2                  0x3C\r
+\r
+/** Analogue output 12 ZC register*/\r
+#define WM8904_REG_ANALOGUE_OUT12ZC                0x3D\r
+\r
+/** DC servo 0 register*/\r
+#define WM8904_REG_DC_SERVO0                       0x43\r
+\r
+/** Analogue HP 0 register*/\r
+#define WM8904_REG_ANALOGUE_HP0                    0x5A\r
+\r
+/** Charge pump 0 register*/\r
+#define WM8904_REG_CHARGE_PUMP0                    0x62\r
+\r
+/** Class W 0 register*/\r
+#define WM8904_REG_CLASS0                          0x68\r
+\r
+/** FLL control 1 register*/\r
+#define WM8904_REG_FLL_CRTL1                       0x74\r
+/** FLL control 2 register*/\r
+#define WM8904_REG_FLL_CRTL2                       0x75\r
+/** FLL control 3 register*/\r
+#define WM8904_REG_FLL_CRTL3                       0x76\r
+/** FLL control 4 register*/\r
+#define WM8904_REG_FLL_CRTL4                       0x77\r
+/** FLL control 5 register*/\r
+#define WM8904_REG_FLL_CRTL5                       0x78\r
+\r
+/** DUMMY register*/\r
+#define WM8904_REG_END                             0xFF\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern uint16_t WM8904_Read(Twid *pTwid, uint32_t device, uint32_t regAddr);\r
+extern void WM8904_Write(Twid *pTwid, uint32_t device, uint32_t regAddr, uint16_t data);\r
+extern uint8_t WM8904_Init(Twid *pTwid, uint32_t device, uint32_t PCK);\r
+extern uint8_t WM8904_VolumeSet(Twid *pTwid,  uint32_t device, uint16_t value);\r
+extern void WM8904_IN2R_IN1L(Twid *pTwid, uint32_t device);\r
+#endif // WM8904_H\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/xdma_hardware_interface.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/xdma_hardware_interface.h
new file mode 100644 (file)
index 0000000..d001253
--- /dev/null
@@ -0,0 +1,58 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _XDMAD_IF_H\r
+#define _XDMAD_IF_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Includes\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** DMA hardware interface */\r
+typedef struct _XdmaHardwareInterface {\r
+    uint8_t bXdmac;                  /**< DMA Controller number */\r
+    uint32_t bPeriphID;             /**< Peripheral ID */\r
+    uint8_t bTransfer;              /**< Transfer type 0: Tx, 1 :Rx*/\r
+    uint8_t bIfID;                  /**< DMA Interface ID */\r
+} XdmaHardwareInterface;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern uint8_t XDMAIF_IsValidatedPeripherOnDma( uint8_t bXdmac, uint8_t bPeriphID);\r
+extern uint8_t XDMAIF_Get_ChannelNumber (uint8_t bXdmac, uint8_t bPeriphID, uint8_t bTransfer);\r
+\r
+#endif //#ifndef _XDMAD_IF_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/xdmad.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/include/xdmad.h
new file mode 100644 (file)
index 0000000..288c4e8
--- /dev/null
@@ -0,0 +1,250 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _XDMAD_H\r
+#define _XDMAD_H\r
+\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Includes\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+#include <assert.h>\r
+\r
+\r
+/** \addtogroup dmad_defines DMA Driver Defines\r
+        @{*/\r
+/*----------------------------------------------------------------------------\r
+ *        Consts\r
+ *----------------------------------------------------------------------------*/\r
+#define XDMAD_TRANSFER_MEMORY  0xFF   /**< DMA transfer from or to memory */\r
+#define XDMAD_ALLOC_FAILED     0xFFFF /**< Channel allocate failed */\r
+\r
+#define XDMAD_TRANSFER_TX      0\r
+#define XDMAD_TRANSFER_RX      1\r
+\r
+/* XDMA_MBR_UBC */\r
+#define XDMA_UBC_NDE (0x1u << 24)\r
+#define   XDMA_UBC_NDE_FETCH_DIS (0x0u << 24)\r
+#define   XDMA_UBC_NDE_FETCH_EN  (0x1u << 24)\r
+#define XDMA_UBC_NSEN (0x1u << 25)\r
+#define   XDMA_UBC_NSEN_UNCHANGED (0x0u << 25)\r
+#define   XDMA_UBC_NSEN_UPDATED (0x1u << 25)\r
+#define XDMA_UBC_NDEN (0x1u << 26)\r
+#define   XDMA_UBC_NDEN_UNCHANGED (0x0u << 26)\r
+#define   XDMA_UBC_NDEN_UPDATED (0x1u << 26)\r
+#define XDMA_UBC_NVIEW_Pos 27\r
+#define    XDMA_UBC_NVIEW_Msk (0x3u << XDMA_UBC_NVIEW_Pos)\r
+#define    XDMA_UBC_NVIEW_NDV0 (0x0u << XDMA_UBC_NVIEW_Pos)\r
+#define    XDMA_UBC_NVIEW_NDV1 (0x1u << XDMA_UBC_NVIEW_Pos)\r
+#define    XDMA_UBC_NVIEW_NDV2 (0x2u << XDMA_UBC_NVIEW_Pos)\r
+#define    XDMA_UBC_NVIEW_NDV3 (0x3u << XDMA_UBC_NVIEW_Pos)\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        MACRO\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup dmad_structs DMA Driver Structs\r
+        @{*/\r
+\r
+/** DMA status or return code */\r
+typedef enum _XdmadStatus {\r
+    XDMAD_OK = 0,        /**< Operation is sucessful */\r
+    XDMAD_PARTIAL_DONE,\r
+    XDMAD_DONE,\r
+    XDMAD_BUSY,          /**< Channel occupied or transfer not finished */\r
+    XDMAD_ERROR,         /**< Operation failed */\r
+    XDMAD_CANCELED       /**< Operation canceled */\r
+} eXdmadStatus, eXdmadRC;\r
+\r
+/** DMA state for channel */\r
+typedef enum _XdmadState {\r
+    XDMAD_STATE_FREE = 0,      /**< Free channel */\r
+    XDMAD_STATE_ALLOCATED,     /**< Allocated to some peripheral */\r
+    XDMAD_STATE_START,         /**< DMA started */ \r
+    XDMAD_STATE_IN_XFR,        /**< DMA in trasfering */\r
+    XDMAD_STATE_DONE,          /**< DMA transfer done */\r
+} eXdmadState;\r
+\r
+/** DMA transfer callback */\r
+typedef void (*XdmadTransferCallback)(uint32_t status, void* pArg);\r
+\r
+/** DMA driver channel */\r
+typedef struct _XdmadChannel {\r
+    XdmadTransferCallback fCallback; /**< Callback */\r
+    void* pArg;                     /**< Callback argument */\r
+    uint8_t bIrqOwner;              /**< Uses DMA handler or external one */\r
+    uint8_t bSrcPeriphID;           /**< HW ID for source */\r
+    uint8_t bDstPeriphID;           /**< HW ID for destination */\r
+    uint8_t bSrcTxIfID;             /**< DMA Tx Interface ID for source */\r
+    uint8_t bSrcRxIfID;             /**< DMA Rx Interface ID for source */\r
+    uint8_t bDstTxIfID;             /**< DMA Tx Interface ID for destination */\r
+    uint8_t bDstRxIfID;             /**< DMA Rx Interface ID for destination */\r
+    volatile uint8_t state;         /**< DMA channel state */\r
+} sXdmadChannel;\r
+\r
+/** DMA driver instance */\r
+typedef struct _Xdmad {\r
+    Xdmac *pXdmacs[2];\r
+    sXdmadChannel XdmaChannels[2][16];\r
+    uint8_t  numControllers;\r
+    uint8_t  numChannels;\r
+    uint8_t  pollingMode;\r
+    uint8_t  pollingTimeout;\r
+} sXdmad;\r
+\r
+typedef struct _XdmadCfg {\r
+    /** Microblock Control Member. */\r
+    uint32_t mbr_ubc;\r
+    /** Source Address Member. */\r
+    uint32_t mbr_sa;\r
+    /** Destination Address Member. */\r
+    uint32_t mbr_da;\r
+    /** Configuration Register. */\r
+    uint32_t mbr_cfg;\r
+    /** Block Control Member. */\r
+    uint32_t mbr_bc;\r
+    /** Data Stride Member. */\r
+    uint32_t mbr_ds;\r
+    /** Source Microblock Stride Member. */\r
+    uint32_t mbr_sus;\r
+    /** Destination Microblock Stride Member. */\r
+    uint32_t mbr_dus;\r
+} sXdmadCfg;\r
+\r
+/** \brief Structure for storing parameters for DMA view0 that can be\r
+ * performed by the DMA Master transfer.*/\r
+typedef struct _LinkedListDescriporView0 \r
+{\r
+    /** Next Descriptor Address number. */\r
+    uint32_t mbr_nda;\r
+    /** Microblock Control Member. */\r
+    uint32_t mbr_ubc;\r
+    /** Transfer Address Member. */\r
+    uint32_t mbr_ta;\r
+}LinkedListDescriporView0;\r
+\r
+/** \brief Structure for storing parameters for DMA view1 that can be\r
+ * performed by the DMA Master transfer.*/\r
+typedef struct _LinkedListDescriporView1\r
+{\r
+    /** Next Descriptor Address number. */\r
+    uint32_t mbr_nda;\r
+    /** Microblock Control Member. */\r
+    uint32_t mbr_ubc;\r
+    /** Source Address Member. */\r
+    uint32_t mbr_sa;\r
+    /** Destination Address Member. */\r
+    uint32_t mbr_da;\r
+}LinkedListDescriporView1;\r
+\r
+/** \brief Structure for storing parameters for DMA view2 that can be\r
+ * performed by the DMA Master transfer.*/\r
+typedef struct _LinkedListDescriporView2\r
+{\r
+    /** Next Descriptor Address number. */\r
+    uint32_t mbr_nda;\r
+    /** Microblock Control Member. */\r
+    uint32_t mbr_ubc;\r
+    /** Source Address Member. */\r
+    uint32_t mbr_sa;\r
+    /** Destination Address Member. */\r
+    uint32_t mbr_da;\r
+    /** Configuration Register. */\r
+    uint32_t mbr_cfg;\r
+}LinkedListDescriporView2;\r
+\r
+/** \brief Structure for storing parameters for DMA view3 that can be\r
+ * performed by the DMA Master transfer.*/\r
+typedef struct _LinkedListDescriporView3\r
+{\r
+    /** Next Descriptor Address number. */\r
+    uint32_t mbr_nda;\r
+    /** Microblock Control Member. */\r
+    uint32_t mbr_ubc;\r
+    /** Source Address Member. */\r
+    uint32_t mbr_sa;\r
+    /** Destination Address Member. */\r
+    uint32_t mbr_da;\r
+    /** Configuration Register. */\r
+    uint32_t mbr_cfg;\r
+    /** Block Control Member. */\r
+    uint32_t mbr_bc;\r
+    /** Data Stride Member. */\r
+    uint32_t mbr_ds;\r
+    /** Source Microblock Stride Member. */\r
+    uint32_t mbr_sus;\r
+    /** Destination Microblock Stride Member. */\r
+    uint32_t mbr_dus;\r
+}LinkedListDescriporView3;\r
+\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup dmad_functions DMA Driver Functionos\r
+        @{*/\r
+extern void XDMAD_Initialize( sXdmad *pXdmad,\r
+                             uint8_t bPollingMode );\r
+\r
+extern void XDMAD_Handler( sXdmad *pDmad);\r
+\r
+extern uint32_t XDMAD_AllocateChannel( sXdmad *pXdmad,\r
+                                      uint8_t bSrcID, uint8_t bDstID);\r
+extern eXdmadRC XDMAD_FreeChannel( sXdmad *pXdmad, uint32_t dwChannel );\r
+\r
+extern eXdmadRC XDMAD_ConfigureTransfer( sXdmad *pXdmad,\r
+                                         uint32_t dwChannel,\r
+                                         sXdmadCfg *pXdmaParam,\r
+                                         uint32_t dwXdmaDescCfg,\r
+                                         uint32_t dwXdmaDescAddr);\r
+\r
+extern eXdmadRC XDMAD_PrepareChannel( sXdmad *pXdmad, uint32_t dwChannel);\r
+\r
+extern eXdmadRC XDMAD_IsTransferDone( sXdmad *pXdmad, uint32_t dwChannel );\r
+\r
+extern eXdmadRC XDMAD_StartTransfer( sXdmad *pXdmad, uint32_t dwChannel );\r
+\r
+extern eXdmadRC XDMAD_SetCallback( sXdmad *pXdmad, \r
+                                   uint32_t dwChannel,\r
+                                   XdmadTransferCallback fCallback, \r
+                                   void* pArg );\r
+\r
+extern eXdmadRC XDMAD_StopTransfer( sXdmad *pXdmad, uint32_t dwChannel );\r
+/**     @}*/\r
+/**@}*/\r
+#endif //#ifndef _XDMAD_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x-ek-ddram.mac b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x-ek-ddram.mac
new file mode 100644 (file)
index 0000000..b444adc
--- /dev/null
@@ -0,0 +1,488 @@
+// ---------------------------------------------------------\r
+//   ATMEL Microcontroller Software Support\r
+// ---------------------------------------------------------\r
+// The software is delivered "AS IS" without warranty or\r
+// condition of any  kind, either express, implied or\r
+// statutory. This includes without limitation any warranty\r
+// or condition with respect to merchantability or fitness\r
+// for any particular purpose, or against the infringements of\r
+// intellectual property rights of others.\r
+// ---------------------------------------------------------\r
+//  File: sama5d4-ek-ddram.mac\r
+//  User setup file for CSPY debugger.\r
+//  \r
+// ---------------------------------------------------------\r
+\r
+__var __tempo_var;\r
+__var __dummy_read;\r
+__var __data_test;\r
+__var __mac_i;\r
+\r
+__var REG_CKGR_MOR;\r
+__var CKGR_MOR_MOSCXTEN;\r
+__var CKGR_MOR_MOSCXTBY;\r
+__var CKGR_MOR_MOSCRCEN;\r
+__var CKGR_MOR_MOSCSEL;\r
+__var REG_CKGR_MCFR;\r
+__var CKGR_MCFR_MAINFRDY;\r
+__var REG_PMC_SR;\r
+__var PMC_SR_MCKRDY;\r
+__var PMC_SR_LOCKA;\r
+__var PMC_PCK_CSS_MAIN_CLK;\r
+__var REG_CKGR_PLLAR;\r
+__var REG_PMC_PLLICPR;\r
+__var REG_PMC_MCKR;\r
+__var PMC_MCKR_PLLADIV2_DIV2;\r
+__var PMC_MCKR_PRES_Msk;\r
+__var PMC_MCKR_PRES_CLOCK;\r
+__var PMC_MCKR_MDIV_Msk;\r
+__var PMC_MCKR_MDIV_PCK_DIV3;\r
+__var PMC_MCKR_CSS_PLLA_CLK;\r
+__var PMC_SR_MOSCSELS;\r
+\r
+/*********************************************************************\r
+*\r
+*       execUserReset() : JTAG set initially to Full Speed\r
+*/\r
+execUserReset()\r
+{\r
+    __message "------------------------------ execUserReset ---------------------------------";\r
+    ini();\r
+    __message "-------------------------------Set PC Reset ----------------------------------";\r
+    __writeMemory32(0x1D3,0x98,"Register");        //*  Set CPSR\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       execUserPreload() : JTAG set initially to 32kHz\r
+*/\r
+execUserPreload()\r
+{\r
+    __message "------------------------------ execUserPreload ---------------------------------";\r
+    //__hwReset(0);                     //* Hardware Reset: CPU is automatically halted after the reset (JTAG is already configured to 32kHz)\r
+\r
+    __writeMemory32(0xD3,0x98,"Register"); //*  Set CPSR\r
+\r
+ __tempo_var = __readMemory32(0xF0018028,"Memory");   // PLL A reg addr is 0xF0018028\r
+\r
+    if (__tempo_var == 0x215C3F01)\r
+    {\r
+        __message " ----------- PLL A is already set to 1056 MHz - Skip DDR2 init -----------";\r
+\r
+        __tempo_var = __readMemory32(0xF001000C,"Memory");\r
+\r
+        if (__tempo_var == 0x2223A338)\r
+        {\r
+             __message " ----------- DDR2 is already Up - skip initialization -----------";\r
+        }\r
+        else\r
+          {\r
+              __initDDR2();                     //* Init DDR2 memory\r
+              __message "------------ DDR2 is initialized ------------";\r
+          }\r
+    }\r
+    else\r
+    {\r
+       __writeMemory32(0x00FFFFFF,0xF001C210,"Memory");   // SLAVE 4\r
+       __writeMemory32(0x0000000F,0xF001C290,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C250,"Memory");\r
+      \r
+       __writeMemory32(0x00FFFFFF,0xF001C214,"Memory");   // SLAVE 5\r
+       __writeMemory32(0x0000000F,0xF001C294,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C254,"Memory");\r
+      \r
+       __writeMemory32(0x00FFFFFF,0xF001C218,"Memory");   // SLAVE 6\r
+       __writeMemory32(0x0000000F,0xF001C298,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C258,"Memory");\r
+      \r
+       __writeMemory32(0x00FFFFFF,0xF001C21C,"Memory");   // SLAVE 7\r
+       __writeMemory32(0x0000000F,0xF001C29C,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C25C,"Memory");\r
+      \r
+       __writeMemory32(0x00FFFFFF,0xF001C220,"Memory");   // SLAVE 8\r
+       __writeMemory32(0x0000000F,0xF001C2A0,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C260,"Memory");\r
+      \r
+       __writeMemory32(0x00FFFFFF,0xF001C224,"Memory");   // SLAVE 9\r
+       __writeMemory32(0x0000000F,0xF001C2A4,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C264,"Memory");\r
+      \r
+       __writeMemory32(0x00FFFFFF,0xF001C228,"Memory");   // SLAVE 10\r
+       __writeMemory32(0x0000000F,0xF001C2A8,"Memory");\r
+       __writeMemory32(0x0000FFFF,0xF001C268,"Memory");\r
+      \r
+      PMC_SelectExt12M_Osc();\r
+      PMC_SwitchMck2Main();\r
+      PMC_SetPllA(87);\r
+      PMC_SetMckPllaDiv();\r
+      PMC_SetMckPrescaler();\r
+      PMC_SetMckDivider();\r
+      PMC_SwitchMck2Pll();\r
+       __message "------------ PLL set to 1056 MHz, MCK set to 176 MHz ------------";\r
+\r
+       __initDDR2(1);                     //* Init DDR2 memory\r
+\r
+       __message "------------ DDR2 is initialized ------------";\r
+    }\r
+    Watchdog();                        //* Watchdog Disable\r
+\r
+    //*  Get the Chip ID  (AT91C_DBGU_C1R & AT91C_DBGU_C2R\r
+    __mac_i=__readMemory32(0xFC069040,"Memory");\r
+    __message " ---------------------------------------- Chip ID   0x",__mac_i:%X;\r
+}\r
+\r
+\r
+/*********************************************************************\r
+*\r
+*       ini() :\r
+* Function description\r
+* Write ARM9 core regsiter to Reset value\r
+*/\r
+ini()\r
+{\r
+__writeMemory32(0x0,0x00,"Register");\r
+__writeMemory32(0x0,0x04,"Register");\r
+__writeMemory32(0x0,0x08,"Register");\r
+__writeMemory32(0x0,0x0C,"Register");\r
+__writeMemory32(0x0,0x10,"Register");\r
+__writeMemory32(0x0,0x14,"Register");\r
+__writeMemory32(0x0,0x18,"Register");\r
+__writeMemory32(0x0,0x1C,"Register");\r
+__writeMemory32(0x0,0x20,"Register");\r
+__writeMemory32(0x0,0x24,"Register");\r
+__writeMemory32(0x0,0x28,"Register");\r
+__writeMemory32(0x0,0x2C,"Register");\r
+__writeMemory32(0x0,0x30,"Register");\r
+__writeMemory32(0x0,0x34,"Register");\r
+__writeMemory32(0x0,0x38,"Register");\r
+\r
+// Set CPSR\r
+__writeMemory32(0x0D3,0x98,"Register");\r
+\r
+}\r
+\r
+\r
+/*********************************************************************\r
+*\r
+*       _Watchdog()\r
+*\r
+* Function description\r
+*   Clear Watchdog\r
+*/\r
+\r
+Watchdog()\r
+{\r
+   // Watchdog Disable\r
+   __writeMemory32(0x00008000,0xFC068644,"Memory");\r
+   __message " ------------------------ Watchdog Disable ------------------------";\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SelectExt12M_Osc()\r
+*\r
+* Function description\r
+*   Select external 12MHz oscillator\r
+*/\r
+PMC_SelectExt12M_Osc()\r
+{ \r
+\r
+// ---------  Select_ext_Crystal_32k  ---------------\r
+  \r
+    REG_CKGR_MOR = 0xF0018020;\r
+    CKGR_MOR_MOSCXTEN = (0x1 << 0);     /*(CKGR_MOR) Main Crystal Oscillator Enable */\r
+    CKGR_MOR_MOSCXTBY = (0x1 << 1);     /*(CKGR_MOR) Main Crystal Oscillator Bypass */\r
+    CKGR_MOR_MOSCRCEN = (0x1 << 3);     /*(CKGR_MOR) Main On-Chip RC Oscillator Enable */\r
+    CKGR_MOR_MOSCSEL = (0x1 << 24);     /*(CKGR_MOR) Main Oscillator Selection */\r
+    REG_CKGR_MCFR = 0xF0018024;         /*(PMC) Main Clock Frequency Register */\r
+    CKGR_MCFR_MAINFRDY = (0x1 << 16);   /*(CKGR_MCFR) Main Clock Ready */\r
+    REG_PMC_SR = 0xF0018068;            /*(PMC) Status Register */\r
+    PMC_SR_MOSCSELS = (0x1 << 16);      /*(PMC_SR) Main Oscillator Selection Status */\r
+    PMC_SR_MCKRDY = (0x1 << 3);         /*(PMC_SR) Master Clock Status */\r
+\r
+    /* enable external OSC 12 MHz  */\r
+    __tempo_var = __readMemory32(REG_CKGR_MOR,"Memory");\r
+    __tempo_var |= CKGR_MOR_MOSCXTEN | (0x37 << 16);\r
+    __writeMemory32(__tempo_var,REG_CKGR_MOR,"Memory");\r
+\r
+    /* wait Main CLK Ready */\r
+    while(!((__readMemory32(REG_CKGR_MCFR,"Memory")) & CKGR_MCFR_MAINFRDY));\r
+\r
+    /* disable external OSC 12 MHz bypass */\r
+    __tempo_var = __readMemory32(REG_CKGR_MOR,"Memory");\r
+    __tempo_var = (__tempo_var & ~CKGR_MOR_MOSCXTBY) | (0x37 << 16); \r
+    __writeMemory32(__tempo_var,REG_CKGR_MOR,"Memory");\r
+\r
+    /* switch MAIN clock to external OSC 12 MHz*/\r
+    __tempo_var = __readMemory32(REG_CKGR_MOR,"Memory");\r
+    __tempo_var |= CKGR_MOR_MOSCSEL | (0x37 << 16); \r
+    __writeMemory32(__tempo_var,REG_CKGR_MOR,"Memory");\r
+\r
+    /* wait MAIN clock status change for external OSC 12 MHz selection*/\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MOSCSELS));\r
+\r
+    /* in case when MCK is running on MAIN CLK */\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MCKRDY));\r
+\r
+     __message " -------- PMC_SelectExt12M_Osc ---------- REG_CKGR_MOR  0x",__mac_i:%X;\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SwitchMck2Main()\r
+*\r
+* Function description\r
+*   Switch PMC from MCK to main clock.\r
+*/\r
+PMC_SwitchMck2Main()\r
+{\r
+    REG_PMC_MCKR = 0xF0018030;          /*(PMC) Master Clock Register */\r
+    PMC_PCK_CSS_MAIN_CLK = (0x1 << 0);  /*(PMC_PCK[3]) Main Clock is selected */\r
+    PMC_SR_MCKRDY = (0x1 << 3);         /*(PMC_SR) Master Clock Status */\r
+    REG_PMC_SR = 0xF0018068;            /*(PMC) Status Register */\r
+\r
+    /* Select Main Oscillator as input clock for PCK and MCK */\r
+    __tempo_var = __readMemory32(REG_PMC_MCKR,"Memory");\r
+    __tempo_var = (__tempo_var & ~0x03)| PMC_PCK_CSS_MAIN_CLK ;\r
+    __writeMemory32(__tempo_var, REG_PMC_MCKR,"Memory");\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MCKRDY));\r
+    __mac_i=__readMemory32(REG_PMC_MCKR,"Memory");\r
+    __message " --------- PMC_SwitchMck2Main ----------- REG_PMC_MCKR  0x",__mac_i:%X;\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SetPllA()\r
+*\r
+* Function description\r
+*   Configure PLLA Registe.\r
+*/\r
+\r
+PMC_SetPllA(pllmul)\r
+{\r
+    REG_CKGR_PLLAR = 0xF0018028;        /*(PMC) PLLA Register */\r
+    REG_PMC_PLLICPR = 0xF0018080;       /*(PMC) PLL Charge Pump Current Register */\r
+    REG_PMC_SR = 0xF0018068;            /*(PMC) Status Register */\r
+    PMC_SR_LOCKA = (0x1 << 1);          /*(PMC_SR) PLLA Lock Status */\r
+\r
+    __writeMemory32(((0x1 << 29) | (0x3F << 8) | ( 0 << 14) | ((pllmul) << 18) | 1 ), REG_CKGR_PLLAR,"Memory");\r
+    //__writeMemory32((0x03<<8), REG_PMC_PLLICPR,"Memory");\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_LOCKA));\r
+    __mac_i=__readMemory32(REG_CKGR_PLLAR,"Memory");\r
+    __message " --------- PMC_SetPllA ---------------- REG_CKGR_PLLAR  0x",__mac_i:%X;\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SetMckPllaDiv()\r
+*\r
+* Function description\r
+*   Configure MCK PLLA divider.\r
+*/\r
+PMC_SetMckPllaDiv()\r
+{\r
+    REG_PMC_MCKR = 0xF0018030;             /*(PMC) Master Clock Register */\r
+    PMC_MCKR_PLLADIV2_DIV2 = (0x1 << 12);  /*(PMC_MCKR) PLLA clock frequency is divided by 2. */\r
+    __tempo_var = __readMemory32(REG_PMC_MCKR,"Memory");\r
+    if ((__tempo_var & PMC_MCKR_PLLADIV2_DIV2) != PMC_MCKR_PLLADIV2_DIV2)\r
+    {\r
+        __tempo_var |= PMC_MCKR_PLLADIV2_DIV2;\r
+        __writeMemory32(__tempo_var, REG_PMC_MCKR,"Memory");\r
+        while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MCKRDY));\r
+    }\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SetMckPrescaler()\r
+*\r
+* Function description\r
+*   Configure MCK Prescaler.\r
+*/\r
+PMC_SetMckPrescaler()\r
+{\r
+    REG_PMC_MCKR = 0xF0018030;             /*(PMC) Master Clock Register */\r
+    PMC_MCKR_PRES_Msk = (0x7 << 4);        /*(PMC_MCKR) Master/Processor Clock Prescaler */\r
+    PMC_MCKR_PRES_CLOCK = (0x0 << 4);      /*(PMC_MCKR) Selected clock */\r
+\r
+    /* Change MCK Prescaler divider in PMC_MCKR register */\r
+    __tempo_var = __readMemory32(REG_PMC_MCKR,"Memory");\r
+    __tempo_var = (__tempo_var & ~PMC_MCKR_PRES_Msk) | PMC_MCKR_PRES_CLOCK;\r
+    __writeMemory32(__tempo_var, REG_PMC_MCKR,"Memory");\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MCKRDY));\r
+    __mac_i=__readMemory32(REG_PMC_MCKR,"Memory");\r
+    __message " --------- PMC_SetMckPrescaler -------------- REG_PMC_MCKR  0x",__mac_i:%X;\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SetMckDivider()\r
+*\r
+* Function description\r
+*   Configure MCK Divider.\r
+*/\r
+PMC_SetMckDivider()\r
+{\r
+    REG_PMC_MCKR = 0xF0018030;             /*(PMC) Master Clock Register */\r
+    PMC_MCKR_MDIV_Msk = (0x3 << 8);        /*(PMC_MCKR) Master Clock Division */\r
+    PMC_MCKR_MDIV_PCK_DIV3 = (0x3 << 8);   /*(PMC_MCKR) Master Clock is Prescaler Output Clock divided by 3.SysClk DDR is equal to 2 x MCK. DDRCK is equal to MCK. */\r
+\r
+    /* change MCK Prescaler divider in PMC_MCKR register */\r
+    __tempo_var = __readMemory32(REG_PMC_MCKR,"Memory");\r
+    __tempo_var = (__tempo_var & ~PMC_MCKR_MDIV_Msk) | PMC_MCKR_MDIV_PCK_DIV3;\r
+    __writeMemory32(__tempo_var, REG_PMC_MCKR,"Memory");\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MCKRDY));\r
+    __mac_i=__readMemory32(REG_PMC_MCKR,"Memory");\r
+    __message " --------- PMC_SetMckDivider -------------- REG_PMC_MCKR  0x",__mac_i:%X;\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       PMC_SwitchMck2Pll()\r
+*\r
+* Function description\r
+*   Switch PMC from MCK to PLL clock.\r
+*/\r
+PMC_SwitchMck2Pll()\r
+{\r
+    REG_PMC_MCKR = 0xF0018030;             /*(PMC) Master Clock Register */\r
+    PMC_MCKR_CSS_PLLA_CLK = (0x2 << 0);    /*(PMC_MCKR) PLLACK/PLLADIV2 is selected */\r
+\r
+    /* Select PLL as input clock for PCK and MCK */\r
+    __tempo_var = __readMemory32(REG_PMC_MCKR,"Memory");\r
+    __tempo_var = (__tempo_var & ~0x03) | PMC_MCKR_CSS_PLLA_CLK;\r
+    __writeMemory32(__tempo_var, REG_PMC_MCKR,"Memory");\r
+    while(!((__readMemory32(REG_PMC_SR,"Memory")) & PMC_SR_MCKRDY));\r
+    __mac_i=__readMemory32(REG_PMC_MCKR,"Memory");\r
+    __message " --------- PMC_SwitchMck2Pll -------------- REG_PMC_MCKR  0x",__mac_i:%X;\r
+}\r
+\r
+\r
+\r
+// ---------------------------------------------------------------------------\r
+//  Function Name       : __initDDR2\r
+//  Object              : Set DDR2 memory for working at 176 Mhz\r
+// ---------------------------------------------------------------------------\r
+\r
+__initDDR2(type)\r
+{\r
+    \r
+// ------------------ DDR Controller Registers --------------\r
+\r
+//  #define REG_MPDDRC_MR                              (0xF0010000U) /**< \brief (MPDDRC) MPDDRC Mode Register */\r
+//  #define REG_MPDDRC_RTR                             (0xF0010004U) /**< \brief (MPDDRC) MPDDRC Refresh Timer Register */\r
+//  #define REG_MPDDRC_CR                              (0xF0010008U) /**< \brief (MPDDRC) MPDDRC Configuration Register */\r
+//  #define REG_MPDDRC_TPR0                            (0xF001000CU) /**< \brief (MPDDRC) MPDDRC Timing Parameter 0 Register */\r
+//  #define REG_MPDDRC_TPR1                            (0xF0010010U) /**< \brief (MPDDRC) MPDDRC Timing Parameter 1 Register */\r
+//  #define REG_MPDDRC_TPR2                            (0xF0010014U) /**< \brief (MPDDRC) MPDDRC Timing Parameter 2 Register */\r
+//  #define REG_MPDDRC_LPR                             (0xF001001CU) /**< \brief (MPDDRC) MPDDRC Low-power Register */\r
+//  #define REG_MPDDRC_MD                              (0xF0010020U) /**< \brief (MPDDRC) MPDDRC Memory Device Register */\r
+//  #define REG_MPDDRC_LPDDR2_LPR                      (0xF0010028U) /**< \brief (MPDDRC) MPDDRC LPDDR2 Low-power Register */\r
+//  #define REG_MPDDRC_LPDDR2_CAL_MR4                  (0xF001002CU) /**< \brief (MPDDRC) MPDDRC LPDDR2 Calibration and MR4 Register */\r
+//  #define REG_MPDDRC_LPDDR2_TIM_CAL                  (0xF0010030U) /**< \brief (MPDDRC) MPDDRC LPDDR2 Timing Calibration Register */\r
+//  #define REG_MPDDRC_IO_CALIBR                       (0xF0010034U) /**< \brief (MPDDRC) MPDDRC IO Calibration */\r
+//  #define REG_MPDDRC_OCMS                            (0xF0010038U) /**< \brief (MPDDRC) MPDDRC OCMS Register */\r
+//  #define REG_MPDDRC_OCMS_KEY1                       (0xF001003CU) /**< \brief (MPDDRC) MPDDRC OCMS KEY1 Register */\r
+//  #define REG_MPDDRC_OCMS_KEY2                       (0xF0010040U) /**< \brief (MPDDRC) MPDDRC OCMS KEY2 Register */\r
+//  #define REG_MPDDRC_CONF_ARBITER                    (0xF0010044U) /**< \brief (MPDDRC) MPDDRC Configuration Arbiter */\r
+//  #define REG_MPDDRC_TIMEOUT                         (0xF0010048U) /**< \brief (MPDDRC) MPDDRC Time-out Port 0/1/2/3 */\r
+//  #define REG_MPDDRC_REQ_PORT_0123                   (0xF001004CU) /**< \brief (MPDDRC) MPDDRC Time-out Request Port 0/1/2/3 */\r
+//  #define REG_MPDDRC_REQ_PORT_4567                   (0xF0010050U) /**< \brief (MPDDRC) MPDDRC Time-out Request Port 4/5/6/7 */\r
+//  #define REG_MPDDRC_BDW_PORT_0123                   (0xF0010054U) /**< \brief (MPDDRC) MPDDRC Bandwidth Port 0/1/2/3 */\r
+//  #define REG_MPDDRC_BDW_PORT_4567                   (0xF0010058U) /**< \brief (MPDDRC) MPDDRC Bandwidth Port 4/5/6/7 */\r
+//  #define REG_MPDDRC_RD_DATA_PATH                    (0xF001005CU) /**< \brief (MPDDRC) MPDDRC_READ_DATA_PATH */\r
+//  #define REG_MPDDRC_SAW                             (0xF0010060U) /**< \brief (MPDDRC) MPDDRC Smart Adaptation Wrapper 0 Register */\r
+//  #define REG_MPDDRC_WPMR                            (0xF00100E4U) /**< \brief (MPDDRC) MPDDRC Write Protect Control Register */\r
+//  #define REG_MPDDRC_WPSR                            (0xF00100E8U) /**< \brief (MPDDRC) MPDDRC Write Protect Status Register */\r
+//  #define REG_MPDDRC_DLL_OS                          (0xF0010100U) /**< \brief (MPDDRC) MPDDRC DLL Offset Selection Register */\r
+//  #define REG_MPDDRC_DLL_MO                          (0xF0010104U) /**< \brief (MPDDRC) MPDDRC DLL MASTER Offset Register */\r
+//  #define REG_MPDDRC_DLL_SO0                         (0xF0010108U) /**< \brief (MPDDRC) MPDDRC DLL SLAVE Offset 0 Register */\r
+//  #define REG_MPDDRC_DLL_SO1                         (0xF001010CU) /**< \brief (MPDDRC) MPDDRC DLL SLAVE Offset 1 Register */\r
+//  #define REG_MPDDRC_DLL_WRO                         (0xF0010110U) /**< \brief (MPDDRC) MPDDRC DLL CLKWR Offset Register */\r
+//  #define REG_MPDDRC_DLL_ADO                         (0xF0010114U) /**< \brief (MPDDRC) MPDDRC DLL CLKAD Offset Register */\r
+//  #define REG_MPDDRC_DLL_SM                          (0xF0010118U) /**< \brief (MPDDRC) MPDDRC DLL Status MASTER0 Register */\r
+//  #define REG_MPDDRC_DLL_SSL                         (0xF0010128U) /**< \brief (MPDDRC) MPDDRC DLL Status SLAVE0 Register */\r
+//  #define REG_MPDDRC_DLL_SWR                         (0xF0010148U) /**< \brief (MPDDRC) MPDDRC DLL Status CLKWR0 Register */\r
+//  #define REG_MPDDRC_DLL_SAD                         (0xF0010158U) /**< \brief (MPDDRC) MPDDRC DLL Status CLKAD Register */\r
+// -----------------------------------------------\r
+   \r
+    __delay(2);\r
+    __writeMemory32(0x00008000,0xFC068644,"Memory");   // Disable Watchdog\r
+    __writeMemory32(0x00010000,0xF0018010,"Memory");   // Enable MPDDR controller clock\r
+    __writeMemory32(0x00000004,0xF0018000,"Memory");   // System Clock Enable Register : Enable DDR clock\r
+\r
+    __writeMemory32(0x00000001,0xF001005C,"Memory");   // Read Data Path register  :  Sampling point is shifted of one cycle\r
+\r
+    __writeMemory32(0x00870514,0xF0010034,"Memory");   // MPDDRC I/O Calibration Register : RZQ_60_RZQ_50 + enable permanent calibration + TZQIO = 5\r
+\r
+    __writeMemory32(0x00000006,0xF0010020,"Memory");   // Memory Device Register  :  32bit mode - DDR2 mode\r
+\r
+    __writeMemory32(0x2223A338,0xF001000C,"Memory");   // Timing 0 Register : tras  | trcd  | twr   | trc  | trp | trrd | twtr | tmrd\r
+    __writeMemory32(0x0b206417,0xF0010010,"Memory");   // Timing 1 Register : trfc  | txsnr | txsrd | txp\r
+    __writeMemory32(0x00072328,0xF0010014,"Memory");   // Timing 2 Register : txard | tards | trpa  | trtp | tfaw\r
+\r
+    __writeMemory32(0x00B0003D,0xF0010008,"Memory");   // Configuration Register  :  row = 14, column(DDR) = 10, CAS 3, DLL reset disable, phase error correction is enabled / normal driver strength\r
+\r
+    __writeMemory32(0x00000001,0xF0010000,"Memory");   // Mode register : command  NOP --> ENABLE CLOCK output\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);   // wait 1 ms\r
+    __writeMemory32(0x00000001,0xF0010000,"Memory");   // Mode register : command  NOP --> ENABLE CLOCK output\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000002,0xF0010000,"Memory");   // Mode register : command  All Banks Precharge\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000005,0xF0010000,"Memory");   // Mode register : command  Extended Load Mode Register : Set EMR Ext Mode Reg EMSR2 BA0=0 BA1=1\r
+    __writeMemory32(0x00000000,0x28000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000005,0xF0010000,"Memory");   // Mode register : command  Extended Load Mode Register : Set EMR Ext Mode Reg EMSR3 BA0=1 BA1=1\r
+    __writeMemory32(0x00000000,0x2C000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000005,0xF0010000,"Memory");   // Mode register : command  Extended Load Mode Register : Set EMR Ext Mode Reg EMSR1 BA0=1 BA1=0 ENABLE DLL\r
+    __writeMemory32(0x00000000,0x24000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+\r
+    __writeMemory32(0x00B000BD,0xF0010008,"Memory");   // Configuration Register : Enable DLL reset\r
+\r
+    __writeMemory32(0x00000003,0xF0010000,"Memory");   // Mode register : command  RESET DLL\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000002,0xF0010000,"Memory");   // Mode register : command  All Banks Precharge\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000004,0xF0010000,"Memory");   // Mode register : 2 * command  Auto-Refresh\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000004,0xF0010000,"Memory");   // Mode register :\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+\r
+    __writeMemory32(0x00B0003D,0xF0010008,"Memory");   // Configuration Register : disable DLL reset\r
+\r
+    __writeMemory32(0x00000003,0xF0010000,"Memory");   // Mode register :  MRS  initialize device operation (CAS latency, burst length and disable DLL reset)\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+\r
+    __writeMemory32(0x00B0703D,0xF0010008,"Memory");   // Configuration Register : OCD default value\r
+\r
+    __writeMemory32(0x00000005,0xF0010000,"Memory");   // Mode register : EMRS1   OCD Default values\r
+    __writeMemory32(0x00000000,0x24000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+\r
+    __writeMemory32(0x00B0003D,0xF0010008,"Memory");   // Configuration Register : OCD exit\r
+\r
+    __writeMemory32(0x00000005,0xF0010000,"Memory");   // Mode register : EMRS1   OCD exit\r
+    __writeMemory32(0x00000000,0x24000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000000,0xF0010000,"Memory");   // Mode register : command  Normal mode\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+    __writeMemory32(0x00000000,0x20000000,"Memory");   // DDR2 memory : access memory to validate preeceeding command\r
+    __delay(1);\r
+\r
+    __writeMemory32(0x000002B0,0xF0010004,"Memory");   // Refresh Timer register\r
+\r
+    __message "------------------------------- DDR2 memory init for 176 MHz ----------------------------------";\r
+}\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x-ek-sram.mac b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x-ek-sram.mac
new file mode 100644 (file)
index 0000000..991eab2
--- /dev/null
@@ -0,0 +1,106 @@
+// ---------------------------------------------------------\r
+//   ATMEL Microcontroller Software Support\r
+// ---------------------------------------------------------\r
+// The software is delivered "AS IS" without warranty or\r
+// condition of any  kind, either express, implied or\r
+// statutory. This includes without limitation any warranty\r
+// or condition with respect to merchantability or fitness\r
+// for any particular purpose, or against the infringements of\r
+// intellectual property rights of others.\r
+// ---------------------------------------------------------\r
+//  File: sama5d3x-ek-sram.mac\r
+//  User setup file for CSPY debugger.\r
+//  \r
+// ---------------------------------------------------------\r
+\r
+__var __tempo_var;\r
+__var __dummy_read;\r
+__var __data_test;\r
+__var __mac_i;\r
+\r
+/*********************************************************************\r
+*\r
+*       execUserReset() : JTAG set initially to Full Speed\r
+*/\r
+execUserReset()\r
+{\r
+    __message "------------------------------ execUserReset ---------------------------------";\r
+    //CheckNoRemap();\r
+    __message "-------------------------------Set PC Reset ----------------------------------";\r
+    __writeMemory32(0x1D3,0x98,"Register");        //*  Set CPSR\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       execUserPreload() : JTAG set initially to 32kHz\r
+*/\r
+execUserPreload()\r
+{\r
+    __message "------------------------------ execUserPreload ---------------------------------";\r
+    //__hwReset(0);                     //* Hardware Reset: CPU is automatically halted after the reset (JTAG is already configured to 32kHz)\r
+    \r
+    //__writeMemory32(0xD3,0x98,"Register"); //*  Set CPSR\r
+    //CheckNoRemap();                   //* Set the RAM memory at 0x0020 0000 & 0x0000 0000\r
+    Watchdog();                       //* Watchdog Disable\r
+\r
+    //*  Get the Chip ID  (AT91C_DBGU_C1R & AT91C_DBGU_C2R\r
+    __mac_i=__readMemory32(0xFC069040,"Memory");\r
+    __message " ---------------------------------------- Chip ID   0x",__mac_i:%X;\r
+}\r
+\r
+\r
+/*********************************************************************\r
+*\r
+*       CheckRemap()\r
+*\r
+* Function description\r
+*   Check the Remap.\r
+*/\r
+\r
+CheckNoRemap()\r
+{\r
+    __tempo_var = __readMemory32(0x00000000,"Memory");\r
+    \r
+    if (__tempo_var == 0xAA55AA55) \r
+    {\r
+       __data_test = 0x55AA55AA;\r
+    }\r
+    else\r
+      {\r
+         __data_test = 0xAA55AA55;\r
+      }\r
+      \r
+    __writeMemory32(__data_test,0x00000000,"Memory");\r
+      \r
+    __dummy_read = __readMemory32(0x00000000,"Memory");\r
+\r
+    __writeMemory32(__tempo_var,0x00000000,"Memory");\r
+   \r
+    if (__dummy_read == __data_test) \r
+    {\r
+       __message " ------------------------ The Remap is already done ------------------------";\r
+    }\r
+    else\r
+      {\r
+         __message " ------------------------ The Remap is not DONE ------------------------";\r
+         __writeMemory32(0x00000001,0x00700000,"Memory");\r
+         __delay(50);\r
+         __message "------------ The Remap was executed ------------";\r
+      }\r
+}\r
+\r
+/*********************************************************************\r
+*\r
+*       _Watchdog()\r
+*\r
+* Function description\r
+*   Clear Watchdog\r
+*/\r
+\r
+Watchdog()\r
+{\r
+   // Watchdog Disable\r
+   __writeMemory32(0x00008000,0xFC068644,"Memory");\r
+   __message " ------------------------ Watchdog Disable ------------------------";\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/ddram.icf b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/ddram.icf
new file mode 100644 (file)
index 0000000..2a5bc3b
--- /dev/null
@@ -0,0 +1,59 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/\r
+/*-Editor annotation file-*/\r
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */\r
+/*-Memory Regions-*/\r
+define symbol __ICFEDIT_region_DDRAM_start__ = 0x20000000;\r
+define symbol __ICFEDIT_region_DDRAM_end__   = 0x23FFFFFF;\r
+define symbol __ICFEDIT_region_RAM_start__   = 0x200000;\r
+define symbol __ICFEDIT_region_RAM_end__     = 0x21FFFF;\r
+define symbol __ICFEDIT_region_DDRAM_BUF_start__ = 0x24000000;\r
+define symbol __ICFEDIT_region_DDRAM_BUF_end__   = 0x24FFFFFF;\r
+\r
+/*-Sizes-*/\r
+define symbol __ICFEDIT_size_startup__  = 0x200;\r
+define symbol __ICFEDIT_size_vectors__  = 0x100;\r
+define symbol __ICFEDIT_size_cstack__   = 0x4000;\r
+define symbol __ICFEDIT_size_irqstack__ = 0x60;\r
+define symbol __ICFEDIT_size_fiqstack__ = 0x60;\r
+define symbol __ICFEDIT_size_abtstack__ = 0x60;\r
+define symbol __ICFEDIT_size_undstack__ = 0x40;\r
+\r
+define symbol __ICFEDIT_size_heap__     = 0x60;\r
+/*-Exports-*/\r
+export symbol __ICFEDIT_region_DDRAM_start__;\r
+export symbol __ICFEDIT_region_DDRAM_end__;\r
+export symbol __ICFEDIT_region_RAM_start__;\r
+export symbol __ICFEDIT_region_RAM_end__;\r
+export symbol __ICFEDIT_size_startup__;\r
+export symbol __ICFEDIT_size_vectors__;\r
+export symbol __ICFEDIT_size_cstack__;\r
+export symbol __ICFEDIT_size_irqstack__;\r
+export symbol __ICFEDIT_size_fiqstack__;\r
+export symbol __ICFEDIT_size_heap__;\r
+/**** End of ICF editor section. ###ICF###*/\r
+\r
+define memory mem with size = 4G;\r
+define region STA_region =   mem:[from __ICFEDIT_region_DDRAM_start__ size __ICFEDIT_size_startup__];\r
+define region STACK_region  = mem:[from __ICFEDIT_region_DDRAM_start__+__ICFEDIT_size_startup__ size __ICFEDIT_size_startup__+__ICFEDIT_size_cstack__+__ICFEDIT_size_irqstack__+__ICFEDIT_size_fiqstack__+__ICFEDIT_size_heap__];\r
+define region DDRAM_region = mem:[from __ICFEDIT_region_DDRAM_start__+__ICFEDIT_size_startup__+__ICFEDIT_size_cstack__+__ICFEDIT_size_irqstack__+__ICFEDIT_size_fiqstack__+__ICFEDIT_size_heap__ to __ICFEDIT_region_DDRAM_end__];\r
+define region VEC_region =   mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];\r
+define region RAM_region =   mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];\r
+define region DMA_BUF_region = mem:[from __ICFEDIT_region_DDRAM_BUF_start__ to __ICFEDIT_region_DDRAM_BUF_end__];\r
+\r
+define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };\r
+define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };\r
+define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };\r
+define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };\r
+define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };\r
+define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };\r
+\r
+initialize by copy { section .vectors };\r
+do not initialize  { section .noinit };\r
+\r
+place in STA_region { section .cstartup };\r
+place in VEC_region { section .vectors };\r
+place in DDRAM_region { readonly };\r
+place in DDRAM_region { readwrite };\r
+place in DDRAM_region { zeroinit };\r
+place in STACK_region { block IRQ_STACK,  block FIQ_STACK, block ABT_STACK, block UND_STACK, block CSTACK, block HEAP };\r
+place in DMA_BUF_region {section region_dma_nocache };\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/sram.icf b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/sram.icf
new file mode 100644 (file)
index 0000000..25732f4
--- /dev/null
@@ -0,0 +1,46 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/\r
+/*-Editor annotation file-*/\r
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */\r
+/*-Memory Regions-*/\r
+define symbol __ICFEDIT_region_RAM_start__ = 0x200000;\r
+define symbol __ICFEDIT_region_RAM_end__   = 0x21FFFF;\r
+/*-Sizes-*/\r
+define symbol __ICFEDIT_size_vectors__  = 0x100;\r
+define symbol __ICFEDIT_size_cstack__   = 0x4000; \r
+define symbol __ICFEDIT_size_irqstack__ = 0x60;\r
+define symbol __ICFEDIT_size_fiqstack__ = 0x60;\r
+define symbol __ICFEDIT_size_abtstack__ = 0x60;\r
+define symbol __ICFEDIT_size_undstack__ = 0x40;\r
+\r
+define symbol __ICFEDIT_size_heap__     = 0x400;\r
+/*-Exports-*/\r
+export symbol __ICFEDIT_region_RAM_start__;\r
+export symbol __ICFEDIT_region_RAM_end__;\r
+export symbol __ICFEDIT_size_vectors__;\r
+export symbol __ICFEDIT_size_cstack__;\r
+export symbol __ICFEDIT_size_irqstack__;\r
+export symbol __ICFEDIT_size_fiqstack__;\r
+\r
+export symbol __ICFEDIT_size_heap__;\r
+/**** End of ICF editor section. ###ICF###*/\r
+\r
+define memory mem with size = 4G;\r
+define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];\r
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];\r
+\r
+define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };\r
+define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };\r
+define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };\r
+define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };\r
+define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };\r
+define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };\r
+\r
+initialize by copy with packing=none { readwrite };  \r
+do not initialize  { readonly section .noinit };\r
+\r
+place in VEC_region { section .vectors };\r
+place in RAM_region { readonly };\r
+place in RAM_region { section .cstartup };\r
+place in RAM_region { readwrite, block IRQ_STACK, block FIQ_STACK, block ABT_STACK, block UND_STACK, block CSTACK, block HEAP };\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/bmp.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/bmp.c
new file mode 100644 (file)
index 0000000..098377e
--- /dev/null
@@ -0,0 +1,315 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+#include <string.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/// BMP offset for header\r
+#define  IMAGE_OFFSET       0x100\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Internal types\r
+ *----------------------------------------------------------------------------*/\r
+/** Describe the BMP palette */\r
+typedef struct _BMPPaletteEntry\r
+{\r
+    /** Blue value */\r
+    uint8_t b;\r
+    /** Green value */\r
+    uint8_t g;\r
+    /** Red value */\r
+    uint8_t r;\r
+    /** Filler character value */\r
+    uint8_t filler;\r
+} BMPPaletteEntry ;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/**\r
+ * \brief Test if BMP is valid.\r
+ * \param file  Buffer holding the file to examinate.\r
+ * \return 1 if the header of a BMP file is valid; otherwise returns 0.\r
+ */\r
+uint8_t BMP_IsValid( void *file )\r
+{\r
+    return ((BMPHeader*) file)->type == BMP_TYPE ;\r
+}\r
+\r
+/**\r
+ * \brief Returns the size of a BMP image given at least its header (the file does\r
+ * not have to be complete).\r
+ * \param file  Pointer to the buffer which holds the BMP file.\r
+ * \return size of BMP image\r
+ */\r
+uint32_t BMP_GetFileSize( void *file )\r
+{\r
+    return ((BMPHeader *) file)->fileSize ;\r
+}\r
+\r
+/**\r
+ * \brief Write a BMP header\r
+ * \param pAddressHeader Begin address of the BMP\r
+ * \param bmpHSize BMP heigth size\r
+ * \param bmpVSize BMP width size\r
+ * \param bmpRgb Type of BMP (YUV or RGB)\r
+ * \param nbByte_Pixels Number of byte per pixels\r
+ */\r
+void WriteBMPheader( uint32_t* pAddressHeader, uint32_t  bmpHSize, uint32_t  bmpVSize, uint8_t bmpRgb, uint8_t nbByte_Pixels )\r
+{\r
+    uint32_t i;\r
+    uint32_t* fill;\r
+    BMPHeader *Header;\r
+    bmpRgb = bmpRgb;\r
+\r
+    fill = pAddressHeader;\r
+    for ( i=0 ; i < IMAGE_OFFSET ; i+=4 )\r
+    {\r
+        *fill++ = 0;\r
+    }\r
+\r
+    Header = (BMPHeader*) pAddressHeader;\r
+\r
+    Header->type = BMP_TYPE;\r
+    Header->fileSize = (bmpHSize * bmpVSize * nbByte_Pixels) + IMAGE_OFFSET;\r
+    Header->reserved1 = 0;\r
+    Header->reserved2 = 0;\r
+    Header->offset = IMAGE_OFFSET;\r
+    Header->headerSize = BITMAPINFOHEADER;\r
+    Header->width  = bmpHSize;\r
+    Header->height = bmpVSize;\r
+    Header->planes = 1;\r
+    Header->bits = nbByte_Pixels * 8;\r
+    Header->compression = 0;\r
+    Header->imageSize = bmpHSize * bmpVSize * nbByte_Pixels;\r
+    Header->xresolution = 0;\r
+    Header->yresolution = 0;\r
+    Header->ncolours = 0;\r
+    Header->importantcolours = 0;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Debug function, dislay BMP header\r
+ * \param pAddressHeader Address of the BMP\r
+ */\r
+void BMP_displayHeader( uint32_t* pAddressHeader )\r
+{\r
+  #if (TRACE_LEVEL >= TRACE_LEVEL_INFO)\r
+    BMPHeader *header;\r
+\r
+    header = (BMPHeader*) pAddressHeader;\r
+    \r
+    TRACE_INFO("BMP\n\r");\r
+    TRACE_INFO("type       0x%X \n\r", header->type);\r
+    TRACE_INFO("fileSize   %ld \n\r", header->fileSize);\r
+    TRACE_INFO("reserved1  %d \n\r", header->reserved1);\r
+    TRACE_INFO("reserved2  %d \n\r", header->reserved2);\r
+    TRACE_INFO("offset     %ld \n\r", header->offset);\r
+    TRACE_INFO("headerSize %ld \n\r", header->headerSize);\r
+    TRACE_INFO("width      %ld \n\r", header->width);\r
+    TRACE_INFO("height     %ld \n\r", header->height);\r
+    TRACE_INFO("planes     %d \n\r", header->planes);\r
+    TRACE_INFO("bits       %d \n\r", header->bits);\r
+    TRACE_INFO("compression %ld \n\r", header->compression);\r
+    TRACE_INFO("imageSize   %ld \n\r", header->imageSize);\r
+    TRACE_INFO("xresolution %ld \n\r", header->xresolution);\r
+    TRACE_INFO("yresolution %ld \n\r", header->yresolution);\r
+    TRACE_INFO("ncolours    %ld \n\r", header->ncolours);\r
+    TRACE_INFO("importantcolours %ld\n\r", header->importantcolours);\r
+  #else\r
+    pAddressHeader = pAddressHeader;\r
+  #endif\r
+}\r
+\r
+/**\r
+ * \brief Loads a BMP image located at the given address, decodes it and stores the\r
+ * resulting image inside the provided buffer. Image must have the specified\r
+ * width & height.\r
+ * If no buffer is provided, this function simply checks if it is able to\r
+ * decode the image.\r
+ * \param file  Buffer which holds the BMP file.\r
+ * \param buffer  Buffer in which to store the decoded image.\r
+ * \param width  Buffer width in pixels.\r
+ * \param height  Buffer height in pixels.\r
+ * \param bpp  Number of bits per pixels that the buffer stores.\r
+ * \return 0 if the image has been loaded; otherwise returns an error code.\r
+ */\r
+uint8_t BMP_Decode( void *file, uint8_t *buffer, uint32_t width, uint32_t height, uint8_t bpp )\r
+{\r
+    BMPHeader *header;\r
+    uint32_t i, j;\r
+    uint8_t r, g, b;\r
+    uint8_t *image;\r
+\r
+    // Read header information\r
+    header = (BMPHeader*) file;\r
+\r
+    // Verify that the file is valid\r
+    if ( !BMP_IsValid( file ) )\r
+    {\r
+        TRACE_ERROR("BMP_Decode: File type is not 'BM' (0x%04X).\n\r",header->type);\r
+\r
+        return 1;\r
+    }\r
+\r
+    // Check that parameters match\r
+    if ( (header->compression != 0) || (header->width != width) || (header->height != height))\r
+    {\r
+        TRACE_ERROR("BMP_Decode: File format not supported\n\r");\r
+        TRACE_ERROR(" -> .compression = %u\n\r", (unsigned int)header->compression);\r
+        TRACE_ERROR(" -> .width = %u\n\r", (unsigned int)header->width);\r
+        TRACE_ERROR(" -> .height = %u\n\r", (unsigned int)header->height);\r
+        TRACE_ERROR(" -> .bits = %d\n\r", header->bits);\r
+\r
+        return 2;\r
+    }\r
+\r
+    // Get image data\r
+    image = (uint8_t *) ((uint32_t) file + header->offset);\r
+\r
+    // Check that the bpp resolution is supported\r
+    // Only a 24-bit output & 24- or 8-bit input are supported\r
+    if ( bpp != 24 )\r
+    {\r
+        TRACE_ERROR("BMP_Decode: Output resolution not supported\n\r");\r
+\r
+        return 3;\r
+    }\r
+    else\r
+    {\r
+        if (header->bits == 24)\r
+        {\r
+            // Decoding is ok\r
+            if (!buffer) return 0;\r
+\r
+            // Get image data (swapping red & blue)\r
+            for ( i=0 ; i < height ; i++ )\r
+            {\r
+                for ( j=0 ; j < width; j++ )\r
+                {\r
+                    r = image[((height - i - 1) * width + j) * 3 + 2];\r
+                    g = image[((height - i - 1) * width + j) * 3 + 1];\r
+                    b = image[((height - i - 1) * width + j) * 3];\r
+\r
+    #if defined(BOARD_LCD_RGB565)\r
+                    // Interlacing\r
+                    r = ((r << 1) & 0xF0) | ((g & 0x80) >> 4) | ((r & 0x80) >> 5);\r
+                    g = (g << 1) & 0xF8;\r
+                    b = b & 0xF8;\r
+\r
+                    buffer[(i * width + j) * 3] = b;\r
+                    buffer[(i * width + j) * 3 + 1] = g;\r
+                    buffer[(i * width + j) * 3 + 2] = r;\r
+\r
+    #else\r
+                    buffer[(i * width + j) * 3] = r;\r
+                    buffer[(i * width + j) * 3 + 1] = g;\r
+                    buffer[(i * width + j) * 3 + 2] = b;\r
+    #endif //#if defined(BOARD_LCD_RGB565)\r
+                }\r
+            }\r
+        }\r
+        else\r
+        {\r
+            if ( header->bits == 8 )\r
+            {\r
+                // Decoding is ok\r
+                if (!buffer) return 0;\r
+\r
+                // Retrieve palette\r
+                BMPPaletteEntry palette[256];\r
+                memcpy( palette, (uint8_t *) ((uint32_t) file + sizeof( BMPHeader )), header->offset - sizeof( BMPHeader ) ) ;\r
+\r
+                // Decode image (reversing row order)\r
+                for ( i=0 ; i < height ; i++ )\r
+                {\r
+                    for (j=0; j < width; j++)\r
+                    {\r
+                        r = palette[image[(height - i - 1) * width + j]].r;\r
+                        g = palette[image[(height - i - 1) * width + j]].g;\r
+                        b = palette[image[(height - i - 1) * width + j]].b;\r
+\r
+                        buffer[(i * width + j) * 3] = r;\r
+                        buffer[(i * width + j) * 3 + 1] = g;\r
+                        buffer[(i * width + j) * 3 + 2] = b;\r
+                    }\r
+                }\r
+            }\r
+            else\r
+            {\r
+\r
+                TRACE_ERROR("BMP_Decode: Input resolution not supported\n\r");\r
+                TRACE_INFO("header->bits 0x%X \n\r", header->bits);\r
+                return 4 ;\r
+            }\r
+        }\r
+    }\r
+\r
+    return 0 ;\r
+}\r
+\r
+/**\r
+ * \brief Convert RGB 565 to RGB 555 (RGB 555 is adapted to LCD)\r
+ *\r
+ * \param fileSource  Buffer which holds the RGB file\r
+ * \param fileDestination  Buffer in which to store the decoded image\r
+ * \param width  Buffer width in pixels.\r
+ * \param height  Buffer height in pixels.\r
+ * \param bpp  Number of bits per pixels that the buffer stores.\r
+  */\r
+void RGB565toBGR555( uint8_t *fileSource, uint8_t *fileDestination, uint32_t width, uint32_t height, uint8_t bpp )\r
+{\r
+    uint32_t i;\r
+    uint32_t j;\r
+    uint32_t row;\r
+\r
+    for (i=0; i < height*(bpp/8); i++)\r
+    {\r
+        row = (i*width*(bpp/8));\r
+\r
+        for (j=0; j <= width*(bpp/8); j+=2)\r
+        {\r
+            fileDestination[row+j] = ((fileSource[row+j+1]>>3)&0x1F)\r
+                                    | (fileSource[row+j]&0xE0);\r
+            fileDestination[row+j+1] = (fileSource[row+j+1]&0x03)\r
+                                    | ((fileSource[row+j]&0x1F)<<2);\r
+        }\r
+    }\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_cstartup_gnu.S b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_cstartup_gnu.S
new file mode 100644 (file)
index 0000000..70bc79b
--- /dev/null
@@ -0,0 +1,283 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+//------------------------------------------------------------------------------\r
+//         Definitions\r
+//------------------------------------------------------------------------------\r
+\r
+\r
+#define AIC         0xFC06E000\r
+#define AIC_IVR     0x10\r
+#define AIC_EOICR   0x38\r
+#define SAIC        0xFC068400\r
+#define AIC_FVR     0x14\r
+\r
+#define IRQ_STACK_SIZE   8*3*4\r
+#define FIQ_STACK_SIZE   8*3*4\r
+\r
+#define MODE_MSK         0x1F\r
+#define ARM_MODE_ABT     0x17\r
+#define ARM_MODE_FIQ     0x11\r
+#define ARM_MODE_IRQ     0x12\r
+#define ARM_MODE_SVC     0x13\r
+#define ARM_MODE_SYS     0x1F\r
+\r
+#define I_BIT            0x80\r
+#define F_BIT            0x40\r
+\r
+#define REG_SFR_AICREDIR        0xF8028054\r
+#define REG_SFR_UID             0xF8028050   \r
+#define AICREDIR_KEY            0x5F67B102\r
+\r
+//------------------------------------------------------------------------------\r
+//         Startup routine\r
+//------------------------------------------------------------------------------\r
+\r
+            .align      4\r
+            .arm\r
+        \r
+/* Exception vectors\r
+ *******************/\r
+            .section    .vectors, "a", %progbits\r
+\r
+resetVector:\r
+        ldr     pc, =resetHandler       /* Reset */\r
+undefVector:\r
+        b       undefVector             /* Undefined instruction */\r
+swiVector:\r
+        b       swiVector               /* Software interrupt */\r
+prefetchAbortVector:\r
+        b       prefetchAbortVector     /* Prefetch abort */\r
+dataAbortVector:\r
+        b       dataAbortVector         /* Data abort */\r
+reservedVector:\r
+        b       reservedVector          /* Reserved for future use */\r
+irqVector:\r
+        b       irqHandler              /* Interrupt */\r
+fiqVector:\r
+        b       fiqHandler              /* Fast interrupt */\r
+//------------------------------------------------------------------------------\r
+/// Handles a fast interrupt request by branching to the address defined in the\r
+/// AIC.\r
+//------------------------------------------------------------------------------\r
+fiqHandler:\r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        /* MRS     lr, SPSR */\r
+        STMFD   sp!, {r0}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =SAIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        MOV     r14, pc\r
+        BX      r0\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        MSR     CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =SAIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0}\r
+        /* MSR     SPSR_cxsf, lr*/\r
+        LDMIA   sp!, {pc}^\r
+\r
+\r
+//------------------------------------------------------------------------------\r
+/// Handles incoming interrupt requests by branching to the corresponding\r
+/// handler, as defined in the AIC. Supports interrupt nesting.\r
+//------------------------------------------------------------------------------\r
+irqHandler:\r
+ /* Save interrupt context on the stack to allow nesting */\r
+     /* Save interrupt context on the stack to allow nesting */\r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        MRS     lr, SPSR\r
+        STMFD   sp!, {r0, lr}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =AIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        /* Check for 8-byte alignment and save lr plus a */\r
+        /* word to indicate the stack adjustment used (0 or 4) */\r
+        AND     r1, sp, #4\r
+        SUB     sp, sp, r1\r
+        STMFD   sp!, {r1, lr}\r
+\r
+        BLX     r0\r
+\r
+        LDMIA   sp!, {r1, lr}\r
+        ADD     sp, sp, r1\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =AIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0, lr}\r
+        MSR     SPSR_cxsf, lr\r
+        LDMIA   sp!, {pc}^\r
+\r
+\r
+//------------------------------------------------------------------------------\r
+/// Initializes the chip and branches to the main() function.\r
+//------------------------------------------------------------------------------\r
+            .section    .textEntry\r
+            .global     entry\r
+\r
+entry:\r
+resetHandler:\r
+        \r
+        CPSIE   A \r
+\r
+/* Enable VFP */\r
+        /* - Enable access to CP10 and CP11 in CP15.CACR */\r
+        //mrc     p15, 0, r0, c1, c0, 2\r
+        //orr     r0, r0, #0xf00000\r
+        //mcr     p15, 0, r0, c1, c0, 2\r
+/* - Enable access to CP10 and CP11 in CP15.NSACR */\r
+/* - Set FPEXC.EN (B30) */\r
+        //fmrx    r0, fpexc\r
+        //orr     r0, r0, #0x40000000\r
+        //fmxr    fpexc, r0\r
+\r
+/* Useless instruction for referencing the .vectors section */\r
+        ldr     r0, =resetVector\r
+\r
+/* Set pc to actual code location (i.e. not in remap zone) */\r
+        ldr     pc, =1f\r
+\r
+/* Initialize the prerelocate segment */\r
+1:\r
+        ldr     r0, =_efixed\r
+        ldr     r1, =_sprerelocate\r
+        ldr     r2, =_eprerelocate\r
+1:\r
+        cmp     r1, r2\r
+        ldrcc   r3, [r0], #4\r
+        strcc   r3, [r1], #4\r
+        bcc     1b\r
+\r
+/* Perform low-level initialization of the chip using LowLevelInit() */\r
+        ldr     sp, =_cstack\r
+        stmfd   sp!, {r0}\r
+        ldr     r0, =LowLevelInit\r
+        blx     r0\r
+\r
+/* Initialize the postrelocate segment */\r
+\r
+        ldmfd   sp!, {r0}\r
+        ldr     r1, =_spostrelocate\r
+        ldr     r2, =_epostrelocate\r
+1:\r
+        cmp     r1, r2\r
+        ldrcc   r3, [r0], #4\r
+        strcc   r3, [r1], #4\r
+        bcc     1b\r
+\r
+/* Clear the zero segment */\r
+        ldr     r0, =_szero\r
+        ldr     r1, =_ezero\r
+        mov     r2, #0\r
+1:\r
+        cmp     r0, r1\r
+        strcc   r2, [r0], #4\r
+        bcc     1b\r
+        \r
+        MRS     r0, cpsr                \r
+/* Set up the fast interrupt stack pointer.*/\r
+        bic     r0, r0, #MODE_MSK       \r
+        orr     r0, r0, #ARM_MODE_FIQ   \r
+        msr     cpsr_c, r0              \r
+        ldr     sp, =_fiqstack     \r
+        bic     sp,sp,#0x7       \r
+\r
+/* Set up the normal interrupt stack pointer.*/\r
+\r
+        bic     r0, r0, #MODE_MSK       \r
+        orr     r0, r0, #ARM_MODE_IRQ  \r
+        msr     cpsr_c, r0             \r
+        ldr     sp, =_irqstack          \r
+        bic     sp,sp,#0x7             \r
+\r
+/* Set up the stack pointer.*/\r
+\r
+        bic     r0 ,r0, #MODE_MSK      \r
+        orr     r0 ,r0, #ARM_MODE_SYS  \r
+        msr     cpsr_c, r0             \r
+        ldr     sp, =_sysstack\r
+        bic     sp,sp,#0x7              \r
+\r
+        bic     r0 ,r0, #MODE_MSK      \r
+        orr     r0 ,r0, #ARM_MODE_SVC\r
+        msr     cpsr_c, r0             \r
+        ldr     sp, =_cstack\r
+        bic     sp,sp,#0x7    \r
+\r
+               // Redirect FIQ to IRQ\r
+        LDR  r0,  =AICREDIR_KEY \r
+        LDR  r1, = REG_SFR_UID\r
+        LDR  r2, = REG_SFR_AICREDIR\r
+        LDR  r3,[r1]\r
+        EORS r0, r0, r3\r
+        ORRS r0, r0, #0x01\r
+        STR  r0, [r2]\r
+\r
+/*Initialize the C library  */\r
+       ldr     r3, =__libc_init_array\r
+       mov     lr, pc\r
+       bx      r3\r
+\r
+/* Branch to main()\r
+ ******************/\r
+       ldr     r0, =main\r
+       blx     r0\r
+\r
+/* Loop indefinitely when program is finished */\r
+1:\r
+        b       1b\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_cstartup_iar.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_cstartup_iar.s
new file mode 100644 (file)
index 0000000..9a046b1
--- /dev/null
@@ -0,0 +1,313 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/*\r
+     IAR startup file for SAMA5D4X microcontrollers.\r
+ */\r
+\r
+        MODULE  ?cstartup\r
+\r
+        ;; Forward declaration of sections.\r
+        SECTION IRQ_STACK:DATA:NOROOT(2)\r
+        SECTION FIQ_STACK:DATA:NOROOT(2)\r
+        SECTION UND_STACK:DATA:NOROOT(2)\r
+        SECTION ABT_STACK:DATA:NOROOT(2)\r
+        SECTION CSTACK:DATA:NOROOT(3)\r
+\r
+//------------------------------------------------------------------------------\r
+//         Headers\r
+//------------------------------------------------------------------------------\r
+\r
+#define __ASSEMBLY__\r
+\r
+//------------------------------------------------------------------------------\r
+//         Definitions\r
+//------------------------------------------------------------------------------\r
+\r
+#define AIC         0xFC06E000\r
+#define AIC_IVR     0x10\r
+#define AIC_EOICR   0x38\r
+#define L2CC_CR     0x00A00100\r
+\r
+#define REG_SFR_AICREDIR        0xF8028054\r
+#define REG_SFR_UID             0xF8028050   \r
+#define AICREDIR_KEY            0x5F67B102\r
+\r
+\r
+MODE_MSK DEFINE 0x1F            ; Bit mask for mode bits in CPSR\r
+#define ARM_MODE_ABT     0x17\r
+#define ARM_MODE_FIQ     0x11\r
+#define ARM_MODE_IRQ     0x12\r
+#define ARM_MODE_SVC     0x13\r
+#define ARM_MODE_SYS     0x1F\r
+#define ARM_MODE_UND     0x1B\r
+#define I_BIT            0x80\r
+#define F_BIT            0x40\r
+\r
+\r
+\r
+//------------------------------------------------------------------------------\r
+//         Startup routine\r
+//------------------------------------------------------------------------------\r
+\r
+/*\r
+   Exception vectors\r
+ */\r
+        SECTION .vectors:CODE:NOROOT(2)\r
+\r
+        PUBLIC  resetVector\r
+        PUBLIC  IRQ_Handler\r
+        PUBLIC  FIQ_Handler\r
+        EXTERN  Undefined_C_Handler\r
+        EXTERN  SWI_Handler\r
+        EXTERN  Prefetch_C_Handler\r
+        EXTERN  Abort_C_Handler\r
+        ARM\r
+\r
+__iar_init$$done:               ; The interrupt vector is not needed\r
+                                ; until after copy initialization is done\r
+\r
+resetVector:\r
+        ; All default exception handlers (except reset) are\r
+        ; defined as weak symbol definitions.\r
+        ; If a handler is defined by the application it will take precedence.\r
+        LDR     pc, =resetHandler        ; Reset\r
+        LDR     pc, Undefined_Addr       ; Undefined instructions\r
+        LDR     pc, SWI_Addr             ; Software interrupt (SWI/SYS)\r
+        LDR     pc, Prefetch_Addr        ; Prefetch abort\r
+        LDR     pc, Abort_Addr          ; Data abort\r
+        B       .                        ; RESERVED\r
+        LDR     PC,IRQ_Addr              ; 0x18 IRQ\r
+        LDR     PC,FIQ_Addr              ; 0x1c FIQ\r
+\r
+Undefined_Addr: DCD   Undefined_C_Handler\r
+SWI_Addr:       DCD   SWI_Handler\r
+Abort_Addr:     DCD   Abort_C_Handler\r
+Prefetch_Addr:  DCD   Prefetch_C_Handler\r
+IRQ_Addr:       DCD   IRQ_Handler\r
+FIQ_Addr:       DCD   FIQ_Handler\r
+\r
+/*\r
+   Handles incoming interrupt requests by branching to the corresponding\r
+   handler, as defined in the AIC. Supports interrupt nesting.\r
+ */\r
+IRQ_Handler:\r
+        /* Save interrupt context on the stack to allow nesting */\r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        MRS     lr, SPSR\r
+        STMFD   sp!, {r0, lr}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =AIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        /* Check for 8-byte alignment and save lr plus a */\r
+        /* word to indicate the stack adjustment used (0 or 4) */\r
+        AND     r1, sp, #4\r
+        SUB     sp, sp, r1\r
+        STMFD   sp!, {r1, lr}\r
+\r
+        BLX     r0\r
+\r
+        LDMIA   sp!, {r1, lr}\r
+        ADD     sp, sp, r1\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =AIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0, lr}\r
+        MSR     SPSR_cxsf, lr\r
+        LDMIA   sp!, {pc}^\r
+\r
+\r
+/*\r
+   After a reset, execution starts here, the mode is ARM, supervisor\r
+   with interrupts disabled.\r
+   Initializes the chip and branches to the main() function.\r
+ */\r
+        SECTION .cstartup:CODE:NOROOT(2)\r
+\r
+        PUBLIC  resetHandler\r
+        EXTERN  LowLevelInit\r
+        EXTERN  ?main\r
+        REQUIRE resetVector\r
+        EXTERN  CP15_InvalidateBTB\r
+        EXTERN  CP15_InvalidateTranslationTable\r
+        EXTERN  CP15_InvalidateIcache\r
+        EXTERN  CP15_InvalidateDcacheBySetWay\r
+        ARM\r
+\r
+resetHandler: \r
+                \r
+        LDR     r4, =SFE(CSTACK)     ; End of SVC stack\r
+        BIC     r4,r4,#0x7           ; Make sure SP is 8 aligned       \r
+        MOV     sp, r4\r
+                        \r
+\r
+        ;; Set up the normal interrupt stack pointer.\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_IRQ | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(IRQ_STACK)     ; End of IRQ_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+        \r
+        \r
+        ;; Set up the fast interrupt stack pointer.\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_FIQ | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(FIQ_STACK)     ; End of FIQ_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+        \r
+        MSR     CPSR_c, #(ARM_MODE_ABT | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(ABT_STACK)     ; End of ABT_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_UND | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(UND_STACK)     ; End of UND_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+        \r
+        MSR     CPSR_c, #(ARM_MODE_SYS | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(CSTACK-0x3000) ; 0x1000 bytes of SYS stack\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+        \r
+        \r
+        MSR     CPSR_c, #(ARM_MODE_SVC | F_BIT | I_BIT)\r
+        \r
+        CPSIE   A\r
+        \r
+        /* Enable VFP */\r
+        /* - Enable access to CP10 and CP11 in CP15.CACR */\r
+        MRC     p15, 0, r0, c1, c0, 2\r
+        ORR     r0, r0, #0xf00000\r
+        MCR     p15, 0, r0, c1, c0, 2\r
+        /* - Enable access to CP10 and CP11 in CP15.NSACR */\r
+        /* - Set FPEXC.EN (B30) */\r
+#ifdef __ARMVFP__        \r
+        MOV     r3, #0x40000000 \r
+        VMSR    FPEXC, r3\r
+#endif        \r
+\r
+         // Redirect FIQ to IRQ\r
+        LDR  r0,  =AICREDIR_KEY \r
+        LDR  r1, = REG_SFR_UID\r
+        LDR  r2, = REG_SFR_AICREDIR\r
+        LDR  r3,[r1]\r
+        EORS r0, r0, r3\r
+        ORRS r0, r0, #0x01\r
+        STR  r0, [r2]\r
+        \r
+         /* Perform low-level initialization of the chip using LowLevelInit() */\r
+        LDR     r0, =LowLevelInit\r
+        BLX     r0\r
+        \r
+        \r
+        MRC     p15, 0, r0, c1, c0, 0       ; Read CP15 Control Regsiter into r0\r
+        TST     r0, #0x1                    ; Is the MMU enabled?\r
+        BICNE   r0, r0, #0x1                ; Clear bit 0\r
+        TST     r0, #0x4                    ; Is the Dcache enabled?\r
+        BICNE   r0, r0, #0x4                ; Clear bit 2\r
+        MCRNE   p15, 0, r0, c1, c0, 0       ; Write value back\r
+        \r
+        // Disbale L2 cache\r
+        LDR r1,=L2CC_CR\r
+        MOV r2,#0\r
+        STR r2, [r1]\r
+        \r
+        DMB        \r
+        BL      CP15_InvalidateTranslationTable\r
+        BL      CP15_InvalidateBTB\r
+        BL      CP15_InvalidateIcache\r
+        BL      CP15_InvalidateDcacheBySetWay\r
+        DMB\r
+        ISB\r
+        \r
+                \r
+        /* Branch to main() */\r
+        LDR     r0, =?main\r
+        BLX     r0\r
+\r
+        /* Loop indefinitely when program is finished */\r
+loop4:\r
+        B       loop4\r
+\r
+\r
+\r
+;------------------------------------------------------------------------------\r
+;- Function             : FIQ_Handler\r
+;- Treatments           : FIQ Controller Interrupt Handler.\r
+;- Called Functions     : AIC_IVR[interrupt]\r
+;------------------------------------------------------------------------------\r
+SAIC   DEFINE   0xFC068400\r
+AIC_FVR           DEFINE   0x14\r
+\r
+        SECTION .text:CODE:NOROOT(2)\r
+        ARM\r
+FIQ_Handler:\r
+  /* Save interrupt context on the stack to allow nesting */\r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        /* MRS     lr, SPSR */\r
+        STMFD   sp!, {r0}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =SAIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        MOV     r14, pc\r
+        BX      r0\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        MSR     CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =SAIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0}\r
+        /* MSR     SPSR_cxsf, lr */\r
+        LDMIA   sp!, {pc}^\r
+        \r
+        \r
+ END\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_lowlevel.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_lowlevel.c
new file mode 100644 (file)
index 0000000..bcb1f71
--- /dev/null
@@ -0,0 +1,529 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Provides the low-level initialization function that called on chip startup.\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definiation\r
+ *----------------------------------------------------------------------------*/\r
+#define CPSR_MASK_IRQ 0x00000080\r
+#define CPSR_MASK_FIQ 0x00000040\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+\r
+/** Array of Max peripheral Frequence support for SAMA5 chip*/\r
+const PeripheralClockMaxFreq periClkMaxFreq[] = {\r
+    /* peripheral ID, Max frequency */\r
+       {ID_DBGU    , (BOARD_MCK >>1) },\r
+       {ID_PIT     , (BOARD_MCK >>1) },\r
+       {ID_WDT     , (BOARD_MCK >>1) },\r
+       {ID_HSMC    , (BOARD_MCK >>1) },\r
+       {ID_PIOA    , (BOARD_MCK >>1) },\r
+       {ID_PIOB    , (BOARD_MCK >>1) },\r
+       {ID_PIOC    , (BOARD_MCK >>1) },\r
+       {ID_PIOD    , (BOARD_MCK >>1) },\r
+       {ID_PIOE    , (BOARD_MCK >>1) },\r
+       {ID_USART0  , (BOARD_MCK >>1) },\r
+       {ID_USART1  , (BOARD_MCK >>1) },\r
+       {ID_USART2  , (BOARD_MCK >>1) },\r
+       {ID_USART3  , (BOARD_MCK >>1) },\r
+       {ID_UART0   , (BOARD_MCK >>1) },\r
+       {ID_UART1   , (BOARD_MCK >>1) },\r
+       {ID_TWI0    , (BOARD_MCK >>1) },\r
+       {ID_TWI1    , (BOARD_MCK >>1) },\r
+       {ID_TWI2    , (BOARD_MCK >>1) },\r
+       {ID_HSMCI0  , (BOARD_MCK >>1) },\r
+       {ID_HSMCI1  , (BOARD_MCK >>1) },\r
+       {ID_SPI0    , (BOARD_MCK >>1) },\r
+       {ID_SPI1    , (BOARD_MCK >>1) },\r
+       {ID_TC0     , (BOARD_MCK >>1) },\r
+       {ID_TC1     , (BOARD_MCK >>1) },\r
+       {ID_PWM     , (BOARD_MCK >>1) },\r
+       {ID_ADC     , (BOARD_MCK >>1) },\r
+       {ID_XDMAC0  , BOARD_MCK },\r
+       {ID_XDMAC1  , BOARD_MCK },\r
+       {ID_UHPHS   , (BOARD_MCK >>1) },\r
+       {ID_UDPHS   , (BOARD_MCK >>1) },\r
+       {ID_GMAC0   , (BOARD_MCK >>1) },\r
+       {ID_GMAC1   , (BOARD_MCK >>1) },\r
+       {ID_LCDC    , BOARD_MCK },\r
+       {ID_ISI     , BOARD_MCK },\r
+       {ID_SSC0    , (BOARD_MCK >>1) },\r
+       {ID_SSC1    , (BOARD_MCK >>1) },\r
+       {ID_SHA     , (BOARD_MCK >>1) },\r
+       {ID_AES     , (BOARD_MCK >>1) },\r
+       {ID_TDES    , (BOARD_MCK >>1) },\r
+       {ID_TDES    , (BOARD_MCK >>1) },\r
+       {ID_TRNG    , (BOARD_MCK >>1) },\r
+       {ID_ICM     , (BOARD_MCK >>1) },\r
+       {ID_ARM     , (BOARD_MCK >>1) },\r
+       {ID_IRQ     , (BOARD_MCK >>1) },\r
+       {ID_SFC     , (BOARD_MCK >>1) },\r
+       {ID_MPDDRC  , BOARD_MCK }\r
+};\r
+\r
+static const char* abort_status[][2]=\r
+{\r
+  // IFSR status        ,       DFSR status\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//0\r
+  {"Unknown(reserved status)",                          "Alignment Fault"                               },//1\r
+  {"Debug Event",                                       "Debug Event"                                   },//2\r
+  {"Access flag - section",                             "Access flag - section"                         },//3\r
+  {"Unknown(reserved status)",                          "Instruction cache maintenance"                 },//4\r
+  {"Translation fault - section",                       "Translation fault - section"                   },//5\r
+  {"Access flag - Page",                                "Access flag - Page"                            },//6\r
+  {"Translation fault -Page",                           "Translation fault -Page"                       },//7\r
+  {"Synchronous external abort",                        "Synchronous external abort, nontranslation"    },//8\r
+  {"Domain fault - Section",                            "Domain fault - Section"                        },//9\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//10\r
+  {"Domain fault - Page",                               "Domain fault - Page"                           },//11\r
+  {"Synchronous external abort - L1 Translation",       "Synchronous external abort - L1 Translation"   },//12\r
+  {"Permission fault - Section",                        "Permission fault - Section"                    },//13\r
+  {"Synchronous external abort - L2 Translation",       "Synchronous external abort - L2 Translation"   },//14\r
+  {"Permission fault - Page",                           "Permission fault - Page"                       },//15\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//16\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//17\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//18\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//19\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//20\r
+  {"Unknown(reserved status)",                          "Unknown(reserved status)"                      },//21\r
+  {"Unknown(reserved status)",                          "Asynchronous external abort"}\r
+\r
+};\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Internal functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+void v_ARM_ClrCPSR_bits(unsigned int mask);\r
+void NonSecureITInit (void);\r
+void SecureITInit (void);\r
+void Prefetch_C_Handler( void);\r
+void Abort_C_Handler( void);\r
+void Undefined_C_Handler(void);\r
+\r
+/**\r
+ * \brief Default spurious interrupt handler. Infinite loop.\r
+ */\r
+void defaultSpuriousHandler( void )\r
+{\r
+    while (1);\r
+}\r
+\r
+void Abort_C_Handler( void)\r
+{\r
+    uint32_t v1,v2, dfsr;\r
+    v1= 0;\r
+    v2= 0;\r
+    asm("mrc   p15, 0, %0, c5, c0, 0" : : "r"(v1));\r
+    asm("mrc   p15, 0, %0, c6, c0, 0" : : "r"(v2));\r
+\r
+    dfsr = ((v1 >> 4) & 0x0F);\r
+    printf("\n\r######################################################################\n\r");\r
+    printf("Data Abort occured in %x domain\n\r", (unsigned int)dfsr);\r
+    dfsr = (((v1 & 0x400) >> 6) | (v1 & 0x0F));\r
+    printf("Data abort fault reason is: %s\n\r", (char*)abort_status[dfsr][1]);\r
+    printf("Data fault occured at Address = 0x%08x\n\n\r",(unsigned int)v2);\r
+\r
+\r
+    printf("-[Info]-Data fault status register value = 0x%x\n\r",(unsigned int)v1);\r
+\r
+    while(1);\r
+\r
+}\r
+\r
+\r
+void Prefetch_C_Handler( void)\r
+{\r
+    uint32_t v1,v2, ifsr;\r
+    v1= 0;\r
+    v2= 0;\r
+\r
+    asm("mrc   p15, 0, %0, c5, c0, 1" : : "r"(v1));\r
+    asm("mrc   p15, 0, %0, c6, c0, 2" : : "r"(v2));\r
+\r
+    ifsr = (((v1 & 0x400) >> 6) | (v1 & 0x0F));\r
+    printf("\n\r######################################################################\n\r");\r
+    printf("Instruction prefetch abort reason is: %s\n\r", (char*)abort_status[ifsr][0]);\r
+    printf("Instruction prefetch Fault occured at Address = 0x%08x\n\n\r",(unsigned int)v2);\r
+\r
+    printf("-[INFO]- Prefetch Fault status register value by = 0x%x\n\r",(unsigned int)v1);\r
+\r
+    while(1);\r
+\r
+}\r
+\r
+void Undefined_C_Handler( void)\r
+{\r
+  printf("Undefined abort \n\r");\r
+  while(1);\r
+}\r
+\r
+void v_ARM_ClrCPSR_bits(unsigned int mask)\r
+{\r
+  asm("MRS R1, CPSR");   // Get current CPSR\r
+  asm("MVN R0, R0");     // invert\r
+  asm("AND R0, R0, R1"); // Calculate new CPSR value\r
+  asm("MSR CPSR_c,R0");  // Set new value\r
+  asm("bx lr");\r
+}\r
+\r
+void Dummy_Handler( void );\r
+void Spurious_Handler( void );\r
+#pragma weak SAIC0_Handler=Dummy_Handler\r
+#pragma weak SYS_IrqHandler=Dummy_Handler\r
+#pragma weak ARM_IrqHandler=Dummy_Handler\r
+#pragma weak PIT_IrqHandler=Dummy_Handler\r
+#pragma weak WDT_IrqHandler=Dummy_Handler\r
+#pragma weak PIOD_IrqHandler=Dummy_Handler\r
+#pragma weak USART0_IrqHandler=Dummy_Handler\r
+#pragma weak USART1_IrqHandler=Dummy_Handler\r
+#pragma weak XDMAC0_IrqHandler=Dummy_Handler\r
+#pragma weak ICM_IrqHandler=Dummy_Handler\r
+#pragma weak PKCC_IrqHandler=Dummy_Handler\r
+#pragma weak SCI_IrqHandler=Dummy_Handler\r
+#pragma weak AES_IrqHandler=Dummy_Handler\r
+#pragma weak AESB_IrqHandler=Dummy_Handler\r
+#pragma weak TDES_IrqHandler=Dummy_Handler\r
+#pragma weak SHA_IrqHandler=Dummy_Handler\r
+#pragma weak MPDDRC_IrqHandler=Dummy_Handler\r
+#pragma weak H32MX_IrqHandler=Dummy_Handler\r
+#pragma weak H64MX_IrqHandler=Dummy_Handler\r
+#pragma weak VDEC_IrqHandler=Dummy_Handler\r
+#pragma weak SECUMOD_IrqHandler=Dummy_Handler\r
+#pragma weak MSADCC_IrqHandler=Dummy_Handler\r
+#pragma weak HSMC_IrqHandler=Dummy_Handler\r
+#pragma weak PIOA_IrqHandler=Dummy_Handler\r
+#pragma weak PIOB_IrqHandler=Dummy_Handler\r
+#pragma weak PIOC_IrqHandler=Dummy_Handler\r
+#pragma weak PIOE_IrqHandler=Dummy_Handler\r
+#pragma weak UART0_IrqHandler=Dummy_Handler\r
+#pragma weak UART1_IrqHandler=Dummy_Handler\r
+#pragma weak USART2_IrqHandler=Dummy_Handler\r
+#pragma weak USART3_IrqHandler=Dummy_Handler\r
+#pragma weak USART4_IrqHandler=Dummy_Handler\r
+#pragma weak TWI0_IrqHandler=Dummy_Handler\r
+#pragma weak TWI1_IrqHandler=Dummy_Handler\r
+#pragma weak TWI2_IrqHandler=Dummy_Handler\r
+#pragma weak HSMCI0_IrqHandler=Dummy_Handler\r
+#pragma weak HSMCI1_IrqHandler=Dummy_Handler\r
+#pragma weak SPI0_IrqHandler=Dummy_Handler\r
+#pragma weak SPI1_IrqHandler=Dummy_Handler\r
+#pragma weak SPI2_IrqHandler=Dummy_Handler\r
+#pragma weak TC0_IrqHandler=Dummy_Handler\r
+#pragma weak TC1_IrqHandler=Dummy_Handler\r
+#pragma weak TC2_IrqHandler=Dummy_Handler\r
+#pragma weak PWM_IrqHandler=Dummy_Handler\r
+#pragma weak ADC_IrqHandler=Dummy_Handler\r
+#pragma weak DBGU_IrqHandler=Dummy_Handler\r
+#pragma weak UHPHS_IrqHandler=Dummy_Handler\r
+#pragma weak UDPHS_IrqHandler=Dummy_Handler\r
+#pragma weak SSC0_IrqHandler=Dummy_Handler\r
+#pragma weak SSC1_IrqHandler=Dummy_Handler\r
+#pragma weak XDMAC1_IrqHandler=Dummy_Handler\r
+#pragma weak LCDC_IrqHandler=Dummy_Handler\r
+#pragma weak ISI_IrqHandler=Dummy_Handler\r
+#pragma weak TRNG_IrqHandler=Dummy_Handler\r
+#pragma weak GMAC0_IrqHandler=Dummy_Handler\r
+#pragma weak GMAC1_IrqHandler=Dummy_Handler\r
+#pragma weak AIC0_IrqHandler=Dummy_Handler\r
+#pragma weak SFC_IrqHandler=Dummy_Handler\r
+#pragma weak SECURAM_IrqHandler=Dummy_Handler\r
+#pragma weak CTB_IrqHandler=Dummy_Handler\r
+#pragma weak SMD_IrqHandler=Dummy_Handler\r
+#pragma weak TWI3_IrqHandler=Dummy_Handler\r
+#pragma weak CATB_IrqHandler=Dummy_Handler\r
+#pragma weak SFR_IrqHandler=Dummy_Handler\r
+#pragma weak AIC1_IrqHandler=Dummy_Handler\r
+#pragma weak SAIC1_IrqHandler=Dummy_Handler\r
+#pragma weak L2CC_IrqHandler=Dummy_Handler\r
+#pragma weak Spurious_handler=Spurious_Handler\r
+\r
+\r
+/**\r
+ * \brief Dummy default handler.\r
+ */\r
+volatile uint32_t ulx = 0;\r
+void Dummy_Handler( void )\r
+{\r
+    while ( ulx == 0 )\r
+       {\r
+               __asm volatile( "NOP" );\r
+       }\r
+       ulx = 0;\r
+}\r
+\r
+void Spurious_Handler( void )\r
+{\r
+    while ( ulx == 0 )\r
+       {\r
+               __asm volatile( "NOP" );\r
+       }\r
+       ulx = 0;\r
+}\r
+\r
+/**\r
+ * \brief Non-secure Interupt Init.\r
+ */\r
+void NonSecureITInit (void)\r
+{\r
+    uint32_t i;\r
+    /* Assign handler addesses */\r
+    AIC->AIC_SSR = 0;  AIC->AIC_SVR = (unsigned int) SAIC0_Handler;\r
+    AIC->AIC_SSR = 1;  AIC->AIC_SVR = (unsigned int) SYS_IrqHandler;\r
+    AIC->AIC_SSR = 2;  AIC->AIC_SVR = (unsigned int) ARM_IrqHandler;\r
+    AIC->AIC_SSR = 3;  AIC->AIC_SVR = (unsigned int) PIT_IrqHandler;\r
+    AIC->AIC_SSR = 4;  AIC->AIC_SVR = (unsigned int) WDT_IrqHandler;\r
+    AIC->AIC_SSR = 5;  AIC->AIC_SVR = (unsigned int) PIOD_IrqHandler;\r
+    AIC->AIC_SSR = 6;  AIC->AIC_SVR = (unsigned int) USART0_IrqHandler;\r
+    AIC->AIC_SSR = 7;  AIC->AIC_SVR = (unsigned int) USART1_IrqHandler;\r
+    AIC->AIC_SSR = 8;  AIC->AIC_SVR = (unsigned int) XDMAC0_IrqHandler;\r
+    AIC->AIC_SSR = 9;  AIC->AIC_SVR = (unsigned int) ICM_IrqHandler;\r
+    AIC->AIC_SSR = 10; AIC->AIC_SVR = (unsigned int) PKCC_IrqHandler;\r
+    AIC->AIC_SSR = 11; AIC->AIC_SVR = (unsigned int) SCI_IrqHandler;\r
+    AIC->AIC_SSR = 12; AIC->AIC_SVR = (unsigned int) AES_IrqHandler;\r
+    AIC->AIC_SSR = 13; AIC->AIC_SVR = (unsigned int) AESB_IrqHandler;\r
+    AIC->AIC_SSR = 14; AIC->AIC_SVR = (unsigned int) TDES_IrqHandler;\r
+    AIC->AIC_SSR = 15; AIC->AIC_SVR = (unsigned int) SHA_IrqHandler;\r
+    AIC->AIC_SSR = 16; AIC->AIC_SVR = (unsigned int) MPDDRC_IrqHandler;\r
+    AIC->AIC_SSR = 17; AIC->AIC_SVR = (unsigned int) H32MX_IrqHandler;\r
+    AIC->AIC_SSR = 18; AIC->AIC_SVR = (unsigned int) H64MX_IrqHandler;\r
+    AIC->AIC_SSR = 19; AIC->AIC_SVR = (unsigned int) VDEC_IrqHandler;\r
+    AIC->AIC_SSR = 20; AIC->AIC_SVR = (unsigned int) SECUMOD_IrqHandler;\r
+    AIC->AIC_SSR = 21; AIC->AIC_SVR = (unsigned int) MSADCC_IrqHandler;\r
+    AIC->AIC_SSR = 22; AIC->AIC_SVR = (unsigned int) HSMC_IrqHandler;\r
+    AIC->AIC_SSR = 23; AIC->AIC_SVR = (unsigned int) PIOA_IrqHandler;\r
+    AIC->AIC_SSR = 24; AIC->AIC_SVR = (unsigned int) PIOB_IrqHandler;\r
+    AIC->AIC_SSR = 25; AIC->AIC_SVR = (unsigned int) PIOC_IrqHandler;\r
+    AIC->AIC_SSR = 26; AIC->AIC_SVR = (unsigned int) PIOE_IrqHandler;\r
+    AIC->AIC_SSR = 27; AIC->AIC_SVR = (unsigned int) UART0_IrqHandler;\r
+    AIC->AIC_SSR = 28; AIC->AIC_SVR = (unsigned int) UART1_IrqHandler;\r
+    AIC->AIC_SSR = 29; AIC->AIC_SVR = (unsigned int) USART2_IrqHandler;\r
+    AIC->AIC_SSR = 30; AIC->AIC_SVR = (unsigned int) USART3_IrqHandler;\r
+    AIC->AIC_SSR = 31; AIC->AIC_SVR = (unsigned int) USART4_IrqHandler;\r
+    AIC->AIC_SSR = 32; AIC->AIC_SVR = (unsigned int) TWI0_IrqHandler;\r
+    AIC->AIC_SSR = 33; AIC->AIC_SVR = (unsigned int) TWI1_IrqHandler;\r
+    AIC->AIC_SSR = 34; AIC->AIC_SVR = (unsigned int) TWI2_IrqHandler;\r
+    AIC->AIC_SSR = 35; AIC->AIC_SVR = (unsigned int) HSMCI0_IrqHandler;\r
+    AIC->AIC_SSR = 36; AIC->AIC_SVR = (unsigned int) HSMCI1_IrqHandler;\r
+    AIC->AIC_SSR = 37; AIC->AIC_SVR = (unsigned int) SPI0_IrqHandler;\r
+    AIC->AIC_SSR = 38; AIC->AIC_SVR = (unsigned int) SPI1_IrqHandler;\r
+    AIC->AIC_SSR = 39; AIC->AIC_SVR = (unsigned int) SPI2_IrqHandler;\r
+    AIC->AIC_SSR = 40; AIC->AIC_SVR = (unsigned int) TC0_IrqHandler;\r
+    AIC->AIC_SSR = 41; AIC->AIC_SVR = (unsigned int) TC1_IrqHandler;\r
+    AIC->AIC_SSR = 42; AIC->AIC_SVR = (unsigned int) TC2_IrqHandler;\r
+    AIC->AIC_SSR = 43; AIC->AIC_SVR = (unsigned int) PWM_IrqHandler;\r
+    AIC->AIC_SSR = 44; AIC->AIC_SVR = (unsigned int) ADC_IrqHandler;\r
+    AIC->AIC_SSR = 45; AIC->AIC_SVR = (unsigned int) DBGU_IrqHandler;\r
+    AIC->AIC_SSR = 46; AIC->AIC_SVR = (unsigned int) UHPHS_IrqHandler;\r
+    AIC->AIC_SSR = 47; AIC->AIC_SVR = (unsigned int) UDPHS_IrqHandler;\r
+    AIC->AIC_SSR = 48; AIC->AIC_SVR = (unsigned int) SSC0_IrqHandler;\r
+    AIC->AIC_SSR = 49; AIC->AIC_SVR = (unsigned int) SSC1_IrqHandler;\r
+    AIC->AIC_SSR = 50; AIC->AIC_SVR = (unsigned int) XDMAC1_IrqHandler;\r
+    AIC->AIC_SSR = 51; AIC->AIC_SVR = (unsigned int) LCDC_IrqHandler;\r
+    AIC->AIC_SSR = 52; AIC->AIC_SVR = (unsigned int) ISI_IrqHandler;\r
+    AIC->AIC_SSR = 53; AIC->AIC_SVR = (unsigned int) TRNG_IrqHandler;\r
+    AIC->AIC_SSR = 54; AIC->AIC_SVR = (unsigned int) GMAC0_IrqHandler;\r
+    AIC->AIC_SSR = 55; AIC->AIC_SVR = (unsigned int) GMAC1_IrqHandler;\r
+    AIC->AIC_SSR = 56; AIC->AIC_SVR = (unsigned int) AIC0_IrqHandler;\r
+    AIC->AIC_SSR = 57; AIC->AIC_SVR = (unsigned int) SFC_IrqHandler;\r
+    AIC->AIC_SSR = 59; AIC->AIC_SVR = (unsigned int) SECURAM_IrqHandler;\r
+    AIC->AIC_SSR = 60; AIC->AIC_SVR = (unsigned int) CTB_IrqHandler;\r
+    AIC->AIC_SSR = 61; AIC->AIC_SVR = (unsigned int) SMD_IrqHandler;\r
+    AIC->AIC_SSR = 62; AIC->AIC_SVR = (unsigned int) TWI3_IrqHandler;\r
+    AIC->AIC_SSR = 63; AIC->AIC_SVR = (unsigned int) CATB_IrqHandler;\r
+    AIC->AIC_SSR = 64; AIC->AIC_SVR = (unsigned int) SFR_IrqHandler;\r
+    AIC->AIC_SSR = 65; AIC->AIC_SVR = (unsigned int) AIC1_IrqHandler;\r
+    AIC->AIC_SSR = 66; AIC->AIC_SVR = (unsigned int) SAIC1_IrqHandler;\r
+    AIC->AIC_SSR = 67; AIC->AIC_SVR = (unsigned int) L2CC_IrqHandler;\r
+\r
+    AIC->AIC_SPU = (unsigned int) Spurious_handler;\r
+    /* Disable all interrupts */\r
+    for (i = 1; i < ID_PERIPH_COUNT; i++){\r
+        AIC->AIC_SSR=i;\r
+        AIC->AIC_IDCR=AIC_IDCR_INTD;\r
+    }\r
+    /* Clear All pending interrupts flags */\r
+    for (i = 0; i < ID_PERIPH_COUNT; i++){\r
+        AIC->AIC_SSR  = i;\r
+        AIC->AIC_ICCR = AIC_ICCR_INTCLR;\r
+    }\r
+\r
+    /* Perform 8 IT acknoledge (write any value in EOICR) (VPy) */\r
+    for (i = 0; i < 8; i++){\r
+        AIC->AIC_EOICR = 0;\r
+    }\r
+    /* Enable IRQ and FIQ at core level */\r
+    v_ARM_ClrCPSR_bits(CPSR_MASK_IRQ|CPSR_MASK_FIQ);\r
+}\r
+\r
+/**\r
+ * \brief Secure Interupt Init.\r
+ */\r
+void SecureITInit (void)\r
+{\r
+    uint32_t i;\r
+\r
+    /* Assign handler addesses */\r
+    SAIC->AIC_SSR = 0;  SAIC->AIC_SVR = (unsigned int) SAIC0_Handler;\r
+    SAIC->AIC_SSR = 1;  SAIC->AIC_SVR = (unsigned int) SYS_IrqHandler;\r
+    SAIC->AIC_SSR = 2;  SAIC->AIC_SVR = (unsigned int) ARM_IrqHandler;\r
+    SAIC->AIC_SSR = 3;  SAIC->AIC_SVR = (unsigned int) PIT_IrqHandler;\r
+    SAIC->AIC_SSR = 4;  SAIC->AIC_SVR = (unsigned int) WDT_IrqHandler;\r
+    SAIC->AIC_SSR = 5;  SAIC->AIC_SVR = (unsigned int) PIOD_IrqHandler;\r
+    SAIC->AIC_SSR = 6;  SAIC->AIC_SVR = (unsigned int) USART0_IrqHandler;\r
+    SAIC->AIC_SSR = 7;  SAIC->AIC_SVR = (unsigned int) USART1_IrqHandler;\r
+    SAIC->AIC_SSR = 8;  SAIC->AIC_SVR = (unsigned int) XDMAC0_IrqHandler;\r
+    SAIC->AIC_SSR = 9;  SAIC->AIC_SVR = (unsigned int) ICM_IrqHandler;\r
+    SAIC->AIC_SSR = 10; SAIC->AIC_SVR = (unsigned int) PKCC_IrqHandler;\r
+    SAIC->AIC_SSR = 11; SAIC->AIC_SVR = (unsigned int) SCI_IrqHandler;\r
+    SAIC->AIC_SSR = 12; SAIC->AIC_SVR = (unsigned int) AES_IrqHandler;\r
+    SAIC->AIC_SSR = 13; SAIC->AIC_SVR = (unsigned int) AESB_IrqHandler;\r
+    SAIC->AIC_SSR = 14; SAIC->AIC_SVR = (unsigned int) TDES_IrqHandler;\r
+    SAIC->AIC_SSR = 15; SAIC->AIC_SVR = (unsigned int) SHA_IrqHandler;\r
+    SAIC->AIC_SSR = 16; SAIC->AIC_SVR = (unsigned int) MPDDRC_IrqHandler;\r
+    SAIC->AIC_SSR = 17; SAIC->AIC_SVR = (unsigned int) H32MX_IrqHandler;\r
+    SAIC->AIC_SSR = 18; SAIC->AIC_SVR = (unsigned int) H64MX_IrqHandler;\r
+    SAIC->AIC_SSR = 19; SAIC->AIC_SVR = (unsigned int) VDEC_IrqHandler;\r
+    SAIC->AIC_SSR = 20; SAIC->AIC_SVR = (unsigned int) SECUMOD_IrqHandler;\r
+    SAIC->AIC_SSR = 21; SAIC->AIC_SVR = (unsigned int) MSADCC_IrqHandler;\r
+    SAIC->AIC_SSR = 22; SAIC->AIC_SVR = (unsigned int) HSMC_IrqHandler;\r
+    SAIC->AIC_SSR = 23; SAIC->AIC_SVR = (unsigned int) PIOA_IrqHandler;\r
+    SAIC->AIC_SSR = 24; SAIC->AIC_SVR = (unsigned int) PIOB_IrqHandler;\r
+    SAIC->AIC_SSR = 25; SAIC->AIC_SVR = (unsigned int) PIOC_IrqHandler;\r
+    SAIC->AIC_SSR = 26; SAIC->AIC_SVR = (unsigned int) PIOE_IrqHandler;\r
+    SAIC->AIC_SSR = 27; SAIC->AIC_SVR = (unsigned int) UART0_IrqHandler;\r
+    SAIC->AIC_SSR = 28; SAIC->AIC_SVR = (unsigned int) UART1_IrqHandler;\r
+    SAIC->AIC_SSR = 29; SAIC->AIC_SVR = (unsigned int) USART2_IrqHandler;\r
+    SAIC->AIC_SSR = 30; SAIC->AIC_SVR = (unsigned int) USART3_IrqHandler;\r
+    SAIC->AIC_SSR = 31; SAIC->AIC_SVR = (unsigned int) USART4_IrqHandler;\r
+    SAIC->AIC_SSR = 32; SAIC->AIC_SVR = (unsigned int) TWI0_IrqHandler;\r
+    SAIC->AIC_SSR = 33; SAIC->AIC_SVR = (unsigned int) TWI1_IrqHandler;\r
+    SAIC->AIC_SSR = 34; SAIC->AIC_SVR = (unsigned int) TWI2_IrqHandler;\r
+    SAIC->AIC_SSR = 35; SAIC->AIC_SVR = (unsigned int) HSMCI0_IrqHandler;\r
+    SAIC->AIC_SSR = 36; SAIC->AIC_SVR = (unsigned int) HSMCI1_IrqHandler;\r
+    SAIC->AIC_SSR = 37; SAIC->AIC_SVR = (unsigned int) SPI0_IrqHandler;\r
+    SAIC->AIC_SSR = 38; SAIC->AIC_SVR = (unsigned int) SPI1_IrqHandler;\r
+    SAIC->AIC_SSR = 39; SAIC->AIC_SVR = (unsigned int) SPI2_IrqHandler;\r
+    SAIC->AIC_SSR = 40; SAIC->AIC_SVR = (unsigned int) TC0_IrqHandler;\r
+    SAIC->AIC_SSR = 41; SAIC->AIC_SVR = (unsigned int) TC1_IrqHandler;\r
+    SAIC->AIC_SSR = 42; SAIC->AIC_SVR = (unsigned int) TC2_IrqHandler;\r
+    SAIC->AIC_SSR = 43; SAIC->AIC_SVR = (unsigned int) PWM_IrqHandler;\r
+    SAIC->AIC_SSR = 44; SAIC->AIC_SVR = (unsigned int) ADC_IrqHandler;\r
+    SAIC->AIC_SSR = 45; SAIC->AIC_SVR = (unsigned int) DBGU_IrqHandler;\r
+    SAIC->AIC_SSR = 46; SAIC->AIC_SVR = (unsigned int) UHPHS_IrqHandler;\r
+    SAIC->AIC_SSR = 47; SAIC->AIC_SVR = (unsigned int) UDPHS_IrqHandler;\r
+    SAIC->AIC_SSR = 48; SAIC->AIC_SVR = (unsigned int) SSC0_IrqHandler;\r
+    SAIC->AIC_SSR = 49; SAIC->AIC_SVR = (unsigned int) SSC1_IrqHandler;\r
+    SAIC->AIC_SSR = 50; SAIC->AIC_SVR = (unsigned int) XDMAC1_IrqHandler;\r
+    SAIC->AIC_SSR = 51; SAIC->AIC_SVR = (unsigned int) LCDC_IrqHandler;\r
+    SAIC->AIC_SSR = 52; SAIC->AIC_SVR = (unsigned int) ISI_IrqHandler;\r
+    SAIC->AIC_SSR = 53; SAIC->AIC_SVR = (unsigned int) TRNG_IrqHandler;\r
+    SAIC->AIC_SSR = 54; SAIC->AIC_SVR = (unsigned int) GMAC0_IrqHandler;\r
+    SAIC->AIC_SSR = 55; SAIC->AIC_SVR = (unsigned int) GMAC1_IrqHandler;\r
+    SAIC->AIC_SSR = 56; SAIC->AIC_SVR = (unsigned int) AIC0_IrqHandler;\r
+    SAIC->AIC_SSR = 57; SAIC->AIC_SVR = (unsigned int) SFC_IrqHandler;\r
+    SAIC->AIC_SSR = 59; SAIC->AIC_SVR = (unsigned int) SECURAM_IrqHandler;\r
+    SAIC->AIC_SSR = 60; SAIC->AIC_SVR = (unsigned int) CTB_IrqHandler;\r
+    SAIC->AIC_SSR = 61; SAIC->AIC_SVR = (unsigned int) SMD_IrqHandler;\r
+    SAIC->AIC_SSR = 62; SAIC->AIC_SVR = (unsigned int) TWI3_IrqHandler;\r
+    SAIC->AIC_SSR = 63; SAIC->AIC_SVR = (unsigned int) CATB_IrqHandler;\r
+    SAIC->AIC_SSR = 64; SAIC->AIC_SVR = (unsigned int) SFR_IrqHandler;\r
+    SAIC->AIC_SSR = 65; SAIC->AIC_SVR = (unsigned int) AIC1_IrqHandler;\r
+    SAIC->AIC_SSR = 66; SAIC->AIC_SVR = (unsigned int) SAIC1_IrqHandler;\r
+    SAIC->AIC_SSR = 67; SAIC->AIC_SVR = (unsigned int) L2CC_IrqHandler;\r
+\r
+    SAIC->AIC_SPU = (unsigned int) Spurious_handler;\r
+\r
+    /* Disable all interrupts */\r
+    for (i = 1; i < ID_PERIPH_COUNT; i++){\r
+        SAIC->AIC_SSR=i;\r
+        SAIC->AIC_IDCR=AIC_IDCR_INTD;\r
+    }\r
+    /* Clear All pending interrupts flags */\r
+    for (i = 0; i < ID_PERIPH_COUNT; i++){\r
+        SAIC->AIC_SSR  = i;\r
+        SAIC->AIC_ICCR = AIC_ICCR_INTCLR;\r
+    }\r
+\r
+    /* Perform 8 IT acknoledge (write any value in EOICR) (VPy) */\r
+    for (i = 0; i < 8; i++){\r
+        SAIC->AIC_EOICR = 0;\r
+    }\r
+    /* Enable IRQ and FIQ at core level */\r
+    v_ARM_ClrCPSR_bits(CPSR_MASK_IRQ|CPSR_MASK_FIQ);\r
+}\r
+\r
+/**\r
+ * \brief Performs the low-level initialization of the chip.\r
+ * It also enable a low level on the pin NRST triggers a user reset.\r
+ */\r
+extern WEAK void LowLevelInit( void )\r
+{\r
+    volatile unsigned int * pAicFuse = (volatile unsigned int *) REG_SFR_AICREDIR;\r
+\r
+    NonSecureITInit();\r
+    if(!(*pAicFuse))\r
+    {\r
+      SecureITInit();\r
+    }\r
+\r
+    if ((uint32_t)LowLevelInit < DDR_CS_ADDR) /* Code not in external mem */ {\r
+        PMC_SelectExt12M_Osc();\r
+        PMC_SwitchMck2Main();\r
+        PMC_SetPllA( CKGR_PLLAR_ONE |\r
+                     CKGR_PLLAR_PLLACOUNT(0x3F) |\r
+                     CKGR_PLLAR_OUTA(0x0) |\r
+                     CKGR_PLLAR_MULA(87) |\r
+                     1,\r
+                     PMC_PLLICPR_IPLL_PLLA(0x0));\r
+        PMC_SetMckPllaDiv(PMC_MCKR_PLLADIV2);\r
+        PMC_SetMckPrescaler(PMC_MCKR_PRES_CLOCK);\r
+        PMC_SetMckDivider(PMC_MCKR_MDIV_PCK_DIV3);\r
+        PMC_SwitchMck2Pll();\r
+    }\r
+    /* Remap */\r
+   BOARD_RemapRam();\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_memories.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/board_memories.c
new file mode 100644 (file)
index 0000000..0ec6bab
--- /dev/null
@@ -0,0 +1,476 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 20143, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup ddrd_module \r
+ *\r
+ * The DDR/SDR SDRAM Controller (DDRSDRC) is a multiport memory controller. It comprises\r
+ * four slave AHB interfaces. All simultaneous accesses (four independent AHB ports) are interleaved\r
+ * to maximize memory bandwidth and minimize transaction latency due to SDRAM protocol.\r
+ * \r
+ * \section ddr2 Configures DDR2\r
+ *\r
+ * The DDR2-SDRAM devices are initialized by the following sequence:\r
+ * <ul>\r
+ * <li> EBI Chip Select 1 is assigned to the DDR2SDR Controller, Enable DDR2 clock x2 in PMC.</li>\r
+ * <li> Step 1: Program the memory device type</li>\r
+ * <li> Step 2:\r
+ *  -# Program the features of DDR2-SDRAM device into the Configuration Register.\r
+ *  -# Program the features of DDR2-SDRAM device into the Timing Register HDDRSDRC2_T0PR.\r
+ *  -# Program the features of DDR2-SDRAM device into the Timing Register HDDRSDRC2_T1PR.\r
+ *  -# Program the features of DDR2-SDRAM device into the Timing Register HDDRSDRC2_T2PR. </li>\r
+ * <li> Step 3: An NOP command is issued to the DDR2-SDRAM to enable clock. </li>\r
+ * <li> Step 4:  An NOP command is issued to the DDR2-SDRAM </li>\r
+ * <li> Step 5: An all banks precharge command is issued to the DDR2-SDRAM. </li>\r
+ * <li> Step 6: An Extended Mode Register set (EMRS2) cycle is  issued to chose between commercialor high  temperature operations.</li>\r
+ * <li> Step 7: An Extended Mode Register set (EMRS3) cycle is issued to set all registers to 0. </li>\r
+ * <li> Step 8:  An Extended Mode Register set (EMRS1) cycle is issued to enable DLL.</li>\r
+ * <li> Step 9:  Program DLL field into the Configuration Register.</li>\r
+ * <li> Step 10: A Mode Register set (MRS) cycle is issued to reset DLL.</li>\r
+ * <li> Step 11: An all banks precharge command is issued to the DDR2-SDRAM.</li>\r
+ * <li> Step 12: Two auto-refresh (CBR) cycles are provided. Program the auto refresh command (CBR) into the Mode Register.</li>\r
+ * <li> Step 13: Program DLL field into the Configuration Register to low(Disable DLL reset).</li>\r
+ * <li> Step 14: A Mode Register set (MRS) cycle is issued to program the parameters of the DDR2-SDRAM devices.</li>\r
+ * <li> Step 15: Program OCD field into the Configuration Register to high (OCD calibration default). </li>\r
+ * <li> Step 16: An Extended Mode Register set (EMRS1) cycle is issued to OCD default value.</li>\r
+ * <li> Step 17: Program OCD field into the Configuration Register to low (OCD calibration mode exit).</li>\r
+ * <li> Step 18: An Extended Mode Register set (EMRS1) cycle is issued to enable OCD exit.</li>\r
+ * <li> Step 19,20: A mode Normal command is provided. Program the Normal mode into Mode Register.</li>\r
+ * <li> Step 21: Write the refresh rate into the count field in the Refresh Timer register. The DDR2-SDRAM device requires a refresh every 15.625 or 7.81. </li>\r
+ * </ul>\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/** \addtogroup sdram_module\r
+ *\r
+ * \section sdram Configures SDRAM\r
+ *\r
+ * The SDR-SDRAM devices are initialized by the following sequence:\r
+ * <ul>\r
+ * <li> EBI Chip Select 1 is assigned to the DDR2SDR Controller, Enable DDR2 clock x2 in PMC.</li>\r
+ * <li> Step 1. Program the memory device type into the Memory Device Register</li>\r
+ * <li> Step 2. Program the features of the SDR-SDRAM device into the Timing Register and into the Configuration Register.</li>\r
+ * <li> Step 3. For low-power SDRAM, temperature-compensated self refresh (TCSR), drive strength (DS) and partial array self refresh (PASR) must be set in the Low-power Register.</li>\r
+ * <li> Step 4. A NOP command is issued to the SDR-SDRAM. Program NOP command into Mode Register, the application must \r
+ * set Mode to 1 in the Mode Register. Perform a write access to any SDR-SDRAM address to acknowledge this command. \r
+ * Now the clock which drives SDR-SDRAM device is enabled.</li>\r
+ * <li> Step 5. An all banks precharge command is issued to the SDR-SDRAM. Program all banks precharge command into Mode Register, the application must set Mode to 2 in the\r
+ * Mode Register . Perform a write access to any SDRSDRAM address to acknowledge this command.</li>\r
+ * <li> Step 6. Eight auto-refresh (CBR) cycles are provided. Program the auto refresh command (CBR) into Mode Register, the application must set Mode to 4 in the Mode Register.\r
+ * Once in the idle state, two AUTO REFRESH cycles must be performed.</li>\r
+ * <li> Step 7. A Mode Register set (MRS) cycle is issued to program the parameters of the SDRSDRAM\r
+ * devices, in particular CAS latency and burst length. </li>\r
+ * <li> Step 8. For low-power SDR-SDRAM initialization, an Extended Mode Register set (EMRS) cycle is issued to program the SDR-SDRAM parameters (TCSR, PASR, DS). The write\r
+ * address must be chosen so that BA[1] is set to 1 and BA[0] is set to 0 </li>\r
+ * <li> Step 9. The application must go into Normal Mode, setting Mode to 0 in the Mode Register and perform a write access at any location in the SDRAM to acknowledge this command.</li>\r
+ * <li> Step 10. Write the refresh rate into the count field in the DDRSDRC Refresh Timer register </li>\r
+* </ul>\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
\r
\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of memories configuration on board.\r
+ *\r
+ */\r
+\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Changes the mapping of the chip so that the remap area mirrors the\r
+ * internal ROM or the EBI CS0.\r
+ */\r
+void BOARD_RemapRom( void )\r
+{\r
+    AXIMX->AXIMX_REMAP = 0;\r
+}\r
+\r
+/**\r
+ * \brief Changes the mapping of the chip so that the remap area mirrors the\r
+ * internal RAM.\r
+ */\r
+\r
+void BOARD_RemapRam( void )\r
+{\r
+    AXIMX->AXIMX_REMAP = AXIMX_REMAP_REMAP0;\r
+}\r
+\r
+/**\r
+ * \brief Initialize Vdd EBI drive\r
+ * \param 0: 1.8V 1: 3.3V\r
+ */\r
+void BOARD_ConfigureVddMemSel( uint8_t VddMemSel )\r
+{\r
+}\r
\r
+#define DDR2_BA0(r) (1 << (26 + r))\r
+#define DDR2_BA1(r) (1 << (27 + r))\r
+\r
+#define H64MX_DDR_SLAVE_PORT0   3\r
+\r
+static void matrix_configure_slave_ddr(void)\r
+{\r
+     int ddr_port;\r
\r
+     /* Disable write protection */\r
+     MATRIX0->MATRIX_WPMR = MPDDRC_WPMR_WPKEY_PASSWD;\r
\r
+     /* Partition internal SRAM */\r
+     MATRIX0->MATRIX_SSR[11]   = 0;\r
+     MATRIX0->MATRIX_SRTSR[11] = 0x05;\r
+     MATRIX0->MATRIX_SASSR[11] = 0x04;\r
\r
+     ddr_port = 1;\r
+      \r
+     /* Partition external DDR */\r
+     /* DDR port 0 not used from NWd */\r
+     for (ddr_port = 1 ; ddr_port < 8 ; ddr_port++) {\r
+           MATRIX0->MATRIX_SSR[H64MX_DDR_SLAVE_PORT0 + ddr_port]   = 0x00FFFFFF;\r
+           MATRIX0->MATRIX_SRTSR[H64MX_DDR_SLAVE_PORT0 + ddr_port] = 0x0000000F;\r
+           MATRIX0->MATRIX_SASSR[H64MX_DDR_SLAVE_PORT0 + ddr_port] = 0x0000FFFF;\r
+     }\r
+}\r
+\r
+#define MATRIX_KEY_VAL (0x4D4154u)\r
+\r
+static void matrix_configure_slave_nand(void)\r
+{\r
+    /* Disable write protection */\r
+    MATRIX0->MATRIX_WPMR = MATRIX_WPMR_WPKEY(MATRIX_KEY_VAL);\r
+    MATRIX1->MATRIX_WPMR = MATRIX_WPMR_WPKEY(MATRIX_KEY_VAL);\r
+\r
+    /* Partition internal SRAM */\r
+    MATRIX0->MATRIX_SSR[11]   = 0x00010101;\r
+    MATRIX0->MATRIX_SRTSR[11] = 0x05;\r
+    MATRIX0->MATRIX_SASSR[11] = 0x05;\r
+\r
+    MATRIX1->MATRIX_SRTSR[3] = 0xBBBBBBBB;\r
+    MATRIX1->MATRIX_SSR[3]   = 0x00FFFFFF;\r
+    MATRIX1->MATRIX_SASSR[3] = 0xBBBBBBBB;\r
+\r
+    MATRIX1->MATRIX_SRTSR[4] = 0x01;\r
+    MATRIX1->MATRIX_SSR[4]   = 0x00FFFFFF;\r
+    MATRIX1->MATRIX_SASSR[4] = 0x01;\r
+    MATRIX1->MATRIX_MEIER = 0x3FF;\r
+}\r
+\r
+/**\r
+ * \brief Configures DDR2 (MT47H128M16RT 128MB/ MT47H64M16HR)\r
+ MT47H64M16HR : 8 Meg x 16 x 8 banks\r
+ Refresh count: 8K\r
+ Row address: A[12:0] (8K)\r
+ Column address A[9:0] (1K)\r
+ Bank address BA[2:0] a(24,25) (8) \r
+ */\r
+void BOARD_ConfigureDdram( void )\r
+{\r
+    volatile uint8_t *pDdr = (uint8_t *) DDR_CS_ADDR;\r
+    volatile uint32_t i;\r
+\r
+    volatile uint32_t dummy_value;\r
+    \r
+    matrix_configure_slave_ddr();\r
+\r
+    /* Enable DDR2 clock x2 in PMC */\r
+    PMC->PMC_PCER0 = (1 << (ID_MPDDRC));\r
+    PMC->PMC_SCER  |= PMC_SCER_DDRCK;\r
\r
+    /* MPDDRC I/O Calibration Register */\r
+    dummy_value  =  MPDDRC->MPDDRC_IO_CALIBR;\r
+    dummy_value &= ~MPDDRC_IO_CALIBR_RDIV_Msk;\r
+    dummy_value &= ~MPDDRC_IO_CALIBR_TZQIO_Msk;\r
+    dummy_value |= MPDDRC_IO_CALIBR_CALCODEP(7);\r
+    dummy_value |= MPDDRC_IO_CALIBR_CALCODEN(8);\r
+    dummy_value |= MPDDRC_IO_CALIBR_RDIV_RZQ_60_RZQ_50;\r
+    dummy_value |= MPDDRC_IO_CALIBR_TZQIO(5);\r
+    dummy_value |= MPDDRC_IO_CALIBR_EN_CALIB_ENABLE_CALIBRATION;\r
+    MPDDRC->MPDDRC_IO_CALIBR = dummy_value;\r
+\r
+    /* Step 1: Program the memory device type */\r
+    /* DBW = 0 (32 bits bus wide); Memory Device = 6 = DDR2-SDRAM = 0x00000006*/\r
+\r
+    MPDDRC->MPDDRC_MD   =  MPDDRC_MD_MD_DDR2_SDRAM | MPDDRC_MD_DBW_DBW_32_BITS; \r
+\r
+    MPDDRC->MPDDRC_RD_DATA_PATH = MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_SHIFT_ONE_CYCLE;\r
+\r
+    /* Step 2: Program the features of DDR2-SDRAM device into the Timing Register.*/\r
+    MPDDRC->MPDDRC_CR    = MPDDRC_CR_NR_14_ROW_BITS     |\r
+                           MPDDRC_CR_NC_10_COL_BITS     |\r
+                           MPDDRC_CR_CAS_DDR_CAS3       |\r
+                           MPDDRC_CR_DLL_RESET_DISABLED |\r
+                           MPDDRC_CR_DQMS_NOT_SHARED    |\r
+                           MPDDRC_CR_ENRDM_OFF          |\r
+                           MPDDRC_CR_NB_8_BANKS         |\r
+                           MPDDRC_CR_NDQS_DISABLED      |\r
+                           MPDDRC_CR_UNAL_SUPPORTED     |\r
+                           MPDDRC_CR_OCD_DDR2_EXITCALIB; \r
+   \r
+    MPDDRC->MPDDRC_TPR0 = MPDDRC_TPR0_TRAS(8)    //  40 ns\r
+                        | MPDDRC_TPR0_TRCD(3)    //  12.5 ns\r
+                        | MPDDRC_TPR0_TWR(3)     //  15 ns\r
+                        | MPDDRC_TPR0_TRC(10)    //  55 ns\r
+                        | MPDDRC_TPR0_TRP(3)     //  12.5 ns\r
+                        | MPDDRC_TPR0_TRRD(2)    //  8 ns\r
+                        | MPDDRC_TPR0_TWTR(2)    //  2 clock cycle\r
+                        | MPDDRC_TPR0_TMRD(2);   //  2 clock cycles\r
+    \r
+\r
+    MPDDRC->MPDDRC_TPR1 = MPDDRC_TPR1_TRFC(23)\r
+                        | MPDDRC_TPR1_TXSNR(25)\r
+                        | MPDDRC_TPR1_TXSRD(200)\r
+                        | MPDDRC_TPR1_TXP(2);\r
+\r
+    MPDDRC->MPDDRC_TPR2 = MPDDRC_TPR2_TXARD(8)  \r
+                          | MPDDRC_TPR2_TXARDS(2)\r
+                          | MPDDRC_TPR2_TRPA(3)\r
+                          | MPDDRC_TPR2_TRTP(2)\r
+                          | MPDDRC_TPR2_TFAW(7);\r
+\r
+    /* DDRSDRC Low-power Register */\r
+    for (i = 0; i < 13300; i++) {\r
+        asm("nop");\r
+    } \r
+\r
+/* Step 3: An NOP command is issued to the DDR2-SDRAM. Program the NOP command into\r
+    the Mode Register, the application must set MODE to 1 in the Mode Register. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_NOP_CMD;\r
+    /* Perform a write access to any DDR2-SDRAM address to acknowledge this command */\r
+    *pDdr = 0;  /* Now clocks which drive DDR2-SDRAM device are enabled.*/\r
+   \r
+    /* A minimum pause of 200 Â¦ÃŒs is provided to precede any signal toggle. (6 core cycles per iteration, core is at 396MHz: min 13200 loops) */\r
+    for (i = 0; i < 13300; i++) {\r
+        asm("nop");\r
+    } \r
\r
+/* Step 4:  An NOP command is issued to the DDR2-SDRAM */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_NOP_CMD;\r
+    /* Perform a write access to any DDR2-SDRAM address to acknowledge this command.*/\r
+    *pDdr = 0; /* Now CKE is driven high.*/\r
+    /* wait 400 ns min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
\r
+/* Step 5: An all banks precharge command is issued to the DDR2-SDRAM. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_PRCGALL_CMD;\r
+    /* Perform a write access to any DDR2-SDRAM address to acknowledge this command.*/\r
+    *pDdr = 0;\r
+    /* wait 400 ns min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 6: An Extended Mode Register set (EMRS2) cycle is  issued to chose between commercialor high  temperature operations. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_EXT_LMR_CMD;\r
+    *((uint8_t *)(pDdr + DDR2_BA1(0))) = 0; /* The write address must be chosen so that BA[1] is set to 1 and BA[0] is set to 0. */\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 7: An Extended Mode Register set (EMRS3) cycle is issued to set all registers to 0. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_EXT_LMR_CMD;\r
+    *((uint8_t *)(pDdr + DDR2_BA1(0) + DDR2_BA0(0))) = 0;  /* The write address must be chosen so that BA[1] is set to 1 and BA[0] is set to 1.*/\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+ /* Step 8:  An Extended Mode Register set (EMRS1) cycle is issued to enable DLL. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_EXT_LMR_CMD;\r
+    *((uint8_t *)(pDdr + DDR2_BA0(0))) = 0;  /* The write address must be chosen so that BA[1] is set to 0 and BA[0] is set to 1. */\r
+    /* An additional 200 cycles of clock are required for locking DLL */\r
+    for (i = 0; i < 10000; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 9:  Program DLL field into the Configuration Register.*/\r
+    MPDDRC->MPDDRC_CR |= MPDDRC_CR_DLL_RESET_ENABLED;\r
+\r
+/* Step 10: A Mode Register set (MRS) cycle is issued to reset DLL. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_LMR_CMD;\r
+    *(pDdr) = 0;  /* The write address must be chosen so that BA[1:0] bits are set to 0. */\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
\r
+/* Step 11: An all banks precharge command is issued to the DDR2-SDRAM. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_PRCGALL_CMD;\r
+    *(pDdr) = 0;  /* Perform a write access to any DDR2-SDRAM address to acknowledge this command */\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 12: Two auto-refresh (CBR) cycles are provided. Program the auto refresh command (CBR) into the Mode Register. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_RFSH_CMD;\r
+    *(pDdr) = 0;  /* Perform a write access to any DDR2-SDRAM address to acknowledge this command */\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+    /* Configure 2nd CBR. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_RFSH_CMD;\r
+    *(pDdr) = 0;  /* Perform a write access to any DDR2-SDRAM address to acknowledge this command */\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 13: Program DLL field into the Configuration Register to low(Disable DLL reset). */\r
+    MPDDRC->MPDDRC_CR   &= ~MPDDRC_CR_DLL_RESET_ENABLED;  \r
+\r
+/* Step 14: A Mode Register set (MRS) cycle is issued to program the parameters of the DDR2-SDRAM devices. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_LMR_CMD;\r
+    *(pDdr) = 0;  /* The write address must be chosen so that BA[1:0] are set to 0. */\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 15: Program OCD field into the Configuration Register to high (OCD calibration default). */\r
+    MPDDRC->MPDDRC_CR   |= MPDDRC_CR_OCD_DDR2_DEFAULT_CALIB;\r
+\r
+/* Step 16: An Extended Mode Register set (EMRS1) cycle is issued to OCD default value. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_EXT_LMR_CMD;\r
+    *((uint8_t *)(pDdr + DDR2_BA0(0))) = 0;  /* The write address must be chosen so that BA[1] is set to 0 and BA[0] is set to 1.*/\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 17: Program OCD field into the Configuration Register to low (OCD calibration mode exit). */\r
+   MPDDRC->MPDDRC_CR   &= ~(MPDDRC_CR_OCD_DDR2_DEFAULT_CALIB);\r
+\r
+/* Step 18: An Extended Mode Register set (EMRS1) cycle is issued to enable OCD exit.*/\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_EXT_LMR_CMD;\r
+    *((uint8_t *)(pDdr + DDR2_BA0(0))) = 0;  /* The write address must be chosen so that BA[1] is set to 0 and BA[0] is set to 1.*/\r
+    /* wait 2 cycles min */\r
+    for (i = 0; i < 100; i++) {\r
+        asm("nop");\r
+    }\r
+\r
+/* Step 19,20: A mode Normal command is provided. Program the Normal mode into Mode Register. */\r
+    MPDDRC->MPDDRC_MR = MPDDRC_MR_MODE_NORMAL_CMD;\r
+    *(pDdr) = 0;\r
+\r
+/* Step 21: Write the refresh rate into the count field in the Refresh Timer register. The DDR2-SDRAM device requires a refresh every 15.625 Â¦ÃŒs or 7.81 Â¦ÃŒs. \r
+   With a 100MHz frequency, the refresh timer count register must to be set with (15.625 /100 MHz) = 1562 i.e. 0x061A or (7.81 /100MHz) = 781 i.e. 0x030d. */\r
+    /* For MT47H64M16HR, The refresh period is 64ms (commercial), This equates to an average\r
+       refresh rate of 7.8125¦Ìs (commercial), To ensure all rows of all banks are properly \r
+       refreshed, 8192 REFRESH commands must be issued every 64ms (commercial) */\r
+    /* ((64 x 10(^-3))/8192) x133 x (10^6) */\r
+    MPDDRC->MPDDRC_RTR = MPDDRC_RTR_COUNT(0x2b0); /* Set Refresh timer 7.8125 us*/\r
+    /* OK now we are ready to work on the DDRSDR */\r
+    /* wait for end of calibration */\r
+    for (i = 0; i < 500; i++) {\r
+        asm("    nop");\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Configures the EBI for Sdram (LPSDR Micron MT48H8M16) access.\r
+ */\r
+void BOARD_ConfigureSdram( void )\r
+{\r
+}\r
+\r
+/** \brief Configures the EBI for NandFlash access at 133Mhz.\r
+ */\r
+void BOARD_ConfigureNandFlash( uint8_t busWidth )\r
+{\r
+    PMC_EnablePeripheral(ID_HSMC);\r
+    matrix_configure_slave_nand();\r
+\r
+   HSMC->HSMC_CS_NUMBER[3].HSMC_SETUP = 0\r
+                    | HSMC_SETUP_NWE_SETUP(2)\r
+                    | HSMC_SETUP_NCS_WR_SETUP(2)\r
+                    | HSMC_SETUP_NRD_SETUP(2)\r
+                    | HSMC_SETUP_NCS_RD_SETUP(2);\r
+\r
+    HSMC->HSMC_CS_NUMBER[3].HSMC_PULSE = 0\r
+                    | HSMC_PULSE_NWE_PULSE(7)\r
+                    | HSMC_PULSE_NCS_WR_PULSE(7)\r
+                    | HSMC_PULSE_NRD_PULSE(7)\r
+                    | HSMC_PULSE_NCS_RD_PULSE(7);\r
+\r
+    HSMC->HSMC_CS_NUMBER[3].HSMC_CYCLE = 0\r
+                    | HSMC_CYCLE_NWE_CYCLE(13)\r
+                    | HSMC_CYCLE_NRD_CYCLE(13);\r
+\r
+    HSMC->HSMC_CS_NUMBER[3].HSMC_TIMINGS = HSMC_TIMINGS_TCLR(3)\r
+                                       | HSMC_TIMINGS_TADL(27)\r
+                                       | HSMC_TIMINGS_TAR(3)\r
+                                       | HSMC_TIMINGS_TRR(6)\r
+                                       | HSMC_TIMINGS_TWB(5)\r
+                                       | HSMC_TIMINGS_RBNSEL(3)\r
+                                       |(HSMC_TIMINGS_NFSEL);\r
+    HSMC->HSMC_CS_NUMBER[3].HSMC_MODE = HSMC_MODE_READ_MODE |\r
+                                     HSMC_MODE_WRITE_MODE |\r
+                                     ((busWidth == 8 )? HSMC_MODE_DBW_BIT_8 :HSMC_MODE_DBW_BIT_16) |\r
+                                      HSMC_MODE_TDF_CYCLES(1);    \r
+}\r
+\r
+\r
+void BOARD_ConfigureNorFlash( uint8_t busWidth )\r
+{\r
+    uint32_t dbw;\r
+    PMC_EnablePeripheral(ID_HSMC);\r
+    if (busWidth == 8) \r
+    {\r
+        dbw = HSMC_MODE_DBW_BIT_8;\r
+    }\r
+    else {\r
+        dbw = HSMC_MODE_DBW_BIT_16;\r
+    }\r
+    /* Configure SMC, NCS0 is assigned to a norflash */\r
+    HSMC->HSMC_CS_NUMBER[0].HSMC_SETUP = 0x00020001;\r
+    HSMC->HSMC_CS_NUMBER[0].HSMC_PULSE = 0x0B0B0A0A;\r
+    HSMC->HSMC_CS_NUMBER[0].HSMC_CYCLE = 0x000E000B;\r
+    HSMC->HSMC_CS_NUMBER[0].HSMC_TIMINGS = 0x00000000;\r
+    HSMC->HSMC_CS_NUMBER[0].HSMC_MODE  = HSMC_MODE_WRITE_MODE\r
+                                    | HSMC_MODE_READ_MODE\r
+                                    | dbw\r
+                                    | HSMC_MODE_EXNW_MODE_DISABLED\r
+                                    | HSMC_MODE_TDF_CYCLES(1);\r
+\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/dbg_util.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/dbg_util.c
new file mode 100644 (file)
index 0000000..3765b9b
--- /dev/null
@@ -0,0 +1,315 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *  Implement simple DBGU usage as stream receiver.\r
+ */\r
+\r
+/*-------------------------------\r
+ *          Headers\r
+ *-------------------------------*/\r
+\r
+#include <board.h>\r
+\r
+/*-------------------------------\r
+ *          Defines\r
+ *-------------------------------*/\r
+\r
+/** Data RX timeout in binary start up */\r
+#define TIMEOUT_RX_START        (1000*20)\r
+/** Data RX timeout default value */\r
+#define TIMEOUT_RX              (200)\r
+\r
+/* ASCII Character Codes */\r
+#define SOH             0x01\r
+#define STX             0x02\r
+#define EOT             0x04\r
+#define CTRL_D          0x04 /**< Transfer Done */\r
+#define ACK             0x06\r
+#define NAK             0x15\r
+#define CAN             0x18 /**< Cancel transfer */\r
+#define CTRL_X          0x24\r
+\r
+/* 1K XMODEM Parameters */\r
+#define SOH_LENGTH      128\r
+#define STX_LENGTH      1024\r
+#define SOH_TIMEOUT     1000\r
+\r
+/*-------------------------------\r
+ *          Local functions\r
+ *-------------------------------*/\r
+\r
+/**\r
+ * \brief Compute the CRC\r
+ */\r
+static uint16_t _GetCRC(uint8_t bByte, uint16_t wCrc)\r
+{\r
+    int32_t cnt;\r
+    uint8_t  newBit;\r
+    for (cnt = 7; cnt >= 0; cnt --)\r
+    {\r
+        newBit = ((wCrc >> 15) & 0x1) ^ ((bByte >> cnt) & 0x1);\r
+        wCrc <<= 1;\r
+        if (newBit) wCrc ^= (0x1021);\r
+    }\r
+    return wCrc;\r
+    \r
+}\r
+\r
+/*-------------------------------\r
+ *          Exported functions\r
+ *-------------------------------*/\r
+\r
+/**\r
+ * \brief Receives byte with timeout.\r
+ * \param pByte pointer to locate received byte, can be NULL\r
+ *              to discard data.\r
+ * \param timeOut timeout setting, in number of ticks.\r
+ */\r
+uint8_t DbgReceiveByte(uint8_t* pByte, uint32_t timeOut)\r
+{\r
+    uint32_t tick;\r
+    uint32_t delay;\r
+    tick = GetTickCount();\r
+    while(1)\r
+    {\r
+        if (DBGU_IsRxReady())\r
+        {\r
+            uint8_t tmp = DBGU_GetChar();\r
+            if (pByte) *pByte = tmp;\r
+            return 1;\r
+        }\r
+\r
+        if (timeOut == 0)\r
+        {   /* Never timeout */\r
+        }\r
+        else\r
+        {\r
+            delay = GetDelayInTicks(tick, GetTickCount());\r
+            if (delay > timeOut)\r
+            {\r
+                return 0;\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Receives raw binary file through DBGU.\r
+ * \param bStart 1 to start a new data stream.\r
+ * \param address receiving data address\r
+ * \param maxSize max receive data size in bytes\r
+ * \return number of received bytes\r
+ */\r
+uint32_t DbgReceiveBinary(uint8_t bStart, uint32_t address, uint32_t maxSize)\r
+{\r
+    volatile uint32_t tick0;\r
+    uint32_t delay;\r
+    uint8_t  *pBuffer = (uint8_t*)address;\r
+    uint8_t  xSign = 0;\r
+    uint32_t rxCnt = 0;\r
+\r
+    if (maxSize == 0) return 0;\r
+\r
+    if (bStart)\r
+    {\r
+        printf("\n\r-- Please start binary data in %d seconds:\n\r",\r
+            TIMEOUT_RX_START / 1000);\r
+        tick0 = GetTickCount();\r
+        while(1)\r
+        {\r
+            if (DBGU_IsRxReady())\r
+            {\r
+                pBuffer[rxCnt ++] = DBGU_GetChar();\r
+                DBGU_PutChar(' ');\r
+                break;\r
+            }\r
+            else\r
+            {\r
+                delay = GetDelayInTicks(tick0, GetTickCount());\r
+                if ((delay % 1000) == 0)\r
+                {\r
+                    if (xSign == 0)\r
+                    {\r
+                        DBGU_PutChar('*');\r
+                        xSign = 1;\r
+                    }\r
+                }\r
+                else if (xSign)\r
+                {\r
+                    xSign = 0;\r
+                }\r
+\r
+                if (delay > TIMEOUT_RX_START)\r
+                {\r
+                    printf("\n\rRX timeout!\n\r");\r
+                    return rxCnt;\r
+                }\r
+            }\r
+        }\r
+    }\r
+    /* Get data */\r
+    while(1)\r
+    {\r
+        tick0 = GetTickCount();\r
+        while(1)\r
+        {\r
+            if (DBGU_IsRxReady())\r
+            {\r
+                pBuffer[rxCnt ++] = DBGU_GetChar();\r
+                if ((rxCnt % (10*1024)) == 0)\r
+                {\r
+                    DBGU_PutChar('.');\r
+                }\r
+                if (rxCnt >= maxSize)\r
+                {\r
+                    /* Wait until file transfer finished */\r
+                    return rxCnt;\r
+                }\r
+                break;\r
+            }\r
+            delay = GetDelayInTicks(tick0, GetTickCount());\r
+            if (delay > TIMEOUT_RX)\r
+            {\r
+                return rxCnt;\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Receives raw binary file through DBGU.\r
+ *\r
+ * \note When "CCC..", uses Ctrl + D to exit.\r
+ *\r
+ * \param pktBuffer 1K size packet buffer\r
+ * \param address   receiving data address\r
+ * \param maxSize   max receive data size in bytes\r
+ * \return number of received bytes\r
+ */\r
+uint32_t DbgReceive1KXModem(uint8_t* pktBuffer,\r
+                            uint32_t address,\r
+                            uint32_t maxSize)\r
+{\r
+    uint8_t inChar;\r
+    uint32_t i, index = 0, pktLen = 0;\r
+    uint8_t pktNum = 0, prevPktNum = 0;\r
+    uint32_t error = 0;\r
+    uint16_t inCrc, myCrc;\r
+    uint8_t inCheckSum = 0xFF, checkSum = 0;\r
+    uint8_t *pBuffer = (uint8_t*)address;\r
+    uint32_t totalLen = 0;\r
+\r
+    DBGU_PutChar('C');\r
+    while (1)\r
+    {\r
+        if (!DbgReceiveByte(&inChar, SOH_TIMEOUT))\r
+        {\r
+            DBGU_PutChar('C');\r
+            continue;\r
+        }\r
+        /* Done */\r
+        if (EOT == inChar)\r
+        {\r
+            error = 0;\r
+            DBGU_PutChar(ACK);\r
+            break;\r
+        }\r
+        else if (CAN == inChar)\r
+        {\r
+            error = 2;\r
+        }\r
+        else if (CTRL_X == inChar)\r
+        {\r
+            error = 3;\r
+        }\r
+        else if (SOH == inChar)\r
+        {\r
+            pktLen = SOH_LENGTH;\r
+        }\r
+        else if (STX == inChar)\r
+        {\r
+            pktLen = STX_LENGTH;\r
+        }\r
+        else    continue;\r
+        /* Get Packet Number */\r
+        if (!DbgReceiveByte(&pktNum, SOH_TIMEOUT)) error = 4;\r
+        /* Get 1's complement of packet number */\r
+        if (!DbgReceiveByte(&inChar, SOH_TIMEOUT)) error = 5;\r
+        /* Get 1 packet of information. */\r
+        checkSum = 0; myCrc = 0; index = 0;\r
+        for (i = 0; i < pktLen; i ++)\r
+        {\r
+            if (!DbgReceiveByte(&inChar, SOH_TIMEOUT)) error = 6;\r
+            checkSum += inChar;\r
+            myCrc = _GetCRC(inChar, myCrc);\r
+            if (pktNum != prevPktNum)\r
+            {\r
+                pktBuffer[index ++] = inChar;\r
+            }\r
+        }\r
+        /* Get CRC bytes */\r
+        if (!DbgReceiveByte(&inCheckSum, SOH_TIMEOUT)) error = 7;\r
+        inCrc  = inCheckSum << 8;\r
+        if (!DbgReceiveByte(&inCheckSum, SOH_TIMEOUT)) error = 7;\r
+        inCrc += inCheckSum;\r
+        /* If CRC error, NAK */\r
+        if (error || (inCrc != myCrc))\r
+        {\r
+            DBGU_PutChar(NAK);\r
+            error = 0;\r
+        }\r
+        /* Save packet, ACK and next */\r
+        else\r
+        {\r
+            prevPktNum = pktNum;\r
+\r
+            /* Buffer full? */\r
+            if (totalLen + pktLen > maxSize)\r
+            {\r
+                /* Copy until buffer full? */\r
+                /* Stop transfer */\r
+                DBGU_PutChar(CAN);\r
+                return totalLen;\r
+            }\r
+\r
+            /* Copy the packet */\r
+            for (i = 0; i < pktLen; i ++)\r
+            {\r
+                pBuffer[totalLen + i] = pktBuffer[i];\r
+            }\r
+            totalLen += pktLen;\r
+            DBGU_PutChar(ACK);\r
+        }\r
+    }\r
+\r
+    return totalLen;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/dbgu_console.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/dbgu_console.c
new file mode 100644 (file)
index 0000000..877163f
--- /dev/null
@@ -0,0 +1,475 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implements DBGU console.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+#include <stdio.h>\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** The Pheripheral has no HW ID */\r
+#define ID_NOTUSED         0xFF\r
+\r
+/** Usart Hw ID (ID_USART0) */\r
+#define CONSOLE_ID              (pDbgPort->bID)\r
+/** Usart Hw interface used by the console (USART0). */\r
+#define CONSOLE_DBGU            ((Dbgu*)pDbgPort->pHw)\r
+/** Pins description list */\r
+#define CONSOLE_PINLIST         (pDbgPort->pPioList)\r
+/** Pins description list size */\r
+#define CONSOLE_PINLISTSIZE     (pDbgPort->bPioListSize)\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Debug port struct\r
+ */\r
+typedef struct _DbgPort {\r
+    const  void*   pHw;\r
+    const  Pin*    pPioList;\r
+    const  uint8_t bPioListSize;\r
+    const  uint8_t bID;\r
+} sDbgPort;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Pins for DBGU */\r
+static const Pin pinsDbgu[] = {PINS_DBGU};\r
+/** Pins for USART0 */\r
+static const Pin pinsUs0[] = {PIN_USART0_TXD, PIN_USART0_RXD};\r
+/** Pins for USART1 */\r
+static const Pin pinsUs1[] = {PIN_USART1_TXD, PIN_USART1_RXD};\r
+/** Pins for USART3 */\r
+static const Pin pinsUs3[] = {PIN_USART3_TXD, PIN_USART3_RXD};\r
+\r
+/** Uses DBGU as debug port */\r
+static sDbgPort dbgpDbgu =\r
+{\r
+    DBGU,\r
+    pinsDbgu, PIO_LISTSIZE(pinsDbgu),\r
+    ID_DBGU\r
+};\r
+/** Uses USART0 as debug port */\r
+static sDbgPort dbgpUs0  =\r
+{\r
+    USART0,\r
+    pinsUs0, PIO_LISTSIZE(pinsUs0),\r
+    ID_USART0\r
+};\r
+\r
+/** Uses USART0 as debug port */\r
+static sDbgPort dbgpUs1  =\r
+{\r
+    USART1,\r
+    pinsUs1, PIO_LISTSIZE(pinsUs1),\r
+    ID_USART1\r
+};\r
+/** Uses USART0 as debug port */\r
+static sDbgPort dbgpUs3  =\r
+{\r
+    USART3,\r
+    pinsUs3, PIO_LISTSIZE(pinsUs3),\r
+    ID_USART3\r
+};\r
+\r
+/** Current used debug port */\r
+static sDbgPort *pDbgPort = &dbgpUs3;\r
+/** Console initialize status */\r
+uint8_t _bConsoleIsInitialized = 0;\r
+\r
+/**\r
+ * \brief Select USART0 as DBGU port.\r
+ */\r
+void DBGU_ConsoleUseUSART0(void)\r
+{\r
+    pDbgPort = &dbgpUs0;\r
+    _bConsoleIsInitialized = 0;\r
+}\r
+/**\r
+ * \brief Select USART1 as DBGU port.\r
+ */\r
+void DBGU_ConsoleUseUSART1(void)\r
+{\r
+    pDbgPort = &dbgpUs1;\r
+    _bConsoleIsInitialized = 0;\r
+}\r
+\r
+/**\r
+ * \brief Select USART3 as DBGU port.\r
+ */\r
+void DBGU_ConsoleUseUSART3(void)\r
+{\r
+    pDbgPort = &dbgpUs3;\r
+    _bConsoleIsInitialized = 0;\r
+}\r
+/**\r
+ * \brief Select DBGU as DBGU port.\r
+ */\r
+void DBGU_ConsoleUseDBGU(void)\r
+{\r
+    pDbgPort = &dbgpDbgu;\r
+    _bConsoleIsInitialized = 0;\r
+}\r
+\r
+/**\r
+ * \brief Configures an DBGU peripheral with the specified parameters.\r
+ *\r
+ * \param baudrate  Baudrate at which the DBGU should operate (in Hz).\r
+ * \param masterClock  Frequency of the system master clock (in Hz).\r
+ */\r
+extern void DBGU_Configure( uint32_t baudrate, uint32_t masterClock)\r
+{\r
+\r
+    /* Configure PIO */\r
+    PIO_Configure(CONSOLE_PINLIST, CONSOLE_PINLISTSIZE);\r
+\r
+    if ( ID_NOTUSED != CONSOLE_ID )\r
+    {\r
+        //PMC_SetPeriMaxClock(CONSOLE_ID, BOARD_MCK);\r
+        PMC_EnablePeripheral(CONSOLE_ID);\r
+    }\r
+\r
+    /* Configure mode register */\r
+    if (CONSOLE_DBGU!= DBGU ) {\r
+        CONSOLE_DBGU->DBGU_MR = DBGU_MR_CHMODE_NORM | DBGU_MR_PAR_NONE | US_MR_CHRL_8_BIT;\r
+    }\r
+    else {\r
+        CONSOLE_DBGU->DBGU_MR = DBGU_MR_CHMODE_NORM | DBGU_MR_PAR_NONE;\r
+    }\r
+    /* Reset and disable receiver & transmitter */\r
+    CONSOLE_DBGU->DBGU_CR = DBGU_CR_RSTRX | DBGU_CR_RSTTX;\r
+    CONSOLE_DBGU->DBGU_IDR = 0xFFFFFFFF;\r
+    CONSOLE_DBGU->DBGU_CR = DBGU_CR_RXDIS | DBGU_CR_TXDIS;\r
+    /* Configure baudrate */\r
+    CONSOLE_DBGU->DBGU_BRGR = (masterClock/2 / baudrate) / 16;\r
+    /* Enable receiver and transmitter */\r
+    CONSOLE_DBGU->DBGU_CR = DBGU_CR_RXEN | DBGU_CR_TXEN;\r
+    _bConsoleIsInitialized = 1 ;\r
+#if defined(__GNUC__)\r
+    setvbuf(stdout, (char*)NULL, _IONBF, 0);\r
+#endif\r
+}\r
+\r
+/**\r
+ * \brief Outputs a character on the DBGU line.\r
+ *\r
+ * \note This function is synchronous (i.e. uses polling).\r
+ * \param c  Character to send.\r
+ */\r
+extern void DBGU_PutChar( uint8_t c )\r
+{\r
+    if ( !_bConsoleIsInitialized )\r
+    {\r
+        DBGU_Configure(CONSOLE_BAUDRATE, BOARD_MCK);\r
+    }\r
+\r
+    /* Wait for the transmitter to be ready */\r
+    while ( (CONSOLE_DBGU->DBGU_SR & DBGU_SR_TXEMPTY) == 0 ) ;\r
+\r
+    /* Send character */\r
+    CONSOLE_DBGU->DBGU_THR=c ;\r
+}\r
+\r
+/**\r
+ * \brief Input a character from the DBGU line.\r
+ *\r
+ * \note This function is synchronous\r
+ * \return character received.\r
+ */\r
+extern uint32_t DBGU_GetChar( void )\r
+{\r
+    if ( !_bConsoleIsInitialized )\r
+    {\r
+        DBGU_Configure(CONSOLE_BAUDRATE, BOARD_MCK);\r
+    }\r
+\r
+    while ( (CONSOLE_DBGU->DBGU_SR & DBGU_SR_RXRDY) == 0 ) ;\r
+    return CONSOLE_DBGU->DBGU_RHR ;\r
+}\r
+\r
+/**\r
+ * \brief Check if there is Input from DBGU line.\r
+ *\r
+ * \return true if there is Input.\r
+ */\r
+extern uint32_t DBGU_IsRxReady( void )\r
+{\r
+    if ( !_bConsoleIsInitialized )\r
+    {\r
+        //DBGU_Configure( CONSOLE_BAUDRATE, BOARD_MCK ) ;\r
+    }\r
+    return (CONSOLE_DBGU->DBGU_SR & DBGU_SR_RXRDY) > 0 ;\r
+}\r
+\r
+/**\r
+ *  Displays the content of the given frame on the DBGU.\r
+ *\r
+ *  \param pucFrame Pointer to the frame to dump.\r
+ *  \param dwSize   Buffer size in bytes.\r
+ */\r
+extern void DBGU_DumpFrame( uint8_t* pucFrame, uint32_t dwSize )\r
+{\r
+    uint32_t dw ;\r
+\r
+    for ( dw=0 ; dw < dwSize ; dw++ )\r
+    {\r
+        printf( "%02X ", pucFrame[dw] ) ;\r
+    }\r
+\r
+    printf( "\n\r" ) ;\r
+}\r
+\r
+/**\r
+ *  Displays the content of the given buffer on the DBGU.\r
+ *\r
+ *  \param pucBuffer  Pointer to the buffer to dump.\r
+ *  \param dwSize     Buffer size in bytes.\r
+ *  \param dwAddress  Start address to display\r
+ */\r
+extern void DBGU_DumpMemory( uint8_t* pucBuffer, uint32_t dwSize, uint32_t dwAddress )\r
+{\r
+    uint32_t i ;\r
+    uint32_t j ;\r
+    uint32_t dwLastLineStart ;\r
+    uint8_t* pucTmp ;\r
+\r
+    for ( i=0 ; i < (dwSize / 16) ; i++ )\r
+    {\r
+        printf( "0x%08X: ", (unsigned int )(dwAddress + ( i * 16) )) ;\r
+        pucTmp = (uint8_t*)&pucBuffer[i*16] ;\r
+\r
+        for ( j=0 ; j < 4 ; j++ )\r
+        {\r
+            printf( "%02X%02X%02X%02X ", pucTmp[0], pucTmp[1], pucTmp[2], pucTmp[3] ) ;\r
+            pucTmp += 4 ;\r
+        }\r
+\r
+        pucTmp=(uint8_t*)&pucBuffer[i*16] ;\r
+\r
+        for ( j=0 ; j < 16 ; j++ )\r
+        {\r
+            DBGU_PutChar( *pucTmp++ ) ;\r
+        }\r
+\r
+        printf( "\n\r" ) ;\r
+    }\r
+\r
+    if ( (dwSize%16) != 0 )\r
+    {\r
+        dwLastLineStart=dwSize - (dwSize%16) ;\r
+\r
+        printf( "0x%08X: ", (unsigned int ) (dwAddress + dwLastLineStart )) ;\r
+        for ( j=dwLastLineStart ; j < dwLastLineStart+16 ; j++ )\r
+        {\r
+            if ( (j!=dwLastLineStart) && (j%4 == 0) )\r
+            {\r
+                printf( " " ) ;\r
+            }\r
+\r
+            if ( j < dwSize )\r
+            {\r
+                printf( "%02X", pucBuffer[j] ) ;\r
+            }\r
+            else\r
+            {\r
+                printf("  ") ;\r
+            }\r
+        }\r
+\r
+        printf( " " ) ;\r
+        for ( j=dwLastLineStart ; j < dwSize ; j++ )\r
+        {\r
+            DBGU_PutChar( pucBuffer[j] ) ;\r
+        }\r
+\r
+        printf( "\n\r" ) ;\r
+    }\r
+}\r
+\r
+/**\r
+ *  Reads an integer\r
+ *\r
+ *  \param pdwValue  Pointer to the uint32_t variable to contain the input value.\r
+ */\r
+extern uint32_t DBGU_GetInteger( uint32_t* pdwValue )\r
+{\r
+    uint8_t ucKey ;\r
+    uint8_t ucNbNb=0 ;\r
+    uint32_t dwValue=0 ;\r
+\r
+    while ( 1 )\r
+    {\r
+        ucKey=DBGU_GetChar() ;\r
+        DBGU_PutChar( ucKey ) ;\r
+\r
+        if ( ucKey >= '0' &&  ucKey <= '9' )\r
+        {\r
+            dwValue = (dwValue * 10) + (ucKey - '0');\r
+            ucNbNb++ ;\r
+        }\r
+        else\r
+        {\r
+            if ( ucKey == 0x0D || ucKey == ' ' )\r
+            {\r
+                if ( ucNbNb == 0 )\r
+                {\r
+                    printf( "\n\rWrite a number and press ENTER or SPACE!\n\r" ) ;\r
+                    return 0 ;\r
+                }\r
+                else\r
+                {\r
+                    printf( "\n\r" ) ;\r
+                    *pdwValue=dwValue ;\r
+\r
+                    return 1 ;\r
+                }\r
+            }\r
+            else\r
+            {\r
+                printf( "\n\r'%c' not a number!\n\r", ucKey ) ;\r
+\r
+                return 0 ;\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ *  Reads an integer and check the value\r
+ *\r
+ *  \param pdwValue  Pointer to the uint32_t variable to contain the input value.\r
+ *  \param dwMin     Minimum value\r
+ *  \param dwMax     Maximum value\r
+ */\r
+extern uint32_t DBGU_GetIntegerMinMax( uint32_t* pdwValue, uint32_t dwMin, uint32_t dwMax )\r
+{\r
+    uint32_t dwValue=0 ;\r
+\r
+    if ( DBGU_GetInteger( &dwValue ) == 0 )\r
+    {\r
+        return 0 ;\r
+    }\r
+\r
+    if ( dwValue < dwMin || dwValue > dwMax )\r
+ {\r
+        printf( "\n\rThe number have to be between %u and %u\n\r", (unsigned int)dwMin, (unsigned int)dwMax ) ;\r
+\r
+        return 0 ;\r
+    }\r
+\r
+    printf( "\n\r" ) ;\r
+\r
+    *pdwValue = dwValue ;\r
+\r
+    return 1 ;\r
+}\r
+\r
+/**\r
+ *  Reads an hexadecimal number\r
+ *\r
+ *  \param pdwValue  Pointer to the uint32_t variable to contain the input value.\r
+ */\r
+extern uint32_t DBGU_GetHexa32( uint32_t* pdwValue )\r
+{\r
+    uint8_t ucKey ;\r
+    uint32_t dw = 0 ;\r
+    uint32_t dwValue = 0 ;\r
+\r
+    for ( dw=0 ; dw < 8 ; dw++ )\r
+    {\r
+        ucKey = DBGU_GetChar() ;\r
+        DBGU_PutChar( ucKey ) ;\r
+\r
+        if ( ucKey >= '0' &&  ucKey <= '9' )\r
+        {\r
+            dwValue = (dwValue * 16) + (ucKey - '0') ;\r
+        }\r
+        else\r
+        {\r
+            if ( ucKey >= 'A' &&  ucKey <= 'F' )\r
+            {\r
+                dwValue = (dwValue * 16) + (ucKey - 'A' + 10) ;\r
+            }\r
+            else\r
+            {\r
+                if ( ucKey >= 'a' &&  ucKey <= 'f' )\r
+                {\r
+                    dwValue = (dwValue * 16) + (ucKey - 'a' + 10) ;\r
+                }\r
+                else\r
+                {\r
+                    printf( "\n\rIt is not a hexa character!\n\r" ) ;\r
+\r
+                    return 0 ;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    printf("\n\r" ) ;\r
+    *pdwValue = dwValue ;\r
+\r
+    return 1 ;\r
+}\r
+\r
+#if defined __ICCARM__ /* IAR Ewarm 5.41+ */\r
+/**\r
+ * \brief Outputs a character on the DBGU.\r
+ *\r
+ * \param c  Character to output.\r
+ *\r
+ * \return The character that was output.\r
+ */\r
+extern WEAK signed int putchar( signed int c )\r
+{\r
+    DBGU_PutChar( c ) ;\r
+\r
+    return c ;\r
+}\r
+#endif // defined __ICCARM__\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/gmacb.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/gmacb.c
new file mode 100644 (file)
index 0000000..34659f9
--- /dev/null
@@ -0,0 +1,516 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <board.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Definitions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/** Default max retry count */\r
+#define GMACB_RETRY_MAX            300000\r
+\r
+/** Default max retry count */\r
+#define GACB_RETRY_MAX            1000000\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Local functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+\r
+/**\r
+ * Wait PHY operation complete.\r
+ * Return 1 if the operation completed successfully.\r
+ * May be need to re-implemented to reduce CPU load.\r
+ * \param retry: the retry times, 0 to wait forever until complete.\r
+ */\r
+static uint8_t GMACB_WaitPhy( Gmac *pHw, uint32_t retry )\r
+{\r
+    volatile uint32_t retry_count = 0;\r
+\r
+    while (!GMAC_IsIdle(pHw))\r
+    {\r
+        if(retry == 0) continue;\r
+        retry_count ++;\r
+        if (retry_count >= retry)\r
+        {\r
+            return 0;\r
+        }\r
+    }\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * Read PHY register.\r
+ * Return 1 if successfully, 0 if timeout.\r
+ * \param pHw HW controller address\r
+ * \param PhyAddress PHY Address\r
+ * \param Address Register Address\r
+ * \param pValue Pointer to a 32 bit location to store read data\r
+ * \param retry The retry times, 0 to wait forever until complete.\r
+ */\r
+static uint8_t GMACB_ReadPhy(Gmac *pHw,\r
+                             uint8_t PhyAddress,\r
+                             uint8_t Address,\r
+                             uint32_t *pValue,\r
+                             uint32_t retry)\r
+{\r
+    GMAC_PHYMaintain(pHw, PhyAddress, Address, 1, 0);\r
+    if ( GMACB_WaitPhy(pHw, retry) == 0 )\r
+    {\r
+        TRACE_ERROR("TimeOut GMACB_ReadPhy\n\r");\r
+        return 0;\r
+    }\r
+    *pValue = GMAC_PHYData(pHw);\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * Write PHY register\r
+ * Return 1 if successfully, 0 if timeout.\r
+ * \param pHw HW controller address\r
+ * \param PhyAddress PHY Address\r
+ * \param Address Register Address\r
+ * \param Value Data to write ( Actually 16 bit data )\r
+ * \param retry The retry times, 0 to wait forever until complete.\r
+ */\r
+static uint8_t GMACB_WritePhy(Gmac *pHw,\r
+                              uint8_t PhyAddress,\r
+                              uint8_t Address,\r
+                              uint32_t Value,\r
+                              uint32_t retry)\r
+{\r
+    GMAC_PHYMaintain(pHw, PhyAddress, Address, 0, Value);\r
+    if ( GMACB_WaitPhy(pHw, retry) == 0 )\r
+    {\r
+        TRACE_ERROR("TimeOut GMACB_WritePhy\n\r");\r
+        return 0;\r
+    }\r
+    return 1;\r
+}\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Find a valid PHY Address ( from 0 to 31 ).\r
+ * \param pMacb Pointer to the MACB instance\r
+ * \return 0xFF when no valid PHY Address found.\r
+ */\r
+static uint8_t GMACB_FindValidPhy(GMacb *pMacb)\r
+{\r
+    sGmacd *pDrv = pMacb->pGmacd;\r
+    Gmac *pHw = pDrv->pHw;\r
+\r
+    uint32_t  retryMax;\r
+    uint32_t  value=0;\r
+    uint8_t rc;\r
+    uint8_t phyAddress;\r
+    uint8_t cnt;\r
+\r
+    TRACE_DEBUG("GMACB_FindValidPhy\n\r");\r
+\r
+    GMAC_EnableMdio(pHw);\r
+    phyAddress = pMacb->phyAddress;\r
+    retryMax = pMacb->retryMax;\r
+\r
+    /* Check current phyAddress */\r
+    rc = phyAddress;\r
+    if( GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax) == 0 ) {\r
+        TRACE_ERROR("GMACB PROBLEM\n\r");\r
+    }\r
+    TRACE_DEBUG("_PHYID1  : 0x%X, addr: %d\n\r", value, phyAddress);\r
+\r
+    /* Find another one */\r
+    if (value != GMII_OUI_MSB) {\r
+\r
+        rc = 0xFF;\r
+        for(cnt = 0; cnt < 32; cnt ++) {\r
+\r
+            phyAddress = (phyAddress + 1) & 0x1F;\r
+            if( GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax) == 0 ) {\r
+                TRACE_ERROR("MACB PROBLEM\n\r");\r
+            }\r
+            TRACE_DEBUG("_PHYID1  : 0x%X, addr: %d\n\r", value, phyAddress);\r
+            if (value == GMII_OUI_MSB) {\r
+\r
+                rc = phyAddress;\r
+                break;\r
+            }\r
+        }\r
+    }\r
+    if (rc != 0xFF) {\r
+        TRACE_INFO("** Valid PHY Found: %d\n\r", rc);\r
+        GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID1R, &value, retryMax);\r
+        TRACE_DEBUG("_PHYID1R  : 0x%X, addr: %d\n\r", value, phyAddress);\r
+        GMACB_ReadPhy(pHw, phyAddress, GMII_PHYID2R, &value, retryMax);\r
+        TRACE_DEBUG("_EMSR  : 0x%X, addr: %d\n\r", value, phyAddress);\r
+    }\r
+    GMAC_DisableMdio(pHw);\r
+    return rc;\r
+}\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+/**\r
+ * \brief Dump all the useful registers.\r
+ * \param pMacb          Pointer to the MACB instance\r
+ */\r
+void GMACB_DumpRegisters(GMacb *pMacb)\r
+{\r
+    sGmacd *pDrv = pMacb->pGmacd;\r
+    Gmac *pHw = pDrv->pHw;\r
+\r
+    uint8_t phyAddress;\r
+    uint32_t retryMax;\r
+    uint32_t value;\r
+\r
+    TRACE_INFO("GMACB_DumpRegisters\n\r");\r
+\r
+    GMAC_EnableMdio(pHw);\r
+    phyAddress = pMacb->phyAddress;\r
+    retryMax = pMacb->retryMax;\r
+\r
+    TRACE_INFO("GMII MACB @%d) Registers:\n\r", phyAddress);\r
+\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_BMCR, &value, retryMax);\r
+    TRACE_INFO(" _BMCR     : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_BMSR, &value, retryMax);\r
+    TRACE_INFO(" _BMSR     : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_ANAR, &value, retryMax);\r
+    TRACE_INFO(" _ANAR     : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPAR, &value, retryMax);\r
+    TRACE_INFO(" _ANLPAR   : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_ANER, &value, retryMax);\r
+    TRACE_INFO(" _ANER     : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_ANNPR, &value, retryMax);\r
+    TRACE_INFO(" _ANNPR    : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPNPAR, &value, retryMax);\r
+    TRACE_INFO(" _ANLPNPAR : 0x%X\n\r", value);\r
+  \r
+    TRACE_INFO(" \n\r");\r
+    \r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_RXERCR, &value, retryMax);\r
+    TRACE_INFO(" _RXERCR   : 0x%X\n\r", value);\r
+    GMACB_ReadPhy(pHw, phyAddress, GMII_ICSR, &value, retryMax);\r
+    TRACE_INFO(" _ICSR     : 0x%X\n\r", value);\r
+    TRACE_INFO(" \n\r");\r
+   \r
+    GMAC_DisableMdio(pHw);\r
+}\r
+\r
+/**\r
+ * \brief Setup the maximum timeout count of the driver.\r
+ * \param pMacb Pointer to the MACB instance\r
+ * \param toMax Timeout maxmum count.\r
+ */\r
+void GMACB_SetupTimeout(GMacb *pMacb, uint32_t toMax)\r
+{\r
+    pMacb->retryMax = toMax;\r
+}\r
+\r
+/**\r
+ * \brief Initialize the MACB instance.\r
+ * \param pMacb Pointer to the MACB instance\r
+ * \param phyAddress   The PHY address used to access the PHY\r
+ */\r
+void GMACB_Init(GMacb *pMacb, sGmacd *pGmacd, uint8_t phyAddress)\r
+{\r
+    pMacb->pGmacd = pGmacd;\r
+    pMacb->phyAddress = phyAddress;\r
+    /* Initialize timeout by default */\r
+    pMacb->retryMax = GMACB_RETRY_MAX;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Issue a SW reset to reset all registers of the PHY.\r
+ * \param pMacb Pointer to the MACB instance\r
+ * \return 1 if successfully, 0 if timeout.\r
+ */\r
+uint8_t GMACB_ResetPhy(GMacb *pMacb)\r
+{\r
+    sGmacd *pDrv = pMacb->pGmacd;\r
+    Gmac *pHw = pDrv->pHw;\r
+    uint32_t retryMax;\r
+    uint32_t bmcr = GMII_RESET;\r
+    uint8_t phyAddress;\r
+    uint32_t timeout = 10;\r
+    uint8_t ret = 1;\r
+\r
+    TRACE_INFO(" GMACB_ResetPhy\n\r");\r
+\r
+    phyAddress = pMacb->phyAddress;\r
+    retryMax = pMacb->retryMax;\r
+\r
+    GMAC_EnableMdio(pHw);\r
+    bmcr = GMII_RESET;\r
+    GMACB_WritePhy(pHw, phyAddress, GMII_BMCR, bmcr, retryMax);\r
+\r
+    do {\r
+        GMACB_ReadPhy(pHw, phyAddress, GMII_BMCR, &bmcr, retryMax);\r
+        timeout--;\r
+    } while ((bmcr & GMII_RESET) && timeout);\r
+\r
+    GMAC_DisableMdio(pHw);\r
+\r
+    if (!timeout) {\r
+        ret = 0;\r
+    }\r
+\r
+    return( ret );\r
+}\r
+\r
+/**\r
+ * \brief Do a HW initialize to the PHY ( via RSTC ) and setup clocks & PIOs\r
+ * This should be called only once to initialize the PHY pre-settings.\r
+ * The PHY address is reset status of CRS,RXD[3:0] (the emacPins' pullups).\r
+ * The COL pin is used to select MII mode on reset (pulled up for Reduced MII)\r
+ * The RXDV pin is used to select test mode on reset (pulled up for test mode)\r
+ * The above pins should be predefined for corresponding settings in resetPins\r
+ * The GMAC peripheral pins are configured after the reset done.\r
+ * \param pMacb Pointer to the MACB instance\r
+ * \param mck         Main clock setting to initialize clock\r
+ * \param resetPins   Pointer to list of PIOs to configure before HW RESET\r
+ *                       (for PHY power on reset configuration latch)\r
+ * \param nbResetPins Number of PIO items that should be configured\r
+ * \param emacPins    Pointer to list of PIOs for the EMAC interface\r
+ * \param nbEmacPins  Number of PIO items that should be configured\r
+ * \return 1 if RESET OK, 0 if timeout.\r
+ */\r
+uint8_t GMACB_InitPhy(GMacb *pMacb,\r
+                            uint32_t mck,\r
+                            const Pin *pResetPins,\r
+                            uint32_t nbResetPins,\r
+                            const Pin *pGmacPins,\r
+                            uint32_t nbGmacPins)\r
+{\r
+    sGmacd *pDrv = pMacb->pGmacd;\r
+    Gmac *pHw = pDrv->pHw;\r
+    uint8_t rc = 1;\r
+    uint8_t phy;\r
+\r
+    /* Perform RESET */\r
+    TRACE_DEBUG("RESET PHY\n\r");\r
+    \r
+    if (pResetPins) {\r
+        /* Configure PINS */\r
+        PIO_Configure(pResetPins, nbResetPins);\r
+    }\r
+    /* Configure GMAC runtime pins */\r
+    if (rc) {\r
+\r
+        PIO_Configure(pGmacPins, nbGmacPins);\r
+        rc = GMAC_SetMdcClock(pHw, mck );\r
+        if (!rc) {\r
+            TRACE_ERROR("No Valid MDC clock\n\r");\r
+            return 0;\r
+        }\r
+\r
+        /* Check PHY Address */\r
+        phy = GMACB_FindValidPhy(pMacb);\r
+        if (phy == 0xFF) {\r
+            TRACE_ERROR("PHY Access fail\n\r");\r
+            return 0;\r
+        }\r
+        if(phy != pMacb->phyAddress) {\r
+            pMacb->phyAddress = phy;\r
+            GMACB_ResetPhy(pMacb);\r
+        }\r
+    }\r
+    else {\r
+        TRACE_ERROR("PHY Reset Timeout\n\r");\r
+    }\r
+    return rc;\r
+}\r
+\r
+/**\r
+ * \brief Issue a Auto Negotiation of the PHY\r
+ * \param pMacb Pointer to the MACB instance\r
+ * \return 1 if successfully, 0 if timeout.\r
+ */\r
+uint8_t GMACB_AutoNegotiate(GMacb *pMacb)\r
+{\r
+    sGmacd *pDrv = pMacb->pGmacd;\r
+    Gmac *pHw = pDrv->pHw;\r
+    uint32_t retryMax;\r
+    uint32_t value;\r
+    uint32_t phyAnar;\r
+    uint32_t phyAnalpar;\r
+    uint32_t retryCount= 0;\r
+    uint8_t phyAddress;\r
+    uint8_t rc = 1;\r
+    uint32_t duplex, speed;\r
+    phyAddress = pMacb->phyAddress;\r
+    retryMax = pMacb->retryMax;\r
+\r
+    GMAC_EnableMdio(pHw);\r
+\r
+    if (!GMACB_ReadPhy(pHw,phyAddress, GMII_PHYID1R, &value, retryMax)) \r
+    {\r
+        TRACE_ERROR("Pb GEMAC_ReadPhy Id1\n\r");\r
+        rc = 0;\r
+        goto AutoNegotiateExit;\r
+    }\r
+    TRACE_DEBUG("ReadPhy Id1 0x%X, addresse: %d\n\r", value, phyAddress);\r
+    if (!GMACB_ReadPhy(pHw,phyAddress, GMII_PHYID2R, &phyAnar, retryMax)) \r
+    {\r
+        TRACE_ERROR("Pb GMACB_ReadPhy Id2\n\r");\r
+        rc = 0;\r
+        goto AutoNegotiateExit;\r
+    }\r
+    TRACE_DEBUG("ReadPhy Id2 0x%X\n\r", phyAnar);\r
+\r
+    if( ( value == GMII_OUI_MSB )\r
+     && ( ((phyAnar)&(~GMII_LSB_MASK)) == GMII_OUI_LSB ) )\r
+    {\r
+        TRACE_DEBUG("Vendor Number Model = 0x%X\n\r", ((phyAnar>>4)&0x3F));\r
+        TRACE_DEBUG("Model Revision Number = 0x%X\n\r", (phyAnar&0xF));\r
+    }\r
+    else \r
+    {\r
+        TRACE_ERROR("Problem OUI value\n\r");\r
+    }\r
+\r
+    /* Set the Auto_negotiation Advertisement Register, MII advertising for Next page\r
+       100BaseTxFD and HD, 10BaseTFD and HD, IEEE 802.3 */\r
+    rc  = GMACB_ReadPhy(pHw, phyAddress, GMII_ANAR, &phyAnar, retryMax);\r
+    if (rc == 0) \r
+    {\r
+        goto AutoNegotiateExit;\r
+    }\r
+    phyAnar = GMII_TX_FDX | GMII_TX_HDX |\r
+              GMII_10_FDX | GMII_10_HDX | GMII_AN_IEEE_802_3;\r
+    rc = GMACB_WritePhy(pHw,phyAddress, GMII_ANAR, phyAnar, retryMax);\r
+    if (rc == 0) \r
+    {\r
+        goto AutoNegotiateExit;\r
+    }\r
+    \r
+    /* Read & modify control register */\r
+    rc  = GMACB_ReadPhy(pHw, phyAddress, GMII_BMCR, &value, retryMax);\r
+    if (rc == 0) \r
+    {\r
+        goto AutoNegotiateExit;\r
+    }\r
+\r
+    /* Check AutoNegotiate complete */\r
+    value |=  GMII_AUTONEG | GMII_RESTART_AUTONEG;\r
+    rc = GMACB_WritePhy(pHw, phyAddress, GMII_BMCR, value, retryMax);\r
+    if (rc == 0) \r
+    {\r
+        goto AutoNegotiateExit;\r
+    }\r
+    TRACE_DEBUG(" _BMCR: 0x%X\n\r", value);\r
+\r
+    // Check AutoNegotiate complete\r
+    while (1) \r
+    {\r
+        rc  = GMACB_ReadPhy(pHw, phyAddress, GMII_BMSR, &value, retryMax);\r
+        if (rc == 0)\r
+        {\r
+            TRACE_ERROR("rc==0\n\r");\r
+            goto AutoNegotiateExit;\r
+        }\r
+        /* Done successfully */\r
+        if (value & GMII_AUTONEG_COMP) \r
+        {\r
+            printf("AutoNegotiate complete\n\r");\r
+            break;\r
+        }\r
+        /* Timeout check */\r
+        if (retryMax)\r
+        {\r
+            if (++ retryCount >= retryMax)\r
+            {\r
+                GMACB_DumpRegisters(pMacb);\r
+                TRACE_ERROR("TimeOut\n\r");\r
+                rc = 0;\r
+                goto AutoNegotiateExit; \r
+            }\r
+        }\r
+    }\r
+\r
+    /*Set local link mode */\r
+    while(1)\r
+    {\r
+        rc  = GMACB_ReadPhy(pHw, phyAddress, GMII_ANLPAR, &phyAnalpar, retryMax);\r
+        if (rc == 0) \r
+        {\r
+            goto AutoNegotiateExit;\r
+        }\r
+        /* Setup the GMAC link speed */\r
+        if ((phyAnar & phyAnalpar) & GMII_TX_FDX) \r
+        {\r
+            /* set RGMII for 1000BaseTX and Full Duplex */\r
+            duplex = GMAC_DUPLEX_FULL;\r
+            speed = GMAC_SPEED_100M;\r
+            break;\r
+        }\r
+        else if ((phyAnar & phyAnalpar) & GMII_10_FDX) \r
+        {\r
+            /* set RGMII for 1000BaseT and Half Duplex*/\r
+            duplex = GMAC_DUPLEX_FULL;\r
+            speed = GMAC_SPEED_10M;\r
+            break;\r
+        }\r
+        else if ((phyAnar & phyAnalpar) & GMII_TX_HDX) \r
+        {\r
+        /* set RGMII for 100BaseTX and half Duplex */\r
+            duplex = GMAC_DUPLEX_HALF;\r
+            speed = GMAC_SPEED_100M;\r
+            break;\r
+        }\r
+        else if ((phyAnar & phyAnalpar) & GMII_10_HDX) \r
+        {\r
+            // set RGMII for 10BaseT and half Duplex\r
+            duplex = GMAC_DUPLEX_HALF;\r
+            speed = GMAC_SPEED_10M;\r
+            break;\r
+        }\r
+    }\r
+    TRACE_INFO("-I- GMAC_EnableRGMII duplex %d, speed %d\n\r",duplex,speed);\r
+    /* Setup GMAC mode  */\r
+    GMAC_EnableRGMII(pHw, duplex, speed);\r
+\r
+AutoNegotiateExit:\r
+    GMAC_DisableMdio(pHw);\r
+    return rc;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/gmacd.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/gmacd.c
new file mode 100644 (file)
index 0000000..5977e56
--- /dev/null
@@ -0,0 +1,711 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+ /** \file */\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <board.h>\r
+#include <string.h>\r
+\r
+/** \addtogroup gmacd_defines\r
+    @{*/\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Macro\r
+ *----------------------------------------------------------------------------*/\r
+/** Return count in buffer */\r
+#define GCIRC_CNT(head,tail,size) (((head) - (tail)) % (size))\r
+\r
+/** Return space available, 0..size-1. always leave one free char as a completely full buffer \r
+    has head == tail, which is the same as empty */\r
+#define GCIRC_SPACE(head,tail,size) GCIRC_CNT((tail),((head)+1),(size))\r
+\r
+/** Return count up to the end of the buffer. Carefully avoid accessing head and tail more than once,\r
+    so they can change underneath us without returning inconsistent results */\r
+#define GCIRC_CNT_TO_END(head,tail,size) \\r
+     ({int end = (size) - (tail); \\r
+     int n = ((head) + end) % (size); \\r
+     n < end ? n : end;})\r
+\r
+/** Return space available up to the end of the buffer */\r
+#define GCIRC_SPACE_TO_END(head,tail,size) \\r
+   ({int end = (size) - 1 - (head); \\r
+     int n = (end + (tail)) % (size); \\r
+     n <= end ? n : end+1;})\r
+\r
+/** Increment head or tail */\r
+#define GCIRC_INC(headortail,size) \\r
+       headortail++;             \\r
+        if(headortail >= size) {  \\r
+            headortail = 0;       \\r
+        }\r
+\r
+/** Circular buffer is empty ? */\r
+#define GCIRC_EMPTY(head, tail)     (head == tail)\r
+\r
+/** Clear circular buffer */\r
+#define GCIRC_CLEAR(head, tail)  (head = tail = 0)\r
+\r
+//------------------------------------------------------------------------------\r
+//         Definitions\r
+//------------------------------------------------------------------------------\r
+/// The buffer addresses written into the descriptors must be aligned so the\r
+/// last few bits are zero.  These bits have special meaning for the GMAC\r
+/// peripheral and cannot be used as part of the address.\r
+#define GMAC_ADDRESS_MASK   ((unsigned int)0xFFFFFFFC)\r
+#define GMAC_LENGTH_FRAME   ((unsigned int)0x3FFF)    /// Length of frame mask\r
+\r
+// receive buffer descriptor bits\r
+#define GMAC_RX_OWNERSHIP_BIT   (1 <<  0)\r
+#define GMAC_RX_WRAP_BIT        (1 <<  1)\r
+#define GMAC_RX_SOF_BIT         (1 << 14)\r
+#define GMAC_RX_EOF_BIT         (1 << 15)\r
+\r
+// Transmit buffer descriptor bits\r
+#define GMAC_TX_LAST_BUFFER_BIT (1 << 15)\r
+#define GMAC_TX_WRAP_BIT        (1 << 30)\r
+#define GMAC_TX_USED_BIT        (1 << 31)\r
+#define GMAC_TX_RLE_BIT         (1 << 29) /// Retry Limit Exceeded\r
+#define GMAC_TX_UND_BIT         (1 << 28) /// Tx Buffer Underrun\r
+#define GMAC_TX_ERR_BIT         (1 << 27) /// Exhausted in mid-frame\r
+#define GMAC_TX_ERR_BITS  \\r
+    (GMAC_TX_RLE_BIT | GMAC_TX_UND_BIT | GMAC_TX_ERR_BIT)\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Local functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  \brief Disable TX & reset registers and descriptor list\r
+ *  \param pDrv Pointer to GMAC Driver instance.\r
+ */\r
+static void GMACD_ResetTx(sGmacd *pDrv )\r
+{\r
+    Gmac *pHw = pDrv->pHw;\r
+    uint8_t *pTxBuffer = pDrv->pTxBuffer;\r
+    sGmacTxDescriptor *pTd = pDrv->pTxD;\r
+    uint32_t Index;\r
+    uint32_t Address;\r
+\r
+    /* Disable TX */\r
+    GMAC_TransmitEnable(pHw, 0);\r
+    /* Setup the TX descriptors. */\r
+    GCIRC_CLEAR(pDrv->wTxHead, pDrv->wTxTail);\r
+    for(Index = 0; Index < pDrv->wTxListSize; Index++) {\r
+        Address = (uint32_t)(&(pTxBuffer[Index * GMAC_TX_UNITSIZE]));\r
+        pTd[Index].addr = Address;\r
+        pTd[Index].status.val = (uint32_t)GMAC_TX_USED_BIT;\r
+    }\r
+    pTd[pDrv->wTxListSize - 1].status.val = GMAC_TX_USED_BIT | GMAC_TX_WRAP_BIT;\r
+    /* Transmit Buffer Queue Pointer Register */\r
+    GMAC_SetTxQueue(pHw, (uint32_t)pTd);\r
+}\r
+    \r
+/**\r
+ *  \brief Disable RX & reset registers and descriptor list\r
+ *  \param pDrv Pointer to GMAC Driver instance. \r
+ */\r
+static void GMACD_ResetRx(sGmacd *pDrv )\r
+{\r
+    Gmac    *pHw = pDrv->pHw;\r
+    uint8_t *pRxBuffer = pDrv->pRxBuffer;\r
+    sGmacRxDescriptor *pRd = pDrv->pRxD;\r
+\r
+    uint32_t Index;\r
+    uint32_t Address;\r
+\r
+    /* Disable RX */\r
+    GMAC_ReceiveEnable(pHw, 0);\r
+\r
+    /* Setup the RX descriptors. */\r
+    pDrv->wRxI = 0;\r
+    for(Index = 0; Index < pDrv->wRxListSize; Index++)\r
+    {\r
+        Address = (uint32_t)(&(pRxBuffer[Index * GMAC_RX_UNITSIZE]));\r
+        /* Remove GMAC_RXD_bmOWNERSHIP and GMAC_RXD_bmWRAP */\r
+        pRd[Index].addr.val = Address & GMAC_ADDRESS_MASK;\r
+        pRd[Index].status.val = 0;\r
+    }\r
+    pRd[pDrv->wRxListSize - 1].addr.val |= GMAC_RX_WRAP_BIT;\r
+\r
+    /* Receive Buffer Queue Pointer Register */\r
+    GMAC_SetRxQueue(pHw, (uint32_t) pRd);\r
+}\r
+\r
+    \r
+/*---------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *---------------------------------------------------------------------------*/\r
\r
\r
+/**\r
+ *  \brief GMAC Interrupt handler\r
+ *  \param pGmacd Pointer to GMAC Driver instance.\r
+ */\r
+void GMACD_Handler(sGmacd *pGmacd )\r
+{\r
+    Gmac *pHw = pGmacd->pHw;\r
+    sGmacTxDescriptor      *pTxTd;\r
+    fGmacdTransferCallback *pTxCb = NULL;\r
+    uint32_t isr;\r
+    uint32_t rsr;\r
+    uint32_t tsr;\r
+   \r
+    uint32_t rxStatusFlag;\r
+    uint32_t txStatusFlag;\r
+    isr = GMAC_GetItStatus(pHw);\r
+    rsr = GMAC_GetRxStatus(pHw);\r
+    tsr = GMAC_GetTxStatus(pHw);\r
+\r
+    isr &= ~(GMAC_GetItMask(pHw)| 0xF8030300);\r
+\r
+    /* RX packet */\r
+    if ((isr & GMAC_ISR_RCOMP) || (rsr & GMAC_RSR_REC)) {\r
+        asm("nop");\r
+        rxStatusFlag = GMAC_RSR_REC;\r
+        /* Frame received */\r
+        /* Check OVR */\r
+        if (rsr & GMAC_RSR_RXOVR) {\r
+            rxStatusFlag |= GMAC_RSR_RXOVR;\r
+        }\r
+        /* Check BNA */\r
+        if (rsr & GMAC_RSR_BNA) {\r
+            rxStatusFlag |= GMAC_RSR_BNA;\r
+        }\r
+        /* Check HNO */\r
+        if (rsr & GMAC_RSR_HNO) {\r
+            rxStatusFlag |= GMAC_RSR_HNO;\r
+        }        \r
+        /* Clear status */\r
+        GMAC_ClearRxStatus(pHw, rxStatusFlag);\r
+\r
+        /* Invoke callbacks */\r
+        if (pGmacd->fRxCb)\r
+        {\r
+            pGmacd->fRxCb(rxStatusFlag);\r
+        }\r
+    }\r
+\r
+    /* TX packet */\r
+    if ((isr & GMAC_ISR_TCOMP) || (tsr & GMAC_TSR_TXCOMP)) {\r
+        asm("nop");\r
+        txStatusFlag = GMAC_TSR_TXCOMP;\r
+\r
+        /*  A frame transmitted Check RLE */\r
+        if (tsr & GMAC_TSR_RLE) {\r
+            /* Status RLE & Number of discarded buffers */\r
+            txStatusFlag = GMAC_TSR_RLE\r
+                         | GCIRC_CNT(pGmacd->wTxHead,\r
+                                     pGmacd->wTxTail,\r
+                                     pGmacd->wTxListSize);\r
+            pTxCb = &pGmacd->fTxCbList[pGmacd->wTxTail];\r
+            GMACD_ResetTx(pGmacd);\r
+            TRACE_INFO("Tx RLE!!\n\r");\r
+            GMAC_TransmitEnable(pHw, 1);\r
+        }\r
+        /* Check COL */\r
+        if (tsr & GMAC_TSR_COL) {\r
+            txStatusFlag |= GMAC_TSR_COL;\r
+        }\r
+        /* Check TFC */\r
+        if (tsr & GMAC_TSR_TFC) {\r
+            txStatusFlag |= GMAC_TSR_TFC;\r
+        }\r
+        /* Check UND */\r
+        if (tsr & GMAC_TSR_UND) {\r
+            txStatusFlag |= GMAC_TSR_UND;\r
+        }\r
+        /* Check HRESP */\r
+        if (tsr & GMAC_TSR_HRESP) {\r
+            txStatusFlag |= GMAC_TSR_HRESP;\r
+        }\r
+        /* Clear status */\r
+        GMAC_ClearTxStatus(pHw, txStatusFlag);\r
+\r
+        if (!GCIRC_EMPTY(pGmacd->wTxHead, pGmacd->wTxTail))\r
+        {\r
+            /* Check the buffers */\r
+            do {\r
+                pTxTd = &pGmacd->pTxD[pGmacd->wTxTail];\r
+                pTxCb = &pGmacd->fTxCbList[pGmacd->wTxTail];\r
+                /* Exit if buffer has not been sent yet */\r
+\r
+                if ((pTxTd->status.val & (uint32_t)GMAC_TX_USED_BIT) == 0) {\r
+                    break;\r
+                }\r
+                /* Notify upper layer that a packet has been sent */\r
+                if (*pTxCb) {\r
+                    (*pTxCb)(txStatusFlag);\r
+                }\r
+                GCIRC_INC( pGmacd->wTxTail, pGmacd->wTxListSize );\r
+            } while (GCIRC_CNT(pGmacd->wTxHead, pGmacd->wTxTail, pGmacd->wTxListSize));\r
+        }\r
+        \r
+        if (tsr & GMAC_TSR_RLE) {\r
+            /* Notify upper layer RLE */\r
+            if (*pTxCb) {\r
+                (*pTxCb)(txStatusFlag);\r
+            }\r
+        }\r
+        \r
+        /* If a wakeup has been scheduled, notify upper layer that it can\r
+           send other packets, send will be successfull. */\r
+        if((GCIRC_SPACE(pGmacd->wTxHead,\r
+                         pGmacd->wTxTail,\r
+                         pGmacd->wTxListSize) >= pGmacd->bWakeupThreshold) && pGmacd->fWakupCb)\r
+        {\r
+            pGmacd->fWakupCb();\r
+        }\r
+    }\r
+\r
+    /* PAUSE Frame */\r
+    if (isr & GMAC_ISR_PFNZ) TRACE_INFO("Pause!\n\r");\r
+    if (isr & GMAC_ISR_PTZ)  TRACE_INFO("Pause TO!\n\r");\r
+}\r
+\r
+\r
+/**\r
+ * \brief Initialize the GMAC with the Gmac controller address\r
+ *  \param pGmacd Pointer to GMAC Driver instance. \r
+ *  \param pHw    Pointer to HW address for registers.\r
+ *  \param bID     HW ID for power management\r
+ *  \param enableCAF    Enable/Disable CopyAllFrame.\r
+ *  \param enableNBC    Enable/Disable NoBroadCast.\r
+ */\r
+ void GMACD_Init(sGmacd *pGmacd,\r
+                Gmac *pHw,\r
+                uint8_t bID, \r
+                uint8_t enableCAF, \r
+                uint8_t enableNBC )\r
+{\r
+    uint32_t dwNcfgr;\r
+    \r
+    /* Check parameters */\r
+    assert(GRX_BUFFERS * GMAC_RX_UNITSIZE > GMAC_FRAME_LENTGH_MAX);\r
+\r
+    TRACE_DEBUG("GMAC_Init\n\r");\r
+\r
+    /* Initialize struct */\r
+    pGmacd->pHw = pHw;\r
+    pGmacd->bId = bID;\r
+\r
+    /* Power ON */\r
+    PMC_EnablePeripheral(bID);\r
+\r
+    /* Disable TX & RX and more */\r
+    GMAC_NetworkControl(pHw, 0);\r
+    GMAC_DisableIt(pHw, ~0u);\r
+    \r
+    GMAC_ClearStatistics(pHw);\r
+    /* Clear all status bits in the receive status register. */\r
+    GMAC_ClearRxStatus(pHw, GMAC_RSR_RXOVR | GMAC_RSR_REC | GMAC_RSR_BNA |GMAC_RSR_HNO);\r
+\r
+    /* Clear all status bits in the transmit status register */\r
+    GMAC_ClearTxStatus(pHw, GMAC_TSR_UBR | GMAC_TSR_COL | GMAC_TSR_RLE\r
+                            | GMAC_TSR_TXGO | GMAC_TSR_TFC | GMAC_TSR_TXCOMP\r
+                            | GMAC_TSR_UND | GMAC_TSR_HRESP );\r
+\r
+    /* Clear interrupts */\r
+    GMAC_GetItStatus(pHw);\r
+\r
+    /* Enable the copy of data into the buffers\r
+       ignore broadcasts, and don't copy FCS. */\r
+    dwNcfgr = GMAC_NCFGR_FD | GMAC_NCFGR_DBW_DBW32 | GMAC_NCFGR_CLK_MCK_64;\r
+    if( enableCAF ) {\r
+        dwNcfgr |= GMAC_NCFGR_CAF;\r
+    }\r
+    if( enableNBC ) {\r
+        dwNcfgr |= GMAC_NCFGR_NBC;\r
+    }\r
+    \r
+    GMAC_Configure(pHw, dwNcfgr);\r
+}\r
+\r
+\r
+/**\r
+ * Initialize necessary allocated buffer lists for GMAC Driver to transfer data.\r
+ * Must be invoked after GMACD_Init() but before RX/TX start.\r
+ * \param pGmacd Pointer to GMAC Driver instance.\r
+ * \param pRxBuffer Pointer to allocated buffer for RX. The address should\r
+ *                  be 8-byte aligned and the size should be\r
+ *                  GMAC_RX_UNITSIZE * wRxSize.\r
+ * \param pRxD      Pointer to allocated RX descriptor list.\r
+ * \param wRxSize   RX size, in number of registered units (RX descriptors).\r
+ * \param pTxBuffer Pointer to allocated buffer for TX. The address should\r
+ *                  be 8-byte aligned and the size should be\r
+ *                  GMAC_TX_UNITSIZE * wTxSize.\r
+ * \param pTxD      Pointer to allocated TX descriptor list.\r
+ * \param pTxCb     Pointer to allocated TX callback list.\r
+ * \param wTxSize   TX size, in number of registered units (TX descriptors).\r
+ * \return GMACD_OK or GMACD_PARAM.\r
+ * \note If input address is not 8-byte aligned the address is automatically\r
+ *       adjusted and the list size is reduced by one.\r
+ */\r
+uint8_t GMACD_InitTransfer( sGmacd *pGmacd,\r
+    uint8_t *pRxBuffer, sGmacRxDescriptor *pRxD,\r
+    uint16_t wRxSize,\r
+    uint8_t *pTxBuffer, sGmacTxDescriptor *pTxD, fGmacdTransferCallback *pTxCb,\r
+    uint16_t wTxSize)\r
+{\r
+    Gmac *pHw = pGmacd->pHw;\r
+\r
+    if (wRxSize <= 1 || wTxSize <= 1 || pTxCb == NULL) return GMACD_PARAM;\r
+\r
+    /* Assign RX buffers */\r
+    if (   ((uint32_t)pRxBuffer & 0x7)\r
+        || ((uint32_t)pRxD      & 0x7) )\r
+    {\r
+        wRxSize --;\r
+        TRACE_DEBUG("RX list address adjusted\n\r");\r
+    }\r
+    pGmacd->pRxBuffer = (uint8_t*)((uint32_t)pRxBuffer & 0xFFFFFFF8);\r
+    pGmacd->pRxD = (sGmacRxDescriptor*)((uint32_t)pRxD & 0xFFFFFFF8);\r
+    pGmacd->wRxListSize = wRxSize;\r
+\r
+    /* Assign TX buffers */\r
+    if (   ((uint32_t)pTxBuffer & 0x7)\r
+        || ((uint32_t)pTxD      & 0x7) )\r
+    {\r
+        wTxSize --;\r
+        TRACE_DEBUG("TX list address adjusted\n\r");\r
+    }\r
+    pGmacd->pTxBuffer = (uint8_t*)((uint32_t)pTxBuffer & 0xFFFFFFF8);\r
+    pGmacd->pTxD = (sGmacTxDescriptor*)((uint32_t)pTxD & 0xFFFFFFF8);\r
+    pGmacd->wTxListSize = wTxSize;\r
+    pGmacd->fTxCbList = pTxCb;\r
+\r
+    /* Reset TX & RX */\r
+    GMACD_ResetRx(pGmacd);\r
+    GMACD_ResetTx(pGmacd);\r
+\r
+    /* Enable Rx and Tx, plus the stats register. */\r
+    GMAC_TransmitEnable(pHw, 1);\r
+    GMAC_ReceiveEnable(pHw, 1);\r
+    GMAC_StatisticsWriteEnable(pHw, 1);\r
+\r
+    /* Setup the interrupts for TX (and errors) */\r
+    GMAC_EnableIt(pHw, GMAC_IER_MFS \r
+                      |GMAC_IER_RCOMP\r
+                      |GMAC_IER_RXUBR\r
+                      |GMAC_IER_TXUBR\r
+                      |GMAC_IER_TUR\r
+                      |GMAC_IER_RLEX\r
+                      |GMAC_IER_TFC \r
+                      |GMAC_IER_TCOMP\r
+                      |GMAC_IER_ROVR \r
+                      |GMAC_IER_HRESP\r
+                      |GMAC_IER_PFNZ \r
+                      |GMAC_IER_PTZ \r
+                      |GMAC_IER_PFTR\r
+                      |GMAC_IER_EXINT\r
+                      |GMAC_IER_DRQFR\r
+                      |GMAC_IER_SFR\r
+                      |GMAC_IER_DRQFT\r
+                      |GMAC_IER_SFT\r
+                      |GMAC_IER_PDRQFR\r
+                      |GMAC_IER_PDRSFR\r
+                      |GMAC_IER_PDRQFT\r
+                      |GMAC_IER_PDRSFT);\r
+    //0x03FCFCFF\r
+    return GMACD_OK;\r
+}\r
+\r
+\r
+/**\r
+ * Reset TX & RX queue & statistics\r
+ * \param pGmacd Pointer to GMAC Driver instance.\r
+ */\r
+void GMACD_Reset(sGmacd *pGmacd)\r
+{\r
+    Gmac *pHw = pGmacd->pHw;\r
+\r
+    GMACD_ResetRx(pGmacd);\r
+    GMACD_ResetTx(pGmacd);\r
+    //memset((void*)&GmacStatistics, 0x00, sizeof(GmacStats));\r
+    GMAC_NetworkControl(pHw, GMAC_NCR_TXEN | GMAC_NCR_RXEN\r
+                             | GMAC_NCR_WESTAT | GMAC_NCR_CLRSTAT);\r
+}\r
+\r
+/**\r
+ * \brief Send a packet with GMAC. If the packet size is larger than transfer buffer size \r
+ * error returned. If packet transfer status is monitored, specify callback for each packet.\r
+ *  \param pGmacd Pointer to GMAC Driver instance. \r
+ *  \param buffer   The buffer to be send\r
+ *  \param size     The size of buffer to be send\r
+ *  \param fGMAC_TxCallback Threshold Wakeup callback\r
+ *  \param fWakeUpCb   TX Wakeup\r
+ *  \return         OK, Busy or invalid packet\r
+ */\r
+uint8_t GMACD_Send(sGmacd *pGmacd,\r
+                  void *pBuffer,\r
+                  uint32_t size,\r
+                  fGmacdTransferCallback fTxCb )\r
+{\r
+    Gmac *pHw = pGmacd->pHw;\r
+    sGmacTxDescriptor      *pTxTd;\r
+    volatile fGmacdTransferCallback *pfTxCb;\r
+    \r
+    TRACE_DEBUG("GMAC_Send\n\r");\r
+    /* Check parameter */\r
+    if (size > GMAC_TX_UNITSIZE) {\r
+\r
+        TRACE_ERROR("GMAC driver does not split send packets.");\r
+        return GMACD_PARAM;\r
+    }\r
+\r
+    /* Pointers to the current TxTd */\r
+    pTxTd = &pGmacd->pTxD[pGmacd->wTxHead];\r
+    /* If no free TxTd, buffer can't be sent */\r
+    if( GCIRC_SPACE(pGmacd->wTxHead, pGmacd->wTxTail, pGmacd->wTxListSize) == 0)\r
+        return GMACD_TX_BUSY;\r
+    /* Pointers to the current Tx Callback */\r
+    pfTxCb = &pGmacd->fTxCbList[pGmacd->wTxHead];\r
+    /* Sanity check */\r
+\r
+    /* Setup/Copy data to transmition buffer */\r
+    if (pBuffer && size) {\r
+        // Driver manage the ring buffer\r
+        memcpy((void *)pTxTd->addr, pBuffer, size);\r
+    }\r
+    /* Tx Callback */\r
+    *pfTxCb = fTxCb;\r
+\r
+    /* Update TD status. The buffer size defined is length of ethernet frame\r
+      so it's always the last buffer of the frame. */\r
+    if (pGmacd->wTxHead == pGmacd->wTxListSize-1) {\r
+        pTxTd->status.val = \r
+            (size & GMAC_LENGTH_FRAME) | GMAC_TX_LAST_BUFFER_BIT | GMAC_TX_WRAP_BIT;\r
+    }\r
+    else {\r
+        pTxTd->status.val = (size & GMAC_LENGTH_FRAME) | GMAC_TX_LAST_BUFFER_BIT;\r
+    }\r
+    \r
+    GCIRC_INC(pGmacd->wTxHead, pGmacd->wTxListSize);\r
+    \r
+    //CP15_flush_dcache_for_dma ((uint32_t)(pTxTd), ((uint32_t)(pTxTd) + sizeof(pTxTd)));\r
+    /* Tx packets count */\r
+\r
+    /* Now start to transmit if it is not already done */\r
+    GMAC_TransmissionStart(pHw);\r
+\r
+    return GMACD_OK;\r
+}\r
+\r
+\r
+/**\r
+ * Return current load of TX.\r
+ * \param pGmacd   Pointer to GMAC Driver instance.\r
+ */\r
+uint32_t GMACD_TxLoad(sGmacd *pGmacd)\r
+{\r
+    uint16_t head = pGmacd->wTxHead;\r
+    uint16_t tail = pGmacd->wTxTail;\r
+    return GCIRC_CNT(head, tail, pGmacd->wTxListSize);\r
+}\r
+\r
+/**\r
+ * \brief Receive a packet with GMAC.\r
+ * If not enough buffer for the packet, the remaining data is lost but right\r
+ * frame length is returned.\r
+ *  \param pGmacd Pointer to GMAC Driver instance. \r
+ *  \param pFrame           Buffer to store the frame\r
+ *  \param frameSize        Size of the frame\r
+ *  \param pRcvSize         Received size\r
+ *  \return                 OK, no data, or frame too small\r
+ */\r
+uint8_t GMACD_Poll(sGmacd * pGmacd, \r
+                  uint8_t *pFrame, \r
+                  uint32_t frameSize, \r
+                  uint32_t *pRcvSize)\r
+{\r
+\r
+    uint16_t bufferLength;\r
+    uint32_t   tmpFrameSize = 0;\r
+    uint8_t  *pTmpFrame = 0;\r
+    uint32_t   tmpIdx = pGmacd->wRxI;\r
+    volatile sGmacRxDescriptor *pRxTd = &pGmacd->pRxD[pGmacd->wRxI];\r
+    uint8_t isFrame = 0;\r
+    \r
+    if (pFrame == NULL) return GMACD_PARAM;\r
+\r
+    /* Set the default return value */\r
+    *pRcvSize = 0;\r
+    \r
+    /* Process received RxTd */\r
+    while ((pRxTd->addr.val & GMAC_RX_OWNERSHIP_BIT) == GMAC_RX_OWNERSHIP_BIT)\r
+    {\r
+        /* A start of frame has been received, discard previous fragments */\r
+        if ((pRxTd->status.val & GMAC_RX_SOF_BIT) == GMAC_RX_SOF_BIT)\r
+        {\r
+            /* Skip previous fragment */\r
+            while (tmpIdx != pGmacd->wRxI)\r
+            {\r
+                pRxTd = &pGmacd->pRxD[pGmacd->wRxI];\r
+                pRxTd->addr.val &= ~(GMAC_RX_OWNERSHIP_BIT);\r
+                GCIRC_INC(pGmacd->wRxI, pGmacd->wRxListSize);\r
+            }\r
+            pTmpFrame = pFrame;\r
+            tmpFrameSize = 0;\r
+            /* Start to gather buffers in a frame */\r
+            isFrame = 1;\r
+        }\r
+        /* Increment the pointer */\r
+        GCIRC_INC(tmpIdx, pGmacd->wRxListSize);\r
+        asm("nop");\r
+        /* Copy data in the frame buffer */\r
+        if (isFrame) {\r
+            if (tmpIdx == pGmacd->wRxI)\r
+            {\r
+                TRACE_INFO("no EOF (Invalid of buffers too small)\n\r");\r
+\r
+                do {\r
+                    pRxTd = &pGmacd->pRxD[pGmacd->wRxI];\r
+                    pRxTd->addr.val &= ~(GMAC_RX_OWNERSHIP_BIT);\r
+                    GCIRC_INC(pGmacd->wRxI, pGmacd->wRxListSize);\r
+                } while(tmpIdx != pGmacd->wRxI);\r
+                return GMACD_RX_NULL;\r
+            }\r
+\r
+            /* Copy the buffer into the application frame */\r
+            bufferLength = GMAC_RX_UNITSIZE;\r
+            if ((tmpFrameSize + bufferLength) > frameSize)\r
+            {\r
+                bufferLength = frameSize - tmpFrameSize;\r
+            }\r
+         \r
+            memcpy(pTmpFrame, (void*)(pRxTd->addr.val & GMAC_ADDRESS_MASK), bufferLength);\r
+            pTmpFrame += bufferLength;\r
+            tmpFrameSize += bufferLength;\r
+\r
+            /* An end of frame has been received, return the data */\r
+            if ((pRxTd->status.val & GMAC_RX_EOF_BIT) == GMAC_RX_EOF_BIT)\r
+            {\r
+                /* Frame size from the GMAC */\r
+                *pRcvSize = (pRxTd->status.val & GMAC_LENGTH_FRAME);\r
+\r
+                /* Application frame buffer is too small all data have not been copied */\r
+                if (tmpFrameSize < *pRcvSize) {\r
+                    return GMACD_SIZE_TOO_SMALL;\r
+                }\r
+                TRACE_DEBUG("packet %d-%d (%d)\n\r", pGmacd->wRxI, tmpIdx, *pRcvSize);\r
+                /* All data have been copied in the application frame buffer => release TD */\r
+                while (pGmacd->wRxI != tmpIdx)\r
+                {\r
+                    pRxTd = &pGmacd->pRxD[pGmacd->wRxI];\r
+                    pRxTd->addr.val &= ~(GMAC_RX_OWNERSHIP_BIT);\r
+                    GCIRC_INC(pGmacd->wRxI, pGmacd->wRxListSize);\r
+                }\r
+                return GMACD_OK;\r
+            }\r
+        }\r
+        \r
+        /* SOF has not been detected, skip the fragment */\r
+        else {\r
+           pRxTd->addr.val &= ~(GMAC_RX_OWNERSHIP_BIT);\r
+           pGmacd->wRxI = tmpIdx;\r
+        }\r
+       \r
+        /* Process the next buffer */\r
+        pRxTd = &pGmacd->pRxD[tmpIdx];\r
+    }\r
+    return GMACD_RX_NULL;\r
+}\r
+\r
+/**\r
+ * \brief Registers pRxCb callback. Callback will be invoked after the next received\r
+ * frame. When GMAC_Poll() returns GMAC_RX_NO_DATA the application task call GMAC_Set_RxCb()\r
+ * to register pRxCb() callback and enters suspend state. The callback is in charge \r
+ * to resume the task once a new frame has been received. The next time GMAC_Poll()\r
+ * is called, it will be successfull.\r
+ *  \param pGmacd Pointer to GMAC Driver instance. \r
+ *  \param pRxCb   Pointer to callback function\r
+ *  \return        OK, no data, or frame too small\r
+ */\r
+\r
+void GMACD_SetRxCallback(sGmacd * pGmacd, fGmacdTransferCallback fRxCb)\r
+{\r
+    Gmac *pHw = pGmacd->pHw;\r
+\r
+    if (fRxCb == NULL)\r
+    {\r
+        GMAC_DisableIt(pHw, GMAC_IDR_RCOMP);\r
+        pGmacd->fRxCb = NULL;\r
+    }\r
+    else\r
+    {\r
+        pGmacd->fRxCb = fRxCb;\r
+        GMAC_EnableIt(pHw, GMAC_IER_RCOMP);\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * Register/Clear TX wakeup callback.\r
+ *\r
+ * When GMACD_Send() returns GMACD_TX_BUSY (all TD busy) the application \r
+ * task calls GMACD_SetTxWakeupCallback() to register fWakeup() callback and \r
+ * enters suspend state. The callback is in charge to resume the task once \r
+ * several TD have been released. The next time GMACD_Send() will be called,\r
+ * it shall be successfull.\r
+ *\r
+ * This function is usually invoked with NULL callback from the TX wakeup\r
+ * callback itself, to unregister. Once the callback has resumed the\r
+ * application task, there is no need to invoke the callback again.\r
+ *\r
+ * \param pGmacd   Pointer to GMAC Driver instance.\r
+ * \param fWakeup     Wakeup callback.\r
+ * \param bThreshould Number of free TD before wakeup callback invoked.\r
+ * \return GMACD_OK, GMACD_PARAM on parameter error.\r
+ */\r
+uint8_t GMACD_SetTxWakeupCallback(sGmacd * pGmacd,\r
+                                  fGmacdWakeupCallback fWakeup,\r
+                                  uint8_t bThreshold)\r
+{\r
+    if (fWakeup == NULL)\r
+    {\r
+        pGmacd->fWakupCb = NULL;\r
+    }\r
+    else\r
+    {\r
+        if (bThreshold <= pGmacd->wTxListSize)\r
+        {\r
+            pGmacd->fWakupCb = fWakeup;\r
+            pGmacd->bWakeupThreshold = bThreshold;\r
+        }\r
+        else\r
+        {\r
+            return GMACD_PARAM;\r
+        }\r
+    }\r
+\r
+    return GMACD_OK;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/hamming.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/hamming.c
new file mode 100644 (file)
index 0000000..0461de1
--- /dev/null
@@ -0,0 +1,338 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Internal function\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  Counts and return the number of bits set to '1' in the given byte.\r
+ *  \param byte  Byte to count.\r
+ */\r
+static uint8_t CountBitsInByte(uint8_t byte)\r
+{\r
+    uint8_t count = 0;\r
+\r
+    while (byte > 0)\r
+    {\r
+        if (byte & 1)\r
+        {\r
+            count++;\r
+        }\r
+        byte >>= 1;\r
+    }\r
+\r
+    return count;\r
+}\r
+\r
+/**\r
+ *  Counts and return the number of bits set to '1' in the given hamming code.\r
+ *  \param code  Hamming code.\r
+ */\r
+static uint8_t CountBitsInCode256(uint8_t *code)\r
+{\r
+    return CountBitsInByte(code[0]) + CountBitsInByte(code[1]) + CountBitsInByte(code[2]);\r
+}\r
+\r
+/**\r
+ *  Calculates the 22-bit hamming code for a 256-bytes block of data.\r
+ *  \param data  Data buffer to calculate code for.\r
+ *  \param code  Pointer to a buffer where the code should be stored.\r
+ */\r
+static void Compute256(const uint8_t *data, uint8_t *code)\r
+{\r
+    uint32_t i;\r
+    uint8_t columnSum = 0;\r
+    uint8_t evenLineCode = 0;\r
+    uint8_t oddLineCode = 0;\r
+    uint8_t evenColumnCode = 0;\r
+    uint8_t oddColumnCode = 0;\r
+\r
+    // Xor all bytes together to get the column sum;\r
+    // At the same time, calculate the even and odd line codes\r
+    for (i=0; i < 256; i++)\r
+    {\r
+        columnSum ^= data[i];\r
+\r
+        // If the xor sum of the byte is 0, then this byte has no incidence on\r
+        // the computed code; so check if the sum is 1.\r
+        if ((CountBitsInByte(data[i]) & 1) == 1)\r
+        {\r
+            // Parity groups are formed by forcing a particular index bit to 0\r
+            // (even) or 1 (odd).\r
+            // Example on one byte:\r
+            //\r
+            // bits (dec)  7   6   5   4   3   2   1   0\r
+            //      (bin) 111 110 101 100 011 010 001 000\r
+            //                            '---'---'---'----------.\r
+            //                                                   |\r
+            // groups P4' ooooooooooooooo eeeeeeeeeeeeeee P4     |\r
+            //        P2' ooooooo eeeeeee ooooooo eeeeeee P2     |\r
+            //        P1' ooo eee ooo eee ooo eee ooo eee P1     |\r
+            //                                                   |\r
+            // We can see that:                                  |\r
+            //  - P4  -> bit 2 of index is 0 --------------------'\r
+            //  - P4' -> bit 2 of index is 1.\r
+            //  - P2  -> bit 1 of index if 0.\r
+            //  - etc...\r
+            // We deduce that a bit position has an impact on all even Px if\r
+            // the log2(x)nth bit of its index is 0\r
+            //     ex: log2(4) = 2, bit2 of the index must be 0 (-> 0 1 2 3)\r
+            // and on all odd Px' if the log2(x)nth bit of its index is 1\r
+            //     ex: log2(2) = 1, bit1 of the index must be 1 (-> 0 1 4 5)\r
+            //\r
+            // As such, we calculate all the possible Px and Px' values at the\r
+            // same time in two variables, evenLineCode and oddLineCode, such as\r
+            //     evenLineCode bits: P128  P64  P32  P16  P8  P4  P2  P1\r
+            //     oddLineCode  bits: P128' P64' P32' P16' P8' P4' P2' P1'\r
+            //\r
+            evenLineCode ^= (255 - i);\r
+            oddLineCode ^= i;\r
+        }\r
+    }\r
+\r
+    // At this point, we have the line parities, and the column sum. First, We\r
+    // must caculate the parity group values on the column sum.\r
+    for (i=0; i < 8; i++)\r
+    {\r
+        if (columnSum & 1)\r
+        {\r
+            evenColumnCode ^= (7 - i);\r
+            oddColumnCode ^= i;\r
+        }\r
+        columnSum >>= 1;\r
+    }\r
+\r
+    // Now, we must interleave the parity values, to obtain the following layout:\r
+    // Code[0] = Line1\r
+    // Code[1] = Line2\r
+    // Code[2] = Column\r
+    // Line = Px' Px P(x-1)- P(x-1) ...\r
+    // Column = P4' P4 P2' P2 P1' P1 PadBit PadBit\r
+    code[0] = 0;\r
+    code[1] = 0;\r
+    code[2] = 0;\r
+\r
+    for (i=0; i < 4; i++)\r
+    {\r
+        code[0] <<= 2;\r
+        code[1] <<= 2;\r
+        code[2] <<= 2;\r
+\r
+        // Line 1\r
+        if ((oddLineCode & 0x80) != 0)\r
+        {\r
+            code[0] |= 2;\r
+        }\r
+\r
+        if ((evenLineCode & 0x80) != 0)\r
+        {\r
+            code[0] |= 1;\r
+        }\r
+\r
+        // Line 2\r
+        if ((oddLineCode & 0x08) != 0)\r
+        {\r
+            code[1] |= 2;\r
+        }\r
+\r
+        if ((evenLineCode & 0x08) != 0)\r
+        {\r
+            code[1] |= 1;\r
+        }\r
+\r
+        // Column\r
+        if ((oddColumnCode & 0x04) != 0)\r
+        {\r
+            code[2] |= 2;\r
+        }\r
+\r
+        if ((evenColumnCode & 0x04) != 0)\r
+        {\r
+            code[2] |= 1;\r
+        }\r
+\r
+        oddLineCode <<= 1;\r
+        evenLineCode <<= 1;\r
+        oddColumnCode <<= 1;\r
+        evenColumnCode <<= 1;\r
+    }\r
+\r
+    // Invert codes (linux compatibility)\r
+    code[0] = (~(uint32_t)code[0]);\r
+    code[1] = (~(uint32_t)code[1]);\r
+    code[2] = (~(uint32_t)code[2]);\r
+\r
+    TRACE_DEBUG("Computed code = %02X %02X %02X\n\r",\r
+              code[0], code[1], code[2]);\r
+}\r
+\r
+/**\r
+ *  Verifies and corrects a 256-bytes block of data using the given 22-bits\r
+ *  hamming code.\r
+ *\r
+ *  \param data  Data buffer to check.\r
+ *  \param originalCode  Hamming code to use for verifying the data.\r
+ *\r
+ *  \return 0 if there is no error, otherwise returns a HAMMING_ERROR code.\r
+ */\r
+static uint8_t Verify256( uint8_t* pucData, const uint8_t* pucOriginalCode )\r
+{\r
+    /* Calculate new code */\r
+    uint8_t computedCode[3] ;\r
+    uint8_t correctionCode[3] ;\r
+\r
+    Compute256( pucData, computedCode ) ;\r
+\r
+    /* Xor both codes together */\r
+    correctionCode[0] = computedCode[0] ^ pucOriginalCode[0] ;\r
+    correctionCode[1] = computedCode[1] ^ pucOriginalCode[1] ;\r
+    correctionCode[2] = computedCode[2] ^ pucOriginalCode[2] ;\r
+\r
+    TRACE_DEBUG( "Correction code = %02X %02X %02X\n\r", correctionCode[0], correctionCode[1], correctionCode[2] ) ;\r
+\r
+    // If all bytes are 0, there is no error\r
+    if ( (correctionCode[0] == 0) && (correctionCode[1] == 0) && (correctionCode[2] == 0) )\r
+    {\r
+        return 0 ;\r
+    }\r
+\r
+    /* If there is a single bit error, there are 11 bits set to 1 */\r
+    if ( CountBitsInCode256( correctionCode ) == 11 )\r
+    {\r
+        // Get byte and bit indexes\r
+        uint8_t byte = correctionCode[0] & 0x80;\r
+        byte |= (correctionCode[0] << 1) & 0x40;\r
+        byte |= (correctionCode[0] << 2) & 0x20;\r
+        byte |= (correctionCode[0] << 3) & 0x10;\r
+\r
+        byte |= (correctionCode[1] >> 4) & 0x08;\r
+        byte |= (correctionCode[1] >> 3) & 0x04;\r
+        byte |= (correctionCode[1] >> 2) & 0x02;\r
+        byte |= (correctionCode[1] >> 1) & 0x01;\r
+\r
+        uint8_t bit = (correctionCode[2] >> 5) & 0x04;\r
+        bit |= (correctionCode[2] >> 4) & 0x02;\r
+        bit |= (correctionCode[2] >> 3) & 0x01;\r
+\r
+        /* Correct bit */\r
+        printf("Correcting byte #%d at bit %d\n\r", byte, bit ) ;\r
+        pucData[byte] ^= (1 << bit) ;\r
+\r
+        return Hamming_ERROR_SINGLEBIT ;\r
+    }\r
+\r
+    /* Check if ECC has been corrupted */\r
+    if ( CountBitsInCode256( correctionCode ) == 1 )\r
+    {\r
+        return Hamming_ERROR_ECC ;\r
+    }\r
+    /* Otherwise, this is a multi-bit error */\r
+    else\r
+    {\r
+        return Hamming_ERROR_MULTIPLEBITS ;\r
+    }\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  Computes 3-bytes hamming codes for a data block whose size is multiple of\r
+ *  256 bytes. Each 256 bytes block gets its own code.\r
+ *  \param data  Data to compute code for.\r
+ *  \param size  Data size in bytes.\r
+ *  \param code  Codes buffer.\r
+ */\r
+void Hamming_Compute256x( const uint8_t *pucData, uint32_t dwSize, uint8_t* puCode )\r
+{\r
+    TRACE_DEBUG("Hamming_Compute256x()\n\r");\r
+\r
+    while ( dwSize > 0 )\r
+    {\r
+        Compute256( pucData, puCode ) ;\r
+\r
+        pucData += 256;\r
+        puCode += 3;\r
+        dwSize -= 256;\r
+    }\r
+}\r
+\r
+/**\r
+ *  Verifies 3-bytes hamming codes for a data block whose size is multiple of\r
+ *  256 bytes. Each 256-bytes block is verified with its own code.\r
+ *\r
+ *  \return 0 if the data is correct, Hamming_ERROR_SINGLEBIT if one or more\r
+ *  block(s) have had a single bit corrected, or either Hamming_ERROR_ECC\r
+ *  or Hamming_ERROR_MULTIPLEBITS.\r
+ *\r
+ *  \param data  Data buffer to verify.\r
+ *  \param size  Size of the data in bytes.\r
+ *  \param code  Original codes.\r
+ */\r
+uint8_t Hamming_Verify256x( uint8_t* pucData, uint32_t dwSize, const uint8_t* pucCode )\r
+{\r
+    uint8_t error ;\r
+    uint8_t result = 0 ;\r
+\r
+    TRACE_DEBUG( "Hamming_Verify256x()\n\r" ) ;\r
+\r
+    while ( dwSize > 0 )\r
+    {\r
+        error = Verify256( pucData, pucCode ) ;\r
+\r
+        if ( error == Hamming_ERROR_SINGLEBIT )\r
+        {\r
+            result = Hamming_ERROR_SINGLEBIT ;\r
+        }\r
+        else\r
+        {\r
+            if ( error )\r
+            {\r
+                return error ;\r
+            }\r
+        }\r
+\r
+        pucData += 256;\r
+        pucCode += 3;\r
+        dwSize -= 256;\r
+    }\r
+\r
+    return result ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/iso7816_4.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/iso7816_4.c
new file mode 100644 (file)
index 0000000..4d5f737
--- /dev/null
@@ -0,0 +1,614 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * \section Purpose\r
+ *\r
+ * ISO 7816 driver\r
+ *\r
+ * \section Usage\r
+ *\r
+ * Explanation on the usage of the code made available through the header file.\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Definitions\r
+ *------------------------------------------------------------------------------*/\r
+/** Case for APDU commands*/\r
+#define CASE1  1\r
+#define CASE2  2\r
+#define CASE3  3\r
+\r
+/** Flip flop for send and receive char */\r
+#define USART_SEND 0\r
+#define USART_RCV  1\r
+\r
+#if !defined(BOARD_ISO7816_BASE_USART)\r
+  #define BOARD_ISO7816_BASE_USART USART1\r
+  #define BOARD_ISO7816_ID_USART   ID_USART1\r
+#endif\r
+\r
+/*-----------------------------------------------------------------------------\r
+ *          Internal variables\r
+ *-----------------------------------------------------------------------------*/\r
+/** Variable for state of send and receive froom USART */\r
+static uint8_t StateUsartGlobal = USART_RCV;\r
+/** Pin reset master card */\r
+static Pin st_pinIso7816RstMC;\r
+static uint32_t maxMck;\r
+/*----------------------------------------------------------------------------\r
+ *          Internal functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Get a character from ISO7816\r
+ * \param pCharToReceive Pointer for store the received char\r
+ * \return 0: if timeout else status of US_CSR\r
+ */\r
+static uint32_t ISO7816_GetChar( uint8_t *pCharToReceive )\r
+{\r
+    uint32_t status;\r
+    uint32_t timeout=0;\r
+\r
+    if( StateUsartGlobal == USART_SEND ) {\r
+        while((BOARD_ISO7816_BASE_USART->US_CSR & US_CSR_TXEMPTY) == 0) {}\r
+        BOARD_ISO7816_BASE_USART->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;\r
+        StateUsartGlobal = USART_RCV;\r
+    }\r
+\r
+    /* Wait USART ready for reception */\r
+    while( ((BOARD_ISO7816_BASE_USART->US_CSR & US_CSR_RXRDY) == 0) ) {\r
+        if(timeout++ > 12000 * (BOARD_MCK/1000000)) {\r
+            TRACE_DEBUG("TimeOut\n\r");\r
+            return( 0 );\r
+        }\r
+    }\r
+\r
+    TRACE_DEBUG("T: %u\n\r", timeout);\r
+\r
+\r
+    /* At least one complete character has been received and US_RHR has not yet been read. */\r
+\r
+    /* Get a char */\r
+    *pCharToReceive = ((BOARD_ISO7816_BASE_USART->US_RHR) & 0xFF);\r
+\r
+    status = (BOARD_ISO7816_BASE_USART->US_CSR&(US_CSR_OVRE|US_CSR_FRAME|\r
+                                      US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|\r
+                                      (1<<10)));\r
+\r
+    if (status != 0 ) {\r
+       /* TRACE_DEBUG("R:0x%X\n\r", status); */\r
+        TRACE_DEBUG("R:0x%X\n\r", BOARD_ISO7816_BASE_USART->US_CSR);\r
+        TRACE_DEBUG("Nb:0x%X\n\r", BOARD_ISO7816_BASE_USART->US_NER );\r
+        BOARD_ISO7816_BASE_USART->US_CR = US_CR_RSTSTA;\r
+    }\r
+\r
+    /* Return status */\r
+    return( status );\r
+}\r
+\r
+\r
+/**\r
+ * Send a char to ISO7816\r
+ * \param CharToSend char to be send\r
+ * \return status of US_CSR\r
+ */\r
+static uint32_t ISO7816_SendChar( uint8_t CharToSend )\r
+{\r
+    uint32_t status;\r
+\r
+    if( StateUsartGlobal == USART_RCV ) {\r
+        BOARD_ISO7816_BASE_USART->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;\r
+        StateUsartGlobal = USART_SEND;\r
+    }\r
+\r
+    /* Wait USART ready for transmit */\r
+    while((BOARD_ISO7816_BASE_USART->US_CSR & US_CSR_TXRDY) == 0)  {}\r
+    /* There is no character in the US_THR */\r
+\r
+    /* Transmit a char */\r
+    BOARD_ISO7816_BASE_USART->US_THR = CharToSend;\r
+\r
+    status = (BOARD_ISO7816_BASE_USART->US_CSR&(US_CSR_OVRE|US_CSR_FRAME|\r
+                                      US_CSR_PARE|US_CSR_TIMEOUT|US_CSR_NACK|\r
+                                      (1<<10)));\r
+\r
+    if (status != 0 ) {\r
+        TRACE_DEBUG("E:0x%X\n\r", BOARD_ISO7816_BASE_USART->US_CSR);\r
+        TRACE_DEBUG("Nb:0x%X\n\r", BOARD_ISO7816_BASE_USART->US_NER );\r
+        BOARD_ISO7816_BASE_USART->US_CR = US_CR_RSTSTA;\r
+    }\r
+\r
+    /* Return status */\r
+    return( status );\r
+}\r
+\r
+\r
+/**\r
+ *  Iso 7816 ICC power on\r
+ */\r
+static void ISO7816_IccPowerOn( void )\r
+{\r
+    /* Set RESET Master Card */\r
+    PIO_Set(&st_pinIso7816RstMC);\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *          Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  Iso 7816 ICC power off\r
+ */\r
+void ISO7816_IccPowerOff( void )\r
+{\r
+    /* Clear RESET Master Card */\r
+    PIO_Clear(&st_pinIso7816RstMC);\r
+}\r
+\r
+/**\r
+ * Transfert Block TPDU T=0\r
+ * \param pAPDU    APDU buffer\r
+ * \param pMessage Message buffer\r
+ * \param wLength  Block length\r
+ * \return         Message index\r
+ */\r
+uint16_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,\r
+                                       uint8_t *pMessage,\r
+                                       uint16_t wLength )\r
+{\r
+    uint16_t NeNc;\r
+    uint16_t indexApdu = 4;\r
+    uint16_t indexMessage = 0;\r
+    uint8_t SW1 = 0;\r
+    uint8_t procByte;\r
+    uint8_t cmdCase;\r
+    uint8_t ins;\r
+\r
+    TRACE_DEBUG("pAPDU[0]=0x%X\n\r",pAPDU[0]);\r
+    TRACE_DEBUG("pAPDU[1]=0x%X\n\r",pAPDU[1]);\r
+    TRACE_DEBUG("pAPDU[2]=0x%X\n\r",pAPDU[2]);\r
+    TRACE_DEBUG("pAPDU[3]=0x%X\n\r",pAPDU[3]);\r
+    TRACE_DEBUG("pAPDU[4]=0x%X\n\r",pAPDU[4]);\r
+    TRACE_DEBUG("pAPDU[5]=0x%X\n\r",pAPDU[5]);\r
+    TRACE_DEBUG("wlength=%d\n\r",wLength);\r
+\r
+    ISO7816_SendChar( pAPDU[0] ); /* CLA */\r
+    ISO7816_SendChar( pAPDU[1] ); /* INS */\r
+    ISO7816_SendChar( pAPDU[2] ); /* P1 */\r
+    ISO7816_SendChar( pAPDU[3] ); /* P2 */\r
+    ISO7816_SendChar( pAPDU[4] ); /* P3 */\r
+\r
+    /* Handle the four structures of command APDU */\r
+    indexApdu = 4;\r
+\r
+    if( wLength == 4 ) {\r
+        cmdCase = CASE1;\r
+        NeNc = 0;\r
+    }\r
+    else if( wLength == 5) {\r
+        cmdCase = CASE2;\r
+        NeNc = pAPDU[4]; /* C5 */\r
+        if (NeNc == 0) {\r
+            NeNc = 256;\r
+        }\r
+    }\r
+    else if( wLength == 6) {\r
+        NeNc = pAPDU[4]; /* C5 */\r
+        cmdCase = CASE3;\r
+    }\r
+    else if( wLength == 7) {\r
+        NeNc = pAPDU[4]; /* C5 */\r
+        if( NeNc == 0 ) {\r
+            cmdCase = CASE2;\r
+            NeNc = (pAPDU[5]<<8)+pAPDU[6];\r
+        }\r
+        else {\r
+            cmdCase = CASE3;\r
+        }\r
+    }\r
+    else {\r
+        NeNc = pAPDU[4]; /* C5 */\r
+        if( NeNc == 0 ) {\r
+            cmdCase = CASE3;\r
+            NeNc = (pAPDU[5]<<8)+pAPDU[6];\r
+        }\r
+        else {\r
+            cmdCase = CASE3;\r
+        }\r
+    }\r
+\r
+    TRACE_DEBUG("CASE=0x%X NeNc=0x%X\n\r", cmdCase, NeNc);\r
+\r
+    /* Handle Procedure Bytes */\r
+    do {\r
+        ISO7816_GetChar(&procByte);\r
+        ins = procByte ^ 0xff;\r
+        /* Handle NULL */\r
+        if ( procByte == ISO_NULL_VAL ) {\r
+            TRACE_DEBUG("INS\n\r");\r
+            continue;\r
+        }\r
+        /* Handle SW1 */\r
+        else if ( ((procByte & 0xF0) ==0x60) || ((procByte & 0xF0) ==0x90) ) {\r
+            TRACE_DEBUG("SW1\n\r");\r
+            SW1 = 1;\r
+        }\r
+        /* Handle INS */\r
+        else if ( pAPDU[1] == procByte) {\r
+            TRACE_DEBUG("HdlINS\n\r");\r
+            if (cmdCase == CASE2) {\r
+                /* receive data from card */\r
+                do {\r
+                    ISO7816_GetChar(&pMessage[indexMessage++]);\r
+                } while( 0 != --NeNc );\r
+            }\r
+            else {\r
+                 /* Send data */\r
+                do {\r
+                    ISO7816_SendChar(pAPDU[indexApdu++]);\r
+                } while( 0 != --NeNc );\r
+            }\r
+        }\r
+        /* Handle INS ^ 0xff */\r
+        else if ( pAPDU[1] == ins) {\r
+            TRACE_DEBUG("HdlINS+\n\r");\r
+            if (cmdCase == CASE2) {\r
+                /* receive data from card */\r
+                ISO7816_GetChar(&pMessage[indexMessage++]);\r
+            }\r
+            else {\r
+                ISO7816_SendChar(pAPDU[indexApdu++]);\r
+            }\r
+            NeNc--;\r
+        }\r
+        else {\r
+            /* ?? */\r
+            TRACE_DEBUG("procByte=0x%X\n\r", procByte);\r
+            break;\r
+        }\r
+    } while (NeNc != 0);\r
+\r
+    /* Status Bytes */\r
+    if (SW1 == 0) {\r
+        ISO7816_GetChar(&pMessage[indexMessage++]); /* SW1 */\r
+    }\r
+    else {\r
+        pMessage[indexMessage++] = procByte;\r
+    }\r
+    ISO7816_GetChar(&pMessage[indexMessage++]); /* SW2 */\r
+\r
+    return( indexMessage );\r
+\r
+}\r
+\r
+/**\r
+ *  Escape ISO7816\r
+ */\r
+void ISO7816_Escape( void )\r
+{\r
+    TRACE_DEBUG("For user, if needed\n\r");\r
+}\r
+\r
+/**\r
+ *  Restart clock ISO7816\r
+ */\r
+void ISO7816_RestartClock( void )\r
+{\r
+    TRACE_DEBUG("ISO7816_RestartClock\n\r");\r
+    BOARD_ISO7816_BASE_USART->US_BRGR = 13;\r
+}\r
+\r
+/**\r
+ *  Stop clock ISO7816\r
+ */\r
+void ISO7816_StopClock( void )\r
+{\r
+    TRACE_DEBUG("ISO7816_StopClock\n\r");\r
+    BOARD_ISO7816_BASE_USART->US_BRGR = 0;\r
+}\r
+\r
+/**\r
+ *  T0 APDU\r
+ */\r
+void ISO7816_toAPDU( void )\r
+{\r
+    TRACE_DEBUG("ISO7816_toAPDU\n\r");\r
+    TRACE_DEBUG("Not supported at this time\n\r");\r
+}\r
+\r
+/**\r
+ * Answer To Reset (ATR)\r
+ * \param pAtr    ATR buffer\r
+ * \param pLength Pointer for store the ATR length\r
+ */\r
+void ISO7816_Datablock_ATR( uint8_t* pAtr, uint8_t* pLength )\r
+{\r
+    uint32_t i;\r
+    uint32_t j;\r
+    uint32_t y;\r
+\r
+    *pLength = 0;\r
+\r
+    /* Read ATR TS */\r
+    ISO7816_GetChar(&pAtr[0]);\r
+    /* Read ATR T0 */\r
+    ISO7816_GetChar(&pAtr[1]);\r
+    y = pAtr[1] & 0xF0;\r
+    i = 2;\r
+\r
+    /* Read ATR Ti */\r
+    while (y) {\r
+\r
+        if (y & 0x10) {  /* TA[i] */\r
+            ISO7816_GetChar(&pAtr[i++]);\r
+        }\r
+        if (y & 0x20) {  /* TB[i] */\r
+            ISO7816_GetChar(&pAtr[i++]);\r
+        }\r
+        if (y & 0x40) {  /* TC[i] */\r
+            ISO7816_GetChar(&pAtr[i++]);\r
+        }\r
+        if (y & 0x80) {  /* TD[i] */\r
+            ISO7816_GetChar(&pAtr[i]);\r
+            y =  pAtr[i++] & 0xF0;\r
+        }\r
+        else {\r
+            y = 0;\r
+        }\r
+    }\r
+\r
+    /* Historical Bytes */\r
+    y = pAtr[1] & 0x0F;\r
+    for( j=0; j < y; j++ ) {\r
+        ISO7816_GetChar(&pAtr[i++]);\r
+    }\r
+\r
+    *pLength = i;\r
+\r
+}\r
+\r
+/**\r
+ * Set data rate and clock frequency\r
+ * \param dwClockFrequency ICC clock frequency in KHz.\r
+ * \param dwDataRate       ICC data rate in bpd\r
+ */\r
+void ISO7816_SetDataRateandClockFrequency( uint32_t dwClockFrequency, uint32_t dwDataRate )\r
+{\r
+    uint8_t ClockFrequency;\r
+\r
+    /* Define the baud rate divisor register */\r
+    /* CD  = MCK / SCK */\r
+    /* SCK = FIDI x BAUD = 372 x 9600 */\r
+    /* BOARD_MCK */\r
+    /* CD = MCK/(FIDI x BAUD) = 48000000 / (372x9600) = 13 */\r
+    BOARD_ISO7816_BASE_USART->US_BRGR = maxMck / (dwClockFrequency*1000);\r
+\r
+    ClockFrequency = maxMck / BOARD_ISO7816_BASE_USART->US_BRGR;\r
+\r
+    BOARD_ISO7816_BASE_USART->US_FIDI = (ClockFrequency)/dwDataRate;\r
+\r
+}\r
+\r
+/**\r
+ * Pin status for ISO7816 RESET\r
+ * \return 1 if the Pin RstMC is high; otherwise 0.\r
+ */\r
+uint8_t ISO7816_StatusReset( void )\r
+{\r
+    return PIO_Get(&st_pinIso7816RstMC);\r
+}\r
+\r
+/**\r
+ *  cold reset\r
+ */\r
+void ISO7816_cold_reset( void )\r
+{\r
+    volatile uint32_t i;\r
+\r
+    /* tb: wait 400 cycles*/\r
+    for( i=0; i<(120*(BOARD_MCK/1000000)); i++ ) {\r
+    }\r
+\r
+    BOARD_ISO7816_BASE_USART->US_RHR;\r
+    BOARD_ISO7816_BASE_USART->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;\r
+\r
+    ISO7816_IccPowerOn();\r
+}\r
+\r
+/**\r
+ *  Warm reset\r
+ */\r
+void ISO7816_warm_reset( void )\r
+{\r
+    volatile uint32_t i;\r
+\r
+    ISO7816_IccPowerOff();\r
+\r
+    /* tb: wait 400 cycles */\r
+    for( i=0; i<(120*(BOARD_MCK/1000000)); i++ ) {\r
+    }\r
+\r
+    BOARD_ISO7816_BASE_USART->US_RHR;\r
+    BOARD_ISO7816_BASE_USART->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;\r
+\r
+    ISO7816_IccPowerOn();\r
+}\r
+\r
+/**\r
+ * Decode ATR trace\r
+ * \param pAtr pointer on ATR buffer\r
+ */\r
+void ISO7816_Decode_ATR( uint8_t* pAtr )\r
+{\r
+    uint32_t i;\r
+    uint32_t j;\r
+    uint32_t y;\r
+    uint8_t offset;\r
+\r
+    printf("\n\r");\r
+    printf("ATR: Answer To Reset:\n\r");\r
+    printf("TS = 0x%X Initial character ",pAtr[0]);\r
+    if( pAtr[0] == 0x3B ) {\r
+\r
+        printf("Direct Convention\n\r");\r
+    }\r
+    else {\r
+        if( pAtr[0] == 0x3F ) {\r
+\r
+            printf("Inverse Convention\n\r");\r
+        }\r
+        else {\r
+            printf("BAD Convention\n\r");\r
+        }\r
+    }\r
+\r
+    printf("T0 = 0x%X Format caracter\n\r",pAtr[1]);\r
+    printf("    Number of historical bytes: K = %d\n\r", pAtr[1]&0x0F);\r
+    printf("    Presence further interface byte:\n\r");\r
+    if( pAtr[1]&0x80 ) {\r
+        printf("TA ");\r
+    }\r
+    if( pAtr[1]&0x40 ) {\r
+        printf("TB ");\r
+    }\r
+    if( pAtr[1]&0x20 ) {\r
+        printf("TC ");\r
+    }\r
+    if( pAtr[1]&0x10 ) {\r
+        printf("TD ");\r
+    }\r
+    if( pAtr[1] != 0 ) {\r
+        printf(" present\n\r");\r
+    }\r
+\r
+    i = 2;\r
+    y = pAtr[1] & 0xF0;\r
+\r
+    /* Read ATR Ti */\r
+    offset = 1;\r
+    while (y) {\r
+\r
+        if (y & 0x10) {  /* TA[i] */\r
+            printf("TA[%d] = 0x%X ", offset, pAtr[i]);\r
+            if( offset == 1 ) {\r
+                printf("FI = %d ", (pAtr[i]>>8));\r
+                printf("DI = %d", (pAtr[i]&0x0F));\r
+            }\r
+            printf("\n\r");\r
+            i++;\r
+        }\r
+        if (y & 0x20) {  /* TB[i] */\r
+            printf("TB[%d] = 0x%X\n\r", offset, pAtr[i]);\r
+            i++;\r
+        }\r
+        if (y & 0x40) {  /* TC[i] */\r
+            printf("TC[%d] = 0x%X ", offset, pAtr[i]);\r
+            if( offset == 1 ) {\r
+                printf("Extra Guard Time: N = %d", pAtr[i]);\r
+            }\r
+            printf("\n\r");\r
+            i++;\r
+        }\r
+        if (y & 0x80) {  /* TD[i] */\r
+            printf("TD[%d] = 0x%X\n\r", offset, pAtr[i]);\r
+            y =  pAtr[i++] & 0xF0;\r
+        }\r
+        else {\r
+            y = 0;\r
+        }\r
+        offset++;\r
+    }\r
+\r
+    /* Historical Bytes */\r
+    printf("Historical bytes:\n\r");\r
+    y = pAtr[1] & 0x0F;\r
+    for( j=0; j < y; j++ ) {\r
+\r
+        printf(" 0x%X", pAtr[i]);\r
+        if( (pAtr[i] > 0x21) && (pAtr[i] < 0x7D) ) {  /* ASCII */\r
+            printf("(%c) ", pAtr[i]);\r
+        }\r
+        i++;\r
+    }\r
+    printf("\n\r\n\r");\r
+\r
+}\r
+\r
+/** Initializes a ISO driver\r
+ *  \param pPinIso7816RstMC Pin ISO 7816 Rst MC\r
+ */\r
+void ISO7816_Init( const Pin pPinIso7816RstMC )\r
+{\r
+    TRACE_DEBUG("ISO_Init\n\r");\r
+\r
+    /* Pin ISO7816 initialize */\r
+    st_pinIso7816RstMC  = pPinIso7816RstMC;\r
+\r
+    USART_Configure( BOARD_ISO7816_BASE_USART,\r
+                     US_MR_USART_MODE_IS07816_T_0\r
+                     | US_MR_USCLKS_MCK\r
+                     | US_MR_NBSTOP_1_BIT\r
+                     | US_MR_PAR_EVEN\r
+                     | US_MR_CHRL_8_BIT\r
+                     | US_MR_CLKO\r
+                     | (3<<24), /* MAX_ITERATION */\r
+                     1,\r
+                     0);\r
+\r
+    /* Configure USART */\r
+    //PMC_EnablePeripheral(BOARD_ISO7816_ID_USART);\r
+    maxMck = PMC_SetPeriMaxClock(BOARD_ISO7816_ID_USART, BOARD_MCK);\r
+    /* Disable interrupts */\r
+    BOARD_ISO7816_BASE_USART->US_IDR = (uint32_t) -1;\r
+\r
+    BOARD_ISO7816_BASE_USART->US_FIDI = 372;  /* by default */\r
+    /* Define the baud rate divisor register */\r
+    /* CD  = MCK / SCK */\r
+    /* SCK = FIDI x BAUD = 372 x 9600 */\r
+    /* BOARD_MCK */\r
+    /* CD = MCK/(FIDI x BAUD) = 48000000 / (372x9600) = 13 */\r
+    BOARD_ISO7816_BASE_USART->US_BRGR = maxMck / (372*9600);\r
+\r
+    /* Write the Timeguard Register */\r
+    BOARD_ISO7816_BASE_USART->US_TTGR = 5;\r
+\r
+    USART_SetTransmitterEnabled(BOARD_ISO7816_BASE_USART, 1);\r
+    USART_SetReceiverEnabled(BOARD_ISO7816_BASE_USART, 1);\r
+\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_draw.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_draw.c
new file mode 100644 (file)
index 0000000..266277c
--- /dev/null
@@ -0,0 +1,635 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup lcdd_draw\r
+ *\r
+ * Implementation of draw function on LCD, Include draw text, image\r
+ * and basic shapes (line, rectangle, circle).\r
+ *\r
+ */\r
\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+#include <stdint.h>\r
+#include <string.h>\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local variable\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Front color cache */\r
+static uint32_t dwFrontColor;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Hide canvas layer\r
+ */\r
+static void _HideCanvas(void)\r
+{\r
+    //LCDD_EnableLayer(LCDD_GetCanvas()->bLayer, 0);\r
+}\r
+\r
+/**\r
+ * Update canvas\r
+ */\r
+static void _ShowCanvas(void)\r
+{\r
+    //LCDD_EnableLayer(LCDD_GetCanvas()->bLayer, 1);\r
+}\r
+\r
+/**\r
+ * Set front color\r
+ * \param dwColor Pixel color.\r
+ */\r
+static void _SetFrontColor(uint32_t dwColor)\r
+{\r
+    dwFrontColor = dwColor;\r
+}\r
+\r
+/**\r
+ * \brief Draw a pixel on LCD of front color.\r
+ *\r
+ * \param dwX       X-coordinate of pixel.\r
+ * \param dwY       Y-coordinate of pixel.\r
+ */\r
+static void _DrawPixel( uint32_t dwX, uint32_t dwY )\r
+{\r
+    sLCDDLayer *pDisp = LCDD_GetCanvas();\r
+    uint8_t* buffer = pDisp->pBuffer;\r
+    uint16_t w = pDisp->wImgW;\r
+    //uint16_t h = pDisp->wImgH;\r
+    uint16_t cw = pDisp->bMode/8; /* color width */\r
+    uint32_t rw = w * cw;         /* row width in bytes */\r
+    //uint8_t  r, g, b;\r
+    uint8_t  *pPix;\r
+\r
+    if (buffer == NULL)\r
+        return;\r
+\r
+    if (rw & 0x3) rw = (rw | 0x3) + 1; /* 4-byte aligned rows */\r
+    pPix = &buffer[dwY * rw + cw * dwX];\r
+\r
+    switch (pDisp->bMode)\r
+    {\r
+        case 16: /* TRGB 1555 */\r
+            pPix[0] = (dwFrontColor      ) & 0xFF;\r
+            pPix[1] = (dwFrontColor >>  8) & 0xFF;\r
+            break;\r
+        case 24: /*  RGB  888 */\r
+            pPix[0] = (dwFrontColor      ) & 0xFF;\r
+            pPix[1] = (dwFrontColor >>  8) & 0xFF;\r
+            pPix[2] = (dwFrontColor >> 16) & 0xFF;\r
+            break;\r
+        case 32: /* ARGB 8888 */\r
+            pPix[0] = (dwFrontColor      ) & 0xFF;\r
+            pPix[1] = (dwFrontColor >>  8) & 0xFF;\r
+            pPix[2] = (dwFrontColor >> 16) & 0xFF;\r
+            pPix[3] = (dwFrontColor >> 24) & 0xFF;\r
+            break;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Fill rectangle with front color.\r
+ * \param dwX1  X-coordinate of top left.\r
+ * \param dwY1  Y-coordinate of top left.\r
+ * \param dwX2  X-coordinate of bottom right.\r
+ * \param dwY1  Y-coordinate of bottom right.\r
+ */\r
+static void _FillRect( uint32_t dwX1, uint32_t dwY1, uint32_t dwX2, uint32_t dwY2 )\r
+{\r
+    sLCDDLayer *pDisp = LCDD_GetCanvas();\r
+    uint16_t w = pDisp->wImgW;\r
+    uint16_t cw = pDisp->bMode/8; /* color width */\r
+    uint32_t rw = w * cw;         /* row width in bytes */\r
+    uint8_t *base = pDisp->pBuffer;\r
+    uint8_t *buffer = pDisp->pBuffer;\r
+    uint32_t fillStart, fillEnd;\r
+    uint32_t i;\r
+    if (buffer == NULL) return;\r
+\r
+    /* 4-byte aligned rows */\r
+    if (rw & 0x3) rw = (rw | 0x3) + 1;\r
+    /* Buffer address for the starting row */\r
+    base = &buffer[dwY1*rw];\r
+\r
+    fillStart = dwX1 * cw;\r
+    fillEnd   = dwX2 * cw;\r
+\r
+    #if 1 /* Memcopy pixel */\r
+    buffer = base;\r
+    for (; dwY1 <= dwY2; dwY1 ++)\r
+    {\r
+        for (i = fillStart; i <= fillEnd; i += cw)\r
+        {\r
+            memcpy(&buffer[i], &dwFrontColor, cw);\r
+        }\r
+        buffer = &buffer[rw]; \r
+    }\r
+    #endif\r
+\r
+    #if 0 /* Pixel by pixel */\r
+    for (; dwY1 <= dwY2; dwY1 ++)\r
+    {\r
+        for (i = dwX1; i <= dwX2; i ++)\r
+        {\r
+            _DrawPixel(i, dwY1);\r
+        }\r
+    }\r
+    #endif\r
+\r
+    #if 0 /* Optimized */\r
+    /* First row */\r
+    for (i = fillStart; i <= fillEnd; i += cw)\r
+    {\r
+        memcpy(&base[i], &dwFrontColor, cw);\r
+    }\r
+    /* Next rows, copy first */\r
+    buffer = &base[rw + fillStart];\r
+    for (i = dwY1 + 1; i <= dwY2; i ++)\r
+    {\r
+        memcpy(buffer, &base[fillStart], fillEnd - fillStart + cw);\r
+        buffer = &buffer[rw];\r
+    }\r
+    #endif\r
+}\r
+\r
+/**\r
+ * \brief Draw a line on LCD, which is not horizontal or vertical.\r
+ *\r
+ * \param dwX1       X-coordinate of line start.\r
+ * \param dwY1       Y-coordinate of line start.\r
+ * \param dwX2       X-coordinate of line end.\r
+ * \param dwY2       Y-coordinate of line end.\r
+ */\r
+static uint32_t _DrawLineBresenham( uint32_t dwX1, uint32_t dwY1,\r
+                                    uint32_t dwX2, uint32_t dwY2 )\r
+{\r
+    int dx, dy ;\r
+    int i ;\r
+    int xinc, yinc, cumul ;\r
+    int x, y ;\r
+\r
+    x = dwX1 ;\r
+    y = dwY1 ;\r
+    dx = dwX2 - dwX1 ;\r
+    dy = dwY2 - dwY1 ;\r
+\r
+    xinc = ( dx > 0 ) ? 1 : -1 ;\r
+    yinc = ( dy > 0 ) ? 1 : -1 ;\r
+    dx = ( dx > 0 ) ? dx : -dx ;\r
+    dy = ( dy > 0 ) ? dy : -dy ;\r
+\r
+    _DrawPixel( x, y ) ;\r
+\r
+    if ( dx > dy )\r
+    {\r
+      cumul = dx / 2 ;\r
+      for ( i = 1 ; i <= dx ; i++ )\r
+      {\r
+        x += xinc ;\r
+        cumul += dy ;\r
+\r
+        if ( cumul >= dx )\r
+        {\r
+          cumul -= dx ;\r
+          y += yinc ;\r
+        }\r
+        _DrawPixel( x, y ) ;\r
+      }\r
+    }\r
+    else\r
+    {\r
+        cumul = dy / 2 ;\r
+        for ( i = 1 ; i <= dy ; i++ )\r
+        {\r
+            y += yinc ;\r
+            cumul += dx ;\r
+\r
+            if ( cumul >= dy )\r
+            {\r
+                cumul -= dy ;\r
+                x += xinc ;\r
+            }\r
+\r
+            _DrawPixel( x, y ) ;\r
+        }\r
+    }\r
+\r
+    return 0 ;\r
+}\r
+\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Fills the given LCD buffer with a particular color.\r
+ *\r
+ * \param color  Fill color.\r
+ */\r
+void LCDD_Fill( uint32_t dwColor )\r
+{\r
+    sLCDDLayer *pDisp = LCDD_GetCanvas();\r
+    _SetFrontColor(dwColor);\r
+    _HideCanvas();\r
+    _FillRect( 0, 0, pDisp->wImgW, pDisp->wImgH );\r
+    _ShowCanvas();\r
+}\r
+\r
+void LCDD_Fill0(void)\r
+{\r
+    sLCDDLayer *pDisp = LCDD_GetCanvas();    \r
+    _HideCanvas();\r
+    _SetFrontColor(0xFF0000);\r
+    _FillRect( 0, 0, pDisp->wImgW/3, pDisp->wImgH );\r
+    _SetFrontColor(0x00FF00);\r
+    _FillRect( pDisp->wImgW/3, 0, pDisp->wImgW/3+pDisp->wImgW/3, pDisp->wImgH );\r
+    _SetFrontColor(0x0000FF);\r
+    _FillRect( pDisp->wImgW/3+pDisp->wImgW/3, 0, pDisp->wImgW, pDisp->wImgH );\r
+    _ShowCanvas();\r
+}\r
+/**\r
+ * \brief Draw a pixel on LCD of given color.\r
+ *\r
+ * \param x  X-coordinate of pixel.\r
+ * \param y  Y-coordinate of pixel.\r
+ * \param color  Pixel color.\r
+ */\r
+extern void LCDD_DrawPixel( uint32_t x, uint32_t y, uint32_t color )\r
+{\r
+    _SetFrontColor(color);\r
+    _HideCanvas();\r
+    _DrawPixel(x, y);\r
+    _ShowCanvas();\r
+}\r
+\r
+/**\r
+ * \brief Read a pixel from LCD.\r
+ *\r
+ * \param x  X-coordinate of pixel.\r
+ * \param y  Y-coordinate of pixel.\r
+ *\r
+ * \return color  Readed pixel color.\r
+ */\r
+extern uint32_t LCDD_ReadPixel( uint32_t x, uint32_t y )\r
+{\r
+    sLCDDLayer *pDisp = LCDD_GetCanvas();\r
+    uint8_t* buffer = pDisp->pBuffer;\r
+    uint16_t w = pDisp->wImgW;\r
+    //uint16_t h = pDisp->wImgH;\r
+    uint16_t cw = pDisp->bMode/8; /* color width */\r
+    uint32_t rw = w * cw;         /* row width in bytes */\r
+    uint8_t  *pPix;\r
+    uint32_t color = 0;\r
+\r
+    if (buffer == NULL) return 0;\r
+\r
+    if (rw & 0x3) rw = (rw | 0x3) + 1; /* 4-byte aligned rows */\r
+    pPix = &buffer[x * rw + cw * y];\r
+\r
+    switch (pDisp->bMode)\r
+    {\r
+        case 16: /* TRGB 1555 */\r
+            color = pPix[0] | (pPix[1] << 8);\r
+            break;\r
+        case 24: /*  RGB  888 */\r
+            color = pPix[0] | (pPix[1] << 8) | (pPix[2] << 16);\r
+            break;\r
+        case 32: /* ARGB 8888 */\r
+            color = pPix[0] | (pPix[1] << 8) | (pPix[2] << 16) | (pPix[3] << 24);\r
+            break;\r
+    }\r
+    return color;\r
+}\r
+\r
+/**\r
+ * \brief Draw a line on LCD, horizontal and vertical line are supported.\r
+ *\r
+ * \param x1        X-coordinate of line start.\r
+ * \param y1        Y-coordinate of line start.\r
+ * \param x2        X-coordinate of line end.\r
+ * \param y2        Y-coordinate of line end.\r
+ * \param color     Pixel color.\r
+ */\r
+extern void LCDD_DrawLine( uint32_t x1, uint32_t y1, uint32_t x2, uint32_t y2, uint32_t color )\r
+{\r
+    _SetFrontColor(color);\r
+    if ( (x1 == x2) || (y1 == y2) )\r
+    {\r
+        LCDD_DrawFilledRectangle(x1, y1, x2, y2, color);\r
+    }\r
+    else\r
+    {\r
+        _HideCanvas();\r
+        _DrawLineBresenham(x1, y1, x2, y2);\r
+        _ShowCanvas();\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Draws a rectangle on LCD, at the given coordinates.\r
+ *\r
+ * \param x      X-coordinate of upper-left rectangle corner.\r
+ * \param y      Y-coordinate of upper-left rectangle corner.\r
+ * \param width  Rectangle width in pixels.\r
+ * \param height  Rectangle height in pixels.\r
+ * \param color  Rectangle color.\r
+ */\r
+extern void LCDD_DrawRectangle( uint32_t x, uint32_t y, uint32_t width, uint32_t height, uint32_t color )\r
+{\r
+    uint32_t x1 = x + width - 1;\r
+    uint32_t y1 = y + height - 1;\r
+\r
+    _SetFrontColor(color);\r
+    _HideCanvas();\r
+    _FillRect(x , y , x1, y );\r
+    _FillRect(x1, y , x1, y1);\r
+    _FillRect(x , y , x , y1);\r
+    _FillRect(x , y1, x1, y1);\r
+    _ShowCanvas();\r
+}\r
+\r
+/**\r
+ * \brief Draws a rectangle with fill inside on LCD, at the given coordinates.\r
+ *\r
+ * \param dwX1   X-coordinate of upper-left rectangle corner.\r
+ * \param dwY1   Y-coordinate of upper-left rectangle corner.\r
+ * \param dwX2   X-coordinate of down-right rectangle corner.\r
+ * \param dwY2   Y-coordinate of down-right rectangle corner.\r
+ * \param color  Rectangle color.\r
+ */\r
+extern void LCDD_DrawFilledRectangle( uint32_t dwX1, uint32_t dwY1,\r
+                                      uint32_t dwX2, uint32_t dwY2,\r
+                                      uint32_t dwColor )\r
+{\r
+    _SetFrontColor(dwColor);\r
+    _HideCanvas();\r
+    _FillRect(dwX1, dwY1, dwX2, dwY2);\r
+    _ShowCanvas();\r
+}\r
+\r
+/**\r
+ * \brief Draws a circle on LCD, at the given coordinates.\r
+ *\r
+ * \param dwX     X-coordinate of circle center.\r
+ * \param dwY     Y-coordinate of circle center.\r
+ * \param dwR     circle radius.\r
+ * \param dwColor circle color.\r
+ */\r
+extern void LCDD_DrawCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR, uint32_t dwColor )\r
+{\r
+    int32_t   d;    /* Decision Variable */\r
+    uint32_t  curX; /* Current X Value */\r
+    uint32_t  curY; /* Current Y Value */\r
+\r
+   if (dwR == 0) return;\r
+   _SetFrontColor(dwColor);\r
+\r
+   d = 3 - (dwR << 1);\r
+   curX = 0;\r
+   curY = dwR;\r
+\r
+   _HideCanvas();\r
+   while (curX <= curY)\r
+   {\r
+       _DrawPixel(dwX + curX, dwY + curY);\r
+       _DrawPixel(dwX + curX, dwY - curY);\r
+       _DrawPixel(dwX - curX, dwY + curY);\r
+       _DrawPixel(dwX - curX, dwY - curY);\r
+       _DrawPixel(dwX + curY, dwY + curX);\r
+       _DrawPixel(dwX + curY, dwY - curX);\r
+       _DrawPixel(dwX - curY, dwY + curX);\r
+       _DrawPixel(dwX - curY, dwY - curX);\r
+   \r
+       if (d < 0) {\r
+           d += (curX << 2) + 6;\r
+       }\r
+       else {\r
+           d += ((curX - curY) << 2) + 10;\r
+           curY--;\r
+       }\r
+       curX++;\r
+   }\r
+   _ShowCanvas();\r
+}\r
+\r
+\r
+/**\r
+ * \brief Draws a filled circle on LCD, at the given coordinates.\r
+ *\r
+ * \param dwX     X-coordinate of circle center.\r
+ * \param dwY     Y-coordinate of circle center.\r
+ * \param dwR     circle radius.\r
+ * \param dwColor circle color.\r
+ */\r
+void LCDD_DrawFilledCircle( uint32_t dwX, uint32_t dwY, uint32_t dwR, uint32_t dwColor )\r
+{\r
+    signed int d ; // Decision Variable\r
+    uint32_t dwCurX ; // Current X Value\r
+    uint32_t dwCurY ; // Current Y Value\r
+    uint32_t dwXmin, dwYmin;\r
+\r
+    if (dwR == 0)        return;\r
+    _SetFrontColor(dwColor);\r
+\r
+    d = 3 - (dwR << 1) ;\r
+    dwCurX = 0 ;\r
+    dwCurY = dwR ;\r
+\r
+    _HideCanvas();\r
+    while ( dwCurX <= dwCurY )\r
+    {\r
+        dwXmin = (dwCurX > dwX) ? 0 : dwX-dwCurX;\r
+        dwYmin = (dwCurY > dwY) ? 0 : dwY-dwCurY;\r
+        _FillRect( dwXmin, dwYmin, dwX+dwCurX, dwYmin ) ;\r
+        _FillRect( dwXmin, dwY+dwCurY, dwX+dwCurX, dwY+dwCurY ) ;\r
+        dwXmin = (dwCurY > dwX) ? 0 : dwX-dwCurY;\r
+        dwYmin = (dwCurX > dwY) ? 0 : dwY-dwCurX;\r
+        _FillRect( dwXmin, dwYmin, dwX+dwCurY, dwYmin ) ;\r
+        _FillRect( dwXmin, dwY+dwCurX, dwX+dwCurY, dwY+dwCurX ) ;\r
+\r
+        if ( d < 0 )\r
+        {\r
+            d += (dwCurX << 2) + 6 ;\r
+        }\r
+        else\r
+        {\r
+            d += ((dwCurX - dwCurY) << 2) + 10;\r
+            dwCurY-- ;\r
+        }\r
+\r
+        dwCurX++ ;\r
+    }\r
+    _ShowCanvas();\r
+}\r
+\r
+/**\r
+ * \brief Draws a string inside a LCD buffer, at the given coordinates. Line breaks\r
+ * will be honored.\r
+ *\r
+ * \param x        X-coordinate of string top-left corner.\r
+ * \param y        Y-coordinate of string top-left corner.\r
+ * \param pString  String to display.\r
+ * \param color    String color.\r
+ */\r
+extern void LCDD_DrawString( uint32_t x, uint32_t y, const char *pString, uint32_t color )\r
+{\r
+    uint32_t xorg = x;\r
+    while (*pString)\r
+    {\r
+        if (*pString == '\n')\r
+        {\r
+            y += gFont.height + 2; x = xorg;\r
+        }\r
+        else\r
+        {\r
+            LCDD_DrawChar(x, y, *pString, color);\r
+            x += gFont.width + 2;\r
+        }\r
+        pString ++;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Draws a string inside a LCD buffer, at the given coordinates\r
+ * with given background color. Line breaks will be honored.\r
+ *\r
+ * \param x         X-coordinate of string top-left corner.\r
+ * \param y         Y-coordinate of string top-left corner.\r
+ * \param pString   String to display.\r
+ * \param fontColor String color.\r
+ * \param bgColor   Background color.\r
+ */\r
+extern void LCDD_DrawStringWithBGColor( uint32_t x, uint32_t y, const char *pString, uint32_t fontColor, uint32_t bgColor )\r
+{\r
+    uint32_t xorg = x;\r
+    while (*pString)\r
+    {\r
+        if (*pString == '\n')\r
+        {\r
+            y += gFont.height + 2; x = xorg;\r
+        }\r
+        else\r
+        {\r
+            LCDD_DrawCharWithBGColor(x, y, *pString, fontColor, bgColor);\r
+            x += gFont.width + 2;\r
+        }\r
+        pString ++;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Returns the width & height in pixels that a string will occupy on the screen\r
+ * if drawn using LCDD_DrawString.\r
+ *\r
+ * \param pString  String.\r
+ * \param pWidth   Pointer for storing the string width (optional).\r
+ * \param pHeight  Pointer for storing the string height (optional).\r
+ *\r
+ * \return String width in pixels.\r
+ */\r
+extern void LCDD_GetStringSize( const char *pString, uint32_t *pWidth, uint32_t *pHeight )\r
+{\r
+    uint32_t width = 0;\r
+    uint32_t height = gFont.height;\r
+    while (*pString)\r
+    {\r
+        if (*pString == '\n') height += gFont.height + 2;\r
+        else                  width  += gFont.height + 2;\r
+        pString ++;\r
+    }\r
+    if (width > 0) width -= 2;\r
+\r
+    if (pWidth) *pWidth  = width;\r
+    if (pHeight)*pHeight = height;\r
+}\r
+\r
+/**\r
+ * \brief Draw a raw image at given position on LCD.\r
+ *\r
+ * \param x         X-coordinate of image start.\r
+ * \param y         Y-coordinate of image start.\r
+ * \param pImage    Image buffer.\r
+ * \param width     Image width.\r
+ * \param height    Image height.\r
+ */\r
+void LCDD_DrawImage( uint32_t dwX, uint32_t dwY, const uint8_t *pImage, uint32_t dwWidth, uint32_t dwHeight )\r
+{\r
+    sLCDDLayer *pDisp = LCDD_GetCanvas();\r
+    uint16_t cw  = pDisp->bMode/8;      /* color width */\r
+    uint32_t rw  = pDisp->wImgW * cw;   /* Row width in bytes */\r
+    uint32_t rws = dwWidth * cw;        /* Source Row Width */\r
+    uint32_t rl  = (rw  & 0x3) ? ((rw  | 0x3) + 1) :  rw; /* Aligned length*/\r
+    uint32_t rls = (rws & 0x3) ? ((rws | 0x3) + 1) : rws; /* Aligned length */\r
+    uint8_t *pSrc, *pDst;\r
+    uint32_t i;\r
+\r
+    pSrc = (uint8_t*)pImage;\r
+    pDst = pDisp->pBuffer;\r
+    pDst = &pDst[dwX*cw + dwY*rl];\r
+\r
+    for (i = 0; i < dwHeight; i ++)\r
+    {\r
+        memcpy(pDst, pSrc, rws);\r
+        pSrc = &pSrc[rls];\r
+        pDst = &pDst[rl];\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * \brief Clear a window with an color.\r
+ *\r
+ * \param dwX         X-coordinate of the window.\r
+ * \param dwY         Y-coordinate of the window.\r
+ * \param dwWidth     window width.\r
+ * \param dwHeight    window height.\r
+ * \param dwColor     background color\r
+ */\r
+extern void LCDD_ClearWindow( uint32_t dwX, uint32_t dwY, uint32_t dwWidth, uint32_t dwHeight, uint32_t dwColor )\r
+{\r
+    _SetFrontColor(dwColor);\r
+    _HideCanvas();\r
+    _FillRect(0, 0, dwX + dwWidth - 1, dwY + dwHeight - 1);\r
+    _ShowCanvas();\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_font.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_font.c
new file mode 100644 (file)
index 0000000..c10fcc1
--- /dev/null
@@ -0,0 +1,132 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file\r
+ *\r
+ * Implementation of draw font on LCD.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+#include <stdint.h>\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Global variable describing the font being instancied. */\r
+const Font gFont = {10, 14};\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Draws an ASCII character on LCD.\r
+ *\r
+ * \param x  X-coordinate of character upper-left corner.\r
+ * \param y  Y-coordinate of character upper-left corner.\r
+ * \param c  Character to output.\r
+ * \param color  Character color.\r
+ */\r
+extern void LCDD_DrawChar( uint32_t x, uint32_t y, uint8_t c, uint32_t color )\r
+{\r
+    uint32_t row, col ;\r
+\r
+    assert( (c >= 0x20) && (c <= 0x7F) ) ;\r
+\r
+    for ( col = 0 ; col < 10 ; col++ )\r
+    {\r
+        for ( row = 0 ; row < 8 ; row++ )\r
+        {\r
+            if ( (pCharset10x14[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1 )\r
+            {\r
+                LCDD_DrawPixel( x+col, y+row, color ) ;\r
+            }\r
+        }\r
+\r
+        for (row = 0; row < 6; row++ )\r
+        {\r
+            if ((pCharset10x14[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1)\r
+            {\r
+                LCDD_DrawPixel( x+col, y+row+8, color ) ;\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Draws an ASCII character on LCD with given background color.\r
+ *\r
+ * \param x          X-coordinate of character upper-left corner.\r
+ * \param y          Y-coordinate of character upper-left corner.\r
+ * \param c          Character to output.\r
+ * \param fontColor  Character color.\r
+ * \param bgColor    Background color.\r
+ */\r
+extern void LCDD_DrawCharWithBGColor( uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor, uint32_t bgColor )\r
+{\r
+    uint32_t row, col ;\r
+\r
+    assert( (c >= 0x20) && (c <= 0x7F) ) ;\r
+\r
+    for (col = 0; col < 10; col++)\r
+    {\r
+        for (row = 0 ; row < 8 ; row++)\r
+        {\r
+            if ( (pCharset10x14[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1 )\r
+            {\r
+                LCDD_DrawPixel( x+col, y+row, fontColor ) ;\r
+            }\r
+            else\r
+            {\r
+                LCDD_DrawPixel( x+col, y+row, bgColor ) ;\r
+            }\r
+        }\r
+\r
+        for ( row = 0 ; row < 6 ; row++ )\r
+        {\r
+            if ( (pCharset10x14[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1 )\r
+            {\r
+                LCDD_DrawPixel( x+col, y+row+8, fontColor ) ;\r
+            }\r
+            else\r
+            {\r
+                LCDD_DrawPixel( x+col, y+row+8, bgColor ) ;\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_font10x14.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcd_font10x14.c
new file mode 100644 (file)
index 0000000..0a6b9fb
--- /dev/null
@@ -0,0 +1,239 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/**\r
+ * \file\r
+ *\r
+ * Font 10x14 table definition.\r
+ *\r
+ */\r
+\r
+/** \addtogroup font_10x14\r
+ *@{\r
+ */\r
+#include "board.h"\r
+\r
+/** Char set of font 10x14 */\r
+const uint8_t pCharset10x14[] = {\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xCC,\r
+    0xFF, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x0C, 0xC0, 0x0C, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x0C, 0xC0,\r
+    0x0C, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x0C, 0xC0, 0x0C, 0xC0,\r
+    0x0C, 0x60, 0x1E, 0x70, 0x3F, 0x30, 0x33, 0x30, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0x33, 0x30, 0x33, 0xF0, 0x39, 0xE0, 0x18, 0xC0,\r
+    0x60, 0x00, 0xF0, 0x0C, 0xF0, 0x3C, 0x60, 0xF0, 0x03, 0xC0,\r
+    0x0F, 0x00, 0x3C, 0x18, 0xF0, 0x3C, 0xC0, 0x3C, 0x00, 0x18,\r
+    0x3C, 0xF0, 0x7F, 0xF8, 0xC3, 0x1C, 0xC7, 0x8C, 0xCF, 0xCC,\r
+    0xDC, 0xEC, 0x78, 0x78, 0x30, 0x30, 0x00, 0xFC, 0x00, 0xCC,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xEC, 0x00,\r
+    0xF8, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x3F, 0xF0, 0x78, 0x78,\r
+    0x60, 0x18, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0x60, 0x18,\r
+    0x78, 0x78, 0x3F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00,\r
+    0x0C, 0x60, 0x0E, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x3F, 0xF8,\r
+    0x3F, 0xF8, 0x03, 0x80, 0x07, 0xC0, 0x0E, 0xE0, 0x0C, 0x60,\r
+    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x3F, 0xF0,\r
+    0x3F, 0xF0, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,\r
+    0x00, 0x44, 0x00, 0xEC, 0x00, 0xF8, 0x00, 0x70, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,\r
+    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,\r
+    0x00, 0x18, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0,\r
+    0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x00,\r
+    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0xFC, 0xC1, 0xCC, 0xC3, 0x8C,\r
+    0xC7, 0x0C, 0xCE, 0x0C, 0xFC, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,\r
+    0x00, 0x00, 0x00, 0x00, 0x30, 0x0C, 0x70, 0x0C, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,\r
+    0x30, 0x0C, 0x70, 0x1C, 0xE0, 0x3C, 0xC0, 0x7C, 0xC0, 0xEC,\r
+    0xC1, 0xCC, 0xC3, 0x8C, 0xE7, 0x0C, 0x7E, 0x0C, 0x3C, 0x0C,\r
+    0x30, 0x30, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x1C, 0x7F, 0xF8, 0x3C, 0xF0,\r
+    0x03, 0xC0, 0x07, 0xC0, 0x0E, 0xC0, 0x1C, 0xC0, 0x38, 0xC0,\r
+    0x70, 0xC0, 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0xC0, 0x00, 0xC0,\r
+    0xFC, 0x30, 0xFC, 0x38, 0xCC, 0x1C, 0xCC, 0x0C, 0xCC, 0x0C,\r
+    0xCC, 0x0C, 0xCC, 0x0C, 0xCE, 0x1C, 0xC7, 0xF8, 0xC3, 0xF0,\r
+    0x3F, 0xF0, 0x7F, 0xF8, 0xE3, 0x1C, 0xC3, 0x0C, 0xC3, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x9C, 0x71, 0xF8, 0x30, 0xF0,\r
+    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC3, 0xFC,\r
+    0xC7, 0xFC, 0xCE, 0x00, 0xDC, 0x00, 0xF8, 0x00, 0xF0, 0x00,\r
+    0x3C, 0xF0, 0x7F, 0xF8, 0xE7, 0x9C, 0xC3, 0x0C, 0xC3, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xE7, 0x9C, 0x7F, 0xF8, 0x3C, 0xF0,\r
+    0x3C, 0x00, 0x7E, 0x00, 0xE7, 0x0C, 0xC3, 0x0C, 0xC3, 0x1C,\r
+    0xC3, 0x38, 0xC3, 0x70, 0xE7, 0xE0, 0x7F, 0xC0, 0x3F, 0x80,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0x3C, 0xF0,\r
+    0x3C, 0xF0, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x44, 0x3C, 0xEC,\r
+    0x3C, 0xF8, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x1C, 0xE0,\r
+    0x38, 0x70, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C, 0x00, 0x00,\r
+    0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,\r
+    0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,\r
+    0x00, 0x00, 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x38, 0x38, 0x70,\r
+    0x1C, 0xE0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,\r
+    0x30, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC1, 0xEC,\r
+    0xC3, 0xEC, 0xC3, 0x00, 0xE6, 0x00, 0x7E, 0x00, 0x3C, 0x00,\r
+    0x30, 0xF0, 0x71, 0xF8, 0xE3, 0x9C, 0xC3, 0x0C, 0xC3, 0xFC,\r
+    0xC3, 0xFC, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,\r
+    0x3F, 0xFC, 0x7F, 0xFC, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,\r
+    0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xC0, 0x7F, 0xFC, 0x3F, 0xFC,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xE7, 0x9C, 0x7F, 0xF8, 0x3C, 0xF0,\r
+    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x70, 0x38, 0x30, 0x30,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00,\r
+    0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00, 0xC0, 0x00, 0xC0, 0x00,\r
+    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xE3, 0x1C, 0x73, 0xF8, 0x33, 0xF0,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,\r
+    0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0xFF, 0xFC, 0xFF, 0xFC,\r
+    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x30, 0x00, 0x38, 0xC0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xC0, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0, 0xC0, 0x00, 0xC0, 0x00,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x07, 0x80, 0x07, 0x80, 0x0F, 0xC0,\r
+    0x1C, 0xE0, 0x38, 0x70, 0x70, 0x38, 0xE0, 0x1C, 0xC0, 0x0C,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,\r
+    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x70, 0x00, 0x38, 0x00, 0x1F, 0x00,\r
+    0x1F, 0x00, 0x38, 0x00, 0x70, 0x00, 0xFF, 0xFC, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00,\r
+    0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0xFF, 0xFC, 0xFF, 0xFC,\r
+    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C, 0x7F, 0xF8, 0x3F, 0xF0,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x00, 0xC3, 0x00,\r
+    0xC3, 0x00, 0xC3, 0x00, 0xE7, 0x00, 0x7E, 0x00, 0x3C, 0x00,\r
+    0x3F, 0xF0, 0x7F, 0xF8, 0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0xCC,\r
+    0xC0, 0xEC, 0xC0, 0x7C, 0xE0, 0x38, 0x7F, 0xFC, 0x3F, 0xEC,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xC3, 0x00, 0xC3, 0x80, 0xC3, 0x80,\r
+    0xC3, 0xC0, 0xC3, 0xC0, 0xE7, 0x70, 0x7E, 0x3C, 0x3C, 0x1C,\r
+    0x3C, 0x18, 0x7E, 0x1C, 0xE7, 0x0C, 0xC3, 0x0C, 0xC3, 0x0C,\r
+    0xC3, 0x0C, 0xC3, 0x0C, 0xC3, 0x9C, 0xE1, 0xF8, 0x60, 0xF0,\r
+    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,\r
+    0xFF, 0xF0, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C,\r
+    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0,\r
+    0xFF, 0xC0, 0xFF, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C,\r
+    0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0xFF, 0xE0, 0xFF, 0xC0,\r
+    0xFF, 0xF0, 0xFF, 0xF8, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0xF8,\r
+    0x00, 0xF8, 0x00, 0x3C, 0x00, 0x1C, 0xFF, 0xF8, 0xFF, 0xF0,\r
+    0xF0, 0x3C, 0xF8, 0x7C, 0x1C, 0xE0, 0x0F, 0xC0, 0x07, 0x80,\r
+    0x07, 0x80, 0x0F, 0xC0, 0x1C, 0xE0, 0xF8, 0x7C, 0xF0, 0x3C,\r
+    0xFC, 0x00, 0xFE, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xFC,\r
+    0x01, 0xFC, 0x03, 0x80, 0x07, 0x00, 0xFE, 0x00, 0xFC, 0x00,\r
+    0xC0, 0x3C, 0xC0, 0x7C, 0xC0, 0xEC, 0xC1, 0xCC, 0xC3, 0x8C,\r
+    0xC7, 0x0C, 0xCE, 0x0C, 0xDC, 0x0C, 0xF8, 0x0C, 0xF0, 0x0C,\r
+    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0xC0, 0x0C,\r
+    0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x30, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x03, 0x00,\r
+    0x03, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x30,\r
+    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00,\r
+    0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C, 0x00,\r
+    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,\r
+    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C,\r
+    0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00,\r
+    0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x30, 0x06, 0x78, 0x0E, 0xFC, 0x0C, 0xCC, 0x0C, 0xCC,\r
+    0x0C, 0xCC, 0x0C, 0xCC, 0x0E, 0xCC, 0x07, 0xFC, 0x03, 0xF8,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C,\r
+    0x03, 0x0C, 0x03, 0x0C, 0x03, 0x9C, 0x01, 0xF8, 0x00, 0xF0,\r
+    0x03, 0xF0, 0x07, 0xF8, 0x0E, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C,\r
+    0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0x30,\r
+    0x00, 0xF0, 0x01, 0xF8, 0x03, 0x9C, 0x03, 0x0C, 0x03, 0x0C,\r
+    0x03, 0x0C, 0x03, 0x0C, 0x03, 0x0C, 0xFF, 0xFC, 0xFF, 0xFC,\r
+    0x03, 0xF0, 0x07, 0xF8, 0x0E, 0xDC, 0x0C, 0xCC, 0x0C, 0xCC,\r
+    0x0C, 0xCC, 0x0C, 0xCC, 0x0E, 0xDC, 0x07, 0xD8, 0x03, 0x90,\r
+    0x00, 0x00, 0x03, 0x00, 0x3F, 0xFC, 0x7F, 0xFC, 0xE3, 0x00,\r
+    0xE3, 0x00, 0x70, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x03, 0x18, 0x07, 0x9C, 0x0F, 0xCC, 0x0C, 0xCC, 0x0C, 0xCC,\r
+    0x0C, 0xCC, 0x0C, 0xCC, 0x0C, 0xDC, 0x0F, 0xF8, 0x07, 0xF0,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,\r
+    0x03, 0x00, 0x03, 0x80, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xFC,\r
+    0x1B, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x30, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0C,\r
+    0x00, 0x0C, 0x00, 0x1C, 0xCF, 0xF8, 0xCF, 0xF0, 0x00, 0x00,\r
+    0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0x00, 0xE0, 0x01, 0xE0,\r
+    0x03, 0xF0, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C, 0x00, 0x00,\r
+    0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,\r
+    0x0F, 0xFC, 0x0F, 0xFC, 0x0E, 0x00, 0x07, 0x00, 0x03, 0xC0,\r
+    0x03, 0xC0, 0x07, 0x00, 0x0E, 0x00, 0x0F, 0xFC, 0x0F, 0xFC,\r
+    0x0F, 0xFC, 0x0F, 0xFC, 0x03, 0x00, 0x07, 0x00, 0x0E, 0x00,\r
+    0x0C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0xFC, 0x03, 0xFC,\r
+    0x03, 0xF0, 0x07, 0xF8, 0x0E, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C,\r
+    0x0C, 0x0C, 0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0xF8, 0x03, 0xF0,\r
+    0x0F, 0xFC, 0x0F, 0xFC, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,\r
+    0x0C, 0xC0, 0x0C, 0xC0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00,\r
+    0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0,\r
+    0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0F, 0xFC, 0x0F, 0xFC,\r
+    0x0F, 0xFC, 0x0F, 0xFC, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00,\r
+    0x0C, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x00,\r
+    0x03, 0x18, 0x07, 0x9C, 0x0F, 0xCC, 0x0C, 0xCC, 0x0C, 0xCC,\r
+    0x0C, 0xCC, 0x0C, 0xCC, 0x0C, 0xFC, 0x0E, 0x78, 0x06, 0x30,\r
+    0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0xFF, 0xF0, 0xFF, 0xF8,\r
+    0x0C, 0x1C, 0x0C, 0x1C, 0x0C, 0x38, 0x0C, 0x30, 0x00, 0x00,\r
+    0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x0C,\r
+    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x1C, 0x0F, 0xF8, 0x0F, 0xF0,\r
+    0x0F, 0xC0, 0x0F, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C,\r
+    0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x0F, 0xE0, 0x0F, 0xC0,\r
+    0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0xF8,\r
+    0x00, 0xF8, 0x00, 0x1C, 0x00, 0x1C, 0x0F, 0xF8, 0x0F, 0xF0,\r
+    0x0C, 0x0C, 0x0E, 0x1C, 0x07, 0x38, 0x03, 0xF0, 0x01, 0xE0,\r
+    0x01, 0xE0, 0x03, 0xF0, 0x07, 0x38, 0x0E, 0x1C, 0x0C, 0x0C,\r
+    0x0C, 0x00, 0x0E, 0x00, 0x07, 0x0C, 0x03, 0x9C, 0x01, 0xF8,\r
+    0x01, 0xF0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x0C, 0x00,\r
+    0x0C, 0x0C, 0x0C, 0x1C, 0x0C, 0x3C, 0x0C, 0x7C, 0x0C, 0xEC,\r
+    0x0D, 0xCC, 0x0F, 0x8C, 0x0F, 0x0C, 0x0E, 0x0C, 0x0C, 0x0C,\r
+    0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x3F, 0xF0, 0x7C, 0xF8,\r
+    0xE0, 0x1C, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0x00, 0x00,\r
+    0x03, 0x0C, 0x03, 0x0C, 0x3F, 0xFC, 0x7F, 0xFC, 0xE3, 0x0C,\r
+    0xC3, 0x0C, 0xC0, 0x0C, 0xE0, 0x0C, 0x70, 0x0C, 0x30, 0x0C,\r
+    0x00, 0x00, 0xC0, 0x0C, 0xC0, 0x0C, 0xC0, 0x0C, 0xE0, 0x1C,\r
+    0x7C, 0xF8, 0x3F, 0xF0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00,\r
+    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,\r
+    0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC,\r
+    0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC\r
+} ;\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcdd.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/lcdd.c
new file mode 100644 (file)
index 0000000..dfea57c
--- /dev/null
@@ -0,0 +1,1590 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+#include <stdint.h>\r
+#include <math.h>\r
+#include <string.h>\r
+\r
+#ifdef LCDC\r
+/** \addtogroup lcdd_base\r
+ * Implementation of LCD driver, Include LCD initialization,\r
+ * LCD on/off and LCD backlight control.\r
+ */\r
+/**@{*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** DMA descriptor for LCDC */\r
+typedef struct _LCDCDescriptor {\r
+    uint32_t addr;\r
+    uint32_t ctrl;\r
+    uint32_t next;\r
+}sLCDCDescriptor;\r
+\r
+/** CULT information */\r
+typedef struct _CLUTInfo {\r
+    uint8_t bpp;\r
+    uint8_t nbColors;\r
+}sCLUTInfo;\r
+\r
+/** LCDC General Layer information */\r
+typedef struct _Layer {\r
+    sLCDCDescriptor dmaD;\r
+    void* pBuffer;\r
+    sCLUTInfo clut;\r
+    uint16_t  reserved;\r
+} sLayer;\r
+\r
+/** LCDC HEO Layer information */\r
+typedef struct _HeoLayer {\r
+    sLCDCDescriptor dmaD[3];\r
+    void* pBuffer;\r
+    sCLUTInfo clut;\r
+    uint16_t  reserved;\r
+} sHeoLayer;\r
+\r
+/** Pins for LCDC */\r
+static const Pin pPinsLCD[] = {PINS_LCD};\r
+\r
+/** Current selected canvas information */\r
+static sLCDDLayer lcddCanvas;\r
+/** Base Layer */\r
+\r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+#pragma data_alignment=64\r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+__attribute__((aligned(64)))\r
+#endif\r
+static sLayer lcddBase;\r
+\r
+/** Overlay 1 Layer */\r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+#pragma data_alignment=64\r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+__attribute__((aligned(64)))\r
+#endif\r
+static sLayer lcddOvr1;\r
+\r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+#pragma data_alignment=64\r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+__attribute__((aligned(64)))\r
+#endif\r
+static sLayer lcddOvr2;\r
+\r
+/** High End Overlay Layer */\r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+#pragma data_alignment=64\r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+__attribute__((aligned(64)))\r
+#endif\r
+static sHeoLayer lcddHeo;\r
+\r
+/** Hardware cursor Layer */\r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+#pragma data_alignment=64\r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+__attribute__((aligned(64)))\r
+#endif\r
+static sLayer lcddHcc;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Return a pointer to layer.\r
+ * \param bLayer Layer ID.\r
+ */\r
+static sLayer *pLayer( uint8_t bLayer )\r
+{\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE:       return &lcddBase;\r
+        case LCDD_OVR1:       return &lcddOvr1;\r
+        case LCDD_OVR2:       return &lcddOvr2;\r
+        case LCDD_HEO:        return (sLayer*)&lcddHeo;\r
+        case LCDD_CUR:        return &lcddHcc;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return true if Pixel stride supported.\r
+ * \param bLayer Layer ID.\r
+ */\r
+static uint8_t LCDD_IsPStrideSupported( uint8_t bLayer )\r
+{\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_OVR1: case LCDD_OVR2:case LCDD_HEO: return 1;\r
+        default:                       return 0;\r
+    }\r
+}\r
+\r
+/**\r
+ * Return a pointer to enable register.\r
+ * (Starts following register list: _ER, _DR, _SR, _IER, _IDR, _IMR, _ISR)\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pEnableReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_CONTROLLER: return (volatile uint32_t*)&pHw->LCDC_LCDEN;\r
+        case LCDD_BASE:       return (volatile uint32_t*)&pHw->LCDC_BASECHER;\r
+        case LCDD_OVR1:       return (volatile uint32_t*)&pHw->LCDC_OVRCHER1;\r
+        case LCDD_OVR2:       return (volatile uint32_t*)&pHw->LCDC_OVRCHER2;\r
+        case LCDD_HEO:        return (volatile uint32_t*)&pHw->LCDC_HEOCHER;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to blender configuration register.\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pBlenderReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE: return (volatile uint32_t *)&pHw->LCDC_BASECFG4;\r
+        case LCDD_OVR1: return (volatile uint32_t *)&pHw->LCDC_OVR1CFG9;\r
+        case LCDD_OVR2: return (volatile uint32_t *)&pHw->LCDC_OVR2CFG9;\r
+        case LCDD_HEO:  return (volatile uint32_t *)&pHw->LCDC_HEOCFG12;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to DMA head register.\r
+ * (Starts following register list: _HEAD, _ADDRESS, _CONTROL, _NEXT)\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pHeadReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE:       return (volatile uint32_t*)&pHw->LCDC_BASEHEAD;\r
+        case LCDD_OVR1:       return (volatile uint32_t*)&pHw->LCDC_OVRHEAD1;\r
+        case LCDD_OVR2:       return (volatile uint32_t*)&pHw->LCDC_OVRHEAD2;\r
+        case LCDD_HEO:        return (volatile uint32_t*)&pHw->LCDC_HEOHEAD;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to layer configure register.\r
+ * (Including: _CFG0, _CFG1 (RGB mode ...))\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pCfgReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE:       return (volatile uint32_t*)&pHw->LCDC_BASECFG0;\r
+        case LCDD_OVR1:       return (volatile uint32_t*)&pHw->LCDC_OVR1CFG0;\r
+        case LCDD_OVR2:       return (volatile uint32_t*)&pHw->LCDC_OVR2CFG0;\r
+        case LCDD_HEO:        return (volatile uint32_t*)&pHw->LCDC_HEOCFG0;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to Window configure register.\r
+ * (Including: X Y register, W H register)\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pWinReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_OVR1:       return (volatile uint32_t*)&pHw->LCDC_OVR1CFG2;\r
+        case LCDD_OVR2:       return (volatile uint32_t*)&pHw->LCDC_OVR2CFG2;\r
+        case LCDD_HEO:        return (volatile uint32_t*)&pHw->LCDC_HEOCFG2;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to striding regiters.\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pStrideReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE: return (volatile uint32_t*)&pHw->LCDC_BASECFG2;\r
+        case LCDD_OVR1: return (volatile uint32_t*)&pHw->LCDC_OVR1CFG4;\r
+        case LCDD_OVR2: return (volatile uint32_t*)&pHw->LCDC_OVR2CFG4;\r
+        case LCDD_HEO:  return (volatile uint32_t*)&pHw->LCDC_HEOCFG5;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to Color configure regiters.\r
+ * (Including: RGB Default, RGB Key, RGB Mask)\r
+ * Note that base layer only has one register (default).\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pColorReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE: return (volatile uint32_t*)&pHw->LCDC_BASECFG3;\r
+        case LCDD_OVR1: return (volatile uint32_t*)&pHw->LCDC_OVR1CFG6;\r
+        case LCDD_OVR2: return (volatile uint32_t*)&pHw->LCDC_OVR2CFG6;\r
+        case LCDD_HEO:  return (volatile uint32_t*)&pHw->LCDC_HEOCFG9;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return a pointer to scaling register.\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pScaleReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_HEO:  return (volatile uint32_t*)&pHw->LCDC_HEOCFG13;\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Return bits per pixel from RGB mode settings.\r
+ * (Note the bits is bits occupied in memory, including reserved)\r
+ */\r
+static uint32_t LCDD_GetBitsPerPixel(uint32_t modeReg)\r
+{\r
+    switch (modeReg)\r
+    {\r
+        /* RGB mode */\r
+        case LCDC_HEOCFG1_RGBMODE_12BPP_RGB_444:\r
+        case LCDC_HEOCFG1_RGBMODE_16BPP_ARGB_4444:\r
+        case LCDC_HEOCFG1_RGBMODE_16BPP_RGBA_4444:\r
+        case LCDC_HEOCFG1_RGBMODE_16BPP_RGB_565:\r
+        case LCDC_HEOCFG1_RGBMODE_16BPP_TRGB_1555:\r
+            return 2*8;\r
+\r
+        case LCDC_HEOCFG1_RGBMODE_18BPP_RGB_666PACKED:\r
+        case LCDC_HEOCFG1_RGBMODE_19BPP_TRGB_PACKED:\r
+        case LCDC_HEOCFG1_RGBMODE_24BPP_RGB_888_PACKED:\r
+            return 3*8;\r
+\r
+        case LCDC_HEOCFG1_RGBMODE_18BPP_RGB_666:\r
+        case LCDC_HEOCFG1_RGBMODE_19BPP_TRGB_1666:\r
+        case LCDC_HEOCFG1_RGBMODE_24BPP_RGB_888:\r
+        case LCDC_HEOCFG1_RGBMODE_25BPP_TRGB_1888:\r
+        case LCDC_HEOCFG1_RGBMODE_32BPP_ARGB_8888:\r
+        case LCDC_HEOCFG1_RGBMODE_32BPP_RGBA_8888:\r
+            return 3*8;\r
+\r
+        /* CLUT mode */\r
\r
+        case LCDC_HEOCFG1_CLUTMODE_CLUT_1BPP | LCDC_HEOCFG1_CLUTEN: return 1;\r
+        case LCDC_HEOCFG1_CLUTMODE_CLUT_2BPP | LCDC_HEOCFG1_CLUTEN: return 2;\r
+        case LCDC_HEOCFG1_CLUTMODE_CLUT_4BPP | LCDC_HEOCFG1_CLUTEN: return 4;\r
+        case LCDC_HEOCFG1_CLUTMODE_CLUT_8BPP | LCDC_HEOCFG1_CLUTEN: return 8;\r
+\r
+        /* YUV mode */\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_32BPP_AYCBCR:\r
+            return 32;\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE0:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE1:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE2:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE3:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_SEMIPLANAR:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_PLANAR:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_12BPP_YCBCR_SEMIPLANAR:\r
+        case LCDC_HEOCFG1_YUVEN | LCDC_HEOCFG1_YUVMODE_12BPP_YCBCR_PLANAR:\r
+            return 16;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Enable a LCDC DMA channel\r
+ */\r
+static void LCDD_SetDMA( void* pBuffer,\r
+                         sLCDCDescriptor *pTD,\r
+                         uint32_t regAddr)\r
+{\r
+    volatile uint32_t *pDmaR = (volatile uint32_t*)regAddr;\r
+    /* Modify descriptor */\r
+    pTD->addr = (uint32_t)pBuffer;\r
+    pTD->ctrl = LCDC_BASECTRL_DFETCH;\r
+    pTD->next = (uint32_t)pTD;\r
+    /* Modify registers */\r
+    pDmaR[1] = (uint32_t)pBuffer;\r
+    pDmaR[2] = LCDC_BASECTRL_DFETCH;\r
+    pDmaR[3] = (uint32_t)pTD;\r
+    \r
+}\r
+\r
+/**\r
+ * Disable a LCDC DMA channel\r
+ */\r
+static void LCDD_ClearDMA( sLCDCDescriptor *pTD, uint32_t regAddr )\r
+{\r
+    uint32_t *pReg = (uint32_t *)regAddr;\r
+    volatile uint32_t *pRegCtrl = (volatile uint32_t*)&pReg[1];\r
+    volatile uint32_t *pRegNext = (volatile uint32_t*)&pReg[2];\r
+\r
+    /* Modify descriptor */\r
+    if (pTD)\r
+    {\r
+        pTD->ctrl &= ~LCDC_BASECTRL_DFETCH;\r
+        pTD->next  =  (uint32_t)pTD;\r
+    }\r
+    /* Modify control registers */\r
+    *pRegCtrl &= ~LCDC_BASECTRL_DFETCH;\r
+    *pRegNext  =  (uint32_t)pTD;\r
+}\r
+\r
+/**\r
+ * Return scaling factor\r
+ */\r
+static uint32_t LCDD_CalcScaleFactor(uint32_t targetW, uint32_t imgW)\r
+{\r
+    uint32_t factor;\r
+\r
+    factor = 2048 * (imgW + 1) / (targetW + 1);\r
+    \r
+    //factor = 1024 * (imgW + 1) / (targetW + 1);\r
+    //if (targetW > imgW * 2)\r
+    //    factor -= 7;\r
+    return factor;\r
+}\r
+\r
+/**\r
+ * Return a pointer to Color Palette lookup regiters.\r
+ * \param bLayer Layer ID.\r
+ */\r
+static volatile uint32_t *pCLUTReg( uint8_t bLayer )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_BASE: return (volatile uint32_t*)&pHw->LCDC_BASECLUT[0];\r
+        case LCDD_OVR1: return (volatile uint32_t*)&pHw->LCDC_OVR1CLUT[0];\r
+        case LCDD_OVR2: return (volatile uint32_t*)&pHw->LCDC_OVR2CLUT[0];\r
+        case LCDD_HEO:  return (volatile uint32_t*)&pHw->LCDC_HEOCLUT[0];\r
+    }\r
+    return NULL;\r
+}\r
+\r
+/**\r
+ * Build 8-bit color palette (actually true color)\r
+ */\r
+static void LCDD_BuildCLUT8(volatile uint32_t* pCLUT)\r
+{\r
+    uint32_t r, g, b; /* 3:3:2 */\r
+    for (r = 0; r < 8; r ++)\r
+    {\r
+        for (g = 0; g < 8; g ++)\r
+        {\r
+            for (b = 0; b < 4; b ++)\r
+            {\r
+                *pCLUT ++ =   (r << (16 + 5))\r
+                            + (g << (8  + 5))\r
+                            + (b << (0  + 6));\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Build 4-bit color palette (16 color)\r
+ */\r
+static void LCDD_BuildCLUT4(volatile uint32_t* pCLUT)\r
+{\r
+    uint32_t r, g, b;\r
+    for (r = 0; r < 4; r ++)\r
+    {\r
+        for (g = 0; g < 2; g ++)\r
+        {\r
+            for (b = 0; b < 2; b ++)\r
+            {\r
+                *pCLUT ++ =  (r << (16 + 6))\r
+                           + (g << (8  + 7))\r
+                           + (b << (0  + 7));\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Build 2-bit color palette (4 gray)\r
+ */\r
+static void LCDD_BuildCLUT2(volatile uint32_t* pCLUT)\r
+{\r
+    pCLUT[0] = 0x000000;\r
+    pCLUT[1] = 0x505050;\r
+    pCLUT[2] = 0xA0A0A0;\r
+    pCLUT[3] = 0xFFFFFF;\r
+}\r
+\r
+/**\r
+ * Build 1-bit color palette (black & white)\r
+ */\r
+static void LCDD_BuildCLUT1(volatile uint32_t* pCLUT)\r
+{\r
+    pCLUT[0] = 0x000000;\r
+    pCLUT[1] = 0xFFFFFF;\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/**\r
+ * \brief Initializes the LCD controller.\r
+ * Configure SMC to access LCD controller at 64MHz MCK.\r
+ */\r
+void LCDD_Initialize( void )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    Pmc *pPmc = PMC;\r
+\r
+    /* Configure PIO */\r
+    PIO_Configure(pPinsLCD, PIO_LISTSIZE(pPinsLCD));\r
+\r
+    LCDD_Off();\r
+    \r
+    /* Reset CLUT information */\r
+    lcddBase.clut.bpp = 0;\r
+    lcddOvr1.clut.bpp = 0;\r
+    lcddOvr2.clut.bpp = 0;\r
+    lcddHeo.clut.bpp  = 0;\r
+    lcddHcc.clut.bpp  = 0;\r
+\r
+    /* Reset layer information */\r
+    lcddBase.pBuffer = NULL;\r
+    lcddOvr1.pBuffer = NULL;\r
+    lcddOvr2.pBuffer = NULL;\r
+    lcddHeo.pBuffer  = NULL;\r
+    lcddHcc.pBuffer  = NULL;\r
+\r
+    /* No canvas selected */\r
+    lcddCanvas.pBuffer = NULL;\r
+\r
+    /* Enable peripheral clock */\r
+    PMC_EnablePeripheral(ID_LCDC);\r
+    pPmc->PMC_SCER = (0x1u << 3);\r
+\r
+    /* Timing Engine Configuration */\r
+    \r
+    /* Disable interrupt */\r
+    pHw->LCDC_LCDIDR = 0xFFFFFFFF;\r
+\r
+    /* Configure channels */\r
+\r
+    /* Base */\r
+    pHw->LCDC_BASECFG0 =  LCDC_BASECFG0_DLBO | LCDC_BASECFG0_BLEN_AHB_INCR16;\r
+    pHw->LCDC_BASECFG1 =  LCDC_BASECFG1_RGBMODE_24BPP_RGB_888_PACKED;\r
+\r
+    /* Overlay 1, GA 0xFF */                   \r
+    pHw->LCDC_OVR1CFG0 =  LCDC_OVR1CFG0_DLBO | LCDC_OVR1CFG0_BLEN_AHB_BLEN_INCR16\r
+                       |  LCDC_OVR1CFG0_ROTDIS\r
+                       ;\r
+    pHw->LCDC_OVR1CFG1 =  LCDC_OVR1CFG1_RGBMODE_24BPP_RGB_888_PACKED;\r
+    pHw->LCDC_OVR1CFG9 =  LCDC_OVR1CFG9_GA(0xFF) | LCDC_OVR1CFG9_GAEN;\r
+\r
+    /* Overlay 2, GA 0xFF */\r
+    pHw->LCDC_OVR2CFG0 =  LCDC_OVR2CFG0_DLBO | LCDC_OVR2CFG0_BLEN_AHB_INCR16\r
+                       |  LCDC_OVR2CFG0_ROTDIS\r
+                       ;\r
+    pHw->LCDC_OVR2CFG1 =  LCDC_OVR2CFG1_RGBMODE_24BPP_RGB_888_PACKED;\r
+    pHw->LCDC_OVR2CFG9 =  LCDC_OVR2CFG9_GA(0xFF) | LCDC_OVR2CFG9_GAEN;\r
+    \r
+    /* High End Overlay, GA 0xFF */\r
+    pHw->LCDC_HEOCFG0  =  LCDC_HEOCFG0_DLBO | LCDC_HEOCFG0_BLEN_AHB_BLEN_INCR16\r
+                       |  LCDC_HEOCFG0_ROTDIS\r
+                       ;\r
+    pHw->LCDC_HEOCFG1  =  LCDC_HEOCFG1_RGBMODE_24BPP_RGB_888_PACKED;\r
+    pHw->LCDC_HEOCFG12 =  LCDC_HEOCFG12_GA(0xFF) | LCDC_HEOCFG12_GAEN;\r
+\r
+    LCDD_On();\r
+}\r
+\r
+/**\r
+ * Check if specified layer is working.\r
+ * \param bLayer Layer ID.\r
+ * \return 1 if layer is on.\r
+ */\r
+uint8_t LCDD_IsLayerOn( uint8_t bLayer )\r
+{\r
+    volatile uint32_t *pReg = pEnableReg(bLayer);\r
+    if (pReg) return ((pReg[2] & LCDC_BASECHSR_CHSR) > 0);\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Enable(turn on)/Disable(hide) specified layer.\r
+ * \param bLayer Layer ID.\r
+ * \param bEnDis Enable/Disable.\r
+ */\r
+void LCDD_EnableLayer( uint8_t bLayer, uint8_t bEnDis )\r
+{\r
+    volatile uint32_t *pReg = pEnableReg(bLayer);\r
+    volatile uint32_t *pBlR = pBlenderReg(bLayer);\r
+    if (pReg && bLayer > LCDD_CONTROLLER)\r
+    {\r
+        if (bEnDis)\r
+        {\r
+            pReg[0]  = LCDC_BASECHER_CHEN | LCDC_BASECHER_UPDATEEN;\r
+            pBlR[0] |= LCDC_HEOCFG12_DMA | LCDC_HEOCFG12_OVR;\r
+        }\r
+        else\r
+        {\r
+            pReg[1]  = LCDC_BASECHDR_CHDIS;\r
+            pBlR[0] &= ~(LCDC_HEOCFG12_DMA | LCDC_HEOCFG12_OVR);\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Refresh layer\r
+ * \param bLayer Layer ID.\r
+ */\r
+void LCDD_Refresh( uint8_t bLayer )\r
+{\r
+    volatile uint32_t *pBlR = pBlenderReg(bLayer);\r
+    volatile uint32_t *pEnR = pEnableReg(bLayer);\r
+    if (pBlR)\r
+    {\r
+        if (pEnR[2] & LCDC_OVRCHSR1_CHSR)\r
+        {\r
+            pBlR[0] |=  LCDC_HEOCFG12_DMA;\r
+            pEnR[0] = LCDC_OVRCHER1_UPDATEEN;\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Set display window position.\r
+ * \param bLayer Layer ID.\r
+ * \param x X position.\r
+ * \param y Y position.\r
+ */\r
+void LCDD_SetPosition( uint8_t bLayer,\r
+                       uint32_t x, uint32_t y )\r
+{\r
+    volatile uint32_t *pChReg = pEnableReg(bLayer);\r
+    volatile uint32_t *pXyReg = pWinReg(bLayer);\r
+    uint32_t w, h;\r
+\r
+    w = (pXyReg[1] & LCDC_OVR1CFG3_XSIZE_Msk) >> LCDC_OVR1CFG3_XSIZE_Pos;\r
+    h = (pXyReg[1] & LCDC_OVR1CFG3_YSIZE_Msk) >> LCDC_OVR1CFG3_YSIZE_Pos;\r
+\r
+    if (x+w >= BOARD_LCD_WIDTH)  x = BOARD_LCD_WIDTH - w;\r
+    if (y+h >= BOARD_LCD_HEIGHT) y = BOARD_LCD_HEIGHT - h;\r
+\r
+    if (pXyReg)\r
+    {\r
+        pXyReg[0] = LCDC_OVR1CFG2_XPOS(x) | LCDC_OVR1CFG2_YPOS(y);\r
+        if (pChReg[2] & LCDC_OVRCHSR1_CHSR)\r
+            pChReg[0] = LCDC_OVRCHER1_UPDATEEN;\r
+    }\r
+}\r
+\r
+/**\r
+ * Set Prioty of layer (only for HEO now).\r
+ * \param bLayer Layer ID (HEO).\r
+ * \param bPri   Prority value.\r
+ */\r
+void LCDD_SetPrioty( uint8_t bLayer, uint8_t bPri )\r
+{\r
+    Lcdc * pHw = LCDC;\r
+    if ( bLayer != LCDD_HEO ) return;\r
+    if (bPri)\r
+        pHw->LCDC_HEOCFG12 |=  LCDC_HEOCFG12_VIDPRI;\r
+    else\r
+        pHw->LCDC_HEOCFG12 &= ~LCDC_HEOCFG12_VIDPRI;\r
+    pHw->LCDC_HEOCHER = LCDC_HEOCHER_UPDATEEN;\r
+}\r
+\r
+/**\r
+ * Return Prioty of layer (only for HEO now).\r
+ * \param bLayer Layer ID (HEO).\r
+ */\r
+uint8_t LCDD_GetPrioty( uint8_t bLayer )\r
+{\r
+    Lcdc * pHw = LCDC;\r
+    if ( bLayer != LCDD_HEO ) return 0;\r
+    return (pHw->LCDC_HEOCFG12 & LCDC_HEOCFG12_VIDPRI) > 0;\r
+}\r
+\r
+/**\r
+ * Global & Local Alpha Enable/Disable\r
+ * \param bLayer   Layer ID.\r
+ * \param bEnDisLA Enable/Disable local  alpha.\r
+ * \param bEnDisGA Enable/Disable global alpha.\r
+ */\r
+void LCDD_EnableAlpha( uint8_t bLayer,\r
+                       uint8_t bEnDisLA,\r
+                       uint8_t bEnDisGA )\r
+{\r
+    volatile uint32_t *pEnR  = pEnableReg(bLayer);\r
+    volatile uint32_t *pCfgR = pBlenderReg(bLayer);\r
+    uint32_t cfg;\r
+    if (pCfgR)\r
+    {\r
+        cfg = (*pCfgR) & ~(LCDC_OVR1CFG9_LAEN | LCDC_OVR1CFG9_GAEN);\r
+        if (bEnDisGA) cfg |= LCDC_OVR1CFG9_GAEN;\r
+        if (bEnDisLA) cfg |= LCDC_OVR1CFG9_LAEN;\r
+        (*pCfgR) = cfg;\r
+\r
+        pEnR[0] = LCDC_OVRCHER1_UPDATEEN;\r
+    }\r
+}\r
+\r
+/**\r
+ * Set alpha value\r
+ * \param bLayer Layer ID (OVR1, HEO or CUR).\r
+ * \param bReverse Reverse alpha (alpha -> 1 - alpha).\r
+ * \param bAlpha   Global alpha value.\r
+ */\r
+void LCDD_SetAlpha( uint8_t bLayer,\r
+                    uint8_t bReverse,\r
+                    uint8_t bAlpha )\r
+{\r
+    volatile uint32_t *pEnR  = pEnableReg(bLayer);\r
+    volatile uint32_t *pCfgR = pBlenderReg(bLayer);\r
+    uint32_t cfg;\r
+\r
+    if (pCfgR)\r
+    {\r
+        cfg = (*pCfgR) & ~(LCDC_OVR1CFG9_REVALPHA | LCDC_OVR1CFG9_GA_Msk);\r
+        if (bReverse) cfg |= LCDC_OVR1CFG9_REVALPHA;\r
+        (*pCfgR) = cfg | LCDC_OVR1CFG9_GA(bAlpha);\r
+\r
+        pEnR[0] = LCDC_OVRCHER1_UPDATEEN;\r
+    }\r
+}\r
+\r
+/**\r
+ * Get alpha value\r
+ * \param bLayer Layer ID (OVR1, HEO or CUR).\r
+ */\r
+uint8_t LCDD_GetAlpha( uint8_t bLayer )\r
+{\r
+    Lcdc * pHw = LCDC;\r
+    volatile uint32_t *pCfg;\r
+    uint32_t bmMask = LCDC_OVR1CFG9_GA_Msk;\r
+    uint32_t bShift = LCDC_OVR1CFG9_GA_Pos;\r
+\r
+    switch( bLayer )\r
+    {\r
+        case LCDD_OVR1: pCfg = (volatile uint32_t *)&pHw->LCDC_OVR1CFG9; break;\r
+        case LCDD_OVR2: pCfg = (volatile uint32_t *)&pHw->LCDC_OVR2CFG9; break;\r
+        case LCDD_HEO:  pCfg = (volatile uint32_t *)&pHw->LCDC_HEOCFG9;  break;\r
+        default: return 0;\r
+    }\r
+\r
+    return (((*pCfg) >> bShift) & bmMask);\r
+}\r
+\r
+/**\r
+ * Enable and Set Color Keying\r
+ * \param bLayer  Layer ID (OVR1, HEO or CUR).\r
+ * \param bDstSrc Destination/Source keying.\r
+ * \param dwColor Color to matching.\r
+ * \param dwMask  Color bit mask.\r
+ */\r
+void LCDD_SetColorKeying( uint8_t bLayer, uint8_t bDstSrc,\r
+                          uint32_t dwColor, uint32_t dwMask )\r
+{\r
+    volatile uint32_t *pEnR    = pEnableReg(bLayer);\r
+    volatile uint32_t *pBCfgR  = pBlenderReg(bLayer);\r
+    volatile uint32_t *pColorR = pColorReg(bLayer);\r
+    if (pBCfgR == NULL) return;\r
+    /* Select the Overlay to Blit */\r
+    /* Dest/Source Keying */\r
+    if (bDstSrc)    *pBCfgR |=  LCDC_HEOCFG12_DSTKEY;\r
+    else            *pBCfgR &= ~LCDC_HEOCFG12_DSTKEY;\r
+    /* Activate Color Keying */\r
+    *pBCfgR |= LCDC_HEOCFG12_CRKEY;\r
+    /* Program Color Keying */\r
+    pColorR[1] = dwColor;\r
+    pColorR[2] = dwMask;\r
+    /* Update */\r
+    pEnR[0] = LCDC_HEOCHER_UPDATEEN;\r
+}\r
+\r
+/**\r
+ * Disable Color Keying\r
+ * \param bLayer  Layer ID (OVR1, HEO or CUR).\r
+ */\r
+void LCDD_DisableColorKeying( uint8_t bLayer )\r
+{\r
+    volatile uint32_t *pEnR    = pEnableReg(bLayer);\r
+    volatile uint32_t *pBCfgR  = pBlenderReg(bLayer);\r
+    volatile uint32_t *pColorR = pColorReg(bLayer);\r
+    if (pBCfgR == NULL) return;\r
+    *pBCfgR &= ~LCDC_HEOCFG12_CRKEY;\r
+    pColorR[2] = 0;\r
+    /* Update */\r
+    pEnR[0] = LCDC_HEOCHER_UPDATEEN;\r
+}\r
+\r
+/**\r
+ * Set Color Lookup Table\r
+ * \param bLayer   Layer ID (OVR1, HEO or CUR).\r
+ * \param pCLUT    Pointer to color lookup table.\r
+ * \param bpp      Bits Per Pixel (1, 2, 4, 8).\r
+ * \param nbColors Number of colors indexed in table.\r
+ */\r
+void LCDD_SetCLUT( uint8_t bLayer,\r
+                   uint32_t *pCLUT,\r
+                   uint8_t bpp, uint8_t nbColors )\r
+{\r
+    //Lcdc *pHw = LCDC;\r
+    volatile uint32_t* pCLUTR = pCLUTReg(bLayer);\r
+    sCLUTInfo *        pInfo  = &pLayer(bLayer)->clut;\r
+\r
+    if (pInfo == NULL) return;\r
+\r
+    pInfo->bpp = bpp;\r
+    /* Customize CLUT */\r
+    if (pCLUT)\r
+    {\r
+        uint32_t i;\r
+        if (nbColors == 0) nbColors = 1 << bpp;\r
+        pInfo->nbColors = nbColors;\r
+        for (i = 0; i < nbColors; i ++) pCLUTR[i] = pCLUT[i];\r
+    }\r
+    /* Build CLUT */\r
+    else\r
+    {\r
+        pInfo->nbColors = 1 << bpp;\r
+        switch (bpp)\r
+        {\r
+            case 1: LCDD_BuildCLUT1(pCLUTR); break;\r
+            case 2: LCDD_BuildCLUT2(pCLUTR); break;\r
+            case 4: LCDD_BuildCLUT4(pCLUTR); break;\r
+            case 8: LCDD_BuildCLUT8(pCLUTR); break;\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Display an image on specified layer.\r
+ * (Image scan origion: Left -> Right, Top -> Bottom.)\r
+ * \note w & h should be the rotated result.\r
+ * \note for LCDD_BASE: x, y don't care. w always > 0.\r
+ * \note for LCDD_HEO:imgW & imgH is used.\r
+ * \param bLayer  Layer ID (OVR1, HEO or CUR).\r
+ * \param pBuffer Pointer to image data.\r
+ * \param bPP     Bits Per Pixel.\r
+ *                - 16: TRGB 1555\r
+ *                - 24:  RGB  888  packed\r
+ *                - 32: ARGB 8888\r
+ * \param x       X position.\r
+ * \param y       Y position.\r
+ * \param w       Width  (<0 means Right  -> Left data).\r
+ * \param h       Height (<0 means Bottom -> Top data).\r
+ * \param imgW    Source image width.\r
+ * \param imgH    Source image height.\r
+ * \param wRotate Rotation (clockwise, 0, 90, 180, 270 accepted).\r
+ */\r
+void *LCDD_ShowBMPRotated( uint8_t bLayer,\r
+                           void* pBuffer, uint8_t bpp,\r
+                           uint32_t x, uint32_t y,\r
+                           int32_t  w, int32_t  h,\r
+                           uint32_t imgW, uint32_t imgH,\r
+                           int16_t wRotate)\r
+{\r
+  \r
+    //Lcdc *pHw = LCDC;\r
+    sLayer            *pLD   = pLayer(bLayer);\r
+    //sCLUTInfo         *pClut = &pLD->clut;\r
+    sLCDCDescriptor   *pTD   = &pLD->dmaD;\r
+    volatile uint32_t *pEnR  = pEnableReg(bLayer);\r
+    volatile uint32_t *pDmaR = pHeadReg(bLayer);\r
+    volatile uint32_t *pWinR = pWinReg(bLayer);\r
+    volatile uint32_t *pStrR = pStrideReg(bLayer);\r
+    volatile uint32_t *pSclR = pScaleReg(bLayer);\r
+    volatile uint32_t *pBlR  = pBlenderReg(bLayer);\r
+    volatile uint32_t *pCfgR = pCfgReg(bLayer);\r
+    uint8_t bPStride = LCDD_IsPStrideSupported(bLayer);\r
+\r
+    uint8_t bBottomUp  = (h < 0);\r
+    uint8_t bRightLeft = (w < 0);\r
+    uint32_t padding = 0;\r
+    int32_t srcW, srcH;\r
+    uint32_t bitsPRow, bytesPRow;\r
+    uint32_t bytesPPix = bpp >> 3;\r
+\r
+    void* pOldBuffer = pLD->pBuffer;\r
+\r
+    if (pCfgR == NULL)  return pOldBuffer;\r
+\r
+    //printf("Show %x @ %d: (%d,%d)+(%d,%d) img %d x %d * %d\n\r", pBuffer, bLayer, x, y, w, h, imgW, imgH, bpp);\r
+\r
+    switch (bpp)\r
+    {\r
+        case 16: /*  RGB 565 */\r
+            if((pCfgR[1] & LCDC_HEOCFG1_YUVEN)!= LCDC_HEOCFG1_YUVEN)\r
+            {\r
+                pCfgR[1] = LCDC_HEOCFG1_RGBMODE_16BPP_RGB_565;//LCDC_HEOCFG1_RGBMODE_16BPP_TRGB_1555;\r
+            }\r
+            break;\r
+        case 24: /*  RGB  888 packed */\r
+            pCfgR[1] = LCDC_HEOCFG1_RGBMODE_24BPP_RGB_888_PACKED;\r
+            break;\r
+        case 32: /* ARGB 8888 */\r
+            pCfgR[1] = LCDC_HEOCFG1_RGBMODE_32BPP_ARGB_8888;\r
+            break;\r
+         default: return pOldBuffer;\r
+    }\r
+    /* Windows position & size check */\r
+    if (h < 0)          h =- h;\r
+    if (w < 0)          w =- w;\r
+    if (x + w > BOARD_LCD_WIDTH)\r
+    {\r
+        //printf("! w %d -> %d\n\r", w, BOARD_LCD_WIDTH-x);\r
+        w = BOARD_LCD_WIDTH - x;\r
+    }\r
+    if (y + h > BOARD_LCD_HEIGHT)\r
+    {\r
+        //printf("! h %d -> %d\n\r", h, BOARD_LCD_HEIGHT-y);\r
+        h = BOARD_LCD_HEIGHT - y;\r
+    }\r
+    if (w == 0) w ++;\r
+    if (h == 0) h ++;\r
+    if (imgW == 0) imgW ++;\r
+    if (imgH == 0) imgH ++;\r
+\r
+    /* Only 0,(-)90,(-)180,(-)270 accepted */\r
+    switch(wRotate)\r
+    {\r
+        case 0: case 90: case 180: case 270:\r
+            break;\r
+        case -90: case -180: case -270:\r
+            wRotate += 360;\r
+            break;\r
+        default: return NULL;\r
+    }\r
+\r
+    /* Setup display buffer & window */\r
+    if (pBuffer) pLD->pBuffer = pBuffer;\r
+    else         pBuffer = pLD->pBuffer;\r
+\r
+    /* Set display buffer & mode */\r
+    bitsPRow  = imgW * bpp;\r
+    bytesPRow = bitsPRow >> 3;\r
+    if (bitsPRow & 0x7) bytesPRow ++;\r
+    if (bytesPRow & 0x3) padding = 4 - (bytesPRow & 0x3);\r
+\r
+    /* No X mirror supported layer, no Right->Left scan */\r
+    if (!bPStride)  bRightLeft = 0;\r
+\r
+    /* --------- Mirror & then rotate --------- */\r
+    /* Normal direction: Left,Top -> Right,Down */\r
+    if (   (!bRightLeft && !bBottomUp && wRotate ==   0)\r
+        || ( bRightLeft &&  bBottomUp && wRotate == 180) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* X0 ++ */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(0);\r
+        /* Y0 ++ */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(padding);\r
+        /* Pointer to Left,Top (x0,y0) */\r
+    }\r
+    /* X mirror: Right,Top -> Left,Down */\r
+    else if ( ( bRightLeft && !bBottomUp && wRotate ==   0)\r
+            ||(!bRightLeft &&  bBottomUp && wRotate == 180) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* X1 -- */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(0-2*bytesPPix);\r
+        /* Y0 ++ */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(bytesPRow*2+padding-2*bytesPPix);\r
+        /* Pointer to Right,Top (x1,y0) */\r
+        pBuffer = (void*)((uint32_t)pBuffer\r
+                + bytesPPix*(imgW-1));\r
+    }\r
+    /* Y mirror: Left,Down -> Right,Top */\r
+    else if ( (!bRightLeft &&  bBottomUp && wRotate ==   0)\r
+            ||( bRightLeft && !bBottomUp && wRotate == 180) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* X0 ++ */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(0);\r
+        /* Y1 -- */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(0-(bytesPRow*2+padding));\r
+        /* Pointer to Left,Down (x0,y1) */\r
+        pBuffer = (void*)((uint32_t)pBuffer\r
+                + (bytesPRow+padding)*(imgH-1));\r
+    }\r
+    /* X,Y mirror: Right,Top -> Left,Down */\r
+    else if ( ( bRightLeft &&  bBottomUp && wRotate ==   0)\r
+            ||(!bRightLeft && !bBottomUp && wRotate == 180) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* X1 -- */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(0-2*bytesPPix);\r
+        /* Y1 -- */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(0-(bytesPPix*2+padding));\r
+        /* Pointer to Left,Down (x1,y1) */\r
+        pBuffer = (void*)((uint32_t)pBuffer\r
+                + (bytesPRow+padding)*(imgH-1)\r
+                + (bytesPPix)*(imgW-1));\r
+    }\r
+    /* Rotate  90: Down,Left -> Top,Right (with w,h swap) */\r
+    else if ( (!bRightLeft && !bBottomUp && wRotate ==  90)\r
+            ||( bRightLeft &&  bBottomUp && wRotate == 270) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* Y -- as pixels in row */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(0-(bytesPPix+bytesPRow+padding));\r
+        /* X ++ as rows */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE((bytesPRow+padding)*(imgH-1));\r
+        /* Pointer to Bottom,Left */\r
+        pBuffer = (void*)((uint32_t)pBuffer\r
+                + (bytesPRow+padding)*(imgH-1));\r
+    }\r
+    /* Rotate 270: Top,Right -> Down,Left (with w,h swap) */\r
+    else if ( (!bRightLeft && !bBottomUp && wRotate == 270)\r
+            ||( bRightLeft &&  bBottomUp && wRotate ==  90) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* Y ++ as pixels in row */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(bytesPRow+padding-bytesPPix);\r
+        /* X -- as rows */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(0-2*bytesPPix-(bytesPRow+padding)*(imgH-1));\r
+        /* Pointer to top right */\r
+        pBuffer = (void*)((uint32_t)pBuffer\r
+                + bytesPPix*(imgW-1));\r
+    }\r
+    /* Mirror X then Rotate 90: Down,Right -> Top,Left */\r
+    else if ( ( bRightLeft && !bBottomUp && wRotate ==  90)\r
+            ||(!bRightLeft &&  bBottomUp && wRotate == 270) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* Y -- as pixels in row */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(0-(bytesPPix+bytesPRow+padding));\r
+        /* X -- as rows */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(0-2*bytesPPix+(bytesPRow+padding)*(imgH-1));\r
+        /* Pointer to down right (x1,y1) */\r
+        pBuffer = (void*)((uint32_t)pBuffer\r
+                + (bytesPRow+padding)*(imgH-1)\r
+                + (bytesPPix)*(imgW-1));\r
+    }\r
+    /* Mirror Y then Rotate 90: Top,Left -> Down,Right */\r
+    else if ( (!bRightLeft &&  bBottomUp && wRotate ==  90)\r
+            ||( bRightLeft && !bBottomUp && wRotate == 270) )\r
+    {\r
+        /* No rotation optimization */\r
+        pCfgR[0] |= LCDC_HEOCFG0_ROTDIS;\r
+        /* Y ++ as pixels in row */\r
+        if (bPStride)   pStrR[1] = LCDC_HEOCFG6_PSTRIDE(bytesPRow+padding-bytesPPix);\r
+        /* X ++ as rows */\r
+        pStrR[0] = LCDC_HEOCFG5_XSTRIDE(0-(bytesPRow+padding)*(imgH-1));\r
+        /* Pointer to top left (x0,y0) */\r
+    }\r
+    /** DMA is running, just add new descriptor to queue */\r
+    if (pBlR[0] & LCDC_HEOCFG12_DMA)\r
+    {\r
+        pTD->addr = (uint32_t)pBuffer;\r
+        pTD->ctrl = LCDC_HEOCTRL_DFETCH;\r
+        pTD->next = (uint32_t)pTD;\r
+        pDmaR[0] = (uint32_t)pTD;\r
+        pEnR[0] = LCDC_HEOCHER_A2QEN;\r
+    }\r
+    else\r
+    {\r
+        /* 2. Write the channel descriptor (DSCR) structure in the system memory by\r
+              writing DSCR.CHXADDR Frame base address, DSCR.CHXCTRL channel control\r
+              and DSCR.CHXNEXT next descriptor location.        \r
+           3. If more than one descriptor is expected, the DFETCH field of\r
+              DSCR.CHXCTRL is set to one to enable the descriptor fetch operation.      \r
+           4. Write the DSCR.CHXNEXT register with the address location of the\r
+              descriptor structure and set DFETCH field of the DSCR.CHXCTRL register\r
+              to one. */\r
+        LCDD_SetDMA(pBuffer, pTD, (uint32_t)pDmaR);\r
+    }\r
+    CP15_flush_dcache_for_dma ((uint32_t)pTD, ((uint32_t)pTD) + sizeof(pTD));\r
+    /* Set window & position */\r
+    if (pWinR)\r
+    {\r
+        pWinR[0] = LCDC_HEOCFG2_XPOS(x) | LCDC_HEOCFG2_YPOS(y);\r
+        pWinR[1] = LCDC_HEOCFG3_XSIZE(w-1) | LCDC_HEOCFG3_YSIZE(h-1);\r
+    }\r
+    /* Scaling setup */\r
+    if (pSclR)\r
+    {\r
+\r
+        /* Image size only used in scaling */\r
+        /* Scaling target */\r
+        if (wRotate == 90 || wRotate == 270)\r
+        {\r
+            srcW = imgH; srcH = imgW;\r
+        }\r
+        else\r
+        {\r
+            srcW = imgW; srcH = imgH;\r
+        }\r
+        pWinR[2] = LCDC_HEOCFG4_XMEMSIZE(srcW-1) | LCDC_HEOCFG4_YMEMSIZE(srcH-1);\r
+        /* Scaled */\r
+        if (w != srcW || h != srcH)\r
+        {\r
+            uint16_t wYf, wXf;\r
+            wXf = LCDD_CalcScaleFactor(w, srcW);\r
+            wYf = LCDD_CalcScaleFactor(h, srcH);\r
+            //printf("- Scale(%d,%d)\n\r", wXf, wYf);\r
+            pSclR[0] = LCDC_HEOCFG13_YFACTOR(wYf)\r
+                     | LCDC_HEOCFG13_XFACTOR(wXf)\r
+                     | LCDC_HEOCFG13_SCALEN\r
+                     ;\r
+        }\r
+        /* Disable scaling */\r
+        else\r
+        {\r
+            pSclR[0] = 0;\r
+        }\r
+    }\r
+    /* Enable DMA */\r
+    if (pBuffer)\r
+    {\r
+        pBlR[0] |= LCDC_HEOCFG12_DMA\r
+                 | LCDC_HEOCFG12_OVR\r
+                 ;\r
+    }\r
+    /* Enable & Update */\r
+    /* 5. Enable the relevant channel by writing one to the CHEN field of the\r
+          CHXCHER register. */\r
+    pEnR[0] = LCDC_HEOCHER_UPDATEEN | LCDC_HEOCHER_CHEN;\r
+\r
+    /* 6. An interrupt may be raised if unmasked when the descriptor has been\r
+          loaded.  */\r
+\r
+    return pOldBuffer;\r
+}\r
+\r
+/**\r
+ * Display an image on specified layer.\r
+ * (Image scan: Left -> Right, Top -> Bottom.)\r
+ * \param bLayer  Layer ID (OVR1, HEO or CUR).\r
+ * \param pBuffer Pointer to image data.\r
+ * \param bPP     Bits Per Pixel.\r
+ *                - 16: TRGB 1555\r
+ *                - 24:  RGB  888  packed\r
+ *                - 32: ARGB 8888\r
+ * \param x       X position.\r
+ * \param y       Y position.\r
+ * \param w       Width  (<0 means Right  -> Left data).\r
+ * \param h       Height (<0 means Bottom -> Top data).\r
+ * \param imgW    Source image width.\r
+ * \param imgH    Source image height.\r
+ * \return Pointer to old display image data.\r
+ */\r
+void *LCDD_ShowBMPScaled( uint8_t bLayer,\r
+                          void* pBuffer, uint8_t bpp,\r
+                          uint32_t x, uint32_t y,\r
+                          int32_t  w, int32_t  h,\r
+                          uint32_t imgW, uint32_t imgH )\r
+{\r
+    return LCDD_ShowBMPRotated(bLayer, pBuffer, bpp,\r
+                               x, y, w, h, imgW, imgH, 0);\r
+}\r
+\r
+/**\r
+ * Display an image on specified layer.\r
+ * (Image scan: Left -> Right, Top -> Bottom.)\r
+ * \param bLayer  Layer ID (OVR1, HEO or CUR).\r
+ * \param pBuffer Pointer to image data.\r
+ * \param bPP     Bits Per Pixel.\r
+ *                - 16: TRGB 1555\r
+ *                - 24:  RGB  888  packed\r
+ *                - 32: ARGB 8888\r
+ * \param x       X position.\r
+ * \param y       Y position.\r
+ * \param w       Width\r
+ * \param h       Height (<0 means Bottom -> Top data).\r
+ * \return Pointer to old display image data.\r
+ */\r
+void *LCDD_ShowBMP( uint8_t bLayer,\r
+                    void* pBuffer, uint8_t bpp,\r
+                    uint32_t x, uint32_t y,\r
+                    int32_t  w, int32_t  h )\r
+{\r
+    return LCDD_ShowBMPRotated(bLayer, pBuffer, bpp,\r
+                               x, y, w, h,\r
+                               w, (h < 0) ? (-h) : h,\r
+                               0);\r
+}\r
+\r
+/**\r
+ * Start display on base layer\r
+ * \param pBuffer   Pointer to image data.\r
+ * \param bpp       Bits Per Pixel.\r
+ * \param bBottomUp Scan from bottom to top.\r
+ * \return Pointer to old display image data.\r
+ */\r
+void *LCDD_ShowBase( void* pBuffer, uint8_t bpp, uint8_t bBottomUp )\r
+{\r
+    return LCDD_ShowBMP(LCDD_BASE, pBuffer, bpp,\r
+                        0, 0,\r
+                        BOARD_LCD_WIDTH,\r
+                        bBottomUp ? -BOARD_LCD_HEIGHT : BOARD_LCD_HEIGHT);\r
+}\r
+\r
+/**\r
+ * Stop display on base layer\r
+ */\r
+void LCDD_StopBase( void )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+\r
+    if (!(pHw->LCDC_BASECHSR & LCDC_BASECHSR_CHSR))\r
+        return;\r
+\r
+    /* 1. Clear the DFETCH bit in the DSCR.CHXCTRL field of the DSCR structure\r
+          will disable the channel at the end of the frame. */\r
+    /* 2. Set the DSCR.CHXNEXT field of the DSCR structure will disable the\r
+          channel at the end of the frame. */\r
+    LCDD_ClearDMA(&lcddBase.dmaD, (uint32_t)&pHw->LCDC_BASEADDR);\r
+\r
+    /* 3. Writing one to the CHDIS field of the CHXCHDR register will disable\r
+          the channel at the end of the frame. */\r
+    pHw->LCDC_BASECHDR = LCDC_BASECHDR_CHDIS;\r
+\r
+    /* 4. Writing one to the CHRST field of the CHXCHDR register will disable\r
+          the channel immediately. This may occur in the middle of the image. */\r
+\r
+    /* 5. Poll CHSR field in the CHXCHSR register until the channel is\r
+          successfully disabled. */\r
+    while (pHw->LCDC_BASECHSR & LCDC_BASECHSR_CHSR);\r
+}\r
+\r
+/**\r
+ * Start display on overlay 1 layer\r
+ */\r
+void *LCDD_ShowOvr1( void* pBuffer, uint8_t bpp,\r
+                     uint32_t x, uint32_t y, int32_t w, int32_t h )\r
+{\r
+    return LCDD_ShowBMP(LCDD_OVR1,\r
+                        pBuffer, bpp, x, y, w, h);\r
+}\r
+\r
+/**\r
+ * Stop display on overlay 1 layer\r
+ */\r
+void LCDD_StopOvr1( void )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+\r
+    if (!(pHw->LCDC_OVRCHSR1 & LCDC_OVRCHSR1_CHSR))\r
+        return;\r
+\r
+    /* 1. Clear the DFETCH bit in the DSCR.CHXCTRL field of the DSCR structure\r
+          will disable the channel at the end of the frame. */\r
+    /* 2. Set the DSCR.CHXNEXT field of the DSCR structure will disable the\r
+          channel at the end of the frame. */\r
+    LCDD_ClearDMA(&lcddOvr1.dmaD, (uint32_t)&pHw->LCDC_OVRADDR1);\r
+\r
+    /* 3. Writing one to the CHDIS field of the CHXCHDR register will disable\r
+          the channel at the end of the frame. */\r
+    pHw->LCDC_OVRCHDR1 = LCDC_OVRCHDR1_CHDIS;\r
+\r
+    /* 4. Writing one to the CHRST field of the CHXCHDR register will disable\r
+          the channel immediately. This may occur in the middle of the image. */\r
+\r
+    /* 5. Poll CHSR field in the CHXCHSR register until the channel is\r
+          successfully disabled. */\r
+    while (pHw->LCDC_OVRCHSR1 & LCDC_OVRCHSR1_CHSR);\r
+}\r
+\r
+/**\r
+ * Start display on High End Overlay layer\r
+ */\r
+void * LCDD_ShowHeo( void *pBuffer, uint8_t bpp,\r
+                     uint32_t x, uint32_t y, int32_t w, int32_t h,\r
+                     uint32_t imgW, uint32_t imgH )\r
+{\r
+    return LCDD_ShowBMPRotated(LCDD_HEO,\r
+                               pBuffer, bpp,\r
+                               x, y, w, h,\r
+                               imgW,imgH,\r
+                               0);\r
+}\r
+\r
+/**\r
+ * Stop display on High End Overlay layer\r
+ */\r
+void LCDD_StopHeo( void )\r
+{\r
+    Lcdc *pHw = LCDC;\r
+\r
+    if (!(pHw->LCDC_HEOCHSR  & LCDC_HEOCHSR_CHSR))\r
+        return;\r
+\r
+    /* 1. Clear the DFETCH bit in the DSCR.CHXCTRL field of the DSCR structure\r
+          will disable the channel at the end of the frame. */\r
+    /* 2. Set the DSCR.CHXNEXT field of the DSCR structure will disable the\r
+          channel at the end of the frame. */\r
+    LCDD_ClearDMA(&lcddHeo.dmaD[0], (uint32_t)&pHw->LCDC_HEOADDR);\r
+    LCDD_ClearDMA(&lcddHeo.dmaD[1], (uint32_t)&pHw->LCDC_HEOUADDR);\r
+    LCDD_ClearDMA(&lcddHeo.dmaD[2], (uint32_t)&pHw->LCDC_HEOVADDR);\r
+\r
+    /* 3. Writing one to the CHDIS field of the CHXCHDR register will disable\r
+          the channel at the end of the frame. */\r
+    pHw->LCDC_HEOCHDR  = LCDC_HEOCHDR_CHDIS;\r
+\r
+    /* 4. Writing one to the CHRST field of the CHXCHDR register will disable\r
+          the channel immediately. This may occur in the middle of the image. */\r
+\r
+    /* 5. Poll CHSR field in the CHXCHSR register until the channel is\r
+          successfully disabled. */\r
+    while (pHw->LCDC_HEOCHSR  & LCDC_HEOCHSR_CHSR);\r
+}\r
+\r
+/**\r
+ * Start display on Hardware Cursor layer\r
+ * (Default transparent color is set to #000000, black)\r
+ */\r
+void *LCDD_ShowHcr( void* pBuffer, uint8_t bpp,\r
+                    uint32_t x, uint32_t y, int32_t w, int32_t h )\r
+{\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Stop display on Hardware Cursor layer\r
+ */\r
+void LCDD_StopHcr( void )\r
+{\r
+   \r
+}\r
+\r
+\r
+/**\r
+ * \brief Turn on the LCD.\r
+ */\r
+void LCDD_On(void)\r
+{\r
+    Pmc *pPmc = PMC;\r
+    Lcdc *pHw = LCDC;\r
+\r
+    /* Enable peripheral clock */\r
+    PMC_EnablePeripheral(ID_LCDC);\r
+    pPmc->PMC_SCER = (0x1u << 3);\r
+\r
+    /* 1. Configure LCD timing parameters, signal polarity and clock period. */\r
+    pHw->LCDC_LCDCFG0 = LCDC_LCDCFG0_CLKDIV((BOARD_MCK*2)/BOARD_LCD_PIXELCLOCK-2)\r
+                       |LCDC_LCDCFG0_CGDISHEO\r
+                       |LCDC_LCDCFG0_CGDISOVR1\r
+                       |LCDC_LCDCFG0_CGDISOVR2\r
+                       |LCDC_LCDCFG0_CGDISBASE\r
+                       |LCDC_LCDCFG0_CLKPWMSEL\r
+                       |LCDC_LCDCFG0_CLKSEL;\r
+                       //|LCDC_LCDCFG0_CLKPOL;\r
+\r
+    pHw->LCDC_LCDCFG1 = LCDC_LCDCFG1_VSPW(BOARD_LCD_TIMING_VPW-1)\r
+                       |LCDC_LCDCFG1_HSPW(BOARD_LCD_TIMING_HPW-1);\r
+\r
+    pHw->LCDC_LCDCFG2 = LCDC_LCDCFG2_VBPW(BOARD_LCD_TIMING_VBP)\r
+                       |LCDC_LCDCFG2_VFPW(BOARD_LCD_TIMING_VFP-1);\r
+\r
+    pHw->LCDC_LCDCFG3 = LCDC_LCDCFG3_HBPW(BOARD_LCD_TIMING_HBP-1)\r
+                       |LCDC_LCDCFG3_HFPW(BOARD_LCD_TIMING_HFP-1);\r
+\r
+    pHw->LCDC_LCDCFG4 = LCDC_LCDCFG4_RPF(BOARD_LCD_HEIGHT-1)\r
+                       |LCDC_LCDCFG4_PPL(BOARD_LCD_WIDTH-1);\r
+\r
+    pHw->LCDC_LCDCFG5 = LCDC_LCDCFG5_GUARDTIME(30)\r
+                       |LCDC_LCDCFG5_MODE_OUTPUT_24BPP\r
+                       |LCDC_LCDCFG5_DISPDLY\r
+                       |LCDC_LCDCFG5_VSPDLYS\r
+                       |LCDC_LCDCFG5_VSPOL\r
+                       |LCDC_LCDCFG5_HSPOL;\r
+\r
+    pHw->LCDC_LCDCFG6 = LCDC_LCDCFG6_PWMCVAL(0xF0)\r
+                       |LCDC_LCDCFG6_PWMPOL\r
+                       |LCDC_LCDCFG6_PWMPS(6);\r
+\r
+    /* 2. Enable the Pixel Clock by writing one to the CLKEN field of the\r
+          LCDC_LCDEN register. */\r
+    pHw->LCDC_LCDEN = LCDC_LCDEN_CLKEN;\r
+    /* 3. Poll CLKSTS field of the LCDC_LCDSR register to check that the clock\r
+       is running. */\r
+    while(!(pHw->LCDC_LCDSR & LCDC_LCDSR_CLKSTS));\r
+\r
+    /* 4. Enable Horizontal and Vertical Synchronization by writing one to the\r
+          SYNCEN field of the LCDC_LCDEN register. */\r
+    pHw->LCDC_LCDEN = LCDC_LCDEN_SYNCEN;\r
+    /* 5. Poll LCDSTS field of the LCDC_LCDSR register to check that the\r
+          synchronization is up. */\r
+    while(!(pHw->LCDC_LCDSR & LCDC_LCDSR_LCDSTS));\r
+\r
+    /* 6. Enable the display power signal writing one to the DISPEN field of the\r
+          LCDC_LCDEN register. */\r
+    pHw->LCDC_LCDEN = LCDC_LCDEN_DISPEN;\r
+    /* 7. Poll DISPSTS field of the LCDC_LCDSR register to check that the power\r
+          signal is activated. */\r
+    while(!(pHw->LCDC_LCDSR & LCDC_LCDSR_DISPSTS));\r
+    /* 8. Enable backlight */\r
+    pHw->LCDC_LCDEN = LCDC_LCDEN_PWMEN;\r
+}\r
+\r
+/**\r
+ * \brief Turn off the LCD.\r
+ */\r
+void LCDD_Off(void)\r
+{\r
+    Lcdc *pHw  = LCDC;\r
+    Pmc  *pPmc = PMC;\r
+\r
+    /* 1. Clear the DFETCH bit in the DSCR.CHXCTRL field of the DSCR structure\r
+          will disable the channel at the end of the frame. */\r
+\r
+    /* 2. Set the DSCR.CHXNEXT field of the DSCR structure will disable the\r
+          channel at the end of the frame. */\r
+\r
+    /* Disable all DMA channel descriptors */\r
+    LCDD_ClearDMA(&lcddBase.dmaD, (uint32_t)&pHw->LCDC_BASEADDR);\r
+    LCDD_ClearDMA(&lcddOvr1.dmaD, (uint32_t)&pHw->LCDC_OVRADDR1);\r
+    LCDD_ClearDMA(&lcddOvr2.dmaD, (uint32_t)&pHw->LCDC_OVRADDR2);\r
+    LCDD_ClearDMA(&lcddHeo.dmaD[0], (uint32_t)&pHw->LCDC_HEOADDR);\r
+    LCDD_ClearDMA(&lcddHeo.dmaD[1], (uint32_t)&pHw->LCDC_HEOUADDR);\r
+    LCDD_ClearDMA(&lcddHeo.dmaD[2], (uint32_t)&pHw->LCDC_HEOVADDR);\r
+\r
+    /* 3. Writing one to the CHDIS field of the CHXCHDR register will disable\r
+          the channel at the end of the frame. */\r
+\r
+    /* Disable DMA channels */\r
+    pHw->LCDC_BASECHDR = LCDC_BASECHDR_CHDIS;\r
+    pHw->LCDC_OVRCHDR1 = LCDC_OVRCHDR1_CHDIS;\r
+    pHw->LCDC_HEOCHDR  = LCDC_HEOCHDR_CHDIS;\r
+    pHw->LCDC_BASECFG4 = 0;\r
+\r
+    /* 4. Writing one to the CHRST field of the CHXCHDR register will disable\r
+          the channel immediately. This may occur in the middle of the image. */\r
+\r
+    /* 5. Poll CHSR field in the CHXCHSR register until the channel is\r
+          successfully disabled. */\r
+    while (pHw->LCDC_BASECHSR & LCDC_BASECHSR_CHSR);\r
+    while (pHw->LCDC_OVRCHSR1 & LCDC_OVRCHSR1_CHSR);\r
+    while (pHw->LCDC_HEOCHSR  & LCDC_HEOCHSR_CHSR);\r
+\r
+    \r
+    /* Timing Engine Power Down Software Operation */\r
+\r
+    /* Disable backlight */\r
+    pHw->LCDC_LCDDIS = LCDC_LCDDIS_PWMDIS;\r
+    while (pHw->LCDC_LCDSR & LCDC_LCDSR_PWMSTS);\r
+\r
+    /* 1. Disable the DISP signal writing DISPDIS field of the LCDC_LCDDIS\r
+          register. */\r
+    pHw->LCDC_LCDDIS = LCDC_LCDDIS_DISPDIS;\r
+    /* 2. Poll DISPSTS field of the LCDC_LCDSR register to verify that the DISP\r
+          is no longer activated. */\r
+    while (pHw->LCDC_LCDSR & LCDC_LCDSR_DISPSTS);\r
+    \r
+    /* 3. Disable the hsync and vsync signals by writing one to SYNCDIS field of\r
+          the LCDC_LCDDIS register. */\r
+    pHw->LCDC_LCDDIS = LCDC_LCDDIS_SYNCDIS;\r
+    /* 4. Poll LCDSTS field of the LCDC_LCDSR register to check that the\r
+          synchronization is off. */\r
+    while (pHw->LCDC_LCDSR & LCDC_LCDSR_LCDSTS);\r
+    \r
+    /* 5. Disable the Pixel clock by writing one in the CLKDIS field of the\r
+          LCDC_LCDDIS register. */\r
+    pHw->LCDC_LCDDIS = LCDC_LCDDIS_CLKDIS;\r
+    /* 6. Poll CLKSTS field of the LCDC_LCDSR register to check that Pixel Clock\r
+          is disabled. */\r
+    while(pHw->LCDC_LCDSR & LCDC_LCDSR_CLKSTS);\r
+\r
+    /* Disable peripheral clock */\r
+    PMC_DisablePeripheral(ID_LCDC);\r
+    /* LCD Clock Disable */\r
+     pPmc->PMC_SCDR = (0x1u << 3);\r
+    \r
+}\r
+\r
+/**\r
+ * \brief Set the backlight of the LCD.\r
+ *\r
+ * \param level   Backlight brightness level [1..255],\r
+ *                255 means maximum brightness.\r
+ */\r
+void LCDD_SetBacklight (uint32_t level)\r
+{\r
+    Lcdc *pHw = LCDC;\r
+    uint32_t cfg = pHw->LCDC_LCDCFG6 & ~LCDC_LCDCFG6_PWMCVAL_Msk;\r
+\r
+    pHw->LCDC_LCDCFG6 = cfg | LCDC_LCDCFG6_PWMCVAL(level);\r
+}\r
+\r
+/**\r
+ * Get canvas layer for LCDD_Draw*\r
+ * \return Layer information pointer.\r
+ */\r
+sLCDDLayer *LCDD_GetCanvas(void)\r
+{\r
+    return &lcddCanvas;\r
+}\r
+\r
+/**\r
+ * Flush the current canvas layer*\r
+ */\r
+void LCDD_Flush_CurrentCanvas(void)\r
+{\r
+    sLCDDLayer *pCurrentLayer;\r
+    uint32_t base, height, width;\r
+    pCurrentLayer = LCDD_GetCanvas();\r
+    base = (uint32_t)pCurrentLayer->pBuffer;\r
+    height = pCurrentLayer->wImgH;\r
+    width = pCurrentLayer->wImgW;\r
+    CP15_flush_dcache_for_dma ((uint32_t)base, ((uint32_t)base) + height*width*4);\r
+}\r
+\r
+/**\r
+ * Select an LCD layer as canvas layer.\r
+ * Then all drawing operations will apply to current display buffer\r
+ * of selected layer.\r
+ * \note If there is no display buffer for the layer (not running)\r
+ *       selection fails.\r
+ */\r
+uint8_t LCDD_SelectCanvas(uint8_t bLayer)\r
+{\r
+    sLayer *pLD = pLayer(bLayer);\r
+    volatile uint32_t *pXyR = pWinReg(bLayer);\r
+    volatile uint32_t *pCfR = pCfgReg(bLayer);\r
+\r
+    if (pLD == NULL) return 0;\r
+\r
+    lcddCanvas.pBuffer = (void*)pLD->pBuffer;\r
+    if (pXyR)\r
+    {\r
+        lcddCanvas.wImgW = (pXyR[1] & LCDC_HEOCFG3_XSIZE_Msk) >> LCDC_HEOCFG3_XSIZE_Pos;\r
+        lcddCanvas.wImgH = (pXyR[1] & LCDC_HEOCFG3_YSIZE_Msk) >> LCDC_HEOCFG3_YSIZE_Pos;\r
+    }\r
+    else\r
+    {\r
+        lcddCanvas.wImgW = BOARD_LCD_WIDTH;\r
+        lcddCanvas.wImgH = BOARD_LCD_HEIGHT;\r
+    }\r
+    lcddCanvas.bMode = LCDD_GetBitsPerPixel(pCfR[1] & LCDC_HEOCFG1_RGBMODE_Msk);\r
+    lcddCanvas.bLayer = bLayer;\r
+\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * Create a blank canvas on a display layer for further operations.\r
+ * \param bLayer    Layer ID.\r
+ * \param pBuffer   Pointer to canvas display buffer.\r
+ * \param bBPP      Bits Per Pixel.\r
+ * \param wX        Canvas X coordinate on base.\r
+ * \param wY        Canvas Y coordinate on base.\r
+ * \param wW        Canvas width.\r
+ * \param wH        Canvas height.\r
+ * \note The content in buffer is destroied.\r
+ */\r
+void *LCDD_CreateCanvas(uint8_t bLayer,\r
+                        void* pBuffer, uint8_t bBPP,\r
+                        uint16_t wX, uint16_t wY,\r
+                        uint16_t wW, uint16_t wH )\r
+{\r
+    void* pOldBuffer;\r
+    uint32_t maxW = BOARD_LCD_WIDTH;\r
+    uint32_t maxH = BOARD_LCD_HEIGHT;\r
+\r
+    uint32_t bitsPR, bytesPR;\r
+\r
+    switch (bLayer)\r
+    {\r
+        case LCDD_BASE:\r
+            wX = 0; wY = 0;\r
+            break;\r
+        case LCDD_OVR1:case LCDD_OVR2: case LCDD_HEO:\r
+            /* Size check */\r
+            if (wX + wW > BOARD_LCD_WIDTH || wY + wH > BOARD_LCD_HEIGHT)\r
+                return NULL;\r
+            break;\r
+        case LCDD_CUR:\r
+            /* Size check */\r
+            if (wX + wW > BOARD_LCD_WIDTH || wY + wH > BOARD_LCD_HEIGHT\r
+                || wW > 128 || wH > 128)\r
+                return NULL;\r
+            maxW = maxH = 128;\r
+            break;\r
+    }\r
+    if (wW == 0) wW = maxW - wX;\r
+    if (wH == 0) wH = maxH - wY;\r
+\r
+    bitsPR = wW * bBPP;\r
+    bytesPR = (bitsPR&0x7) ? (bitsPR/8 + 1) : (bitsPR/8);\r
+    memset(pBuffer, 0xFF, bytesPR*wH);\r
+    pOldBuffer = LCDD_ShowBMPRotated(bLayer, pBuffer, bBPP,\r
+                                     wX, wY, wW, wH, wW, wH,\r
+                                     0);\r
+\r
+    lcddCanvas.bLayer  = bLayer;\r
+    lcddCanvas.bMode   = bBPP;\r
+    lcddCanvas.pBuffer = pBuffer;\r
+    lcddCanvas.wImgW   = wW;\r
+    lcddCanvas.wImgH   = wH;\r
+\r
+    return pOldBuffer;\r
+}\r
+\r
+/**@}*/\r
+#endif /* ifdef LCDC */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/led.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/led.c
new file mode 100644 (file)
index 0000000..8a03c09
--- /dev/null
@@ -0,0 +1,168 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Local Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#ifdef PINS_LEDS\r
+static const Pin pinsLeds[] = { PINS_LEDS } ;\r
+static const uint32_t numLeds = PIO_LISTSIZE( pinsLeds ) ;\r
+#endif\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global Functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  Configures the pin associated with the given LED number. If the LED does\r
+ *  not exist on the board, the function does nothing.\r
+ *  \param led  Number of the LED to configure.\r
+ *  \return 1 if the LED exists and has been configured; otherwise 0.\r
+ */\r
+extern uint32_t LED_Configure( uint32_t dwLed )\r
+{\r
+#ifdef PINS_LEDS\r
+    // Check that LED exists\r
+    if ( dwLed >= numLeds)\r
+    {\r
+\r
+        return 0;\r
+    }\r
+\r
+    // Configure LED\r
+    return ( PIO_Configure( &pinsLeds[dwLed], 1 ) ) ;\r
+#else\r
+    return 0 ;\r
+#endif\r
+}\r
+\r
+/**\r
+ *  Turns the given LED on if it exists; otherwise does nothing.\r
+ *  \param led  Number of the LED to turn on.\r
+ *  \return 1 if the LED has been turned on; 0 otherwise.\r
+ */\r
+extern uint32_t LED_Set( uint32_t dwLed )\r
+{\r
+#ifdef PINS_LEDS\r
+    /* Check if LED exists */\r
+    if ( dwLed >= numLeds )\r
+    {\r
+        return 0 ;\r
+    }\r
+\r
+    /* Turn LED on */\r
+    if ( pinsLeds[dwLed].type == PIO_OUTPUT_0 )\r
+    {\r
+\r
+        PIO_Set( &pinsLeds[dwLed] ) ;\r
+    }\r
+    else\r
+    {\r
+        PIO_Clear( &pinsLeds[dwLed] ) ;\r
+    }\r
+\r
+    return 1 ;\r
+#else\r
+    return 0 ;\r
+#endif\r
+}\r
+\r
+/**\r
+ *  Turns a LED off.\r
+ *\r
+ *  \param led  Number of the LED to turn off.\r
+ *  \return 1 if the LED has been turned off; 0 otherwise.\r
+ */\r
+extern uint32_t LED_Clear( uint32_t dwLed )\r
+{\r
+#ifdef PINS_LEDS\r
+    /* Check if LED exists */\r
+    if ( dwLed >= numLeds )\r
+    {\r
+        return 0 ;\r
+    }\r
+\r
+    /* Turn LED off */\r
+    if ( pinsLeds[dwLed].type == PIO_OUTPUT_0 )\r
+    {\r
+        PIO_Clear( &pinsLeds[dwLed] ) ;\r
+    }\r
+    else\r
+    {\r
+        PIO_Set( &pinsLeds[dwLed] ) ;\r
+    }\r
+\r
+    return 1 ;\r
+#else\r
+    return 0 ;\r
+#endif\r
+}\r
+\r
+/**\r
+ *  Toggles the current state of a LED.\r
+ *\r
+ *  \param led  Number of the LED to toggle.\r
+ *  \return 1 if the LED has been toggled; otherwise 0.\r
+ */\r
+extern uint32_t LED_Toggle( uint32_t dwLed )\r
+{\r
+#ifdef PINS_LEDS\r
+    /* Check if LED exists */\r
+    if ( dwLed >= numLeds )\r
+    {\r
+        return 0 ;\r
+    }\r
+\r
+    /* Toggle LED */\r
+    if ( PIO_GetOutputDataStatus( &pinsLeds[dwLed] ) )\r
+    {\r
+        PIO_Clear( &pinsLeds[dwLed] ) ;\r
+    }\r
+    else\r
+    {\r
+        PIO_Set( &pinsLeds[dwLed] ) ;\r
+    }\r
+\r
+    return 1 ;\r
+#else\r
+    return 0 ;\r
+#endif\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/math.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/math.c
new file mode 100644 (file)
index 0000000..9713cc7
--- /dev/null
@@ -0,0 +1,97 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  Returns the minimum value between two integers.\r
+ *\r
+ *  \param a  First integer to compare.\r
+ *  \param b  Second integer to compare.\r
+ */\r
+extern uint32_t min( uint32_t dwA, uint32_t dwB )\r
+{\r
+    if ( dwA < dwB )\r
+    {\r
+        return dwA ;\r
+    }\r
+    else\r
+    {\r
+        return dwB ;\r
+    }\r
+}\r
+\r
+/*------------------------------------------------------------------------------\r
+ *  Returns the absolute value of an integer.\r
+ *\r
+ *  \param value  Integer value.\r
+ *\r
+ *  \note Do not call this function "abs", problem with gcc !\r
+ */\r
+extern uint32_t absv( int32_t lValue )\r
+{\r
+    if ( lValue < 0 )\r
+    {\r
+        return -lValue ;\r
+    }\r
+    else\r
+    {\r
+        return lValue ;\r
+    }\r
+}\r
+\r
+/*------------------------------------------------------------------------------\r
+ *  Computes and returns x power of y.\r
+ *\r
+ *  \param x  Value.\r
+ *  \param y  Power.\r
+ */\r
+extern uint32_t power( uint32_t dwX, uint32_t dwY )\r
+{\r
+    uint32_t dwResult = 1 ;\r
+\r
+    while ( dwY > 0 )\r
+    {\r
+        dwResult *= dwX ;\r
+        dwY-- ;\r
+    }\r
+\r
+    return dwResult ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/mcid_dma.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/mcid_dma.c
new file mode 100644 (file)
index 0000000..fec00d1
--- /dev/null
@@ -0,0 +1,953 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file\r
+ *\r
+ *  Implement for SD/MMC low level commands.\r
+ *\r
+ *  \sa \ref hsmci_module, \ref sdmmc_module\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+#include "libsdmmc.h"\r
+\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local constants\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtorgoup mcid_defines\r
+ *      @{*/\r
+\r
+/** Enable MCI */\r
+#define MCI_ENABLE(pMciHw)     HSMCI_Enable(pMciHw)\r
+/** Disable MCI */\r
+#define MCI_DISABLE(pMciHw)    HSMCI_Disable(pMciHw)\r
+/** Reset MCI */\r
+#define MCI_RESET(pMciHw)      HSMCI_Reset(pMciHw, 0)\r
+\r
+/** Return halfword(16-bit) count from byte count */\r
+#define toHWCOUNT(byteCnt) (((byteCnt)&0x1) ? (((byteCnt)/2)+1) : ((byteCnt)/2))\r
+/** Return word(32-bit) count from byte count */\r
+#define toWCOUNT(byteCnt)  (((byteCnt)&0x3) ? (((byteCnt)/4)+1) : ((byteCnt)/4))\r
+\r
+\r
+/** Bit mask for status register errors. */\r
+#define STATUS_ERRORS ((uint32_t)(HSMCI_SR_UNRE  \\r
+                       | HSMCI_SR_OVRE \\r
+                       | HSMCI_SR_ACKRCVE \\r
+                       | HSMCI_SR_CSTOE \\r
+                       | HSMCI_SR_DTOE \\r
+                       | HSMCI_SR_DCRCE \\r
+                       | HSMCI_SR_RTOE \\r
+                       | HSMCI_SR_RENDE \\r
+                       | HSMCI_SR_RCRCE \\r
+                       | HSMCI_SR_RDIRE \\r
+                       | HSMCI_SR_RINDE))\r
+\r
+/** Bit mask for response errors */\r
+#define STATUS_ERRORS_RESP ((uint32_t)(HSMCI_SR_CSTOE \\r
+                            | HSMCI_SR_RTOE \\r
+                            | HSMCI_SR_RENDE \\r
+                            | HSMCI_SR_RCRCE \\r
+                            | HSMCI_SR_RDIRE \\r
+                            | HSMCI_SR_RINDE))\r
+\r
+/** Bit mask for data errors */\r
+#define STATUS_ERRORS_DATA ((uint32_t)(HSMCI_SR_UNRE \\r
+                            | HSMCI_SR_OVRE \\r
+                            | HSMCI_SR_DTOE \\r
+                            | HSMCI_SR_DCRCE))\r
+\r
+/** Max DMA size in a single transfer */\r
+#define MAX_DMA_SIZE                (XDMAC_MAX_BT_SIZE & 0xFFFFFF00)\r
+\r
+/** SD/MMC memory Single block */\r
+#define _CMDR_SDMEM_SINGLE  \\r
+    (HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRTYP_SINGLE)\r
+/** SD/MMC memory Multi block */\r
+#define _CMDR_SDMEM_MULTI   \\r
+    (HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRTYP_MULTIPLE)\r
+/** SDIO byte transfer */\r
+#define _CMDR_SDIO_BYTE     \\r
+    (HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRTYP_BYTE)\r
+/** SDIO block transfer */\r
+#define _CMDR_SDIO_BLOCK    \\r
+    (HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRTYP_BLOCK)\r
+\r
+/**     @}*/\r
+/*---------------------------------------------------------------------------\r
+ *         Local types\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local variable\r
+ *----------------------------------------------------------------------------*/\r
+\r
+//#define MCID_DBG  0\r
+//static uint8_t bMcidDBG = 0;\r
+\r
+/** HAL for SD/MMC bus mode (MCI interface) */\r
+static sSdHalFunctions sdHal = {\r
+    (fSdmmcLock)MCID_Lock,\r
+    (fSdmmcRelease)MCID_Release,\r
+    (fSdmmcSendCommand)MCID_SendCmd,\r
+    (fSdmmcIOCtrl)MCID_IOCtrl\r
+};\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Internal functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup mcid_functions\r
+ *@{\r
+ */\r
+\r
+/**\r
+ * Enable MCI peripheral access clock\r
+ */\r
+static uint8_t _PeripheralEnable(uint32_t id)\r
+{\r
+    if (PMC_IsPeriphEnabled(id)) return 0;\r
+    PMC_EnablePeripheral(id);\r
+    return 1;\r
+}\r
+\r
+\r
+/**\r
+ * HSMCI DMA R/W prepare\r
+ */\r
+static uint32_t _MciDMAPrepare(sMcid *pMcid, uint8_t bRd)\r
+{\r
+    sXdmad *pXdmad = pMcid->pXdmad;\r
+    /* Allocate a channel */\r
+    if (bRd){\r
+        pMcid->dwDmaCh = XDMAD_AllocateChannel(pXdmad, pMcid->bID, XDMAD_TRANSFER_MEMORY);\r
+    }\r
+    else { \r
+        pMcid->dwDmaCh = XDMAD_AllocateChannel(pXdmad, XDMAD_TRANSFER_MEMORY, pMcid->bID);\r
+    }\r
+    if (pMcid->dwDmaCh == XDMAD_ALLOC_FAILED)\r
+    {\r
+        return SDMMC_ERROR_BUSY;\r
+    }\r
+    XDMAD_SetCallback(pXdmad, pMcid->dwDmaCh, NULL, NULL);\r
+    XDMAD_PrepareChannel( pXdmad, pMcid->dwDmaCh );\r
+    return SDMMC_SUCCESS;\r
+}\r
+\r
+/**\r
+ * HSMCI DMA R/W\r
+ * \return 1 if DMA started.\r
+ */\r
+\r
+/* Linked lists for multi transfer buffer chaining structure instance. */\r
+\r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+#pragma location = "region_dma_nocache"\r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+__attribute__((__section__(".region_dma_nocache")))\r
+#endif\r
+static LinkedListDescriporView1 dmaLinkList[256];\r
+\r
+static uint32_t _MciDMA(sMcid *pMcid, uint32_t bFByte, uint8_t bRd)\r
+{\r
+    Hsmci *pHw = pMcid->pMciHw;\r
+    sXdmad *pXdmad = pMcid->pXdmad;\r
+    sSdmmcCommand *pCmd = pMcid->pCmd;\r
+    sXdmadCfg xdmadRxCfg,xdmadTxCfg;\r
+    uint32_t xdmaCndc;\r
+    uint32_t hsmciId;\r
+    uint8_t i;\r
+    uint32_t totalSize = pCmd->wNbBlocks * pCmd->wBlockSize;\r
+    uint32_t maxXSize;\r
+    uint32_t memAddress;\r
+    uint8_t  bMByte;\r
+\r
+    if (pMcid->dwXfrNdx >= totalSize) return 0;\r
+    /* Prepare DMA transfer */\r
+    if(pCmd->wBlockSize != 1){\r
+        pMcid->dwXSize = totalSize - pMcid->dwXfrNdx;\r
+        hsmciId = ((unsigned int)pHw == (unsigned int)HSMCI0 )? ID_HSMCI0: ID_HSMCI1;\r
+        if (bRd){\r
+            //printf("_MciDMA read %d,%d \n\r",pCmd->wBlockSize, pCmd->bCmd );\r
+            for ( i = 0; i < pCmd->wNbBlocks; i++){\r
+                dmaLinkList[i].mbr_ubc = XDMA_UBC_NVIEW_NDV1 \r
+                                        | (( i == pCmd->wNbBlocks - 1) ? 0: XDMA_UBC_NDE_FETCH_EN)\r
+                                        | XDMA_UBC_NDEN_UPDATED \r
+                                        | pCmd->wBlockSize /4 ;\r
+                dmaLinkList[i].mbr_sa  = (uint32_t)&(pHw->HSMCI_FIFO[i]);\r
+                dmaLinkList[i].mbr_da = (uint32_t)&pCmd->pData[i * pCmd->wBlockSize];\r
+                if ( i == pCmd->wNbBlocks - 1)\r
+                    dmaLinkList[i].mbr_nda = 0;\r
+                else\r
+                    dmaLinkList[i].mbr_nda = (uint32_t)&dmaLinkList[ i + 1 ];\r
+            }\r
+            xdmadRxCfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN \r
+                               | XDMAC_CC_MBSIZE_SINGLE \r
+                               | XDMAC_CC_DSYNC_PER2MEM \r
+                               | XDMAC_CC_CSIZE_CHK_1 \r
+                               | XDMAC_CC_DWIDTH_WORD\r
+                               | XDMAC_CC_SIF_AHB_IF1 \r
+                               | XDMAC_CC_DIF_AHB_IF0 \r
+                               | XDMAC_CC_SAM_FIXED_AM \r
+                               | XDMAC_CC_DAM_INCREMENTED_AM \r
+                               | XDMAC_CC_PERID(XDMAIF_Get_ChannelNumber( 0, hsmciId, XDMAD_TRANSFER_RX ));\r
+            xdmaCndc = XDMAC_CNDC_NDVIEW_NDV1 \r
+                     | XDMAC_CNDC_NDE_DSCR_FETCH_EN \r
+                     | XDMAC_CNDC_NDSUP_SRC_PARAMS_UPDATED\r
+                     | XDMAC_CNDC_NDDUP_DST_PARAMS_UPDATED ;\r
+            if (XDMAD_ConfigureTransfer( pXdmad, pMcid->dwDmaCh, &xdmadRxCfg, xdmaCndc, (uint32_t)&dmaLinkList[0])) {\r
+                return 0;\r
+            }\r
+            if (XDMAD_StartTransfer(pXdmad,pMcid->dwDmaCh)) {\r
+                return 0;\r
+            }\r
+        //Write\r
+        } else {\r
+            //printf("_MciDMA write %d,%d \n\r",pCmd->wBlockSize, pCmd->bCmd );\r
+            for ( i = 0; i < pCmd->wNbBlocks; i++){\r
+                dmaLinkList[i].mbr_ubc = XDMA_UBC_NVIEW_NDV1 \r
+                                       |(( i == pCmd->wNbBlocks - 1) ? 0: XDMA_UBC_NDE_FETCH_EN)\r
+                                       | XDMA_UBC_NDEN_UPDATED \r
+                                       | pCmd->wBlockSize /4 ;\r
+                dmaLinkList[i].mbr_sa = (uint32_t)&pCmd->pData[i * pCmd->wBlockSize];\r
+                dmaLinkList[i].mbr_da = (uint32_t)&(pHw->HSMCI_FIFO[i]);\r
+                if ( i == pCmd->wNbBlocks - 1) dmaLinkList[i].mbr_nda = 0;\r
+                else dmaLinkList[i].mbr_nda = (uint32_t)&dmaLinkList[ i + 1 ];\r
+            }\r
+            xdmadTxCfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN \r
+                               | XDMAC_CC_MBSIZE_SINGLE \r
+                               | XDMAC_CC_DSYNC_MEM2PER \r
+                               | XDMAC_CC_CSIZE_CHK_1 \r
+                               | XDMAC_CC_DWIDTH_WORD\r
+                               | XDMAC_CC_SIF_AHB_IF0 \r
+                               | XDMAC_CC_DIF_AHB_IF1 \r
+                               | XDMAC_CC_SAM_INCREMENTED_AM \r
+                               | XDMAC_CC_DAM_FIXED_AM \r
+                               | XDMAC_CC_PERID(XDMAIF_Get_ChannelNumber( 0, hsmciId, XDMAD_TRANSFER_TX ));\r
+            xdmaCndc = XDMAC_CNDC_NDVIEW_NDV1 \r
+                     | XDMAC_CNDC_NDE_DSCR_FETCH_EN \r
+                     | XDMAC_CNDC_NDSUP_SRC_PARAMS_UPDATED\r
+                     | XDMAC_CNDC_NDDUP_DST_PARAMS_UPDATED ;\r
+            if(XDMAD_ConfigureTransfer( pXdmad, pMcid->dwDmaCh, &xdmadTxCfg, xdmaCndc, (uint32_t)&dmaLinkList[0])){\r
+                 return 0;\r
+            }\r
+            if (XDMAD_StartTransfer(pXdmad,pMcid->dwDmaCh)) {\r
+                return 0;\r
+            }\r
+        }\r
+    } else {\r
+   /* Memory address and alignment */\r
+        memAddress = (uint32_t)&pCmd->pData[pMcid->dwXfrNdx];\r
+        bMByte = bFByte ? 1 : (((memAddress & 0x3) || (totalSize & 0x3)));\r
+        /* P to M: Max size is P size */\r
+        if (bRd)\r
+        {\r
+            maxXSize = bFByte ? MAX_DMA_SIZE : (MAX_DMA_SIZE * 4);\r
+        }\r
+        /* M to P: Max size is M size */\r
+        else\r
+        {\r
+            maxXSize = bMByte ? MAX_DMA_SIZE : (MAX_DMA_SIZE * 4);\r
+        }\r
+        /* Update index */\r
+        pMcid->dwXSize = totalSize - pMcid->dwXfrNdx;\r
+        if (pMcid->dwXSize > maxXSize)\r
+        {\r
+            pMcid->dwXSize = maxXSize;\r
+        }\r
+        /* Prepare DMA transfer */\r
+        if (bRd)\r
+        {\r
+            xdmadRxCfg.mbr_ubc = bFByte ? pMcid->dwXSize : toWCOUNT(pMcid->dwXSize);\r
+            xdmadRxCfg.mbr_sa = (uint32_t)&(pHw->HSMCI_RDR);\r
+            xdmadRxCfg.mbr_da = (uint32_t)memAddress;\r
+            xdmadRxCfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN |\r
+                               XDMAC_CC_MEMSET_NORMAL_MODE |\r
+                               XDMAC_CC_DSYNC_PER2MEM|\r
+                               XDMAC_CC_CSIZE_CHK_1 |\r
+                               (bFByte ? XDMAC_CC_DWIDTH_BYTE : XDMAC_CC_DWIDTH_WORD) |\r
+                               XDMAC_CC_SIF_AHB_IF1 |\r
+                               XDMAC_CC_DIF_AHB_IF0 |\r
+                               XDMAC_CC_SAM_FIXED_AM |\r
+                               XDMAC_CC_DAM_INCREMENTED_AM;\r
+            xdmadRxCfg.mbr_bc = 0;\r
+            XDMAD_ConfigureTransfer( pXdmad, pMcid->dwDmaCh, &xdmadRxCfg, 0, 0);\r
+            //CP15_coherent_dcache_for_dma ((uint32_t)memAddress, ((uint32_t)memAddress + (pMcid->dwXSize)));\r
+        }\r
+        else\r
+        {\r
+            xdmadTxCfg.mbr_ubc = toWCOUNT(pMcid->dwXSize);\r
+            xdmadTxCfg.mbr_sa = (uint32_t)memAddress; \r
+            xdmadTxCfg.mbr_da = (uint32_t)&(pHw->HSMCI_TDR);\r
+            xdmadTxCfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN |\r
+                               XDMAC_CC_MEMSET_NORMAL_MODE |\r
+                               XDMAC_CC_DSYNC_MEM2PER |\r
+                               XDMAC_CC_CSIZE_CHK_1 |\r
+                               (bFByte ? XDMAC_CC_DWIDTH_BYTE : XDMAC_CC_DWIDTH_WORD) |\r
+                               XDMAC_CC_SIF_AHB_IF0 |\r
+                               XDMAC_CC_DIF_AHB_IF1 |\r
+                               XDMAC_CC_SAM_INCREMENTED_AM |\r
+                               XDMAC_CC_DAM_FIXED_AM;\r
+            xdmadTxCfg.mbr_bc = 0;\r
+            XDMAD_ConfigureTransfer( pXdmad, pMcid->dwDmaCh, &xdmadTxCfg, 0, 0);\r
+        }\r
+        XDMAD_StartTransfer(pXdmad, pMcid->dwDmaCh);\r
+    }\r
+\r
+    return 1;\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Reset MCI HW interface and disable it.\r
+ * \param keepSettings Keep old register settings, including\r
+ *                     _MR, _SDCR, _DTOR, _CSTOR, _DMA and _CFG.\r
+ */\r
+static void MCI_Reset(sMcid *pMci, uint8_t keepSettings)\r
+{\r
+    Hsmci *pMciHw = pMci->pMciHw;\r
+\r
+    assert(pMci);\r
+    assert(pMci->pMciHw);\r
+\r
+    HSMCI_Reset( pMciHw, keepSettings );\r
+}\r
+\r
+/**\r
+ * Configure the  MCI CLKDIV in the MCI_MR register. The max. for MCI clock is\r
+ * MCK/2 and corresponds to CLKDIV = 0\r
+ * \param pMci  Pointer to the low level MCI driver.\r
+ * \param mciSpeed  MCI clock speed in Hz, 0 will not change current speed.\r
+ * \param mck       MCK to generate MCI Clock, in Hz\r
+ * \return The actual speed used, 0 for fail.\r
+ */\r
+static uint32_t MCI_SetSpeed( sMcid* pMci, uint32_t mciSpeed, uint32_t mck )\r
+{\r
+    Hsmci *pMciHw = pMci->pMciHw;\r
+    uint32_t clkdiv;\r
+    assert(pMci);\r
+    assert(pMciHw);\r
+\r
+    if((mck % mciSpeed) == 0)\r
+    {\r
+        clkdiv = mck /mciSpeed;\r
+    } \r
+    else \r
+    {\r
+        clkdiv = ((mck + mciSpeed)/mciSpeed);\r
+    }\r
+    mciSpeed = mck / clkdiv;\r
+\r
+    /* Modify MR */\r
+    HSMCI_DivCtrl( pMciHw, clkdiv, 0x7);\r
+    return (mciSpeed);\r
+}\r
+\r
+/**\r
+ */\r
+static void _FinishCmd( sMcid* pMcid, uint8_t bStatus )\r
+{\r
+    sSdmmcCommand *pCmd = pMcid->pCmd;\r
+    sXdmad *pXdmad = pMcid->pXdmad;\r
+    //uint32_t memAddress;\r
+    /* Release DMA channel (if used) */\r
+    if (pMcid->dwDmaCh != XDMAD_ALLOC_FAILED)\r
+    {\r
+        if (XDMAD_FreeChannel(pXdmad, pMcid->dwDmaCh)) printf("-E- Can't free channel \n\r");\r
+        pMcid->dwDmaCh = XDMAD_ALLOC_FAILED;\r
+    }\r
+    /* Release command */\r
+    pMcid->pCmd   = NULL;\r
+    pMcid->bState = MCID_LOCKED;\r
+    pCmd->bStatus = bStatus;\r
+    /* Invoke callback */\r
+    if (pCmd->fCallback)\r
+    {\r
+        (pCmd->fCallback)(pCmd->bStatus, pCmd->pArg);\r
+    }\r
+}\r
+\r
+/*---------------------------------------------------------------------------\r
+ *      Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Select MCI slot.\r
+ */\r
+void MCID_SetSlot(Hsmci *pMci, uint8_t slot)\r
+\r
+{\r
+    HSMCI_SetSlot(pMci, slot);\r
+}\r
+\r
+/**\r
+ * Initialize MCI driver.\r
+ */\r
+void MCID_Init(sMcid *pMcid,\r
+               Hsmci *pMci, uint8_t bID, uint32_t dwMck,\r
+               sXdmad *pXdmad,\r
+               uint8_t bPolling)\r
+{\r
+    uint16_t clkDiv;\r
+\r
+    assert(pMcid);\r
+    assert(pMci);\r
+\r
+    /* Initialize driver struct */\r
+    pMcid->pMciHw    = pMci;\r
+    pMcid->pCmd      = NULL;\r
+\r
+    pMcid->pXdmad         = pXdmad;\r
+    pMcid->dwDmaCh       = XDMAD_ALLOC_FAILED;\r
+    pMcid->dwXfrNdx      = 0;\r
+\r
+    pMcid->dwMck     = dwMck;\r
+\r
+    pMcid->bID       = bID;\r
+    pMcid->bPolling  = bPolling;\r
+    pMcid->bState    = MCID_IDLE;\r
+\r
+    _PeripheralEnable( bID );\r
+\r
+    MCI_RESET( pMci );\r
+    MCI_DISABLE ( pMci );\r
+    HSMCI_DisableIt( pMci, 0xFFFFFFFF );\r
+    HSMCI_ConfigureDataTO( pMci, HSMCI_DTOR_DTOCYC(0xFF)\r
+                                |HSMCI_DTOR_DTOMUL_1048576 );\r
+    HSMCI_ConfigureCompletionTO( pMci , HSMCI_CSTOR_CSTOCYC(0xFF)\r
+                                       |HSMCI_CSTOR_CSTOMUL_1048576 );\r
+    /* Set the Mode Register: 400KHz */\r
+    clkDiv = (dwMck / (MCI_INITIAL_SPEED << 1)) - 1;\r
+    HSMCI_ConfigureMode( pMci, (clkDiv | HSMCI_MR_PWSDIV(0x7)) );\r
+\r
+    HSMCI_Enable( pMci );\r
+    HSMCI_Configure( pMci, HSMCI_CFG_FIFOMODE | HSMCI_CFG_FERRCTRL );\r
+    /* Enable DMA */\r
+    HSMCI_EnableDma( pMci, 1 );\r
+    //_PeripheralDisable( bID );\r
+}\r
+\r
+/**\r
+ * Lock the MCI driver for slot N access\r
+ */\r
+uint32_t MCID_Lock(sMcid *pMcid, uint8_t bSlot)\r
+{\r
+    Hsmci *pHw = pMcid->pMciHw;\r
+    uint32_t sdcr;\r
+\r
+    assert(pMcid);\r
+    assert(pMcid->pMciHw);\r
+\r
+    if (bSlot > 0)\r
+    {\r
+        return SDMMC_ERROR_PARAM;\r
+    }\r
+    if (pMcid->bState >= MCID_LOCKED)\r
+    {\r
+        return SDMMC_ERROR_LOCKED;\r
+    }\r
+    pMcid->bState = MCID_LOCKED;\r
+    sdcr = pHw->HSMCI_SDCR & ~(uint32_t)HSMCI_SDCR_SDCSEL_Msk;\r
+    pHw->HSMCI_SDCR = sdcr | (bSlot << HSMCI_SDCR_SDCSEL_Pos);\r
+    return SDMMC_OK;\r
+}\r
+\r
+/**\r
+ * Release the driver.\r
+ */\r
+uint32_t MCID_Release(sMcid *pMcid)\r
+{\r
+    assert(pMcid);\r
+\r
+    if (pMcid->bState >= MCID_CMD)\r
+    {\r
+        return SDMMC_ERROR_BUSY;\r
+    }\r
+    pMcid->bState = MCID_IDLE;\r
+    return SDMMC_OK;\r
+}\r
+\r
+/**\r
+ * SD/MMC command.\r
+ */\r
+uint32_t MCID_SendCmd(sMcid *pMcid, void *pCommand)\r
+{\r
+    Hsmci *pHw = pMcid->pMciHw;\r
+    sSdmmcCommand *pCmd = pCommand;\r
+    uint32_t mr, ier;\r
+    uint32_t cmdr;\r
+\r
+    assert(pMcid);\r
+    assert(pMcid->pMciHw);\r
+    assert(pCmd);\r
+    //printf("cmd = %d \n\r",pCmd->bCmd);\r
+    if (!MCID_IsCmdCompleted(pMcid))\r
+    {\r
+        return SDMMC_ERROR_BUSY;\r
+    }\r
+    pMcid->bState = MCID_CMD;\r
+    pMcid->pCmd   = pCmd;\r
+\r
+    //_PeripheralEnable(pMcid->bID);\r
+    MCI_DISABLE(pHw);\r
+    mr = HSMCI_GetMode(pHw) & (~(uint32_t)(HSMCI_MR_WRPROOF | HSMCI_MR_RDPROOF |HSMCI_MR_FBYTE));\r
+    /* Special: PowerON Init */\r
+    if (pCmd->cmdOp.wVal == SDMMC_CMD_POWERONINIT){\r
+        HSMCI_ConfigureMode(pHw, mr);\r
+        ier = HSMCI_IER_XFRDONE;\r
+    }\r
+    /* Normal command: idle the bus */\r
+    else if (pCmd->cmdOp.bmBits.xfrData == SDMMC_CMD_STOPXFR)\r
+    {\r
+        HSMCI_ConfigureMode(pHw, mr);\r
+        ier = HSMCI_IER_XFRDONE | STATUS_ERRORS_RESP;\r
+    }\r
+    /* No data transfer */\r
+    else if ((pCmd->cmdOp.wVal & SDMMC_CMD_CNODATA(0xF)) == SDMMC_CMD_CNODATA(0))\r
+    {\r
+        ier = HSMCI_IER_XFRDONE | STATUS_ERRORS_RESP;\r
+        /* R3 response, no CRC */\r
+        if (pCmd->cmdOp.bmBits.respType == 3)\r
+        {\r
+            ier &= ~(uint32_t)HSMCI_IER_RCRCE;\r
+        }\r
+    }\r
+    /* Data command but no following */\r
+    else if (pCmd->wNbBlocks == 0 || pCmd->pData == 0)\r
+    {\r
+        HSMCI_ConfigureMode(pHw, mr | HSMCI_MR_WRPROOF\r
+                                    | HSMCI_MR_RDPROOF);\r
+        HSMCI_ConfigureTransfer(pHw, pCmd->wBlockSize, pCmd->wNbBlocks);\r
+        ier = HSMCI_IER_CMDRDY | STATUS_ERRORS_RESP;\r
+    }\r
+    /* Command with data */\r
+    else\r
+    {\r
+        /* Setup block size */\r
+        if (pCmd->cmdOp.bmBits.sendCmd)\r
+        {\r
+            HSMCI_ConfigureTransfer(pHw, pCmd->wBlockSize, pCmd->wNbBlocks);\r
+        }\r
+        /* Block size is 0, force byte */\r
+        if (pCmd->wBlockSize == 0)\r
+            pCmd->wBlockSize = 1;\r
+\r
+        /* Force byte transfer */\r
+        if (pCmd->wBlockSize & 0x3)\r
+        {\r
+            mr |= HSMCI_MR_FBYTE;\r
+        }\r
+        /* Set block size & MR */\r
+        HSMCI_ConfigureMode(pHw, mr | HSMCI_MR_WRPROOF\r
+                                    | HSMCI_MR_RDPROOF\r
+                                    | (pCmd->wBlockSize << 16));\r
+        /* DMA write */\r
+        if (pCmd->cmdOp.bmBits.xfrData == SDMMC_CMD_TX)\r
+        {\r
+            if (_MciDMAPrepare(pMcid, 0))\r
+            {\r
+                _FinishCmd(pMcid, SDMMC_ERROR_BUSY);\r
+                return SDMMC_ERROR_BUSY;\r
+            }\r
+            _MciDMA(pMcid, (mr & HSMCI_MR_FBYTE),0);\r
+            ier = HSMCI_IER_XFRDONE | STATUS_ERRORS_DATA;\r
+            if( pCmd->wNbBlocks > 1 ) ier |= HSMCI_IER_FIFOEMPTY;\r
+        }\r
+        else\r
+        {\r
+            if (_MciDMAPrepare(pMcid, 1))\r
+            {\r
+                _FinishCmd(pMcid, SDMMC_ERROR_BUSY);\r
+                return SDMMC_ERROR_BUSY;\r
+            }\r
+            _MciDMA(pMcid, (mr & HSMCI_MR_FBYTE),1);\r
+            ier = HSMCI_IER_XFRDONE | STATUS_ERRORS_DATA;\r
+            if( pCmd->wNbBlocks > 1 ) ier |= HSMCI_IER_FIFOEMPTY;\r
+        }\r
+    }\r
+    MCI_ENABLE(pHw);\r
+    if (pCmd->cmdOp.wVal & (SDMMC_CMD_bmPOWERON | SDMMC_CMD_bmCOMMAND))\r
+    {\r
+        cmdr = pCmd->bCmd;\r
+\r
+        if (pCmd->cmdOp.bmBits.powerON)\r
+        {\r
+            cmdr |= (HSMCI_CMDR_OPDCMD | HSMCI_CMDR_SPCMD_INIT);\r
+        }\r
+        if (pCmd->cmdOp.bmBits.odON)\r
+        {\r
+            cmdr |= HSMCI_CMDR_OPDCMD;\r
+        }\r
+        if (pCmd->cmdOp.bmBits.sendCmd)\r
+        {\r
+            cmdr |= HSMCI_CMDR_MAXLAT;\r
+        }\r
+        switch(pCmd->cmdOp.bmBits.xfrData)\r
+        {\r
+            case SDMMC_CMD_TX:\r
+                if (pCmd->cmdOp.bmBits.ioCmd)\r
+                {\r
+                    cmdr |= (pCmd->wBlockSize == 1) ?\r
+                            _CMDR_SDIO_BYTE :\r
+                            _CMDR_SDIO_BLOCK;\r
+                }\r
+                else\r
+                {\r
+                    cmdr |= (pCmd->wNbBlocks == 1) ?\r
+                            _CMDR_SDMEM_SINGLE :\r
+                            _CMDR_SDMEM_MULTI;\r
+                }\r
+                break;\r
+\r
+            case SDMMC_CMD_RX:\r
+                if (pCmd->cmdOp.bmBits.ioCmd)\r
+                {\r
+                    cmdr |= HSMCI_CMDR_TRDIR_READ\r
+                            |((pCmd->wBlockSize == 1) ?\r
+                               _CMDR_SDIO_BYTE :\r
+                               _CMDR_SDIO_BLOCK)\r
+                            ;\r
+                }\r
+                else\r
+                {\r
+                    cmdr |= HSMCI_CMDR_TRDIR_READ\r
+                            |((pCmd->wNbBlocks == 1) ?\r
+                               _CMDR_SDMEM_SINGLE :\r
+                               _CMDR_SDMEM_MULTI)\r
+                            ;\r
+                }\r
+                break;\r
+\r
+            case SDMMC_CMD_STOPXFR:\r
+                cmdr |= HSMCI_CMDR_TRCMD_STOP_DATA;\r
+                break;\r
+        }\r
+        switch(pCmd->cmdOp.bmBits.respType)\r
+        {\r
+            case 3: case 4:\r
+                /* ignore CRC error */\r
+                ier &= ~(uint32_t)HSMCI_IER_RCRCE;\r
+            case 1: case 5: case 6: case 7:\r
+                cmdr |= HSMCI_CMDR_RSPTYP_48_BIT;\r
+                break;\r
+            case 2:\r
+                cmdr |= HSMCI_CMDR_RSPTYP_136_BIT;\r
+                break;\r
+            /* No response, ignore RTOE */\r
+            default:\r
+                ier &= ~(uint32_t)HSMCI_IER_RTOE;\r
+        }\r
+\r
+        pHw->HSMCI_ARGR = pCmd->dwArg;\r
+        pHw->HSMCI_CMDR = cmdr;\r
+    }\r
+    \r
+    /* Ignore CRC error for R3 & R4 */\r
+    if (pCmd->cmdOp.bmBits.xfrData == SDMMC_CMD_STOPXFR)\r
+    {\r
+        ier &= ~STATUS_ERRORS_DATA;\r
+    }\r
+\r
+    /* Enable status flags */\r
+    HSMCI_EnableIt(pHw, ier);\r
+    \r
+    return SDMMC_OK;\r
+}\r
+static uint32_t dwMsk;\r
+/**\r
+ * Process pending events on the given MCI driver.\r
+ */\r
+void MCID_Handler(sMcid *pMcid)\r
+{\r
+    Hsmci *pHw = pMcid->pMciHw;\r
+    sSdmmcCommand *pCmd = pMcid->pCmd;\r
+    //uint32_t dwSr, dwMsk, dwMaskedSr;\r
+    uint32_t dwSr, dwMaskedSr;\r
+    assert(pMcid);\r
+    assert(pMcid->pMciHw);\r
+\r
+    /* Do nothing if no pending command */\r
+    if (pCmd == NULL)\r
+    {\r
+        if (pMcid->bState >= MCID_CMD)\r
+        {\r
+            pMcid->bState = MCID_LOCKED;\r
+        }\r
+        return;\r
+    }\r
+\r
+    /* Read status */\r
+    dwSr  = HSMCI_GetStatus(pHw);\r
+    dwMsk = HSMCI_GetItMask(pHw);\r
+    dwMaskedSr = dwSr & dwMsk;\r
+    /* Check errors */\r
+    if (dwMaskedSr & STATUS_ERRORS)\r
+    {\r
+        if (dwMaskedSr & HSMCI_SR_RTOE)\r
+        {\r
+            pCmd->bStatus = SDMMC_ERROR_NORESPONSE;\r
+        }\r
+      \r
+        if (pCmd->bCmd != 12) pMcid->bState = MCID_ERROR;\r
+        //pMcid->bState = MCID_ERROR;\r
+    }\r
+    dwMsk &= ~STATUS_ERRORS;\r
+\r
+    /* Check command complete */\r
+    if (dwMaskedSr & HSMCI_SR_CMDRDY)\r
+    {   \r
+        //printf("HSMCI_SR_CMDRDY \n\r");\r
+        HSMCI_DisableIt(pHw, HSMCI_IDR_CMDRDY);\r
+        dwMsk &= ~(uint32_t)HSMCI_IMR_CMDRDY;\r
+    }\r
+   \r
+    /* Check if not busy */\r
+    if (dwMaskedSr & HSMCI_SR_NOTBUSY)\r
+    {\r
+       //printf("NOTBUSY ");\r
+        HSMCI_DisableIt(pHw, HSMCI_IDR_NOTBUSY);\r
+        dwMsk &= ~(uint32_t)HSMCI_IMR_NOTBUSY;\r
+    }\r
+    /* Check if TX ready */\r
+    if (dwMaskedSr & HSMCI_SR_TXRDY)\r
+    {    \r
+       // printf("TXRDY ");\r
+        dwMsk &= ~(uint32_t)HSMCI_IMR_TXRDY;\r
+    }\r
+     /* Check if FIFO empty (all data sent) */\r
+    if (dwMaskedSr & HSMCI_SR_FIFOEMPTY)\r
+    {\r
+       \r
+        /* Disable FIFO empty */\r
+        HSMCI_DisableIt(pHw, HSMCI_IDR_FIFOEMPTY);\r
+        dwMsk &= ~(uint32_t)HSMCI_IMR_FIFOEMPTY;\r
+         //printf("FIFOEMPTY %x \n\r",dwMsk);\r
+    }\r
+    \r
+    /* Check if DMA finished */\r
+    if (dwMaskedSr & HSMCI_SR_XFRDONE)\r
+    {\r
+        \r
+        HSMCI_DisableIt(pHw, HSMCI_IDR_XFRDONE);\r
+        dwMsk &= ~(uint32_t)HSMCI_IMR_XFRDONE;\r
+        //printf("HSMCI_SR_XFRDONE %x \n\r",dwMsk);\r
+    }\r
+   \r
+    /* All none error mask done, complete the command */\r
+    if (0 == dwMsk || pMcid->bState == MCID_ERROR)\r
+    {\r
+        /* Error reset */\r
+        if (pMcid->bState == MCID_ERROR)\r
+        {\r
+            MCI_Reset(pMcid, 1);\r
+        }\r
+        else \r
+        {\r
+            pCmd->bStatus = SDMMC_SUCCESS;\r
+\r
+            if (pCmd->pResp)\r
+            {\r
+                uint8_t bRspSize, i;\r
+                switch(pCmd->cmdOp.bmBits.respType)\r
+                {\r
+                    case 1: case 3: case 4: case 5: case 6: case 7:\r
+                        bRspSize = 1;\r
+                        break;\r
+\r
+                    case 2:\r
+                        bRspSize = 4;\r
+                        break;\r
+\r
+                    default:\r
+                        bRspSize = 0;\r
+                }\r
+                for (i = 0; i < bRspSize; i ++)\r
+                {\r
+                    pCmd->pResp[i] = HSMCI_GetResponse(pHw);\r
+                }\r
+            }\r
+        }\r
+        /* Disable interrupts */\r
+        HSMCI_DisableIt(pHw, HSMCI_GetItMask(pHw));\r
+        /* Disable peripheral */\r
+        //_PeripheralDisable(pMcid->bID);\r
+        /* Command is finished */\r
+        _FinishCmd(pMcid, pCmd->bStatus);\r
+    }\r
+}\r
+\r
+/**\r
+ * Cancel pending SD/MMC command.\r
+ */\r
+uint32_t MCID_CancelCmd(sMcid *pMcid)\r
+{\r
+    if (pMcid->bState == MCID_IDLE)\r
+    {\r
+        return SDMMC_ERROR_STATE;\r
+    }\r
+    if (pMcid->bState == MCID_CMD)\r
+    {\r
+        /* Cancel ... */\r
+        MCI_Reset(pMcid, 1);\r
+        /* Command is finished */\r
+        _FinishCmd(pMcid, SDMMC_ERROR_USER_CANCEL);\r
+    }\r
+    return SDMMC_OK;\r
+}\r
+\r
+/**\r
+ * Reset MCID and disable HW\r
+ */\r
+void MCID_Reset(sMcid * pMcid)\r
+{\r
+    Hsmci *pHw = pMcid->pMciHw;\r
+\r
+    MCID_CancelCmd(pMcid);\r
+\r
+    //_PeripheralEnable(pMcid->bID);\r
+\r
+    /* Disable */\r
+    MCI_DISABLE(pHw);\r
+    /* MR reset */\r
+    HSMCI_ConfigureMode(pHw, HSMCI_GetMode(pHw) & (HSMCI_MR_CLKDIV_Msk\r
+                                                 | HSMCI_MR_PWSDIV_Msk));\r
+    /* BLKR reset */\r
+    HSMCI_ConfigureTransfer(pHw, 0, 0);\r
+    \r
+    /* Cancel ... */\r
+    MCI_Reset(pMcid, 1);\r
+    //_PeripheralDisable(pMcid->bID);\r
+\r
+    if (pMcid->bState == MCID_CMD)\r
+    {\r
+        /* Command is finished */\r
+        _FinishCmd(pMcid, SDMMC_ERROR_USER_CANCEL);\r
+    }\r
+}\r
+\r
+/**\r
+ * Check if the command is finished\r
+ */\r
+uint32_t MCID_IsCmdCompleted(sMcid *pMcid)\r
+{\r
+    sSdmmcCommand *pCmd = pMcid->pCmd;\r
+\r
+    if (pMcid->bPolling)\r
+    {\r
+        MCID_Handler(pMcid);\r
+    }\r
+    if (pMcid->bState == MCID_CMD)\r
+    {\r
+        return 0;\r
+    }\r
+    if (pCmd)\r
+    {\r
+        return 0;\r
+    }\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * IO control functions\r
+ */\r
+uint32_t MCID_IOCtrl(sMcid *pMcid, uint32_t bCtl, uint32_t param)\r
+{\r
+    Hsmci *pMciHw = pMcid->pMciHw;\r
+    assert(pMcid);\r
+    assert(pMcid->pMciHw);\r
+\r
+    //mciDis = _PeripheralEnable(pMcid->bID);\r
+\r
+    switch (bCtl)\r
+    {\r
+        case SDMMC_IOCTL_BUSY_CHECK:\r
+            *(uint32_t*)param = !MCID_IsCmdCompleted(pMcid);\r
+            break;\r
+\r
+        case SDMMC_IOCTL_POWER:\r
+            return SDMMC_ERROR_NOT_SUPPORT;\r
+\r
+        case SDMMC_IOCTL_RESET:\r
+            MCID_Reset(pMcid);\r
+            return SDMMC_SUCCESS;\r
+\r
+        case SDMMC_IOCTL_CANCEL_CMD:\r
+            return MCID_CancelCmd(pMcid);\r
+\r
+        case SDMMC_IOCTL_SET_CLOCK:\r
+            *(uint32_t*)param = MCI_SetSpeed(pMcid,\r
+                                             *(uint32_t*)param,\r
+                                             pMcid->dwMck);\r
+            break;\r
+\r
+        case SDMMC_IOCTL_SET_HSMODE:\r
+            HSMCI_HsEnable( pMciHw, *(uint32_t*)param );\r
+            *(uint32_t*)param = HSMCI_IsHsEnabled( pMciHw );\r
+\r
+            break;\r
+\r
+        case SDMMC_IOCTL_SET_BUSMODE:\r
+            HSMCI_SetBusWidth( pMciHw, *(uint32_t*)param );\r
+            break;\r
+\r
+        case SDMMC_IOCTL_GET_BUSMODE:\r
+            //*(uint32_t*)param = 8; /* Max 4-bit bus */\r
+            break;\r
+\r
+        case SDMMC_IOCTL_GET_HSMODE:\r
+            *(uint32_t*)param = 1; /* Supported */\r
+            break;\r
+\r
+        default:\r
+            return SDMMC_ERROR_NOT_SUPPORT;\r
+        \r
+    }\r
+    return SDMMC_OK;\r
+}\r
+\r
+/**\r
+ * Initialize the SD/MMC card driver struct for SD/MMC bus mode\r
+ * \note defined in SD/MMC bus mode low level (Here uses MCI interface)\r
+ */\r
+void SDD_InitializeSdmmcMode(sSdCard * pSd,void * pDrv,uint8_t bSlot)\r
+{\r
+    SDD_Initialize(pSd, pDrv, bSlot, &sdHal);\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/omnivision.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/omnivision.c
new file mode 100644 (file)
index 0000000..c399da9
--- /dev/null
@@ -0,0 +1,421 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "board.h"\r
+\r
+/** Slave address of OMNIVISION chips. */\r
+#define OV_CAPTOR_ADDRESS_1   0x30 \r
+#define OV_CAPTOR_ADDRESS_2   0x21\r
+#define OV_CAPTOR_ADDRESS_3   0x3c \r
+#define OV_CAPTOR_ADDRESS_4   0x10\r
+\r
+/** terminating list entry for register in configuration file */\r
+#define OV_REG_TERM 0xFF\r
+#define OV_REG_DELAY 0xFFFF\r
+/** terminating list entry for value in configuration file */\r
+#define OV_VAL_TERM 0xFF \r
+\r
+static const Pin pin_ISI_RST= PIN_ISI_RST;\r
+static uint8_t twiSlaveAddr = OV_CAPTOR_ADDRESS_1;\r
+/*----------------------------------------------------------------------------\r
+ *        Local Functions\r
+ *----------------------------------------------------------------------------*/\r
+static void ov_reset(void)\r
+{\r
+    volatile uint32_t i;\r
+    PIO_Configure(&pin_ISI_RST, 1);\r
+    PIO_Clear(&pin_ISI_RST);\r
+    for(i = 0; i < 6000; i++ );\r
+    PIO_Set(&pin_ISI_RST);\r
+    for(i = 0; i<6000; i++ );\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Read PID and VER\r
+ * \param pTwid TWI interface\r
+ * \return  VER | (PID<<8)\r
+ */\r
+static uint16_t ov_id8(Twid *pTwid)\r
+{\r
+    uint8_t id, ver;\r
+    uint8_t status;\r
+    // OV_PID\r
+    status = ov_read_reg8(pTwid, 0x0A, &id);\r
+    if( status != 0 ) return 0;\r
+    TRACE_INFO("PID  = 0x%X\n\r", id);\r
+\r
+    // OV_VER\r
+    status = ov_read_reg8(pTwid, 0x0B, &ver);\r
+    if( status != 0 ) return 0;\r
+    TRACE_INFO("VER  = 0x%X\n\r", ver);\r
+\r
+    return((uint16_t)(id <<8) | ver);\r
+}\r
+\r
+/**\r
+ * \brief  Read PID and VER\r
+ * \param pTwid TWI interface\r
+ * \return  VER | (PID<<8)\r
+ */\r
+static uint16_t ov_id16(Twid *pTwid)\r
+{\r
+    uint8_t id, ver;\r
+    // OV_PID\r
+    ov_read_reg16(pTwid, 0x300A, &id);\r
+    TRACE_INFO("PID  = 0x%X\n\r", id);\r
+\r
+    // OV_VER\r
+    ov_read_reg16(pTwid, 0x300B, &ver);\r
+    TRACE_INFO("VER  = 0x%X\n\r", ver);\r
+\r
+    return((uint16_t)(id <<8) | ver);\r
+}\r
+\r
+/**\r
+ * \brief  Read PID and VER\r
+ * \param pTwid TWI interface\r
+ * \return  VER | (PID<<8)\r
+ */\r
+static uint16_t ov_id(Twid *pTwid)\r
+{\r
+    uint16_t id;\r
+    printf("-I- Try TWI address 0x%x \n\r", twiSlaveAddr);\r
+    twiSlaveAddr = OV_CAPTOR_ADDRESS_1;\r
+    id = ov_id8(pTwid);\r
+    if (id == 0) {\r
+        twiSlaveAddr = OV_CAPTOR_ADDRESS_2;\r
+        printf("-I- Try TWI address 0x%x \n\r", twiSlaveAddr);\r
+        id = ov_id8(pTwid);\r
+        if (id == 0) {\r
+            twiSlaveAddr = OV_CAPTOR_ADDRESS_3;\r
+            printf("-I- Try TWI address 0x%x \n\r", twiSlaveAddr);\r
+            id = ov_id16(pTwid);\r
+            if (id == 0) {\r
+                twiSlaveAddr = OV_CAPTOR_ADDRESS_4;\r
+                printf("-I- Try TWI address 0x%x \n\r", twiSlaveAddr);\r
+                id = ov_id16(pTwid);\r
+            }\r
+        }\r
+    }\r
+    return id;\r
+}\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Global Functions\r
+ *----------------------------------------------------------------------------*/\r
+/**\r
+ * \brief  Read a value from a register in an OV sensor device.\r
+ * \param pTwid TWI interface\r
+ * \param reg Register to be read\r
+ * \param isize Internal address size in bytes.\r
+ * \param pData Data read\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint8_t ov_read_reg8(Twid *pTwid, uint8_t reg, uint8_t *pData)\r
+{\r
+    uint8_t status;\r
+\r
+    status = TWID_Write( pTwid, twiSlaveAddr, 0, 0, &reg, 1, 0);\r
+    status |= TWID_Read( pTwid, twiSlaveAddr, 0, 0, pData, 1, 0);\r
+    if( status != 0 ) {\r
+        TRACE_ERROR("ov_read_reg pb\n\r");\r
+    }\r
+    return status;\r
+}\r
+\r
+/**\r
+ * \brief  Read a value from a register in an OV sensor device.\r
+ * \param pTwid TWI interface\r
+ * \param reg Register to be read\r
+ * \param pData Data read\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint8_t ov_read_reg16(Twid *pTwid, uint16_t reg, uint8_t *pData)\r
+{\r
+    uint8_t status;\r
+    uint8_t reg8[2];\r
+    reg8[0] = reg>>8;\r
+    reg8[1] = reg & 0xff;\r
+\r
+    status = TWID_Write( pTwid, twiSlaveAddr, 0, 0, reg8,  2, 0);\r
+    status |= TWID_Read( pTwid, twiSlaveAddr, 0, 0, pData, 1, 0);\r
+    if( status != 0 ) {\r
+\r
+        TRACE_ERROR("ov_read_reg pb\n\r");\r
+    }\r
+    return status;\r
+}\r
+\r
+/**\r
+ * \brief  Write a value to a register in an OV sensor device.\r
+ * \param pTwid TWI interface\r
+ * \param reg Register to be writen\r
+ * \param pData Data written\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint8_t ov_write_reg8(Twid *pTwid, uint8_t reg, uint8_t val)\r
+{\r
+    uint8_t status;\r
+\r
+    status = TWID_Write(pTwid, twiSlaveAddr, reg, 1, &val, 1, 0);\r
+    if( status != 0 ) {\r
+        TRACE_ERROR("ov_write_reg pb\n\r");\r
+    }\r
+\r
+    return status;\r
+}\r
+\r
+/**\r
+ * \brief  Write a value to a register in an OV sensor device.\r
+ * \param pTwid TWI interface\r
+ * \param reg Register to be writen\r
+ * \param pData Data written\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint8_t ov_write_reg16(Twid *pTwid, uint16_t reg,  uint8_t val)\r
+{\r
+    uint8_t status;\r
+    status = TWID_Write(pTwid, twiSlaveAddr, reg, 2, &val, 1, 0);\r
+    if( status != 0 ) {\r
+        TRACE_ERROR("ov_write_reg pb\n\r");\r
+    }\r
+\r
+    return status;\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Initialize a list of OV registers.\r
+ * The list of registers is terminated by the pair of values\r
+ * \param pTwid TWI interface\r
+ * \param pReglist Register list to be written\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint32_t ov_write_regs8(Twid *pTwid, const struct ov_reg* pReglist)\r
+{\r
+    uint32_t err;\r
+    uint32_t size=0;\r
+    const struct ov_reg *pNext = pReglist;\r
+    volatile uint32_t delay;\r
+\r
+    TRACE_DEBUG("ov_write_regs:");\r
+    while (!((pNext->reg == OV_REG_TERM) && (pNext->val == OV_VAL_TERM))) {\r
+        err = ov_write_reg8(pTwid, pNext->reg, pNext->val);\r
+        \r
+        size++;\r
+        for(delay=0;delay<=10000;delay++); \r
+        if (err == TWID_ERROR_BUSY){\r
+            TRACE_ERROR("ov_write_regs: TWI ERROR\n\r");\r
+            return err;\r
+        }\r
+        //printf("(0x%02x,0x%02x) \n\r",  pNext->reg,pNext->val);\r
+        pNext++;\r
+    }\r
+    TRACE_DEBUG_WP("\n\r");\r
+    return 0;\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Initialize a list of OV registers.\r
+ * The list of registers is terminated by the pair of values\r
+ * \param pTwid TWI interface\r
+ * \param pReglist Register list to be written\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint32_t ov_write_regs16(Twid *pTwid, const struct ov_reg* pReglist)\r
+{\r
+    uint32_t err = 0;\r
+    uint32_t size = 0;\r
+    const struct ov_reg *pNext = pReglist;\r
+    volatile uint32_t delay;\r
+\r
+    TRACE_DEBUG("ov_write_regs:");\r
+    while (!((pNext->reg == OV_REG_TERM) && (pNext->val == OV_VAL_TERM))) {\r
+        err = ov_write_reg16(pTwid, pNext->reg, pNext->val);\r
+        size++;\r
+        for(delay = 0;delay <= 10000; delay++); \r
+        if (err == TWID_ERROR_BUSY){\r
+            TRACE_ERROR("ov_write_regs: TWI ERROR\n\r");\r
+            return err;\r
+        }\r
+        //printf("(0x%02x,0x%02x) \n\r",  pNext->reg,pNext->val);\r
+        pNext++;\r
+    }\r
+    TRACE_DEBUG_WP("\n\r");\r
+    return 0;\r
+}\r
+\r
+void isOV5640_AF_InitDone(Twid *pTwid)\r
+{\r
+   uint8_t value = 0;\r
+   while(1){\r
+      ov_read_reg16(pTwid, 0x3029, &value);\r
+      if (value == 0x70) break;\r
+   }\r
+}\r
+\r
+/**\r
+ * \brief  AF for OV 5640\r
+ * \param pTwid TWI interface\r
+ * \return 0 if no error; otherwize TWID_ERROR_BUSY\r
+ */\r
+uint32_t ov_5640_AF_single(Twid *pTwid)\r
+{\r
+    uint8_t value;\r
+    ov_write_reg16(pTwid, 0x3023, 1);\r
+    ov_write_reg16(pTwid, 0x3022, 3);\r
+    value =1;\r
+    while(1){\r
+       ov_read_reg16(pTwid, 0x3023, &value);\r
+        if (value == 0) break;\r
+    }\r
+    return 0;\r
+}\r
+\r
+uint32_t ov_5640_AF_continue(Twid *pTwid)\r
+{\r
+    uint8_t value;\r
+    ov_write_reg16(pTwid, 0x3024, 1);\r
+    ov_write_reg16(pTwid, 0x3022, 4);\r
+    value =1;\r
+    while(1){\r
+       ov_read_reg16(pTwid, 0x3023, &value);\r
+        if (value == 0) break;\r
+    }\r
+    return 0;\r
+}\r
+\r
+uint32_t ov_5640_AFPause(Twid *pTwid)\r
+{\r
+    uint8_t value;\r
+    ov_write_reg16(pTwid, 0x3023, 1);\r
+    ov_write_reg16(pTwid, 0x3022, 6);\r
+    value =1;\r
+    while(1){\r
+       ov_read_reg16(pTwid, 0x3023, &value);\r
+        if (value == 0) break;\r
+    }\r
+    return 0;\r
+}\r
+\r
+uint32_t ov_5640_AFrelease(Twid *pTwid)\r
+{\r
+    uint8_t value;\r
+    ov_write_reg16(pTwid, 0x3023, 1);\r
+    ov_write_reg16(pTwid, 0x3022, 8);\r
+    value =1;\r
+    while(1){\r
+       ov_read_reg16(pTwid, 0x3023, &value);\r
+        if (value == 0) break;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * \brief  Dump all register\r
+ * \param pTwid TWI interface\r
+ */\r
+void ov_DumpRegisters8(Twid *pTwid)\r
+{\r
+    uint32_t i;\r
+    uint8_t value;\r
+\r
+    TRACE_INFO_WP("Dump all camera register\n\r");\r
+    for(i = 0; i <= 0x5C; i++) {\r
+        value = 0;\r
+        ov_read_reg8(pTwid, i,  &value);\r
+        TRACE_INFO_WP("[0x%02x]=0x%02x ", i, value);\r
+        if( ((i+1)%5) == 0 ) {\r
+            TRACE_INFO_WP("\n\r");\r
+        }        \r
+    }\r
+    TRACE_INFO_WP("\n\r");\r
+}\r
+\r
+/**\r
+ * \brief  Dump all register\r
+ * \param pTwid TWI interface\r
+ */\r
+void ov_DumpRegisters16(Twid *pTwid)\r
+{\r
+    uint32_t i;\r
+    uint8_t value;\r
+\r
+    TRACE_INFO_WP("Dump all camera register\n\r");\r
+    for(i = 3000; i <= 0x305C; i++) {\r
+        value = 0;\r
+        ov_read_reg16(pTwid, i, &value);\r
+        TRACE_INFO_WP("[0x%02x]=0x%02x ", i, value);\r
+        if( ((i+1)%5) == 0 ) {\r
+            TRACE_INFO_WP("\n\r");\r
+        }        \r
+    }\r
+    TRACE_INFO_WP("\n\r");\r
+}\r
+\r
+/**\r
+ * \brief Sequence For correct operation of the sensor\r
+ * \param pTwid TWI interface\r
+ * \return OV type\r
+ */\r
+uint8_t ov_init(Twid *pTwid)\r
+{\r
+    uint16_t id = 0;\r
+    uint8_t ovType;\r
+    ov_reset();\r
+    id = ov_id(pTwid);\r
+    switch (id) {\r
+        case 0x7740: case 0x7742:\r
+            ovType =  OV_7740;\r
+            break;\r
+        case 0x9740: case 0x9742:\r
+            ovType =  OV_9740;\r
+            break;\r
+        case 0x2642: case 0x2640:\r
+            ovType =  OV_2640;\r
+            break;\r
+        case 0x2643: \r
+            ovType =  OV_2643;\r
+            break;\r
+        case 0x5640:\r
+            ovType =  OV_5640;\r
+            break;\r
+        default:\r
+            ovType = OV_UNKNOWN;\r
+            TRACE_ERROR("Can not support product ID %x \n\r", id);\r
+            break;\r
+    }\r
+    return ovType;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov.c
new file mode 100644 (file)
index 0000000..134b303
--- /dev/null
@@ -0,0 +1,194 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "board.h"\r
+\r
+const static struct capture_size ov_sizes[] = {\r
+//  {width, height}\r
+    /// VGA\r
+    { 320, 240 },\r
+    { 640, 360 },\r
+    { 640, 480 },\r
+    // SWVGA\r
+    { 800, 600 },\r
+    /// SXGA\r
+    {1280, 960 },\r
+    {1280, 720 },\r
+    /// UXGA\r
+    {1600, 1200 },\r
+};\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Global Functions\r
+ *----------------------------------------------------------------------------*/\r
\r
+/**\r
+ * \brief  Configure the OV for a specified image size, pixel format, \r
+ * and frame period.\r
+ */\r
+void ov_configure(Twid *pTwid, uint8_t ovType, uint32_t width, uint32_t heigth)\r
+{\r
+    const struct ov_reg *reg_conf;\r
+    uint8_t goodCaptureSize = 0;\r
+    uint8_t i;\r
+    \r
+    reg_conf = ov5640_yuv_vga;\r
+    TRACE_DEBUG("ovxxx_configure\n\r");\r
+    for( i = 0; i< sizeof(ov_sizes); i++ ) {\r
+        if( ov_sizes[i].width == width ) {\r
+            if( ov_sizes[i].height != heigth ) {\r
+                TRACE_INFO("ov configure vsize not define\n\r");\r
+            }\r
+            else {\r
+                goodCaptureSize = 1;\r
+                break;\r
+            }\r
+        }\r
+    }\r
+    if( goodCaptureSize == 0 ) {\r
+        TRACE_ERROR("Problem size\n\r");\r
+        while(1);\r
+    }\r
+    switch (ovType){\r
+        case OV_2640: {\r
+             // Default value\r
+             reg_conf = ov2640_yuv_qvga;\r
+             // common register initialization\r
+             switch(width) {\r
+                     case 320: //VGA\r
+                     printf("-I- QVGA 640 x 480\n\r");\r
+                     reg_conf = ov2640_yuv_qvga;\r
+                     break;\r
+                 case 640: //VGA\r
+                     printf("-I- VGA 640 x 480\n\r");\r
+                     reg_conf = ov2640_yuv_vga;\r
+                     break;\r
+                 default:\r
+                     TRACE_DEBUG("ov2640_configure problem\n\r");\r
+                     break;\r
+             }\r
+             break;\r
+        }\r
+        case OV_7740: {\r
+             // Default value\r
+             reg_conf = ov7740_yuv_vga;\r
+             // common register initialization\r
+             switch(width) {\r
+                 case 640: //VGA\r
+                     printf("-I- VGA 640 x 480\n\r");\r
+                     reg_conf = ov7740_yuv_vga;\r
+                     break;\r
+                 default:\r
+                     TRACE_DEBUG("ov7740_configure problem\n\r");\r
+                     break;\r
+             }\r
+             break;\r
+        }\r
+        case OV_9740: {\r
+             // Default value\r
+             reg_conf = ov9740_yuv_vga;\r
+             // common register initialization\r
+             switch(width) {\r
+                 case 640: //VGA\r
+                     printf("-I- VGA 640 x 360\n\r");\r
+                     reg_conf = ov9740_yuv_vga;\r
+                     break;\r
+                 case 1280: //VGA\r
+                     printf("-I- VGA 1280 x 720\n\r");\r
+                     reg_conf = ov9740_yuv_sxga;\r
+                     break;\r
+                 default:\r
+                     TRACE_DEBUG("ov9740_configure problem\n\r");\r
+                     break;\r
+             }\r
+             break;\r
+        }\r
+        case OV_2643: {\r
+             // Default value\r
+             reg_conf = ov2643_yuv_vga;\r
+             // common register initialization\r
+             switch(width) {\r
+                 case 1600: //UXGA\r
+                     printf("-I- UXGA 1600 x 1200 \n\r");\r
+                     reg_conf = ov2643_yuv_uxga;\r
+                     break;\r
+                 case 800: //SWVGA\r
+                     printf("-I- SWVGA 800 x 600\n\r");\r
+                     reg_conf = ov2643_yuv_swvga;\r
+                     break;\r
+                 case 640: //VGA\r
+                     printf("-I- VGA 640 x 480\n\r");\r
+                     reg_conf = ov2643_yuv_vga;\r
+                     break;\r
+                 default:  \r
+                     TRACE_DEBUG("ov2643_configure problem\n\r");\r
+                     break;\r
+             }\r
+            break;\r
+        }\r
+        case OV_5640: {\r
+             // Default value\r
+             reg_conf = ov5640_yuv_vga;\r
+             // common register initialization\r
+             switch(width) {\r
+                 case 640: //VGA\r
+                     printf("-I- VGA 640 x 480\n\r");\r
+                     reg_conf = ov5640_yuv_vga;\r
+                     break;\r
+                 case 1280: //SXGA\r
+                     printf("-I- SXGA 1280 x 720\n\r");\r
+                     reg_conf = ov5640_yuv_sxga;\r
+                     break;\r
+                 default:  \r
+                     TRACE_DEBUG("ov5640_configure problem\n\r");\r
+                     break;\r
+             }\r
+             break;\r
+        }\r
+    }\r
+    if ((ovType == OV_5640) || (ovType == OV_9740))\r
+        ov_write_regs16(pTwid, reg_conf);\r
+    else \r
+        ov_write_regs8(pTwid, reg_conf);\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Configure the OV 5640 afc fireware. \r
+ */\r
+void ov_5640Afc_Firmware(Twid *pTwid)\r
+{\r
+    const struct ov_reg *reg_conf;\r
+    reg_conf = ov5640_afc;\r
+    ov_write_regs16(pTwid, reg_conf);\r
+}
\ No newline at end of file
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov2640_config.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov2640_config.c
new file mode 100644 (file)
index 0000000..c28c6e4
--- /dev/null
@@ -0,0 +1,328 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*\r
+ * ID\r
+ */\r
+\r
+\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Local Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/* 320*240 */\r
+const struct ov_reg ov2640_yuv_qvga[]= {\r
+{0xff, 0x01},{0x12, 0x80},\r
+{0xff, 0x00},{0x2c, 0xff},{0x2e, 0xdf},\r
+{0xff, 0x01},{0x3c, 0x32},{0x11, 0x00},{0x09, 0x02},\r
+{0x04, 0x28},{0x13, 0xe5},{0x14, 0x48},{0x2c, 0x0c},{0x33, 0x78},{0x3a, 0x33},{0x3b, 0xfb},{0x3e, 0x00},{0x43, 0x11},\r
+{0x16, 0x10},{0x39, 0x02},{0x35, 0x88},{0x22, 0x0a},{0x37, 0x40},{0x23, 0x00},{0x34, 0xa0},{0x36, 0x1a},{0x06, 0x02},\r
+{0x07, 0xc0},{0x0d, 0xb7},{0x0e, 0x01},{0x4c, 0x00},{0x4a, 0x81},{0x21, 0x99},{0x24, 0x3a},{0x25, 0x32},{0x26, 0x82},\r
+{0x5c, 0x00},{0x63, 0x00},{0x5d, 0x55},{0x5e, 0x7d},{0x5f, 0x7d},{0x60, 0x55},{0x61, 0x70},{0x62, 0x80},{0x7c, 0x05},\r
+{0x20, 0x80},{0x28, 0x30},{0x6c, 0x00},{0x6d, 0x80},{0x6e, 0x00},{0x70, 0x02},{0x71, 0x94},{0x73, 0xc1},{0x3d, 0x34},\r
+{0x5a, 0x57},{0x4f, 0xbb},{0x50, 0x9c},\r
+{0xff, 0x00},{0xe5, 0x7f},{0xf9, 0xc0},{0x41, 0x24},{0xe0, 0x14},{0x76, 0xff},\r
+{0x33, 0xa0},{0x42, 0x20},{0x43, 0x18},{0x4c, 0x00},{0x87, 0xd0},{0x88, 0x3f},{0xd7, 0x03},{0xd9, 0x10},{0xd3, 0x82},\r
+{0xc8, 0x08},{0xc9, 0x80},{0x7c, 0x00},{0x7d, 0x02},{0x7c, 0x03},{0x7d, 0x48},{0x7d, 0x48},{0x7c, 0x08},{0x7d, 0x20},\r
+{0x7d, 0x10},{0x7d, 0x0e},{0x90, 0x00},{0x91, 0x0e},{0x91, 0x1a},{0x91, 0x31},{0x91, 0x5a},{0x91, 0x69},{0x91, 0x75},\r
+{0x91, 0x7e},{0x91, 0x88},{0x91, 0x8f},{0x91, 0x96},{0x91, 0xa3},{0x91, 0xaf},{0x91, 0xc4},{0x91, 0xd7},{0x91, 0xe8},\r
+{0x91, 0x20},{0x92, 0x00},{0x93, 0x06},{0x93, 0xe3},{0x93, 0x05},{0x93, 0x05},{0x93, 0x00},{0x93, 0x02},{0x93, 0x00},\r
+{0x93, 0x00},{0x93, 0x00},{0x93, 0x00},{0x93, 0x00},{0x93, 0x00},{0x93, 0x00},{0x96, 0x00},{0x97, 0x08},{0x97, 0x19},\r
+{0x97, 0x02},{0x97, 0x0c},{0x97, 0x24},{0x97, 0x30},{0x97, 0x28},{0x97, 0x26},{0x97, 0x02},{0x97, 0x98},{0x97, 0x80},\r
+{0x97, 0x00},{0x97, 0x00},{0xc3, 0xed},{0xa4, 0x00},{0xa8, 0x00},{0xc5, 0x11},{0xc6, 0x51},{0xbf, 0x80},{0xc7, 0x10},\r
+{0xb6, 0x66},{0xb8, 0xa5},{0xb7, 0x64},{0xb9, 0x7c},{0xb3, 0xaf},{0xb4, 0x97},{0xb5, 0xff},{0xb0, 0xc5},{0xb1, 0x94},\r
+{0xb2, 0x0f},{0xc4, 0x5c},{0xc0, 0xc8},{0xc1, 0x96},{0x86, 0x1d},{0x50, 0x00},{0x51, 0x90},{0x52, 0x18},{0x53, 0x00},\r
+{0x54, 0x00},{0x55, 0x88},{0x57, 0x00},{0x5a, 0x90},{0x5b, 0x18},{0x5c, 0x05},{0xc3, 0xed},{0x7f, 0x00},{0xda, 0x04},\r
+{0xe5, 0x1f},{0xe1, 0x67},{0xe0, 0x00},{0xdd, 0xff},{0x05, 0x00},\r
+{0xff, 0x01},{0x11, 0x01},\r
+{0xff, 0x01},{0x12, 0x40},\r
+{0x17, 0x11},{0x18, 0x43},{0x19, 0x00},{0x1a, 0x4b},{0x32, 0x09},{0x4f, 0xca},{0x50, 0xa8},{0x5a, 0x23},{0x6d, 0x00},\r
+{0x3d, 0x38},{0x39, 0x12},{0x35, 0xda},{0x22, 0x1a},{0x37, 0xc3},{0x23, 0x00},{0x34, 0xc0},{0x36, 0x1a},{0x06, 0x88},\r
+{0x07, 0xc0},{0x0d, 0x87},{0x0e, 0x41},{0x4c, 0x00},{0x48, 0x00},{0x5B, 0x00},{0x42, 0x03},\r
+{0xff, 0x00},{0xe0, 0x04},\r
+{0xc0, 0x64},{0xc1, 0x4B},{0x8c, 0x00},{0x86, 0x1D},{0xd3, 0x82},{0xe0, 0x00},\r
+{0xff, 0x00},\r
+{0xc0, 0x64},{0xc1, 0x4B},{0x8c, 0x00}, // Xiao: HSIZE 0x64*8 = 800, VSIZE 0x4b*8 = 600\r
+{0x86, 0x3D},\r
+{0x50, 0x89}, // LP_DP, V_DIV 1, H_DIV 1\r
+{0x51, 0xC8},{0x52, 0x96},{0x53, 0x00},{0x54, 0x00},{0x55, 0x00}, // Xiao: HSIZE 0xC8(200)*4 = 800, VSIZE 0x96(150)*4 = 600\r
+{0x5a, 0x50},{0x5b, 0x3C},{0x5c, 0x00}, // Xiao: ZMOW 0x50(80)*4 = 320, ZMOH 0x3C(60)*4 = 240\r
+{0xd3, 0x04},\r
+{0xFF, 0x00},{0xE0, 0x04},{0xE1, 0x67},{0xD7, 0x01},{0xDA, 0x00},{0xD3, 0x82},{0xE0, 0x00},\r
+{0xFF, 0xFF}\r
+};\r
+\r
+const struct ov_reg ov2640_yuv_vga[]= {\r
+    {0xff, 0x01}, //dsp\r
+    {0x12, 0x80}, //reset\r
+    {0xff, 0x00}, //sensor\r
+    {0x2c, 0xff}, //?\r
+    {0x2e, 0xdf}, //ADDVSH, VSYNC msb=223\r
+    {0xff, 0x01}, //dsp\r
+    {0x3c, 0x32}, //?\r
+    {0x11, 0x00}, //clock rate off\r
+    {0x09, 0x02}, //2 capablity + standby mode \r
+    {0x04, 0x28}, //? ??????????????????????????????????\r
+    {0x13, 0xe5}, //\r
+    {0x14, 0x48}, //Auto agc\r
+    {0x2c, 0x0c}, //?\r
+    {0x33, 0x78}, //? \r
+    {0x3a, 0x33}, //?\r
+    {0x3b, 0xfb}, //?\r
+    {0x3e, 0x00}, //? \r
+    {0x43, 0x11}, //?\r
+    {0x16, 0x10}, //?\r
+    {0x39, 0x02}, //?\r
+    {0x35, 0x88}, //?\r
+    {0x22, 0x0a}, //?\r
+    {0x37, 0x40}, //?\r
+    {0x23, 0x00}, //?\r
+    {0x34, 0xa0}, //startpoint 0\r
+    {0x36, 0x1a}, //? XXXXXXXXXXXXXXXX\r
+    {0x06, 0x02}, //?\r
+    {0x07, 0xc0}, //?\r
+    {0x0d, 0xb7}, //?\r
+    {0x0e, 0x01}, //?\r
+    {0x4c, 0x00}, //?\r
+    {0x4a, 0x81}, //?\r
+    {0x21, 0x99}, //?\r
+    {0x24, 0x3a}, // Luminance high\r
+    {0x25, 0x32}, // Luminance low\r
+    //{0x24, 0x10}, // Luminance high\r
+    //{0x25, 0x03}, // Luminance low\r
+\r
+    {0x26, 0xF3}, // Fast mode large Step Range Threshold \r
+    {0x5c, 0x00}, //?\r
+    {0x63, 0x00}, //?\r
+    {0x5d, 0x55}, //zone\r
+    {0x5e, 0x7d}, //zone\r
+    {0x5f, 0x7d}, //zone\r
+    {0x60, 0x55}, //zone\r
+    {0x61, 0x70}, //Histogram low\r
+    {0x62, 0x80}, //Histogram high\r
+    {0x7c, 0x05}, //?\r
+    {0x20, 0x80}, //?\r
+    {0x28, 0x30}, //?\r
+    {0x6c, 0x00}, //?\r
+    {0x6d, 0x80}, //?\r
+    {0x6e, 0x00}, //?\r
+    {0x70, 0x02}, //?\r
+    {0x71, 0x94}, //?\r
+    {0x73, 0xc1}, //?\r
+    {0x3d, 0x34}, //?\r
+    {0x5a, 0x57}, //?\r
+    {0x4f, 0xbb}, //50Hz\r
+    {0x50, 0x9c}, //60Hz\r
+\r
+    {0xff, 0x00}, //dsp\r
+    {0xe5, 0x7f}, //?\r
+    {0xf9, 0xc0}, //MicroC reset,Boot\r
+    {0x41, 0x24}, //?\r
+    {0xe0, 0x14}, //JPEG,DVP reset\r
+    {0x76, 0xff}, //?\r
+    {0x33, 0xa0}, //?\r
+    {0x42, 0x20}, //?\r
+    {0x43, 0x18}, //?\r
+    {0x4c, 0x00}, //?\r
+    {0x87, 0xd0}, //Module Enable BPC+WPC 11010000\r
+    {0x88, 0x3f}, //?\r
+    {0xd7, 0x03}, //?\r
+    {0xd9, 0x10}, //?\r
+    {0xd3, 0x82}, //Auto mode \r
+    {0xc8, 0x08}, //?\r
+    {0xc9, 0x80}, //?\r
+    {0x7c, 0x00}, //SDE indirect register access: address \r
+    {0x7d, 0x02}, //SDE indirect register data \r
+    {0x7c, 0x03}, //\r
+    {0x7d, 0x48}, //\r
+    {0x7d, 0x48}, //\r
+    {0x7c, 0x08}, //\r
+    {0x7d, 0x20}, //\r
+    {0x7d, 0x10}, // \r
+    {0x7d, 0x0e}, //\r
+    {0x90, 0x00}, //?\r
+    {0x91, 0x0e}, //?\r
+    {0x91, 0x1a}, //?\r
+    {0x91, 0x31}, //?\r
+    {0x91, 0x5a}, //?\r
+    {0x91, 0x69}, //?\r
+    {0x91, 0x75}, //?\r
+    {0x91, 0x7e}, //?\r
+    {0x91, 0x88}, //?\r
+    {0x91, 0x8f}, //?\r
+    {0x91, 0x96}, //?\r
+    {0x91, 0xa3}, //?\r
+    {0x91, 0xaf}, //?\r
+    {0x91, 0xc4}, //?\r
+    {0x91, 0xd7}, //?\r
+    {0x91, 0xe8}, //?\r
+    {0x91, 0x20}, //?\r
+    {0x92, 0x00}, //?\r
+    {0x93, 0x06}, //?\r
+    {0x93, 0xe3}, //?\r
+    {0x93, 0x05}, //?\r
+    {0x93, 0x05}, //?\r
+    {0x93, 0x00}, //?\r
+    {0x93, 0x02}, //?\r
+    {0x93, 0x00}, //? \r
+    {0x93, 0x00}, //? \r
+    {0x93, 0x00}, //?\r
+    {0x93, 0x00}, //?\r
+    {0x93, 0x00}, //?\r
+    {0x93, 0x00}, //?\r
+    {0x93, 0x00}, //?\r
+    {0x96, 0x00}, //?\r
+    {0x97, 0x08}, //?\r
+    {0x97, 0x19}, //?\r
+    {0x97, 0x02}, //?\r
+    {0x97, 0x0c}, //?\r
+    {0x97, 0x24}, //?\r
+    {0x97, 0x30}, //?\r
+    {0x97, 0x28}, //?\r
+    {0x97, 0x26}, //?\r
+    {0x97, 0x02}, //?\r
+    {0x97, 0x98}, //?\r
+    {0x97, 0x80}, //?\r
+    {0x97, 0x00}, //?\r
+    {0x97, 0x00}, //?\r
+    {0xc3, 0xed}, //Module enable \r
+    {0xa4, 0x00}, //?\r
+    {0xa8, 0x00}, //?\r
+    {0xc5, 0x11}, //?\r
+    {0xc6, 0x51}, //?\r
+    {0xbf, 0x80}, //?\r
+    {0xc7, 0x10}, //?\r
+    {0xb6, 0x66}, //?\r
+    {0xb8, 0xa5}, //?\r
+    {0xb7, 0x64}, //?\r
+    {0xb9, 0x7c}, //?\r
+    {0xb3, 0xaf}, //?\r
+    {0xb4, 0x97}, //?\r
+    {0xb5, 0xff}, //?\r
+    {0xb0, 0xc5}, //?\r
+    {0xb1, 0x94}, //?\r
+    {0xb2, 0x0f}, //?\r
+    {0xc4, 0x5c}, //?\r
+    {0xc0, 0xc8}, // HSIZE8[7:0] 1600\r
+    {0xc1, 0x96}, // VSIZE8[7:0] 1200\r
+    {0x86, 0x1d}, //Module enable \r
+    {0x50, 0x00}, //?\r
+    {0x51, 0x90}, //H_SIZE[7:0] (real/4) 1600\r
+    {0x52, 0x18}, //V_SIZE[7:0] (real/4) 1120\r
+    {0x53, 0x00}, //OFFSET_X[7:0]\r
+    {0x54, 0x00}, //OFFSET_Y[7:0]\r
+    {0x55, 0x88}, //V_SIZE[8]=1 H_SIZE[8]\r
+    {0x57, 0x00}, //?\r
+    {0x5a, 0x90}, //OUTW\r
+    {0x5b, 0x18}, //OUTH\r
+    {0x5c, 0x05}, //OUTW8 ,OUTH8\r
+    {0xc3, 0xed}, //\r
+    {0x7f, 0x00}, //?\r
+    {0xda, 0x04}, //Image output format select ------ RAW \r
+    {0xe5, 0x1f}, //? \r
+    {0xe1, 0x67}, //?\r
+    {0xe0, 0x00}, //Reset\r
+    {0xdd, 0xff}, //?\r
+    {0x05, 0x00}, //Bypass DSP no\r
+    {0xC2, 0x08 | 0x04 | 0x02 },\r
+\r
+    {0xff, 0x01}, //Sensor\r
+    {0x11, 0x01}, //?\r
+    {0xff, 0x01}, //Sensor\r
+    {0x12, 0x40}, //Preview mode \r
+    {0x17, 0x11}, //?\r
+    {0x18, 0x43}, //?\r
+    {0x19, 0x00}, //?\r
+    {0x1a, 0x4b}, //?\r
+    {0x32, 0x09}, //?\r
+    {0x4f, 0xca}, //?\r
+    {0x50, 0xa8}, //10 101 000 V_DIVDER = 5\r
+    {0x5a, 0x23}, // OUTW 23\r
+    {0x6d, 0x00}, //?\r
+    {0x3d, 0x38}, //?\r
+    {0x39, 0x12}, //?\r
+    {0x35, 0xda}, //?\r
+    {0x22, 0x1a}, //?\r
+    {0x37, 0xc3}, //?\r
+    {0x23, 0x00}, //?\r
+    {0x34, 0xc0}, //?\r
+    {0x36, 0x1a}, //?\r
+    {0x06, 0x88}, //?\r
+    {0x07, 0xc0}, //?\r
+    {0x0d, 0x87}, //?\r
+    {0x0e, 0x41}, //?\r
+    {0x4c, 0x00}, //?\r
+    {0x48, 0x00}, //?\r
+    {0x5B, 0x00}, //OUTH\r
+    {0x42, 0x03}, //?\r
+    {0xff, 0x00}, //DSP\r
+\r
+    {0xe0, 0x04}, //Reset DVP\r
+    {0xc0, 0x64}, // HSIZE8[7:0] 400\r
+    {0xc1, 0x4B}, // VSIZE8[7:0] 300\r
+    {0x8c, 0x00}, //?\r
+    {0x86, 0x1D}, //Modle enable\r
+    {0xd3, 0x82}, //Auto mode DVP PCLK=2\r
+    {0xe0, 0x00}, //Reset\r
+\r
+    {0xff, 0x00}, //DSP\r
+    {0xc0, 0x64}, // HSIZE8[7:0] 400\r
+    {0xc1, 0x4B}, // VSIZE8[7:0] 300\r
+    {0x8c, 0x00}, //?\r
+    {0x86, 0x3D}, //?\r
+    {0x50, 0x00}, //?\r
+    {0x51, 0xC8}, //H_SIZE[7:0] (real/4) 800\r
+    {0x52, 0x96}, //V_SIZE[7:0] (real/4) 600\r
+    {0x53, 0x00}, //OFFSET\r
+    {0x54, 0x00}, //OFFSET\r
+    {0x55, 0x00}, //H_SIZE[8],V_SIZE[8]\r
+    {0x5a, 0xA0}, //OUTW[0-7] 160?\r
+    {0x5b, 0x78}, //OUTH[0-7] 120?\r
+    {0x5c, 0x00}, //OUTW8,OUTH8\r
+    {0xd3, 0x04}, //?\r
+    {0xFF, 0x00},\r
+    {0xE0, 0x04},\r
+    {0xE1, 0x67},\r
+    {0xD7, 0x01},\r
+    {0xDA, 0x00}, //Image output format select ------ YUV422\r
+    {0xD3, 0x82},\r
+    {0xE0, 0x00},\r
+    {0xFF, 0xFF}\r
+    };\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov2643_config.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov2643_config.c
new file mode 100644 (file)
index 0000000..904830f
--- /dev/null
@@ -0,0 +1,682 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*\r
+ * ID\r
+ */\r
+#define MANUFACTURER_ID    0x7FA2\r
+\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Local Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+const struct ov_reg ov2643_yuv_uxga[]= {\r
+    {0x12, 0x80},\r
+    {0xc3, 0x1f},\r
+    {0xc4, 0xff},\r
+    {0x3d, 0x48},\r
+    {0xdd, 0xa5},\r
+    {0x0e, 0xb7},\r
+    {0x10, 0x0a},\r
+    {0x11, 0x00},\r
+    {0x0f, 0x14},\r
+    {0x21, 0x25},\r
+    {0x23, 0x0c},\r
+    {0x12, 0x08},\r
+    {0x39, 0x10},\r
+    {0xcd, 0x12},\r
+    {0x13, 0xff},\r
+    {0x14, 0xa7},\r
+    {0x15, 0x42},\r
+    {0x3c, 0xa4},\r
+    {0x18, 0x60},\r
+    {0x19, 0x50},\r
+    {0x1a, 0xe2},\r
+    {0x37, 0xe8},\r
+    {0x16, 0x90},\r
+    {0x43, 0x00},\r
+    {0x40, 0xfb},\r
+    {0xa9, 0x44},\r
+    {0x2f, 0xec},\r
+    {0x35, 0x10},\r
+    {0x36, 0x10},\r
+    {0x0c, 0x00},\r
+    {0x0d, 0x00},\r
+    {0xd0, 0x93},\r
+    {0xdc, 0x2b},\r
+    {0xd9, 0x41},\r
+    {0xd3, 0x02},\r
+    {0x3d, 0x08},\r
+    {0x0c, 0x00},\r
+    {0x18, 0x2c},\r
+    {0x19, 0x24},\r
+    {0x1a, 0x71},\r
+    {0x9b, 0x69},\r
+    {0x9c, 0x7d},\r
+    {0x9d, 0x7d},\r
+    {0x9e, 0x69},\r
+    {0x35, 0x04},\r
+    {0x36, 0x04},\r
+    {0x65, 0x12},\r
+    {0x66, 0x20},\r
+    {0x67, 0x39},\r
+    {0x68, 0x4e},\r
+    {0x69, 0x62},\r
+    {0x6a, 0x74},\r
+    {0x6b, 0x85},\r
+    {0x6c, 0x92},\r
+    {0x6d, 0x9e},\r
+    {0x6e, 0xb2},\r
+    {0x6f, 0xc0},\r
+    {0x70, 0xcc},\r
+    {0x71, 0xe0},\r
+    {0x72, 0xee},\r
+    {0x73, 0xf6},\r
+    {0x74, 0x11},\r
+    {0xab, 0x20},\r
+    {0xac, 0x5b},\r
+    {0xad, 0x05},\r
+    {0xae, 0x1b},\r
+    {0xaf, 0x76},\r
+    {0xb0, 0x90},\r
+    {0xb1, 0x90},\r
+    {0xb2, 0x8c},\r
+    {0xb3, 0x04},\r
+    {0xb4, 0x98},\r
+    {0x4c, 0x03},\r
+    {0x4d, 0x30},\r
+    {0x4e, 0x02},\r
+    {0x4f, 0x5c},\r
+    {0x50, 0x56},\r
+    {0x51, 0x00},\r
+    {0x52, 0x66},\r
+    {0x53, 0x03},\r
+    {0x54, 0x30},\r
+    {0x55, 0x02},\r
+    {0x56, 0x5c},\r
+    {0x57, 0x40},\r
+    {0x58, 0x00},\r
+    {0x59, 0x66},\r
+    {0x5a, 0x03},\r
+    {0x5b, 0x20},\r
+    {0x5c, 0x02},\r
+    {0x5d, 0x5c},\r
+    {0x5e, 0x3a},\r
+    {0x5f, 0x00},\r
+    {0x60, 0x66},\r
+    {0x41, 0x1f},\r
+    {0xb5, 0x01},\r
+    {0xb6, 0x02},\r
+    {0xb9, 0x40},\r
+    {0xba, 0x28},\r
+    {0xbf, 0x0c},\r
+    {0xc0, 0x3e},\r
+    {0xa3, 0x0a},\r
+    {0xa4, 0x0f},\r
+    {0xa5, 0x09},\r
+    {0xa6, 0x16},\r
+    {0x9f, 0x0a},\r
+    {0xa0, 0x0f},\r
+    {0xa7, 0x0a},\r
+    {0xa8, 0x0f},\r
+    {0xa1, 0x10},\r
+    {0xa2, 0x04},\r
+    {0xa9, 0x04},\r
+    {0xaa, 0xa6},\r
+    {0x75, 0x6a},\r
+    {0x76, 0x11},\r
+    {0x77, 0x92},\r
+    {0x78, 0x21},\r
+    {0x79, 0xe1},\r
+    {0x7a, 0x02},\r
+    {0x7c, 0x05},\r
+    {0x7d, 0x08},\r
+    {0x7e, 0x08},\r
+    {0x7f, 0x7c},\r
+    {0x80, 0x58},\r
+    {0x81, 0x2a},\r
+    {0x82, 0xc5},\r
+    {0x83, 0x46},\r
+    {0x84, 0x3a},\r
+    {0x85, 0x54},\r
+    {0x86, 0x44},\r
+    {0x87, 0xf8},\r
+    {0x88, 0x08},\r
+    {0x89, 0x70},\r
+    {0x8a, 0xf0},\r
+    {0x8b, 0xf0},\r
+    {0x90, 0xe3},\r
+    {0x93, 0x10},\r
+    {0x94, 0x20},\r
+    {0x95, 0x10},\r
+    {0x96, 0x18},\r
+    {0x0f, 0x34},\r
+\r
+    {0x12, 0x80},\r
+    {0xc3, 0x1f},\r
+    {0xc4, 0xff},\r
+    {0x3d, 0x48},\r
+    {0xdd, 0xa5},\r
+    {0x0e, 0xb4},\r
+    {0x10, 0x0a},\r
+    {0x11, 0x00},\r
+    {0x0f, 0x14},\r
+    {0x21, 0x25},\r
+    {0x23, 0x0c},\r
+    {0x12, 0x08},\r
+    {0x39, 0x10},\r
+    {0xcd, 0x12},\r
+    {0x13, 0xff},\r
+    {0x14, 0xa7},\r
+    {0x15, 0x42},\r
+    {0x3c, 0xa4},\r
+    {0x18, 0x60},\r
+    {0x19, 0x50},\r
+    {0x1a, 0xe2},\r
+    {0x37, 0xe8},\r
+    {0x16, 0x90},\r
+    {0x43, 0x00},\r
+    {0x40, 0xfb},\r
+    {0xa9, 0x44},\r
+    {0x2f, 0xec},\r
+    {0x35, 0x10},\r
+    {0x36, 0x10},\r
+    {0x0c, 0x00},\r
+    {0x0d, 0x00},\r
+    {0xd0, 0x93},\r
+    {0xdc, 0x2b},\r
+    {0xd9, 0x41},\r
+    {0xd3, 0x02},\r
+    {0x3d, 0x08},\r
+    {0x0c, 0x00},\r
+    {0x18, 0x2c},\r
+    {0x19, 0x24},\r
+    {0x1a, 0x71},\r
+    {0x9b, 0x69},\r
+    {0x9c, 0x7d},\r
+    {0x9d, 0x7d},\r
+    {0x9e, 0x69},\r
+    {0x35, 0x04},\r
+    {0x36, 0x04},\r
+    {0x65, 0x12},\r
+    {0x66, 0x20},\r
+    {0x67, 0x39},\r
+    {0x68, 0x4e},\r
+    {0x69, 0x62},\r
+    {0x6a, 0x74},\r
+    {0x6b, 0x85},\r
+    {0x6c, 0x92},\r
+    {0x6d, 0x9e},\r
+    {0x6e, 0xb2},\r
+    {0x6f, 0xc0},\r
+    {0x70, 0xcc},\r
+    {0x71, 0xe0},\r
+    {0x72, 0xee},\r
+    {0x73, 0xf6},\r
+    {0x74, 0x11},\r
+    {0xab, 0x20},\r
+    {0xac, 0x5b},\r
+    {0xad, 0x05},\r
+    {0xae, 0x1b},\r
+    {0xaf, 0x76},\r
+    {0xb0, 0x90},\r
+    {0xb1, 0x90},\r
+    {0xb2, 0x8c},\r
+    {0xb3, 0x04},\r
+    {0xb4, 0x98},\r
+    {0x4c, 0x03},\r
+    {0x4d, 0x30},\r
+    {0x4e, 0x02},\r
+    {0x4f, 0x5c},\r
+    {0x50, 0x56},\r
+    {0x51, 0x00},\r
+    {0x52, 0x66},\r
+    {0x53, 0x03},\r
+    {0x54, 0x30},\r
+    {0x55, 0x02},\r
+    {0x56, 0x5c},\r
+    {0x57, 0x40},\r
+    {0x58, 0x00},\r
+    {0x59, 0x66},\r
+    {0x5a, 0x03},\r
+    {0x5b, 0x20},\r
+    {0x5c, 0x02},\r
+    {0x5d, 0x5c},\r
+    {0x5e, 0x3a},\r
+    {0x5f, 0x00},\r
+    {0x60, 0x66},\r
+    {0x41, 0x1f},\r
+    {0xb5, 0x01},\r
+    {0xb6, 0x02},\r
+    {0xb9, 0x40},\r
+    {0xba, 0x28},\r
+    {0xbf, 0x0c},\r
+    {0xc0, 0x3e},\r
+    {0xa3, 0x0a},\r
+    {0xa4, 0x0f},\r
+    {0xa5, 0x09},\r
+    {0xa6, 0x16},\r
+    {0x9f, 0x0a},\r
+    {0xa0, 0x0f},\r
+    {0xa7, 0x0a},\r
+    {0xa8, 0x0f},\r
+    {0xa1, 0x10},\r
+    {0xa2, 0x04},\r
+    {0xa9, 0x04},\r
+    {0xaa, 0xa6},\r
+    {0x75, 0x6a},\r
+    {0x76, 0x11},\r
+    {0x77, 0x92},\r
+    {0x78, 0x21},\r
+    {0x79, 0xe1},\r
+    {0x7a, 0x02},\r
+    {0x7c, 0x05},\r
+    {0x7d, 0x08},\r
+    {0x7e, 0x08},\r
+    {0x7f, 0x7c},\r
+    {0x80, 0x58},\r
+    {0x81, 0x2a},\r
+    {0x82, 0xc5},\r
+    {0x83, 0x46},\r
+    {0x84, 0x3a},\r
+    {0x85, 0x54},\r
+    {0x86, 0x44},\r
+    {0x87, 0xf8},\r
+    {0x88, 0x08},\r
+    {0x89, 0x70},\r
+    {0x8a, 0xf0},\r
+    {0x8b, 0xf0},\r
+    {0x90, 0xe3},\r
+    {0x93, 0x10},\r
+    {0x94, 0x20},\r
+    {0x95, 0x10},\r
+    {0x96, 0x18},\r
+    {0x0f, 0x34},\r
+    {0xFF, 0xFF}\r
+};\r
+\r
+const struct ov_reg ov2643_yuv_swvga[]= {\r
+{0x12, 0x80},\r
+    {0xc3, 0x1f},\r
+    {0xc4, 0xff},\r
+    {0x3d, 0x48},\r
+    {0xdd, 0xa5},\r
+    {0x0e, 0xb4},\r
+    {0x10, 0x0a},\r
+    {0x11, 0x00},\r
+    {0x0f, 0x14},\r
+    {0x21, 0x25},\r
+    {0x23, 0x0c},\r
+    {0x12, 0x08},\r
+    {0x39, 0x10},\r
+    {0xcd, 0x12},\r
+    {0x13, 0xff},\r
+    {0x14, 0xa7},\r
+    {0x15, 0x42},\r
+    {0x3c, 0xa4},\r
+    {0x18, 0x60},\r
+    {0x19, 0x50},\r
+    {0x1a, 0xe2},\r
+    {0x37, 0xe8},\r
+    {0x16, 0x90},\r
+    {0x43, 0x00},\r
+    {0x40, 0xfb},\r
+    {0xa9, 0x44},\r
+    {0x2f, 0xec},\r
+    {0x35, 0x10},\r
+    {0x36, 0x10},\r
+    {0x0c, 0x00},\r
+    {0x0d, 0x00},\r
+    {0xd0, 0x93},\r
+    {0xdc, 0x2b},\r
+    {0xd9, 0x41},\r
+    {0xd3, 0x02},\r
+    {0x3d, 0x08},\r
+    {0x0c, 0x00},\r
+    {0x18, 0x2c},\r
+    {0x19, 0x24},\r
+    {0x1a, 0x71},\r
+    {0x9b, 0x69},\r
+    {0x9c, 0x7d},\r
+    {0x9d, 0x7d},\r
+    {0x9e, 0x69},\r
+    {0x35, 0x04},\r
+    {0x36, 0x04},\r
+    {0x65, 0x12},\r
+    {0x66, 0x20},\r
+    {0x67, 0x39},\r
+    {0x68, 0x4e},\r
+    {0x69, 0x62},\r
+    {0x6a, 0x74},\r
+    {0x6b, 0x85},\r
+    {0x6c, 0x92},\r
+    {0x6d, 0x9e},\r
+    {0x6e, 0xb2},\r
+    {0x6f, 0xc0},\r
+    {0x70, 0xcc},\r
+    {0x71, 0xe0},\r
+    {0x72, 0xee},\r
+    {0x73, 0xf6},\r
+    {0x74, 0x11},\r
+    {0xab, 0x20},\r
+    {0xac, 0x5b},\r
+    {0xad, 0x05},\r
+    {0xae, 0x1b},\r
+    {0xaf, 0x76},\r
+    {0xb0, 0x90},\r
+    {0xb1, 0x90},\r
+    {0xb2, 0x8c},\r
+    {0xb3, 0x04},\r
+    {0xb4, 0x98},\r
+    {0x4c, 0x03},\r
+    {0x4d, 0x30},\r
+    {0x4e, 0x02},\r
+    {0x4f, 0x5c},\r
+    {0x50, 0x56},\r
+    {0x51, 0x00},\r
+    {0x52, 0x66},\r
+    {0x53, 0x03},\r
+    {0x54, 0x30},\r
+    {0x55, 0x02},\r
+    {0x56, 0x5c},\r
+    {0x57, 0x40},\r
+    {0x58, 0x00},\r
+    {0x59, 0x66},\r
+    {0x5a, 0x03},\r
+    {0x5b, 0x20},\r
+    {0x5c, 0x02},\r
+    {0x5d, 0x5c},\r
+    {0x5e, 0x3a},\r
+    {0x5f, 0x00},\r
+    {0x60, 0x66},\r
+    {0x41, 0x1f},\r
+    {0xb5, 0x01},\r
+    {0xb6, 0x02},\r
+    {0xb9, 0x40},\r
+    {0xba, 0x28},\r
+    {0xbf, 0x0c},\r
+    {0xc0, 0x3e},\r
+    {0xa3, 0x0a},\r
+    {0xa4, 0x0f},\r
+    {0xa5, 0x09},\r
+    {0xa6, 0x16},\r
+    {0x9f, 0x0a},\r
+    {0xa0, 0x0f},\r
+    {0xa7, 0x0a},\r
+    {0xa8, 0x0f},\r
+    {0xa1, 0x10},\r
+    {0xa2, 0x04},\r
+    {0xa9, 0x04},\r
+    {0xaa, 0xa6},\r
+    {0x75, 0x6a},\r
+    {0x76, 0x11},\r
+    {0x77, 0x92},\r
+    {0x78, 0x21},\r
+    {0x79, 0xe1},\r
+    {0x7a, 0x02},\r
+    {0x7c, 0x05},\r
+    {0x7d, 0x08},\r
+    {0x7e, 0x08},\r
+    {0x7f, 0x7c},\r
+    {0x80, 0x58},\r
+    {0x81, 0x2a},\r
+    {0x82, 0xc5},\r
+    {0x83, 0x46},\r
+    {0x84, 0x3a},\r
+    {0x85, 0x54},\r
+    {0x86, 0x44},\r
+    {0x87, 0xf8},\r
+    {0x88, 0x08},\r
+    {0x89, 0x70},\r
+    {0x8a, 0xf0},\r
+    {0x8b, 0xf0},\r
+    {0x90, 0xe3},\r
+    {0x93, 0x10},\r
+    {0x94, 0x20},\r
+    {0x95, 0x10},\r
+    {0x96, 0x18},\r
+    {0x0f, 0x34},\r
+\r
+    {0x3d, 0x48},\r
+    {0x0e, 0xb8},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x20, 0x01},\r
+    {0x21, 0x98},\r
+    {0x22, 0x00},\r
+    {0x23, 0x06},\r
+    {0x24, 0x32},\r
+    {0x25, 0x04},\r
+    {0x26, 0x25},\r
+    {0x27, 0x84},\r
+    {0x28, 0x40},\r
+    {0x29, 0x04},\r
+    {0x2a, 0xce},\r
+    {0x2b, 0x02},\r
+    {0x2c, 0x8a},\r
+    {0x12, 0x09},\r
+    {0x39, 0xd0},\r
+    {0xcd, 0x13},\r
+    {0xde, 0x7c},\r
+    {0x3d, 0x08},\r
+    {0x15, 0x42},\r
+    {0xde, 0x7c},\r
+    {0x0f, 0x24},\r
+    {0xFF, 0xFF}\r
+};\r
+\r
+const struct ov_reg ov2643_yuv_vga[]= {\r
+    {0x12, 0x80},\r
+    {0xc3, 0x1f},\r
+    {0xc4, 0xff},\r
+    {0x3d, 0x48},\r
+    {0xdd, 0xa5},\r
+    {0x0e, 0xb7},\r
+    {0x10, 0x0a},\r
+    {0x11, 0x00},\r
+    {0x0f, 0x14},\r
+    {0x21, 0x25},\r
+    {0x23, 0x0c},\r
+    {0x12, 0x08},\r
+    {0x39, 0x10},\r
+    {0xcd, 0x12},\r
+    {0x13, 0xff},\r
+    {0x14, 0xa7},\r
+    {0x15, 0x42},\r
+    {0x3c, 0xa4},\r
+    {0x18, 0x60},\r
+    {0x19, 0x50},\r
+    {0x1a, 0xe2},\r
+    {0x37, 0xe8},\r
+    {0x16, 0x90},\r
+    //{0x43, 0xC0},\r
+       {0x43, 0x00},\r
+    {0x40, 0xfb},\r
+    {0xa9, 0x44},\r
+    {0x2f, 0xec},\r
+    {0x35, 0x10},\r
+    {0x36, 0x10},\r
+    {0x0c, 0x00},\r
+    {0x0d, 0x00},\r
+    {0xd0, 0x93},\r
+    {0xdc, 0x2b},\r
+    {0xd9, 0x41},\r
+    {0xd3, 0x02},\r
+    {0x3d, 0x08},\r
+    {0x0c, 0x00},\r
+    {0x18, 0x2c},\r
+    {0x19, 0x24},\r
+    {0x1a, 0x71},\r
+    {0x9b, 0x69},\r
+    {0x9c, 0x7d},\r
+    {0x9d, 0x7d},\r
+    {0x9e, 0x69},\r
+    {0x35, 0x04},\r
+    {0x36, 0x04},\r
+    {0x65, 0x12},\r
+    {0x66, 0x20},\r
+    {0x67, 0x39},\r
+    {0x68, 0x4e},\r
+    {0x69, 0x62},\r
+    {0x6a, 0x74},\r
+    {0x6b, 0x85},\r
+    {0x6c, 0x92},\r
+    {0x6d, 0x9e},\r
+    {0x6e, 0xb2},\r
+    {0x6f, 0xc0},\r
+    {0x70, 0xcc},\r
+    {0x71, 0xe0},\r
+    {0x72, 0xee},\r
+    {0x73, 0xf6},\r
+    {0x74, 0x11},\r
+    {0xab, 0x20},\r
+    {0xac, 0x5b},\r
+    {0xad, 0x05},\r
+    {0xae, 0x1b},\r
+    {0xaf, 0x76},\r
+    {0xb0, 0x90},\r
+    {0xb1, 0x90},\r
+    {0xb2, 0x8c},\r
+    {0xb3, 0x04},\r
+    {0xb4, 0x98},\r
+    {0x4c, 0x03},\r
+    {0x4d, 0x30},\r
+    {0x4e, 0x02},\r
+    {0x4f, 0x5c},\r
+    {0x50, 0x56},\r
+    {0x51, 0x00},\r
+    {0x52, 0x66},\r
+    {0x53, 0x03},\r
+    {0x54, 0x30},\r
+    {0x55, 0x02},\r
+    {0x56, 0x5c},\r
+    {0x57, 0x40},\r
+    {0x58, 0x00},\r
+    {0x59, 0x66},\r
+    {0x5a, 0x03},\r
+    {0x5b, 0x20},\r
+    {0x5c, 0x02},\r
+    {0x5d, 0x5c},\r
+    {0x5e, 0x3a},\r
+    {0x5f, 0x00},\r
+    {0x60, 0x66},\r
+    {0x41, 0x1f},\r
+    {0xb5, 0x01},\r
+    {0xb6, 0x02},\r
+    {0xb9, 0x40},\r
+    {0xba, 0x28},\r
+    {0xbf, 0x0c},\r
+    {0xc0, 0x3e},\r
+    {0xa3, 0x0a},\r
+    {0xa4, 0x0f},\r
+    {0xa5, 0x09},\r
+    {0xa6, 0x16},\r
+    {0x9f, 0x0a},\r
+    {0xa0, 0x0f},\r
+    {0xa7, 0x0a},\r
+    {0xa8, 0x0f},\r
+    {0xa1, 0x10},\r
+    {0xa2, 0x04},\r
+    {0xa9, 0x04},\r
+    {0xaa, 0xa6},\r
+    {0x75, 0x6a},\r
+    {0x76, 0x11},\r
+    {0x77, 0x92},\r
+    {0x78, 0x21},\r
+    {0x79, 0xe1},\r
+    {0x7a, 0x02},\r
+    {0x7c, 0x05},\r
+    {0x7d, 0x08},\r
+    {0x7e, 0x08},\r
+    {0x7f, 0x7c},\r
+    {0x80, 0x58},\r
+    {0x81, 0x2a},\r
+    {0x82, 0xc5},\r
+    {0x83, 0x46},\r
+    {0x84, 0x3a},\r
+    {0x85, 0x54},\r
+    {0x86, 0x44},\r
+    {0x87, 0xf8},\r
+    {0x88, 0x08},\r
+    {0x89, 0x70},\r
+    {0x8a, 0xf0},\r
+    {0x8b, 0xf0}, \r
+    {0x90, 0xe3},\r
+    {0x93, 0x10},\r
+    {0x94, 0x20},\r
+    {0x95, 0x10},\r
+    {0x96, 0x18},\r
+    {0x0f, 0x34},\r
+\r
+    {0x13, 0x00},\r
+    {0x3d, 0x48}, \r
+    {0x0e, 0xb8}, \r
+    {0x20, 0x02},  \r
+    {0x21, 0x18}, \r
+    {0x22, 0x00}, \r
+    {0x23, 0x42},\r
+    {0x24, 0x28}, \r
+    {0x25, 0x04},\r
+    {0x26, 0x1e}, \r
+    {0x27, 0x04},\r
+    {0x28, 0x40},\r
+    {0x29, 0x04},\r
+    {0x2a, 0xce},\r
+    {0x2b, 0x02},\r
+    {0x2c, 0x8a},\r
+       //YUV\r
+    {0x12, 0x09},\r
+       //RGB\r
+    //{0x12, 0x05},\r
+       \r
+       \r
+    {0x39, 0xd0},\r
+    {0xcd, 0x13},\r
+    {0xde, 0x7c},\r
+    {0x3d, 0x08},\r
+    {0x13, 0xff},\r
+    {0x15, 0x42},\r
+    {0xFF, 0xFF}\r
+};\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov5640_config.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov5640_config.c
new file mode 100644 (file)
index 0000000..d9b5b9d
--- /dev/null
@@ -0,0 +1,4795 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Local Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+const struct ov_reg ov5640_yuv_vga[]= {\r
+    {0x3103, 0x11},\r
+    {0x3008, 0x82},\r
+    {0xFFFF, 0x05},\r
+    {0x3008, 0x42},\r
+    {0x3103, 0x03}, \r
+    {0x3017, 0xff},\r
+    {0x3018, 0xff},\r
+\r
+    {0x3034, 0x1a},\r
+    {0x3035, 0x11},\r
+    {0x3036, 0x6a},\r
+    {0x3037, 0x14},\r
+    {0x3108, 0x01},\r
+    {0x303b, 0x1c},\r
+    {0x303d, 0x30},\r
+\r
+    {0x3630, 0x36},\r
+    {0x3631, 0x0e},\r
+    {0x3632, 0xe2},\r
+    {0x3633, 0x12},\r
+    {0x3621, 0xe0},\r
+    {0x3704, 0xa0},\r
+    {0x3703, 0x5a},\r
+    {0x3715, 0x78},\r
+    {0x3717, 0x01},\r
+    {0x370b, 0x60},\r
+    {0x3705, 0x1a},\r
+    {0x3905, 0x02},\r
+    {0x3906, 0x10},\r
+    {0x3901, 0x0a},\r
+    {0x3731, 0x12},\r
+    {0x3600, 0x08},\r
+    {0x3601, 0x33},\r
+    {0x302d, 0x60},\r
+    {0x3620, 0x52},\r
+    {0x371b, 0x20},\r
+    {0x471c, 0x50},\r
+    {0x3a13, 0x43},\r
+    {0x3a18, 0x00},\r
+    {0x3a19, 0xf8},\r
+    {0x3635, 0x13},\r
+    {0x3636, 0x03},\r
+    {0x3634, 0x40},\r
+    {0x3622, 0x01},\r
+    {0x3c01, 0x34},\r
+    {0x3c04, 0x28},\r
+    {0x3c05, 0x98},\r
+    {0x3c06, 0x00},\r
+    {0x3c07, 0x08},\r
+    {0x3c08, 0x00},\r
+    {0x3c09, 0x1c},\r
+    {0x3c0a, 0x9c},\r
+    {0x3c0b, 0x40},\r
+    {0x3820, 0x41},\r
+    {0x3821, 0x07},\r
+    {0x3814, 0x31},\r
+    {0x3815, 0x31},\r
+    {0x3800, 0x00},\r
+    {0x3801, 0x00},\r
+    {0x3802, 0x00},\r
+    {0x3803, 0x04},\r
+    {0x3804, 0x0a},\r
+    {0x3805, 0x3f},\r
+    {0x3806, 0x07},\r
+    {0x3807, 0x9b},\r
+    {0x3808, 0x02},\r
+    {0x3809, 0x80},\r
+    {0x380a, 0x01},\r
+    {0x380b, 0xe0},\r
+    {0x380c, 0x07},\r
+    {0x380d, 0x68},\r
+    {0x380e, 0x03},\r
+    {0x380f, 0xd8},\r
+    {0x3810, 0x00},\r
+    {0x3811, 0x10},\r
+    {0x3812, 0x00},\r
+    {0x3813, 0x06},\r
+    {0x3618, 0x00},\r
+    {0x3612, 0x29},\r
+    {0x3708, 0x64},\r
+    {0x3709, 0x52},\r
+    {0x370c, 0x03},\r
+    {0x3a02, 0x03},\r
+    {0x3a03, 0xd8},\r
+    {0x3a08, 0x01},\r
+    {0x3a09, 0x27},\r
+    {0x3a0a, 0x00},\r
+    {0x3a0b, 0xf6},\r
+    {0x3a0e, 0x03},\r
+    {0x3a0d, 0x04},\r
+    {0x3a14, 0x03},\r
+    {0x3a15, 0xd8},\r
+    {0x4001, 0x02},\r
+    {0x4004, 0x02},\r
+    {0x3000, 0x00},\r
+    {0x3002, 0x1c},\r
+    {0x3004, 0xff},\r
+    {0x3006, 0xc3},\r
+    {0x300e, 0x58},\r
+    {0x302e, 0x00},\r
+    {0x4300, 0x30},\r
+    {0x501f, 0x00},\r
+    {0x4713, 0x03},\r
+    {0x4407, 0x04},\r
+    {0x440e, 0x00},\r
+    {0x460b, 0x35},\r
+    {0x460c, 0x22},\r
+    {0x4837, 0x22},\r
+    {0x3824, 0x02},\r
+    {0x5000, 0xa7},\r
+    {0x5001, 0xa3},\r
+    {0x5180, 0xff},\r
+    {0x5181, 0xf2},\r
+    {0x5182, 0x00},\r
+    {0x5183, 0x14},\r
+    {0x5184, 0x25},\r
+    {0x5185, 0x24},\r
+    {0x5186, 0x09},\r
+    {0x5187, 0x09},\r
+    {0x5188, 0x09},\r
+    {0x5189, 0x75},\r
+    {0x518a, 0x54},\r
+    {0x518b, 0xe0},\r
+    {0x518c, 0xb2},\r
+    {0x518d, 0x42},\r
+    {0x518e, 0x3d},\r
+    {0x518f, 0x56},\r
+    {0x5190, 0x46},\r
+    {0x5191, 0xf8},\r
+    {0x5192, 0x04},\r
+    {0x5193, 0x70},\r
+    {0x5194, 0xf0},\r
+    {0x5195, 0xf0},\r
+    {0x5196, 0x03},\r
+    {0x5197, 0x01},\r
+    {0x5198, 0x04},\r
+    {0x5199, 0x12},\r
+    {0x519a, 0x04},\r
+    {0x519b, 0x00},\r
+    {0x519c, 0x06},\r
+    {0x519d, 0x82},\r
+    {0x519e, 0x38},\r
+    {0x5381, 0x1e},\r
+    {0x5382, 0x5b},\r
+    {0x5383, 0x08},\r
+    {0x5384, 0x0a},\r
+    {0x5385, 0x7e},\r
+    {0x5386, 0x88},\r
+    {0x5387, 0x7c},\r
+    {0x5388, 0x6c},\r
+    {0x5389, 0x10},\r
+    {0x538a, 0x01},\r
+    {0x538b, 0x98},\r
+    {0x5300, 0x08},\r
+    {0x5301, 0x30},\r
+    {0x5302, 0x10},\r
+    {0x5303, 0x00},\r
+    {0x5304, 0x08},\r
+    {0x5305, 0x30},\r
+    {0x5306, 0x08},\r
+    {0x5307, 0x16},\r
+    {0x5309, 0x08},\r
+    {0x530a, 0x30},\r
+    {0x530b, 0x04},\r
+    {0x530c, 0x06},\r
+    {0x5480, 0x01},\r
+    {0x5481, 0x08},\r
+    {0x5482, 0x14},\r
+    {0x5483, 0x28},\r
+    {0x5484, 0x51},\r
+    {0x5485, 0x65},\r
+    {0x5486, 0x71},\r
+    {0x5487, 0x7d},\r
+    {0x5488, 0x87},\r
+    {0x5489, 0x91},\r
+    {0x548a, 0x9a},\r
+    {0x548b, 0xaa},\r
+    {0x548c, 0xb8},\r
+    {0x548d, 0xcd},\r
+    {0x548e, 0xdd},\r
+    {0x548f, 0xea},\r
+    {0x5490, 0x1d},\r
+    {0x5580, 0x02},\r
+    {0x5583, 0x40},\r
+    {0x5584, 0x10},\r
+    {0x5589, 0x10},\r
+    {0x558a, 0x00},\r
+    {0x558b, 0xf8},\r
+    {0x5800, 0x23},\r
+    {0x5801, 0x14},\r
+    {0x5802, 0x0f},\r
+    {0x5803, 0x0f},\r
+    {0x5804, 0x12},\r
+    {0x5805, 0x26},\r
+    {0x5806, 0x0c},\r
+    {0x5807, 0x08},\r
+    {0x5808, 0x05},\r
+    {0x5809, 0x05},\r
+    {0x580a, 0x08},\r
+    {0x580b, 0x0d},\r
+    {0x580c, 0x08},\r
+    {0x580d, 0x03},\r
+    {0x580e, 0x00},\r
+    {0x580f, 0x00},\r
+    {0x5810, 0x03},\r
+    {0x5811, 0x09},\r
+    {0x5812, 0x07},\r
+    {0x5813, 0x03},\r
+    {0x5814, 0x00},\r
+    {0x5815, 0x01},\r
+    {0x5816, 0x03},\r
+    {0x5817, 0x08},\r
+    {0x5818, 0x0d},\r
+    {0x5819, 0x08},\r
+    {0x581a, 0x05},\r
+    {0x581b, 0x06},\r
+    {0x581c, 0x08},\r
+    {0x581d, 0x0e},\r
+    {0x581e, 0x29},\r
+    {0x581f, 0x17},\r
+    {0x5820, 0x11},\r
+    {0x5821, 0x11},\r
+    {0x5822, 0x15},\r
+    {0x5823, 0x28},\r
+    {0x5824, 0x46},\r
+    {0x5825, 0x26},\r
+    {0x5826, 0x08},\r
+    {0x5827, 0x26},\r
+    {0x5828, 0x64},\r
+    {0x5829, 0x26},\r
+    {0x582a, 0x24},\r
+    {0x582b, 0x22},\r
+    {0x582c, 0x24},\r
+    {0x582d, 0x24},\r
+    {0x582e, 0x06},\r
+    {0x582f, 0x22},\r
+    {0x5830, 0x40},\r
+    {0x5831, 0x42},\r
+    {0x5832, 0x24},\r
+    {0x5833, 0x26},\r
+    {0x5834, 0x24},\r
+    {0x5835, 0x22},\r
+    {0x5836, 0x22},\r
+    {0x5837, 0x26},\r
+    {0x5838, 0x44},\r
+    {0x5839, 0x24},\r
+    {0x583a, 0x26},\r
+    {0x583b, 0x28},\r
+    {0x583c, 0x42},\r
+    {0x583d, 0xce},\r
+    {0x5025, 0x00},\r
+    {0x3a0f, 0x30},\r
+    {0x3a10, 0x28},\r
+    {0x3a1b, 0x30},\r
+    {0x3a1e, 0x26},\r
+    {0x3a11, 0x60},\r
+    {0x3a1f, 0x14},\r
+    {0x3008, 0x02},\r
+#if 1\r
+    {0x3503, 0x00},\r
+    {0x3c07, 0x08},\r
+    {0x3820, 0x41},\r
+    {0x3821, 0x07},\r
+    {0x3814, 0x31},\r
+    {0x3815, 0x31},\r
+    {0x3803, 0x04},\r
+    {0x3807, 0x9b},\r
+    {0x3808, 0x02},\r
+    {0x3809, 0x80},\r
+    {0x380a, 0x01},\r
+    {0x380b, 0xe0},\r
+    {0x380c, 0x07},\r
+    {0x380d, 0x68},\r
+    {0x380e, 0x03},\r
+    {0x380f, 0xd8},\r
+    {0x3813, 0x06},\r
+    {0x3618, 0x00},\r
+    {0x3612, 0x29},\r
+    {0x3708, 0x62},\r
+    {0x3709, 0x52},\r
+    {0x370c, 0x03},\r
+    {0x3a02, 0x03},\r
+    {0x3a03, 0xd8},\r
+    {0x3a0e, 0x03},\r
+    {0x3a0d, 0x04},\r
+    {0x3a14, 0x03},\r
+    {0x3a15, 0xd8},\r
+    {0x4004, 0x02},\r
+    {0x4713, 0x03},\r
+    {0x4407, 0x04},\r
+    {0x460b, 0x35},\r
+    {0x460c, 0x22},\r
+    {0x3824, 0x02},\r
+    {0x5001, 0xa3},\r
+\r
+#endif\r
+    {0xFF, 0xFF}\r
+};\r
+\r
+const struct ov_reg ov5640_yuv_sxga[]= {\r
+    {0x3103, 0x11},\r
+    {0x3008, 0x82},\r
+    {0xFFFF, 0x05},\r
+    {0x3008, 0x42},\r
+    {0x3103, 0x03}, \r
+    {0x3017, 0xff},\r
+    {0x3018, 0xff},\r
+\r
+\r
+    {0x3034, 0x1a},\r
+    {0x3035, 0x11},\r
+    {0x3036, 0x6a},\r
+    {0x3037, 0x14},\r
+    {0x3108, 0x01},\r
+    {0x303b, 0x1c},\r
+    {0x303d, 0x30},\r
+\r
+    {0x3630, 0x36},\r
+    {0x3631, 0x0e},\r
+    {0x3632, 0xe2},\r
+    {0x3633, 0x12},\r
+    {0x3621, 0xe0},\r
+    {0x3704, 0xa0},\r
+    {0x3703, 0x5a},\r
+    {0x3715, 0x78},\r
+    {0x3717, 0x01},\r
+    {0x370b, 0x60},\r
+    {0x3705, 0x1a},\r
+    {0x3905, 0x02},\r
+    {0x3906, 0x10},\r
+    {0x3901, 0x0a},\r
+    {0x3731, 0x12},\r
+    {0x3600, 0x08},\r
+    {0x3601, 0x33},\r
+    {0x302d, 0x60},\r
+    {0x3620, 0x52},\r
+    {0x371b, 0x20},\r
+    {0x471c, 0x50},\r
+    {0x3a13, 0x43},\r
+    {0x3a18, 0x00},\r
+    {0x3a19, 0xf8},\r
+    {0x3635, 0x13},\r
+    {0x3636, 0x03},\r
+    {0x3634, 0x40},\r
+    {0x3622, 0x01},\r
+    {0x3c01, 0x34},\r
+    {0x3c04, 0x28},\r
+    {0x3c05, 0x98},\r
+    {0x3c06, 0x00},\r
+    {0x3c07, 0x08},\r
+    {0x3c08, 0x00},\r
+    {0x3c09, 0x1c},\r
+    {0x3c0a, 0x9c},\r
+    {0x3c0b, 0x40},\r
+    {0x3820, 0x41},\r
+    {0x3821, 0x07},\r
+    {0x3814, 0x31},\r
+    {0x3815, 0x31},\r
+    {0x3800, 0x00},\r
+    {0x3801, 0x00},\r
+    {0x3802, 0x00},\r
+    {0x3803, 0x04},\r
+    {0x3804, 0x0a},\r
+    {0x3805, 0x3f},\r
+    {0x3806, 0x07},\r
+    {0x3807, 0x9b},\r
+    {0x3808, 0x02},\r
+    {0x3809, 0x80},\r
+    {0x380a, 0x01},\r
+    {0x380b, 0xe0},\r
+    {0x380c, 0x07},\r
+    {0x380d, 0x68},\r
+    {0x380e, 0x03},\r
+    {0x380f, 0xd8},\r
+    {0x3810, 0x00},\r
+    {0x3811, 0x10},\r
+    {0x3812, 0x00},\r
+    {0x3813, 0x06},\r
+    {0x3618, 0x00},\r
+    {0x3612, 0x29},\r
+    {0x3708, 0x64},\r
+    {0x3709, 0x52},\r
+    {0x370c, 0x03},\r
+    {0x3a02, 0x03},\r
+    {0x3a03, 0xd8},\r
+    {0x3a08, 0x01},\r
+    {0x3a09, 0x27},\r
+    {0x3a0a, 0x00},\r
+    {0x3a0b, 0xf6},\r
+    {0x3a0e, 0x03},\r
+    {0x3a0d, 0x04},\r
+    {0x3a14, 0x03},\r
+    {0x3a15, 0xd8},\r
+    {0x4001, 0x02},\r
+    {0x4004, 0x02},\r
+    {0x3000, 0x00},\r
+    {0x3002, 0x1c},\r
+    {0x3004, 0xff},\r
+    {0x3006, 0xc3},\r
+    {0x300e, 0x58},\r
+    {0x302e, 0x00},\r
+    {0x4300, 0x30},\r
+    {0x501f, 0x00},\r
+    {0x4713, 0x03},\r
+    {0x4407, 0x04},\r
+    {0x440e, 0x00},\r
+    {0x460b, 0x35},\r
+    {0x460c, 0x22},\r
+    {0x4837, 0x22},\r
+    {0x3824, 0x02},\r
+    {0x5000, 0xa7},\r
+    {0x5001, 0xa3},\r
+    {0x5180, 0xff},\r
+    {0x5181, 0xf2},\r
+    {0x5182, 0x00},\r
+    {0x5183, 0x14},\r
+    {0x5184, 0x25},\r
+    {0x5185, 0x24},\r
+    {0x5186, 0x09},\r
+    {0x5187, 0x09},\r
+    {0x5188, 0x09},\r
+    {0x5189, 0x75},\r
+    {0x518a, 0x54},\r
+    {0x518b, 0xe0},\r
+    {0x518c, 0xb2},\r
+    {0x518d, 0x42},\r
+    {0x518e, 0x3d},\r
+    {0x518f, 0x56},\r
+    {0x5190, 0x46},\r
+    {0x5191, 0xf8},\r
+    {0x5192, 0x04},\r
+    {0x5193, 0x70},\r
+    {0x5194, 0xf0},\r
+    {0x5195, 0xf0},\r
+    {0x5196, 0x03},\r
+    {0x5197, 0x01},\r
+    {0x5198, 0x04},\r
+    {0x5199, 0x12},\r
+    {0x519a, 0x04},\r
+    {0x519b, 0x00},\r
+    {0x519c, 0x06},\r
+    {0x519d, 0x82},\r
+    {0x519e, 0x38},\r
+    {0x5381, 0x1e},\r
+    {0x5382, 0x5b},\r
+    {0x5383, 0x08},\r
+    {0x5384, 0x0a},\r
+    {0x5385, 0x7e},\r
+    {0x5386, 0x88},\r
+    {0x5387, 0x7c},\r
+    {0x5388, 0x6c},\r
+    {0x5389, 0x10},\r
+    {0x538a, 0x01},\r
+    {0x538b, 0x98},\r
+    {0x5300, 0x08},\r
+    {0x5301, 0x30},\r
+    {0x5302, 0x10},\r
+    {0x5303, 0x00},\r
+    {0x5304, 0x08},\r
+    {0x5305, 0x30},\r
+    {0x5306, 0x08},\r
+    {0x5307, 0x16},\r
+    {0x5309, 0x08},\r
+    {0x530a, 0x30},\r
+    {0x530b, 0x04},\r
+    {0x530c, 0x06},\r
+    {0x5480, 0x01},\r
+    {0x5481, 0x08},\r
+    {0x5482, 0x14},\r
+    {0x5483, 0x28},\r
+    {0x5484, 0x51},\r
+    {0x5485, 0x65},\r
+    {0x5486, 0x71},\r
+    {0x5487, 0x7d},\r
+    {0x5488, 0x87},\r
+    {0x5489, 0x91},\r
+    {0x548a, 0x9a},\r
+    {0x548b, 0xaa},\r
+    {0x548c, 0xb8},\r
+    {0x548d, 0xcd},\r
+    {0x548e, 0xdd},\r
+    {0x548f, 0xea},\r
+    {0x5490, 0x1d},\r
+    {0x5580, 0x02},\r
+    {0x5583, 0x40},\r
+    {0x5584, 0x10},\r
+    {0x5589, 0x10},\r
+    {0x558a, 0x00},\r
+    {0x558b, 0xf8},\r
+    {0x5800, 0x23},\r
+    {0x5801, 0x14},\r
+    {0x5802, 0x0f},\r
+    {0x5803, 0x0f},\r
+    {0x5804, 0x12},\r
+    {0x5805, 0x26},\r
+    {0x5806, 0x0c},\r
+    {0x5807, 0x08},\r
+    {0x5808, 0x05},\r
+    {0x5809, 0x05},\r
+    {0x580a, 0x08},\r
+    {0x580b, 0x0d},\r
+    {0x580c, 0x08},\r
+    {0x580d, 0x03},\r
+    {0x580e, 0x00},\r
+    {0x580f, 0x00},\r
+    {0x5810, 0x03},\r
+    {0x5811, 0x09},\r
+    {0x5812, 0x07},\r
+    {0x5813, 0x03},\r
+    {0x5814, 0x00},\r
+    {0x5815, 0x01},\r
+    {0x5816, 0x03},\r
+    {0x5817, 0x08},\r
+    {0x5818, 0x0d},\r
+    {0x5819, 0x08},\r
+    {0x581a, 0x05},\r
+    {0x581b, 0x06},\r
+    {0x581c, 0x08},\r
+    {0x581d, 0x0e},\r
+    {0x581e, 0x29},\r
+    {0x581f, 0x17},\r
+    {0x5820, 0x11},\r
+    {0x5821, 0x11},\r
+    {0x5822, 0x15},\r
+    {0x5823, 0x28},\r
+    {0x5824, 0x46},\r
+    {0x5825, 0x26},\r
+    {0x5826, 0x08},\r
+    {0x5827, 0x26},\r
+    {0x5828, 0x64},\r
+    {0x5829, 0x26},\r
+    {0x582a, 0x24},\r
+    {0x582b, 0x22},\r
+    {0x582c, 0x24},\r
+    {0x582d, 0x24},\r
+    {0x582e, 0x06},\r
+    {0x582f, 0x22},\r
+    {0x5830, 0x40},\r
+    {0x5831, 0x42},\r
+    {0x5832, 0x24},\r
+    {0x5833, 0x26},\r
+    {0x5834, 0x24},\r
+    {0x5835, 0x22},\r
+    {0x5836, 0x22},\r
+    {0x5837, 0x26},\r
+    {0x5838, 0x44},\r
+    {0x5839, 0x24},\r
+    {0x583a, 0x26},\r
+    {0x583b, 0x28},\r
+    {0x583c, 0x42},\r
+    {0x583d, 0xce},\r
+    {0x5025, 0x00},\r
+    {0x3a0f, 0x30},\r
+    {0x3a10, 0x28},\r
+    {0x3a1b, 0x30},\r
+    {0x3a1e, 0x26},\r
+    {0x3a11, 0x60},\r
+    {0x3a1f, 0x14},\r
+    {0x3008, 0x02},\r
\r
+#if 1\r
+    {0x3503, 0x00},\r
+    {0x3c07, 0x08},\r
+    {0x3820, 0x41},\r
+    {0x3821, 0x07},\r
+    {0x3814, 0x31},\r
+    {0x3815, 0x31},\r
+    {0x3803, 0x04},\r
+    {0x3807, 0x9b},\r
+    {0x3808, 0x02},\r
+    {0x3809, 0x80},\r
+    {0x380a, 0x01},\r
+    {0x380b, 0xe0},\r
+    {0x380c, 0x07},\r
+    {0x380d, 0x68},\r
+    {0x380e, 0x03},\r
+    {0x380f, 0xd8},\r
+    {0x3813, 0x06},\r
+    {0x3618, 0x00},\r
+    {0x3612, 0x29},\r
+    {0x3708, 0x62},\r
+    {0x3709, 0x52},\r
+    {0x370c, 0x03},\r
+    {0x3a02, 0x03},\r
+    {0x3a03, 0xd8},\r
+    {0x3a0e, 0x03},\r
+    {0x3a0d, 0x04},\r
+    {0x3a14, 0x03},\r
+    {0x3a15, 0xd8},\r
+    {0x4004, 0x02},\r
+    {0x4713, 0x03},\r
+    {0x4407, 0x04},\r
+    {0x460b, 0x35},\r
+    {0x460c, 0x22},\r
+    {0x3824, 0x02},\r
+    {0x5001, 0xa3},\r
+#endif\r
+    {0x3c07,0x08},\r
+  {0x3820,0x41},\r
+  {0x3821,0x07},\r
+  {0x3800,0x00},\r
+  {0x3801,0x00},\r
+  {0x3802,0x00},\r
+  {0x3803,0x04},\r
+  {0x3804,0x0a},\r
+  {0x3805,0x3f},\r
+  {0x3806,0x07},\r
+  {0x3807,0x9b},\r
+  {0x3808,0x05},\r
+  {0x3809,0x00},\r
+  {0x380a,0x02},\r
+  {0x380b,0xd0},\r
+  {0x380c,0x07},\r
+  {0x380d,0x68},\r
+  {0x380e,0x03},\r
+  {0x380f,0xd8},\r
+  {0x3810,0x00},\r
+  {0x3811,0x10},\r
+  {0x3812,0x00},\r
+  {0x3813,0x7e},\r
+  {0x3814,0x31},\r
+  {0x3815,0x31},\r
+  {0x3618,0x00},\r
+  {0x3612,0x29},\r
+  {0x3709,0x52},\r
+  {0x370c,0x03},\r
+  {0x3a02,0x0b},\r
+  {0x3a03,0x88},\r
+  {0x3a14,0x0b},\r
+  {0x3a15,0x88},\r
+  {0x4004,0x02},\r
+  {0x3002,0x1c},\r
+  {0x3006,0xc3},\r
+  {0x4713,0x03},\r
+  {0x4407,0x04},\r
+  {0x460b,0x35},\r
+  {0x460c,0x20},\r
+  {0x4837,0x22},\r
+  {0x3824,0x02},\r
+  {0x5001,0xa3},\r
+  {0x3034,0x1a},\r
+  {0x3035,0x11},\r
+  {0x3036,0x46},\r
+  {0x3037,0x13},\r
+  {0x3503,0x03},\r
+    {0xFF, 0xFF}\r
+};\r
+\r
+const struct ov_reg ov5640_afc[]= {\r
+{0x3000 ,0x20 },\r
+{0x8000 ,0x02 },\r
+{0x8001 ,0x0f },\r
+{0x8002 ,0xe0 },\r
+{0x8003 ,0x02 },\r
+{0x8004 ,0x09 },\r
+{0x8005 ,0x28 },\r
+{0x8006 ,0xc2 },\r
+{0x8007 ,0x01 },\r
+{0x8008 ,0x22 },\r
+{0x8009 ,0x22 },\r
+{0x800a ,0x00 },\r
+{0x800b ,0x02 },\r
+{0x800c ,0x0d },\r
+{0x800d ,0xea },\r
+{0x800e ,0x30 },\r
+{0x800f ,0x01 },\r
+{0x8010 ,0x03 },\r
+{0x8011 ,0x02 },\r
+{0x8012 ,0x02 },\r
+{0x8013 ,0xa6 },\r
+{0x8014 ,0x30 },\r
+{0x8015 ,0x02 },\r
+{0x8016 ,0x03 },\r
+{0x8017 ,0x02 },\r
+{0x8018 ,0x02 },\r
+{0x8019 ,0xa6 },\r
+{0x801a ,0x90 },\r
+{0x801b ,0x51 },\r
+{0x801c ,0xa5 },\r
+{0x801d ,0xe0 },\r
+{0x801e ,0x78 },\r
+{0x801f ,0x93 },\r
+{0x8020 ,0xf6 },\r
+{0x8021 ,0xa3 },\r
+{0x8022 ,0xe0 },\r
+{0x8023 ,0x08 },\r
+{0x8024 ,0xf6 },\r
+{0x8025 ,0xa3 },\r
+{0x8026 ,0xe0 },\r
+{0x8027 ,0x08 },\r
+{0x8028 ,0xf6 },\r
+{0x8029 ,0xe5 },\r
+{0x802a ,0x1f },\r
+{0x802b ,0x70 },\r
+{0x802c ,0x4f },\r
+{0x802d ,0x75 },\r
+{0x802e ,0x1e },\r
+{0x802f ,0x20 },\r
+{0x8030 ,0xd2 },\r
+{0x8031 ,0x35 },\r
+{0x8032 ,0xd3 },\r
+{0x8033 ,0x78 },\r
+{0x8034 ,0x4f },\r
+{0x8035 ,0xe6 },\r
+{0x8036 ,0x94 },\r
+{0x8037 ,0x00 },\r
+{0x8038 ,0x18 },\r
+{0x8039 ,0xe6 },\r
+{0x803a ,0x94 },\r
+{0x803b ,0x00 },\r
+{0x803c ,0x40 },\r
+{0x803d ,0x07 },\r
+{0x803e ,0xe6 },\r
+{0x803f ,0xfe },\r
+{0x8040 ,0x08 },\r
+{0x8041 ,0xe6 },\r
+{0x8042 ,0xff },\r
+{0x8043 ,0x80 },\r
+{0x8044 ,0x03 },\r
+{0x8045 ,0x12 },\r
+{0x8046 ,0x0c },\r
+{0x8047 ,0x67 },\r
+{0x8048 ,0x78 },\r
+{0x8049 ,0x7e },\r
+{0x804a ,0xa6 },\r
+{0x804b ,0x06 },\r
+{0x804c ,0x08 },\r
+{0x804d ,0xa6 },\r
+{0x804e ,0x07 },\r
+{0x804f ,0x78 },\r
+{0x8050 ,0x8b },\r
+{0x8051 ,0xa6 },\r
+{0x8052 ,0x09 },\r
+{0x8053 ,0x18 },\r
+{0x8054 ,0x76 },\r
+{0x8055 ,0x01 },\r
+{0x8056 ,0x12 },\r
+{0x8057 ,0x0c },\r
+{0x8058 ,0x67 },\r
+{0x8059 ,0x78 },\r
+{0x805a ,0x4e },\r
+{0x805b ,0xa6 },\r
+{0x805c ,0x06 },\r
+{0x805d ,0x08 },\r
+{0x805e ,0xa6 },\r
+{0x805f ,0x07 },\r
+{0x8060 ,0x78 },\r
+{0x8061 ,0x8b },\r
+{0x8062 ,0xe6 },\r
+{0x8063 ,0x78 },\r
+{0x8064 ,0x6e },\r
+{0x8065 ,0xf6 },\r
+{0x8066 ,0x75 },\r
+{0x8067 ,0x1f },\r
+{0x8068 ,0x01 },\r
+{0x8069 ,0x78 },\r
+{0x806a ,0x93 },\r
+{0x806b ,0xe6 },\r
+{0x806c ,0x78 },\r
+{0x806d ,0x90 },\r
+{0x806e ,0xf6 },\r
+{0x806f ,0x78 },\r
+{0x8070 ,0x94 },\r
+{0x8071 ,0xe6 },\r
+{0x8072 ,0x78 },\r
+{0x8073 ,0x91 },\r
+{0x8074 ,0xf6 },\r
+{0x8075 ,0x78 },\r
+{0x8076 ,0x95 },\r
+{0x8077 ,0xe6 },\r
+{0x8078 ,0x78 },\r
+{0x8079 ,0x92 },\r
+{0x807a ,0xf6 },\r
+{0x807b ,0x22 },\r
+{0x807c ,0x79 },\r
+{0x807d ,0x90 },\r
+{0x807e ,0xe7 },\r
+{0x807f ,0xd3 },\r
+{0x8080 ,0x78 },\r
+{0x8081 ,0x93 },\r
+{0x8082 ,0x96 },\r
+{0x8083 ,0x40 },\r
+{0x8084 ,0x05 },\r
+{0x8085 ,0xe7 },\r
+{0x8086 ,0x96 },\r
+{0x8087 ,0xff },\r
+{0x8088 ,0x80 },\r
+{0x8089 ,0x08 },\r
+{0x808a ,0xc3 },\r
+{0x808b ,0x79 },\r
+{0x808c ,0x93 },\r
+{0x808d ,0xe7 },\r
+{0x808e ,0x78 },\r
+{0x808f ,0x90 },\r
+{0x8090 ,0x96 },\r
+{0x8091 ,0xff },\r
+{0x8092 ,0x78 },\r
+{0x8093 ,0x88 },\r
+{0x8094 ,0x76 },\r
+{0x8095 ,0x00 },\r
+{0x8096 ,0x08 },\r
+{0x8097 ,0xa6 },\r
+{0x8098 ,0x07 },\r
+{0x8099 ,0x79 },\r
+{0x809a ,0x91 },\r
+{0x809b ,0xe7 },\r
+{0x809c ,0xd3 },\r
+{0x809d ,0x78 },\r
+{0x809e ,0x94 },\r
+{0x809f ,0x96 },\r
+{0x80a0 ,0x40 },\r
+{0x80a1 ,0x05 },\r
+{0x80a2 ,0xe7 },\r
+{0x80a3 ,0x96 },\r
+{0x80a4 ,0xff },\r
+{0x80a5 ,0x80 },\r
+{0x80a6 ,0x08 },\r
+{0x80a7 ,0xc3 },\r
+{0x80a8 ,0x79 },\r
+{0x80a9 ,0x94 },\r
+{0x80aa ,0xe7 },\r
+{0x80ab ,0x78 },\r
+{0x80ac ,0x91 },\r
+{0x80ad ,0x96 },\r
+{0x80ae ,0xff },\r
+{0x80af ,0x12 },\r
+{0x80b0 ,0x0c },\r
+{0x80b1 ,0xb0 },\r
+{0x80b2 ,0x79 },\r
+{0x80b3 ,0x92 },\r
+{0x80b4 ,0xe7 },\r
+{0x80b5 ,0xd3 },\r
+{0x80b6 ,0x78 },\r
+{0x80b7 ,0x95 },\r
+{0x80b8 ,0x96 },\r
+{0x80b9 ,0x40 },\r
+{0x80ba ,0x05 },\r
+{0x80bb ,0xe7 },\r
+{0x80bc ,0x96 },\r
+{0x80bd ,0xff },\r
+{0x80be ,0x80 },\r
+{0x80bf ,0x08 },\r
+{0x80c0 ,0xc3 },\r
+{0x80c1 ,0x79 },\r
+{0x80c2 ,0x95 },\r
+{0x80c3 ,0xe7 },\r
+{0x80c4 ,0x78 },\r
+{0x80c5 ,0x92 },\r
+{0x80c6 ,0x96 },\r
+{0x80c7 ,0xff },\r
+{0x80c8 ,0x12 },\r
+{0x80c9 ,0x0c },\r
+{0x80ca ,0xb0 },\r
+{0x80cb ,0x12 },\r
+{0x80cc ,0x0c },\r
+{0x80cd ,0x67 },\r
+{0x80ce ,0x78 },\r
+{0x80cf ,0x8a },\r
+{0x80d0 ,0xe6 },\r
+{0x80d1 ,0x25 },\r
+{0x80d2 ,0xe0 },\r
+{0x80d3 ,0x24 },\r
+{0x80d4 ,0x4e },\r
+{0x80d5 ,0xf8 },\r
+{0x80d6 ,0xa6 },\r
+{0x80d7 ,0x06 },\r
+{0x80d8 ,0x08 },\r
+{0x80d9 ,0xa6 },\r
+{0x80da ,0x07 },\r
+{0x80db ,0x78 },\r
+{0x80dc ,0x8a },\r
+{0x80dd ,0xe6 },\r
+{0x80de ,0x24 },\r
+{0x80df ,0x6e },\r
+{0x80e0 ,0xf8 },\r
+{0x80e1 ,0xa6 },\r
+{0x80e2 ,0x09 },\r
+{0x80e3 ,0x90 },\r
+{0x80e4 ,0x0e },\r
+{0x80e5 ,0x93 },\r
+{0x80e6 ,0xe4 },\r
+{0x80e7 ,0x93 },\r
+{0x80e8 ,0x24 },\r
+{0x80e9 ,0xff },\r
+{0x80ea ,0xff },\r
+{0x80eb ,0xe4 },\r
+{0x80ec ,0x34 },\r
+{0x80ed ,0xff },\r
+{0x80ee ,0xfe },\r
+{0x80ef ,0x78 },\r
+{0x80f0 ,0x8a },\r
+{0x80f1 ,0xe6 },\r
+{0x80f2 ,0x24 },\r
+{0x80f3 ,0x01 },\r
+{0x80f4 ,0xfd },\r
+{0x80f5 ,0xe4 },\r
+{0x80f6 ,0x33 },\r
+{0x80f7 ,0xfc },\r
+{0x80f8 ,0xd3 },\r
+{0x80f9 ,0xed },\r
+{0x80fa ,0x9f },\r
+{0x80fb ,0xee },\r
+{0x80fc ,0x64 },\r
+{0x80fd ,0x80 },\r
+{0x80fe ,0xf8 },\r
+{0x80ff ,0xec },\r
+{0x8100 ,0x64 },\r
+{0x8101 ,0x80 },\r
+{0x8102 ,0x98 },\r
+{0x8103 ,0x40 },\r
+{0x8104 ,0x04 },\r
+{0x8105 ,0x7f },\r
+{0x8106 ,0x00 },\r
+{0x8107 ,0x80 },\r
+{0x8108 ,0x05 },\r
+{0x8109 ,0x78 },\r
+{0x810a ,0x8a },\r
+{0x810b ,0xe6 },\r
+{0x810c ,0x04 },\r
+{0x810d ,0xff },\r
+{0x810e ,0x78 },\r
+{0x810f ,0x8a },\r
+{0x8110 ,0xa6 },\r
+{0x8111 ,0x07 },\r
+{0x8112 ,0xe5 },\r
+{0x8113 ,0x1f },\r
+{0x8114 ,0xb4 },\r
+{0x8115 ,0x01 },\r
+{0x8116 ,0x0a },\r
+{0x8117 ,0xe6 },\r
+{0x8118 ,0x60 },\r
+{0x8119 ,0x03 },\r
+{0x811a ,0x02 },\r
+{0x811b ,0x02 },\r
+{0x811c ,0xa6 },\r
+{0x811d ,0x75 },\r
+{0x811e ,0x1f },\r
+{0x811f ,0x02 },\r
+{0x8120 ,0x22 },\r
+{0x8121 ,0x78 },\r
+{0x8122 ,0x4e },\r
+{0x8123 ,0xe6 },\r
+{0x8124 ,0xfe },\r
+{0x8125 ,0x08 },\r
+{0x8126 ,0xe6 },\r
+{0x8127 ,0xff },\r
+{0x8128 ,0x78 },\r
+{0x8129 ,0x80 },\r
+{0x812a ,0xa6 },\r
+{0x812b ,0x06 },\r
+{0x812c ,0x08 },\r
+{0x812d ,0xa6 },\r
+{0x812e ,0x07 },\r
+{0x812f ,0x78 },\r
+{0x8130 ,0x4e },\r
+{0x8131 ,0xe6 },\r
+{0x8132 ,0xfe },\r
+{0x8133 ,0x08 },\r
+{0x8134 ,0xe6 },\r
+{0x8135 ,0xff },\r
+{0x8136 ,0x78 },\r
+{0x8137 ,0x82 },\r
+{0x8138 ,0xa6 },\r
+{0x8139 ,0x06 },\r
+{0x813a ,0x08 },\r
+{0x813b ,0xa6 },\r
+{0x813c ,0x07 },\r
+{0x813d ,0x78 },\r
+{0x813e ,0x6e },\r
+{0x813f ,0xe6 },\r
+{0x8140 ,0x78 },\r
+{0x8141 ,0x8c },\r
+{0x8142 ,0xf6 },\r
+{0x8143 ,0x78 },\r
+{0x8144 ,0x6e },\r
+{0x8145 ,0xe6 },\r
+{0x8146 ,0x78 },\r
+{0x8147 ,0x8d },\r
+{0x8148 ,0xf6 },\r
+{0x8149 ,0x7f },\r
+{0x814a ,0x01 },\r
+{0x814b ,0x90 },\r
+{0x814c ,0x0e },\r
+{0x814d ,0x93 },\r
+{0x814e ,0xe4 },\r
+{0x814f ,0x93 },\r
+{0x8150 ,0xfe },\r
+{0x8151 ,0xef },\r
+{0x8152 ,0xc3 },\r
+{0x8153 ,0x9e },\r
+{0x8154 ,0x50 },\r
+{0x8155 ,0x5f },\r
+{0x8156 ,0xef },\r
+{0x8157 ,0x25 },\r
+{0x8158 ,0xe0 },\r
+{0x8159 ,0x24 },\r
+{0x815a ,0x4f },\r
+{0x815b ,0xf9 },\r
+{0x815c ,0xc3 },\r
+{0x815d ,0x78 },\r
+{0x815e ,0x81 },\r
+{0x815f ,0xe6 },\r
+{0x8160 ,0x97 },\r
+{0x8161 ,0x18 },\r
+{0x8162 ,0xe6 },\r
+{0x8163 ,0x19 },\r
+{0x8164 ,0x97 },\r
+{0x8165 ,0x50 },\r
+{0x8166 ,0x0a },\r
+{0x8167 ,0x12 },\r
+{0x8168 ,0x0c },\r
+{0x8169 ,0x98 },\r
+{0x816a ,0x78 },\r
+{0x816b ,0x80 },\r
+{0x816c ,0xa6 },\r
+{0x816d ,0x04 },\r
+{0x816e ,0x08 },\r
+{0x816f ,0xa6 },\r
+{0x8170 ,0x05 },\r
+{0x8171 ,0x74 },\r
+{0x8172 ,0x6e },\r
+{0x8173 ,0x2f },\r
+{0x8174 ,0xf9 },\r
+{0x8175 ,0x78 },\r
+{0x8176 ,0x8c },\r
+{0x8177 ,0xe6 },\r
+{0x8178 ,0xc3 },\r
+{0x8179 ,0x97 },\r
+{0x817a ,0x50 },\r
+{0x817b ,0x08 },\r
+{0x817c ,0x74 },\r
+{0x817d ,0x6e },\r
+{0x817e ,0x2f },\r
+{0x817f ,0xf8 },\r
+{0x8180 ,0xe6 },\r
+{0x8181 ,0x78 },\r
+{0x8182 ,0x8c },\r
+{0x8183 ,0xf6 },\r
+{0x8184 ,0xef },\r
+{0x8185 ,0x25 },\r
+{0x8186 ,0xe0 },\r
+{0x8187 ,0x24 },\r
+{0x8188 ,0x4f },\r
+{0x8189 ,0xf9 },\r
+{0x818a ,0xd3 },\r
+{0x818b ,0x78 },\r
+{0x818c ,0x83 },\r
+{0x818d ,0xe6 },\r
+{0x818e ,0x97 },\r
+{0x818f ,0x18 },\r
+{0x8190 ,0xe6 },\r
+{0x8191 ,0x19 },\r
+{0x8192 ,0x97 },\r
+{0x8193 ,0x40 },\r
+{0x8194 ,0x0a },\r
+{0x8195 ,0x12 },\r
+{0x8196 ,0x0c },\r
+{0x8197 ,0x98 },\r
+{0x8198 ,0x78 },\r
+{0x8199 ,0x82 },\r
+{0x819a ,0xa6 },\r
+{0x819b ,0x04 },\r
+{0x819c ,0x08 },\r
+{0x819d ,0xa6 },\r
+{0x819e ,0x05 },\r
+{0x819f ,0x74 },\r
+{0x81a0 ,0x6e },\r
+{0x81a1 ,0x2f },\r
+{0x81a2 ,0xf9 },\r
+{0x81a3 ,0x78 },\r
+{0x81a4 ,0x8d },\r
+{0x81a5 ,0xe6 },\r
+{0x81a6 ,0xd3 },\r
+{0x81a7 ,0x97 },\r
+{0x81a8 ,0x40 },\r
+{0x81a9 ,0x08 },\r
+{0x81aa ,0x74 },\r
+{0x81ab ,0x6e },\r
+{0x81ac ,0x2f },\r
+{0x81ad ,0xf8 },\r
+{0x81ae ,0xe6 },\r
+{0x81af ,0x78 },\r
+{0x81b0 ,0x8d },\r
+{0x81b1 ,0xf6 },\r
+{0x81b2 ,0x0f },\r
+{0x81b3 ,0x80 },\r
+{0x81b4 ,0x96 },\r
+{0x81b5 ,0xc3 },\r
+{0x81b6 ,0x79 },\r
+{0x81b7 ,0x81 },\r
+{0x81b8 ,0xe7 },\r
+{0x81b9 ,0x78 },\r
+{0x81ba ,0x83 },\r
+{0x81bb ,0x96 },\r
+{0x81bc ,0xff },\r
+{0x81bd ,0x19 },\r
+{0x81be ,0xe7 },\r
+{0x81bf ,0x18 },\r
+{0x81c0 ,0x96 },\r
+{0x81c1 ,0x78 },\r
+{0x81c2 ,0x84 },\r
+{0x81c3 ,0xf6 },\r
+{0x81c4 ,0x08 },\r
+{0x81c5 ,0xa6 },\r
+{0x81c6 ,0x07 },\r
+{0x81c7 ,0xc3 },\r
+{0x81c8 ,0x79 },\r
+{0x81c9 ,0x8c },\r
+{0x81ca ,0xe7 },\r
+{0x81cb ,0x78 },\r
+{0x81cc ,0x8d },\r
+{0x81cd ,0x96 },\r
+{0x81ce ,0x08 },\r
+{0x81cf ,0xf6 },\r
+{0x81d0 ,0x12 },\r
+{0x81d1 ,0x0c },\r
+{0x81d2 ,0xa4 },\r
+{0x81d3 ,0x40 },\r
+{0x81d4 ,0x05 },\r
+{0x81d5 ,0x09 },\r
+{0x81d6 ,0xe7 },\r
+{0x81d7 ,0x08 },\r
+{0x81d8 ,0x80 },\r
+{0x81d9 ,0x06 },\r
+{0x81da ,0xc3 },\r
+{0x81db ,0x79 },\r
+{0x81dc ,0x7f },\r
+{0x81dd ,0xe7 },\r
+{0x81de ,0x78 },\r
+{0x81df ,0x81 },\r
+{0x81e0 ,0x96 },\r
+{0x81e1 ,0xff },\r
+{0x81e2 ,0x19 },\r
+{0x81e3 ,0xe7 },\r
+{0x81e4 ,0x18 },\r
+{0x81e5 ,0x96 },\r
+{0x81e6 ,0xfe },\r
+{0x81e7 ,0x78 },\r
+{0x81e8 ,0x86 },\r
+{0x81e9 ,0xa6 },\r
+{0x81ea ,0x06 },\r
+{0x81eb ,0x08 },\r
+{0x81ec ,0xa6 },\r
+{0x81ed ,0x07 },\r
+{0x81ee ,0x79 },\r
+{0x81ef ,0x8c },\r
+{0x81f0 ,0xe7 },\r
+{0x81f1 ,0xd3 },\r
+{0x81f2 ,0x78 },\r
+{0x81f3 ,0x8b },\r
+{0x81f4 ,0x96 },\r
+{0x81f5 ,0x40 },\r
+{0x81f6 ,0x05 },\r
+{0x81f7 ,0xe7 },\r
+{0x81f8 ,0x96 },\r
+{0x81f9 ,0xff },\r
+{0x81fa ,0x80 },\r
+{0x81fb ,0x08 },\r
+{0x81fc ,0xc3 },\r
+{0x81fd ,0x79 },\r
+{0x81fe ,0x8b },\r
+{0x81ff ,0xe7 },\r
+{0x8200 ,0x78 },\r
+{0x8201 ,0x8c },\r
+{0x8202 ,0x96 },\r
+{0x8203 ,0xff },\r
+{0x8204 ,0x78 },\r
+{0x8205 ,0x8f },\r
+{0x8206 ,0xa6 },\r
+{0x8207 ,0x07 },\r
+{0x8208 ,0xe5 },\r
+{0x8209 ,0x1f },\r
+{0x820a ,0x64 },\r
+{0x820b ,0x02 },\r
+{0x820c ,0x60 },\r
+{0x820d ,0x03 },\r
+{0x820e ,0x02 },\r
+{0x820f ,0x02 },\r
+{0x8210 ,0x92 },\r
+{0x8211 ,0x90 },\r
+{0x8212 ,0x0e },\r
+{0x8213 ,0x91 },\r
+{0x8214 ,0x93 },\r
+{0x8215 ,0xff },\r
+{0x8216 ,0x18 },\r
+{0x8217 ,0xe6 },\r
+{0x8218 ,0xc3 },\r
+{0x8219 ,0x9f },\r
+{0x821a ,0x40 },\r
+{0x821b ,0x03 },\r
+{0x821c ,0x02 },\r
+{0x821d ,0x02 },\r
+{0x821e ,0xa6 },\r
+{0x821f ,0x78 },\r
+{0x8220 ,0x84 },\r
+{0x8221 ,0x12 },\r
+{0x8222 ,0x0c },\r
+{0x8223 ,0x89 },\r
+{0x8224 ,0x12 },\r
+{0x8225 ,0x0c },\r
+{0x8226 ,0x5e },\r
+{0x8227 ,0x90 },\r
+{0x8228 ,0x0e },\r
+{0x8229 ,0x8e },\r
+{0x822a ,0x12 },\r
+{0x822b ,0x0c },\r
+{0x822c ,0x77 },\r
+{0x822d ,0x78 },\r
+{0x822e ,0x80 },\r
+{0x822f ,0xe6 },\r
+{0x8230 ,0xfe },\r
+{0x8231 ,0x08 },\r
+{0x8232 ,0xe6 },\r
+{0x8233 ,0xff },\r
+{0x8234 ,0x12 },\r
+{0x8235 ,0x0c },\r
+{0x8236 ,0xba },\r
+{0x8237 ,0x7b },\r
+{0x8238 ,0x04 },\r
+{0x8239 ,0x12 },\r
+{0x823a ,0x0c },\r
+{0x823b ,0x4c },\r
+{0x823c ,0xc3 },\r
+{0x823d ,0x12 },\r
+{0x823e ,0x06 },\r
+{0x823f ,0xa6 },\r
+{0x8240 ,0x50 },\r
+{0x8241 ,0x64 },\r
+{0x8242 ,0x90 },\r
+{0x8243 ,0x0e },\r
+{0x8244 ,0x92 },\r
+{0x8245 ,0xe4 },\r
+{0x8246 ,0x93 },\r
+{0x8247 ,0xff },\r
+{0x8248 ,0x78 },\r
+{0x8249 ,0x8f },\r
+{0x824a ,0xe6 },\r
+{0x824b ,0x9f },\r
+{0x824c ,0x40 },\r
+{0x824d ,0x02 },\r
+{0x824e ,0x80 },\r
+{0x824f ,0x11 },\r
+{0x8250 ,0x90 },\r
+{0x8251 ,0x0e },\r
+{0x8252 ,0x90 },\r
+{0x8253 ,0xe4 },\r
+{0x8254 ,0x93 },\r
+{0x8255 ,0xff },\r
+{0x8256 ,0xd3 },\r
+{0x8257 ,0x78 },\r
+{0x8258 ,0x89 },\r
+{0x8259 ,0xe6 },\r
+{0x825a ,0x9f },\r
+{0x825b ,0x18 },\r
+{0x825c ,0xe6 },\r
+{0x825d ,0x94 },\r
+{0x825e ,0x00 },\r
+{0x825f ,0x40 },\r
+{0x8260 ,0x03 },\r
+{0x8261 ,0x75 },\r
+{0x8262 ,0x1f },\r
+{0x8263 ,0x05 },\r
+{0x8264 ,0x78 },\r
+{0x8265 ,0x86 },\r
+{0x8266 ,0x12 },\r
+{0x8267 ,0x0c },\r
+{0x8268 ,0x89 },\r
+{0x8269 ,0x12 },\r
+{0x826a ,0x0c },\r
+{0x826b ,0x5e },\r
+{0x826c ,0x90 },\r
+{0x826d ,0x0e },\r
+{0x826e ,0x8f },\r
+{0x826f ,0x12 },\r
+{0x8270 ,0x0c },\r
+{0x8271 ,0x77 },\r
+{0x8272 ,0x12 },\r
+{0x8273 ,0x0c },\r
+{0x8274 ,0xa4 },\r
+{0x8275 ,0x40 },\r
+{0x8276 ,0x02 },\r
+{0x8277 ,0x80 },\r
+{0x8278 ,0x02 },\r
+{0x8279 ,0x78 },\r
+{0x827a ,0x80 },\r
+{0x827b ,0xe6 },\r
+{0x827c ,0xfe },\r
+{0x827d ,0x08 },\r
+{0x827e ,0xe6 },\r
+{0x827f ,0xff },\r
+{0x8280 ,0x12 },\r
+{0x8281 ,0x0c },\r
+{0x8282 ,0xba },\r
+{0x8283 ,0x7b },\r
+{0x8284 ,0x10 },\r
+{0x8285 ,0x12 },\r
+{0x8286 ,0x0c },\r
+{0x8287 ,0x4c },\r
+{0x8288 ,0xd3 },\r
+{0x8289 ,0x12 },\r
+{0x828a ,0x06 },\r
+{0x828b ,0xa6 },\r
+{0x828c ,0x40 },\r
+{0x828d ,0x18 },\r
+{0x828e ,0x75 },\r
+{0x828f ,0x1f },\r
+{0x8290 ,0x05 },\r
+{0x8291 ,0x22 },\r
+{0x8292 ,0xe5 },\r
+{0x8293 ,0x1f },\r
+{0x8294 ,0xb4 },\r
+{0x8295 ,0x05 },\r
+{0x8296 ,0x0f },\r
+{0x8297 ,0xd2 },\r
+{0x8298 ,0x01 },\r
+{0x8299 ,0xc2 },\r
+{0x829a ,0x02 },\r
+{0x829b ,0xe4 },\r
+{0x829c ,0xf5 },\r
+{0x829d ,0x1f },\r
+{0x829e ,0xf5 },\r
+{0x829f ,0x1e },\r
+{0x82a0 ,0xd2 },\r
+{0x82a1 ,0x35 },\r
+{0x82a2 ,0xd2 },\r
+{0x82a3 ,0x33 },\r
+{0x82a4 ,0xd2 },\r
+{0x82a5 ,0x36 },\r
+{0x82a6 ,0x22 },\r
+{0x82a7 ,0xe5 },\r
+{0x82a8 ,0x1f },\r
+{0x82a9 ,0x70 },\r
+{0x82aa ,0x72 },\r
+{0x82ab ,0xf5 },\r
+{0x82ac ,0x1e },\r
+{0x82ad ,0xd2 },\r
+{0x82ae ,0x35 },\r
+{0x82af ,0xff },\r
+{0x82b0 ,0xef },\r
+{0x82b1 ,0x25 },\r
+{0x82b2 ,0xe0 },\r
+{0x82b3 ,0x24 },\r
+{0x82b4 ,0x4e },\r
+{0x82b5 ,0xf8 },\r
+{0x82b6 ,0xe4 },\r
+{0x82b7 ,0xf6 },\r
+{0x82b8 ,0x08 },\r
+{0x82b9 ,0xf6 },\r
+{0x82ba ,0x0f },\r
+{0x82bb ,0xbf },\r
+{0x82bc ,0x34 },\r
+{0x82bd ,0xf2 },\r
+{0x82be ,0x90 },\r
+{0x82bf ,0x0e },\r
+{0x82c0 ,0x94 },\r
+{0x82c1 ,0xe4 },\r
+{0x82c2 ,0x93 },\r
+{0x82c3 ,0xff },\r
+{0x82c4 ,0xe5 },\r
+{0x82c5 ,0x4b },\r
+{0x82c6 ,0xc3 },\r
+{0x82c7 ,0x9f },\r
+{0x82c8 ,0x50 },\r
+{0x82c9 ,0x04 },\r
+{0x82ca ,0x7f },\r
+{0x82cb ,0x05 },\r
+{0x82cc ,0x80 },\r
+{0x82cd ,0x02 },\r
+{0x82ce ,0x7f },\r
+{0x82cf ,0xfb },\r
+{0x82d0 ,0x78 },\r
+{0x82d1 ,0xbd },\r
+{0x82d2 ,0xa6 },\r
+{0x82d3 ,0x07 },\r
+{0x82d4 ,0x12 },\r
+{0x82d5 ,0x0e },\r
+{0x82d6 ,0xb1 },\r
+{0x82d7 ,0x40 },\r
+{0x82d8 ,0x04 },\r
+{0x82d9 ,0x7f },\r
+{0x82da ,0x03 },\r
+{0x82db ,0x80 },\r
+{0x82dc ,0x02 },\r
+{0x82dd ,0x7f },\r
+{0x82de ,0x30 },\r
+{0x82df ,0x78 },\r
+{0x82e0 ,0xbc },\r
+{0x82e1 ,0xa6 },\r
+{0x82e2 ,0x07 },\r
+{0x82e3 ,0xe6 },\r
+{0x82e4 ,0x18 },\r
+{0x82e5 ,0xf6 },\r
+{0x82e6 ,0x08 },\r
+{0x82e7 ,0xe6 },\r
+{0x82e8 ,0x78 },\r
+{0x82e9 ,0xb9 },\r
+{0x82ea ,0xf6 },\r
+{0x82eb ,0x78 },\r
+{0x82ec ,0xbc },\r
+{0x82ed ,0xe6 },\r
+{0x82ee ,0x78 },\r
+{0x82ef ,0xba },\r
+{0x82f0 ,0xf6 },\r
+{0x82f1 ,0x78 },\r
+{0x82f2 ,0xbf },\r
+{0x82f3 ,0x76 },\r
+{0x82f4 ,0x33 },\r
+{0x82f5 ,0xe4 },\r
+{0x82f6 ,0x08 },\r
+{0x82f7 ,0xf6 },\r
+{0x82f8 ,0x78 },\r
+{0x82f9 ,0xb8 },\r
+{0x82fa ,0x76 },\r
+{0x82fb ,0x01 },\r
+{0x82fc ,0x75 },\r
+{0x82fd ,0x4a },\r
+{0x82fe ,0x02 },\r
+{0x82ff ,0x78 },\r
+{0x8300 ,0xb6 },\r
+{0x8301 ,0xf6 },\r
+{0x8302 ,0x08 },\r
+{0x8303 ,0xf6 },\r
+{0x8304 ,0x74 },\r
+{0x8305 ,0xff },\r
+{0x8306 ,0x78 },\r
+{0x8307 ,0xc1 },\r
+{0x8308 ,0xf6 },\r
+{0x8309 ,0x08 },\r
+{0x830a ,0xf6 },\r
+{0x830b ,0x75 },\r
+{0x830c ,0x1f },\r
+{0x830d ,0x01 },\r
+{0x830e ,0x78 },\r
+{0x830f ,0xbc },\r
+{0x8310 ,0xe6 },\r
+{0x8311 ,0x75 },\r
+{0x8312 ,0xf0 },\r
+{0x8313 ,0x05 },\r
+{0x8314 ,0xa4 },\r
+{0x8315 ,0xf5 },\r
+{0x8316 ,0x4b },\r
+{0x8317 ,0x12 },\r
+{0x8318 ,0x0b },\r
+{0x8319 ,0x39 },\r
+{0x831a ,0xc2 },\r
+{0x831b ,0x37 },\r
+{0x831c ,0x22 },\r
+{0x831d ,0x78 },\r
+{0x831e ,0xb8 },\r
+{0x831f ,0xe6 },\r
+{0x8320 ,0xd3 },\r
+{0x8321 ,0x94 },\r
+{0x8322 ,0x00 },\r
+{0x8323 ,0x40 },\r
+{0x8324 ,0x02 },\r
+{0x8325 ,0x16 },\r
+{0x8326 ,0x22 },\r
+{0x8327 ,0xe5 },\r
+{0x8328 ,0x1f },\r
+{0x8329 ,0xb4 },\r
+{0x832a ,0x05 },\r
+{0x832b ,0x23 },\r
+{0x832c ,0xe4 },\r
+{0x832d ,0xf5 },\r
+{0x832e ,0x1f },\r
+{0x832f ,0xc2 },\r
+{0x8330 ,0x01 },\r
+{0x8331 ,0x78 },\r
+{0x8332 ,0xb6 },\r
+{0x8333 ,0xe6 },\r
+{0x8334 ,0xfe },\r
+{0x8335 ,0x08 },\r
+{0x8336 ,0xe6 },\r
+{0x8337 ,0xff },\r
+{0x8338 ,0x78 },\r
+{0x8339 ,0x4e },\r
+{0x833a ,0xa6 },\r
+{0x833b ,0x06 },\r
+{0x833c ,0x08 },\r
+{0x833d ,0xa6 },\r
+{0x833e ,0x07 },\r
+{0x833f ,0xa2 },\r
+{0x8340 ,0x37 },\r
+{0x8341 ,0xe4 },\r
+{0x8342 ,0x33 },\r
+{0x8343 ,0xf5 },\r
+{0x8344 ,0x3c },\r
+{0x8345 ,0x90 },\r
+{0x8346 ,0x30 },\r
+{0x8347 ,0x28 },\r
+{0x8348 ,0xf0 },\r
+{0x8349 ,0x75 },\r
+{0x834a ,0x1e },\r
+{0x834b ,0x10 },\r
+{0x834c ,0xd2 },\r
+{0x834d ,0x35 },\r
+{0x834e ,0x22 },\r
+{0x834f ,0xe5 },\r
+{0x8350 ,0x4b },\r
+{0x8351 ,0x75 },\r
+{0x8352 ,0xf0 },\r
+{0x8353 ,0x05 },\r
+{0x8354 ,0x84 },\r
+{0x8355 ,0x78 },\r
+{0x8356 ,0xbc },\r
+{0x8357 ,0xf6 },\r
+{0x8358 ,0x90 },\r
+{0x8359 ,0x0e },\r
+{0x835a ,0x8c },\r
+{0x835b ,0xe4 },\r
+{0x835c ,0x93 },\r
+{0x835d ,0xff },\r
+{0x835e ,0x25 },\r
+{0x835f ,0xe0 },\r
+{0x8360 ,0x24 },\r
+{0x8361 ,0x0a },\r
+{0x8362 ,0xf8 },\r
+{0x8363 ,0xe6 },\r
+{0x8364 ,0xfc },\r
+{0x8365 ,0x08 },\r
+{0x8366 ,0xe6 },\r
+{0x8367 ,0xfd },\r
+{0x8368 ,0x78 },\r
+{0x8369 ,0xbc },\r
+{0x836a ,0xe6 },\r
+{0x836b ,0x25 },\r
+{0x836c ,0xe0 },\r
+{0x836d ,0x24 },\r
+{0x836e ,0x4e },\r
+{0x836f ,0xf8 },\r
+{0x8370 ,0xa6 },\r
+{0x8371 ,0x04 },\r
+{0x8372 ,0x08 },\r
+{0x8373 ,0xa6 },\r
+{0x8374 ,0x05 },\r
+{0x8375 ,0xef },\r
+{0x8376 ,0x12 },\r
+{0x8377 ,0x0e },\r
+{0x8378 ,0xf5 },\r
+{0x8379 ,0xd3 },\r
+{0x837a ,0x78 },\r
+{0x837b ,0xb7 },\r
+{0x837c ,0x96 },\r
+{0x837d ,0xee },\r
+{0x837e ,0x18 },\r
+{0x837f ,0x96 },\r
+{0x8380 ,0x40 },\r
+{0x8381 ,0x0d },\r
+{0x8382 ,0x78 },\r
+{0x8383 ,0xbc },\r
+{0x8384 ,0xe6 },\r
+{0x8385 ,0x78 },\r
+{0x8386 ,0xb9 },\r
+{0x8387 ,0xf6 },\r
+{0x8388 ,0x78 },\r
+{0x8389 ,0xb6 },\r
+{0x838a ,0xa6 },\r
+{0x838b ,0x06 },\r
+{0x838c ,0x08 },\r
+{0x838d ,0xa6 },\r
+{0x838e ,0x07 },\r
+{0x838f ,0x90 },\r
+{0x8390 ,0x0e },\r
+{0x8391 ,0x8c },\r
+{0x8392 ,0xe4 },\r
+{0x8393 ,0x93 },\r
+{0x8394 ,0x12 },\r
+{0x8395 ,0x0e },\r
+{0x8396 ,0xf5 },\r
+{0x8397 ,0xc3 },\r
+{0x8398 ,0x78 },\r
+{0x8399 ,0xc2 },\r
+{0x839a ,0x96 },\r
+{0x839b ,0xee },\r
+{0x839c ,0x18 },\r
+{0x839d ,0x96 },\r
+{0x839e ,0x50 },\r
+{0x839f ,0x0d },\r
+{0x83a0 ,0x78 },\r
+{0x83a1 ,0xbc },\r
+{0x83a2 ,0xe6 },\r
+{0x83a3 ,0x78 },\r
+{0x83a4 ,0xba },\r
+{0x83a5 ,0xf6 },\r
+{0x83a6 ,0x78 },\r
+{0x83a7 ,0xc1 },\r
+{0x83a8 ,0xa6 },\r
+{0x83a9 ,0x06 },\r
+{0x83aa ,0x08 },\r
+{0x83ab ,0xa6 },\r
+{0x83ac ,0x07 },\r
+{0x83ad ,0x78 },\r
+{0x83ae ,0xb6 },\r
+{0x83af ,0xe6 },\r
+{0x83b0 ,0xfe },\r
+{0x83b1 ,0x08 },\r
+{0x83b2 ,0xe6 },\r
+{0x83b3 ,0xc3 },\r
+{0x83b4 ,0x78 },\r
+{0x83b5 ,0xc2 },\r
+{0x83b6 ,0x96 },\r
+{0x83b7 ,0xff },\r
+{0x83b8 ,0xee },\r
+{0x83b9 ,0x18 },\r
+{0x83ba ,0x96 },\r
+{0x83bb ,0x78 },\r
+{0x83bc ,0xc3 },\r
+{0x83bd ,0xf6 },\r
+{0x83be ,0x08 },\r
+{0x83bf ,0xa6 },\r
+{0x83c0 ,0x07 },\r
+{0x83c1 ,0x90 },\r
+{0x83c2 ,0x0e },\r
+{0x83c3 ,0x96 },\r
+{0x83c4 ,0xe4 },\r
+{0x83c5 ,0x18 },\r
+{0x83c6 ,0x12 },\r
+{0x83c7 ,0x0e },\r
+{0x83c8 ,0xb8 },\r
+{0x83c9 ,0x40 },\r
+{0x83ca ,0x02 },\r
+{0x83cb ,0xd2 },\r
+{0x83cc ,0x37 },\r
+{0x83cd ,0x78 },\r
+{0x83ce ,0xbc },\r
+{0x83cf ,0xe6 },\r
+{0x83d0 ,0x08 },\r
+{0x83d1 ,0x26 },\r
+{0x83d2 ,0x08 },\r
+{0x83d3 ,0xf6 },\r
+{0x83d4 ,0xe5 },\r
+{0x83d5 ,0x1f },\r
+{0x83d6 ,0x64 },\r
+{0x83d7 ,0x01 },\r
+{0x83d8 ,0x70 },\r
+{0x83d9 ,0x7a },\r
+{0x83da ,0xe6 },\r
+{0x83db ,0xc3 },\r
+{0x83dc ,0x78 },\r
+{0x83dd ,0xc0 },\r
+{0x83de ,0x12 },\r
+{0x83df ,0x0e },\r
+{0x83e0 ,0xa1 },\r
+{0x83e1 ,0x40 },\r
+{0x83e2 ,0x08 },\r
+{0x83e3 ,0x12 },\r
+{0x83e4 ,0x0e },\r
+{0x83e5 ,0x9c },\r
+{0x83e6 ,0x50 },\r
+{0x83e7 ,0x03 },\r
+{0x83e8 ,0x02 },\r
+{0x83e9 ,0x04 },\r
+{0x83ea ,0xf1 },\r
+{0x83eb ,0x12 },\r
+{0x83ec ,0x0e },\r
+{0x83ed ,0xaf },\r
+{0x83ee ,0x40 },\r
+{0x83ef ,0x04 },\r
+{0x83f0 ,0x7f },\r
+{0x83f1 ,0xfe },\r
+{0x83f2 ,0x80 },\r
+{0x83f3 ,0x02 },\r
+{0x83f4 ,0x7f },\r
+{0x83f5 ,0x02 },\r
+{0x83f6 ,0x78 },\r
+{0x83f7 ,0xbd },\r
+{0x83f8 ,0xa6 },\r
+{0x83f9 ,0x07 },\r
+{0x83fa ,0x78 },\r
+{0x83fb ,0xb9 },\r
+{0x83fc ,0xe6 },\r
+{0x83fd ,0x24 },\r
+{0x83fe ,0x03 },\r
+{0x83ff ,0x78 },\r
+{0x8400 ,0xbf },\r
+{0x8401 ,0xf6 },\r
+{0x8402 ,0x78 },\r
+{0x8403 ,0xb9 },\r
+{0x8404 ,0xe6 },\r
+{0x8405 ,0x24 },\r
+{0x8406 ,0xfd },\r
+{0x8407 ,0x78 },\r
+{0x8408 ,0xc0 },\r
+{0x8409 ,0xf6 },\r
+{0x840a ,0x18 },\r
+{0x840b ,0x12 },\r
+{0x840c ,0x0e },\r
+{0x840d ,0xb1 },\r
+{0x840e ,0x40 },\r
+{0x840f ,0x04 },\r
+{0x8410 ,0xe6 },\r
+{0x8411 ,0xff },\r
+{0x8412 ,0x80 },\r
+{0x8413 ,0x02 },\r
+{0x8414 ,0x7f },\r
+{0x8415 ,0x00 },\r
+{0x8416 ,0x12 },\r
+{0x8417 ,0x0e },\r
+{0x8418 ,0xd1 },\r
+{0x8419 ,0x40 },\r
+{0x841a ,0x04 },\r
+{0x841b ,0xe6 },\r
+{0x841c ,0xff },\r
+{0x841d ,0x80 },\r
+{0x841e ,0x02 },\r
+{0x841f ,0x7f },\r
+{0x8420 ,0x00 },\r
+{0x8421 ,0x12 },\r
+{0x8422 ,0x0e },\r
+{0x8423 ,0xdd },\r
+{0x8424 ,0x50 },\r
+{0x8425 ,0x04 },\r
+{0x8426 ,0xe6 },\r
+{0x8427 ,0xff },\r
+{0x8428 ,0x80 },\r
+{0x8429 ,0x02 },\r
+{0x842a ,0x7f },\r
+{0x842b ,0x33 },\r
+{0x842c ,0x12 },\r
+{0x842d ,0x0e },\r
+{0x842e ,0xe9 },\r
+{0x842f ,0x50 },\r
+{0x8430 ,0x04 },\r
+{0x8431 ,0xe6 },\r
+{0x8432 ,0xff },\r
+{0x8433 ,0x80 },\r
+{0x8434 ,0x02 },\r
+{0x8435 ,0x7f },\r
+{0x8436 ,0x33 },\r
+{0x8437 ,0x12 },\r
+{0x8438 ,0x0e },\r
+{0x8439 ,0xab },\r
+{0x843a ,0x40 },\r
+{0x843b ,0x06 },\r
+{0x843c ,0x78 },\r
+{0x843d ,0xc0 },\r
+{0x843e ,0xe6 },\r
+{0x843f ,0xff },\r
+{0x8440 ,0x80 },\r
+{0x8441 ,0x04 },\r
+{0x8442 ,0x78 },\r
+{0x8443 ,0xbf },\r
+{0x8444 ,0xe6 },\r
+{0x8445 ,0xff },\r
+{0x8446 ,0x78 },\r
+{0x8447 ,0xbe },\r
+{0x8448 ,0xa6 },\r
+{0x8449 ,0x07 },\r
+{0x844a ,0x75 },\r
+{0x844b ,0x1f },\r
+{0x844c ,0x02 },\r
+{0x844d ,0x78 },\r
+{0x844e ,0xb8 },\r
+{0x844f ,0x76 },\r
+{0x8450 ,0x01 },\r
+{0x8451 ,0x02 },\r
+{0x8452 ,0x04 },\r
+{0x8453 ,0xf1 },\r
+{0x8454 ,0xe5 },\r
+{0x8455 ,0x1f },\r
+{0x8456 ,0x64 },\r
+{0x8457 ,0x02 },\r
+{0x8458 ,0x70 },\r
+{0x8459 ,0x77 },\r
+{0x845a ,0x78 },\r
+{0x845b ,0xbe },\r
+{0x845c ,0xe6 },\r
+{0x845d ,0xff },\r
+{0x845e ,0xc3 },\r
+{0x845f ,0x78 },\r
+{0x8460 ,0xc0 },\r
+{0x8461 ,0x12 },\r
+{0x8462 ,0x0e },\r
+{0x8463 ,0xa2 },\r
+{0x8464 ,0x40 },\r
+{0x8465 ,0x05 },\r
+{0x8466 ,0x12 },\r
+{0x8467 ,0x0e },\r
+{0x8468 ,0x9c },\r
+{0x8469 ,0x40 },\r
+{0x846a ,0x64 },\r
+{0x846b ,0x12 },\r
+{0x846c ,0x0e },\r
+{0x846d ,0xaf },\r
+{0x846e ,0x40 },\r
+{0x846f ,0x04 },\r
+{0x8470 ,0x7f },\r
+{0x8471 ,0xff },\r
+{0x8472 ,0x80 },\r
+{0x8473 ,0x02 },\r
+{0x8474 ,0x7f },\r
+{0x8475 ,0x01 },\r
+{0x8476 ,0x78 },\r
+{0x8477 ,0xbd },\r
+{0x8478 ,0xa6 },\r
+{0x8479 ,0x07 },\r
+{0x847a ,0x78 },\r
+{0x847b ,0xb9 },\r
+{0x847c ,0xe6 },\r
+{0x847d ,0x04 },\r
+{0x847e ,0x78 },\r
+{0x847f ,0xbf },\r
+{0x8480 ,0xf6 },\r
+{0x8481 ,0x78 },\r
+{0x8482 ,0xb9 },\r
+{0x8483 ,0xe6 },\r
+{0x8484 ,0x14 },\r
+{0x8485 ,0x78 },\r
+{0x8486 ,0xc0 },\r
+{0x8487 ,0xf6 },\r
+{0x8488 ,0x18 },\r
+{0x8489 ,0x12 },\r
+{0x848a ,0x0e },\r
+{0x848b ,0xd6 },\r
+{0x848c ,0x40 },\r
+{0x848d ,0x04 },\r
+{0x848e ,0xe6 },\r
+{0x848f ,0xff },\r
+{0x8490 ,0x80 },\r
+{0x8491 ,0x02 },\r
+{0x8492 ,0x7f },\r
+{0x8493 ,0x00 },\r
+{0x8494 ,0x12 },\r
+{0x8495 ,0x0e },\r
+{0x8496 ,0xd1 },\r
+{0x8497 ,0x40 },\r
+{0x8498 ,0x04 },\r
+{0x8499 ,0xe6 },\r
+{0x849a ,0xff },\r
+{0x849b ,0x80 },\r
+{0x849c ,0x02 },\r
+{0x849d ,0x7f },\r
+{0x849e ,0x00 },\r
+{0x849f ,0x12 },\r
+{0x84a0 ,0x0e },\r
+{0x84a1 ,0xdd },\r
+{0x84a2 ,0x50 },\r
+{0x84a3 ,0x04 },\r
+{0x84a4 ,0xe6 },\r
+{0x84a5 ,0xff },\r
+{0x84a6 ,0x80 },\r
+{0x84a7 ,0x02 },\r
+{0x84a8 ,0x7f },\r
+{0x84a9 ,0x33 },\r
+{0x84aa ,0x12 },\r
+{0x84ab ,0x0e },\r
+{0x84ac ,0xe9 },\r
+{0x84ad ,0x50 },\r
+{0x84ae ,0x04 },\r
+{0x84af ,0xe6 },\r
+{0x84b0 ,0xff },\r
+{0x84b1 ,0x80 },\r
+{0x84b2 ,0x02 },\r
+{0x84b3 ,0x7f },\r
+{0x84b4 ,0x33 },\r
+{0x84b5 ,0x12 },\r
+{0x84b6 ,0x0e },\r
+{0x84b7 ,0xab },\r
+{0x84b8 ,0x40 },\r
+{0x84b9 ,0x06 },\r
+{0x84ba ,0x78 },\r
+{0x84bb ,0xc0 },\r
+{0x84bc ,0xe6 },\r
+{0x84bd ,0xff },\r
+{0x84be ,0x80 },\r
+{0x84bf ,0x04 },\r
+{0x84c0 ,0x78 },\r
+{0x84c1 ,0xbf },\r
+{0x84c2 ,0xe6 },\r
+{0x84c3 ,0xff },\r
+{0x84c4 ,0x78 },\r
+{0x84c5 ,0xbe },\r
+{0x84c6 ,0xa6 },\r
+{0x84c7 ,0x07 },\r
+{0x84c8 ,0x75 },\r
+{0x84c9 ,0x1f },\r
+{0x84ca ,0x03 },\r
+{0x84cb ,0x78 },\r
+{0x84cc ,0xb8 },\r
+{0x84cd ,0x76 },\r
+{0x84ce ,0x01 },\r
+{0x84cf ,0x80 },\r
+{0x84d0 ,0x20 },\r
+{0x84d1 ,0xe5 },\r
+{0x84d2 ,0x1f },\r
+{0x84d3 ,0x64 },\r
+{0x84d4 ,0x03 },\r
+{0x84d5 ,0x70 },\r
+{0x84d6 ,0x26 },\r
+{0x84d7 ,0x78 },\r
+{0x84d8 ,0xbe },\r
+{0x84d9 ,0xe6 },\r
+{0x84da ,0xff },\r
+{0x84db ,0xc3 },\r
+{0x84dc ,0x78 },\r
+{0x84dd ,0xc0 },\r
+{0x84de ,0x12 },\r
+{0x84df ,0x0e },\r
+{0x84e0 ,0xa2 },\r
+{0x84e1 ,0x40 },\r
+{0x84e2 ,0x05 },\r
+{0x84e3 ,0x12 },\r
+{0x84e4 ,0x0e },\r
+{0x84e5 ,0x9c },\r
+{0x84e6 ,0x40 },\r
+{0x84e7 ,0x09 },\r
+{0x84e8 ,0x78 },\r
+{0x84e9 ,0xb9 },\r
+{0x84ea ,0xe6 },\r
+{0x84eb ,0x78 },\r
+{0x84ec ,0xbe },\r
+{0x84ed ,0xf6 },\r
+{0x84ee ,0x75 },\r
+{0x84ef ,0x1f },\r
+{0x84f0 ,0x04 },\r
+{0x84f1 ,0x78 },\r
+{0x84f2 ,0xbe },\r
+{0x84f3 ,0xe6 },\r
+{0x84f4 ,0x75 },\r
+{0x84f5 ,0xf0 },\r
+{0x84f6 ,0x05 },\r
+{0x84f7 ,0xa4 },\r
+{0x84f8 ,0xf5 },\r
+{0x84f9 ,0x4b },\r
+{0x84fa ,0x02 },\r
+{0x84fb ,0x0b },\r
+{0x84fc ,0x39 },\r
+{0x84fd ,0xe5 },\r
+{0x84fe ,0x1f },\r
+{0x84ff ,0x64 },\r
+{0x8500 ,0x04 },\r
+{0x8501 ,0x70 },\r
+{0x8502 ,0x1e },\r
+{0x8503 ,0x90 },\r
+{0x8504 ,0x0e },\r
+{0x8505 ,0x95 },\r
+{0x8506 ,0x78 },\r
+{0x8507 ,0xc3 },\r
+{0x8508 ,0x12 },\r
+{0x8509 ,0x0e },\r
+{0x850a ,0xb8 },\r
+{0x850b ,0x40 },\r
+{0x850c ,0x04 },\r
+{0x850d ,0xd2 },\r
+{0x850e ,0x37 },\r
+{0x850f ,0x80 },\r
+{0x8510 ,0x0d },\r
+{0x8511 ,0x90 },\r
+{0x8512 ,0x0e },\r
+{0x8513 ,0x97 },\r
+{0x8514 ,0xe4 },\r
+{0x8515 ,0x93 },\r
+{0x8516 ,0xff },\r
+{0x8517 ,0x60 },\r
+{0x8518 ,0x05 },\r
+{0x8519 ,0xf5 },\r
+{0x851a ,0x4b },\r
+{0x851b ,0x12 },\r
+{0x851c ,0x0b },\r
+{0x851d ,0x39 },\r
+{0x851e ,0x75 },\r
+{0x851f ,0x1f },\r
+{0x8520 ,0x05 },\r
+{0x8521 ,0x22 },\r
+{0x8522 ,0xef },\r
+{0x8523 ,0x8d },\r
+{0x8524 ,0xf0 },\r
+{0x8525 ,0xa4 },\r
+{0x8526 ,0xa8 },\r
+{0x8527 ,0xf0 },\r
+{0x8528 ,0xcf },\r
+{0x8529 ,0x8c },\r
+{0x852a ,0xf0 },\r
+{0x852b ,0xa4 },\r
+{0x852c ,0x28 },\r
+{0x852d ,0xce },\r
+{0x852e ,0x8d },\r
+{0x852f ,0xf0 },\r
+{0x8530 ,0xa4 },\r
+{0x8531 ,0x2e },\r
+{0x8532 ,0xfe },\r
+{0x8533 ,0x22 },\r
+{0x8534 ,0xbc },\r
+{0x8535 ,0x00 },\r
+{0x8536 ,0x0b },\r
+{0x8537 ,0xbe },\r
+{0x8538 ,0x00 },\r
+{0x8539 ,0x29 },\r
+{0x853a ,0xef },\r
+{0x853b ,0x8d },\r
+{0x853c ,0xf0 },\r
+{0x853d ,0x84 },\r
+{0x853e ,0xff },\r
+{0x853f ,0xad },\r
+{0x8540 ,0xf0 },\r
+{0x8541 ,0x22 },\r
+{0x8542 ,0xe4 },\r
+{0x8543 ,0xcc },\r
+{0x8544 ,0xf8 },\r
+{0x8545 ,0x75 },\r
+{0x8546 ,0xf0 },\r
+{0x8547 ,0x08 },\r
+{0x8548 ,0xef },\r
+{0x8549 ,0x2f },\r
+{0x854a ,0xff },\r
+{0x854b ,0xee },\r
+{0x854c ,0x33 },\r
+{0x854d ,0xfe },\r
+{0x854e ,0xec },\r
+{0x854f ,0x33 },\r
+{0x8550 ,0xfc },\r
+{0x8551 ,0xee },\r
+{0x8552 ,0x9d },\r
+{0x8553 ,0xec },\r
+{0x8554 ,0x98 },\r
+{0x8555 ,0x40 },\r
+{0x8556 ,0x05 },\r
+{0x8557 ,0xfc },\r
+{0x8558 ,0xee },\r
+{0x8559 ,0x9d },\r
+{0x855a ,0xfe },\r
+{0x855b ,0x0f },\r
+{0x855c ,0xd5 },\r
+{0x855d ,0xf0 },\r
+{0x855e ,0xe9 },\r
+{0x855f ,0xe4 },\r
+{0x8560 ,0xce },\r
+{0x8561 ,0xfd },\r
+{0x8562 ,0x22 },\r
+{0x8563 ,0xed },\r
+{0x8564 ,0xf8 },\r
+{0x8565 ,0xf5 },\r
+{0x8566 ,0xf0 },\r
+{0x8567 ,0xee },\r
+{0x8568 ,0x84 },\r
+{0x8569 ,0x20 },\r
+{0x856a ,0xd2 },\r
+{0x856b ,0x1c },\r
+{0x856c ,0xfe },\r
+{0x856d ,0xad },\r
+{0x856e ,0xf0 },\r
+{0x856f ,0x75 },\r
+{0x8570 ,0xf0 },\r
+{0x8571 ,0x08 },\r
+{0x8572 ,0xef },\r
+{0x8573 ,0x2f },\r
+{0x8574 ,0xff },\r
+{0x8575 ,0xed },\r
+{0x8576 ,0x33 },\r
+{0x8577 ,0xfd },\r
+{0x8578 ,0x40 },\r
+{0x8579 ,0x07 },\r
+{0x857a ,0x98 },\r
+{0x857b ,0x50 },\r
+{0x857c ,0x06 },\r
+{0x857d ,0xd5 },\r
+{0x857e ,0xf0 },\r
+{0x857f ,0xf2 },\r
+{0x8580 ,0x22 },\r
+{0x8581 ,0xc3 },\r
+{0x8582 ,0x98 },\r
+{0x8583 ,0xfd },\r
+{0x8584 ,0x0f },\r
+{0x8585 ,0xd5 },\r
+{0x8586 ,0xf0 },\r
+{0x8587 ,0xea },\r
+{0x8588 ,0x22 },\r
+{0x8589 ,0xe8 },\r
+{0x858a ,0x8f },\r
+{0x858b ,0xf0 },\r
+{0x858c ,0xa4 },\r
+{0x858d ,0xcc },\r
+{0x858e ,0x8b },\r
+{0x858f ,0xf0 },\r
+{0x8590 ,0xa4 },\r
+{0x8591 ,0x2c },\r
+{0x8592 ,0xfc },\r
+{0x8593 ,0xe9 },\r
+{0x8594 ,0x8e },\r
+{0x8595 ,0xf0 },\r
+{0x8596 ,0xa4 },\r
+{0x8597 ,0x2c },\r
+{0x8598 ,0xfc },\r
+{0x8599 ,0x8a },\r
+{0x859a ,0xf0 },\r
+{0x859b ,0xed },\r
+{0x859c ,0xa4 },\r
+{0x859d ,0x2c },\r
+{0x859e ,0xfc },\r
+{0x859f ,0xea },\r
+{0x85a0 ,0x8e },\r
+{0x85a1 ,0xf0 },\r
+{0x85a2 ,0xa4 },\r
+{0x85a3 ,0xcd },\r
+{0x85a4 ,0xa8 },\r
+{0x85a5 ,0xf0 },\r
+{0x85a6 ,0x8b },\r
+{0x85a7 ,0xf0 },\r
+{0x85a8 ,0xa4 },\r
+{0x85a9 ,0x2d },\r
+{0x85aa ,0xcc },\r
+{0x85ab ,0x38 },\r
+{0x85ac ,0x25 },\r
+{0x85ad ,0xf0 },\r
+{0x85ae ,0xfd },\r
+{0x85af ,0xe9 },\r
+{0x85b0 ,0x8f },\r
+{0x85b1 ,0xf0 },\r
+{0x85b2 ,0xa4 },\r
+{0x85b3 ,0x2c },\r
+{0x85b4 ,0xcd },\r
+{0x85b5 ,0x35 },\r
+{0x85b6 ,0xf0 },\r
+{0x85b7 ,0xfc },\r
+{0x85b8 ,0xeb },\r
+{0x85b9 ,0x8e },\r
+{0x85ba ,0xf0 },\r
+{0x85bb ,0xa4 },\r
+{0x85bc ,0xfe },\r
+{0x85bd ,0xa9 },\r
+{0x85be ,0xf0 },\r
+{0x85bf ,0xeb },\r
+{0x85c0 ,0x8f },\r
+{0x85c1 ,0xf0 },\r
+{0x85c2 ,0xa4 },\r
+{0x85c3 ,0xcf },\r
+{0x85c4 ,0xc5 },\r
+{0x85c5 ,0xf0 },\r
+{0x85c6 ,0x2e },\r
+{0x85c7 ,0xcd },\r
+{0x85c8 ,0x39 },\r
+{0x85c9 ,0xfe },\r
+{0x85ca ,0xe4 },\r
+{0x85cb ,0x3c },\r
+{0x85cc ,0xfc },\r
+{0x85cd ,0xea },\r
+{0x85ce ,0xa4 },\r
+{0x85cf ,0x2d },\r
+{0x85d0 ,0xce },\r
+{0x85d1 ,0x35 },\r
+{0x85d2 ,0xf0 },\r
+{0x85d3 ,0xfd },\r
+{0x85d4 ,0xe4 },\r
+{0x85d5 ,0x3c },\r
+{0x85d6 ,0xfc },\r
+{0x85d7 ,0x22 },\r
+{0x85d8 ,0x75 },\r
+{0x85d9 ,0xf0 },\r
+{0x85da ,0x08 },\r
+{0x85db ,0x75 },\r
+{0x85dc ,0x82 },\r
+{0x85dd ,0x00 },\r
+{0x85de ,0xef },\r
+{0x85df ,0x2f },\r
+{0x85e0 ,0xff },\r
+{0x85e1 ,0xee },\r
+{0x85e2 ,0x33 },\r
+{0x85e3 ,0xfe },\r
+{0x85e4 ,0xcd },\r
+{0x85e5 ,0x33 },\r
+{0x85e6 ,0xcd },\r
+{0x85e7 ,0xcc },\r
+{0x85e8 ,0x33 },\r
+{0x85e9 ,0xcc },\r
+{0x85ea ,0xc5 },\r
+{0x85eb ,0x82 },\r
+{0x85ec ,0x33 },\r
+{0x85ed ,0xc5 },\r
+{0x85ee ,0x82 },\r
+{0x85ef ,0x9b },\r
+{0x85f0 ,0xed },\r
+{0x85f1 ,0x9a },\r
+{0x85f2 ,0xec },\r
+{0x85f3 ,0x99 },\r
+{0x85f4 ,0xe5 },\r
+{0x85f5 ,0x82 },\r
+{0x85f6 ,0x98 },\r
+{0x85f7 ,0x40 },\r
+{0x85f8 ,0x0c },\r
+{0x85f9 ,0xf5 },\r
+{0x85fa ,0x82 },\r
+{0x85fb ,0xee },\r
+{0x85fc ,0x9b },\r
+{0x85fd ,0xfe },\r
+{0x85fe ,0xed },\r
+{0x85ff ,0x9a },\r
+{0x8600 ,0xfd },\r
+{0x8601 ,0xec },\r
+{0x8602 ,0x99 },\r
+{0x8603 ,0xfc },\r
+{0x8604 ,0x0f },\r
+{0x8605 ,0xd5 },\r
+{0x8606 ,0xf0 },\r
+{0x8607 ,0xd6 },\r
+{0x8608 ,0xe4 },\r
+{0x8609 ,0xce },\r
+{0x860a ,0xfb },\r
+{0x860b ,0xe4 },\r
+{0x860c ,0xcd },\r
+{0x860d ,0xfa },\r
+{0x860e ,0xe4 },\r
+{0x860f ,0xcc },\r
+{0x8610 ,0xf9 },\r
+{0x8611 ,0xa8 },\r
+{0x8612 ,0x82 },\r
+{0x8613 ,0x22 },\r
+{0x8614 ,0xb8 },\r
+{0x8615 ,0x00 },\r
+{0x8616 ,0xc1 },\r
+{0x8617 ,0xb9 },\r
+{0x8618 ,0x00 },\r
+{0x8619 ,0x59 },\r
+{0x861a ,0xba },\r
+{0x861b ,0x00 },\r
+{0x861c ,0x2d },\r
+{0x861d ,0xec },\r
+{0x861e ,0x8b },\r
+{0x861f ,0xf0 },\r
+{0x8620 ,0x84 },\r
+{0x8621 ,0xcf },\r
+{0x8622 ,0xce },\r
+{0x8623 ,0xcd },\r
+{0x8624 ,0xfc },\r
+{0x8625 ,0xe5 },\r
+{0x8626 ,0xf0 },\r
+{0x8627 ,0xcb },\r
+{0x8628 ,0xf9 },\r
+{0x8629 ,0x78 },\r
+{0x862a ,0x18 },\r
+{0x862b ,0xef },\r
+{0x862c ,0x2f },\r
+{0x862d ,0xff },\r
+{0x862e ,0xee },\r
+{0x862f ,0x33 },\r
+{0x8630 ,0xfe },\r
+{0x8631 ,0xed },\r
+{0x8632 ,0x33 },\r
+{0x8633 ,0xfd },\r
+{0x8634 ,0xec },\r
+{0x8635 ,0x33 },\r
+{0x8636 ,0xfc },\r
+{0x8637 ,0xeb },\r
+{0x8638 ,0x33 },\r
+{0x8639 ,0xfb },\r
+{0x863a ,0x10 },\r
+{0x863b ,0xd7 },\r
+{0x863c ,0x03 },\r
+{0x863d ,0x99 },\r
+{0x863e ,0x40 },\r
+{0x863f ,0x04 },\r
+{0x8640 ,0xeb },\r
+{0x8641 ,0x99 },\r
+{0x8642 ,0xfb },\r
+{0x8643 ,0x0f },\r
+{0x8644 ,0xd8 },\r
+{0x8645 ,0xe5 },\r
+{0x8646 ,0xe4 },\r
+{0x8647 ,0xf9 },\r
+{0x8648 ,0xfa },\r
+{0x8649 ,0x22 },\r
+{0x864a ,0x78 },\r
+{0x864b ,0x18 },\r
+{0x864c ,0xef },\r
+{0x864d ,0x2f },\r
+{0x864e ,0xff },\r
+{0x864f ,0xee },\r
+{0x8650 ,0x33 },\r
+{0x8651 ,0xfe },\r
+{0x8652 ,0xed },\r
+{0x8653 ,0x33 },\r
+{0x8654 ,0xfd },\r
+{0x8655 ,0xec },\r
+{0x8656 ,0x33 },\r
+{0x8657 ,0xfc },\r
+{0x8658 ,0xc9 },\r
+{0x8659 ,0x33 },\r
+{0x865a ,0xc9 },\r
+{0x865b ,0x10 },\r
+{0x865c ,0xd7 },\r
+{0x865d ,0x05 },\r
+{0x865e ,0x9b },\r
+{0x865f ,0xe9 },\r
+{0x8660 ,0x9a },\r
+{0x8661 ,0x40 },\r
+{0x8662 ,0x07 },\r
+{0x8663 ,0xec },\r
+{0x8664 ,0x9b },\r
+{0x8665 ,0xfc },\r
+{0x8666 ,0xe9 },\r
+{0x8667 ,0x9a },\r
+{0x8668 ,0xf9 },\r
+{0x8669 ,0x0f },\r
+{0x866a ,0xd8 },\r
+{0x866b ,0xe0 },\r
+{0x866c ,0xe4 },\r
+{0x866d ,0xc9 },\r
+{0x866e ,0xfa },\r
+{0x866f ,0xe4 },\r
+{0x8670 ,0xcc },\r
+{0x8671 ,0xfb },\r
+{0x8672 ,0x22 },\r
+{0x8673 ,0x75 },\r
+{0x8674 ,0xf0 },\r
+{0x8675 ,0x10 },\r
+{0x8676 ,0xef },\r
+{0x8677 ,0x2f },\r
+{0x8678 ,0xff },\r
+{0x8679 ,0xee },\r
+{0x867a ,0x33 },\r
+{0x867b ,0xfe },\r
+{0x867c ,0xed },\r
+{0x867d ,0x33 },\r
+{0x867e ,0xfd },\r
+{0x867f ,0xcc },\r
+{0x8680 ,0x33 },\r
+{0x8681 ,0xcc },\r
+{0x8682 ,0xc8 },\r
+{0x8683 ,0x33 },\r
+{0x8684 ,0xc8 },\r
+{0x8685 ,0x10 },\r
+{0x8686 ,0xd7 },\r
+{0x8687 ,0x07 },\r
+{0x8688 ,0x9b },\r
+{0x8689 ,0xec },\r
+{0x868a ,0x9a },\r
+{0x868b ,0xe8 },\r
+{0x868c ,0x99 },\r
+{0x868d ,0x40 },\r
+{0x868e ,0x0a },\r
+{0x868f ,0xed },\r
+{0x8690 ,0x9b },\r
+{0x8691 ,0xfd },\r
+{0x8692 ,0xec },\r
+{0x8693 ,0x9a },\r
+{0x8694 ,0xfc },\r
+{0x8695 ,0xe8 },\r
+{0x8696 ,0x99 },\r
+{0x8697 ,0xf8 },\r
+{0x8698 ,0x0f },\r
+{0x8699 ,0xd5 },\r
+{0x869a ,0xf0 },\r
+{0x869b ,0xda },\r
+{0x869c ,0xe4 },\r
+{0x869d ,0xcd },\r
+{0x869e ,0xfb },\r
+{0x869f ,0xe4 },\r
+{0x86a0 ,0xcc },\r
+{0x86a1 ,0xfa },\r
+{0x86a2 ,0xe4 },\r
+{0x86a3 ,0xc8 },\r
+{0x86a4 ,0xf9 },\r
+{0x86a5 ,0x22 },\r
+{0x86a6 ,0xeb },\r
+{0x86a7 ,0x9f },\r
+{0x86a8 ,0xf5 },\r
+{0x86a9 ,0xf0 },\r
+{0x86aa ,0xea },\r
+{0x86ab ,0x9e },\r
+{0x86ac ,0x42 },\r
+{0x86ad ,0xf0 },\r
+{0x86ae ,0xe9 },\r
+{0x86af ,0x9d },\r
+{0x86b0 ,0x42 },\r
+{0x86b1 ,0xf0 },\r
+{0x86b2 ,0xe8 },\r
+{0x86b3 ,0x9c },\r
+{0x86b4 ,0x45 },\r
+{0x86b5 ,0xf0 },\r
+{0x86b6 ,0x22 },\r
+{0x86b7 ,0xe8 },\r
+{0x86b8 ,0x60 },\r
+{0x86b9 ,0x0f },\r
+{0x86ba ,0xec },\r
+{0x86bb ,0xc3 },\r
+{0x86bc ,0x13 },\r
+{0x86bd ,0xfc },\r
+{0x86be ,0xed },\r
+{0x86bf ,0x13 },\r
+{0x86c0 ,0xfd },\r
+{0x86c1 ,0xee },\r
+{0x86c2 ,0x13 },\r
+{0x86c3 ,0xfe },\r
+{0x86c4 ,0xef },\r
+{0x86c5 ,0x13 },\r
+{0x86c6 ,0xff },\r
+{0x86c7 ,0xd8 },\r
+{0x86c8 ,0xf1 },\r
+{0x86c9 ,0x22 },\r
+{0x86ca ,0xe8 },\r
+{0x86cb ,0x60 },\r
+{0x86cc ,0x0f },\r
+{0x86cd ,0xef },\r
+{0x86ce ,0xc3 },\r
+{0x86cf ,0x33 },\r
+{0x86d0 ,0xff },\r
+{0x86d1 ,0xee },\r
+{0x86d2 ,0x33 },\r
+{0x86d3 ,0xfe },\r
+{0x86d4 ,0xed },\r
+{0x86d5 ,0x33 },\r
+{0x86d6 ,0xfd },\r
+{0x86d7 ,0xec },\r
+{0x86d8 ,0x33 },\r
+{0x86d9 ,0xfc },\r
+{0x86da ,0xd8 },\r
+{0x86db ,0xf1 },\r
+{0x86dc ,0x22 },\r
+{0x86dd ,0xe4 },\r
+{0x86de ,0x93 },\r
+{0x86df ,0xfc },\r
+{0x86e0 ,0x74 },\r
+{0x86e1 ,0x01 },\r
+{0x86e2 ,0x93 },\r
+{0x86e3 ,0xfd },\r
+{0x86e4 ,0x74 },\r
+{0x86e5 ,0x02 },\r
+{0x86e6 ,0x93 },\r
+{0x86e7 ,0xfe },\r
+{0x86e8 ,0x74 },\r
+{0x86e9 ,0x03 },\r
+{0x86ea ,0x93 },\r
+{0x86eb ,0xff },\r
+{0x86ec ,0x22 },\r
+{0x86ed ,0xe6 },\r
+{0x86ee ,0xfb },\r
+{0x86ef ,0x08 },\r
+{0x86f0 ,0xe6 },\r
+{0x86f1 ,0xf9 },\r
+{0x86f2 ,0x08 },\r
+{0x86f3 ,0xe6 },\r
+{0x86f4 ,0xfa },\r
+{0x86f5 ,0x08 },\r
+{0x86f6 ,0xe6 },\r
+{0x86f7 ,0xcb },\r
+{0x86f8 ,0xf8 },\r
+{0x86f9 ,0x22 },\r
+{0x86fa ,0xec },\r
+{0x86fb ,0xf6 },\r
+{0x86fc ,0x08 },\r
+{0x86fd ,0xed },\r
+{0x86fe ,0xf6 },\r
+{0x86ff ,0x08 },\r
+{0x8700 ,0xee },\r
+{0x8701 ,0xf6 },\r
+{0x8702 ,0x08 },\r
+{0x8703 ,0xef },\r
+{0x8704 ,0xf6 },\r
+{0x8705 ,0x22 },\r
+{0x8706 ,0xa4 },\r
+{0x8707 ,0x25 },\r
+{0x8708 ,0x82 },\r
+{0x8709 ,0xf5 },\r
+{0x870a ,0x82 },\r
+{0x870b ,0xe5 },\r
+{0x870c ,0xf0 },\r
+{0x870d ,0x35 },\r
+{0x870e ,0x83 },\r
+{0x870f ,0xf5 },\r
+{0x8710 ,0x83 },\r
+{0x8711 ,0x22 },\r
+{0x8712 ,0xd0 },\r
+{0x8713 ,0x83 },\r
+{0x8714 ,0xd0 },\r
+{0x8715 ,0x82 },\r
+{0x8716 ,0xf8 },\r
+{0x8717 ,0xe4 },\r
+{0x8718 ,0x93 },\r
+{0x8719 ,0x70 },\r
+{0x871a ,0x12 },\r
+{0x871b ,0x74 },\r
+{0x871c ,0x01 },\r
+{0x871d ,0x93 },\r
+{0x871e ,0x70 },\r
+{0x871f ,0x0d },\r
+{0x8720 ,0xa3 },\r
+{0x8721 ,0xa3 },\r
+{0x8722 ,0x93 },\r
+{0x8723 ,0xf8 },\r
+{0x8724 ,0x74 },\r
+{0x8725 ,0x01 },\r
+{0x8726 ,0x93 },\r
+{0x8727 ,0xf5 },\r
+{0x8728 ,0x82 },\r
+{0x8729 ,0x88 },\r
+{0x872a ,0x83 },\r
+{0x872b ,0xe4 },\r
+{0x872c ,0x73 },\r
+{0x872d ,0x74 },\r
+{0x872e ,0x02 },\r
+{0x872f ,0x93 },\r
+{0x8730 ,0x68 },\r
+{0x8731 ,0x60 },\r
+{0x8732 ,0xef },\r
+{0x8733 ,0xa3 },\r
+{0x8734 ,0xa3 },\r
+{0x8735 ,0xa3 },\r
+{0x8736 ,0x80 },\r
+{0x8737 ,0xdf },\r
+{0x8738 ,0x90 },\r
+{0x8739 ,0x38 },\r
+{0x873a ,0x04 },\r
+{0x873b ,0x78 },\r
+{0x873c ,0x52 },\r
+{0x873d ,0x12 },\r
+{0x873e ,0x0b },\r
+{0x873f ,0x0f },\r
+{0x8740 ,0x90 },\r
+{0x8741 ,0x38 },\r
+{0x8742 ,0x00 },\r
+{0x8743 ,0xe0 },\r
+{0x8744 ,0xfe },\r
+{0x8745 ,0xa3 },\r
+{0x8746 ,0xe0 },\r
+{0x8747 ,0xfd },\r
+{0x8748 ,0xed },\r
+{0x8749 ,0xff },\r
+{0x874a ,0xc3 },\r
+{0x874b ,0x12 },\r
+{0x874c ,0x0a },\r
+{0x874d ,0xb0 },\r
+{0x874e ,0x90 },\r
+{0x874f ,0x38 },\r
+{0x8750 ,0x10 },\r
+{0x8751 ,0x12 },\r
+{0x8752 ,0x0a },\r
+{0x8753 ,0xa4 },\r
+{0x8754 ,0x90 },\r
+{0x8755 ,0x38 },\r
+{0x8756 ,0x06 },\r
+{0x8757 ,0x78 },\r
+{0x8758 ,0x54 },\r
+{0x8759 ,0x12 },\r
+{0x875a ,0x0b },\r
+{0x875b ,0x0f },\r
+{0x875c ,0x90 },\r
+{0x875d ,0x38 },\r
+{0x875e ,0x02 },\r
+{0x875f ,0xe0 },\r
+{0x8760 ,0xfe },\r
+{0x8761 ,0xa3 },\r
+{0x8762 ,0xe0 },\r
+{0x8763 ,0xfd },\r
+{0x8764 ,0xed },\r
+{0x8765 ,0xff },\r
+{0x8766 ,0xc3 },\r
+{0x8767 ,0x12 },\r
+{0x8768 ,0x0a },\r
+{0x8769 ,0xb0 },\r
+{0x876a ,0x90 },\r
+{0x876b ,0x38 },\r
+{0x876c ,0x12 },\r
+{0x876d ,0x12 },\r
+{0x876e ,0x0a },\r
+{0x876f ,0xa4 },\r
+{0x8770 ,0xa3 },\r
+{0x8771 ,0xe0 },\r
+{0x8772 ,0xb4 },\r
+{0x8773 ,0x31 },\r
+{0x8774 ,0x07 },\r
+{0x8775 ,0x78 },\r
+{0x8776 ,0x52 },\r
+{0x8777 ,0x79 },\r
+{0x8778 ,0x52 },\r
+{0x8779 ,0x12 },\r
+{0x877a ,0x0b },\r
+{0x877b ,0x2f },\r
+{0x877c ,0x90 },\r
+{0x877d ,0x38 },\r
+{0x877e ,0x14 },\r
+{0x877f ,0xe0 },\r
+{0x8780 ,0xb4 },\r
+{0x8781 ,0x71 },\r
+{0x8782 ,0x15 },\r
+{0x8783 ,0x78 },\r
+{0x8784 ,0x52 },\r
+{0x8785 ,0xe6 },\r
+{0x8786 ,0xfe },\r
+{0x8787 ,0x08 },\r
+{0x8788 ,0xe6 },\r
+{0x8789 ,0x78 },\r
+{0x878a ,0x02 },\r
+{0x878b ,0xce },\r
+{0x878c ,0xc3 },\r
+{0x878d ,0x13 },\r
+{0x878e ,0xce },\r
+{0x878f ,0x13 },\r
+{0x8790 ,0xd8 },\r
+{0x8791 ,0xf9 },\r
+{0x8792 ,0x79 },\r
+{0x8793 ,0x53 },\r
+{0x8794 ,0xf7 },\r
+{0x8795 ,0xee },\r
+{0x8796 ,0x19 },\r
+{0x8797 ,0xf7 },\r
+{0x8798 ,0x90 },\r
+{0x8799 ,0x38 },\r
+{0x879a ,0x15 },\r
+{0x879b ,0xe0 },\r
+{0x879c ,0xb4 },\r
+{0x879d ,0x31 },\r
+{0x879e ,0x07 },\r
+{0x879f ,0x78 },\r
+{0x87a0 ,0x54 },\r
+{0x87a1 ,0x79 },\r
+{0x87a2 ,0x54 },\r
+{0x87a3 ,0x12 },\r
+{0x87a4 ,0x0b },\r
+{0x87a5 ,0x2f },\r
+{0x87a6 ,0x90 },\r
+{0x87a7 ,0x38 },\r
+{0x87a8 ,0x15 },\r
+{0x87a9 ,0xe0 },\r
+{0x87aa ,0xb4 },\r
+{0x87ab ,0x71 },\r
+{0x87ac ,0x15 },\r
+{0x87ad ,0x78 },\r
+{0x87ae ,0x54 },\r
+{0x87af ,0xe6 },\r
+{0x87b0 ,0xfe },\r
+{0x87b1 ,0x08 },\r
+{0x87b2 ,0xe6 },\r
+{0x87b3 ,0x78 },\r
+{0x87b4 ,0x02 },\r
+{0x87b5 ,0xce },\r
+{0x87b6 ,0xc3 },\r
+{0x87b7 ,0x13 },\r
+{0x87b8 ,0xce },\r
+{0x87b9 ,0x13 },\r
+{0x87ba ,0xd8 },\r
+{0x87bb ,0xf9 },\r
+{0x87bc ,0x79 },\r
+{0x87bd ,0x55 },\r
+{0x87be ,0xf7 },\r
+{0x87bf ,0xee },\r
+{0x87c0 ,0x19 },\r
+{0x87c1 ,0xf7 },\r
+{0x87c2 ,0x79 },\r
+{0x87c3 ,0x52 },\r
+{0x87c4 ,0x12 },\r
+{0x87c5 ,0x0a },\r
+{0x87c6 ,0xeb },\r
+{0x87c7 ,0x09 },\r
+{0x87c8 ,0x12 },\r
+{0x87c9 ,0x0a },\r
+{0x87ca ,0xeb },\r
+{0x87cb ,0xaf },\r
+{0x87cc ,0x47 },\r
+{0x87cd ,0x12 },\r
+{0x87ce ,0x0a },\r
+{0x87cf ,0xc4 },\r
+{0x87d0 ,0xe5 },\r
+{0x87d1 ,0x44 },\r
+{0x87d2 ,0xfb },\r
+{0x87d3 ,0x7a },\r
+{0x87d4 ,0x00 },\r
+{0x87d5 ,0xfd },\r
+{0x87d6 ,0x7c },\r
+{0x87d7 ,0x00 },\r
+{0x87d8 ,0x12 },\r
+{0x87d9 ,0x05 },\r
+{0x87da ,0x34 },\r
+{0x87db ,0x78 },\r
+{0x87dc ,0x5a },\r
+{0x87dd ,0xa6 },\r
+{0x87de ,0x06 },\r
+{0x87df ,0x08 },\r
+{0x87e0 ,0xa6 },\r
+{0x87e1 ,0x07 },\r
+{0x87e2 ,0xaf },\r
+{0x87e3 ,0x45 },\r
+{0x87e4 ,0x12 },\r
+{0x87e5 ,0x0a },\r
+{0x87e6 ,0xc4 },\r
+{0x87e7 ,0xad },\r
+{0x87e8 ,0x03 },\r
+{0x87e9 ,0x7c },\r
+{0x87ea ,0x00 },\r
+{0x87eb ,0x12 },\r
+{0x87ec ,0x05 },\r
+{0x87ed ,0x34 },\r
+{0x87ee ,0x78 },\r
+{0x87ef ,0x56 },\r
+{0x87f0 ,0xa6 },\r
+{0x87f1 ,0x06 },\r
+{0x87f2 ,0x08 },\r
+{0x87f3 ,0xa6 },\r
+{0x87f4 ,0x07 },\r
+{0x87f5 ,0xaf },\r
+{0x87f6 ,0x48 },\r
+{0x87f7 ,0x78 },\r
+{0x87f8 ,0x54 },\r
+{0x87f9 ,0x12 },\r
+{0x87fa ,0x0a },\r
+{0x87fb ,0xc6 },\r
+{0x87fc ,0xe5 },\r
+{0x87fd ,0x43 },\r
+{0x87fe ,0xfb },\r
+{0x87ff ,0xfd },\r
+{0x8800 ,0x7c },\r
+{0x8801 ,0x00 },\r
+{0x8802 ,0x12 },\r
+{0x8803 ,0x05 },\r
+{0x8804 ,0x34 },\r
+{0x8805 ,0x78 },\r
+{0x8806 ,0x5c },\r
+{0x8807 ,0xa6 },\r
+{0x8808 ,0x06 },\r
+{0x8809 ,0x08 },\r
+{0x880a ,0xa6 },\r
+{0x880b ,0x07 },\r
+{0x880c ,0xaf },\r
+{0x880d ,0x46 },\r
+{0x880e ,0x7e },\r
+{0x880f ,0x00 },\r
+{0x8810 ,0x78 },\r
+{0x8811 ,0x54 },\r
+{0x8812 ,0x12 },\r
+{0x8813 ,0x0a },\r
+{0x8814 ,0xc8 },\r
+{0x8815 ,0xad },\r
+{0x8816 ,0x03 },\r
+{0x8817 ,0x7c },\r
+{0x8818 ,0x00 },\r
+{0x8819 ,0x12 },\r
+{0x881a ,0x05 },\r
+{0x881b ,0x34 },\r
+{0x881c ,0x78 },\r
+{0x881d ,0x58 },\r
+{0x881e ,0xa6 },\r
+{0x881f ,0x06 },\r
+{0x8820 ,0x08 },\r
+{0x8821 ,0xa6 },\r
+{0x8822 ,0x07 },\r
+{0x8823 ,0xc3 },\r
+{0x8824 ,0x78 },\r
+{0x8825 ,0x5b },\r
+{0x8826 ,0xe6 },\r
+{0x8827 ,0x94 },\r
+{0x8828 ,0x08 },\r
+{0x8829 ,0x18 },\r
+{0x882a ,0xe6 },\r
+{0x882b ,0x94 },\r
+{0x882c ,0x00 },\r
+{0x882d ,0x50 },\r
+{0x882e ,0x05 },\r
+{0x882f ,0x76 },\r
+{0x8830 ,0x00 },\r
+{0x8831 ,0x08 },\r
+{0x8832 ,0x76 },\r
+{0x8833 ,0x08 },\r
+{0x8834 ,0xc3 },\r
+{0x8835 ,0x78 },\r
+{0x8836 ,0x5d },\r
+{0x8837 ,0xe6 },\r
+{0x8838 ,0x94 },\r
+{0x8839 ,0x08 },\r
+{0x883a ,0x18 },\r
+{0x883b ,0xe6 },\r
+{0x883c ,0x94 },\r
+{0x883d ,0x00 },\r
+{0x883e ,0x50 },\r
+{0x883f ,0x05 },\r
+{0x8840 ,0x76 },\r
+{0x8841 ,0x00 },\r
+{0x8842 ,0x08 },\r
+{0x8843 ,0x76 },\r
+{0x8844 ,0x08 },\r
+{0x8845 ,0x78 },\r
+{0x8846 ,0x5a },\r
+{0x8847 ,0x12 },\r
+{0x8848 ,0x0a },\r
+{0x8849 ,0xd8 },\r
+{0x884a ,0xff },\r
+{0x884b ,0xd3 },\r
+{0x884c ,0x78 },\r
+{0x884d ,0x57 },\r
+{0x884e ,0xe6 },\r
+{0x884f ,0x9f },\r
+{0x8850 ,0x18 },\r
+{0x8851 ,0xe6 },\r
+{0x8852 ,0x9e },\r
+{0x8853 ,0x40 },\r
+{0x8854 ,0x0e },\r
+{0x8855 ,0x78 },\r
+{0x8856 ,0x5a },\r
+{0x8857 ,0xe6 },\r
+{0x8858 ,0x13 },\r
+{0x8859 ,0xfe },\r
+{0x885a ,0x08 },\r
+{0x885b ,0xe6 },\r
+{0x885c ,0x78 },\r
+{0x885d ,0x57 },\r
+{0x885e ,0x12 },\r
+{0x885f ,0x0b },\r
+{0x8860 ,0x1a },\r
+{0x8861 ,0x80 },\r
+{0x8862 ,0x04 },\r
+{0x8863 ,0x7e },\r
+{0x8864 ,0x00 },\r
+{0x8865 ,0x7f },\r
+{0x8866 ,0x00 },\r
+{0x8867 ,0x78 },\r
+{0x8868 ,0x5e },\r
+{0x8869 ,0x12 },\r
+{0x886a ,0x0a },\r
+{0x886b ,0xd0 },\r
+{0x886c ,0xff },\r
+{0x886d ,0xd3 },\r
+{0x886e ,0x78 },\r
+{0x886f ,0x59 },\r
+{0x8870 ,0xe6 },\r
+{0x8871 ,0x9f },\r
+{0x8872 ,0x18 },\r
+{0x8873 ,0xe6 },\r
+{0x8874 ,0x9e },\r
+{0x8875 ,0x40 },\r
+{0x8876 ,0x0e },\r
+{0x8877 ,0x78 },\r
+{0x8878 ,0x5c },\r
+{0x8879 ,0xe6 },\r
+{0x887a ,0x13 },\r
+{0x887b ,0xfe },\r
+{0x887c ,0x08 },\r
+{0x887d ,0xe6 },\r
+{0x887e ,0x78 },\r
+{0x887f ,0x59 },\r
+{0x8880 ,0x12 },\r
+{0x8881 ,0x0b },\r
+{0x8882 ,0x1a },\r
+{0x8883 ,0x80 },\r
+{0x8884 ,0x04 },\r
+{0x8885 ,0x7e },\r
+{0x8886 ,0x00 },\r
+{0x8887 ,0x7f },\r
+{0x8888 ,0x00 },\r
+{0x8889 ,0xe4 },\r
+{0x888a ,0xfc },\r
+{0x888b ,0xfd },\r
+{0x888c ,0x78 },\r
+{0x888d ,0x62 },\r
+{0x888e ,0x12 },\r
+{0x888f ,0x06 },\r
+{0x8890 ,0xfa },\r
+{0x8891 ,0x78 },\r
+{0x8892 ,0x5a },\r
+{0x8893 ,0x12 },\r
+{0x8894 ,0x0a },\r
+{0x8895 ,0xd8 },\r
+{0x8896 ,0x78 },\r
+{0x8897 ,0x57 },\r
+{0x8898 ,0x26 },\r
+{0x8899 ,0xff },\r
+{0x889a ,0xee },\r
+{0x889b ,0x18 },\r
+{0x889c ,0x36 },\r
+{0x889d ,0xfe },\r
+{0x889e ,0x78 },\r
+{0x889f ,0x66 },\r
+{0x88a0 ,0x12 },\r
+{0x88a1 ,0x0a },\r
+{0x88a2 ,0xd0 },\r
+{0x88a3 ,0x78 },\r
+{0x88a4 ,0x59 },\r
+{0x88a5 ,0x26 },\r
+{0x88a6 ,0xff },\r
+{0x88a7 ,0xee },\r
+{0x88a8 ,0x18 },\r
+{0x88a9 ,0x36 },\r
+{0x88aa ,0xfe },\r
+{0x88ab ,0xe4 },\r
+{0x88ac ,0xfc },\r
+{0x88ad ,0xfd },\r
+{0x88ae ,0x78 },\r
+{0x88af ,0x6a },\r
+{0x88b0 ,0x12 },\r
+{0x88b1 ,0x06 },\r
+{0x88b2 ,0xfa },\r
+{0x88b3 ,0x12 },\r
+{0x88b4 ,0x0a },\r
+{0x88b5 ,0xe0 },\r
+{0x88b6 ,0x78 },\r
+{0x88b7 ,0x66 },\r
+{0x88b8 ,0x12 },\r
+{0x88b9 ,0x06 },\r
+{0x88ba ,0xed },\r
+{0x88bb ,0xd3 },\r
+{0x88bc ,0x12 },\r
+{0x88bd ,0x06 },\r
+{0x88be ,0xa6 },\r
+{0x88bf ,0x40 },\r
+{0x88c0 ,0x08 },\r
+{0x88c1 ,0x12 },\r
+{0x88c2 ,0x0a },\r
+{0x88c3 ,0xe0 },\r
+{0x88c4 ,0x78 },\r
+{0x88c5 ,0x66 },\r
+{0x88c6 ,0x12 },\r
+{0x88c7 ,0x06 },\r
+{0x88c8 ,0xfa },\r
+{0x88c9 ,0x78 },\r
+{0x88ca ,0x54 },\r
+{0x88cb ,0x12 },\r
+{0x88cc ,0x0a },\r
+{0x88cd ,0xe2 },\r
+{0x88ce ,0x78 },\r
+{0x88cf ,0x6a },\r
+{0x88d0 ,0x12 },\r
+{0x88d1 ,0x06 },\r
+{0x88d2 ,0xed },\r
+{0x88d3 ,0xd3 },\r
+{0x88d4 ,0x12 },\r
+{0x88d5 ,0x06 },\r
+{0x88d6 ,0xa6 },\r
+{0x88d7 ,0x40 },\r
+{0x88d8 ,0x0a },\r
+{0x88d9 ,0x78 },\r
+{0x88da ,0x54 },\r
+{0x88db ,0x12 },\r
+{0x88dc ,0x0a },\r
+{0x88dd ,0xe2 },\r
+{0x88de ,0x78 },\r
+{0x88df ,0x6a },\r
+{0x88e0 ,0x12 },\r
+{0x88e1 ,0x06 },\r
+{0x88e2 ,0xfa },\r
+{0x88e3 ,0x78 },\r
+{0x88e4 ,0x61 },\r
+{0x88e5 ,0xe6 },\r
+{0x88e6 ,0x90 },\r
+{0x88e7 ,0x60 },\r
+{0x88e8 ,0x01 },\r
+{0x88e9 ,0xf0 },\r
+{0x88ea ,0x78 },\r
+{0x88eb ,0x65 },\r
+{0x88ec ,0xe6 },\r
+{0x88ed ,0xa3 },\r
+{0x88ee ,0xf0 },\r
+{0x88ef ,0x78 },\r
+{0x88f0 ,0x69 },\r
+{0x88f1 ,0xe6 },\r
+{0x88f2 ,0xa3 },\r
+{0x88f3 ,0xf0 },\r
+{0x88f4 ,0x78 },\r
+{0x88f5 ,0x55 },\r
+{0x88f6 ,0xe6 },\r
+{0x88f7 ,0xa3 },\r
+{0x88f8 ,0xf0 },\r
+{0x88f9 ,0x7d },\r
+{0x88fa ,0x01 },\r
+{0x88fb ,0x78 },\r
+{0x88fc ,0x61 },\r
+{0x88fd ,0x12 },\r
+{0x88fe ,0x0a },\r
+{0x88ff ,0xfb },\r
+{0x8900 ,0x24 },\r
+{0x8901 ,0x01 },\r
+{0x8902 ,0x12 },\r
+{0x8903 ,0x0a },\r
+{0x8904 ,0xb8 },\r
+{0x8905 ,0x78 },\r
+{0x8906 ,0x65 },\r
+{0x8907 ,0x12 },\r
+{0x8908 ,0x0a },\r
+{0x8909 ,0xfb },\r
+{0x890a ,0x24 },\r
+{0x890b ,0x02 },\r
+{0x890c ,0x12 },\r
+{0x890d ,0x0a },\r
+{0x890e ,0xb8 },\r
+{0x890f ,0x78 },\r
+{0x8910 ,0x69 },\r
+{0x8911 ,0x12 },\r
+{0x8912 ,0x0a },\r
+{0x8913 ,0xfb },\r
+{0x8914 ,0x24 },\r
+{0x8915 ,0x03 },\r
+{0x8916 ,0x12 },\r
+{0x8917 ,0x0a },\r
+{0x8918 ,0xb8 },\r
+{0x8919 ,0x78 },\r
+{0x891a ,0x6d },\r
+{0x891b ,0x12 },\r
+{0x891c ,0x0a },\r
+{0x891d ,0xfb },\r
+{0x891e ,0x24 },\r
+{0x891f ,0x04 },\r
+{0x8920 ,0x12 },\r
+{0x8921 ,0x0a },\r
+{0x8922 ,0xb8 },\r
+{0x8923 ,0x0d },\r
+{0x8924 ,0xbd },\r
+{0x8925 ,0x05 },\r
+{0x8926 ,0xd4 },\r
+{0x8927 ,0x22 },\r
+{0x8928 ,0xc0 },\r
+{0x8929 ,0xe0 },\r
+{0x892a ,0xc0 },\r
+{0x892b ,0x83 },\r
+{0x892c ,0xc0 },\r
+{0x892d ,0x82 },\r
+{0x892e ,0xc0 },\r
+{0x892f ,0xd0 },\r
+{0x8930 ,0x90 },\r
+{0x8931 ,0x3f },\r
+{0x8932 ,0x0c },\r
+{0x8933 ,0xe0 },\r
+{0x8934 ,0xf5 },\r
+{0x8935 ,0x32 },\r
+{0x8936 ,0xe5 },\r
+{0x8937 ,0x32 },\r
+{0x8938 ,0x30 },\r
+{0x8939 ,0xe3 },\r
+{0x893a ,0x74 },\r
+{0x893b ,0x30 },\r
+{0x893c ,0x36 },\r
+{0x893d ,0x66 },\r
+{0x893e ,0x90 },\r
+{0x893f ,0x60 },\r
+{0x8940 ,0x19 },\r
+{0x8941 ,0xe0 },\r
+{0x8942 ,0xf5 },\r
+{0x8943 ,0x0a },\r
+{0x8944 ,0xa3 },\r
+{0x8945 ,0xe0 },\r
+{0x8946 ,0xf5 },\r
+{0x8947 ,0x0b },\r
+{0x8948 ,0x90 },\r
+{0x8949 ,0x60 },\r
+{0x894a ,0x1d },\r
+{0x894b ,0xe0 },\r
+{0x894c ,0xf5 },\r
+{0x894d ,0x14 },\r
+{0x894e ,0xa3 },\r
+{0x894f ,0xe0 },\r
+{0x8950 ,0xf5 },\r
+{0x8951 ,0x15 },\r
+{0x8952 ,0x90 },\r
+{0x8953 ,0x60 },\r
+{0x8954 ,0x21 },\r
+{0x8955 ,0xe0 },\r
+{0x8956 ,0xf5 },\r
+{0x8957 ,0x0c },\r
+{0x8958 ,0xa3 },\r
+{0x8959 ,0xe0 },\r
+{0x895a ,0xf5 },\r
+{0x895b ,0x0d },\r
+{0x895c ,0x90 },\r
+{0x895d ,0x60 },\r
+{0x895e ,0x29 },\r
+{0x895f ,0xe0 },\r
+{0x8960 ,0xf5 },\r
+{0x8961 ,0x0e },\r
+{0x8962 ,0xa3 },\r
+{0x8963 ,0xe0 },\r
+{0x8964 ,0xf5 },\r
+{0x8965 ,0x0f },\r
+{0x8966 ,0x90 },\r
+{0x8967 ,0x60 },\r
+{0x8968 ,0x31 },\r
+{0x8969 ,0xe0 },\r
+{0x896a ,0xf5 },\r
+{0x896b ,0x10 },\r
+{0x896c ,0xa3 },\r
+{0x896d ,0xe0 },\r
+{0x896e ,0xf5 },\r
+{0x896f ,0x11 },\r
+{0x8970 ,0x90 },\r
+{0x8971 ,0x60 },\r
+{0x8972 ,0x39 },\r
+{0x8973 ,0xe0 },\r
+{0x8974 ,0xf5 },\r
+{0x8975 ,0x12 },\r
+{0x8976 ,0xa3 },\r
+{0x8977 ,0xe0 },\r
+{0x8978 ,0xf5 },\r
+{0x8979 ,0x13 },\r
+{0x897a ,0x30 },\r
+{0x897b ,0x01 },\r
+{0x897c ,0x06 },\r
+{0x897d ,0x30 },\r
+{0x897e ,0x33 },\r
+{0x897f ,0x03 },\r
+{0x8980 ,0xd3 },\r
+{0x8981 ,0x80 },\r
+{0x8982 ,0x01 },\r
+{0x8983 ,0xc3 },\r
+{0x8984 ,0x92 },\r
+{0x8985 ,0x09 },\r
+{0x8986 ,0x30 },\r
+{0x8987 ,0x02 },\r
+{0x8988 ,0x06 },\r
+{0x8989 ,0x30 },\r
+{0x898a ,0x33 },\r
+{0x898b ,0x03 },\r
+{0x898c ,0xd3 },\r
+{0x898d ,0x80 },\r
+{0x898e ,0x01 },\r
+{0x898f ,0xc3 },\r
+{0x8990 ,0x92 },\r
+{0x8991 ,0x0a },\r
+{0x8992 ,0x30 },\r
+{0x8993 ,0x33 },\r
+{0x8994 ,0x0c },\r
+{0x8995 ,0x30 },\r
+{0x8996 ,0x03 },\r
+{0x8997 ,0x09 },\r
+{0x8998 ,0x20 },\r
+{0x8999 ,0x02 },\r
+{0x899a ,0x06 },\r
+{0x899b ,0x20 },\r
+{0x899c ,0x01 },\r
+{0x899d ,0x03 },\r
+{0x899e ,0xd3 },\r
+{0x899f ,0x80 },\r
+{0x89a0 ,0x01 },\r
+{0x89a1 ,0xc3 },\r
+{0x89a2 ,0x92 },\r
+{0x89a3 ,0x0b },\r
+{0x89a4 ,0x90 },\r
+{0x89a5 ,0x30 },\r
+{0x89a6 ,0x01 },\r
+{0x89a7 ,0xe0 },\r
+{0x89a8 ,0x44 },\r
+{0x89a9 ,0x40 },\r
+{0x89aa ,0xf0 },\r
+{0x89ab ,0xe0 },\r
+{0x89ac ,0x54 },\r
+{0x89ad ,0xbf },\r
+{0x89ae ,0xf0 },\r
+{0x89af ,0xe5 },\r
+{0x89b0 ,0x32 },\r
+{0x89b1 ,0x30 },\r
+{0x89b2 ,0xe1 },\r
+{0x89b3 ,0x14 },\r
+{0x89b4 ,0x30 },\r
+{0x89b5 ,0x34 },\r
+{0x89b6 ,0x11 },\r
+{0x89b7 ,0x90 },\r
+{0x89b8 ,0x30 },\r
+{0x89b9 ,0x22 },\r
+{0x89ba ,0xe0 },\r
+{0x89bb ,0xf5 },\r
+{0x89bc ,0x08 },\r
+{0x89bd ,0xe4 },\r
+{0x89be ,0xf0 },\r
+{0x89bf ,0x30 },\r
+{0x89c0 ,0x00 },\r
+{0x89c1 ,0x03 },\r
+{0x89c2 ,0xd3 },\r
+{0x89c3 ,0x80 },\r
+{0x89c4 ,0x01 },\r
+{0x89c5 ,0xc3 },\r
+{0x89c6 ,0x92 },\r
+{0x89c7 ,0x08 },\r
+{0x89c8 ,0xe5 },\r
+{0x89c9 ,0x32 },\r
+{0x89ca ,0x30 },\r
+{0x89cb ,0xe5 },\r
+{0x89cc ,0x12 },\r
+{0x89cd ,0x90 },\r
+{0x89ce ,0x56 },\r
+{0x89cf ,0xa1 },\r
+{0x89d0 ,0xe0 },\r
+{0x89d1 ,0xf5 },\r
+{0x89d2 ,0x09 },\r
+{0x89d3 ,0x30 },\r
+{0x89d4 ,0x31 },\r
+{0x89d5 ,0x09 },\r
+{0x89d6 ,0x30 },\r
+{0x89d7 ,0x05 },\r
+{0x89d8 ,0x03 },\r
+{0x89d9 ,0xd3 },\r
+{0x89da ,0x80 },\r
+{0x89db ,0x01 },\r
+{0x89dc ,0xc3 },\r
+{0x89dd ,0x92 },\r
+{0x89de ,0x0d },\r
+{0x89df ,0x90 },\r
+{0x89e0 ,0x3f },\r
+{0x89e1 ,0x0c },\r
+{0x89e2 ,0xe5 },\r
+{0x89e3 ,0x32 },\r
+{0x89e4 ,0xf0 },\r
+{0x89e5 ,0xd0 },\r
+{0x89e6 ,0xd0 },\r
+{0x89e7 ,0xd0 },\r
+{0x89e8 ,0x82 },\r
+{0x89e9 ,0xd0 },\r
+{0x89ea ,0x83 },\r
+{0x89eb ,0xd0 },\r
+{0x89ec ,0xe0 },\r
+{0x89ed ,0x32 },\r
+{0x89ee ,0x85 },\r
+{0x89ef ,0x08 },\r
+{0x89f0 ,0x41 },\r
+{0x89f1 ,0x90 },\r
+{0x89f2 ,0x30 },\r
+{0x89f3 ,0x24 },\r
+{0x89f4 ,0xe0 },\r
+{0x89f5 ,0xf5 },\r
+{0x89f6 ,0x3d },\r
+{0x89f7 ,0xa3 },\r
+{0x89f8 ,0xe0 },\r
+{0x89f9 ,0xf5 },\r
+{0x89fa ,0x3e },\r
+{0x89fb ,0xa3 },\r
+{0x89fc ,0xe0 },\r
+{0x89fd ,0xf5 },\r
+{0x89fe ,0x3f },\r
+{0x89ff ,0xa3 },\r
+{0x8a00 ,0xe0 },\r
+{0x8a01 ,0xf5 },\r
+{0x8a02 ,0x40 },\r
+{0x8a03 ,0xa3 },\r
+{0x8a04 ,0xe0 },\r
+{0x8a05 ,0xf5 },\r
+{0x8a06 ,0x3c },\r
+{0x8a07 ,0xd2 },\r
+{0x8a08 ,0x34 },\r
+{0x8a09 ,0xe5 },\r
+{0x8a0a ,0x41 },\r
+{0x8a0b ,0x12 },\r
+{0x8a0c ,0x07 },\r
+{0x8a0d ,0x12 },\r
+{0x8a0e ,0x0a },\r
+{0x8a0f ,0x33 },\r
+{0x8a10 ,0x03 },\r
+{0x8a11 ,0x0a },\r
+{0x8a12 ,0x40 },\r
+{0x8a13 ,0x04 },\r
+{0x8a14 ,0x0a },\r
+{0x8a15 ,0x51 },\r
+{0x8a16 ,0x05 },\r
+{0x8a17 ,0x0a },\r
+{0x8a18 ,0x54 },\r
+{0x8a19 ,0x06 },\r
+{0x8a1a ,0x0a },\r
+{0x8a1b ,0x5d },\r
+{0x8a1c ,0x08 },\r
+{0x8a1d ,0x0a },\r
+{0x8a1e ,0x6d },\r
+{0x8a1f ,0x12 },\r
+{0x8a20 ,0x0a },\r
+{0x8a21 ,0x72 },\r
+{0x8a22 ,0x1a },\r
+{0x8a23 ,0x0a },\r
+{0x8a24 ,0x7d },\r
+{0x8a25 ,0x1b },\r
+{0x8a26 ,0x0a },\r
+{0x8a27 ,0x6d },\r
+{0x8a28 ,0x80 },\r
+{0x8a29 ,0x0a },\r
+{0x8a2a ,0x6d },\r
+{0x8a2b ,0x81 },\r
+{0x8a2c ,0x0a },\r
+{0x8a2d ,0x85 },\r
+{0x8a2e ,0xec },\r
+{0x8a2f ,0x00 },\r
+{0x8a30 ,0x00 },\r
+{0x8a31 ,0x0a },\r
+{0x8a32 ,0xa3 },\r
+{0x8a33 ,0x12 },\r
+{0x8a34 ,0x0f },\r
+{0x8a35 ,0xd2 },\r
+{0x8a36 ,0xd2 },\r
+{0x8a37 ,0x36 },\r
+{0x8a38 ,0xd2 },\r
+{0x8a39 ,0x01 },\r
+{0x8a3a ,0xc2 },\r
+{0x8a3b ,0x02 },\r
+{0x8a3c ,0x12 },\r
+{0x8a3d ,0x0f },\r
+{0x8a3e ,0xd7 },\r
+{0x8a3f ,0x22 },\r
+{0x8a40 ,0xd2 },\r
+{0x8a41 ,0x33 },\r
+{0x8a42 ,0xd2 },\r
+{0x8a43 ,0x36 },\r
+{0x8a44 ,0xe5 },\r
+{0x8a45 ,0x3d },\r
+{0x8a46 ,0xd3 },\r
+{0x8a47 ,0x94 },\r
+{0x8a48 ,0x00 },\r
+{0x8a49 ,0x40 },\r
+{0x8a4a ,0x03 },\r
+{0x8a4b ,0x12 },\r
+{0x8a4c ,0x0f },\r
+{0x8a4d ,0xd2 },\r
+{0x8a4e ,0xd2 },\r
+{0x8a4f ,0x03 },\r
+{0x8a50 ,0x22 },\r
+{0x8a51 ,0xd2 },\r
+{0x8a52 ,0x03 },\r
+{0x8a53 ,0x22 },\r
+{0x8a54 ,0xc2 },\r
+{0x8a55 ,0x03 },\r
+{0x8a56 ,0x20 },\r
+{0x8a57 ,0x01 },\r
+{0x8a58 ,0x4a },\r
+{0x8a59 ,0x30 },\r
+{0x8a5a ,0x02 },\r
+{0x8a5b ,0x2c },\r
+{0x8a5c ,0x22 },\r
+{0x8a5d ,0xc2 },\r
+{0x8a5e ,0x01 },\r
+{0x8a5f ,0xc2 },\r
+{0x8a60 ,0x02 },\r
+{0x8a61 ,0xc2 },\r
+{0x8a62 ,0x03 },\r
+{0x8a63 ,0x12 },\r
+{0x8a64 ,0x0d },\r
+{0x8a65 ,0x39 },\r
+{0x8a66 ,0x75 },\r
+{0x8a67 ,0x1e },\r
+{0x8a68 ,0x70 },\r
+{0x8a69 ,0xd2 },\r
+{0x8a6a ,0x35 },\r
+{0x8a6b ,0x80 },\r
+{0x8a6c ,0x1b },\r
+{0x8a6d ,0x12 },\r
+{0x8a6e ,0x0b },\r
+{0x8a6f ,0xcc },\r
+{0x8a70 ,0x80 },\r
+{0x8a71 ,0x16 },\r
+{0x8a72 ,0x85 },\r
+{0x8a73 ,0x40 },\r
+{0x8a74 ,0x4a },\r
+{0x8a75 ,0x85 },\r
+{0x8a76 ,0x3c },\r
+{0x8a77 ,0x4b },\r
+{0x8a78 ,0x12 },\r
+{0x8a79 ,0x0b },\r
+{0x8a7a ,0x39 },\r
+{0x8a7b ,0x80 },\r
+{0x8a7c ,0x0b },\r
+{0x8a7d ,0x85 },\r
+{0x8a7e ,0x4a },\r
+{0x8a7f ,0x40 },\r
+{0x8a80 ,0x85 },\r
+{0x8a81 ,0x4b },\r
+{0x8a82 ,0x3c },\r
+{0x8a83 ,0x80 },\r
+{0x8a84 ,0x03 },\r
+{0x8a85 ,0x12 },\r
+{0x8a86 ,0x0f },\r
+{0x8a87 ,0x00 },\r
+{0x8a88 ,0x90 },\r
+{0x8a89 ,0x30 },\r
+{0x8a8a ,0x24 },\r
+{0x8a8b ,0xe5 },\r
+{0x8a8c ,0x3d },\r
+{0x8a8d ,0xf0 },\r
+{0x8a8e ,0xa3 },\r
+{0x8a8f ,0xe5 },\r
+{0x8a90 ,0x3e },\r
+{0x8a91 ,0xf0 },\r
+{0x8a92 ,0xa3 },\r
+{0x8a93 ,0xe5 },\r
+{0x8a94 ,0x3f },\r
+{0x8a95 ,0xf0 },\r
+{0x8a96 ,0xa3 },\r
+{0x8a97 ,0xe5 },\r
+{0x8a98 ,0x40 },\r
+{0x8a99 ,0xf0 },\r
+{0x8a9a ,0xa3 },\r
+{0x8a9b ,0xe5 },\r
+{0x8a9c ,0x3c },\r
+{0x8a9d ,0xf0 },\r
+{0x8a9e ,0x90 },\r
+{0x8a9f ,0x30 },\r
+{0x8aa0 ,0x23 },\r
+{0x8aa1 ,0xe4 },\r
+{0x8aa2 ,0xf0 },\r
+{0x8aa3 ,0x22 },\r
+{0x8aa4 ,0xe0 },\r
+{0x8aa5 ,0xa3 },\r
+{0x8aa6 ,0xe0 },\r
+{0x8aa7 ,0x75 },\r
+{0x8aa8 ,0xf0 },\r
+{0x8aa9 ,0x02 },\r
+{0x8aaa ,0xa4 },\r
+{0x8aab ,0xff },\r
+{0x8aac ,0xae },\r
+{0x8aad ,0xf0 },\r
+{0x8aae ,0xc3 },\r
+{0x8aaf ,0x08 },\r
+{0x8ab0 ,0xe6 },\r
+{0x8ab1 ,0x9f },\r
+{0x8ab2 ,0xf6 },\r
+{0x8ab3 ,0x18 },\r
+{0x8ab4 ,0xe6 },\r
+{0x8ab5 ,0x9e },\r
+{0x8ab6 ,0xf6 },\r
+{0x8ab7 ,0x22 },\r
+{0x8ab8 ,0xff },\r
+{0x8ab9 ,0xe5 },\r
+{0x8aba ,0xf0 },\r
+{0x8abb ,0x34 },\r
+{0x8abc ,0x60 },\r
+{0x8abd ,0x8f },\r
+{0x8abe ,0x82 },\r
+{0x8abf ,0xf5 },\r
+{0x8ac0 ,0x83 },\r
+{0x8ac1 ,0xec },\r
+{0x8ac2 ,0xf0 },\r
+{0x8ac3 ,0x22 },\r
+{0x8ac4 ,0x78 },\r
+{0x8ac5 ,0x52 },\r
+{0x8ac6 ,0x7e },\r
+{0x8ac7 ,0x00 },\r
+{0x8ac8 ,0xe6 },\r
+{0x8ac9 ,0xfc },\r
+{0x8aca ,0x08 },\r
+{0x8acb ,0xe6 },\r
+{0x8acc ,0xfd },\r
+{0x8acd ,0x02 },\r
+{0x8ace ,0x05 },\r
+{0x8acf ,0x22 },\r
+{0x8ad0 ,0xe4 },\r
+{0x8ad1 ,0xfc },\r
+{0x8ad2 ,0xfd },\r
+{0x8ad3 ,0x12 },\r
+{0x8ad4 ,0x06 },\r
+{0x8ad5 ,0xfa },\r
+{0x8ad6 ,0x78 },\r
+{0x8ad7 ,0x5c },\r
+{0x8ad8 ,0xe6 },\r
+{0x8ad9 ,0xc3 },\r
+{0x8ada ,0x13 },\r
+{0x8adb ,0xfe },\r
+{0x8adc ,0x08 },\r
+{0x8add ,0xe6 },\r
+{0x8ade ,0x13 },\r
+{0x8adf ,0x22 },\r
+{0x8ae0 ,0x78 },\r
+{0x8ae1 ,0x52 },\r
+{0x8ae2 ,0xe6 },\r
+{0x8ae3 ,0xfe },\r
+{0x8ae4 ,0x08 },\r
+{0x8ae5 ,0xe6 },\r
+{0x8ae6 ,0xff },\r
+{0x8ae7 ,0xe4 },\r
+{0x8ae8 ,0xfc },\r
+{0x8ae9 ,0xfd },\r
+{0x8aea ,0x22 },\r
+{0x8aeb ,0xe7 },\r
+{0x8aec ,0xc4 },\r
+{0x8aed ,0xf8 },\r
+{0x8aee ,0x54 },\r
+{0x8aef ,0xf0 },\r
+{0x8af0 ,0xc8 },\r
+{0x8af1 ,0x68 },\r
+{0x8af2 ,0xf7 },\r
+{0x8af3 ,0x09 },\r
+{0x8af4 ,0xe7 },\r
+{0x8af5 ,0xc4 },\r
+{0x8af6 ,0x54 },\r
+{0x8af7 ,0x0f },\r
+{0x8af8 ,0x48 },\r
+{0x8af9 ,0xf7 },\r
+{0x8afa ,0x22 },\r
+{0x8afb ,0xe6 },\r
+{0x8afc ,0xfc },\r
+{0x8afd ,0xed },\r
+{0x8afe ,0x75 },\r
+{0x8aff ,0xf0 },\r
+{0x8b00 ,0x04 },\r
+{0x8b01 ,0xa4 },\r
+{0x8b02 ,0x22 },\r
+{0x8b03 ,0x12 },\r
+{0x8b04 ,0x06 },\r
+{0x8b05 ,0xdd },\r
+{0x8b06 ,0x8f },\r
+{0x8b07 ,0x48 },\r
+{0x8b08 ,0x8e },\r
+{0x8b09 ,0x47 },\r
+{0x8b0a ,0x8d },\r
+{0x8b0b ,0x46 },\r
+{0x8b0c ,0x8c },\r
+{0x8b0d ,0x45 },\r
+{0x8b0e ,0x22 },\r
+{0x8b0f ,0xe0 },\r
+{0x8b10 ,0xfe },\r
+{0x8b11 ,0xa3 },\r
+{0x8b12 ,0xe0 },\r
+{0x8b13 ,0xfd },\r
+{0x8b14 ,0xee },\r
+{0x8b15 ,0xf6 },\r
+{0x8b16 ,0xed },\r
+{0x8b17 ,0x08 },\r
+{0x8b18 ,0xf6 },\r
+{0x8b19 ,0x22 },\r
+{0x8b1a ,0x13 },\r
+{0x8b1b ,0xff },\r
+{0x8b1c ,0xc3 },\r
+{0x8b1d ,0xe6 },\r
+{0x8b1e ,0x9f },\r
+{0x8b1f ,0xff },\r
+{0x8b20 ,0x18 },\r
+{0x8b21 ,0xe6 },\r
+{0x8b22 ,0x9e },\r
+{0x8b23 ,0xfe },\r
+{0x8b24 ,0x22 },\r
+{0x8b25 ,0xfb },\r
+{0x8b26 ,0xd3 },\r
+{0x8b27 ,0xed },\r
+{0x8b28 ,0x9b },\r
+{0x8b29 ,0x74 },\r
+{0x8b2a ,0x80 },\r
+{0x8b2b ,0xf8 },\r
+{0x8b2c ,0x6c },\r
+{0x8b2d ,0x98 },\r
+{0x8b2e ,0x22 },\r
+{0x8b2f ,0xe6 },\r
+{0x8b30 ,0xc3 },\r
+{0x8b31 ,0x13 },\r
+{0x8b32 ,0xf7 },\r
+{0x8b33 ,0x08 },\r
+{0x8b34 ,0xe6 },\r
+{0x8b35 ,0x13 },\r
+{0x8b36 ,0x09 },\r
+{0x8b37 ,0xf7 },\r
+{0x8b38 ,0x22 },\r
+{0x8b39 ,0x90 },\r
+{0x8b3a ,0x0e },\r
+{0x8b3b ,0x7e },\r
+{0x8b3c ,0xe4 },\r
+{0x8b3d ,0x93 },\r
+{0x8b3e ,0xfe },\r
+{0x8b3f ,0x74 },\r
+{0x8b40 ,0x01 },\r
+{0x8b41 ,0x93 },\r
+{0x8b42 ,0xff },\r
+{0x8b43 ,0xc3 },\r
+{0x8b44 ,0x90 },\r
+{0x8b45 ,0x0e },\r
+{0x8b46 ,0x7c },\r
+{0x8b47 ,0x74 },\r
+{0x8b48 ,0x01 },\r
+{0x8b49 ,0x93 },\r
+{0x8b4a ,0x9f },\r
+{0x8b4b ,0xff },\r
+{0x8b4c ,0xe4 },\r
+{0x8b4d ,0x93 },\r
+{0x8b4e ,0x9e },\r
+{0x8b4f ,0xfe },\r
+{0x8b50 ,0xe4 },\r
+{0x8b51 ,0x8f },\r
+{0x8b52 ,0x3b },\r
+{0x8b53 ,0x8e },\r
+{0x8b54 ,0x3a },\r
+{0x8b55 ,0xf5 },\r
+{0x8b56 ,0x39 },\r
+{0x8b57 ,0xf5 },\r
+{0x8b58 ,0x38 },\r
+{0x8b59 ,0xab },\r
+{0x8b5a ,0x3b },\r
+{0x8b5b ,0xaa },\r
+{0x8b5c ,0x3a },\r
+{0x8b5d ,0xa9 },\r
+{0x8b5e ,0x39 },\r
+{0x8b5f ,0xa8 },\r
+{0x8b60 ,0x38 },\r
+{0x8b61 ,0xaf },\r
+{0x8b62 ,0x4b },\r
+{0x8b63 ,0xfc },\r
+{0x8b64 ,0xfd },\r
+{0x8b65 ,0xfe },\r
+{0x8b66 ,0x12 },\r
+{0x8b67 ,0x05 },\r
+{0x8b68 ,0x89 },\r
+{0x8b69 ,0x12 },\r
+{0x8b6a ,0x0f },\r
+{0x8b6b ,0x91 },\r
+{0x8b6c ,0xe4 },\r
+{0x8b6d ,0x7b },\r
+{0x8b6e ,0xff },\r
+{0x8b6f ,0xfa },\r
+{0x8b70 ,0xf9 },\r
+{0x8b71 ,0xf8 },\r
+{0x8b72 ,0x12 },\r
+{0x8b73 ,0x06 },\r
+{0x8b74 ,0x14 },\r
+{0x8b75 ,0x12 },\r
+{0x8b76 ,0x0f },\r
+{0x8b77 ,0x91 },\r
+{0x8b78 ,0x90 },\r
+{0x8b79 ,0x0e },\r
+{0x8b7a ,0x69 },\r
+{0x8b7b ,0xe4 },\r
+{0x8b7c ,0x12 },\r
+{0x8b7d ,0x0f },\r
+{0x8b7e ,0xa6 },\r
+{0x8b7f ,0x12 },\r
+{0x8b80 ,0x0f },\r
+{0x8b81 ,0x91 },\r
+{0x8b82 ,0xe4 },\r
+{0x8b83 ,0x85 },\r
+{0x8b84 ,0x4a },\r
+{0x8b85 ,0x37 },\r
+{0x8b86 ,0xf5 },\r
+{0x8b87 ,0x36 },\r
+{0x8b88 ,0xf5 },\r
+{0x8b89 ,0x35 },\r
+{0x8b8a ,0xf5 },\r
+{0x8b8b ,0x34 },\r
+{0x8b8c ,0xaf },\r
+{0x8b8d ,0x37 },\r
+{0x8b8e ,0xae },\r
+{0x8b8f ,0x36 },\r
+{0x8b90 ,0xad },\r
+{0x8b91 ,0x35 },\r
+{0x8b92 ,0xac },\r
+{0x8b93 ,0x34 },\r
+{0x8b94 ,0xa3 },\r
+{0x8b95 ,0x12 },\r
+{0x8b96 ,0x0f },\r
+{0x8b97 ,0xa6 },\r
+{0x8b98 ,0x8f },\r
+{0x8b99 ,0x37 },\r
+{0x8b9a ,0x8e },\r
+{0x8b9b ,0x36 },\r
+{0x8b9c ,0x8d },\r
+{0x8b9d ,0x35 },\r
+{0x8b9e ,0x8c },\r
+{0x8b9f ,0x34 },\r
+{0x8ba0 ,0xe5 },\r
+{0x8ba1 ,0x3b },\r
+{0x8ba2 ,0x45 },\r
+{0x8ba3 ,0x37 },\r
+{0x8ba4 ,0xf5 },\r
+{0x8ba5 ,0x3b },\r
+{0x8ba6 ,0xe5 },\r
+{0x8ba7 ,0x3a },\r
+{0x8ba8 ,0x45 },\r
+{0x8ba9 ,0x36 },\r
+{0x8baa ,0xf5 },\r
+{0x8bab ,0x3a },\r
+{0x8bac ,0xe5 },\r
+{0x8bad ,0x39 },\r
+{0x8bae ,0x45 },\r
+{0x8baf ,0x35 },\r
+{0x8bb0 ,0xf5 },\r
+{0x8bb1 ,0x39 },\r
+{0x8bb2 ,0xe5 },\r
+{0x8bb3 ,0x38 },\r
+{0x8bb4 ,0x45 },\r
+{0x8bb5 ,0x34 },\r
+{0x8bb6 ,0xf5 },\r
+{0x8bb7 ,0x38 },\r
+{0x8bb8 ,0xe4 },\r
+{0x8bb9 ,0xf5 },\r
+{0x8bba ,0x22 },\r
+{0x8bbb ,0xf5 },\r
+{0x8bbc ,0x23 },\r
+{0x8bbd ,0x85 },\r
+{0x8bbe ,0x3b },\r
+{0x8bbf ,0x31 },\r
+{0x8bc0 ,0x85 },\r
+{0x8bc1 ,0x3a },\r
+{0x8bc2 ,0x30 },\r
+{0x8bc3 ,0x85 },\r
+{0x8bc4 ,0x39 },\r
+{0x8bc5 ,0x2f },\r
+{0x8bc6 ,0x85 },\r
+{0x8bc7 ,0x38 },\r
+{0x8bc8 ,0x2e },\r
+{0x8bc9 ,0x02 },\r
+{0x8bca ,0x0f },\r
+{0x8bcb ,0x63 },\r
+{0x8bcc ,0xe5 },\r
+{0x8bcd ,0x3c },\r
+{0x8bce ,0xd3 },\r
+{0x8bcf ,0x94 },\r
+{0x8bd0 ,0x01 },\r
+{0x8bd1 ,0x40 },\r
+{0x8bd2 ,0x0b },\r
+{0x8bd3 ,0x90 },\r
+{0x8bd4 ,0x0e },\r
+{0x8bd5 ,0x88 },\r
+{0x8bd6 ,0x12 },\r
+{0x8bd7 ,0x0b },\r
+{0x8bd8 ,0x03 },\r
+{0x8bd9 ,0x90 },\r
+{0x8bda ,0x0e },\r
+{0x8bdb ,0x86 },\r
+{0x8bdc ,0x80 },\r
+{0x8bdd ,0x09 },\r
+{0x8bde ,0x90 },\r
+{0x8bdf ,0x0e },\r
+{0x8be0 ,0x82 },\r
+{0x8be1 ,0x12 },\r
+{0x8be2 ,0x0b },\r
+{0x8be3 ,0x03 },\r
+{0x8be4 ,0x90 },\r
+{0x8be5 ,0x0e },\r
+{0x8be6 ,0x80 },\r
+{0x8be7 ,0xe4 },\r
+{0x8be8 ,0x93 },\r
+{0x8be9 ,0xf5 },\r
+{0x8bea ,0x44 },\r
+{0x8beb ,0xa3 },\r
+{0x8bec ,0xe4 },\r
+{0x8bed ,0x93 },\r
+{0x8bee ,0xf5 },\r
+{0x8bef ,0x43 },\r
+{0x8bf0 ,0xe5 },\r
+{0x8bf1 ,0x3c },\r
+{0x8bf2 ,0xd3 },\r
+{0x8bf3 ,0x94 },\r
+{0x8bf4 ,0x00 },\r
+{0x8bf5 ,0x40 },\r
+{0x8bf6 ,0x06 },\r
+{0x8bf7 ,0x85 },\r
+{0x8bf8 ,0x3d },\r
+{0x8bf9 ,0x45 },\r
+{0x8bfa ,0x85 },\r
+{0x8bfb ,0x3e },\r
+{0x8bfc ,0x46 },\r
+{0x8bfd ,0xe5 },\r
+{0x8bfe ,0x47 },\r
+{0x8bff ,0xc3 },\r
+{0x8c00 ,0x13 },\r
+{0x8c01 ,0xff },\r
+{0x8c02 ,0xe5 },\r
+{0x8c03 ,0x45 },\r
+{0x8c04 ,0xc3 },\r
+{0x8c05 ,0x9f },\r
+{0x8c06 ,0x50 },\r
+{0x8c07 ,0x02 },\r
+{0x8c08 ,0x8f },\r
+{0x8c09 ,0x45 },\r
+{0x8c0a ,0xe5 },\r
+{0x8c0b ,0x48 },\r
+{0x8c0c ,0xc3 },\r
+{0x8c0d ,0x13 },\r
+{0x8c0e ,0xff },\r
+{0x8c0f ,0xe5 },\r
+{0x8c10 ,0x46 },\r
+{0x8c11 ,0xc3 },\r
+{0x8c12 ,0x9f },\r
+{0x8c13 ,0x50 },\r
+{0x8c14 ,0x02 },\r
+{0x8c15 ,0x8f },\r
+{0x8c16 ,0x46 },\r
+{0x8c17 ,0xe5 },\r
+{0x8c18 ,0x47 },\r
+{0x8c19 ,0xc3 },\r
+{0x8c1a ,0x13 },\r
+{0x8c1b ,0xff },\r
+{0x8c1c ,0xfd },\r
+{0x8c1d ,0xe5 },\r
+{0x8c1e ,0x45 },\r
+{0x8c1f ,0x2d },\r
+{0x8c20 ,0xfd },\r
+{0x8c21 ,0xe4 },\r
+{0x8c22 ,0x33 },\r
+{0x8c23 ,0xfc },\r
+{0x8c24 ,0xe5 },\r
+{0x8c25 ,0x44 },\r
+{0x8c26 ,0x12 },\r
+{0x8c27 ,0x0b },\r
+{0x8c28 ,0x25 },\r
+{0x8c29 ,0x40 },\r
+{0x8c2a ,0x05 },\r
+{0x8c2b ,0xe5 },\r
+{0x8c2c ,0x44 },\r
+{0x8c2d ,0x9f },\r
+{0x8c2e ,0xf5 },\r
+{0x8c2f ,0x45 },\r
+{0x8c30 ,0xe5 },\r
+{0x8c31 ,0x48 },\r
+{0x8c32 ,0xc3 },\r
+{0x8c33 ,0x13 },\r
+{0x8c34 ,0xff },\r
+{0x8c35 ,0xfd },\r
+{0x8c36 ,0xe5 },\r
+{0x8c37 ,0x46 },\r
+{0x8c38 ,0x2d },\r
+{0x8c39 ,0xfd },\r
+{0x8c3a ,0xe4 },\r
+{0x8c3b ,0x33 },\r
+{0x8c3c ,0xfc },\r
+{0x8c3d ,0xe5 },\r
+{0x8c3e ,0x43 },\r
+{0x8c3f ,0x12 },\r
+{0x8c40 ,0x0b },\r
+{0x8c41 ,0x25 },\r
+{0x8c42 ,0x40 },\r
+{0x8c43 ,0x05 },\r
+{0x8c44 ,0xe5 },\r
+{0x8c45 ,0x43 },\r
+{0x8c46 ,0x9f },\r
+{0x8c47 ,0xf5 },\r
+{0x8c48 ,0x46 },\r
+{0x8c49 ,0x02 },\r
+{0x8c4a ,0x07 },\r
+{0x8c4b ,0x38 },\r
+{0x8c4c ,0xad },\r
+{0x8c4d ,0x39 },\r
+{0x8c4e ,0xac },\r
+{0x8c4f ,0x38 },\r
+{0x8c50 ,0xfa },\r
+{0x8c51 ,0xf9 },\r
+{0x8c52 ,0xf8 },\r
+{0x8c53 ,0x12 },\r
+{0x8c54 ,0x05 },\r
+{0x8c55 ,0x89 },\r
+{0x8c56 ,0x8f },\r
+{0x8c57 ,0x3b },\r
+{0x8c58 ,0x8e },\r
+{0x8c59 ,0x3a },\r
+{0x8c5a ,0x8d },\r
+{0x8c5b ,0x39 },\r
+{0x8c5c ,0x8c },\r
+{0x8c5d ,0x38 },\r
+{0x8c5e ,0xab },\r
+{0x8c5f ,0x37 },\r
+{0x8c60 ,0xaa },\r
+{0x8c61 ,0x36 },\r
+{0x8c62 ,0xa9 },\r
+{0x8c63 ,0x35 },\r
+{0x8c64 ,0xa8 },\r
+{0x8c65 ,0x34 },\r
+{0x8c66 ,0x22 },\r
+{0x8c67 ,0x90 },\r
+{0x8c68 ,0x0e },\r
+{0x8c69 ,0x8c },\r
+{0x8c6a ,0xe4 },\r
+{0x8c6b ,0x93 },\r
+{0x8c6c ,0x25 },\r
+{0x8c6d ,0xe0 },\r
+{0x8c6e ,0x24 },\r
+{0x8c6f ,0x0a },\r
+{0x8c70 ,0xf8 },\r
+{0x8c71 ,0xe6 },\r
+{0x8c72 ,0xfe },\r
+{0x8c73 ,0x08 },\r
+{0x8c74 ,0xe6 },\r
+{0x8c75 ,0xff },\r
+{0x8c76 ,0x22 },\r
+{0x8c77 ,0x93 },\r
+{0x8c78 ,0xff },\r
+{0x8c79 ,0xe4 },\r
+{0x8c7a ,0xfc },\r
+{0x8c7b ,0xfd },\r
+{0x8c7c ,0xfe },\r
+{0x8c7d ,0x12 },\r
+{0x8c7e ,0x05 },\r
+{0x8c7f ,0x89 },\r
+{0x8c80 ,0x8f },\r
+{0x8c81 ,0x37 },\r
+{0x8c82 ,0x8e },\r
+{0x8c83 ,0x36 },\r
+{0x8c84 ,0x8d },\r
+{0x8c85 ,0x35 },\r
+{0x8c86 ,0x8c },\r
+{0x8c87 ,0x34 },\r
+{0x8c88 ,0x22 },\r
+{0x8c89 ,0xe6 },\r
+{0x8c8a ,0xfe },\r
+{0x8c8b ,0x08 },\r
+{0x8c8c ,0xe6 },\r
+{0x8c8d ,0xff },\r
+{0x8c8e ,0xe4 },\r
+{0x8c8f ,0x8f },\r
+{0x8c90 ,0x37 },\r
+{0x8c91 ,0x8e },\r
+{0x8c92 ,0x36 },\r
+{0x8c93 ,0xf5 },\r
+{0x8c94 ,0x35 },\r
+{0x8c95 ,0xf5 },\r
+{0x8c96 ,0x34 },\r
+{0x8c97 ,0x22 },\r
+{0x8c98 ,0xef },\r
+{0x8c99 ,0x25 },\r
+{0x8c9a ,0xe0 },\r
+{0x8c9b ,0x24 },\r
+{0x8c9c ,0x4e },\r
+{0x8c9d ,0xf8 },\r
+{0x8c9e ,0xe6 },\r
+{0x8c9f ,0xfc },\r
+{0x8ca0 ,0x08 },\r
+{0x8ca1 ,0xe6 },\r
+{0x8ca2 ,0xfd },\r
+{0x8ca3 ,0x22 },\r
+{0x8ca4 ,0xd3 },\r
+{0x8ca5 ,0x79 },\r
+{0x8ca6 ,0x81 },\r
+{0x8ca7 ,0xe7 },\r
+{0x8ca8 ,0x78 },\r
+{0x8ca9 ,0x7f },\r
+{0x8caa ,0x96 },\r
+{0x8cab ,0x19 },\r
+{0x8cac ,0xe7 },\r
+{0x8cad ,0x18 },\r
+{0x8cae ,0x96 },\r
+{0x8caf ,0x22 },\r
+{0x8cb0 ,0x78 },\r
+{0x8cb1 ,0x89 },\r
+{0x8cb2 ,0xef },\r
+{0x8cb3 ,0x26 },\r
+{0x8cb4 ,0xf6 },\r
+{0x8cb5 ,0x18 },\r
+{0x8cb6 ,0xe4 },\r
+{0x8cb7 ,0x36 },\r
+{0x8cb8 ,0xf6 },\r
+{0x8cb9 ,0x22 },\r
+{0x8cba ,0xe4 },\r
+{0x8cbb ,0x8f },\r
+{0x8cbc ,0x3b },\r
+{0x8cbd ,0x8e },\r
+{0x8cbe ,0x3a },\r
+{0x8cbf ,0xf5 },\r
+{0x8cc0 ,0x39 },\r
+{0x8cc1 ,0xf5 },\r
+{0x8cc2 ,0x38 },\r
+{0x8cc3 ,0x22 },\r
+{0x8cc4 ,0x75 },\r
+{0x8cc5 ,0x89 },\r
+{0x8cc6 ,0x03 },\r
+{0x8cc7 ,0x75 },\r
+{0x8cc8 ,0xa8 },\r
+{0x8cc9 ,0x01 },\r
+{0x8cca ,0x75 },\r
+{0x8ccb ,0xb8 },\r
+{0x8ccc ,0x04 },\r
+{0x8ccd ,0x75 },\r
+{0x8cce ,0x34 },\r
+{0x8ccf ,0xff },\r
+{0x8cd0 ,0x75 },\r
+{0x8cd1 ,0x35 },\r
+{0x8cd2 ,0x0e },\r
+{0x8cd3 ,0x75 },\r
+{0x8cd4 ,0x36 },\r
+{0x8cd5 ,0x15 },\r
+{0x8cd6 ,0x75 },\r
+{0x8cd7 ,0x37 },\r
+{0x8cd8 ,0x0d },\r
+{0x8cd9 ,0x12 },\r
+{0x8cda ,0x0d },\r
+{0x8cdb ,0xaa },\r
+{0x8cdc ,0x12 },\r
+{0x8cdd ,0x00 },\r
+{0x8cde ,0x09 },\r
+{0x8cdf ,0x12 },\r
+{0x8ce0 ,0x0b },\r
+{0x8ce1 ,0xcc },\r
+{0x8ce2 ,0x12 },\r
+{0x8ce3 ,0x00 },\r
+{0x8ce4 ,0x06 },\r
+{0x8ce5 ,0xd2 },\r
+{0x8ce6 ,0x00 },\r
+{0x8ce7 ,0xd2 },\r
+{0x8ce8 ,0x34 },\r
+{0x8ce9 ,0xd2 },\r
+{0x8cea ,0xaf },\r
+{0x8ceb ,0x75 },\r
+{0x8cec ,0x34 },\r
+{0x8ced ,0xff },\r
+{0x8cee ,0x75 },\r
+{0x8cef ,0x35 },\r
+{0x8cf0 ,0x0e },\r
+{0x8cf1 ,0x75 },\r
+{0x8cf2 ,0x36 },\r
+{0x8cf3 ,0x49 },\r
+{0x8cf4 ,0x75 },\r
+{0x8cf5 ,0x37 },\r
+{0x8cf6 ,0x03 },\r
+{0x8cf7 ,0x12 },\r
+{0x8cf8 ,0x0d },\r
+{0x8cf9 ,0xaa },\r
+{0x8cfa ,0x30 },\r
+{0x8cfb ,0x08 },\r
+{0x8cfc ,0x09 },\r
+{0x8cfd ,0xc2 },\r
+{0x8cfe ,0x34 },\r
+{0x8cff ,0x12 },\r
+{0x8d00 ,0x09 },\r
+{0x8d01 ,0xee },\r
+{0x8d02 ,0xc2 },\r
+{0x8d03 ,0x08 },\r
+{0x8d04 ,0xd2 },\r
+{0x8d05 ,0x34 },\r
+{0x8d06 ,0x30 },\r
+{0x8d07 ,0x0b },\r
+{0x8d08 ,0x09 },\r
+{0x8d09 ,0xc2 },\r
+{0x8d0a ,0x36 },\r
+{0x8d0b ,0x12 },\r
+{0x8d0c ,0x00 },\r
+{0x8d0d ,0x0e },\r
+{0x8d0e ,0xc2 },\r
+{0x8d0f ,0x0b },\r
+{0x8d10 ,0xd2 },\r
+{0x8d11 ,0x36 },\r
+{0x8d12 ,0x30 },\r
+{0x8d13 ,0x09 },\r
+{0x8d14 ,0x09 },\r
+{0x8d15 ,0xc2 },\r
+{0x8d16 ,0x36 },\r
+{0x8d17 ,0x12 },\r
+{0x8d18 ,0x02 },\r
+{0x8d19 ,0xa7 },\r
+{0x8d1a ,0xc2 },\r
+{0x8d1b ,0x09 },\r
+{0x8d1c ,0xd2 },\r
+{0x8d1d ,0x36 },\r
+{0x8d1e ,0x30 },\r
+{0x8d1f ,0x0e },\r
+{0x8d20 ,0x03 },\r
+{0x8d21 ,0x12 },\r
+{0x8d22 ,0x07 },\r
+{0x8d23 ,0x38 },\r
+{0x8d24 ,0x30 },\r
+{0x8d25 ,0x35 },\r
+{0x8d26 ,0xd3 },\r
+{0x8d27 ,0x90 },\r
+{0x8d28 ,0x30 },\r
+{0x8d29 ,0x29 },\r
+{0x8d2a ,0xe5 },\r
+{0x8d2b ,0x1e },\r
+{0x8d2c ,0xf0 },\r
+{0x8d2d ,0xb4 },\r
+{0x8d2e ,0x10 },\r
+{0x8d2f ,0x05 },\r
+{0x8d30 ,0x90 },\r
+{0x8d31 ,0x30 },\r
+{0x8d32 ,0x23 },\r
+{0x8d33 ,0xe4 },\r
+{0x8d34 ,0xf0 },\r
+{0x8d35 ,0xc2 },\r
+{0x8d36 ,0x35 },\r
+{0x8d37 ,0x80 },\r
+{0x8d38 ,0xc1 },\r
+{0x8d39 ,0xe4 },\r
+{0x8d3a ,0xf5 },\r
+{0x8d3b ,0x4b },\r
+{0x8d3c ,0x90 },\r
+{0x8d3d ,0x0e },\r
+{0x8d3e ,0x7a },\r
+{0x8d3f ,0x93 },\r
+{0x8d40 ,0xff },\r
+{0x8d41 ,0xe4 },\r
+{0x8d42 ,0x8f },\r
+{0x8d43 ,0x37 },\r
+{0x8d44 ,0xf5 },\r
+{0x8d45 ,0x36 },\r
+{0x8d46 ,0xf5 },\r
+{0x8d47 ,0x35 },\r
+{0x8d48 ,0xf5 },\r
+{0x8d49 ,0x34 },\r
+{0x8d4a ,0xaf },\r
+{0x8d4b ,0x37 },\r
+{0x8d4c ,0xae },\r
+{0x8d4d ,0x36 },\r
+{0x8d4e ,0xad },\r
+{0x8d4f ,0x35 },\r
+{0x8d50 ,0xac },\r
+{0x8d51 ,0x34 },\r
+{0x8d52 ,0x90 },\r
+{0x8d53 ,0x0e },\r
+{0x8d54 ,0x6a },\r
+{0x8d55 ,0x12 },\r
+{0x8d56 ,0x0f },\r
+{0x8d57 ,0xa6 },\r
+{0x8d58 ,0x8f },\r
+{0x8d59 ,0x37 },\r
+{0x8d5a ,0x8e },\r
+{0x8d5b ,0x36 },\r
+{0x8d5c ,0x8d },\r
+{0x8d5d ,0x35 },\r
+{0x8d5e ,0x8c },\r
+{0x8d5f ,0x34 },\r
+{0x8d60 ,0x90 },\r
+{0x8d61 ,0x0e },\r
+{0x8d62 ,0x72 },\r
+{0x8d63 ,0x12 },\r
+{0x8d64 ,0x06 },\r
+{0x8d65 ,0xdd },\r
+{0x8d66 ,0xef },\r
+{0x8d67 ,0x45 },\r
+{0x8d68 ,0x37 },\r
+{0x8d69 ,0xf5 },\r
+{0x8d6a ,0x37 },\r
+{0x8d6b ,0xee },\r
+{0x8d6c ,0x45 },\r
+{0x8d6d ,0x36 },\r
+{0x8d6e ,0xf5 },\r
+{0x8d6f ,0x36 },\r
+{0x8d70 ,0xed },\r
+{0x8d71 ,0x45 },\r
+{0x8d72 ,0x35 },\r
+{0x8d73 ,0xf5 },\r
+{0x8d74 ,0x35 },\r
+{0x8d75 ,0xec },\r
+{0x8d76 ,0x45 },\r
+{0x8d77 ,0x34 },\r
+{0x8d78 ,0xf5 },\r
+{0x8d79 ,0x34 },\r
+{0x8d7a ,0xe4 },\r
+{0x8d7b ,0xf5 },\r
+{0x8d7c ,0x22 },\r
+{0x8d7d ,0xf5 },\r
+{0x8d7e ,0x23 },\r
+{0x8d7f ,0x85 },\r
+{0x8d80 ,0x37 },\r
+{0x8d81 ,0x31 },\r
+{0x8d82 ,0x85 },\r
+{0x8d83 ,0x36 },\r
+{0x8d84 ,0x30 },\r
+{0x8d85 ,0x85 },\r
+{0x8d86 ,0x35 },\r
+{0x8d87 ,0x2f },\r
+{0x8d88 ,0x85 },\r
+{0x8d89 ,0x34 },\r
+{0x8d8a ,0x2e },\r
+{0x8d8b ,0x12 },\r
+{0x8d8c ,0x0f },\r
+{0x8d8d ,0x63 },\r
+{0x8d8e ,0xe4 },\r
+{0x8d8f ,0xf5 },\r
+{0x8d90 ,0x22 },\r
+{0x8d91 ,0xf5 },\r
+{0x8d92 ,0x23 },\r
+{0x8d93 ,0x90 },\r
+{0x8d94 ,0x0e },\r
+{0x8d95 ,0x72 },\r
+{0x8d96 ,0x12 },\r
+{0x8d97 ,0x0f },\r
+{0x8d98 ,0x9a },\r
+{0x8d99 ,0x12 },\r
+{0x8d9a ,0x0f },\r
+{0x8d9b ,0x63 },\r
+{0x8d9c ,0xe4 },\r
+{0x8d9d ,0xf5 },\r
+{0x8d9e ,0x22 },\r
+{0x8d9f ,0xf5 },\r
+{0x8da0 ,0x23 },\r
+{0x8da1 ,0x90 },\r
+{0x8da2 ,0x0e },\r
+{0x8da3 ,0x6e },\r
+{0x8da4 ,0x12 },\r
+{0x8da5 ,0x0f },\r
+{0x8da6 ,0x9a },\r
+{0x8da7 ,0x02 },\r
+{0x8da8 ,0x0f },\r
+{0x8da9 ,0x63 },\r
+{0x8daa ,0xae },\r
+{0x8dab ,0x35 },\r
+{0x8dac ,0xaf },\r
+{0x8dad ,0x36 },\r
+{0x8dae ,0xe4 },\r
+{0x8daf ,0xfd },\r
+{0x8db0 ,0xed },\r
+{0x8db1 ,0xc3 },\r
+{0x8db2 ,0x95 },\r
+{0x8db3 ,0x37 },\r
+{0x8db4 ,0x50 },\r
+{0x8db5 ,0x33 },\r
+{0x8db6 ,0x12 },\r
+{0x8db7 ,0x0f },\r
+{0x8db8 ,0xec },\r
+{0x8db9 ,0xe4 },\r
+{0x8dba ,0x93 },\r
+{0x8dbb ,0xf5 },\r
+{0x8dbc ,0x38 },\r
+{0x8dbd ,0x74 },\r
+{0x8dbe ,0x01 },\r
+{0x8dbf ,0x93 },\r
+{0x8dc0 ,0xf5 },\r
+{0x8dc1 ,0x39 },\r
+{0x8dc2 ,0x45 },\r
+{0x8dc3 ,0x38 },\r
+{0x8dc4 ,0x60 },\r
+{0x8dc5 ,0x23 },\r
+{0x8dc6 ,0x85 },\r
+{0x8dc7 ,0x39 },\r
+{0x8dc8 ,0x82 },\r
+{0x8dc9 ,0x85 },\r
+{0x8dca ,0x38 },\r
+{0x8dcb ,0x83 },\r
+{0x8dcc ,0xe0 },\r
+{0x8dcd ,0xfc },\r
+{0x8dce ,0x12 },\r
+{0x8dcf ,0x0f },\r
+{0x8dd0 ,0xec },\r
+{0x8dd1 ,0x74 },\r
+{0x8dd2 ,0x03 },\r
+{0x8dd3 ,0x93 },\r
+{0x8dd4 ,0x52 },\r
+{0x8dd5 ,0x04 },\r
+{0x8dd6 ,0x12 },\r
+{0x8dd7 ,0x0f },\r
+{0x8dd8 ,0xec },\r
+{0x8dd9 ,0x74 },\r
+{0x8dda ,0x02 },\r
+{0x8ddb ,0x93 },\r
+{0x8ddc ,0x42 },\r
+{0x8ddd ,0x04 },\r
+{0x8dde ,0x85 },\r
+{0x8ddf ,0x39 },\r
+{0x8de0 ,0x82 },\r
+{0x8de1 ,0x85 },\r
+{0x8de2 ,0x38 },\r
+{0x8de3 ,0x83 },\r
+{0x8de4 ,0xec },\r
+{0x8de5 ,0xf0 },\r
+{0x8de6 ,0x0d },\r
+{0x8de7 ,0x80 },\r
+{0x8de8 ,0xc7 },\r
+{0x8de9 ,0x22 },\r
+{0x8dea ,0xc0 },\r
+{0x8deb ,0xe0 },\r
+{0x8dec ,0xc0 },\r
+{0x8ded ,0x83 },\r
+{0x8dee ,0xc0 },\r
+{0x8def ,0x82 },\r
+{0x8df0 ,0x90 },\r
+{0x8df1 ,0x3f },\r
+{0x8df2 ,0x0d },\r
+{0x8df3 ,0xe0 },\r
+{0x8df4 ,0xf5 },\r
+{0x8df5 ,0x33 },\r
+{0x8df6 ,0xe5 },\r
+{0x8df7 ,0x33 },\r
+{0x8df8 ,0xf0 },\r
+{0x8df9 ,0xd0 },\r
+{0x8dfa ,0x82 },\r
+{0x8dfb ,0xd0 },\r
+{0x8dfc ,0x83 },\r
+{0x8dfd ,0xd0 },\r
+{0x8dfe ,0xe0 },\r
+{0x8dff ,0x32 },\r
+{0x8e00 ,0x12 },\r
+{0x8e01 ,0x04 },\r
+{0x8e02 ,0x13 },\r
+{0x8e03 ,0x10 },\r
+{0x8e04 ,0x01 },\r
+{0x8e05 ,0x03 },\r
+{0x8e06 ,0x4f },\r
+{0x8e07 ,0x56 },\r
+{0x8e08 ,0x54 },\r
+{0x8e09 ,0x20 },\r
+{0x8e0a ,0x20 },\r
+{0x8e0b ,0x20 },\r
+{0x8e0c ,0x20 },\r
+{0x8e0d ,0x20 },\r
+{0x8e0e ,0x13 },\r
+{0x8e0f ,0x01 },\r
+{0x8e10 ,0x10 },\r
+{0x8e11 ,0x01 },\r
+{0x8e12 ,0x56 },\r
+{0x8e13 ,0x40 },\r
+{0x8e14 ,0x1a },\r
+{0x8e15 ,0x30 },\r
+{0x8e16 ,0x29 },\r
+{0x8e17 ,0x7e },\r
+{0x8e18 ,0x00 },\r
+{0x8e19 ,0x30 },\r
+{0x8e1a ,0x04 },\r
+{0x8e1b ,0x20 },\r
+{0x8e1c ,0xdf },\r
+{0x8e1d ,0x30 },\r
+{0x8e1e ,0x05 },\r
+{0x8e1f ,0x40 },\r
+{0x8e20 ,0xbf },\r
+{0x8e21 ,0x50 },\r
+{0x8e22 ,0x03 },\r
+{0x8e23 ,0x00 },\r
+{0x8e24 ,0xfd },\r
+{0x8e25 ,0x50 },\r
+{0x8e26 ,0x27 },\r
+{0x8e27 ,0x01 },\r
+{0x8e28 ,0xfe },\r
+{0x8e29 ,0x60 },\r
+{0x8e2a ,0x00 },\r
+{0x8e2b ,0x11 },\r
+{0x8e2c ,0x00 },\r
+{0x8e2d ,0x3f },\r
+{0x8e2e ,0x05 },\r
+{0x8e2f ,0x30 },\r
+{0x8e30 ,0x00 },\r
+{0x8e31 ,0x3f },\r
+{0x8e32 ,0x06 },\r
+{0x8e33 ,0x22 },\r
+{0x8e34 ,0x00 },\r
+{0x8e35 ,0x3f },\r
+{0x8e36 ,0x01 },\r
+{0x8e37 ,0x2a },\r
+{0x8e38 ,0x00 },\r
+{0x8e39 ,0x3f },\r
+{0x8e3a ,0x02 },\r
+{0x8e3b ,0x00 },\r
+{0x8e3c ,0x00 },\r
+{0x8e3d ,0x36 },\r
+{0x8e3e ,0x06 },\r
+{0x8e3f ,0x07 },\r
+{0x8e40 ,0x00 },\r
+{0x8e41 ,0x3f },\r
+{0x8e42 ,0x0b },\r
+{0x8e43 ,0x0f },\r
+{0x8e44 ,0xf0 },\r
+{0x8e45 ,0x00 },\r
+{0x8e46 ,0x00 },\r
+{0x8e47 ,0x00 },\r
+{0x8e48 ,0x00 },\r
+{0x8e49 ,0x30 },\r
+{0x8e4a ,0x01 },\r
+{0x8e4b ,0x40 },\r
+{0x8e4c ,0xbf },\r
+{0x8e4d ,0x30 },\r
+{0x8e4e ,0x01 },\r
+{0x8e4f ,0x00 },\r
+{0x8e50 ,0xbf },\r
+{0x8e51 ,0x30 },\r
+{0x8e52 ,0x29 },\r
+{0x8e53 ,0x70 },\r
+{0x8e54 ,0x00 },\r
+{0x8e55 ,0x3a },\r
+{0x8e56 ,0x00 },\r
+{0x8e57 ,0x00 },\r
+{0x8e58 ,0xff },\r
+{0x8e59 ,0x3a },\r
+{0x8e5a ,0x00 },\r
+{0x8e5b ,0x00 },\r
+{0x8e5c ,0xff },\r
+{0x8e5d ,0x36 },\r
+{0x8e5e ,0x03 },\r
+{0x8e5f ,0x36 },\r
+{0x8e60 ,0x02 },\r
+{0x8e61 ,0x41 },\r
+{0x8e62 ,0x44 },\r
+{0x8e63 ,0x58 },\r
+{0x8e64 ,0x20 },\r
+{0x8e65 ,0x18 },\r
+{0x8e66 ,0x10 },\r
+{0x8e67 ,0x0a },\r
+{0x8e68 ,0x04 },\r
+{0x8e69 ,0x04 },\r
+{0x8e6a ,0x00 },\r
+{0x8e6b ,0x03 },\r
+{0x8e6c ,0xff },\r
+{0x8e6d ,0x64 },\r
+{0x8e6e ,0x00 },\r
+{0x8e6f ,0x00 },\r
+{0x8e70 ,0x80 },\r
+{0x8e71 ,0x00 },\r
+{0x8e72 ,0x00 },\r
+{0x8e73 ,0x00 },\r
+{0x8e74 ,0x00 },\r
+{0x8e75 ,0x00 },\r
+{0x8e76 ,0x00 },\r
+{0x8e77 ,0x02 },\r
+{0x8e78 ,0x04 },\r
+{0x8e79 ,0x06 },\r
+{0x8e7a ,0x06 },\r
+{0x8e7b ,0x00 },\r
+{0x8e7c ,0x02 },\r
+{0x8e7d ,0x60 },\r
+{0x8e7e ,0x00 },\r
+{0x8e7f ,0x70 },\r
+{0x8e80 ,0x50 },\r
+{0x8e81 ,0x3c },\r
+{0x8e82 ,0x28 },\r
+{0x8e83 ,0x1e },\r
+{0x8e84 ,0x10 },\r
+{0x8e85 ,0x10 },\r
+{0x8e86 ,0x50 },\r
+{0x8e87 ,0x2d },\r
+{0x8e88 ,0x28 },\r
+{0x8e89 ,0x16 },\r
+{0x8e8a ,0x10 },\r
+{0x8e8b ,0x10 },\r
+{0x8e8c ,0x02 },\r
+{0x8e8d ,0x00 },\r
+{0x8e8e ,0x10 },\r
+{0x8e8f ,0x30 },\r
+{0x8e90 ,0x0a },\r
+{0x8e91 ,0x04 },\r
+{0x8e92 ,0x05 },\r
+{0x8e93 ,0x08 },\r
+{0x8e94 ,0x64 },\r
+{0x8e95 ,0x18 },\r
+{0x8e96 ,0x05 },\r
+{0x8e97 ,0x01 },\r
+{0x8e98 ,0x00 },\r
+{0x8e99 ,0xa5 },\r
+{0x8e9a ,0x5a },\r
+{0x8e9b ,0x00 },\r
+{0x8e9c ,0x78 },\r
+{0x8e9d ,0xbe },\r
+{0x8e9e ,0xe6 },\r
+{0x8e9f ,0xd3 },\r
+{0x8ea0 ,0x08 },\r
+{0x8ea1 ,0xff },\r
+{0x8ea2 ,0xe6 },\r
+{0x8ea3 ,0x64 },\r
+{0x8ea4 ,0x80 },\r
+{0x8ea5 ,0xf8 },\r
+{0x8ea6 ,0xef },\r
+{0x8ea7 ,0x64 },\r
+{0x8ea8 ,0x80 },\r
+{0x8ea9 ,0x98 },\r
+{0x8eaa ,0x22 },\r
+{0x8eab ,0x78 },\r
+{0x8eac ,0xc0 },\r
+{0x8ead ,0xa6 },\r
+{0x8eae ,0x07 },\r
+{0x8eaf ,0x78 },\r
+{0x8eb0 ,0xbd },\r
+{0x8eb1 ,0xd3 },\r
+{0x8eb2 ,0xe6 },\r
+{0x8eb3 ,0x64 },\r
+{0x8eb4 ,0x80 },\r
+{0x8eb5 ,0x94 },\r
+{0x8eb6 ,0x80 },\r
+{0x8eb7 ,0x22 },\r
+{0x8eb8 ,0x93 },\r
+{0x8eb9 ,0xff },\r
+{0x8eba ,0x7e },\r
+{0x8ebb ,0x00 },\r
+{0x8ebc ,0xe6 },\r
+{0x8ebd ,0xfc },\r
+{0x8ebe ,0x08 },\r
+{0x8ebf ,0xe6 },\r
+{0x8ec0 ,0xfd },\r
+{0x8ec1 ,0x12 },\r
+{0x8ec2 ,0x05 },\r
+{0x8ec3 ,0x22 },\r
+{0x8ec4 ,0x78 },\r
+{0x8ec5 ,0xc1 },\r
+{0x8ec6 ,0xe6 },\r
+{0x8ec7 ,0xfc },\r
+{0x8ec8 ,0x08 },\r
+{0x8ec9 ,0xe6 },\r
+{0x8eca ,0xfd },\r
+{0x8ecb ,0xd3 },\r
+{0x8ecc ,0xef },\r
+{0x8ecd ,0x9d },\r
+{0x8ece ,0xee },\r
+{0x8ecf ,0x9c },\r
+{0x8ed0 ,0x22 },\r
+{0x8ed1 ,0x78 },\r
+{0x8ed2 ,0xbf },\r
+{0x8ed3 ,0xa6 },\r
+{0x8ed4 ,0x07 },\r
+{0x8ed5 ,0x08 },\r
+{0x8ed6 ,0xd3 },\r
+{0x8ed7 ,0xe6 },\r
+{0x8ed8 ,0x64 },\r
+{0x8ed9 ,0x80 },\r
+{0x8eda ,0x94 },\r
+{0x8edb ,0x80 },\r
+{0x8edc ,0x22 },\r
+{0x8edd ,0x78 },\r
+{0x8ede ,0xc0 },\r
+{0x8edf ,0xa6 },\r
+{0x8ee0 ,0x07 },\r
+{0x8ee1 ,0xc3 },\r
+{0x8ee2 ,0x18 },\r
+{0x8ee3 ,0xe6 },\r
+{0x8ee4 ,0x64 },\r
+{0x8ee5 ,0x80 },\r
+{0x8ee6 ,0x94 },\r
+{0x8ee7 ,0xb3 },\r
+{0x8ee8 ,0x22 },\r
+{0x8ee9 ,0x78 },\r
+{0x8eea ,0xbf },\r
+{0x8eeb ,0xa6 },\r
+{0x8eec ,0x07 },\r
+{0x8eed ,0xc3 },\r
+{0x8eee ,0x08 },\r
+{0x8eef ,0xe6 },\r
+{0x8ef0 ,0x64 },\r
+{0x8ef1 ,0x80 },\r
+{0x8ef2 ,0x94 },\r
+{0x8ef3 ,0xb3 },\r
+{0x8ef4 ,0x22 },\r
+{0x8ef5 ,0x25 },\r
+{0x8ef6 ,0xe0 },\r
+{0x8ef7 ,0x24 },\r
+{0x8ef8 ,0x0a },\r
+{0x8ef9 ,0xf8 },\r
+{0x8efa ,0xe6 },\r
+{0x8efb ,0xfe },\r
+{0x8efc ,0x08 },\r
+{0x8efd ,0xe6 },\r
+{0x8efe ,0xff },\r
+{0x8eff ,0x22 },\r
+{0x8f00 ,0xe5 },\r
+{0x8f01 ,0x40 },\r
+{0x8f02 ,0x24 },\r
+{0x8f03 ,0xf2 },\r
+{0x8f04 ,0xf5 },\r
+{0x8f05 ,0x37 },\r
+{0x8f06 ,0xe5 },\r
+{0x8f07 ,0x3f },\r
+{0x8f08 ,0x34 },\r
+{0x8f09 ,0x43 },\r
+{0x8f0a ,0xf5 },\r
+{0x8f0b ,0x36 },\r
+{0x8f0c ,0xe5 },\r
+{0x8f0d ,0x3e },\r
+{0x8f0e ,0x34 },\r
+{0x8f0f ,0xa2 },\r
+{0x8f10 ,0xf5 },\r
+{0x8f11 ,0x35 },\r
+{0x8f12 ,0xe5 },\r
+{0x8f13 ,0x3d },\r
+{0x8f14 ,0x34 },\r
+{0x8f15 ,0x28 },\r
+{0x8f16 ,0xf5 },\r
+{0x8f17 ,0x34 },\r
+{0x8f18 ,0xe5 },\r
+{0x8f19 ,0x37 },\r
+{0x8f1a ,0xff },\r
+{0x8f1b ,0xe4 },\r
+{0x8f1c ,0xfe },\r
+{0x8f1d ,0xfd },\r
+{0x8f1e ,0xfc },\r
+{0x8f1f ,0x78 },\r
+{0x8f20 ,0x18 },\r
+{0x8f21 ,0x12 },\r
+{0x8f22 ,0x06 },\r
+{0x8f23 ,0xca },\r
+{0x8f24 ,0x8f },\r
+{0x8f25 ,0x40 },\r
+{0x8f26 ,0x8e },\r
+{0x8f27 ,0x3f },\r
+{0x8f28 ,0x8d },\r
+{0x8f29 ,0x3e },\r
+{0x8f2a ,0x8c },\r
+{0x8f2b ,0x3d },\r
+{0x8f2c ,0xe5 },\r
+{0x8f2d ,0x37 },\r
+{0x8f2e ,0x54 },\r
+{0x8f2f ,0xa0 },\r
+{0x8f30 ,0xff },\r
+{0x8f31 ,0xe5 },\r
+{0x8f32 ,0x36 },\r
+{0x8f33 ,0xfe },\r
+{0x8f34 ,0xe4 },\r
+{0x8f35 ,0xfd },\r
+{0x8f36 ,0xfc },\r
+{0x8f37 ,0x78 },\r
+{0x8f38 ,0x07 },\r
+{0x8f39 ,0x12 },\r
+{0x8f3a ,0x06 },\r
+{0x8f3b ,0xb7 },\r
+{0x8f3c ,0x78 },\r
+{0x8f3d ,0x10 },\r
+{0x8f3e ,0x12 },\r
+{0x8f3f ,0x0f },\r
+{0x8f40 ,0xac },\r
+{0x8f41 ,0xe4 },\r
+{0x8f42 ,0xff },\r
+{0x8f43 ,0xfe },\r
+{0x8f44 ,0xe5 },\r
+{0x8f45 ,0x35 },\r
+{0x8f46 ,0xfd },\r
+{0x8f47 ,0xe4 },\r
+{0x8f48 ,0xfc },\r
+{0x8f49 ,0x78 },\r
+{0x8f4a ,0x0e },\r
+{0x8f4b ,0x12 },\r
+{0x8f4c ,0x06 },\r
+{0x8f4d ,0xb7 },\r
+{0x8f4e ,0x12 },\r
+{0x8f4f ,0x0f },\r
+{0x8f50 ,0xaf },\r
+{0x8f51 ,0xe4 },\r
+{0x8f52 ,0xff },\r
+{0x8f53 ,0xfe },\r
+{0x8f54 ,0xfd },\r
+{0x8f55 ,0xe5 },\r
+{0x8f56 ,0x34 },\r
+{0x8f57 ,0xfc },\r
+{0x8f58 ,0x78 },\r
+{0x8f59 ,0x18 },\r
+{0x8f5a ,0x12 },\r
+{0x8f5b ,0x06 },\r
+{0x8f5c ,0xb7 },\r
+{0x8f5d ,0x78 },\r
+{0x8f5e ,0x08 },\r
+{0x8f5f ,0x12 },\r
+{0x8f60 ,0x0f },\r
+{0x8f61 ,0xac },\r
+{0x8f62 ,0x22 },\r
+{0x8f63 ,0xa2 },\r
+{0x8f64 ,0xaf },\r
+{0x8f65 ,0x92 },\r
+{0x8f66 ,0x32 },\r
+{0x8f67 ,0xc2 },\r
+{0x8f68 ,0xaf },\r
+{0x8f69 ,0xe5 },\r
+{0x8f6a ,0x23 },\r
+{0x8f6b ,0x45 },\r
+{0x8f6c ,0x22 },\r
+{0x8f6d ,0x90 },\r
+{0x8f6e ,0x0e },\r
+{0x8f6f ,0x5d },\r
+{0x8f70 ,0x60 },\r
+{0x8f71 ,0x0e },\r
+{0x8f72 ,0x12 },\r
+{0x8f73 ,0x0f },\r
+{0x8f74 ,0xc7 },\r
+{0x8f75 ,0xe0 },\r
+{0x8f76 ,0xf5 },\r
+{0x8f77 ,0x2c },\r
+{0x8f78 ,0x12 },\r
+{0x8f79 ,0x0f },\r
+{0x8f7a ,0xc4 },\r
+{0x8f7b ,0xe0 },\r
+{0x8f7c ,0xf5 },\r
+{0x8f7d ,0x2d },\r
+{0x8f7e ,0x80 },\r
+{0x8f7f ,0x0c },\r
+{0x8f80 ,0x12 },\r
+{0x8f81 ,0x0f },\r
+{0x8f82 ,0xc7 },\r
+{0x8f83 ,0xe5 },\r
+{0x8f84 ,0x30 },\r
+{0x8f85 ,0xf0 },\r
+{0x8f86 ,0x12 },\r
+{0x8f87 ,0x0f },\r
+{0x8f88 ,0xc4 },\r
+{0x8f89 ,0xe5 },\r
+{0x8f8a ,0x31 },\r
+{0x8f8b ,0xf0 },\r
+{0x8f8c ,0xa2 },\r
+{0x8f8d ,0x32 },\r
+{0x8f8e ,0x92 },\r
+{0x8f8f ,0xaf },\r
+{0x8f90 ,0x22 },\r
+{0x8f91 ,0x8f },\r
+{0x8f92 ,0x3b },\r
+{0x8f93 ,0x8e },\r
+{0x8f94 ,0x3a },\r
+{0x8f95 ,0x8d },\r
+{0x8f96 ,0x39 },\r
+{0x8f97 ,0x8c },\r
+{0x8f98 ,0x38 },\r
+{0x8f99 ,0x22 },\r
+{0x8f9a ,0x12 },\r
+{0x8f9b ,0x06 },\r
+{0x8f9c ,0xdd },\r
+{0x8f9d ,0x8f },\r
+{0x8f9e ,0x31 },\r
+{0x8f9f ,0x8e },\r
+{0x8fa0 ,0x30 },\r
+{0x8fa1 ,0x8d },\r
+{0x8fa2 ,0x2f },\r
+{0x8fa3 ,0x8c },\r
+{0x8fa4 ,0x2e },\r
+{0x8fa5 ,0x22 },\r
+{0x8fa6 ,0x93 },\r
+{0x8fa7 ,0xf9 },\r
+{0x8fa8 ,0xf8 },\r
+{0x8fa9 ,0x02 },\r
+{0x8faa ,0x06 },\r
+{0x8fab ,0xca },\r
+{0x8fac ,0x12 },\r
+{0x8fad ,0x06 },\r
+{0x8fae ,0xca },\r
+{0x8faf ,0xe5 },\r
+{0x8fb0 ,0x40 },\r
+{0x8fb1 ,0x2f },\r
+{0x8fb2 ,0xf5 },\r
+{0x8fb3 ,0x40 },\r
+{0x8fb4 ,0xe5 },\r
+{0x8fb5 ,0x3f },\r
+{0x8fb6 ,0x3e },\r
+{0x8fb7 ,0xf5 },\r
+{0x8fb8 ,0x3f },\r
+{0x8fb9 ,0xe5 },\r
+{0x8fba ,0x3e },\r
+{0x8fbb ,0x3d },\r
+{0x8fbc ,0xf5 },\r
+{0x8fbd ,0x3e },\r
+{0x8fbe ,0xe5 },\r
+{0x8fbf ,0x3d },\r
+{0x8fc0 ,0x3c },\r
+{0x8fc1 ,0xf5 },\r
+{0x8fc2 ,0x3d },\r
+{0x8fc3 ,0x22 },\r
+{0x8fc4 ,0x90 },\r
+{0x8fc5 ,0x0e },\r
+{0x8fc6 ,0x5f },\r
+{0x8fc7 ,0xe4 },\r
+{0x8fc8 ,0x93 },\r
+{0x8fc9 ,0xfe },\r
+{0x8fca ,0x74 },\r
+{0x8fcb ,0x01 },\r
+{0x8fcc ,0x93 },\r
+{0x8fcd ,0xf5 },\r
+{0x8fce ,0x82 },\r
+{0x8fcf ,0x8e },\r
+{0x8fd0 ,0x83 },\r
+{0x8fd1 ,0x22 },\r
+{0x8fd2 ,0xd2 },\r
+{0x8fd3 ,0x01 },\r
+{0x8fd4 ,0xc2 },\r
+{0x8fd5 ,0x02 },\r
+{0x8fd6 ,0xe4 },\r
+{0x8fd7 ,0xf5 },\r
+{0x8fd8 ,0x1f },\r
+{0x8fd9 ,0xf5 },\r
+{0x8fda ,0x1e },\r
+{0x8fdb ,0xd2 },\r
+{0x8fdc ,0x35 },\r
+{0x8fdd ,0xd2 },\r
+{0x8fde ,0x33 },\r
+{0x8fdf ,0x22 },\r
+{0x8fe0 ,0x78 },\r
+{0x8fe1 ,0x7f },\r
+{0x8fe2 ,0xe4 },\r
+{0x8fe3 ,0xf6 },\r
+{0x8fe4 ,0xd8 },\r
+{0x8fe5 ,0xfd },\r
+{0x8fe6 ,0x75 },\r
+{0x8fe7 ,0x81 },\r
+{0x8fe8 ,0xcd },\r
+{0x8fe9 ,0x02 },\r
+{0x8fea ,0x0c },\r
+{0x8feb ,0xc4 },\r
+{0x8fec ,0x8f },\r
+{0x8fed ,0x82 },\r
+{0x8fee ,0x8e },\r
+{0x8fef ,0x83 },\r
+{0x8ff0 ,0x75 },\r
+{0x8ff1 ,0xf0 },\r
+{0x8ff2 ,0x04 },\r
+{0x8ff3 ,0xed },\r
+{0x8ff4 ,0x02 },\r
+{0x8ff5 ,0x07 },\r
+{0x8ff6 ,0x06 },\r
+{0x3022 ,0x00 },\r
+{0x3023 ,0x00 },\r
+{0x3024 ,0x00 },\r
+{0x3025 ,0x00 },\r
+{0x3026 ,0x00 },\r
+{0x3027 ,0x00 },\r
+{0x3028 ,0x00 },\r
+{0x3029 ,0x7F },\r
+{0x3000 ,0x00 },\r
+{0x3004, 0xff },\r
+{0x3005, 0xF7 },\r
+\r
+{0xFF, 0xFF}\r
+};\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov7740_config.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov7740_config.c
new file mode 100644 (file)
index 0000000..8fac279
--- /dev/null
@@ -0,0 +1,172 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*\r
+ * ID\r
+ */\r
+\r
+\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Local Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+const struct ov_reg ov7740_yuv_vga[]= {\r
+{0x12 ,0x80},\r
+//{0x11 ,0x07},\r
+\r
+{0x55 ,0x40},\r
+{0x11 ,0x02},\r
+\r
+{0x12 ,0x00},\r
+{0xd5 ,0x10},\r
+{0x0c ,0x12},\r
+{0x0d ,0x34},\r
+{0x17 ,0x25},\r
+{0x18 ,0xa0},\r
+{0x19 ,0x03},\r
+{0x1a ,0xf0},\r
+{0x1b ,0x89}, //;was 81\r
+{0x22 ,0x03}, //;new\r
+{0x29 ,0x18}, //;was 17\r
+{0x2b ,0xf8},\r
+{0x2c ,0x01},\r
+{0x31 ,0xa0},\r
+{0x32 ,0xf0},\r
+{0x33 ,0xc4}, //;was44\r
+{0x35 ,0x05}, //;new\r
+{0x36 ,0x3f},\r
+{0x04 ,0x60},\r
+{0x27 ,0x80}, //;delete "42 3a b4"\r
+{0x3d ,0x0f},\r
+{0x3e ,0x80},\r
+{0x3f ,0x40},\r
+{0x40 ,0x7f},\r
+{0x41 ,0x6a},\r
+{0x42 ,0x29},\r
+{0x44 ,0x22}, //;was 11\r
+{0x45 ,0x41},\r
+{0x47 ,0x02},\r
+{0x49 ,0x64},\r
+{0x4a ,0xa1},\r
+{0x4b ,0x40},\r
+{0x4c ,0x1a},\r
+{0x4d ,0x50},\r
+{0x4e ,0x13},\r
+{0x64 ,0x00},\r
+{0x67 ,0x88},\r
+{0x68 ,0x1a},\r
+\r
+{0x14 ,0x28}, //;38/28/18 for 16/8/4x gain ceiling\r
+{0x24 ,0x3c},\r
+{0x25 ,0x30},\r
+{0x26 ,0x72},\r
+{0x50 ,0x97},\r
+{0x51 ,0x1f}, //;0fc/7e/3f/1f for 60/30/15/7.5fps, 60Hz\r
+{0x52 ,0x00}, //;[7:6]/[5:4] 2 msb for 60/50Hz\r
+{0x53 ,0x00},\r
+{0x20 ,0x00},\r
+{0x21 ,0xcf}, //;01/23/57/cf for 60/30/15/7.5fps\r
+{0x50, 0x4b}, // ;12e/97/4b/25 for 60/30/15/7.5fps, 50Hz\r
+{0x38 ,0x14},\r
+{0xe9 ,0x00},\r
+{0x56 ,0x55},\r
+{0x57 ,0xff},\r
+{0x58 ,0xff},\r
+{0x59 ,0xff},\r
+{0x5f ,0x04},\r
+{0xec ,0x00},\r
+{0x13 ,0xff},\r
+\r
+{0x80 ,0x7f}, //;[6]/[5] for BPC/WPC\r
+{0x81 ,0x3f},\r
+{0x82 ,0x32},\r
+{0x83 ,0x01},\r
+{0x38 ,0x11},\r
+{0x84 ,0x70},\r
+{0x85 ,0x00},\r
+{0x86 ,0x03},\r
+{0x87 ,0x01},\r
+{0x88 ,0x05},\r
+{0x89 ,0x30},\r
+{0x8d ,0x30},\r
+{0x8f ,0x85},\r
+{0x93 ,0x30},\r
+{0x95 ,0x85},\r
+{0x99 ,0x30},\r
+{0x9b ,0x85},\r
+\r
+{0x9c ,0x08},\r
+{0x9d ,0x12},\r
+{0x9e ,0x23},\r
+{0x9f ,0x45},\r
+{0xa0 ,0x55},\r
+{0xa1 ,0x64},\r
+{0xa2 ,0x72},\r
+{0xa3 ,0x7f},\r
+{0xa4 ,0x8b},\r
+{0xa5 ,0x95},\r
+{0xa6 ,0xa7},\r
+{0xa7 ,0xb5},\r
+{0xa8 ,0xcb},\r
+{0xa9 ,0xdd},\r
+{0xaa ,0xec},\r
+{0xab ,0x1a},\r
+\r
+{0xce ,0x78},\r
+{0xcf ,0x6e},\r
+{0xd0 ,0x0a},\r
+{0xd1 ,0x0c},\r
+{0xd2 ,0x84},\r
+{0xd3 ,0x90},\r
+{0xd4 ,0x1e},\r
+\r
+{0x5a ,0x24},\r
+{0x5b ,0x1f},\r
+{0x5c ,0x88},\r
+{0x5d ,0x60},\r
+\r
+{0xac ,0x6e},\r
+{0xbe ,0xff},\r
+{0xbf ,0x00},\r
+\r
+{0x0f ,0x1d},\r
+{0x0f ,0x1f},\r
+{0xFF, 0xFF}\r
+};\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov9740_config.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/ov9740_config.c
new file mode 100644 (file)
index 0000000..c730bb1
--- /dev/null
@@ -0,0 +1,602 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Local Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+const struct ov_reg ov9740_yuv_vga[]= {\r
+//@@ VGA 640x360 bin YUV DVP 60FPS (Full speed)\r
+{0x0103,0x01},\r
+{0x3026,0x00},\r
+{0x3027,0x00},\r
+{0x3002,0xe8},\r
+{0x3004,0x03},\r
+{0x3005,0xff},\r
+{0x3703,0x42},\r
+{0x3704,0x10},\r
+{0x3705,0x45},\r
+{0x3603,0xaa},\r
+{0x3632,0x27},\r
+{0x3620,0x66},\r
+{0x3621,0xc0},\r
+{0x0202,0x03},\r
+{0x0203,0x43},\r
+{0x3833,0x04},\r
+{0x3835,0x02},\r
+{0x4702,0x04},\r
+{0x4704,0x00},\r
+{0x4706,0x08},\r
+{0x3819,0x6e},\r
+{0x3817,0x94},\r
+{0x3a18,0x00},\r
+{0x3a19,0x7f},\r
+{0x5003,0xa7},\r
+{0x3631,0x5e},\r
+{0x3633,0x50},\r
+{0x3630,0xd2},\r
+{0x3604,0x0c},\r
+{0x3601,0x40},\r
+{0x3602,0x16},\r
+{0x3610,0xa1},\r
+{0x3612,0x24},\r
+{0x034a,0x02},\r
+{0x034b,0xd3},\r
+{0x034c,0x02},\r
+{0x034d,0x80},\r
+{0x034e,0x01},\r
+{0x034f,0x68},\r
+{0x0202,0x01},\r
+{0x0203,0x9e},\r
+{0x381a,0x44},\r
+{0x3707,0x14},\r
+{0x3622,0x9f},\r
+{0x5841,0x04},\r
+{0x4002,0x45},\r
+{0x5000,0x01},\r
+{0x5001,0x00},\r
+{0x3406,0x00},\r
+{0x5000,0xff},\r
+{0x5001,0xef},\r
+{0x5003,0xff},\r
+{0x4005,0x18},\r
+{0x3503,0x10},\r
+{0x3a11,0xa0},\r
+{0x3a1b,0x50},\r
+{0x3a0f,0x50},\r
+{0x3a10,0x4c},\r
+{0x3a1e,0x4c},\r
+{0x3a1f,0x26},\r
+{0x3104,0x20},\r
+{0x0305,0x03},\r
+{0x0307,0x5f},\r
+{0x0303,0x01},\r
+{0x0301,0x0a},\r
+{0x3010,0x01},\r
+{0x300c,0x02},\r
+{0x0340,0x02},\r
+{0x0341,0x08},\r
+{0x0342,0x04},\r
+{0x0343,0xc0},\r
+{0x0101,0x01},\r
+{0x3a08,0x01},\r
+{0x3a09,0x38},\r
+{0x3a0e,0x01},\r
+{0x3a14,0x09},\r
+{0x3a15,0xc0},\r
+{0x3a0a,0x01},\r
+{0x3a0b,0x02},\r
+{0x3a0d,0x02},\r
+{0x3a02,0x10},\r
+{0x3a03,0x30},\r
+{0x3c0a,0x9c},\r
+{0x3c0b,0x3f},\r
+{0x529a,0x1 }, \r
+{0x529b,0x2 }, \r
+{0x529c,0x3 }, \r
+{0x529d,0x5 },  \r
+{0x529e,0x5 },  \r
+{0x529f,0x28},   \r
+{0x52a0,0x32}, \r
+{0x52a2,0x0 },\r
+{0x52a3,0x2 },\r
+{0x52a4,0x0 },\r
+{0x52a5,0x4 }, \r
+{0x52a6,0x0 }, \r
+{0x52a7,0x8 }, \r
+{0x52a8,0x0 }, \r
+{0x52a9,0x10},  \r
+{0x52aa,0x0 }, \r
+{0x52ab,0x38},  \r
+{0x52ac,0x0 }, \r
+{0x52ad,0x3c},  \r
+{0x52ae,0x0 },  \r
+{0x52af,0x4c}, \r
+{0x5842,0x02},\r
+{0x5843,0x5e},\r
+{0x5844,0x04},\r
+{0x5845,0x32},\r
+{0x5846,0x03},\r
+{0x5847,0x29},\r
+{0x5848,0x02},\r
+{0x5849,0xcc},\r
+{0x5800,0x22},\r
+{0x5801,0x1e},\r
+{0x5802,0x1a},\r
+{0x5803,0x1a},\r
+{0x5804,0x1f},\r
+{0x5805,0x26},\r
+{0x5806,0xe },\r
+{0x5807,0x9 },\r
+{0x5808,0x7 },\r
+{0x5809,0x8 },\r
+{0x580a,0xb },\r
+{0x580b,0x11},\r
+{0x580c,0x5 },\r
+{0x580d,0x2 },\r
+{0x580e,0x0 },\r
+{0x580f,0x0 },\r
+{0x5810,0x3 },\r
+{0x5811,0x7 },\r
+{0x5812,0x4 },\r
+{0x5813,0x1 },\r
+{0x5814,0x0 },\r
+{0x5815,0x0 },\r
+{0x5816,0x3 },\r
+{0x5817,0x7 },\r
+{0x5818,0xc },\r
+{0x5819,0x8 },\r
+{0x581a,0x6 },\r
+{0x581b,0x6 },\r
+{0x581c,0x9 },\r
+{0x581d,0x10},\r
+{0x581e,0x20},\r
+{0x581f,0x1b},\r
+{0x5820,0x17},\r
+{0x5821,0x18},\r
+{0x5822,0x1d},\r
+{0x5823,0x23},\r
+{0x5824,0x5b},\r
+{0x5825,0x6e},\r
+{0x5826,0x6e},\r
+{0x5827,0x7e},\r
+{0x5828,0xab},\r
+{0x5829,0x5e},\r
+{0x582a,0x8a},\r
+{0x582b,0x8a},\r
+{0x582c,0x8a},\r
+{0x582d,0x9d},\r
+{0x582e,0x5b},\r
+{0x582f,0x88},\r
+{0x5830,0x88},\r
+{0x5831,0x98},\r
+{0x5832,0x9a},\r
+{0x5833,0x4e},\r
+{0x5834,0x8a},\r
+{0x5835,0x79},\r
+{0x5836,0x7a},\r
+{0x5837,0xad},\r
+{0x5838,0x9b},\r
+{0x5839,0x9d},\r
+{0x583a,0xad},\r
+{0x583b,0x8e},\r
+{0x583c,0x5c},\r
+{0x583e,0x08},\r
+{0x583f,0x04},\r
+{0x5840,0x10},\r
+{0x5480,0x07},   \r
+{0x5481,0x16},   \r
+{0x5482,0x2c},   \r
+{0x5483,0x4d},  \r
+{0x5484,0x59}, \r
+{0x5485,0x64},   \r
+{0x5486,0x6e},  \r
+{0x5487,0x76},   \r
+{0x5488,0x7f},   \r
+{0x5489,0x86},  \r
+{0x548a,0x94},   \r
+{0x548b,0xa3}, \r
+{0x548c,0xba},   \r
+{0x548d,0xd2},   \r
+{0x548e,0xe9},   \r
+{0x548f,0x1e},\r
+{0x5490,0x0f},\r
+{0x5491,0xff},\r
+{0x5492,0x0e},\r
+{0x5493,0x34},\r
+{0x5494,0x07},\r
+{0x5495,0x1a},\r
+{0x5496,0x04},\r
+{0x5497,0x0e},\r
+{0x5498,0x03},\r
+{0x5499,0x82},\r
+{0x549a,0x03},\r
+{0x549b,0x20},\r
+{0x549c,0x02}, \r
+{0x549d,0xd7},\r
+{0x549e,0x02},\r
+{0x549f,0xa5},\r
+{0x54a0,0x02},\r
+{0x54a1,0x75},\r
+{0x54a2,0x02},\r
+{0x54a3,0x55},\r
+{0x54a4,0x02},\r
+{0x54a5,0x1c},\r
+{0x54a6,0x01},\r
+{0x54a7,0xea},\r
+{0x54a8,0x01},\r
+{0x54a9,0xae},\r
+{0x54aa,0x01},\r
+{0x54ab,0x7c},\r
+{0x54ac,0x01},\r
+{0x54ad,0x57},\r
+{0x5180,0xf0},\r
+{0x5181,0x00},\r
+{0x5182,0x41},\r
+{0x5183,0x42},\r
+{0x5184,0x8f},\r
+{0x5185,0x63},\r
+{0x5186,0xce},\r
+{0x5187,0xa8},\r
+{0x5188,0x17},\r
+{0x5189,0x1f},\r
+{0x518a,0x27},\r
+{0x518b,0x41},\r
+{0x518c,0x34},\r
+{0x518d,0xf0},\r
+{0x518e,0x10},\r
+{0x518f,0xff},\r
+{0x5190,0x00},\r
+{0x5191,0xff},\r
+{0x5192,0x00},\r
+{0x5193,0xff},\r
+{0x5194,0x00},\r
+{0x5380,0x1 },\r
+{0x5381,0x0 },\r
+{0x5382,0x0 },\r
+{0x5383,0x17},\r
+{0x5384,0x0 },\r
+{0x5385,0x1 },\r
+{0x5386,0x0 }, \r
+{0x5387,0x0 }, \r
+{0x5388,0x0 },  \r
+{0x5389,0xad}, \r
+{0x538a,0x0 },\r
+{0x538b,0x11}, \r
+{0x538c,0x0 },\r
+{0x538d,0x0 },\r
+{0x538e,0x0 },\r
+{0x538f,0x7 },\r
+{0x5390,0x0 }, \r
+{0x5391,0x80}, \r
+{0x5392,0x0 },\r
+{0x5393,0xa0}, \r
+{0x5394,0x18}, \r
+{0x3c0a,0x9c},\r
+{0x3c0b,0x3f},\r
+{0x5501,0x14},\r
+{0x5502,0x00}, \r
+{0x5503,0x40},\r
+{0x5504,0x00},\r
+{0x5505,0x80},\r
+{0x0100,0x01},\r
+{0xFF, 0xFF}\r
+};\r
+\r
+\r
+\r
+const struct ov_reg ov9740_yuv_sxga[]= {\r
+//@@ WXGA 1280x720 YUV DVP 15FPS for card reader\r
+{0x0103, 0x01},\r
+{0x3026, 0x00},\r
+{0x3027, 0x00},\r
+{0x3002, 0xe8},\r
+{0x3004, 0x03},\r
+{0x3005, 0xff},\r
+{0x3406, 0x00},\r
+{0x3603, 0xaa},\r
+{0x3632, 0x27},\r
+{0x3620, 0x66},\r
+{0x3621, 0xc0},\r
+{0x3631, 0x5e},\r
+{0x3633, 0x50},\r
+{0x3630, 0xd2},\r
+{0x3604, 0x0c},\r
+{0x3601, 0x40},\r
+{0x3602, 0x16},\r
+{0x3610, 0xa1},\r
+{0x3612, 0x24},\r
+{0x3622, 0x9f},\r
+{0x3703, 0x42},\r
+{0x3704, 0x10},\r
+{0x3705, 0x45},\r
+{0x3707, 0x14},\r
+{0x3833, 0x04},\r
+{0x3835, 0x03},\r
+{0x3819, 0x6e},\r
+{0x3817, 0x94},\r
+{0x3503, 0x10},\r
+{0x3a18, 0x00},\r
+{0x3a19, 0x7f},\r
+{0x3a11, 0xa0},\r
+{0x3a1a, 0x05},\r
+{0x3a1b, 0x50},\r
+{0x3a0f, 0x50},\r
+{0x3a10, 0x4c},\r
+{0x3a1e, 0x4c},\r
+{0x3a1f, 0x26},\r
+{0x4002, 0x45},\r
+{0x4005, 0x18},\r
+{0x4702, 0x04},\r
+{0x4704, 0x00},\r
+{0x4706, 0x08},\r
+{0x5000, 0xff},\r
+{0x5001, 0xef},\r
+{0x5003, 0xff},\r
+\r
+{0x3104,0x20},\r
+{0x0305,0x03},\r
+{0x0307,0x4c},\r
+{0x0303,0x01},\r
+{0x0301,0x08},\r
+{0x3010,0x01},\r
+{0x300c,0x03},\r
+\r
+{0x0340, 0x03},\r
+{0x0341, 0x07},\r
+{0x0342, 0x06},\r
+{0x0343, 0x62},\r
+{0x034b, 0xd1},\r
+{0x034c, 0x05},\r
+{0x034d, 0x00},\r
+{0x034e, 0x02},\r
+{0x034f, 0xd0},\r
+{0x0101, 0x01},\r
+{0x3a08, 0x00},\r
+{0x3a09, 0xe8},\r
+{0x3a0e, 0x03},\r
+{0x3a14, 0x15},\r
+{0x3a15, 0xc6},\r
+{0x3a0a, 0x00},\r
+{0x3a0b, 0xc0},\r
+{0x3a0d, 0x04},\r
+{0x3a02, 0x18},\r
+{0x3a03, 0x20},\r
+{0x3c0a, 0x9c},\r
+{0x3c0b, 0x3f},\r
+{0x529a, 0x1 },\r
+{0x529b, 0x2 },\r
+{0x529c, 0x3 },\r
+{0x529d, 0x5 },\r
+{0x529e, 0x5 },\r
+{0x529f, 0x28},\r
+{0x52a0, 0x32},\r
+{0x52a2, 0x0 },\r
+{0x52a3, 0x2 },\r
+{0x52a4, 0x0 },\r
+{0x52a5, 0x4 },\r
+{0x52a6, 0x0 },\r
+{0x52a7, 0x8 },\r
+{0x52a8, 0x0 },\r
+{0x52a9, 0x10},\r
+{0x52aa, 0x0 },\r
+{0x52ab, 0x38},\r
+{0x52ac, 0x0 },\r
+{0x52ad, 0x3c},\r
+{0x52ae, 0x0 },\r
+{0x52af, 0x4c},\r
+{0x5842, 0x02},\r
+{0x5843, 0x5e},\r
+{0x5844, 0x04},\r
+{0x5845, 0x32},\r
+{0x5846, 0x03},\r
+{0x5847, 0x29},\r
+{0x5848, 0x02},\r
+{0x5849, 0xcc},\r
+{0x5800, 0x22},\r
+{0x5801, 0x1e},\r
+{0x5802, 0x1a},\r
+{0x5803, 0x1a},\r
+{0x5804, 0x1f},\r
+{0x5805, 0x26},\r
+{0x5806, 0xe },\r
+{0x5807, 0x9 },\r
+{0x5808, 0x7 },\r
+{0x5809, 0x8 },\r
+{0x580a, 0xb },\r
+{0x580b, 0x11},\r
+{0x580c, 0x5 },\r
+{0x580d, 0x2 },\r
+{0x580e, 0x0 },\r
+{0x580f, 0x0 },\r
+{0x5810, 0x3 },\r
+{0x5811, 0x7 },\r
+{0x5812, 0x4 },\r
+{0x5813, 0x1 },\r
+{0x5814, 0x0 },\r
+{0x5815, 0x0 },\r
+{0x5816, 0x3 },\r
+{0x5817, 0x7 },\r
+{0x5818, 0xc },\r
+{0x5819, 0x8 },\r
+{0x581a, 0x6 },\r
+{0x581b, 0x6 },\r
+{0x581c, 0x9 },\r
+{0x581d, 0x10},\r
+{0x581e, 0x20},\r
+{0x581f, 0x1b},\r
+{0x5820, 0x17},\r
+{0x5821, 0x18},\r
+{0x5822, 0x1d},\r
+{0x5823, 0x23},\r
+{0x5824, 0x5b},\r
+{0x5825, 0x6e},\r
+{0x5826, 0x6e},\r
+{0x5827, 0x7e},\r
+{0x5828, 0xab},\r
+{0x5829, 0x5e},\r
+{0x582a, 0x8a},\r
+{0x582b, 0x8a},\r
+{0x582c, 0x8a},\r
+{0x582d, 0x9d},\r
+{0x582e, 0x5b},\r
+{0x582f, 0x88},\r
+{0x5830, 0x88},\r
+{0x5831, 0x98},\r
+{0x5832, 0x9a},\r
+{0x5833, 0x4e},\r
+{0x5834, 0x8a},\r
+{0x5835, 0x79},\r
+{0x5836, 0x7a},\r
+{0x5837, 0xad},\r
+{0x5838, 0x9b},\r
+{0x5839, 0x9d},\r
+{0x583a, 0xad},\r
+{0x583b, 0x8e},\r
+{0x583c, 0x5c},\r
+{0x583e, 0x08},\r
+{0x583f, 0x04},\r
+{0x5840, 0x10},\r
+{0x5480, 0x07},\r
+{0x5481, 0x16},\r
+{0x5482, 0x2c},\r
+{0x5483, 0x4d},\r
+{0x5484, 0x59},\r
+{0x5485, 0x64},\r
+{0x5486, 0x6e},\r
+{0x5487, 0x76},\r
+{0x5488, 0x7f},\r
+{0x5489, 0x86},\r
+{0x548a, 0x94},\r
+{0x548b, 0xa3},\r
+{0x548c, 0xba},\r
+{0x548d, 0xd2},\r
+{0x548e, 0xe9},\r
+{0x548f, 0x1e},\r
+{0x5490, 0x0f},\r
+{0x5491, 0xff},\r
+{0x5492, 0x0e},\r
+{0x5493, 0x34},\r
+{0x5494, 0x07},\r
+{0x5495, 0x1a},\r
+{0x5496, 0x04},\r
+{0x5497, 0x0e},\r
+{0x5498, 0x03},\r
+{0x5499, 0x82},\r
+{0x549a, 0x03},\r
+{0x549b, 0x20},\r
+{0x549c, 0x02},\r
+{0x549d, 0xd7},\r
+{0x549e, 0x02},\r
+{0x549f, 0xa5},\r
+{0x54a0, 0x02},\r
+{0x54a1, 0x75},\r
+{0x54a2, 0x02},\r
+{0x54a3, 0x55},\r
+{0x54a4, 0x02},\r
+{0x54a5, 0x1c},\r
+{0x54a6, 0x01},\r
+{0x54a7, 0xea},\r
+{0x54a8, 0x01},\r
+{0x54a9, 0xae},\r
+{0x54aa, 0x01},\r
+{0x54ab, 0x7c},\r
+{0x54ac, 0x01},\r
+{0x54ad, 0x57},\r
+{0x5180, 0xf0},\r
+{0x5181, 0x00},\r
+{0x5182, 0x41},\r
+{0x5183, 0x42},\r
+{0x5184, 0x8f},\r
+{0x5185, 0x63},\r
+{0x5186, 0xce},\r
+{0x5187, 0xa8},\r
+{0x5188, 0x17},\r
+{0x5189, 0x1f},\r
+{0x518a, 0x27},\r
+{0x518b, 0x41},\r
+{0x518c, 0x34},\r
+{0x518d, 0xf0},\r
+{0x518e, 0x10},\r
+{0x518f, 0xff},\r
+{0x5190, 0x00},\r
+{0x5191, 0xff},\r
+{0x5192, 0x00},\r
+{0x5193, 0xff},\r
+{0x5194, 0x00},\r
+{0x5380, 0x1 },\r
+{0x5381, 0x0 },\r
+{0x5382, 0x0 },\r
+{0x5383, 0x17},\r
+{0x5384, 0x0 },\r
+{0x5385, 0x1 },\r
+{0x5386, 0x0 },\r
+{0x5387, 0x0 },\r
+{0x5388, 0x0 },\r
+{0x5389, 0xad},\r
+{0x538a, 0x0 },\r
+{0x538b, 0x11},\r
+{0x538c, 0x0 },\r
+{0x538d, 0x0 },\r
+{0x538e, 0x0 },\r
+{0x538f, 0x7 },\r
+{0x5390, 0x0 },\r
+{0x5391, 0x80},\r
+{0x5392, 0x0 },\r
+{0x5393, 0xa0},\r
+{0x5394, 0x18},\r
+{0x3c0a, 0x9c},\r
+{0x3c0b, 0x3f},\r
+{0x5501, 0x14},\r
+{0x5502, 0x00},\r
+{0x5503, 0x40},\r
+{0x5504, 0x00},\r
+{0x5505, 0x80},\r
+{0x5308, 0x40},\r
+{0x5309, 0x60},\r
+{0x3a11, 0xd0},\r
+{0x3a1b, 0x78},\r
+{0x3a0f, 0x78},\r
+{0x3a10, 0x68},\r
+{0x3a1e, 0x68},\r
+{0x3a1f, 0x40},\r
+{0x0100, 0x01},\r
+{0xFF, 0xFF}\r
+};\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/qt1070.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/qt1070.c
new file mode 100644 (file)
index 0000000..c9ff9d1
--- /dev/null
@@ -0,0 +1,224 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/**\r
+  * \file\r
+  *\r
+  * Implementation QT1070 driver.\r
+  *\r
+  */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Read one byte of data from QT1070 Register.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param regAddr Register address to read.\r
+ * \return value in the given register.\r
+ */\r
+static uint8_t QT1070_ReadReg(Twid *pTwid, uint8_t regAddr)\r
+{\r
+    uint8_t data;\r
+    TWID_Write(pTwid, QT1070_SLAVE_ADDRESS, 0, 0, &regAddr, 1, 0);\r
+    TWID_Read(pTwid, QT1070_SLAVE_ADDRESS, 0, 0, &data, 1, 0);\r
+    return data;\r
+}\r
+\r
+/**\r
+ * \brief  Write one byte of data to QT1070 Register.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param regAddr Register address to write.\r
+ * \param data    Data to write.\r
+ */\r
+static void QT1070_WriteReg(Twid *pTwid, uint32_t regAddr, uint8_t data)\r
+{\r
+    TWID_Write(pTwid, QT1070_SLAVE_ADDRESS, regAddr, 1, &data, 1, 0);\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/**\r
+ * \brief  Get qt1070 chip ID.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \return Chip Id\r
+ */\r
+\r
+uint8_t QT1070_GetChipId(Twid *pTwid)\r
+{\r
+    return QT1070_ReadReg( pTwid, QT1070_CHIP_ID);\r
+}\r
+\r
+/**\r
+ * \brief  Get qt1070 firmware version number.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \return Firmware version number.\r
+ */\r
+\r
+uint8_t QT1070_GetFirmwareVersion(Twid *pTwid)\r
+{\r
+    return QT1070_ReadReg( pTwid, QT1070_REG_FIRMWARE_VERSION);\r
+}\r
+\r
+ /**\r
+ * \brief  Get qt1070 detection status.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \return Dectection status.\r
+ */\r
+\r
+uint8_t QT1070_GetDetection_Status(Twid *pTwid)\r
+{\r
+    return QT1070_ReadReg( pTwid, QT1070_REG_DETECTION_STATUS);\r
+}\r
+\r
+/**\r
+ * \brief  Get qt1070 Key status. \r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \return Key status.\r
+ */\r
+uint8_t QT1070_GetKey_Status(Twid *pTwid)\r
+{\r
+    return QT1070_ReadReg( pTwid, QT1070_REG_KEY_STATUS);\r
+}\r
+\r
+/**\r
+ * \brief  Get qt1070 key signal value in the given Key. These are the key's\r
+ * of 16-bit key signals which are accessed as two 8-bit bytes,stored MSB first\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param key     Key index.\r
+ * \return Key signal value.\r
+ */\r
+uint16_t QT1070_GetKey_Signal(Twid *pTwid, uint8_t key)\r
+{\r
+    uint8_t data[2];\r
+    data[0] = QT1070_ReadReg( pTwid, QT1070_REG_KEY0_SIGNAL_MSB + key * 2);\r
+    data[1] = QT1070_ReadReg( pTwid, QT1070_REG_KEY0_SIGNAL_LSB + key * 2);\r
+    return (data[0] << 8) | data[1];\r
+}\r
+\r
+/**\r
+ * \brief  Get qt1070 key reference data in the given Key. These are the key's\r
+ * of 16-bit key reference data which are accessed as two 8-bit bytes, stored MSB first\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param key     Key index.\r
+ * \return Key reference data.\r
+ */\r
+uint16_t QT1070_GetKey_Reference(Twid *pTwid, uint8_t key)\r
+{\r
+    uint8_t data[2];\r
+    data[0] = QT1070_ReadReg( pTwid, QT1070_REG_REFDATA0_MSB + key * 2);\r
+    data[1] = QT1070_ReadReg( pTwid, QT1070_REG_REFDATA0_LSB + key * 2);\r
+    return (data[0] << 8) | data[1];\r
+}\r
+\r
+/**\r
+ * \brief  Set the threshold value for the given Key. \r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param key     Key index.\r
+ * \param threshold Threshold value.\r
+ */\r
+void QT1070_SetThreshold(Twid *pTwid, uint8_t key, uint8_t threshold)\r
+{\r
+    // Do not use a setting of 0 as this causes a key to go into detection \r
+    // when its signal is equal to its reference.\r
+    if ( threshold ) \r
+    {\r
+        QT1070_WriteReg(pTwid, QT1070_REG_NTHR_KEY0 + key, threshold);\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief  Set Averaging factor and adjacent key suppression for the given Key. \r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param key     Key index.\r
+ * \param Ave     Averaging factor.\r
+ * \param Aks     AKS group index.\r
+ */\r
+void QT1070_SetAveAks(Twid *pTwid, uint8_t key, uint8_t Ave, uint8_t Aks)\r
+{\r
+    QT1070_WriteReg(pTwid, QT1070_REG_AVEAKS_KEY0 + key, (Ave << 3) | Aks ); \r
+}\r
+\r
+/**\r
+ * \brief Set DI level for the given Key. This 8-bit value controls the number\r
+ * of consecutive measurement that must be confirmed as having passed the key threshold\r
+ * before that key is registered as being in detect.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ * \param key     Key index.\r
+ * \param di      DI level.\r
+ */\r
+\r
+void QT1070_SetDetectionIntegrator(Twid *pTwid, uint8_t key, uint8_t di)\r
+{\r
+    QT1070_WriteReg(pTwid, QT1070_REG_DI_KEY0 + key, di); \r
+}\r
\r
+/**\r
+ * \brief Start a calibration cycle, the CALIBTATE flag in the detection status\r
+ * register is set when the calibration begins and clears when the calibration\r
+ * has finished.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ */\r
+\r
+void QT1070_StartCalibrate(Twid *pTwid)\r
+{\r
+    QT1070_WriteReg(pTwid, QT1070_REG_CALIRATE , 1); \r
+}\r
+\r
+/**\r
+ * \brief Reset the qt1070 device.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure.\r
+ */\r
+\r
+void QT1070_StartReset(Twid *pTwid)\r
+{\r
+    QT1070_WriteReg(pTwid, QT1070_REG_RESET , 1); \r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rand.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rand.c
new file mode 100644 (file)
index 0000000..dcde751
--- /dev/null
@@ -0,0 +1,67 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Header\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global Variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+static uint32_t _dwRandNext=1 ;\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported Functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  Initialize the seed for rand generator.\r
+ *\r
+ *  \param seed rand initiation seed\r
+ */\r
+extern void srand( uint32_t dwSeed )\r
+{\r
+    _dwRandNext = dwSeed ;\r
+}\r
+\r
+/**\r
+ *  Return a random number, maxinum assumed to be 65536\r
+ */\r
+extern uint32_t rand( void )\r
+{\r
+    _dwRandNext = _dwRandNext * 1103515245 + 12345 ;\r
+\r
+    return (uint32_t)(_dwRandNext/131072) % 65536 ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rtc_calib.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/rtc_calib.c
new file mode 100644 (file)
index 0000000..94af4cc
--- /dev/null
@@ -0,0 +1,194 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Real Time Clock calibration (RTC) .\r
+ *\r
+ */\r
+\r
+#include "board.h"\r
+\r
+const RTC_PPMLookup PPM_Lookup[] =\r
+{\r
+    {-40, -168 ,0, 1 ,22 },\r
+    {-39, -163 ,0, 1 ,23 },\r
+    {-38, -158 ,0, 1 ,24 },\r
+    {-37, -153 ,0, 1 ,25 },\r
+    {-36, -148 ,0, 1 ,25 },\r
+    {-35, -143 ,0, 1 ,26 },\r
+    {-34, -138 ,0, 1 ,27 },\r
+    {-33, -134 ,0, 1 ,28 },\r
+    {-32, -129 ,0, 1 ,29 },\r
+    {-31, -124 ,0, 1 ,31 },\r
+    {-30, -120 ,0, 1 ,32 },\r
+    {-29, -116 ,0, 1 ,33 },\r
+    {-28, -111 ,0, 1 ,34 },\r
+    {-27, -107 ,0, 1 ,36 },\r
+    {-26, -103 ,0, 1 ,37 },\r
+    {-25, -99,  0, 1 ,38 },\r
+    {-24, -95,  0, 1 ,40 },\r
+    {-23, -91,  0, 1 ,42 },\r
+    {-22, -87,  0, 1 ,44 },\r
+    {-21, -84,  0, 1 ,45 },\r
+    {-20, -80,  0, 1 ,48 },\r
+    {-19, -76,  0, 1 ,50 },\r
+    {-18, -73,  0, 1 ,53 },\r
+    {-17, -70,  0, 1 ,55 },\r
+    {-16, -66,  0, 1 ,58 },\r
+    {-15, -63,  0, 1 ,61 },\r
+    {-14, -60,  0, 1 ,64 },\r
+    {-13, -57,  0, 1 ,68 },\r
+    {-12, -54,  0, 1 ,71 },\r
+    {-11, -51,  0, 1 ,76 },\r
+    {-10, -48,  0, 1 ,80 },\r
+    {-9 ,-45 ,  0, 1 ,86 },\r
+    {-8 ,-43 ,  0, 1 ,90 },\r
+    {-7 ,-40 ,  0, 1 ,97 },\r
+    {-6 ,-37 ,  0, 1 ,105},\r
+    {-5 ,-35 ,  0, 1 ,111},\r
+    {-4 ,-33 ,  0, 1 ,117},\r
+    {-3 ,-30 ,  0, 0 ,6  },\r
+    {-2 ,-28 ,  0, 0 ,6  },\r
+    {-1 ,-26 ,  0, 0 ,7  },\r
+    {0 ,-24 ,   0, 0 ,7  },\r
+    {1 ,-22 ,   0, 0 ,8  },\r
+    {2 ,-20 ,   0, 0 ,9  },\r
+    {3 ,-18 ,   0, 0 ,10 },\r
+    {4 ,-17 ,   0, 0 ,10 },\r
+    {5 ,-15 ,   0, 0 ,12 },\r
+    {6 ,-13 ,   0, 0 ,14 },\r
+    {7 ,-12 ,   0, 0 ,15 },\r
+    {8 ,-11 ,   0, 0 ,17 },\r
+    {9 ,-9 ,    0, 0 ,21 },\r
+    {10 ,-8 ,   0, 0 ,23 },\r
+    {11 ,-7 ,   0, 0 ,27 },\r
+    {12 ,-6 ,   0, 0 ,32 },\r
+    {13 ,-5 ,   0, 0 ,38 },\r
+    {14 ,-4 ,   0, 0 ,48 },\r
+    {15 ,-3 ,   0, 0 ,64 },\r
+    {16 ,-2 ,   0, 0 ,97 },\r
+    {17 ,-2 ,   0, 0 ,97 },\r
+    {18 ,-1 ,   0, 0 ,127},\r
+    {19 ,0,     1, 0 ,0  },\r
+    {20 ,0,     1, 0 ,0  },\r
+    {21 ,0,     1, 0 ,0  },\r
+    {22 ,1,     1, 0 ,127},\r
+    {23 ,1,     1, 0 ,127},\r
+    {24 ,1,     1, 0 ,127},\r
+    {25 ,1,     1, 0 ,127},\r
+    {26 ,1,     1, 0 ,127},\r
+    {27 ,1,     1, 0 ,127},\r
+    {28 ,1,     1, 0 ,127},\r
+    {29 ,0,     1, 0 ,0  },\r
+    {30 ,0,     1, 0 ,0  },\r
+    {31 ,0,     1, 0 ,0  },\r
+    {32 ,-1,    0, 0 ,127},\r
+    {33 ,-2,    0, 0 ,97 },\r
+    {34 ,-2,    0, 0 ,97 },\r
+    {35 ,-3,    0, 0 ,64 },\r
+    {36 ,-4,    0, 0 ,48 },\r
+    {37 ,-5,    0, 0 ,38 },\r
+    {38 ,-6,    0, 0 ,32 },\r
+    {39 ,-7,    0, 0 ,27 },\r
+    {40 ,-8,    0, 0 ,23 },\r
+    {41 ,-9,    0, 0 ,21 },\r
+    {42 ,-11 ,  0, 0 ,17 },\r
+    {43 ,-12 ,  0, 0 ,15 },\r
+    {44 ,-13 ,  0, 0 ,14 },\r
+    {45 ,-15 ,  0, 0 ,12 },\r
+    {46 ,-17 ,  0, 0 ,10 },\r
+    {47 ,-18 ,  0, 0 ,10 },\r
+    {48 ,-20 ,  0, 0 ,9  },\r
+    {49 ,-22 ,  0, 0 ,8  },\r
+    {50 ,-24 ,  0, 0 ,7  },\r
+    {51 ,-26 ,  0, 0 ,7  },\r
+    {52 ,-28 ,  0, 0 ,6  },\r
+    {53 ,-30 ,  0, 0 ,6  },\r
+    {54 ,-33 ,  0, 1 ,117},\r
+    {55 ,-35 ,  0, 1 ,111},\r
+    {56 ,-37 ,  0, 1 ,105},\r
+    {57 ,-40 ,  0, 1 ,97 },\r
+    {58 ,-43 ,  0, 1 ,90 },\r
+    {59 ,-45 ,  0, 1 ,86 },\r
+    {60 ,-48 ,  0, 1 ,80 },\r
+    {61 ,-51 ,  0, 1 ,76 },\r
+    {62 ,-54 ,  0, 1 ,71 },\r
+    {63 ,-57 ,  0, 1 ,68 },\r
+    {64 ,-60 ,  0, 1 ,64 },\r
+    {65 ,-63 ,  0, 1 ,61 },\r
+    {66 ,-66 ,  0, 1 ,58 },\r
+    {67 ,-70 ,  0, 1 ,55 },\r
+    {68 ,-73 ,  0, 1 ,53 },\r
+    {69 ,-76 ,  0, 1 ,50 },\r
+    {70 ,-80 ,  0, 1 ,48 },\r
+    {71 ,-84 ,  0, 1 ,45 },\r
+    {72 ,-87 ,  0, 1 ,44 },\r
+    {73 ,-91 ,  0, 1 ,42 },\r
+    {74 ,-95 ,  0, 1 ,40 },\r
+    {75 ,-99 ,  0, 1 ,38 },\r
+    {76 ,-103 , 0, 1 ,37 },\r
+    {77 ,-107 , 0, 1 ,36 },\r
+    {78 ,-111 , 0, 1 ,34 },\r
+    {79 ,-116 , 0, 1 ,33 },\r
+    {80 ,-120 , 0, 1 ,32 },\r
+    {81 ,-124 , 0, 1 ,31 },\r
+    {82 ,-129 , 0, 1 ,29 },\r
+    {83 ,-134 , 0, 1 ,28 },\r
+    {84 ,-138 , 0, 1 ,27 },\r
+    {85 ,-143 , 0, 1 ,26 }\r
+} ;    \r
+\r
+/**\r
+ * \brief RTC calibration for Temperature or PPM drift\r
+ */\r
+extern void RTC_ClockCalibration( Rtc* pRtc, int32_t CurrentTempr)\r
+{\r
+  uint16_t i;\r
+  uint32_t MR_Reg, Size;\r
+  \r
+  Size = sizeof(PPM_Lookup);\r
+  \r
+  MR_Reg =0;\r
+  for(i=0; i< Size; i++)\r
+  {\r
+  if(PPM_Lookup[i].Tempr == CurrentTempr)\r
+      {\r
+          MR_Reg |= RTC_MR_CORRECTION(PPM_Lookup[i].CORRECTION);  \r
+          MR_Reg |= (PPM_Lookup[i].HIGHPPM << 15);\r
+          MR_Reg |= (PPM_Lookup[i].NEGPPM << 4);\r
+          pRtc->RTC_MR = MR_Reg;    // update the calibration value\r
+          break;\r
+      }\r
+  }\r
+  \r
\r
+  \r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/timetick.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/timetick.c
new file mode 100644 (file)
index 0000000..82a304f
--- /dev/null
@@ -0,0 +1,132 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/**\r
+ *  \file\r
+ *  Implement simple PIT usage as system tick.\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Tick Counter united by ms */\r
+static volatile uint32_t _dwTickCount = 0 ;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported Functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *  \brief Handler for Sytem Tick interrupt.\r
+ */\r
+extern void TimeTick_Increment( uint32_t dwInc )\r
+{\r
+    _dwTickCount += dwInc;\r
+}\r
+\r
+/**\r
+ *  \brief Configures the PIT & reset tickCount.\r
+ *  Systick interrupt handler will generates 1ms interrupt and increase a\r
+ *  tickCount.\r
+ *  \note IRQ handler must be configured before invoking this function.\r
+ *  \note PIT is enabled automatically in this function.\r
+ *  \param new_mck  Current master clock.\r
+ */\r
+extern uint32_t TimeTick_Configure( uint32_t new_mck )\r
+{\r
+    _dwTickCount = 0 ;\r
+    PIT_Init( 1000, new_mck / 1000000 );\r
+    PIT_EnableIT();\r
+    PIT_Enable();\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Get Delayed number of tick\r
+ * \param startTick Start tick point.\r
+ * \param endTick   End tick point.\r
+ */\r
+extern uint32_t GetDelayInTicks(uint32_t startTick, uint32_t endTick)\r
+{\r
+    if (endTick >= startTick) return (endTick - startTick);\r
+    return (endTick + (0xFFFFFFFF - startTick) + 1);\r
+}\r
+\r
+/**\r
+ *  \brief Get current Tick Count, in ms.\r
+ */\r
+extern uint32_t GetTickCount( void )\r
+{\r
+    return _dwTickCount ;\r
+}\r
+\r
+/**\r
+ *  \brief Sync Wait for several ms\r
+ */\r
+extern void Wait( volatile uint32_t dwMs )\r
+{\r
+    uint32_t dwStart ;\r
+    uint32_t dwCurrent ;\r
+\r
+    dwStart = _dwTickCount ;\r
+    do\r
+    {\r
+        dwCurrent = _dwTickCount ;\r
+    } while ( dwCurrent - dwStart < dwMs ) ;\r
+}\r
+\r
+/**\r
+ *  \brief Sync Sleep for several ms\r
+ */\r
+extern void Sleep( volatile uint32_t dwMs )\r
+{\r
+    uint32_t dwStart ;\r
+    uint32_t dwCurrent ;\r
+    __ASM("CPSIE   I");\r
+    dwStart = _dwTickCount ;\r
+\r
+    do\r
+    {\r
+        dwCurrent = _dwTickCount ;\r
+\r
+        if ( dwCurrent - dwStart > dwMs )\r
+        {\r
+            break ;\r
+        }\r
+        __ASM("WFI");\r
+    } while( 1 ) ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/trace.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/trace.c
new file mode 100644 (file)
index 0000000..455a7a4
--- /dev/null
@@ -0,0 +1,60 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Internal variables\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/** Trace level can be set at applet initialization */\r
+#if !defined(NOTRACE) && (DYN_TRACES == 1)\r
+    uint32_t dwTraceLevel = TRACE_LEVEL ;\r
+#endif\r
+\r
+/**\r
+ *  Initializes the DBGU Console\r
+ *\r
+ *  \param dwBaudRate  U(S)ART baudrate.\r
+ *  \param dwMCk  Master clock frequency.\r
+ */\r
+extern void TRACE_CONFIGURE( uint32_t dwBaudRate, uint32_t dwMCk )\r
+{\r
+    const Pin pinsDBUG[] = { PINS_DBGU } ;\r
+\r
+    PIO_Configure( pinsDBUG, PIO_LISTSIZE( pinsDBUG ) ) ;\r
+\r
+    DBGU_Configure( dwBaudRate, dwMCk ) ;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/tsd_com.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/tsd_com.c
new file mode 100644 (file)
index 0000000..43e3bab
--- /dev/null
@@ -0,0 +1,384 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup tsd_module\r
+ *@{\r
+ */\r
+     \r
+\r
+#include <board.h>\r
+#include <string.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Size in pixels of calibration points. */\r
+#define POINTS_SIZE         4\r
+/** Maximum difference in pixels between the test point and the measured point.\r
+ */\r
+#define POINTS_MAX_XERROR   10\r
+/** Maximum difference in pixels between the test point and the measured point.\r
+ */\r
+#define POINTS_MAX_YERROR   8\r
+\r
+/** Delay at the end of calibartion for result display (positive or negative) */\r
+#define DELAY_RESULT_DISPLAY 4000000\r
+\r
+/** Clear Strings on LCD */\r
+#if 1\r
+#define CLEAR_STRING()  LCDD_Fill(COLOR_WHITE)\r
+#else\r
+#define CLEAR_STRING()  \\r
+    LCDD_DrawFilledRectangle(strX -  3*strW, strY, \\r
+                             strX + 20*strW, strY + 6*strH, COLOR_WHITE)\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Point used during the touchscreen calibration process.\r
+ */\r
+typedef struct _CalibrationPoint {\r
+\r
+    /** Coordinate of point along the X-axis of the screen. */\r
+    uint32_t x;\r
+    /** Coordinate of point along the Y-axis of the screen. */\r
+    uint32_t y;\r
+    /** Calibration data of point. */\r
+    uint32_t data[2];\r
+\r
+} CalibrationPoint;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Calibration display title */\r
+static const char* strTitle = "LCD Calibration";\r
+\r
+/** indicates if the touch screen has been calibrated.\r
+    If not, Callback functions are not called */\r
+static volatile uint8_t bCalibrationOk = 0;\r
+/** Slope for interpoling touchscreen measurements along the X-axis. */\r
+static int32_t xSlope;\r
+/** Slope for interpoling touchscreen measurements along the Y-axis. */\r
+static int32_t ySlope;\r
+\r
+/** Calibration points */\r
+static CalibrationPoint calibrationPoints[] = {\r
+\r
+    /* Top-left corner calibration point */\r
+    {\r
+        BOARD_LCD_WIDTH / 10,\r
+        BOARD_LCD_HEIGHT / 10,\r
+        {0, 0}\r
+    },\r
+    /* Top-right corner calibration point */\r
+    {\r
+        BOARD_LCD_WIDTH - BOARD_LCD_WIDTH / 10,\r
+        BOARD_LCD_HEIGHT / 10,\r
+        {0, 0}\r
+    },\r
+    /* Bottom-right corner calibration point */\r
+    {\r
+        BOARD_LCD_WIDTH - BOARD_LCD_WIDTH / 10,\r
+        BOARD_LCD_HEIGHT - BOARD_LCD_HEIGHT / 10,\r
+        {0, 0}\r
+    },\r
+    /* Bottom-left corner calibration point */\r
+    {\r
+        BOARD_LCD_WIDTH / 10,\r
+        BOARD_LCD_HEIGHT - BOARD_LCD_HEIGHT / 10,\r
+        {0, 0}\r
+    }\r
+};\r
+\r
+/** Test point */\r
+static const CalibrationPoint testPoint = {\r
+    BOARD_LCD_WIDTH / 2,\r
+    BOARD_LCD_HEIGHT / 2,\r
+    {0, 0}\r
+};\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         External functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Display a calibration point on the given buffer.\r
+ * \param pPoint  Calibration point to display.\r
+ */\r
+static void DrawCalibrationPoint(\r
+    const CalibrationPoint *pPoint)\r
+{\r
+    LCDD_DrawFilledRectangle(pPoint->x - POINTS_SIZE / 2,\r
+                             pPoint->y - POINTS_SIZE / 2,\r
+                             pPoint->x + POINTS_SIZE,\r
+                             pPoint->y + POINTS_SIZE,\r
+                             COLOR_RED);\r
+}\r
+\r
+/**\r
+ * Clears a calibration point from the given buffer.\r
+ * \param pLcdBuffer  LCD buffer to draw on.\r
+ * \param pPoint  Calibration point to clear.\r
+ */\r
+static void ClearCalibrationPoint(\r
+    const CalibrationPoint *pPoint)\r
+{\r
+    LCDD_DrawFilledRectangle(pPoint->x - POINTS_SIZE,\r
+                             pPoint->y - POINTS_SIZE,\r
+                             pPoint->x + POINTS_SIZE,\r
+                             pPoint->y + POINTS_SIZE,\r
+                             COLOR_WHITE);\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Indicates if the calibration of the touch screen is Ok\r
+ * \return 1 calibration Ok, 0 if not\r
+ */\r
+uint8_t TSDCom_IsCalibrationOk(void)\r
+{\r
+    return bCalibrationOk;\r
+}\r
+\r
+/**\r
+ * Interpolates the provided raw measurements using the previously calculated\r
+ * slope. The resulting x and y coordinates are stored in an array.\r
+ * \param pData  Raw measurement data, as returned by TSD_GetRawMeasurement().\r
+ * \param pPoint  Array in which x and y will be stored.\r
+ */\r
+void TSDCom_InterpolateMeasurement(const uint32_t *pData, uint32_t *pPoint)\r
+{\r
+    pPoint[0] = calibrationPoints[0].x\r
+                - (((int32_t) calibrationPoints[0].data[0] - (int32_t) pData[0]) * 1024)\r
+                / xSlope;\r
+\r
+    pPoint[1] = calibrationPoints[0].y\r
+                - (((int32_t) calibrationPoints[0].data[1] - (int32_t) pData[1]) * 1024)\r
+                / ySlope;\r
+    /* Is pPoint[0] negative ? */\r
+    if(pPoint[0] & 0x80000000)        pPoint[0] = 0;\r
+    /* Is pPoint[0] bigger than the LCD width ? */\r
+    if(pPoint[0] > BOARD_LCD_WIDTH)   pPoint[0] = BOARD_LCD_WIDTH;\r
+    /* Is pPoint[1] negative ? */\r
+    if(pPoint[1] & 0x80000000)        pPoint[1] = 0;\r
+    /* Is pPoint[1] bigger than the LCD width ? */\r
+    if(pPoint[1] > BOARD_LCD_HEIGHT)  pPoint[1] = BOARD_LCD_HEIGHT;\r
+}\r
+\r
+/**\r
+ * Performs the calibration process using the provided buffer to display\r
+ * information.\r
+ * \param pLcdBuffer  LCD buffer to display.\r
+ * \return True if calibration was successful; otherwise false.\r
+ */\r
+uint8_t TSDCom_Calibrate(void)\r
+{\r
+    uint32_t i; // to keep the tempo with gcc code optimisation\r
+    int32_t slope1, slope2;\r
+    CalibrationPoint measuredPoint;\r
+    uint8_t xOk, yOk;\r
+    int32_t xDiff, yDiff;\r
+    uint32_t strX = BOARD_LCD_WIDTH / 2 - 75, strY = 60;\r
+    uint32_t strW, strH;\r
+\r
+    LCDD_GetStringSize("P", &strW, &strH);\r
+    /* Calibration setup */\r
+    LCDD_Fill(COLOR_WHITE);\r
+    LCDD_Flush_CurrentCanvas();\r
+    LCDD_DrawString(strX, strY, strTitle, COLOR_BLACK);\r
+    LCDD_Flush_CurrentCanvas();\r
+    LCDD_DrawString(strX - 2*strW, strY + 3*strH,\r
+        " Touch the dots to\ncalibrate the screen", COLOR_DARKBLUE);\r
+    LCDD_Flush_CurrentCanvas();\r
+    /* Calibration points */\r
+    for (i = 0; i < 4; i++) {\r
+\r
+        DrawCalibrationPoint(&calibrationPoints[i]);\r
+        LCDD_Flush_CurrentCanvas();\r
+        /* Wait for touch & end of conversion */\r
+        TSD_WaitPenPressed();\r
+        TSD_GetRawMeasurement(calibrationPoints[i].data);\r
+        ClearCalibrationPoint(&calibrationPoints[i]);\r
+        LCDD_Flush_CurrentCanvas();\r
+        /* Wait for contact loss */\r
+        TSD_WaitPenReleased();\r
+        printf("P%d: (%d,%d)\n\r", (unsigned int)i, (unsigned int)calibrationPoints[i].data[0], (unsigned int)calibrationPoints[i].data[1]);\r
+    }\r
+\r
+    /* Calculate slopes using the calibration data\r
+     * Theory behind those calculations:\r
+     *   - We suppose the touchscreen measurements are linear, so the following equations are true (simple\r
+     *     linear regression) for any two 'a' and 'b' points of the screen:\r
+     *       dx = (a.data[0] - b.data[0]) / (a.x - b.x)\r
+     *       dy = (a.data[1] - b.data[1]) / (a.y - b.y)\r
+     *\r
+     *   - We calculate dx and dy (called xslope and yslope here) using the calibration points.\r
+     *\r
+     *   - We can then use dx and dy to infer the position of a point 'p' given the measurements performed\r
+     *     by the touchscreen ('c' is any of the calibration points):\r
+     *       dx = (p.data[0] - c.data[0]) / (p.x - c.x)\r
+     *       dy = (p.data[1] - c.data[1]) / (p.y - c.y)\r
+     *     Thus:\r
+     *       p.x = c.x - (p.data[0] - c.data[0]) / dx\r
+     *       p.y = c.y - (p.data[1] - c.data[1]) / dy\r
+     *\r
+     *   - Since there are four calibration points, dx and dy can be calculated twice, so we average\r
+     *     the two values.\r
+     */\r
+    slope1 = ((int32_t) calibrationPoints[0].data[0]) - ((int32_t) calibrationPoints[1].data[0]);\r
+    slope1 *= 1024;\r
+    slope1 /= ((int32_t) calibrationPoints[0].x) - ((int32_t) calibrationPoints[1].x);\r
+    slope2 = ((int32_t) calibrationPoints[2].data[0]) - ((int32_t) calibrationPoints[3].data[0]);\r
+    slope2 *= 1024;\r
+    slope2 /= ((int32_t) calibrationPoints[2].x) - ((int32_t) calibrationPoints[3].x);\r
+    xSlope = (slope1 + slope2) / 2;\r
+\r
+    slope1 = ((int32_t) calibrationPoints[0].data[1]) - ((int32_t) calibrationPoints[2].data[1]);\r
+    slope1 *= 1024;\r
+    slope1 /= ((int32_t) calibrationPoints[0].y) - ((int32_t) calibrationPoints[2].y);\r
+    slope2 = ((int32_t) calibrationPoints[1].data[1]) - ((int32_t) calibrationPoints[3].data[1]);\r
+    slope2 *= 1024;\r
+    slope2 /= ((int32_t) calibrationPoints[1].y) - ((int32_t) calibrationPoints[3].y);\r
+    ySlope = (slope1 + slope2) / 2;\r
+\r
+    printf("Slope: %d, %d\n\r", (unsigned int)xSlope, (unsigned int)ySlope);\r
+\r
+    /* Test point */\r
+    CLEAR_STRING();\r
+    LCDD_DrawString(strX, strY, strTitle, COLOR_BLACK);\r
+    LCDD_DrawString(strX - 2*strW, strY + 3*strH,\r
+        " Touch the point to\nvalidate calibration", COLOR_DARKBLUE);\r
+    LCDD_Flush_CurrentCanvas();\r
+    DrawCalibrationPoint(&testPoint);\r
+    LCDD_Flush_CurrentCanvas();\r
+    /* Wait for touch & end of conversion */\r
+    TSD_WaitPenPressed();\r
+\r
+    TSD_GetRawMeasurement(measuredPoint.data);\r
+    TSDCom_InterpolateMeasurement(measuredPoint.data, (uint32_t *) &measuredPoint);\r
+    DrawCalibrationPoint(&measuredPoint);\r
+    LCDD_Flush_CurrentCanvas();\r
+    /* Check resulting x and y */\r
+    xDiff = (int32_t) measuredPoint.x - (int32_t) testPoint.x;\r
+    yDiff = (int32_t) measuredPoint.y - (int32_t) testPoint.y;\r
+    xOk = (xDiff >= -POINTS_MAX_XERROR) && (xDiff <= POINTS_MAX_XERROR);\r
+    yOk = (yDiff >= -POINTS_MAX_YERROR) && (yDiff <= POINTS_MAX_YERROR);\r
+\r
+    /* Wait for contact loss */\r
+    TSD_WaitPenReleased();\r
+\r
+    printf("TP: %d, %d -> %d, %d\n\r",\r
+        (unsigned int)measuredPoint.data[0], (unsigned int)measuredPoint.data[1],\r
+        (unsigned int)measuredPoint.x, (unsigned int)measuredPoint.y);\r
+\r
+    /* Check calibration result */\r
+    if (xOk && yOk) {\r
+\r
+        bCalibrationOk = 1;\r
+        CLEAR_STRING();\r
+        LCDD_DrawString(strX, strY, strTitle, COLOR_BLACK);\r
+        LCDD_DrawString(strX + 3*strW, strY + 2*strH, "Success !", COLOR_GREEN);\r
+        LCDD_Flush_CurrentCanvas();\r
+    }\r
+    else {\r
+\r
+        bCalibrationOk = 0;\r
+        CLEAR_STRING();\r
+        LCDD_DrawString(strX, strY, strTitle, COLOR_BLACK);\r
+        LCDD_DrawString(strX + strW, strY + 2*strH, "Error too big", COLOR_RED);\r
+        LCDD_Flush_CurrentCanvas();\r
+        TRACE_WARNING("X %u, Y %u; Diff %d, %d\n\r",\r
+            (unsigned int)(measuredPoint.x), (unsigned int)(measuredPoint.y), (unsigned int)xDiff, (unsigned int)yDiff);\r
+    }\r
+\r
+    /* Slight delay */\r
+    for (i = 0; i < DELAY_RESULT_DISPLAY; i++);\r
+    LCDD_Flush_CurrentCanvas();\r
+    return (xOk && yOk);\r
+}\r
+\r
+/**\r
+ * Read calibrate data to buffer.\r
+ * \param pBuffer  Data buffer.\r
+ * \param size     Size of data buffer in bytes.\r
+ */\r
+void TSDCom_ReadCalibrateData(void *pBuffer, uint32_t size)\r
+{\r
+    uint8_t *pDest = (uint8_t *)pBuffer;\r
+    \r
+    memcpy(pDest, (void const *)&bCalibrationOk, sizeof(bCalibrationOk));\r
+    pDest += sizeof(bCalibrationOk);\r
+    memcpy(pDest, &xSlope, sizeof(xSlope));\r
+    pDest += sizeof(xSlope);\r
+    memcpy(pDest, &ySlope, sizeof(ySlope));\r
+    pDest += sizeof(ySlope);\r
+    memcpy(pDest, &calibrationPoints[0].data, sizeof(calibrationPoints[0].data));\r
+    pDest += sizeof(calibrationPoints[0].data);\r
+}\r
+\r
+/**\r
+ * Restore calibrate data with buffer data.\r
+ * \param pBuffer  Data buffer.\r
+ * \param size     Size of data buffer in bytes.\r
+ */\r
+void TSDCom_RestoreCalibrateData(void *pBuffer, uint32_t size)\r
+{\r
+    uint8_t *pSrc = (uint8_t *)pBuffer;\r
+\r
+    memcpy((void *)&bCalibrationOk, pSrc, sizeof(bCalibrationOk));\r
+    pSrc += sizeof(bCalibrationOk);\r
+    memcpy(&xSlope, pSrc, sizeof(xSlope));\r
+    pSrc += sizeof(xSlope);\r
+    memcpy(&ySlope, pSrc, sizeof(ySlope));\r
+    pSrc += sizeof(ySlope);\r
+    memcpy(&calibrationPoints[0].data, pSrc, sizeof(calibrationPoints[0].data));\r
+    pSrc += sizeof(calibrationPoints[0].data);\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/tsd_tsadc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/tsd_tsadc.c
new file mode 100644 (file)
index 0000000..946eb8f
--- /dev/null
@@ -0,0 +1,375 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <board.h>\r
+\r
+#include <string.h>\r
+\r
+#ifdef REG_ADC_TSMR\r
+/** \addtogroup tsd_module\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** SWAP X & Y */\r
+#define TS_XY_SWAP\r
+\r
+/** Status that used for touchscreen */\r
+#define TS_STATUSES ( ADC_ISR_PENS | ADC_ISR_PEN | ADC_ISR_NOPEN \\r
+                    | ADC_ISR_XRDY | ADC_ISR_YRDY | ADC_ISR_PRDY )\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** X value is ready */\r
+#define TS_X_RDY        (1 << 0)\r
+/** Y value is ready */\r
+#define TS_Y_RDY        (1 << 1)\r
+/** Pressure value is ready */\r
+#define TS_P_RDY        (1 << 2)\r
+/** Pen status */\r
+#define TS_PEN_STAT     (1 << 7)\r
+/** All data is ready (X,Y & P) */\r
+#define TS_DATA_RDY     (TS_X_RDY|TS_Y_RDY|TS_P_RDY)\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Raw register value */\r
+static uint32_t dwRaw[3];\r
+/** Touchscreen data sampling results */\r
+static uint32_t dwTsData[3];\r
+/** Last Touchscreen sampling results */\r
+static uint32_t dwLastTsData[3];\r
+/** Touchscreen data ready */\r
+static uint8_t  bTsFlags = 0;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         External functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern uint32_t TSD_GetRaw(uint32_t i);\r
+\r
+/**\r
+ * Return raw register value.\r
+ */\r
+uint32_t TSD_GetRaw(uint32_t i)\r
+{\r
+    return dwRaw[i];\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Interrupt handler for the TouchScreen.\r
+ * Handles pen press, pen move and pen release events\r
+ * by invoking three callback functions.\r
+ */\r
+void TSD_Handler(uint32_t dwAdcStatus)\r
+{\r
+    Adc *pAdc = ADC;\r
+\r
+    uint32_t status;\r
+\r
+    /* TSADC status */\r
+    status  = dwAdcStatus;\r
+    status &= /*ADC_GetItMask(pAdc) &*/ TS_STATUSES;\r
+    if (status == 0)    return;\r
+\r
+    /* Pen released */\r
+    if (status & ADC_ISR_NOPEN)\r
+    {\r
+        if ((bTsFlags & TS_PEN_STAT) == 0)\r
+        {\r
+            /* Register last data */\r
+            memcpy(dwLastTsData, dwTsData, sizeof(dwTsData));\r
+            /* Invoke PenReleased callback */\r
+            if (TSDCom_IsCalibrationOk())\r
+                TSD_PenReleased(dwTsData[0], dwTsData[1]);\r
+        }\r
+        bTsFlags = 0;\r
+        /* Stop periodic trigger & enable pen */\r
+        ADC_SetTsAverage(pAdc, ADC_TSMR_TSAV_NO_FILTER);\r
+        ADC_SetTsDebounce(pAdc, BOARD_TOUCHSCREEN_DEBOUNCE);\r
+        ADC_SetTriggerMode(pAdc, ADC_TRGR_TRGMOD_PEN_TRIG);\r
+        /* Disable pen release detect */\r
+        ADC_DisableIt(pAdc, ADC_IDR_NOPEN);\r
+        /* Enable pen press detect */\r
+        ADC_EnableIt(pAdc, ADC_IER_PEN);\r
+    }\r
+    /* Pen pressed */\r
+    else if (status & ADC_ISR_PEN)\r
+    {\r
+        bTsFlags |= TS_PEN_STAT;\r
+        /* Configure for peripdic trigger */\r
+        ADC_SetTsAverage(pAdc, ADC_TSMR_TSAV_AVG8CONV);\r
+        ADC_SetTsDebounce(pAdc, 300);         /* 300ns */\r
+        ADC_SetTriggerMode(pAdc, ADC_TRGR_TRGMOD_PERIOD_TRIG);\r
+        /* Disable pen press detect */\r
+        ADC_DisableIt(pAdc, ADC_IDR_PEN);\r
+        /* Enable pen release detect */\r
+        ADC_EnableIt(pAdc, ADC_IER_NOPEN|ADC_IER_XRDY|ADC_IER_YRDY|ADC_IER_PRDY);\r
+    }\r
+    else if (status & ADC_ISR_PENS)\r
+    {\r
+        /* X */\r
+        if (status & ADC_ISR_XRDY)\r
+        {\r
+            bTsFlags |= TS_X_RDY;\r
+        }\r
+        /* Y */\r
+        if (status & ADC_ISR_YRDY)\r
+        {\r
+            bTsFlags |= TS_Y_RDY;\r
+        }\r
+        /* P: (X/1024)*[(Z2/Z1)-1] */\r
+        if (status & ADC_ISR_PRDY)\r
+        {\r
+            bTsFlags |= TS_P_RDY;\r
+        }\r
+    }\r
+    /* X,Y,P are ready */\r
+    if ((bTsFlags & TS_DATA_RDY) == TS_DATA_RDY)\r
+    {\r
+        uint32_t xpos, z2, z1;\r
+        bTsFlags &= ~TS_DATA_RDY;\r
+\r
+        /* Get X,Y */\r
+        TSD_GetRawMeasurement(dwRaw);\r
+\r
+        /* Interprate X,Y */\r
+        TSDCom_InterpolateMeasurement(dwRaw, dwTsData);\r
+\r
+        /* Get P: Rp = Rxp*(Xpos/1024)*[(Z2/Z1)-1] */\r
+        dwRaw[2] = ADC_GetTsPressure(pAdc);\r
+        #ifdef TS_XY_SWAP\r
+        xpos = (dwRaw[1]);\r
+        #else\r
+        xpos = (dwRaw[0]);\r
+        #endif\r
+        xpos = (xpos & ADC_XPOSR_XPOS_Msk) >> ADC_XPOSR_XPOS_Pos;\r
+        z2 = (dwRaw[2] & ADC_PRESSR_Z2_Msk) >> ADC_PRESSR_Z2_Pos;\r
+        z1 = (dwRaw[2] & ADC_PRESSR_Z1_Msk) >> ADC_PRESSR_Z1_Pos;\r
+        dwTsData[2] = (xpos) * (z2 - z1) / z1;\r
+\r
+        /* PenPress */\r
+        if (bTsFlags & TS_PEN_STAT)\r
+        {\r
+            bTsFlags &= ~TS_PEN_STAT;\r
+            /* Invoke PenPress callback */\r
+            if (TSDCom_IsCalibrationOk())\r
+                TSD_PenPressed(dwTsData[0], dwTsData[1], dwTsData[2]);\r
+        }\r
+        /* Periodic if data change invoke callback */\r
+        if (dwTsData[0] != dwLastTsData[0]\r
+            ||   dwTsData[1] != dwLastTsData[1]\r
+            ||   dwTsData[2] != dwLastTsData[2] )\r
+        {\r
+            /* Register last data */\r
+            memcpy(dwLastTsData, dwTsData, sizeof(dwTsData));\r
+            /* Invoke PenMoved callback */\r
+            if (TSDCom_IsCalibrationOk())\r
+                TSD_PenMoved(dwTsData[0], dwTsData[1], dwTsData[2]);\r
+        }\r
+        \r
+    }\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Reads and store a touchscreen measurement in the provided array.\r
+ * The value stored are:\r
+ *  - data[0] = XPOS * 1024 / XSCALE\r
+ *  - data[1] = YPOS * 1024 / YSCALE\r
+ * \param pData  Array where the measurements will be stored\r
+ */\r
+void TSD_GetRawMeasurement(uint32_t *pData)\r
+{\r
+    Adc *pAdc = ADC;\r
+    uint32_t xr, yr;\r
+    #ifdef TS_XY_SWAP\r
+    yr = ADC_GetTsXPosition(pAdc);\r
+    xr = ADC_GetTsYPosition(pAdc);\r
+    #else\r
+    xr = ADC_GetTsXPosition(pAdc);\r
+    yr = ADC_GetTsYPosition(pAdc);\r
+    #endif\r
+    pData[0]  = ((xr & ADC_XPOSR_XPOS_Msk) >> ADC_XPOSR_XPOS_Pos) * 1024 ;\r
+    pData[0] /= ((xr & ADC_XPOSR_XSCALE_Msk) >> ADC_XPOSR_XSCALE_Pos);\r
+    pData[1]  = ((yr & ADC_YPOSR_YPOS_Msk) >> ADC_YPOSR_YPOS_Pos) * 1024 ;\r
+    pData[1] /= ((yr & ADC_YPOSR_YSCALE_Msk) >> ADC_YPOSR_YSCALE_Pos);\r
+}\r
+\r
+/**\r
+ * Wait pen pressed\r
+ */\r
+void TSD_WaitPenPressed(void)\r
+{\r
+    Adc *pAdc = ADC;\r
+    uint8_t bFlags = 0;\r
+    uint32_t dwStatus;\r
+    /* Wait for touch & end of conversion */\r
+    while (1)\r
+    {\r
+        dwStatus = ADC_GetStatus(pAdc);\r
+        if (dwStatus & ADC_ISR_PEN) bFlags |= 8;\r
+        if (dwStatus & ADC_ISR_XRDY)bFlags |= 1;\r
+        if (dwStatus & ADC_ISR_YRDY)bFlags |= 2;\r
+        if (dwStatus & ADC_ISR_PRDY)bFlags |= 4;\r
+        if (bFlags == 0xF) break;\r
+    }\r
+}\r
+\r
+/**\r
+ * Wait pen released\r
+ */\r
+void TSD_WaitPenReleased(void)\r
+{\r
+    Adc *pAdc = ADC;\r
+\r
+    /* Wait for contact loss */\r
+    while((ADC_GetStatus(pAdc) & ADC_ISR_NOPEN) == 0);\r
+}\r
+\r
+/**\r
+ * Initializes the touchscreen driver and starts the calibration process. When\r
+ * finished, the touchscreen is operational.\r
+ * The configuration is taken from the board.h of the device being compiled.\r
+ * Important: the LCD driver must have been initialized prior to calling this\r
+ * function.\r
+ */\r
+void TSD_Initialize(void)\r
+{\r
+    Adc *pAdc = ADC;\r
+\r
+    bTsFlags = 0;\r
+\r
+    /* Configuration */\r
+    PMC_EnablePeripheral(ID_ADC);\r
+\r
+    ADC_SetClock(pAdc, BOARD_TOUCHSCREEN_ADCCLK, BOARD_MCK);\r
+    ADC_SetStartupTime(pAdc, BOARD_TOUCHSCREEN_STARTUP);\r
+    ADC_SetTrackingTime(pAdc, BOARD_TOUCHSCREEN_SHTIM);\r
+\r
+    ADC_SetTriggerPeriod(pAdc, 20000000); /*  20ms */\r
+\r
+    ADC_SetTsMode(pAdc, ADC_TSMR_TSMODE_4_WIRE);\r
+    ADC_SetTsAverage(pAdc, ADC_TSMR_TSAV_NO_FILTER);\r
+\r
+    ADC_SetTsPenDetect(pAdc, 1);\r
+    ADC_SetTsDebounce(pAdc, BOARD_TOUCHSCREEN_DEBOUNCE);\r
+}\r
+\r
+/**\r
+ * Enable/Disable TSD capturing\r
+ */\r
+void TSD_Enable(uint8_t bEnDis)\r
+{\r
+    Adc *pAdc = ADC;\r
+    if (bEnDis)\r
+    {\r
+        ADC_SetTsAverage(pAdc, ADC_TSMR_TSAV_NO_FILTER);\r
+        ADC_TsCalibration(pAdc);\r
+        ADC_SetTriggerMode(pAdc, ADC_TRGR_TRGMOD_PEN_TRIG);\r
+        ADC_EnableIt(pAdc, ADC_IER_PEN);\r
+    }\r
+    else\r
+    {\r
+        ADC_SetTriggerMode(pAdc, ADC_TRGR_TRGMOD_NO_TRIGGER);\r
+        ADC_DisableIt(pAdc, TS_STATUSES);\r
+        ADC_GetStatus(pAdc);\r
+        ADC_GetTsXPosition(pAdc);\r
+        ADC_GetTsYPosition(pAdc);\r
+        ADC_GetTsPressure(pAdc);\r
+    }\r
+}\r
+\r
+/**\r
+ * Do touchscreen calibration\r
+ * \param pLcdBuffer  LCD buffer to use for displaying the calibration info.\r
+ * \return 1 if calibration is Ok, 0 else\r
+ */\r
+uint8_t TSD_Calibrate(void)\r
+{\r
+    Adc *pAdc = ADC;\r
+    uint8_t ret = 0;\r
+\r
+    /* Calibration is done only once */\r
+    if(TSDCom_IsCalibrationOk())    return 1;\r
+\r
+    /* Disable touch */\r
+    TSD_Enable(0);\r
+\r
+    /* Enable capturing */\r
+    ADC_SetTriggerMode(pAdc, ADC_TRGR_TRGMOD_PEN_TRIG);\r
+\r
+    /* Do calibration */\r
+    ret = TSDCom_Calibrate();\r
+\r
+    /* Configure interrupt generation\r
+       Do it only if the calibration is Ok. */\r
+    TSD_Enable(ret);\r
+\r
+    return ret;\r
+}\r
+\r
+/**\r
+ * Reset/stop the touchscreen\r
+ */\r
+void TSD_DeInitialize(void)\r
+{\r
+    Adc *pAdc = ADC;\r
+    /* Disable TS related interrupts */\r
+    ADC_DisableIt(pAdc, TS_STATUSES);\r
+    /* Disable Trigger */\r
+    ADC_SetTriggerMode(pAdc, ADC_TRGR_TRGMOD_NO_TRIGGER);\r
+    /* Disable TS mode */\r
+    ADC_SetTsMode(pAdc, ADC_TSMR_TSMODE_NONE);\r
+    bTsFlags = 0;\r
+}\r
+\r
+/**@}*/\r
+#endif /* #ifdef REG_ADC_TSMR */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/twid.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/twid.c
new file mode 100644 (file)
index 0000000..aeb80c3
--- /dev/null
@@ -0,0 +1,753 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "board.h"\r
+\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+#define TWITIMEOUTMAX 0xfffff\r
+\r
+\r
+static sXdmad twi_dma;\r
+static sXdmadCfg twi_dmaCfg;\r
+static uint32_t dmaWriteChannel,dmaReadChannel;\r
+static LinkedListDescriporView1 dmaWriteLinkList[1];\r
+static LinkedListDescriporView1 dmaReadLinkList[1];\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** TWI driver callback function.*/\r
+typedef void (*TwiCallback)(Async *);\r
+\r
+/** \brief TWI asynchronous transfer descriptor.*/\r
+typedef struct _AsyncTwi {\r
+\r
+    /** Asynchronous transfer status. */\r
+    volatile uint32_t status;\r
+    // Callback function to invoke when transfer completes or fails.*/\r
+    TwiCallback callback;\r
+    /** Pointer to the data buffer.*/\r
+    uint8_t *pData;\r
+    /** Total number of bytes to transfer.*/\r
+    uint32_t num;\r
+    /** Number of already transferred bytes.*/\r
+    uint32_t transferred;\r
+\r
+} AsyncTwi;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Initializes a TWI DMA Read channel.\r
+ */\r
+static void TWID_DmaInitializeRead(uint8_t TWI_ID)\r
+{\r
+    \r
+    /* Allocate a XDMA channel, Read accesses into TWI_THR */\r
+    dmaReadChannel = XDMAD_AllocateChannel( &twi_dma, TWI_ID, XDMAD_TRANSFER_MEMORY);\r
+    if ( dmaReadChannel == XDMAD_ALLOC_FAILED )\r
+    {\r
+        printf("-E- Can't allocate XDMA channel\n\r");\r
+    }\r
+    XDMAD_PrepareChannel(&twi_dma, dmaReadChannel );\r
+}\r
+\r
+/**\r
+ * \brief Initializes a TWI DMA write channel.\r
+ */\r
+static void TWID_DmaInitializeWrite(uint8_t TWI_ID)\r
+{\r
+    \r
+    /* Allocate a XDMA channel, Write accesses into TWI_THR */\r
+    dmaWriteChannel = XDMAD_AllocateChannel( &twi_dma, XDMAD_TRANSFER_MEMORY, TWI_ID);\r
+    if ( dmaWriteChannel == XDMAD_ALLOC_FAILED )\r
+    {\r
+        printf("-E- Can't allocate XDMA channel\n\r");\r
+    }\r
+    XDMAD_PrepareChannel(&twi_dma, dmaWriteChannel );\r
+\r
+   \r
+}\r
+/**\r
+ * \brief Initializes a TWI driver instance, using the given TWI peripheral.\r
+ * \note The peripheral must have been initialized properly before calling this function.\r
+ * \param pTwid  Pointer to the Twid instance to initialize.\r
+ * \param pTwi  Pointer to the TWI peripheral to use.\r
+ */\r
+void TWID_Initialize(Twid *pTwid, Twi *pTwi)\r
+{\r
+    TRACE_DEBUG( "TWID_Initialize()\n\r" ) ;\r
+    assert( pTwid != NULL ) ;\r
+    assert( pTwi != NULL ) ;\r
+\r
+    /* Initialize driver. */\r
+    pTwid->pTwi = pTwi;\r
+    pTwid->pTransfer = 0;\r
+    \r
+    /* Initialize XDMA driver instance with polling mode */\r
+    XDMAD_Initialize( &twi_dma, 1 );\r
+}\r
+\r
+\r
+/**\r
+ * \brief Configure xDMA write linker list for TWI transfer.\r
+ */\r
+static void _xdma_configure_write(uint8_t *buf, uint32_t len, uint8_t TWI_ID)\r
+{\r
+    uint32_t i;\r
+    uint32_t xdmaCndc, Thr;\r
+    \r
+    Thr = (uint32_t)&(TWI0->TWI_THR);\r
+    if(TWI_ID==ID_TWI1)\r
+    {\r
+      Thr = (uint32_t)&(TWI1->TWI_THR);\r
+    }\r
+    if(TWI_ID==ID_TWI2)\r
+    {\r
+      Thr = (uint32_t)&(TWI2->TWI_THR);\r
+    }\r
+    for ( i = 0; i < 1; i++){\r
+        dmaWriteLinkList[i].mbr_ubc = XDMA_UBC_NVIEW_NDV1 \r
+                                    |(( i == len - 1) ? 0: XDMA_UBC_NDE_FETCH_EN)\r
+                                    | len ;\r
+        dmaWriteLinkList[i].mbr_sa = (uint32_t)&buf[i];\r
+        dmaWriteLinkList[i].mbr_da = Thr;\r
+        if ( i == len - 1) dmaWriteLinkList[i].mbr_nda = 0;\r
+            else dmaWriteLinkList[i].mbr_nda = (uint32_t)&dmaWriteLinkList[ i + 1 ];\r
+        }\r
+        twi_dmaCfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN \r
+                         | XDMAC_CC_MBSIZE_SINGLE \r
+                         | XDMAC_CC_DSYNC_MEM2PER \r
+                         | XDMAC_CC_CSIZE_CHK_1 \r
+                         | XDMAC_CC_DWIDTH_BYTE\r
+                         | XDMAC_CC_SIF_AHB_IF0 \r
+                         | XDMAC_CC_DIF_AHB_IF1 \r
+                         | XDMAC_CC_SAM_INCREMENTED_AM \r
+                         | XDMAC_CC_DAM_FIXED_AM \r
+                         | XDMAC_CC_PERID(XDMAIF_Get_ChannelNumber( 0, TWI_ID, XDMAD_TRANSFER_TX ));\r
+        xdmaCndc = XDMAC_CNDC_NDVIEW_NDV1 \r
+                 | XDMAC_CNDC_NDE_DSCR_FETCH_EN \r
+                 | XDMAC_CNDC_NDSUP_SRC_PARAMS_UPDATED\r
+                 | XDMAC_CNDC_NDDUP_DST_PARAMS_UNCHANGED ;\r
+        CP15_coherent_dcache_for_dma((uint32_t)&dmaWriteLinkList, ((uint32_t)&dmaWriteLinkList + sizeof(LinkedListDescriporView1) * len));\r
+        XDMAD_ConfigureTransfer( &twi_dma, dmaWriteChannel, &twi_dmaCfg, xdmaCndc, (uint32_t)&dmaWriteLinkList[0]);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Configure xDMA read linker list for TWI transfer.\r
+ */\r
+static void _xdma_configure_read(uint8_t *buf, uint32_t len, uint8_t TWI_ID)\r
+{\r
+    uint32_t i;\r
+    uint32_t xdmaCndc, Rhr;\r
+    \r
+    Rhr = (uint32_t)&(TWI0->TWI_RHR);\r
+    if(TWI_ID==ID_TWI1)\r
+    {\r
+      Rhr = (uint32_t)&(TWI1->TWI_RHR);\r
+    }\r
+    if(TWI_ID==ID_TWI2)\r
+    {\r
+      Rhr = (uint32_t)&(TWI2->TWI_RHR);\r
+    }\r
+    for ( i = 0; i < 1; i++){\r
+        dmaReadLinkList[i].mbr_ubc = XDMA_UBC_NVIEW_NDV1 \r
+                               | (( i == len - 1) ? 0: XDMA_UBC_NDE_FETCH_EN)\r
+                               | len ;\r
+        dmaReadLinkList[i].mbr_sa  = Rhr;\r
+        dmaReadLinkList[i].mbr_da = (uint32_t)&buf[i];\r
+        if ( i == len - 1)\r
+             dmaReadLinkList[i].mbr_nda = 0;\r
+        else\r
+             dmaReadLinkList[i].mbr_nda = (uint32_t)&dmaReadLinkList[ i + 1 ];\r
+        }\r
+        twi_dmaCfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN \r
+                         | XDMAC_CC_MBSIZE_SINGLE \r
+                         | XDMAC_CC_DSYNC_PER2MEM \r
+                         | XDMAC_CC_CSIZE_CHK_1 \r
+                         | XDMAC_CC_DWIDTH_BYTE\r
+                         | XDMAC_CC_SIF_AHB_IF1 \r
+                         | XDMAC_CC_DIF_AHB_IF0 \r
+                         | XDMAC_CC_SAM_FIXED_AM \r
+                         | XDMAC_CC_DAM_INCREMENTED_AM \r
+                         | XDMAC_CC_PERID(XDMAIF_Get_ChannelNumber( 0, TWI_ID, XDMAD_TRANSFER_RX ));\r
+        xdmaCndc = XDMAC_CNDC_NDVIEW_NDV1 \r
+                 | XDMAC_CNDC_NDE_DSCR_FETCH_EN \r
+                 | XDMAC_CNDC_NDSUP_SRC_PARAMS_UPDATED\r
+                 | XDMAC_CNDC_NDDUP_DST_PARAMS_UPDATED ;\r
+        CP15_coherent_dcache_for_dma((uint32_t)&dmaReadLinkList, ((uint32_t)&dmaReadLinkList + sizeof(LinkedListDescriporView1) * len));\r
+        XDMAD_ConfigureTransfer( &twi_dma, dmaReadChannel, &twi_dmaCfg, xdmaCndc, (uint32_t)&dmaReadLinkList[0]);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Interrupt handler for a TWI peripheral. Manages asynchronous transfer\r
+ * occuring on the bus. This function MUST be called by the interrupt service\r
+ * routine of the TWI peripheral if asynchronous read/write are needed.\r
+  * \param pTwid  Pointer to a Twid instance.\r
+ */\r
+void TWID_Handler( Twid *pTwid )\r
+{\r
+    uint32_t status;\r
+    AsyncTwi *pTransfer ;\r
+    Twi *pTwi ;\r
+\r
+    assert( pTwid != NULL ) ;\r
+\r
+    pTransfer = (AsyncTwi*)pTwid->pTransfer ;\r
+    assert( pTransfer != NULL ) ;\r
+    pTwi = pTwid->pTwi ;\r
+    assert( pTwi != NULL ) ;\r
+\r
+    /* Retrieve interrupt status */\r
+    status = TWI_GetMaskedStatus(pTwi);\r
+\r
+    /* Byte received */\r
+    if (TWI_STATUS_RXRDY(status)) {\r
+\r
+        pTransfer->pData[pTransfer->transferred] = TWI_ReadByte(pTwi);\r
+        pTransfer->transferred++;\r
+\r
+        /* check for transfer finish */\r
+        if (pTransfer->transferred == pTransfer->num) {\r
+\r
+            TWI_DisableIt(pTwi, TWI_IDR_RXRDY);\r
+            TWI_EnableIt(pTwi, TWI_IER_TXCOMP);\r
+        }\r
+        /* Last byte? */\r
+        else if (pTransfer->transferred == (pTransfer->num - 1)) {\r
+\r
+            TWI_Stop(pTwi);\r
+        }\r
+    }\r
+    /* Byte sent*/\r
+    else if (TWI_STATUS_TXRDY(status)) {\r
+\r
+        /* Transfer finished ? */\r
+        if (pTransfer->transferred == pTransfer->num) {\r
+\r
+            TWI_DisableIt(pTwi, TWI_IDR_TXRDY);\r
+            TWI_EnableIt(pTwi, TWI_IER_TXCOMP);\r
+            TWI_SendSTOPCondition(pTwi);\r
+        }\r
+        /* Bytes remaining */\r
+        else {\r
+\r
+            TWI_WriteByte(pTwi, pTransfer->pData[pTransfer->transferred]);\r
+            pTransfer->transferred++;\r
+        }\r
+    }\r
+    /* Transfer complete*/\r
+    else if (TWI_STATUS_TXCOMP(status)) {\r
+\r
+        TWI_DisableIt(pTwi, TWI_IDR_TXCOMP);\r
+        pTransfer->status = 0;\r
+        if (pTransfer->callback) {\r
+            pTransfer->callback((Async *)(void*) pTransfer);\r
+        }\r
+        pTwid->pTransfer = 0;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Asynchronously reads data from a slave on the TWI bus. An optional\r
+ * callback function is triggered when the transfer is complete.\r
+ * \param pTwid  Pointer to a Twid instance.\r
+ * \param address  TWI slave address.\r
+ * \param iaddress  Optional slave internal address.\r
+ * \param isize  Internal address size in bytes.\r
+ * \param pData  Data buffer for storing received bytes.\r
+ * \param num  Number of bytes to read.\r
+ * \param pAsync  Asynchronous transfer descriptor.\r
+ * \return 0 if the transfer has been started; otherwise returns a TWI error code.\r
+ */\r
+uint8_t TWID_Read(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync)\r
+{\r
+    Twi *pTwi;\r
+    AsyncTwi *pTransfer;\r
+    uint32_t timeout = 0;\r
+    uint32_t i = 0;\r
+    uint32_t status;\r
+\r
+    assert( pTwid != NULL ) ;\r
+    pTwi = pTwid->pTwi;\r
+    pTransfer = (AsyncTwi *) pTwid->pTransfer;\r
+\r
+    assert( (address & 0x80) == 0 ) ;\r
+    assert( (iaddress & 0xFF000000) == 0 ) ;\r
+    assert( isize < 4 ) ;\r
+\r
+    /* Check that no transfer is already pending*/\r
+    if (pTransfer) {\r
+\r
+        TRACE_ERROR("TWID_Read: A transfer is already pending\n\r");\r
+        return TWID_ERROR_BUSY;\r
+    }\r
+\r
+    /* Asynchronous transfer*/\r
+    if (pAsync) {\r
+\r
+        /* Update the transfer descriptor */\r
+        pTwid->pTransfer = pAsync;\r
+        pTransfer = (AsyncTwi *) pAsync;\r
+        pTransfer->status = ASYNC_STATUS_PENDING;\r
+        pTransfer->pData = pData;\r
+        pTransfer->num = num;\r
+        pTransfer->transferred = 0;\r
+\r
+        /* Enable read interrupt and start the transfer */\r
+        TWI_EnableIt(pTwi, TWI_IER_RXRDY);\r
+        TWI_StartRead(pTwi, address, iaddress, isize);\r
+    }\r
+    /* Synchronous transfer*/\r
+    else {\r
+\r
+        /* Start read*/\r
+        TWI_StartRead(pTwi, address, iaddress, isize);\r
+        if (num != 1) \r
+        {\r
+                status = TWI_GetStatus(pTwi);\r
+\r
+                if(status & TWI_SR_NACK)\r
+                    TRACE_ERROR("TWID NACK error\n\r");\r
+                timeout = 0;\r
+                while( ! (status & TWI_SR_RXRDY) && (++timeout<TWITIMEOUTMAX))\r
+                {\r
+                    status = TWI_GetStatus(pTwi);\r
+                    //TRACE_ERROR("TWID status %x\n\r",TWI_GetStatus(pTwi));\r
+                }\r
+\r
+                pData[0] = TWI_ReadByte(pTwi);\r
+                for( i = 1; i < num - 1; i++)\r
+                {\r
+                    status = TWI_GetStatus(pTwi);\r
+                    if(status & TWI_SR_NACK)\r
+                      TRACE_ERROR("TWID NACK error\n\r");\r
+                    timeout = 0;\r
+                    while( ! (status & TWI_SR_RXRDY) && (++timeout<TWITIMEOUTMAX))\r
+                    {\r
+                        status = TWI_GetStatus(pTwi);\r
+                        //TRACE_ERROR("TWID status %x\n\r",TWI_GetStatus(pTwi));\r
+                    }\r
+                    pData[i] = TWI_ReadByte(pTwi);\r
+                }\r
+        }\r
+        TWI_Stop(pTwi);\r
+        status = TWI_GetStatus(pTwi);\r
+        if(status & TWI_SR_NACK)\r
+          TRACE_ERROR("TWID NACK error\n\r");\r
+        timeout = 0;\r
+        while( ! (status & TWI_SR_RXRDY)  && (++timeout<TWITIMEOUTMAX))\r
+        {\r
+            status = TWI_GetStatus(pTwi);\r
+            //TRACE_ERROR("TWID status %x\n\r",TWI_GetStatus(pTwi));\r
+        }\r
+\r
+        pData[i] = TWI_ReadByte(pTwi);\r
+        timeout = 0;\r
+        status = TWI_GetStatus(pTwi);\r
+        while( !(status & TWI_SR_TXCOMP) && (++timeout<TWITIMEOUTMAX))\r
+        {\r
+            status = TWI_GetStatus(pTwi);\r
+            //TRACE_ERROR("TWID status %x\n\r",TWI_GetStatus(pTwi));\r
+        }\r
+#if 0\r
+        /* Read all bytes, setting STOP before the last byte*/\r
+        while (num > 0) {\r
+\r
+            /* Last byte ?*/\r
+            if (num == 1) {\r
+\r
+                TWI_Stop(pTwi);\r
+            }\r
+\r
+            /* Wait for byte then read and store it*/\r
+            timeout = 0;\r
+            while( !TWI_ByteReceived(pTwi) && (++timeout<TWITIMEOUTMAX) );\r
+            if (timeout == TWITIMEOUTMAX) {\r
+                TRACE_ERROR("TWID Timeout BR\n\r");\r
+            }\r
+            *pData++ = TWI_ReadByte(pTwi);\r
+            num--;\r
+        }\r
+\r
+        /* Wait for transfer to be complete */\r
+        timeout = 0;\r
+        while( !TWI_TransferComplete(pTwi) && (++timeout<TWITIMEOUTMAX) );\r
+        if (timeout == TWITIMEOUTMAX) {\r
+            TRACE_ERROR("TWID Timeout TC\n\r");\r
+        }\r
+#endif\r
+    }\r
+\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * \brief Asynchronously reads data from a slave on the TWI bus. An optional\r
+ * callback function is triggered when the transfer is complete.\r
+ * \param pTwid  Pointer to a Twid instance.\r
+ * \param address  TWI slave address.\r
+ * \param iaddress  Optional slave internal address.\r
+ * \param isize  Internal address size in bytes.\r
+ * \param pData  Data buffer for storing received bytes.\r
+ * \param num  Number of bytes to read.\r
+ * \param pAsync  Asynchronous transfer descriptor.\r
+ * \param TWI_ID  TWI ID for TWI0, TWI1, TWI2.\r
+ * \return 0 if the transfer has been started; otherwise returns a TWI error code.\r
+ */\r
+uint8_t TWID_DmaRead(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync,\r
+    uint8_t TWI_ID)\r
+{\r
+    Twi *pTwi;\r
+    AsyncTwi *pTransfer;\r
+    uint32_t timeout = 0;\r
+    uint32_t status;\r
+\r
+    assert( pTwid != NULL ) ;\r
+    pTwi = pTwid->pTwi;\r
+    pTransfer = (AsyncTwi *) pTwid->pTransfer;\r
+\r
+    assert( (address & 0x80) == 0 ) ;\r
+    assert( (iaddress & 0xFF000000) == 0 ) ;\r
+    assert( isize < 4 ) ;\r
+\r
+    /* Check that no transfer is already pending*/\r
+    if (pTransfer) {\r
+\r
+        TRACE_ERROR("TWID_Read: A transfer is already pending\n\r");\r
+        return TWID_ERROR_BUSY;\r
+    }\r
+\r
+    /* Asynchronous transfer*/\r
+    if (pAsync) {\r
+\r
+        /* Update the transfer descriptor */\r
+        pTwid->pTransfer = pAsync;\r
+        pTransfer = (AsyncTwi *) pAsync;\r
+        pTransfer->status = ASYNC_STATUS_PENDING;\r
+        pTransfer->pData = pData;\r
+        pTransfer->num = num;\r
+        pTransfer->transferred = 0;\r
+\r
+        /* Enable read interrupt and start the transfer */\r
+        TWI_EnableIt(pTwi, TWI_IER_RXRDY);\r
+        TWI_StartRead(pTwi, address, iaddress, isize);\r
+    }\r
+    /* Synchronous transfer*/\r
+    else {\r
+\r
+        TWID_DmaInitializeRead(TWI_ID);\r
+        _xdma_configure_read(pData, num, TWI_ID);\r
+        /* Start read*/\r
+        XDMAD_StartTransfer( &twi_dma, dmaReadChannel );\r
+        \r
+        TWI_StartRead(pTwi, address, iaddress, isize);   \r
+        \r
+        while((XDMAD_IsTransferDone(&twi_dma, dmaReadChannel)) && (++timeout<TWITIMEOUTMAX));\r
+        \r
+        XDMAD_StopTransfer( &twi_dma, dmaReadChannel );\r
+        \r
+        status = TWI_GetStatus(pTwi);\r
+        timeout=0;\r
+        while( !(status & TWI_SR_RXRDY) && (++timeout<TWITIMEOUTMAX));\r
+        \r
+        TWI_Stop(pTwi);\r
+        \r
+        TWI_ReadByte(pTwi);\r
+        \r
+        status = TWI_GetStatus(pTwi);\r
+        timeout=0;\r
+        while( !(status & TWI_SR_RXRDY) && (++timeout<TWITIMEOUTMAX));\r
+        \r
+        TWI_ReadByte(pTwi);\r
+        \r
+        status = TWI_GetStatus(pTwi);\r
+        timeout=0;\r
+        while( !(status & TWI_SR_TXCOMP) && (++timeout<TWITIMEOUTMAX));\r
+        if (timeout == TWITIMEOUTMAX) {\r
+            TRACE_ERROR("TWID Timeout Read\n\r");\r
+        }\r
+        XDMAD_FreeChannel(&twi_dma, dmaReadChannel);\r
+\r
+    }\r
+\r
+    return 0;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Asynchronously sends data to a slave on the TWI bus. An optional callback\r
+ * function is invoked whenever the transfer is complete.\r
+ * \param pTwid  Pointer to a Twid instance.\r
+ * \param address  TWI slave address.\r
+ * \param iaddress  Optional slave internal address.\r
+ * \param isize  Number of internal address bytes.\r
+ * \param pData  Data buffer for storing received bytes.\r
+ * \param num  Data buffer to send.\r
+ * \param pAsync  Asynchronous transfer descriptor.\r
+ * \param TWI_ID  TWI ID for TWI0, TWI1, TWI2.\r
+ * \return 0 if the transfer has been started; otherwise returns a TWI error code.\r
+ */\r
+uint8_t TWID_DmaWrite(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync,\r
+    uint8_t TWI_ID)\r
+{\r
+    Twi *pTwi = pTwid->pTwi;\r
+    AsyncTwi *pTransfer = (AsyncTwi *) pTwid->pTransfer;\r
+    uint32_t timeout = 0;\r
+    uint32_t status;\r
+    //uint8_t singleTransfer = 0;\r
+    assert( pTwi != NULL ) ;\r
+    assert( (address & 0x80) == 0 ) ;\r
+    assert( (iaddress & 0xFF000000) == 0 ) ;\r
+    assert( isize < 4 ) ;\r
+\r
+//    if(num == 1) singleTransfer = 1;\r
+    /* Check that no transfer is already pending */\r
+    if (pTransfer) {\r
+\r
+        TRACE_ERROR("TWI_Write: A transfer is already pending\n\r");\r
+        return TWID_ERROR_BUSY;\r
+    }\r
+\r
+    /* Asynchronous transfer */\r
+    if (pAsync) {\r
+\r
+        /* Update the transfer descriptor */\r
+        pTwid->pTransfer = pAsync;\r
+        pTransfer = (AsyncTwi *) pAsync;\r
+        pTransfer->status = ASYNC_STATUS_PENDING;\r
+        pTransfer->pData = pData;\r
+        pTransfer->num = num;\r
+        pTransfer->transferred = 1;\r
+\r
+        /* Enable write interrupt and start the transfer */\r
+        TWI_StartWrite(pTwi, address, iaddress, isize, *pData);\r
+        TWI_EnableIt(pTwi, TWI_IER_TXRDY);\r
+    }\r
+    /* Synchronous transfer*/\r
+    else {\r
+\r
+        CP15_coherent_dcache_for_dma ( (uint32_t)pData, (uint32_t)pData );\r
+        TWID_DmaInitializeWrite(TWI_ID);\r
+        _xdma_configure_write(pData, num, TWI_ID);\r
+        /* Set slave address and number of internal address bytes. */\r
+        pTwi->TWI_MMR = 0;\r
+        pTwi->TWI_MMR = (isize << 8) | (address << 16);\r
+\r
+        /* Set internal address bytes. */\r
+        pTwi->TWI_IADR = 0;\r
+        pTwi->TWI_IADR = iaddress;\r
+        XDMAD_StartTransfer( &twi_dma, dmaWriteChannel );\r
+           \r
+        while(XDMAD_IsTransferDone(&twi_dma, dmaWriteChannel));\r
+        \r
+        XDMAD_StopTransfer( &twi_dma, dmaWriteChannel );\r
+        \r
+        status = TWI_GetStatus(pTwi);\r
+        timeout = 0;\r
+        while( !(status & TWI_SR_TXRDY) && (timeout++ < TWITIMEOUTMAX) )\r
+        {\r
+            status = TWI_GetStatus(pTwi);\r
+        }\r
+        if (timeout == TWITIMEOUTMAX) {\r
+            TRACE_ERROR("TWID Timeout TXRDY\n\r");\r
+        }\r
+        \r
+        /* Send a STOP condition */\r
+        TWI_Stop(pTwi);\r
+        \r
+        status = TWI_GetStatus(pTwi);\r
+        timeout = 0;\r
+        while( !(status & TWI_SR_TXCOMP) && (++timeout<TWITIMEOUTMAX))\r
+        {\r
+            status = TWI_GetStatus(pTwi);\r
+        }\r
+        if (timeout == TWITIMEOUTMAX) {\r
+            TRACE_ERROR("TWID Timeout Write\n\r");\r
+        }\r
+       \r
+        CP15_invalidate_dcache_for_dma ( (uint32_t)pData, (uint32_t)(pData) );\r
+        XDMAD_FreeChannel(&twi_dma, dmaWriteChannel);\r
+        \r
+    }\r
+\r
+    return 0;\r
+}\r
+\r
+\r
+\r
+/**\r
+ * \brief Asynchronously sends data to a slave on the TWI bus. An optional callback\r
+ * function is invoked whenever the transfer is complete.\r
+ * \param pTwid  Pointer to a Twid instance.\r
+ * \param address  TWI slave address.\r
+ * \param iaddress  Optional slave internal address.\r
+ * \param isize  Number of internal address bytes.\r
+ * \param pData  Data buffer for storing received bytes.\r
+ * \param num  Data buffer to send.\r
+ * \param pAsync  Asynchronous transfer descriptor.\r
+ * \return 0 if the transfer has been started; otherwise returns a TWI error code.\r
+ */\r
+uint8_t TWID_Write(\r
+    Twid *pTwid,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t *pData,\r
+    uint32_t num,\r
+    Async *pAsync)\r
+{\r
+    Twi *pTwi = pTwid->pTwi;\r
+    AsyncTwi *pTransfer = (AsyncTwi *) pTwid->pTransfer;\r
+    uint32_t timeout = 0;\r
+    uint32_t status;\r
+    uint8_t singleTransfer = 0;\r
+    assert( pTwi != NULL ) ;\r
+    assert( (address & 0x80) == 0 ) ;\r
+    assert( (iaddress & 0xFF000000) == 0 ) ;\r
+    assert( isize < 4 ) ;\r
+\r
+    if(num == 1) singleTransfer = 1;\r
+    /* Check that no transfer is already pending */\r
+    if (pTransfer) {\r
+\r
+        TRACE_ERROR("TWI_Write: A transfer is already pending\n\r");\r
+        return TWID_ERROR_BUSY;\r
+    }\r
+\r
+    /* Asynchronous transfer */\r
+    if (pAsync) {\r
+\r
+        /* Update the transfer descriptor */\r
+        pTwid->pTransfer = pAsync;\r
+        pTransfer = (AsyncTwi *) pAsync;\r
+        pTransfer->status = ASYNC_STATUS_PENDING;\r
+        pTransfer->pData = pData;\r
+        pTransfer->num = num;\r
+        pTransfer->transferred = 1;\r
+\r
+        /* Enable write interrupt and start the transfer */\r
+        TWI_StartWrite(pTwi, address, iaddress, isize, *pData);\r
+        TWI_EnableIt(pTwi, TWI_IER_TXRDY);\r
+    }\r
+    /* Synchronous transfer*/\r
+    else {\r
+\r
+        // Start write\r
+        TWI_StartWrite(pTwi, address, iaddress, isize, *pData++);\r
+        num--;\r
+        if (singleTransfer) {\r
+            /* Send a STOP condition */\r
+            TWI_SendSTOPCondition(pTwi);\r
+        }\r
+        status = TWI_GetStatus(pTwi);\r
+\r
+        if(status & TWI_SR_NACK)\r
+            TRACE_ERROR("TWID NACK error\n\r");\r
+        while( !(status & TWI_SR_TXRDY) && (timeout++ < TWITIMEOUTMAX) )\r
+        {\r
+            status = TWI_GetStatus(pTwi);\r
+        }\r
+        if (timeout == TWITIMEOUTMAX) {\r
+            TRACE_ERROR("TWID Timeout BS\n\r");\r
+        }\r
+        timeout = 0;\r
+        /* Send all bytes */\r
+        while (num > 0) {\r
+\r
+            /* Wait before sending the next byte */\r
+            timeout = 0;\r
+            TWI_WriteByte(pTwi, *pData++);\r
+            status = TWI_GetStatus(pTwi);\r
+\r
+            if(status & TWI_SR_NACK)\r
+                TRACE_ERROR("TWID NACK error\n\r");\r
+            while( !(status & TWI_SR_TXRDY) && (timeout++ < TWITIMEOUTMAX) )\r
+            {\r
+                status = TWI_GetStatus(pTwi);\r
+            }\r
+            if (timeout == TWITIMEOUTMAX) {\r
+                TRACE_ERROR("TWID Timeout BS\n\r");\r
+            }\r
+\r
+\r
+            num--;\r
+        }\r
+\r
+        /* Wait for actual end of transfer */\r
+        timeout = 0;\r
+        if (!singleTransfer) {\r
+           /* Send a STOP condition */\r
+           TWI_SendSTOPCondition(pTwi);\r
+        }\r
+        while( !TWI_TransferComplete(pTwi) && (++timeout<TWITIMEOUTMAX) );\r
+        if (timeout == TWITIMEOUTMAX) {\r
+            TRACE_ERROR("TWID Timeout TC2\n\r");\r
+        }\r
+\r
+    }\r
+\r
+    return 0;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/wav.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/wav.c
new file mode 100644 (file)
index 0000000..2a74b03
--- /dev/null
@@ -0,0 +1,93 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+#include <stdio.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definiation\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/* WAV letters "RIFF" */\r
+#define WAV_CHUNKID       0x46464952\r
+/* WAV letters "WAVE"*/\r
+#define WAV_FORMAT        0x45564157\r
+/* WAV letters "fmt "*/\r
+#define WAV_SUBCHUNKID    0x20746D66\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Check if the header of a Wav file is valid ot not.\r
+ *\r
+ * \param file  Buffer holding the file to examinate.\r
+ * \return 1 if the header of a Wav file is valid; otherwise returns 0.\r
+ */\r
+unsigned char WAV_IsValid(const WavHeader *header)\r
+{\r
+    return ((header->chunkID == WAV_CHUNKID)\r
+            && (header->format == WAV_FORMAT)\r
+            && (header->subchunk1Size == 0x10));\r
+}\r
+\r
+/**\r
+ * \brief Display the information of the WAV file (sample rate, stereo/mono\r
+ * and frame size).\r
+ *\r
+ * \param header  Wav head information.\r
+ */\r
+\r
+void WAV_DisplayInfo(const WavHeader *header)\r
+{\r
+    printf( "Wave file header information\n\r");\r
+    printf( "--------------------------------\n\r");\r
+    printf( "  - Chunk ID        = 0x%08X\n\r", header->chunkID);\r
+    printf( "  - Chunk Size      = %u\n\r",     header->chunkSize);\r
+    printf( "  - Format          = 0x%08X\n\r", header->format);\r
+    printf( "  - SubChunk ID     = 0x%08X\n\r", header->subchunk1ID);\r
+    printf( "  - Subchunk1 Size  = %u\n\r",     header->subchunk1Size);\r
+    printf( "  - Audio Format    = 0x%04X\n\r", header->audioFormat);\r
+    printf( "  - Num. Channels   = %d\n\r",     header->numChannels);\r
+    printf( "  - Sample Rate     = %u\n\r",     header->sampleRate);\r
+    printf( "  - Byte Rate       = %u\n\r",     header->byteRate);\r
+    printf( "  - Block Align     = %d\n\r",     header->blockAlign);\r
+    printf( "  - Bits Per Sample = %d\n\r",     header->bitsPerSample);\r
+    printf( "  - Subchunk2 ID    = 0x%08X\n\r", header->subchunk2ID);\r
+    printf( "  - Subchunk2 Size  = %u\n\r",     header->subchunk2Size);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/wm8904.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/wm8904.c
new file mode 100644 (file)
index 0000000..5c27e9d
--- /dev/null
@@ -0,0 +1,484 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+  *\r
+  * Implementation WM8904 driver.\r
+  *\r
+  */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Type\r
+ *----------------------------------------------------------------------------*/\r
+typedef struct {\r
+    uint16_t value;\r
+    uint8_t address;\r
+}WM8904_PARA;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/**\r
+ * \brief Read data from WM8904 Register.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure\r
+ * \param device  Twi slave address.\r
+ * \param regAddr Register address to read.\r
+ * \return value in the given register.\r
+ */\r
+uint16_t WM8904_Read(Twid *pTwid,\r
+                     uint32_t device,\r
+                     uint32_t regAddr)\r
+{\r
+    uint16_t bitsDataRegister;\r
+    uint8_t Tdata[2]={0,0};\r
+\r
+    TWID_Read(pTwid, device, regAddr, 1, Tdata, 2, 0);\r
+    bitsDataRegister = (Tdata[0] << 8) | Tdata[1];\r
+    return bitsDataRegister;\r
+}\r
+\r
+/**\r
+ * \brief  Write data to WM8904 Register.\r
+ *\r
+ * \param pTwid   Pointer to twi driver structure\r
+ * \param device  Twi slave address.\r
+ * \param regAddr Register address to read.\r
+ * \param data    Data to write\r
+ */\r
+void WM8904_Write(Twid *pTwid,\r
+                  uint32_t device,\r
+                  uint32_t regAddr,\r
+                  uint16_t data)\r
+{\r
+    uint8_t tmpData[2];\r
+    \r
+    tmpData[0] = (data & 0xff00) >> 8;\r
+    tmpData[1] = data & 0xff;\r
+    TWID_Write(pTwid, device, regAddr, 1, tmpData, 2, 0);\r
+}\r
+\r
+static WM8904_PARA wm8904_access_slow[]=\r
+{ \r
+    { 0x0000, 0},         /** R0   - SW Reset and ID */ \r
+    { 0x001A, 4},       /** R4   - Bias Control 0 */ \r
+    { 0x0047, 5},       /** R5   - VMID Control 0 */     /*insert_delay_ms 5*/\r
+    \r
+    { 0x0043, 5},       /** R5   - VMID Control 0 */ \r
+    { 0x000B, 4},       /** R4   - Bias Control 0 */ \r
+\r
+    { 0x0003, 0x0C},      /** R12  - Power Management 0 CC */ \r
+    \r
+    { 0x0003, 0x0E},      /** R14  - Power Management 2 */ \r
+    { 0x000C, 0x12},      /** R18  - Power Management 6 */\r
+    { 0x0000, 0x21},      /** R33  - DAC Digital 1 */ \r
+    { 0x0000, 0x3D},      /** R61  - Analogue OUT12 ZC */ \r
+    { 0x0001, 0x62},      /** R98  - Charge Pump 0 */ \r
+    { 0x0005, 0x68},     /** R104 - Class W 0 */ \r
+\r
+    //FLL setting,32.768KHZ MCLK input,12.288M output.\r
+    { 0x0000, 0x74},     /** R116 - FLL Control 1 */ \r
+    { 0x0704, 0x75},     /** R117 - FLL Control 2 */ \r
+    { 0x8000, 0x76},     /** R118 - FLL Control 3 */ \r
+    { 0x1760, 0x77},     /** R119 - FLL Control 4 */ \r
+    { 0x0005, 0x74},     /** R116 - FLL Control 1 */     /*insert_delay_ms 5*/\r
+    \r
+    { 0x0C05, 0x15},      /** R21  - Clock Rates 1 */ \r
+    { 0x845E, 0x14},      /** R20  - Clock Rates 0 */     \r
+    { 0x4006, 0x16},      /** R22  - Clock Rates 2 */\r
+\r
+    ////////////////WM8904 IIS master\r
+    //BCLK=12.288MHz/8=1.536MHz\r
+    //LRCK=1.536MHz/32=48KHz\r
+    //{ 0x0042, 0x18},      /** R24  - Audio Interface 0 */ \r
+    { 0x0042, 0x19},      /** R25  - Audio Interface 1 */ \r
+    { 0x00E8, 0x1A},      /** R26  - Audio Interface 2 */ \r
+    { 0x0820, 0x1B},      /** R27  - Audio Interface 3 */ \r
+    ////////////////ADC\r
+\r
+    { 0x0003, 0x0C},      /** R12  - Power Management 0 */ \r
+    { 0x000F, 0x12},      /** R18  - Power Management 6 */     /*insert_delay_ms 5*/\r
+\r
+    { 0x0010, 0x2C},      /** R44  - Analogue Left Input 0 */ \r
+    { 0x0010, 0x2D},      /** R45  - Analogue Right Input 0 */ \r
+    { 0x0004, 0x2E},      /** R46  - Analogue Left Input 1 */ \r
+    { 0x0004, 0x2F},      /** R47  - Analogue Right Input 1 */\r
+\r
+    { 0x0011, 0x5A},      /** R90  - Analogue HP 0 */ \r
+    { 0x0033, 0x5A},      /** R90  - Analogue HP 0 */ \r
+    \r
+    { 0x000F, 0x43},      /** R67  - DC Servo 0 */ \r
+    { 0x00F0, 0x44},      /** R68  - DC Servo 1 */     /*insert_delay_ms 100*/\r
+\r
+    //{ 0x0000, 0xFF},      /** end */ \r
+    { 0x0077, 0x5A},      /** R90  - Analogue HP 0 */ \r
+    { 0x00FF, 0x5A},      /** R90  - Analogue HP 0 */ \r
+    { 0x00B9, 0x39},      /** R57  - Analogue OUT1 Left */ \r
+    { 0x00B9, 0x3A},      /** R58  - Analogue OUT1 Right */  \r
+\r
+    //{ 0x0150, 0x18}  ;Loopback\r
+};\r
+\r
+static WM8904_PARA wm8904_access_main[] = \r
+{ \r
+    //{ 0x8904, 0}, /** R0   - SW Reset and ID */ \r
+    //{ 0x0000, 1}, /** R1   - Revision */ \r
+    //{ 0x0000, 2}, /** R2 */ \r
+    //{ 0x0000, 3}, /** R3 */ \r
+    { 0x0019, 4},   /** R4   - Bias Control 0 */ \r
+    { 0x0043, 5},   /** R5   - VMID Control 0 */ \r
+    //{ 0x0003, 6},   /** R6   - Mic Bias Control 0 */ \r
+    //{ 0xC000, 7},   /** R7   - Mic Bias Control 1 */ \r
+    //{ 0x001E, 8},   /** R8   - Analogue DAC 0 */ \r
+    //{ 0xFFFF, 9},   /** R9   - mic Filter Control */ \r
+    //{ 0x0001, 10},  /** R10  - Analogue ADC 0 */ \r
+    //{ 0x0000, 11},  /** R11 */ \r
+    { 0x0003, 12},  /** R12  - Power Management 0 */ \r
+    //{ 0x0000, 13},  /** R13 */ \r
+    { 0x0003, 14},  /** R14  - Power Management 2 */ \r
+    //{ 0x0003, 15},  /** R15  - Power Management 3 */ \r
+    //{ 0x0000, 16},  /** R16 */ \r
+    //{ 0x0000, 17},  /** R17 */ \r
+    { 0x000F, 18},  /** R18  - Power Management 6 */ \r
+    //{ 0x0000, 19},  /** R19 */ \r
+    { 0x845E, 20},  /** R20  - Clock Rates 0 */ \r
+    //{ 0x3C07, 21},  /** R21  - Clock Rates 1 */ \r
+    { 0x0006, 22},  /** R22  - Clock Rates 2 */ \r
+    //{ 0x0000, 23},  /** R23 */ \r
+    //{ 0x1FFF, 24},  /** R24  - Audio Interface 0 */ \r
+    { 0x404A, 25},  /** R25  - Audio Interface 1 */ \r
+    //{ 0x0004, 26},  /** R26  - Audio Interface 2 */ \r
+    { 0x0840, 27},  /** R27  - Audio Interface 3 */ \r
+    //{ 0x0000, 28},  /** R28 */ \r
+    //{ 0x0000, 29},  /** R29 */ \r
+    //{ 0x00FF, 30},  /** R30  - DAC Digital Volume Left */ \r
+    //{ 0x00FF, 31},  /** R31  - DAC Digital Volume Right */ \r
+    //{ 0x0FFF, 32},  /** R32  - DAC Digital 0 */ \r
+    { 0x0000, 33},  /** R33  - DAC Digital 1 */ \r
+    //{ 0x0000, 34},  /** R34 */ \r
+    //{ 0x0000, 35},  /** R35 */ \r
+    //{ 0x00FF, 36},  /** R36  - ADC Digital Volume Left */ \r
+    //{ 0x00FF, 37},  /** R37  - ADC Digital Volume Right */ \r
+    //{ 0x0073, 38},  /** R38  - ADC Digital 0 */ \r
+    //{ 0x1800, 39},  /** R39  - Digital Microphone 0 */ \r
+    //{ 0xDFEF, 40},  /** R40  - DRC 0 */ \r
+    //{ 0xFFFF, 41},  /** R41  - DRC 1 */ \r
+    //{ 0x003F, 42},  /** R42  - DRC 2 */ \r
+    //{ 0x07FF, 43},  /** R43  - DRC 3 */ \r
+    { 0x0005, 44},  /** R44  - Analogue Left Input 0 */ \r
+    { 0x0005, 45},  /** R45  - Analogue Right Input 0 */ \r
+    { 0x0000, 46},  /** R46  - Analogue Left Input 1 */ \r
+    { 0x0000, 47},  /** R47  - Analogue Right Input 1 */ \r
+    //{ 0x0000, 48},  /** R48 */ \r
+    //{ 0x0000, 49},  /** R49 */ \r
+    //{ 0x0000, 50},  /** R50 */ \r
+    //{ 0x0000, 51},  /** R51 */ \r
+    //{ 0x0000, 52},  /** R52 */ \r
+    //{ 0x0000, 53},  /** R53 */ \r
+    //{ 0x0000, 54},  /** R54 */ \r
+    //{ 0x0000, 55},  /** R55 */ \r
+    //{ 0x0000, 56},  /** R56 */ \r
+    //{ 0x017F, 57},  /** R57  - Analogue OUT1 Left */ \r
+    { 0x00AD, 58},  /** R58  - Analogue OUT1 Right */ \r
+    //{ 0x017F, 59},  /** R59  - Analogue OUT2 Left */ \r
+    //{ 0x017F, 60},  /** R60  - Analogue OUT2 Right */ \r
+    //{ 0x000F, 61},  /** R61  - Analogue OUT12 ZC */ \r
+    //{ 0x0000, 62},  /** R62 */ \r
+    //{ 0x0000, 63},  /** R63 */ \r
+    //{ 0x0000, 64},  /** R64 */ \r
+    //{ 0x0000, 65},  /** R65 */ \r
+    //{ 0x0000, 66},  /** R66 */ \r
+    { 0x0003, 67},  /** R67  - DC Servo 0 */ \r
+    //{ 0xFFFF, 68},  /** R68  - DC Servo 1 */ \r
+    //{ 0x0F0F, 69},  /** R69  - DC Servo 2 */ \r
+    //{ 0x0000, 70},  /** R70 */ \r
+    //{ 0x007F, 71},  /** R71  - DC Servo 4 */ \r
+    //{ 0x007F, 72},  /** R72  - DC Servo 5 */ \r
+    //{ 0x00FF, 73},  /** R73  - DC Servo 6 */ \r
+    //{ 0x00FF, 74},  /** R74  - DC Servo 7 */ \r
+    //{ 0x00FF, 75},  /** R75  - DC Servo 8 */ \r
+    //{ 0x00FF, 76},  /** R76  - DC Servo 9 */ \r
+    //{ 0x0FFF, 77},  /** R77  - DC Servo Readback 0 */ \r
+    //{ 0x0000, 78},  /** R78 */ \r
+    //{ 0x0000, 79},  /** R79 */ \r
+    //{ 0x0000, 80},  /** R80 */ \r
+    //{ 0x0000, 81},  /** R81 */ \r
+    //{ 0x0000, 82},  /** R82 */ \r
+    //{ 0x0000, 83},  /** R83 */ \r
+    //{ 0x0000, 84},  /** R84 */ \r
+    //{ 0x0000, 85},  /** R85 */ \r
+    //{ 0x0000, 86},  /** R86 */ \r
+    //{ 0x0000, 87},  /** R87 */ \r
+    //{ 0x0000, 88},  /** R88 */ \r
+    //{ 0x0000, 89},  /** R89 */ \r
+    { 0x00FF, 90},  /** R90  - Analogue HP 0 */ \r
+    //{ 0x0000, 91},  /** R91 */ \r
+    //{ 0x0000, 92},  /** R92 */ \r
+    //{ 0x0000, 93},  /** R93 */ \r
+    //{ 0x00FF, 94},  /** R94  - Analogue Lineout 0 */ \r
+    //{ 0x0000, 95},  /** R95 */ \r
+    //{ 0x0000, 96},  /** R96 */ \r
+    //{ 0x0000, 97},  /** R97 */ \r
+    { 0x0001, 98},  /** R98  - Charge Pump 0 */ \r
+    //{ 0x0000, 99},  /** R99 */ \r
+    //{ 0x0000, 100}, /** R100 */\r
+    //{ 0x0000, 101}, /** R101 */ \r
+    //{ 0x0000, 102}, /** R102 */ \r
+    //{ 0x0000, 103}, /** R103 */ \r
+    { 0x0005, 104}, /** R104 - Class W 0 */ \r
+    //{ 0x0000, 105}, /** R105 */ \r
+    //{ 0x0000, 106}, /** R106 */ \r
+    //{ 0x0000, 107}, /** R107 */ \r
+    //{ 0x011F, 108}, /** R108 - Write Sequencer 0 */ \r
+    //{ 0x7FFF, 109}, /** R109 - Write Sequencer 1 */ \r
+    //{ 0x4FFF, 110}, /** R110 - Write Sequencer 2 */ \r
+    //{ 0x003F, 111}, /** R111 - Write Sequencer 3 */ \r
+    //{ 0x03F1, 112}, /** R112 - Write Sequencer 4 */ \r
+    //{ 0x0000, 113}, /** R113 */ \r
+    //{ 0x0000, 114}, /** R114 */ \r
+    //{ 0x0000, 115}, /** R115 */ \r
+    { 0x0004, 116}, /** R116 - FLL Control 1 */ \r
+    { 0x0704, 117}, /** R117 - FLL Control 2 */ \r
+    { 0x8000, 118}, /** R118 - FLL Control 3 */ \r
+    { 0x1760, 119}, /** R119 - FLL Control 4 */ \r
+    //{ 0x001B, 120}, /** R120 - FLL Control 5 */ \r
+    //{ 0x0014, 121}, /** R121 - GPIO Control 1 */ \r
+    //{ 0x0010, 122}, /** R122 - GPIO Control 2 */ \r
+    //{ 0x0010, 123}, /** R123 - GPIO Control 3 */ \r
+    //{ 0x0000, 124}, /** R124 - GPIO Control 4 */ \r
+    //{ 0x0000, 125}, /** R125 */ \r
+    //{ 0x000A, 126}, /** R126 - Digital Pulls */ \r
+    //{ 0x07FF, 127}, /** R127 - Interrupt Status */ \r
+    //{ 0x03FF, 128}, /** R128 - Interrupt Status Mask */ \r
+    //{ 0x03FF, 129}, /** R129 - Interrupt Polarity */ \r
+    //{ 0x03FF, 130}, /** R130 - Interrupt Debounce */\r
+    //{ 0x0000, 131}, /** R131 */ \r
+    //{ 0x0000, 132}, /** R132 */ \r
+    //{ 0x0000, 133}, /** R133 */ \r
+    //{ 0x0001, 134}, /** R134 - EQ1 */ \r
+    //{ 0x001F, 135}, /** R135 - EQ2 */ \r
+    //{ 0x001F, 136}, /** R136 - EQ3 */ \r
+    //{ 0x001F, 137}, /** R137 - EQ4 */ \r
+    //{ 0x001F, 138}, /** R138 - EQ5 */ \r
+    //{ 0x001F, 139}, /** R139 - EQ6 */ \r
+    //{ 0xFFFF, 140}, /** R140 - EQ7 */ \r
+    //{ 0xFFFF, 141}, /** R141 - EQ8 */ \r
+    //{ 0xFFFF, 142}, /** R142 - EQ9 */ \r
+    //{ 0xFFFF, 143}, /** R143 - EQ10 */ \r
+    //{ 0xFFFF, 144}, /** R144 - EQ11 */ \r
+    //{ 0xFFFF, 145}, /** R145 - EQ12 */ \r
+    //{ 0xFFFF, 146}, /** R146 - EQ13 */ \r
+    //{ 0xFFFF, 147}, /** R147 - EQ14 */ \r
+    //{ 0xFFFF, 148}, /** R148 - EQ15 */ \r
+    //{ 0xFFFF, 149}, /** R149 - EQ16 */ \r
+    //{ 0xFFFF, 150}, /** R150 - EQ17 */ \r
+    //{ 0xFFFF, 151}, /** R151wm8523_dai - EQ18 */ \r
+    //{ 0xFFFF, 152}, /** R152 - EQ19 */ \r
+    //{ 0xFFFF, 153}, /** R153 - EQ20 */ \r
+    //{ 0xFFFF, 154}, /** R154 - EQ21 */ \r
+    //{ 0xFFFF, 155}, /** R155 - EQ22 */ \r
+    //{ 0xFFFF, 156}, /** R156 - EQ23 */ \r
+    //{ 0xFFFF, 157}, /** R157 - EQ24 */ \r
+    //{ 0x0000, 158}, /** R158 */ \r
+    //{ 0x0000, 159}, /** R159 */ \r
+    //{ 0x0000, 160}, /** R160 */ \r
+    //{ 0x0002, 161}, /** R161 - Control Interface Test 1 */ \r
+    //{ 0x0000, 162}, /** R162 */ \r
+    //{ 0x0000, 163}, /** R163 */ \r
+    //{ 0x0000, 164}, /** R164 */ \r
+    //{ 0x0000, 165}, /** R165 */ \r
+    //{ 0x0000, 166}, /** R166 */ \r
+    //{ 0x0000, 167}, /** R167 */ \r
+    //{ 0x0000, 168}, /** R168 */ \r
+    //{ 0x0000, 169}, /** R169 */ \r
+    //{ 0x0000, 170}, /** R170 */ \r
+    //{ 0x0000, 171}, /** R171 */ \r
+    //{ 0x0000, 172}, /** R172 */ \r
+    //{ 0x0000, 173}, /** R173 */ \r
+    //{ 0x0000, 174}, /** R174 */ \r
+    //{ 0x0000, 175}, /** R175 */ \r
+    //{ 0x0000, 176}, /** R176 */ \r
+    //{ 0x0000, 177}, /** R177 */ \r
+    //{ 0x0000, 178}, /** R178 */ \r
+    //{ 0x0000, 179}, /** R179 */ \r
+    //{ 0x0000, 180}, /** R180 */ \r
+    //{ 0x0000, 181}, /** R181 */ \r
+    //{ 0x0000, 182}, /** R182 */ \r
+    //{ 0x0000, 183}, /** R183 */ \r
+    //{ 0x0000, 184}, /** R184 */ \r
+    //{ 0x0000, 185}, /** R185 */ \r
+    //{ 0x0000, 186}, /** R186 */ \r
+    //{ 0x0000, 187}, /** R187 */ \r
+    //{ 0x0000, 188}, /** R188 */ \r
+    //{ 0x0000, 189}, /** R189 */ \r
+    //{ 0x0000, 190}, /** R190 */ \r
+    //{ 0x0000, 191}, /** R191 */ \r
+    //{ 0x0000, 192}, /** R192 */ \r
+    //{ 0x0000, 193}, /** R193 */ \r
+    //{ 0x0000, 194}, /** R194 */ \r
+    //{ 0x0000, 195}, /** R195 */ \r
+    //{ 0x0000, 196}, /** R196 */ \r
+    //{ 0x0000, 197}, /** R197 */ \r
+    //{ 0x0000, 198}, /** R198 */ \r
+    //{ 0x0000, 199}, /** R199 */ \r
+    //{ 0x0000, 200}, /** R200 */ \r
+    //{ 0x0000, 201}, /** R201 */ \r
+    //{ 0x0000, 202}, /** R202 */ \r
+    //{ 0x0000, 203}, /** R203 */ \r
+    //{ 0x0070, 204}, /** R204 - Analogue Output Bias 0 */ \r
+    //{ 0x0000, 205}, /** R205 */ \r
+    //{ 0x0000, 206}, /** R206 */ \r
+    //{ 0x0000, 207}, /** R207 */ \r
+    //{ 0x0000, 208}, /** R208 */ \r
+    //{ 0x0000, 209}, /** R209 */ \r
+    //{ 0x0000, 210}, /** R210 */ \r
+    //{ 0x0000, 211}, /** R211 */ \r
+    //{ 0x0000, 212}, /** R212 */ \r
+    //{ 0x0000, 213}, /** R213 */ \r
+    //{ 0x0000, 214}, /** R214 */ \r
+    //{ 0x0000, 215}, /** R215 */ \r
+    //{ 0x0000, 216}, /** R216 */ \r
+    //{ 0x0000, 217}, /** R217 */ \r
+    //{ 0x0000, 218}, /** R218 */ \r
+    //{ 0x0000, 219}, /** R219 */ \r
+    //{ 0x0000, 220}, /** R220 */ \r
+    //{ 0x0000, 221}, /** R221 */ \r
+    //{ 0x0000, 222}, /** R222 */ \r
+    //{ 0x0000, 223}, /** R223 */ \r
+    //{ 0x0000, 224}, /** R224 */ \r
+    //{ 0x0000, 225}, /** R225 */ \r
+    //{ 0x0000, 226}, /** R226 */ \r
+    //{ 0x0000, 227}, /** R227 */ \r
+    //{ 0x0000, 228}, /** R228 */ \r
+    //{ 0x0000, 229}, /** R229 */ \r
+    //{ 0x0000, 230}, /** R230 */ \r
+    //{ 0x0000, 231}, /** R231 */ \r
+    //{ 0x0000, 232}, /** R232 */ \r
+    //{ 0x0000, 233}, /** R233 */ \r
+    //{ 0x0000, 234}, /** R234 */ \r
+    //{ 0x0000, 235}, /** R235 */ \r
+    //{ 0x0000, 236}, /** R236 */ \r
+    //{ 0x0000, 237}, /** R237 */ \r
+    //{ 0x0000, 238}, /** R238 */ \r
+    //{ 0x0000, 239}, /** R239 */ \r
+    //{ 0x0000, 240}, /** R240 */ \r
+    //{ 0x0000, 241}, /** R241 */ \r
+    //{ 0x0000, 242}, /** R242 */ \r
+    //{ 0x0000, 243}, /** R243 */ \r
+    //{ 0x0000, 244}, /** R244 */ \r
+    //{ 0x0000, 245}, /** R245 */ \r
+    //{ 0x0000, 246}, /** R246 */ \r
+    //{ 0x0000, 247}, /** R247 - FLL NCO Test 0 */ \r
+    //{ 0x0019, 248}, /** R248 - FLL NCO Test 1 */ \r
+    { 0x55AA, 255}  /** end */ \r
+};\r
+\r
+static void DelayMS(signed int delay)\r
+{\r
+    uint32_t count;\r
+    for(;delay>0;delay--)\r
+        for(count=0;count<(BOARD_MCK/1000000);count++); \r
+}\r
+\r
+uint8_t WM8904_Init(Twid *pTwid, uint32_t device,  uint32_t PCK)\r
+{\r
+    uint8_t count, size;\r
+    uint16_t data = 0;\r
+\r
+    // Reset (write Reg@0x0 to reset)\r
+    WM8904_Write(pTwid, device, 0, 0xFFFF);\r
+\r
+    for(data=0;data<1000;data++);\r
+    //wait ready    \r
+    while(data!=0x8904)\r
+        data=WM8904_Read(pTwid, device, 0);\r
+\r
+    if (PMC_MCKR_CSS_SLOW_CLK == PCK)\r
+    {\r
+        {\r
+            size = sizeof(wm8904_access_slow)/4+1;\r
+            for(count=0; count<size; count++)\r
+            {\r
+                WM8904_Write(pTwid, device, wm8904_access_slow[count].address, wm8904_access_slow[count].value);\r
+                if(((wm8904_access_slow[count].address==0x05)&&(wm8904_access_slow[count].value==0x0047))\r
+                    ||((wm8904_access_slow[count].address==0x74)&&(wm8904_access_slow[count].value==0x0005))\r
+                    ||((wm8904_access_slow[count].address==0x12)&&(wm8904_access_slow[count].value==0x000F)))\r
+                {\r
+                    DelayMS(5);\r
+                }\r
+                if (((wm8904_access_slow[count].address==0x44)&&(wm8904_access_slow[count].value==0x00F0))\r
+                    ||((wm8904_access_slow[count].address==0x3A)&&(wm8904_access_slow[count].value==0x00B9)))\r
+                {          \r
+                    DelayMS(100);\r
+                }\r
+            }    \r
+        }            \r
+    }\r
+    else if (PMC_MCKR_CSS_MAIN_CLK == PCK)\r
+    {\r
+        for(count=0;count<255;count++)\r
+        {\r
+            if(wm8904_access_main[count].address<255)\r
+            {\r
+                WM8904_Write(pTwid, device, wm8904_access_main[count].address, wm8904_access_main[count].value);\r
+            }\r
+            else\r
+            {\r
+                break;\r
+            }\r
+        }            \r
+    }\r
+    else\r
+    {\r
+        printf("W: PCK not supported! \n\r");\r
+        while(1);\r
+    }\r
+\r
+    \r
+    return 0;\r
+}\r
+\r
+void WM8904_IN2R_IN1L(Twid *pTwid, uint32_t device)\r
+{\r
+    //{ 0x0005, 44},  /** R44  - Analogue Left Input 0 */ \r
+    //{ 0x0005, 45},  /** R45  - Analogue Right Input 0 */ \r
+    //{ 0x0000, 46},  /** R46  - Analogue Left Input 1 */ \r
+    //{ 0x0010, 47},  /** R47  - Analogue Right Input 1 */\r
+    WM8904_Write(pTwid, device, 0x2C, 0x0008);\r
+    WM8904_Write(pTwid, device, 0x2D, 0x0005);\r
+    WM8904_Write(pTwid, device, 0x2E, 0x0000);\r
+    WM8904_Write(pTwid, device, 0x2F, 0x0010);\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/xdma_hardware_interface.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/xdma_hardware_interface.c
new file mode 100644 (file)
index 0000000..b322b3b
--- /dev/null
@@ -0,0 +1,207 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup dmad_module\r
+ *\r
+ * \section DmaHw Dma Hardware Interface Usage\r
+ * <ul>\r
+ * <li> The DMA controller can handle the transfer between peripherals and memory \r
+ * and so receives the triggers from the peripherals. The hardware interface number\r
+ * are getting from DMAIF_Get_ChannelNumber().</li>\r
\r
+ * <li> DMAIF_IsValidatedPeripherOnDma() helps to check if the given DMAC has associated \r
+ * peripheral identifier coded by the given  peripheral.</li>\r
+ * \r
+ * </ul>\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/** \file */\r
+ /*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include <board.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local variables\r
+ *----------------------------------------------------------------------------*/\r
+/** Array of DMA Channel definition for SAMA5 chip*/\r
+static const XdmaHardwareInterface xdmaHwIf[] = {\r
+    /* dmac, peripheral,  T/R, Channel Number*/\r
+       {0,   ID_HSMCI0,   0,   0},\r
+       {0,   ID_HSMCI0,   1,   0},\r
+       {0,   ID_HSMCI1,   0,   1},\r
+       {0,   ID_HSMCI1,   1,   1},\r
+       {0,   ID_TWI0,     0,   2},\r
+       {0,   ID_TWI0,     1,   3},\r
+       {0,   ID_TWI1,     0,   4},\r
+       {0,   ID_TWI1,     1,   5},\r
+       {0,   ID_TWI2,     0,   6},\r
+       {0,   ID_TWI2,     1,   7},\r
+       {0,   ID_TWI3,     0,   8},\r
+       {0,   ID_TWI3,     1,   9},\r
+       {0,   ID_SPI0,     0,   10},\r
+       {0,   ID_SPI0,     1,   11},\r
+       {0,   ID_SPI1,     0,   12},\r
+       {0,   ID_SPI1,     1,   13},\r
+       {0,   ID_SPI2,     0,   14},\r
+       {0,   ID_SPI2,     1,   15},\r
+       {0,   ID_USART2,   0,   16},\r
+       {0,   ID_USART2,   1,   17},\r
+       {0,   ID_USART3,   0,   18},\r
+       {0,   ID_USART3,   1,   19},\r
+       {0,   ID_USART4,   0,   20},\r
+       {0,   ID_USART4,   1,   21},\r
+       {0,   ID_UART0,    0,   22},\r
+       {0,   ID_UART0,    1,   23},\r
+       {0,   ID_UART1,    0,   24},\r
+       {0,   ID_UART1,    1,   25},\r
+       {0,   ID_SSC0,     0,   26},\r
+       {0,   ID_SSC0,     1,   27},\r
+       {0,   ID_SSC1,     0,   28},\r
+       {0,   ID_SSC1,     1,   29},\r
+       {0,   ID_DBGU,     0,   30},\r
+       {0,   ID_DBGU,     1,   31},\r
+       {0,   ID_ADC,      1,   32},\r
+       {0,   ID_SMD,      1,   33},\r
+       {0,   ID_SMD,      1,   34},\r
+       {0,   ID_MSADCC,   1,   35},\r
+       {0,   ID_USART0,   0,   36},\r
+       {0,   ID_USART0,   1,   37},\r
+       {0,   ID_USART1,   0,   38},\r
+       {0,   ID_USART1,   1,   39},\r
+       {0,   ID_AES,      1,   40},\r
+       {0,   ID_AES,      0,   41},\r
+       {0,   ID_TDES,     0,   42},\r
+       {0,   ID_TDES,     1,   43},\r
+       {0,   ID_SHA,      0,   44},\r
+//     {0,   ID_CTB,      1,   45},\r
+       {0,   ID_CATB,     0,   46},\r
+       {0,   ID_CATB,     1,   47},\r
+    /* dmac 1 */\r
+       {1,   ID_HSMCI0,   0,   0},\r
+       {1,   ID_HSMCI0,   1,   0},\r
+       {1,   ID_HSMCI1,   0,   1},\r
+       {1,   ID_HSMCI1,   1,   1},\r
+       {1,   ID_TWI0,     0,   2},\r
+       {1,   ID_TWI0,     1,   3},\r
+       {1,   ID_TWI1,     0,   4},\r
+       {1,   ID_TWI1,     1,   5},\r
+       {1,   ID_TWI2,     0,   6},\r
+       {1,   ID_TWI2,     1,   7},\r
+       {1,   ID_TWI3,     0,   8},\r
+       {1,   ID_TWI3,     1,   9},\r
+       {1,   ID_SPI0,     0,   10},\r
+       {1,   ID_SPI0,     1,   11},\r
+       {1,   ID_SPI1,     0,   12},\r
+       {1,   ID_SPI1,     1,   13},\r
+       {1,   ID_SPI2,     0,   14},\r
+       {1,   ID_SPI2,     1,   15},\r
+       {1,   ID_USART2,   0,   16},\r
+       {1,   ID_USART2,   1,   17},\r
+       {1,   ID_USART3,   0,   18},\r
+       {1,   ID_USART3,   1,   19},\r
+       {1,   ID_USART4,   0,   20},\r
+       {1,   ID_USART4,   1,   21},\r
+       {1,   ID_UART0,    0,   22},\r
+       {1,   ID_UART0,    1,   23},\r
+       {1,   ID_UART1,    0,   24},\r
+       {1,   ID_UART1,    1,   25},\r
+       {1,   ID_SSC0,     0,   26},\r
+       {1,   ID_SSC0,     1,   27},\r
+       {1,   ID_SSC1,     0,   28},\r
+       {1,   ID_SSC1,     1,   29},\r
+       {1,   ID_DBGU,     0,   30},\r
+       {1,   ID_DBGU,     1,   31},\r
+       {1,   ID_ADC,      1,   32},\r
+       {1,   ID_SMD,      1,   33},\r
+       {1,   ID_SMD,      1,   34},\r
+};\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Consts\r
+ *----------------------------------------------------------------------------*/\r
+ /** Number of recognized peripheral identifier code for DMA0/1. */\r
+#define NUMPERIPHERAL   (sizeof(xdmaHwIf) / sizeof (XdmaHardwareInterface))\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Get peripheral identifier coded for hardware handshaking interface\r
+ *\r
+ * \param bDmac      DMA Controller number.\r
+ * \param bPeriphID  Peripheral ID.\r
+ * \param bTransfer  Transfer type 0: Tx, 1 :Rx.\r
+ * \return 0-15 peripheral identifier coded.\r
+ *         0xff : no associated peripheral identifier coded.\r
+ */\r
+uint8_t XDMAIF_Get_ChannelNumber (uint8_t bXdmac,\r
+                                 uint8_t bPeriphID,\r
+                                 uint8_t bTransfer)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i < NUMPERIPHERAL; i++)\r
+    {\r
+        if ((xdmaHwIf[i].bXdmac == bXdmac) && (xdmaHwIf[i].bPeriphID == bPeriphID) && (xdmaHwIf[i].bTransfer == bTransfer))\r
+        {\r
+            return xdmaHwIf[i].bIfID;\r
+        }\r
+    }\r
+    return 0xff;\r
+}\r
+\r
+/**\r
+ * \brief Check if the given DMAC has associated peripheral identifier coded by\r
+ * the given  peripheral.\r
+ *\r
+ * \param bDmac      DMA Controller number.\r
+ * \param bPeriphID  Peripheral ID (0xff : memory only).\r
+ * \return 1:  Is a validated peripher. 0: no associated peripheral identifier coded.\r
+ */\r
+uint8_t XDMAIF_IsValidatedPeripherOnDma( uint8_t bXdmac, uint8_t bPeriphID)\r
+{\r
+    uint8_t i;\r
+    /* It is always validated when transfer to memory */\r
+    if (bPeriphID == 0xFF) {\r
+        return 1;\r
+    }\r
+    for (i = 0; i < NUMPERIPHERAL; i++)\r
+    {\r
+        if ((xdmaHwIf[i].bXdmac == bXdmac) && (xdmaHwIf[i].bPeriphID == bPeriphID))\r
+        {\r
+            return 1;\r
+        }\r
+    }\r
+    return 0;\r
+}\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/xdmad.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libboard_sama5d4x-ek/source/xdmad.c
new file mode 100644 (file)
index 0000000..370f262
--- /dev/null
@@ -0,0 +1,497 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup xdmad_module \r
+ *\r
+ * \section Xdma xDma Configuration Usage\r
+ *\r
+ * To configure a XDMA channel, the user has to follow these few steps :\r
+ * <ul>\r
+ * <li> Initialize a XDMA driver instance by XDMAD_Initialize().</li>\r
+ * <li> choose an available (disabled) channel using XDMAD_AllocateChannel().</li>\r
+ * <li> After the XDMAC selected channel has been programmed, XDMAD_PrepareChannel() is to enable \r
+ * clock and dma peripheral of the DMA, and set Configuration register to set up the transfer type \r
+ * (memory or non-memory peripheral for source and destination) and flow control device.</li>\r
+ * <li> Invoke XDMAD_StartTransfer() to start DMA transfer  or XDMAD_StopTransfer() to force stop DMA transfer.</li>\r
+  * <li> Once the buffer of data is transferred, XDMAD_IsTransferDone() checks if DMA transfer is finished.</li>\r
+ * <li> XDMAD_Handler() handles XDMA interrupt, and invoking XDMAD_SetCallback() if provided.</li>\r
+ * </ul>\r
+ *\r
+ * Related files:\n\r
+ * \ref xdmad.h\n\r
+ * \ref xdmad.c.\n\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup dmad_functions\r
+  @{*/\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Includes\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
+/**\r
+ * \brief Try to allocate a DMA channel for on given controller.\r
+ * \param pDmad  Pointer to DMA driver instance.\r
+ * \param bXdmac xDMA controller ID (0 ~ 1).\r
+ * \param bSrcID Source peripheral ID, 0xFF for memory.\r
+ * \param bDstID Destination peripheral ID, 0xFF for memory.\r
+ * \return Channel number if allocation sucessful, return\r
+ * DMAD_ALLOC_FAILED if allocation failed.\r
+ */\r
+static uint32_t XDMAD_AllocateXdmacChannel( sXdmad *pXdmad,\r
+                                            uint8_t bXdmac,\r
+                                            uint8_t bSrcID,\r
+                                            uint8_t bDstID)\r
+{\r
+    uint32_t i;\r
+    /* Can't support peripheral to peripheral */\r
+    if ((( bSrcID != XDMAD_TRANSFER_MEMORY ) && ( bDstID != XDMAD_TRANSFER_MEMORY )))\r
+    {\r
+        return XDMAD_ALLOC_FAILED;\r
+    }\r
+    /* dma transfer from peripheral to memory */\r
+    if ( bDstID == XDMAD_TRANSFER_MEMORY)\r
+    {\r
+        if( (!XDMAIF_IsValidatedPeripherOnDma(bXdmac, bSrcID)) )\r
+        {\r
+            return XDMAD_ALLOC_FAILED;\r
+        }\r
+    }\r
+    /* dma transfer from memory to peripheral */\r
+    if ( bSrcID == XDMAD_TRANSFER_MEMORY )\r
+    {\r
+        if( (!XDMAIF_IsValidatedPeripherOnDma(bXdmac, bDstID)) )\r
+        {\r
+            return XDMAD_ALLOC_FAILED;\r
+        }\r
+    }\r
+\r
+    for (i = 0; i < pXdmad->numChannels; i ++)\r
+    {\r
+        if ( pXdmad->XdmaChannels[bXdmac][i].state == XDMAD_STATE_FREE )\r
+        {\r
+            /* Allocate the channel */\r
+            pXdmad->XdmaChannels[bXdmac][i].state = XDMAD_STATE_ALLOCATED;\r
+            /* Get general informations */\r
+            pXdmad->XdmaChannels[bXdmac][i].bSrcPeriphID = bSrcID;\r
+            pXdmad->XdmaChannels[bXdmac][i].bDstPeriphID = bDstID;\r
+            pXdmad->XdmaChannels[bXdmac][i].bSrcTxIfID =\r
+                XDMAIF_Get_ChannelNumber(bXdmac, bSrcID, 0);\r
+            pXdmad->XdmaChannels[bXdmac][i].bSrcRxIfID =\r
+                XDMAIF_Get_ChannelNumber(bXdmac, bSrcID, 1);\r
+            pXdmad->XdmaChannels[bXdmac][i].bDstTxIfID =\r
+                XDMAIF_Get_ChannelNumber(bXdmac, bDstID, 0);\r
+            pXdmad->XdmaChannels[bXdmac][i].bDstTxIfID =\r
+                XDMAIF_Get_ChannelNumber(bXdmac, bDstID, 1);\r
+            return ((bXdmac << 8)) | ((i) & 0xFF);\r
+        }\r
+    }\r
+    return XDMAD_ALLOC_FAILED;\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Initialize xDMA driver instance.\r
+ * \param pXdmad Pointer to xDMA driver instance.\r
+ * \param bPollingMode Polling DMA transfer:\r
+ *                     1. Via XDMAD_IsTransferDone(); or\r
+ *                     2. Via XDMAD_Handler().\r
+ */\r
+void XDMAD_Initialize( sXdmad *pXdmad, uint8_t bPollingMode )\r
+{\r
+    uint32_t i, j;\r
+\r
+    assert( pXdmad != NULL ) ;\r
+\r
+    pXdmad->pXdmacs[0] = XDMAC0;\r
+    pXdmad->pXdmacs[1] = XDMAC1;\r
+    pXdmad->pollingMode = bPollingMode;\r
+    pXdmad->numControllers = XDMAC_CONTROLLER_NUM;\r
+    pXdmad->numChannels    = XDMAC_CHANNEL_NUM;\r
+\r
+    for (i = 0; i < pXdmad->numControllers; i ++)\r
+    {\r
+        for (j = 0; j < pXdmad->numChannels; j ++)\r
+        {\r
+            pXdmad->XdmaChannels[i][j].fCallback = 0;\r
+            pXdmad->XdmaChannels[i][j].pArg      = 0;\r
+            pXdmad->XdmaChannels[i][j].bIrqOwner    = 0;\r
+            pXdmad->XdmaChannels[i][j].bSrcPeriphID = 0;\r
+            pXdmad->XdmaChannels[i][j].bDstPeriphID = 0;\r
+            pXdmad->XdmaChannels[i][j].bSrcTxIfID   = 0;\r
+            pXdmad->XdmaChannels[i][j].bSrcRxIfID   = 0;\r
+            pXdmad->XdmaChannels[i][j].bDstTxIfID   = 0;\r
+            pXdmad->XdmaChannels[i][j].bDstRxIfID   = 0;\r
+            pXdmad->XdmaChannels[i][j].state = XDMAD_STATE_FREE;\r
+        }\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * \brief Allocate a XDMA channel for upper layer.\r
+ * \param pXdmad  Pointer to xDMA driver instance.\r
+ * \param bSrcID Source peripheral ID, 0xFF for memory.\r
+ * \param bDstID Destination peripheral ID, 0xFF for memory.\r
+ * \return Channel number if allocation sucessful, return\r
+ * XDMAD_ALLOC_FAILED if allocation failed.\r
+ */\r
+uint32_t XDMAD_AllocateChannel( sXdmad *pXdmad,\r
+                                uint8_t bSrcID,\r
+                                uint8_t bDstID)\r
+{\r
+    uint32_t _iController;\r
+    uint32_t dwChannel = XDMAD_ALLOC_FAILED;\r
+    for ( _iController = 0; _iController < pXdmad->numControllers; _iController ++)\r
+    {\r
+        dwChannel = XDMAD_AllocateXdmacChannel( pXdmad, _iController, bSrcID, bDstID );\r
+        if (dwChannel != XDMAD_ALLOC_FAILED)\r
+            break;\r
+    }\r
+    return dwChannel;\r
+}\r
+\r
+/**\r
+ * \brief Free the specified xDMA channel.\r
+ * \param pXdmad     Pointer to xDMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ */\r
+eXdmadRC XDMAD_FreeChannel( sXdmad *pXdmad, \r
+                            uint32_t dwChannel )\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t iChannel    = (dwChannel) & 0xFF;\r
+\r
+    assert( pXdmad != NULL ) ;\r
+    switch ( pXdmad->XdmaChannels[_iController][iChannel].state )\r
+    {\r
+        case XDMAD_STATE_START: \r
+            return XDMAD_BUSY;\r
+        case XDMAD_STATE_ALLOCATED: case XDMAD_STATE_DONE:\r
+            pXdmad->XdmaChannels[_iController][iChannel].state = XDMAD_STATE_FREE;\r
+            break;\r
+    }\r
+    return XDMAD_OK;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Set the callback function for xDMA channel transfer.\r
+ * \param pXdmad     Pointer to xDMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ * \param fCallback Pointer to callback function.\r
+ * \param pArg Pointer to optional argument for callback.\r
+ */\r
+eXdmadRC XDMAD_SetCallback( sXdmad *pXdmad, \r
+                            uint32_t dwChannel,\r
+                            XdmadTransferCallback fCallback, \r
+                            void* pArg )\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t iChannel    = (dwChannel) & 0xFF;\r
+    assert( pXdmad != NULL ) ;\r
+    if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_FREE )\r
+        return XDMAD_ERROR;\r
+    else if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_START )\r
+        return XDMAD_BUSY;\r
+\r
+    pXdmad->XdmaChannels[_iController][iChannel].fCallback = fCallback;\r
+    pXdmad->XdmaChannels[_iController][iChannel].pArg = pArg;\r
+\r
+    return XDMAD_OK;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Enable clock of the xDMA peripheral, Enable the dma peripheral,\r
+ * configure configuration register for xDMA transfer.\r
+ * \param pXdmad     Pointer to xDMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ * \param dwCfg     Configuration value.\r
+ */\r
+eXdmadRC XDMAD_PrepareChannel( sXdmad *pXdmad, uint32_t dwChannel)\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t iChannel    = (dwChannel) & 0xFF;\r
+    uint32_t _dwdmaId;\r
+\r
+    assert( pXdmad != NULL ) ;\r
+    Xdmac *pXdmac = pXdmad->pXdmacs[_iController];\r
+\r
+    if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_FREE )\r
+        return XDMAD_ERROR;\r
+    else if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_START )\r
+        return XDMAD_BUSY;\r
+    /* Clear dummy status */\r
+    XDMAC_GetGlobalChStatus( pXdmac );\r
+    XDMAC_GetGIsr (pXdmac);\r
+    _dwdmaId = (_iController == 0) ? ID_XDMAC0 : ID_XDMAC1;\r
+    /* Enable clock of the DMA peripheral */\r
+    if (!PMC_IsPeriphEnabled( _dwdmaId ))\r
+    {\r
+        PMC_EnablePeripheral( _dwdmaId );\r
+    }\r
+    /* Clear dummy status */\r
+    XDMAC_GetChannelIsr( pXdmac,iChannel );\r
+    /* Disables XDMAC interrupt for the given channel. */\r
+    XDMAC_DisableGIt (pXdmac, -1);\r
+    XDMAC_DisableChannelIt (pXdmac, iChannel, -1);\r
+    /* Disable the given dma channel. */\r
+    XDMAC_DisableChannel( pXdmac, iChannel );\r
+    XDMAC_SetSourceAddr(pXdmac, iChannel, 0);\r
+    XDMAC_SetDestinationAddr(pXdmac, iChannel, 0);\r
+    XDMAC_SetBlockControl(pXdmac, iChannel, 0);\r
+    XDMAC_SetChannelConfig( pXdmac, iChannel, 0x20);\r
+    XDMAC_SetDescriptorAddr(pXdmac, iChannel, 0, 0);\r
+    XDMAC_SetDescriptorControl(pXdmac, iChannel, 0);\r
+    return XDMAD_OK;\r
+}\r
+\r
+/**\r
+ * \brief xDMA interrupt handler\r
+ * \param pxDmad Pointer to DMA driver instance.\r
+ */\r
+void XDMAD_Handler( sXdmad *pDmad)\r
+{\r
+    Xdmac *pXdmac;\r
+    sXdmadChannel *pCh;\r
+    uint32_t xdmaChannelIntStatus, xdmaGlobaIntStatus,xdmaGlobalChStatus;\r
+    uint8_t bExec = 0;\r
+    uint8_t _iController, _iChannel;\r
+    assert( pDmad != NULL ) ;\r
+\r
+    for (_iController = 0; _iController < pDmad->numControllers; _iController ++)\r
+    {\r
+        pXdmac = pDmad->pXdmacs[_iController];\r
+        xdmaGlobaIntStatus = XDMAC_GetGIsr(pXdmac);\r
+        if ((xdmaGlobaIntStatus & 0xFFFF) == 0) continue;\r
+        xdmaGlobalChStatus = XDMAC_GetGlobalChStatus(pXdmac);\r
+        for (_iChannel = 0; _iChannel < pDmad->numChannels; _iChannel ++) \r
+        {\r
+            if (!(xdmaGlobaIntStatus & (1<<_iChannel))) continue;\r
+            pCh = &pDmad->XdmaChannels[_iController][_iChannel];\r
+            if ( pCh->state == XDMAD_STATE_FREE) return ;\r
+            if ((xdmaGlobalChStatus & ( XDMAC_GS_ST0 << _iChannel)) == 0) \r
+            {\r
+                bExec = 0;\r
+                xdmaChannelIntStatus = XDMAC_GetChannelIsr( pXdmac, _iChannel);\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_BIS) { \r
+                    if((XDMAC_GetChannelItMask(pXdmac, _iChannel) & XDMAC_CIM_LIM) == 0 ) {\r
+                        pCh->state = XDMAD_STATE_DONE ;\r
+                        bExec = 1;\r
+                    }\r
+                //printf("XDMAC_CIS_BIS\n\r");\r
+                }\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_FIS) {\r
+                   // printf("XDMAC_CIS_FIS\n\r");\r
+                }\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_RBEIS) {\r
+                    //printf("XDMAC_CIS_RBEIS\n\r");\r
+                }\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_WBEIS) {\r
+                   // printf("XDMAC_CIS_WBEIS\n\r");\r
+                }\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_ROIS) {\r
+                   // printf("XDMAC_CIS_ROIS\n\r");\r
+                }\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_LIS) {\r
+                   //printf("XDMAC_CIS_LIS\n\r");\r
+                  \r
+                    pCh->state = XDMAD_STATE_DONE ;\r
+                    bExec = 1;\r
+                }\r
+                if (xdmaChannelIntStatus & XDMAC_CIS_DIS ) \r
+                {\r
+                    pCh->state = XDMAD_STATE_DONE ;\r
+                    bExec = 1;\r
+                }\r
+            }\r
+            // printf("bExec =%d, _iChannel=%d \n\r",bExec,_iChannel);\r
+            /* Execute callback */\r
+            if (bExec && pCh->fCallback) {\r
+               //XDMAC_DisableGIt( pXdmac,1 << _iChannel);\r
+               pCh->fCallback(_iChannel, pCh->pArg);\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Check if DMA transfer is finished.\r
+ *        In polling mode XDMAD_Handler() is polled.\r
+ * \param pDmad     Pointer to DMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ */\r
+eXdmadRC XDMAD_IsTransferDone( sXdmad *pXdmad, uint32_t dwChannel )\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t iChannel    = (dwChannel) & 0xFF;\r
+    uint8_t state;\r
+    state = pXdmad->XdmaChannels[_iController][iChannel].state;\r
+    assert( pXdmad != NULL ) ;\r
+    if ( state == XDMAD_STATE_ALLOCATED ) return XDMAD_OK;\r
+    if ( state == XDMAD_STATE_FREE )\r
+        return XDMAD_ERROR;\r
+    else if ( state != XDMAD_STATE_DONE )\r
+    {\r
+        if(pXdmad->pollingMode)  XDMAD_Handler( pXdmad);\r
+        return XDMAD_BUSY;\r
+    }\r
+    return XDMAD_OK;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Configure DMA for a single transfer.\r
+ * \param pXdmad     Pointer to xDMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ */\r
+eXdmadRC XDMAD_ConfigureTransfer( sXdmad *pXdmad,\r
+                                  uint32_t dwChannel,\r
+                                  sXdmadCfg *pXdmaParam,\r
+                                  uint32_t dwXdmaDescCfg,\r
+                                  uint32_t dwXdmaDescAddr)\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t iChannel    = (dwChannel) & 0xFF;\r
+    Xdmac *pXdmac = pXdmad->pXdmacs[_iController];\r
+    XDMAC_GetGIsr(pXdmac);\r
+    XDMAC_GetChannelIsr( pXdmac, iChannel);\r
+    if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_FREE )\r
+        return XDMAD_ERROR;\r
+    if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_START )\r
+        return XDMAD_BUSY;\r
+    /* Linked List is enabled */\r
+    if ((dwXdmaDescCfg & XDMAC_CNDC_NDE) == XDMAC_CNDC_NDE_DSCR_FETCH_EN)\r
+    {\r
+        if ((dwXdmaDescCfg & XDMAC_CNDC_NDVIEW_Msk) == XDMAC_CNDC_NDVIEW_NDV0) {\r
+            XDMAC_SetChannelConfig( pXdmac, iChannel, pXdmaParam->mbr_cfg );\r
+            XDMAC_SetSourceAddr(pXdmac, iChannel, pXdmaParam->mbr_sa);\r
+            XDMAC_SetDestinationAddr(pXdmac, iChannel, pXdmaParam->mbr_da);\r
+        }\r
+        if ((dwXdmaDescCfg & XDMAC_CNDC_NDVIEW_Msk) == XDMAC_CNDC_NDVIEW_NDV1) {\r
+            XDMAC_SetChannelConfig( pXdmac, iChannel, pXdmaParam->mbr_cfg );\r
+        }\r
+        XDMAC_SetDescriptorAddr(pXdmac, iChannel, dwXdmaDescAddr, 0);\r
+        XDMAC_SetDescriptorControl(pXdmac, iChannel, dwXdmaDescCfg);\r
+        XDMAC_DisableChannelIt (pXdmac, iChannel, -1);\r
+        XDMAC_EnableChannelIt (pXdmac,iChannel, XDMAC_CIE_LIE );\r
+    }\r
+    /* LLI is disabled. */\r
+    else\r
+    {\r
+        XDMAC_SetSourceAddr(pXdmac, iChannel, pXdmaParam->mbr_sa);\r
+        XDMAC_SetDestinationAddr(pXdmac, iChannel, pXdmaParam->mbr_da);\r
+        XDMAC_SetMicroblockControl(pXdmac, iChannel, pXdmaParam->mbr_ubc);\r
+        XDMAC_SetBlockControl(pXdmac, iChannel, pXdmaParam->mbr_bc);\r
+        XDMAC_SetDataStride_MemPattern(pXdmac, iChannel, pXdmaParam->mbr_ds);\r
+        XDMAC_SetSourceMicroBlockStride(pXdmac, iChannel, pXdmaParam->mbr_sus);\r
+        XDMAC_SetDestinationMicroBlockStride(pXdmac, iChannel, pXdmaParam->mbr_dus);\r
+        XDMAC_SetChannelConfig( pXdmac, iChannel, pXdmaParam->mbr_cfg );\r
+        XDMAC_SetDescriptorAddr(pXdmac, iChannel, 0, 0);\r
+        XDMAC_SetDescriptorControl(pXdmac, iChannel, 0);\r
+        XDMAC_EnableChannelIt (pXdmac,\r
+                               iChannel,\r
+                               XDMAC_CIE_BIE   |\r
+                               XDMAC_CIE_DIE   |\r
+                               XDMAC_CIE_FIE   |\r
+                               XDMAC_CIE_RBIE  |\r
+                               XDMAC_CIE_WBIE  |\r
+                               XDMAC_CIE_ROIE);\r
+    }\r
+    return XDMAD_OK;\r
+}\r
+\r
+/**\r
+ * \brief Start xDMA transfer.\r
+ * \param pXdmad     Pointer to XDMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ */\r
+eXdmadRC XDMAD_StartTransfer( sXdmad *pXdmad, uint32_t dwChannel )\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t iChannel    = (dwChannel) & 0xFF;\r
+    Xdmac *pXdmac = pXdmad->pXdmacs[_iController];\r
+    if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_FREE )\r
+    {\r
+        printf("-E- XDMAD_STATE_FREE \n\r");\r
+        return XDMAD_ERROR;\r
+    }\r
+    else if ( pXdmad->XdmaChannels[_iController][iChannel].state == XDMAD_STATE_START )\r
+    {\r
+        printf("-E- XDMAD_STATE_START \n\r");\r
+        return XDMAD_BUSY;\r
+    }\r
+    /* Change state to transferring */\r
+    pXdmad->XdmaChannels[_iController][iChannel].state = XDMAD_STATE_START;\r
+    XDMAC_EnableChannel(pXdmac, iChannel);\r
+    if ( pXdmad->pollingMode == 0 )\r
+    {\r
+        XDMAC_EnableGIt( pXdmac,1 << iChannel);\r
+    }\r
+    return XDMAD_OK;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Stop DMA transfer.\r
+ * \param pDmad     Pointer to DMA driver instance.\r
+ * \param dwChannel ControllerNumber << 8 | ChannelNumber.\r
+ */\r
+eXdmadRC XDMAD_StopTransfer( sXdmad *pXdmad, uint32_t dwChannel )\r
+{\r
+    uint8_t _iController = (dwChannel >> 8);\r
+    uint8_t _iChannel    = (dwChannel) & 0xFF;\r
+    Xdmac *pXdmac = pXdmad->pXdmacs[_iController];\r
+\r
+    pXdmad->XdmaChannels[_iController][_iChannel].state = XDMAD_STATE_ALLOCATED;\r
+    /* Disable channel */\r
+    XDMAC_DisableChannel(pXdmac, _iChannel);\r
+    /* Disable interrupts */\r
+    XDMAC_DisableChannelIt(pXdmac, _iChannel, -1);\r
+    /* Clear pending status */\r
+    XDMAC_GetChannelIsr( pXdmac, _iChannel);\r
+    XDMAC_GetGlobalChStatus(pXdmac);\r
+  \r
+    return XDMAD_OK;\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/chip.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/chip.h
new file mode 100644 (file)
index 0000000..6eb6c63
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef _LIB_CHIP_sama5d4_\r
+#define _LIB_CHIP_sama5d4_\r
+\r
+/*\r
+ * Peripherals registers definitions\r
+ */\r
+#if defined sama5d4x\r
+    #include "include/sama5d4.h"\r
+#else\r
+    #warning Library does not support the specified chip, specifying sama5d4x\r
+    #define sama5d4x\r
+    #include "include/sama5d4.h"\r
+#endif\r
+\r
+\r
+/* Define attribute */\r
+#if defined   ( __CC_ARM   ) /* Keil ÂµVision 4 */\r
+    #define WEAK __attribute__ ((weak))\r
+#elif defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */\r
+    #define WEAK __weak\r
+#elif defined (  __GNUC__  ) /* GCC CS3 2009q3-68 */\r
+    #define WEAK __attribute__ ((weak))\r
+#endif\r
+\r
+/* Define NO_INIT attribute and compiler specific symbols */\r
+#if defined   ( __CC_ARM   )\r
+    #define NO_INIT\r
+    #define __ASM            __asm                                    /*!< asm keyword for ARM Compiler          */\r
+    #define __INLINE         __inline                                 /*!< inline keyword for ARM Compiler       */\r
+#elif defined ( __ICCARM__ )\r
+    #define NO_INIT __no_init\r
+    #define __ASM           __asm                                     /*!< asm keyword for IAR Compiler           */\r
+    #define __INLINE        inline                                    /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */\r
+#elif defined (  __GNUC__  )\r
+    #define __ASM            asm                                      /*!< asm keyword for GNU Compiler          */\r
+    #define __INLINE         inline                                   /*!< inline keyword for GNU Compiler       */\r
+    #define NO_INIT\r
+#endif\r
+\r
+#define CP15_PRESENT\r
+\r
+/*\r
+ * Peripherals\r
+ */\r
+#include "include/adc.h"\r
+#include "include/async.h"\r
+#include "include/mmu.h"\r
+#include "cp15/cp15.h"\r
+#include "cp15/cp15_pmu.h"\r
+#include "tz/mon_macros.h"\r
+#include "tz/mon.h"\r
+#include "include/l2cc.h"\r
+#include "include/aic.h"\r
+#include "include/pio.h"\r
+#include "include/pio_it.h"\r
+#include "include/pmc.h"\r
+#include "include/pwmc.h"\r
+#include "include/usart.h"\r
+#include "include/xdmac.h"\r
+#include "include/spi.h"\r
+#include "include/pit.h" \r
+#include "include/wdt.h"\r
+#include "include/tc.h"\r
+#include "include/smcNfc.h"\r
+#include "include/twi.h"\r
+#include "include/trace.h"\r
+#include "include/hsmci.h"\r
+#include "include/trng.h"\r
+#include "include/tdes.h"\r
+#include "include/aes.h"\r
+#include "include/aesb.h"\r
+#include "include/sha.h"\r
+#include "include/icm.h"\r
+#include "include/gmac.h"\r
+#include "include/catb.h"\r
+#include "include/udphs.h"\r
+#include "include/video.h"\r
+#include "include/isi.h"\r
+#include "include/ssc.h"\r
+#include "include/rtc.h"\r
+#include "include/rstc.h"\r
+\r
+#endif /* _LIB_CHIP_sama5d4_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/core.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/core.h
new file mode 100644 (file)
index 0000000..6feb2e0
--- /dev/null
@@ -0,0 +1,42 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+// core list\r
+//-------------------\r
+// arm7tdmi\r
+// arm926ej_s\r
+// arm1176jzf_s\r
+// cortexm3\r
+\r
+#ifndef _CORE_H\r
+#define _CORE_H\r
+\r
+#define cortex_a5\r
+\r
+#endif // #ifndef _CORE_H
\ No newline at end of file
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15.c
new file mode 100644 (file)
index 0000000..66ad8ef
--- /dev/null
@@ -0,0 +1,363 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License  \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+//-----------------------------------------------------------------------------\r
+// Reg Reads                    Writes\r
+//----------------------------------------------------------------------------\r
+// 0   ID code                  Unpredictable\r
+// 0   cache type               Unpredictable\r
+// 0   TCM status               Unpredictable\r
+// 1   Control                  Control\r
+// 2   Translation table base   Translation table base\r
+// 3   Domain access control    Domain access control\r
+// 4                                                       (Reserved)\r
+// 5   Data fault status        Data fault status\r
+// 5   Instruction fault status Instruction fault status\r
+// 6   Fault address            Fault address\r
+// 7   cache operations         cache operations\r
+// 8   Unpredictable            TLB operations\r
+// 9   cache lockdown           cache lockdown\r
+// 9   TCM region               TCM region\r
+// 10  TLB lockdown             TLB lockdown\r
+// 11                                                      (Reserved) \r
+// 12                                                      (Reserved) \r
+// 13  FCSE PID                 FCSE PID\r
+// 13  Context ID               Context ID\r
+// 14                                                      (Reserved)\r
+// 15  Test configuration       Test configuration\r
+//-----------------------------------------------------------------------------\r
+\r
+\r
+/** \page cp15_f CP15 Functions.\r
+ *\r
+ * \section CP15 function Usage\r
+ *\r
+ * Methods to manage the Coprocessor 15. Coprocessor 15, or System Control \r
+ * Coprocessor CP15, is used to configure and control all the items in the \r
+ * list below:\r
+ * <ul>\r
+ * <li> ARM core\r
+ * <li> caches (Icache, Dcache and write buffer)\r
+ * <li> TCM\r
+ * <li> MMU\r
+ * <li> Other system options\r
+ * </ul>\r
+ * \section Usage\r
+ *\r
+ * -# Enable or disable D cache with Enable_D_cache and Disable_D_cache\r
+ * -# Enable or disable I cache with Enable_I_cache and Disable_I_cache\r
+ *\r
+ * Related files:\n\r
+ * \ref cp15.h\n\r
+ * \ref cp15.c.\n\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+#if defined(__ICCARM__)\r
+  #include <intrinsics.h>\r
+#endif\r
+/*----------------------------------------------------------------------------\r
+ *        Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Check Instruction cache\r
+ * \return 0 if I_cache disable, 1 if I_cache enable\r
+ */\r
+unsigned int CP15_IsIcacheEnabled(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+    return ((control & (1 << CP15_I_BIT)) != 0);\r
+} \r
+\r
+\r
+/**\r
+ * \brief  Enable Instruction cache\r
+ */\r
+void CP15_EnableIcache(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+\r
+    // Check if cache is disabled\r
+    if ((control & (1 << CP15_I_BIT)) == 0) {\r
+\r
+        control |= (1 << CP15_I_BIT);\r
+        CP15_WriteControl(control);\r
+        TRACE_INFO("I cache enabled.\n\r");\r
+    }\r
+    else {\r
+\r
+        TRACE_INFO("I cache is already enabled.\n\r");\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Disable Instruction cache\r
+ */\r
+void CP15_DisableIcache(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+\r
+    // Check if cache is enabled\r
+    if ((control & (1 << CP15_I_BIT)) != 0) {\r
+\r
+        control &= ~(1ul << CP15_I_BIT);\r
+        CP15_WriteControl(control);\r
+        TRACE_INFO("I cache disabled.\n\r");\r
+    }\r
+    else {\r
+\r
+        TRACE_INFO("I cache is already disabled.\n\r");\r
+    }\r
+} \r
+\r
+/**\r
+ * \brief  Check MMU\r
+ * \return  0 if MMU disable, 1 if MMU enable\r
+ */\r
+unsigned int CP15_IsMMUEnabled(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+    return ((control & (1 << CP15_M_BIT)) != 0);\r
+} \r
+\r
+\r
+/**\r
+ * \brief  Enable MMU\r
+ */\r
+void CP15_EnableMMU(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+\r
+    // Check if MMU is disabled\r
+    if ((control & (1 << CP15_M_BIT)) == 0) {\r
+\r
+        control |= (1 << CP15_M_BIT);\r
+        CP15_WriteControl(control);\r
+        TRACE_INFO("MMU enabled.\n\r");\r
+    }\r
+    else {\r
+\r
+        TRACE_INFO("MMU is already enabled.\n\r");\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Disable MMU\r
+ */\r
+void CP15_DisableMMU(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+\r
+    // Check if MMU is enabled\r
+    if ((control & (1 << CP15_M_BIT)) != 0) {\r
+\r
+        control &= ~(1ul << CP15_M_BIT);\r
+        control &= ~(1ul << CP15_C_BIT);\r
+        CP15_WriteControl(control);\r
+        TRACE_INFO("MMU disabled.\n\r");\r
+    }\r
+    else {\r
+\r
+        TRACE_INFO("MMU is already disabled.\n\r");\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Check D_cache\r
+ * \return  0 if D_cache disable, 1 if D_cache enable (with MMU of course)\r
+ */\r
+unsigned int CP15_IsDcacheEnabled(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+    return ((control & ((1 << CP15_C_BIT)||(1 << CP15_M_BIT))) != 0);\r
+} \r
+\r
+/**\r
+ * \brief  Enable Data cache\r
+ */\r
+void CP15_EnableDcache(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+\r
+    if( !CP15_IsMMUEnabled() ) {\r
+        TRACE_ERROR("Do nothing: MMU not enabled\n\r");\r
+    }\r
+    else {\r
+        // Check if cache is disabled\r
+        if ((control & (1 << CP15_C_BIT)) == 0) {\r
+\r
+            control |= (1 << CP15_C_BIT);\r
+            CP15_WriteControl(control);\r
+            TRACE_INFO("D cache enabled.\n\r");\r
+        }\r
+        else {\r
+\r
+            TRACE_INFO("D cache is already enabled.\n\r");\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief  Disable Data cache\r
+ */\r
+void CP15_DisableDcache(void)\r
+{\r
+    unsigned int control;\r
+\r
+    control = CP15_ReadControl();\r
+\r
+    // Check if cache is enabled\r
+    if ((control & (1 << CP15_C_BIT)) != 0) {\r
+\r
+        control &= ~(1ul << CP15_C_BIT);\r
+        CP15_WriteControl(control);\r
+        TRACE_INFO("D cache disabled.\n\r");\r
+    }\r
+    else {\r
+\r
+        TRACE_INFO("D cache is already disabled.\n\r");\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief  Invalidate TLB\r
+ */\r
+void CP15_InvalidateTLB(void)\r
+{\r
+  asm("MCR   p15, 0, %0, c8, c3, 0" : : "r"(1));\r
+  asm("DSB");\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Clean Data cache\r
+ */\r
+void CP15_CacheClean(uint8_t CacheType)\r
+{\r
+  assert(!CacheType);\r
+  CP15_SelectDCache();\r
+  \r
+  CP15_CleanDCacheBySetWay();\r
+  asm("DSB");\r
+    \r
+}\r
+\r
+/**\r
+ * \brief  Invalidate D/Icache\r
+ */\r
+void CP15_CacheInvalidate(uint8_t CacheType)\r
+{\r
+  if(CacheType)\r
+  {\r
+    CP15_SelectICache();\r
+    CP15_InvalidateIcacheInnerSharable();\r
+    asm("DSB");\r
+    asm("ISB");\r
+  }\r
+  else\r
+  {\r
+    CP15_SelectDCache();\r
+    CP15_InvalidateDcacheBySetWay();\r
+    asm("DSB");\r
+    asm("ISB");\r
+  }\r
+  \r
+      \r
+}\r
+\r
+/**\r
+ * \brief  Flush(Clean and invalidate) Data cache\r
+ */\r
+void CP15_CacheFlush(uint8_t CacheType)\r
+{\r
+  assert(!CacheType);\r
+  \r
+  CP15_SelectDCache();\r
+  CP15_CleanInvalidateDCacheBySetWay();\r
+  \r
+  asm("DSB");\r
+      \r
+}\r
+\r
+/**\r
+ * \brief  Invalidate Data cache by address\r
+ */\r
+void CP15_InvalidateDCacheByVA(uint32_t S_Add, uint32_t E_Add)\r
+{\r
+\r
+    CP15_SelectDCache();\r
+    CP15_InvalidateDcacheByMva(S_Add, E_Add);\r
+}\r
+\r
+/**\r
+ * \brief  Clean Data cache by address\r
+ */\r
+void CP15_CleanDCacheByVA(uint32_t S_Add, uint32_t E_Add)\r
+{\r
+\r
+    CP15_SelectDCache();\r
+    CP15_CleanDCacheByMva(S_Add, E_Add);\r
+}\r
+\r
+/**\r
+ * \brief  Flush Data cache by address\r
+ */\r
+\r
+void CP15_FlushDCacheByVA(uint32_t S_Add, uint32_t E_Add)\r
+{\r
+\r
+    CP15_SelectDCache();\r
+    CP15_CleanInvalidateDcacheByMva(S_Add, E_Add);\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15.h
new file mode 100644 (file)
index 0000000..f815a9f
--- /dev/null
@@ -0,0 +1,164 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _CP15_H\r
+#define _CP15_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+#define CP15_L4_BIT 15 // Determines if the T bit is set when load instructions \r
+                       // change the PC: \r
+                       // 0 = loads to PC set the T bit \r
+                       // 1 = loads to PC do not set T bit\r
+\r
+#define CP15_RR_BIT 14 // RR bit Replacement strategy for Icache and Dcache: \r
+                       // 0 = Random replacement \r
+                       // 1 = Round-robin replacement.\r
+                      \r
+#define CP15_V_BIT  13 // V bit Location of exception vectors: \r
+                       // 0 = Normal exception vectors selected address range = 0x0000 0000 to 0x0000 001C \r
+                       // 1 = High exception vect selected, address range = 0xFFFF 0000 to 0xFFFF 001C\r
+                       \r
+#define CP15_I_BIT  12 // I bit Icache enable/disable: \r
+                       // 0 = Icache disabled \r
+                       // 1 = Icache enabled\r
+                       \r
+#define CP15_R_BIT   9 // R bit ROM protection\r
+\r
+#define CP15_S_BIT   8 // S bit System protection\r
+                  \r
+#define CP15_B_BIT   7 // B bit Endianness: \r
+                       // 0 = Little-endian operation \r
+                       // 1 = Big-endian operation.                  \r
+                     \r
+#define CP15_C_BIT   2 // C bit Dcache enable/disable: \r
+                       // 0 = cache disabled \r
+                       // 1 = cache enabled\r
+\r
+#define CP15_A_BIT   1 // A bit Alignment fault enable/disable:\r
+                       // 0 = Data address alignment fault checking disabled\r
+                       // 1 = Data address alignment fault checking enabled\r
+\r
+#define CP15_M_BIT   0 // M bit MMU enable/disable: 0 = disabled 1 = enabled.\r
+                       // 0 = disabled \r
+                       // 1 = enabled\r
+\r
+/** No access Any access generates a domain fault. */\r
+#define CP15_DOMAIN_NO_ACCESS      0x00  \r
+/** Client Accesses are checked against the access permission bits in the section or page descriptor. */\r
+#define CP15_DOMAIN_CLIENT_ACCESS  0x01  \r
+/** Manager Accesses are not checked against the access permission bits so a permission fault cannot be generated. */\r
+#define CP15_DOMAIN_MANAGER_ACCESS 0x03  \r
+\r
+\r
+#define CP15_ICache             1\r
+#define CP15_DCache             0\r
+   \r
+#define CP15_PMCNTENSET_ENABLE  31   \r
+#define CP15_PMCR_DIVIDER       3\r
+#define CP15_PMCR_RESET         2   \r
+#define CP15_PMCR_ENABLE        0\r
+   \r
+\r
+/*------------------------------------------------------------------------------ */\r
+/*         Exported functions */\r
+/*------------------------------------------------------------------------------ */\r
+extern unsigned int CP15_ReadID(void);\r
+extern unsigned int CP15_ReadControl(void);\r
+extern void CP15_ExclusiveCache(void);\r
+extern void CP15_NonExclusiveCache(void);\r
+extern void CP15_ISB(void);\r
+extern void CP15_DSB(void);\r
+extern void CP15_DMB(void);\r
+extern void CP15_SelectDCache(void);\r
+extern void CP15_SelectICache(void);\r
+extern void CP15_WriteControl(unsigned int value);\r
+extern void CP15_WriteTTB(unsigned int value);\r
+extern void CP15_WriteDomainAccessControl(unsigned int value);\r
+\r
+extern void CP15_InvalidateIcacheInnerSharable(void);\r
+extern void CP15_InvalidateBTBinnerSharable(void);\r
+extern void CP15_InvalidateIcache(void);\r
+extern void CP15_InvalidateIcacheByMva(void);\r
+extern void CP15_InvalidateBTB(void);\r
+extern void CP15_InvalidateBTBbyMva(uint32_t VA_Addr);\r
+\r
+extern void CP15_InvalidateDcacheBySetWay(void);\r
+extern void CP15_CleanDCacheBySetWay(void);\r
+extern void CP15_CleanInvalidateDCacheBySetWay(void);\r
+\r
+extern void CP15_InvalidateDcacheByMva(uint32_t startAddr, uint32_t endAddr  );\r
+extern void CP15_CleanDCacheByMva(uint32_t startAddr, uint32_t endAddr  );\r
+extern void CP15_CleanInvalidateDcacheByMva(uint32_t startAddr, uint32_t endAddr  );\r
+\r
+extern void CP15_CleanDCacheUMva(void);\r
+extern void CP15_InvalidateTranslationTable(void);\r
+\r
+extern void CP15_coherent_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );\r
+extern void CP15_invalidate_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );\r
+extern void CP15_clean_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );\r
+extern void CP15_flush_dcache_for_dma (uint32_t startAddr, uint32_t endAddr );\r
+extern void CP15_flush_kern_dcache_for_dma (uint32_t startAddr, uint32_t size );\r
+\r
+\r
+\r
+/*------------------------------------------------------------------------------ */\r
+/*         Exported functions  from CP15.c                                       */\r
+/*------------------------------------------------------------------------------ */\r
+\r
+/** MMU (Status/Enable/Disable) */\r
+extern unsigned int CP15_IsMMUEnabled(void);\r
+extern void         CP15_EnableMMU(void);\r
+extern void         CP15_DisableMMU(void);\r
+\r
+/** I cache (Status/Enable/Disable) */\r
+extern unsigned int CP15_IsIcacheEnabled(void);\r
+extern void         CP15_EnableIcache(void);\r
+extern void         CP15_DisableIcache(void);\r
+\r
+/** D cache (Status/Enable/Disable) */\r
+extern unsigned int CP15_IsDcacheEnabled(void);\r
+extern void         CP15_EnableDcache(void);\r
+extern void         CP15_DisableDcache(void);\r
+\r
+\r
+extern void CP15_InvalidateTLB(void);\r
+\r
+\r
+extern void CP15_CacheClean(uint8_t CacheType);\r
+extern void CP15_CacheInvalidate(uint8_t CacheType);\r
+extern void CP15_CacheFlush(uint8_t CacheType);\r
+extern void CP15_InvalidateDCacheByVA(uint32_t S_Add, uint32_t E_Add);\r
+extern void CP15_CleanDCacheByVA(uint32_t S_Add, uint32_t E_Add);\r
+extern void CP15_FlushDCacheByVA(uint32_t S_Add, uint32_t E_Add);\r
+\r
+#endif // #ifndef _CP15_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_asm_gcc.S b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_asm_gcc.S
new file mode 100644 (file)
index 0000000..280b58b
--- /dev/null
@@ -0,0 +1,631 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES// LOSS OF USE, DATA,\r
+ * OR PROFITS// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
\r
+\r
+/** \file */\r
+\r
+\r
+/** \r
+ * \addtogroup cp15_cache Cache Operations\r
+ *\r
+ * \section Usage\r
+ *\r
+ * They are performed as MCR instructions and only operate on a level 1 cache associated with \r
+ * ATM v7 processor.\r
+ * The supported operations are:\r
+ * <ul>\r
+ * <li> Any of these operations can be applied to\r
+ *  -# any data cache\r
+ *  -# any unified cache.\r
+ * <li> Invalidate by MVA\r
+ *   Performs an invalidate of a data or unified cache line based on the address it contains.\r
+ * <li> Invalidate by set/way\r
+ *   Performs an invalidate of a data or unified cache line based on its location in the cache hierarchy.\r
+ * <li> Clean by MVA\r
+ *   Performs a clean of a data or unified cache line based on the address it contains.\r
+ * <li> Clean by set/way\r
+ *   Performs a clean of a data or unified cache line based on its location in the cache hierarchy.\r
+ * <li> Clean and Invalidate by MVA\r
+ *   Performs a clean and invalidate of a data or unified cache line based on the address it contains.\r
+ * <li> Clean and Invalidate by set/way\r
+ *   Performs a clean and invalidate of a data or unified cache line based on its location in the cache hierarchy.\r
+ * </ul>\r
+ *\r
+ * Related files:\n\r
+ * \ref cp15.h\n\r
+ * \ref cp15_arm_gnu.S \n\r
+ */\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Functions to access CP15 coprocessor register\r
+ *----------------------------------------------------------------------------*/\r
+        .global  CP15_ReadID\r
+        .global  CP15_ExclusiveCache\r
+        .global  CP15_NonExclusiveCache\r
+        .global  CP15_ISB\r
+        .global  CP15_DSB\r
+        .global  CP15_DMB        \r
+        .global  CP15_SelectICache\r
+        .global  CP15_SelectDCache\r
+        .global  CP15_ReadControl\r
+        .global  CP15_WriteControl\r
+        .global  CP15_WriteDomainAccessControl\r
+        .global  CP15_WriteTTB\r
+        .global  CP15_InvalidateIcacheInnerSharable\r
+        .global  CP15_InvalidateBTBinnerSharable\r
+        .global  CP15_InvalidateIcache\r
+        .global  CP15_InvalidateIcacheByMva\r
+        .global  CP15_InvalidateBTB\r
+        .global  CP15_InvalidateBTBbyMva\r
+        \r
+        .global  CP15_InvalidateDcacheBySetWay\r
+        .global  CP15_CleanDCacheBySetWay\r
+        .global  CP15_CleanInvalidateDCacheBySetWay\r
+        \r
+        .global  CP15_InvalidateDcacheByMva        \r
+        .global  CP15_CleanDCacheByMva             \r
+        .global  CP15_CleanDCacheUMva\r
+        .global  CP15_CleanInvalidateDcacheByMva\r
+        \r
+        .global  CP15_coherent_dcache_for_dma\r
+        .global  CP15_invalidate_dcache_for_dma\r
+        .global  CP15_clean_dcache_for_dma\r
+        .global  CP15_flush_dcache_for_dma\r
+        .global  CP15_flush_kern_dcache_for_dma\r
+\r
+/** \r
+ * \brief Register c0 accesses the ID Register, Cache Type Register, and TCM Status Registers.\r
+ *  Reading from this register returns the device ID, the cache type, or the TCM status\r
+ *   depending on the value of Opcode_2 used. \r
+ */\r
+        .section .CP15_ReadID\r
+        .global   CP15_ReadID\r
+CP15_ReadID:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c0, c0, 0\r
+        bx      lr\r
+     \r
+\r
+/** \r
+ * \brief Register c7 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        .section .CP15_ISB\r
+        .global   CP15_ISB\r
+CP15_ISB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 4\r
+        nop\r
+        bx      lr\r
+        \r
+/** \r
+ * \brief Register c7 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        .section .CP15_DSB\r
+        .global   CP15_DSB\r
+CP15_DSB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c10, 4\r
+        nop\r
+        bx      lr\r
+\r
+/** \r
+ * \brief Register c7 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        .section .CP15_DMB\r
+        .global   CP15_DMB\r
+CP15_DMB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c10, 5\r
+        nop\r
+        bx      lr\r
+\r
+/** \r
+ * \brief Register c1 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        .section .CP15_ExclusiveCache\r
+        .global   CP15_ExclusiveCache\r
+CP15_ExclusiveCache:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c1, c0, 1 // Read ACTLR\r
+        orr     r0, r0, #0x00000080\r
+        mcr     p15, 0, r0, c1, c0, 1 // Write ACTLR\r
+        nop\r
+        bx      lr\r
+        \r
+       \r
+/** \r
+ * \brief Register c1 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        .section .CP15_NonExclusiveCache\r
+        .global   CP15_NonExclusiveCache\r
+CP15_NonExclusiveCache:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c1, c0, 1 // Read ACTLR\r
+        bic     r0, r0, #0x00000080\r
+        mcr     p15, 0, r0, c1, c0, 1 // Write ACTLR\r
+        nop\r
+        bx      lr       \r
+        \r
+/** \r
+ * \brief Register c1 accesses the CSSELR Register, to select ICache \r
+ */\r
+        .section .CP15_SelectICache\r
+        .global   CP15_SelectICache\r
+CP15_SelectICache:\r
+        mrc     p15, 2, r0, c0, c0, 0           // Read CSSELR\r
+        orr     r0,  r0, #0x1                   // Change 0th bit to ICache\r
+        mcr     p15, 2, r0, c0, c0, 0           // Write CSSELR\r
+        nop\r
+        bx      lr\r
+        \r
+/** \r
+ * \brief Register c1 accesses the CSSELR Register, to select DCache\r
+ */\r
+        .section .CP15_SelectDCache\r
+        .global   CP15_SelectDCache\r
+CP15_SelectDCache:\r
+        mrc     p15, 2, r0, c0, c0, 0           // Read CSSELR\r
+        and     r0,  r0, #0xFFFFFFFE            // Change 0th bit to ICache\r
+        mcr     p15, 2, r0, c0, c0, 0           // Write CSSELR\r
+        nop\r
+        bx      lr\r
+        \r
+\r
+\r
+/** \r
+ * \brief Register c1 is the Control Register for the ARM926EJ-S processor.\r
+ * This register specifies the configuration used to enable and disable the\r
+ * caches and MMU. It is recommended that you access this register using a\r
+ * read-modify-write sequence\r
+ */\r
+        .section .CP15_ReadControl\r
+        .global   CP15_ReadControl\r
+CP15_ReadControl:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c1, c0, 0   \r
+        bx      lr\r
+\r
+        .section .CP15_WriteControl\r
+        .global   CP15_WriteControl\r
+CP15_WriteControl:\r
+        mcr     p15, 0, r0, c1, c0, 0\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        bx      lr\r
+\r
+       .section .CP15_WriteDomainAccessControl\r
+       .global   CP15_WriteDomainAccessControl\r
+CP15_WriteDomainAccessControl:\r
+        mcr     p15, 0, r0, c3, c0, 0\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        nop\r
+        bx      lr\r
\r
+/** \r
+ * \brief  ARMv7A architecture supports two translation tables\r
+ * Configure translation table base (TTB) control register cp15,c2\r
+ * to a value of all zeros, indicates we are using TTB register 0.\r
+ * write the address of our page table base to TTB register 0.\r
+ */\r
+        .section .CP15_WriteTTB\r
+        .global   CP15_WriteTTB\r
+CP15_WriteTTB:\r
+       mcr     p15, 0, r0, c2, c0, 0\r
+       nop\r
+       nop\r
+       nop\r
+       nop\r
+       nop\r
+       nop\r
+       nop\r
+       nop\r
+       bx     lr\r
+\r
+/**\r
+ * \brief Invalidate I cache predictor array inner Sharable\r
+ */\r
+        .section .CP15_InvalidateIcacheInnerSharable\r
+        .global   CP15_InvalidateIcacheInnerSharable\r
+CP15_InvalidateIcacheInnerSharable:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c1, 0\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate entire branch predictor array inner Sharable\r
+ */\r
+        .section .CP15_InvalidateBTBinnerSharable\r
+        .global   CP15_InvalidateBTBinnerSharable\r
+CP15_InvalidateBTBinnerSharable:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c1, 6\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate all instruction caches to PoU, also flushes branch target cache\r
+ */\r
+        .section .CP15_InvalidateIcache\r
+        .global   CP15_InvalidateIcache\r
+CP15_InvalidateIcache:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 0\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate instruction caches by VA to PoU\r
+ */\r
+        .section .CP15_InvalidateIcacheByMva\r
+        .global   CP15_InvalidateIcacheByMva\r
+CP15_InvalidateIcacheByMva:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 1\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate entire branch predictor array\r
+ */\r
+        .section .CP15_InvalidateBTB\r
+        .global   CP15_InvalidateBTB\r
+CP15_InvalidateBTB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 6\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate branch predictor array entry by MVA\r
+ */\r
+        .section .CP15_InvalidateBTBbyMva\r
+        .global   CP15_InvalidateBTBbyMva\r
+CP15_InvalidateBTBbyMva:\r
+        mcr     p15, 0, r0, c7, c5, 7\r
+        bx      lr\r
+\r
+/***********************************************************\r
+*\r
+*       ===Data Cache related maintenance functions===\r
+*\r
+**************************************************************/\r
+\r
+\r
+//      ===Data Cache maintenance by SetWay  === \r
+\r
+/**\r
+ * \brief Invalidate entire data cache by set/way\r
+ */\r
+        .section .CP15_InvalidateDcacheBySetWay\r
+        .global   CP15_InvalidateDcacheBySetWay\r
+CP15_InvalidateDcacheBySetWay:\r
+        mrc     p15, 1, r0, c0, c0, 0\r
+        mov     r1, r0, lsr #3          // Num of ways\r
+        and     r1, r1, #3              // 3 is specific to CortexA5 with 32 KB\r
+        mov     r2, r0, lsr #13         // Num of stes\r
+        and     r2, r2, #0xFF           // 8bit is specific to CortexA5 with 32 KB        \r
+        mov     r0, #0                  // 0:SHL:5\r
+inv_way_loop:\r
+        lsl     r4, r1, #30\r
+        sub     r1, r1, #1              // \r
+        mov     r3, r2\r
+inv_line_loop:\r
+        orr     r0, r4, r3, lsl #5\r
+        mcr     p15, 0, r0, c7, c6, 2\r
+        sub     r3, r3, #1              // 1:SHL:30\r
+        cmp     r3, #0\r
+        bpl     inv_line_loop\r
+        cmp     r1, #-1\r
+        bne     inv_way_loop\r
+        nop\r
+        bx      lr        \r
+        \r
+        \r
+/**\r
+ * \brief Clean entire data cache by set/way\r
+ */\r
+        .section .CP15_CleanDCacheBySetWay\r
+        .global   CP15_CleanDCacheBySetWay\r
+CP15_CleanDCacheBySetWay:\r
+        mrc     p15, 1, r0, c0, c0, 0\r
+        mov     r1, r0, lsr #3          // Num of ways\r
+        and     r1, r1, #3              // 3 is specific to CortexA5 with 32 KB\r
+        mov     r2, r0, lsr #13         // Num of stes\r
+        and     r2, r2, #0xFF           // 8bit is specific to CortexA5 with 32 KB        \r
+        mov     r0, #0                  // 0:SHL:5\r
+clean_way_loop:\r
+        lsl     r4, r1, #30\r
+        sub     r1, r1, #1              // \r
+        mov     r3, r2\r
+clean_line_loop:\r
+        orr     r0, r4, r3, lsl #5\r
+        mcr     p15, 0, r0, c7, c10, 2\r
+        sub     r3, r3, #1              // 1:SHL:30\r
+        cmp     r3, #0\r
+        bpl     clean_line_loop\r
+        cmp     r1, #-1\r
+        bne     clean_way_loop\r
+        nop\r
+        bx      lr \r
+        \r
+/**\r
+ * \brief Clean and Invalidate entire data cache by set/way\r
+ */\r
+        .section .CP15_CleanInvalidateDCacheBySetWay\r
+        .global   CP15_CleanInvalidateDCacheBySetWay\r
+CP15_CleanInvalidateDCacheBySetWay:\r
+        mrc     p15, 1, r0, c0, c0, 0\r
+        mov     r1, r0, lsr #3          // Num of ways\r
+        and     r1, r1, #3              // 3 is specific to CortexA5 with 32 KB\r
+        mov     r2, r0, lsr #13         // Num of stes\r
+        and     r2, r2, #0xFF           // 8bit is specific to CortexA5 with 32 KB        \r
+        mov     r0, #0                  // 0:SHL:5\r
+clinv_way_loop:\r
+        lsl     r4, r1, #30\r
+        sub     r1, r1, #1              // \r
+        mov     r3, r2\r
+clinv_line_loop:\r
+        orr     r0, r4, r3, lsl #5\r
+        mcr     p15, 0, r0, c7, c10, 2\r
+        sub     r3, r3, #1              // 1:SHL:30\r
+        cmp     r3, #0\r
+        bpl     clinv_line_loop\r
+        cmp     r1, #-1\r
+        bne     clinv_way_loop\r
+        nop\r
+        bx      lr    \r
+        \r
+        \r
+        \r
+//      ===Data Cache maintenance by VA  === \r
+\r
+\r
+/**\r
+ * \brief Invalidate data cache by VA to Poc\r
+ */\r
+        .section .CP15_InvalidateDcacheByMva\r
+        .global   CP15_InvalidateDcacheByMva\r
+CP15_InvalidateDcacheByMva: \r
+        mov     r2, #0x20                          //Eight words per line, Cortex-A5 L1 Line Size 32 Bytes\r
+        mov     r3, r0\r
+inv_loop:\r
+        mcr     p15, 0, r0, c7, c6, 1\r
+        add     r3, r3, r2\r
+        cmp     r3, r1        \r
+        bls     inv_loop        \r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Clean data cache by MVA\r
+ */\r
+        .section .CP15_CleanDCacheByMva\r
+        .global   CP15_CleanDCacheByMva\r
+CP15_CleanDCacheByMva:   \r
+        mov     r2, #0x20                          //Eight words per line, Cortex-A5 L1 Line Size 32 Bytes\r
+        mov     r3, r0\r
+clean_loop:\r
+        mcr     p15, 0, r0, c7, c10, 1\r
+        add     r3, r3, r2\r
+        cmp     r3, r1        \r
+        bls     clean_loop        \r
+        bx      lr\r
+       \r
+/**\r
+ * \brief Clean unified cache by MVA \r
+ */\r
+        .section .CP15_CleanDCacheUMva\r
+        .global   CP15_CleanDCacheUMva\r
+CP15_CleanDCacheUMva:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c11, 1\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Clean and invalidate data cache by VA to PoC\r
+ */\r
+        .section .CP15_CleanInvalidateDcacheByMva\r
+        .global   CP15_CleanInvalidateDcacheByMva\r
+CP15_CleanInvalidateDcacheByMva:\r
+        mov     r2, #0x20                          //Eight words per line, Cortex-A5 L1 Line Size 32 Bytes\r
+        mov     r3, r0\r
+clinv_loop:\r
+        mcr     p15, 0, r0, c7, c14, 1\r
+        add     r3, r3, r2\r
+        cmp     r3, r1        \r
+        bls     clinv_loop        \r
+        bx      lr\r
+        \r
+        \r
+\r
+/**\r
+ * \brief Ensure that the I and D caches are coherent within specified\r
+ *      region.  This is typically used when code has been written to\r
+ *      a memory region, and will be executed.\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        .section .CP15_coherent_dcache_for_dma\r
+        .global   CP15_coherent_dcache_for_dma\r
+CP15_coherent_dcache_for_dma:\r
\r
+        mrc     p15, 0, r3, c0, c0, 1        \r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  \r
+        mov     r2, #4                       \r
+        mov     r2, r2, lsl r3               \r
+\r
+        sub     r3, r2, #1\r
+        bic     r12, r0, r3\r
+1:\r
+        mcr     p15, 0, r12, c7, c11, 1      \r
+        add     r12, r12, r2\r
+        cmp     r12, r1\r
+        blo     1b\r
+        dsb\r
+\r
+        mrc     p15, 0, r3, c0, c0, 1        \r
+        and     r3, r3, #0xf                  \r
+        mov     r2, #4                       \r
+        mov     r2, r2, lsl r3               \r
+\r
+        sub     r3, r2, #1\r
+        bic     r12, r0, r3\r
+2:\r
+        mcr     p15, 0, r12, c7, c5, 1       \r
+        add     r12, r12, r2\r
+        cmp     r12, r1\r
+        blo     2b\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c1, 6         \r
+        mcr      p15, 0, r0, c7, c5, 6        \r
+        dsb\r
+        isb\r
+        bx      lr\r
\r
+\r
+/**\r
+ * \brief Invalidate the data cache within the specified region; we will\r
+ *      be performing a DMA operation in this region and we want to\r
+ *      purge old data in the cache.\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */ \r
+        .section .CP15_invalidate_dcache_for_dma\r
+        .global   CP15_invalidate_dcache_for_dma\r
+CP15_invalidate_dcache_for_dma:\r
+\r
+        mrc     p15, 0, r3, c0, c0, 1       \r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                \r
+        mov     r2, #4                      \r
+        mov     r2, r2, lsl r3              \r
+\r
+        sub     r3, r2, #1\r
+        tst     r0, r3\r
+        bic     r0, r0, r3\r
+\r
+        mcrne   p15, 0, r0, c7, c14, 1        \r
+\r
+        tst     r1, r3\r
+        bic     r1, r1, r3\r
+        mcrne   p15, 0, r1, c7, c14, 1        \r
+3:\r
+        mcr     p15, 0, r0, c7, c6, 1        \r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     3b\r
+        dsb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Clean the data cache within the specified region\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        .section .CP15_clean_dcache_for_dma\r
+        .global   CP15_clean_dcache_for_dma\r
+CP15_clean_dcache_for_dma:\r
+        mrc     p15, 0, r3, c0, c0, 1        \r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                 \r
+        mov     r2, #4                       \r
+        mov     r2, r2, lsl r3              \r
+\r
+        sub     r3, r2, #1\r
+        bic     r0, r0, r3\r
+4:\r
+        mcr     p15, 0, r0, c7, c10, 1        \r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     4b\r
+        dsb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Flush the data cache within the specified region\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        .section .CP15_flush_dcache_for_dma\r
+        .global   CP15_flush_dcache_for_dma\r
+CP15_flush_dcache_for_dma:\r
+        mrc     p15, 0, r3, c0, c0, 1        \r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                 \r
+        mov     r2, #4                        \r
+        mov     r2, r2, lsl r3               \r
+        sub     r3, r2, #1\r
+        bic     r0, r0, r3\r
+5:\r
+        mcr     p15, 0, r0, c7, c14, 1       \r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     5b\r
+        dsb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief CP15_flush_kern_dcache_for_dma\r
+ * Ensure that the data held in the page kaddr is written back to the page in question.\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        .section .CP15_flush_kern_dcache_for_dma\r
+        .global   CP15_flush_kern_dcache_for_dma\r
+CP15_flush_kern_dcache_for_dma:\r
+        mrc     p15, 0, r3, c0, c0, 1         \r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  \r
+        mov     r2, #4                        \r
+        mov     r2, r2, lsl r3                \r
+\r
+        add     r1, r0, r1\r
+        sub     r3, r2, #1\r
+        bic     r0, r0, r3\r
+\r
+        mcr     p15, 0, r0, c7, c14, 1        \r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     1b\r
+        dsb\r
+        bx      lr\r
+        \r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_asm_iar.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_asm_iar.s
new file mode 100644 (file)
index 0000000..96a1333
--- /dev/null
@@ -0,0 +1,662 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES// LOSS OF USE, DATA,\r
+ * OR PROFITS// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+\r
+/** \file */\r
+\r
+\r
+/** \r
+ * \addtogroup cp15_cache Cache Operations\r
+ *\r
+ * \section Usage\r
+ *\r
+ * They are performed as MCR instructions and only operate on a level 1 cache associated with \r
+ * ATM v7 processor.\r
+ * The supported operations are:\r
+ * <ul>\r
+ * <li> Any of these operations can be applied to\r
+ *  -# any data cache\r
+ *  -# any unified cache.\r
+ * <li> Invalidate by MVA\r
+ *   Performs an invalidate of a data or unified cache line based on the address it contains.\r
+ * <li> Invalidate by set/way\r
+ *   Performs an invalidate of a data or unified cache line based on its location in the cache hierarchy.\r
+ * <li> Clean by MVA\r
+ *   Performs a clean of a data or unified cache line based on the address it contains.\r
+ * <li> Clean by set/way\r
+ *   Performs a clean of a data or unified cache line based on its location in the cache hierarchy.\r
+ * <li> Clean and Invalidate by MVA\r
+ *   Performs a clean and invalidate of a data or unified cache line based on the address it contains.\r
+ * <li> Clean and Invalidate by set/way\r
+ *   Performs a clean and invalidate of a data or unified cache line based on its location in the cache hierarchy.\r
+ * </ul>\r
+ *\r
+ * Related files:\n\r
+ * \ref cp15.h\n\r
+ * \ref cp15_arm_iar.s \n\r
+ */\r
\r
+\r
+        MODULE  ?cp15\r
+\r
+        //// Forward declaration of sections.\r
+        SECTION IRQ_STACK:DATA:NOROOT(2)\r
+        SECTION CSTACK:DATA:NOROOT(3)\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#define __ASSEMBLY__\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Functions to access CP15 coprocessor register\r
+ *----------------------------------------------------------------------------*/\r
+        PUBLIC  CP15_ReadID\r
+        PUBLIC  CP15_ExclusiveCache\r
+        PUBLIC  CP15_NonExclusiveCache\r
+        PUBLIC  CP15_ISB\r
+        PUBLIC  CP15_DSB\r
+        PUBLIC  CP15_DMB        \r
+        PUBLIC  CP15_SelectICache\r
+        PUBLIC  CP15_SelectDCache\r
+        PUBLIC  CP15_ReadControl\r
+        PUBLIC  CP15_WriteControl\r
+        PUBLIC  CP15_WriteDomainAccessControl\r
+        PUBLIC  CP15_WriteTTB\r
+        PUBLIC  CP15_InvalidateIcacheInnerSharable\r
+        PUBLIC  CP15_InvalidateBTBinnerSharable\r
+        PUBLIC  CP15_InvalidateIcache\r
+        PUBLIC  CP15_InvalidateIcacheByMva\r
+        PUBLIC  CP15_InvalidateBTB\r
+        PUBLIC  CP15_InvalidateBTBbyMva\r
+        \r
+        PUBLIC  CP15_InvalidateDcacheBySetWay\r
+        PUBLIC  CP15_CleanDCacheBySetWay\r
+        PUBLIC  CP15_CleanInvalidateDCacheBySetWay\r
+        \r
+        PUBLIC  CP15_InvalidateDcacheByMva        \r
+        PUBLIC  CP15_CleanDCacheByMva             \r
+        PUBLIC  CP15_CleanDCacheUMva\r
+        PUBLIC  CP15_CleanInvalidateDcacheByMva\r
+        PUBLIC  CP15_InvalidateTranslationTable\r
+        \r
+        PUBLIC  CP15_coherent_dcache_for_dma\r
+        PUBLIC  CP15_invalidate_dcache_for_dma\r
+        PUBLIC  CP15_clean_dcache_for_dma\r
+        PUBLIC  CP15_flush_dcache_for_dma\r
+        PUBLIC  CP15_flush_kern_dcache_for_dma\r
+\r
+/** \r
+ * \brief Register c0 accesses the ID Register, Cache Type Register, and TCM Status Registers.\r
+ *  Reading from this register returns the device ID, the cache type, or the TCM status\r
+ *   depending on the value of Opcode_2 used. \r
+ */\r
+        SECTION .CP15_ReadID:DATA:NOROOT(2)\r
+        PUBLIC   CP15_ReadID\r
+CP15_ReadID:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c0, c0, 0\r
+        bx      lr\r
+     \r
+\r
+/** \r
+ * \brief Register c7 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        SECTION .CP15_ISB:DATA:NOROOT(2)\r
+        PUBLIC   CP15_ISB\r
+CP15_ISB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 4\r
+        nop\r
+        bx      lr\r
+        \r
+/** \r
+ * \brief Register c7 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        SECTION .CP15_DSB:DATA:NOROOT(2)\r
+        PUBLIC   CP15_DSB\r
+CP15_DSB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c10, 4\r
+        nop\r
+        bx      lr\r
+\r
+/** \r
+ * \brief Register c7 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        SECTION .CP15_DMB:DATA:NOROOT(2)\r
+        PUBLIC   CP15_DMB\r
+CP15_DMB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c10, 5\r
+        nop\r
+        bx      lr\r
+\r
+/** \r
+ * \brief Register c1 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        SECTION .CP15_ExclusiveCache:DATA:NOROOT(2)\r
+        PUBLIC   CP15_ExclusiveCache\r
+CP15_ExclusiveCache:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c1, c0, 1 ; Read ACTLR\r
+        orr     r0, r0, #0x00000080\r
+        mcr     p15, 0, r0, c1, c0, 1 ; Write ACTLR\r
+        nop\r
+        bx      lr\r
+       \r
+       \r
+/** \r
+ * \brief Register c1 accesses the ACTLR Register, to indicate cpu that L2 is in exclusive mode\r
+ */\r
+        SECTION .CP15_NonExclusiveCache:DATA:NOROOT(2)\r
+        PUBLIC   CP15_NonExclusiveCache\r
+CP15_NonExclusiveCache:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c1, c0, 1 ; Read ACTLR\r
+        bic     r0, r0, #0x00000080\r
+        mcr     p15, 0, r0, c1, c0, 1 ; Write ACTLR\r
+        nop\r
+        bx      lr       \r
+        \r
+/** \r
+ * \brief Register c1 accesses the CSSELR Register, to select ICache \r
+ */\r
+        SECTION .CP15_SelectICache:DATA:NOROOT(2)\r
+        PUBLIC   CP15_SelectICache\r
+CP15_SelectICache:\r
+        mrc     p15, 2, r0, c0, c0, 0           ; Read CSSELR\r
+        orr     r0,  r0, #0x1                   ; Change 0th bit to ICache\r
+        mcr     p15, 2, r0, c0, c0, 0           ; Write CSSELR\r
+        nop\r
+        bx      lr\r
+        \r
+/** \r
+ * \brief Register c1 accesses the CSSELR Register, to select DCache\r
+ */\r
+        SECTION .CP15_SelectDCache:DATA:NOROOT(2)\r
+        PUBLIC   CP15_SelectDCache\r
+CP15_SelectDCache:\r
+        mrc     p15, 2, r0, c0, c0, 0           ; Read CSSELR\r
+        and     r0,  r0, #0xFFFFFFFE            ; Change 0th bit to ICache\r
+        mcr     p15, 2, r0, c0, c0, 0           ; Write CSSELR\r
+        nop\r
+        bx      lr\r
+        \r
+\r
+\r
+/** \r
+ * \brief Register c1 is the Control Register for the ARM926EJ-S processor.\r
+ * This register specifies the configuration used to enable and disable the\r
+ * caches and MMU. It is recommended that you access this register using a\r
+ * read-modify-write sequence\r
+ */\r
+        SECTION .CP15_ReadControl:CODE:NOROOT(2)\r
+        PUBLIC   CP15_ReadControl\r
+CP15_ReadControl:\r
+        mov     r0, #0\r
+        mrc     p15, 0, r0, c1, c0, 0   \r
+        bx      lr\r
+\r
+        SECTION .CP15_WriteControl:CODE:NOROOT(2)\r
+        PUBLIC   CP15_WriteControl\r
+CP15_WriteControl:\r
+        mcr     p15, 0, r0, c1, c0, 0\r
+        dsb\r
+        isb\r
+        bx      lr\r
+\r
+       SECTION .CP15_WriteDomainAccessControl:CODE:NOROOT(2)\r
+       PUBLIC   CP15_WriteDomainAccessControl\r
+CP15_WriteDomainAccessControl:\r
+        mcr     p15, 0, r0, c3, c0, 0\r
+        dsb\r
+        isb\r
+        bx      lr\r
\r
+/** \r
+ * \brief  ARMv7A architecture supports two translation tables\r
+ * Configure translation table base (TTB) control register cp15,c2\r
+ * to a value of all zeros, indicates we are using TTB register 0.\r
+ * write the address of our page table base to TTB register 0.\r
+ */\r
+        SECTION .CP15_WriteTTB:CODE:NOROOT(2)\r
+        PUBLIC   CP15_WriteTTB\r
+CP15_WriteTTB:\r
+       mcr     p15, 0, r0, c2, c0, 0\r
+       dsb\r
+       isb\r
+       bx     lr\r
+\r
+/**\r
+ * \brief Invalidate I cache predictor array inner Sharable\r
+ */\r
+        SECTION .CP15_InvalidateIcacheInnerSharable:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateIcacheInnerSharable\r
+CP15_InvalidateIcacheInnerSharable:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c1, 0\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate entire branch predictor array inner Sharable\r
+ */\r
+        SECTION .CP15_InvalidateBTBinnerSharable:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateBTBinnerSharable\r
+CP15_InvalidateBTBinnerSharable:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c1, 6\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate all instruction caches to PoU, also flushes branch target cache\r
+ */\r
+        SECTION .CP15_InvalidateIcache:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateIcache\r
+CP15_InvalidateIcache:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 0\r
+        isb\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate instruction caches by VA to PoU\r
+ */\r
+        SECTION .CP15_InvalidateIcacheByMva:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateIcacheByMva\r
+CP15_InvalidateIcacheByMva:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 1\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate entire branch predictor array\r
+ */\r
+        SECTION .CP15_InvalidateBTB:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateBTB\r
+CP15_InvalidateBTB:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c5, 6\r
+        dsb\r
+        isb\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Invalidate branch predictor array entry by MVA\r
+ */\r
+        SECTION .CP15_InvalidateBTBbyMva:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateBTBbyMva\r
+CP15_InvalidateBTBbyMva:\r
+        mcr     p15, 0, r0, c7, c5, 7\r
+        bx      lr\r
+\r
+/***********************************************************\r
+*\r
+*       ===Data Cache related maintenance functions===\r
+*\r
+**************************************************************/\r
+\r
+\r
+//      ===Data Cache maintenance by SetWay  === \r
+\r
+/**\r
+ * \brief Invalidate entire data cache by set/way\r
+ */\r
+        SECTION .CP15_InvalidateDcacheBySetWay:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateDcacheBySetWay\r
+CP15_InvalidateDcacheBySetWay:\r
+        mrc     p15, 1, r0, c0, c0, 0\r
+        mov     r1, r0, lsr #3          ; Num of ways\r
+        and     r1, r1, #3              ; 3 is specific to CortexA5 with 32 KB\r
+        mov     r2, r0, lsr #13         ; Num of stes\r
+        and     r2, r2, #0xFF           ; 8bit is specific to CortexA5 with 32 KB        \r
+        mov     r0, #0                  ; 0:SHL:5\r
+inv_way_loop\r
+        lsl     r4, r1, #30\r
+        sub     r1, r1, #1              ; \r
+        mov     r3, r2\r
+inv_line_loop\r
+        orr     r0, r4, r3, lsl #5\r
+        mcr     p15, 0, r0, c7, c6, 2\r
+        sub     r3, r3, #1              ; 1:SHL:30\r
+        cmp     r3, #0\r
+        bpl     inv_line_loop\r
+        cmp     r1, #-1\r
+        bne     inv_way_loop\r
+        nop\r
+        bx      lr        \r
+        \r
+        \r
+/**\r
+ * \brief Clean entire data cache by set/way\r
+ */\r
+        SECTION .CP15_CleanDCacheBySetWay:CODE:NOROOT(2)\r
+        PUBLIC   CP15_CleanDCacheBySetWay\r
+CP15_CleanDCacheBySetWay:\r
+        mrc     p15, 1, r0, c0, c0, 0\r
+        mov     r1, r0, lsr #3          ; Num of ways\r
+        and     r1, r1, #3              ; 3 is specific to CortexA5 with 32 KB\r
+        mov     r2, r0, lsr #13         ; Num of stes\r
+        and     r2, r2, #0xFF           ; 8bit is specific to CortexA5 with 32 KB        \r
+        mov     r0, #0                  ; 0:SHL:5\r
+clean_way_loop\r
+        lsl     r4, r1, #30\r
+        sub     r1, r1, #1              ; \r
+        mov     r3, r2\r
+clean_line_loop\r
+        orr     r0, r4, r3, lsl #5\r
+        mcr     p15, 0, r0, c7, c10, 2\r
+        sub     r3, r3, #1              ; 1:SHL:30\r
+        cmp     r3, #0\r
+        bpl     clean_line_loop\r
+        cmp     r1, #-1\r
+        bne     clean_way_loop\r
+        nop\r
+        bx      lr \r
+        \r
+/**\r
+ * \brief Clean and Invalidate entire data cache by set/way\r
+ */\r
+        SECTION .CP15_CleanInvalidateDCacheBySetWay:CODE:NOROOT(2)\r
+        PUBLIC   CP15_CleanInvalidateDCacheBySetWay\r
+CP15_CleanInvalidateDCacheBySetWay:\r
+        mrc     p15, 1, r0, c0, c0, 0\r
+        mov     r1, r0, lsr #3          ; Num of ways\r
+        and     r1, r1, #3              ; 3 is specific to CortexA5 with 32 KB\r
+        mov     r2, r0, lsr #13         ; Num of stes\r
+        and     r2, r2, #0xFF           ; 8bit is specific to CortexA5 with 32 KB        \r
+        mov     r0, #0                  ; 0:SHL:5\r
+clinv_way_loop\r
+        lsl     r4, r1, #30\r
+        sub     r1, r1, #1              ; \r
+        mov     r3, r2\r
+clinv_line_loop\r
+        orr     r0, r4, r3, lsl #5\r
+        mcr     p15, 0, r0, c7, c10, 2\r
+        sub     r3, r3, #1              ; 1:SHL:30\r
+        cmp     r3, #0\r
+        bpl     clinv_line_loop\r
+        cmp     r1, #-1\r
+        bne     clinv_way_loop\r
+        dsb\r
+        isb\r
+        bx      lr    \r
+        \r
+        \r
+        \r
+//      ===Data Cache maintenance by VA  === \r
+\r
+\r
+/**\r
+ * \brief Invalidate data cache by VA to Poc\r
+ */\r
+        SECTION .CP15_InvalidateDcacheByMva:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateDcacheByMva\r
+CP15_InvalidateDcacheByMva: \r
+        mov     r2, #0x20                          ;Eight words per line, Cortex-A5 L1 Line Size 32 Bytes\r
+        mov     r3, r0\r
+inv_loop\r
+        mcr     p15, 0, r0, c7, c6, 1\r
+        add     r3, r3, r2\r
+        cmp     r3, r1        \r
+        bls     inv_loop        \r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Clean data cache by MVA\r
+ */\r
+        SECTION .CP15_CleanDCacheByMva:CODE:NOROOT(2)\r
+        PUBLIC   CP15_CleanDCacheByMva\r
+CP15_CleanDCacheByMva:   \r
+        mov     r2, #0x20                          ;Eight words per line, Cortex-A5 L1 Line Size 32 Bytes\r
+        mov     r3, r0\r
+clean_loop\r
+        mcr     p15, 0, r0, c7, c10, 1\r
+        add     r3, r3, r2\r
+        cmp     r3, r1        \r
+        bls     clean_loop        \r
+        bx      lr\r
+       \r
+/**\r
+ * \brief Clean unified cache by MVA \r
+ */\r
+        SECTION .CP15_CleanDCacheUMva:CODE:NOROOT(2)\r
+        PUBLIC   CP15_CleanDCacheUMva\r
+CP15_CleanDCacheUMva:\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c11, 1\r
+        bx      lr\r
+\r
+/**\r
+ * \brief Clean and invalidate data cache by VA to PoC\r
+ */\r
+        SECTION .CP15_CleanInvalidateDcacheByMva:CODE:NOROOT(2)\r
+        PUBLIC   CP15_CleanInvalidateDcacheByMva\r
+CP15_CleanInvalidateDcacheByMva:\r
+        mov     r2, #0x20                          ;Eight words per line, Cortex-A5 L1 Line Size 32 Bytes\r
+        mov     r3, r0\r
+clinv_loop\r
+        mcr     p15, 0, r0, c7, c14, 1\r
+        add     r3, r3, r2\r
+        cmp     r3, r1        \r
+        bls     clinv_loop        \r
+        bx      lr\r
+        \r
+        \r
+/**\r
+ * \brief Invalidate translation table\r
+ */\r
+        SECTION .CP15_InvalidateTranslationTable:CODE:NOROOT(2)\r
+        PUBLIC   CP15_InvalidateTranslationTable\r
+CP15_InvalidateTranslationTable:\r
+        mcr      p15, 0, r0, c8, c3,  0\r
+        dsb\r
+        isb\r
+        mcr      p15, 0, r0, c8, c7,  0\r
+        dsb\r
+        isb   \r
+        bx      lr        \r
+        \r
+/**\r
+ * \brief flush translation table\r
+ */\r
+        SECTION .CP15_FlushTranslationTable:CODE:NOROOT(2)\r
+        PUBLIC   CP15_FlushTranslationTable\r
+CP15_FlushTranslationTable:\r
+        mcr      p15, 0, r0, c8, c3,  0\r
+        dsb\r
+        isb    \r
+        bx      lr          \r
+\r
+\r
+/**\r
+ * \brief Ensure that the I and D caches are coherent within specified\r
+ *      region.  This is typically used when code has been written to\r
+ *      a memory region, and will be executed.\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        SECTION .CP15_coherent_dcache_for_dma:CODE:NOROOT(2)\r
+        PUBLIC   CP15_coherent_dcache_for_dma\r
+CP15_coherent_dcache_for_dma:\r
+//      dcache_line_size r2, r3\r
\r
+        mrc     p15, 0, r3, c0, c0, 1         // read ctr\r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  // cache line size encoding\r
+        mov     r2, #4                        // bytes per word\r
+        mov     r2, r2, lsl r3                // actual cache line size\r
+\r
+        sub     r3, r2, #1\r
+        bic     r12, r0, r3\r
+loop1:\r
+        mcr     p15, 0, r12, c7, c11, 1       // clean D line to the point of unification\r
+        add     r12, r12, r2\r
+        cmp     r12, r1\r
+        blo     loop1\r
+        dsb\r
+\r
+// .macro  icache_line_size, reg, tmp\r
+        mrc     p15, 0, r3, c0, c0, 1         // read ctr\r
+        and     r3, r3, #0xf                  // cache line size encoding\r
+        mov     r2, #4                        // bytes per word\r
+        mov     r2, r2, lsl r3                // actual cache line size\r
+\r
+        sub     r3, r2, #1\r
+        bic     r12, r0, r3\r
+loop2:\r
+        mcr     p15, 0, r12, c7, c5, 1        // invalidate I line\r
+        add     r12, r12, r2\r
+        cmp     r12, r1\r
+        blo     loop2\r
+        mov     r0, #0\r
+        mcr     p15, 0, r0, c7, c1, 6         //invalidate BTB Inner Shareable\r
+        mcr      p15, 0, r0, c7, c5, 6        // invalidate BTB\r
+        dsb\r
+        isb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Invalidate the data cache within the specified region; we will\r
+ *      be performing a DMA operation in this region and we want to\r
+ *      purge old data in the cache.\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        SECTION .CP15_invalidate_dcache_for_dma:CODE:NOROOT(2)\r
+        PUBLIC   CP15_invalidate_dcache_for_dma\r
+CP15_invalidate_dcache_for_dma:\r
+\r
+//      dcache_line_size r2, r3\r
+        mrc     p15, 0, r3, c0, c0, 1         // read ctr\r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  // cache line size encoding\r
+        mov     r2, #4                        // bytes per word\r
+        mov     r2, r2, lsl r3                // actual cache line size\r
+\r
+        sub     r3, r2, #1\r
+        tst     r0, r3\r
+        bic     r0, r0, r3\r
+\r
+        mcrne   p15, 0, r0, c7, c14, 1         // clean & invalidate D / U line\r
+\r
+        tst     r1, r3\r
+        bic     r1, r1, r3\r
+        mcrne   p15, 0, r1, c7, c14, 1         // clean & invalidate D / U line\r
+loop3:\r
+        mcr     p15, 0, r0, c7, c6, 1          // invalidate D / U line\r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     loop3\r
+        dsb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Clean the data cache within the specified region\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        SECTION .CP15_clean_dcache_for_dma:CODE:NOROOT(2)\r
+        PUBLIC   CP15_clean_dcache_for_dma\r
+CP15_clean_dcache_for_dma:\r
+//      dcache_line_size r2, r3\r
+        mrc     p15, 0, r3, c0, c0, 1         // read ctr\r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  // cache line size encoding\r
+        mov     r2, #4                        // bytes per word\r
+        mov     r2, r2, lsl r3                // actual cache line size\r
+\r
+        sub     r3, r2, #1\r
+        bic     r0, r0, r3\r
+loop4:\r
+        mcr     p15, 0, r0, c7, c10, 1        // clean D / U line\r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     loop4\r
+        dsb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief Flush the data cache within the specified region\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        SECTION .CP15_flush_dcache_for_dma:CODE:NOROOT(2)\r
+        PUBLIC   CP15_flush_dcache_for_dma\r
+CP15_flush_dcache_for_dma:\r
+//        dcache_line_size r2, r3\r
+        mrc     p15, 0, r3, c0, c0, 1         // read ctr\r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  // cache line size encoding\r
+        mov     r2, #4                        // bytes per word\r
+        mov     r2, r2, lsl r3                // actual cache line size\r
+        sub     r3, r2, #1\r
+        bic     r0, r0, r3\r
+loop5:\r
+        mcr     p15, 0, r0, c7, c14, 1         // clean & invalidate D / U line\r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     loop5\r
+        dsb\r
+        bx      lr\r
+\r
+\r
+/**\r
+ * \brief CP15_flush_kern_dcache_for_dma\r
+ * Ensure that the data held in the page kaddr is written back to the page in question.\r
+ * \param start virtual start address of region\r
+ * \param end virtual end address of region\r
+ */\r
+        SECTION .CP15_flush_kern_dcache_for_dma:CODE:NOROOT(2)\r
+        PUBLIC   CP15_flush_kern_dcache_for_dma\r
+CP15_flush_kern_dcache_for_dma:\r
+//       dcache_line_size r2, r3\r
+        mrc     p15, 0, r3, c0, c0, 1         // read ctr\r
+        lsr     r3, r3, #16\r
+        and     r3, r3, #0xf                  // cache line size encoding\r
+        mov     r2, #4                        // bytes per word\r
+        mov     r2, r2, lsl r3                // actual cache line size\r
+\r
+        add     r1, r0, r1\r
+        sub     r3, r2, #1\r
+        bic     r0, r0, r3\r
+\r
+        mcr     p15, 0, r0, c7, c14, 1        // clean & invalidate D line / unified line\r
+        add     r0, r0, r2\r
+        cmp     r0, r1\r
+        blo     1b\r
+        dsb\r
+        bx      lr\r
+        END\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_pmu.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_pmu.c
new file mode 100644 (file)
index 0000000..1d5a7ba
--- /dev/null
@@ -0,0 +1,264 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License  \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+#if defined(__ICCARM__)\r
+  #include <intrinsics.h>\r
+#endif\r
+/*----------------------------------------------------------------------------\r
+ *        Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+/**\r
+ * \brief Resets the counter and enables/disables all counters including PMCCNTR.\r
+ * \param ResetCounterType  CounterType: Performance or Cycle counter\r
+ */\r
+static void CP15_PMUControl(uint8_t ResetCounterType, uint8_t EnableCounter)\r
+{\r
+  uint32_t PMU_Value=0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 0" :"=r" (PMU_Value));  \r
+  PMU_Value |= ((ResetCounterType << 1)| EnableCounter);  \r
+  asm("mcr     p15, 0, %0, c9, c12, 0" : : "r" (PMU_Value));  \r
+}\r
+\r
+/**\r
+ * \brief Select Cycle Count divider\r
+ * \param Divider  0 for increment of counter at every single cycle or 1 for at every 64th cycle\r
+ */\r
+static void CP15_CycleCountDivider(uint8_t Divider)\r
+{\r
+  uint32_t PMU_Value=0;  \r
+  \r
+  assert((Divider>1?0:1));\r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 0" :"=r" (PMU_Value));  \r
+  PMU_Value |= (Divider << 3);  \r
+  asm("mcr     p15, 0, %0, c9, c12, 0" : : "r" (PMU_Value));  \r
+}\r
+\r
+/**\r
+ * \brief Enables PMCCNTR.\r
+ */\r
+static void CP15_EnablePMCNT(void) \r
+{\r
+  uint32_t CNT_Value=0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 1" :"=r" (CNT_Value));  \r
+  CNT_Value |= (uint32_t)((1 << CP15_PMCNTENSET));  \r
+  asm("mcr     p15, 0, %0, c9, c12, 1" : : "r" (CNT_Value));  \r
+}\r
\r
+/**\r
+ * \brief Enables PMCCNTR.\r
+ */\r
+static void CP15_EnableCounter(uint8_t Counter)\r
+{\r
+  uint32_t CNT_Value=0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 1" :"=r" (CNT_Value));  \r
+  CNT_Value |= Counter;  \r
+  asm("mcr     p15, 0, %0, c9, c12, 1" : : "r" (CNT_Value));  \r
+}\r
+\r
+\r
+/**\r
+ * \brief Disables/clear PMCCNTR.\r
+ * \param Counter  0 or 1 to selct counter\r
+ */\r
+   \r
+static void CP15_ClearPMCNT(void)\r
+{\r
+  uint32_t CNT_Value = 0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 2" :"=r" (CNT_Value));  \r
+  CNT_Value |= (uint32_t)(1 << CP15_PMCNTENCLEAR);  \r
+  asm("mcr     p15, 0, %0, c9, c12, 2" : : "r" (CNT_Value));  \r
+}\r
+\r
+/**\r
+ * \brief Disables/Enables overflow flag.\r
+ * \param Enable  Enables or disables the flag option\r
+ * \param ClearCounterFlag  selects the counter flag to clear\r
+ */\r
+void CP15_OverflowStatus(uint8_t Enable,  uint8_t ClearCounterFlag)\r
+{\r
+  uint32_t OFW_Value=0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 3" :"=r" (OFW_Value));  \r
+  OFW_Value |= ((Enable << 31)| ClearCounterFlag);  \r
+  asm("mcr     p15, 0, %0, c9, c12, 3" : : "r" (OFW_Value));  \r
+}\r
+\r
+/**\r
+ * \brief Disables/Enables overflow flag.\r
+ * \param Enable  Enables or disables the flag option\r
+ * \param ClearCounterFlag  selects the counter flag to clear\r
+ */\r
+uint32_t CP15_ReadOverflowStatus(uint8_t EventCounter)\r
+{\r
+  uint32_t OFW_Value=0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 3" :"=r" (OFW_Value));  \r
+  OFW_Value =  ((OFW_Value & EventCounter) >> (EventCounter - 1));\r
+  return OFW_Value;\r
+}\r
+\r
+/**\r
+ * \brief Increments the count of a performance monitor count register.\r
+ * \param IncrCounter  0 or 1  counters\r
+ */\r
+void CP15_SoftINCR(uint8_t IncrCounter)\r
+{\r
+  uint32_t INRC_Value=0;  \r
+  \r
+  asm("mrc     p15, 0, %0, c9, c12, 4" :"=r" (INRC_Value));  \r
+  INRC_Value |= IncrCounter;  \r
+  asm("mcr     p15, 0, %0, c9, c12, 4" : : "r" (INRC_Value));  \r
+}\r
+\r
+/**\r
+ * \brief Increments the count of a performance monitor count register.\r
+ * \param EventType  Select Event Type\r
+ * \param Counter  0 or 1  counters\r
+ */\r
+static void CP15_SelectEvent(PerfEventType EventType, uint8_t Counter)\r
+{\r
+  uint32_t CounterSelect=0;\r
+  assert((Counter == 1) || (Counter == 2));\r
+  CounterSelect = (Counter & 0x1F);\r
+  asm("mcr     p15, 0, %0, c9, c12, 5" : : "r" (CounterSelect)); \r
+  CounterSelect = (EventType & 0xFF);\r
+  asm("mcr     p15, 0, %0, c9, c13, 1" : : "r" (CounterSelect));  // PMXEVTYPER\r
+  asm("mrc     p15, 0, %0, c9, c13, 1" : "=r" (CounterSelect));  // PMXEVTYPER\r
+}\r
+\r
+/**\r
+ * \brief Enables USER mode\r
+ */\r
+void CP15_EnableUserMode(void)\r
+{\r
+  uint8_t Value = 1;\r
+  asm("mcr     p15, 0, %0, c9, c14, 0" : : "r" (Value));  \r
+}\r
+\r
+\r
+/**\r
+ * \brief Enables Oveflows interrupt\r
+ * \param Enable  Enables the Interrupt\r
+ * \param Counter  0 or 1  counters\r
+ */\r
+void CP15_EnableIT(uint8_t Enable, uint8_t Counter)\r
+{\r
+  uint32_t ITE_Value=0;  \r
+  \r
+  ITE_Value |= ((Enable << 31)| Counter);  \r
+  asm("mcr     p15, 0, %0, c9, c14, 1" : : "r" (ITE_Value));  \r
+}\r
+\r
+/**\r
+ * \brief Disables Oveflows interrupt\r
+ * \param Disable  Disables the Interrupt\r
+ * \param Counter  0 or 1  counters\r
+ */\r
+void CP15_DisableIT(uint8_t Disable, uint8_t Counter)\r
+{\r
+  uint32_t ITE_Value=0;  \r
+  \r
+  ITE_Value |= ((Disable << 31)| Counter);  \r
+  asm("mcr     p15, 0, %0, c9, c14, 2" : : "r" (ITE_Value));  \r
+}\r
+\r
+\r
+/**\r
+ * \brief Initialize Cycle counter with Divider 64\r
+ */\r
+uint32_t CP15_CycleCounterInit(void)\r
+{\r
+  uint32_t value;\r
+  CP15_ClearPMCNT();\r
+  CP15_EnablePMCNT();\r
+  CP15_OverflowStatus(ENABLE, CP15_BothCounter);\r
+  CP15_CycleCountDivider(CP15_CountDivider64);\r
+  CP15_PMUControl(CP15_ResetCycCounter, ENABLE);\r
+\r
+  asm("mrc     p15, 0, %0, c9, c13, 0" :"=r" (value));\r
+  \r
+  return value;\r
+  \r
+}\r
+\r
+/**\r
+ * \brief Initialize Performance monitor counter with Divider 64\r
+ * \param Event  Event type\r
+ * \param Counter  0 or 1  counters\r
+ */\r
+\r
+void CP15_PerfCounterInit(PerfEventType Event, uint8_t Counter)\r
+{\r
+\r
+  CP15_PMUControl(CP15_ResetPerCounter, ENABLE);  \r
+  CP15_SelectEvent(Event, Counter);  \r
+  CP15_OverflowStatus(DISABLE, CP15_BothCounter);\r
+  CP15_EnableCounter(Counter);\r
+}\r
+\r
+/**\r
+ * \brief gives total number of event count\r
+ * \param Counter  0 or 1  counters\r
+ */\r
+uint32_t CP15_CountEvent(uint8_t Counter)\r
+{\r
+  uint32_t value; \r
+  \r
+  asm("mcr     p15, 0, %0, c9, c12, 5" : : "r" (Counter));  \r
+  asm("mrc     p15, 0, %0, c9, c13, 2" :"=r" (value));  // PMXEVTYPER\r
+  return (value);\r
+}\r
+\r
+/**\r
+ * \brief gives total number of cycle count\r
+\r
+ */\r
+uint32_t CP15_GetCycleCounter(void)\r
+{\r
+  uint32_t value;\r
+  \r
+  asm("mrc     p15, 0, %0, c9, c13, 0" :"=r" (value));\r
+  return value;\r
+  \r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_pmu.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/cp15/cp15_pmu.h
new file mode 100644 (file)
index 0000000..c25d18a
--- /dev/null
@@ -0,0 +1,104 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License  \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+#ifndef _CP15_PMU_H\r
+#define _CP15_PMU_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+   \r
+#define CP15_PMCNTENSET         31   \r
+#define CP15_PMCNTENCLEAR       31  \r
+#define CP15_PMCR_DIVIDER       3\r
+#define CP15_PMCR_RESET         2   \r
+#define CP15_PMCR_ENABLE        0\r
+   \r
+#define CP15_NoReset            0\r
+#define CP15_ResetPerCounter    1\r
+#define CP15_ResetCycCounter    2\r
+#define CP15_ResetPerCycCounter 3\r
+\r
+#define CP15_CountDividerSingle 0\r
+#define CP15_CountDivider64     1  \r
+   \r
+#define CP15_CounterNone        0\r
+#define CP15_Counter0           1     \r
+#define CP15_Counter1           2   \r
+#define CP15_BothCounter        3 \r
+   \r
+typedef enum \r
+{\r
+  L1_IC_FILL,                   // Level 1 instruction cache refill\r
+  L1_ITLB_FILL,                 // Level 1 instruction TLB refill\r
+  L1_DC_FILL,                   // Level 1 data cache refill\r
+  L1_DC_ACC,                    // Level 1 data cache access\r
+  L1_DTLB_FILL,                 // Level 1 data TLB refill\r
+  LOAD,                         // Load\r
+  STORE,                        // Store        \r
+  InstArchExec,                 // Instruction architecturally executed\r
+  ExcepetionTaken,              // Exception taken\r
+  ExcepetionRet,                // Exception return\r
+  WrCONTEXTIDR,                 // Write to CONTEXTIDR\r
+  SoftPCChange,                 // Software change of the PC\r
+  ImmBr,                        // Immediate branch\r
+  ProcRet,                      // Procedure return\r
+  UnalingedLdStr,               // Unaligned load or store\r
+  MispredictedBranchExec,       // Mispredicted or not predicted branch speculatively executed        \r
+  PredictedBranchExec,          // Predictable branch speculatively executed\r
+  DataMemAcc,                   // Data memory access.\r
+  ICAcc,                        // Instruction Cache access.\r
+  DCEviction,                   // Data cache eviction.\r
+  IRQException,                 // IRQ exception taken.\r
+  FIQException,                 // FIQ exception taken.\r
+  ExtMemReq,                    // External memory request.\r
+  NCExtMemReq,                  // Non-cacheable external memory request\r
+  PrefetchLineFill,             // Linefill because of prefetch.        \r
+  PrefetchLineDrop,             // Prefetch linefill dropped.  \r
+  EnteringRAmode,               // Entering read allocate mode.  \r
+  RAmode,                       // Read allocate mode.\r
+  reserved,                     // Reserved, do not use\r
+  DWstallSBFfull                // Data Write operation that stalls the pipeline because the store buffer is full.\r
+}PerfEventType;\r
+\r
+extern  uint32_t CP15_CycleCounterInit(void);\r
+extern  uint32_t CP15_GetCycleCounter(void);\r
+\r
+extern uint32_t CP15_ReadOverflowStatus(uint8_t EventCounter);\r
+extern void CP15_OverflowStatus(uint8_t Enable,  uint8_t ClearCounterFlag);\r
+extern void CP15_SoftINCR(uint8_t IncrCounter);\r
+\r
+extern uint32_t CP15_CountEvent(uint8_t Counter);\r
+extern void CP15_EnableUserMode(void);\r
+extern void CP15_EnableIT(uint8_t Enable, uint8_t Counter);\r
+extern void CP15_DisableIT(uint8_t Disable, uint8_t Counter);\r
+extern void CP15_PerfCounterInit(PerfEventType Event, uint8_t Counter);\r
+\r
+#endif\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/SAMA5D4.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/SAMA5D4.h
new file mode 100644 (file)
index 0000000..28698c8
--- /dev/null
@@ -0,0 +1,16895 @@
+/* ---------------------------------------------------------------------------- */\r
+/*                  Atmel Microcontroller Software Support                      */\r
+/*                       SAM Software Package License                           */\r
+/* ---------------------------------------------------------------------------- */\r
+/* Copyright (c) %copyright_year%, Atmel Corporation                                        */\r
+/*                                                                              */\r
+/* All rights reserved.                                                         */\r
+/*                                                                              */\r
+/* Redistribution and use in source and binary forms, with or without           */\r
+/* modification, are permitted provided that the following condition is met:    */\r
+/*                                                                              */\r
+/* - Redistributions of source code must retain the above copyright notice,     */\r
+/* this list of conditions and the disclaimer below.                            */\r
+/*                                                                              */\r
+/* Atmel's name may not be used to endorse or promote products derived from     */\r
+/* this software without specific prior written permission.                     */\r
+/*                                                                              */\r
+/* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR   */\r
+/* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */\r
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE   */\r
+/* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,      */\r
+/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */\r
+/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  */\r
+/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */\r
+/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING         */\r
+/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */\r
+/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */\r
+/* ---------------------------------------------------------------------------- */\r
+\r
+#ifndef _SAMA5D4_\r
+#define _SAMA5D4_\r
+\r
+/** \addtogroup SAMA5D4_definitions SAMA5D4 definitions\r
+  This file defines all structures and symbols for SAMA5D4:\r
+    - registers and bitfields\r
+    - peripheral base address\r
+    - peripheral ID\r
+    - PIO definitions\r
+*/\r
+/*@{*/\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif \r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+#include <stdint.h>\r
+#ifdef __cplusplus\r
+  #define __I  volatile       /**< Defines 'read-only'  permissions */\r
+#else\r
+  #define __I  volatile const /**< Defines 'read-only'  permissions */\r
+#endif\r
+#define   __O  volatile       /**< Defines 'write-only' permissions */\r
+#define   __IO volatile       /**< Defines 'read/write' permissions */\r
+#endif\r
+\r
+#define REG_SFR_AICREDIR        (0xF8028054U)\r
+typedef enum IRQn\r
+{\r
+  FIQ_IRQn             =  0, /**<  0 SAMA5D4 FIQ Interrupt ID (FIQ) */\r
+  SYS_IRQn             =  1, /**<  1 SAMA5D4 System Controller Interrupt (SYS) */\r
+  ARM_IRQn             =  2, /**<  2 SAMA5D4 Performance Monitor Unit (ARM) */\r
+  PIT_IRQn             =  3, /**<  3 SAMA5D4 Periodic Interval Timer Interrupt (PIT) */\r
+  WDT_IRQn             =  4, /**<  4 SAMA5D4 Watchdog timer Interrupt (WDT) */\r
+  PIOD_IRQn            =  5, /**<  5 SAMA5D4 Parallel I/O Controller D (PIOD) */\r
+  USART0_IRQn          =  6, /**<  6 SAMA5D4 USART 0 (USART0) */\r
+  USART1_IRQn          =  7, /**<  7 SAMA5D4 USART 1 (USART1) */\r
+  XDMAC0_IRQn          =  8, /**<  8 SAMA5D4 DMA Controller 0 (XDMAC0) */\r
+  ICM_IRQn             =  9, /**<  9 SAMA5D4 Integritry Check Monitor (ICM) */\r
+  AES_IRQn             = 12, /**< 12 SAMA5D4 Advanced Encryption Standard (AES) */\r
+  AESB_IRQn            = 13, /**< 13 SAMA5D4 AES bridge (AESB) */\r
+  TDES_IRQn            = 14, /**< 14 SAMA5D4 Triple Data Encryption Standard (TDES) */\r
+  SHA_IRQn             = 15, /**< 15 SAMA5D4 SHA Signature (SHA) */\r
+  MPDDRC_IRQn          = 16, /**< 16 SAMA5D4 MPDDR controller (MPDDRC) */\r
+  MATRIX1_IRQn         = 17, /**< 17 SAMA5D4 H32MX, 32-bit AHB Matrix (MATRIX1) */\r
+  MATRIX0_IRQn         = 18, /**< 18 SAMA5D4 H64MX, 64-bit AHB Matrix (MATRIX0) */\r
+  VDEC_IRQn            = 19, /**< 19 SAMA5D4 Video Decoder (VDEC) */\r
+  HSMC_IRQn            = 22, /**< 22 SAMA5D4 Multi-bit ECC Interrupt (HSMC) */\r
+  PIOA_IRQn            = 23, /**< 23 SAMA5D4 Parallel I/O Controller A (PIOA) */\r
+  PIOB_IRQn            = 24, /**< 24 SAMA5D4 Parallel I/O Controller B (PIOB) */\r
+  PIOC_IRQn            = 25, /**< 25 SAMA5D4 Parallel I/O Controller C (PIOC) */\r
+  PIOE_IRQn            = 26, /**< 26 SAMA5D4 Parallel I/O Controller E (PIOE) */\r
+  UART0_IRQn           = 27, /**< 27 SAMA5D4 UART 0 (UART0) */\r
+  UART1_IRQn           = 28, /**< 28 SAMA5D4 UART 1 (UART1) */\r
+  USART2_IRQn          = 29, /**< 29 SAMA5D4 USART 2 (USART2) */\r
+  USART3_IRQn          = 30, /**< 30 SAMA5D4 USART 3 (USART3) */\r
+  USART4_IRQn          = 31, /**< 31 SAMA5D4 USART 4 (USART4) */\r
+  TWI0_IRQn            = 32, /**< 32 SAMA5D4 Two-Wire Interface 0 (TWI0) */\r
+  TWI1_IRQn            = 33, /**< 33 SAMA5D4 Two-Wire Interface 1 (TWI1) */\r
+  TWI2_IRQn            = 34, /**< 34 SAMA5D4 Two-Wire Interface 2 (TWI2) */\r
+  HSMCI0_IRQn          = 35, /**< 35 SAMA5D4 High Speed Multimedia Card Interface 0 (HSMCI0) */\r
+  HSMCI1_IRQn          = 36, /**< 36 SAMA5D4 High Speed Multimedia Card Interface 1 (HSMCI1) */\r
+  SPI0_IRQn            = 37, /**< 37 SAMA5D4 Serial Peripheral Interface 0 (SPI0) */\r
+  SPI1_IRQn            = 38, /**< 38 SAMA5D4 Serial Peripheral Interface 1 (SPI1) */\r
+  SPI2_IRQn            = 39, /**< 39 SAMA5D4 Serial Peripheral Interface 2 (SPI2) */\r
+  TC0_IRQn             = 40, /**< 40 SAMA5D4 Timer Counter 0 (ch. 0, 1, 2) (TC0) */\r
+  TC1_IRQn             = 41, /**< 41 SAMA5D4 Timer Counter 1 (ch. 3, 4, 5) (TC1) */\r
+  TC2_IRQn             = 42, /**< 42 SAMA5D4 Timer Counter 2 (ch. 6, 7, 8) (TC2) */\r
+  PWM_IRQn             = 43, /**< 43 SAMA5D4 Pulse Width Modulation Controller (PWM) */\r
+  ADC_IRQn             = 44, /**< 44 SAMA5D4 Touch Screen ADC Controller (ADC) */\r
+  DBGU_IRQn            = 45, /**< 45 SAMA5D4 Debug Unit Interrupt (DBGU) */\r
+  UHPHS_IRQn           = 46, /**< 46 SAMA5D4 USB Host High Speed (UHPHS) */\r
+  UDPHS_IRQn           = 47, /**< 47 SAMA5D4 USB Device High Speed (UDPHS) */\r
+  SSC0_IRQn            = 48, /**< 48 SAMA5D4 Synchronous Serial Controller 0 (SSC0) */\r
+  SSC1_IRQn            = 49, /**< 49 SAMA5D4 Synchronous Serial Controller 1 (SSC1) */\r
+  XDMAC1_IRQn          = 50, /**< 50 SAMA5D4 DMA Controller 1 (XDMAC1) */\r
+  LCDC_IRQn            = 51, /**< 51 SAMA5D4 LCD Controller (LCDC) */\r
+  ISI_IRQn             = 52, /**< 52 SAMA5D4 Camera Interface (ISI) */\r
+  TRNG_IRQn            = 53, /**< 53 SAMA5D4 True Random Number Generator (TRNG) */\r
+  GMAC0_IRQn           = 54, /**< 54 SAMA5D4 Ethernet MAC 0 (GMAC0) */\r
+  GMAC1_IRQn           = 55, /**< 55 SAMA5D4 Ethernet MAC 1 (GMAC1) */\r
+  IRQ_IRQn             = 56, /**< 56 SAMA5D4 IRQ Interrupt ID (IRQ) */\r
+  SFC_IRQn             = 57, /**< 57 SAMA5D4 Fuse Controller (SFC) */\r
+  SMD_IRQn             = 61, /**< 61 SAMA5D4 SMD Soft Modem (SMD) */\r
+  TWI3_IRQn            = 62, /**< 62 SAMA5D4 Two-Wire Interface 3 (TWI3) */\r
+  CATB_IRQn            = 63, /**< 63 SAMA5D4 Capacitive Touch Controller (CATB) */\r
+  SFR_IRQn             = 64, /**< 64 SAMA5D4 Special Function Register  (SFR) */\r
+  AIC_IRQn             = 65, /**< 65 SAMA5D4 Advanced Interrupt Controller  (AIC) */\r
+  SAIC_IRQn            = 66, /**< 66 SAMA5D4 Secured Advanced Interrupt Controller  (SAIC) */\r
+  L2CC_IRQn            = 67, /**< 67 SAMA5D4 L2 Cache Controller  (L2CC) */\r
+\r
+  PERIPH_COUNT_IRQn    = 68  /**< Number of peripheral IDs */\r
+} IRQn_Type;\r
+\r
+/* ************************************************************************** */\r
+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+/** \addtogroup SAMA5D4_api Peripheral Software API */\r
+/*@{*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Analog-to-Digital Converter */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_ADC Analog-to-Digital Converter */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Adc hardware registers */\r
+typedef struct {\r
+  __O  uint32_t ADC_CR;        /**< \brief (Adc Offset: 0x00) Control Register */\r
+  __IO uint32_t ADC_MR;        /**< \brief (Adc Offset: 0x04) Mode Register */\r
+  __IO uint32_t ADC_SEQR1;     /**< \brief (Adc Offset: 0x08) Channel Sequence Register 1 */\r
+  __IO uint32_t ADC_SEQR2;     /**< \brief (Adc Offset: 0x0C) Channel Sequence Register 2 */\r
+  __O  uint32_t ADC_CHER;      /**< \brief (Adc Offset: 0x10) Channel Enable Register */\r
+  __O  uint32_t ADC_CHDR;      /**< \brief (Adc Offset: 0x14) Channel Disable Register */\r
+  __I  uint32_t ADC_CHSR;      /**< \brief (Adc Offset: 0x18) Channel Status Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __I  uint32_t ADC_LCDR;      /**< \brief (Adc Offset: 0x20) Last Converted Data Register */\r
+  __O  uint32_t ADC_IER;       /**< \brief (Adc Offset: 0x24) Interrupt Enable Register */\r
+  __O  uint32_t ADC_IDR;       /**< \brief (Adc Offset: 0x28) Interrupt Disable Register */\r
+  __I  uint32_t ADC_IMR;       /**< \brief (Adc Offset: 0x2C) Interrupt Mask Register */\r
+  __I  uint32_t ADC_ISR;       /**< \brief (Adc Offset: 0x30) Interrupt Status Register */\r
+  __I  uint32_t Reserved2[2];\r
+  __I  uint32_t ADC_OVER;      /**< \brief (Adc Offset: 0x3C) Overrun Status Register */\r
+  __IO uint32_t ADC_EMR;       /**< \brief (Adc Offset: 0x40) Extended Mode Register */\r
+  __IO uint32_t ADC_CWR;       /**< \brief (Adc Offset: 0x44) Compare Window Register */\r
+  __I  uint32_t Reserved3[2];\r
+  __I  uint32_t ADC_CDR[5];    /**< \brief (Adc Offset: 0x50) Channel Data Register */\r
+  __I  uint32_t Reserved4[12];\r
+  __IO uint32_t ADC_ACR;       /**< \brief (Adc Offset: 0x94) Analog Control Register */\r
+  __I  uint32_t Reserved5[6];\r
+  __IO uint32_t ADC_TSMR;      /**< \brief (Adc Offset: 0xB0) Touchscreen Mode Register */\r
+  __I  uint32_t ADC_XPOSR;     /**< \brief (Adc Offset: 0xB4) Touchscreen X Position Register */\r
+  __I  uint32_t ADC_YPOSR;     /**< \brief (Adc Offset: 0xB8) Touchscreen Y Position Register */\r
+  __I  uint32_t ADC_PRESSR;    /**< \brief (Adc Offset: 0xBC) Touchscreen Pressure Register */\r
+  __IO uint32_t ADC_TRGR;      /**< \brief (Adc Offset: 0xC0) Trigger Register */\r
+  __I  uint32_t Reserved6[8];\r
+  __IO uint32_t ADC_WPMR;      /**< \brief (Adc Offset: 0xE4) Write Protect Mode Register */\r
+  __I  uint32_t ADC_WPSR;      /**< \brief (Adc Offset: 0xE8) Write Protect Status Register */\r
+} Adc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- ADC_CR : (ADC Offset: 0x00) Control Register -------- */\r
+#define ADC_CR_SWRST (0x1u << 0) /**< \brief (ADC_CR) Software Reset */\r
+#define ADC_CR_START (0x1u << 1) /**< \brief (ADC_CR) Start Conversion */\r
+#define ADC_CR_TSCALIB (0x1u << 2) /**< \brief (ADC_CR) Touchscreen Calibration */\r
+/* -------- ADC_MR : (ADC Offset: 0x04) Mode Register -------- */\r
+#define ADC_MR_TRGSEL_Pos 1\r
+#define ADC_MR_TRGSEL_Msk (0x7u << ADC_MR_TRGSEL_Pos) /**< \brief (ADC_MR) Trigger Selection */\r
+#define   ADC_MR_TRGSEL_ADC_TRIG0 (0x0u << 1) /**< \brief (ADC_MR) ADTRG */\r
+#define   ADC_MR_TRGSEL_ADC_TRIG1 (0x1u << 1) /**< \brief (ADC_MR) TIOA0 */\r
+#define   ADC_MR_TRGSEL_ADC_TRIG2 (0x2u << 1) /**< \brief (ADC_MR) TIOA1 */\r
+#define   ADC_MR_TRGSEL_ADC_TRIG3 (0x3u << 1) /**< \brief (ADC_MR) TIOA2 */\r
+#define   ADC_MR_TRGSEL_ADC_TRIG4 (0x4u << 1) /**< \brief (ADC_MR) PWM event line 0 */\r
+#define   ADC_MR_TRGSEL_ADC_TRIG5 (0x5u << 1) /**< \brief (ADC_MR) PWM_even line 1 */\r
+#define ADC_MR_LOWRES (0x1u << 4) /**< \brief (ADC_MR) Resolution */\r
+#define   ADC_MR_LOWRES_BITS_10 (0x0u << 4) /**< \brief (ADC_MR) 10-bit resolution. For higher resolution by interpolation, please refer to "ADC Extended Mode Register" on page 79 */\r
+#define   ADC_MR_LOWRES_BITS_8 (0x1u << 4) /**< \brief (ADC_MR) 8-bit resolution */\r
+#define ADC_MR_SLEEP (0x1u << 5) /**< \brief (ADC_MR) Sleep Mode */\r
+#define   ADC_MR_SLEEP_NORMAL (0x0u << 5) /**< \brief (ADC_MR) Normal Mode: The ADC Core and reference voltage circuitry are kept ON between conversions */\r
+#define   ADC_MR_SLEEP_SLEEP (0x1u << 5) /**< \brief (ADC_MR) Sleep Mode: The ADC Core and reference voltage circuitry are OFF between conversions */\r
+#define ADC_MR_PRESCAL_Pos 8\r
+#define ADC_MR_PRESCAL_Msk (0xffu << ADC_MR_PRESCAL_Pos) /**< \brief (ADC_MR) Prescaler Rate Selection */\r
+#define ADC_MR_PRESCAL(value) ((ADC_MR_PRESCAL_Msk & ((value) << ADC_MR_PRESCAL_Pos)))\r
+#define ADC_MR_STARTUP_Pos 16\r
+#define ADC_MR_STARTUP_Msk (0xfu << ADC_MR_STARTUP_Pos) /**< \brief (ADC_MR) Start Up Time */\r
+#define   ADC_MR_STARTUP_SUT0 (0x0u << 16) /**< \brief (ADC_MR) 0 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT8 (0x1u << 16) /**< \brief (ADC_MR) 8 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT16 (0x2u << 16) /**< \brief (ADC_MR) 16 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT24 (0x3u << 16) /**< \brief (ADC_MR) 24 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT64 (0x4u << 16) /**< \brief (ADC_MR) 64 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT80 (0x5u << 16) /**< \brief (ADC_MR) 80 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT96 (0x6u << 16) /**< \brief (ADC_MR) 96 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT112 (0x7u << 16) /**< \brief (ADC_MR) 112 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT512 (0x8u << 16) /**< \brief (ADC_MR) 512 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT576 (0x9u << 16) /**< \brief (ADC_MR) 576 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT640 (0xAu << 16) /**< \brief (ADC_MR) 640 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT704 (0xBu << 16) /**< \brief (ADC_MR) 704 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT768 (0xCu << 16) /**< \brief (ADC_MR) 768 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT832 (0xDu << 16) /**< \brief (ADC_MR) 832 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT896 (0xEu << 16) /**< \brief (ADC_MR) 896 periods of ADCClock */\r
+#define   ADC_MR_STARTUP_SUT960 (0xFu << 16) /**< \brief (ADC_MR) 960 periods of ADCClock */\r
+#define ADC_MR_DIV1 (0x1u << 22) /**< \brief (ADC_MR)  */\r
+#define ADC_MR_TRACKTIM_Pos 24\r
+#define ADC_MR_TRACKTIM_Msk (0xfu << ADC_MR_TRACKTIM_Pos) /**< \brief (ADC_MR) Tracking Time */\r
+#define ADC_MR_TRACKTIM(value) ((ADC_MR_TRACKTIM_Msk & ((value) << ADC_MR_TRACKTIM_Pos)))\r
+#define ADC_MR_USEQ (0x1u << 31) /**< \brief (ADC_MR) Use Sequence Enable */\r
+#define   ADC_MR_USEQ_NUM_ORDER (0x0u << 31) /**< \brief (ADC_MR) Normal Mode: The controller converts channels in a simple numeric order depending only on the channel index. */\r
+#define   ADC_MR_USEQ_REG_ORDER (0x1u << 31) /**< \brief (ADC_MR) User Sequence Mode: The sequence respects what is defined in ADC_SEQR1 and ADC_SEQR2 registers and can be used to convert several times the same channel. */\r
+/* -------- ADC_SEQR1 : (ADC Offset: 0x08) Channel Sequence Register 1 -------- */\r
+#define ADC_SEQR1_USCH1_Pos 0\r
+#define ADC_SEQR1_USCH1_Msk (0xfu << ADC_SEQR1_USCH1_Pos) /**< \brief (ADC_SEQR1) User Sequence Number 1 */\r
+#define ADC_SEQR1_USCH1(value) ((ADC_SEQR1_USCH1_Msk & ((value) << ADC_SEQR1_USCH1_Pos)))\r
+#define ADC_SEQR1_USCH2_Pos 4\r
+#define ADC_SEQR1_USCH2_Msk (0xfu << ADC_SEQR1_USCH2_Pos) /**< \brief (ADC_SEQR1) User Sequence Number 2 */\r
+#define ADC_SEQR1_USCH2(value) ((ADC_SEQR1_USCH2_Msk & ((value) << ADC_SEQR1_USCH2_Pos)))\r
+#define ADC_SEQR1_USCH3_Pos 8\r
+#define ADC_SEQR1_USCH3_Msk (0xfu << ADC_SEQR1_USCH3_Pos) /**< \brief (ADC_SEQR1) User Sequence Number 3 */\r
+#define ADC_SEQR1_USCH3(value) ((ADC_SEQR1_USCH3_Msk & ((value) << ADC_SEQR1_USCH3_Pos)))\r
+#define ADC_SEQR1_USCH4_Pos 12\r
+#define ADC_SEQR1_USCH4_Msk (0xfu << ADC_SEQR1_USCH4_Pos) /**< \brief (ADC_SEQR1) User Sequence Number 4 */\r
+#define ADC_SEQR1_USCH4(value) ((ADC_SEQR1_USCH4_Msk & ((value) << ADC_SEQR1_USCH4_Pos)))\r
+/* -------- ADC_CHER : (ADC Offset: 0x10) Channel Enable Register -------- */\r
+#define ADC_CHER_CH0 (0x1u << 0) /**< \brief (ADC_CHER) Channel 0 Enable */\r
+#define ADC_CHER_CH1 (0x1u << 1) /**< \brief (ADC_CHER) Channel 1 Enable */\r
+#define ADC_CHER_CH2 (0x1u << 2) /**< \brief (ADC_CHER) Channel 2 Enable */\r
+#define ADC_CHER_CH3 (0x1u << 3) /**< \brief (ADC_CHER) Channel 3 Enable */\r
+#define ADC_CHER_CH4 (0x1u << 4) /**< \brief (ADC_CHER) Channel 4 Enable */\r
+/* -------- ADC_CHDR : (ADC Offset: 0x14) Channel Disable Register -------- */\r
+#define ADC_CHDR_CH0 (0x1u << 0) /**< \brief (ADC_CHDR) Channel 0 Disable */\r
+#define ADC_CHDR_CH1 (0x1u << 1) /**< \brief (ADC_CHDR) Channel 1 Disable */\r
+#define ADC_CHDR_CH2 (0x1u << 2) /**< \brief (ADC_CHDR) Channel 2 Disable */\r
+#define ADC_CHDR_CH3 (0x1u << 3) /**< \brief (ADC_CHDR) Channel 3 Disable */\r
+#define ADC_CHDR_CH4 (0x1u << 4) /**< \brief (ADC_CHDR) Channel 4 Disable */\r
+/* -------- ADC_CHSR : (ADC Offset: 0x18) Channel Status Register -------- */\r
+#define ADC_CHSR_CH0 (0x1u << 0) /**< \brief (ADC_CHSR) Channel 0 Status */\r
+#define ADC_CHSR_CH1 (0x1u << 1) /**< \brief (ADC_CHSR) Channel 1 Status */\r
+#define ADC_CHSR_CH2 (0x1u << 2) /**< \brief (ADC_CHSR) Channel 2 Status */\r
+#define ADC_CHSR_CH3 (0x1u << 3) /**< \brief (ADC_CHSR) Channel 3 Status */\r
+#define ADC_CHSR_CH4 (0x1u << 4) /**< \brief (ADC_CHSR) Channel 4 Status */\r
+/* -------- ADC_LCDR : (ADC Offset: 0x20) Last Converted Data Register -------- */\r
+#define ADC_LCDR_LDATA_Pos 0\r
+#define ADC_LCDR_LDATA_Msk (0x3ffu << ADC_LCDR_LDATA_Pos) /**< \brief (ADC_LCDR) Last Data Converted */\r
+#define ADC_LCDR_CHNB_Pos 12\r
+#define ADC_LCDR_CHNB_Msk (0xfu << ADC_LCDR_CHNB_Pos) /**< \brief (ADC_LCDR) Channel Number */\r
+/* -------- ADC_IER : (ADC Offset: 0x24) Interrupt Enable Register -------- */\r
+#define ADC_IER_EOC0 (0x1u << 0) /**< \brief (ADC_IER) End of Conversion Interrupt Enable 0 */\r
+#define ADC_IER_EOC1 (0x1u << 1) /**< \brief (ADC_IER) End of Conversion Interrupt Enable 1 */\r
+#define ADC_IER_EOC2 (0x1u << 2) /**< \brief (ADC_IER) End of Conversion Interrupt Enable 2 */\r
+#define ADC_IER_EOC3 (0x1u << 3) /**< \brief (ADC_IER) End of Conversion Interrupt Enable 3 */\r
+#define ADC_IER_EOC4 (0x1u << 4) /**< \brief (ADC_IER) End of Conversion Interrupt Enable 4 */\r
+#define ADC_IER_XRDY (0x1u << 20) /**< \brief (ADC_IER) Touchscreen Measure XPOS Ready Interrupt Enable */\r
+#define ADC_IER_YRDY (0x1u << 21) /**< \brief (ADC_IER) Touchscreen Measure YPOS Ready Interrupt Enable */\r
+#define ADC_IER_PRDY (0x1u << 22) /**< \brief (ADC_IER) Touchscreen Measure Pressure Ready Interrupt Enable */\r
+#define ADC_IER_DRDY (0x1u << 24) /**< \brief (ADC_IER) Data Ready Interrupt Enable */\r
+#define ADC_IER_GOVRE (0x1u << 25) /**< \brief (ADC_IER) General Overrun Error Interrupt Enable */\r
+#define ADC_IER_COMPE (0x1u << 26) /**< \brief (ADC_IER) Comparison Event Interrupt Enable */\r
+#define ADC_IER_PEN (0x1u << 29) /**< \brief (ADC_IER) Pen Contact Interrupt Enable */\r
+#define ADC_IER_NOPEN (0x1u << 30) /**< \brief (ADC_IER) No Pen Contact Interrupt Enable */\r
+/* -------- ADC_IDR : (ADC Offset: 0x28) Interrupt Disable Register -------- */\r
+#define ADC_IDR_EOC0 (0x1u << 0) /**< \brief (ADC_IDR) End of Conversion Interrupt Disable 0 */\r
+#define ADC_IDR_EOC1 (0x1u << 1) /**< \brief (ADC_IDR) End of Conversion Interrupt Disable 1 */\r
+#define ADC_IDR_EOC2 (0x1u << 2) /**< \brief (ADC_IDR) End of Conversion Interrupt Disable 2 */\r
+#define ADC_IDR_EOC3 (0x1u << 3) /**< \brief (ADC_IDR) End of Conversion Interrupt Disable 3 */\r
+#define ADC_IDR_EOC4 (0x1u << 4) /**< \brief (ADC_IDR) End of Conversion Interrupt Disable 4 */\r
+#define ADC_IDR_XRDY (0x1u << 20) /**< \brief (ADC_IDR) Touchscreen Measure XPOS Ready Interrupt Disable */\r
+#define ADC_IDR_YRDY (0x1u << 21) /**< \brief (ADC_IDR) Touchscreen Measure YPOS Ready Interrupt Disable */\r
+#define ADC_IDR_PRDY (0x1u << 22) /**< \brief (ADC_IDR) Touchscreen Measure Pressure Ready Interrupt Disable */\r
+#define ADC_IDR_DRDY (0x1u << 24) /**< \brief (ADC_IDR) Data Ready Interrupt Disable */\r
+#define ADC_IDR_GOVRE (0x1u << 25) /**< \brief (ADC_IDR) General Overrun Error Interrupt Disable */\r
+#define ADC_IDR_COMPE (0x1u << 26) /**< \brief (ADC_IDR) Comparison Event Interrupt Disable */\r
+#define ADC_IDR_PEN (0x1u << 29) /**< \brief (ADC_IDR) Pen Contact Interrupt Disable */\r
+#define ADC_IDR_NOPEN (0x1u << 30) /**< \brief (ADC_IDR) No Pen Contact Interrupt Disable */\r
+/* -------- ADC_IMR : (ADC Offset: 0x2C) Interrupt Mask Register -------- */\r
+#define ADC_IMR_EOC0 (0x1u << 0) /**< \brief (ADC_IMR) End of Conversion Interrupt Mask 0 */\r
+#define ADC_IMR_EOC1 (0x1u << 1) /**< \brief (ADC_IMR) End of Conversion Interrupt Mask 1 */\r
+#define ADC_IMR_EOC2 (0x1u << 2) /**< \brief (ADC_IMR) End of Conversion Interrupt Mask 2 */\r
+#define ADC_IMR_EOC3 (0x1u << 3) /**< \brief (ADC_IMR) End of Conversion Interrupt Mask 3 */\r
+#define ADC_IMR_EOC4 (0x1u << 4) /**< \brief (ADC_IMR) End of Conversion Interrupt Mask 4 */\r
+#define ADC_IMR_XRDY (0x1u << 20) /**< \brief (ADC_IMR) Touchscreen Measure XPOS Ready Interrupt Mask */\r
+#define ADC_IMR_YRDY (0x1u << 21) /**< \brief (ADC_IMR) Touchscreen Measure YPOS Ready Interrupt Mask */\r
+#define ADC_IMR_PRDY (0x1u << 22) /**< \brief (ADC_IMR) Touchscreen Measure Pressure Ready Interrupt Mask */\r
+#define ADC_IMR_DRDY (0x1u << 24) /**< \brief (ADC_IMR) Data Ready Interrupt Mask */\r
+#define ADC_IMR_GOVRE (0x1u << 25) /**< \brief (ADC_IMR) General Overrun Error Interrupt Mask */\r
+#define ADC_IMR_COMPE (0x1u << 26) /**< \brief (ADC_IMR) Comparison Event Interrupt Mask */\r
+#define ADC_IMR_PEN (0x1u << 29) /**< \brief (ADC_IMR) Pen Contact Interrupt Mask */\r
+#define ADC_IMR_NOPEN (0x1u << 30) /**< \brief (ADC_IMR) No Pen Contact Interrupt Mask */\r
+/* -------- ADC_ISR : (ADC Offset: 0x30) Interrupt Status Register -------- */\r
+#define ADC_ISR_EOC0 (0x1u << 0) /**< \brief (ADC_ISR) End of Conversion 0 */\r
+#define ADC_ISR_EOC1 (0x1u << 1) /**< \brief (ADC_ISR) End of Conversion 1 */\r
+#define ADC_ISR_EOC2 (0x1u << 2) /**< \brief (ADC_ISR) End of Conversion 2 */\r
+#define ADC_ISR_EOC3 (0x1u << 3) /**< \brief (ADC_ISR) End of Conversion 3 */\r
+#define ADC_ISR_EOC4 (0x1u << 4) /**< \brief (ADC_ISR) End of Conversion 4 */\r
+#define ADC_ISR_XRDY (0x1u << 20) /**< \brief (ADC_ISR) Touchscreen XPOS Measure Ready */\r
+#define ADC_ISR_YRDY (0x1u << 21) /**< \brief (ADC_ISR) Touchscreen YPOS Measure Ready */\r
+#define ADC_ISR_PRDY (0x1u << 22) /**< \brief (ADC_ISR) Touchscreen Pressure Measure Ready */\r
+#define ADC_ISR_DRDY (0x1u << 24) /**< \brief (ADC_ISR) Data Ready */\r
+#define ADC_ISR_GOVRE (0x1u << 25) /**< \brief (ADC_ISR) General Overrun Error */\r
+#define ADC_ISR_COMPE (0x1u << 26) /**< \brief (ADC_ISR) Comparison Error */\r
+#define ADC_ISR_PEN (0x1u << 29) /**< \brief (ADC_ISR) Pen contact */\r
+#define ADC_ISR_NOPEN (0x1u << 30) /**< \brief (ADC_ISR) No Pen contact */\r
+#define ADC_ISR_PENS (0x1u << 31) /**< \brief (ADC_ISR) Pen detect Status */\r
+/* -------- ADC_OVER : (ADC Offset: 0x3C) Overrun Status Register -------- */\r
+#define ADC_OVER_OVRE0 (0x1u << 0) /**< \brief (ADC_OVER) Overrun Error 0 */\r
+#define ADC_OVER_OVRE1 (0x1u << 1) /**< \brief (ADC_OVER) Overrun Error 1 */\r
+#define ADC_OVER_OVRE2 (0x1u << 2) /**< \brief (ADC_OVER) Overrun Error 2 */\r
+#define ADC_OVER_OVRE3 (0x1u << 3) /**< \brief (ADC_OVER) Overrun Error 3 */\r
+#define ADC_OVER_OVRE4 (0x1u << 4) /**< \brief (ADC_OVER) Overrun Error 4 */\r
+/* -------- ADC_EMR : (ADC Offset: 0x40) Extended Mode Register -------- */\r
+#define ADC_EMR_CMPMODE_Pos 0\r
+#define ADC_EMR_CMPMODE_Msk (0x3u << ADC_EMR_CMPMODE_Pos) /**< \brief (ADC_EMR) Comparison Mode */\r
+#define   ADC_EMR_CMPMODE_LOW (0x0u << 0) /**< \brief (ADC_EMR) Generates an event when the converted data is lower than the low threshold of the window. */\r
+#define   ADC_EMR_CMPMODE_HIGH (0x1u << 0) /**< \brief (ADC_EMR) Generates an event when the converted data is higher than the high threshold of the window. */\r
+#define   ADC_EMR_CMPMODE_IN (0x2u << 0) /**< \brief (ADC_EMR) Generates an event when the converted data is in the comparison window. */\r
+#define   ADC_EMR_CMPMODE_OUT (0x3u << 0) /**< \brief (ADC_EMR) Generates an event when the converted data is out of the comparison window. */\r
+#define ADC_EMR_CMPSEL_Pos 4\r
+#define ADC_EMR_CMPSEL_Msk (0xfu << ADC_EMR_CMPSEL_Pos) /**< \brief (ADC_EMR) Comparison Selected Channel */\r
+#define ADC_EMR_CMPSEL(value) ((ADC_EMR_CMPSEL_Msk & ((value) << ADC_EMR_CMPSEL_Pos)))\r
+#define ADC_EMR_CMPALL (0x1u << 9) /**< \brief (ADC_EMR) Compare All Channels */\r
+#define ADC_EMR_CMPFILTER_Pos 12\r
+#define ADC_EMR_CMPFILTER_Msk (0x3u << ADC_EMR_CMPFILTER_Pos) /**< \brief (ADC_EMR) Compare Event Filtering */\r
+#define ADC_EMR_CMPFILTER(value) ((ADC_EMR_CMPFILTER_Msk & ((value) << ADC_EMR_CMPFILTER_Pos)))\r
+#define ADC_EMR_OSR_Pos 16\r
+#define ADC_EMR_OSR_Msk (0x3u << ADC_EMR_OSR_Pos) /**< \brief (ADC_EMR) Over Sampling Rate */\r
+#define   ADC_EMR_OSR_NO_AVERAGE (0x0u << 16) /**< \brief (ADC_EMR) no averaging. ADC sample rate is maximum. */\r
+#define   ADC_EMR_OSR_OSR4 (0x1u << 16) /**< \brief (ADC_EMR) 1-bit enhanced resolution by interpolation. ADC sample rate divided by 4. */\r
+#define   ADC_EMR_OSR_OSR16 (0x2u << 16) /**< \brief (ADC_EMR) 2-bit enhanced resolution by interpolation. ADC sample rate divided by 16. */\r
+#define ADC_EMR_ASTE (0x1u << 20) /**< \brief (ADC_EMR) Averaging on Single Trigger Event */\r
+#define   ADC_EMR_ASTE_MULTI_TRIG_AVERAGE (0x0u << 20) /**< \brief (ADC_EMR) The average requests several trigger events. */\r
+#define   ADC_EMR_ASTE_SINGLE_TRIG_AVERAGE (0x1u << 20) /**< \brief (ADC_EMR) The average requests only one trigger event. */\r
+#define ADC_EMR_TAG (0x1u << 24) /**< \brief (ADC_EMR) TAG of the ADC_LDCR register */\r
+/* -------- ADC_CWR : (ADC Offset: 0x44) Compare Window Register -------- */\r
+#define ADC_CWR_LOWTHRES_Pos 0\r
+#define ADC_CWR_LOWTHRES_Msk (0xfffu << ADC_CWR_LOWTHRES_Pos) /**< \brief (ADC_CWR) Low Threshold */\r
+#define ADC_CWR_LOWTHRES(value) ((ADC_CWR_LOWTHRES_Msk & ((value) << ADC_CWR_LOWTHRES_Pos)))\r
+#define ADC_CWR_HIGHTHRES_Pos 16\r
+#define ADC_CWR_HIGHTHRES_Msk (0xfffu << ADC_CWR_HIGHTHRES_Pos) /**< \brief (ADC_CWR) High Threshold */\r
+#define ADC_CWR_HIGHTHRES(value) ((ADC_CWR_HIGHTHRES_Msk & ((value) << ADC_CWR_HIGHTHRES_Pos)))\r
+/* -------- ADC_CDR[5] : (ADC Offset: 0x50) Channel Data Register -------- */\r
+#define ADC_CDR_DATA_Pos 0\r
+#define ADC_CDR_DATA_Msk (0xfffu << ADC_CDR_DATA_Pos) /**< \brief (ADC_CDR[5]) Converted Data */\r
+/* -------- ADC_ACR : (ADC Offset: 0x94) Analog Control Register -------- */\r
+#define ADC_ACR_PENDETSENS_Pos 0\r
+#define ADC_ACR_PENDETSENS_Msk (0x3u << ADC_ACR_PENDETSENS_Pos) /**< \brief (ADC_ACR) Pen Detection Sensitivity */\r
+#define ADC_ACR_PENDETSENS(value) ((ADC_ACR_PENDETSENS_Msk & ((value) << ADC_ACR_PENDETSENS_Pos)))\r
+/* -------- ADC_TSMR : (ADC Offset: 0xB0) Touchscreen Mode Register -------- */\r
+#define ADC_TSMR_TSMODE_Pos 0\r
+#define ADC_TSMR_TSMODE_Msk (0x3u << ADC_TSMR_TSMODE_Pos) /**< \brief (ADC_TSMR) Touchscreen Mode */\r
+#define   ADC_TSMR_TSMODE_NONE (0x0u << 0) /**< \brief (ADC_TSMR) No Touchscreen */\r
+#define   ADC_TSMR_TSMODE_4_WIRE_NO_PM (0x1u << 0) /**< \brief (ADC_TSMR) 4-wire Touchscreen without pressure measurement */\r
+#define   ADC_TSMR_TSMODE_4_WIRE (0x2u << 0) /**< \brief (ADC_TSMR) 4-wire Touchscreen with pressure measurement */\r
+#define   ADC_TSMR_TSMODE_5_WIRE (0x3u << 0) /**< \brief (ADC_TSMR) 5-wire Touchscreen */\r
+#define ADC_TSMR_TSAV_Pos 4\r
+#define ADC_TSMR_TSAV_Msk (0x3u << ADC_TSMR_TSAV_Pos) /**< \brief (ADC_TSMR) Touchscreen Average */\r
+#define   ADC_TSMR_TSAV_NO_FILTER (0x0u << 4) /**< \brief (ADC_TSMR) No Filtering. Only one ADC conversion per measure */\r
+#define   ADC_TSMR_TSAV_AVG2CONV (0x1u << 4) /**< \brief (ADC_TSMR) Averages 2 ADC conversions */\r
+#define   ADC_TSMR_TSAV_AVG4CONV (0x2u << 4) /**< \brief (ADC_TSMR) Averages 4 ADC conversions */\r
+#define   ADC_TSMR_TSAV_AVG8CONV (0x3u << 4) /**< \brief (ADC_TSMR) Averages 8 ADC conversions */\r
+#define ADC_TSMR_TSFREQ_Pos 8\r
+#define ADC_TSMR_TSFREQ_Msk (0xfu << ADC_TSMR_TSFREQ_Pos) /**< \brief (ADC_TSMR) Touchscreen Frequency */\r
+#define ADC_TSMR_TSFREQ(value) ((ADC_TSMR_TSFREQ_Msk & ((value) << ADC_TSMR_TSFREQ_Pos)))\r
+#define ADC_TSMR_TSSCTIM_Pos 16\r
+#define ADC_TSMR_TSSCTIM_Msk (0xfu << ADC_TSMR_TSSCTIM_Pos) /**< \brief (ADC_TSMR) Touchscreen Switches Closure Time */\r
+#define ADC_TSMR_TSSCTIM(value) ((ADC_TSMR_TSSCTIM_Msk & ((value) << ADC_TSMR_TSSCTIM_Pos)))\r
+#define ADC_TSMR_NOTSDMA (0x1u << 22) /**< \brief (ADC_TSMR) No TouchScreen DMA */\r
+#define ADC_TSMR_PENDET (0x1u << 24) /**< \brief (ADC_TSMR) Pen Contact Detection Enable */\r
+#define ADC_TSMR_PENDBC_Pos 28\r
+#define ADC_TSMR_PENDBC_Msk (0xfu << ADC_TSMR_PENDBC_Pos) /**< \brief (ADC_TSMR) Pen Detect Debouncing Period */\r
+#define ADC_TSMR_PENDBC(value) ((ADC_TSMR_PENDBC_Msk & ((value) << ADC_TSMR_PENDBC_Pos)))\r
+/* -------- ADC_XPOSR : (ADC Offset: 0xB4) Touchscreen X Position Register -------- */\r
+#define ADC_XPOSR_XPOS_Pos 0\r
+#define ADC_XPOSR_XPOS_Msk (0x3ffu << ADC_XPOSR_XPOS_Pos) /**< \brief (ADC_XPOSR) X Position */\r
+#define ADC_XPOSR_XSCALE_Pos 16\r
+#define ADC_XPOSR_XSCALE_Msk (0x3ffu << ADC_XPOSR_XSCALE_Pos) /**< \brief (ADC_XPOSR) Scale of XPOS */\r
+/* -------- ADC_YPOSR : (ADC Offset: 0xB8) Touchscreen Y Position Register -------- */\r
+#define ADC_YPOSR_YPOS_Pos 0\r
+#define ADC_YPOSR_YPOS_Msk (0x3ffu << ADC_YPOSR_YPOS_Pos) /**< \brief (ADC_YPOSR) Y Position */\r
+#define ADC_YPOSR_YSCALE_Pos 16\r
+#define ADC_YPOSR_YSCALE_Msk (0x3ffu << ADC_YPOSR_YSCALE_Pos) /**< \brief (ADC_YPOSR) Scale of YPOS */\r
+/* -------- ADC_PRESSR : (ADC Offset: 0xBC) Touchscreen Pressure Register -------- */\r
+#define ADC_PRESSR_Z1_Pos 0\r
+#define ADC_PRESSR_Z1_Msk (0x3ffu << ADC_PRESSR_Z1_Pos) /**< \brief (ADC_PRESSR) Data of Z1 Measurement */\r
+#define ADC_PRESSR_Z2_Pos 16\r
+#define ADC_PRESSR_Z2_Msk (0x3ffu << ADC_PRESSR_Z2_Pos) /**< \brief (ADC_PRESSR) Data of Z2 Measurement */\r
+/* -------- ADC_TRGR : (ADC Offset: 0xC0) Trigger Register -------- */\r
+#define ADC_TRGR_TRGMOD_Pos 0\r
+#define ADC_TRGR_TRGMOD_Msk (0x7u << ADC_TRGR_TRGMOD_Pos) /**< \brief (ADC_TRGR) Trigger Mode */\r
+#define   ADC_TRGR_TRGMOD_NO_TRIGGER (0x0u << 0) /**< \brief (ADC_TRGR) No trigger, only software trigger can start conversions */\r
+#define   ADC_TRGR_TRGMOD_EXT_TRIG_RISE (0x1u << 0) /**< \brief (ADC_TRGR) External Trigger Rising Edge */\r
+#define   ADC_TRGR_TRGMOD_EXT_TRIG_FALL (0x2u << 0) /**< \brief (ADC_TRGR) External Trigger Falling Edge */\r
+#define   ADC_TRGR_TRGMOD_EXT_TRIG_ANY (0x3u << 0) /**< \brief (ADC_TRGR) External Trigger Any Edge */\r
+#define   ADC_TRGR_TRGMOD_PEN_TRIG (0x4u << 0) /**< \brief (ADC_TRGR) Pen Detect Trigger (shall be selected only if PENDET is set and TSAMOD = Touchscreen only mode) */\r
+#define   ADC_TRGR_TRGMOD_PERIOD_TRIG (0x5u << 0) /**< \brief (ADC_TRGR) Periodic Trigger (TRGPER shall be initiated appropriately) */\r
+#define   ADC_TRGR_TRGMOD_CONTINUOUS (0x6u << 0) /**< \brief (ADC_TRGR) Continuous Mode */\r
+#define ADC_TRGR_TRGPER_Pos 16\r
+#define ADC_TRGR_TRGPER_Msk (0xffffu << ADC_TRGR_TRGPER_Pos) /**< \brief (ADC_TRGR) Trigger Period */\r
+#define ADC_TRGR_TRGPER(value) ((ADC_TRGR_TRGPER_Msk & ((value) << ADC_TRGR_TRGPER_Pos)))\r
+/* -------- ADC_WPMR : (ADC Offset: 0xE4) Write Protect Mode Register -------- */\r
+#define ADC_WPMR_WPEN (0x1u << 0) /**< \brief (ADC_WPMR) Write Protect Enable */\r
+#define ADC_WPMR_WPKEY_Pos 8\r
+#define ADC_WPMR_WPKEY_Msk (0xffffffu << ADC_WPMR_WPKEY_Pos) /**< \brief (ADC_WPMR) Write Protect KEY */\r
+#define ADC_WPMR_WPKEY(value) ((ADC_WPMR_WPKEY_Msk & ((value) << ADC_WPMR_WPKEY_Pos)))\r
+/* -------- ADC_WPSR : (ADC Offset: 0xE8) Write Protect Status Register -------- */\r
+#define ADC_WPSR_WPVS (0x1u << 0) /**< \brief (ADC_WPSR) Write Protect Violation Status */\r
+#define ADC_WPSR_WPVSRC_Pos 8\r
+#define ADC_WPSR_WPVSRC_Msk (0xffffu << ADC_WPSR_WPVSRC_Pos) /**< \brief (ADC_WPSR) Write Protect Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Advanced Encryption Standard */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_AES Advanced Encryption Standard */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Aes hardware registers */\r
+typedef struct {\r
+  __O  uint32_t AES_CR;        /**< \brief (Aes Offset: 0x00) Control Register */\r
+  __IO uint32_t AES_MR;        /**< \brief (Aes Offset: 0x04) Mode Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __O  uint32_t AES_IER;       /**< \brief (Aes Offset: 0x10) Interrupt Enable Register */\r
+  __O  uint32_t AES_IDR;       /**< \brief (Aes Offset: 0x14) Interrupt Disable Register */\r
+  __I  uint32_t AES_IMR;       /**< \brief (Aes Offset: 0x18) Interrupt Mask Register */\r
+  __I  uint32_t AES_ISR;       /**< \brief (Aes Offset: 0x1C) Interrupt Status Register */\r
+  __O  uint32_t AES_KEYWR[8];  /**< \brief (Aes Offset: 0x20) Key Word Register */\r
+  __O  uint32_t AES_IDATAR[4]; /**< \brief (Aes Offset: 0x40) Input Data Register */\r
+  __I  uint32_t AES_ODATAR[4]; /**< \brief (Aes Offset: 0x50) Output Data Register */\r
+  __O  uint32_t AES_IVR[4];    /**< \brief (Aes Offset: 0x60) Initialization Vector Register */\r
+  __IO uint32_t AES_AADLENR;   /**< \brief (Aes Offset: 0x70) Additional Authenticated Data Length Register */\r
+  __IO uint32_t AES_CLENR;     /**< \brief (Aes Offset: 0x74) Plaintext/Ciphertext Length Register */\r
+  __IO uint32_t AES_GHASHR[4]; /**< \brief (Aes Offset: 0x78) GCM Intermediate Hash Word Register */\r
+  __I  uint32_t AES_TAGR[4];   /**< \brief (Aes Offset: 0x88) GCM Authentication Tag Word Register */\r
+  __I  uint32_t AES_CTRR;      /**< \brief (Aes Offset: 0x98) GCM Encryption Counter Value Register */\r
+  __IO uint32_t AES_GCMHR[4];  /**< \brief (Aes Offset: 0x9C) GCM H World Register */\r
+} Aes;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- AES_CR : (AES Offset: 0x00) Control Register -------- */\r
+#define AES_CR_START (0x1u << 0) /**< \brief (AES_CR) Start Processing */\r
+#define AES_CR_SWRST (0x1u << 8) /**< \brief (AES_CR) Software Reset */\r
+#define AES_CR_LOADSEED (0x1u << 16) /**< \brief (AES_CR) Random Number Generator Seed Loading */\r
+/* -------- AES_MR : (AES Offset: 0x04) Mode Register -------- */\r
+#define AES_MR_CIPHER (0x1u << 0) /**< \brief (AES_MR) Processing Mode */\r
+#define AES_MR_GTAGEN (0x1u << 1) /**< \brief (AES_MR) GCM Automatic Tag Generation Enable */\r
+#define AES_MR_DUALBUFF (0x1u << 3) /**< \brief (AES_MR) Dual Input BUFFer */\r
+#define   AES_MR_DUALBUFF_INACTIVE (0x0u << 3) /**< \brief (AES_MR) AES_IDATARx cannot be written during processing of previous block. */\r
+#define   AES_MR_DUALBUFF_ACTIVE (0x1u << 3) /**< \brief (AES_MR) AES_IDATARx can be written during processing of previous block when SMOD = 0x2. It speeds up the overall runtime of large files. */\r
+#define AES_MR_PROCDLY_Pos 4\r
+#define AES_MR_PROCDLY_Msk (0xfu << AES_MR_PROCDLY_Pos) /**< \brief (AES_MR) Processing Delay */\r
+#define AES_MR_PROCDLY(value) ((AES_MR_PROCDLY_Msk & ((value) << AES_MR_PROCDLY_Pos)))\r
+#define AES_MR_SMOD_Pos 8\r
+#define AES_MR_SMOD_Msk (0x3u << AES_MR_SMOD_Pos) /**< \brief (AES_MR) Start Mode */\r
+#define   AES_MR_SMOD_MANUAL_START (0x0u << 8) /**< \brief (AES_MR) Manual Mode */\r
+#define   AES_MR_SMOD_AUTO_START (0x1u << 8) /**< \brief (AES_MR) Auto Mode */\r
+#define   AES_MR_SMOD_IDATAR0_START (0x2u << 8) /**< \brief (AES_MR) AES_IDATAR0 access only Auto Mode */\r
+#define AES_MR_KEYSIZE_Pos 10\r
+#define AES_MR_KEYSIZE_Msk (0x3u << AES_MR_KEYSIZE_Pos) /**< \brief (AES_MR) Key Size */\r
+#define   AES_MR_KEYSIZE_AES128 (0x0u << 10) /**< \brief (AES_MR) AES Key Size is 128 bits */\r
+#define   AES_MR_KEYSIZE_AES192 (0x1u << 10) /**< \brief (AES_MR) AES Key Size is 192 bits */\r
+#define   AES_MR_KEYSIZE_AES256 (0x2u << 10) /**< \brief (AES_MR) AES Key Size is 256 bits */\r
+#define AES_MR_OPMOD_Pos 12\r
+#define AES_MR_OPMOD_Msk (0x7u << AES_MR_OPMOD_Pos) /**< \brief (AES_MR) Operation Mode */\r
+#define   AES_MR_OPMOD_ECB (0x0u << 12) /**< \brief (AES_MR) ECB: Electronic Code Book mode */\r
+#define   AES_MR_OPMOD_CBC (0x1u << 12) /**< \brief (AES_MR) CBC: Cipher Block Chaining mode */\r
+#define   AES_MR_OPMOD_OFB (0x2u << 12) /**< \brief (AES_MR) OFB: Output Feedback mode */\r
+#define   AES_MR_OPMOD_CFB (0x3u << 12) /**< \brief (AES_MR) CFB: Cipher Feedback mode */\r
+#define   AES_MR_OPMOD_CTR (0x4u << 12) /**< \brief (AES_MR) CTR: Counter mode (16-bit internal counter) */\r
+#define   AES_MR_OPMOD_GCM (0x5u << 12) /**< \brief (AES_MR) GCM: Galois Counter mode */\r
+#define AES_MR_LOD (0x1u << 15) /**< \brief (AES_MR) Last Output Data Mode */\r
+#define AES_MR_CFBS_Pos 16\r
+#define AES_MR_CFBS_Msk (0x7u << AES_MR_CFBS_Pos) /**< \brief (AES_MR) Cipher Feedback Data Size */\r
+#define   AES_MR_CFBS_SIZE_128BIT (0x0u << 16) /**< \brief (AES_MR) 128-bit */\r
+#define   AES_MR_CFBS_SIZE_64BIT (0x1u << 16) /**< \brief (AES_MR) 64-bit */\r
+#define   AES_MR_CFBS_SIZE_32BIT (0x2u << 16) /**< \brief (AES_MR) 32-bit */\r
+#define   AES_MR_CFBS_SIZE_16BIT (0x3u << 16) /**< \brief (AES_MR) 16-bit */\r
+#define   AES_MR_CFBS_SIZE_8BIT (0x4u << 16) /**< \brief (AES_MR) 8-bit */\r
+#define AES_MR_CKEY_Pos 20\r
+#define AES_MR_CKEY_Msk (0xfu << AES_MR_CKEY_Pos) /**< \brief (AES_MR) Countermeasure Key */\r
+#define   AES_MR_CKEY_PASSWD (0xEu << 20) /**< \brief (AES_MR) This field must be written with 0xE to allow CMTYPx fields change. Any other values will abort the write operation in CMTYPx fields.Always reads as 0. */\r
+#define AES_MR_CMTYP1 (0x1u << 24) /**< \brief (AES_MR) Countermeasure Type 1 */\r
+#define   AES_MR_CMTYP1_NOPROT_EXTKEY (0x0u << 24) /**< \brief (AES_MR) Countermeasure type 1 is disabled */\r
+#define   AES_MR_CMTYP1_PROT_EXTKEY (0x1u << 24) /**< \brief (AES_MR) Countermeasure type 1 is enabled */\r
+#define AES_MR_CMTYP2 (0x1u << 25) /**< \brief (AES_MR) Countermeasure Type 2 */\r
+#define   AES_MR_CMTYP2_NO_PAUSE (0x0u << 25) /**< \brief (AES_MR) Countermeasure type 2 is disabled */\r
+#define   AES_MR_CMTYP2_PAUSE (0x1u << 25) /**< \brief (AES_MR) Countermeasure type 2 is enabled */\r
+#define AES_MR_CMTYP3 (0x1u << 26) /**< \brief (AES_MR) Countermeasure Type 3 */\r
+#define   AES_MR_CMTYP3_NO_DUMMY (0x0u << 26) /**< \brief (AES_MR) Countermeasure type 3 is disabled */\r
+#define   AES_MR_CMTYP3_DUMMY (0x1u << 26) /**< \brief (AES_MR) Countermeasure type 3 is enabled */\r
+#define AES_MR_CMTYP4 (0x1u << 27) /**< \brief (AES_MR) Countermeasure Type 4 */\r
+#define   AES_MR_CMTYP4_NO_RESTART (0x0u << 27) /**< \brief (AES_MR) Countermeasure type 4 is disabled */\r
+#define   AES_MR_CMTYP4_RESTART (0x1u << 27) /**< \brief (AES_MR) Countermeasure type 4 is enabled */\r
+#define AES_MR_CMTYP5 (0x1u << 28) /**< \brief (AES_MR) Countermeasure Type 5 */\r
+#define   AES_MR_CMTYP5_NO_ADDACCESS (0x0u << 28) /**< \brief (AES_MR) Countermeasure type 5 is disabled */\r
+#define   AES_MR_CMTYP5_ADDACCESS (0x1u << 28) /**< \brief (AES_MR) Countermeasure type 5 is enabled */\r
+#define AES_MR_CMTYP6 (0x1u << 29) /**< \brief (AES_MR) CounterMeasure Type 6 */\r
+#define   AES_MR_CMTYP6_NO_IDLECURRENT (0x0u << 29) /**< \brief (AES_MR) Countermeasure type 6 is disabled */\r
+#define   AES_MR_CMTYP6_IDLECURRENT (0x1u << 29) /**< \brief (AES_MR) Countermeasure type 6 is enabled */\r
+/* -------- AES_IER : (AES Offset: 0x10) Interrupt Enable Register -------- */\r
+#define AES_IER_DATRDY (0x1u << 0) /**< \brief (AES_IER) Data Ready Interrupt Enable */\r
+#define AES_IER_URAD (0x1u << 8) /**< \brief (AES_IER) Unspecified Register Access Detection Interrupt Enable */\r
+/* -------- AES_IDR : (AES Offset: 0x14) Interrupt Disable Register -------- */\r
+#define AES_IDR_DATRDY (0x1u << 0) /**< \brief (AES_IDR) Data Ready Interrupt Disable */\r
+#define AES_IDR_URAD (0x1u << 8) /**< \brief (AES_IDR) Unspecified Register Access Detection Interrupt Disable */\r
+/* -------- AES_IMR : (AES Offset: 0x18) Interrupt Mask Register -------- */\r
+#define AES_IMR_DATRDY (0x1u << 0) /**< \brief (AES_IMR) Data Ready Interrupt Mask */\r
+#define AES_IMR_URAD (0x1u << 8) /**< \brief (AES_IMR) Unspecified Register Access Detection Interrupt Mask */\r
+/* -------- AES_ISR : (AES Offset: 0x1C) Interrupt Status Register -------- */\r
+#define AES_ISR_DATRDY (0x1u << 0) /**< \brief (AES_ISR) Data Ready */\r
+#define AES_ISR_URAD (0x1u << 8) /**< \brief (AES_ISR) Unspecified Register Access Detection Status */\r
+#define AES_ISR_URAT_Pos 12\r
+#define AES_ISR_URAT_Msk (0xfu << AES_ISR_URAT_Pos) /**< \brief (AES_ISR) Unspecified Register Access: */\r
+#define   AES_ISR_URAT_IDR_WR_PROCESSING (0x0u << 12) /**< \brief (AES_ISR) Input Data Register written during the data processing when SMOD=0x2 mode. */\r
+#define   AES_ISR_URAT_ODR_RD_PROCESSING (0x1u << 12) /**< \brief (AES_ISR) Output Data Register read during the data processing. */\r
+#define   AES_ISR_URAT_MR_WR_PROCESSING (0x2u << 12) /**< \brief (AES_ISR) Mode Register written during the data processing. */\r
+#define   AES_ISR_URAT_ODR_RD_SUBKGEN (0x3u << 12) /**< \brief (AES_ISR) Output Data Register read during the sub-keys generation. */\r
+#define   AES_ISR_URAT_MR_WR_SUBKGEN (0x4u << 12) /**< \brief (AES_ISR) Mode Register written during the sub-keys generation. */\r
+#define   AES_ISR_URAT_WOR_RD_ACCESS (0x5u << 12) /**< \brief (AES_ISR) Write-only register read access. */\r
+#define AES_ISR_TAGRDY (0x1u << 16) /**< \brief (AES_ISR) GCM Tag Ready */\r
+/* -------- AES_KEYWR[8] : (AES Offset: 0x20) Key Word Register -------- */\r
+#define AES_KEYWR_KEYW_Pos 0\r
+#define AES_KEYWR_KEYW_Msk (0xffffffffu << AES_KEYWR_KEYW_Pos) /**< \brief (AES_KEYWR[8]) Key Word */\r
+#define AES_KEYWR_KEYW(value) ((AES_KEYWR_KEYW_Msk & ((value) << AES_KEYWR_KEYW_Pos)))\r
+/* -------- AES_IDATAR[4] : (AES Offset: 0x40) Input Data Register -------- */\r
+#define AES_IDATAR_IDATA_Pos 0\r
+#define AES_IDATAR_IDATA_Msk (0xffffffffu << AES_IDATAR_IDATA_Pos) /**< \brief (AES_IDATAR[4]) Input Data Word */\r
+#define AES_IDATAR_IDATA(value) ((AES_IDATAR_IDATA_Msk & ((value) << AES_IDATAR_IDATA_Pos)))\r
+/* -------- AES_ODATAR[4] : (AES Offset: 0x50) Output Data Register -------- */\r
+#define AES_ODATAR_ODATA_Pos 0\r
+#define AES_ODATAR_ODATA_Msk (0xffffffffu << AES_ODATAR_ODATA_Pos) /**< \brief (AES_ODATAR[4]) Output Data */\r
+/* -------- AES_IVR[4] : (AES Offset: 0x60) Initialization Vector Register -------- */\r
+#define AES_IVR_IV_Pos 0\r
+#define AES_IVR_IV_Msk (0xffffffffu << AES_IVR_IV_Pos) /**< \brief (AES_IVR[4]) Initialization Vector */\r
+#define AES_IVR_IV(value) ((AES_IVR_IV_Msk & ((value) << AES_IVR_IV_Pos)))\r
+/* -------- AES_AADLENR : (AES Offset: 0x70) Additional Authenticated Data Length Register -------- */\r
+#define AES_AADLENR_AADLEN_Pos 0\r
+#define AES_AADLENR_AADLEN_Msk (0xffffffffu << AES_AADLENR_AADLEN_Pos) /**< \brief (AES_AADLENR) AAD Length */\r
+#define AES_AADLENR_AADLEN(value) ((AES_AADLENR_AADLEN_Msk & ((value) << AES_AADLENR_AADLEN_Pos)))\r
+/* -------- AES_CLENR : (AES Offset: 0x74) Plaintext/Ciphertext Length Register -------- */\r
+#define AES_CLENR_CLEN_Pos 0\r
+#define AES_CLENR_CLEN_Msk (0xffffffffu << AES_CLENR_CLEN_Pos) /**< \brief (AES_CLENR) Plaintext/Ciphertext Length */\r
+#define AES_CLENR_CLEN(value) ((AES_CLENR_CLEN_Msk & ((value) << AES_CLENR_CLEN_Pos)))\r
+/* -------- AES_GHASHR[4] : (AES Offset: 0x78) GCM Intermediate Hash Word Register -------- */\r
+#define AES_GHASHR_GHASH_Pos 0\r
+#define AES_GHASHR_GHASH_Msk (0xffffffffu << AES_GHASHR_GHASH_Pos) /**< \brief (AES_GHASHR[4]) Intermediate GCM Hash Word x */\r
+#define AES_GHASHR_GHASH(value) ((AES_GHASHR_GHASH_Msk & ((value) << AES_GHASHR_GHASH_Pos)))\r
+/* -------- AES_TAGR[4] : (AES Offset: 0x88) GCM Authentication Tag Word Register -------- */\r
+#define AES_TAGR_TAG_Pos 0\r
+#define AES_TAGR_TAG_Msk (0xffffffffu << AES_TAGR_TAG_Pos) /**< \brief (AES_TAGR[4]) GCM Authentication Tag x */\r
+/* -------- AES_CTRR : (AES Offset: 0x98) GCM Encryption Counter Value Register -------- */\r
+#define AES_CTRR_CTR_Pos 0\r
+#define AES_CTRR_CTR_Msk (0xffffffffu << AES_CTRR_CTR_Pos) /**< \brief (AES_CTRR) GCM Encryption Counter */\r
+/* -------- AES_GCMHR[4] : (AES Offset: 0x9C) GCM H World Register -------- */\r
+#define AES_GCMHR_H_Pos 0\r
+#define AES_GCMHR_H_Msk (0xffffffffu << AES_GCMHR_H_Pos) /**< \brief (AES_GCMHR[4]) GCM H word x */\r
+#define AES_GCMHR_H(value) ((AES_GCMHR_H_Msk & ((value) << AES_GCMHR_H_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Advanced Encryption Standard Bridge */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_AESB Advanced Encryption Standard Bridge */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Aesb hardware registers */\r
+typedef struct {\r
+  __O  uint32_t AESB_CR;        /**< \brief (Aesb Offset: 0x00) Control Register */\r
+  __IO uint32_t AESB_MR;        /**< \brief (Aesb Offset: 0x04) Mode Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __O  uint32_t AESB_IER;       /**< \brief (Aesb Offset: 0x10) Interrupt Enable Register */\r
+  __O  uint32_t AESB_IDR;       /**< \brief (Aesb Offset: 0x14) Interrupt Disable Register */\r
+  __I  uint32_t AESB_IMR;       /**< \brief (Aesb Offset: 0x18) Interrupt Mask Register */\r
+  __I  uint32_t AESB_ISR;       /**< \brief (Aesb Offset: 0x1C) Interrupt Status Register */\r
+  __O  uint32_t AESB_KEYWR[4];  /**< \brief (Aesb Offset: 0x20) Key Word Register */\r
+  __I  uint32_t Reserved2[4];\r
+  __O  uint32_t AESB_IDATAR[4]; /**< \brief (Aesb Offset: 0x40) Input Data Register */\r
+  __I  uint32_t AESB_ODATAR[4]; /**< \brief (Aesb Offset: 0x50) Output Data Register */\r
+  __O  uint32_t AESB_IVR[4];    /**< \brief (Aesb Offset: 0x60) Initialization Vector Register */\r
+} Aesb;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- AESB_CR : (AESB Offset: 0x00) Control Register -------- */\r
+#define AESB_CR_START (0x1u << 0) /**< \brief (AESB_CR) Start Processing */\r
+#define AESB_CR_SWRST (0x1u << 8) /**< \brief (AESB_CR) Software Reset */\r
+#define AESB_CR_LOADSEED (0x1u << 16) /**< \brief (AESB_CR) Random Number Generator Seed Loading */\r
+/* -------- AESB_MR : (AESB Offset: 0x04) Mode Register -------- */\r
+#define AESB_MR_CIPHER (0x1u << 0) /**< \brief (AESB_MR) Processing Mode */\r
+#define AESB_MR_AAHB (0x1u << 2) /**< \brief (AESB_MR) Automatic Bridge Mode */\r
+#define AESB_MR_DUALBUFF (0x1u << 3) /**< \brief (AESB_MR) Dual Input BUFFer */\r
+#define   AESB_MR_DUALBUFF_INACTIVE (0x0u << 3) /**< \brief (AESB_MR) AESB_IDATARx cannot be written during processing of previous block. */\r
+#define   AESB_MR_DUALBUFF_ACTIVE (0x1u << 3) /**< \brief (AESB_MR) AESB_IDATARx can be written during processing of previous block when SMOD = 0x2. It speeds up the overall runtime of large files. */\r
+#define AESB_MR_PROCDLY_Pos 4\r
+#define AESB_MR_PROCDLY_Msk (0xfu << AESB_MR_PROCDLY_Pos) /**< \brief (AESB_MR) Processing Delay */\r
+#define AESB_MR_PROCDLY(value) ((AESB_MR_PROCDLY_Msk & ((value) << AESB_MR_PROCDLY_Pos)))\r
+#define AESB_MR_SMOD_Pos 8\r
+#define AESB_MR_SMOD_Msk (0x3u << AESB_MR_SMOD_Pos) /**< \brief (AESB_MR) Start Mode */\r
+#define   AESB_MR_SMOD_MANUAL_START (0x0u << 8) /**< \brief (AESB_MR) Manual Mode */\r
+#define   AESB_MR_SMOD_AUTO_START (0x1u << 8) /**< \brief (AESB_MR) Auto Mode */\r
+#define   AESB_MR_SMOD_IDATAR0_START (0x2u << 8) /**< \brief (AESB_MR) AESB_IDATAR0 access only Auto Mode */\r
+#define AESB_MR_OPMOD_Pos 12\r
+#define AESB_MR_OPMOD_Msk (0x7u << AESB_MR_OPMOD_Pos) /**< \brief (AESB_MR) Operation Mode */\r
+#define   AESB_MR_OPMOD_ECB (0x0u << 12) /**< \brief (AESB_MR) ECB: Electronic Code Book mode */\r
+#define   AESB_MR_OPMOD_CBC (0x1u << 12) /**< \brief (AESB_MR) CBC: Cipher Block Chaining mode */\r
+#define   AESB_MR_OPMOD_CTR (0x4u << 12) /**< \brief (AESB_MR) CTR: Counter mode (16-bit internal counter) */\r
+#define AESB_MR_LOD (0x1u << 15) /**< \brief (AESB_MR) Last Output Data Mode */\r
+#define AESB_MR_CKEY_Pos 20\r
+#define AESB_MR_CKEY_Msk (0xfu << AESB_MR_CKEY_Pos) /**< \brief (AESB_MR) Countermeasure Key */\r
+#define   AESB_MR_CKEY_PASSWD (0xEu << 20) /**< \brief (AESB_MR) This field must be written with 0xE to allow CMTYPx fields change. Any other values will abort the write operation in CMTYPx fields.Always reads as 0. */\r
+#define AESB_MR_CMTYP1 (0x1u << 24) /**< \brief (AESB_MR) Countermeasure Type 1 */\r
+#define   AESB_MR_CMTYP1_NOPROT_EXTKEY (0x0u << 24) /**< \brief (AESB_MR) Countermeasure type 1 is disabled. */\r
+#define   AESB_MR_CMTYP1_PROT_EXTKEY (0x1u << 24) /**< \brief (AESB_MR) Countermeasure type 1 is enabled. */\r
+#define AESB_MR_CMTYP2 (0x1u << 25) /**< \brief (AESB_MR) Countermeasure Type 2 */\r
+#define   AESB_MR_CMTYP2_NO_PAUSE (0x0u << 25) /**< \brief (AESB_MR) Countermeasure type 2 is disabled. */\r
+#define   AESB_MR_CMTYP2_PAUSE (0x1u << 25) /**< \brief (AESB_MR) Countermeasure type 2 is enabled. */\r
+#define AESB_MR_CMTYP3 (0x1u << 26) /**< \brief (AESB_MR) Countermeasure Type 3 */\r
+#define   AESB_MR_CMTYP3_NO_DUMMY (0x0u << 26) /**< \brief (AESB_MR) Countermeasure type 3 is disabled. */\r
+#define   AESB_MR_CMTYP3_DUMMY (0x1u << 26) /**< \brief (AESB_MR) Countermeasure type 3 is enabled. */\r
+#define AESB_MR_CMTYP4 (0x1u << 27) /**< \brief (AESB_MR) Countermeasure Type 4 */\r
+#define   AESB_MR_CMTYP4_NO_RESTART (0x0u << 27) /**< \brief (AESB_MR) Countermeasure type 4 is disabled. */\r
+#define   AESB_MR_CMTYP4_RESTART (0x1u << 27) /**< \brief (AESB_MR) Countermeasure type 4 is enabled. */\r
+#define AESB_MR_CMTYP5 (0x1u << 28) /**< \brief (AESB_MR) Countermeasure Type 5 */\r
+#define   AESB_MR_CMTYP5_NO_ADDACCESS (0x0u << 28) /**< \brief (AESB_MR) Countermeasure type 5 is disabled. */\r
+#define   AESB_MR_CMTYP5_ADDACCESS (0x1u << 28) /**< \brief (AESB_MR) Countermeasure type 5 is enabled. */\r
+#define AESB_MR_CMTYP6 (0x1u << 29) /**< \brief (AESB_MR) CounterMeasure Type 6 */\r
+#define   AESB_MR_CMTYP6_NO_IDLECURRENT (0x0u << 29) /**< \brief (AESB_MR) Countermeasure type 6 is disabled. */\r
+#define   AESB_MR_CMTYP6_IDLECURRENT (0x1u << 29) /**< \brief (AESB_MR) Countermeasure type 6 is enabled. */\r
+/* -------- AESB_IER : (AESB Offset: 0x10) Interrupt Enable Register -------- */\r
+#define AESB_IER_DATRDY (0x1u << 0) /**< \brief (AESB_IER) Data Ready Interrupt Enable */\r
+#define AESB_IER_URAD (0x1u << 8) /**< \brief (AESB_IER) Unspecified Register Access Detection Interrupt Enable */\r
+/* -------- AESB_IDR : (AESB Offset: 0x14) Interrupt Disable Register -------- */\r
+#define AESB_IDR_DATRDY (0x1u << 0) /**< \brief (AESB_IDR) Data Ready Interrupt Disable */\r
+#define AESB_IDR_URAD (0x1u << 8) /**< \brief (AESB_IDR) Unspecified Register Access Detection Interrupt Disable */\r
+/* -------- AESB_IMR : (AESB Offset: 0x18) Interrupt Mask Register -------- */\r
+#define AESB_IMR_DATRDY (0x1u << 0) /**< \brief (AESB_IMR) Data Ready Interrupt Mask */\r
+#define AESB_IMR_URAD (0x1u << 8) /**< \brief (AESB_IMR) Unspecified Register Access Detection Interrupt Mask */\r
+/* -------- AESB_ISR : (AESB Offset: 0x1C) Interrupt Status Register -------- */\r
+#define AESB_ISR_DATRDY (0x1u << 0) /**< \brief (AESB_ISR) Data Ready */\r
+#define AESB_ISR_URAD (0x1u << 8) /**< \brief (AESB_ISR) Unspecified Register Access Detection Status */\r
+#define AESB_ISR_URAT_Pos 12\r
+#define AESB_ISR_URAT_Msk (0xfu << AESB_ISR_URAT_Pos) /**< \brief (AESB_ISR) Unspecified Register Access: */\r
+#define   AESB_ISR_URAT_IDR_WR_PROCESSING (0x0u << 12) /**< \brief (AESB_ISR) Input Data Register written during the data processing when SMOD=0x2 mode. */\r
+#define   AESB_ISR_URAT_ODR_RD_PROCESSING (0x1u << 12) /**< \brief (AESB_ISR) Output Data Register read during the data processing. */\r
+#define   AESB_ISR_URAT_MR_WR_PROCESSING (0x2u << 12) /**< \brief (AESB_ISR) Mode Register written during the data processing. */\r
+#define   AESB_ISR_URAT_ODR_RD_SUBKGEN (0x3u << 12) /**< \brief (AESB_ISR) Output Data Register read during the sub-keys generation. */\r
+#define   AESB_ISR_URAT_MR_WR_SUBKGEN (0x4u << 12) /**< \brief (AESB_ISR) Mode Register written during the sub-keys generation. */\r
+#define   AESB_ISR_URAT_WOR_RD_ACCESS (0x5u << 12) /**< \brief (AESB_ISR) Write-only register read access. */\r
+/* -------- AESB_KEYWR[4] : (AESB Offset: 0x20) Key Word Register -------- */\r
+#define AESB_KEYWR_KEYW_Pos 0\r
+#define AESB_KEYWR_KEYW_Msk (0xffffffffu << AESB_KEYWR_KEYW_Pos) /**< \brief (AESB_KEYWR[4]) Key Word */\r
+#define AESB_KEYWR_KEYW(value) ((AESB_KEYWR_KEYW_Msk & ((value) << AESB_KEYWR_KEYW_Pos)))\r
+/* -------- AESB_IDATAR[4] : (AESB Offset: 0x40) Input Data Register -------- */\r
+#define AESB_IDATAR_IDATA_Pos 0\r
+#define AESB_IDATAR_IDATA_Msk (0xffffffffu << AESB_IDATAR_IDATA_Pos) /**< \brief (AESB_IDATAR[4]) Input Data Word */\r
+#define AESB_IDATAR_IDATA(value) ((AESB_IDATAR_IDATA_Msk & ((value) << AESB_IDATAR_IDATA_Pos)))\r
+/* -------- AESB_ODATAR[4] : (AESB Offset: 0x50) Output Data Register -------- */\r
+#define AESB_ODATAR_ODATA_Pos 0\r
+#define AESB_ODATAR_ODATA_Msk (0xffffffffu << AESB_ODATAR_ODATA_Pos) /**< \brief (AESB_ODATAR[4]) Output Data */\r
+/* -------- AESB_IVR[4] : (AESB Offset: 0x60) Initialization Vector Register -------- */\r
+#define AESB_IVR_IV_Pos 0\r
+#define AESB_IVR_IV_Msk (0xffffffffu << AESB_IVR_IV_Pos) /**< \brief (AESB_IVR[4]) Initialization Vector */\r
+#define AESB_IVR_IV(value) ((AESB_IVR_IV_Msk & ((value) << AESB_IVR_IV_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Advanced Interrupt Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_AIC Advanced Interrupt Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Aic hardware registers */\r
+typedef struct {\r
+  __IO uint32_t AIC_SSR;       /**< \brief (Aic Offset: 0x00) Source Select Register */\r
+  __IO uint32_t AIC_SMR;       /**< \brief (Aic Offset: 0x04) Source Mode Register */\r
+  __IO uint32_t AIC_SVR;       /**< \brief (Aic Offset: 0x08) Source Vector Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __I  uint32_t AIC_IVR;       /**< \brief (Aic Offset: 0x10) Interrupt Vector Register */\r
+  __I  uint32_t AIC_FVR;       /**< \brief (Aic Offset: 0x14) FIQ Interrupt Vector Register */\r
+  __I  uint32_t AIC_ISR;       /**< \brief (Aic Offset: 0x18) Interrupt Status Register */\r
+  __I  uint32_t Reserved2[1];\r
+  __I  uint32_t AIC_IPR0;      /**< \brief (Aic Offset: 0x20) Interrupt Pending Register 0 */\r
+  __I  uint32_t AIC_IPR1;      /**< \brief (Aic Offset: 0x24) Interrupt Pending Register 1 */\r
+  __I  uint32_t AIC_IPR2;      /**< \brief (Aic Offset: 0x28) Interrupt Pending Register 2 */\r
+  __I  uint32_t AIC_IPR3;      /**< \brief (Aic Offset: 0x2C) Interrupt Pending Register 3 */\r
+  __I  uint32_t AIC_IMR;       /**< \brief (Aic Offset: 0x30) Interrupt Mask Register */\r
+  __I  uint32_t AIC_CISR;      /**< \brief (Aic Offset: 0x34) Core Interrupt Status Register */\r
+  __O  uint32_t AIC_EOICR;     /**< \brief (Aic Offset: 0x38) End of Interrupt Command Register */\r
+  __IO uint32_t AIC_SPU;       /**< \brief (Aic Offset: 0x3C) Spurious Interrupt Vector Register */\r
+  __O  uint32_t AIC_IECR;      /**< \brief (Aic Offset: 0x40) Interrupt Enable Command Register */\r
+  __O  uint32_t AIC_IDCR;      /**< \brief (Aic Offset: 0x44) Interrupt Disable Command Register */\r
+  __O  uint32_t AIC_ICCR;      /**< \brief (Aic Offset: 0x48) Interrupt Clear Command Register */\r
+  __O  uint32_t AIC_ISCR;      /**< \brief (Aic Offset: 0x4C) Interrupt Set Command Register */\r
+  __O  uint32_t AIC_FFER;      /**< \brief (Aic Offset: 0x50) Fast Forcing Enable Register */\r
+  __O  uint32_t AIC_FFDR;      /**< \brief (Aic Offset: 0x54) Fast Forcing Disable Register */\r
+  __I  uint32_t AIC_FFSR;      /**< \brief (Aic Offset: 0x58) Fast Forcing Status Register */\r
+  __I  uint32_t Reserved3[4];\r
+  __IO uint32_t AIC_DCR;       /**< \brief (Aic Offset: 0x6C) Debug Control Register */\r
+  __I  uint32_t Reserved4[29];\r
+  __IO uint32_t AIC_WPMR;      /**< \brief (Aic Offset: 0xE4) Write Protect Mode Register */\r
+  __I  uint32_t AIC_WPSR;      /**< \brief (Aic Offset: 0xE8) Write Protect Status Register */\r
+} Aic;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- AIC_SSR : (AIC Offset: 0x00) Source Select Register -------- */\r
+#define AIC_SSR_INTSEL_Pos 0\r
+#define AIC_SSR_INTSEL_Msk (0x7fu << AIC_SSR_INTSEL_Pos) /**< \brief (AIC_SSR) Interrupt line Selection */\r
+#define AIC_SSR_INTSEL(value) ((AIC_SSR_INTSEL_Msk & ((value) << AIC_SSR_INTSEL_Pos)))\r
+/* -------- AIC_SMR : (AIC Offset: 0x04) Source Mode Register -------- */\r
+#define AIC_SMR_PRIOR_Pos 0\r
+#define AIC_SMR_PRIOR_Msk (0x7u << AIC_SMR_PRIOR_Pos) /**< \brief (AIC_SMR) Priority Level */\r
+#define AIC_SMR_PRIOR(value) ((AIC_SMR_PRIOR_Msk & ((value) << AIC_SMR_PRIOR_Pos)))\r
+#define AIC_SMR_SRCTYPE_Pos 5\r
+#define AIC_SMR_SRCTYPE_Msk (0x3u << AIC_SMR_SRCTYPE_Pos) /**< \brief (AIC_SMR) Interrupt Source Type */\r
+#define   AIC_SMR_SRCTYPE_INT_LEVEL_SENSITIVE (0x0u << 5) /**< \brief (AIC_SMR) High level Sensitive for internal sourceLow level Sensitive for external source */\r
+#define   AIC_SMR_SRCTYPE_INT_EDGE_TRIGGERED (0x1u << 5) /**< \brief (AIC_SMR) Positive edge triggered for internal sourceNegative edge triggered for external source */\r
+#define   AIC_SMR_SRCTYPE_EXT_HIGH_LEVEL (0x2u << 5) /**< \brief (AIC_SMR) High level Sensitive for internal sourceHigh level Sensitive for external source */\r
+#define   AIC_SMR_SRCTYPE_EXT_POSITIVE_EDGE (0x3u << 5) /**< \brief (AIC_SMR) Positive edge triggered for internal sourcePositive edge triggered for external source */\r
+/* -------- AIC_SVR : (AIC Offset: 0x08) Source Vector Register -------- */\r
+#define AIC_SVR_VECTOR_Pos 0\r
+#define AIC_SVR_VECTOR_Msk (0xffffffffu << AIC_SVR_VECTOR_Pos) /**< \brief (AIC_SVR) Source Vector */\r
+#define AIC_SVR_VECTOR(value) ((AIC_SVR_VECTOR_Msk & ((value) << AIC_SVR_VECTOR_Pos)))\r
+/* -------- AIC_IVR : (AIC Offset: 0x10) Interrupt Vector Register -------- */\r
+#define AIC_IVR_IRQV_Pos 0\r
+#define AIC_IVR_IRQV_Msk (0xffffffffu << AIC_IVR_IRQV_Pos) /**< \brief (AIC_IVR) Interrupt Vector Register */\r
+/* -------- AIC_FVR : (AIC Offset: 0x14) FIQ Interrupt Vector Register -------- */\r
+#define AIC_FVR_FIQV_Pos 0\r
+#define AIC_FVR_FIQV_Msk (0xffffffffu << AIC_FVR_FIQV_Pos) /**< \brief (AIC_FVR) FIQ Vector Register */\r
+/* -------- AIC_ISR : (AIC Offset: 0x18) Interrupt Status Register -------- */\r
+#define AIC_ISR_IRQID_Pos 0\r
+#define AIC_ISR_IRQID_Msk (0x7fu << AIC_ISR_IRQID_Pos) /**< \brief (AIC_ISR) Current Interrupt Identifier */\r
+/* -------- AIC_IPR0 : (AIC Offset: 0x20) Interrupt Pending Register 0 -------- */\r
+#define AIC_IPR0_FIQ (0x1u << 0) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_SYS (0x1u << 1) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID2 (0x1u << 2) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID3 (0x1u << 3) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID4 (0x1u << 4) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID5 (0x1u << 5) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID6 (0x1u << 6) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID7 (0x1u << 7) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID8 (0x1u << 8) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID9 (0x1u << 9) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID10 (0x1u << 10) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID11 (0x1u << 11) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID12 (0x1u << 12) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID13 (0x1u << 13) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID14 (0x1u << 14) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID15 (0x1u << 15) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID16 (0x1u << 16) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID17 (0x1u << 17) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID18 (0x1u << 18) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID19 (0x1u << 19) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID20 (0x1u << 20) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID21 (0x1u << 21) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID22 (0x1u << 22) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID23 (0x1u << 23) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID24 (0x1u << 24) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID25 (0x1u << 25) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID26 (0x1u << 26) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID27 (0x1u << 27) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID28 (0x1u << 28) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID29 (0x1u << 29) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID30 (0x1u << 30) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+#define AIC_IPR0_PID31 (0x1u << 31) /**< \brief (AIC_IPR0) Interrupt Pending */\r
+/* -------- AIC_IPR1 : (AIC Offset: 0x24) Interrupt Pending Register 1 -------- */\r
+#define AIC_IPR1_PID32 (0x1u << 0) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID33 (0x1u << 1) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID34 (0x1u << 2) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID35 (0x1u << 3) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID36 (0x1u << 4) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID37 (0x1u << 5) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID38 (0x1u << 6) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID39 (0x1u << 7) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID40 (0x1u << 8) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID41 (0x1u << 9) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID42 (0x1u << 10) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID43 (0x1u << 11) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID44 (0x1u << 12) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID45 (0x1u << 13) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID46 (0x1u << 14) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID47 (0x1u << 15) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID48 (0x1u << 16) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID49 (0x1u << 17) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID50 (0x1u << 18) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID51 (0x1u << 19) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID52 (0x1u << 20) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID53 (0x1u << 21) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID54 (0x1u << 22) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID55 (0x1u << 23) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID56 (0x1u << 24) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID57 (0x1u << 25) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID58 (0x1u << 26) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID59 (0x1u << 27) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID60 (0x1u << 28) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID61 (0x1u << 29) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID62 (0x1u << 30) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+#define AIC_IPR1_PID63 (0x1u << 31) /**< \brief (AIC_IPR1) Interrupt Pending */\r
+/* -------- AIC_IPR2 : (AIC Offset: 0x28) Interrupt Pending Register 2 -------- */\r
+#define AIC_IPR2_PID64 (0x1u << 0) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID65 (0x1u << 1) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID66 (0x1u << 2) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID67 (0x1u << 3) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID68 (0x1u << 4) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID69 (0x1u << 5) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID70 (0x1u << 6) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID71 (0x1u << 7) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID72 (0x1u << 8) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID73 (0x1u << 9) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID74 (0x1u << 10) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID75 (0x1u << 11) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID76 (0x1u << 12) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID77 (0x1u << 13) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID78 (0x1u << 14) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID79 (0x1u << 15) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID80 (0x1u << 16) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID81 (0x1u << 17) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID82 (0x1u << 18) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID83 (0x1u << 19) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID84 (0x1u << 20) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID85 (0x1u << 21) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID86 (0x1u << 22) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID87 (0x1u << 23) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID88 (0x1u << 24) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID89 (0x1u << 25) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID90 (0x1u << 26) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID91 (0x1u << 27) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID92 (0x1u << 28) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID93 (0x1u << 29) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID94 (0x1u << 30) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+#define AIC_IPR2_PID95 (0x1u << 31) /**< \brief (AIC_IPR2) Interrupt Pending */\r
+/* -------- AIC_IPR3 : (AIC Offset: 0x2C) Interrupt Pending Register 3 -------- */\r
+#define AIC_IPR3_PID96 (0x1u << 0) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID97 (0x1u << 1) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID98 (0x1u << 2) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID99 (0x1u << 3) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID100 (0x1u << 4) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID101 (0x1u << 5) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID102 (0x1u << 6) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID103 (0x1u << 7) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID104 (0x1u << 8) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID105 (0x1u << 9) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID106 (0x1u << 10) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID107 (0x1u << 11) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID108 (0x1u << 12) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID109 (0x1u << 13) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID110 (0x1u << 14) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID111 (0x1u << 15) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID112 (0x1u << 16) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID113 (0x1u << 17) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID114 (0x1u << 18) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID115 (0x1u << 19) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID116 (0x1u << 20) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID117 (0x1u << 21) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID118 (0x1u << 22) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID119 (0x1u << 23) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID120 (0x1u << 24) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID121 (0x1u << 25) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID122 (0x1u << 26) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID123 (0x1u << 27) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID124 (0x1u << 28) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID125 (0x1u << 29) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID126 (0x1u << 30) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+#define AIC_IPR3_PID127 (0x1u << 31) /**< \brief (AIC_IPR3) Interrupt Pending */\r
+/* -------- AIC_IMR : (AIC Offset: 0x30) Interrupt Mask Register -------- */\r
+#define AIC_IMR_INTM (0x1u << 0) /**< \brief (AIC_IMR) Interrupt Mask */\r
+/* -------- AIC_CISR : (AIC Offset: 0x34) Core Interrupt Status Register -------- */\r
+#define AIC_CISR_NFIQ (0x1u << 0) /**< \brief (AIC_CISR) NFIQ Status */\r
+#define AIC_CISR_NIRQ (0x1u << 1) /**< \brief (AIC_CISR) NIRQ Status */\r
+/* -------- AIC_EOICR : (AIC Offset: 0x38) End of Interrupt Command Register -------- */\r
+#define AIC_EOICR_ENDIT (0x1u << 0) /**< \brief (AIC_EOICR) Interrupt Processing Complete Command */\r
+/* -------- AIC_SPU : (AIC Offset: 0x3C) Spurious Interrupt Vector Register -------- */\r
+#define AIC_SPU_SIVR_Pos 0\r
+#define AIC_SPU_SIVR_Msk (0xffffffffu << AIC_SPU_SIVR_Pos) /**< \brief (AIC_SPU) Spurious Interrupt Vector Register */\r
+#define AIC_SPU_SIVR(value) ((AIC_SPU_SIVR_Msk & ((value) << AIC_SPU_SIVR_Pos)))\r
+/* -------- AIC_IECR : (AIC Offset: 0x40) Interrupt Enable Command Register -------- */\r
+#define AIC_IECR_INTEN (0x1u << 0) /**< \brief (AIC_IECR) Interrupt Enable */\r
+/* -------- AIC_IDCR : (AIC Offset: 0x44) Interrupt Disable Command Register -------- */\r
+#define AIC_IDCR_INTD (0x1u << 0) /**< \brief (AIC_IDCR) Interrupt Disable */\r
+/* -------- AIC_ICCR : (AIC Offset: 0x48) Interrupt Clear Command Register -------- */\r
+#define AIC_ICCR_INTCLR (0x1u << 0) /**< \brief (AIC_ICCR) Interrupt Clear */\r
+/* -------- AIC_ISCR : (AIC Offset: 0x4C) Interrupt Set Command Register -------- */\r
+#define AIC_ISCR_INTSET (0x1u << 0) /**< \brief (AIC_ISCR) Interrupt Set */\r
+/* -------- AIC_FFER : (AIC Offset: 0x50) Fast Forcing Enable Register -------- */\r
+#define AIC_FFER_FFEN (0x1u << 0) /**< \brief (AIC_FFER) Fast Forcing Enable */\r
+/* -------- AIC_FFDR : (AIC Offset: 0x54) Fast Forcing Disable Register -------- */\r
+#define AIC_FFDR_FFDIS (0x1u << 0) /**< \brief (AIC_FFDR) Fast Forcing Disable */\r
+/* -------- AIC_FFSR : (AIC Offset: 0x58) Fast Forcing Status Register -------- */\r
+#define AIC_FFSR_FFS (0x1u << 0) /**< \brief (AIC_FFSR) Fast Forcing Status */\r
+/* -------- AIC_DCR : (AIC Offset: 0x6C) Debug Control Register -------- */\r
+#define AIC_DCR_PROT (0x1u << 0) /**< \brief (AIC_DCR) Protection Mode */\r
+#define AIC_DCR_GMSK (0x1u << 1) /**< \brief (AIC_DCR) General Mask */\r
+/* -------- AIC_WPMR : (AIC Offset: 0xE4) Write Protect Mode Register -------- */\r
+#define AIC_WPMR_WPEN (0x1u << 0) /**< \brief (AIC_WPMR) Write Protect Enable */\r
+#define AIC_WPMR_WPKEY_Pos 8\r
+#define AIC_WPMR_WPKEY_Msk (0xffffffu << AIC_WPMR_WPKEY_Pos) /**< \brief (AIC_WPMR) Write Protect KEY */\r
+#define   AIC_WPMR_WPKEY_PASSWD (0x414943u << 8) /**< \brief (AIC_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit.Always reads as 0. */\r
+/* -------- AIC_WPSR : (AIC Offset: 0xE8) Write Protect Status Register -------- */\r
+#define AIC_WPSR_WPVS (0x1u << 0) /**< \brief (AIC_WPSR) Write Protect Violation Status */\r
+#define AIC_WPSR_WPVSRC_Pos 8\r
+#define AIC_WPSR_WPVSRC_Msk (0xffffu << AIC_WPSR_WPVSRC_Pos) /**< \brief (AIC_WPSR) Write Protect Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR AXI Matrix */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_AXIMX AXI Matrix */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Aximx hardware registers */\r
+typedef struct {\r
+  __O uint32_t AXIMX_REMAP; /**< \brief (Aximx Offset: 0x00) Remap Register */\r
+} Aximx;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- AXIMX_REMAP : (AXIMX Offset: 0x00) Remap Register -------- */\r
+#define AXIMX_REMAP_REMAP0 (0x1u << 0) /**< \brief (AXIMX_REMAP) Remap State 0 */\r
+#define AXIMX_REMAP_REMAP1 (0x1u << 1) /**< \brief (AXIMX_REMAP) Remap State 1 */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Debug Unit */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_DBGU Debug Unit */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Dbgu hardware registers */\r
+typedef struct {\r
+  __O  uint32_t DBGU_CR;      /**< \brief (Dbgu Offset: 0x0000) Control Register */\r
+  __IO uint32_t DBGU_MR;      /**< \brief (Dbgu Offset: 0x0004) Mode Register */\r
+  __O  uint32_t DBGU_IER;     /**< \brief (Dbgu Offset: 0x0008) Interrupt Enable Register */\r
+  __O  uint32_t DBGU_IDR;     /**< \brief (Dbgu Offset: 0x000C) Interrupt Disable Register */\r
+  __I  uint32_t DBGU_IMR;     /**< \brief (Dbgu Offset: 0x0010) Interrupt Mask Register */\r
+  __I  uint32_t DBGU_SR;      /**< \brief (Dbgu Offset: 0x0014) Status Register */\r
+  __I  uint32_t DBGU_RHR;     /**< \brief (Dbgu Offset: 0x0018) Receive Holding Register */\r
+  __O  uint32_t DBGU_THR;     /**< \brief (Dbgu Offset: 0x001C) Transmit Holding Register */\r
+  __IO uint32_t DBGU_BRGR;    /**< \brief (Dbgu Offset: 0x0020) Baud Rate Generator Register */\r
+  __I  uint32_t Reserved1[7];\r
+  __I  uint32_t DBGU_CIDR;    /**< \brief (Dbgu Offset: 0x0040) Chip ID Register */\r
+  __I  uint32_t DBGU_EXID;    /**< \brief (Dbgu Offset: 0x0044) Chip ID Extension Register */\r
+  __IO uint32_t DBGU_FNR;     /**< \brief (Dbgu Offset: 0x0048) Force NTRST Register */\r
+} Dbgu;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- DBGU_CR : (DBGU Offset: 0x0000) Control Register -------- */\r
+#define DBGU_CR_RSTRX (0x1u << 2) /**< \brief (DBGU_CR) Reset Receiver */\r
+#define DBGU_CR_RSTTX (0x1u << 3) /**< \brief (DBGU_CR) Reset Transmitter */\r
+#define DBGU_CR_RXEN (0x1u << 4) /**< \brief (DBGU_CR) Receiver Enable */\r
+#define DBGU_CR_RXDIS (0x1u << 5) /**< \brief (DBGU_CR) Receiver Disable */\r
+#define DBGU_CR_TXEN (0x1u << 6) /**< \brief (DBGU_CR) Transmitter Enable */\r
+#define DBGU_CR_TXDIS (0x1u << 7) /**< \brief (DBGU_CR) Transmitter Disable */\r
+#define DBGU_CR_RSTSTA (0x1u << 8) /**< \brief (DBGU_CR) Reset Status Bits */\r
+/* -------- DBGU_MR : (DBGU Offset: 0x0004) Mode Register -------- */\r
+#define DBGU_MR_PAR_Pos 9\r
+#define DBGU_MR_PAR_Msk (0x7u << DBGU_MR_PAR_Pos) /**< \brief (DBGU_MR) Parity Type */\r
+#define   DBGU_MR_PAR_EVEN (0x0u << 9) /**< \brief (DBGU_MR) Even Parity */\r
+#define   DBGU_MR_PAR_ODD (0x1u << 9) /**< \brief (DBGU_MR) Odd Parity */\r
+#define   DBGU_MR_PAR_SPACE (0x2u << 9) /**< \brief (DBGU_MR) Space: Parity forced to 0 */\r
+#define   DBGU_MR_PAR_MARK (0x3u << 9) /**< \brief (DBGU_MR) Mark: Parity forced to 1 */\r
+#define   DBGU_MR_PAR_NONE (0x4u << 9) /**< \brief (DBGU_MR) No Parity */\r
+#define DBGU_MR_CHMODE_Pos 14\r
+#define DBGU_MR_CHMODE_Msk (0x3u << DBGU_MR_CHMODE_Pos) /**< \brief (DBGU_MR) Channel Mode */\r
+#define   DBGU_MR_CHMODE_NORM (0x0u << 14) /**< \brief (DBGU_MR) Normal Mode */\r
+#define   DBGU_MR_CHMODE_AUTO (0x1u << 14) /**< \brief (DBGU_MR) Automatic Echo */\r
+#define   DBGU_MR_CHMODE_LOCLOOP (0x2u << 14) /**< \brief (DBGU_MR) Local Loopback */\r
+#define   DBGU_MR_CHMODE_REMLOOP (0x3u << 14) /**< \brief (DBGU_MR) Remote Loopback */\r
+/* -------- DBGU_IER : (DBGU Offset: 0x0008) Interrupt Enable Register -------- */\r
+#define DBGU_IER_RXRDY (0x1u << 0) /**< \brief (DBGU_IER) Enable RXRDY Interrupt */\r
+#define DBGU_IER_TXRDY (0x1u << 1) /**< \brief (DBGU_IER) Enable TXRDY Interrupt */\r
+#define DBGU_IER_OVRE (0x1u << 5) /**< \brief (DBGU_IER) Enable Overrun Error Interrupt */\r
+#define DBGU_IER_FRAME (0x1u << 6) /**< \brief (DBGU_IER) Enable Framing Error Interrupt */\r
+#define DBGU_IER_PARE (0x1u << 7) /**< \brief (DBGU_IER) Enable Parity Error Interrupt */\r
+#define DBGU_IER_TXEMPTY (0x1u << 9) /**< \brief (DBGU_IER) Enable TXEMPTY Interrupt */\r
+#define DBGU_IER_COMMTX (0x1u << 30) /**< \brief (DBGU_IER) Enable COMMTX (from ARM) Interrupt */\r
+#define DBGU_IER_COMMRX (0x1u << 31) /**< \brief (DBGU_IER) Enable COMMRX (from ARM) Interrupt */\r
+/* -------- DBGU_IDR : (DBGU Offset: 0x000C) Interrupt Disable Register -------- */\r
+#define DBGU_IDR_RXRDY (0x1u << 0) /**< \brief (DBGU_IDR) Disable RXRDY Interrupt */\r
+#define DBGU_IDR_TXRDY (0x1u << 1) /**< \brief (DBGU_IDR) Disable TXRDY Interrupt */\r
+#define DBGU_IDR_OVRE (0x1u << 5) /**< \brief (DBGU_IDR) Disable Overrun Error Interrupt */\r
+#define DBGU_IDR_FRAME (0x1u << 6) /**< \brief (DBGU_IDR) Disable Framing Error Interrupt */\r
+#define DBGU_IDR_PARE (0x1u << 7) /**< \brief (DBGU_IDR) Disable Parity Error Interrupt */\r
+#define DBGU_IDR_TXEMPTY (0x1u << 9) /**< \brief (DBGU_IDR) Disable TXEMPTY Interrupt */\r
+#define DBGU_IDR_COMMTX (0x1u << 30) /**< \brief (DBGU_IDR) Disable COMMTX (from ARM) Interrupt */\r
+#define DBGU_IDR_COMMRX (0x1u << 31) /**< \brief (DBGU_IDR) Disable COMMRX (from ARM) Interrupt */\r
+/* -------- DBGU_IMR : (DBGU Offset: 0x0010) Interrupt Mask Register -------- */\r
+#define DBGU_IMR_RXRDY (0x1u << 0) /**< \brief (DBGU_IMR) Mask RXRDY Interrupt */\r
+#define DBGU_IMR_TXRDY (0x1u << 1) /**< \brief (DBGU_IMR) Disable TXRDY Interrupt */\r
+#define DBGU_IMR_OVRE (0x1u << 5) /**< \brief (DBGU_IMR) Mask Overrun Error Interrupt */\r
+#define DBGU_IMR_FRAME (0x1u << 6) /**< \brief (DBGU_IMR) Mask Framing Error Interrupt */\r
+#define DBGU_IMR_PARE (0x1u << 7) /**< \brief (DBGU_IMR) Mask Parity Error Interrupt */\r
+#define DBGU_IMR_TXEMPTY (0x1u << 9) /**< \brief (DBGU_IMR) Mask TXEMPTY Interrupt */\r
+#define DBGU_IMR_COMMTX (0x1u << 30) /**< \brief (DBGU_IMR) Mask COMMTX Interrupt */\r
+#define DBGU_IMR_COMMRX (0x1u << 31) /**< \brief (DBGU_IMR) Mask COMMRX Interrupt */\r
+/* -------- DBGU_SR : (DBGU Offset: 0x0014) Status Register -------- */\r
+#define DBGU_SR_RXRDY (0x1u << 0) /**< \brief (DBGU_SR) Receiver Ready */\r
+#define DBGU_SR_TXRDY (0x1u << 1) /**< \brief (DBGU_SR) Transmitter Ready */\r
+#define DBGU_SR_OVRE (0x1u << 5) /**< \brief (DBGU_SR) Overrun Error */\r
+#define DBGU_SR_FRAME (0x1u << 6) /**< \brief (DBGU_SR) Framing Error */\r
+#define DBGU_SR_PARE (0x1u << 7) /**< \brief (DBGU_SR) Parity Error */\r
+#define DBGU_SR_TXEMPTY (0x1u << 9) /**< \brief (DBGU_SR) Transmitter Empty */\r
+#define DBGU_SR_COMMTX (0x1u << 30) /**< \brief (DBGU_SR) Debug Communication Channel Write Status */\r
+#define DBGU_SR_COMMRX (0x1u << 31) /**< \brief (DBGU_SR) Debug Communication Channel Read Status */\r
+/* -------- DBGU_RHR : (DBGU Offset: 0x0018) Receive Holding Register -------- */\r
+#define DBGU_RHR_RXCHR_Pos 0\r
+#define DBGU_RHR_RXCHR_Msk (0xffu << DBGU_RHR_RXCHR_Pos) /**< \brief (DBGU_RHR) Received Character */\r
+/* -------- DBGU_THR : (DBGU Offset: 0x001C) Transmit Holding Register -------- */\r
+#define DBGU_THR_TXCHR_Pos 0\r
+#define DBGU_THR_TXCHR_Msk (0xffu << DBGU_THR_TXCHR_Pos) /**< \brief (DBGU_THR) Character to be Transmitted */\r
+#define DBGU_THR_TXCHR(value) ((DBGU_THR_TXCHR_Msk & ((value) << DBGU_THR_TXCHR_Pos)))\r
+/* -------- DBGU_BRGR : (DBGU Offset: 0x0020) Baud Rate Generator Register -------- */\r
+#define DBGU_BRGR_CD_Pos 0\r
+#define DBGU_BRGR_CD_Msk (0xffffu << DBGU_BRGR_CD_Pos) /**< \brief (DBGU_BRGR) Clock Divisor */\r
+#define   DBGU_BRGR_CD_DISABLED (0x0u << 0) /**< \brief (DBGU_BRGR) DBGU Disabled */\r
+#define   DBGU_BRGR_CD_MCK (0x1u << 0) /**< \brief (DBGU_BRGR) MCK */\r
+/* -------- DBGU_CIDR : (DBGU Offset: 0x0040) Chip ID Register -------- */\r
+#define DBGU_CIDR_VERSION_Pos 0\r
+#define DBGU_CIDR_VERSION_Msk (0x1fu << DBGU_CIDR_VERSION_Pos) /**< \brief (DBGU_CIDR) Version of the Device */\r
+#define DBGU_CIDR_EPROC_Pos 5\r
+#define DBGU_CIDR_EPROC_Msk (0x7u << DBGU_CIDR_EPROC_Pos) /**< \brief (DBGU_CIDR) Embedded Processor */\r
+#define   DBGU_CIDR_EPROC_ARM946ES (0x1u << 5) /**< \brief (DBGU_CIDR) ARM946ES */\r
+#define   DBGU_CIDR_EPROC_ARM7TDMI (0x2u << 5) /**< \brief (DBGU_CIDR) ARM7TDMI */\r
+#define   DBGU_CIDR_EPROC_CM3 (0x3u << 5) /**< \brief (DBGU_CIDR) Cortex-M3 */\r
+#define   DBGU_CIDR_EPROC_ARM920T (0x4u << 5) /**< \brief (DBGU_CIDR) ARM920T */\r
+#define   DBGU_CIDR_EPROC_ARM926EJS (0x5u << 5) /**< \brief (DBGU_CIDR) ARM926EJS */\r
+#define DBGU_CIDR_NVPSIZ_Pos 8\r
+#define DBGU_CIDR_NVPSIZ_Msk (0xfu << DBGU_CIDR_NVPSIZ_Pos) /**< \brief (DBGU_CIDR) Nonvolatile Program Memory Size */\r
+#define   DBGU_CIDR_NVPSIZ_NONE (0x0u << 8) /**< \brief (DBGU_CIDR) None */\r
+#define   DBGU_CIDR_NVPSIZ_8K (0x1u << 8) /**< \brief (DBGU_CIDR) 8 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_16K (0x2u << 8) /**< \brief (DBGU_CIDR) 16 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_32K (0x3u << 8) /**< \brief (DBGU_CIDR) 32 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_64K (0x5u << 8) /**< \brief (DBGU_CIDR) 64 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_128K (0x7u << 8) /**< \brief (DBGU_CIDR) 128 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_256K (0x9u << 8) /**< \brief (DBGU_CIDR) 256 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_512K (0xAu << 8) /**< \brief (DBGU_CIDR) 512 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_1024K (0xCu << 8) /**< \brief (DBGU_CIDR) 1024 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ_2048K (0xEu << 8) /**< \brief (DBGU_CIDR) 2048 Kbytes */\r
+#define DBGU_CIDR_NVPSIZ2_Pos 12\r
+#define DBGU_CIDR_NVPSIZ2_Msk (0xfu << DBGU_CIDR_NVPSIZ2_Pos) /**< \brief (DBGU_CIDR) Second Nonvolatile Program Memory Size */\r
+#define   DBGU_CIDR_NVPSIZ2_NONE (0x0u << 12) /**< \brief (DBGU_CIDR) None */\r
+#define   DBGU_CIDR_NVPSIZ2_8K (0x1u << 12) /**< \brief (DBGU_CIDR) 8 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_16K (0x2u << 12) /**< \brief (DBGU_CIDR) 16 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_32K (0x3u << 12) /**< \brief (DBGU_CIDR) 32 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_64K (0x5u << 12) /**< \brief (DBGU_CIDR) 64 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_128K (0x7u << 12) /**< \brief (DBGU_CIDR) 128 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_256K (0x9u << 12) /**< \brief (DBGU_CIDR) 256 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_512K (0xAu << 12) /**< \brief (DBGU_CIDR) 512 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_1024K (0xCu << 12) /**< \brief (DBGU_CIDR) 1024 Kbytes */\r
+#define   DBGU_CIDR_NVPSIZ2_2048K (0xEu << 12) /**< \brief (DBGU_CIDR) 2048 Kbytes */\r
+#define DBGU_CIDR_SRAMSIZ_Pos 16\r
+#define DBGU_CIDR_SRAMSIZ_Msk (0xfu << DBGU_CIDR_SRAMSIZ_Pos) /**< \brief (DBGU_CIDR) Internal SRAM Size */\r
+#define   DBGU_CIDR_SRAMSIZ_1K (0x1u << 16) /**< \brief (DBGU_CIDR) 1 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_2K (0x2u << 16) /**< \brief (DBGU_CIDR) 2 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_6K (0x3u << 16) /**< \brief (DBGU_CIDR) 6 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_112K (0x4u << 16) /**< \brief (DBGU_CIDR) 112 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_4K (0x5u << 16) /**< \brief (DBGU_CIDR) 4 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_80K (0x6u << 16) /**< \brief (DBGU_CIDR) 80 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_160K (0x7u << 16) /**< \brief (DBGU_CIDR) 160 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_8K (0x8u << 16) /**< \brief (DBGU_CIDR) 8 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_16K (0x9u << 16) /**< \brief (DBGU_CIDR) 16 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_32K (0xAu << 16) /**< \brief (DBGU_CIDR) 32 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_64K (0xBu << 16) /**< \brief (DBGU_CIDR) 64 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_128K (0xCu << 16) /**< \brief (DBGU_CIDR) 128 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_256K (0xDu << 16) /**< \brief (DBGU_CIDR) 256 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_96K (0xEu << 16) /**< \brief (DBGU_CIDR) 96 Kbytes */\r
+#define   DBGU_CIDR_SRAMSIZ_512K (0xFu << 16) /**< \brief (DBGU_CIDR) 512 Kbytes */\r
+#define DBGU_CIDR_ARCH_Pos 20\r
+#define DBGU_CIDR_ARCH_Msk (0xffu << DBGU_CIDR_ARCH_Pos) /**< \brief (DBGU_CIDR) Architecture Identifier */\r
+#define   DBGU_CIDR_ARCH_AT91SAM9xx (0x19u << 20) /**< \brief (DBGU_CIDR) AT91SAM9xx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM9XExx (0x29u << 20) /**< \brief (DBGU_CIDR) AT91SAM9XExx Series */\r
+#define   DBGU_CIDR_ARCH_AT91x34 (0x34u << 20) /**< \brief (DBGU_CIDR) AT91x34 Series */\r
+#define   DBGU_CIDR_ARCH_CAP7 (0x37u << 20) /**< \brief (DBGU_CIDR) CAP7 Series */\r
+#define   DBGU_CIDR_ARCH_CAP9 (0x39u << 20) /**< \brief (DBGU_CIDR) CAP9 Series */\r
+#define   DBGU_CIDR_ARCH_CAP11 (0x3Bu << 20) /**< \brief (DBGU_CIDR) CAP11 Series */\r
+#define   DBGU_CIDR_ARCH_AT91x40 (0x40u << 20) /**< \brief (DBGU_CIDR) AT91x40 Series */\r
+#define   DBGU_CIDR_ARCH_AT91x42 (0x42u << 20) /**< \brief (DBGU_CIDR) AT91x42 Series */\r
+#define   DBGU_CIDR_ARCH_AT91x55 (0x55u << 20) /**< \brief (DBGU_CIDR) AT91x55 Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7Axx (0x60u << 20) /**< \brief (DBGU_CIDR) AT91SAM7Axx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7AQxx (0x61u << 20) /**< \brief (DBGU_CIDR) AT91SAM7AQxx Series */\r
+#define   DBGU_CIDR_ARCH_AT91x63 (0x63u << 20) /**< \brief (DBGU_CIDR) AT91x63 Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7Sxx (0x70u << 20) /**< \brief (DBGU_CIDR) AT91SAM7Sxx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7XCxx (0x71u << 20) /**< \brief (DBGU_CIDR) AT91SAM7XCxx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7SExx (0x72u << 20) /**< \brief (DBGU_CIDR) AT91SAM7SExx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7Lxx (0x73u << 20) /**< \brief (DBGU_CIDR) AT91SAM7Lxx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7Xxx (0x75u << 20) /**< \brief (DBGU_CIDR) AT91SAM7Xxx Series */\r
+#define   DBGU_CIDR_ARCH_AT91SAM7SLxx (0x76u << 20) /**< \brief (DBGU_CIDR) AT91SAM7SLxx Series */\r
+#define   DBGU_CIDR_ARCH_ATSAM3UxC (0x80u << 20) /**< \brief (DBGU_CIDR) ATSAM3UxC Series (100-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3UxE (0x81u << 20) /**< \brief (DBGU_CIDR) ATSAM3UxE Series (144-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3AxC (0x83u << 20) /**< \brief (DBGU_CIDR) ATSAM3AxC Series (100-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3XxC (0x84u << 20) /**< \brief (DBGU_CIDR) ATSAM3XxC Series (100-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3XxE (0x85u << 20) /**< \brief (DBGU_CIDR) ATSAM3XxE Series (144-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3XxG (0x86u << 20) /**< \brief (DBGU_CIDR) ATSAM3XxG Series (208/217-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3SxA (0x88u << 20) /**< \brief (DBGU_CIDR) ATSAM3SxA Series (48-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3SxB (0x89u << 20) /**< \brief (DBGU_CIDR) ATSAM3SxB Series (64-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3SxC (0x8Au << 20) /**< \brief (DBGU_CIDR) ATSAM3SxC Series (100-pin version) */\r
+#define   DBGU_CIDR_ARCH_AT91x92 (0x92u << 20) /**< \brief (DBGU_CIDR) AT91x92 Series */\r
+#define   DBGU_CIDR_ARCH_ATSAM3NxA (0x93u << 20) /**< \brief (DBGU_CIDR) ATSAM3NxA Series (48-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3NxB (0x94u << 20) /**< \brief (DBGU_CIDR) ATSAM3NxB Series (64-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3NxC (0x95u << 20) /**< \brief (DBGU_CIDR) ATSAM3NxC Series (100-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3SDxA (0x98u << 20) /**< \brief (DBGU_CIDR) ATSAM3SDxA Series (48-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3SDxB (0x99u << 20) /**< \brief (DBGU_CIDR) ATSAM3SDxB Series (64-pin version) */\r
+#define   DBGU_CIDR_ARCH_ATSAM3SDxC (0x9Au << 20) /**< \brief (DBGU_CIDR) ATSAM3SDxC Series (100-pin version) */\r
+#define   DBGU_CIDR_ARCH_AT75Cxx (0xF0u << 20) /**< \brief (DBGU_CIDR) AT75Cxx Series */\r
+#define DBGU_CIDR_NVPTYP_Pos 28\r
+#define DBGU_CIDR_NVPTYP_Msk (0x7u << DBGU_CIDR_NVPTYP_Pos) /**< \brief (DBGU_CIDR) Nonvolatile Program Memory Type */\r
+#define   DBGU_CIDR_NVPTYP_ROM (0x0u << 28) /**< \brief (DBGU_CIDR) ROM */\r
+#define   DBGU_CIDR_NVPTYP_ROMLESS (0x1u << 28) /**< \brief (DBGU_CIDR) ROMless or on-chip Flash */\r
+#define   DBGU_CIDR_NVPTYP_FLASH (0x2u << 28) /**< \brief (DBGU_CIDR) Embedded Flash Memory */\r
+#define   DBGU_CIDR_NVPTYP_ROM_FLASH (0x3u << 28) /**< \brief (DBGU_CIDR) ROM and Embedded Flash MemoryNVPSIZ is ROM size      NVPSIZ2 is Flash size */\r
+#define   DBGU_CIDR_NVPTYP_SRAM (0x4u << 28) /**< \brief (DBGU_CIDR) SRAM emulating ROM */\r
+#define DBGU_CIDR_EXT (0x1u << 31) /**< \brief (DBGU_CIDR) Extension Flag */\r
+/* -------- DBGU_EXID : (DBGU Offset: 0x0044) Chip ID Extension Register -------- */\r
+#define DBGU_EXID_EXID_Pos 0\r
+#define DBGU_EXID_EXID_Msk (0xffffffffu << DBGU_EXID_EXID_Pos) /**< \brief (DBGU_EXID) Chip ID Extension */\r
+/* -------- DBGU_FNR : (DBGU Offset: 0x0048) Force NTRST Register -------- */\r
+#define DBGU_FNR_FNTRST (0x1u << 0) /**< \brief (DBGU_FNR) Force NTRST */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Gigabit Ethernet MAC */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_GMAC Gigabit Ethernet MAC */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief GmacSa hardware registers */\r
+typedef struct {\r
+  __IO uint32_t GMAC_SAB; /**< \brief (GmacSa Offset: 0x0) Specific Address 1 Bottom [31:0] Register */\r
+  __IO uint32_t GMAC_SAT; /**< \brief (GmacSa Offset: 0x4) Specific Address 1 Top [47:32] Register */\r
+} GmacSa;\r
+/** \brief Gmac hardware registers */\r
+#define GMACSA_NUMBER 4\r
+typedef struct {\r
+  __IO uint32_t GMAC_NCR;               /**< \brief (Gmac Offset: 0x000) Network Control Register */\r
+  __IO uint32_t GMAC_NCFGR;             /**< \brief (Gmac Offset: 0x004) Network Configuration Register */\r
+  __I  uint32_t GMAC_NSR;               /**< \brief (Gmac Offset: 0x008) Network Status Register */\r
+  __IO uint32_t GMAC_UR;                /**< \brief (Gmac Offset: 0x00C) User Register */\r
+  __IO uint32_t GMAC_DCFGR;             /**< \brief (Gmac Offset: 0x010) DMA Configuration Register */\r
+  __IO uint32_t GMAC_TSR;               /**< \brief (Gmac Offset: 0x014) Transmit Status Register */\r
+  __IO uint32_t GMAC_RBQB;              /**< \brief (Gmac Offset: 0x018) Receive Buffer Queue Base Address */\r
+  __IO uint32_t GMAC_TBQB;              /**< \brief (Gmac Offset: 0x01C) Transmit Buffer Queue Base Address */\r
+  __IO uint32_t GMAC_RSR;               /**< \brief (Gmac Offset: 0x020) Receive Status Register */\r
+  __I  uint32_t GMAC_ISR;               /**< \brief (Gmac Offset: 0x024) Interrupt Status Register */\r
+  __O  uint32_t GMAC_IER;               /**< \brief (Gmac Offset: 0x028) Interrupt Enable Register */\r
+  __O  uint32_t GMAC_IDR;               /**< \brief (Gmac Offset: 0x02C) Interrupt Disable Register */\r
+  __I  uint32_t GMAC_IMR;               /**< \brief (Gmac Offset: 0x030) Interrupt Mask Register */\r
+  __IO uint32_t GMAC_MAN;               /**< \brief (Gmac Offset: 0x034) PHY Maintenance Register */\r
+  __I  uint32_t GMAC_RPQ;               /**< \brief (Gmac Offset: 0x038) Received Pause Quantum Register */\r
+  __IO uint32_t GMAC_TPQ;               /**< \brief (Gmac Offset: 0x03C) Transmit Pause Quantum Register */\r
+  __I  uint32_t Reserved1[16];\r
+  __IO uint32_t GMAC_HRB;               /**< \brief (Gmac Offset: 0x080) Hash Register Bottom [31:0] */\r
+  __IO uint32_t GMAC_HRT;               /**< \brief (Gmac Offset: 0x084) Hash Register Top [63:32] */\r
+       GmacSa   GMAC_SA[GMACSA_NUMBER]; /**< \brief (Gmac Offset: 0x088) 1 .. 4 */\r
+  __IO uint32_t GMAC_TIDM[4];           /**< \brief (Gmac Offset: 0x0A8) Type ID Match 1 Register */\r
+  __IO uint32_t GMAC_WOL;               /**< \brief (Gmac Offset: 0x0B8) Wake on LAN Register */\r
+  __IO uint32_t GMAC_IPGS;              /**< \brief (Gmac Offset: 0x0BC) IPG Stretch Register */\r
+  __IO uint32_t GMAC_SVLAN;             /**< \brief (Gmac Offset: 0x0C0) Stacked VLAN Register */\r
+  __IO uint32_t GMAC_TPFCP;             /**< \brief (Gmac Offset: 0x0C4) Transmit PFC Pause Register */\r
+  __IO uint32_t GMAC_SAMB1;             /**< \brief (Gmac Offset: 0x0C8) Specific Address 1 Mask Bottom [31:0] Register */\r
+  __IO uint32_t GMAC_SAMT1;             /**< \brief (Gmac Offset: 0x0CC) Specific Address 1 Mask Top [47:32] Register */\r
+  __I  uint32_t Reserved2[12];\r
+  __I  uint32_t GMAC_OTLO;              /**< \brief (Gmac Offset: 0x100) Octets Transmitted [31:0] Register */\r
+  __I  uint32_t GMAC_OTHI;              /**< \brief (Gmac Offset: 0x104) Octets Transmitted [47:32] Register */\r
+  __I  uint32_t GMAC_FT;                /**< \brief (Gmac Offset: 0x108) Frames Transmitted Register */\r
+  __I  uint32_t GMAC_BCFT;              /**< \brief (Gmac Offset: 0x10C) Broadcast Frames Transmitted Register */\r
+  __I  uint32_t GMAC_MFT;               /**< \brief (Gmac Offset: 0x110) Multicast Frames Transmitted Register */\r
+  __I  uint32_t GMAC_PFT;               /**< \brief (Gmac Offset: 0x114) Pause Frames Transmitted Register */\r
+  __I  uint32_t GMAC_BFT64;             /**< \brief (Gmac Offset: 0x118) 64 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_TBFT127;           /**< \brief (Gmac Offset: 0x11C) 65 to 127 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_TBFT255;           /**< \brief (Gmac Offset: 0x120) 128 to 255 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_TBFT511;           /**< \brief (Gmac Offset: 0x124) 256 to 511 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_TBFT1023;          /**< \brief (Gmac Offset: 0x128) 512 to 1023 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_TBFT1518;          /**< \brief (Gmac Offset: 0x12C) 1024 to 1518 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_GTBFT1518;         /**< \brief (Gmac Offset: 0x130) Greater Than 1518 Byte Frames Transmitted Register */\r
+  __I  uint32_t GMAC_TUR;               /**< \brief (Gmac Offset: 0x134) Transmit Under Runs Register */\r
+  __I  uint32_t GMAC_SCF;               /**< \brief (Gmac Offset: 0x138) Single Collision Frames Register */\r
+  __I  uint32_t GMAC_MCF;               /**< \brief (Gmac Offset: 0x13C) Multiple Collision Frames Register */\r
+  __I  uint32_t GMAC_EC;                /**< \brief (Gmac Offset: 0x140) Excessive Collisions Register */\r
+  __I  uint32_t GMAC_LC;                /**< \brief (Gmac Offset: 0x144) Late Collisions Register */\r
+  __I  uint32_t GMAC_DTF;               /**< \brief (Gmac Offset: 0x148) Deferred Transmission Frames Register */\r
+  __I  uint32_t GMAC_CSE;               /**< \brief (Gmac Offset: 0x14C) Carrier Sense Errors Register */\r
+  __I  uint32_t GMAC_ORLO;              /**< \brief (Gmac Offset: 0x150) Octets Received [31:0] Received */\r
+  __I  uint32_t GMAC_ORHI;              /**< \brief (Gmac Offset: 0x154) Octets Received [47:32] Received */\r
+  __I  uint32_t GMAC_FR;                /**< \brief (Gmac Offset: 0x158) Frames Received Register */\r
+  __I  uint32_t GMAC_BCFR;              /**< \brief (Gmac Offset: 0x15C) Broadcast Frames Received Register */\r
+  __I  uint32_t GMAC_MFR;               /**< \brief (Gmac Offset: 0x160) Multicast Frames Received Register */\r
+  __I  uint32_t GMAC_PFR;               /**< \brief (Gmac Offset: 0x164) Pause Frames Received Register */\r
+  __I  uint32_t GMAC_BFR64;             /**< \brief (Gmac Offset: 0x168) 64 Byte Frames Received Register */\r
+  __I  uint32_t GMAC_TBFR127;           /**< \brief (Gmac Offset: 0x16C) 65 to 127 Byte Frames Received Register */\r
+  __I  uint32_t GMAC_TBFR255;           /**< \brief (Gmac Offset: 0x170) 128 to 255 Byte Frames Received Register */\r
+  __I  uint32_t GMAC_TBFR511;           /**< \brief (Gmac Offset: 0x174) 256 to 511Byte Frames Received Register */\r
+  __I  uint32_t GMAC_TBFR1023;          /**< \brief (Gmac Offset: 0x178) 512 to 1023 Byte Frames Received Register */\r
+  __I  uint32_t GMAC_TBFR1518;          /**< \brief (Gmac Offset: 0x17C) 1024 to 1518 Byte Frames Received Register */\r
+  __I  uint32_t GMAC_TMXBFR;            /**< \brief (Gmac Offset: 0x180) 1519 to Maximum Byte Frames Received Register */\r
+  __I  uint32_t GMAC_UFR;               /**< \brief (Gmac Offset: 0x184) Undersize Frames Received Register */\r
+  __I  uint32_t GMAC_OFR;               /**< \brief (Gmac Offset: 0x188) Oversize Frames Received Register */\r
+  __I  uint32_t GMAC_JR;                /**< \brief (Gmac Offset: 0x18C) Jabbers Received Register */\r
+  __I  uint32_t GMAC_FCSE;              /**< \brief (Gmac Offset: 0x190) Frame Check Sequence Errors Register */\r
+  __I  uint32_t GMAC_LFFE;              /**< \brief (Gmac Offset: 0x194) Length Field Frame Errors Register */\r
+  __I  uint32_t GMAC_RSE;               /**< \brief (Gmac Offset: 0x198) Receive Symbol Errors Register */\r
+  __I  uint32_t GMAC_AE;                /**< \brief (Gmac Offset: 0x19C) Alignment Errors Register */\r
+  __I  uint32_t GMAC_RRE;               /**< \brief (Gmac Offset: 0x1A0) Receive Resource Errors Register */\r
+  __I  uint32_t GMAC_ROE;               /**< \brief (Gmac Offset: 0x1A4) Receive Overrun Register */\r
+  __I  uint32_t GMAC_IHCE;              /**< \brief (Gmac Offset: 0x1A8) IP Header Checksum Errors Register */\r
+  __I  uint32_t GMAC_TCE;               /**< \brief (Gmac Offset: 0x1AC) TCP Checksum Errors Register */\r
+  __I  uint32_t GMAC_UCE;               /**< \brief (Gmac Offset: 0x1B0) UDP Checksum Errors Register */\r
+  __I  uint32_t Reserved3[5];\r
+  __IO uint32_t GMAC_TSSS;              /**< \brief (Gmac Offset: 0x1C8) 1588 Timer Sync Strobe Seconds Register */\r
+  __IO uint32_t GMAC_TSSN;              /**< \brief (Gmac Offset: 0x1CC) 1588 Timer Sync Strobe Nanoseconds Register */\r
+  __IO uint32_t GMAC_TS;                /**< \brief (Gmac Offset: 0x1D0) 1588 Timer Seconds Register */\r
+  __IO uint32_t GMAC_TN;                /**< \brief (Gmac Offset: 0x1D4) 1588 Timer Nanoseconds Register */\r
+  __O  uint32_t GMAC_TA;                /**< \brief (Gmac Offset: 0x1D8) 1588 Timer Adjust Register */\r
+  __IO uint32_t GMAC_TI;                /**< \brief (Gmac Offset: 0x1DC) 1588 Timer Increment Register */\r
+  __I  uint32_t GMAC_EFTS;              /**< \brief (Gmac Offset: 0x1E0) PTP Event Frame Transmitted Seconds */\r
+  __I  uint32_t GMAC_EFTN;              /**< \brief (Gmac Offset: 0x1E4) PTP Event Frame Transmitted Nanoseconds */\r
+  __I  uint32_t GMAC_EFRS;              /**< \brief (Gmac Offset: 0x1E8) PTP Event Frame Received Seconds */\r
+  __I  uint32_t GMAC_EFRN;              /**< \brief (Gmac Offset: 0x1EC) PTP Event Frame Received Nanoseconds */\r
+  __I  uint32_t GMAC_PEFTS;             /**< \brief (Gmac Offset: 0x1F0) PTP Peer Event Frame Transmitted Seconds */\r
+  __I  uint32_t GMAC_PEFTN;             /**< \brief (Gmac Offset: 0x1F4) PTP Peer Event Frame Transmitted Nanoseconds */\r
+  __I  uint32_t GMAC_PEFRS;             /**< \brief (Gmac Offset: 0x1F8) PTP Peer Event Frame Received Seconds */\r
+  __I  uint32_t GMAC_PEFRN;             /**< \brief (Gmac Offset: 0x1FC) PTP Peer Event Frame Received Nanoseconds */\r
+} Gmac;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- GMAC_NCR : (GMAC Offset: 0x000) Network Control Register -------- */\r
+#define GMAC_NCR_LBL (0x1u << 1) /**< \brief (GMAC_NCR) Loop Back Local */\r
+#define GMAC_NCR_RXEN (0x1u << 2) /**< \brief (GMAC_NCR) Receive Enable */\r
+#define GMAC_NCR_TXEN (0x1u << 3) /**< \brief (GMAC_NCR) Transmit Enable */\r
+#define GMAC_NCR_MPE (0x1u << 4) /**< \brief (GMAC_NCR) Management Port Enable */\r
+#define GMAC_NCR_CLRSTAT (0x1u << 5) /**< \brief (GMAC_NCR) Clear Statistics Registers */\r
+#define GMAC_NCR_INCSTAT (0x1u << 6) /**< \brief (GMAC_NCR) Increment Statistics Registers */\r
+#define GMAC_NCR_WESTAT (0x1u << 7) /**< \brief (GMAC_NCR) Write Enable for Statistics Registers */\r
+#define GMAC_NCR_BP (0x1u << 8) /**< \brief (GMAC_NCR) Back pressure */\r
+#define GMAC_NCR_TSTART (0x1u << 9) /**< \brief (GMAC_NCR) Start Transmission */\r
+#define GMAC_NCR_THALT (0x1u << 10) /**< \brief (GMAC_NCR) Transmit Halt */\r
+#define GMAC_NCR_TXPF (0x1u << 11) /**< \brief (GMAC_NCR) Transmit Pause Frame */\r
+#define GMAC_NCR_TXZQPF (0x1u << 12) /**< \brief (GMAC_NCR) Transmit Zero Quantum Pause Frame */\r
+#define GMAC_NCR_RDS (0x1u << 14) /**< \brief (GMAC_NCR) Read Snapshot */\r
+#define GMAC_NCR_SRTSM (0x1u << 15) /**< \brief (GMAC_NCR) Store Receive Time Stamp to Memory */\r
+#define GMAC_NCR_ENPBPR (0x1u << 16) /**< \brief (GMAC_NCR) Enable PFC Priority-based Pause Reception */\r
+#define GMAC_NCR_TXPBPF (0x1u << 17) /**< \brief (GMAC_NCR) Transmit PFC Priority-based Pause Frame */\r
+#define GMAC_NCR_FNP (0x1u << 18) /**< \brief (GMAC_NCR) Flush Next Packet */\r
+/* -------- GMAC_NCFGR : (GMAC Offset: 0x004) Network Configuration Register -------- */\r
+#define GMAC_NCFGR_SPD (0x1u << 0) /**< \brief (GMAC_NCFGR) Speed */\r
+#define GMAC_NCFGR_FD (0x1u << 1) /**< \brief (GMAC_NCFGR) Full Duplex */\r
+#define GMAC_NCFGR_DNVLAN (0x1u << 2) /**< \brief (GMAC_NCFGR) Discard Non-VLAN FRAMES */\r
+#define GMAC_NCFGR_JFRAME (0x1u << 3) /**< \brief (GMAC_NCFGR) Jumbo Frame Size */\r
+#define GMAC_NCFGR_CAF (0x1u << 4) /**< \brief (GMAC_NCFGR) Copy All Frames */\r
+#define GMAC_NCFGR_NBC (0x1u << 5) /**< \brief (GMAC_NCFGR) No Broadcast */\r
+#define GMAC_NCFGR_MTIHEN (0x1u << 6) /**< \brief (GMAC_NCFGR) Multicast Hash Enable */\r
+#define GMAC_NCFGR_UNIHEN (0x1u << 7) /**< \brief (GMAC_NCFGR) Unicast Hash Enable */\r
+#define GMAC_NCFGR_MAXFS (0x1u << 8) /**< \brief (GMAC_NCFGR) 1536 Maximum Frame Size */\r
+#define GMAC_NCFGR_RTY (0x1u << 12) /**< \brief (GMAC_NCFGR) Retry Test */\r
+#define GMAC_NCFGR_PEN (0x1u << 13) /**< \brief (GMAC_NCFGR) Pause Enable */\r
+#define GMAC_NCFGR_RXBUFO_Pos 14\r
+#define GMAC_NCFGR_RXBUFO_Msk (0x3u << GMAC_NCFGR_RXBUFO_Pos) /**< \brief (GMAC_NCFGR) Receive Buffer Offset */\r
+#define GMAC_NCFGR_RXBUFO(value) ((GMAC_NCFGR_RXBUFO_Msk & ((value) << GMAC_NCFGR_RXBUFO_Pos)))\r
+#define GMAC_NCFGR_LFERD (0x1u << 16) /**< \brief (GMAC_NCFGR) Length Field Error Frame Discard */\r
+#define GMAC_NCFGR_RFCS (0x1u << 17) /**< \brief (GMAC_NCFGR) Remove FCS */\r
+#define GMAC_NCFGR_CLK_Pos 18\r
+#define GMAC_NCFGR_CLK_Msk (0x7u << GMAC_NCFGR_CLK_Pos) /**< \brief (GMAC_NCFGR) MDC CLock Division */\r
+#define   GMAC_NCFGR_CLK_MCK_8 (0x0u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 8 (MCK up to 20 MHz) */\r
+#define   GMAC_NCFGR_CLK_MCK_16 (0x1u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 16 (MCK up to 40 MHz) */\r
+#define   GMAC_NCFGR_CLK_MCK_32 (0x2u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 32 (MCK up to 80 MHz) */\r
+#define   GMAC_NCFGR_CLK_MCK_48 (0x3u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 48 (MCK up to 120MHz) */\r
+#define   GMAC_NCFGR_CLK_MCK_64 (0x4u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 64 (MCK up to 160 MHz) */\r
+#define   GMAC_NCFGR_CLK_MCK_96 (0x5u << 18) /**< \brief (GMAC_NCFGR) MCK divided by 96 (MCK up to 240 MHz) */\r
+#define GMAC_NCFGR_DBW_Pos 21\r
+#define GMAC_NCFGR_DBW_Msk (0x3u << GMAC_NCFGR_DBW_Pos) /**< \brief (GMAC_NCFGR) Data Bus Width */\r
+#define   GMAC_NCFGR_DBW_DBW32 (0x0u << 21) /**< \brief (GMAC_NCFGR) 32-bit data bus width */\r
+#define   GMAC_NCFGR_DBW_DBW64 (0x1u << 21) /**< \brief (GMAC_NCFGR) 64-bit data bus width */\r
+#define GMAC_NCFGR_DCPF (0x1u << 23) /**< \brief (GMAC_NCFGR) Disable Copy of Pause Frames */\r
+#define GMAC_NCFGR_RXCOEN (0x1u << 24) /**< \brief (GMAC_NCFGR) Receive Checksum Offload Enable */\r
+#define GMAC_NCFGR_EFRHD (0x1u << 25) /**< \brief (GMAC_NCFGR) Enable Frames Received in Half Duplex */\r
+#define GMAC_NCFGR_IRXFCS (0x1u << 26) /**< \brief (GMAC_NCFGR) Ignore RX FCS */\r
+#define GMAC_NCFGR_IPGSEN (0x1u << 28) /**< \brief (GMAC_NCFGR) IP Stretch Enable */\r
+#define GMAC_NCFGR_RXBP (0x1u << 29) /**< \brief (GMAC_NCFGR) Receive Bad Preamble */\r
+#define GMAC_NCFGR_IRXER (0x1u << 30) /**< \brief (GMAC_NCFGR) Ignore IPG GRXER */\r
+/* -------- GMAC_NSR : (GMAC Offset: 0x008) Network Status Register -------- */\r
+#define GMAC_NSR_MDIO (0x1u << 1) /**< \brief (GMAC_NSR) MDIO Input Status */\r
+#define GMAC_NSR_IDLE (0x1u << 2) /**< \brief (GMAC_NSR) PHY Management Logic Idle */\r
+/* -------- GMAC_UR : (GMAC Offset: 0x00C) User Register -------- */\r
+#define GMAC_UR_RMII (0x1u << 0) /**< \brief (GMAC_UR) Reduced MII Mode */\r
+/* -------- GMAC_DCFGR : (GMAC Offset: 0x010) DMA Configuration Register -------- */\r
+#define GMAC_DCFGR_FBLDO_Pos 0\r
+#define GMAC_DCFGR_FBLDO_Msk (0x1fu << GMAC_DCFGR_FBLDO_Pos) /**< \brief (GMAC_DCFGR) Fixed Burst Length for DMA Data Operations: */\r
+#define   GMAC_DCFGR_FBLDO_SINGLE (0x1u << 0) /**< \brief (GMAC_DCFGR) 00001: Always use SINGLE AHB bursts */\r
+#define   GMAC_DCFGR_FBLDO_INCR4 (0x4u << 0) /**< \brief (GMAC_DCFGR) 001xx: Attempt to use INCR4 AHB bursts (Default) */\r
+#define   GMAC_DCFGR_FBLDO_INCR8 (0x8u << 0) /**< \brief (GMAC_DCFGR) 01xxx: Attempt to use INCR8 AHB bursts */\r
+#define   GMAC_DCFGR_FBLDO_INCR16 (0x10u << 0) /**< \brief (GMAC_DCFGR) 1xxxx: Attempt to use INCR16 AHB bursts */\r
+#define GMAC_DCFGR_ESMA (0x1u << 6) /**< \brief (GMAC_DCFGR) Endian Swap Mode Enable for Management Descriptor Accesses */\r
+#define GMAC_DCFGR_ESPA (0x1u << 7) /**< \brief (GMAC_DCFGR) Endian Swap Mode Enable for Packet Data Accesses */\r
+#define GMAC_DCFGR_TXCOEN (0x1u << 11) /**< \brief (GMAC_DCFGR) Transmitter Checksum Generation Offload Enable */\r
+#define GMAC_DCFGR_DRBS_Pos 16\r
+#define GMAC_DCFGR_DRBS_Msk (0xffu << GMAC_DCFGR_DRBS_Pos) /**< \brief (GMAC_DCFGR) DMA Receive Buffer Size */\r
+#define GMAC_DCFGR_DRBS(value) ((GMAC_DCFGR_DRBS_Msk & ((value) << GMAC_DCFGR_DRBS_Pos)))\r
+/* -------- GMAC_TSR : (GMAC Offset: 0x014) Transmit Status Register -------- */\r
+#define GMAC_TSR_UBR (0x1u << 0) /**< \brief (GMAC_TSR) Used Bit Read */\r
+#define GMAC_TSR_COL (0x1u << 1) /**< \brief (GMAC_TSR) Collision Occurred */\r
+#define GMAC_TSR_RLE (0x1u << 2) /**< \brief (GMAC_TSR) Retry Limit Exceeded */\r
+#define GMAC_TSR_TXGO (0x1u << 3) /**< \brief (GMAC_TSR) Transmit Go */\r
+#define GMAC_TSR_TFC (0x1u << 4) /**< \brief (GMAC_TSR) Transmit Frame Corruption due to AHB error */\r
+#define GMAC_TSR_TXCOMP (0x1u << 5) /**< \brief (GMAC_TSR) Transmit Complete */\r
+#define GMAC_TSR_UND (0x1u << 6) /**< \brief (GMAC_TSR) Transmit Under Run */\r
+#define GMAC_TSR_HRESP (0x1u << 8) /**< \brief (GMAC_TSR) HRESP Not OK */\r
+/* -------- GMAC_RBQB : (GMAC Offset: 0x018) Receive Buffer Queue Base Address -------- */\r
+#define GMAC_RBQB_ADDR_Pos 2\r
+#define GMAC_RBQB_ADDR_Msk (0x3fffffffu << GMAC_RBQB_ADDR_Pos) /**< \brief (GMAC_RBQB) Receive buffer queue base address */\r
+#define GMAC_RBQB_ADDR(value) ((GMAC_RBQB_ADDR_Msk & ((value) << GMAC_RBQB_ADDR_Pos)))\r
+/* -------- GMAC_TBQB : (GMAC Offset: 0x01C) Transmit Buffer Queue Base Address -------- */\r
+#define GMAC_TBQB_ADDR_Pos 2\r
+#define GMAC_TBQB_ADDR_Msk (0x3fffffffu << GMAC_TBQB_ADDR_Pos) /**< \brief (GMAC_TBQB) Transmit Buffer Queue Base Address */\r
+#define GMAC_TBQB_ADDR(value) ((GMAC_TBQB_ADDR_Msk & ((value) << GMAC_TBQB_ADDR_Pos)))\r
+/* -------- GMAC_RSR : (GMAC Offset: 0x020) Receive Status Register -------- */\r
+#define GMAC_RSR_BNA (0x1u << 0) /**< \brief (GMAC_RSR) Buffer Not Available */\r
+#define GMAC_RSR_REC (0x1u << 1) /**< \brief (GMAC_RSR) Frame Received */\r
+#define GMAC_RSR_RXOVR (0x1u << 2) /**< \brief (GMAC_RSR) Receive Overrun */\r
+#define GMAC_RSR_HNO (0x1u << 3) /**< \brief (GMAC_RSR) HRESP Not OK */\r
+/* -------- GMAC_ISR : (GMAC Offset: 0x024) Interrupt Status Register -------- */\r
+#define GMAC_ISR_MFS (0x1u << 0) /**< \brief (GMAC_ISR) Management Frame Sent */\r
+#define GMAC_ISR_RCOMP (0x1u << 1) /**< \brief (GMAC_ISR) Receive Complete */\r
+#define GMAC_ISR_RXUBR (0x1u << 2) /**< \brief (GMAC_ISR) RX Used Bit Read */\r
+#define GMAC_ISR_TXUBR (0x1u << 3) /**< \brief (GMAC_ISR) TX Used Bit Read */\r
+#define GMAC_ISR_TUR (0x1u << 4) /**< \brief (GMAC_ISR) Transmit Under Run */\r
+#define GMAC_ISR_RLEX (0x1u << 5) /**< \brief (GMAC_ISR) Retry Limit Exceeded */\r
+#define GMAC_ISR_TFC (0x1u << 6) /**< \brief (GMAC_ISR) Transmit Frame Corruption due to AHB error */\r
+#define GMAC_ISR_TCOMP (0x1u << 7) /**< \brief (GMAC_ISR) Transmit Complete */\r
+#define GMAC_ISR_ROVR (0x1u << 10) /**< \brief (GMAC_ISR) Receive Overrun */\r
+#define GMAC_ISR_HRESP (0x1u << 11) /**< \brief (GMAC_ISR) HRESP Not OK */\r
+#define GMAC_ISR_PFNZ (0x1u << 12) /**< \brief (GMAC_ISR) Pause Frame with Non-zero Pause Quantum Received */\r
+#define GMAC_ISR_PTZ (0x1u << 13) /**< \brief (GMAC_ISR) Pause Time Zero */\r
+#define GMAC_ISR_PFTR (0x1u << 14) /**< \brief (GMAC_ISR) Pause Frame Transmitted */\r
+#define GMAC_ISR_DRQFR (0x1u << 18) /**< \brief (GMAC_ISR) PTP Delay Request Frame Received */\r
+#define GMAC_ISR_SFR (0x1u << 19) /**< \brief (GMAC_ISR) PTP Sync Frame Received */\r
+#define GMAC_ISR_DRQFT (0x1u << 20) /**< \brief (GMAC_ISR) PTP Delay Request Frame Transmitted */\r
+#define GMAC_ISR_SFT (0x1u << 21) /**< \brief (GMAC_ISR) PTP Sync Frame Transmitted */\r
+#define GMAC_ISR_PDRQFR (0x1u << 22) /**< \brief (GMAC_ISR) PDelay Request Frame Received */\r
+#define GMAC_ISR_PDRSFR (0x1u << 23) /**< \brief (GMAC_ISR) PDelay Response Frame Received */\r
+#define GMAC_ISR_PDRQFT (0x1u << 24) /**< \brief (GMAC_ISR) PDelay Request Frame Transmitted */\r
+#define GMAC_ISR_PDRSFT (0x1u << 25) /**< \brief (GMAC_ISR) PDelay Response Frame Transmitted */\r
+#define GMAC_ISR_SRI (0x1u << 26) /**< \brief (GMAC_ISR) TSU Seconds Register Increment */\r
+#define GMAC_ISR_WOL (0x1u << 28) /**< \brief (GMAC_ISR) Wake On LAN */\r
+/* -------- GMAC_IER : (GMAC Offset: 0x028) Interrupt Enable Register -------- */\r
+#define GMAC_IER_MFS (0x1u << 0) /**< \brief (GMAC_IER) Management Frame Sent */\r
+#define GMAC_IER_RCOMP (0x1u << 1) /**< \brief (GMAC_IER) Receive Complete */\r
+#define GMAC_IER_RXUBR (0x1u << 2) /**< \brief (GMAC_IER) RX Used Bit Read */\r
+#define GMAC_IER_TXUBR (0x1u << 3) /**< \brief (GMAC_IER) TX Used Bit Read */\r
+#define GMAC_IER_TUR (0x1u << 4) /**< \brief (GMAC_IER) Transmit Under Run */\r
+#define GMAC_IER_RLEX (0x1u << 5) /**< \brief (GMAC_IER) Retry Limit Exceeded or Late Collision */\r
+#define GMAC_IER_TFC (0x1u << 6) /**< \brief (GMAC_IER) Transmit Frame Corruption due to AHB error */\r
+#define GMAC_IER_TCOMP (0x1u << 7) /**< \brief (GMAC_IER) Transmit Complete */\r
+#define GMAC_IER_ROVR (0x1u << 10) /**< \brief (GMAC_IER) Receive Overrun */\r
+#define GMAC_IER_HRESP (0x1u << 11) /**< \brief (GMAC_IER) HRESP Not OK */\r
+#define GMAC_IER_PFNZ (0x1u << 12) /**< \brief (GMAC_IER) Pause Frame with Non-zero Pause Quantum Received */\r
+#define GMAC_IER_PTZ (0x1u << 13) /**< \brief (GMAC_IER) Pause Time Zero */\r
+#define GMAC_IER_PFTR (0x1u << 14) /**< \brief (GMAC_IER) Pause Frame Transmitted */\r
+#define GMAC_IER_EXINT (0x1u << 15) /**< \brief (GMAC_IER) External Interrupt */\r
+#define GMAC_IER_DRQFR (0x1u << 18) /**< \brief (GMAC_IER) PTP Delay Request Frame Received */\r
+#define GMAC_IER_SFR (0x1u << 19) /**< \brief (GMAC_IER) PTP Sync Frame Received */\r
+#define GMAC_IER_DRQFT (0x1u << 20) /**< \brief (GMAC_IER) PTP Delay Request Frame Transmitted */\r
+#define GMAC_IER_SFT (0x1u << 21) /**< \brief (GMAC_IER) PTP Sync Frame Transmitted */\r
+#define GMAC_IER_PDRQFR (0x1u << 22) /**< \brief (GMAC_IER) PDelay Request Frame Received */\r
+#define GMAC_IER_PDRSFR (0x1u << 23) /**< \brief (GMAC_IER) PDelay Response Frame Received */\r
+#define GMAC_IER_PDRQFT (0x1u << 24) /**< \brief (GMAC_IER) PDelay Request Frame Transmitted */\r
+#define GMAC_IER_PDRSFT (0x1u << 25) /**< \brief (GMAC_IER) PDelay Response Frame Transmitted */\r
+#define GMAC_IER_SRI (0x1u << 26) /**< \brief (GMAC_IER) TSU Seconds Register Increment */\r
+#define GMAC_IER_WOL (0x1u << 28) /**< \brief (GMAC_IER) Wake On LAN */\r
+/* -------- GMAC_IDR : (GMAC Offset: 0x02C) Interrupt Disable Register -------- */\r
+#define GMAC_IDR_MFS (0x1u << 0) /**< \brief (GMAC_IDR) Management Frame Sent */\r
+#define GMAC_IDR_RCOMP (0x1u << 1) /**< \brief (GMAC_IDR) Receive Complete */\r
+#define GMAC_IDR_RXUBR (0x1u << 2) /**< \brief (GMAC_IDR) RX Used Bit Read */\r
+#define GMAC_IDR_TXUBR (0x1u << 3) /**< \brief (GMAC_IDR) TX Used Bit Read */\r
+#define GMAC_IDR_TUR (0x1u << 4) /**< \brief (GMAC_IDR) Transmit Under Run */\r
+#define GMAC_IDR_RLEX (0x1u << 5) /**< \brief (GMAC_IDR) Retry Limit Exceeded or Late Collision */\r
+#define GMAC_IDR_TFC (0x1u << 6) /**< \brief (GMAC_IDR) Transmit Frame Corruption due to AHB error */\r
+#define GMAC_IDR_TCOMP (0x1u << 7) /**< \brief (GMAC_IDR) Transmit Complete */\r
+#define GMAC_IDR_ROVR (0x1u << 10) /**< \brief (GMAC_IDR) Receive Overrun */\r
+#define GMAC_IDR_HRESP (0x1u << 11) /**< \brief (GMAC_IDR) HRESP Not OK */\r
+#define GMAC_IDR_PFNZ (0x1u << 12) /**< \brief (GMAC_IDR) Pause Frame with Non-zero Pause Quantum Received */\r
+#define GMAC_IDR_PTZ (0x1u << 13) /**< \brief (GMAC_IDR) Pause Time Zero */\r
+#define GMAC_IDR_PFTR (0x1u << 14) /**< \brief (GMAC_IDR) Pause Frame Transmitted */\r
+#define GMAC_IDR_EXINT (0x1u << 15) /**< \brief (GMAC_IDR) External Interrupt */\r
+#define GMAC_IDR_DRQFR (0x1u << 18) /**< \brief (GMAC_IDR) PTP Delay Request Frame Received */\r
+#define GMAC_IDR_SFR (0x1u << 19) /**< \brief (GMAC_IDR) PTP Sync Frame Received */\r
+#define GMAC_IDR_DRQFT (0x1u << 20) /**< \brief (GMAC_IDR) PTP Delay Request Frame Transmitted */\r
+#define GMAC_IDR_SFT (0x1u << 21) /**< \brief (GMAC_IDR) PTP Sync Frame Transmitted */\r
+#define GMAC_IDR_PDRQFR (0x1u << 22) /**< \brief (GMAC_IDR) PDelay Request Frame Received */\r
+#define GMAC_IDR_PDRSFR (0x1u << 23) /**< \brief (GMAC_IDR) PDelay Response Frame Received */\r
+#define GMAC_IDR_PDRQFT (0x1u << 24) /**< \brief (GMAC_IDR) PDelay Request Frame Transmitted */\r
+#define GMAC_IDR_PDRSFT (0x1u << 25) /**< \brief (GMAC_IDR) PDelay Response Frame Transmitted */\r
+#define GMAC_IDR_SRI (0x1u << 26) /**< \brief (GMAC_IDR) TSU Seconds Register Increment */\r
+#define GMAC_IDR_WOL (0x1u << 28) /**< \brief (GMAC_IDR) Wake On LAN */\r
+/* -------- GMAC_IMR : (GMAC Offset: 0x030) Interrupt Mask Register -------- */\r
+#define GMAC_IMR_MFS (0x1u << 0) /**< \brief (GMAC_IMR) Management Frame Sent */\r
+#define GMAC_IMR_RCOMP (0x1u << 1) /**< \brief (GMAC_IMR) Receive Complete */\r
+#define GMAC_IMR_RXUBR (0x1u << 2) /**< \brief (GMAC_IMR) RX Used Bit Read */\r
+#define GMAC_IMR_TXUBR (0x1u << 3) /**< \brief (GMAC_IMR) TX Used Bit Read */\r
+#define GMAC_IMR_TUR (0x1u << 4) /**< \brief (GMAC_IMR) Transmit Under Run */\r
+#define GMAC_IMR_RLEX (0x1u << 5) /**< \brief (GMAC_IMR) Retry Limit Exceeded */\r
+#define GMAC_IMR_TFC (0x1u << 6) /**< \brief (GMAC_IMR) Transmit Frame Corruption due to AHB error */\r
+#define GMAC_IMR_TCOMP (0x1u << 7) /**< \brief (GMAC_IMR) Transmit Complete */\r
+#define GMAC_IMR_ROVR (0x1u << 10) /**< \brief (GMAC_IMR) Receive Overrun */\r
+#define GMAC_IMR_HRESP (0x1u << 11) /**< \brief (GMAC_IMR) HRESP Not OK */\r
+#define GMAC_IMR_PFNZ (0x1u << 12) /**< \brief (GMAC_IMR) Pause Frame with Non-zero Pause Quantum Received */\r
+#define GMAC_IMR_PTZ (0x1u << 13) /**< \brief (GMAC_IMR) Pause Time Zero */\r
+#define GMAC_IMR_PFTR (0x1u << 14) /**< \brief (GMAC_IMR) Pause Frame Transmitted */\r
+#define GMAC_IMR_EXINT (0x1u << 15) /**< \brief (GMAC_IMR) External Interrupt */\r
+#define GMAC_IMR_DRQFR (0x1u << 18) /**< \brief (GMAC_IMR) PTP Delay Request Frame Received */\r
+#define GMAC_IMR_SFR (0x1u << 19) /**< \brief (GMAC_IMR) PTP Sync Frame Received */\r
+#define GMAC_IMR_DRQFT (0x1u << 20) /**< \brief (GMAC_IMR) PTP Delay Request Frame Transmitted */\r
+#define GMAC_IMR_SFT (0x1u << 21) /**< \brief (GMAC_IMR) PTP Sync Frame Transmitted */\r
+#define GMAC_IMR_PDRQFR (0x1u << 22) /**< \brief (GMAC_IMR) PDelay Request Frame Received */\r
+#define GMAC_IMR_PDRSFR (0x1u << 23) /**< \brief (GMAC_IMR) PDelay Response Frame Received */\r
+#define GMAC_IMR_PDRQFT (0x1u << 24) /**< \brief (GMAC_IMR) PDelay Request Frame Transmitted */\r
+#define GMAC_IMR_PDRSFT (0x1u << 25) /**< \brief (GMAC_IMR) PDelay Response Frame Transmitted */\r
+/* -------- GMAC_MAN : (GMAC Offset: 0x034) PHY Maintenance Register -------- */\r
+#define GMAC_MAN_DATA_Pos 0\r
+#define GMAC_MAN_DATA_Msk (0xffffu << GMAC_MAN_DATA_Pos) /**< \brief (GMAC_MAN) PHY Data */\r
+#define GMAC_MAN_DATA(value) ((GMAC_MAN_DATA_Msk & ((value) << GMAC_MAN_DATA_Pos)))\r
+#define GMAC_MAN_WTN_Pos 16\r
+#define GMAC_MAN_WTN_Msk (0x3u << GMAC_MAN_WTN_Pos) /**< \brief (GMAC_MAN) Write Ten */\r
+#define GMAC_MAN_WTN(value) ((GMAC_MAN_WTN_Msk & ((value) << GMAC_MAN_WTN_Pos)))\r
+#define GMAC_MAN_REGA_Pos 18\r
+#define GMAC_MAN_REGA_Msk (0x1fu << GMAC_MAN_REGA_Pos) /**< \brief (GMAC_MAN) Register Address */\r
+#define GMAC_MAN_REGA(value) ((GMAC_MAN_REGA_Msk & ((value) << GMAC_MAN_REGA_Pos)))\r
+#define GMAC_MAN_PHYA_Pos 23\r
+#define GMAC_MAN_PHYA_Msk (0x1fu << GMAC_MAN_PHYA_Pos) /**< \brief (GMAC_MAN) PHY Address */\r
+#define GMAC_MAN_PHYA(value) ((GMAC_MAN_PHYA_Msk & ((value) << GMAC_MAN_PHYA_Pos)))\r
+#define GMAC_MAN_OP_Pos 28\r
+#define GMAC_MAN_OP_Msk (0x3u << GMAC_MAN_OP_Pos) /**< \brief (GMAC_MAN) Operation */\r
+#define GMAC_MAN_OP(value) ((GMAC_MAN_OP_Msk & ((value) << GMAC_MAN_OP_Pos)))\r
+#define GMAC_MAN_CLTTO (0x1u << 30) /**< \brief (GMAC_MAN) Clause 22 Operation */\r
+#define GMAC_MAN_WZO (0x1u << 31) /**< \brief (GMAC_MAN) Write ZERO */\r
+/* -------- GMAC_RPQ : (GMAC Offset: 0x038) Received Pause Quantum Register -------- */\r
+#define GMAC_RPQ_RPQ_Pos 0\r
+#define GMAC_RPQ_RPQ_Msk (0xffffu << GMAC_RPQ_RPQ_Pos) /**< \brief (GMAC_RPQ) Received Pause Quantum */\r
+/* -------- GMAC_TPQ : (GMAC Offset: 0x03C) Transmit Pause Quantum Register -------- */\r
+#define GMAC_TPQ_TPQ_Pos 0\r
+#define GMAC_TPQ_TPQ_Msk (0xffffu << GMAC_TPQ_TPQ_Pos) /**< \brief (GMAC_TPQ) Transmit Pause Quantum */\r
+#define GMAC_TPQ_TPQ(value) ((GMAC_TPQ_TPQ_Msk & ((value) << GMAC_TPQ_TPQ_Pos)))\r
+/* -------- GMAC_HRB : (GMAC Offset: 0x080) Hash Register Bottom [31:0] -------- */\r
+#define GMAC_HRB_ADDR_Pos 0\r
+#define GMAC_HRB_ADDR_Msk (0xffffffffu << GMAC_HRB_ADDR_Pos) /**< \brief (GMAC_HRB) Hash Address */\r
+#define GMAC_HRB_ADDR(value) ((GMAC_HRB_ADDR_Msk & ((value) << GMAC_HRB_ADDR_Pos)))\r
+/* -------- GMAC_HRT : (GMAC Offset: 0x084) Hash Register Top [63:32] -------- */\r
+#define GMAC_HRT_ADDR_Pos 0\r
+#define GMAC_HRT_ADDR_Msk (0xffffffffu << GMAC_HRT_ADDR_Pos) /**< \brief (GMAC_HRT) Hash Address */\r
+#define GMAC_HRT_ADDR(value) ((GMAC_HRT_ADDR_Msk & ((value) << GMAC_HRT_ADDR_Pos)))\r
+/* -------- GMAC_SAB1 : (GMAC Offset: 0x088) Specific Address 1 Bottom [31:0] Register -------- */\r
+#define GMAC_SAB1_ADDR_Pos 0\r
+#define GMAC_SAB1_ADDR_Msk (0xffffffffu << GMAC_SAB1_ADDR_Pos) /**< \brief (GMAC_SAB1) Specific Address 1 */\r
+#define GMAC_SAB1_ADDR(value) ((GMAC_SAB1_ADDR_Msk & ((value) << GMAC_SAB1_ADDR_Pos)))\r
+/* -------- GMAC_SAT1 : (GMAC Offset: 0x08C) Specific Address 1 Top [47:32] Register -------- */\r
+#define GMAC_SAT1_ADDR_Pos 0\r
+#define GMAC_SAT1_ADDR_Msk (0xffffu << GMAC_SAT1_ADDR_Pos) /**< \brief (GMAC_SAT1) Specific Address 1 */\r
+#define GMAC_SAT1_ADDR(value) ((GMAC_SAT1_ADDR_Msk & ((value) << GMAC_SAT1_ADDR_Pos)))\r
+/* -------- GMAC_SAB2 : (GMAC Offset: 0x090) Specific Address 2 Bottom [31:0] Register -------- */\r
+#define GMAC_SAB2_ADDR_Pos 0\r
+#define GMAC_SAB2_ADDR_Msk (0xffffffffu << GMAC_SAB2_ADDR_Pos) /**< \brief (GMAC_SAB2) Specific Address 2 */\r
+#define GMAC_SAB2_ADDR(value) ((GMAC_SAB2_ADDR_Msk & ((value) << GMAC_SAB2_ADDR_Pos)))\r
+/* -------- GMAC_SAT2 : (GMAC Offset: 0x094) Specific Address 2 Top [47:32] Register -------- */\r
+#define GMAC_SAT2_ADDR_Pos 0\r
+#define GMAC_SAT2_ADDR_Msk (0xffffu << GMAC_SAT2_ADDR_Pos) /**< \brief (GMAC_SAT2) Specific Address 2 */\r
+#define GMAC_SAT2_ADDR(value) ((GMAC_SAT2_ADDR_Msk & ((value) << GMAC_SAT2_ADDR_Pos)))\r
+/* -------- GMAC_SAB3 : (GMAC Offset: 0x098) Specific Address 3 Bottom [31:0] Register -------- */\r
+#define GMAC_SAB3_ADDR_Pos 0\r
+#define GMAC_SAB3_ADDR_Msk (0xffffffffu << GMAC_SAB3_ADDR_Pos) /**< \brief (GMAC_SAB3) Specific Address 3 */\r
+#define GMAC_SAB3_ADDR(value) ((GMAC_SAB3_ADDR_Msk & ((value) << GMAC_SAB3_ADDR_Pos)))\r
+/* -------- GMAC_SAT3 : (GMAC Offset: 0x09C) Specific Address 3 Top [47:32] Register -------- */\r
+#define GMAC_SAT3_ADDR_Pos 0\r
+#define GMAC_SAT3_ADDR_Msk (0xffffu << GMAC_SAT3_ADDR_Pos) /**< \brief (GMAC_SAT3) Specific Address 3 */\r
+#define GMAC_SAT3_ADDR(value) ((GMAC_SAT3_ADDR_Msk & ((value) << GMAC_SAT3_ADDR_Pos)))\r
+/* -------- GMAC_SAB4 : (GMAC Offset: 0x0A0) Specific Address 4 Bottom [31:0] Register -------- */\r
+#define GMAC_SAB4_ADDR_Pos 0\r
+#define GMAC_SAB4_ADDR_Msk (0xffffffffu << GMAC_SAB4_ADDR_Pos) /**< \brief (GMAC_SAB4) Specific Address 4 */\r
+#define GMAC_SAB4_ADDR(value) ((GMAC_SAB4_ADDR_Msk & ((value) << GMAC_SAB4_ADDR_Pos)))\r
+/* -------- GMAC_SAT4 : (GMAC Offset: 0x0A4) Specific Address 4 Top [47:32] Register -------- */\r
+#define GMAC_SAT4_ADDR_Pos 0\r
+#define GMAC_SAT4_ADDR_Msk (0xffffu << GMAC_SAT4_ADDR_Pos) /**< \brief (GMAC_SAT4) Specific Address 4 */\r
+#define GMAC_SAT4_ADDR(value) ((GMAC_SAT4_ADDR_Msk & ((value) << GMAC_SAT4_ADDR_Pos)))\r
+/* -------- GMAC_TIDM[4] : (GMAC Offset: 0x0A8) Type ID Match 1 Register -------- */\r
+#define GMAC_TIDM_TID_Pos 0\r
+#define GMAC_TIDM_TID_Msk (0xffffu << GMAC_TIDM_TID_Pos) /**< \brief (GMAC_TIDM[4]) Type ID Match 1 */\r
+#define GMAC_TIDM_TID(value) ((GMAC_TIDM_TID_Msk & ((value) << GMAC_TIDM_TID_Pos)))\r
+/* -------- GMAC_WOL : (GMAC Offset: 0x0B8) Wake on LAN Register -------- */\r
+#define GMAC_WOL_IP_Pos 0\r
+#define GMAC_WOL_IP_Msk (0xffffu << GMAC_WOL_IP_Pos) /**< \brief (GMAC_WOL) ARP Request IP Address */\r
+#define GMAC_WOL_IP(value) ((GMAC_WOL_IP_Msk & ((value) << GMAC_WOL_IP_Pos)))\r
+#define GMAC_WOL_MAG (0x1u << 16) /**< \brief (GMAC_WOL) Magic Packet Event Enable */\r
+#define GMAC_WOL_ARP (0x1u << 17) /**< \brief (GMAC_WOL) ARP Request IP Address */\r
+#define GMAC_WOL_SA1 (0x1u << 18) /**< \brief (GMAC_WOL) Specific Address Register 1 Event Enable */\r
+#define GMAC_WOL_MTI (0x1u << 19) /**< \brief (GMAC_WOL) Multicast Hash Event Enable */\r
+/* -------- GMAC_IPGS : (GMAC Offset: 0x0BC) IPG Stretch Register -------- */\r
+#define GMAC_IPGS_FL_Pos 0\r
+#define GMAC_IPGS_FL_Msk (0xffffu << GMAC_IPGS_FL_Pos) /**< \brief (GMAC_IPGS) Frame Length */\r
+#define GMAC_IPGS_FL(value) ((GMAC_IPGS_FL_Msk & ((value) << GMAC_IPGS_FL_Pos)))\r
+/* -------- GMAC_SVLAN : (GMAC Offset: 0x0C0) Stacked VLAN Register -------- */\r
+#define GMAC_SVLAN_VLAN_TYPE_Pos 0\r
+#define GMAC_SVLAN_VLAN_TYPE_Msk (0xffffu << GMAC_SVLAN_VLAN_TYPE_Pos) /**< \brief (GMAC_SVLAN) User Defined VLAN_TYPE Field */\r
+#define GMAC_SVLAN_VLAN_TYPE(value) ((GMAC_SVLAN_VLAN_TYPE_Msk & ((value) << GMAC_SVLAN_VLAN_TYPE_Pos)))\r
+#define GMAC_SVLAN_ESVLAN (0x1u << 31) /**< \brief (GMAC_SVLAN) Enable Stacked VLAN Processing Mode */\r
+/* -------- GMAC_TPFCP : (GMAC Offset: 0x0C4) Transmit PFC Pause Register -------- */\r
+#define GMAC_TPFCP_PEV_Pos 0\r
+#define GMAC_TPFCP_PEV_Msk (0xffu << GMAC_TPFCP_PEV_Pos) /**< \brief (GMAC_TPFCP) Priority Enable Vector */\r
+#define GMAC_TPFCP_PEV(value) ((GMAC_TPFCP_PEV_Msk & ((value) << GMAC_TPFCP_PEV_Pos)))\r
+#define GMAC_TPFCP_PQ_Pos 8\r
+#define GMAC_TPFCP_PQ_Msk (0xffu << GMAC_TPFCP_PQ_Pos) /**< \brief (GMAC_TPFCP) Pause Quantum */\r
+#define GMAC_TPFCP_PQ(value) ((GMAC_TPFCP_PQ_Msk & ((value) << GMAC_TPFCP_PQ_Pos)))\r
+/* -------- GMAC_SAMB1 : (GMAC Offset: 0x0C8) Specific Address 1 Mask Bottom [31:0] Register -------- */\r
+#define GMAC_SAMB1_ADDR_Pos 0\r
+#define GMAC_SAMB1_ADDR_Msk (0xffffffffu << GMAC_SAMB1_ADDR_Pos) /**< \brief (GMAC_SAMB1) Specific Address 1 Mask */\r
+#define GMAC_SAMB1_ADDR(value) ((GMAC_SAMB1_ADDR_Msk & ((value) << GMAC_SAMB1_ADDR_Pos)))\r
+/* -------- GMAC_SAMT1 : (GMAC Offset: 0x0CC) Specific Address 1 Mask Top [47:32] Register -------- */\r
+#define GMAC_SAMT1_ADDR_Pos 0\r
+#define GMAC_SAMT1_ADDR_Msk (0xffffu << GMAC_SAMT1_ADDR_Pos) /**< \brief (GMAC_SAMT1) Specific Address 1 Mask */\r
+#define GMAC_SAMT1_ADDR(value) ((GMAC_SAMT1_ADDR_Msk & ((value) << GMAC_SAMT1_ADDR_Pos)))\r
+/* -------- GMAC_OTLO : (GMAC Offset: 0x100) Octets Transmitted [31:0] Register -------- */\r
+#define GMAC_OTLO_TXO_Pos 0\r
+#define GMAC_OTLO_TXO_Msk (0xffffffffu << GMAC_OTLO_TXO_Pos) /**< \brief (GMAC_OTLO) Transmitted Octets */\r
+/* -------- GMAC_OTHI : (GMAC Offset: 0x104) Octets Transmitted [47:32] Register -------- */\r
+#define GMAC_OTHI_TXO_Pos 0\r
+#define GMAC_OTHI_TXO_Msk (0xffffu << GMAC_OTHI_TXO_Pos) /**< \brief (GMAC_OTHI) Transmitted Octets */\r
+/* -------- GMAC_FT : (GMAC Offset: 0x108) Frames Transmitted Register -------- */\r
+#define GMAC_FT_FTX_Pos 0\r
+#define GMAC_FT_FTX_Msk (0xffffffffu << GMAC_FT_FTX_Pos) /**< \brief (GMAC_FT) Frames Transmitted without Error */\r
+/* -------- GMAC_BCFT : (GMAC Offset: 0x10C) Broadcast Frames Transmitted Register -------- */\r
+#define GMAC_BCFT_BFTX_Pos 0\r
+#define GMAC_BCFT_BFTX_Msk (0xffffffffu << GMAC_BCFT_BFTX_Pos) /**< \brief (GMAC_BCFT) Broadcast Frames Transmitted without Error */\r
+/* -------- GMAC_MFT : (GMAC Offset: 0x110) Multicast Frames Transmitted Register -------- */\r
+#define GMAC_MFT_MFTX_Pos 0\r
+#define GMAC_MFT_MFTX_Msk (0xffffffffu << GMAC_MFT_MFTX_Pos) /**< \brief (GMAC_MFT) Multicast Frames Transmitted without Error */\r
+/* -------- GMAC_PFT : (GMAC Offset: 0x114) Pause Frames Transmitted Register -------- */\r
+#define GMAC_PFT_PFTX_Pos 0\r
+#define GMAC_PFT_PFTX_Msk (0xffffu << GMAC_PFT_PFTX_Pos) /**< \brief (GMAC_PFT) Pause Frames Transmitted Register */\r
+/* -------- GMAC_BFT64 : (GMAC Offset: 0x118) 64 Byte Frames Transmitted Register -------- */\r
+#define GMAC_BFT64_NFTX_Pos 0\r
+#define GMAC_BFT64_NFTX_Msk (0xffffffffu << GMAC_BFT64_NFTX_Pos) /**< \brief (GMAC_BFT64) 64 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_TBFT127 : (GMAC Offset: 0x11C) 65 to 127 Byte Frames Transmitted Register -------- */\r
+#define GMAC_TBFT127_NFTX_Pos 0\r
+#define GMAC_TBFT127_NFTX_Msk (0xffffffffu << GMAC_TBFT127_NFTX_Pos) /**< \brief (GMAC_TBFT127) 65 to 127 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_TBFT255 : (GMAC Offset: 0x120) 128 to 255 Byte Frames Transmitted Register -------- */\r
+#define GMAC_TBFT255_NFTX_Pos 0\r
+#define GMAC_TBFT255_NFTX_Msk (0xffffffffu << GMAC_TBFT255_NFTX_Pos) /**< \brief (GMAC_TBFT255) 128 to 255 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_TBFT511 : (GMAC Offset: 0x124) 256 to 511 Byte Frames Transmitted Register -------- */\r
+#define GMAC_TBFT511_NFTX_Pos 0\r
+#define GMAC_TBFT511_NFTX_Msk (0xffffffffu << GMAC_TBFT511_NFTX_Pos) /**< \brief (GMAC_TBFT511) 256 to 511 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_TBFT1023 : (GMAC Offset: 0x128) 512 to 1023 Byte Frames Transmitted Register -------- */\r
+#define GMAC_TBFT1023_NFTX_Pos 0\r
+#define GMAC_TBFT1023_NFTX_Msk (0xffffffffu << GMAC_TBFT1023_NFTX_Pos) /**< \brief (GMAC_TBFT1023) 512 to 1023 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_TBFT1518 : (GMAC Offset: 0x12C) 1024 to 1518 Byte Frames Transmitted Register -------- */\r
+#define GMAC_TBFT1518_NFTX_Pos 0\r
+#define GMAC_TBFT1518_NFTX_Msk (0xffffffffu << GMAC_TBFT1518_NFTX_Pos) /**< \brief (GMAC_TBFT1518) 1024 to 1518 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_GTBFT1518 : (GMAC Offset: 0x130) Greater Than 1518 Byte Frames Transmitted Register -------- */\r
+#define GMAC_GTBFT1518_NFTX_Pos 0\r
+#define GMAC_GTBFT1518_NFTX_Msk (0xffffffffu << GMAC_GTBFT1518_NFTX_Pos) /**< \brief (GMAC_GTBFT1518) Greater than 1518 Byte Frames Transmitted without Error */\r
+/* -------- GMAC_TUR : (GMAC Offset: 0x134) Transmit Under Runs Register -------- */\r
+#define GMAC_TUR_TXUNR_Pos 0\r
+#define GMAC_TUR_TXUNR_Msk (0x3ffu << GMAC_TUR_TXUNR_Pos) /**< \brief (GMAC_TUR) Transmit Under Runs */\r
+/* -------- GMAC_SCF : (GMAC Offset: 0x138) Single Collision Frames Register -------- */\r
+#define GMAC_SCF_SCOL_Pos 0\r
+#define GMAC_SCF_SCOL_Msk (0x3ffffu << GMAC_SCF_SCOL_Pos) /**< \brief (GMAC_SCF) Single Collision */\r
+/* -------- GMAC_MCF : (GMAC Offset: 0x13C) Multiple Collision Frames Register -------- */\r
+#define GMAC_MCF_MCOL_Pos 0\r
+#define GMAC_MCF_MCOL_Msk (0x3ffffu << GMAC_MCF_MCOL_Pos) /**< \brief (GMAC_MCF) Multiple Collision */\r
+/* -------- GMAC_EC : (GMAC Offset: 0x140) Excessive Collisions Register -------- */\r
+#define GMAC_EC_XCOL_Pos 0\r
+#define GMAC_EC_XCOL_Msk (0x3ffu << GMAC_EC_XCOL_Pos) /**< \brief (GMAC_EC) Excessive Collisions */\r
+/* -------- GMAC_LC : (GMAC Offset: 0x144) Late Collisions Register -------- */\r
+#define GMAC_LC_LCOL_Pos 0\r
+#define GMAC_LC_LCOL_Msk (0x3ffu << GMAC_LC_LCOL_Pos) /**< \brief (GMAC_LC) Late Collisions */\r
+/* -------- GMAC_DTF : (GMAC Offset: 0x148) Deferred Transmission Frames Register -------- */\r
+#define GMAC_DTF_DEFT_Pos 0\r
+#define GMAC_DTF_DEFT_Msk (0x3ffffu << GMAC_DTF_DEFT_Pos) /**< \brief (GMAC_DTF) Deferred Transmission */\r
+/* -------- GMAC_CSE : (GMAC Offset: 0x14C) Carrier Sense Errors Register -------- */\r
+#define GMAC_CSE_CSR_Pos 0\r
+#define GMAC_CSE_CSR_Msk (0x3ffu << GMAC_CSE_CSR_Pos) /**< \brief (GMAC_CSE) Carrier Sense Error */\r
+/* -------- GMAC_ORLO : (GMAC Offset: 0x150) Octets Received [31:0] Received -------- */\r
+#define GMAC_ORLO_RXO_Pos 0\r
+#define GMAC_ORLO_RXO_Msk (0xffffffffu << GMAC_ORLO_RXO_Pos) /**< \brief (GMAC_ORLO) Received Octets */\r
+/* -------- GMAC_ORHI : (GMAC Offset: 0x154) Octets Received [47:32] Received -------- */\r
+#define GMAC_ORHI_RXO_Pos 0\r
+#define GMAC_ORHI_RXO_Msk (0xffffu << GMAC_ORHI_RXO_Pos) /**< \brief (GMAC_ORHI) Received Octets */\r
+/* -------- GMAC_FR : (GMAC Offset: 0x158) Frames Received Register -------- */\r
+#define GMAC_FR_FRX_Pos 0\r
+#define GMAC_FR_FRX_Msk (0xffffffffu << GMAC_FR_FRX_Pos) /**< \brief (GMAC_FR) Frames Received without Error */\r
+/* -------- GMAC_BCFR : (GMAC Offset: 0x15C) Broadcast Frames Received Register -------- */\r
+#define GMAC_BCFR_BFRX_Pos 0\r
+#define GMAC_BCFR_BFRX_Msk (0xffffffffu << GMAC_BCFR_BFRX_Pos) /**< \brief (GMAC_BCFR) Broadcast Frames Received without Error */\r
+/* -------- GMAC_MFR : (GMAC Offset: 0x160) Multicast Frames Received Register -------- */\r
+#define GMAC_MFR_MFRX_Pos 0\r
+#define GMAC_MFR_MFRX_Msk (0xffffffffu << GMAC_MFR_MFRX_Pos) /**< \brief (GMAC_MFR) Multicast Frames Received without Error */\r
+/* -------- GMAC_PFR : (GMAC Offset: 0x164) Pause Frames Received Register -------- */\r
+#define GMAC_PFR_PFRX_Pos 0\r
+#define GMAC_PFR_PFRX_Msk (0xffffu << GMAC_PFR_PFRX_Pos) /**< \brief (GMAC_PFR) Pause Frames Received Register */\r
+/* -------- GMAC_BFR64 : (GMAC Offset: 0x168) 64 Byte Frames Received Register -------- */\r
+#define GMAC_BFR64_NFRX_Pos 0\r
+#define GMAC_BFR64_NFRX_Msk (0xffffffffu << GMAC_BFR64_NFRX_Pos) /**< \brief (GMAC_BFR64) 64 Byte Frames Received without Error */\r
+/* -------- GMAC_TBFR127 : (GMAC Offset: 0x16C) 65 to 127 Byte Frames Received Register -------- */\r
+#define GMAC_TBFR127_NFRX_Pos 0\r
+#define GMAC_TBFR127_NFRX_Msk (0xffffffffu << GMAC_TBFR127_NFRX_Pos) /**< \brief (GMAC_TBFR127) 65 to 127 Byte Frames Received without Error */\r
+/* -------- GMAC_TBFR255 : (GMAC Offset: 0x170) 128 to 255 Byte Frames Received Register -------- */\r
+#define GMAC_TBFR255_NFRX_Pos 0\r
+#define GMAC_TBFR255_NFRX_Msk (0xffffffffu << GMAC_TBFR255_NFRX_Pos) /**< \brief (GMAC_TBFR255) 128 to 255 Byte Frames Received without Error */\r
+/* -------- GMAC_TBFR511 : (GMAC Offset: 0x174) 256 to 511Byte Frames Received Register -------- */\r
+#define GMAC_TBFR511_NFRX_Pos 0\r
+#define GMAC_TBFR511_NFRX_Msk (0xffffffffu << GMAC_TBFR511_NFRX_Pos) /**< \brief (GMAC_TBFR511) 256 to 511 Byte Frames Received without Error */\r
+/* -------- GMAC_TBFR1023 : (GMAC Offset: 0x178) 512 to 1023 Byte Frames Received Register -------- */\r
+#define GMAC_TBFR1023_NFRX_Pos 0\r
+#define GMAC_TBFR1023_NFRX_Msk (0xffffffffu << GMAC_TBFR1023_NFRX_Pos) /**< \brief (GMAC_TBFR1023) 512 to 1023 Byte Frames Received without Error */\r
+/* -------- GMAC_TBFR1518 : (GMAC Offset: 0x17C) 1024 to 1518 Byte Frames Received Register -------- */\r
+#define GMAC_TBFR1518_NFRX_Pos 0\r
+#define GMAC_TBFR1518_NFRX_Msk (0xffffffffu << GMAC_TBFR1518_NFRX_Pos) /**< \brief (GMAC_TBFR1518) 1024 to 1518 Byte Frames Received without Error */\r
+/* -------- GMAC_TMXBFR : (GMAC Offset: 0x180) 1519 to Maximum Byte Frames Received Register -------- */\r
+#define GMAC_TMXBFR_NFRX_Pos 0\r
+#define GMAC_TMXBFR_NFRX_Msk (0xffffffffu << GMAC_TMXBFR_NFRX_Pos) /**< \brief (GMAC_TMXBFR) 1519 to Maximum Byte Frames Received without Error */\r
+/* -------- GMAC_UFR : (GMAC Offset: 0x184) Undersize Frames Received Register -------- */\r
+#define GMAC_UFR_UFRX_Pos 0\r
+#define GMAC_UFR_UFRX_Msk (0x3ffu << GMAC_UFR_UFRX_Pos) /**< \brief (GMAC_UFR) Undersize Frames Received */\r
+/* -------- GMAC_OFR : (GMAC Offset: 0x188) Oversize Frames Received Register -------- */\r
+#define GMAC_OFR_OFRX_Pos 0\r
+#define GMAC_OFR_OFRX_Msk (0x3ffu << GMAC_OFR_OFRX_Pos) /**< \brief (GMAC_OFR) Oversized Frames Received */\r
+/* -------- GMAC_JR : (GMAC Offset: 0x18C) Jabbers Received Register -------- */\r
+#define GMAC_JR_JRX_Pos 0\r
+#define GMAC_JR_JRX_Msk (0x3ffu << GMAC_JR_JRX_Pos) /**< \brief (GMAC_JR) Jabbers Received */\r
+/* -------- GMAC_FCSE : (GMAC Offset: 0x190) Frame Check Sequence Errors Register -------- */\r
+#define GMAC_FCSE_FCKR_Pos 0\r
+#define GMAC_FCSE_FCKR_Msk (0x3ffu << GMAC_FCSE_FCKR_Pos) /**< \brief (GMAC_FCSE) Frame Check Sequence Errors */\r
+/* -------- GMAC_LFFE : (GMAC Offset: 0x194) Length Field Frame Errors Register -------- */\r
+#define GMAC_LFFE_LFER_Pos 0\r
+#define GMAC_LFFE_LFER_Msk (0x3ffu << GMAC_LFFE_LFER_Pos) /**< \brief (GMAC_LFFE) Length Field Frame Errors */\r
+/* -------- GMAC_RSE : (GMAC Offset: 0x198) Receive Symbol Errors Register -------- */\r
+#define GMAC_RSE_RXSE_Pos 0\r
+#define GMAC_RSE_RXSE_Msk (0x3ffu << GMAC_RSE_RXSE_Pos) /**< \brief (GMAC_RSE) Receive Symbol Errors */\r
+/* -------- GMAC_AE : (GMAC Offset: 0x19C) Alignment Errors Register -------- */\r
+#define GMAC_AE_AER_Pos 0\r
+#define GMAC_AE_AER_Msk (0x3ffu << GMAC_AE_AER_Pos) /**< \brief (GMAC_AE) Alignment Errors */\r
+/* -------- GMAC_RRE : (GMAC Offset: 0x1A0) Receive Resource Errors Register -------- */\r
+#define GMAC_RRE_RXRER_Pos 0\r
+#define GMAC_RRE_RXRER_Msk (0x3ffffu << GMAC_RRE_RXRER_Pos) /**< \brief (GMAC_RRE) Receive Resource Errors */\r
+/* -------- GMAC_ROE : (GMAC Offset: 0x1A4) Receive Overrun Register -------- */\r
+#define GMAC_ROE_RXOVR_Pos 0\r
+#define GMAC_ROE_RXOVR_Msk (0x3ffu << GMAC_ROE_RXOVR_Pos) /**< \brief (GMAC_ROE) Receive Overruns */\r
+/* -------- GMAC_IHCE : (GMAC Offset: 0x1A8) IP Header Checksum Errors Register -------- */\r
+#define GMAC_IHCE_HCKER_Pos 0\r
+#define GMAC_IHCE_HCKER_Msk (0xffu << GMAC_IHCE_HCKER_Pos) /**< \brief (GMAC_IHCE) IP Header Checksum Errors */\r
+/* -------- GMAC_TCE : (GMAC Offset: 0x1AC) TCP Checksum Errors Register -------- */\r
+#define GMAC_TCE_TCKER_Pos 0\r
+#define GMAC_TCE_TCKER_Msk (0xffu << GMAC_TCE_TCKER_Pos) /**< \brief (GMAC_TCE) TCP Checksum Errors */\r
+/* -------- GMAC_UCE : (GMAC Offset: 0x1B0) UDP Checksum Errors Register -------- */\r
+#define GMAC_UCE_UCKER_Pos 0\r
+#define GMAC_UCE_UCKER_Msk (0xffu << GMAC_UCE_UCKER_Pos) /**< \brief (GMAC_UCE) UDP Checksum Errors */\r
+/* -------- GMAC_TSSS : (GMAC Offset: 0x1C8) 1588 Timer Sync Strobe Seconds Register -------- */\r
+#define GMAC_TSSS_VTS_Pos 0\r
+#define GMAC_TSSS_VTS_Msk (0xffffffffu << GMAC_TSSS_VTS_Pos) /**< \brief (GMAC_TSSS) Value of Timer Seconds Register Capture */\r
+#define GMAC_TSSS_VTS(value) ((GMAC_TSSS_VTS_Msk & ((value) << GMAC_TSSS_VTS_Pos)))\r
+/* -------- GMAC_TSSN : (GMAC Offset: 0x1CC) 1588 Timer Sync Strobe Nanoseconds Register -------- */\r
+#define GMAC_TSSN_VTN_Pos 0\r
+#define GMAC_TSSN_VTN_Msk (0x3fffffffu << GMAC_TSSN_VTN_Pos) /**< \brief (GMAC_TSSN) Value Timer Nanoseconds Register Capture */\r
+#define GMAC_TSSN_VTN(value) ((GMAC_TSSN_VTN_Msk & ((value) << GMAC_TSSN_VTN_Pos)))\r
+/* -------- GMAC_TS : (GMAC Offset: 0x1D0) 1588 Timer Seconds Register -------- */\r
+#define GMAC_TS_TCS_Pos 0\r
+#define GMAC_TS_TCS_Msk (0xffffffffu << GMAC_TS_TCS_Pos) /**< \brief (GMAC_TS) Timer Count in Seconds */\r
+#define GMAC_TS_TCS(value) ((GMAC_TS_TCS_Msk & ((value) << GMAC_TS_TCS_Pos)))\r
+/* -------- GMAC_TN : (GMAC Offset: 0x1D4) 1588 Timer Nanoseconds Register -------- */\r
+#define GMAC_TN_TNS_Pos 0\r
+#define GMAC_TN_TNS_Msk (0x3fffffffu << GMAC_TN_TNS_Pos) /**< \brief (GMAC_TN) Timer Count in Nanoseconds */\r
+#define GMAC_TN_TNS(value) ((GMAC_TN_TNS_Msk & ((value) << GMAC_TN_TNS_Pos)))\r
+/* -------- GMAC_TA : (GMAC Offset: 0x1D8) 1588 Timer Adjust Register -------- */\r
+#define GMAC_TA_ITDT_Pos 0\r
+#define GMAC_TA_ITDT_Msk (0x3fffffffu << GMAC_TA_ITDT_Pos) /**< \brief (GMAC_TA) Increment/Decrement */\r
+#define GMAC_TA_ITDT(value) ((GMAC_TA_ITDT_Msk & ((value) << GMAC_TA_ITDT_Pos)))\r
+#define GMAC_TA_ADJ (0x1u << 31) /**< \brief (GMAC_TA) Adjust 1588 Timer */\r
+/* -------- GMAC_TI : (GMAC Offset: 0x1DC) 1588 Timer Increment Register -------- */\r
+#define GMAC_TI_CNS_Pos 0\r
+#define GMAC_TI_CNS_Msk (0xffu << GMAC_TI_CNS_Pos) /**< \brief (GMAC_TI) Count Nanoseconds */\r
+#define GMAC_TI_CNS(value) ((GMAC_TI_CNS_Msk & ((value) << GMAC_TI_CNS_Pos)))\r
+#define GMAC_TI_ACNS_Pos 8\r
+#define GMAC_TI_ACNS_Msk (0xffu << GMAC_TI_ACNS_Pos) /**< \brief (GMAC_TI) Alternative Count Nanoseconds */\r
+#define GMAC_TI_ACNS(value) ((GMAC_TI_ACNS_Msk & ((value) << GMAC_TI_ACNS_Pos)))\r
+#define GMAC_TI_NIT_Pos 16\r
+#define GMAC_TI_NIT_Msk (0xffu << GMAC_TI_NIT_Pos) /**< \brief (GMAC_TI) Number of Increments */\r
+#define GMAC_TI_NIT(value) ((GMAC_TI_NIT_Msk & ((value) << GMAC_TI_NIT_Pos)))\r
+/* -------- GMAC_EFTS : (GMAC Offset: 0x1E0) PTP Event Frame Transmitted Seconds -------- */\r
+#define GMAC_EFTS_RUD_Pos 0\r
+#define GMAC_EFTS_RUD_Msk (0xffffffffu << GMAC_EFTS_RUD_Pos) /**< \brief (GMAC_EFTS) Register Update */\r
+/* -------- GMAC_EFTN : (GMAC Offset: 0x1E4) PTP Event Frame Transmitted Nanoseconds -------- */\r
+#define GMAC_EFTN_RUD_Pos 0\r
+#define GMAC_EFTN_RUD_Msk (0x3fffffffu << GMAC_EFTN_RUD_Pos) /**< \brief (GMAC_EFTN) Register Update */\r
+/* -------- GMAC_EFRS : (GMAC Offset: 0x1E8) PTP Event Frame Received Seconds -------- */\r
+#define GMAC_EFRS_RUD_Pos 0\r
+#define GMAC_EFRS_RUD_Msk (0xffffffffu << GMAC_EFRS_RUD_Pos) /**< \brief (GMAC_EFRS) Register Update */\r
+/* -------- GMAC_EFRN : (GMAC Offset: 0x1EC) PTP Event Frame Received Nanoseconds -------- */\r
+#define GMAC_EFRN_RUD_Pos 0\r
+#define GMAC_EFRN_RUD_Msk (0x3fffffffu << GMAC_EFRN_RUD_Pos) /**< \brief (GMAC_EFRN) Register Update */\r
+/* -------- GMAC_PEFTS : (GMAC Offset: 0x1F0) PTP Peer Event Frame Transmitted Seconds -------- */\r
+#define GMAC_PEFTS_RUD_Pos 0\r
+#define GMAC_PEFTS_RUD_Msk (0xffffffffu << GMAC_PEFTS_RUD_Pos) /**< \brief (GMAC_PEFTS) Register Update */\r
+/* -------- GMAC_PEFTN : (GMAC Offset: 0x1F4) PTP Peer Event Frame Transmitted Nanoseconds -------- */\r
+#define GMAC_PEFTN_RUD_Pos 0\r
+#define GMAC_PEFTN_RUD_Msk (0x3fffffffu << GMAC_PEFTN_RUD_Pos) /**< \brief (GMAC_PEFTN) Register Update */\r
+/* -------- GMAC_PEFRS : (GMAC Offset: 0x1F8) PTP Peer Event Frame Received Seconds -------- */\r
+#define GMAC_PEFRS_RUD_Pos 0\r
+#define GMAC_PEFRS_RUD_Msk (0xffffffffu << GMAC_PEFRS_RUD_Pos) /**< \brief (GMAC_PEFRS) Register Update */\r
+/* -------- GMAC_PEFRN : (GMAC Offset: 0x1FC) PTP Peer Event Frame Received Nanoseconds -------- */\r
+#define GMAC_PEFRN_RUD_Pos 0\r
+#define GMAC_PEFRN_RUD_Msk (0x3fffffffu << GMAC_PEFRN_RUD_Pos) /**< \brief (GMAC_PEFRN) Register Update */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Static Memory Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_HSMC Static Memory Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief HsmcCs_number hardware registers */\r
+typedef struct {\r
+  __IO uint32_t HSMC_SETUP;   /**< \brief (HsmcCs_number Offset: 0x0) HSMC Setup Register */\r
+  __IO uint32_t HSMC_PULSE;   /**< \brief (HsmcCs_number Offset: 0x4) HSMC Pulse Register */\r
+  __IO uint32_t HSMC_CYCLE;   /**< \brief (HsmcCs_number Offset: 0x8) HSMC Cycle Register */\r
+  __IO uint32_t HSMC_TIMINGS; /**< \brief (HsmcCs_number Offset: 0xC) HSMC Timings Register */\r
+  __IO uint32_t HSMC_MODE;    /**< \brief (HsmcCs_number Offset: 0x10) HSMC Mode Register */\r
+} HsmcCs_number;\r
+/** \brief HsmcPmecc hardware registers */\r
+typedef struct {\r
+  __I uint32_t HSMC_PMECC[11]; /**< \brief (HsmcPmecc Offset: 0x0) PMECC Redundancy x Register */\r
+  __I uint32_t Reserved1[5];\r
+} HsmcPmecc;\r
+/** \brief HsmcRem hardware registers */\r
+typedef struct {\r
+  __I uint32_t HSMC_REM[12]; /**< \brief (HsmcRem Offset: 0x0) PMECC Remainder x Register */\r
+  __I uint32_t Reserved2[4];\r
+} HsmcRem;\r
+/** \brief Hsmc hardware registers */\r
+#define HSMCPMECC_NUMBER 8\r
+#define HSMCREM_NUMBER 8\r
+#define HSMCCS_NUMBER_NUMBER 4\r
+typedef struct {\r
+  __IO uint32_t      HSMC_CFG;                             /**< \brief (Hsmc Offset: 0x000) HSMC NFC Configuration Register */\r
+  __O  uint32_t      HSMC_CTRL;                            /**< \brief (Hsmc Offset: 0x004) HSMC NFC Control Register */\r
+  __I  uint32_t      HSMC_SR;                              /**< \brief (Hsmc Offset: 0x008) HSMC NFC Status Register */\r
+  __O  uint32_t      HSMC_IER;                             /**< \brief (Hsmc Offset: 0x00C) HSMC NFC Interrupt Enable Register */\r
+  __O  uint32_t      HSMC_IDR;                             /**< \brief (Hsmc Offset: 0x010) HSMC NFC Interrupt Disable Register */\r
+  __I  uint32_t      HSMC_IMR;                             /**< \brief (Hsmc Offset: 0x014) HSMC NFC Interrupt Mask Register */\r
+  __IO uint32_t      HSMC_ADDR;                            /**< \brief (Hsmc Offset: 0x018) HSMC NFC Address Cycle Zero Register */\r
+  __IO uint32_t      HSMC_BANK;                            /**< \brief (Hsmc Offset: 0x01C) HSMC Bank Address Register */\r
+  __O  uint32_t      HSMC_ECC_CTRL;                        /**< \brief (Hsmc Offset: 0x020) HSMC ECC Control Register */\r
+  __IO uint32_t      HSMC_ECC_MD;                          /**< \brief (Hsmc Offset: 0x024) HSMC ECC Mode Register */\r
+  __I  uint32_t      HSMC_ECC_SR1;                         /**< \brief (Hsmc Offset: 0x028) HSMC ECC Status 1 Register */\r
+  __I  uint32_t      HSMC_ECC_PR0;                         /**< \brief (Hsmc Offset: 0x02C) HSMC ECC Parity 0 Register */\r
+  __I  uint32_t      HSMC_ECC_PR1;                         /**< \brief (Hsmc Offset: 0x030) HSMC ECC parity 1 Register */\r
+  __I  uint32_t      HSMC_ECC_SR2;                         /**< \brief (Hsmc Offset: 0x034) HSMC ECC status 2 Register */\r
+  __I  uint32_t      HSMC_ECC_PR2;                         /**< \brief (Hsmc Offset: 0x038) HSMC ECC parity 2 Register */\r
+  __I  uint32_t      HSMC_ECC_PR3;                         /**< \brief (Hsmc Offset: 0x03C) HSMC ECC parity 3 Register */\r
+  __I  uint32_t      HSMC_ECC_PR4;                         /**< \brief (Hsmc Offset: 0x040) HSMC ECC parity 4 Register */\r
+  __I  uint32_t      HSMC_ECC_PR5;                         /**< \brief (Hsmc Offset: 0x044) HSMC ECC parity 5 Register */\r
+  __I  uint32_t      HSMC_ECC_PR6;                         /**< \brief (Hsmc Offset: 0x048) HSMC ECC parity 6 Register */\r
+  __I  uint32_t      HSMC_ECC_PR7;                         /**< \brief (Hsmc Offset: 0x04C) HSMC ECC parity 7 Register */\r
+  __I  uint32_t      HSMC_ECC_PR8;                         /**< \brief (Hsmc Offset: 0x050) HSMC ECC parity 8 Register */\r
+  __I  uint32_t      HSMC_ECC_PR9;                         /**< \brief (Hsmc Offset: 0x054) HSMC ECC parity 9 Register */\r
+  __I  uint32_t      HSMC_ECC_PR10;                        /**< \brief (Hsmc Offset: 0x058) HSMC ECC parity 10 Register */\r
+  __I  uint32_t      HSMC_ECC_PR11;                        /**< \brief (Hsmc Offset: 0x05C) HSMC ECC parity 11 Register */\r
+  __I  uint32_t      HSMC_ECC_PR12;                        /**< \brief (Hsmc Offset: 0x060) HSMC ECC parity 12 Register */\r
+  __I  uint32_t      HSMC_ECC_PR13;                        /**< \brief (Hsmc Offset: 0x064) HSMC ECC parity 13 Register */\r
+  __I  uint32_t      HSMC_ECC_PR14;                        /**< \brief (Hsmc Offset: 0x068) HSMC ECC parity 14 Register */\r
+  __I  uint32_t      HSMC_ECC_PR15;                        /**< \brief (Hsmc Offset: 0x06C) HSMC ECC parity 15 Register */\r
+  __IO uint32_t      HSMC_PMECCFG;                         /**< \brief (Hsmc Offset: 0x70) PMECC Configuration Register */\r
+  __IO uint32_t      HSMC_PMECCSAREA;                      /**< \brief (Hsmc Offset: 0x74) PMECC Spare Area Size Register */\r
+  __IO uint32_t      HSMC_PMECCSADDR;                      /**< \brief (Hsmc Offset: 0x78) PMECC Start Address Register */\r
+  __IO uint32_t      HSMC_PMECCEADDR;                      /**< \brief (Hsmc Offset: 0x7C) PMECC End Address Register */\r
+  __I  uint32_t      Reserved1[1];\r
+  __O  uint32_t      HSMC_PMECCTRL;                        /**< \brief (Hsmc Offset: 0x84) PMECC Control Register */\r
+  __I  uint32_t      HSMC_PMECCSR;                         /**< \brief (Hsmc Offset: 0x88) PMECC Status Register */\r
+  __O  uint32_t      HSMC_PMECCIER;                        /**< \brief (Hsmc Offset: 0x8C) PMECC Interrupt Enable register */\r
+  __O  uint32_t      HSMC_PMECCIDR;                        /**< \brief (Hsmc Offset: 0x90) PMECC Interrupt Disable Register */\r
+  __I  uint32_t      HSMC_PMECCIMR;                        /**< \brief (Hsmc Offset: 0x94) PMECC Interrupt Mask Register */\r
+  __I  uint32_t      HSMC_PMECCISR;                        /**< \brief (Hsmc Offset: 0x98) PMECC Interrupt Status Register */\r
+  __I  uint32_t      Reserved2[5];\r
+       HsmcPmecc     HSMC_PMECC[HSMCPMECC_NUMBER];         /**< \brief (Hsmc Offset: 0xB0) sec_num = 0 .. 7 */\r
+       HsmcRem       HSMC_REM[HSMCREM_NUMBER];             /**< \brief (Hsmc Offset: 0x2B0) sec_num = 0 .. 7 */\r
+  __I  uint32_t      Reserved3[20];\r
+  __IO uint32_t      HSMC_ELCFG;                           /**< \brief (Hsmc Offset: 0x500) PMECC Error Location Configuration Register */\r
+  __I  uint32_t      HSMC_ELPRIM;                          /**< \brief (Hsmc Offset: 0x504) PMECC Error Location Primitive Register */\r
+  __O  uint32_t      HSMC_ELEN;                            /**< \brief (Hsmc Offset: 0x508) PMECC Error Location Enable Register */\r
+  __O  uint32_t      HSMC_ELDIS;                           /**< \brief (Hsmc Offset: 0x50C) PMECC Error Location Disable Register */\r
+  __I  uint32_t      HSMC_ELSR;                            /**< \brief (Hsmc Offset: 0x510) PMECC Error Location Status Register */\r
+  __O  uint32_t      HSMC_ELIER;                           /**< \brief (Hsmc Offset: 0x514) PMECC Error Location Interrupt Enable register */\r
+  __O  uint32_t      HSMC_ELIDR;                           /**< \brief (Hsmc Offset: 0x518) PMECC Error Location Interrupt Disable Register */\r
+  __I  uint32_t      HSMC_ELIMR;                           /**< \brief (Hsmc Offset: 0x51C) PMECC Error Location Interrupt Mask Register */\r
+  __I  uint32_t      HSMC_ELISR;                           /**< \brief (Hsmc Offset: 0x520) PMECC Error Location Interrupt Status Register */\r
+  __I  uint32_t      Reserved4[1];\r
+  __IO uint32_t      HSMC_SIGMA0;                          /**< \brief (Hsmc Offset: 0x528) PMECC Error Location SIGMA 0 Register */\r
+  __IO uint32_t      HSMC_SIGMA1;                          /**< \brief (Hsmc Offset: 0x52C) PMECC Error Location SIGMA 1 Register */\r
+  __IO uint32_t      HSMC_SIGMA2;                          /**< \brief (Hsmc Offset: 0x530) PMECC Error Location SIGMA 2 Register */\r
+  __IO uint32_t      HSMC_SIGMA3;                          /**< \brief (Hsmc Offset: 0x534) PMECC Error Location SIGMA 3 Register */\r
+  __IO uint32_t      HSMC_SIGMA4;                          /**< \brief (Hsmc Offset: 0x538) PMECC Error Location SIGMA 4 Register */\r
+  __IO uint32_t      HSMC_SIGMA5;                          /**< \brief (Hsmc Offset: 0x53C) PMECC Error Location SIGMA 5 Register */\r
+  __IO uint32_t      HSMC_SIGMA6;                          /**< \brief (Hsmc Offset: 0x540) PMECC Error Location SIGMA 6 Register */\r
+  __IO uint32_t      HSMC_SIGMA7;                          /**< \brief (Hsmc Offset: 0x544) PMECC Error Location SIGMA 7 Register */\r
+  __IO uint32_t      HSMC_SIGMA8;                          /**< \brief (Hsmc Offset: 0x548) PMECC Error Location SIGMA 8 Register */\r
+  __IO uint32_t      HSMC_SIGMA9;                          /**< \brief (Hsmc Offset: 0x54C) PMECC Error Location SIGMA 9 Register */\r
+  __IO uint32_t      HSMC_SIGMA10;                         /**< \brief (Hsmc Offset: 0x550) PMECC Error Location SIGMA 10 Register */\r
+  __IO uint32_t      HSMC_SIGMA11;                         /**< \brief (Hsmc Offset: 0x554) PMECC Error Location SIGMA 11 Register */\r
+  __IO uint32_t      HSMC_SIGMA12;                         /**< \brief (Hsmc Offset: 0x558) PMECC Error Location SIGMA 12 Register */\r
+  __IO uint32_t      HSMC_SIGMA13;                         /**< \brief (Hsmc Offset: 0x55C) PMECC Error Location SIGMA 13 Register */\r
+  __IO uint32_t      HSMC_SIGMA14;                         /**< \brief (Hsmc Offset: 0x560) PMECC Error Location SIGMA 14 Register */\r
+  __IO uint32_t      HSMC_SIGMA15;                         /**< \brief (Hsmc Offset: 0x564) PMECC Error Location SIGMA 15 Register */\r
+  __IO uint32_t      HSMC_SIGMA16;                         /**< \brief (Hsmc Offset: 0x568) PMECC Error Location SIGMA 16 Register */\r
+  __IO uint32_t      HSMC_SIGMA17;                         /**< \brief (Hsmc Offset: 0x56C) PMECC Error Location SIGMA 17 Register */\r
+  __IO uint32_t      HSMC_SIGMA18;                         /**< \brief (Hsmc Offset: 0x570) PMECC Error Location SIGMA 18 Register */\r
+  __IO uint32_t      HSMC_SIGMA19;                         /**< \brief (Hsmc Offset: 0x574) PMECC Error Location SIGMA 19 Register */\r
+  __IO uint32_t      HSMC_SIGMA20;                         /**< \brief (Hsmc Offset: 0x578) PMECC Error Location SIGMA 20 Register */\r
+  __IO uint32_t      HSMC_SIGMA21;                         /**< \brief (Hsmc Offset: 0x57C) PMECC Error Location SIGMA 21 Register */\r
+  __IO uint32_t      HSMC_SIGMA22;                         /**< \brief (Hsmc Offset: 0x580) PMECC Error Location SIGMA 22 Register */\r
+  __IO uint32_t      HSMC_SIGMA23;                         /**< \brief (Hsmc Offset: 0x584) PMECC Error Location SIGMA 23 Register */\r
+  __IO uint32_t      HSMC_SIGMA24;                         /**< \brief (Hsmc Offset: 0x588) PMECC Error Location SIGMA 24 Register */\r
+  __I  uint32_t      HSMC_ERRLOC[24];                      /**< \brief (Hsmc Offset: 0x58C) PMECC Error Location 0 Register */\r
+  __I  uint32_t      Reserved5[5];\r
+       HsmcCs_number HSMC_CS_NUMBER[HSMCCS_NUMBER_NUMBER]; /**< \brief (Hsmc Offset: 0x600) CS_number = 0 .. 3 */\r
+  __I  uint32_t      Reserved6[20];\r
+  __IO uint32_t      HSMC_OCMS;                            /**< \brief (Hsmc Offset: 0x6A0) HSMC OCMS Register */\r
+  __O  uint32_t      HSMC_KEY1;                            /**< \brief (Hsmc Offset: 0x6A4) HSMC OCMS KEY1 Register */\r
+  __O  uint32_t      HSMC_KEY2;                            /**< \brief (Hsmc Offset: 0x6A8) HSMC OCMS KEY2 Register */\r
+  __I  uint32_t      Reserved7[14];\r
+  __O  uint32_t      HSMC_WPCR;                            /**< \brief (Hsmc Offset: 0x6E4) HSMC Write Protection Control Register */\r
+  __I  uint32_t      HSMC_WPSR;                            /**< \brief (Hsmc Offset: 0x6E8) HSMC Write Protection Status Register */\r
+} Hsmc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- HSMC_CFG : (HSMC Offset: 0x000) HSMC NFC Configuration Register -------- */\r
+#define HSMC_CFG_PAGESIZE_Pos 0\r
+#define HSMC_CFG_PAGESIZE_Msk (0x7u << HSMC_CFG_PAGESIZE_Pos) /**< \brief (HSMC_CFG)  */\r
+#define   HSMC_CFG_PAGESIZE_PS512 (0x0u << 0) /**< \brief (HSMC_CFG) Main area 512 Bytes */\r
+#define   HSMC_CFG_PAGESIZE_PS1024 (0x1u << 0) /**< \brief (HSMC_CFG) Main area 1024 Bytes */\r
+#define   HSMC_CFG_PAGESIZE_PS2048 (0x2u << 0) /**< \brief (HSMC_CFG) Main area 2048 Bytes */\r
+#define   HSMC_CFG_PAGESIZE_PS4096 (0x3u << 0) /**< \brief (HSMC_CFG) Main area 4096 Bytes */\r
+#define   HSMC_CFG_PAGESIZE_PS8192 (0x4u << 0) /**< \brief (HSMC_CFG) Main area 8192 Bytes */\r
+#define HSMC_CFG_WSPARE (0x1u << 8) /**< \brief (HSMC_CFG) Write Spare Area */\r
+#define HSMC_CFG_RSPARE (0x1u << 9) /**< \brief (HSMC_CFG) Read Spare Area */\r
+#define HSMC_CFG_EDGECTRL (0x1u << 12) /**< \brief (HSMC_CFG) Rising/Falling Edge Detection Control */\r
+#define HSMC_CFG_RBEDGE (0x1u << 13) /**< \brief (HSMC_CFG) Ready/Busy Signal Edge Detection */\r
+#define HSMC_CFG_DTOCYC_Pos 16\r
+#define HSMC_CFG_DTOCYC_Msk (0xfu << HSMC_CFG_DTOCYC_Pos) /**< \brief (HSMC_CFG) Data Timeout Cycle Number */\r
+#define HSMC_CFG_DTOCYC(value) ((HSMC_CFG_DTOCYC_Msk & ((value) << HSMC_CFG_DTOCYC_Pos)))\r
+#define HSMC_CFG_DTOMUL_Pos 20\r
+#define HSMC_CFG_DTOMUL_Msk (0x7u << HSMC_CFG_DTOMUL_Pos) /**< \brief (HSMC_CFG) Data Timeout Multiplier */\r
+#define   HSMC_CFG_DTOMUL_X1 (0x0u << 20) /**< \brief (HSMC_CFG) DTOCYC */\r
+#define   HSMC_CFG_DTOMUL_X16 (0x1u << 20) /**< \brief (HSMC_CFG) DTOCYC x 16 */\r
+#define   HSMC_CFG_DTOMUL_X128 (0x2u << 20) /**< \brief (HSMC_CFG) DTOCYC x 128 */\r
+#define   HSMC_CFG_DTOMUL_X256 (0x3u << 20) /**< \brief (HSMC_CFG) DTOCYC x 256 */\r
+#define   HSMC_CFG_DTOMUL_X1024 (0x4u << 20) /**< \brief (HSMC_CFG) DTOCYC x 1024 */\r
+#define   HSMC_CFG_DTOMUL_X4096 (0x5u << 20) /**< \brief (HSMC_CFG) DTOCYC x 4096 */\r
+#define   HSMC_CFG_DTOMUL_X65536 (0x6u << 20) /**< \brief (HSMC_CFG) DTOCYC x 65536 */\r
+#define   HSMC_CFG_DTOMUL_X1048576 (0x7u << 20) /**< \brief (HSMC_CFG) DTOCYC x 1048576 */\r
+#define HSMC_CFG_NFCSPARESIZE_Pos 24\r
+#define HSMC_CFG_NFCSPARESIZE_Msk (0x7fu << HSMC_CFG_NFCSPARESIZE_Pos) /**< \brief (HSMC_CFG) NAND Flash Spare Area Size Retrieved by the Host Controller */\r
+#define HSMC_CFG_NFCSPARESIZE(value) ((HSMC_CFG_NFCSPARESIZE_Msk & ((value) << HSMC_CFG_NFCSPARESIZE_Pos)))\r
+/* -------- HSMC_CTRL : (HSMC Offset: 0x004) HSMC NFC Control Register -------- */\r
+#define HSMC_CTRL_NFCEN (0x1u << 0) /**< \brief (HSMC_CTRL) NAND Flash Controller Enable */\r
+#define HSMC_CTRL_NFCDIS (0x1u << 1) /**< \brief (HSMC_CTRL) NAND Flash Controller Disable */\r
+/* -------- HSMC_SR : (HSMC Offset: 0x008) HSMC NFC Status Register -------- */\r
+#define HSMC_SR_SMCSTS (0x1u << 0) /**< \brief (HSMC_SR) NAND Flash Controller Status (this field cannot be reset) */\r
+#define HSMC_SR_RB_RISE (0x1u << 4) /**< \brief (HSMC_SR) Selected Ready Busy Rising Edge Detected */\r
+#define HSMC_SR_RB_FALL (0x1u << 5) /**< \brief (HSMC_SR) Selected Ready Busy Falling Edge Detected */\r
+#define HSMC_SR_NFCBUSY (0x1u << 8) /**< \brief (HSMC_SR) NFC Busy (this field cannot be reset) */\r
+#define HSMC_SR_NFCWR (0x1u << 11) /**< \brief (HSMC_SR) NFC Write/Read Operation (this field cannot be reset) */\r
+#define HSMC_SR_NFCSID_Pos 12\r
+#define HSMC_SR_NFCSID_Msk (0x7u << HSMC_SR_NFCSID_Pos) /**< \brief (HSMC_SR) NFC Chip Select ID (this field cannot be reset) */\r
+#define HSMC_SR_XFRDONE (0x1u << 16) /**< \brief (HSMC_SR) NFC Data Transfer Terminated */\r
+#define HSMC_SR_CMDDONE (0x1u << 17) /**< \brief (HSMC_SR) Command Done */\r
+#define HSMC_SR_ECCRDY (0x1u << 18) /**< \brief (HSMC_SR) Hamming ECC Ready */\r
+#define HSMC_SR_DTOE (0x1u << 20) /**< \brief (HSMC_SR) Data Timeout Error */\r
+#define HSMC_SR_UNDEF (0x1u << 21) /**< \brief (HSMC_SR) Undefined Area Error */\r
+#define HSMC_SR_AWB (0x1u << 22) /**< \brief (HSMC_SR) Accessing While Busy */\r
+#define HSMC_SR_NFCASE (0x1u << 23) /**< \brief (HSMC_SR) NFC Access Size Error */\r
+#define HSMC_SR_RB_EDGE3 (0x1u << 27) /**< \brief (HSMC_SR) Ready/Busy Line 3 Edge Detected */\r
+/* -------- HSMC_IER : (HSMC Offset: 0x00C) HSMC NFC Interrupt Enable Register -------- */\r
+#define HSMC_IER_RB_RISE (0x1u << 4) /**< \brief (HSMC_IER) Ready Busy Rising Edge Detection Interrupt Enable */\r
+#define HSMC_IER_RB_FALL (0x1u << 5) /**< \brief (HSMC_IER) Ready Busy Falling Edge Detection Interrupt Enable */\r
+#define HSMC_IER_XFRDONE (0x1u << 16) /**< \brief (HSMC_IER) Transfer Done Interrupt Enable */\r
+#define HSMC_IER_CMDDONE (0x1u << 17) /**< \brief (HSMC_IER) Command Done Interrupt Enable */\r
+#define HSMC_IER_DTOE (0x1u << 20) /**< \brief (HSMC_IER) Data Timeout Error Interrupt Enable */\r
+#define HSMC_IER_UNDEF (0x1u << 21) /**< \brief (HSMC_IER) Undefined Area Access Interrupt Enable */\r
+#define HSMC_IER_AWB (0x1u << 22) /**< \brief (HSMC_IER) Accessing While Busy Interrupt Enable */\r
+#define HSMC_IER_NFCASE (0x1u << 23) /**< \brief (HSMC_IER) NFC Access Size Error Interrupt Enable */\r
+#define HSMC_IER_RB_EDGE3 (0x1u << 27) /**< \brief (HSMC_IER) Ready/Busy Line 3 Interrupt Enable */\r
+/* -------- HSMC_IDR : (HSMC Offset: 0x010) HSMC NFC Interrupt Disable Register -------- */\r
+#define HSMC_IDR_RB_RISE (0x1u << 4) /**< \brief (HSMC_IDR) Ready Busy Rising Edge Detection Interrupt Disable */\r
+#define HSMC_IDR_RB_FALL (0x1u << 5) /**< \brief (HSMC_IDR) Ready Busy Falling Edge Detection Interrupt Disable */\r
+#define HSMC_IDR_XFRDONE (0x1u << 16) /**< \brief (HSMC_IDR) Transfer Done Interrupt Disable */\r
+#define HSMC_IDR_CMDDONE (0x1u << 17) /**< \brief (HSMC_IDR) Command Done Interrupt Disable */\r
+#define HSMC_IDR_DTOE (0x1u << 20) /**< \brief (HSMC_IDR) Data Timeout Error Interrupt Disable */\r
+#define HSMC_IDR_UNDEF (0x1u << 21) /**< \brief (HSMC_IDR) Undefined Area Access Interrupt Disable */\r
+#define HSMC_IDR_AWB (0x1u << 22) /**< \brief (HSMC_IDR) Accessing While Busy Interrupt Disable */\r
+#define HSMC_IDR_NFCASE (0x1u << 23) /**< \brief (HSMC_IDR) NFC Access Size Error Interrupt Disable */\r
+#define HSMC_IDR_RB_EDGE3 (0x1u << 27) /**< \brief (HSMC_IDR) Ready/Busy Line 3 Interrupt Disable */\r
+/* -------- HSMC_IMR : (HSMC Offset: 0x014) HSMC NFC Interrupt Mask Register -------- */\r
+#define HSMC_IMR_RB_RISE (0x1u << 4) /**< \brief (HSMC_IMR) Ready Busy Rising Edge Detection Interrupt Mask */\r
+#define HSMC_IMR_RB_FALL (0x1u << 5) /**< \brief (HSMC_IMR) Ready Busy Falling Edge Detection Interrupt Mask */\r
+#define HSMC_IMR_XFRDONE (0x1u << 16) /**< \brief (HSMC_IMR) Transfer Done Interrupt Mask */\r
+#define HSMC_IMR_CMDDONE (0x1u << 17) /**< \brief (HSMC_IMR) Command Done Interrupt Mask */\r
+#define HSMC_IMR_DTOE (0x1u << 20) /**< \brief (HSMC_IMR) Data Timeout Error Interrupt Mask */\r
+#define HSMC_IMR_UNDEF (0x1u << 21) /**< \brief (HSMC_IMR) Undefined Area Access Interrupt Mask5 */\r
+#define HSMC_IMR_AWB (0x1u << 22) /**< \brief (HSMC_IMR) Accessing While Busy Interrupt Mask */\r
+#define HSMC_IMR_NFCASE (0x1u << 23) /**< \brief (HSMC_IMR) NFC Access Size Error Interrupt Mask */\r
+#define HSMC_IMR_RB_EDGE3 (0x1u << 27) /**< \brief (HSMC_IMR) Ready/Busy Line 3 Interrupt Mask */\r
+/* -------- HSMC_ADDR : (HSMC Offset: 0x018) HSMC NFC Address Cycle Zero Register -------- */\r
+#define HSMC_ADDR_ADDR_CYCLE0_Pos 0\r
+#define HSMC_ADDR_ADDR_CYCLE0_Msk (0xffu << HSMC_ADDR_ADDR_CYCLE0_Pos) /**< \brief (HSMC_ADDR) NAND Flash Array Address Cycle 0 */\r
+#define HSMC_ADDR_ADDR_CYCLE0(value) ((HSMC_ADDR_ADDR_CYCLE0_Msk & ((value) << HSMC_ADDR_ADDR_CYCLE0_Pos)))\r
+/* -------- HSMC_BANK : (HSMC Offset: 0x01C) HSMC Bank Address Register -------- */\r
+#define HSMC_BANK_BANK (0x1u << 0) /**< \brief (HSMC_BANK) Bank Identifier */\r
+/* -------- HSMC_ECC_CTRL : (HSMC Offset: 0x020) HSMC ECC Control Register -------- */\r
+#define HSMC_ECC_CTRL_RST (0x1u << 0) /**< \brief (HSMC_ECC_CTRL) Reset ECC */\r
+#define HSMC_ECC_CTRL_SWRST (0x1u << 1) /**< \brief (HSMC_ECC_CTRL) Software Reset */\r
+/* -------- HSMC_ECC_MD : (HSMC Offset: 0x024) HSMC ECC Mode Register -------- */\r
+#define HSMC_ECC_MD_ECC_PAGESIZE_Pos 0\r
+#define HSMC_ECC_MD_ECC_PAGESIZE_Msk (0x3u << HSMC_ECC_MD_ECC_PAGESIZE_Pos) /**< \brief (HSMC_ECC_MD) ECC Page Size */\r
+#define   HSMC_ECC_MD_ECC_PAGESIZE_PS512 (0x0u << 0) /**< \brief (HSMC_ECC_MD) Main area 512 Words */\r
+#define   HSMC_ECC_MD_ECC_PAGESIZE_PS1024 (0x1u << 0) /**< \brief (HSMC_ECC_MD) Main area 1024 Words */\r
+#define   HSMC_ECC_MD_ECC_PAGESIZE_PS2048 (0x2u << 0) /**< \brief (HSMC_ECC_MD) Main area 2048 Words */\r
+#define   HSMC_ECC_MD_ECC_PAGESIZE_PS4096 (0x3u << 0) /**< \brief (HSMC_ECC_MD) Main area 4096 Words */\r
+#define HSMC_ECC_MD_TYPCORREC_Pos 4\r
+#define HSMC_ECC_MD_TYPCORREC_Msk (0x3u << HSMC_ECC_MD_TYPCORREC_Pos) /**< \brief (HSMC_ECC_MD) Type of Correction */\r
+#define   HSMC_ECC_MD_TYPCORREC_CPAGE (0x0u << 4) /**< \brief (HSMC_ECC_MD) 1 bit correction for a page of 512/1024/2048/4096 Bytes  (for 8 or 16-bit NAND Flash) */\r
+#define   HSMC_ECC_MD_TYPCORREC_C256B (0x1u << 4) /**< \brief (HSMC_ECC_MD) 1 bit correction for 256 Bytes of data for a page of 512/2048/4096 bytes (for 8-bit NAND Flash only) */\r
+#define   HSMC_ECC_MD_TYPCORREC_C512B (0x2u << 4) /**< \brief (HSMC_ECC_MD) 1 bit correction for 512 Bytes of data for a page of 512/2048/4096 bytes (for 8-bit NAND Flash only) */\r
+#define HSMC_ECC_MD_HAMMING (0x1u << 8) /**< \brief (HSMC_ECC_MD) Hamming Error Correcting Code Selected */\r
+/* -------- HSMC_ECC_SR1 : (HSMC Offset: 0x028) HSMC ECC Status 1 Register -------- */\r
+#define HSMC_ECC_SR1_RECERR0 (0x1u << 0) /**< \brief (HSMC_ECC_SR1) Recoverable Error */\r
+#define HSMC_ECC_SR1_ECCERR0 (0x1u << 1) /**< \brief (HSMC_ECC_SR1) ECC Error */\r
+#define HSMC_ECC_SR1_MULERR0 (0x1u << 2) /**< \brief (HSMC_ECC_SR1) Multiple Error */\r
+#define HSMC_ECC_SR1_RECERR1 (0x1u << 4) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 256th and the 511th Bytes or the 512nd and the 1023rd Bytes */\r
+#define HSMC_ECC_SR1_ECCERR1 (0x1u << 5) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 256th and the 511th Bytes or between the 512nd and the 1023rd Bytes */\r
+#define HSMC_ECC_SR1_MULERR1 (0x1u << 6) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 256th and the 511th Bytes or between the 512nd and the 1023rd Bytes */\r
+#define HSMC_ECC_SR1_RECERR2 (0x1u << 8) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 512nd and the 767th Bytes or between the 1024th and the 1535th Bytes */\r
+#define HSMC_ECC_SR1_ECCERR2 (0x1u << 9) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 512nd and the 767th Bytes or between the 1024th and the 1535th Bytes */\r
+#define HSMC_ECC_SR1_MULERR2 (0x1u << 10) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 512nd and the 767th Bytes or between the 1024th and the 1535th Bytes */\r
+#define HSMC_ECC_SR1_RECERR3 (0x1u << 12) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 768th and the 1023rd Bytes or between the 1536th and the 2047th Bytes */\r
+#define HSMC_ECC_SR1_ECCERR3 (0x1u << 13) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 768th and the 1023rd Bytes or between the 1536th and the 2047th Bytes */\r
+#define HSMC_ECC_SR1_MULERR3 (0x1u << 14) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 768th and the 1023rd Bytes or between the 1536th and the 2047th Bytes */\r
+#define HSMC_ECC_SR1_RECERR4 (0x1u << 16) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 1024th and the 1279th Bytes or between the 2048th and the 2559th Bytes */\r
+#define HSMC_ECC_SR1_ECCERR4 (0x1u << 17) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 1024th and the 1279th Bytes or between the 2048th and the 2559th Bytes */\r
+#define HSMC_ECC_SR1_MULERR4 (0x1u << 18) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 1024th and the 1279th Bytes or between the 2048th and the 2559th Bytes */\r
+#define HSMC_ECC_SR1_RECERR5 (0x1u << 20) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 1280th and the 1535th Bytes or between the 2560th and the 3071st Bytes */\r
+#define HSMC_ECC_SR1_ECCERR5 (0x1u << 21) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 1280th and the 1535th Bytes or between the 2560th and the 3071st Bytes */\r
+#define HSMC_ECC_SR1_MULERR5 (0x1u << 22) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 1280th and the 1535th Bytes or between the 2560th and the 3071st Bytes */\r
+#define HSMC_ECC_SR1_RECERR6 (0x1u << 24) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 1536th and the 1791st Bytes or between the 3072nd and the 3583rd Bytes */\r
+#define HSMC_ECC_SR1_ECCERR6 (0x1u << 25) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 1536th and the 1791st Bytes or between the 3072nd and the 3583rd Bytes */\r
+#define HSMC_ECC_SR1_MULERR6 (0x1u << 26) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 1536th and the 1791st Bytes or between the 3072nd and the 3583rd Bytes */\r
+#define HSMC_ECC_SR1_RECERR7 (0x1u << 28) /**< \brief (HSMC_ECC_SR1) Recoverable Error in the page between the 1792nd and the 2047th Bytes or between the 3584th and the 4095th Bytes */\r
+#define HSMC_ECC_SR1_ECCERR7 (0x1u << 29) /**< \brief (HSMC_ECC_SR1) ECC Error in the page between the 1792nd and the 2047th Bytes or between the 3584th and the 4095th Bytes */\r
+#define HSMC_ECC_SR1_MULERR7 (0x1u << 30) /**< \brief (HSMC_ECC_SR1) Multiple Error in the page between the 1792nd and the 2047th Bytes or between the 3584th and the 4095th Bytes */\r
+/* -------- HSMC_ECC_PR0 : (HSMC Offset: 0x02C) HSMC ECC Parity 0 Register -------- */\r
+#define HSMC_ECC_PR0_BITADDR_Pos 0\r
+#define HSMC_ECC_PR0_BITADDR_Msk (0xfu << HSMC_ECC_PR0_BITADDR_Pos) /**< \brief (HSMC_ECC_PR0) Bit Address */\r
+#define HSMC_ECC_PR0_WORDADDR_Pos 4\r
+#define HSMC_ECC_PR0_WORDADDR_Msk (0xfffu << HSMC_ECC_PR0_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR0) Word Address */\r
+#define HSMC_ECC_PR0_BITADDR_W9BIT_Pos 0\r
+#define HSMC_ECC_PR0_BITADDR_W9BIT_Msk (0x7u << HSMC_ECC_PR0_BITADDR_W9BIT_Pos) /**< \brief (HSMC_ECC_PR0) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR0_WORDADDR_W9BIT_Pos 3\r
+#define HSMC_ECC_PR0_WORDADDR_W9BIT_Msk (0x1ffu << HSMC_ECC_PR0_WORDADDR_W9BIT_Pos) /**< \brief (HSMC_ECC_PR0) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR0_NPARITY_Pos 12\r
+#define HSMC_ECC_PR0_NPARITY_Msk (0xfffu << HSMC_ECC_PR0_NPARITY_Pos) /**< \brief (HSMC_ECC_PR0) Parity N */\r
+#define HSMC_ECC_PR0_BITADDR_W8BIT_Pos 0\r
+#define HSMC_ECC_PR0_BITADDR_W8BIT_Msk (0x7u << HSMC_ECC_PR0_BITADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR0) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR0_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR0_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR0_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR0) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR0_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR0_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR0_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR0) Parity N */\r
+/* -------- HSMC_ECC_PR1 : (HSMC Offset: 0x030) HSMC ECC parity 1 Register -------- */\r
+#define HSMC_ECC_PR1_NPARITY_Pos 0\r
+#define HSMC_ECC_PR1_NPARITY_Msk (0xffffu << HSMC_ECC_PR1_NPARITY_Pos) /**< \brief (HSMC_ECC_PR1) Parity N */\r
+#define HSMC_ECC_PR1_BITADDR_Pos 0\r
+#define HSMC_ECC_PR1_BITADDR_Msk (0x7u << HSMC_ECC_PR1_BITADDR_Pos) /**< \brief (HSMC_ECC_PR1) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR1_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR1_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR1_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR1) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR1_NPARITY_W9BIT_Pos 12\r
+#define HSMC_ECC_PR1_NPARITY_W9BIT_Msk (0xfffu << HSMC_ECC_PR1_NPARITY_W9BIT_Pos) /**< \brief (HSMC_ECC_PR1) Parity N */\r
+#define HSMC_ECC_PR1_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR1_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR1_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR1) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR1_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR1_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR1_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR1) Parity N */\r
+/* -------- HSMC_ECC_SR2 : (HSMC Offset: 0x034) HSMC ECC status 2 Register -------- */\r
+#define HSMC_ECC_SR2_RECERR8 (0x1u << 0) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 2048th and the 2303rd Bytes */\r
+#define HSMC_ECC_SR2_ECCERR8 (0x1u << 1) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 2048th and the 2303rd Bytes */\r
+#define HSMC_ECC_SR2_MULERR8 (0x1u << 2) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 2048th and the 2303rd Bytes */\r
+#define HSMC_ECC_SR2_RECERR9 (0x1u << 4) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 2304th and the 2559th Bytes */\r
+#define HSMC_ECC_SR2_ECCERR9 (0x1u << 5) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 2304th and the 2559th Bytes */\r
+#define HSMC_ECC_SR2_MULERR9 (0x1u << 6) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 2304th and the 2559th Bytes */\r
+#define HSMC_ECC_SR2_RECERR10 (0x1u << 8) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 2560th and the 2815th Bytes */\r
+#define HSMC_ECC_SR2_ECCERR10 (0x1u << 9) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 2560th and the 2815th Bytes */\r
+#define HSMC_ECC_SR2_MULERR10 (0x1u << 10) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 2560th and the 2815th Bytes */\r
+#define HSMC_ECC_SR2_RECERR11 (0x1u << 12) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 2816th and the 3071st Bytes */\r
+#define HSMC_ECC_SR2_ECCERR11 (0x1u << 13) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 2816th and the 3071st Bytes */\r
+#define HSMC_ECC_SR2_MULERR11 (0x1u << 14) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 2816th and the 3071st Bytes */\r
+#define HSMC_ECC_SR2_RECERR12 (0x1u << 16) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 3072nd and the 3327th Bytes */\r
+#define HSMC_ECC_SR2_ECCERR12 (0x1u << 17) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 3072nd and the 3327th Bytes */\r
+#define HSMC_ECC_SR2_MULERR12 (0x1u << 18) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 3072nd and the 3327th Bytes */\r
+#define HSMC_ECC_SR2_RECERR13 (0x1u << 20) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 3328th and the 3583rd Bytes */\r
+#define HSMC_ECC_SR2_ECCERR13 (0x1u << 21) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 3328th and the 3583rd Bytes */\r
+#define HSMC_ECC_SR2_MULERR13 (0x1u << 22) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 3328th and the 3583rd Bytes */\r
+#define HSMC_ECC_SR2_RECERR14 (0x1u << 24) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 3584th and the 3839th Bytes */\r
+#define HSMC_ECC_SR2_ECCERR14 (0x1u << 25) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 3584th and the 3839th Bytes */\r
+#define HSMC_ECC_SR2_MULERR14 (0x1u << 26) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 3584th and the 3839th Bytes */\r
+#define HSMC_ECC_SR2_RECERR15 (0x1u << 28) /**< \brief (HSMC_ECC_SR2) Recoverable Error in the page between the 3840th and the 4095th Bytes */\r
+#define HSMC_ECC_SR2_ECCERR15 (0x1u << 29) /**< \brief (HSMC_ECC_SR2) ECC Error in the page between the 3840th and the 4095th Bytes */\r
+#define HSMC_ECC_SR2_MULERR15 (0x1u << 30) /**< \brief (HSMC_ECC_SR2) Multiple Error in the page between the 3840th and the 4095th Bytes */\r
+/* -------- HSMC_ECC_PR2 : (HSMC Offset: 0x038) HSMC ECC parity 2 Register -------- */\r
+#define HSMC_ECC_PR2_BITADDR_Pos 0\r
+#define HSMC_ECC_PR2_BITADDR_Msk (0x7u << HSMC_ECC_PR2_BITADDR_Pos) /**< \brief (HSMC_ECC_PR2) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR2_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR2_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR2_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR2) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR2_NPARITY_Pos 12\r
+#define HSMC_ECC_PR2_NPARITY_Msk (0xfffu << HSMC_ECC_PR2_NPARITY_Pos) /**< \brief (HSMC_ECC_PR2) Parity N */\r
+#define HSMC_ECC_PR2_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR2_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR2_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR2) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR2_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR2_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR2_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR2) Parity N */\r
+/* -------- HSMC_ECC_PR3 : (HSMC Offset: 0x03C) HSMC ECC parity 3 Register -------- */\r
+#define HSMC_ECC_PR3_BITADDR_Pos 0\r
+#define HSMC_ECC_PR3_BITADDR_Msk (0x7u << HSMC_ECC_PR3_BITADDR_Pos) /**< \brief (HSMC_ECC_PR3) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR3_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR3_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR3_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR3) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR3_NPARITY_Pos 12\r
+#define HSMC_ECC_PR3_NPARITY_Msk (0xfffu << HSMC_ECC_PR3_NPARITY_Pos) /**< \brief (HSMC_ECC_PR3) Parity N */\r
+#define HSMC_ECC_PR3_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR3_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR3_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR3) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR3_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR3_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR3_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR3) Parity N */\r
+/* -------- HSMC_ECC_PR4 : (HSMC Offset: 0x040) HSMC ECC parity 4 Register -------- */\r
+#define HSMC_ECC_PR4_BITADDR_Pos 0\r
+#define HSMC_ECC_PR4_BITADDR_Msk (0x7u << HSMC_ECC_PR4_BITADDR_Pos) /**< \brief (HSMC_ECC_PR4) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR4_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR4_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR4_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR4) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR4_NPARITY_Pos 12\r
+#define HSMC_ECC_PR4_NPARITY_Msk (0xfffu << HSMC_ECC_PR4_NPARITY_Pos) /**< \brief (HSMC_ECC_PR4) Parity N */\r
+#define HSMC_ECC_PR4_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR4_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR4_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR4) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR4_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR4_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR4_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR4) Parity N */\r
+/* -------- HSMC_ECC_PR5 : (HSMC Offset: 0x044) HSMC ECC parity 5 Register -------- */\r
+#define HSMC_ECC_PR5_BITADDR_Pos 0\r
+#define HSMC_ECC_PR5_BITADDR_Msk (0x7u << HSMC_ECC_PR5_BITADDR_Pos) /**< \brief (HSMC_ECC_PR5) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR5_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR5_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR5_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR5) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR5_NPARITY_Pos 12\r
+#define HSMC_ECC_PR5_NPARITY_Msk (0xfffu << HSMC_ECC_PR5_NPARITY_Pos) /**< \brief (HSMC_ECC_PR5) Parity N */\r
+#define HSMC_ECC_PR5_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR5_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR5_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR5) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR5_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR5_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR5_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR5) Parity N */\r
+/* -------- HSMC_ECC_PR6 : (HSMC Offset: 0x048) HSMC ECC parity 6 Register -------- */\r
+#define HSMC_ECC_PR6_BITADDR_Pos 0\r
+#define HSMC_ECC_PR6_BITADDR_Msk (0x7u << HSMC_ECC_PR6_BITADDR_Pos) /**< \brief (HSMC_ECC_PR6) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR6_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR6_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR6_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR6) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR6_NPARITY_Pos 12\r
+#define HSMC_ECC_PR6_NPARITY_Msk (0xfffu << HSMC_ECC_PR6_NPARITY_Pos) /**< \brief (HSMC_ECC_PR6) Parity N */\r
+#define HSMC_ECC_PR6_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR6_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR6_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR6) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR6_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR6_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR6_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR6) Parity N */\r
+/* -------- HSMC_ECC_PR7 : (HSMC Offset: 0x04C) HSMC ECC parity 7 Register -------- */\r
+#define HSMC_ECC_PR7_BITADDR_Pos 0\r
+#define HSMC_ECC_PR7_BITADDR_Msk (0x7u << HSMC_ECC_PR7_BITADDR_Pos) /**< \brief (HSMC_ECC_PR7) Corrupted Bit Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR7_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR7_WORDADDR_Msk (0x1ffu << HSMC_ECC_PR7_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR7) Corrupted Word Address in the Page between (i x 512) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR7_NPARITY_Pos 12\r
+#define HSMC_ECC_PR7_NPARITY_Msk (0xfffu << HSMC_ECC_PR7_NPARITY_Pos) /**< \brief (HSMC_ECC_PR7) Parity N */\r
+#define HSMC_ECC_PR7_WORDADDR_W8BIT_Pos 3\r
+#define HSMC_ECC_PR7_WORDADDR_W8BIT_Msk (0xffu << HSMC_ECC_PR7_WORDADDR_W8BIT_Pos) /**< \brief (HSMC_ECC_PR7) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR7_NPARITY_W8BIT_Pos 12\r
+#define HSMC_ECC_PR7_NPARITY_W8BIT_Msk (0x7ffu << HSMC_ECC_PR7_NPARITY_W8BIT_Pos) /**< \brief (HSMC_ECC_PR7) Parity N */\r
+/* -------- HSMC_ECC_PR8 : (HSMC Offset: 0x050) HSMC ECC parity 8 Register -------- */\r
+#define HSMC_ECC_PR8_BITADDR_Pos 0\r
+#define HSMC_ECC_PR8_BITADDR_Msk (0x7u << HSMC_ECC_PR8_BITADDR_Pos) /**< \brief (HSMC_ECC_PR8) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR8_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR8_WORDADDR_Msk (0xffu << HSMC_ECC_PR8_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR8) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR8_NPARITY_Pos 12\r
+#define HSMC_ECC_PR8_NPARITY_Msk (0x7ffu << HSMC_ECC_PR8_NPARITY_Pos) /**< \brief (HSMC_ECC_PR8) Parity N */\r
+/* -------- HSMC_ECC_PR9 : (HSMC Offset: 0x054) HSMC ECC parity 9 Register -------- */\r
+#define HSMC_ECC_PR9_BITADDR_Pos 0\r
+#define HSMC_ECC_PR9_BITADDR_Msk (0x7u << HSMC_ECC_PR9_BITADDR_Pos) /**< \brief (HSMC_ECC_PR9) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR9_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR9_WORDADDR_Msk (0xffu << HSMC_ECC_PR9_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR9) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR9_NPARITY_Pos 12\r
+#define HSMC_ECC_PR9_NPARITY_Msk (0x7ffu << HSMC_ECC_PR9_NPARITY_Pos) /**< \brief (HSMC_ECC_PR9) Parity N */\r
+/* -------- HSMC_ECC_PR10 : (HSMC Offset: 0x058) HSMC ECC parity 10 Register -------- */\r
+#define HSMC_ECC_PR10_BITADDR_Pos 0\r
+#define HSMC_ECC_PR10_BITADDR_Msk (0x7u << HSMC_ECC_PR10_BITADDR_Pos) /**< \brief (HSMC_ECC_PR10) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR10_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR10_WORDADDR_Msk (0xffu << HSMC_ECC_PR10_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR10) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR10_NPARITY_Pos 12\r
+#define HSMC_ECC_PR10_NPARITY_Msk (0x7ffu << HSMC_ECC_PR10_NPARITY_Pos) /**< \brief (HSMC_ECC_PR10) Parity N */\r
+/* -------- HSMC_ECC_PR11 : (HSMC Offset: 0x05C) HSMC ECC parity 11 Register -------- */\r
+#define HSMC_ECC_PR11_BITADDR_Pos 0\r
+#define HSMC_ECC_PR11_BITADDR_Msk (0x7u << HSMC_ECC_PR11_BITADDR_Pos) /**< \brief (HSMC_ECC_PR11) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR11_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR11_WORDADDR_Msk (0xffu << HSMC_ECC_PR11_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR11) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR11_NPARITY_Pos 12\r
+#define HSMC_ECC_PR11_NPARITY_Msk (0x7ffu << HSMC_ECC_PR11_NPARITY_Pos) /**< \brief (HSMC_ECC_PR11) Parity N */\r
+/* -------- HSMC_ECC_PR12 : (HSMC Offset: 0x060) HSMC ECC parity 12 Register -------- */\r
+#define HSMC_ECC_PR12_BITADDR_Pos 0\r
+#define HSMC_ECC_PR12_BITADDR_Msk (0x7u << HSMC_ECC_PR12_BITADDR_Pos) /**< \brief (HSMC_ECC_PR12) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR12_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR12_WORDADDR_Msk (0xffu << HSMC_ECC_PR12_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR12) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR12_NPARITY_Pos 12\r
+#define HSMC_ECC_PR12_NPARITY_Msk (0x7ffu << HSMC_ECC_PR12_NPARITY_Pos) /**< \brief (HSMC_ECC_PR12) Parity N */\r
+/* -------- HSMC_ECC_PR13 : (HSMC Offset: 0x064) HSMC ECC parity 13 Register -------- */\r
+#define HSMC_ECC_PR13_BITADDR_Pos 0\r
+#define HSMC_ECC_PR13_BITADDR_Msk (0x7u << HSMC_ECC_PR13_BITADDR_Pos) /**< \brief (HSMC_ECC_PR13) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR13_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR13_WORDADDR_Msk (0xffu << HSMC_ECC_PR13_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR13) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR13_NPARITY_Pos 12\r
+#define HSMC_ECC_PR13_NPARITY_Msk (0x7ffu << HSMC_ECC_PR13_NPARITY_Pos) /**< \brief (HSMC_ECC_PR13) Parity N */\r
+/* -------- HSMC_ECC_PR14 : (HSMC Offset: 0x068) HSMC ECC parity 14 Register -------- */\r
+#define HSMC_ECC_PR14_BITADDR_Pos 0\r
+#define HSMC_ECC_PR14_BITADDR_Msk (0x7u << HSMC_ECC_PR14_BITADDR_Pos) /**< \brief (HSMC_ECC_PR14) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR14_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR14_WORDADDR_Msk (0xffu << HSMC_ECC_PR14_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR14) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR14_NPARITY_Pos 12\r
+#define HSMC_ECC_PR14_NPARITY_Msk (0x7ffu << HSMC_ECC_PR14_NPARITY_Pos) /**< \brief (HSMC_ECC_PR14) Parity N */\r
+/* -------- HSMC_ECC_PR15 : (HSMC Offset: 0x06C) HSMC ECC parity 15 Register -------- */\r
+#define HSMC_ECC_PR15_BITADDR_Pos 0\r
+#define HSMC_ECC_PR15_BITADDR_Msk (0x7u << HSMC_ECC_PR15_BITADDR_Pos) /**< \brief (HSMC_ECC_PR15) Corrupted Bit Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR15_WORDADDR_Pos 3\r
+#define HSMC_ECC_PR15_WORDADDR_Msk (0xffu << HSMC_ECC_PR15_WORDADDR_Pos) /**< \brief (HSMC_ECC_PR15) Corrupted Word Address in the Page between (i x 256) and ((i + 1) x 512) - 1) Bytes */\r
+#define HSMC_ECC_PR15_NPARITY_Pos 12\r
+#define HSMC_ECC_PR15_NPARITY_Msk (0x7ffu << HSMC_ECC_PR15_NPARITY_Pos) /**< \brief (HSMC_ECC_PR15) Parity N */\r
+/* -------- HSMC_PMECCFG : (HSMC Offset: 0x70) PMECC Configuration Register -------- */\r
+#define HSMC_PMECCFG_BCH_ERR_Pos 0\r
+#define HSMC_PMECCFG_BCH_ERR_Msk (0x7u << HSMC_PMECCFG_BCH_ERR_Pos) /**< \brief (HSMC_PMECCFG) Error Correcting Capability */\r
+#define   HSMC_PMECCFG_BCH_ERR_BCH_ERR2 (0x0u << 0) /**< \brief (HSMC_PMECCFG) 2 errors */\r
+#define   HSMC_PMECCFG_BCH_ERR_BCH_ERR4 (0x1u << 0) /**< \brief (HSMC_PMECCFG) 4 errors */\r
+#define   HSMC_PMECCFG_BCH_ERR_BCH_ERR8 (0x2u << 0) /**< \brief (HSMC_PMECCFG) 8 errors */\r
+#define   HSMC_PMECCFG_BCH_ERR_BCH_ERR12 (0x3u << 0) /**< \brief (HSMC_PMECCFG) 12 errors */\r
+#define   HSMC_PMECCFG_BCH_ERR_BCH_ERR24 (0x4u << 0) /**< \brief (HSMC_PMECCFG) 24 errors */\r
+#define HSMC_PMECCFG_SECTORSZ (0x1u << 4) /**< \brief (HSMC_PMECCFG) Sector Size */\r
+#define HSMC_PMECCFG_PAGESIZE_Pos 8\r
+#define HSMC_PMECCFG_PAGESIZE_Msk (0x3u << HSMC_PMECCFG_PAGESIZE_Pos) /**< \brief (HSMC_PMECCFG) Number of Sectors in the Page */\r
+#define   HSMC_PMECCFG_PAGESIZE_PAGESIZE_1SEC (0x0u << 8) /**< \brief (HSMC_PMECCFG) 1 sector for main area (512 or 1024 Bytes) */\r
+#define   HSMC_PMECCFG_PAGESIZE_PAGESIZE_2SEC (0x1u << 8) /**< \brief (HSMC_PMECCFG) 2 sectors for main area (1024 or 2048 Bytes) */\r
+#define   HSMC_PMECCFG_PAGESIZE_PAGESIZE_4SEC (0x2u << 8) /**< \brief (HSMC_PMECCFG) 4 sectors for main area (2048 or 4096 Bytes) */\r
+#define   HSMC_PMECCFG_PAGESIZE_PAGESIZE_8SEC (0x3u << 8) /**< \brief (HSMC_PMECCFG) 8 sectors for main area (4096 or 8192 Bytes) */\r
+#define HSMC_PMECCFG_NANDWR (0x1u << 12) /**< \brief (HSMC_PMECCFG) NAND Write Access */\r
+#define HSMC_PMECCFG_SPAREEN (0x1u << 16) /**< \brief (HSMC_PMECCFG) Spare Enable */\r
+#define HSMC_PMECCFG_AUTO (0x1u << 20) /**< \brief (HSMC_PMECCFG) Automatic Mode Enable */\r
+/* -------- HSMC_PMECCSAREA : (HSMC Offset: 0x74) PMECC Spare Area Size Register -------- */\r
+#define HSMC_PMECCSAREA_SPARESIZE_Pos 0\r
+#define HSMC_PMECCSAREA_SPARESIZE_Msk (0x1ffu << HSMC_PMECCSAREA_SPARESIZE_Pos) /**< \brief (HSMC_PMECCSAREA) Spare Area Size */\r
+#define HSMC_PMECCSAREA_SPARESIZE(value) ((HSMC_PMECCSAREA_SPARESIZE_Msk & ((value) << HSMC_PMECCSAREA_SPARESIZE_Pos)))\r
+/* -------- HSMC_PMECCSADDR : (HSMC Offset: 0x78) PMECC Start Address Register -------- */\r
+#define HSMC_PMECCSADDR_STARTADDR_Pos 0\r
+#define HSMC_PMECCSADDR_STARTADDR_Msk (0x1ffu << HSMC_PMECCSADDR_STARTADDR_Pos) /**< \brief (HSMC_PMECCSADDR) ECC Area Start Address */\r
+#define HSMC_PMECCSADDR_STARTADDR(value) ((HSMC_PMECCSADDR_STARTADDR_Msk & ((value) << HSMC_PMECCSADDR_STARTADDR_Pos)))\r
+/* -------- HSMC_PMECCEADDR : (HSMC Offset: 0x7C) PMECC End Address Register -------- */\r
+#define HSMC_PMECCEADDR_ENDADDR_Pos 0\r
+#define HSMC_PMECCEADDR_ENDADDR_Msk (0x1ffu << HSMC_PMECCEADDR_ENDADDR_Pos) /**< \brief (HSMC_PMECCEADDR) ECC Area End Address */\r
+#define HSMC_PMECCEADDR_ENDADDR(value) ((HSMC_PMECCEADDR_ENDADDR_Msk & ((value) << HSMC_PMECCEADDR_ENDADDR_Pos)))\r
+/* -------- HSMC_PMECCTRL : (HSMC Offset: 0x84) PMECC Control Register -------- */\r
+#define HSMC_PMECCTRL_RST (0x1u << 0) /**< \brief (HSMC_PMECCTRL) Reset the PMECC Module */\r
+#define HSMC_PMECCTRL_DATA (0x1u << 1) /**< \brief (HSMC_PMECCTRL) Start a Data Phase */\r
+#define HSMC_PMECCTRL_USER (0x1u << 2) /**< \brief (HSMC_PMECCTRL) Start a User Mode Phase */\r
+#define HSMC_PMECCTRL_ENABLE (0x1u << 4) /**< \brief (HSMC_PMECCTRL) PMECC Enable */\r
+#define HSMC_PMECCTRL_DISABLE (0x1u << 5) /**< \brief (HSMC_PMECCTRL) PMECC Enable */\r
+/* -------- HSMC_PMECCSR : (HSMC Offset: 0x88) PMECC Status Register -------- */\r
+#define HSMC_PMECCSR_BUSY (0x1u << 0) /**< \brief (HSMC_PMECCSR) The kernel of the PMECC is busy */\r
+#define HSMC_PMECCSR_ENABLE (0x1u << 4) /**< \brief (HSMC_PMECCSR) PMECC Enable bit */\r
+/* -------- HSMC_PMECCIER : (HSMC Offset: 0x8C) PMECC Interrupt Enable register -------- */\r
+#define HSMC_PMECCIER_ERRIE (0x1u << 0) /**< \brief (HSMC_PMECCIER) Error Interrupt Enable */\r
+/* -------- HSMC_PMECCIDR : (HSMC Offset: 0x90) PMECC Interrupt Disable Register -------- */\r
+#define HSMC_PMECCIDR_ERRID (0x1u << 0) /**< \brief (HSMC_PMECCIDR) Error Interrupt Disable */\r
+/* -------- HSMC_PMECCIMR : (HSMC Offset: 0x94) PMECC Interrupt Mask Register -------- */\r
+#define HSMC_PMECCIMR_ERRIM (0x1u << 0) /**< \brief (HSMC_PMECCIMR) Error Interrupt Mask */\r
+/* -------- HSMC_PMECCISR : (HSMC Offset: 0x98) PMECC Interrupt Status Register -------- */\r
+#define HSMC_PMECCISR_ERRIS_Pos 0\r
+#define HSMC_PMECCISR_ERRIS_Msk (0xffu << HSMC_PMECCISR_ERRIS_Pos) /**< \brief (HSMC_PMECCISR) Error Interrupt Status Register */\r
+/* -------- HSMC_PMECC[11] : (HSMC Offset: N/A) PMECC Redundancy x Register -------- */\r
+#define HSMC_PMECC_ECC_Pos 0\r
+#define HSMC_PMECC_ECC_Msk (0xffffffffu << HSMC_PMECC_ECC_Pos) /**< \brief (HSMC_PMECC[11]) BCH Redundancy */\r
+/* -------- HSMC_REM[12] : (HSMC Offset: N/A) PMECC Remainder x Register -------- */\r
+#define HSMC_REM_REM2NP1_Pos 0\r
+#define HSMC_REM_REM2NP1_Msk (0x3fffu << HSMC_REM_REM2NP1_Pos) /**< \brief (HSMC_REM[12]) BCH Remainder 2 * N + 1 */\r
+#define HSMC_REM_REM2NP3_Pos 16\r
+#define HSMC_REM_REM2NP3_Msk (0x3fffu << HSMC_REM_REM2NP3_Pos) /**< \brief (HSMC_REM[12]) BCH Remainder 2 * N + 3 */\r
+/* -------- HSMC_ELCFG : (HSMC Offset: 0x500) PMECC Error Location Configuration Register -------- */\r
+#define HSMC_ELCFG_SECTORSZ (0x1u << 0) /**< \brief (HSMC_ELCFG) Sector Size */\r
+#define HSMC_ELCFG_ERRNUM_Pos 16\r
+#define HSMC_ELCFG_ERRNUM_Msk (0x1fu << HSMC_ELCFG_ERRNUM_Pos) /**< \brief (HSMC_ELCFG) Number of Errors */\r
+#define HSMC_ELCFG_ERRNUM(value) ((HSMC_ELCFG_ERRNUM_Msk & ((value) << HSMC_ELCFG_ERRNUM_Pos)))\r
+/* -------- HSMC_ELPRIM : (HSMC Offset: 0x504) PMECC Error Location Primitive Register -------- */\r
+#define HSMC_ELPRIM_PRIMITIV_Pos 0\r
+#define HSMC_ELPRIM_PRIMITIV_Msk (0xffffu << HSMC_ELPRIM_PRIMITIV_Pos) /**< \brief (HSMC_ELPRIM) Primitive Polynomial */\r
+/* -------- HSMC_ELEN : (HSMC Offset: 0x508) PMECC Error Location Enable Register -------- */\r
+#define HSMC_ELEN_ENINIT_Pos 0\r
+#define HSMC_ELEN_ENINIT_Msk (0x3fffu << HSMC_ELEN_ENINIT_Pos) /**< \brief (HSMC_ELEN) Error Location Enable */\r
+#define HSMC_ELEN_ENINIT(value) ((HSMC_ELEN_ENINIT_Msk & ((value) << HSMC_ELEN_ENINIT_Pos)))\r
+/* -------- HSMC_ELDIS : (HSMC Offset: 0x50C) PMECC Error Location Disable Register -------- */\r
+#define HSMC_ELDIS_DIS (0x1u << 0) /**< \brief (HSMC_ELDIS) Disable Error Location Engine */\r
+/* -------- HSMC_ELSR : (HSMC Offset: 0x510) PMECC Error Location Status Register -------- */\r
+#define HSMC_ELSR_BUSY (0x1u << 0) /**< \brief (HSMC_ELSR) Error Location Engine Busy */\r
+/* -------- HSMC_ELIER : (HSMC Offset: 0x514) PMECC Error Location Interrupt Enable register -------- */\r
+#define HSMC_ELIER_DONE (0x1u << 0) /**< \brief (HSMC_ELIER) Computation Terminated Interrupt Enable */\r
+/* -------- HSMC_ELIDR : (HSMC Offset: 0x518) PMECC Error Location Interrupt Disable Register -------- */\r
+#define HSMC_ELIDR_DONE (0x1u << 0) /**< \brief (HSMC_ELIDR) Computation Terminated Interrupt Disable */\r
+/* -------- HSMC_ELIMR : (HSMC Offset: 0x51C) PMECC Error Location Interrupt Mask Register -------- */\r
+#define HSMC_ELIMR_DONE (0x1u << 0) /**< \brief (HSMC_ELIMR) Computation Terminated Interrupt Mask */\r
+/* -------- HSMC_ELISR : (HSMC Offset: 0x520) PMECC Error Location Interrupt Status Register -------- */\r
+#define HSMC_ELISR_DONE (0x1u << 0) /**< \brief (HSMC_ELISR) Computation Terminated Interrupt Status */\r
+#define HSMC_ELISR_ERR_CNT_Pos 8\r
+#define HSMC_ELISR_ERR_CNT_Msk (0x1fu << HSMC_ELISR_ERR_CNT_Pos) /**< \brief (HSMC_ELISR) Error Counter value */\r
+/* -------- HSMC_SIGMA0 : (HSMC Offset: 0x528) PMECC Error Location SIGMA 0 Register -------- */\r
+#define HSMC_SIGMA0_SIGMA0_Pos 0\r
+#define HSMC_SIGMA0_SIGMA0_Msk (0x3fffu << HSMC_SIGMA0_SIGMA0_Pos) /**< \brief (HSMC_SIGMA0) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA0_SIGMA0(value) ((HSMC_SIGMA0_SIGMA0_Msk & ((value) << HSMC_SIGMA0_SIGMA0_Pos)))\r
+/* -------- HSMC_SIGMA1 : (HSMC Offset: 0x52C) PMECC Error Location SIGMA 1 Register -------- */\r
+#define HSMC_SIGMA1_SIGMA1_Pos 0\r
+#define HSMC_SIGMA1_SIGMA1_Msk (0x3fffu << HSMC_SIGMA1_SIGMA1_Pos) /**< \brief (HSMC_SIGMA1) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA1_SIGMA1(value) ((HSMC_SIGMA1_SIGMA1_Msk & ((value) << HSMC_SIGMA1_SIGMA1_Pos)))\r
+/* -------- HSMC_SIGMA2 : (HSMC Offset: 0x530) PMECC Error Location SIGMA 2 Register -------- */\r
+#define HSMC_SIGMA2_SIGMA2_Pos 0\r
+#define HSMC_SIGMA2_SIGMA2_Msk (0x3fffu << HSMC_SIGMA2_SIGMA2_Pos) /**< \brief (HSMC_SIGMA2) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA2_SIGMA2(value) ((HSMC_SIGMA2_SIGMA2_Msk & ((value) << HSMC_SIGMA2_SIGMA2_Pos)))\r
+/* -------- HSMC_SIGMA3 : (HSMC Offset: 0x534) PMECC Error Location SIGMA 3 Register -------- */\r
+#define HSMC_SIGMA3_SIGMA3_Pos 0\r
+#define HSMC_SIGMA3_SIGMA3_Msk (0x3fffu << HSMC_SIGMA3_SIGMA3_Pos) /**< \brief (HSMC_SIGMA3) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA3_SIGMA3(value) ((HSMC_SIGMA3_SIGMA3_Msk & ((value) << HSMC_SIGMA3_SIGMA3_Pos)))\r
+/* -------- HSMC_SIGMA4 : (HSMC Offset: 0x538) PMECC Error Location SIGMA 4 Register -------- */\r
+#define HSMC_SIGMA4_SIGMA4_Pos 0\r
+#define HSMC_SIGMA4_SIGMA4_Msk (0x3fffu << HSMC_SIGMA4_SIGMA4_Pos) /**< \brief (HSMC_SIGMA4) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA4_SIGMA4(value) ((HSMC_SIGMA4_SIGMA4_Msk & ((value) << HSMC_SIGMA4_SIGMA4_Pos)))\r
+/* -------- HSMC_SIGMA5 : (HSMC Offset: 0x53C) PMECC Error Location SIGMA 5 Register -------- */\r
+#define HSMC_SIGMA5_SIGMA5_Pos 0\r
+#define HSMC_SIGMA5_SIGMA5_Msk (0x3fffu << HSMC_SIGMA5_SIGMA5_Pos) /**< \brief (HSMC_SIGMA5) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA5_SIGMA5(value) ((HSMC_SIGMA5_SIGMA5_Msk & ((value) << HSMC_SIGMA5_SIGMA5_Pos)))\r
+/* -------- HSMC_SIGMA6 : (HSMC Offset: 0x540) PMECC Error Location SIGMA 6 Register -------- */\r
+#define HSMC_SIGMA6_SIGMA6_Pos 0\r
+#define HSMC_SIGMA6_SIGMA6_Msk (0x3fffu << HSMC_SIGMA6_SIGMA6_Pos) /**< \brief (HSMC_SIGMA6) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA6_SIGMA6(value) ((HSMC_SIGMA6_SIGMA6_Msk & ((value) << HSMC_SIGMA6_SIGMA6_Pos)))\r
+/* -------- HSMC_SIGMA7 : (HSMC Offset: 0x544) PMECC Error Location SIGMA 7 Register -------- */\r
+#define HSMC_SIGMA7_SIGMA7_Pos 0\r
+#define HSMC_SIGMA7_SIGMA7_Msk (0x3fffu << HSMC_SIGMA7_SIGMA7_Pos) /**< \brief (HSMC_SIGMA7) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA7_SIGMA7(value) ((HSMC_SIGMA7_SIGMA7_Msk & ((value) << HSMC_SIGMA7_SIGMA7_Pos)))\r
+/* -------- HSMC_SIGMA8 : (HSMC Offset: 0x548) PMECC Error Location SIGMA 8 Register -------- */\r
+#define HSMC_SIGMA8_SIGMA8_Pos 0\r
+#define HSMC_SIGMA8_SIGMA8_Msk (0x3fffu << HSMC_SIGMA8_SIGMA8_Pos) /**< \brief (HSMC_SIGMA8) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA8_SIGMA8(value) ((HSMC_SIGMA8_SIGMA8_Msk & ((value) << HSMC_SIGMA8_SIGMA8_Pos)))\r
+/* -------- HSMC_SIGMA9 : (HSMC Offset: 0x54C) PMECC Error Location SIGMA 9 Register -------- */\r
+#define HSMC_SIGMA9_SIGMA9_Pos 0\r
+#define HSMC_SIGMA9_SIGMA9_Msk (0x3fffu << HSMC_SIGMA9_SIGMA9_Pos) /**< \brief (HSMC_SIGMA9) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA9_SIGMA9(value) ((HSMC_SIGMA9_SIGMA9_Msk & ((value) << HSMC_SIGMA9_SIGMA9_Pos)))\r
+/* -------- HSMC_SIGMA10 : (HSMC Offset: 0x550) PMECC Error Location SIGMA 10 Register -------- */\r
+#define HSMC_SIGMA10_SIGMA10_Pos 0\r
+#define HSMC_SIGMA10_SIGMA10_Msk (0x3fffu << HSMC_SIGMA10_SIGMA10_Pos) /**< \brief (HSMC_SIGMA10) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA10_SIGMA10(value) ((HSMC_SIGMA10_SIGMA10_Msk & ((value) << HSMC_SIGMA10_SIGMA10_Pos)))\r
+/* -------- HSMC_SIGMA11 : (HSMC Offset: 0x554) PMECC Error Location SIGMA 11 Register -------- */\r
+#define HSMC_SIGMA11_SIGMA11_Pos 0\r
+#define HSMC_SIGMA11_SIGMA11_Msk (0x3fffu << HSMC_SIGMA11_SIGMA11_Pos) /**< \brief (HSMC_SIGMA11) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA11_SIGMA11(value) ((HSMC_SIGMA11_SIGMA11_Msk & ((value) << HSMC_SIGMA11_SIGMA11_Pos)))\r
+/* -------- HSMC_SIGMA12 : (HSMC Offset: 0x558) PMECC Error Location SIGMA 12 Register -------- */\r
+#define HSMC_SIGMA12_SIGMA12_Pos 0\r
+#define HSMC_SIGMA12_SIGMA12_Msk (0x3fffu << HSMC_SIGMA12_SIGMA12_Pos) /**< \brief (HSMC_SIGMA12) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA12_SIGMA12(value) ((HSMC_SIGMA12_SIGMA12_Msk & ((value) << HSMC_SIGMA12_SIGMA12_Pos)))\r
+/* -------- HSMC_SIGMA13 : (HSMC Offset: 0x55C) PMECC Error Location SIGMA 13 Register -------- */\r
+#define HSMC_SIGMA13_SIGMA13_Pos 0\r
+#define HSMC_SIGMA13_SIGMA13_Msk (0x3fffu << HSMC_SIGMA13_SIGMA13_Pos) /**< \brief (HSMC_SIGMA13) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA13_SIGMA13(value) ((HSMC_SIGMA13_SIGMA13_Msk & ((value) << HSMC_SIGMA13_SIGMA13_Pos)))\r
+/* -------- HSMC_SIGMA14 : (HSMC Offset: 0x560) PMECC Error Location SIGMA 14 Register -------- */\r
+#define HSMC_SIGMA14_SIGMA14_Pos 0\r
+#define HSMC_SIGMA14_SIGMA14_Msk (0x3fffu << HSMC_SIGMA14_SIGMA14_Pos) /**< \brief (HSMC_SIGMA14) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA14_SIGMA14(value) ((HSMC_SIGMA14_SIGMA14_Msk & ((value) << HSMC_SIGMA14_SIGMA14_Pos)))\r
+/* -------- HSMC_SIGMA15 : (HSMC Offset: 0x564) PMECC Error Location SIGMA 15 Register -------- */\r
+#define HSMC_SIGMA15_SIGMA15_Pos 0\r
+#define HSMC_SIGMA15_SIGMA15_Msk (0x3fffu << HSMC_SIGMA15_SIGMA15_Pos) /**< \brief (HSMC_SIGMA15) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA15_SIGMA15(value) ((HSMC_SIGMA15_SIGMA15_Msk & ((value) << HSMC_SIGMA15_SIGMA15_Pos)))\r
+/* -------- HSMC_SIGMA16 : (HSMC Offset: 0x568) PMECC Error Location SIGMA 16 Register -------- */\r
+#define HSMC_SIGMA16_SIGMA16_Pos 0\r
+#define HSMC_SIGMA16_SIGMA16_Msk (0x3fffu << HSMC_SIGMA16_SIGMA16_Pos) /**< \brief (HSMC_SIGMA16) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA16_SIGMA16(value) ((HSMC_SIGMA16_SIGMA16_Msk & ((value) << HSMC_SIGMA16_SIGMA16_Pos)))\r
+/* -------- HSMC_SIGMA17 : (HSMC Offset: 0x56C) PMECC Error Location SIGMA 17 Register -------- */\r
+#define HSMC_SIGMA17_SIGMA17_Pos 0\r
+#define HSMC_SIGMA17_SIGMA17_Msk (0x3fffu << HSMC_SIGMA17_SIGMA17_Pos) /**< \brief (HSMC_SIGMA17) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA17_SIGMA17(value) ((HSMC_SIGMA17_SIGMA17_Msk & ((value) << HSMC_SIGMA17_SIGMA17_Pos)))\r
+/* -------- HSMC_SIGMA18 : (HSMC Offset: 0x570) PMECC Error Location SIGMA 18 Register -------- */\r
+#define HSMC_SIGMA18_SIGMA18_Pos 0\r
+#define HSMC_SIGMA18_SIGMA18_Msk (0x3fffu << HSMC_SIGMA18_SIGMA18_Pos) /**< \brief (HSMC_SIGMA18) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA18_SIGMA18(value) ((HSMC_SIGMA18_SIGMA18_Msk & ((value) << HSMC_SIGMA18_SIGMA18_Pos)))\r
+/* -------- HSMC_SIGMA19 : (HSMC Offset: 0x574) PMECC Error Location SIGMA 19 Register -------- */\r
+#define HSMC_SIGMA19_SIGMA19_Pos 0\r
+#define HSMC_SIGMA19_SIGMA19_Msk (0x3fffu << HSMC_SIGMA19_SIGMA19_Pos) /**< \brief (HSMC_SIGMA19) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA19_SIGMA19(value) ((HSMC_SIGMA19_SIGMA19_Msk & ((value) << HSMC_SIGMA19_SIGMA19_Pos)))\r
+/* -------- HSMC_SIGMA20 : (HSMC Offset: 0x578) PMECC Error Location SIGMA 20 Register -------- */\r
+#define HSMC_SIGMA20_SIGMA20_Pos 0\r
+#define HSMC_SIGMA20_SIGMA20_Msk (0x3fffu << HSMC_SIGMA20_SIGMA20_Pos) /**< \brief (HSMC_SIGMA20) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA20_SIGMA20(value) ((HSMC_SIGMA20_SIGMA20_Msk & ((value) << HSMC_SIGMA20_SIGMA20_Pos)))\r
+/* -------- HSMC_SIGMA21 : (HSMC Offset: 0x57C) PMECC Error Location SIGMA 21 Register -------- */\r
+#define HSMC_SIGMA21_SIGMA21_Pos 0\r
+#define HSMC_SIGMA21_SIGMA21_Msk (0x3fffu << HSMC_SIGMA21_SIGMA21_Pos) /**< \brief (HSMC_SIGMA21) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA21_SIGMA21(value) ((HSMC_SIGMA21_SIGMA21_Msk & ((value) << HSMC_SIGMA21_SIGMA21_Pos)))\r
+/* -------- HSMC_SIGMA22 : (HSMC Offset: 0x580) PMECC Error Location SIGMA 22 Register -------- */\r
+#define HSMC_SIGMA22_SIGMA22_Pos 0\r
+#define HSMC_SIGMA22_SIGMA22_Msk (0x3fffu << HSMC_SIGMA22_SIGMA22_Pos) /**< \brief (HSMC_SIGMA22) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA22_SIGMA22(value) ((HSMC_SIGMA22_SIGMA22_Msk & ((value) << HSMC_SIGMA22_SIGMA22_Pos)))\r
+/* -------- HSMC_SIGMA23 : (HSMC Offset: 0x584) PMECC Error Location SIGMA 23 Register -------- */\r
+#define HSMC_SIGMA23_SIGMA23_Pos 0\r
+#define HSMC_SIGMA23_SIGMA23_Msk (0x3fffu << HSMC_SIGMA23_SIGMA23_Pos) /**< \brief (HSMC_SIGMA23) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA23_SIGMA23(value) ((HSMC_SIGMA23_SIGMA23_Msk & ((value) << HSMC_SIGMA23_SIGMA23_Pos)))\r
+/* -------- HSMC_SIGMA24 : (HSMC Offset: 0x588) PMECC Error Location SIGMA 24 Register -------- */\r
+#define HSMC_SIGMA24_SIGMA24_Pos 0\r
+#define HSMC_SIGMA24_SIGMA24_Msk (0x3fffu << HSMC_SIGMA24_SIGMA24_Pos) /**< \brief (HSMC_SIGMA24) Coefficient of degree x in the SIGMA polynomial. */\r
+#define HSMC_SIGMA24_SIGMA24(value) ((HSMC_SIGMA24_SIGMA24_Msk & ((value) << HSMC_SIGMA24_SIGMA24_Pos)))\r
+/* -------- HSMC_ERRLOC[24] : (HSMC Offset: 0x58C) PMECC Error Location 0 Register -------- */\r
+#define HSMC_ERRLOC_ERRLOCN_Pos 0\r
+#define HSMC_ERRLOC_ERRLOCN_Msk (0x3fffu << HSMC_ERRLOC_ERRLOCN_Pos) /**< \brief (HSMC_ERRLOC[24]) Error Position within the Set {sector area, spare area} */\r
+/* -------- HSMC_SETUP : (HSMC Offset: N/A) HSMC Setup Register -------- */\r
+#define HSMC_SETUP_NWE_SETUP_Pos 0\r
+#define HSMC_SETUP_NWE_SETUP_Msk (0x3fu << HSMC_SETUP_NWE_SETUP_Pos) /**< \brief (HSMC_SETUP) NWE Setup Length */\r
+#define HSMC_SETUP_NWE_SETUP(value) ((HSMC_SETUP_NWE_SETUP_Msk & ((value) << HSMC_SETUP_NWE_SETUP_Pos)))\r
+#define HSMC_SETUP_NCS_WR_SETUP_Pos 8\r
+#define HSMC_SETUP_NCS_WR_SETUP_Msk (0x3fu << HSMC_SETUP_NCS_WR_SETUP_Pos) /**< \brief (HSMC_SETUP) NCS Setup Length in Write Access */\r
+#define HSMC_SETUP_NCS_WR_SETUP(value) ((HSMC_SETUP_NCS_WR_SETUP_Msk & ((value) << HSMC_SETUP_NCS_WR_SETUP_Pos)))\r
+#define HSMC_SETUP_NRD_SETUP_Pos 16\r
+#define HSMC_SETUP_NRD_SETUP_Msk (0x3fu << HSMC_SETUP_NRD_SETUP_Pos) /**< \brief (HSMC_SETUP) NRD Setup Length */\r
+#define HSMC_SETUP_NRD_SETUP(value) ((HSMC_SETUP_NRD_SETUP_Msk & ((value) << HSMC_SETUP_NRD_SETUP_Pos)))\r
+#define HSMC_SETUP_NCS_RD_SETUP_Pos 24\r
+#define HSMC_SETUP_NCS_RD_SETUP_Msk (0x3fu << HSMC_SETUP_NCS_RD_SETUP_Pos) /**< \brief (HSMC_SETUP) NCS Setup Length in Read Access */\r
+#define HSMC_SETUP_NCS_RD_SETUP(value) ((HSMC_SETUP_NCS_RD_SETUP_Msk & ((value) << HSMC_SETUP_NCS_RD_SETUP_Pos)))\r
+/* -------- HSMC_PULSE : (HSMC Offset: N/A) HSMC Pulse Register -------- */\r
+#define HSMC_PULSE_NWE_PULSE_Pos 0\r
+#define HSMC_PULSE_NWE_PULSE_Msk (0x3fu << HSMC_PULSE_NWE_PULSE_Pos) /**< \brief (HSMC_PULSE) NWE Pulse Length */\r
+#define HSMC_PULSE_NWE_PULSE(value) ((HSMC_PULSE_NWE_PULSE_Msk & ((value) << HSMC_PULSE_NWE_PULSE_Pos)))\r
+#define HSMC_PULSE_NCS_WR_PULSE_Pos 8\r
+#define HSMC_PULSE_NCS_WR_PULSE_Msk (0x3fu << HSMC_PULSE_NCS_WR_PULSE_Pos) /**< \brief (HSMC_PULSE) NCS Pulse Length in WRITE Access */\r
+#define HSMC_PULSE_NCS_WR_PULSE(value) ((HSMC_PULSE_NCS_WR_PULSE_Msk & ((value) << HSMC_PULSE_NCS_WR_PULSE_Pos)))\r
+#define HSMC_PULSE_NRD_PULSE_Pos 16\r
+#define HSMC_PULSE_NRD_PULSE_Msk (0x3fu << HSMC_PULSE_NRD_PULSE_Pos) /**< \brief (HSMC_PULSE) NRD Pulse Length */\r
+#define HSMC_PULSE_NRD_PULSE(value) ((HSMC_PULSE_NRD_PULSE_Msk & ((value) << HSMC_PULSE_NRD_PULSE_Pos)))\r
+#define HSMC_PULSE_NCS_RD_PULSE_Pos 24\r
+#define HSMC_PULSE_NCS_RD_PULSE_Msk (0x3fu << HSMC_PULSE_NCS_RD_PULSE_Pos) /**< \brief (HSMC_PULSE) NCS Pulse Length in READ Access */\r
+#define HSMC_PULSE_NCS_RD_PULSE(value) ((HSMC_PULSE_NCS_RD_PULSE_Msk & ((value) << HSMC_PULSE_NCS_RD_PULSE_Pos)))\r
+/* -------- HSMC_CYCLE : (HSMC Offset: N/A) HSMC Cycle Register -------- */\r
+#define HSMC_CYCLE_NWE_CYCLE_Pos 0\r
+#define HSMC_CYCLE_NWE_CYCLE_Msk (0x1ffu << HSMC_CYCLE_NWE_CYCLE_Pos) /**< \brief (HSMC_CYCLE) Total Write Cycle Length */\r
+#define HSMC_CYCLE_NWE_CYCLE(value) ((HSMC_CYCLE_NWE_CYCLE_Msk & ((value) << HSMC_CYCLE_NWE_CYCLE_Pos)))\r
+#define HSMC_CYCLE_NRD_CYCLE_Pos 16\r
+#define HSMC_CYCLE_NRD_CYCLE_Msk (0x1ffu << HSMC_CYCLE_NRD_CYCLE_Pos) /**< \brief (HSMC_CYCLE) Total Read Cycle Length */\r
+#define HSMC_CYCLE_NRD_CYCLE(value) ((HSMC_CYCLE_NRD_CYCLE_Msk & ((value) << HSMC_CYCLE_NRD_CYCLE_Pos)))\r
+/* -------- HSMC_TIMINGS : (HSMC Offset: N/A) HSMC Timings Register -------- */\r
+#define HSMC_TIMINGS_TCLR_Pos 0\r
+#define HSMC_TIMINGS_TCLR_Msk (0xfu << HSMC_TIMINGS_TCLR_Pos) /**< \brief (HSMC_TIMINGS) CLE to REN Low Delay */\r
+#define HSMC_TIMINGS_TCLR(value) ((HSMC_TIMINGS_TCLR_Msk & ((value) << HSMC_TIMINGS_TCLR_Pos)))\r
+#define HSMC_TIMINGS_TADL_Pos 4\r
+#define HSMC_TIMINGS_TADL_Msk (0xfu << HSMC_TIMINGS_TADL_Pos) /**< \brief (HSMC_TIMINGS) ALE to Data Start */\r
+#define HSMC_TIMINGS_TADL(value) ((HSMC_TIMINGS_TADL_Msk & ((value) << HSMC_TIMINGS_TADL_Pos)))\r
+#define HSMC_TIMINGS_TAR_Pos 8\r
+#define HSMC_TIMINGS_TAR_Msk (0xfu << HSMC_TIMINGS_TAR_Pos) /**< \brief (HSMC_TIMINGS) ALE to REN Low Delay */\r
+#define HSMC_TIMINGS_TAR(value) ((HSMC_TIMINGS_TAR_Msk & ((value) << HSMC_TIMINGS_TAR_Pos)))\r
+#define HSMC_TIMINGS_OCMS (0x1u << 12) /**< \brief (HSMC_TIMINGS) Off Chip Memory Scrambling Enable */\r
+#define HSMC_TIMINGS_TRR_Pos 16\r
+#define HSMC_TIMINGS_TRR_Msk (0xfu << HSMC_TIMINGS_TRR_Pos) /**< \brief (HSMC_TIMINGS) Ready to REN Low Delay */\r
+#define HSMC_TIMINGS_TRR(value) ((HSMC_TIMINGS_TRR_Msk & ((value) << HSMC_TIMINGS_TRR_Pos)))\r
+#define HSMC_TIMINGS_TWB_Pos 24\r
+#define HSMC_TIMINGS_TWB_Msk (0xfu << HSMC_TIMINGS_TWB_Pos) /**< \brief (HSMC_TIMINGS) WEN High to REN to Busy */\r
+#define HSMC_TIMINGS_TWB(value) ((HSMC_TIMINGS_TWB_Msk & ((value) << HSMC_TIMINGS_TWB_Pos)))\r
+#define HSMC_TIMINGS_RBNSEL_Pos 28\r
+#define HSMC_TIMINGS_RBNSEL_Msk (0x7u << HSMC_TIMINGS_RBNSEL_Pos) /**< \brief (HSMC_TIMINGS) Ready/Busy Line Selection */\r
+#define HSMC_TIMINGS_RBNSEL(value) ((HSMC_TIMINGS_RBNSEL_Msk & ((value) << HSMC_TIMINGS_RBNSEL_Pos)))\r
+#define HSMC_TIMINGS_NFSEL (0x1u << 31) /**< \brief (HSMC_TIMINGS) NAND Flash Selection */\r
+/* -------- HSMC_MODE : (HSMC Offset: N/A) HSMC Mode Register -------- */\r
+#define HSMC_MODE_READ_MODE (0x1u << 0) /**< \brief (HSMC_MODE)  */\r
+#define   HSMC_MODE_READ_MODE_NCS_CTRL (0x0u << 0) /**< \brief (HSMC_MODE) The Read operation is controlled by the NCS signal. */\r
+#define   HSMC_MODE_READ_MODE_NRD_CTRL (0x1u << 0) /**< \brief (HSMC_MODE) The Read operation is controlled by the NRD signal. */\r
+#define HSMC_MODE_WRITE_MODE (0x1u << 1) /**< \brief (HSMC_MODE)  */\r
+#define   HSMC_MODE_WRITE_MODE_NCS_CTRL (0x0u << 1) /**< \brief (HSMC_MODE) The Write operation is controller by the NCS signal. */\r
+#define   HSMC_MODE_WRITE_MODE_NWE_CTRL (0x1u << 1) /**< \brief (HSMC_MODE) The Write operation is controlled by the NWE signal. */\r
+#define HSMC_MODE_EXNW_MODE_Pos 4\r
+#define HSMC_MODE_EXNW_MODE_Msk (0x3u << HSMC_MODE_EXNW_MODE_Pos) /**< \brief (HSMC_MODE) NWAIT Mode */\r
+#define   HSMC_MODE_EXNW_MODE_DISABLED (0x0u << 4) /**< \brief (HSMC_MODE) Disabled */\r
+#define   HSMC_MODE_EXNW_MODE_FROZEN (0x2u << 4) /**< \brief (HSMC_MODE) Frozen Mode */\r
+#define   HSMC_MODE_EXNW_MODE_READY (0x3u << 4) /**< \brief (HSMC_MODE) Ready Mode */\r
+#define HSMC_MODE_BAT (0x1u << 8) /**< \brief (HSMC_MODE) Byte Access Type */\r
+#define HSMC_MODE_DBW (0x1u << 12) /**< \brief (HSMC_MODE) Data Bus Width */\r
+#define   HSMC_MODE_DBW_BIT_8 (0x0u << 12) /**< \brief (HSMC_MODE) 8-bit bus */\r
+#define   HSMC_MODE_DBW_BIT_16 (0x1u << 12) /**< \brief (HSMC_MODE) 16-bit bus */\r
+#define HSMC_MODE_TDF_CYCLES_Pos 16\r
+#define HSMC_MODE_TDF_CYCLES_Msk (0xfu << HSMC_MODE_TDF_CYCLES_Pos) /**< \brief (HSMC_MODE) Data Float Time */\r
+#define HSMC_MODE_TDF_CYCLES(value) ((HSMC_MODE_TDF_CYCLES_Msk & ((value) << HSMC_MODE_TDF_CYCLES_Pos)))\r
+#define HSMC_MODE_TDF_MODE (0x1u << 20) /**< \brief (HSMC_MODE) TDF Optimization */\r
+/* -------- HSMC_OCMS : (HSMC Offset: 0x6A0) HSMC OCMS Register -------- */\r
+#define HSMC_OCMS_SMSE (0x1u << 0) /**< \brief (HSMC_OCMS) Static Memory Controller Scrambling Enable */\r
+#define HSMC_OCMS_SRSE (0x1u << 1) /**< \brief (HSMC_OCMS) SRAM Scrambling Enable */\r
+/* -------- HSMC_KEY1 : (HSMC Offset: 0x6A4) HSMC OCMS KEY1 Register -------- */\r
+#define HSMC_KEY1_KEY1_Pos 0\r
+#define HSMC_KEY1_KEY1_Msk (0xffffffffu << HSMC_KEY1_KEY1_Pos) /**< \brief (HSMC_KEY1) Off Chip Memory Scrambling (OCMS) Key Part 1 */\r
+#define HSMC_KEY1_KEY1(value) ((HSMC_KEY1_KEY1_Msk & ((value) << HSMC_KEY1_KEY1_Pos)))\r
+/* -------- HSMC_KEY2 : (HSMC Offset: 0x6A8) HSMC OCMS KEY2 Register -------- */\r
+#define HSMC_KEY2_KEY2_Pos 0\r
+#define HSMC_KEY2_KEY2_Msk (0xffffffffu << HSMC_KEY2_KEY2_Pos) /**< \brief (HSMC_KEY2) Off Chip Memory Scrambling (OCMS) Key Part 2 */\r
+#define HSMC_KEY2_KEY2(value) ((HSMC_KEY2_KEY2_Msk & ((value) << HSMC_KEY2_KEY2_Pos)))\r
+/* -------- HSMC_WPCR : (HSMC Offset: 0x6E4) HSMC Write Protection Control Register -------- */\r
+#define HSMC_WPCR_WP_EN (0x1u << 0) /**< \brief (HSMC_WPCR) Write Protection Enable */\r
+#define HSMC_WPCR_WP_KEY_Pos 8\r
+#define HSMC_WPCR_WP_KEY_Msk (0xffffffu << HSMC_WPCR_WP_KEY_Pos) /**< \brief (HSMC_WPCR) Write Protection KEY password */\r
+#define HSMC_WPCR_WP_KEY(value) ((HSMC_WPCR_WP_KEY_Msk & ((value) << HSMC_WPCR_WP_KEY_Pos)))\r
+/* -------- HSMC_WPSR : (HSMC Offset: 0x6E8) HSMC Write Protection Status Register -------- */\r
+#define HSMC_WPSR_WP_VS_Pos 0\r
+#define HSMC_WPSR_WP_VS_Msk (0xfu << HSMC_WPSR_WP_VS_Pos) /**< \brief (HSMC_WPSR) Write Protection Violation Status */\r
+#define HSMC_WPSR_WP_VSRC_Pos 8\r
+#define HSMC_WPSR_WP_VSRC_Msk (0xffffu << HSMC_WPSR_WP_VSRC_Pos) /**< \brief (HSMC_WPSR) Write Protection Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR High Speed MultiMedia Card Interface */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_HSMCI High Speed MultiMedia Card Interface */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Hsmci hardware registers */\r
+typedef struct {\r
+  __O  uint32_t HSMCI_CR;        /**< \brief (Hsmci Offset: 0x00) Control Register */\r
+  __IO uint32_t HSMCI_MR;        /**< \brief (Hsmci Offset: 0x04) Mode Register */\r
+  __IO uint32_t HSMCI_DTOR;      /**< \brief (Hsmci Offset: 0x08) Data Timeout Register */\r
+  __IO uint32_t HSMCI_SDCR;      /**< \brief (Hsmci Offset: 0x0C) SD/SDIO Card Register */\r
+  __IO uint32_t HSMCI_ARGR;      /**< \brief (Hsmci Offset: 0x10) Argument Register */\r
+  __O  uint32_t HSMCI_CMDR;      /**< \brief (Hsmci Offset: 0x14) Command Register */\r
+  __IO uint32_t HSMCI_BLKR;      /**< \brief (Hsmci Offset: 0x18) Block Register */\r
+  __IO uint32_t HSMCI_CSTOR;     /**< \brief (Hsmci Offset: 0x1C) Completion Signal Timeout Register */\r
+  __I  uint32_t HSMCI_RSPR[4];   /**< \brief (Hsmci Offset: 0x20) Response Register */\r
+  __I  uint32_t HSMCI_RDR;       /**< \brief (Hsmci Offset: 0x30) Receive Data Register */\r
+  __O  uint32_t HSMCI_TDR;       /**< \brief (Hsmci Offset: 0x34) Transmit Data Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __I  uint32_t HSMCI_SR;        /**< \brief (Hsmci Offset: 0x40) Status Register */\r
+  __O  uint32_t HSMCI_IER;       /**< \brief (Hsmci Offset: 0x44) Interrupt Enable Register */\r
+  __O  uint32_t HSMCI_IDR;       /**< \brief (Hsmci Offset: 0x48) Interrupt Disable Register */\r
+  __I  uint32_t HSMCI_IMR;       /**< \brief (Hsmci Offset: 0x4C) Interrupt Mask Register */\r
+  __IO uint32_t HSMCI_DMA;       /**< \brief (Hsmci Offset: 0x50) DMA Configuration Register */\r
+  __IO uint32_t HSMCI_CFG;       /**< \brief (Hsmci Offset: 0x54) Configuration Register */\r
+  __I  uint32_t Reserved2[35];\r
+  __IO uint32_t HSMCI_WPMR;      /**< \brief (Hsmci Offset: 0xE4) Write Protection Mode Register */\r
+  __I  uint32_t HSMCI_WPSR;      /**< \brief (Hsmci Offset: 0xE8) Write Protection Status Register */\r
+  __I  uint32_t Reserved3[69];\r
+  __IO uint32_t HSMCI_FIFO[256]; /**< \brief (Hsmci Offset: 0x200) FIFO Memory Aperture0 */\r
+} Hsmci;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- HSMCI_CR : (HSMCI Offset: 0x00) Control Register -------- */\r
+#define HSMCI_CR_MCIEN (0x1u << 0) /**< \brief (HSMCI_CR) Multi-Media Interface Enable */\r
+#define HSMCI_CR_MCIDIS (0x1u << 1) /**< \brief (HSMCI_CR) Multi-Media Interface Disable */\r
+#define HSMCI_CR_PWSEN (0x1u << 2) /**< \brief (HSMCI_CR) Power Save Mode Enable */\r
+#define HSMCI_CR_PWSDIS (0x1u << 3) /**< \brief (HSMCI_CR) Power Save Mode Disable */\r
+#define HSMCI_CR_SWRST (0x1u << 7) /**< \brief (HSMCI_CR) Software Reset */\r
+/* -------- HSMCI_MR : (HSMCI Offset: 0x04) Mode Register -------- */\r
+#define HSMCI_MR_CLKDIV_Pos 0\r
+#define HSMCI_MR_CLKDIV_Msk (0xffu << HSMCI_MR_CLKDIV_Pos) /**< \brief (HSMCI_MR) Clock Divider */\r
+#define HSMCI_MR_CLKDIV(value) ((HSMCI_MR_CLKDIV_Msk & ((value) << HSMCI_MR_CLKDIV_Pos)))\r
+#define HSMCI_MR_PWSDIV_Pos 8\r
+#define HSMCI_MR_PWSDIV_Msk (0x7u << HSMCI_MR_PWSDIV_Pos) /**< \brief (HSMCI_MR) Power Saving Divider */\r
+#define HSMCI_MR_PWSDIV(value) ((HSMCI_MR_PWSDIV_Msk & ((value) << HSMCI_MR_PWSDIV_Pos)))\r
+#define HSMCI_MR_RDPROOF (0x1u << 11) /**< \brief (HSMCI_MR) Read Proof Enable */\r
+#define HSMCI_MR_WRPROOF (0x1u << 12) /**< \brief (HSMCI_MR) Write Proof Enable */\r
+#define HSMCI_MR_FBYTE (0x1u << 13) /**< \brief (HSMCI_MR) Force Byte Transfer */\r
+#define HSMCI_MR_PADV (0x1u << 14) /**< \brief (HSMCI_MR) Padding Value */\r
+#define HSMCI_MR_CLKODD (0x1u << 16) /**< \brief (HSMCI_MR) Clock divider is odd */\r
+/* -------- HSMCI_DTOR : (HSMCI Offset: 0x08) Data Timeout Register -------- */\r
+#define HSMCI_DTOR_DTOCYC_Pos 0\r
+#define HSMCI_DTOR_DTOCYC_Msk (0xfu << HSMCI_DTOR_DTOCYC_Pos) /**< \brief (HSMCI_DTOR) Data Timeout Cycle Number */\r
+#define HSMCI_DTOR_DTOCYC(value) ((HSMCI_DTOR_DTOCYC_Msk & ((value) << HSMCI_DTOR_DTOCYC_Pos)))\r
+#define HSMCI_DTOR_DTOMUL_Pos 4\r
+#define HSMCI_DTOR_DTOMUL_Msk (0x7u << HSMCI_DTOR_DTOMUL_Pos) /**< \brief (HSMCI_DTOR) Data Timeout Multiplier */\r
+#define   HSMCI_DTOR_DTOMUL_1 (0x0u << 4) /**< \brief (HSMCI_DTOR) DTOCYC */\r
+#define   HSMCI_DTOR_DTOMUL_16 (0x1u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 16 */\r
+#define   HSMCI_DTOR_DTOMUL_128 (0x2u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 128 */\r
+#define   HSMCI_DTOR_DTOMUL_256 (0x3u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 256 */\r
+#define   HSMCI_DTOR_DTOMUL_1024 (0x4u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 1024 */\r
+#define   HSMCI_DTOR_DTOMUL_4096 (0x5u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 4096 */\r
+#define   HSMCI_DTOR_DTOMUL_65536 (0x6u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 65536 */\r
+#define   HSMCI_DTOR_DTOMUL_1048576 (0x7u << 4) /**< \brief (HSMCI_DTOR) DTOCYC x 1048576 */\r
+/* -------- HSMCI_SDCR : (HSMCI Offset: 0x0C) SD/SDIO Card Register -------- */\r
+#define HSMCI_SDCR_SDCSEL_Pos 0\r
+#define HSMCI_SDCR_SDCSEL_Msk (0x3u << HSMCI_SDCR_SDCSEL_Pos) /**< \brief (HSMCI_SDCR) SDCard/SDIO Slot */\r
+#define   HSMCI_SDCR_SDCSEL_SLOTA (0x0u << 0) /**< \brief (HSMCI_SDCR) Slot A is selected. */\r
+#define   HSMCI_SDCR_SDCSEL_SLOTB (0x1u << 0) /**< \brief (HSMCI_SDCR) Slot B is selected. */\r
+#define HSMCI_SDCR_SDCBUS_Pos 6\r
+#define HSMCI_SDCR_SDCBUS_Msk (0x3u << HSMCI_SDCR_SDCBUS_Pos) /**< \brief (HSMCI_SDCR) SDCard/SDIO Bus Width */\r
+#define   HSMCI_SDCR_SDCBUS_1 (0x0u << 6) /**< \brief (HSMCI_SDCR) 1 bit */\r
+#define   HSMCI_SDCR_SDCBUS_4 (0x2u << 6) /**< \brief (HSMCI_SDCR) 4 bit */\r
+#define   HSMCI_SDCR_SDCBUS_8 (0x3u << 6) /**< \brief (HSMCI_SDCR) 8 bit */\r
+/* -------- HSMCI_ARGR : (HSMCI Offset: 0x10) Argument Register -------- */\r
+#define HSMCI_ARGR_ARG_Pos 0\r
+#define HSMCI_ARGR_ARG_Msk (0xffffffffu << HSMCI_ARGR_ARG_Pos) /**< \brief (HSMCI_ARGR) Command Argument */\r
+#define HSMCI_ARGR_ARG(value) ((HSMCI_ARGR_ARG_Msk & ((value) << HSMCI_ARGR_ARG_Pos)))\r
+/* -------- HSMCI_CMDR : (HSMCI Offset: 0x14) Command Register -------- */\r
+#define HSMCI_CMDR_CMDNB_Pos 0\r
+#define HSMCI_CMDR_CMDNB_Msk (0x3fu << HSMCI_CMDR_CMDNB_Pos) /**< \brief (HSMCI_CMDR) Command Number */\r
+#define HSMCI_CMDR_CMDNB(value) ((HSMCI_CMDR_CMDNB_Msk & ((value) << HSMCI_CMDR_CMDNB_Pos)))\r
+#define HSMCI_CMDR_RSPTYP_Pos 6\r
+#define HSMCI_CMDR_RSPTYP_Msk (0x3u << HSMCI_CMDR_RSPTYP_Pos) /**< \brief (HSMCI_CMDR) Response Type */\r
+#define   HSMCI_CMDR_RSPTYP_NORESP (0x0u << 6) /**< \brief (HSMCI_CMDR) No response. */\r
+#define   HSMCI_CMDR_RSPTYP_48_BIT (0x1u << 6) /**< \brief (HSMCI_CMDR) 48-bit response. */\r
+#define   HSMCI_CMDR_RSPTYP_136_BIT (0x2u << 6) /**< \brief (HSMCI_CMDR) 136-bit response. */\r
+#define   HSMCI_CMDR_RSPTYP_R1B (0x3u << 6) /**< \brief (HSMCI_CMDR) R1b response type */\r
+#define HSMCI_CMDR_SPCMD_Pos 8\r
+#define HSMCI_CMDR_SPCMD_Msk (0x7u << HSMCI_CMDR_SPCMD_Pos) /**< \brief (HSMCI_CMDR) Special Command */\r
+#define   HSMCI_CMDR_SPCMD_STD (0x0u << 8) /**< \brief (HSMCI_CMDR) Not a special CMD. */\r
+#define   HSMCI_CMDR_SPCMD_INIT (0x1u << 8) /**< \brief (HSMCI_CMDR) Initialization CMD: 74 clock cycles for initialization sequence. */\r
+#define   HSMCI_CMDR_SPCMD_SYNC (0x2u << 8) /**< \brief (HSMCI_CMDR) Synchronized CMD: Wait for the end of the current data block transfer before sending the pending command. */\r
+#define   HSMCI_CMDR_SPCMD_CE_ATA (0x3u << 8) /**< \brief (HSMCI_CMDR) CE-ATA Completion Signal disable Command. The host cancels the ability for the device to return a command completion signal on the command line. */\r
+#define   HSMCI_CMDR_SPCMD_IT_CMD (0x4u << 8) /**< \brief (HSMCI_CMDR) Interrupt command: Corresponds to the Interrupt Mode (CMD40). */\r
+#define   HSMCI_CMDR_SPCMD_IT_RESP (0x5u << 8) /**< \brief (HSMCI_CMDR) Interrupt response: Corresponds to the Interrupt Mode (CMD40). */\r
+#define   HSMCI_CMDR_SPCMD_BOR (0x6u << 8) /**< \brief (HSMCI_CMDR) Boot Operation Request. Start a boot operation mode, the host processor can read boot data from the MMC device directly. */\r
+#define   HSMCI_CMDR_SPCMD_EBO (0x7u << 8) /**< \brief (HSMCI_CMDR) End Boot Operation. This command allows the host processor to terminate the boot operation mode. */\r
+#define HSMCI_CMDR_OPDCMD (0x1u << 11) /**< \brief (HSMCI_CMDR) Open Drain Command */\r
+#define   HSMCI_CMDR_OPDCMD_PUSHPULL (0x0u << 11) /**< \brief (HSMCI_CMDR) Push pull command. */\r
+#define   HSMCI_CMDR_OPDCMD_OPENDRAIN (0x1u << 11) /**< \brief (HSMCI_CMDR) Open drain command. */\r
+#define HSMCI_CMDR_MAXLAT (0x1u << 12) /**< \brief (HSMCI_CMDR) Max Latency for Command to Response */\r
+#define   HSMCI_CMDR_MAXLAT_5 (0x0u << 12) /**< \brief (HSMCI_CMDR) 5-cycle max latency. */\r
+#define   HSMCI_CMDR_MAXLAT_64 (0x1u << 12) /**< \brief (HSMCI_CMDR) 64-cycle max latency. */\r
+#define HSMCI_CMDR_TRCMD_Pos 16\r
+#define HSMCI_CMDR_TRCMD_Msk (0x3u << HSMCI_CMDR_TRCMD_Pos) /**< \brief (HSMCI_CMDR) Transfer Command */\r
+#define   HSMCI_CMDR_TRCMD_NO_DATA (0x0u << 16) /**< \brief (HSMCI_CMDR) No data transfer */\r
+#define   HSMCI_CMDR_TRCMD_START_DATA (0x1u << 16) /**< \brief (HSMCI_CMDR) Start data transfer */\r
+#define   HSMCI_CMDR_TRCMD_STOP_DATA (0x2u << 16) /**< \brief (HSMCI_CMDR) Stop data transfer */\r
+#define HSMCI_CMDR_TRDIR (0x1u << 18) /**< \brief (HSMCI_CMDR) Transfer Direction */\r
+#define   HSMCI_CMDR_TRDIR_WRITE (0x0u << 18) /**< \brief (HSMCI_CMDR) Write. */\r
+#define   HSMCI_CMDR_TRDIR_READ (0x1u << 18) /**< \brief (HSMCI_CMDR) Read. */\r
+#define HSMCI_CMDR_TRTYP_Pos 19\r
+#define HSMCI_CMDR_TRTYP_Msk (0x7u << HSMCI_CMDR_TRTYP_Pos) /**< \brief (HSMCI_CMDR) Transfer Type */\r
+#define   HSMCI_CMDR_TRTYP_SINGLE (0x0u << 19) /**< \brief (HSMCI_CMDR) MMC/SD Card Single Block */\r
+#define   HSMCI_CMDR_TRTYP_MULTIPLE (0x1u << 19) /**< \brief (HSMCI_CMDR) MMC/SD Card Multiple Block */\r
+#define   HSMCI_CMDR_TRTYP_STREAM (0x2u << 19) /**< \brief (HSMCI_CMDR) MMC Stream */\r
+#define   HSMCI_CMDR_TRTYP_BYTE (0x4u << 19) /**< \brief (HSMCI_CMDR) SDIO Byte */\r
+#define   HSMCI_CMDR_TRTYP_BLOCK (0x5u << 19) /**< \brief (HSMCI_CMDR) SDIO Block */\r
+#define HSMCI_CMDR_IOSPCMD_Pos 24\r
+#define HSMCI_CMDR_IOSPCMD_Msk (0x3u << HSMCI_CMDR_IOSPCMD_Pos) /**< \brief (HSMCI_CMDR) SDIO Special Command */\r
+#define   HSMCI_CMDR_IOSPCMD_STD (0x0u << 24) /**< \brief (HSMCI_CMDR) Not an SDIO Special Command */\r
+#define   HSMCI_CMDR_IOSPCMD_SUSPEND (0x1u << 24) /**< \brief (HSMCI_CMDR) SDIO Suspend Command */\r
+#define   HSMCI_CMDR_IOSPCMD_RESUME (0x2u << 24) /**< \brief (HSMCI_CMDR) SDIO Resume Command */\r
+#define HSMCI_CMDR_ATACS (0x1u << 26) /**< \brief (HSMCI_CMDR) ATA with Command Completion Signal */\r
+#define   HSMCI_CMDR_ATACS_NORMAL (0x0u << 26) /**< \brief (HSMCI_CMDR) Normal operation mode. */\r
+#define   HSMCI_CMDR_ATACS_COMPLETION (0x1u << 26) /**< \brief (HSMCI_CMDR) This bit indicates that a completion signal is expected within a programmed amount of time (HSMCI_CSTOR). */\r
+#define HSMCI_CMDR_BOOT_ACK (0x1u << 27) /**< \brief (HSMCI_CMDR) Boot Operation Acknowledge. */\r
+/* -------- HSMCI_BLKR : (HSMCI Offset: 0x18) Block Register -------- */\r
+#define HSMCI_BLKR_BCNT_Pos 0\r
+#define HSMCI_BLKR_BCNT_Msk (0xffffu << HSMCI_BLKR_BCNT_Pos) /**< \brief (HSMCI_BLKR) MMC/SDIO Block Count - SDIO Byte Count */\r
+#define HSMCI_BLKR_BCNT(value) ((HSMCI_BLKR_BCNT_Msk & ((value) << HSMCI_BLKR_BCNT_Pos)))\r
+#define HSMCI_BLKR_BLKLEN_Pos 16\r
+#define HSMCI_BLKR_BLKLEN_Msk (0xffffu << HSMCI_BLKR_BLKLEN_Pos) /**< \brief (HSMCI_BLKR) Data Block Length */\r
+#define HSMCI_BLKR_BLKLEN(value) ((HSMCI_BLKR_BLKLEN_Msk & ((value) << HSMCI_BLKR_BLKLEN_Pos)))\r
+/* -------- HSMCI_CSTOR : (HSMCI Offset: 0x1C) Completion Signal Timeout Register -------- */\r
+#define HSMCI_CSTOR_CSTOCYC_Pos 0\r
+#define HSMCI_CSTOR_CSTOCYC_Msk (0xfu << HSMCI_CSTOR_CSTOCYC_Pos) /**< \brief (HSMCI_CSTOR) Completion Signal Timeout Cycle Number */\r
+#define HSMCI_CSTOR_CSTOCYC(value) ((HSMCI_CSTOR_CSTOCYC_Msk & ((value) << HSMCI_CSTOR_CSTOCYC_Pos)))\r
+#define HSMCI_CSTOR_CSTOMUL_Pos 4\r
+#define HSMCI_CSTOR_CSTOMUL_Msk (0x7u << HSMCI_CSTOR_CSTOMUL_Pos) /**< \brief (HSMCI_CSTOR) Completion Signal Timeout Multiplier */\r
+#define   HSMCI_CSTOR_CSTOMUL_1 (0x0u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 1 */\r
+#define   HSMCI_CSTOR_CSTOMUL_16 (0x1u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 16 */\r
+#define   HSMCI_CSTOR_CSTOMUL_128 (0x2u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 128 */\r
+#define   HSMCI_CSTOR_CSTOMUL_256 (0x3u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 256 */\r
+#define   HSMCI_CSTOR_CSTOMUL_1024 (0x4u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 1024 */\r
+#define   HSMCI_CSTOR_CSTOMUL_4096 (0x5u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 4096 */\r
+#define   HSMCI_CSTOR_CSTOMUL_65536 (0x6u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 65536 */\r
+#define   HSMCI_CSTOR_CSTOMUL_1048576 (0x7u << 4) /**< \brief (HSMCI_CSTOR) CSTOCYC x 1048576 */\r
+/* -------- HSMCI_RSPR[4] : (HSMCI Offset: 0x20) Response Register -------- */\r
+#define HSMCI_RSPR_RSP_Pos 0\r
+#define HSMCI_RSPR_RSP_Msk (0xffffffffu << HSMCI_RSPR_RSP_Pos) /**< \brief (HSMCI_RSPR[4]) Response */\r
+/* -------- HSMCI_RDR : (HSMCI Offset: 0x30) Receive Data Register -------- */\r
+#define HSMCI_RDR_DATA_Pos 0\r
+#define HSMCI_RDR_DATA_Msk (0xffffffffu << HSMCI_RDR_DATA_Pos) /**< \brief (HSMCI_RDR) Data to Read */\r
+/* -------- HSMCI_TDR : (HSMCI Offset: 0x34) Transmit Data Register -------- */\r
+#define HSMCI_TDR_DATA_Pos 0\r
+#define HSMCI_TDR_DATA_Msk (0xffffffffu << HSMCI_TDR_DATA_Pos) /**< \brief (HSMCI_TDR) Data to Write */\r
+#define HSMCI_TDR_DATA(value) ((HSMCI_TDR_DATA_Msk & ((value) << HSMCI_TDR_DATA_Pos)))\r
+/* -------- HSMCI_SR : (HSMCI Offset: 0x40) Status Register -------- */\r
+#define HSMCI_SR_CMDRDY (0x1u << 0) /**< \brief (HSMCI_SR) Command Ready */\r
+#define HSMCI_SR_RXRDY (0x1u << 1) /**< \brief (HSMCI_SR) Receiver Ready */\r
+#define HSMCI_SR_TXRDY (0x1u << 2) /**< \brief (HSMCI_SR) Transmit Ready */\r
+#define HSMCI_SR_BLKE (0x1u << 3) /**< \brief (HSMCI_SR) Data Block Ended */\r
+#define HSMCI_SR_DTIP (0x1u << 4) /**< \brief (HSMCI_SR) Data Transfer in Progress */\r
+#define HSMCI_SR_NOTBUSY (0x1u << 5) /**< \brief (HSMCI_SR) HSMCI Not Busy */\r
+#define HSMCI_SR_SDIOIRQA (0x1u << 8) /**< \brief (HSMCI_SR) SDIO Interrupt for Slot A */\r
+#define HSMCI_SR_SDIOIRQB (0x1u << 9) /**< \brief (HSMCI_SR) SDIO Interrupt for Slot B */\r
+#define HSMCI_SR_SDIOWAIT (0x1u << 12) /**< \brief (HSMCI_SR) SDIO Read Wait Operation Status */\r
+#define HSMCI_SR_CSRCV (0x1u << 13) /**< \brief (HSMCI_SR) CE-ATA Completion Signal Received */\r
+#define HSMCI_SR_RINDE (0x1u << 16) /**< \brief (HSMCI_SR) Response Index Error */\r
+#define HSMCI_SR_RDIRE (0x1u << 17) /**< \brief (HSMCI_SR) Response Direction Error */\r
+#define HSMCI_SR_RCRCE (0x1u << 18) /**< \brief (HSMCI_SR) Response CRC Error */\r
+#define HSMCI_SR_RENDE (0x1u << 19) /**< \brief (HSMCI_SR) Response End Bit Error */\r
+#define HSMCI_SR_RTOE (0x1u << 20) /**< \brief (HSMCI_SR) Response Time-out Error */\r
+#define HSMCI_SR_DCRCE (0x1u << 21) /**< \brief (HSMCI_SR) Data CRC Error */\r
+#define HSMCI_SR_DTOE (0x1u << 22) /**< \brief (HSMCI_SR) Data Time-out Error */\r
+#define HSMCI_SR_CSTOE (0x1u << 23) /**< \brief (HSMCI_SR) Completion Signal Time-out Error */\r
+#define HSMCI_SR_BLKOVRE (0x1u << 24) /**< \brief (HSMCI_SR) DMA Block Overrun Error */\r
+#define HSMCI_SR_FIFOEMPTY (0x1u << 26) /**< \brief (HSMCI_SR) FIFO empty flag */\r
+#define HSMCI_SR_XFRDONE (0x1u << 27) /**< \brief (HSMCI_SR) Transfer Done flag */\r
+#define HSMCI_SR_ACKRCV (0x1u << 28) /**< \brief (HSMCI_SR) Boot Operation Acknowledge Received */\r
+#define HSMCI_SR_ACKRCVE (0x1u << 29) /**< \brief (HSMCI_SR) Boot Operation Acknowledge Error */\r
+#define HSMCI_SR_OVRE (0x1u << 30) /**< \brief (HSMCI_SR) Overrun */\r
+#define HSMCI_SR_UNRE (0x1u << 31) /**< \brief (HSMCI_SR) Underrun */\r
+/* -------- HSMCI_IER : (HSMCI Offset: 0x44) Interrupt Enable Register -------- */\r
+#define HSMCI_IER_CMDRDY (0x1u << 0) /**< \brief (HSMCI_IER) Command Ready Interrupt Enable */\r
+#define HSMCI_IER_RXRDY (0x1u << 1) /**< \brief (HSMCI_IER) Receiver Ready Interrupt Enable */\r
+#define HSMCI_IER_TXRDY (0x1u << 2) /**< \brief (HSMCI_IER) Transmit Ready Interrupt Enable */\r
+#define HSMCI_IER_BLKE (0x1u << 3) /**< \brief (HSMCI_IER) Data Block Ended Interrupt Enable */\r
+#define HSMCI_IER_DTIP (0x1u << 4) /**< \brief (HSMCI_IER) Data Transfer in Progress Interrupt Enable */\r
+#define HSMCI_IER_NOTBUSY (0x1u << 5) /**< \brief (HSMCI_IER) Data Not Busy Interrupt Enable */\r
+#define HSMCI_IER_SDIOIRQA (0x1u << 8) /**< \brief (HSMCI_IER) SDIO Interrupt for Slot A Interrupt Enable */\r
+#define HSMCI_IER_SDIOIRQB (0x1u << 9) /**< \brief (HSMCI_IER) SDIO Interrupt for Slot B Interrupt Enable */\r
+#define HSMCI_IER_SDIOWAIT (0x1u << 12) /**< \brief (HSMCI_IER) SDIO Read Wait Operation Status Interrupt Enable */\r
+#define HSMCI_IER_CSRCV (0x1u << 13) /**< \brief (HSMCI_IER) Completion Signal Received Interrupt Enable */\r
+#define HSMCI_IER_RINDE (0x1u << 16) /**< \brief (HSMCI_IER) Response Index Error Interrupt Enable */\r
+#define HSMCI_IER_RDIRE (0x1u << 17) /**< \brief (HSMCI_IER) Response Direction Error Interrupt Enable */\r
+#define HSMCI_IER_RCRCE (0x1u << 18) /**< \brief (HSMCI_IER) Response CRC Error Interrupt Enable */\r
+#define HSMCI_IER_RENDE (0x1u << 19) /**< \brief (HSMCI_IER) Response End Bit Error Interrupt Enable */\r
+#define HSMCI_IER_RTOE (0x1u << 20) /**< \brief (HSMCI_IER) Response Time-out Error Interrupt Enable */\r
+#define HSMCI_IER_DCRCE (0x1u << 21) /**< \brief (HSMCI_IER) Data CRC Error Interrupt Enable */\r
+#define HSMCI_IER_DTOE (0x1u << 22) /**< \brief (HSMCI_IER) Data Time-out Error Interrupt Enable */\r
+#define HSMCI_IER_CSTOE (0x1u << 23) /**< \brief (HSMCI_IER) Completion Signal Timeout Error Interrupt Enable */\r
+#define HSMCI_IER_BLKOVRE (0x1u << 24) /**< \brief (HSMCI_IER) DMA Block Overrun Error Interrupt Enable */\r
+#define HSMCI_IER_FIFOEMPTY (0x1u << 26) /**< \brief (HSMCI_IER) FIFO empty Interrupt enable */\r
+#define HSMCI_IER_XFRDONE (0x1u << 27) /**< \brief (HSMCI_IER) Transfer Done Interrupt enable */\r
+#define HSMCI_IER_ACKRCV (0x1u << 28) /**< \brief (HSMCI_IER) Boot Acknowledge Interrupt Enable */\r
+#define HSMCI_IER_ACKRCVE (0x1u << 29) /**< \brief (HSMCI_IER) Boot Acknowledge Error Interrupt Enable */\r
+#define HSMCI_IER_OVRE (0x1u << 30) /**< \brief (HSMCI_IER) Overrun Interrupt Enable */\r
+#define HSMCI_IER_UNRE (0x1u << 31) /**< \brief (HSMCI_IER) Underrun Interrupt Enable */\r
+/* -------- HSMCI_IDR : (HSMCI Offset: 0x48) Interrupt Disable Register -------- */\r
+#define HSMCI_IDR_CMDRDY (0x1u << 0) /**< \brief (HSMCI_IDR) Command Ready Interrupt Disable */\r
+#define HSMCI_IDR_RXRDY (0x1u << 1) /**< \brief (HSMCI_IDR) Receiver Ready Interrupt Disable */\r
+#define HSMCI_IDR_TXRDY (0x1u << 2) /**< \brief (HSMCI_IDR) Transmit Ready Interrupt Disable */\r
+#define HSMCI_IDR_BLKE (0x1u << 3) /**< \brief (HSMCI_IDR) Data Block Ended Interrupt Disable */\r
+#define HSMCI_IDR_DTIP (0x1u << 4) /**< \brief (HSMCI_IDR) Data Transfer in Progress Interrupt Disable */\r
+#define HSMCI_IDR_NOTBUSY (0x1u << 5) /**< \brief (HSMCI_IDR) Data Not Busy Interrupt Disable */\r
+#define HSMCI_IDR_SDIOIRQA (0x1u << 8) /**< \brief (HSMCI_IDR) SDIO Interrupt for Slot A Interrupt Disable */\r
+#define HSMCI_IDR_SDIOIRQB (0x1u << 9) /**< \brief (HSMCI_IDR) SDIO Interrupt for Slot B Interrupt Disable */\r
+#define HSMCI_IDR_SDIOWAIT (0x1u << 12) /**< \brief (HSMCI_IDR) SDIO Read Wait Operation Status Interrupt Disable */\r
+#define HSMCI_IDR_CSRCV (0x1u << 13) /**< \brief (HSMCI_IDR) Completion Signal received interrupt Disable */\r
+#define HSMCI_IDR_RINDE (0x1u << 16) /**< \brief (HSMCI_IDR) Response Index Error Interrupt Disable */\r
+#define HSMCI_IDR_RDIRE (0x1u << 17) /**< \brief (HSMCI_IDR) Response Direction Error Interrupt Disable */\r
+#define HSMCI_IDR_RCRCE (0x1u << 18) /**< \brief (HSMCI_IDR) Response CRC Error Interrupt Disable */\r
+#define HSMCI_IDR_RENDE (0x1u << 19) /**< \brief (HSMCI_IDR) Response End Bit Error Interrupt Disable */\r
+#define HSMCI_IDR_RTOE (0x1u << 20) /**< \brief (HSMCI_IDR) Response Time-out Error Interrupt Disable */\r
+#define HSMCI_IDR_DCRCE (0x1u << 21) /**< \brief (HSMCI_IDR) Data CRC Error Interrupt Disable */\r
+#define HSMCI_IDR_DTOE (0x1u << 22) /**< \brief (HSMCI_IDR) Data Time-out Error Interrupt Disable */\r
+#define HSMCI_IDR_CSTOE (0x1u << 23) /**< \brief (HSMCI_IDR) Completion Signal Time out Error Interrupt Disable */\r
+#define HSMCI_IDR_BLKOVRE (0x1u << 24) /**< \brief (HSMCI_IDR) DMA Block Overrun Error Interrupt Disable */\r
+#define HSMCI_IDR_FIFOEMPTY (0x1u << 26) /**< \brief (HSMCI_IDR) FIFO empty Interrupt Disable */\r
+#define HSMCI_IDR_XFRDONE (0x1u << 27) /**< \brief (HSMCI_IDR) Transfer Done Interrupt Disable */\r
+#define HSMCI_IDR_ACKRCV (0x1u << 28) /**< \brief (HSMCI_IDR) Boot Acknowledge Interrupt Disable */\r
+#define HSMCI_IDR_ACKRCVE (0x1u << 29) /**< \brief (HSMCI_IDR) Boot Acknowledge Error Interrupt Disable */\r
+#define HSMCI_IDR_OVRE (0x1u << 30) /**< \brief (HSMCI_IDR) Overrun Interrupt Disable */\r
+#define HSMCI_IDR_UNRE (0x1u << 31) /**< \brief (HSMCI_IDR) Underrun Interrupt Disable */\r
+/* -------- HSMCI_IMR : (HSMCI Offset: 0x4C) Interrupt Mask Register -------- */\r
+#define HSMCI_IMR_CMDRDY (0x1u << 0) /**< \brief (HSMCI_IMR) Command Ready Interrupt Mask */\r
+#define HSMCI_IMR_RXRDY (0x1u << 1) /**< \brief (HSMCI_IMR) Receiver Ready Interrupt Mask */\r
+#define HSMCI_IMR_TXRDY (0x1u << 2) /**< \brief (HSMCI_IMR) Transmit Ready Interrupt Mask */\r
+#define HSMCI_IMR_BLKE (0x1u << 3) /**< \brief (HSMCI_IMR) Data Block Ended Interrupt Mask */\r
+#define HSMCI_IMR_DTIP (0x1u << 4) /**< \brief (HSMCI_IMR) Data Transfer in Progress Interrupt Mask */\r
+#define HSMCI_IMR_NOTBUSY (0x1u << 5) /**< \brief (HSMCI_IMR) Data Not Busy Interrupt Mask */\r
+#define HSMCI_IMR_SDIOIRQA (0x1u << 8) /**< \brief (HSMCI_IMR) SDIO Interrupt for Slot A Interrupt Mask */\r
+#define HSMCI_IMR_SDIOIRQB (0x1u << 9) /**< \brief (HSMCI_IMR) SDIO Interrupt for Slot B Interrupt Mask */\r
+#define HSMCI_IMR_SDIOWAIT (0x1u << 12) /**< \brief (HSMCI_IMR) SDIO Read Wait Operation Status Interrupt Mask */\r
+#define HSMCI_IMR_CSRCV (0x1u << 13) /**< \brief (HSMCI_IMR) Completion Signal Received Interrupt Mask */\r
+#define HSMCI_IMR_RINDE (0x1u << 16) /**< \brief (HSMCI_IMR) Response Index Error Interrupt Mask */\r
+#define HSMCI_IMR_RDIRE (0x1u << 17) /**< \brief (HSMCI_IMR) Response Direction Error Interrupt Mask */\r
+#define HSMCI_IMR_RCRCE (0x1u << 18) /**< \brief (HSMCI_IMR) Response CRC Error Interrupt Mask */\r
+#define HSMCI_IMR_RENDE (0x1u << 19) /**< \brief (HSMCI_IMR) Response End Bit Error Interrupt Mask */\r
+#define HSMCI_IMR_RTOE (0x1u << 20) /**< \brief (HSMCI_IMR) Response Time-out Error Interrupt Mask */\r
+#define HSMCI_IMR_DCRCE (0x1u << 21) /**< \brief (HSMCI_IMR) Data CRC Error Interrupt Mask */\r
+#define HSMCI_IMR_DTOE (0x1u << 22) /**< \brief (HSMCI_IMR) Data Time-out Error Interrupt Mask */\r
+#define HSMCI_IMR_CSTOE (0x1u << 23) /**< \brief (HSMCI_IMR) Completion Signal Time-out Error Interrupt Mask */\r
+#define HSMCI_IMR_BLKOVRE (0x1u << 24) /**< \brief (HSMCI_IMR) DMA Block Overrun Error Interrupt Mask */\r
+#define HSMCI_IMR_FIFOEMPTY (0x1u << 26) /**< \brief (HSMCI_IMR) FIFO Empty Interrupt Mask */\r
+#define HSMCI_IMR_XFRDONE (0x1u << 27) /**< \brief (HSMCI_IMR) Transfer Done Interrupt Mask */\r
+#define HSMCI_IMR_ACKRCV (0x1u << 28) /**< \brief (HSMCI_IMR) Boot Operation Acknowledge Received Interrupt Mask */\r
+#define HSMCI_IMR_ACKRCVE (0x1u << 29) /**< \brief (HSMCI_IMR) Boot Operation Acknowledge Error Interrupt Mask */\r
+#define HSMCI_IMR_OVRE (0x1u << 30) /**< \brief (HSMCI_IMR) Overrun Interrupt Mask */\r
+#define HSMCI_IMR_UNRE (0x1u << 31) /**< \brief (HSMCI_IMR) Underrun Interrupt Mask */\r
+/* -------- HSMCI_DMA : (HSMCI Offset: 0x50) DMA Configuration Register -------- */\r
+#define HSMCI_DMA_CHKSIZE_Pos 4\r
+#define HSMCI_DMA_CHKSIZE_Msk (0x7u << HSMCI_DMA_CHKSIZE_Pos) /**< \brief (HSMCI_DMA) DMA Channel Read and Write Chunk Size */\r
+#define HSMCI_DMA_CHKSIZE(value) ((HSMCI_DMA_CHKSIZE_Msk & ((value) << HSMCI_DMA_CHKSIZE_Pos)))\r
+#define HSMCI_DMA_DMAEN (0x1u << 8) /**< \brief (HSMCI_DMA) DMA Hardware Handshaking Enable */\r
+/* -------- HSMCI_CFG : (HSMCI Offset: 0x54) Configuration Register -------- */\r
+#define HSMCI_CFG_FIFOMODE (0x1u << 0) /**< \brief (HSMCI_CFG) HSMCI Internal FIFO control mode */\r
+#define HSMCI_CFG_FERRCTRL (0x1u << 4) /**< \brief (HSMCI_CFG) Flow Error flag reset control mode */\r
+#define HSMCI_CFG_HSMODE (0x1u << 8) /**< \brief (HSMCI_CFG) High Speed Mode */\r
+#define HSMCI_CFG_LSYNC (0x1u << 12) /**< \brief (HSMCI_CFG) Synchronize on the last block */\r
+/* -------- HSMCI_WPMR : (HSMCI Offset: 0xE4) Write Protection Mode Register -------- */\r
+#define HSMCI_WPMR_WP_EN (0x1u << 0) /**< \brief (HSMCI_WPMR) Write Protection Enable */\r
+#define HSMCI_WPMR_WP_KEY_Pos 8\r
+#define HSMCI_WPMR_WP_KEY_Msk (0xffffffu << HSMCI_WPMR_WP_KEY_Pos) /**< \brief (HSMCI_WPMR) Write Protection Key password */\r
+#define HSMCI_WPMR_WP_KEY(value) ((HSMCI_WPMR_WP_KEY_Msk & ((value) << HSMCI_WPMR_WP_KEY_Pos)))\r
+/* -------- HSMCI_WPSR : (HSMCI Offset: 0xE8) Write Protection Status Register -------- */\r
+#define HSMCI_WPSR_WP_VS_Pos 0\r
+#define HSMCI_WPSR_WP_VS_Msk (0xfu << HSMCI_WPSR_WP_VS_Pos) /**< \brief (HSMCI_WPSR) Write Protection Violation Status */\r
+#define   HSMCI_WPSR_WP_VS_NONE (0x0u << 0) /**< \brief (HSMCI_WPSR) No Write Protection Violation occurred since the last read of this register (WP_SR) */\r
+#define   HSMCI_WPSR_WP_VS_WRITE (0x1u << 0) /**< \brief (HSMCI_WPSR) Write Protection detected unauthorized attempt to write a control register had occurred (since the last read.) */\r
+#define   HSMCI_WPSR_WP_VS_RESET (0x2u << 0) /**< \brief (HSMCI_WPSR) Software reset had been performed while Write Protection was enabled (since the last read). */\r
+#define   HSMCI_WPSR_WP_VS_BOTH (0x3u << 0) /**< \brief (HSMCI_WPSR) Both Write Protection violation and software reset with Write Protection enabled have occurred since the last read. */\r
+#define HSMCI_WPSR_WP_VSRC_Pos 8\r
+#define HSMCI_WPSR_WP_VSRC_Msk (0xffffu << HSMCI_WPSR_WP_VSRC_Pos) /**< \brief (HSMCI_WPSR) Write Protection Violation SouRCe */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Integrity Check Monitor */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_ICM Integrity Check Monitor */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Icm hardware registers */\r
+typedef struct {\r
+  __IO uint32_t ICM_CFG;       /**< \brief (Icm Offset: 0x00) Configuration Register */\r
+  __O  uint32_t ICM_CTRL;      /**< \brief (Icm Offset: 0x04) Control Register */\r
+  __O  uint32_t ICM_SR;        /**< \brief (Icm Offset: 0x08) Status Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __O  uint32_t ICM_IER;       /**< \brief (Icm Offset: 0x10) Interrupt Enable Register */\r
+  __O  uint32_t ICM_IDR;       /**< \brief (Icm Offset: 0x14) Interrupt Disable Register */\r
+  __I  uint32_t ICM_IMR;       /**< \brief (Icm Offset: 0x18) Interrupt Mask Register */\r
+  __I  uint32_t ICM_ISR;       /**< \brief (Icm Offset: 0x1C) Interrupt Status Register */\r
+  __I  uint32_t ICM_UASR;      /**< \brief (Icm Offset: 0x20) Undefined Access Status Register */\r
+  __I  uint32_t Reserved2[3];\r
+  __IO uint32_t ICM_DSCR;      /**< \brief (Icm Offset: 0x30) Region Descriptor Area Start Address Register */\r
+  __IO uint32_t ICM_HASH;      /**< \brief (Icm Offset: 0x34) Region Hash Area Start Address Register */\r
+  __O  uint32_t ICM_UIHVAL[8]; /**< \brief (Icm Offset: 0x38) User Initial Hash Value 0 Register */\r
+} Icm;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- ICM_CFG : (ICM Offset: 0x00) Configuration Register -------- */\r
+#define ICM_CFG_WBDIS (0x1u << 0) /**< \brief (ICM_CFG) Write Back Disable */\r
+#define ICM_CFG_EOMDIS (0x1u << 1) /**< \brief (ICM_CFG) End of Monitoring Disable */\r
+#define ICM_CFG_SLBDIS (0x1u << 2) /**< \brief (ICM_CFG) Secondary List Branching Disable */\r
+#define ICM_CFG_BBC_Pos 4\r
+#define ICM_CFG_BBC_Msk (0xfu << ICM_CFG_BBC_Pos) /**< \brief (ICM_CFG) Bus Burden Control */\r
+#define ICM_CFG_BBC(value) ((ICM_CFG_BBC_Msk & ((value) << ICM_CFG_BBC_Pos)))\r
+#define ICM_CFG_ASCD (0x1u << 8) /**< \brief (ICM_CFG) Automatic Switch To Compare Digest */\r
+#define ICM_CFG_DUALBUFF (0x1u << 9) /**< \brief (ICM_CFG) Dual Input Buffer */\r
+#define ICM_CFG_UIHASH (0x1u << 12) /**< \brief (ICM_CFG) User Initial Hash Value */\r
+#define ICM_CFG_UALGO_Pos 13\r
+#define ICM_CFG_UALGO_Msk (0x7u << ICM_CFG_UALGO_Pos) /**< \brief (ICM_CFG) User SHA Algorithm */\r
+#define   ICM_CFG_UALGO_SHA1 (0x0u << 13) /**< \brief (ICM_CFG) SHA1 algorithm processed */\r
+#define   ICM_CFG_UALGO_SHA256 (0x1u << 13) /**< \brief (ICM_CFG) SHA256 algorithm processed */\r
+#define   ICM_CFG_UALGO_SHA224 (0x4u << 13) /**< \brief (ICM_CFG) SHA224 algorithm processed */\r
+#define ICM_CFG_HAPROT_Pos 16\r
+#define ICM_CFG_HAPROT_Msk (0x3fu << ICM_CFG_HAPROT_Pos) /**< \brief (ICM_CFG) Region Hash Area Protection */\r
+#define ICM_CFG_HAPROT(value) ((ICM_CFG_HAPROT_Msk & ((value) << ICM_CFG_HAPROT_Pos)))\r
+#define ICM_CFG_DAPROT_Pos 24\r
+#define ICM_CFG_DAPROT_Msk (0x3fu << ICM_CFG_DAPROT_Pos) /**< \brief (ICM_CFG) Region Descriptor Area Protection */\r
+#define ICM_CFG_DAPROT(value) ((ICM_CFG_DAPROT_Msk & ((value) << ICM_CFG_DAPROT_Pos)))\r
+/* -------- ICM_CTRL : (ICM Offset: 0x04) Control Register -------- */\r
+#define ICM_CTRL_ENABLE (0x1u << 0) /**< \brief (ICM_CTRL) ICM Enable */\r
+#define ICM_CTRL_DISABLE (0x1u << 1) /**< \brief (ICM_CTRL) ICM Disable Register */\r
+#define ICM_CTRL_SWRST (0x1u << 2) /**< \brief (ICM_CTRL) Software Reset */\r
+#define ICM_CTRL_REHASH_Pos 4\r
+#define ICM_CTRL_REHASH_Msk (0xfu << ICM_CTRL_REHASH_Pos) /**< \brief (ICM_CTRL) Recompute Internal Hash */\r
+#define ICM_CTRL_REHASH(value) ((ICM_CTRL_REHASH_Msk & ((value) << ICM_CTRL_REHASH_Pos)))\r
+#define ICM_CTRL_RMDIS_Pos 8\r
+#define ICM_CTRL_RMDIS_Msk (0xfu << ICM_CTRL_RMDIS_Pos) /**< \brief (ICM_CTRL) Region Monitoring Disable */\r
+#define ICM_CTRL_RMDIS(value) ((ICM_CTRL_RMDIS_Msk & ((value) << ICM_CTRL_RMDIS_Pos)))\r
+#define ICM_CTRL_RMEN_Pos 12\r
+#define ICM_CTRL_RMEN_Msk (0xfu << ICM_CTRL_RMEN_Pos) /**< \brief (ICM_CTRL) Region Monitoring Enable */\r
+#define ICM_CTRL_RMEN(value) ((ICM_CTRL_RMEN_Msk & ((value) << ICM_CTRL_RMEN_Pos)))\r
+/* -------- ICM_SR : (ICM Offset: 0x08) Status Register -------- */\r
+#define ICM_SR_ENABLE (0x1u << 0) /**< \brief (ICM_SR) ICM Controller Enable Register */\r
+#define ICM_SR_RAWRMDIS_Pos 8\r
+#define ICM_SR_RAWRMDIS_Msk (0xfu << ICM_SR_RAWRMDIS_Pos) /**< \brief (ICM_SR) RAW Region Monitoring Disabled Status */\r
+#define ICM_SR_RAWRMDIS(value) ((ICM_SR_RAWRMDIS_Msk & ((value) << ICM_SR_RAWRMDIS_Pos)))\r
+#define ICM_SR_RMDIS_Pos 12\r
+#define ICM_SR_RMDIS_Msk (0xfu << ICM_SR_RMDIS_Pos) /**< \brief (ICM_SR) Region Monitoring Disabled Status */\r
+#define ICM_SR_RMDIS(value) ((ICM_SR_RMDIS_Msk & ((value) << ICM_SR_RMDIS_Pos)))\r
+/* -------- ICM_IER : (ICM Offset: 0x10) Interrupt Enable Register -------- */\r
+#define ICM_IER_RHC_Pos 0\r
+#define ICM_IER_RHC_Msk (0xfu << ICM_IER_RHC_Pos) /**< \brief (ICM_IER) Region Hash Completed Interrupt Enable */\r
+#define ICM_IER_RHC(value) ((ICM_IER_RHC_Msk & ((value) << ICM_IER_RHC_Pos)))\r
+#define ICM_IER_RDM_Pos 4\r
+#define ICM_IER_RDM_Msk (0xfu << ICM_IER_RDM_Pos) /**< \brief (ICM_IER) Region Digest Mismatch Interrupt Enable */\r
+#define ICM_IER_RDM(value) ((ICM_IER_RDM_Msk & ((value) << ICM_IER_RDM_Pos)))\r
+#define ICM_IER_RBE_Pos 8\r
+#define ICM_IER_RBE_Msk (0xfu << ICM_IER_RBE_Pos) /**< \brief (ICM_IER) Region Bus Error Interrupt Enable */\r
+#define ICM_IER_RBE(value) ((ICM_IER_RBE_Msk & ((value) << ICM_IER_RBE_Pos)))\r
+#define ICM_IER_RWC_Pos 12\r
+#define ICM_IER_RWC_Msk (0xfu << ICM_IER_RWC_Pos) /**< \brief (ICM_IER) Region Wrap Condition detected Interrupt Enable */\r
+#define ICM_IER_RWC(value) ((ICM_IER_RWC_Msk & ((value) << ICM_IER_RWC_Pos)))\r
+#define ICM_IER_REC_Pos 16\r
+#define ICM_IER_REC_Msk (0xfu << ICM_IER_REC_Pos) /**< \brief (ICM_IER) Region End bit Condition Detected Interrupt Enable */\r
+#define ICM_IER_REC(value) ((ICM_IER_REC_Msk & ((value) << ICM_IER_REC_Pos)))\r
+#define ICM_IER_RSU_Pos 20\r
+#define ICM_IER_RSU_Msk (0xfu << ICM_IER_RSU_Pos) /**< \brief (ICM_IER) Region Status Updated Interrupt Disable */\r
+#define ICM_IER_RSU(value) ((ICM_IER_RSU_Msk & ((value) << ICM_IER_RSU_Pos)))\r
+#define ICM_IER_URAD (0x1u << 24) /**< \brief (ICM_IER) Undefined Register Access Detection Interrupt Enable */\r
+/* -------- ICM_IDR : (ICM Offset: 0x14) Interrupt Disable Register -------- */\r
+#define ICM_IDR_RHC_Pos 0\r
+#define ICM_IDR_RHC_Msk (0xfu << ICM_IDR_RHC_Pos) /**< \brief (ICM_IDR) Region Hash Completed Interrupt Disable */\r
+#define ICM_IDR_RHC(value) ((ICM_IDR_RHC_Msk & ((value) << ICM_IDR_RHC_Pos)))\r
+#define ICM_IDR_RDM_Pos 4\r
+#define ICM_IDR_RDM_Msk (0xfu << ICM_IDR_RDM_Pos) /**< \brief (ICM_IDR) Region Digest Mismatch Interrupt Disable */\r
+#define ICM_IDR_RDM(value) ((ICM_IDR_RDM_Msk & ((value) << ICM_IDR_RDM_Pos)))\r
+#define ICM_IDR_RBE_Pos 8\r
+#define ICM_IDR_RBE_Msk (0xfu << ICM_IDR_RBE_Pos) /**< \brief (ICM_IDR) Region Bus Error Interrupt Disable */\r
+#define ICM_IDR_RBE(value) ((ICM_IDR_RBE_Msk & ((value) << ICM_IDR_RBE_Pos)))\r
+#define ICM_IDR_RWC_Pos 12\r
+#define ICM_IDR_RWC_Msk (0xfu << ICM_IDR_RWC_Pos) /**< \brief (ICM_IDR) Region Wrap Condition Detected Interrupt Disable */\r
+#define ICM_IDR_RWC(value) ((ICM_IDR_RWC_Msk & ((value) << ICM_IDR_RWC_Pos)))\r
+#define ICM_IDR_REC_Pos 16\r
+#define ICM_IDR_REC_Msk (0xfu << ICM_IDR_REC_Pos) /**< \brief (ICM_IDR) Region End bit Condition detected Interrupt Disable */\r
+#define ICM_IDR_REC(value) ((ICM_IDR_REC_Msk & ((value) << ICM_IDR_REC_Pos)))\r
+#define ICM_IDR_RSU_Pos 20\r
+#define ICM_IDR_RSU_Msk (0xfu << ICM_IDR_RSU_Pos) /**< \brief (ICM_IDR) Region Status Updated Interrupt Disable */\r
+#define ICM_IDR_RSU(value) ((ICM_IDR_RSU_Msk & ((value) << ICM_IDR_RSU_Pos)))\r
+#define ICM_IDR_URAD (0x1u << 24) /**< \brief (ICM_IDR) Undefined Register Access Detection Interrupt Disable */\r
+/* -------- ICM_IMR : (ICM Offset: 0x18) Interrupt Mask Register -------- */\r
+#define ICM_IMR_RHC_Pos 0\r
+#define ICM_IMR_RHC_Msk (0xfu << ICM_IMR_RHC_Pos) /**< \brief (ICM_IMR) Region Hash Completed Interrupt Mask */\r
+#define ICM_IMR_RDM_Pos 4\r
+#define ICM_IMR_RDM_Msk (0xfu << ICM_IMR_RDM_Pos) /**< \brief (ICM_IMR) Region Digest Mismatch Interrupt Mask */\r
+#define ICM_IMR_RBE_Pos 8\r
+#define ICM_IMR_RBE_Msk (0xfu << ICM_IMR_RBE_Pos) /**< \brief (ICM_IMR) Region Bus Error Interrupt Mask */\r
+#define ICM_IMR_RWC_Pos 12\r
+#define ICM_IMR_RWC_Msk (0xfu << ICM_IMR_RWC_Pos) /**< \brief (ICM_IMR) Region Wrap Condition Detected Interrupt Mask */\r
+#define ICM_IMR_REC_Pos 16\r
+#define ICM_IMR_REC_Msk (0xfu << ICM_IMR_REC_Pos) /**< \brief (ICM_IMR) Region End bit Condition Detected Interrupt Mask */\r
+#define ICM_IMR_RSU_Pos 20\r
+#define ICM_IMR_RSU_Msk (0xfu << ICM_IMR_RSU_Pos) /**< \brief (ICM_IMR) Region Status Updated Interrupt Mask */\r
+#define ICM_IMR_URAD (0x1u << 24) /**< \brief (ICM_IMR) Undefined Register Access Detection Interrupt Mask */\r
+/* -------- ICM_ISR : (ICM Offset: 0x1C) Interrupt Status Register -------- */\r
+#define ICM_ISR_RHC_Pos 0\r
+#define ICM_ISR_RHC_Msk (0xfu << ICM_ISR_RHC_Pos) /**< \brief (ICM_ISR) Region Hash Completed */\r
+#define ICM_ISR_RDM_Pos 4\r
+#define ICM_ISR_RDM_Msk (0xfu << ICM_ISR_RDM_Pos) /**< \brief (ICM_ISR) Region Digest Mismatch */\r
+#define ICM_ISR_RBE_Pos 8\r
+#define ICM_ISR_RBE_Msk (0xfu << ICM_ISR_RBE_Pos) /**< \brief (ICM_ISR) Region Bus Error */\r
+#define ICM_ISR_RWC_Pos 12\r
+#define ICM_ISR_RWC_Msk (0xfu << ICM_ISR_RWC_Pos) /**< \brief (ICM_ISR) Region Wrap Condition Detected */\r
+#define ICM_ISR_REC_Pos 16\r
+#define ICM_ISR_REC_Msk (0xfu << ICM_ISR_REC_Pos) /**< \brief (ICM_ISR) Region End bit Condition Detected */\r
+#define ICM_ISR_RSU_Pos 20\r
+#define ICM_ISR_RSU_Msk (0xfu << ICM_ISR_RSU_Pos) /**< \brief (ICM_ISR) Region Status Updated Detected */\r
+#define ICM_ISR_URAD (0x1u << 24) /**< \brief (ICM_ISR) Undefined Register Access Detection Status */\r
+/* -------- ICM_UASR : (ICM Offset: 0x20) Undefined Access Status Register -------- */\r
+#define ICM_UASR_URAT_Pos 0\r
+#define ICM_UASR_URAT_Msk (0x7u << ICM_UASR_URAT_Pos) /**< \brief (ICM_UASR) Undefined Register Access Trace */\r
+#define   ICM_UASR_URAT_UNSPEC_STRUCT_MEMBER (0x0u << 0) /**< \brief (ICM_UASR) Unspecified structure member set to one detected when the descriptor is loaded. */\r
+#define   ICM_UASR_URAT_ICM_CFG_MODIFIED (0x1u << 0) /**< \brief (ICM_UASR) ICM_CFG modified during active monitoring. */\r
+#define   ICM_UASR_URAT_ICM_DSCR_MODIFIED (0x2u << 0) /**< \brief (ICM_UASR) ICM_DSCR modified during active monitoring. */\r
+#define   ICM_UASR_URAT_ICM_HASH_MODIFIED (0x3u << 0) /**< \brief (ICM_UASR) ICM_HASH modified during active monitoring */\r
+#define   ICM_UASR_URAT_READ_ACCESS (0x4u << 0) /**< \brief (ICM_UASR) Write-only register read access */\r
+/* -------- ICM_DSCR : (ICM Offset: 0x30) Region Descriptor Area Start Address Register -------- */\r
+#define ICM_DSCR_DASA_Pos 6\r
+#define ICM_DSCR_DASA_Msk (0x3ffffffu << ICM_DSCR_DASA_Pos) /**< \brief (ICM_DSCR) Descriptor Area Start Address */\r
+#define ICM_DSCR_DASA(value) ((ICM_DSCR_DASA_Msk & ((value) << ICM_DSCR_DASA_Pos)))\r
+/* -------- ICM_HASH : (ICM Offset: 0x34) Region Hash Area Start Address Register -------- */\r
+#define ICM_HASH_HASA_Pos 7\r
+#define ICM_HASH_HASA_Msk (0x1ffffffu << ICM_HASH_HASA_Pos) /**< \brief (ICM_HASH) Hash Area Start Address */\r
+#define ICM_HASH_HASA(value) ((ICM_HASH_HASA_Msk & ((value) << ICM_HASH_HASA_Pos)))\r
+/* -------- ICM_UIHVAL[8] : (ICM Offset: 0x38) User Initial Hash Value 0 Register -------- */\r
+#define ICM_UIHVAL_VAL_Pos 0\r
+#define ICM_UIHVAL_VAL_Msk (0xffffffffu << ICM_UIHVAL_VAL_Pos) /**< \brief (ICM_UIHVAL[8]) Initial Hash Value */\r
+#define ICM_UIHVAL_VAL(value) ((ICM_UIHVAL_VAL_Msk & ((value) << ICM_UIHVAL_VAL_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Image Sensor Interface */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_ISI Image Sensor Interface */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Isi hardware registers */\r
+typedef struct {\r
+  __IO uint32_t ISI_CFG1;       /**< \brief (Isi Offset: 0x00) ISI Configuration 1 Register */\r
+  __IO uint32_t ISI_CFG2;       /**< \brief (Isi Offset: 0x04) ISI Configuration 2 Register */\r
+  __IO uint32_t ISI_PSIZE;      /**< \brief (Isi Offset: 0x08) ISI Preview Size Register */\r
+  __IO uint32_t ISI_PDECF;      /**< \brief (Isi Offset: 0x0C) ISI Preview Decimation Factor Register */\r
+  __IO uint32_t ISI_Y2R_SET0;   /**< \brief (Isi Offset: 0x10) ISI CSC YCrCb To RGB Set 0 Register */\r
+  __IO uint32_t ISI_Y2R_SET1;   /**< \brief (Isi Offset: 0x14) ISI CSC YCrCb To RGB Set 1 Register */\r
+  __IO uint32_t ISI_R2Y_SET0;   /**< \brief (Isi Offset: 0x18) ISI CSC RGB To YCrCb Set 0 Register */\r
+  __IO uint32_t ISI_R2Y_SET1;   /**< \brief (Isi Offset: 0x1C) ISI CSC RGB To YCrCb Set 1 Register */\r
+  __IO uint32_t ISI_R2Y_SET2;   /**< \brief (Isi Offset: 0x20) ISI CSC RGB To YCrCb Set 2 Register */\r
+  __O  uint32_t ISI_CR;         /**< \brief (Isi Offset: 0x24) ISI Control Register */\r
+  __I  uint32_t ISI_SR;         /**< \brief (Isi Offset: 0x28) ISI Status Register */\r
+  __O  uint32_t ISI_IER;        /**< \brief (Isi Offset: 0x2C) ISI Interrupt Enable Register */\r
+  __O  uint32_t ISI_IDR;        /**< \brief (Isi Offset: 0x30) ISI Interrupt Disable Register */\r
+  __I  uint32_t ISI_IMR;        /**< \brief (Isi Offset: 0x34) ISI Interrupt Mask Register */\r
+  __O  uint32_t ISI_DMA_CHER;   /**< \brief (Isi Offset: 0x38) DMA Channel Enable Register */\r
+  __O  uint32_t ISI_DMA_CHDR;   /**< \brief (Isi Offset: 0x3C) DMA Channel Disable Register */\r
+  __I  uint32_t ISI_DMA_CHSR;   /**< \brief (Isi Offset: 0x40) DMA Channel Status Register */\r
+  __IO uint32_t ISI_DMA_P_ADDR; /**< \brief (Isi Offset: 0x44) DMA Preview Base Address Register */\r
+  __IO uint32_t ISI_DMA_P_CTRL; /**< \brief (Isi Offset: 0x48) DMA Preview Control Register */\r
+  __IO uint32_t ISI_DMA_P_DSCR; /**< \brief (Isi Offset: 0x4C) DMA Preview Descriptor Address Register */\r
+  __IO uint32_t ISI_DMA_C_ADDR; /**< \brief (Isi Offset: 0x50) DMA Codec Base Address Register */\r
+  __IO uint32_t ISI_DMA_C_CTRL; /**< \brief (Isi Offset: 0x54) DMA Codec Control Register */\r
+  __IO uint32_t ISI_DMA_C_DSCR; /**< \brief (Isi Offset: 0x58) DMA Codec Descriptor Address Register */\r
+  __I  uint32_t Reserved1[34];\r
+  __IO uint32_t ISI_WPCR;       /**< \brief (Isi Offset: 0xE4) Write Protection Control Register */\r
+  __I  uint32_t ISI_WPSR;       /**< \brief (Isi Offset: 0xE8) Write Protection Status Register */\r
+} Isi;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- ISI_CFG1 : (ISI Offset: 0x00) ISI Configuration 1 Register -------- */\r
+#define ISI_CFG1_HSYNC_POL (0x1u << 2) /**< \brief (ISI_CFG1) Horizontal Synchronization Polarity */\r
+#define ISI_CFG1_VSYNC_POL (0x1u << 3) /**< \brief (ISI_CFG1) Vertical Synchronization Polarity */\r
+#define ISI_CFG1_PIXCLK_POL (0x1u << 4) /**< \brief (ISI_CFG1) Pixel Clock Polarity */\r
+#define ISI_CFG1_EMB_SYNC (0x1u << 6) /**< \brief (ISI_CFG1) Embedded Synchronization */\r
+#define ISI_CFG1_CRC_SYNC (0x1u << 7) /**< \brief (ISI_CFG1) Embedded Synchronization Correction */\r
+#define ISI_CFG1_FRATE_Pos 8\r
+#define ISI_CFG1_FRATE_Msk (0x7u << ISI_CFG1_FRATE_Pos) /**< \brief (ISI_CFG1) Frame Rate [0..7] */\r
+#define ISI_CFG1_FRATE(value) ((ISI_CFG1_FRATE_Msk & ((value) << ISI_CFG1_FRATE_Pos)))\r
+#define ISI_CFG1_DISCR (0x1u << 11) /**< \brief (ISI_CFG1) Disable Codec Request */\r
+#define ISI_CFG1_FULL (0x1u << 12) /**< \brief (ISI_CFG1) Full Mode is Allowed */\r
+#define ISI_CFG1_THMASK_Pos 13\r
+#define ISI_CFG1_THMASK_Msk (0x3u << ISI_CFG1_THMASK_Pos) /**< \brief (ISI_CFG1) Threshold Mask */\r
+#define   ISI_CFG1_THMASK_BEATS_4 (0x0u << 13) /**< \brief (ISI_CFG1) Only 4 beats AHB burst allowed */\r
+#define   ISI_CFG1_THMASK_BEATS_8 (0x1u << 13) /**< \brief (ISI_CFG1) Only 4 and 8 beats AHB burst allowed */\r
+#define   ISI_CFG1_THMASK_BEATS_16 (0x2u << 13) /**< \brief (ISI_CFG1) 4, 8 and 16 beats AHB burst allowed */\r
+#define ISI_CFG1_SLD_Pos 16\r
+#define ISI_CFG1_SLD_Msk (0xffu << ISI_CFG1_SLD_Pos) /**< \brief (ISI_CFG1) Start of Line Delay */\r
+#define ISI_CFG1_SLD(value) ((ISI_CFG1_SLD_Msk & ((value) << ISI_CFG1_SLD_Pos)))\r
+#define ISI_CFG1_SFD_Pos 24\r
+#define ISI_CFG1_SFD_Msk (0xffu << ISI_CFG1_SFD_Pos) /**< \brief (ISI_CFG1) Start of Frame Delay */\r
+#define ISI_CFG1_SFD(value) ((ISI_CFG1_SFD_Msk & ((value) << ISI_CFG1_SFD_Pos)))\r
+/* -------- ISI_CFG2 : (ISI Offset: 0x04) ISI Configuration 2 Register -------- */\r
+#define ISI_CFG2_IM_VSIZE_Pos 0\r
+#define ISI_CFG2_IM_VSIZE_Msk (0x7ffu << ISI_CFG2_IM_VSIZE_Pos) /**< \brief (ISI_CFG2) Vertical Size of the Image Sensor [0..2047]: */\r
+#define ISI_CFG2_IM_VSIZE(value) ((ISI_CFG2_IM_VSIZE_Msk & ((value) << ISI_CFG2_IM_VSIZE_Pos)))\r
+#define ISI_CFG2_GS_MODE (0x1u << 11) /**< \brief (ISI_CFG2)  */\r
+#define ISI_CFG2_RGB_MODE (0x1u << 12) /**< \brief (ISI_CFG2) RGB Input Mode: */\r
+#define ISI_CFG2_GRAYSCALE (0x1u << 13) /**< \brief (ISI_CFG2)  */\r
+#define ISI_CFG2_RGB_SWAP (0x1u << 14) /**< \brief (ISI_CFG2)  */\r
+#define ISI_CFG2_COL_SPACE (0x1u << 15) /**< \brief (ISI_CFG2) Color Space for the Image Data */\r
+#define ISI_CFG2_IM_HSIZE_Pos 16\r
+#define ISI_CFG2_IM_HSIZE_Msk (0x7ffu << ISI_CFG2_IM_HSIZE_Pos) /**< \brief (ISI_CFG2) Horizontal Size of the Image Sensor [0..2047] */\r
+#define ISI_CFG2_IM_HSIZE(value) ((ISI_CFG2_IM_HSIZE_Msk & ((value) << ISI_CFG2_IM_HSIZE_Pos)))\r
+#define ISI_CFG2_YCC_SWAP_Pos 28\r
+#define ISI_CFG2_YCC_SWAP_Msk (0x3u << ISI_CFG2_YCC_SWAP_Pos) /**< \brief (ISI_CFG2) Defines the YCC Image Data */\r
+#define ISI_CFG2_YCC_SWAP(value) ((ISI_CFG2_YCC_SWAP_Msk & ((value) << ISI_CFG2_YCC_SWAP_Pos)))\r
+#define ISI_CFG2_RGB_CFG_Pos 30\r
+#define ISI_CFG2_RGB_CFG_Msk (0x3u << ISI_CFG2_RGB_CFG_Pos) /**< \brief (ISI_CFG2) Defines RGB Pattern when RGB_MODE is set to 1 */\r
+#define ISI_CFG2_RGB_CFG(value) ((ISI_CFG2_RGB_CFG_Msk & ((value) << ISI_CFG2_RGB_CFG_Pos)))\r
+/* -------- ISI_PSIZE : (ISI Offset: 0x08) ISI Preview Size Register -------- */\r
+#define ISI_PSIZE_PREV_VSIZE_Pos 0\r
+#define ISI_PSIZE_PREV_VSIZE_Msk (0x3ffu << ISI_PSIZE_PREV_VSIZE_Pos) /**< \brief (ISI_PSIZE) Vertical Size for the Preview Path */\r
+#define ISI_PSIZE_PREV_VSIZE(value) ((ISI_PSIZE_PREV_VSIZE_Msk & ((value) << ISI_PSIZE_PREV_VSIZE_Pos)))\r
+#define ISI_PSIZE_PREV_HSIZE_Pos 16\r
+#define ISI_PSIZE_PREV_HSIZE_Msk (0x3ffu << ISI_PSIZE_PREV_HSIZE_Pos) /**< \brief (ISI_PSIZE) Horizontal Size for the Preview Path */\r
+#define ISI_PSIZE_PREV_HSIZE(value) ((ISI_PSIZE_PREV_HSIZE_Msk & ((value) << ISI_PSIZE_PREV_HSIZE_Pos)))\r
+/* -------- ISI_PDECF : (ISI Offset: 0x0C) ISI Preview Decimation Factor Register -------- */\r
+#define ISI_PDECF_DEC_FACTOR_Pos 0\r
+#define ISI_PDECF_DEC_FACTOR_Msk (0xffu << ISI_PDECF_DEC_FACTOR_Pos) /**< \brief (ISI_PDECF) Decimation Factor */\r
+#define ISI_PDECF_DEC_FACTOR(value) ((ISI_PDECF_DEC_FACTOR_Msk & ((value) << ISI_PDECF_DEC_FACTOR_Pos)))\r
+/* -------- ISI_Y2R_SET0 : (ISI Offset: 0x10) ISI CSC YCrCb To RGB Set 0 Register -------- */\r
+#define ISI_Y2R_SET0_C0_Pos 0\r
+#define ISI_Y2R_SET0_C0_Msk (0xffu << ISI_Y2R_SET0_C0_Pos) /**< \brief (ISI_Y2R_SET0) Color Space Conversion Matrix Coefficient C0 */\r
+#define ISI_Y2R_SET0_C0(value) ((ISI_Y2R_SET0_C0_Msk & ((value) << ISI_Y2R_SET0_C0_Pos)))\r
+#define ISI_Y2R_SET0_C1_Pos 8\r
+#define ISI_Y2R_SET0_C1_Msk (0xffu << ISI_Y2R_SET0_C1_Pos) /**< \brief (ISI_Y2R_SET0) Color Space Conversion Matrix Coefficient C1 */\r
+#define ISI_Y2R_SET0_C1(value) ((ISI_Y2R_SET0_C1_Msk & ((value) << ISI_Y2R_SET0_C1_Pos)))\r
+#define ISI_Y2R_SET0_C2_Pos 16\r
+#define ISI_Y2R_SET0_C2_Msk (0xffu << ISI_Y2R_SET0_C2_Pos) /**< \brief (ISI_Y2R_SET0) Color Space Conversion Matrix Coefficient C2 */\r
+#define ISI_Y2R_SET0_C2(value) ((ISI_Y2R_SET0_C2_Msk & ((value) << ISI_Y2R_SET0_C2_Pos)))\r
+#define ISI_Y2R_SET0_C3_Pos 24\r
+#define ISI_Y2R_SET0_C3_Msk (0xffu << ISI_Y2R_SET0_C3_Pos) /**< \brief (ISI_Y2R_SET0) Color Space Conversion Matrix Coefficient C3 */\r
+#define ISI_Y2R_SET0_C3(value) ((ISI_Y2R_SET0_C3_Msk & ((value) << ISI_Y2R_SET0_C3_Pos)))\r
+/* -------- ISI_Y2R_SET1 : (ISI Offset: 0x14) ISI CSC YCrCb To RGB Set 1 Register -------- */\r
+#define ISI_Y2R_SET1_C4_Pos 0\r
+#define ISI_Y2R_SET1_C4_Msk (0x1ffu << ISI_Y2R_SET1_C4_Pos) /**< \brief (ISI_Y2R_SET1) Color Space Conversion Matrix Coefficient C4 */\r
+#define ISI_Y2R_SET1_C4(value) ((ISI_Y2R_SET1_C4_Msk & ((value) << ISI_Y2R_SET1_C4_Pos)))\r
+#define ISI_Y2R_SET1_Yoff (0x1u << 12) /**< \brief (ISI_Y2R_SET1) Color Space Conversion Luminance Default Offset */\r
+#define ISI_Y2R_SET1_Croff (0x1u << 13) /**< \brief (ISI_Y2R_SET1) Color Space Conversion Red Chrominance Default Offset */\r
+#define ISI_Y2R_SET1_Cboff (0x1u << 14) /**< \brief (ISI_Y2R_SET1) Color Space Conversion Blue Chrominance Default Offset */\r
+/* -------- ISI_R2Y_SET0 : (ISI Offset: 0x18) ISI CSC RGB To YCrCb Set 0 Register -------- */\r
+#define ISI_R2Y_SET0_C0_Pos 0\r
+#define ISI_R2Y_SET0_C0_Msk (0x7fu << ISI_R2Y_SET0_C0_Pos) /**< \brief (ISI_R2Y_SET0) Color Space Conversion Matrix Coefficient C0 */\r
+#define ISI_R2Y_SET0_C0(value) ((ISI_R2Y_SET0_C0_Msk & ((value) << ISI_R2Y_SET0_C0_Pos)))\r
+#define ISI_R2Y_SET0_C1_Pos 8\r
+#define ISI_R2Y_SET0_C1_Msk (0x7fu << ISI_R2Y_SET0_C1_Pos) /**< \brief (ISI_R2Y_SET0) Color Space Conversion Matrix Coefficient C1 */\r
+#define ISI_R2Y_SET0_C1(value) ((ISI_R2Y_SET0_C1_Msk & ((value) << ISI_R2Y_SET0_C1_Pos)))\r
+#define ISI_R2Y_SET0_C2_Pos 16\r
+#define ISI_R2Y_SET0_C2_Msk (0x7fu << ISI_R2Y_SET0_C2_Pos) /**< \brief (ISI_R2Y_SET0) Color Space Conversion Matrix Coefficient C2 */\r
+#define ISI_R2Y_SET0_C2(value) ((ISI_R2Y_SET0_C2_Msk & ((value) << ISI_R2Y_SET0_C2_Pos)))\r
+#define ISI_R2Y_SET0_Roff (0x1u << 24) /**< \brief (ISI_R2Y_SET0) Color Space Conversion Red Component Offset */\r
+/* -------- ISI_R2Y_SET1 : (ISI Offset: 0x1C) ISI CSC RGB To YCrCb Set 1 Register -------- */\r
+#define ISI_R2Y_SET1_C3_Pos 0\r
+#define ISI_R2Y_SET1_C3_Msk (0x7fu << ISI_R2Y_SET1_C3_Pos) /**< \brief (ISI_R2Y_SET1) Color Space Conversion Matrix Coefficient C3 */\r
+#define ISI_R2Y_SET1_C3(value) ((ISI_R2Y_SET1_C3_Msk & ((value) << ISI_R2Y_SET1_C3_Pos)))\r
+#define ISI_R2Y_SET1_C4_Pos 8\r
+#define ISI_R2Y_SET1_C4_Msk (0x7fu << ISI_R2Y_SET1_C4_Pos) /**< \brief (ISI_R2Y_SET1) Color Space Conversion Matrix Coefficient C4 */\r
+#define ISI_R2Y_SET1_C4(value) ((ISI_R2Y_SET1_C4_Msk & ((value) << ISI_R2Y_SET1_C4_Pos)))\r
+#define ISI_R2Y_SET1_C5_Pos 16\r
+#define ISI_R2Y_SET1_C5_Msk (0x7fu << ISI_R2Y_SET1_C5_Pos) /**< \brief (ISI_R2Y_SET1) Color Space Conversion Matrix Coefficient C5 */\r
+#define ISI_R2Y_SET1_C5(value) ((ISI_R2Y_SET1_C5_Msk & ((value) << ISI_R2Y_SET1_C5_Pos)))\r
+#define ISI_R2Y_SET1_Goff (0x1u << 24) /**< \brief (ISI_R2Y_SET1) Color Space Conversion Green Component Offset */\r
+/* -------- ISI_R2Y_SET2 : (ISI Offset: 0x20) ISI CSC RGB To YCrCb Set 2 Register -------- */\r
+#define ISI_R2Y_SET2_C6_Pos 0\r
+#define ISI_R2Y_SET2_C6_Msk (0x7fu << ISI_R2Y_SET2_C6_Pos) /**< \brief (ISI_R2Y_SET2) Color Space Conversion Matrix Coefficient C6 */\r
+#define ISI_R2Y_SET2_C6(value) ((ISI_R2Y_SET2_C6_Msk & ((value) << ISI_R2Y_SET2_C6_Pos)))\r
+#define ISI_R2Y_SET2_C7_Pos 8\r
+#define ISI_R2Y_SET2_C7_Msk (0x7fu << ISI_R2Y_SET2_C7_Pos) /**< \brief (ISI_R2Y_SET2) Color Space Conversion Matrix Coefficient C7 */\r
+#define ISI_R2Y_SET2_C7(value) ((ISI_R2Y_SET2_C7_Msk & ((value) << ISI_R2Y_SET2_C7_Pos)))\r
+#define ISI_R2Y_SET2_C8_Pos 16\r
+#define ISI_R2Y_SET2_C8_Msk (0x7fu << ISI_R2Y_SET2_C8_Pos) /**< \brief (ISI_R2Y_SET2) Color Space Conversion Matrix Coefficient C8 */\r
+#define ISI_R2Y_SET2_C8(value) ((ISI_R2Y_SET2_C8_Msk & ((value) << ISI_R2Y_SET2_C8_Pos)))\r
+#define ISI_R2Y_SET2_Boff (0x1u << 24) /**< \brief (ISI_R2Y_SET2) Color Space Conversion Blue Component Offset */\r
+/* -------- ISI_CR : (ISI Offset: 0x24) ISI Control Register -------- */\r
+#define ISI_CR_ISI_EN (0x1u << 0) /**< \brief (ISI_CR) ISI Module Enable Request */\r
+#define ISI_CR_ISI_DIS (0x1u << 1) /**< \brief (ISI_CR) ISI Module Disable Request */\r
+#define ISI_CR_ISI_SRST (0x1u << 2) /**< \brief (ISI_CR) ISI Software Reset Request */\r
+#define ISI_CR_ISI_CDC (0x1u << 8) /**< \brief (ISI_CR) ISI Codec Request */\r
+/* -------- ISI_SR : (ISI Offset: 0x28) ISI Status Register -------- */\r
+#define ISI_SR_ENABLE (0x1u << 0) /**< \brief (ISI_SR)  */\r
+#define ISI_SR_DIS_DONE (0x1u << 1) /**< \brief (ISI_SR) Module Disable Request has Terminated */\r
+#define ISI_SR_SRST (0x1u << 2) /**< \brief (ISI_SR) Module Software Reset Request has Terminated */\r
+#define ISI_SR_CDC_PND (0x1u << 8) /**< \brief (ISI_SR) Pending Codec Request (this bit is a status bit) */\r
+#define ISI_SR_VSYNC (0x1u << 10) /**< \brief (ISI_SR) Vertical Synchronization */\r
+#define ISI_SR_PXFR_DONE (0x1u << 16) /**< \brief (ISI_SR) Preview DMA Transfer has Terminated. */\r
+#define ISI_SR_CXFR_DONE (0x1u << 17) /**< \brief (ISI_SR) Codec DMA Transfer has Terminated. */\r
+#define ISI_SR_SIP (0x1u << 19) /**< \brief (ISI_SR) Synchronization in Progress (this is a status bit) */\r
+#define ISI_SR_P_OVR (0x1u << 24) /**< \brief (ISI_SR) Preview Datapath Overflow */\r
+#define ISI_SR_C_OVR (0x1u << 25) /**< \brief (ISI_SR) Codec Datapath Overflow */\r
+#define ISI_SR_CRC_ERR (0x1u << 26) /**< \brief (ISI_SR) CRC Synchronization Error */\r
+#define ISI_SR_FR_OVR (0x1u << 27) /**< \brief (ISI_SR) Frame Rate Overrun */\r
+/* -------- ISI_IER : (ISI Offset: 0x2C) ISI Interrupt Enable Register -------- */\r
+#define ISI_IER_DIS_DONE (0x1u << 1) /**< \brief (ISI_IER) Disable Done Interrupt Enable */\r
+#define ISI_IER_SRST (0x1u << 2) /**< \brief (ISI_IER) Software Reset Interrupt Enable */\r
+#define ISI_IER_VSYNC (0x1u << 10) /**< \brief (ISI_IER) Vertical Synchronization Interrupt Enable */\r
+#define ISI_IER_PXFR_DONE (0x1u << 16) /**< \brief (ISI_IER) Preview DMA Transfer Done Interrupt Enable */\r
+#define ISI_IER_CXFR_DONE (0x1u << 17) /**< \brief (ISI_IER) Codec DMA Transfer Done Interrupt Enable */\r
+#define ISI_IER_P_OVR (0x1u << 24) /**< \brief (ISI_IER) Preview Datapath Overflow Interrupt Enable */\r
+#define ISI_IER_C_OVR (0x1u << 25) /**< \brief (ISI_IER) Codec Datapath Overflow Interrupt Enable */\r
+#define ISI_IER_CRC_ERR (0x1u << 26) /**< \brief (ISI_IER) Embedded Synchronization CRC Error Interrupt Enable */\r
+#define ISI_IER_FR_OVR (0x1u << 27) /**< \brief (ISI_IER) Frame Rate Overflow Interrupt Enable */\r
+/* -------- ISI_IDR : (ISI Offset: 0x30) ISI Interrupt Disable Register -------- */\r
+#define ISI_IDR_DIS_DONE (0x1u << 1) /**< \brief (ISI_IDR) Disable Done Interrupt Disable */\r
+#define ISI_IDR_SRST (0x1u << 2) /**< \brief (ISI_IDR) Software Reset Interrupt Disable */\r
+#define ISI_IDR_VSYNC (0x1u << 10) /**< \brief (ISI_IDR) Vertical Synchronization Interrupt Disable */\r
+#define ISI_IDR_PXFR_DONE (0x1u << 16) /**< \brief (ISI_IDR) Preview DMA Transfer Done Interrupt Disable */\r
+#define ISI_IDR_CXFR_DONE (0x1u << 17) /**< \brief (ISI_IDR) Codec DMA Transfer Done Interrupt Disable */\r
+#define ISI_IDR_P_OVR (0x1u << 24) /**< \brief (ISI_IDR) Preview Datapath Overflow Interrupt Disable */\r
+#define ISI_IDR_C_OVR (0x1u << 25) /**< \brief (ISI_IDR) Codec Datapath Overflow Interrupt Disable */\r
+#define ISI_IDR_CRC_ERR (0x1u << 26) /**< \brief (ISI_IDR) Embedded Synchronization CRC Error Interrupt Disable */\r
+#define ISI_IDR_FR_OVR (0x1u << 27) /**< \brief (ISI_IDR) Frame Rate Overflow Interrupt Disable */\r
+/* -------- ISI_IMR : (ISI Offset: 0x34) ISI Interrupt Mask Register -------- */\r
+#define ISI_IMR_DIS_DONE (0x1u << 1) /**< \brief (ISI_IMR) Module Disable Operation Completed */\r
+#define ISI_IMR_SRST (0x1u << 2) /**< \brief (ISI_IMR) Software Reset Completed */\r
+#define ISI_IMR_VSYNC (0x1u << 10) /**< \brief (ISI_IMR) Vertical Synchronization */\r
+#define ISI_IMR_PXFR_DONE (0x1u << 16) /**< \brief (ISI_IMR) Preview DMA Transfer Interrupt */\r
+#define ISI_IMR_CXFR_DONE (0x1u << 17) /**< \brief (ISI_IMR) Codec DMA Transfer Interrupt */\r
+#define ISI_IMR_P_OVR (0x1u << 24) /**< \brief (ISI_IMR) FIFO Preview Overflow */\r
+#define ISI_IMR_C_OVR (0x1u << 25) /**< \brief (ISI_IMR) FIFO Codec Overflow */\r
+#define ISI_IMR_CRC_ERR (0x1u << 26) /**< \brief (ISI_IMR) CRC Synchronization Error */\r
+#define ISI_IMR_FR_OVR (0x1u << 27) /**< \brief (ISI_IMR) Frame Rate Overrun */\r
+/* -------- ISI_DMA_CHER : (ISI Offset: 0x38) DMA Channel Enable Register -------- */\r
+#define ISI_DMA_CHER_P_CH_EN (0x1u << 0) /**< \brief (ISI_DMA_CHER) Preview Channel Enable */\r
+#define ISI_DMA_CHER_C_CH_EN (0x1u << 1) /**< \brief (ISI_DMA_CHER) Codec Channel Enable */\r
+/* -------- ISI_DMA_CHDR : (ISI Offset: 0x3C) DMA Channel Disable Register -------- */\r
+#define ISI_DMA_CHDR_P_CH_DIS (0x1u << 0) /**< \brief (ISI_DMA_CHDR)  */\r
+#define ISI_DMA_CHDR_C_CH_DIS (0x1u << 1) /**< \brief (ISI_DMA_CHDR)  */\r
+/* -------- ISI_DMA_CHSR : (ISI Offset: 0x40) DMA Channel Status Register -------- */\r
+#define ISI_DMA_CHSR_P_CH_S (0x1u << 0) /**< \brief (ISI_DMA_CHSR)  */\r
+#define ISI_DMA_CHSR_C_CH_S (0x1u << 1) /**< \brief (ISI_DMA_CHSR)  */\r
+/* -------- ISI_DMA_P_ADDR : (ISI Offset: 0x44) DMA Preview Base Address Register -------- */\r
+#define ISI_DMA_P_ADDR_P_ADDR_Pos 2\r
+#define ISI_DMA_P_ADDR_P_ADDR_Msk (0x3fffffffu << ISI_DMA_P_ADDR_P_ADDR_Pos) /**< \brief (ISI_DMA_P_ADDR) Preview Image Base Address. (This address is word aligned.) */\r
+#define ISI_DMA_P_ADDR_P_ADDR(value) ((ISI_DMA_P_ADDR_P_ADDR_Msk & ((value) << ISI_DMA_P_ADDR_P_ADDR_Pos)))\r
+/* -------- ISI_DMA_P_CTRL : (ISI Offset: 0x48) DMA Preview Control Register -------- */\r
+#define ISI_DMA_P_CTRL_P_FETCH (0x1u << 0) /**< \brief (ISI_DMA_P_CTRL) Descriptor Fetch Control Field */\r
+#define ISI_DMA_P_CTRL_P_WB (0x1u << 1) /**< \brief (ISI_DMA_P_CTRL) Descriptor Writeback Control Field */\r
+#define ISI_DMA_P_CTRL_P_IEN (0x1u << 2) /**< \brief (ISI_DMA_P_CTRL) Transfer Done Flag Control */\r
+#define ISI_DMA_P_CTRL_P_DONE (0x1u << 3) /**< \brief (ISI_DMA_P_CTRL) (This field is only updated in the memory.) */\r
+/* -------- ISI_DMA_P_DSCR : (ISI Offset: 0x4C) DMA Preview Descriptor Address Register -------- */\r
+#define ISI_DMA_P_DSCR_P_DSCR_Pos 2\r
+#define ISI_DMA_P_DSCR_P_DSCR_Msk (0x3fffffffu << ISI_DMA_P_DSCR_P_DSCR_Pos) /**< \brief (ISI_DMA_P_DSCR) Preview Descriptor Base Address (This address is word aligned.) */\r
+#define ISI_DMA_P_DSCR_P_DSCR(value) ((ISI_DMA_P_DSCR_P_DSCR_Msk & ((value) << ISI_DMA_P_DSCR_P_DSCR_Pos)))\r
+/* -------- ISI_DMA_C_ADDR : (ISI Offset: 0x50) DMA Codec Base Address Register -------- */\r
+#define ISI_DMA_C_ADDR_C_ADDR_Pos 2\r
+#define ISI_DMA_C_ADDR_C_ADDR_Msk (0x3fffffffu << ISI_DMA_C_ADDR_C_ADDR_Pos) /**< \brief (ISI_DMA_C_ADDR) Codec Image Base Address (This address is word aligned.) */\r
+#define ISI_DMA_C_ADDR_C_ADDR(value) ((ISI_DMA_C_ADDR_C_ADDR_Msk & ((value) << ISI_DMA_C_ADDR_C_ADDR_Pos)))\r
+/* -------- ISI_DMA_C_CTRL : (ISI Offset: 0x54) DMA Codec Control Register -------- */\r
+#define ISI_DMA_C_CTRL_C_FETCH (0x1u << 0) /**< \brief (ISI_DMA_C_CTRL) Descriptor Fetch Control Field */\r
+#define ISI_DMA_C_CTRL_C_WB (0x1u << 1) /**< \brief (ISI_DMA_C_CTRL) Descriptor Writeback Control Field */\r
+#define ISI_DMA_C_CTRL_C_IEN (0x1u << 2) /**< \brief (ISI_DMA_C_CTRL) Transfer Done flag control */\r
+#define ISI_DMA_C_CTRL_C_DONE (0x1u << 3) /**< \brief (ISI_DMA_C_CTRL) (This field is only updated in the memory.) */\r
+/* -------- ISI_DMA_C_DSCR : (ISI Offset: 0x58) DMA Codec Descriptor Address Register -------- */\r
+#define ISI_DMA_C_DSCR_C_DSCR_Pos 2\r
+#define ISI_DMA_C_DSCR_C_DSCR_Msk (0x3fffffffu << ISI_DMA_C_DSCR_C_DSCR_Pos) /**< \brief (ISI_DMA_C_DSCR) Codec Descriptor Base Address (This address is word aligned.) */\r
+#define ISI_DMA_C_DSCR_C_DSCR(value) ((ISI_DMA_C_DSCR_C_DSCR_Msk & ((value) << ISI_DMA_C_DSCR_C_DSCR_Pos)))\r
+/* -------- ISI_WPCR : (ISI Offset: 0xE4) Write Protection Control Register -------- */\r
+#define ISI_WPCR_WP_EN (0x1u << 0) /**< \brief (ISI_WPCR) Write Protection Enable */\r
+#define ISI_WPCR_WP_KEY_Pos 8\r
+#define ISI_WPCR_WP_KEY_Msk (0xffffffu << ISI_WPCR_WP_KEY_Pos) /**< \brief (ISI_WPCR) Write Protection KEY Password */\r
+#define ISI_WPCR_WP_KEY(value) ((ISI_WPCR_WP_KEY_Msk & ((value) << ISI_WPCR_WP_KEY_Pos)))\r
+/* -------- ISI_WPSR : (ISI Offset: 0xE8) Write Protection Status Register -------- */\r
+#define ISI_WPSR_WP_VS_Pos 0\r
+#define ISI_WPSR_WP_VS_Msk (0xfu << ISI_WPSR_WP_VS_Pos) /**< \brief (ISI_WPSR) Write Protection Violation Status */\r
+#define ISI_WPSR_WP_VSRC_Pos 8\r
+#define ISI_WPSR_WP_VSRC_Msk (0xffffu << ISI_WPSR_WP_VSRC_Pos) /**< \brief (ISI_WPSR) Write Protection Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR L2 Cache Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_L2CC L2 Cache Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief L2cc hardware registers */\r
+typedef struct {\r
+  __I  uint32_t L2CC_IDR;        /**< \brief (L2cc Offset: 0x000) Cache ID Register */\r
+  __I  uint32_t L2CC_TYPR;       /**< \brief (L2cc Offset: 0x004) Cache Type Register */\r
+  __I  uint32_t Reserved1[62];\r
+  __IO uint32_t L2CC_CR;         /**< \brief (L2cc Offset: 0x100) Control Register */\r
+  __IO uint32_t L2CC_ACR;        /**< \brief (L2cc Offset: 0x104) Auxiliary Control Register */\r
+  __IO uint32_t L2CC_TRCR;       /**< \brief (L2cc Offset: 0x108) Tag RAM Control Register */\r
+  __IO uint32_t L2CC_DRCR;       /**< \brief (L2cc Offset: 0x10C) Data RAM Control Register */\r
+  __I  uint32_t Reserved2[60];\r
+  __IO uint32_t L2CC_ECR;        /**< \brief (L2cc Offset: 0x200) Event Counter Control Register */\r
+  __IO uint32_t L2CC_ECFGR1;     /**< \brief (L2cc Offset: 0x204) Event Counter 1 Configuration Register */\r
+  __IO uint32_t L2CC_ECFGR0;     /**< \brief (L2cc Offset: 0x208) Event Counter 0 Configuration Register */\r
+  __IO uint32_t L2CC_EVR1;       /**< \brief (L2cc Offset: 0x20C) Event Counter 1 Value Register */\r
+  __IO uint32_t L2CC_EVR0;       /**< \brief (L2cc Offset: 0x210) Event Counter 0 Value Register */\r
+  __IO uint32_t L2CC_IMR;        /**< \brief (L2cc Offset: 0x214) Interrupt Mask Register */\r
+  __I  uint32_t L2CC_MISR;       /**< \brief (L2cc Offset: 0x218) Masked Interrupt Status Register */\r
+  __I  uint32_t L2CC_RISR;       /**< \brief (L2cc Offset: 0x21C) Raw Interrupt Status Register */\r
+  __IO uint32_t L2CC_ICR;        /**< \brief (L2cc Offset: 0x220) Interrupt Clear Register */\r
+  __I  uint32_t Reserved3[323];\r
+  __IO uint32_t L2CC_CSR;        /**< \brief (L2cc Offset: 0x730) Cache Synchronization Register */\r
+  __I  uint32_t Reserved4[15];\r
+  __IO uint32_t L2CC_IPALR;      /**< \brief (L2cc Offset: 0x770) Invalidate Physical Address Line Register */\r
+  __I  uint32_t Reserved5[2];\r
+  __IO uint32_t L2CC_IWR;        /**< \brief (L2cc Offset: 0x77C) Invalidate Way Register */\r
+  __I  uint32_t Reserved6[12];\r
+  __IO uint32_t L2CC_CPALR;      /**< \brief (L2cc Offset: 0x7B0) Clean Physical Address Line Register */\r
+  __I  uint32_t Reserved7[1];\r
+  __IO uint32_t L2CC_CIR;        /**< \brief (L2cc Offset: 0x7B8) Clean Index Register */\r
+  __IO uint32_t L2CC_CWR;        /**< \brief (L2cc Offset: 0x7BC) Clean Way Register */\r
+  __I  uint32_t Reserved8[12];\r
+  __IO uint32_t L2CC_CIPALR;     /**< \brief (L2cc Offset: 0x7F0) Clean Invalidate Physical Address Line Register */\r
+  __I  uint32_t Reserved9[1];\r
+  __IO uint32_t L2CC_CIIR;       /**< \brief (L2cc Offset: 0x7F8) Clean Invalidate Index Register */\r
+  __IO uint32_t L2CC_CIWR;       /**< \brief (L2cc Offset: 0x7FC) Clean Invalidate Way Register */\r
+  __I  uint32_t Reserved10[64];\r
+  __IO uint32_t L2CC_DLKR;       /**< \brief (L2cc Offset: 0x900) Data Lockdown Register */\r
+  __IO uint32_t L2CC_ILKR;       /**< \brief (L2cc Offset: 0x904) Instruction Lockdown Register */\r
+  __I  uint32_t Reserved11[398];\r
+  __IO uint32_t L2CC_DCR;        /**< \brief (L2cc Offset: 0xF40) Debug Control Register */\r
+  __I  uint32_t Reserved12[7];\r
+  __IO uint32_t L2CC_PCR;        /**< \brief (L2cc Offset: 0xF60) Prefetch Control Register */\r
+  __I  uint32_t Reserved13[7];\r
+  __IO uint32_t L2CC_POWCR;      /**< \brief (L2cc Offset: 0xF80) Power Control Register */\r
+} L2cc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- L2CC_IDR : (L2CC Offset: 0x000) Cache ID Register -------- */\r
+#define L2CC_IDR_ID_Pos 0\r
+#define L2CC_IDR_ID_Msk (0xffffffffu << L2CC_IDR_ID_Pos) /**< \brief (L2CC_IDR) Cache Controller ID */\r
+/* -------- L2CC_TYPR : (L2CC Offset: 0x004) Cache Type Register -------- */\r
+#define L2CC_TYPR_IL2ASS (0x1u << 6) /**< \brief (L2CC_TYPR) Instruction L2 Cache associativity */\r
+#define L2CC_TYPR_IL2WSIZE_Pos 8\r
+#define L2CC_TYPR_IL2WSIZE_Msk (0x7u << L2CC_TYPR_IL2WSIZE_Pos) /**< \brief (L2CC_TYPR) Instruction L2 Cache way size */\r
+#define L2CC_TYPR_DL2ASS (0x1u << 18) /**< \brief (L2CC_TYPR) Data L2 Cache associativity */\r
+#define L2CC_TYPR_DL2WSIZE_Pos 20\r
+#define L2CC_TYPR_DL2WSIZE_Msk (0x7u << L2CC_TYPR_DL2WSIZE_Pos) /**< \brief (L2CC_TYPR) Data L2 Cache way size */\r
+/* -------- L2CC_CR : (L2CC Offset: 0x100) Control Register -------- */\r
+#define L2CC_CR_L2CEN (0x1u << 0) /**< \brief (L2CC_CR) L2 Cache Enable */\r
+/* -------- L2CC_ACR : (L2CC Offset: 0x104) Auxiliary Control Register -------- */\r
+#define L2CC_ACR_HPSO (0x1u << 10) /**< \brief (L2CC_ACR) High Priority for SO and Dev Reads Enable */\r
+#define L2CC_ACR_SBDLE (0x1u << 11) /**< \brief (L2CC_ACR) Store Buffer Device Limitation Enable */\r
+#define L2CC_ACR_EXCC (0x1u << 12) /**< \brief (L2CC_ACR) Exclusive Cache Configuration */\r
+#define L2CC_ACR_SAIE (0x1u << 13) /**< \brief (L2CC_ACR) Shared Attribute Invalidate Enable */\r
+#define L2CC_ACR_ASS (0x1u << 16) /**< \brief (L2CC_ACR) Associativity */\r
+#define L2CC_ACR_WAYSIZE_Pos 17\r
+#define L2CC_ACR_WAYSIZE_Msk (0x7u << L2CC_ACR_WAYSIZE_Pos) /**< \brief (L2CC_ACR) Way Size */\r
+#define   L2CC_ACR_WAYSIZE_16KB_WAY (0x1u << 17) /**< \brief (L2CC_ACR) 16 Kbyte way set associative */\r
+#define L2CC_ACR_EMBEN (0x1u << 20) /**< \brief (L2CC_ACR) Event Monitor Bus Enable */\r
+#define L2CC_ACR_PEN (0x1u << 21) /**< \brief (L2CC_ACR) Parity Enable */\r
+#define L2CC_ACR_SAOEN (0x1u << 22) /**< \brief (L2CC_ACR) Shared Attribute Override Enable */\r
+#define L2CC_ACR_FWA_Pos 23\r
+#define L2CC_ACR_FWA_Msk (0x3u << L2CC_ACR_FWA_Pos) /**< \brief (L2CC_ACR) Force Write Allocate */\r
+#define L2CC_ACR_FWA(value) ((L2CC_ACR_FWA_Msk & ((value) << L2CC_ACR_FWA_Pos)))\r
+#define L2CC_ACR_CRPOL (0x1u << 25) /**< \brief (L2CC_ACR) Cache Replacement Policy */\r
+#define L2CC_ACR_NSLEN (0x1u << 26) /**< \brief (L2CC_ACR) Non-Secure Lockdown Enable */\r
+#define L2CC_ACR_NSIAC (0x1u << 27) /**< \brief (L2CC_ACR) Non-Secure Interrupt Access Control */\r
+#define L2CC_ACR_DPEN (0x1u << 28) /**< \brief (L2CC_ACR) Data Prefetch Enable */\r
+#define L2CC_ACR_IPEN (0x1u << 29) /**< \brief (L2CC_ACR) Instruction Prefetch Enable */\r
+/* -------- L2CC_TRCR : (L2CC Offset: 0x108) Tag RAM Control Register -------- */\r
+#define L2CC_TRCR_TSETLAT_Pos 0\r
+#define L2CC_TRCR_TSETLAT_Msk (0x7u << L2CC_TRCR_TSETLAT_Pos) /**< \brief (L2CC_TRCR) Setup Latency */\r
+#define L2CC_TRCR_TSETLAT(value) ((L2CC_TRCR_TSETLAT_Msk & ((value) << L2CC_TRCR_TSETLAT_Pos)))\r
+#define L2CC_TRCR_TRDLAT_Pos 4\r
+#define L2CC_TRCR_TRDLAT_Msk (0x7u << L2CC_TRCR_TRDLAT_Pos) /**< \brief (L2CC_TRCR) Read Access Latency */\r
+#define L2CC_TRCR_TRDLAT(value) ((L2CC_TRCR_TRDLAT_Msk & ((value) << L2CC_TRCR_TRDLAT_Pos)))\r
+#define L2CC_TRCR_TWRLAT_Pos 8\r
+#define L2CC_TRCR_TWRLAT_Msk (0x7u << L2CC_TRCR_TWRLAT_Pos) /**< \brief (L2CC_TRCR) Write Access Latency */\r
+#define L2CC_TRCR_TWRLAT(value) ((L2CC_TRCR_TWRLAT_Msk & ((value) << L2CC_TRCR_TWRLAT_Pos)))\r
+/* -------- L2CC_DRCR : (L2CC Offset: 0x10C) Data RAM Control Register -------- */\r
+#define L2CC_DRCR_DSETLAT_Pos 0\r
+#define L2CC_DRCR_DSETLAT_Msk (0x7u << L2CC_DRCR_DSETLAT_Pos) /**< \brief (L2CC_DRCR) Setup Latency */\r
+#define L2CC_DRCR_DSETLAT(value) ((L2CC_DRCR_DSETLAT_Msk & ((value) << L2CC_DRCR_DSETLAT_Pos)))\r
+#define L2CC_DRCR_DRDLAT_Pos 4\r
+#define L2CC_DRCR_DRDLAT_Msk (0x7u << L2CC_DRCR_DRDLAT_Pos) /**< \brief (L2CC_DRCR) Read Access Latency */\r
+#define L2CC_DRCR_DRDLAT(value) ((L2CC_DRCR_DRDLAT_Msk & ((value) << L2CC_DRCR_DRDLAT_Pos)))\r
+#define L2CC_DRCR_DWRLAT_Pos 8\r
+#define L2CC_DRCR_DWRLAT_Msk (0x7u << L2CC_DRCR_DWRLAT_Pos) /**< \brief (L2CC_DRCR) Write Access Latency */\r
+#define L2CC_DRCR_DWRLAT(value) ((L2CC_DRCR_DWRLAT_Msk & ((value) << L2CC_DRCR_DWRLAT_Pos)))\r
+/* -------- L2CC_ECR : (L2CC Offset: 0x200) Event Counter Control Register -------- */\r
+#define L2CC_ECR_EVCEN (0x1u << 0) /**< \brief (L2CC_ECR) Event Counter Enable */\r
+#define L2CC_ECR_EVC0RST (0x1u << 1) /**< \brief (L2CC_ECR) Event Counter 0 Reset */\r
+#define L2CC_ECR_EVC1RST (0x1u << 2) /**< \brief (L2CC_ECR) Event Counter 1 Reset */\r
+/* -------- L2CC_ECFGR1 : (L2CC Offset: 0x204) Event Counter 1 Configuration Register -------- */\r
+#define L2CC_ECFGR1_EIGEN_Pos 0\r
+#define L2CC_ECFGR1_EIGEN_Msk (0x3u << L2CC_ECFGR1_EIGEN_Pos) /**< \brief (L2CC_ECFGR1) Event Counter Interrupt Generation */\r
+#define   L2CC_ECFGR1_EIGEN_INT_DIS (0x0u << 0) /**< \brief (L2CC_ECFGR1) Disables (default) */\r
+#define   L2CC_ECFGR1_EIGEN_INT_EN_INCR (0x1u << 0) /**< \brief (L2CC_ECFGR1) Enables with Increment condition */\r
+#define   L2CC_ECFGR1_EIGEN_INT_EN_OVER (0x2u << 0) /**< \brief (L2CC_ECFGR1) Enables with Overflow condition */\r
+#define   L2CC_ECFGR1_EIGEN_INT_GEN_DIS (0x3u << 0) /**< \brief (L2CC_ECFGR1) Disables Interrupt generation */\r
+#define L2CC_ECFGR1_ESRC_Pos 2\r
+#define L2CC_ECFGR1_ESRC_Msk (0xfu << L2CC_ECFGR1_ESRC_Pos) /**< \brief (L2CC_ECFGR1) Event Counter Source */\r
+#define   L2CC_ECFGR1_ESRC_CNT_DIS (0x0u << 2) /**< \brief (L2CC_ECFGR1) Counter Disabled */\r
+#define   L2CC_ECFGR1_ESRC_SRC_CO (0x1u << 2) /**< \brief (L2CC_ECFGR1) Source is CO */\r
+#define   L2CC_ECFGR1_ESRC_SRC_DRHIT (0x2u << 2) /**< \brief (L2CC_ECFGR1) Source is DRHIT */\r
+#define   L2CC_ECFGR1_ESRC_SRC_DRREQ (0x3u << 2) /**< \brief (L2CC_ECFGR1) Source is DRREQ */\r
+#define   L2CC_ECFGR1_ESRC_SRC_DWHIT (0x4u << 2) /**< \brief (L2CC_ECFGR1) Source is DWHIT */\r
+#define   L2CC_ECFGR1_ESRC_SRC_DWREQ (0x5u << 2) /**< \brief (L2CC_ECFGR1) Source is DWREQ */\r
+#define   L2CC_ECFGR1_ESRC_SRC_DWTREQ (0x6u << 2) /**< \brief (L2CC_ECFGR1) Source is DWTREQ */\r
+#define   L2CC_ECFGR1_ESRC_SRC_IRHIT (0x7u << 2) /**< \brief (L2CC_ECFGR1) Source is IRHIT */\r
+#define   L2CC_ECFGR1_ESRC_SRC_IRREQ (0x8u << 2) /**< \brief (L2CC_ECFGR1) Source is IRREQ */\r
+#define   L2CC_ECFGR1_ESRC_SRC_WA (0x9u << 2) /**< \brief (L2CC_ECFGR1) Source is WA */\r
+#define   L2CC_ECFGR1_ESRC_SRC_IPFALLOC (0xAu << 2) /**< \brief (L2CC_ECFGR1) Source is IPFALLOC */\r
+#define   L2CC_ECFGR1_ESRC_SRC_EPFHIT (0xBu << 2) /**< \brief (L2CC_ECFGR1) Source is EPFHIT */\r
+#define   L2CC_ECFGR1_ESRC_SRC_EPFALLOC (0xCu << 2) /**< \brief (L2CC_ECFGR1) Source is EPFALLOC */\r
+#define   L2CC_ECFGR1_ESRC_SRC_SRRCVD (0xDu << 2) /**< \brief (L2CC_ECFGR1) Source is SRRCVD */\r
+#define   L2CC_ECFGR1_ESRC_SRC_SRCONF (0xEu << 2) /**< \brief (L2CC_ECFGR1) Source is SRCONF */\r
+#define   L2CC_ECFGR1_ESRC_SRC_EPFRCVD (0xFu << 2) /**< \brief (L2CC_ECFGR1) Source is EPFRCVD */\r
+/* -------- L2CC_ECFGR0 : (L2CC Offset: 0x208) Event Counter 0 Configuration Register -------- */\r
+#define L2CC_ECFGR0_EIGEN_Pos 0\r
+#define L2CC_ECFGR0_EIGEN_Msk (0x3u << L2CC_ECFGR0_EIGEN_Pos) /**< \brief (L2CC_ECFGR0) Event Counter Interrupt Generation */\r
+#define   L2CC_ECFGR0_EIGEN_INT_DIS (0x0u << 0) /**< \brief (L2CC_ECFGR0) Disables (default) */\r
+#define   L2CC_ECFGR0_EIGEN_INT_EN_INCR (0x1u << 0) /**< \brief (L2CC_ECFGR0) Enables with Increment condition */\r
+#define   L2CC_ECFGR0_EIGEN_INT_EN_OVER (0x2u << 0) /**< \brief (L2CC_ECFGR0) Enables with Overflow condition */\r
+#define   L2CC_ECFGR0_EIGEN_INT_GEN_DIS (0x3u << 0) /**< \brief (L2CC_ECFGR0) Disables Interrupt generation */\r
+#define L2CC_ECFGR0_ESRC_Pos 2\r
+#define L2CC_ECFGR0_ESRC_Msk (0xfu << L2CC_ECFGR0_ESRC_Pos) /**< \brief (L2CC_ECFGR0) Event Counter Source */\r
+#define   L2CC_ECFGR0_ESRC_CNT_DIS (0x0u << 2) /**< \brief (L2CC_ECFGR0) Counter Disabled */\r
+#define   L2CC_ECFGR0_ESRC_SRC_CO (0x1u << 2) /**< \brief (L2CC_ECFGR0) Source is CO */\r
+#define   L2CC_ECFGR0_ESRC_SRC_DRHIT (0x2u << 2) /**< \brief (L2CC_ECFGR0) Source is DRHIT */\r
+#define   L2CC_ECFGR0_ESRC_SRC_DRREQ (0x3u << 2) /**< \brief (L2CC_ECFGR0) Source is DRREQ */\r
+#define   L2CC_ECFGR0_ESRC_SRC_DWHIT (0x4u << 2) /**< \brief (L2CC_ECFGR0) Source is DWHIT */\r
+#define   L2CC_ECFGR0_ESRC_SRC_DWREQ (0x5u << 2) /**< \brief (L2CC_ECFGR0) Source is DWREQ */\r
+#define   L2CC_ECFGR0_ESRC_SRC_DWTREQ (0x6u << 2) /**< \brief (L2CC_ECFGR0) Source is DWTREQ */\r
+#define   L2CC_ECFGR0_ESRC_SRC_IRHIT (0x7u << 2) /**< \brief (L2CC_ECFGR0) Source is IRHIT */\r
+#define   L2CC_ECFGR0_ESRC_SRC_IRREQ (0x8u << 2) /**< \brief (L2CC_ECFGR0) Source is IRREQ */\r
+#define   L2CC_ECFGR0_ESRC_SRC_WA (0x9u << 2) /**< \brief (L2CC_ECFGR0) Source is WA */\r
+#define   L2CC_ECFGR0_ESRC_SRC_IPFALLOC (0xAu << 2) /**< \brief (L2CC_ECFGR0) Source is IPFALLOC */\r
+#define   L2CC_ECFGR0_ESRC_SRC_EPFHIT (0xBu << 2) /**< \brief (L2CC_ECFGR0) Source is EPFHIT */\r
+#define   L2CC_ECFGR0_ESRC_SRC_EPFALLOC (0xCu << 2) /**< \brief (L2CC_ECFGR0) Source is EPFALLOC */\r
+#define   L2CC_ECFGR0_ESRC_SRC_SRRCVD (0xDu << 2) /**< \brief (L2CC_ECFGR0) Source is SRRCVD */\r
+#define   L2CC_ECFGR0_ESRC_SRC_SRCONF (0xEu << 2) /**< \brief (L2CC_ECFGR0) Source is SRCONF */\r
+#define   L2CC_ECFGR0_ESRC_SRC_EPFRCVD (0xFu << 2) /**< \brief (L2CC_ECFGR0) Source is EPFRCVD */\r
+/* -------- L2CC_EVR1 : (L2CC Offset: 0x20C) Event Counter 1 Value Register -------- */\r
+#define L2CC_EVR1_VALUE_Pos 0\r
+#define L2CC_EVR1_VALUE_Msk (0xffffffffu << L2CC_EVR1_VALUE_Pos) /**< \brief (L2CC_EVR1) Event Counter Value */\r
+#define L2CC_EVR1_VALUE(value) ((L2CC_EVR1_VALUE_Msk & ((value) << L2CC_EVR1_VALUE_Pos)))\r
+/* -------- L2CC_EVR0 : (L2CC Offset: 0x210) Event Counter 0 Value Register -------- */\r
+#define L2CC_EVR0_VALUE_Pos 0\r
+#define L2CC_EVR0_VALUE_Msk (0xffffffffu << L2CC_EVR0_VALUE_Pos) /**< \brief (L2CC_EVR0) Event Counter Value */\r
+#define L2CC_EVR0_VALUE(value) ((L2CC_EVR0_VALUE_Msk & ((value) << L2CC_EVR0_VALUE_Pos)))\r
+/* -------- L2CC_IMR : (L2CC Offset: 0x214) Interrupt Mask Register -------- */\r
+#define L2CC_IMR_ECNTR (0x1u << 0) /**< \brief (L2CC_IMR) Event Counter 1/0 Overflow Increment */\r
+#define L2CC_IMR_PARRT (0x1u << 1) /**< \brief (L2CC_IMR) Parity Error on L2 Tag RAM, Read */\r
+#define L2CC_IMR_PARRD (0x1u << 2) /**< \brief (L2CC_IMR) Parity Error on L2 Data RAM, Read */\r
+#define L2CC_IMR_ERRWT (0x1u << 3) /**< \brief (L2CC_IMR) Error on L2 Tag RAM, Write */\r
+#define L2CC_IMR_ERRWD (0x1u << 4) /**< \brief (L2CC_IMR) Error on L2 Data RAM, Write */\r
+#define L2CC_IMR_ERRRT (0x1u << 5) /**< \brief (L2CC_IMR) Error on L2 Tag RAM, Read */\r
+#define L2CC_IMR_ERRRD (0x1u << 6) /**< \brief (L2CC_IMR) Error on L2 Data RAM, Read */\r
+#define L2CC_IMR_SLVERR (0x1u << 7) /**< \brief (L2CC_IMR) SLVERR from L3 memory */\r
+#define L2CC_IMR_DECERR (0x1u << 8) /**< \brief (L2CC_IMR) DECERR from L3 memory */\r
+/* -------- L2CC_MISR : (L2CC Offset: 0x218) Masked Interrupt Status Register -------- */\r
+#define L2CC_MISR_ECNTR (0x1u << 0) /**< \brief (L2CC_MISR) Event Counter 1/0 Overflow Increment */\r
+#define L2CC_MISR_PARRT (0x1u << 1) /**< \brief (L2CC_MISR) Parity Error on L2 Tag RAM, Read */\r
+#define L2CC_MISR_PARRD (0x1u << 2) /**< \brief (L2CC_MISR) Parity Error on L2 Data RAM, Read */\r
+#define L2CC_MISR_ERRWT (0x1u << 3) /**< \brief (L2CC_MISR) Error on L2 Tag RAM, Write */\r
+#define L2CC_MISR_ERRWD (0x1u << 4) /**< \brief (L2CC_MISR) Error on L2 Data RAM, Write */\r
+#define L2CC_MISR_ERRRT (0x1u << 5) /**< \brief (L2CC_MISR) Error on L2 Tag RAM, Read */\r
+#define L2CC_MISR_ERRRD (0x1u << 6) /**< \brief (L2CC_MISR) Error on L2 Data RAM, Read */\r
+#define L2CC_MISR_SLVERR (0x1u << 7) /**< \brief (L2CC_MISR) SLVERR from L3 memory */\r
+#define L2CC_MISR_DECERR (0x1u << 8) /**< \brief (L2CC_MISR) DECERR from L3 memory */\r
+/* -------- L2CC_RISR : (L2CC Offset: 0x21C) Raw Interrupt Status Register -------- */\r
+#define L2CC_RISR_ECNTR (0x1u << 0) /**< \brief (L2CC_RISR) Event Counter 1/0 Overflow Increment */\r
+#define L2CC_RISR_PARRT (0x1u << 1) /**< \brief (L2CC_RISR) Parity Error on L2 Tag RAM, Read */\r
+#define L2CC_RISR_PARRD (0x1u << 2) /**< \brief (L2CC_RISR) Parity Error on L2 Data RAM, Read */\r
+#define L2CC_RISR_ERRWT (0x1u << 3) /**< \brief (L2CC_RISR) Error on L2 Tag RAM, Write */\r
+#define L2CC_RISR_ERRWD (0x1u << 4) /**< \brief (L2CC_RISR) Error on L2 Data RAM, Write */\r
+#define L2CC_RISR_ERRRT (0x1u << 5) /**< \brief (L2CC_RISR) Error on L2 Tag RAM, Read */\r
+#define L2CC_RISR_ERRRD (0x1u << 6) /**< \brief (L2CC_RISR) Error on L2 Data RAM, Read */\r
+#define L2CC_RISR_SLVERR (0x1u << 7) /**< \brief (L2CC_RISR) SLVERR from L3 memory */\r
+#define L2CC_RISR_DECERR (0x1u << 8) /**< \brief (L2CC_RISR) DECERR from L3 memory */\r
+/* -------- L2CC_ICR : (L2CC Offset: 0x220) Interrupt Clear Register -------- */\r
+#define L2CC_ICR_ECNTR (0x1u << 0) /**< \brief (L2CC_ICR) Event Counter 1/0 Overflow Increment */\r
+#define L2CC_ICR_PARRT (0x1u << 1) /**< \brief (L2CC_ICR) Parity Error on L2 Tag RAM, Read */\r
+#define L2CC_ICR_PARRD (0x1u << 2) /**< \brief (L2CC_ICR) Parity Error on L2 Data RAM, Read */\r
+#define L2CC_ICR_ERRWT (0x1u << 3) /**< \brief (L2CC_ICR) Error on L2 Tag RAM, Write */\r
+#define L2CC_ICR_ERRWD (0x1u << 4) /**< \brief (L2CC_ICR) Error on L2 Data RAM, Write */\r
+#define L2CC_ICR_ERRRT (0x1u << 5) /**< \brief (L2CC_ICR) Error on L2 Tag RAM, Read */\r
+#define L2CC_ICR_ERRRD (0x1u << 6) /**< \brief (L2CC_ICR) Error on L2 Data RAM, Read */\r
+#define L2CC_ICR_SLVERR (0x1u << 7) /**< \brief (L2CC_ICR) SLVERR from L3 memory */\r
+#define L2CC_ICR_DECERR (0x1u << 8) /**< \brief (L2CC_ICR) DECERR from L3 memory */\r
+/* -------- L2CC_CSR : (L2CC Offset: 0x730) Cache Synchronization Register -------- */\r
+#define L2CC_CSR_C (0x1u << 0) /**< \brief (L2CC_CSR) Cache Synchronization Status */\r
+/* -------- L2CC_IPALR : (L2CC Offset: 0x770) Invalidate Physical Address Line Register -------- */\r
+#define L2CC_IPALR_C (0x1u << 0) /**< \brief (L2CC_IPALR) Cache Synchronization Status */\r
+#define L2CC_IPALR_IDX_Pos 5\r
+#define L2CC_IPALR_IDX_Msk (0x1ffu << L2CC_IPALR_IDX_Pos) /**< \brief (L2CC_IPALR) Index Number */\r
+#define L2CC_IPALR_IDX(value) ((L2CC_IPALR_IDX_Msk & ((value) << L2CC_IPALR_IDX_Pos)))\r
+#define L2CC_IPALR_TAG_Pos 14\r
+#define L2CC_IPALR_TAG_Msk (0x3ffffu << L2CC_IPALR_TAG_Pos) /**< \brief (L2CC_IPALR) Tag Number */\r
+#define L2CC_IPALR_TAG(value) ((L2CC_IPALR_TAG_Msk & ((value) << L2CC_IPALR_TAG_Pos)))\r
+/* -------- L2CC_IWR : (L2CC Offset: 0x77C) Invalidate Way Register -------- */\r
+#define L2CC_IWR_WAY0 (0x1u << 0) /**< \brief (L2CC_IWR) Invalidate Way Number 0 */\r
+#define L2CC_IWR_WAY1 (0x1u << 1) /**< \brief (L2CC_IWR) Invalidate Way Number 1 */\r
+#define L2CC_IWR_WAY2 (0x1u << 2) /**< \brief (L2CC_IWR) Invalidate Way Number 2 */\r
+#define L2CC_IWR_WAY3 (0x1u << 3) /**< \brief (L2CC_IWR) Invalidate Way Number 3 */\r
+#define L2CC_IWR_WAY4 (0x1u << 4) /**< \brief (L2CC_IWR) Invalidate Way Number 4 */\r
+#define L2CC_IWR_WAY5 (0x1u << 5) /**< \brief (L2CC_IWR) Invalidate Way Number 5 */\r
+#define L2CC_IWR_WAY6 (0x1u << 6) /**< \brief (L2CC_IWR) Invalidate Way Number 6 */\r
+#define L2CC_IWR_WAY7 (0x1u << 7) /**< \brief (L2CC_IWR) Invalidate Way Number 7 */\r
+/* -------- L2CC_CPALR : (L2CC Offset: 0x7B0) Clean Physical Address Line Register -------- */\r
+#define L2CC_CPALR_C (0x1u << 0) /**< \brief (L2CC_CPALR) Cache Synchronization Status */\r
+#define L2CC_CPALR_IDX_Pos 5\r
+#define L2CC_CPALR_IDX_Msk (0x1ffu << L2CC_CPALR_IDX_Pos) /**< \brief (L2CC_CPALR) Index number */\r
+#define L2CC_CPALR_IDX(value) ((L2CC_CPALR_IDX_Msk & ((value) << L2CC_CPALR_IDX_Pos)))\r
+#define L2CC_CPALR_TAG_Pos 14\r
+#define L2CC_CPALR_TAG_Msk (0x3ffffu << L2CC_CPALR_TAG_Pos) /**< \brief (L2CC_CPALR) Tag number */\r
+#define L2CC_CPALR_TAG(value) ((L2CC_CPALR_TAG_Msk & ((value) << L2CC_CPALR_TAG_Pos)))\r
+/* -------- L2CC_CIR : (L2CC Offset: 0x7B8) Clean Index Register -------- */\r
+#define L2CC_CIR_C (0x1u << 0) /**< \brief (L2CC_CIR) Cache Synchronization Status */\r
+#define L2CC_CIR_IDX_Pos 5\r
+#define L2CC_CIR_IDX_Msk (0x1ffu << L2CC_CIR_IDX_Pos) /**< \brief (L2CC_CIR) Index number */\r
+#define L2CC_CIR_IDX(value) ((L2CC_CIR_IDX_Msk & ((value) << L2CC_CIR_IDX_Pos)))\r
+#define L2CC_CIR_WAY_Pos 28\r
+#define L2CC_CIR_WAY_Msk (0x7u << L2CC_CIR_WAY_Pos) /**< \brief (L2CC_CIR) Way number */\r
+#define L2CC_CIR_WAY(value) ((L2CC_CIR_WAY_Msk & ((value) << L2CC_CIR_WAY_Pos)))\r
+/* -------- L2CC_CWR : (L2CC Offset: 0x7BC) Clean Way Register -------- */\r
+#define L2CC_CWR_WAY0 (0x1u << 0) /**< \brief (L2CC_CWR) Clean Way Number 0 */\r
+#define L2CC_CWR_WAY1 (0x1u << 1) /**< \brief (L2CC_CWR) Clean Way Number 1 */\r
+#define L2CC_CWR_WAY2 (0x1u << 2) /**< \brief (L2CC_CWR) Clean Way Number 2 */\r
+#define L2CC_CWR_WAY3 (0x1u << 3) /**< \brief (L2CC_CWR) Clean Way Number 3 */\r
+#define L2CC_CWR_WAY4 (0x1u << 4) /**< \brief (L2CC_CWR) Clean Way Number 4 */\r
+#define L2CC_CWR_WAY5 (0x1u << 5) /**< \brief (L2CC_CWR) Clean Way Number 5 */\r
+#define L2CC_CWR_WAY6 (0x1u << 6) /**< \brief (L2CC_CWR) Clean Way Number 6 */\r
+#define L2CC_CWR_WAY7 (0x1u << 7) /**< \brief (L2CC_CWR) Clean Way Number 7 */\r
+/* -------- L2CC_CIPALR : (L2CC Offset: 0x7F0) Clean Invalidate Physical Address Line Register -------- */\r
+#define L2CC_CIPALR_C (0x1u << 0) /**< \brief (L2CC_CIPALR) Cache Synchronization Status */\r
+#define L2CC_CIPALR_IDX_Pos 5\r
+#define L2CC_CIPALR_IDX_Msk (0x1ffu << L2CC_CIPALR_IDX_Pos) /**< \brief (L2CC_CIPALR) Index Number */\r
+#define L2CC_CIPALR_IDX(value) ((L2CC_CIPALR_IDX_Msk & ((value) << L2CC_CIPALR_IDX_Pos)))\r
+#define L2CC_CIPALR_TAG_Pos 14\r
+#define L2CC_CIPALR_TAG_Msk (0x3ffffu << L2CC_CIPALR_TAG_Pos) /**< \brief (L2CC_CIPALR) Tag Number */\r
+#define L2CC_CIPALR_TAG(value) ((L2CC_CIPALR_TAG_Msk & ((value) << L2CC_CIPALR_TAG_Pos)))\r
+/* -------- L2CC_CIIR : (L2CC Offset: 0x7F8) Clean Invalidate Index Register -------- */\r
+#define L2CC_CIIR_C (0x1u << 0) /**< \brief (L2CC_CIIR) Cache Synchronization Status */\r
+#define L2CC_CIIR_IDX_Pos 5\r
+#define L2CC_CIIR_IDX_Msk (0x1ffu << L2CC_CIIR_IDX_Pos) /**< \brief (L2CC_CIIR) Index Number */\r
+#define L2CC_CIIR_IDX(value) ((L2CC_CIIR_IDX_Msk & ((value) << L2CC_CIIR_IDX_Pos)))\r
+#define L2CC_CIIR_WAY_Pos 28\r
+#define L2CC_CIIR_WAY_Msk (0x7u << L2CC_CIIR_WAY_Pos) /**< \brief (L2CC_CIIR) Way Number */\r
+#define L2CC_CIIR_WAY(value) ((L2CC_CIIR_WAY_Msk & ((value) << L2CC_CIIR_WAY_Pos)))\r
+/* -------- L2CC_CIWR : (L2CC Offset: 0x7FC) Clean Invalidate Way Register -------- */\r
+#define L2CC_CIWR_WAY0 (0x1u << 0) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 0 */\r
+#define L2CC_CIWR_WAY1 (0x1u << 1) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 1 */\r
+#define L2CC_CIWR_WAY2 (0x1u << 2) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 2 */\r
+#define L2CC_CIWR_WAY3 (0x1u << 3) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 3 */\r
+#define L2CC_CIWR_WAY4 (0x1u << 4) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 4 */\r
+#define L2CC_CIWR_WAY5 (0x1u << 5) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 5 */\r
+#define L2CC_CIWR_WAY6 (0x1u << 6) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 6 */\r
+#define L2CC_CIWR_WAY7 (0x1u << 7) /**< \brief (L2CC_CIWR) Clean Invalidate Way Number 7 */\r
+/* -------- L2CC_DLKR : (L2CC Offset: 0x900) Data Lockdown Register -------- */\r
+#define L2CC_DLKR_DLK0 (0x1u << 0) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 0 */\r
+#define L2CC_DLKR_DLK1 (0x1u << 1) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 1 */\r
+#define L2CC_DLKR_DLK2 (0x1u << 2) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 2 */\r
+#define L2CC_DLKR_DLK3 (0x1u << 3) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 3 */\r
+#define L2CC_DLKR_DLK4 (0x1u << 4) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 4 */\r
+#define L2CC_DLKR_DLK5 (0x1u << 5) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 5 */\r
+#define L2CC_DLKR_DLK6 (0x1u << 6) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 6 */\r
+#define L2CC_DLKR_DLK7 (0x1u << 7) /**< \brief (L2CC_DLKR) Data Lockdown in Way Number 7 */\r
+/* -------- L2CC_ILKR : (L2CC Offset: 0x904) Instruction Lockdown Register -------- */\r
+#define L2CC_ILKR_ILK0 (0x1u << 0) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 0 */\r
+#define L2CC_ILKR_ILK1 (0x1u << 1) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 1 */\r
+#define L2CC_ILKR_ILK2 (0x1u << 2) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 2 */\r
+#define L2CC_ILKR_ILK3 (0x1u << 3) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 3 */\r
+#define L2CC_ILKR_ILK4 (0x1u << 4) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 4 */\r
+#define L2CC_ILKR_ILK5 (0x1u << 5) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 5 */\r
+#define L2CC_ILKR_ILK6 (0x1u << 6) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 6 */\r
+#define L2CC_ILKR_ILK7 (0x1u << 7) /**< \brief (L2CC_ILKR) Instruction Lockdown in Way Number 7 */\r
+/* -------- L2CC_DCR : (L2CC Offset: 0xF40) Debug Control Register -------- */\r
+#define L2CC_DCR_DCL (0x1u << 0) /**< \brief (L2CC_DCR) Disable Cache Linefill */\r
+#define L2CC_DCR_DWB (0x1u << 1) /**< \brief (L2CC_DCR) Disable Write-back, Force Write-through */\r
+#define L2CC_DCR_SPNIDEN (0x1u << 2) /**< \brief (L2CC_DCR) SPNIDEN Value */\r
+/* -------- L2CC_PCR : (L2CC Offset: 0xF60) Prefetch Control Register -------- */\r
+#define L2CC_PCR_OFFSET_Pos 0\r
+#define L2CC_PCR_OFFSET_Msk (0x1fu << L2CC_PCR_OFFSET_Pos) /**< \brief (L2CC_PCR) Prefetch Offset */\r
+#define L2CC_PCR_OFFSET(value) ((L2CC_PCR_OFFSET_Msk & ((value) << L2CC_PCR_OFFSET_Pos)))\r
+#define L2CC_PCR_NSIDEN (0x1u << 21) /**< \brief (L2CC_PCR) Incr Double Linefill Enable */\r
+#define L2CC_PCR_IDLEN (0x1u << 23) /**< \brief (L2CC_PCR) Incr Double Linefill Enable */\r
+#define L2CC_PCR_PDEN (0x1u << 24) /**< \brief (L2CC_PCR) Prefetch Drop Enable */\r
+#define L2CC_PCR_DLFWRDIS (0x1u << 27) /**< \brief (L2CC_PCR) Double Linefill on WRAP Read Disable */\r
+#define L2CC_PCR_DATPEN (0x1u << 28) /**< \brief (L2CC_PCR) Data Prefetch Enable */\r
+#define L2CC_PCR_INSPEN (0x1u << 29) /**< \brief (L2CC_PCR) Instruction Prefetch Enable */\r
+#define L2CC_PCR_DLEN (0x1u << 30) /**< \brief (L2CC_PCR) Double Linefill Enable */\r
+/* -------- L2CC_POWCR : (L2CC Offset: 0xF80) Power Control Register -------- */\r
+#define L2CC_POWCR_STBYEN (0x1u << 0) /**< \brief (L2CC_POWCR) Standby Mode Enable */\r
+#define L2CC_POWCR_DCKGATEN (0x1u << 1) /**< \brief (L2CC_POWCR) Dynamic Clock Gating Enable */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR LCD Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_LCDC LCD Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Lcdc hardware registers */\r
+typedef struct {\r
+  __IO uint32_t LCDC_LCDCFG0;       /**< \brief (Lcdc Offset: 0x00000000) LCD Controller Configuration Register 0 */\r
+  __IO uint32_t LCDC_LCDCFG1;       /**< \brief (Lcdc Offset: 0x00000004) LCD Controller Configuration Register 1 */\r
+  __IO uint32_t LCDC_LCDCFG2;       /**< \brief (Lcdc Offset: 0x00000008) LCD Controller Configuration Register 2 */\r
+  __IO uint32_t LCDC_LCDCFG3;       /**< \brief (Lcdc Offset: 0x0000000C) LCD Controller Configuration Register 3 */\r
+  __IO uint32_t LCDC_LCDCFG4;       /**< \brief (Lcdc Offset: 0x00000010) LCD Controller Configuration Register 4 */\r
+  __IO uint32_t LCDC_LCDCFG5;       /**< \brief (Lcdc Offset: 0x00000014) LCD Controller Configuration Register 5 */\r
+  __IO uint32_t LCDC_LCDCFG6;       /**< \brief (Lcdc Offset: 0x00000018) LCD Controller Configuration Register 6 */\r
+  __I  uint32_t Reserved1[1];\r
+  __O  uint32_t LCDC_LCDEN;         /**< \brief (Lcdc Offset: 0x00000020) LCD Controller Enable Register */\r
+  __O  uint32_t LCDC_LCDDIS;        /**< \brief (Lcdc Offset: 0x00000024) LCD Controller Disable Register */\r
+  __I  uint32_t LCDC_LCDSR;         /**< \brief (Lcdc Offset: 0x00000028) LCD Controller Status Register */\r
+  __O  uint32_t LCDC_LCDIER;        /**< \brief (Lcdc Offset: 0x0000002C) LCD Controller Interrupt Enable Register */\r
+  __O  uint32_t LCDC_LCDIDR;        /**< \brief (Lcdc Offset: 0x00000030) LCD Controller Interrupt Disable Register */\r
+  __I  uint32_t LCDC_LCDIMR;        /**< \brief (Lcdc Offset: 0x00000034) LCD Controller Interrupt Mask Register */\r
+  __I  uint32_t LCDC_LCDISR;        /**< \brief (Lcdc Offset: 0x00000038) LCD Controller Interrupt Status Register */\r
+  __I  uint32_t Reserved2[1];\r
+  __O  uint32_t LCDC_BASECHER;      /**< \brief (Lcdc Offset: 0x00000040) Base Layer Channel Enable Register */\r
+  __O  uint32_t LCDC_BASECHDR;      /**< \brief (Lcdc Offset: 0x00000044) Base Layer Channel Disable Register */\r
+  __I  uint32_t LCDC_BASECHSR;      /**< \brief (Lcdc Offset: 0x00000048) Base Layer Channel Status Register */\r
+  __O  uint32_t LCDC_BASEIER;       /**< \brief (Lcdc Offset: 0x0000004C) Base Layer Interrupt Enable Register */\r
+  __O  uint32_t LCDC_BASEIDR;       /**< \brief (Lcdc Offset: 0x00000050) Base Layer Interrupt Disabled Register */\r
+  __I  uint32_t LCDC_BASEIMR;       /**< \brief (Lcdc Offset: 0x00000054) Base Layer Interrupt Mask Register */\r
+  __I  uint32_t LCDC_BASEISR;       /**< \brief (Lcdc Offset: 0x00000058) Base Layer Interrupt status Register */\r
+  __IO uint32_t LCDC_BASEHEAD;      /**< \brief (Lcdc Offset: 0x0000005C) Base DMA Head Register */\r
+  __IO uint32_t LCDC_BASEADDR;      /**< \brief (Lcdc Offset: 0x00000060) Base DMA Address Register */\r
+  __IO uint32_t LCDC_BASECTRL;      /**< \brief (Lcdc Offset: 0x00000064) Base DMA Control Register */\r
+  __IO uint32_t LCDC_BASENEXT;      /**< \brief (Lcdc Offset: 0x00000068) Base DMA Next Register */\r
+  __IO uint32_t LCDC_BASECFG0;      /**< \brief (Lcdc Offset: 0x0000006C) Base Configuration register 0 */\r
+  __IO uint32_t LCDC_BASECFG1;      /**< \brief (Lcdc Offset: 0x00000070) Base Configuration register 1 */\r
+  __IO uint32_t LCDC_BASECFG2;      /**< \brief (Lcdc Offset: 0x00000074) Base Configuration register 2 */\r
+  __IO uint32_t LCDC_BASECFG3;      /**< \brief (Lcdc Offset: 0x00000078) Base Configuration register 3 */\r
+  __IO uint32_t LCDC_BASECFG4;      /**< \brief (Lcdc Offset: 0x0000007C) Base Configuration register 4 */\r
+  __IO uint32_t LCDC_BASECFG5;      /**< \brief (Lcdc Offset: 0x00000080) Base Configuration register 5 */\r
+  __IO uint32_t LCDC_BASECFG6;      /**< \brief (Lcdc Offset: 0x00000084) Base Configuration register 6 */\r
+  __I  uint32_t Reserved3[46];\r
+  __O  uint32_t LCDC_OVRCHER1;      /**< \brief (Lcdc Offset: 0x00000140) Overlay 1 Channel Enable Register */\r
+  __O  uint32_t LCDC_OVRCHDR1;      /**< \brief (Lcdc Offset: 0x00000144) Overlay 1 Channel Disable Register */\r
+  __I  uint32_t LCDC_OVRCHSR1;      /**< \brief (Lcdc Offset: 0x00000148) Overlay 1 Channel Status Register */\r
+  __O  uint32_t LCDC_OVRIER1;       /**< \brief (Lcdc Offset: 0x0000014C) Overlay 1 Interrupt Enable Register */\r
+  __O  uint32_t LCDC_OVRIDR1;       /**< \brief (Lcdc Offset: 0x00000150) Overlay 1 Interrupt Disable Register */\r
+  __I  uint32_t LCDC_OVRIMR1;       /**< \brief (Lcdc Offset: 0x00000154) Overlay 1 Interrupt Mask Register */\r
+  __I  uint32_t LCDC_OVRISR1;       /**< \brief (Lcdc Offset: 0x00000158) Overlay 1 Interrupt Status Register */\r
+  __IO uint32_t LCDC_OVRHEAD1;      /**< \brief (Lcdc Offset: 0x0000015C) Overlay 1 DMA Head Register */\r
+  __IO uint32_t LCDC_OVRADDR1;      /**< \brief (Lcdc Offset: 0x00000160) Overlay 1 DMA Address Register */\r
+  __IO uint32_t LCDC_OVRCTRL1;      /**< \brief (Lcdc Offset: 0x00000164) Overlay 1 DMA Control Register */\r
+  __IO uint32_t LCDC_OVRNEXT1;      /**< \brief (Lcdc Offset: 0x00000168) Overlay 1 DMA Next Register */\r
+  __IO uint32_t LCDC_OVR1CFG0;      /**< \brief (Lcdc Offset: 0x0000016C) Overlay 1 Configuration 0 Register */\r
+  __IO uint32_t LCDC_OVR1CFG1;      /**< \brief (Lcdc Offset: 0x00000170) Overlay 1 Configuration 1 Register */\r
+  __IO uint32_t LCDC_OVR1CFG2;      /**< \brief (Lcdc Offset: 0x00000174) Overlay 1 Configuration 2 Register */\r
+  __IO uint32_t LCDC_OVR1CFG3;      /**< \brief (Lcdc Offset: 0x00000178) Overlay 1 Configuration 3 Register */\r
+  __IO uint32_t LCDC_OVR1CFG4;      /**< \brief (Lcdc Offset: 0x0000017C) Overlay 1 Configuration 4 Register */\r
+  __IO uint32_t LCDC_OVR1CFG5;      /**< \brief (Lcdc Offset: 0x00000180) Overlay 1 Configuration 5 Register */\r
+  __IO uint32_t LCDC_OVR1CFG6;      /**< \brief (Lcdc Offset: 0x00000184) Overlay 1 Configuration 6 Register */\r
+  __IO uint32_t LCDC_OVR1CFG7;      /**< \brief (Lcdc Offset: 0x00000188) Overlay 1 Configuration 7 Register */\r
+  __IO uint32_t LCDC_OVR1CFG8;      /**< \brief (Lcdc Offset: 0x0000018C) Overlay 1 Configuration 8Register */\r
+  __IO uint32_t LCDC_OVR1CFG9;      /**< \brief (Lcdc Offset: 0x00000190) Overlay 1 Configuration 9 Register */\r
+  __I  uint32_t Reserved4[43];\r
+  __O  uint32_t LCDC_OVRCHER2;      /**< \brief (Lcdc Offset: 0x00000240) Overlay 2 Channel Enable Register */\r
+  __O  uint32_t LCDC_OVRCHDR2;      /**< \brief (Lcdc Offset: 0x00000244) Overlay 2 Channel Disable Register */\r
+  __I  uint32_t LCDC_OVRCHSR2;      /**< \brief (Lcdc Offset: 0x00000248) Overlay 2 Channel Status Register */\r
+  __O  uint32_t LCDC_OVRIER2;       /**< \brief (Lcdc Offset: 0x0000024C) Overlay 2 Interrupt Enable Register */\r
+  __O  uint32_t LCDC_OVRIDR2;       /**< \brief (Lcdc Offset: 0x00000250) Overlay 2 Interrupt Disable Register */\r
+  __I  uint32_t LCDC_OVRIMR2;       /**< \brief (Lcdc Offset: 0x00000254) Overlay 2 Interrupt Mask Register */\r
+  __I  uint32_t LCDC_OVRISR2;       /**< \brief (Lcdc Offset: 0x00000258) Overlay 2 Interrupt status Register */\r
+  __IO uint32_t LCDC_OVRHEAD2;      /**< \brief (Lcdc Offset: 0x0000025C) Overlay 2 DMA Head Register */\r
+  __IO uint32_t LCDC_OVRADDR2;      /**< \brief (Lcdc Offset: 0x00000260) Overlay 2 DMA Address Register */\r
+  __IO uint32_t LCDC_OVRCTRL2;      /**< \brief (Lcdc Offset: 0x00000264) Overlay 2 DMA Control Register */\r
+  __IO uint32_t LCDC_OVRNEXT2;      /**< \brief (Lcdc Offset: 0x00000268) Overlay 2 DMA Next Register */\r
+  __IO uint32_t LCDC_OVR2CFG0;      /**< \brief (Lcdc Offset: 0x0000026C) Overlay 2 Configuration 0 Register */\r
+  __IO uint32_t LCDC_OVR2CFG1;      /**< \brief (Lcdc Offset: 0x00000270) Overlay 2 Configuration 1 Register */\r
+  __IO uint32_t LCDC_OVR2CFG2;      /**< \brief (Lcdc Offset: 0x00000274) Overlay 2 Configuration 2 Register */\r
+  __IO uint32_t LCDC_OVR2CFG3;      /**< \brief (Lcdc Offset: 0x00000278) Overlay 2 Configuration 3 Register */\r
+  __IO uint32_t LCDC_OVR2CFG4;      /**< \brief (Lcdc Offset: 0x0000027C) Overlay 2 Configuration 4 Register */\r
+  __IO uint32_t LCDC_OVR2CFG5;      /**< \brief (Lcdc Offset: 0x00000280) Overlay 2 Configuration 5 Register */\r
+  __IO uint32_t LCDC_OVR2CFG6;      /**< \brief (Lcdc Offset: 0x00000284) Overlay 2 Configuration 6 Register */\r
+  __IO uint32_t LCDC_OVR2CFG7;      /**< \brief (Lcdc Offset: 0x00000288) Overlay 2 Configuration 7 Register */\r
+  __IO uint32_t LCDC_OVR2CFG8;      /**< \brief (Lcdc Offset: 0x0000028C) Overlay 2 Configuration 8 Register */\r
+  __IO uint32_t LCDC_OVR2CFG9;      /**< \brief (Lcdc Offset: 0x00000290) Overlay 2 Configuration 9 Register */\r
+  __I  uint32_t Reserved5[43];\r
+  __O  uint32_t LCDC_HEOCHER;       /**< \brief (Lcdc Offset: 0x00000340) High-End Overlay Channel Enable Register */\r
+  __O  uint32_t LCDC_HEOCHDR;       /**< \brief (Lcdc Offset: 0x00000344) High-End Overlay Channel Disable Register */\r
+  __I  uint32_t LCDC_HEOCHSR;       /**< \brief (Lcdc Offset: 0x00000348) High-End Overlay Channel Status Register */\r
+  __O  uint32_t LCDC_HEOIER;        /**< \brief (Lcdc Offset: 0x0000034C) High-End Overlay Interrupt Enable Register */\r
+  __O  uint32_t LCDC_HEOIDR;        /**< \brief (Lcdc Offset: 0x00000350) High-End Overlay Interrupt Disable Register */\r
+  __I  uint32_t LCDC_HEOIMR;        /**< \brief (Lcdc Offset: 0x00000354) High-End Overlay Interrupt Mask Register */\r
+  __I  uint32_t LCDC_HEOISR;        /**< \brief (Lcdc Offset: 0x00000358) High-End Overlay Interrupt Status Register */\r
+  __IO uint32_t LCDC_HEOHEAD;       /**< \brief (Lcdc Offset: 0x0000035C) High-End Overlay DMA Head Register */\r
+  __IO uint32_t LCDC_HEOADDR;       /**< \brief (Lcdc Offset: 0x00000360) High-End Overlay DMA Address Register */\r
+  __IO uint32_t LCDC_HEOCTRL;       /**< \brief (Lcdc Offset: 0x00000364) High-End Overlay DMA Control Register */\r
+  __IO uint32_t LCDC_HEONEXT;       /**< \brief (Lcdc Offset: 0x00000368) High-End Overlay DMA Next Register */\r
+  __IO uint32_t LCDC_HEOUHEAD;      /**< \brief (Lcdc Offset: 0x0000036C) High-End Overlay U DMA Head Register */\r
+  __IO uint32_t LCDC_HEOUADDR;      /**< \brief (Lcdc Offset: 0x00000370) High-End Overlay U DMA Address Register */\r
+  __IO uint32_t LCDC_HEOUCTRL;      /**< \brief (Lcdc Offset: 0x00000374) High-End Overlay U DMA control Register */\r
+  __IO uint32_t LCDC_HEOUNEXT;      /**< \brief (Lcdc Offset: 0x00000378) High-End Overlay U DMA Next Register */\r
+  __IO uint32_t LCDC_HEOVHEAD;      /**< \brief (Lcdc Offset: 0x0000037C) High-End Overlay V DMA Head Register */\r
+  __IO uint32_t LCDC_HEOVADDR;      /**< \brief (Lcdc Offset: 0x00000380) High-End Overlay V DMA Address Register */\r
+  __IO uint32_t LCDC_HEOVCTRL;      /**< \brief (Lcdc Offset: 0x00000384) High-End Overlay V DMA control Register */\r
+  __IO uint32_t LCDC_HEOVNEXT;      /**< \brief (Lcdc Offset: 0x00000388) High-End Overlay VDMA Next Register */\r
+  __IO uint32_t LCDC_HEOCFG0;       /**< \brief (Lcdc Offset: 0x0000038C) High-End Overlay Configuration Register 0 */\r
+  __IO uint32_t LCDC_HEOCFG1;       /**< \brief (Lcdc Offset: 0x00000390) High-End Overlay Configuration Register 1 */\r
+  __IO uint32_t LCDC_HEOCFG2;       /**< \brief (Lcdc Offset: 0x00000394) High-End Overlay Configuration Register 2 */\r
+  __IO uint32_t LCDC_HEOCFG3;       /**< \brief (Lcdc Offset: 0x00000398) High-End Overlay Configuration Register 3 */\r
+  __IO uint32_t LCDC_HEOCFG4;       /**< \brief (Lcdc Offset: 0x0000039C) High-End Overlay Configuration Register 4 */\r
+  __IO uint32_t LCDC_HEOCFG5;       /**< \brief (Lcdc Offset: 0x000003A0) High-End Overlay Configuration Register 5 */\r
+  __IO uint32_t LCDC_HEOCFG6;       /**< \brief (Lcdc Offset: 0x000003A4) High-End Overlay Configuration Register 6 */\r
+  __IO uint32_t LCDC_HEOCFG7;       /**< \brief (Lcdc Offset: 0x000003A8) High-End Overlay Configuration Register 7 */\r
+  __IO uint32_t LCDC_HEOCFG8;       /**< \brief (Lcdc Offset: 0x000003AC) High-End Overlay Configuration Register 8 */\r
+  __IO uint32_t LCDC_HEOCFG9;       /**< \brief (Lcdc Offset: 0x000003B0) High-End Overlay Configuration Register 9 */\r
+  __IO uint32_t LCDC_HEOCFG10;      /**< \brief (Lcdc Offset: 0x000003B4) High-End Overlay Configuration Register 10 */\r
+  __IO uint32_t LCDC_HEOCFG11;      /**< \brief (Lcdc Offset: 0x000003B8) High-End Overlay Configuration Register 11 */\r
+  __IO uint32_t LCDC_HEOCFG12;      /**< \brief (Lcdc Offset: 0x000003BC) High-End Overlay Configuration Register 12 */\r
+  __IO uint32_t LCDC_HEOCFG13;      /**< \brief (Lcdc Offset: 0x000003C0) High-End Overlay Configuration Register 13 */\r
+  __IO uint32_t LCDC_HEOCFG14;      /**< \brief (Lcdc Offset: 0x000003C4) High-End Overlay Configuration Register 14 */\r
+  __IO uint32_t LCDC_HEOCFG15;      /**< \brief (Lcdc Offset: 0x000003C8) High-End Overlay Configuration Register 15 */\r
+  __IO uint32_t LCDC_HEOCFG16;      /**< \brief (Lcdc Offset: 0x000003CC) High-End Overlay Configuration Register 16 */\r
+  __IO uint32_t LCDC_HEOCFG17;      /**< \brief (Lcdc Offset: 0x000003D0) High-End Overlay Configuration Register 17 */\r
+  __IO uint32_t LCDC_HEOCFG18;      /**< \brief (Lcdc Offset: 0x000003D4) High-End Overlay Configuration Register 18 */\r
+  __IO uint32_t LCDC_HEOCFG19;      /**< \brief (Lcdc Offset: 0x000003D8) High-End Overlay Configuration Register 19 */\r
+  __IO uint32_t LCDC_HEOCFG20;      /**< \brief (Lcdc Offset: 0x000003DC) High-End Overlay Configuration Register 20 */\r
+  __IO uint32_t LCDC_HEOCFG21;      /**< \brief (Lcdc Offset: 0x000003E0) High-End Overlay Configuration Register 21 */\r
+  __IO uint32_t LCDC_HEOCFG22;      /**< \brief (Lcdc Offset: 0x000003E4) High-End Overlay Configuration Register 22 */\r
+  __IO uint32_t LCDC_HEOCFG23;      /**< \brief (Lcdc Offset: 0x000003E8) High-End Overlay Configuration Register 23 */\r
+  __IO uint32_t LCDC_HEOCFG24;      /**< \brief (Lcdc Offset: 0x000003EC) High-End Overlay Configuration Register 24 */\r
+  __IO uint32_t LCDC_HEOCFG25;      /**< \brief (Lcdc Offset: 0x000003F0) High-End Overlay Configuration Register 25 */\r
+  __IO uint32_t LCDC_HEOCFG26;      /**< \brief (Lcdc Offset: 0x000003F4) High-End Overlay Configuration Register 26 */\r
+  __IO uint32_t LCDC_HEOCFG27;      /**< \brief (Lcdc Offset: 0x000003F8) High-End Overlay Configuration Register 27 */\r
+  __IO uint32_t LCDC_HEOCFG28;      /**< \brief (Lcdc Offset: 0x000003FC) High-End Overlay Configuration Register 28 */\r
+  __IO uint32_t LCDC_HEOCFG29;      /**< \brief (Lcdc Offset: 0x00000400) High-End Overlay Configuration Register 29 */\r
+  __IO uint32_t LCDC_HEOCFG30;      /**< \brief (Lcdc Offset: 0x00000404) High-End Overlay Configuration Register 30 */\r
+  __IO uint32_t LCDC_HEOCFG31;      /**< \brief (Lcdc Offset: 0x00000408) High-End Overlay Configuration Register 31 */\r
+  __IO uint32_t LCDC_HEOCFG32;      /**< \brief (Lcdc Offset: 0x0000040C) High-End Overlay Configuration Register 32 */\r
+  __IO uint32_t LCDC_HEOCFG33;      /**< \brief (Lcdc Offset: 0x00000410) High-End Overlay Configuration Register 33 */\r
+  __IO uint32_t LCDC_HEOCFG34;      /**< \brief (Lcdc Offset: 0x00000414) High-End Overlay Configuration Register 34 */\r
+  __IO uint32_t LCDC_HEOCFG35;      /**< \brief (Lcdc Offset: 0x00000418) High-End Overlay Configuration Register 35 */\r
+  __IO uint32_t LCDC_HEOCFG36;      /**< \brief (Lcdc Offset: 0x0000041C) High-End Overlay Configuration Register 36 */\r
+  __IO uint32_t LCDC_HEOCFG37;      /**< \brief (Lcdc Offset: 0x00000420) High-End Overlay Configuration Register 37 */\r
+  __IO uint32_t LCDC_HEOCFG38;      /**< \brief (Lcdc Offset: 0x00000424) High-End Overlay Configuration Register 38 */\r
+  __IO uint32_t LCDC_HEOCFG39;      /**< \brief (Lcdc Offset: 0x00000428) High-End Overlay Configuration Register 39 */\r
+  __IO uint32_t LCDC_HEOCFG40;      /**< \brief (Lcdc Offset: 0x0000042C) High-End Overlay Configuration Register 40 */\r
+  __IO uint32_t LCDC_HEOCFG41;      /**< \brief (Lcdc Offset: 0x00000430) High-End Overlay Configuration Register 41 */\r
+  __I  uint32_t Reserved6[115];\r
+  __IO uint32_t LCDC_BASECLUT[256]; /**< \brief (Lcdc Offset: 0x600) Base CLUT Register */\r
+  __IO uint32_t LCDC_OVR1CLUT[256]; /**< \brief (Lcdc Offset: 0xA00) Overlay 1 CLUT Register */\r
+  __IO uint32_t LCDC_OVR2CLUT[256]; /**< \brief (Lcdc Offset: 0xE00) Overlay 2 CLUT Register */\r
+  __IO uint32_t LCDC_HEOCLUT[256];  /**< \brief (Lcdc Offset: 0x1200) High End Overlay CLUT Register */\r
+} Lcdc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- LCDC_LCDCFG0 : (LCDC Offset: 0x00000000) LCD Controller Configuration Register 0 -------- */\r
+#define LCDC_LCDCFG0_CLKPOL (0x1u << 0) /**< \brief (LCDC_LCDCFG0) LCD Controller Clock Polarity */\r
+#define LCDC_LCDCFG0_CLKSEL (0x1u << 2) /**< \brief (LCDC_LCDCFG0) LCD Controller Clock Source Selection */\r
+#define LCDC_LCDCFG0_CLKPWMSEL (0x1u << 3) /**< \brief (LCDC_LCDCFG0) LCD Controller PWM Clock Source Selection */\r
+#define LCDC_LCDCFG0_CGDISBASE (0x1u << 8) /**< \brief (LCDC_LCDCFG0) Clock Gating Disable Control for the Base Layer */\r
+#define LCDC_LCDCFG0_CGDISOVR1 (0x1u << 9) /**< \brief (LCDC_LCDCFG0) Clock Gating Disable Control for the Overlay 1 Layer */\r
+#define LCDC_LCDCFG0_CGDISOVR2 (0x1u << 10) /**< \brief (LCDC_LCDCFG0) Clock Gating Disable Control for the Overlay 2 Layer */\r
+#define LCDC_LCDCFG0_CGDISHEO (0x1u << 11) /**< \brief (LCDC_LCDCFG0) Clock Gating Disable Control for the High End Overlay */\r
+#define LCDC_LCDCFG0_CLKDIV_Pos 16\r
+#define LCDC_LCDCFG0_CLKDIV_Msk (0xffu << LCDC_LCDCFG0_CLKDIV_Pos) /**< \brief (LCDC_LCDCFG0) LCD Controller Clock Divider */\r
+#define LCDC_LCDCFG0_CLKDIV(value) ((LCDC_LCDCFG0_CLKDIV_Msk & ((value) << LCDC_LCDCFG0_CLKDIV_Pos)))\r
+/* -------- LCDC_LCDCFG1 : (LCDC Offset: 0x00000004) LCD Controller Configuration Register 1 -------- */\r
+#define LCDC_LCDCFG1_HSPW_Pos 0\r
+#define LCDC_LCDCFG1_HSPW_Msk (0x3fu << LCDC_LCDCFG1_HSPW_Pos) /**< \brief (LCDC_LCDCFG1) Horizontal Synchronization Pulse Width */\r
+#define LCDC_LCDCFG1_HSPW(value) ((LCDC_LCDCFG1_HSPW_Msk & ((value) << LCDC_LCDCFG1_HSPW_Pos)))\r
+#define LCDC_LCDCFG1_VSPW_Pos 16\r
+#define LCDC_LCDCFG1_VSPW_Msk (0x3fu << LCDC_LCDCFG1_VSPW_Pos) /**< \brief (LCDC_LCDCFG1) Vertical Synchronization Pulse Width */\r
+#define LCDC_LCDCFG1_VSPW(value) ((LCDC_LCDCFG1_VSPW_Msk & ((value) << LCDC_LCDCFG1_VSPW_Pos)))\r
+/* -------- LCDC_LCDCFG2 : (LCDC Offset: 0x00000008) LCD Controller Configuration Register 2 -------- */\r
+#define LCDC_LCDCFG2_VFPW_Pos 0\r
+#define LCDC_LCDCFG2_VFPW_Msk (0x3fu << LCDC_LCDCFG2_VFPW_Pos) /**< \brief (LCDC_LCDCFG2) Vertical Front Porch Width */\r
+#define LCDC_LCDCFG2_VFPW(value) ((LCDC_LCDCFG2_VFPW_Msk & ((value) << LCDC_LCDCFG2_VFPW_Pos)))\r
+#define LCDC_LCDCFG2_VBPW_Pos 16\r
+#define LCDC_LCDCFG2_VBPW_Msk (0x3fu << LCDC_LCDCFG2_VBPW_Pos) /**< \brief (LCDC_LCDCFG2) Vertical Back Porch Width */\r
+#define LCDC_LCDCFG2_VBPW(value) ((LCDC_LCDCFG2_VBPW_Msk & ((value) << LCDC_LCDCFG2_VBPW_Pos)))\r
+/* -------- LCDC_LCDCFG3 : (LCDC Offset: 0x0000000C) LCD Controller Configuration Register 3 -------- */\r
+#define LCDC_LCDCFG3_HFPW_Pos 0\r
+#define LCDC_LCDCFG3_HFPW_Msk (0x1ffu << LCDC_LCDCFG3_HFPW_Pos) /**< \brief (LCDC_LCDCFG3) Horizontal Front Porch Width */\r
+#define LCDC_LCDCFG3_HFPW(value) ((LCDC_LCDCFG3_HFPW_Msk & ((value) << LCDC_LCDCFG3_HFPW_Pos)))\r
+#define LCDC_LCDCFG3_HBPW_Pos 16\r
+#define LCDC_LCDCFG3_HBPW_Msk (0x1ffu << LCDC_LCDCFG3_HBPW_Pos) /**< \brief (LCDC_LCDCFG3) Horizontal Back Porch Width */\r
+#define LCDC_LCDCFG3_HBPW(value) ((LCDC_LCDCFG3_HBPW_Msk & ((value) << LCDC_LCDCFG3_HBPW_Pos)))\r
+/* -------- LCDC_LCDCFG4 : (LCDC Offset: 0x00000010) LCD Controller Configuration Register 4 -------- */\r
+#define LCDC_LCDCFG4_PPL_Pos 0\r
+#define LCDC_LCDCFG4_PPL_Msk (0x7ffu << LCDC_LCDCFG4_PPL_Pos) /**< \brief (LCDC_LCDCFG4) Number of Pixels Per Line */\r
+#define LCDC_LCDCFG4_PPL(value) ((LCDC_LCDCFG4_PPL_Msk & ((value) << LCDC_LCDCFG4_PPL_Pos)))\r
+#define LCDC_LCDCFG4_RPF_Pos 16\r
+#define LCDC_LCDCFG4_RPF_Msk (0x7ffu << LCDC_LCDCFG4_RPF_Pos) /**< \brief (LCDC_LCDCFG4) Number of Active Row Per Frame */\r
+#define LCDC_LCDCFG4_RPF(value) ((LCDC_LCDCFG4_RPF_Msk & ((value) << LCDC_LCDCFG4_RPF_Pos)))\r
+/* -------- LCDC_LCDCFG5 : (LCDC Offset: 0x00000014) LCD Controller Configuration Register 5 -------- */\r
+#define LCDC_LCDCFG5_HSPOL (0x1u << 0) /**< \brief (LCDC_LCDCFG5) Horizontal Synchronization Pulse Polarity */\r
+#define LCDC_LCDCFG5_VSPOL (0x1u << 1) /**< \brief (LCDC_LCDCFG5) Vertical Synchronization Pulse Polarity */\r
+#define LCDC_LCDCFG5_VSPDLYS (0x1u << 2) /**< \brief (LCDC_LCDCFG5) Vertical Synchronization Pulse Start */\r
+#define LCDC_LCDCFG5_VSPDLYE (0x1u << 3) /**< \brief (LCDC_LCDCFG5) Vertical Synchronization Pulse End */\r
+#define LCDC_LCDCFG5_DISPPOL (0x1u << 4) /**< \brief (LCDC_LCDCFG5) Display Signal Polarity */\r
+#define LCDC_LCDCFG5_DITHER (0x1u << 6) /**< \brief (LCDC_LCDCFG5) LCD Controller Dithering */\r
+#define LCDC_LCDCFG5_DISPDLY (0x1u << 7) /**< \brief (LCDC_LCDCFG5) LCD Controller Display Power Signal Synchronization */\r
+#define LCDC_LCDCFG5_MODE_Pos 8\r
+#define LCDC_LCDCFG5_MODE_Msk (0x3u << LCDC_LCDCFG5_MODE_Pos) /**< \brief (LCDC_LCDCFG5) LCD Controller Output Mode */\r
+#define   LCDC_LCDCFG5_MODE_OUTPUT_12BPP (0x0u << 8) /**< \brief (LCDC_LCDCFG5) LCD output mode is set to 12 bits per pixel */\r
+#define   LCDC_LCDCFG5_MODE_OUTPUT_16BPP (0x1u << 8) /**< \brief (LCDC_LCDCFG5) LCD output mode is set to 16 bits per pixel */\r
+#define   LCDC_LCDCFG5_MODE_OUTPUT_18BPP (0x2u << 8) /**< \brief (LCDC_LCDCFG5) LCD output mode is set to 18 bits per pixel */\r
+#define   LCDC_LCDCFG5_MODE_OUTPUT_24BPP (0x3u << 8) /**< \brief (LCDC_LCDCFG5) LCD output mode is set to 24 bits per pixel */\r
+#define LCDC_LCDCFG5_VSPSU (0x1u << 12) /**< \brief (LCDC_LCDCFG5) LCD Controller Vertical synchronization Pulse Setup Configuration */\r
+#define LCDC_LCDCFG5_VSPHO (0x1u << 13) /**< \brief (LCDC_LCDCFG5) LCD Controller Vertical synchronization Pulse Hold Configuration */\r
+#define LCDC_LCDCFG5_GUARDTIME_Pos 16\r
+#define LCDC_LCDCFG5_GUARDTIME_Msk (0x1fu << LCDC_LCDCFG5_GUARDTIME_Pos) /**< \brief (LCDC_LCDCFG5) LCD DISPLAY Guard Time */\r
+#define LCDC_LCDCFG5_GUARDTIME(value) ((LCDC_LCDCFG5_GUARDTIME_Msk & ((value) << LCDC_LCDCFG5_GUARDTIME_Pos)))\r
+/* -------- LCDC_LCDCFG6 : (LCDC Offset: 0x00000018) LCD Controller Configuration Register 6 -------- */\r
+#define LCDC_LCDCFG6_PWMPS_Pos 0\r
+#define LCDC_LCDCFG6_PWMPS_Msk (0x7u << LCDC_LCDCFG6_PWMPS_Pos) /**< \brief (LCDC_LCDCFG6) PWM Clock Prescaler */\r
+#define LCDC_LCDCFG6_PWMPS(value) ((LCDC_LCDCFG6_PWMPS_Msk & ((value) << LCDC_LCDCFG6_PWMPS_Pos)))\r
+#define LCDC_LCDCFG6_PWMPOL (0x1u << 4) /**< \brief (LCDC_LCDCFG6) LCD Controller PWM Signal Polarity */\r
+#define LCDC_LCDCFG6_PWMCVAL_Pos 8\r
+#define LCDC_LCDCFG6_PWMCVAL_Msk (0xffu << LCDC_LCDCFG6_PWMCVAL_Pos) /**< \brief (LCDC_LCDCFG6) LCD Controller PWM Compare Value */\r
+#define LCDC_LCDCFG6_PWMCVAL(value) ((LCDC_LCDCFG6_PWMCVAL_Msk & ((value) << LCDC_LCDCFG6_PWMCVAL_Pos)))\r
+/* -------- LCDC_LCDEN : (LCDC Offset: 0x00000020) LCD Controller Enable Register -------- */\r
+#define LCDC_LCDEN_CLKEN (0x1u << 0) /**< \brief (LCDC_LCDEN) LCD Controller Pixel Clock Enable */\r
+#define LCDC_LCDEN_SYNCEN (0x1u << 1) /**< \brief (LCDC_LCDEN) LCD Controller Horizontal and Vertical Synchronization Enable */\r
+#define LCDC_LCDEN_DISPEN (0x1u << 2) /**< \brief (LCDC_LCDEN) LCD Controller DISP Signal Enable */\r
+#define LCDC_LCDEN_PWMEN (0x1u << 3) /**< \brief (LCDC_LCDEN) LCD Controller Pulse Width Modulation Enable */\r
+/* -------- LCDC_LCDDIS : (LCDC Offset: 0x00000024) LCD Controller Disable Register -------- */\r
+#define LCDC_LCDDIS_CLKDIS (0x1u << 0) /**< \brief (LCDC_LCDDIS) LCD Controller Pixel Clock Disable */\r
+#define LCDC_LCDDIS_SYNCDIS (0x1u << 1) /**< \brief (LCDC_LCDDIS) LCD Controller Horizontal and Vertical Synchronization Disable */\r
+#define LCDC_LCDDIS_DISPDIS (0x1u << 2) /**< \brief (LCDC_LCDDIS) LCD Controller DISP Signal Disable */\r
+#define LCDC_LCDDIS_PWMDIS (0x1u << 3) /**< \brief (LCDC_LCDDIS) LCD Controller Pulse Width Modulation Disable */\r
+#define LCDC_LCDDIS_CLKRST (0x1u << 8) /**< \brief (LCDC_LCDDIS) LCD Controller Clock Reset */\r
+#define LCDC_LCDDIS_SYNCRST (0x1u << 9) /**< \brief (LCDC_LCDDIS) LCD Controller Horizontal and Vertical Synchronization Reset */\r
+#define LCDC_LCDDIS_DISPRST (0x1u << 10) /**< \brief (LCDC_LCDDIS) LCD Controller DISP Signal Reset */\r
+#define LCDC_LCDDIS_PWMRST (0x1u << 11) /**< \brief (LCDC_LCDDIS) LCD Controller PWM Reset */\r
+/* -------- LCDC_LCDSR : (LCDC Offset: 0x00000028) LCD Controller Status Register -------- */\r
+#define LCDC_LCDSR_CLKSTS (0x1u << 0) /**< \brief (LCDC_LCDSR) Clock Status */\r
+#define LCDC_LCDSR_LCDSTS (0x1u << 1) /**< \brief (LCDC_LCDSR) LCD Controller Synchronization status */\r
+#define LCDC_LCDSR_DISPSTS (0x1u << 2) /**< \brief (LCDC_LCDSR) LCD Controller DISP Signal Status */\r
+#define LCDC_LCDSR_PWMSTS (0x1u << 3) /**< \brief (LCDC_LCDSR) LCD Controller PWM Signal Status */\r
+#define LCDC_LCDSR_SIPSTS (0x1u << 4) /**< \brief (LCDC_LCDSR) Synchronization In Progress */\r
+/* -------- LCDC_LCDIER : (LCDC Offset: 0x0000002C) LCD Controller Interrupt Enable Register -------- */\r
+#define LCDC_LCDIER_SOFIE (0x1u << 0) /**< \brief (LCDC_LCDIER) Start of Frame Interrupt Enable Register */\r
+#define LCDC_LCDIER_DISIE (0x1u << 1) /**< \brief (LCDC_LCDIER) LCD Disable Interrupt Enable Register */\r
+#define LCDC_LCDIER_DISPIE (0x1u << 2) /**< \brief (LCDC_LCDIER) Power UP/Down Sequence Terminated Interrupt Enable Register */\r
+#define LCDC_LCDIER_FIFOERRIE (0x1u << 4) /**< \brief (LCDC_LCDIER) Output FIFO Error Interrupt Enable Register */\r
+#define LCDC_LCDIER_BASEIE (0x1u << 8) /**< \brief (LCDC_LCDIER) Base Layer Interrupt Enable Register */\r
+#define LCDC_LCDIER_OVR1IE (0x1u << 9) /**< \brief (LCDC_LCDIER) Overlay 1 Interrupt Enable Register */\r
+#define LCDC_LCDIER_OVR2IE (0x1u << 10) /**< \brief (LCDC_LCDIER) Overlay 2 Interrupt Enable Register */\r
+#define LCDC_LCDIER_HEOIE (0x1u << 11) /**< \brief (LCDC_LCDIER) High End Overlay Interrupt Enable Register */\r
+/* -------- LCDC_LCDIDR : (LCDC Offset: 0x00000030) LCD Controller Interrupt Disable Register -------- */\r
+#define LCDC_LCDIDR_SOFID (0x1u << 0) /**< \brief (LCDC_LCDIDR) Start of Frame Interrupt Disable Register */\r
+#define LCDC_LCDIDR_DISID (0x1u << 1) /**< \brief (LCDC_LCDIDR) LCD Disable Interrupt Disable Register */\r
+#define LCDC_LCDIDR_DISPID (0x1u << 2) /**< \brief (LCDC_LCDIDR) Power UP/Down Sequence Terminated Interrupt Disable Register */\r
+#define LCDC_LCDIDR_FIFOERRID (0x1u << 4) /**< \brief (LCDC_LCDIDR) Output FIFO Error Interrupt Disable Register */\r
+#define LCDC_LCDIDR_BASEID (0x1u << 8) /**< \brief (LCDC_LCDIDR) Base Layer Interrupt Disable Register */\r
+#define LCDC_LCDIDR_OVR1ID (0x1u << 9) /**< \brief (LCDC_LCDIDR) Overlay 1 Interrupt Disable Register */\r
+#define LCDC_LCDIDR_OVR2ID (0x1u << 10) /**< \brief (LCDC_LCDIDR) Overlay 2 Interrupt Disable Register */\r
+#define LCDC_LCDIDR_HEOID (0x1u << 11) /**< \brief (LCDC_LCDIDR) High End Overlay Interrupt Disable Register */\r
+/* -------- LCDC_LCDIMR : (LCDC Offset: 0x00000034) LCD Controller Interrupt Mask Register -------- */\r
+#define LCDC_LCDIMR_SOFIM (0x1u << 0) /**< \brief (LCDC_LCDIMR) Start of Frame Interrupt Mask Register */\r
+#define LCDC_LCDIMR_DISIM (0x1u << 1) /**< \brief (LCDC_LCDIMR) LCD Disable Interrupt Mask Register */\r
+#define LCDC_LCDIMR_DISPIM (0x1u << 2) /**< \brief (LCDC_LCDIMR) Power UP/Down Sequence Terminated Interrupt Mask Register */\r
+#define LCDC_LCDIMR_FIFOERRIM (0x1u << 4) /**< \brief (LCDC_LCDIMR) Output FIFO Error Interrupt Mask Register */\r
+#define LCDC_LCDIMR_BASEIM (0x1u << 8) /**< \brief (LCDC_LCDIMR) Base Layer Interrupt Mask Register */\r
+#define LCDC_LCDIMR_OVR1IM (0x1u << 9) /**< \brief (LCDC_LCDIMR) Overlay 1 Interrupt Mask Register */\r
+#define LCDC_LCDIMR_OVR2IM (0x1u << 10) /**< \brief (LCDC_LCDIMR) Overlay 2 Interrupt Mask Register */\r
+#define LCDC_LCDIMR_HEOIM (0x1u << 11) /**< \brief (LCDC_LCDIMR) High End Overlay Interrupt Mask Register */\r
+/* -------- LCDC_LCDISR : (LCDC Offset: 0x00000038) LCD Controller Interrupt Status Register -------- */\r
+#define LCDC_LCDISR_SOF (0x1u << 0) /**< \brief (LCDC_LCDISR) Start of Frame Interrupt Status Register */\r
+#define LCDC_LCDISR_DIS (0x1u << 1) /**< \brief (LCDC_LCDISR) LCD Disable Interrupt Status Register */\r
+#define LCDC_LCDISR_DISP (0x1u << 2) /**< \brief (LCDC_LCDISR) Power-up/Power-down Sequence Terminated Interrupt Status Register */\r
+#define LCDC_LCDISR_FIFOERR (0x1u << 4) /**< \brief (LCDC_LCDISR) Output FIFO Error */\r
+#define LCDC_LCDISR_BASE (0x1u << 8) /**< \brief (LCDC_LCDISR) Base Layer Raw Interrupt Status Register */\r
+#define LCDC_LCDISR_OVR1 (0x1u << 9) /**< \brief (LCDC_LCDISR) Overlay 1 Raw Interrupt Status Register */\r
+#define LCDC_LCDISR_OVR2 (0x1u << 10) /**< \brief (LCDC_LCDISR) Overlay 2 Raw Interrupt Status Register */\r
+#define LCDC_LCDISR_HEO (0x1u << 11) /**< \brief (LCDC_LCDISR) High End Overlay Raw Interrupt Status Register */\r
+/* -------- LCDC_BASECHER : (LCDC Offset: 0x00000040) Base Layer Channel Enable Register -------- */\r
+#define LCDC_BASECHER_CHEN (0x1u << 0) /**< \brief (LCDC_BASECHER) Channel Enable Register */\r
+#define LCDC_BASECHER_UPDATEEN (0x1u << 1) /**< \brief (LCDC_BASECHER) Update Overlay Attributes Enable Register */\r
+#define LCDC_BASECHER_A2QEN (0x1u << 2) /**< \brief (LCDC_BASECHER) Add Head Pointer Enable Register */\r
+/* -------- LCDC_BASECHDR : (LCDC Offset: 0x00000044) Base Layer Channel Disable Register -------- */\r
+#define LCDC_BASECHDR_CHDIS (0x1u << 0) /**< \brief (LCDC_BASECHDR) Channel Disable Register */\r
+#define LCDC_BASECHDR_CHRST (0x1u << 8) /**< \brief (LCDC_BASECHDR) Channel Reset Register */\r
+/* -------- LCDC_BASECHSR : (LCDC Offset: 0x00000048) Base Layer Channel Status Register -------- */\r
+#define LCDC_BASECHSR_CHSR (0x1u << 0) /**< \brief (LCDC_BASECHSR) Channel Status Register */\r
+#define LCDC_BASECHSR_UPDATESR (0x1u << 1) /**< \brief (LCDC_BASECHSR) Update Overlay Attributes In Progress */\r
+#define LCDC_BASECHSR_A2QSR (0x1u << 2) /**< \brief (LCDC_BASECHSR) Add To Queue Pending Register */\r
+/* -------- LCDC_BASEIER : (LCDC Offset: 0x0000004C) Base Layer Interrupt Enable Register -------- */\r
+#define LCDC_BASEIER_DMA (0x1u << 2) /**< \brief (LCDC_BASEIER) End of DMA Transfer Interrupt Enable Register */\r
+#define LCDC_BASEIER_DSCR (0x1u << 3) /**< \brief (LCDC_BASEIER) Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_BASEIER_ADD (0x1u << 4) /**< \brief (LCDC_BASEIER) Head Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_BASEIER_DONE (0x1u << 5) /**< \brief (LCDC_BASEIER) End of List Interrupt Enable Register */\r
+#define LCDC_BASEIER_OVR (0x1u << 6) /**< \brief (LCDC_BASEIER) Overflow Interrupt Enable Register */\r
+/* -------- LCDC_BASEIDR : (LCDC Offset: 0x00000050) Base Layer Interrupt Disabled Register -------- */\r
+#define LCDC_BASEIDR_DMA (0x1u << 2) /**< \brief (LCDC_BASEIDR) End of DMA Transfer Interrupt Disable Register */\r
+#define LCDC_BASEIDR_DSCR (0x1u << 3) /**< \brief (LCDC_BASEIDR) Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_BASEIDR_ADD (0x1u << 4) /**< \brief (LCDC_BASEIDR) Head Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_BASEIDR_DONE (0x1u << 5) /**< \brief (LCDC_BASEIDR) End of List Interrupt Disable Register */\r
+#define LCDC_BASEIDR_OVR (0x1u << 6) /**< \brief (LCDC_BASEIDR) Overflow Interrupt Disable Register */\r
+/* -------- LCDC_BASEIMR : (LCDC Offset: 0x00000054) Base Layer Interrupt Mask Register -------- */\r
+#define LCDC_BASEIMR_DMA (0x1u << 2) /**< \brief (LCDC_BASEIMR) End of DMA Transfer Interrupt Mask Register */\r
+#define LCDC_BASEIMR_DSCR (0x1u << 3) /**< \brief (LCDC_BASEIMR) Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_BASEIMR_ADD (0x1u << 4) /**< \brief (LCDC_BASEIMR) Head Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_BASEIMR_DONE (0x1u << 5) /**< \brief (LCDC_BASEIMR) End of List Interrupt Mask Register */\r
+#define LCDC_BASEIMR_OVR (0x1u << 6) /**< \brief (LCDC_BASEIMR) Overflow Interrupt Mask Register */\r
+/* -------- LCDC_BASEISR : (LCDC Offset: 0x00000058) Base Layer Interrupt status Register -------- */\r
+#define LCDC_BASEISR_DMA (0x1u << 2) /**< \brief (LCDC_BASEISR) End of DMA Transfer */\r
+#define LCDC_BASEISR_DSCR (0x1u << 3) /**< \brief (LCDC_BASEISR) DMA Descriptor Loaded */\r
+#define LCDC_BASEISR_ADD (0x1u << 4) /**< \brief (LCDC_BASEISR) Head Descriptor Loaded */\r
+#define LCDC_BASEISR_DONE (0x1u << 5) /**< \brief (LCDC_BASEISR) End of List Detected */\r
+#define LCDC_BASEISR_OVR (0x1u << 6) /**< \brief (LCDC_BASEISR) Overflow Detected */\r
+/* -------- LCDC_BASEHEAD : (LCDC Offset: 0x0000005C) Base DMA Head Register -------- */\r
+#define LCDC_BASEHEAD_HEAD_Pos 2\r
+#define LCDC_BASEHEAD_HEAD_Msk (0x3fffffffu << LCDC_BASEHEAD_HEAD_Pos) /**< \brief (LCDC_BASEHEAD) DMA Head Pointer */\r
+#define LCDC_BASEHEAD_HEAD(value) ((LCDC_BASEHEAD_HEAD_Msk & ((value) << LCDC_BASEHEAD_HEAD_Pos)))\r
+/* -------- LCDC_BASEADDR : (LCDC Offset: 0x00000060) Base DMA Address Register -------- */\r
+#define LCDC_BASEADDR_ADDR_Pos 0\r
+#define LCDC_BASEADDR_ADDR_Msk (0xffffffffu << LCDC_BASEADDR_ADDR_Pos) /**< \brief (LCDC_BASEADDR) DMA Transfer Start Address */\r
+#define LCDC_BASEADDR_ADDR(value) ((LCDC_BASEADDR_ADDR_Msk & ((value) << LCDC_BASEADDR_ADDR_Pos)))\r
+/* -------- LCDC_BASECTRL : (LCDC Offset: 0x00000064) Base DMA Control Register -------- */\r
+#define LCDC_BASECTRL_DFETCH (0x1u << 0) /**< \brief (LCDC_BASECTRL) Transfer Descriptor Fetch Enable */\r
+#define LCDC_BASECTRL_LFETCH (0x1u << 1) /**< \brief (LCDC_BASECTRL) Lookup Table Fetch Enable */\r
+#define LCDC_BASECTRL_DMAIEN (0x1u << 2) /**< \brief (LCDC_BASECTRL) End of DMA Transfer Interrupt Enable */\r
+#define LCDC_BASECTRL_DSCRIEN (0x1u << 3) /**< \brief (LCDC_BASECTRL) Descriptor Loaded Interrupt Enable */\r
+#define LCDC_BASECTRL_ADDIEN (0x1u << 4) /**< \brief (LCDC_BASECTRL) Add Head Descriptor to Queue Interrupt Enable */\r
+#define LCDC_BASECTRL_DONEIEN (0x1u << 5) /**< \brief (LCDC_BASECTRL) End of List Interrupt Enable */\r
+/* -------- LCDC_BASENEXT : (LCDC Offset: 0x00000068) Base DMA Next Register -------- */\r
+#define LCDC_BASENEXT_NEXT_Pos 0\r
+#define LCDC_BASENEXT_NEXT_Msk (0xffffffffu << LCDC_BASENEXT_NEXT_Pos) /**< \brief (LCDC_BASENEXT) DMA Descriptor Next Address */\r
+#define LCDC_BASENEXT_NEXT(value) ((LCDC_BASENEXT_NEXT_Msk & ((value) << LCDC_BASENEXT_NEXT_Pos)))\r
+/* -------- LCDC_BASECFG0 : (LCDC Offset: 0x0000006C) Base Configuration register 0 -------- */\r
+#define LCDC_BASECFG0_SIF (0x1u << 0) /**< \brief (LCDC_BASECFG0) Source Interface */\r
+#define LCDC_BASECFG0_BLEN_Pos 4\r
+#define LCDC_BASECFG0_BLEN_Msk (0x3u << LCDC_BASECFG0_BLEN_Pos) /**< \brief (LCDC_BASECFG0) AHB Burst Length */\r
+#define   LCDC_BASECFG0_BLEN_AHB_SINGLE (0x0u << 4) /**< \brief (LCDC_BASECFG0) AHB Access is started as soon as there is enough space in the FIFO to store one data. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_BASECFG0_BLEN_AHB_INCR4 (0x1u << 4) /**< \brief (LCDC_BASECFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 4 data. An AHB INCR4 Burst is used. SINGLE, INCR and INCR4 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_BASECFG0_BLEN_AHB_INCR8 (0x2u << 4) /**< \brief (LCDC_BASECFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 8 data. An AHB INCR8 Burst is used. SINGLE, INCR, INCR4 and INCR8 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_BASECFG0_BLEN_AHB_INCR16 (0x3u << 4) /**< \brief (LCDC_BASECFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 16 data. An AHB INCR16 Burst is used. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define LCDC_BASECFG0_DLBO (0x1u << 8) /**< \brief (LCDC_BASECFG0) Defined Length Burst Only For Channel Bus Transaction. */\r
+/* -------- LCDC_BASECFG1 : (LCDC Offset: 0x00000070) Base Configuration register 1 -------- */\r
+#define LCDC_BASECFG1_CLUTEN (0x1u << 0) /**< \brief (LCDC_BASECFG1) Color Lookup Table Enable */\r
+#define LCDC_BASECFG1_RGBMODE_Pos 4\r
+#define LCDC_BASECFG1_RGBMODE_Msk (0xfu << LCDC_BASECFG1_RGBMODE_Pos) /**< \brief (LCDC_BASECFG1) RGB Input Mode Selection */\r
+#define   LCDC_BASECFG1_RGBMODE_12BPP_RGB_444 (0x0u << 4) /**< \brief (LCDC_BASECFG1) 12 bpp RGB 444 */\r
+#define   LCDC_BASECFG1_RGBMODE_16BPP_ARGB_4444 (0x1u << 4) /**< \brief (LCDC_BASECFG1) 16 bpp ARGB 4444 */\r
+#define   LCDC_BASECFG1_RGBMODE_16BPP_RGBA_4444 (0x2u << 4) /**< \brief (LCDC_BASECFG1) 16 bpp RGBA 4444 */\r
+#define   LCDC_BASECFG1_RGBMODE_16BPP_RGB_565 (0x3u << 4) /**< \brief (LCDC_BASECFG1) 16 bpp RGB 565 */\r
+#define   LCDC_BASECFG1_RGBMODE_16BPP_TRGB_1555 (0x4u << 4) /**< \brief (LCDC_BASECFG1) 16 bpp TRGB 1555 */\r
+#define   LCDC_BASECFG1_RGBMODE_18BPP_RGB_666 (0x5u << 4) /**< \brief (LCDC_BASECFG1) 18 bpp RGB 666 */\r
+#define   LCDC_BASECFG1_RGBMODE_18BPP_RGB_666PACKED (0x6u << 4) /**< \brief (LCDC_BASECFG1) 18 bpp RGB 666 PACKED */\r
+#define   LCDC_BASECFG1_RGBMODE_19BPP_TRGB_1666 (0x7u << 4) /**< \brief (LCDC_BASECFG1) 19 bpp TRGB 1666 */\r
+#define   LCDC_BASECFG1_RGBMODE_19BPP_TRGB_PACKED (0x8u << 4) /**< \brief (LCDC_BASECFG1) 19 bpp TRGB 1666 PACKED */\r
+#define   LCDC_BASECFG1_RGBMODE_24BPP_RGB_888 (0x9u << 4) /**< \brief (LCDC_BASECFG1) 24 bpp RGB 888 */\r
+#define   LCDC_BASECFG1_RGBMODE_24BPP_RGB_888_PACKED (0xAu << 4) /**< \brief (LCDC_BASECFG1) 24 bpp RGB 888 PACKED */\r
+#define   LCDC_BASECFG1_RGBMODE_25BPP_TRGB_1888 (0xBu << 4) /**< \brief (LCDC_BASECFG1) 25 bpp TRGB 1888 */\r
+#define   LCDC_BASECFG1_RGBMODE_32BPP_ARGB_8888 (0xCu << 4) /**< \brief (LCDC_BASECFG1) 32 bpp ARGB 8888 */\r
+#define   LCDC_BASECFG1_RGBMODE_32BPP_RGBA_8888 (0xDu << 4) /**< \brief (LCDC_BASECFG1) 32 bpp RGBA 8888 */\r
+#define LCDC_BASECFG1_CLUTMODE_Pos 8\r
+#define LCDC_BASECFG1_CLUTMODE_Msk (0x3u << LCDC_BASECFG1_CLUTMODE_Pos) /**< \brief (LCDC_BASECFG1) Color Lookup Table Input Mode Selection */\r
+#define   LCDC_BASECFG1_CLUTMODE_CLUT_1BPP (0x0u << 8) /**< \brief (LCDC_BASECFG1) color lookup table mode set to 1 bit per pixel */\r
+#define   LCDC_BASECFG1_CLUTMODE_CLUT_2BPP (0x1u << 8) /**< \brief (LCDC_BASECFG1) color lookup table mode set to 2 bits per pixel */\r
+#define   LCDC_BASECFG1_CLUTMODE_CLUT_4BPP (0x2u << 8) /**< \brief (LCDC_BASECFG1) color lookup table mode set to 4 bits per pixel */\r
+#define   LCDC_BASECFG1_CLUTMODE_CLUT_8BPP (0x3u << 8) /**< \brief (LCDC_BASECFG1) color lookup table mode set to 8 bits per pixel */\r
+/* -------- LCDC_BASECFG2 : (LCDC Offset: 0x00000074) Base Configuration register 2 -------- */\r
+#define LCDC_BASECFG2_XSTRIDE_Pos 0\r
+#define LCDC_BASECFG2_XSTRIDE_Msk (0xffffffffu << LCDC_BASECFG2_XSTRIDE_Pos) /**< \brief (LCDC_BASECFG2) Horizontal Stride */\r
+#define LCDC_BASECFG2_XSTRIDE(value) ((LCDC_BASECFG2_XSTRIDE_Msk & ((value) << LCDC_BASECFG2_XSTRIDE_Pos)))\r
+/* -------- LCDC_BASECFG3 : (LCDC Offset: 0x00000078) Base Configuration register 3 -------- */\r
+#define LCDC_BASECFG3_BDEF_Pos 0\r
+#define LCDC_BASECFG3_BDEF_Msk (0xffu << LCDC_BASECFG3_BDEF_Pos) /**< \brief (LCDC_BASECFG3) Blue Default */\r
+#define LCDC_BASECFG3_BDEF(value) ((LCDC_BASECFG3_BDEF_Msk & ((value) << LCDC_BASECFG3_BDEF_Pos)))\r
+#define LCDC_BASECFG3_GDEF_Pos 8\r
+#define LCDC_BASECFG3_GDEF_Msk (0xffu << LCDC_BASECFG3_GDEF_Pos) /**< \brief (LCDC_BASECFG3) Green Default */\r
+#define LCDC_BASECFG3_GDEF(value) ((LCDC_BASECFG3_GDEF_Msk & ((value) << LCDC_BASECFG3_GDEF_Pos)))\r
+#define LCDC_BASECFG3_RDEF_Pos 16\r
+#define LCDC_BASECFG3_RDEF_Msk (0xffu << LCDC_BASECFG3_RDEF_Pos) /**< \brief (LCDC_BASECFG3) Red Default */\r
+#define LCDC_BASECFG3_RDEF(value) ((LCDC_BASECFG3_RDEF_Msk & ((value) << LCDC_BASECFG3_RDEF_Pos)))\r
+/* -------- LCDC_BASECFG4 : (LCDC Offset: 0x0000007C) Base Configuration register 4 -------- */\r
+#define LCDC_BASECFG4_DMA (0x1u << 8) /**< \brief (LCDC_BASECFG4) Use DMA Data Path */\r
+#define LCDC_BASECFG4_REP (0x1u << 9) /**< \brief (LCDC_BASECFG4) Use Replication logic to expand RGB color to 24 bits */\r
+#define LCDC_BASECFG4_DISCEN (0x1u << 11) /**< \brief (LCDC_BASECFG4) Discard Area Enable */\r
+/* -------- LCDC_BASECFG5 : (LCDC Offset: 0x00000080) Base Configuration register 5 -------- */\r
+#define LCDC_BASECFG5_DISCXPOS_Pos 0\r
+#define LCDC_BASECFG5_DISCXPOS_Msk (0x7ffu << LCDC_BASECFG5_DISCXPOS_Pos) /**< \brief (LCDC_BASECFG5) Discard Area horizontal coordinate */\r
+#define LCDC_BASECFG5_DISCXPOS(value) ((LCDC_BASECFG5_DISCXPOS_Msk & ((value) << LCDC_BASECFG5_DISCXPOS_Pos)))\r
+#define LCDC_BASECFG5_DISCYPOS_Pos 16\r
+#define LCDC_BASECFG5_DISCYPOS_Msk (0x7ffu << LCDC_BASECFG5_DISCYPOS_Pos) /**< \brief (LCDC_BASECFG5) Discard Area Vertical coordinate */\r
+#define LCDC_BASECFG5_DISCYPOS(value) ((LCDC_BASECFG5_DISCYPOS_Msk & ((value) << LCDC_BASECFG5_DISCYPOS_Pos)))\r
+/* -------- LCDC_BASECFG6 : (LCDC Offset: 0x00000084) Base Configuration register 6 -------- */\r
+#define LCDC_BASECFG6_DISCXSIZE_Pos 0\r
+#define LCDC_BASECFG6_DISCXSIZE_Msk (0x7ffu << LCDC_BASECFG6_DISCXSIZE_Pos) /**< \brief (LCDC_BASECFG6) Discard Area Horizontal Size */\r
+#define LCDC_BASECFG6_DISCXSIZE(value) ((LCDC_BASECFG6_DISCXSIZE_Msk & ((value) << LCDC_BASECFG6_DISCXSIZE_Pos)))\r
+#define LCDC_BASECFG6_DISCYSIZE_Pos 16\r
+#define LCDC_BASECFG6_DISCYSIZE_Msk (0x7ffu << LCDC_BASECFG6_DISCYSIZE_Pos) /**< \brief (LCDC_BASECFG6) Discard Area Vertical Size */\r
+#define LCDC_BASECFG6_DISCYSIZE(value) ((LCDC_BASECFG6_DISCYSIZE_Msk & ((value) << LCDC_BASECFG6_DISCYSIZE_Pos)))\r
+/* -------- LCDC_OVRCHER1 : (LCDC Offset: 0x00000140) Overlay 1 Channel Enable Register -------- */\r
+#define LCDC_OVRCHER1_CHEN (0x1u << 0) /**< \brief (LCDC_OVRCHER1) Channel Enable Register */\r
+#define LCDC_OVRCHER1_UPDATEEN (0x1u << 1) /**< \brief (LCDC_OVRCHER1) Update Overlay Attributes Enable Register */\r
+#define LCDC_OVRCHER1_A2QEN (0x1u << 2) /**< \brief (LCDC_OVRCHER1) Add Head Pointer Enable Register */\r
+/* -------- LCDC_OVRCHDR1 : (LCDC Offset: 0x00000144) Overlay 1 Channel Disable Register -------- */\r
+#define LCDC_OVRCHDR1_CHDIS (0x1u << 0) /**< \brief (LCDC_OVRCHDR1) Channel Disable Register */\r
+#define LCDC_OVRCHDR1_CHRST (0x1u << 8) /**< \brief (LCDC_OVRCHDR1) Channel Reset Register */\r
+/* -------- LCDC_OVRCHSR1 : (LCDC Offset: 0x00000148) Overlay 1 Channel Status Register -------- */\r
+#define LCDC_OVRCHSR1_CHSR (0x1u << 0) /**< \brief (LCDC_OVRCHSR1) Channel Status Register */\r
+#define LCDC_OVRCHSR1_UPDATESR (0x1u << 1) /**< \brief (LCDC_OVRCHSR1) Update Overlay Attributes In Progress */\r
+#define LCDC_OVRCHSR1_A2QSR (0x1u << 2) /**< \brief (LCDC_OVRCHSR1) Add to Queue Pending Register */\r
+/* -------- LCDC_OVRIER1 : (LCDC Offset: 0x0000014C) Overlay 1 Interrupt Enable Register -------- */\r
+#define LCDC_OVRIER1_DMA (0x1u << 2) /**< \brief (LCDC_OVRIER1) End of DMA Transfer Interrupt Enable Register */\r
+#define LCDC_OVRIER1_DSCR (0x1u << 3) /**< \brief (LCDC_OVRIER1) Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_OVRIER1_ADD (0x1u << 4) /**< \brief (LCDC_OVRIER1) Head Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_OVRIER1_DONE (0x1u << 5) /**< \brief (LCDC_OVRIER1) End of List Interrupt Enable Register */\r
+#define LCDC_OVRIER1_OVR (0x1u << 6) /**< \brief (LCDC_OVRIER1) Overflow Interrupt Enable Register */\r
+/* -------- LCDC_OVRIDR1 : (LCDC Offset: 0x00000150) Overlay 1 Interrupt Disable Register -------- */\r
+#define LCDC_OVRIDR1_DMA (0x1u << 2) /**< \brief (LCDC_OVRIDR1) End of DMA Transfer Interrupt Disable Register */\r
+#define LCDC_OVRIDR1_DSCR (0x1u << 3) /**< \brief (LCDC_OVRIDR1) Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_OVRIDR1_ADD (0x1u << 4) /**< \brief (LCDC_OVRIDR1) Head Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_OVRIDR1_DONE (0x1u << 5) /**< \brief (LCDC_OVRIDR1) End of List Interrupt Disable Register */\r
+#define LCDC_OVRIDR1_OVR (0x1u << 6) /**< \brief (LCDC_OVRIDR1) Overflow Interrupt Disable Register */\r
+/* -------- LCDC_OVRIMR1 : (LCDC Offset: 0x00000154) Overlay 1 Interrupt Mask Register -------- */\r
+#define LCDC_OVRIMR1_DMA (0x1u << 2) /**< \brief (LCDC_OVRIMR1) End of DMA Transfer Interrupt Mask Register */\r
+#define LCDC_OVRIMR1_DSCR (0x1u << 3) /**< \brief (LCDC_OVRIMR1) Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_OVRIMR1_ADD (0x1u << 4) /**< \brief (LCDC_OVRIMR1) Head Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_OVRIMR1_DONE (0x1u << 5) /**< \brief (LCDC_OVRIMR1) End of List Interrupt Mask Register */\r
+#define LCDC_OVRIMR1_OVR (0x1u << 6) /**< \brief (LCDC_OVRIMR1) Overflow Interrupt Mask Register */\r
+/* -------- LCDC_OVRISR1 : (LCDC Offset: 0x00000158) Overlay 1 Interrupt Status Register -------- */\r
+#define LCDC_OVRISR1_DMA (0x1u << 2) /**< \brief (LCDC_OVRISR1) End of DMA Transfer */\r
+#define LCDC_OVRISR1_DSCR (0x1u << 3) /**< \brief (LCDC_OVRISR1) DMA Descriptor Loaded */\r
+#define LCDC_OVRISR1_ADD (0x1u << 4) /**< \brief (LCDC_OVRISR1) Head Descriptor Loaded */\r
+#define LCDC_OVRISR1_DONE (0x1u << 5) /**< \brief (LCDC_OVRISR1) End of List Detected Register */\r
+#define LCDC_OVRISR1_OVR (0x1u << 6) /**< \brief (LCDC_OVRISR1) Overflow Detected */\r
+/* -------- LCDC_OVRHEAD1 : (LCDC Offset: 0x0000015C) Overlay 1 DMA Head Register -------- */\r
+#define LCDC_OVRHEAD1_HEAD_Pos 2\r
+#define LCDC_OVRHEAD1_HEAD_Msk (0x3fffffffu << LCDC_OVRHEAD1_HEAD_Pos) /**< \brief (LCDC_OVRHEAD1) DMA Head Pointer */\r
+#define LCDC_OVRHEAD1_HEAD(value) ((LCDC_OVRHEAD1_HEAD_Msk & ((value) << LCDC_OVRHEAD1_HEAD_Pos)))\r
+/* -------- LCDC_OVRADDR1 : (LCDC Offset: 0x00000160) Overlay 1 DMA Address Register -------- */\r
+#define LCDC_OVRADDR1_ADDR_Pos 0\r
+#define LCDC_OVRADDR1_ADDR_Msk (0xffffffffu << LCDC_OVRADDR1_ADDR_Pos) /**< \brief (LCDC_OVRADDR1) DMA Transfer Overlay 1 Address */\r
+#define LCDC_OVRADDR1_ADDR(value) ((LCDC_OVRADDR1_ADDR_Msk & ((value) << LCDC_OVRADDR1_ADDR_Pos)))\r
+/* -------- LCDC_OVRCTRL1 : (LCDC Offset: 0x00000164) Overlay 1 DMA Control Register -------- */\r
+#define LCDC_OVRCTRL1_DFETCH (0x1u << 0) /**< \brief (LCDC_OVRCTRL1) Transfer Descriptor Fetch Enable */\r
+#define LCDC_OVRCTRL1_LFETCH (0x1u << 1) /**< \brief (LCDC_OVRCTRL1) Lookup Table Fetch Enable */\r
+#define LCDC_OVRCTRL1_DMAIEN (0x1u << 2) /**< \brief (LCDC_OVRCTRL1) End of DMA Transfer Interrupt Enable */\r
+#define LCDC_OVRCTRL1_DSCRIEN (0x1u << 3) /**< \brief (LCDC_OVRCTRL1) Descriptor Loaded Interrupt Enable */\r
+#define LCDC_OVRCTRL1_ADDIEN (0x1u << 4) /**< \brief (LCDC_OVRCTRL1) Add Head Descriptor to Queue Interrupt Enable */\r
+#define LCDC_OVRCTRL1_DONEIEN (0x1u << 5) /**< \brief (LCDC_OVRCTRL1) End of List Interrupt Enable */\r
+/* -------- LCDC_OVRNEXT1 : (LCDC Offset: 0x00000168) Overlay 1 DMA Next Register -------- */\r
+#define LCDC_OVRNEXT1_NEXT_Pos 0\r
+#define LCDC_OVRNEXT1_NEXT_Msk (0xffffffffu << LCDC_OVRNEXT1_NEXT_Pos) /**< \brief (LCDC_OVRNEXT1) DMA Descriptor Next Address */\r
+#define LCDC_OVRNEXT1_NEXT(value) ((LCDC_OVRNEXT1_NEXT_Msk & ((value) << LCDC_OVRNEXT1_NEXT_Pos)))\r
+/* -------- LCDC_OVR1CFG0 : (LCDC Offset: 0x0000016C) Overlay 1 Configuration 0 Register -------- */\r
+#define LCDC_OVR1CFG0_SIF (0x1u << 0) /**< \brief (LCDC_OVR1CFG0) Source Interface */\r
+#define LCDC_OVR1CFG0_BLEN_Pos 4\r
+#define LCDC_OVR1CFG0_BLEN_Msk (0x3u << LCDC_OVR1CFG0_BLEN_Pos) /**< \brief (LCDC_OVR1CFG0) AHB Burst Length */\r
+#define   LCDC_OVR1CFG0_BLEN_AHB_BLEN_SINGLE (0x0u << 4) /**< \brief (LCDC_OVR1CFG0) AHB Access is started as soon as there is enough space in the FIFO to store one data. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_OVR1CFG0_BLEN_AHB_BLEN_INCR4 (0x1u << 4) /**< \brief (LCDC_OVR1CFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 4 data. An AHB INCR4 Burst is used. SINGLE, INCR and INCR4 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_OVR1CFG0_BLEN_AHB_BLEN_INCR8 (0x2u << 4) /**< \brief (LCDC_OVR1CFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 8 data. An AHB INCR8 Burst is used. SINGLE, INCR, INCR4 and INCR8 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_OVR1CFG0_BLEN_AHB_BLEN_INCR16 (0x3u << 4) /**< \brief (LCDC_OVR1CFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 16 data. An AHB INCR16 Burst is used. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define LCDC_OVR1CFG0_DLBO (0x1u << 8) /**< \brief (LCDC_OVR1CFG0) Defined Length Burst Only for Channel Bus Transaction. */\r
+#define LCDC_OVR1CFG0_ROTDIS (0x1u << 12) /**< \brief (LCDC_OVR1CFG0) Hardware Rotation Optimization Disable */\r
+#define LCDC_OVR1CFG0_LOCKDIS (0x1u << 13) /**< \brief (LCDC_OVR1CFG0) Hardware Rotation Lock Disable */\r
+/* -------- LCDC_OVR1CFG1 : (LCDC Offset: 0x00000170) Overlay 1 Configuration 1 Register -------- */\r
+#define LCDC_OVR1CFG1_CLUTEN (0x1u << 0) /**< \brief (LCDC_OVR1CFG1) Color Lookup Table Enable */\r
+#define LCDC_OVR1CFG1_RGBMODE_Pos 4\r
+#define LCDC_OVR1CFG1_RGBMODE_Msk (0xfu << LCDC_OVR1CFG1_RGBMODE_Pos) /**< \brief (LCDC_OVR1CFG1) RGB Input Mode Selection */\r
+#define   LCDC_OVR1CFG1_RGBMODE_12BPP_RGB_444 (0x0u << 4) /**< \brief (LCDC_OVR1CFG1) 12 bpp RGB 444 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_16BPP_ARGB_4444 (0x1u << 4) /**< \brief (LCDC_OVR1CFG1) 16 bpp ARGB 4444 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_16BPP_RGBA_4444 (0x2u << 4) /**< \brief (LCDC_OVR1CFG1) 16 bpp RGBA 4444 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_16BPP_RGB_565 (0x3u << 4) /**< \brief (LCDC_OVR1CFG1) 16 bpp RGB 565 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_16BPP_TRGB_1555 (0x4u << 4) /**< \brief (LCDC_OVR1CFG1) 16 bpp TRGB 1555 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_18BPP_RGB_666 (0x5u << 4) /**< \brief (LCDC_OVR1CFG1) 18 bpp RGB 666 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_18BPP_RGB_666PACKED (0x6u << 4) /**< \brief (LCDC_OVR1CFG1) 18 bpp RGB 666 PACKED */\r
+#define   LCDC_OVR1CFG1_RGBMODE_19BPP_TRGB_1666 (0x7u << 4) /**< \brief (LCDC_OVR1CFG1) 19 bpp TRGB 1666 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_19BPP_TRGB_PACKED (0x8u << 4) /**< \brief (LCDC_OVR1CFG1) 19 bpp TRGB 1666 PACKED */\r
+#define   LCDC_OVR1CFG1_RGBMODE_24BPP_RGB_888 (0x9u << 4) /**< \brief (LCDC_OVR1CFG1) 24 bpp RGB 888 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_24BPP_RGB_888_PACKED (0xAu << 4) /**< \brief (LCDC_OVR1CFG1) 24 bpp RGB 888 PACKED */\r
+#define   LCDC_OVR1CFG1_RGBMODE_25BPP_TRGB_1888 (0xBu << 4) /**< \brief (LCDC_OVR1CFG1) 25 bpp TRGB 1888 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_32BPP_ARGB_8888 (0xCu << 4) /**< \brief (LCDC_OVR1CFG1) 32 bpp ARGB 8888 */\r
+#define   LCDC_OVR1CFG1_RGBMODE_32BPP_RGBA_8888 (0xDu << 4) /**< \brief (LCDC_OVR1CFG1) 32 bpp RGBA 8888 */\r
+#define LCDC_OVR1CFG1_CLUTMODE_Pos 8\r
+#define LCDC_OVR1CFG1_CLUTMODE_Msk (0x3u << LCDC_OVR1CFG1_CLUTMODE_Pos) /**< \brief (LCDC_OVR1CFG1) Color Lookup table input mode selection */\r
+#define   LCDC_OVR1CFG1_CLUTMODE_CLUT_1BPP (0x0u << 8) /**< \brief (LCDC_OVR1CFG1) color lookup table mode set to 1 bit per pixel */\r
+#define   LCDC_OVR1CFG1_CLUTMODE_CLUT_2BPP (0x1u << 8) /**< \brief (LCDC_OVR1CFG1) color lookup table mode set to 2 bits per pixel */\r
+#define   LCDC_OVR1CFG1_CLUTMODE_CLUT_4BPP (0x2u << 8) /**< \brief (LCDC_OVR1CFG1) color lookup table mode set to 4 bits per pixel */\r
+#define   LCDC_OVR1CFG1_CLUTMODE_CLUT_8BPP (0x3u << 8) /**< \brief (LCDC_OVR1CFG1) color lookup table mode set to 8 bits per pixel */\r
+/* -------- LCDC_OVR1CFG2 : (LCDC Offset: 0x00000174) Overlay 1 Configuration 2 Register -------- */\r
+#define LCDC_OVR1CFG2_XPOS_Pos 0\r
+#define LCDC_OVR1CFG2_XPOS_Msk (0x7ffu << LCDC_OVR1CFG2_XPOS_Pos) /**< \brief (LCDC_OVR1CFG2) Horizontal Window Position */\r
+#define LCDC_OVR1CFG2_XPOS(value) ((LCDC_OVR1CFG2_XPOS_Msk & ((value) << LCDC_OVR1CFG2_XPOS_Pos)))\r
+#define LCDC_OVR1CFG2_YPOS_Pos 16\r
+#define LCDC_OVR1CFG2_YPOS_Msk (0x7ffu << LCDC_OVR1CFG2_YPOS_Pos) /**< \brief (LCDC_OVR1CFG2) Vertical Window Position */\r
+#define LCDC_OVR1CFG2_YPOS(value) ((LCDC_OVR1CFG2_YPOS_Msk & ((value) << LCDC_OVR1CFG2_YPOS_Pos)))\r
+/* -------- LCDC_OVR1CFG3 : (LCDC Offset: 0x00000178) Overlay 1 Configuration 3 Register -------- */\r
+#define LCDC_OVR1CFG3_XSIZE_Pos 0\r
+#define LCDC_OVR1CFG3_XSIZE_Msk (0x7ffu << LCDC_OVR1CFG3_XSIZE_Pos) /**< \brief (LCDC_OVR1CFG3) Horizontal Window Size */\r
+#define LCDC_OVR1CFG3_XSIZE(value) ((LCDC_OVR1CFG3_XSIZE_Msk & ((value) << LCDC_OVR1CFG3_XSIZE_Pos)))\r
+#define LCDC_OVR1CFG3_YSIZE_Pos 16\r
+#define LCDC_OVR1CFG3_YSIZE_Msk (0x7ffu << LCDC_OVR1CFG3_YSIZE_Pos) /**< \brief (LCDC_OVR1CFG3) Vertical Window Size */\r
+#define LCDC_OVR1CFG3_YSIZE(value) ((LCDC_OVR1CFG3_YSIZE_Msk & ((value) << LCDC_OVR1CFG3_YSIZE_Pos)))\r
+/* -------- LCDC_OVR1CFG4 : (LCDC Offset: 0x0000017C) Overlay 1 Configuration 4 Register -------- */\r
+#define LCDC_OVR1CFG4_XSTRIDE_Pos 0\r
+#define LCDC_OVR1CFG4_XSTRIDE_Msk (0xffffffffu << LCDC_OVR1CFG4_XSTRIDE_Pos) /**< \brief (LCDC_OVR1CFG4) Horizontal Stride */\r
+#define LCDC_OVR1CFG4_XSTRIDE(value) ((LCDC_OVR1CFG4_XSTRIDE_Msk & ((value) << LCDC_OVR1CFG4_XSTRIDE_Pos)))\r
+/* -------- LCDC_OVR1CFG5 : (LCDC Offset: 0x00000180) Overlay 1 Configuration 5 Register -------- */\r
+#define LCDC_OVR1CFG5_PSTRIDE_Pos 0\r
+#define LCDC_OVR1CFG5_PSTRIDE_Msk (0xffffffffu << LCDC_OVR1CFG5_PSTRIDE_Pos) /**< \brief (LCDC_OVR1CFG5) Pixel Stride */\r
+#define LCDC_OVR1CFG5_PSTRIDE(value) ((LCDC_OVR1CFG5_PSTRIDE_Msk & ((value) << LCDC_OVR1CFG5_PSTRIDE_Pos)))\r
+/* -------- LCDC_OVR1CFG6 : (LCDC Offset: 0x00000184) Overlay 1 Configuration 6 Register -------- */\r
+#define LCDC_OVR1CFG6_BDEF_Pos 0\r
+#define LCDC_OVR1CFG6_BDEF_Msk (0xffu << LCDC_OVR1CFG6_BDEF_Pos) /**< \brief (LCDC_OVR1CFG6) Blue Default */\r
+#define LCDC_OVR1CFG6_BDEF(value) ((LCDC_OVR1CFG6_BDEF_Msk & ((value) << LCDC_OVR1CFG6_BDEF_Pos)))\r
+#define LCDC_OVR1CFG6_GDEF_Pos 8\r
+#define LCDC_OVR1CFG6_GDEF_Msk (0xffu << LCDC_OVR1CFG6_GDEF_Pos) /**< \brief (LCDC_OVR1CFG6) Green Default */\r
+#define LCDC_OVR1CFG6_GDEF(value) ((LCDC_OVR1CFG6_GDEF_Msk & ((value) << LCDC_OVR1CFG6_GDEF_Pos)))\r
+#define LCDC_OVR1CFG6_RDEF_Pos 16\r
+#define LCDC_OVR1CFG6_RDEF_Msk (0xffu << LCDC_OVR1CFG6_RDEF_Pos) /**< \brief (LCDC_OVR1CFG6) Red Default */\r
+#define LCDC_OVR1CFG6_RDEF(value) ((LCDC_OVR1CFG6_RDEF_Msk & ((value) << LCDC_OVR1CFG6_RDEF_Pos)))\r
+/* -------- LCDC_OVR1CFG7 : (LCDC Offset: 0x00000188) Overlay 1 Configuration 7 Register -------- */\r
+#define LCDC_OVR1CFG7_BKEY_Pos 0\r
+#define LCDC_OVR1CFG7_BKEY_Msk (0xffu << LCDC_OVR1CFG7_BKEY_Pos) /**< \brief (LCDC_OVR1CFG7) Blue Color Component Chroma Key */\r
+#define LCDC_OVR1CFG7_BKEY(value) ((LCDC_OVR1CFG7_BKEY_Msk & ((value) << LCDC_OVR1CFG7_BKEY_Pos)))\r
+#define LCDC_OVR1CFG7_GKEY_Pos 8\r
+#define LCDC_OVR1CFG7_GKEY_Msk (0xffu << LCDC_OVR1CFG7_GKEY_Pos) /**< \brief (LCDC_OVR1CFG7) Green Color Component Chroma Key */\r
+#define LCDC_OVR1CFG7_GKEY(value) ((LCDC_OVR1CFG7_GKEY_Msk & ((value) << LCDC_OVR1CFG7_GKEY_Pos)))\r
+#define LCDC_OVR1CFG7_RKEY_Pos 16\r
+#define LCDC_OVR1CFG7_RKEY_Msk (0xffu << LCDC_OVR1CFG7_RKEY_Pos) /**< \brief (LCDC_OVR1CFG7) Red Color Component Chroma Key */\r
+#define LCDC_OVR1CFG7_RKEY(value) ((LCDC_OVR1CFG7_RKEY_Msk & ((value) << LCDC_OVR1CFG7_RKEY_Pos)))\r
+/* -------- LCDC_OVR1CFG8 : (LCDC Offset: 0x0000018C) Overlay 1 Configuration 8Register -------- */\r
+#define LCDC_OVR1CFG8_BMASK_Pos 0\r
+#define LCDC_OVR1CFG8_BMASK_Msk (0xffu << LCDC_OVR1CFG8_BMASK_Pos) /**< \brief (LCDC_OVR1CFG8) Blue Color Component Chroma Key Mask */\r
+#define LCDC_OVR1CFG8_BMASK(value) ((LCDC_OVR1CFG8_BMASK_Msk & ((value) << LCDC_OVR1CFG8_BMASK_Pos)))\r
+#define LCDC_OVR1CFG8_GMASK_Pos 8\r
+#define LCDC_OVR1CFG8_GMASK_Msk (0xffu << LCDC_OVR1CFG8_GMASK_Pos) /**< \brief (LCDC_OVR1CFG8) Green Color Component Chroma Key Mask */\r
+#define LCDC_OVR1CFG8_GMASK(value) ((LCDC_OVR1CFG8_GMASK_Msk & ((value) << LCDC_OVR1CFG8_GMASK_Pos)))\r
+#define LCDC_OVR1CFG8_RMASK_Pos 16\r
+#define LCDC_OVR1CFG8_RMASK_Msk (0xffu << LCDC_OVR1CFG8_RMASK_Pos) /**< \brief (LCDC_OVR1CFG8) Red Color Component Chroma Key Mask */\r
+#define LCDC_OVR1CFG8_RMASK(value) ((LCDC_OVR1CFG8_RMASK_Msk & ((value) << LCDC_OVR1CFG8_RMASK_Pos)))\r
+/* -------- LCDC_OVR1CFG9 : (LCDC Offset: 0x00000190) Overlay 1 Configuration 9 Register -------- */\r
+#define LCDC_OVR1CFG9_CRKEY (0x1u << 0) /**< \brief (LCDC_OVR1CFG9) Blender Chroma Key Enable */\r
+#define LCDC_OVR1CFG9_INV (0x1u << 1) /**< \brief (LCDC_OVR1CFG9) Blender Inverted Blender Output Enable */\r
+#define LCDC_OVR1CFG9_ITER2BL (0x1u << 2) /**< \brief (LCDC_OVR1CFG9) Blender Iterated Color Enable */\r
+#define LCDC_OVR1CFG9_ITER (0x1u << 3) /**< \brief (LCDC_OVR1CFG9) Blender Use Iterated Color */\r
+#define LCDC_OVR1CFG9_REVALPHA (0x1u << 4) /**< \brief (LCDC_OVR1CFG9) Blender Reverse Alpha */\r
+#define LCDC_OVR1CFG9_GAEN (0x1u << 5) /**< \brief (LCDC_OVR1CFG9) Blender Global Alpha Enable */\r
+#define LCDC_OVR1CFG9_LAEN (0x1u << 6) /**< \brief (LCDC_OVR1CFG9) Blender Local Alpha Enable */\r
+#define LCDC_OVR1CFG9_OVR (0x1u << 7) /**< \brief (LCDC_OVR1CFG9) Blender Overlay Layer Enable */\r
+#define LCDC_OVR1CFG9_DMA (0x1u << 8) /**< \brief (LCDC_OVR1CFG9) Blender DMA Layer Enable */\r
+#define LCDC_OVR1CFG9_REP (0x1u << 9) /**< \brief (LCDC_OVR1CFG9) Use Replication logic to expand RGB color to 24 bits */\r
+#define LCDC_OVR1CFG9_DSTKEY (0x1u << 10) /**< \brief (LCDC_OVR1CFG9) Destination Chroma Keying */\r
+#define LCDC_OVR1CFG9_GA_Pos 16\r
+#define LCDC_OVR1CFG9_GA_Msk (0xffu << LCDC_OVR1CFG9_GA_Pos) /**< \brief (LCDC_OVR1CFG9) Blender Global Alpha */\r
+#define LCDC_OVR1CFG9_GA(value) ((LCDC_OVR1CFG9_GA_Msk & ((value) << LCDC_OVR1CFG9_GA_Pos)))\r
+/* -------- LCDC_OVRCHER2 : (LCDC Offset: 0x00000240) Overlay 2 Channel Enable Register -------- */\r
+#define LCDC_OVRCHER2_CHEN (0x1u << 0) /**< \brief (LCDC_OVRCHER2) Channel Enable Register */\r
+#define LCDC_OVRCHER2_UPDATEEN (0x1u << 1) /**< \brief (LCDC_OVRCHER2) Update Overlay Attributes Enable Register */\r
+#define LCDC_OVRCHER2_A2QEN (0x1u << 2) /**< \brief (LCDC_OVRCHER2) Add Head Pointer Enable Register */\r
+/* -------- LCDC_OVRCHDR2 : (LCDC Offset: 0x00000244) Overlay 2 Channel Disable Register -------- */\r
+#define LCDC_OVRCHDR2_CHDIS (0x1u << 0) /**< \brief (LCDC_OVRCHDR2) Channel Disable Register */\r
+#define LCDC_OVRCHDR2_CHRST (0x1u << 8) /**< \brief (LCDC_OVRCHDR2) Channel Reset Register */\r
+/* -------- LCDC_OVRCHSR2 : (LCDC Offset: 0x00000248) Overlay 2 Channel Status Register -------- */\r
+#define LCDC_OVRCHSR2_CHSR (0x1u << 0) /**< \brief (LCDC_OVRCHSR2) Channel Status Register */\r
+#define LCDC_OVRCHSR2_UPDATESR (0x1u << 1) /**< \brief (LCDC_OVRCHSR2) Update Overlay Attributes In Progress */\r
+#define LCDC_OVRCHSR2_A2QSR (0x1u << 2) /**< \brief (LCDC_OVRCHSR2) Add To Queue Pending Register */\r
+/* -------- LCDC_OVRIER2 : (LCDC Offset: 0x0000024C) Overlay 2 Interrupt Enable Register -------- */\r
+#define LCDC_OVRIER2_DMA (0x1u << 2) /**< \brief (LCDC_OVRIER2) End of DMA Transfer Interrupt Enable Register */\r
+#define LCDC_OVRIER2_DSCR (0x1u << 3) /**< \brief (LCDC_OVRIER2) Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_OVRIER2_ADD (0x1u << 4) /**< \brief (LCDC_OVRIER2) Head Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_OVRIER2_DONE (0x1u << 5) /**< \brief (LCDC_OVRIER2) End of List Interrupt Enable Register */\r
+#define LCDC_OVRIER2_OVR (0x1u << 6) /**< \brief (LCDC_OVRIER2) Overflow Interrupt Enable Register */\r
+/* -------- LCDC_OVRIDR2 : (LCDC Offset: 0x00000250) Overlay 2 Interrupt Disable Register -------- */\r
+#define LCDC_OVRIDR2_DMA (0x1u << 2) /**< \brief (LCDC_OVRIDR2) End of DMA Transfer Interrupt Disable Register */\r
+#define LCDC_OVRIDR2_DSCR (0x1u << 3) /**< \brief (LCDC_OVRIDR2) Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_OVRIDR2_ADD (0x1u << 4) /**< \brief (LCDC_OVRIDR2) Head Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_OVRIDR2_DONE (0x1u << 5) /**< \brief (LCDC_OVRIDR2) End of List Interrupt Disable Register */\r
+#define LCDC_OVRIDR2_OVR (0x1u << 6) /**< \brief (LCDC_OVRIDR2) Overflow Interrupt Disable Register */\r
+/* -------- LCDC_OVRIMR2 : (LCDC Offset: 0x00000254) Overlay 2 Interrupt Mask Register -------- */\r
+#define LCDC_OVRIMR2_DMA (0x1u << 2) /**< \brief (LCDC_OVRIMR2) End of DMA Transfer Interrupt Mask Register */\r
+#define LCDC_OVRIMR2_DSCR (0x1u << 3) /**< \brief (LCDC_OVRIMR2) Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_OVRIMR2_ADD (0x1u << 4) /**< \brief (LCDC_OVRIMR2) Head Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_OVRIMR2_DONE (0x1u << 5) /**< \brief (LCDC_OVRIMR2) End of List Interrupt Mask Register */\r
+#define LCDC_OVRIMR2_OVR (0x1u << 6) /**< \brief (LCDC_OVRIMR2) Overflow Interrupt Mask Register */\r
+/* -------- LCDC_OVRISR2 : (LCDC Offset: 0x00000258) Overlay 2 Interrupt status Register -------- */\r
+#define LCDC_OVRISR2_DMA (0x1u << 2) /**< \brief (LCDC_OVRISR2) End of DMA Transfer */\r
+#define LCDC_OVRISR2_DSCR (0x1u << 3) /**< \brief (LCDC_OVRISR2) DMA Descriptor Loaded */\r
+#define LCDC_OVRISR2_ADD (0x1u << 4) /**< \brief (LCDC_OVRISR2) Head Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_OVRISR2_DONE (0x1u << 5) /**< \brief (LCDC_OVRISR2) End Of List Interrupt Disable Register */\r
+#define LCDC_OVRISR2_OVR (0x1u << 6) /**< \brief (LCDC_OVRISR2) Overflow Detected */\r
+/* -------- LCDC_OVRHEAD2 : (LCDC Offset: 0x0000025C) Overlay 2 DMA Head Register -------- */\r
+#define LCDC_OVRHEAD2_HEAD_Pos 2\r
+#define LCDC_OVRHEAD2_HEAD_Msk (0x3fffffffu << LCDC_OVRHEAD2_HEAD_Pos) /**< \brief (LCDC_OVRHEAD2) DMA Head Pointer */\r
+#define LCDC_OVRHEAD2_HEAD(value) ((LCDC_OVRHEAD2_HEAD_Msk & ((value) << LCDC_OVRHEAD2_HEAD_Pos)))\r
+/* -------- LCDC_OVRADDR2 : (LCDC Offset: 0x00000260) Overlay 2 DMA Address Register -------- */\r
+#define LCDC_OVRADDR2_ADDR_Pos 0\r
+#define LCDC_OVRADDR2_ADDR_Msk (0xffffffffu << LCDC_OVRADDR2_ADDR_Pos) /**< \brief (LCDC_OVRADDR2) DMA Transfer Overlay 2 Address */\r
+#define LCDC_OVRADDR2_ADDR(value) ((LCDC_OVRADDR2_ADDR_Msk & ((value) << LCDC_OVRADDR2_ADDR_Pos)))\r
+/* -------- LCDC_OVRCTRL2 : (LCDC Offset: 0x00000264) Overlay 2 DMA Control Register -------- */\r
+#define LCDC_OVRCTRL2_DFETCH (0x1u << 0) /**< \brief (LCDC_OVRCTRL2) Transfer Descriptor Fetch Enable */\r
+#define LCDC_OVRCTRL2_LFETCH (0x1u << 1) /**< \brief (LCDC_OVRCTRL2) Lookup Table Fetch Enable */\r
+#define LCDC_OVRCTRL2_DMAIEN (0x1u << 2) /**< \brief (LCDC_OVRCTRL2) End of DMA Transfer Interrupt Enable */\r
+#define LCDC_OVRCTRL2_DSCRIEN (0x1u << 3) /**< \brief (LCDC_OVRCTRL2) Descriptor Loaded Interrupt Enable */\r
+#define LCDC_OVRCTRL2_ADDIEN (0x1u << 4) /**< \brief (LCDC_OVRCTRL2) Add Head Descriptor to Queue Interrupt Enable */\r
+#define LCDC_OVRCTRL2_DONEIEN (0x1u << 5) /**< \brief (LCDC_OVRCTRL2) End of List Interrupt Enable */\r
+/* -------- LCDC_OVRNEXT2 : (LCDC Offset: 0x00000268) Overlay 2 DMA Next Register -------- */\r
+#define LCDC_OVRNEXT2_NEXT_Pos 0\r
+#define LCDC_OVRNEXT2_NEXT_Msk (0xffffffffu << LCDC_OVRNEXT2_NEXT_Pos) /**< \brief (LCDC_OVRNEXT2) DMA Descriptor Next Address */\r
+#define LCDC_OVRNEXT2_NEXT(value) ((LCDC_OVRNEXT2_NEXT_Msk & ((value) << LCDC_OVRNEXT2_NEXT_Pos)))\r
+/* -------- LCDC_OVR2CFG0 : (LCDC Offset: 0x0000026C) Overlay 2 Configuration 0 Register -------- */\r
+#define LCDC_OVR2CFG0_BLEN_Pos 4\r
+#define LCDC_OVR2CFG0_BLEN_Msk (0x3u << LCDC_OVR2CFG0_BLEN_Pos) /**< \brief (LCDC_OVR2CFG0) AHB Burst Length */\r
+#define   LCDC_OVR2CFG0_BLEN_AHB_SINGLE (0x0u << 4) /**< \brief (LCDC_OVR2CFG0) AHB Access is started as soon as there is enough space in the FIFO to store one data. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_OVR2CFG0_BLEN_AHB_INCR4 (0x1u << 4) /**< \brief (LCDC_OVR2CFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 4 data. An AHB INCR4 Burst is used. SINGLE, INCR and INCR4 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_OVR2CFG0_BLEN_AHB_INCR8 (0x2u << 4) /**< \brief (LCDC_OVR2CFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 8 data. An AHB INCR8 Burst is used. SINGLE, INCR, INCR4 and INCR8 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_OVR2CFG0_BLEN_AHB_INCR16 (0x3u << 4) /**< \brief (LCDC_OVR2CFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 16 data. An AHB INCR16 Burst is used. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define LCDC_OVR2CFG0_DLBO (0x1u << 8) /**< \brief (LCDC_OVR2CFG0) Defined Length Burst Only For Channel Bus Transaction. */\r
+#define LCDC_OVR2CFG0_ROTDIS (0x1u << 12) /**< \brief (LCDC_OVR2CFG0) Hardware Rotation Optimization Disable */\r
+#define LCDC_OVR2CFG0_LOCKDIS (0x1u << 13) /**< \brief (LCDC_OVR2CFG0) Hardware Rotation Lock Disable */\r
+/* -------- LCDC_OVR2CFG1 : (LCDC Offset: 0x00000270) Overlay 2 Configuration 1 Register -------- */\r
+#define LCDC_OVR2CFG1_CLUTEN (0x1u << 0) /**< \brief (LCDC_OVR2CFG1) Color Lookup Table Enable */\r
+#define LCDC_OVR2CFG1_RGBMODE_Pos 4\r
+#define LCDC_OVR2CFG1_RGBMODE_Msk (0xfu << LCDC_OVR2CFG1_RGBMODE_Pos) /**< \brief (LCDC_OVR2CFG1) RGB Input Mode Selection */\r
+#define   LCDC_OVR2CFG1_RGBMODE_12BPP_RGB_444 (0x0u << 4) /**< \brief (LCDC_OVR2CFG1) 12 bpp RGB 444 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_16BPP_ARGB_4444 (0x1u << 4) /**< \brief (LCDC_OVR2CFG1) 16 bpp ARGB 4444 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_16BPP_RGBA_4444 (0x2u << 4) /**< \brief (LCDC_OVR2CFG1) 16 bpp RGBA 4444 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_16BPP_RGB_565 (0x3u << 4) /**< \brief (LCDC_OVR2CFG1) 16 bpp RGB 565 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_16BPP_TRGB_1555 (0x4u << 4) /**< \brief (LCDC_OVR2CFG1) 16 bpp TRGB 1555 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_18BPP_RGB_666 (0x5u << 4) /**< \brief (LCDC_OVR2CFG1) 18 bpp RGB 666 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_18BPP_RGB_666PACKED (0x6u << 4) /**< \brief (LCDC_OVR2CFG1) 18 bpp RGB 666 PACKED */\r
+#define   LCDC_OVR2CFG1_RGBMODE_19BPP_TRGB_1666 (0x7u << 4) /**< \brief (LCDC_OVR2CFG1) 19 bpp TRGB 1666 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_19BPP_TRGB_PACKED (0x8u << 4) /**< \brief (LCDC_OVR2CFG1) 19 bpp TRGB 1666 PACKED */\r
+#define   LCDC_OVR2CFG1_RGBMODE_24BPP_RGB_888 (0x9u << 4) /**< \brief (LCDC_OVR2CFG1) 24 bpp RGB 888 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_24BPP_RGB_888_PACKED (0xAu << 4) /**< \brief (LCDC_OVR2CFG1) 24 bpp RGB 888 PACKED */\r
+#define   LCDC_OVR2CFG1_RGBMODE_25BPP_TRGB_1888 (0xBu << 4) /**< \brief (LCDC_OVR2CFG1) 25 bpp TRGB 1888 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_32BPP_ARGB_8888 (0xCu << 4) /**< \brief (LCDC_OVR2CFG1) 32 bpp ARGB 8888 */\r
+#define   LCDC_OVR2CFG1_RGBMODE_32BPP_RGBA_8888 (0xDu << 4) /**< \brief (LCDC_OVR2CFG1) 32 bpp RGBA 8888 */\r
+#define LCDC_OVR2CFG1_CLUTMODE_Pos 8\r
+#define LCDC_OVR2CFG1_CLUTMODE_Msk (0x3u << LCDC_OVR2CFG1_CLUTMODE_Pos) /**< \brief (LCDC_OVR2CFG1) Color Lookup table input mode selection */\r
+#define   LCDC_OVR2CFG1_CLUTMODE_CLUT_1BPP (0x0u << 8) /**< \brief (LCDC_OVR2CFG1) color lookup table mode set to 1 bit per pixel */\r
+#define   LCDC_OVR2CFG1_CLUTMODE_CLUT_2BPP (0x1u << 8) /**< \brief (LCDC_OVR2CFG1) color lookup table mode set to 2 bits per pixel */\r
+#define   LCDC_OVR2CFG1_CLUTMODE_CLUT_4BPP (0x2u << 8) /**< \brief (LCDC_OVR2CFG1) color lookup table mode set to 4 bits per pixel */\r
+#define   LCDC_OVR2CFG1_CLUTMODE_CLUT_8BPP (0x3u << 8) /**< \brief (LCDC_OVR2CFG1) color lookup table mode set to 8 bits per pixel */\r
+/* -------- LCDC_OVR2CFG2 : (LCDC Offset: 0x00000274) Overlay 2 Configuration 2 Register -------- */\r
+#define LCDC_OVR2CFG2_XPOS_Pos 0\r
+#define LCDC_OVR2CFG2_XPOS_Msk (0x7ffu << LCDC_OVR2CFG2_XPOS_Pos) /**< \brief (LCDC_OVR2CFG2) Horizontal Window Position */\r
+#define LCDC_OVR2CFG2_XPOS(value) ((LCDC_OVR2CFG2_XPOS_Msk & ((value) << LCDC_OVR2CFG2_XPOS_Pos)))\r
+#define LCDC_OVR2CFG2_YPOS_Pos 16\r
+#define LCDC_OVR2CFG2_YPOS_Msk (0x7ffu << LCDC_OVR2CFG2_YPOS_Pos) /**< \brief (LCDC_OVR2CFG2) Vertical Window Position */\r
+#define LCDC_OVR2CFG2_YPOS(value) ((LCDC_OVR2CFG2_YPOS_Msk & ((value) << LCDC_OVR2CFG2_YPOS_Pos)))\r
+/* -------- LCDC_OVR2CFG3 : (LCDC Offset: 0x00000278) Overlay 2 Configuration 3 Register -------- */\r
+#define LCDC_OVR2CFG3_XSIZE_Pos 0\r
+#define LCDC_OVR2CFG3_XSIZE_Msk (0x7ffu << LCDC_OVR2CFG3_XSIZE_Pos) /**< \brief (LCDC_OVR2CFG3) Horizontal Window Size */\r
+#define LCDC_OVR2CFG3_XSIZE(value) ((LCDC_OVR2CFG3_XSIZE_Msk & ((value) << LCDC_OVR2CFG3_XSIZE_Pos)))\r
+#define LCDC_OVR2CFG3_YSIZE_Pos 16\r
+#define LCDC_OVR2CFG3_YSIZE_Msk (0x7ffu << LCDC_OVR2CFG3_YSIZE_Pos) /**< \brief (LCDC_OVR2CFG3) Vertical Window Size */\r
+#define LCDC_OVR2CFG3_YSIZE(value) ((LCDC_OVR2CFG3_YSIZE_Msk & ((value) << LCDC_OVR2CFG3_YSIZE_Pos)))\r
+/* -------- LCDC_OVR2CFG4 : (LCDC Offset: 0x0000027C) Overlay 2 Configuration 4 Register -------- */\r
+#define LCDC_OVR2CFG4_XSTRIDE_Pos 0\r
+#define LCDC_OVR2CFG4_XSTRIDE_Msk (0xffffffffu << LCDC_OVR2CFG4_XSTRIDE_Pos) /**< \brief (LCDC_OVR2CFG4) Horizontal Stride */\r
+#define LCDC_OVR2CFG4_XSTRIDE(value) ((LCDC_OVR2CFG4_XSTRIDE_Msk & ((value) << LCDC_OVR2CFG4_XSTRIDE_Pos)))\r
+/* -------- LCDC_OVR2CFG5 : (LCDC Offset: 0x00000280) Overlay 2 Configuration 5 Register -------- */\r
+#define LCDC_OVR2CFG5_PSTRIDE_Pos 0\r
+#define LCDC_OVR2CFG5_PSTRIDE_Msk (0xffffffffu << LCDC_OVR2CFG5_PSTRIDE_Pos) /**< \brief (LCDC_OVR2CFG5) Pixel Stride */\r
+#define LCDC_OVR2CFG5_PSTRIDE(value) ((LCDC_OVR2CFG5_PSTRIDE_Msk & ((value) << LCDC_OVR2CFG5_PSTRIDE_Pos)))\r
+/* -------- LCDC_OVR2CFG6 : (LCDC Offset: 0x00000284) Overlay 2 Configuration 6 Register -------- */\r
+#define LCDC_OVR2CFG6_BDEF_Pos 0\r
+#define LCDC_OVR2CFG6_BDEF_Msk (0xffu << LCDC_OVR2CFG6_BDEF_Pos) /**< \brief (LCDC_OVR2CFG6) Blue Default */\r
+#define LCDC_OVR2CFG6_BDEF(value) ((LCDC_OVR2CFG6_BDEF_Msk & ((value) << LCDC_OVR2CFG6_BDEF_Pos)))\r
+#define LCDC_OVR2CFG6_GDEF_Pos 8\r
+#define LCDC_OVR2CFG6_GDEF_Msk (0xffu << LCDC_OVR2CFG6_GDEF_Pos) /**< \brief (LCDC_OVR2CFG6) Green Default */\r
+#define LCDC_OVR2CFG6_GDEF(value) ((LCDC_OVR2CFG6_GDEF_Msk & ((value) << LCDC_OVR2CFG6_GDEF_Pos)))\r
+#define LCDC_OVR2CFG6_RDEF_Pos 16\r
+#define LCDC_OVR2CFG6_RDEF_Msk (0xffu << LCDC_OVR2CFG6_RDEF_Pos) /**< \brief (LCDC_OVR2CFG6) Red Default */\r
+#define LCDC_OVR2CFG6_RDEF(value) ((LCDC_OVR2CFG6_RDEF_Msk & ((value) << LCDC_OVR2CFG6_RDEF_Pos)))\r
+/* -------- LCDC_OVR2CFG7 : (LCDC Offset: 0x00000288) Overlay 2 Configuration 7 Register -------- */\r
+#define LCDC_OVR2CFG7_BKEY_Pos 0\r
+#define LCDC_OVR2CFG7_BKEY_Msk (0xffu << LCDC_OVR2CFG7_BKEY_Pos) /**< \brief (LCDC_OVR2CFG7) Blue Color Component Chroma Key */\r
+#define LCDC_OVR2CFG7_BKEY(value) ((LCDC_OVR2CFG7_BKEY_Msk & ((value) << LCDC_OVR2CFG7_BKEY_Pos)))\r
+#define LCDC_OVR2CFG7_GKEY_Pos 8\r
+#define LCDC_OVR2CFG7_GKEY_Msk (0xffu << LCDC_OVR2CFG7_GKEY_Pos) /**< \brief (LCDC_OVR2CFG7) Green Color Component Chroma Key */\r
+#define LCDC_OVR2CFG7_GKEY(value) ((LCDC_OVR2CFG7_GKEY_Msk & ((value) << LCDC_OVR2CFG7_GKEY_Pos)))\r
+#define LCDC_OVR2CFG7_RKEY_Pos 16\r
+#define LCDC_OVR2CFG7_RKEY_Msk (0xffu << LCDC_OVR2CFG7_RKEY_Pos) /**< \brief (LCDC_OVR2CFG7) Red Color Component Chroma Key */\r
+#define LCDC_OVR2CFG7_RKEY(value) ((LCDC_OVR2CFG7_RKEY_Msk & ((value) << LCDC_OVR2CFG7_RKEY_Pos)))\r
+/* -------- LCDC_OVR2CFG8 : (LCDC Offset: 0x0000028C) Overlay 2 Configuration 8 Register -------- */\r
+#define LCDC_OVR2CFG8_BMASK_Pos 0\r
+#define LCDC_OVR2CFG8_BMASK_Msk (0xffu << LCDC_OVR2CFG8_BMASK_Pos) /**< \brief (LCDC_OVR2CFG8) Blue Color Component Chroma Key Mask */\r
+#define LCDC_OVR2CFG8_BMASK(value) ((LCDC_OVR2CFG8_BMASK_Msk & ((value) << LCDC_OVR2CFG8_BMASK_Pos)))\r
+#define LCDC_OVR2CFG8_GMASK_Pos 8\r
+#define LCDC_OVR2CFG8_GMASK_Msk (0xffu << LCDC_OVR2CFG8_GMASK_Pos) /**< \brief (LCDC_OVR2CFG8) Green Color Component Chroma Key Mask */\r
+#define LCDC_OVR2CFG8_GMASK(value) ((LCDC_OVR2CFG8_GMASK_Msk & ((value) << LCDC_OVR2CFG8_GMASK_Pos)))\r
+#define LCDC_OVR2CFG8_RMASK_Pos 16\r
+#define LCDC_OVR2CFG8_RMASK_Msk (0xffu << LCDC_OVR2CFG8_RMASK_Pos) /**< \brief (LCDC_OVR2CFG8) Red Color Component Chroma Key Mask */\r
+#define LCDC_OVR2CFG8_RMASK(value) ((LCDC_OVR2CFG8_RMASK_Msk & ((value) << LCDC_OVR2CFG8_RMASK_Pos)))\r
+/* -------- LCDC_OVR2CFG9 : (LCDC Offset: 0x00000290) Overlay 2 Configuration 9 Register -------- */\r
+#define LCDC_OVR2CFG9_CRKEY (0x1u << 0) /**< \brief (LCDC_OVR2CFG9) Blender Chroma Key Enable */\r
+#define LCDC_OVR2CFG9_INV (0x1u << 1) /**< \brief (LCDC_OVR2CFG9) Blender Inverted Blender Output Enable */\r
+#define LCDC_OVR2CFG9_ITER2BL (0x1u << 2) /**< \brief (LCDC_OVR2CFG9) Blender Iterated Color Enable */\r
+#define LCDC_OVR2CFG9_ITER (0x1u << 3) /**< \brief (LCDC_OVR2CFG9) Blender Use Iterated Color */\r
+#define LCDC_OVR2CFG9_REVALPHA (0x1u << 4) /**< \brief (LCDC_OVR2CFG9) Blender Reverse Alpha */\r
+#define LCDC_OVR2CFG9_GAEN (0x1u << 5) /**< \brief (LCDC_OVR2CFG9) Blender Global Alpha Enable */\r
+#define LCDC_OVR2CFG9_LAEN (0x1u << 6) /**< \brief (LCDC_OVR2CFG9) Blender Local Alpha Enable */\r
+#define LCDC_OVR2CFG9_OVR (0x1u << 7) /**< \brief (LCDC_OVR2CFG9) Blender Overlay Layer Enable */\r
+#define LCDC_OVR2CFG9_DMA (0x1u << 8) /**< \brief (LCDC_OVR2CFG9) Blender DMA Layer Enable */\r
+#define LCDC_OVR2CFG9_REP (0x1u << 9) /**< \brief (LCDC_OVR2CFG9) Use Replication logic to expand RGB color to 24 bits */\r
+#define LCDC_OVR2CFG9_DSTKEY (0x1u << 10) /**< \brief (LCDC_OVR2CFG9) Destination Chroma Keying */\r
+#define LCDC_OVR2CFG9_GA_Pos 16\r
+#define LCDC_OVR2CFG9_GA_Msk (0xffu << LCDC_OVR2CFG9_GA_Pos) /**< \brief (LCDC_OVR2CFG9) Blender Global Alpha */\r
+#define LCDC_OVR2CFG9_GA(value) ((LCDC_OVR2CFG9_GA_Msk & ((value) << LCDC_OVR2CFG9_GA_Pos)))\r
+/* -------- LCDC_HEOCHER : (LCDC Offset: 0x00000340) High-End Overlay Channel Enable Register -------- */\r
+#define LCDC_HEOCHER_CHEN (0x1u << 0) /**< \brief (LCDC_HEOCHER) Channel Enable Register */\r
+#define LCDC_HEOCHER_UPDATEEN (0x1u << 1) /**< \brief (LCDC_HEOCHER) Update Overlay Attributes Enable Register */\r
+#define LCDC_HEOCHER_A2QEN (0x1u << 2) /**< \brief (LCDC_HEOCHER) Add Head Pointer Enable Register */\r
+/* -------- LCDC_HEOCHDR : (LCDC Offset: 0x00000344) High-End Overlay Channel Disable Register -------- */\r
+#define LCDC_HEOCHDR_CHDIS (0x1u << 0) /**< \brief (LCDC_HEOCHDR) Channel Disable Register */\r
+#define LCDC_HEOCHDR_CHRST (0x1u << 8) /**< \brief (LCDC_HEOCHDR) Channel Reset Register */\r
+/* -------- LCDC_HEOCHSR : (LCDC Offset: 0x00000348) High-End Overlay Channel Status Register -------- */\r
+#define LCDC_HEOCHSR_CHSR (0x1u << 0) /**< \brief (LCDC_HEOCHSR) Channel Status Register */\r
+#define LCDC_HEOCHSR_UPDATESR (0x1u << 1) /**< \brief (LCDC_HEOCHSR) Update Overlay Attributes In Progress */\r
+#define LCDC_HEOCHSR_A2QSR (0x1u << 2) /**< \brief (LCDC_HEOCHSR) Add To Queue Pending Register */\r
+/* -------- LCDC_HEOIER : (LCDC Offset: 0x0000034C) High-End Overlay Interrupt Enable Register -------- */\r
+#define LCDC_HEOIER_DMA (0x1u << 2) /**< \brief (LCDC_HEOIER) End of DMA Transfer Interrupt Enable Register */\r
+#define LCDC_HEOIER_DSCR (0x1u << 3) /**< \brief (LCDC_HEOIER) Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_HEOIER_ADD (0x1u << 4) /**< \brief (LCDC_HEOIER) Head Descriptor Loaded Interrupt Enable Register */\r
+#define LCDC_HEOIER_DONE (0x1u << 5) /**< \brief (LCDC_HEOIER) End of List Interrupt Enable Register */\r
+#define LCDC_HEOIER_OVR (0x1u << 6) /**< \brief (LCDC_HEOIER) Overflow Interrupt Enable Register */\r
+#define LCDC_HEOIER_UDMA (0x1u << 10) /**< \brief (LCDC_HEOIER) End of DMA Transfer for U or UV Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_UDSCR (0x1u << 11) /**< \brief (LCDC_HEOIER) Descriptor Loaded for U or UV Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_UADD (0x1u << 12) /**< \brief (LCDC_HEOIER) Head Descriptor Loaded for U or UV Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_UDONE (0x1u << 13) /**< \brief (LCDC_HEOIER) End of List for U or UV Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_UOVR (0x1u << 14) /**< \brief (LCDC_HEOIER) Overflow for U or UV Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_VDMA (0x1u << 18) /**< \brief (LCDC_HEOIER) End of DMA for V Chrominance Transfer Interrupt Enable Register */\r
+#define LCDC_HEOIER_VDSCR (0x1u << 19) /**< \brief (LCDC_HEOIER) Descriptor Loaded for V Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_VADD (0x1u << 20) /**< \brief (LCDC_HEOIER) Head Descriptor Loaded for V Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_VDONE (0x1u << 21) /**< \brief (LCDC_HEOIER) End of List for V Chrominance Interrupt Enable Register */\r
+#define LCDC_HEOIER_VOVR (0x1u << 22) /**< \brief (LCDC_HEOIER) Overflow for V Chrominance Interrupt Enable Register */\r
+/* -------- LCDC_HEOIDR : (LCDC Offset: 0x00000350) High-End Overlay Interrupt Disable Register -------- */\r
+#define LCDC_HEOIDR_DMA (0x1u << 2) /**< \brief (LCDC_HEOIDR) End of DMA Transfer Interrupt Disable Register */\r
+#define LCDC_HEOIDR_DSCR (0x1u << 3) /**< \brief (LCDC_HEOIDR) Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_HEOIDR_ADD (0x1u << 4) /**< \brief (LCDC_HEOIDR) Head Descriptor Loaded Interrupt Disable Register */\r
+#define LCDC_HEOIDR_DONE (0x1u << 5) /**< \brief (LCDC_HEOIDR) End of List Interrupt Disable Register */\r
+#define LCDC_HEOIDR_OVR (0x1u << 6) /**< \brief (LCDC_HEOIDR) Overflow Interrupt Disable Register */\r
+#define LCDC_HEOIDR_UDMA (0x1u << 10) /**< \brief (LCDC_HEOIDR) End of DMA Transfer for U or UV Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_UDSCR (0x1u << 11) /**< \brief (LCDC_HEOIDR) Descriptor Loaded for U or UV Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_UADD (0x1u << 12) /**< \brief (LCDC_HEOIDR) Head Descriptor Loaded for U or UV Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_UDONE (0x1u << 13) /**< \brief (LCDC_HEOIDR) End of List Interrupt for U or UV Chrominance Component Disable Register */\r
+#define LCDC_HEOIDR_UOVR (0x1u << 14) /**< \brief (LCDC_HEOIDR) Overflow Interrupt for U or UV Chrominance Component Disable Register */\r
+#define LCDC_HEOIDR_VDMA (0x1u << 18) /**< \brief (LCDC_HEOIDR) End of DMA Transfer for V Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_VDSCR (0x1u << 19) /**< \brief (LCDC_HEOIDR) Descriptor Loaded for V Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_VADD (0x1u << 20) /**< \brief (LCDC_HEOIDR) Head Descriptor Loaded for V Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_VDONE (0x1u << 21) /**< \brief (LCDC_HEOIDR) End of List for V Chrominance Component Interrupt Disable Register */\r
+#define LCDC_HEOIDR_VOVR (0x1u << 22) /**< \brief (LCDC_HEOIDR) Overflow for V Chrominance Component Interrupt Disable Register */\r
+/* -------- LCDC_HEOIMR : (LCDC Offset: 0x00000354) High-End Overlay Interrupt Mask Register -------- */\r
+#define LCDC_HEOIMR_DMA (0x1u << 2) /**< \brief (LCDC_HEOIMR) End of DMA Transfer Interrupt Mask Register */\r
+#define LCDC_HEOIMR_DSCR (0x1u << 3) /**< \brief (LCDC_HEOIMR) Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_HEOIMR_ADD (0x1u << 4) /**< \brief (LCDC_HEOIMR) Head Descriptor Loaded Interrupt Mask Register */\r
+#define LCDC_HEOIMR_DONE (0x1u << 5) /**< \brief (LCDC_HEOIMR) End of List Interrupt Mask Register */\r
+#define LCDC_HEOIMR_OVR (0x1u << 6) /**< \brief (LCDC_HEOIMR) Overflow Interrupt Mask Register */\r
+#define LCDC_HEOIMR_UDMA (0x1u << 10) /**< \brief (LCDC_HEOIMR) End of DMA Transfer for U or UV Chrominance Component Interrupt Mask Register */\r
+#define LCDC_HEOIMR_UDSCR (0x1u << 11) /**< \brief (LCDC_HEOIMR) Descriptor Loaded for U or UV Chrominance Component Interrupt Mask Register */\r
+#define LCDC_HEOIMR_UADD (0x1u << 12) /**< \brief (LCDC_HEOIMR) Head Descriptor Loaded for U or UV Chrominance Component Mask Register */\r
+#define LCDC_HEOIMR_UDONE (0x1u << 13) /**< \brief (LCDC_HEOIMR) End of List for U or UV Chrominance Component Mask Register */\r
+#define LCDC_HEOIMR_UOVR (0x1u << 14) /**< \brief (LCDC_HEOIMR) Overflow for U Chrominance Interrupt Mask Register */\r
+#define LCDC_HEOIMR_VDMA (0x1u << 18) /**< \brief (LCDC_HEOIMR) End of DMA Transfer for V Chrominance Component Interrupt Mask Register */\r
+#define LCDC_HEOIMR_VDSCR (0x1u << 19) /**< \brief (LCDC_HEOIMR) Descriptor Loaded for V Chrominance Component Interrupt Mask Register */\r
+#define LCDC_HEOIMR_VADD (0x1u << 20) /**< \brief (LCDC_HEOIMR) Head Descriptor Loaded for V Chrominance Component Mask Register */\r
+#define LCDC_HEOIMR_VDONE (0x1u << 21) /**< \brief (LCDC_HEOIMR) End of List for V Chrominance Component Mask Register */\r
+#define LCDC_HEOIMR_VOVR (0x1u << 22) /**< \brief (LCDC_HEOIMR) Overflow for V Chrominance Interrupt Mask Register */\r
+/* -------- LCDC_HEOISR : (LCDC Offset: 0x00000358) High-End Overlay Interrupt Status Register -------- */\r
+#define LCDC_HEOISR_DMA (0x1u << 2) /**< \brief (LCDC_HEOISR) End of DMA Transfer */\r
+#define LCDC_HEOISR_DSCR (0x1u << 3) /**< \brief (LCDC_HEOISR) DMA Descriptor Loaded */\r
+#define LCDC_HEOISR_ADD (0x1u << 4) /**< \brief (LCDC_HEOISR) Head Descriptor Loaded */\r
+#define LCDC_HEOISR_DONE (0x1u << 5) /**< \brief (LCDC_HEOISR) End of List Detected */\r
+#define LCDC_HEOISR_OVR (0x1u << 6) /**< \brief (LCDC_HEOISR) Overflow Detected */\r
+#define LCDC_HEOISR_UDMA (0x1u << 10) /**< \brief (LCDC_HEOISR) End of DMA Transfer for U component */\r
+#define LCDC_HEOISR_UDSCR (0x1u << 11) /**< \brief (LCDC_HEOISR) DMA Descriptor Loaded for U component */\r
+#define LCDC_HEOISR_UADD (0x1u << 12) /**< \brief (LCDC_HEOISR) Head Descriptor Loaded for U component */\r
+#define LCDC_HEOISR_UDONE (0x1u << 13) /**< \brief (LCDC_HEOISR) End of List Detected for U component */\r
+#define LCDC_HEOISR_UOVR (0x1u << 14) /**< \brief (LCDC_HEOISR) Overflow Detected for U component */\r
+#define LCDC_HEOISR_VDMA (0x1u << 18) /**< \brief (LCDC_HEOISR) End of DMA Transfer for V component */\r
+#define LCDC_HEOISR_VDSCR (0x1u << 19) /**< \brief (LCDC_HEOISR) DMA Descriptor Loaded for V component */\r
+#define LCDC_HEOISR_VADD (0x1u << 20) /**< \brief (LCDC_HEOISR) Head Descriptor Loaded for V component */\r
+#define LCDC_HEOISR_VDONE (0x1u << 21) /**< \brief (LCDC_HEOISR) End of List Detected for V component */\r
+#define LCDC_HEOISR_VOVR (0x1u << 22) /**< \brief (LCDC_HEOISR) Overflow Detected for V component */\r
+/* -------- LCDC_HEOHEAD : (LCDC Offset: 0x0000035C) High-End Overlay DMA Head Register -------- */\r
+#define LCDC_HEOHEAD_HEAD_Pos 2\r
+#define LCDC_HEOHEAD_HEAD_Msk (0x3fffffffu << LCDC_HEOHEAD_HEAD_Pos) /**< \brief (LCDC_HEOHEAD) DMA Head Pointer */\r
+#define LCDC_HEOHEAD_HEAD(value) ((LCDC_HEOHEAD_HEAD_Msk & ((value) << LCDC_HEOHEAD_HEAD_Pos)))\r
+/* -------- LCDC_HEOADDR : (LCDC Offset: 0x00000360) High-End Overlay DMA Address Register -------- */\r
+#define LCDC_HEOADDR_ADDR_Pos 0\r
+#define LCDC_HEOADDR_ADDR_Msk (0xffffffffu << LCDC_HEOADDR_ADDR_Pos) /**< \brief (LCDC_HEOADDR) DMA Transfer start Address */\r
+#define LCDC_HEOADDR_ADDR(value) ((LCDC_HEOADDR_ADDR_Msk & ((value) << LCDC_HEOADDR_ADDR_Pos)))\r
+/* -------- LCDC_HEOCTRL : (LCDC Offset: 0x00000364) High-End Overlay DMA Control Register -------- */\r
+#define LCDC_HEOCTRL_DFETCH (0x1u << 0) /**< \brief (LCDC_HEOCTRL) Transfer Descriptor Fetch Enable */\r
+#define LCDC_HEOCTRL_LFETCH (0x1u << 1) /**< \brief (LCDC_HEOCTRL) Lookup Table Fetch Enable */\r
+#define LCDC_HEOCTRL_DMAIEN (0x1u << 2) /**< \brief (LCDC_HEOCTRL) End of DMA Transfer Interrupt Enable */\r
+#define LCDC_HEOCTRL_DSCRIEN (0x1u << 3) /**< \brief (LCDC_HEOCTRL) Descriptor Loaded Interrupt Enable */\r
+#define LCDC_HEOCTRL_ADDIEN (0x1u << 4) /**< \brief (LCDC_HEOCTRL) Add Head Descriptor to Queue Interrupt Enable */\r
+#define LCDC_HEOCTRL_DONEIEN (0x1u << 5) /**< \brief (LCDC_HEOCTRL) End of List Interrupt Enable */\r
+/* -------- LCDC_HEONEXT : (LCDC Offset: 0x00000368) High-End Overlay DMA Next Register -------- */\r
+#define LCDC_HEONEXT_NEXT_Pos 0\r
+#define LCDC_HEONEXT_NEXT_Msk (0xffffffffu << LCDC_HEONEXT_NEXT_Pos) /**< \brief (LCDC_HEONEXT) DMA Descriptor Next Address */\r
+#define LCDC_HEONEXT_NEXT(value) ((LCDC_HEONEXT_NEXT_Msk & ((value) << LCDC_HEONEXT_NEXT_Pos)))\r
+/* -------- LCDC_HEOUHEAD : (LCDC Offset: 0x0000036C) High-End Overlay U DMA Head Register -------- */\r
+#define LCDC_HEOUHEAD_UHEAD_Pos 0\r
+#define LCDC_HEOUHEAD_UHEAD_Msk (0xffffffffu << LCDC_HEOUHEAD_UHEAD_Pos) /**< \brief (LCDC_HEOUHEAD) DMA Head Pointer */\r
+#define LCDC_HEOUHEAD_UHEAD(value) ((LCDC_HEOUHEAD_UHEAD_Msk & ((value) << LCDC_HEOUHEAD_UHEAD_Pos)))\r
+/* -------- LCDC_HEOUADDR : (LCDC Offset: 0x00000370) High-End Overlay U DMA Address Register -------- */\r
+#define LCDC_HEOUADDR_UADDR_Pos 0\r
+#define LCDC_HEOUADDR_UADDR_Msk (0xffffffffu << LCDC_HEOUADDR_UADDR_Pos) /**< \brief (LCDC_HEOUADDR) DMA Transfer Start Address for U or UV Chrominance */\r
+#define LCDC_HEOUADDR_UADDR(value) ((LCDC_HEOUADDR_UADDR_Msk & ((value) << LCDC_HEOUADDR_UADDR_Pos)))\r
+/* -------- LCDC_HEOUCTRL : (LCDC Offset: 0x00000374) High-End Overlay U DMA control Register -------- */\r
+#define LCDC_HEOUCTRL_UDFETCH (0x1u << 0) /**< \brief (LCDC_HEOUCTRL) Transfer Descriptor Fetch Enable */\r
+#define LCDC_HEOUCTRL_UDMAIEN (0x1u << 2) /**< \brief (LCDC_HEOUCTRL) End of DMA Transfer Interrupt Enable */\r
+#define LCDC_HEOUCTRL_UDSCRIEN (0x1u << 3) /**< \brief (LCDC_HEOUCTRL) Descriptor Loaded Interrupt Enable */\r
+#define LCDC_HEOUCTRL_UADDIEN (0x1u << 4) /**< \brief (LCDC_HEOUCTRL) Add Head Descriptor to Queue Interrupt Enable */\r
+#define LCDC_HEOUCTRL_UDONEIEN (0x1u << 5) /**< \brief (LCDC_HEOUCTRL) End of List Interrupt Enable */\r
+/* -------- LCDC_HEOUNEXT : (LCDC Offset: 0x00000378) High-End Overlay U DMA Next Register -------- */\r
+#define LCDC_HEOUNEXT_UNEXT_Pos 0\r
+#define LCDC_HEOUNEXT_UNEXT_Msk (0xffffffffu << LCDC_HEOUNEXT_UNEXT_Pos) /**< \brief (LCDC_HEOUNEXT) DMA Descriptor Next Address */\r
+#define LCDC_HEOUNEXT_UNEXT(value) ((LCDC_HEOUNEXT_UNEXT_Msk & ((value) << LCDC_HEOUNEXT_UNEXT_Pos)))\r
+/* -------- LCDC_HEOVHEAD : (LCDC Offset: 0x0000037C) High-End Overlay V DMA Head Register -------- */\r
+#define LCDC_HEOVHEAD_VHEAD_Pos 0\r
+#define LCDC_HEOVHEAD_VHEAD_Msk (0xffffffffu << LCDC_HEOVHEAD_VHEAD_Pos) /**< \brief (LCDC_HEOVHEAD) DMA Head Pointer */\r
+#define LCDC_HEOVHEAD_VHEAD(value) ((LCDC_HEOVHEAD_VHEAD_Msk & ((value) << LCDC_HEOVHEAD_VHEAD_Pos)))\r
+/* -------- LCDC_HEOVADDR : (LCDC Offset: 0x00000380) High-End Overlay V DMA Address Register -------- */\r
+#define LCDC_HEOVADDR_VADDR_Pos 0\r
+#define LCDC_HEOVADDR_VADDR_Msk (0xffffffffu << LCDC_HEOVADDR_VADDR_Pos) /**< \brief (LCDC_HEOVADDR) DMA Transfer Start Address for V Chrominance */\r
+#define LCDC_HEOVADDR_VADDR(value) ((LCDC_HEOVADDR_VADDR_Msk & ((value) << LCDC_HEOVADDR_VADDR_Pos)))\r
+/* -------- LCDC_HEOVCTRL : (LCDC Offset: 0x00000384) High-End Overlay V DMA control Register -------- */\r
+#define LCDC_HEOVCTRL_VDFETCH (0x1u << 0) /**< \brief (LCDC_HEOVCTRL) Transfer Descriptor Fetch Enable */\r
+#define LCDC_HEOVCTRL_VDMAIEN (0x1u << 2) /**< \brief (LCDC_HEOVCTRL) End of DMA Transfer Interrupt Enable */\r
+#define LCDC_HEOVCTRL_VDSCRIEN (0x1u << 3) /**< \brief (LCDC_HEOVCTRL) Descriptor Loaded Interrupt Enable */\r
+#define LCDC_HEOVCTRL_VADDIEN (0x1u << 4) /**< \brief (LCDC_HEOVCTRL) Add Head Descriptor to Queue Interrupt Enable */\r
+#define LCDC_HEOVCTRL_VDONEIEN (0x1u << 5) /**< \brief (LCDC_HEOVCTRL) End of List Interrupt Enable */\r
+/* -------- LCDC_HEOVNEXT : (LCDC Offset: 0x00000388) High-End Overlay VDMA Next Register -------- */\r
+#define LCDC_HEOVNEXT_VNEXT_Pos 0\r
+#define LCDC_HEOVNEXT_VNEXT_Msk (0xffffffffu << LCDC_HEOVNEXT_VNEXT_Pos) /**< \brief (LCDC_HEOVNEXT) DMA Descriptor Next Address */\r
+#define LCDC_HEOVNEXT_VNEXT(value) ((LCDC_HEOVNEXT_VNEXT_Msk & ((value) << LCDC_HEOVNEXT_VNEXT_Pos)))\r
+/* -------- LCDC_HEOCFG0 : (LCDC Offset: 0x0000038C) High-End Overlay Configuration Register 0 -------- */\r
+#define LCDC_HEOCFG0_SIF (0x1u << 0) /**< \brief (LCDC_HEOCFG0) Source Interface */\r
+#define LCDC_HEOCFG0_BLEN_Pos 4\r
+#define LCDC_HEOCFG0_BLEN_Msk (0x3u << LCDC_HEOCFG0_BLEN_Pos) /**< \brief (LCDC_HEOCFG0) AHB Burst Length */\r
+#define   LCDC_HEOCFG0_BLEN_AHB_BLEN_SINGLE (0x0u << 4) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store one data. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_HEOCFG0_BLEN_AHB_BLEN_INCR4 (0x1u << 4) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 4 data. An AHB INCR4 Burst is used. SINGLE, INCR and INCR4 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_HEOCFG0_BLEN_AHB_BLEN_INCR8 (0x2u << 4) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 8 data. An AHB INCR8 Burst is used. SINGLE, INCR, INCR4 and INCR8 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_HEOCFG0_BLEN_AHB_BLEN_INCR16 (0x3u << 4) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 16 data. An AHB INCR16 Burst is used. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define LCDC_HEOCFG0_BLENUV_Pos 6\r
+#define LCDC_HEOCFG0_BLENUV_Msk (0x3u << LCDC_HEOCFG0_BLENUV_Pos) /**< \brief (LCDC_HEOCFG0) AHB Burst Length for U-V channel */\r
+#define   LCDC_HEOCFG0_BLENUV_AHB_SINGLE (0x0u << 6) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store one data. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_HEOCFG0_BLENUV_AHB_INCR4 (0x1u << 6) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 4 data. An AHB INCR4 Burst is used. SINGLE, INCR and INCR4 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_HEOCFG0_BLENUV_AHB_INCR8 (0x2u << 6) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 8 data. An AHB INCR8 Burst is used. SINGLE, INCR, INCR4 and INCR8 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define   LCDC_HEOCFG0_BLENUV_AHB_INCR16 (0x3u << 6) /**< \brief (LCDC_HEOCFG0) AHB Access is started as soon as there is enough space in the FIFO to store a total amount of 16 data. An AHB INCR16 Burst is used. SINGLE, INCR, INCR4, INCR8 and INCR16 bursts are used. INCR is used for a burst of 2 and 3 beats. */\r
+#define LCDC_HEOCFG0_DLBO (0x1u << 8) /**< \brief (LCDC_HEOCFG0) Defined Length Burst Only For Channel Bus Transaction. */\r
+#define LCDC_HEOCFG0_ROTDIS (0x1u << 12) /**< \brief (LCDC_HEOCFG0) Hardware Rotation Optimization Disable */\r
+#define LCDC_HEOCFG0_LOCKDIS (0x1u << 13) /**< \brief (LCDC_HEOCFG0) Hardware Rotation Lock Disable */\r
+/* -------- LCDC_HEOCFG1 : (LCDC Offset: 0x00000390) High-End Overlay Configuration Register 1 -------- */\r
+#define LCDC_HEOCFG1_CLUTEN (0x1u << 0) /**< \brief (LCDC_HEOCFG1) Color Lookup Table Enable */\r
+#define LCDC_HEOCFG1_YUVEN (0x1u << 1) /**< \brief (LCDC_HEOCFG1) YUV Color Space Enable */\r
+#define LCDC_HEOCFG1_RGBMODE_Pos 4\r
+#define LCDC_HEOCFG1_RGBMODE_Msk (0xfu << LCDC_HEOCFG1_RGBMODE_Pos) /**< \brief (LCDC_HEOCFG1) RGB input mode selection */\r
+#define   LCDC_HEOCFG1_RGBMODE_12BPP_RGB_444 (0x0u << 4) /**< \brief (LCDC_HEOCFG1) 12 bpp RGB 444 */\r
+#define   LCDC_HEOCFG1_RGBMODE_16BPP_ARGB_4444 (0x1u << 4) /**< \brief (LCDC_HEOCFG1) 16 bpp ARGB 4444 */\r
+#define   LCDC_HEOCFG1_RGBMODE_16BPP_RGBA_4444 (0x2u << 4) /**< \brief (LCDC_HEOCFG1) 16 bpp RGBA 4444 */\r
+#define   LCDC_HEOCFG1_RGBMODE_16BPP_RGB_565 (0x3u << 4) /**< \brief (LCDC_HEOCFG1) 16 bpp RGB 565 */\r
+#define   LCDC_HEOCFG1_RGBMODE_16BPP_TRGB_1555 (0x4u << 4) /**< \brief (LCDC_HEOCFG1) 16 bpp TRGB 1555 */\r
+#define   LCDC_HEOCFG1_RGBMODE_18BPP_RGB_666 (0x5u << 4) /**< \brief (LCDC_HEOCFG1) 18 bpp RGB 666 */\r
+#define   LCDC_HEOCFG1_RGBMODE_18BPP_RGB_666PACKED (0x6u << 4) /**< \brief (LCDC_HEOCFG1) 18 bpp RGB 666 PACKED */\r
+#define   LCDC_HEOCFG1_RGBMODE_19BPP_TRGB_1666 (0x7u << 4) /**< \brief (LCDC_HEOCFG1) 19 bpp TRGB 1666 */\r
+#define   LCDC_HEOCFG1_RGBMODE_19BPP_TRGB_PACKED (0x8u << 4) /**< \brief (LCDC_HEOCFG1) 19 bpp TRGB 1666 PACKED */\r
+#define   LCDC_HEOCFG1_RGBMODE_24BPP_RGB_888 (0x9u << 4) /**< \brief (LCDC_HEOCFG1) 24 bpp RGB 888 */\r
+#define   LCDC_HEOCFG1_RGBMODE_24BPP_RGB_888_PACKED (0xAu << 4) /**< \brief (LCDC_HEOCFG1) 24 bpp RGB 888 PACKED */\r
+#define   LCDC_HEOCFG1_RGBMODE_25BPP_TRGB_1888 (0xBu << 4) /**< \brief (LCDC_HEOCFG1) 25 bpp TRGB 1888 */\r
+#define   LCDC_HEOCFG1_RGBMODE_32BPP_ARGB_8888 (0xCu << 4) /**< \brief (LCDC_HEOCFG1) 32 bpp ARGB 8888 */\r
+#define   LCDC_HEOCFG1_RGBMODE_32BPP_RGBA_8888 (0xDu << 4) /**< \brief (LCDC_HEOCFG1) 32 bpp RGBA 8888 */\r
+#define LCDC_HEOCFG1_CLUTMODE_Pos 8\r
+#define LCDC_HEOCFG1_CLUTMODE_Msk (0x3u << LCDC_HEOCFG1_CLUTMODE_Pos) /**< \brief (LCDC_HEOCFG1) Color Lookup table input mode selection */\r
+#define   LCDC_HEOCFG1_CLUTMODE_CLUT_1BPP (0x0u << 8) /**< \brief (LCDC_HEOCFG1) color lookup table mode set to 1 bit per pixel */\r
+#define   LCDC_HEOCFG1_CLUTMODE_CLUT_2BPP (0x1u << 8) /**< \brief (LCDC_HEOCFG1) color lookup table mode set to 2 bits per pixel */\r
+#define   LCDC_HEOCFG1_CLUTMODE_CLUT_4BPP (0x2u << 8) /**< \brief (LCDC_HEOCFG1) color lookup table mode set to 4 bits per pixel */\r
+#define   LCDC_HEOCFG1_CLUTMODE_CLUT_8BPP (0x3u << 8) /**< \brief (LCDC_HEOCFG1) color lookup table mode set to 8 bits per pixel */\r
+#define LCDC_HEOCFG1_YUVMODE_Pos 12\r
+#define LCDC_HEOCFG1_YUVMODE_Msk (0xfu << LCDC_HEOCFG1_YUVMODE_Pos) /**< \brief (LCDC_HEOCFG1) YUV input mode selection */\r
+#define   LCDC_HEOCFG1_YUVMODE_32BPP_AYCBCR (0x0u << 12) /**< \brief (LCDC_HEOCFG1) 32 bpp AYCbCr 444 */\r
+#define   LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE0 (0x1u << 12) /**< \brief (LCDC_HEOCFG1) 16 bpp Cr(n)Y(n+1)Cb(n)Y(n) 422 */\r
+#define   LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE1 (0x2u << 12) /**< \brief (LCDC_HEOCFG1) 16 bpp Y(n+1)Cr(n)Y(n)Cb(n) 422 */\r
+#define   LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE2 (0x3u << 12) /**< \brief (LCDC_HEOCFG1) 16 bpp Cb(n)Y(+1)Cr(n)Y(n) 422 */\r
+#define   LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_MODE3 (0x4u << 12) /**< \brief (LCDC_HEOCFG1) 16 bpp Y(n+1)Cb(n)Y(n)Cr(n) 422 */\r
+#define   LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_SEMIPLANAR (0x5u << 12) /**< \brief (LCDC_HEOCFG1) 16 bpp Semiplanar 422 YCbCr */\r
+#define   LCDC_HEOCFG1_YUVMODE_16BPP_YCBCR_PLANAR (0x6u << 12) /**< \brief (LCDC_HEOCFG1) 16 bpp Planar 422 YCbCr */\r
+#define   LCDC_HEOCFG1_YUVMODE_12BPP_YCBCR_SEMIPLANAR (0x7u << 12) /**< \brief (LCDC_HEOCFG1) 12 bpp Semiplanar 420 YCbCr */\r
+#define   LCDC_HEOCFG1_YUVMODE_12BPP_YCBCR_PLANAR (0x8u << 12) /**< \brief (LCDC_HEOCFG1) 12 bpp Planar 420 YCbCr */\r
+#define LCDC_HEOCFG1_YUV422ROT (0x1u << 16) /**< \brief (LCDC_HEOCFG1) YUV 4:2:2 Rotation */\r
+#define LCDC_HEOCFG1_YUV422SWP (0x1u << 17) /**< \brief (LCDC_HEOCFG1) YUV 4:2:2 SWAP */\r
+#define LCDC_HEOCFG1_DSCALEOPT (0x1u << 20) /**< \brief (LCDC_HEOCFG1) Down Scaling Bandwidth Optimization */\r
+/* -------- LCDC_HEOCFG2 : (LCDC Offset: 0x00000394) High-End Overlay Configuration Register 2 -------- */\r
+#define LCDC_HEOCFG2_XPOS_Pos 0\r
+#define LCDC_HEOCFG2_XPOS_Msk (0x7ffu << LCDC_HEOCFG2_XPOS_Pos) /**< \brief (LCDC_HEOCFG2) Horizontal Window Position */\r
+#define LCDC_HEOCFG2_XPOS(value) ((LCDC_HEOCFG2_XPOS_Msk & ((value) << LCDC_HEOCFG2_XPOS_Pos)))\r
+#define LCDC_HEOCFG2_YPOS_Pos 16\r
+#define LCDC_HEOCFG2_YPOS_Msk (0x7ffu << LCDC_HEOCFG2_YPOS_Pos) /**< \brief (LCDC_HEOCFG2) Vertical Window Position */\r
+#define LCDC_HEOCFG2_YPOS(value) ((LCDC_HEOCFG2_YPOS_Msk & ((value) << LCDC_HEOCFG2_YPOS_Pos)))\r
+/* -------- LCDC_HEOCFG3 : (LCDC Offset: 0x00000398) High-End Overlay Configuration Register 3 -------- */\r
+#define LCDC_HEOCFG3_XSIZE_Pos 0\r
+#define LCDC_HEOCFG3_XSIZE_Msk (0x7ffu << LCDC_HEOCFG3_XSIZE_Pos) /**< \brief (LCDC_HEOCFG3) Horizontal Window Size */\r
+#define LCDC_HEOCFG3_XSIZE(value) ((LCDC_HEOCFG3_XSIZE_Msk & ((value) << LCDC_HEOCFG3_XSIZE_Pos)))\r
+#define LCDC_HEOCFG3_YSIZE_Pos 16\r
+#define LCDC_HEOCFG3_YSIZE_Msk (0x7ffu << LCDC_HEOCFG3_YSIZE_Pos) /**< \brief (LCDC_HEOCFG3) Vertical Window Size */\r
+#define LCDC_HEOCFG3_YSIZE(value) ((LCDC_HEOCFG3_YSIZE_Msk & ((value) << LCDC_HEOCFG3_YSIZE_Pos)))\r
+/* -------- LCDC_HEOCFG4 : (LCDC Offset: 0x0000039C) High-End Overlay Configuration Register 4 -------- */\r
+#define LCDC_HEOCFG4_XMEMSIZE_Pos 0\r
+#define LCDC_HEOCFG4_XMEMSIZE_Msk (0x7ffu << LCDC_HEOCFG4_XMEMSIZE_Pos) /**< \brief (LCDC_HEOCFG4) Horizontal image Size in Memory */\r
+#define LCDC_HEOCFG4_XMEMSIZE(value) ((LCDC_HEOCFG4_XMEMSIZE_Msk & ((value) << LCDC_HEOCFG4_XMEMSIZE_Pos)))\r
+#define LCDC_HEOCFG4_YMEMSIZE_Pos 16\r
+#define LCDC_HEOCFG4_YMEMSIZE_Msk (0x7ffu << LCDC_HEOCFG4_YMEMSIZE_Pos) /**< \brief (LCDC_HEOCFG4) Vertical image Size in Memory */\r
+#define LCDC_HEOCFG4_YMEMSIZE(value) ((LCDC_HEOCFG4_YMEMSIZE_Msk & ((value) << LCDC_HEOCFG4_YMEMSIZE_Pos)))\r
+/* -------- LCDC_HEOCFG5 : (LCDC Offset: 0x000003A0) High-End Overlay Configuration Register 5 -------- */\r
+#define LCDC_HEOCFG5_XSTRIDE_Pos 0\r
+#define LCDC_HEOCFG5_XSTRIDE_Msk (0xffffffffu << LCDC_HEOCFG5_XSTRIDE_Pos) /**< \brief (LCDC_HEOCFG5) Horizontal Stride */\r
+#define LCDC_HEOCFG5_XSTRIDE(value) ((LCDC_HEOCFG5_XSTRIDE_Msk & ((value) << LCDC_HEOCFG5_XSTRIDE_Pos)))\r
+/* -------- LCDC_HEOCFG6 : (LCDC Offset: 0x000003A4) High-End Overlay Configuration Register 6 -------- */\r
+#define LCDC_HEOCFG6_PSTRIDE_Pos 0\r
+#define LCDC_HEOCFG6_PSTRIDE_Msk (0xffffffffu << LCDC_HEOCFG6_PSTRIDE_Pos) /**< \brief (LCDC_HEOCFG6) Pixel Stride */\r
+#define LCDC_HEOCFG6_PSTRIDE(value) ((LCDC_HEOCFG6_PSTRIDE_Msk & ((value) << LCDC_HEOCFG6_PSTRIDE_Pos)))\r
+/* -------- LCDC_HEOCFG7 : (LCDC Offset: 0x000003A8) High-End Overlay Configuration Register 7 -------- */\r
+#define LCDC_HEOCFG7_UVXSTRIDE_Pos 0\r
+#define LCDC_HEOCFG7_UVXSTRIDE_Msk (0xffffffffu << LCDC_HEOCFG7_UVXSTRIDE_Pos) /**< \brief (LCDC_HEOCFG7) UV Horizontal Stride */\r
+#define LCDC_HEOCFG7_UVXSTRIDE(value) ((LCDC_HEOCFG7_UVXSTRIDE_Msk & ((value) << LCDC_HEOCFG7_UVXSTRIDE_Pos)))\r
+/* -------- LCDC_HEOCFG8 : (LCDC Offset: 0x000003AC) High-End Overlay Configuration Register 8 -------- */\r
+#define LCDC_HEOCFG8_UVPSTRIDE_Pos 0\r
+#define LCDC_HEOCFG8_UVPSTRIDE_Msk (0xffffffffu << LCDC_HEOCFG8_UVPSTRIDE_Pos) /**< \brief (LCDC_HEOCFG8) UV Pixel Stride */\r
+#define LCDC_HEOCFG8_UVPSTRIDE(value) ((LCDC_HEOCFG8_UVPSTRIDE_Msk & ((value) << LCDC_HEOCFG8_UVPSTRIDE_Pos)))\r
+/* -------- LCDC_HEOCFG9 : (LCDC Offset: 0x000003B0) High-End Overlay Configuration Register 9 -------- */\r
+#define LCDC_HEOCFG9_BDEF_Pos 0\r
+#define LCDC_HEOCFG9_BDEF_Msk (0xffu << LCDC_HEOCFG9_BDEF_Pos) /**< \brief (LCDC_HEOCFG9) Blue Default */\r
+#define LCDC_HEOCFG9_BDEF(value) ((LCDC_HEOCFG9_BDEF_Msk & ((value) << LCDC_HEOCFG9_BDEF_Pos)))\r
+#define LCDC_HEOCFG9_GDEF_Pos 8\r
+#define LCDC_HEOCFG9_GDEF_Msk (0xffu << LCDC_HEOCFG9_GDEF_Pos) /**< \brief (LCDC_HEOCFG9) Green Default */\r
+#define LCDC_HEOCFG9_GDEF(value) ((LCDC_HEOCFG9_GDEF_Msk & ((value) << LCDC_HEOCFG9_GDEF_Pos)))\r
+#define LCDC_HEOCFG9_RDEF_Pos 16\r
+#define LCDC_HEOCFG9_RDEF_Msk (0xffu << LCDC_HEOCFG9_RDEF_Pos) /**< \brief (LCDC_HEOCFG9) Red Default */\r
+#define LCDC_HEOCFG9_RDEF(value) ((LCDC_HEOCFG9_RDEF_Msk & ((value) << LCDC_HEOCFG9_RDEF_Pos)))\r
+/* -------- LCDC_HEOCFG10 : (LCDC Offset: 0x000003B4) High-End Overlay Configuration Register 10 -------- */\r
+#define LCDC_HEOCFG10_BKEY_Pos 0\r
+#define LCDC_HEOCFG10_BKEY_Msk (0xffu << LCDC_HEOCFG10_BKEY_Pos) /**< \brief (LCDC_HEOCFG10) Blue Color Component Chroma Key */\r
+#define LCDC_HEOCFG10_BKEY(value) ((LCDC_HEOCFG10_BKEY_Msk & ((value) << LCDC_HEOCFG10_BKEY_Pos)))\r
+#define LCDC_HEOCFG10_GKEY_Pos 8\r
+#define LCDC_HEOCFG10_GKEY_Msk (0xffu << LCDC_HEOCFG10_GKEY_Pos) /**< \brief (LCDC_HEOCFG10) Green Color Component Chroma Key */\r
+#define LCDC_HEOCFG10_GKEY(value) ((LCDC_HEOCFG10_GKEY_Msk & ((value) << LCDC_HEOCFG10_GKEY_Pos)))\r
+#define LCDC_HEOCFG10_RKEY_Pos 16\r
+#define LCDC_HEOCFG10_RKEY_Msk (0xffu << LCDC_HEOCFG10_RKEY_Pos) /**< \brief (LCDC_HEOCFG10) Red Color Component Chroma Key */\r
+#define LCDC_HEOCFG10_RKEY(value) ((LCDC_HEOCFG10_RKEY_Msk & ((value) << LCDC_HEOCFG10_RKEY_Pos)))\r
+/* -------- LCDC_HEOCFG11 : (LCDC Offset: 0x000003B8) High-End Overlay Configuration Register 11 -------- */\r
+#define LCDC_HEOCFG11_BMASK_Pos 0\r
+#define LCDC_HEOCFG11_BMASK_Msk (0xffu << LCDC_HEOCFG11_BMASK_Pos) /**< \brief (LCDC_HEOCFG11) Blue Color Component Chroma Key Mask */\r
+#define LCDC_HEOCFG11_BMASK(value) ((LCDC_HEOCFG11_BMASK_Msk & ((value) << LCDC_HEOCFG11_BMASK_Pos)))\r
+#define LCDC_HEOCFG11_GMASK_Pos 8\r
+#define LCDC_HEOCFG11_GMASK_Msk (0xffu << LCDC_HEOCFG11_GMASK_Pos) /**< \brief (LCDC_HEOCFG11) Green Color Component Chroma Key Mask */\r
+#define LCDC_HEOCFG11_GMASK(value) ((LCDC_HEOCFG11_GMASK_Msk & ((value) << LCDC_HEOCFG11_GMASK_Pos)))\r
+#define LCDC_HEOCFG11_RMASK_Pos 16\r
+#define LCDC_HEOCFG11_RMASK_Msk (0xffu << LCDC_HEOCFG11_RMASK_Pos) /**< \brief (LCDC_HEOCFG11) Red Color Component Chroma Key Mask */\r
+#define LCDC_HEOCFG11_RMASK(value) ((LCDC_HEOCFG11_RMASK_Msk & ((value) << LCDC_HEOCFG11_RMASK_Pos)))\r
+/* -------- LCDC_HEOCFG12 : (LCDC Offset: 0x000003BC) High-End Overlay Configuration Register 12 -------- */\r
+#define LCDC_HEOCFG12_CRKEY (0x1u << 0) /**< \brief (LCDC_HEOCFG12) Blender Chroma Key Enable */\r
+#define LCDC_HEOCFG12_INV (0x1u << 1) /**< \brief (LCDC_HEOCFG12) Blender Inverted Blender Output Enable */\r
+#define LCDC_HEOCFG12_ITER2BL (0x1u << 2) /**< \brief (LCDC_HEOCFG12) Blender Iterated Color Enable */\r
+#define LCDC_HEOCFG12_ITER (0x1u << 3) /**< \brief (LCDC_HEOCFG12) Blender Use Iterated Color */\r
+#define LCDC_HEOCFG12_REVALPHA (0x1u << 4) /**< \brief (LCDC_HEOCFG12) Blender Reverse Alpha */\r
+#define LCDC_HEOCFG12_GAEN (0x1u << 5) /**< \brief (LCDC_HEOCFG12) Blender Global Alpha Enable */\r
+#define LCDC_HEOCFG12_LAEN (0x1u << 6) /**< \brief (LCDC_HEOCFG12) Blender Local Alpha Enable */\r
+#define LCDC_HEOCFG12_OVR (0x1u << 7) /**< \brief (LCDC_HEOCFG12) Blender Overlay Layer Enable */\r
+#define LCDC_HEOCFG12_DMA (0x1u << 8) /**< \brief (LCDC_HEOCFG12) Blender DMA Layer Enable */\r
+#define LCDC_HEOCFG12_REP (0x1u << 9) /**< \brief (LCDC_HEOCFG12) Use Replication logic to expand RGB color to 24 bits */\r
+#define LCDC_HEOCFG12_DSTKEY (0x1u << 10) /**< \brief (LCDC_HEOCFG12) Destination Chroma Keying */\r
+#define LCDC_HEOCFG12_VIDPRI (0x1u << 12) /**< \brief (LCDC_HEOCFG12) Video Priority */\r
+#define LCDC_HEOCFG12_GA_Pos 16\r
+#define LCDC_HEOCFG12_GA_Msk (0xffu << LCDC_HEOCFG12_GA_Pos) /**< \brief (LCDC_HEOCFG12) Blender Global Alpha */\r
+#define LCDC_HEOCFG12_GA(value) ((LCDC_HEOCFG12_GA_Msk & ((value) << LCDC_HEOCFG12_GA_Pos)))\r
+/* -------- LCDC_HEOCFG13 : (LCDC Offset: 0x000003C0) High-End Overlay Configuration Register 13 -------- */\r
+#define LCDC_HEOCFG13_XFACTOR_Pos 0\r
+#define LCDC_HEOCFG13_XFACTOR_Msk (0x3fffu << LCDC_HEOCFG13_XFACTOR_Pos) /**< \brief (LCDC_HEOCFG13) Horizontal Scaling Factor */\r
+#define LCDC_HEOCFG13_XFACTOR(value) ((LCDC_HEOCFG13_XFACTOR_Msk & ((value) << LCDC_HEOCFG13_XFACTOR_Pos)))\r
+#define LCDC_HEOCFG13_YFACTOR_Pos 16\r
+#define LCDC_HEOCFG13_YFACTOR_Msk (0x3fffu << LCDC_HEOCFG13_YFACTOR_Pos) /**< \brief (LCDC_HEOCFG13) Vertical Scaling Factor */\r
+#define LCDC_HEOCFG13_YFACTOR(value) ((LCDC_HEOCFG13_YFACTOR_Msk & ((value) << LCDC_HEOCFG13_YFACTOR_Pos)))\r
+#define LCDC_HEOCFG13_SCALEN (0x1u << 31) /**< \brief (LCDC_HEOCFG13) Hardware Scaler Enable */\r
+/* -------- LCDC_HEOCFG14 : (LCDC Offset: 0x000003C4) High-End Overlay Configuration Register 14 -------- */\r
+#define LCDC_HEOCFG14_CSCRY_Pos 0\r
+#define LCDC_HEOCFG14_CSCRY_Msk (0x3ffu << LCDC_HEOCFG14_CSCRY_Pos) /**< \brief (LCDC_HEOCFG14) Color Space Conversion Y coefficient for Red Component 1:2:7 format */\r
+#define LCDC_HEOCFG14_CSCRY(value) ((LCDC_HEOCFG14_CSCRY_Msk & ((value) << LCDC_HEOCFG14_CSCRY_Pos)))\r
+#define LCDC_HEOCFG14_CSCRU_Pos 10\r
+#define LCDC_HEOCFG14_CSCRU_Msk (0x3ffu << LCDC_HEOCFG14_CSCRU_Pos) /**< \brief (LCDC_HEOCFG14) Color Space Conversion U coefficient for Red Component 1:2:7 format */\r
+#define LCDC_HEOCFG14_CSCRU(value) ((LCDC_HEOCFG14_CSCRU_Msk & ((value) << LCDC_HEOCFG14_CSCRU_Pos)))\r
+#define LCDC_HEOCFG14_CSCRV_Pos 20\r
+#define LCDC_HEOCFG14_CSCRV_Msk (0x3ffu << LCDC_HEOCFG14_CSCRV_Pos) /**< \brief (LCDC_HEOCFG14) Color Space Conversion V coefficient for Red Component 1:2:7 format */\r
+#define LCDC_HEOCFG14_CSCRV(value) ((LCDC_HEOCFG14_CSCRV_Msk & ((value) << LCDC_HEOCFG14_CSCRV_Pos)))\r
+#define LCDC_HEOCFG14_CSCYOFF (0x1u << 30) /**< \brief (LCDC_HEOCFG14) Color Space Conversion Offset */\r
+/* -------- LCDC_HEOCFG15 : (LCDC Offset: 0x000003C8) High-End Overlay Configuration Register 15 -------- */\r
+#define LCDC_HEOCFG15_CSCGY_Pos 0\r
+#define LCDC_HEOCFG15_CSCGY_Msk (0x3ffu << LCDC_HEOCFG15_CSCGY_Pos) /**< \brief (LCDC_HEOCFG15) Color Space Conversion Y coefficient for Green Component 1:2:7 format */\r
+#define LCDC_HEOCFG15_CSCGY(value) ((LCDC_HEOCFG15_CSCGY_Msk & ((value) << LCDC_HEOCFG15_CSCGY_Pos)))\r
+#define LCDC_HEOCFG15_CSCGU_Pos 10\r
+#define LCDC_HEOCFG15_CSCGU_Msk (0x3ffu << LCDC_HEOCFG15_CSCGU_Pos) /**< \brief (LCDC_HEOCFG15) Color Space Conversion U coefficient for Green Component 1:2:7 format */\r
+#define LCDC_HEOCFG15_CSCGU(value) ((LCDC_HEOCFG15_CSCGU_Msk & ((value) << LCDC_HEOCFG15_CSCGU_Pos)))\r
+#define LCDC_HEOCFG15_CSCGV_Pos 20\r
+#define LCDC_HEOCFG15_CSCGV_Msk (0x3ffu << LCDC_HEOCFG15_CSCGV_Pos) /**< \brief (LCDC_HEOCFG15) Color Space Conversion V coefficient for Green Component 1:2:7 format */\r
+#define LCDC_HEOCFG15_CSCGV(value) ((LCDC_HEOCFG15_CSCGV_Msk & ((value) << LCDC_HEOCFG15_CSCGV_Pos)))\r
+#define LCDC_HEOCFG15_CSCUOFF (0x1u << 30) /**< \brief (LCDC_HEOCFG15) Color Space Conversion Offset */\r
+/* -------- LCDC_HEOCFG16 : (LCDC Offset: 0x000003CC) High-End Overlay Configuration Register 16 -------- */\r
+#define LCDC_HEOCFG16_CSCBY_Pos 0\r
+#define LCDC_HEOCFG16_CSCBY_Msk (0x3ffu << LCDC_HEOCFG16_CSCBY_Pos) /**< \brief (LCDC_HEOCFG16) Color Space Conversion Y coefficient for Blue Component 1:2:7 format */\r
+#define LCDC_HEOCFG16_CSCBY(value) ((LCDC_HEOCFG16_CSCBY_Msk & ((value) << LCDC_HEOCFG16_CSCBY_Pos)))\r
+#define LCDC_HEOCFG16_CSCBU_Pos 10\r
+#define LCDC_HEOCFG16_CSCBU_Msk (0x3ffu << LCDC_HEOCFG16_CSCBU_Pos) /**< \brief (LCDC_HEOCFG16) Color Space Conversion U coefficient for Blue Component 1:2:7 format */\r
+#define LCDC_HEOCFG16_CSCBU(value) ((LCDC_HEOCFG16_CSCBU_Msk & ((value) << LCDC_HEOCFG16_CSCBU_Pos)))\r
+#define LCDC_HEOCFG16_CSCBV_Pos 20\r
+#define LCDC_HEOCFG16_CSCBV_Msk (0x3ffu << LCDC_HEOCFG16_CSCBV_Pos) /**< \brief (LCDC_HEOCFG16) Color Space Conversion V coefficient for Blue Component 1:2:7 format */\r
+#define LCDC_HEOCFG16_CSCBV(value) ((LCDC_HEOCFG16_CSCBV_Msk & ((value) << LCDC_HEOCFG16_CSCBV_Pos)))\r
+#define LCDC_HEOCFG16_CSCVOFF (0x1u << 30) /**< \brief (LCDC_HEOCFG16) Color Space Conversion Offset */\r
+/* -------- LCDC_HEOCFG17 : (LCDC Offset: 0x000003D0) High-End Overlay Configuration Register 17 -------- */\r
+#define LCDC_HEOCFG17_XPHI0COEFF0_Pos 0\r
+#define LCDC_HEOCFG17_XPHI0COEFF0_Msk (0xffu << LCDC_HEOCFG17_XPHI0COEFF0_Pos) /**< \brief (LCDC_HEOCFG17) Horizontal Coefficient for phase 0 tap 0 */\r
+#define LCDC_HEOCFG17_XPHI0COEFF0(value) ((LCDC_HEOCFG17_XPHI0COEFF0_Msk & ((value) << LCDC_HEOCFG17_XPHI0COEFF0_Pos)))\r
+#define LCDC_HEOCFG17_XPHI0COEFF1_Pos 8\r
+#define LCDC_HEOCFG17_XPHI0COEFF1_Msk (0xffu << LCDC_HEOCFG17_XPHI0COEFF1_Pos) /**< \brief (LCDC_HEOCFG17) Horizontal Coefficient for phase 0 tap 1 */\r
+#define LCDC_HEOCFG17_XPHI0COEFF1(value) ((LCDC_HEOCFG17_XPHI0COEFF1_Msk & ((value) << LCDC_HEOCFG17_XPHI0COEFF1_Pos)))\r
+#define LCDC_HEOCFG17_XPHI0COEFF2_Pos 16\r
+#define LCDC_HEOCFG17_XPHI0COEFF2_Msk (0xffu << LCDC_HEOCFG17_XPHI0COEFF2_Pos) /**< \brief (LCDC_HEOCFG17) Horizontal Coefficient for phase 0 tap 2 */\r
+#define LCDC_HEOCFG17_XPHI0COEFF2(value) ((LCDC_HEOCFG17_XPHI0COEFF2_Msk & ((value) << LCDC_HEOCFG17_XPHI0COEFF2_Pos)))\r
+#define LCDC_HEOCFG17_XPHI0COEFF3_Pos 24\r
+#define LCDC_HEOCFG17_XPHI0COEFF3_Msk (0xffu << LCDC_HEOCFG17_XPHI0COEFF3_Pos) /**< \brief (LCDC_HEOCFG17) Horizontal Coefficient for phase 0 tap 3 */\r
+#define LCDC_HEOCFG17_XPHI0COEFF3(value) ((LCDC_HEOCFG17_XPHI0COEFF3_Msk & ((value) << LCDC_HEOCFG17_XPHI0COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG18 : (LCDC Offset: 0x000003D4) High-End Overlay Configuration Register 18 -------- */\r
+#define LCDC_HEOCFG18_XPHI0COEFF4_Pos 0\r
+#define LCDC_HEOCFG18_XPHI0COEFF4_Msk (0xffu << LCDC_HEOCFG18_XPHI0COEFF4_Pos) /**< \brief (LCDC_HEOCFG18) Horizontal Coefficient for phase 0 tap 4 */\r
+#define LCDC_HEOCFG18_XPHI0COEFF4(value) ((LCDC_HEOCFG18_XPHI0COEFF4_Msk & ((value) << LCDC_HEOCFG18_XPHI0COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG19 : (LCDC Offset: 0x000003D8) High-End Overlay Configuration Register 19 -------- */\r
+#define LCDC_HEOCFG19_XPHI1COEFF0_Pos 0\r
+#define LCDC_HEOCFG19_XPHI1COEFF0_Msk (0xffu << LCDC_HEOCFG19_XPHI1COEFF0_Pos) /**< \brief (LCDC_HEOCFG19) Horizontal Coefficient for phase 1 tap 0 */\r
+#define LCDC_HEOCFG19_XPHI1COEFF0(value) ((LCDC_HEOCFG19_XPHI1COEFF0_Msk & ((value) << LCDC_HEOCFG19_XPHI1COEFF0_Pos)))\r
+#define LCDC_HEOCFG19_XPHI1COEFF1_Pos 8\r
+#define LCDC_HEOCFG19_XPHI1COEFF1_Msk (0xffu << LCDC_HEOCFG19_XPHI1COEFF1_Pos) /**< \brief (LCDC_HEOCFG19) Horizontal Coefficient for phase 1 tap 1 */\r
+#define LCDC_HEOCFG19_XPHI1COEFF1(value) ((LCDC_HEOCFG19_XPHI1COEFF1_Msk & ((value) << LCDC_HEOCFG19_XPHI1COEFF1_Pos)))\r
+#define LCDC_HEOCFG19_XPHI1COEFF2_Pos 16\r
+#define LCDC_HEOCFG19_XPHI1COEFF2_Msk (0xffu << LCDC_HEOCFG19_XPHI1COEFF2_Pos) /**< \brief (LCDC_HEOCFG19) Horizontal Coefficient for phase 1 tap 2 */\r
+#define LCDC_HEOCFG19_XPHI1COEFF2(value) ((LCDC_HEOCFG19_XPHI1COEFF2_Msk & ((value) << LCDC_HEOCFG19_XPHI1COEFF2_Pos)))\r
+#define LCDC_HEOCFG19_XPHI1COEFF3_Pos 24\r
+#define LCDC_HEOCFG19_XPHI1COEFF3_Msk (0xffu << LCDC_HEOCFG19_XPHI1COEFF3_Pos) /**< \brief (LCDC_HEOCFG19) Horizontal Coefficient for phase 1 tap 3 */\r
+#define LCDC_HEOCFG19_XPHI1COEFF3(value) ((LCDC_HEOCFG19_XPHI1COEFF3_Msk & ((value) << LCDC_HEOCFG19_XPHI1COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG20 : (LCDC Offset: 0x000003DC) High-End Overlay Configuration Register 20 -------- */\r
+#define LCDC_HEOCFG20_XPHI1COEFF4_Pos 0\r
+#define LCDC_HEOCFG20_XPHI1COEFF4_Msk (0xffu << LCDC_HEOCFG20_XPHI1COEFF4_Pos) /**< \brief (LCDC_HEOCFG20) Horizontal Coefficient for phase 1 tap 4 */\r
+#define LCDC_HEOCFG20_XPHI1COEFF4(value) ((LCDC_HEOCFG20_XPHI1COEFF4_Msk & ((value) << LCDC_HEOCFG20_XPHI1COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG21 : (LCDC Offset: 0x000003E0) High-End Overlay Configuration Register 21 -------- */\r
+#define LCDC_HEOCFG21_XPHI2COEFF0_Pos 0\r
+#define LCDC_HEOCFG21_XPHI2COEFF0_Msk (0xffu << LCDC_HEOCFG21_XPHI2COEFF0_Pos) /**< \brief (LCDC_HEOCFG21) Horizontal Coefficient for phase 2 tap 0 */\r
+#define LCDC_HEOCFG21_XPHI2COEFF0(value) ((LCDC_HEOCFG21_XPHI2COEFF0_Msk & ((value) << LCDC_HEOCFG21_XPHI2COEFF0_Pos)))\r
+#define LCDC_HEOCFG21_XPHI2COEFF1_Pos 8\r
+#define LCDC_HEOCFG21_XPHI2COEFF1_Msk (0xffu << LCDC_HEOCFG21_XPHI2COEFF1_Pos) /**< \brief (LCDC_HEOCFG21) Horizontal Coefficient for phase 2 tap 1 */\r
+#define LCDC_HEOCFG21_XPHI2COEFF1(value) ((LCDC_HEOCFG21_XPHI2COEFF1_Msk & ((value) << LCDC_HEOCFG21_XPHI2COEFF1_Pos)))\r
+#define LCDC_HEOCFG21_XPHI2COEFF2_Pos 16\r
+#define LCDC_HEOCFG21_XPHI2COEFF2_Msk (0xffu << LCDC_HEOCFG21_XPHI2COEFF2_Pos) /**< \brief (LCDC_HEOCFG21) Horizontal Coefficient for phase 2 tap 2 */\r
+#define LCDC_HEOCFG21_XPHI2COEFF2(value) ((LCDC_HEOCFG21_XPHI2COEFF2_Msk & ((value) << LCDC_HEOCFG21_XPHI2COEFF2_Pos)))\r
+#define LCDC_HEOCFG21_XPHI2COEFF3_Pos 24\r
+#define LCDC_HEOCFG21_XPHI2COEFF3_Msk (0xffu << LCDC_HEOCFG21_XPHI2COEFF3_Pos) /**< \brief (LCDC_HEOCFG21) Horizontal Coefficient for phase 2 tap 3 */\r
+#define LCDC_HEOCFG21_XPHI2COEFF3(value) ((LCDC_HEOCFG21_XPHI2COEFF3_Msk & ((value) << LCDC_HEOCFG21_XPHI2COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG22 : (LCDC Offset: 0x000003E4) High-End Overlay Configuration Register 22 -------- */\r
+#define LCDC_HEOCFG22_XPHI2COEFF4_Pos 0\r
+#define LCDC_HEOCFG22_XPHI2COEFF4_Msk (0xffu << LCDC_HEOCFG22_XPHI2COEFF4_Pos) /**< \brief (LCDC_HEOCFG22) Horizontal Coefficient for phase 2 tap 4 */\r
+#define LCDC_HEOCFG22_XPHI2COEFF4(value) ((LCDC_HEOCFG22_XPHI2COEFF4_Msk & ((value) << LCDC_HEOCFG22_XPHI2COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG23 : (LCDC Offset: 0x000003E8) High-End Overlay Configuration Register 23 -------- */\r
+#define LCDC_HEOCFG23_XPHI3COEFF0_Pos 0\r
+#define LCDC_HEOCFG23_XPHI3COEFF0_Msk (0xffu << LCDC_HEOCFG23_XPHI3COEFF0_Pos) /**< \brief (LCDC_HEOCFG23) Horizontal Coefficient for phase 3 tap 0 */\r
+#define LCDC_HEOCFG23_XPHI3COEFF0(value) ((LCDC_HEOCFG23_XPHI3COEFF0_Msk & ((value) << LCDC_HEOCFG23_XPHI3COEFF0_Pos)))\r
+#define LCDC_HEOCFG23_XPHI3COEFF1_Pos 8\r
+#define LCDC_HEOCFG23_XPHI3COEFF1_Msk (0xffu << LCDC_HEOCFG23_XPHI3COEFF1_Pos) /**< \brief (LCDC_HEOCFG23) Horizontal Coefficient for phase 3 tap 1 */\r
+#define LCDC_HEOCFG23_XPHI3COEFF1(value) ((LCDC_HEOCFG23_XPHI3COEFF1_Msk & ((value) << LCDC_HEOCFG23_XPHI3COEFF1_Pos)))\r
+#define LCDC_HEOCFG23_XPHI3COEFF2_Pos 16\r
+#define LCDC_HEOCFG23_XPHI3COEFF2_Msk (0xffu << LCDC_HEOCFG23_XPHI3COEFF2_Pos) /**< \brief (LCDC_HEOCFG23) Horizontal Coefficient for phase 3 tap 2 */\r
+#define LCDC_HEOCFG23_XPHI3COEFF2(value) ((LCDC_HEOCFG23_XPHI3COEFF2_Msk & ((value) << LCDC_HEOCFG23_XPHI3COEFF2_Pos)))\r
+#define LCDC_HEOCFG23_XPHI3COEFF3_Pos 24\r
+#define LCDC_HEOCFG23_XPHI3COEFF3_Msk (0xffu << LCDC_HEOCFG23_XPHI3COEFF3_Pos) /**< \brief (LCDC_HEOCFG23) Horizontal Coefficient for phase 3 tap 3 */\r
+#define LCDC_HEOCFG23_XPHI3COEFF3(value) ((LCDC_HEOCFG23_XPHI3COEFF3_Msk & ((value) << LCDC_HEOCFG23_XPHI3COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG24 : (LCDC Offset: 0x000003EC) High-End Overlay Configuration Register 24 -------- */\r
+#define LCDC_HEOCFG24_XPHI3COEFF4_Pos 0\r
+#define LCDC_HEOCFG24_XPHI3COEFF4_Msk (0xffu << LCDC_HEOCFG24_XPHI3COEFF4_Pos) /**< \brief (LCDC_HEOCFG24) Horizontal Coefficient for phase 3 tap 4 */\r
+#define LCDC_HEOCFG24_XPHI3COEFF4(value) ((LCDC_HEOCFG24_XPHI3COEFF4_Msk & ((value) << LCDC_HEOCFG24_XPHI3COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG25 : (LCDC Offset: 0x000003F0) High-End Overlay Configuration Register 25 -------- */\r
+#define LCDC_HEOCFG25_XPHI4COEFF0_Pos 0\r
+#define LCDC_HEOCFG25_XPHI4COEFF0_Msk (0xffu << LCDC_HEOCFG25_XPHI4COEFF0_Pos) /**< \brief (LCDC_HEOCFG25) Horizontal Coefficient for phase 4 tap 0 */\r
+#define LCDC_HEOCFG25_XPHI4COEFF0(value) ((LCDC_HEOCFG25_XPHI4COEFF0_Msk & ((value) << LCDC_HEOCFG25_XPHI4COEFF0_Pos)))\r
+#define LCDC_HEOCFG25_XPHI4COEFF1_Pos 8\r
+#define LCDC_HEOCFG25_XPHI4COEFF1_Msk (0xffu << LCDC_HEOCFG25_XPHI4COEFF1_Pos) /**< \brief (LCDC_HEOCFG25) Horizontal Coefficient for phase 4 tap 1 */\r
+#define LCDC_HEOCFG25_XPHI4COEFF1(value) ((LCDC_HEOCFG25_XPHI4COEFF1_Msk & ((value) << LCDC_HEOCFG25_XPHI4COEFF1_Pos)))\r
+#define LCDC_HEOCFG25_XPHI4COEFF2_Pos 16\r
+#define LCDC_HEOCFG25_XPHI4COEFF2_Msk (0xffu << LCDC_HEOCFG25_XPHI4COEFF2_Pos) /**< \brief (LCDC_HEOCFG25) Horizontal Coefficient for phase 4 tap 2 */\r
+#define LCDC_HEOCFG25_XPHI4COEFF2(value) ((LCDC_HEOCFG25_XPHI4COEFF2_Msk & ((value) << LCDC_HEOCFG25_XPHI4COEFF2_Pos)))\r
+#define LCDC_HEOCFG25_XPHI4COEFF3_Pos 24\r
+#define LCDC_HEOCFG25_XPHI4COEFF3_Msk (0xffu << LCDC_HEOCFG25_XPHI4COEFF3_Pos) /**< \brief (LCDC_HEOCFG25) Horizontal Coefficient for phase 4 tap 3 */\r
+#define LCDC_HEOCFG25_XPHI4COEFF3(value) ((LCDC_HEOCFG25_XPHI4COEFF3_Msk & ((value) << LCDC_HEOCFG25_XPHI4COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG26 : (LCDC Offset: 0x000003F4) High-End Overlay Configuration Register 26 -------- */\r
+#define LCDC_HEOCFG26_XPHI4COEFF4_Pos 0\r
+#define LCDC_HEOCFG26_XPHI4COEFF4_Msk (0xffu << LCDC_HEOCFG26_XPHI4COEFF4_Pos) /**< \brief (LCDC_HEOCFG26) Horizontal Coefficient for phase 4 tap 4 */\r
+#define LCDC_HEOCFG26_XPHI4COEFF4(value) ((LCDC_HEOCFG26_XPHI4COEFF4_Msk & ((value) << LCDC_HEOCFG26_XPHI4COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG27 : (LCDC Offset: 0x000003F8) High-End Overlay Configuration Register 27 -------- */\r
+#define LCDC_HEOCFG27_XPHI5COEFF0_Pos 0\r
+#define LCDC_HEOCFG27_XPHI5COEFF0_Msk (0xffu << LCDC_HEOCFG27_XPHI5COEFF0_Pos) /**< \brief (LCDC_HEOCFG27) Horizontal Coefficient for phase 5 tap 0 */\r
+#define LCDC_HEOCFG27_XPHI5COEFF0(value) ((LCDC_HEOCFG27_XPHI5COEFF0_Msk & ((value) << LCDC_HEOCFG27_XPHI5COEFF0_Pos)))\r
+#define LCDC_HEOCFG27_XPHI5COEFF1_Pos 8\r
+#define LCDC_HEOCFG27_XPHI5COEFF1_Msk (0xffu << LCDC_HEOCFG27_XPHI5COEFF1_Pos) /**< \brief (LCDC_HEOCFG27) Horizontal Coefficient for phase 5 tap 1 */\r
+#define LCDC_HEOCFG27_XPHI5COEFF1(value) ((LCDC_HEOCFG27_XPHI5COEFF1_Msk & ((value) << LCDC_HEOCFG27_XPHI5COEFF1_Pos)))\r
+#define LCDC_HEOCFG27_XPHI5COEFF2_Pos 16\r
+#define LCDC_HEOCFG27_XPHI5COEFF2_Msk (0xffu << LCDC_HEOCFG27_XPHI5COEFF2_Pos) /**< \brief (LCDC_HEOCFG27) Horizontal Coefficient for phase 5 tap 2 */\r
+#define LCDC_HEOCFG27_XPHI5COEFF2(value) ((LCDC_HEOCFG27_XPHI5COEFF2_Msk & ((value) << LCDC_HEOCFG27_XPHI5COEFF2_Pos)))\r
+#define LCDC_HEOCFG27_XPHI5COEFF3_Pos 24\r
+#define LCDC_HEOCFG27_XPHI5COEFF3_Msk (0xffu << LCDC_HEOCFG27_XPHI5COEFF3_Pos) /**< \brief (LCDC_HEOCFG27) Horizontal Coefficient for phase 5 tap 3 */\r
+#define LCDC_HEOCFG27_XPHI5COEFF3(value) ((LCDC_HEOCFG27_XPHI5COEFF3_Msk & ((value) << LCDC_HEOCFG27_XPHI5COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG28 : (LCDC Offset: 0x000003FC) High-End Overlay Configuration Register 28 -------- */\r
+#define LCDC_HEOCFG28_XPHI5COEFF4_Pos 0\r
+#define LCDC_HEOCFG28_XPHI5COEFF4_Msk (0xffu << LCDC_HEOCFG28_XPHI5COEFF4_Pos) /**< \brief (LCDC_HEOCFG28) Horizontal Coefficient for phase 5 tap 4 */\r
+#define LCDC_HEOCFG28_XPHI5COEFF4(value) ((LCDC_HEOCFG28_XPHI5COEFF4_Msk & ((value) << LCDC_HEOCFG28_XPHI5COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG29 : (LCDC Offset: 0x00000400) High-End Overlay Configuration Register 29 -------- */\r
+#define LCDC_HEOCFG29_XPHI6COEFF0_Pos 0\r
+#define LCDC_HEOCFG29_XPHI6COEFF0_Msk (0xffu << LCDC_HEOCFG29_XPHI6COEFF0_Pos) /**< \brief (LCDC_HEOCFG29) Horizontal Coefficient for phase 6 tap 0 */\r
+#define LCDC_HEOCFG29_XPHI6COEFF0(value) ((LCDC_HEOCFG29_XPHI6COEFF0_Msk & ((value) << LCDC_HEOCFG29_XPHI6COEFF0_Pos)))\r
+#define LCDC_HEOCFG29_XPHI6COEFF1_Pos 8\r
+#define LCDC_HEOCFG29_XPHI6COEFF1_Msk (0xffu << LCDC_HEOCFG29_XPHI6COEFF1_Pos) /**< \brief (LCDC_HEOCFG29) Horizontal Coefficient for phase 6 tap 1 */\r
+#define LCDC_HEOCFG29_XPHI6COEFF1(value) ((LCDC_HEOCFG29_XPHI6COEFF1_Msk & ((value) << LCDC_HEOCFG29_XPHI6COEFF1_Pos)))\r
+#define LCDC_HEOCFG29_XPHI6COEFF2_Pos 16\r
+#define LCDC_HEOCFG29_XPHI6COEFF2_Msk (0xffu << LCDC_HEOCFG29_XPHI6COEFF2_Pos) /**< \brief (LCDC_HEOCFG29) Horizontal Coefficient for phase 6 tap 2 */\r
+#define LCDC_HEOCFG29_XPHI6COEFF2(value) ((LCDC_HEOCFG29_XPHI6COEFF2_Msk & ((value) << LCDC_HEOCFG29_XPHI6COEFF2_Pos)))\r
+#define LCDC_HEOCFG29_XPHI6COEFF3_Pos 24\r
+#define LCDC_HEOCFG29_XPHI6COEFF3_Msk (0xffu << LCDC_HEOCFG29_XPHI6COEFF3_Pos) /**< \brief (LCDC_HEOCFG29) Horizontal Coefficient for phase 6 tap 3 */\r
+#define LCDC_HEOCFG29_XPHI6COEFF3(value) ((LCDC_HEOCFG29_XPHI6COEFF3_Msk & ((value) << LCDC_HEOCFG29_XPHI6COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG30 : (LCDC Offset: 0x00000404) High-End Overlay Configuration Register 30 -------- */\r
+#define LCDC_HEOCFG30_XPHI6COEFF4_Pos 0\r
+#define LCDC_HEOCFG30_XPHI6COEFF4_Msk (0xffu << LCDC_HEOCFG30_XPHI6COEFF4_Pos) /**< \brief (LCDC_HEOCFG30) Horizontal Coefficient for phase 6 tap 4 */\r
+#define LCDC_HEOCFG30_XPHI6COEFF4(value) ((LCDC_HEOCFG30_XPHI6COEFF4_Msk & ((value) << LCDC_HEOCFG30_XPHI6COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG31 : (LCDC Offset: 0x00000408) High-End Overlay Configuration Register 31 -------- */\r
+#define LCDC_HEOCFG31_XPHI7COEFF0_Pos 0\r
+#define LCDC_HEOCFG31_XPHI7COEFF0_Msk (0xffu << LCDC_HEOCFG31_XPHI7COEFF0_Pos) /**< \brief (LCDC_HEOCFG31) Horizontal Coefficient for phase 7 tap 0 */\r
+#define LCDC_HEOCFG31_XPHI7COEFF0(value) ((LCDC_HEOCFG31_XPHI7COEFF0_Msk & ((value) << LCDC_HEOCFG31_XPHI7COEFF0_Pos)))\r
+#define LCDC_HEOCFG31_XPHI7COEFF1_Pos 8\r
+#define LCDC_HEOCFG31_XPHI7COEFF1_Msk (0xffu << LCDC_HEOCFG31_XPHI7COEFF1_Pos) /**< \brief (LCDC_HEOCFG31) Horizontal Coefficient for phase 7 tap 1 */\r
+#define LCDC_HEOCFG31_XPHI7COEFF1(value) ((LCDC_HEOCFG31_XPHI7COEFF1_Msk & ((value) << LCDC_HEOCFG31_XPHI7COEFF1_Pos)))\r
+#define LCDC_HEOCFG31_XPHI7COEFF2_Pos 16\r
+#define LCDC_HEOCFG31_XPHI7COEFF2_Msk (0xffu << LCDC_HEOCFG31_XPHI7COEFF2_Pos) /**< \brief (LCDC_HEOCFG31) Horizontal Coefficient for phase 7 tap 2 */\r
+#define LCDC_HEOCFG31_XPHI7COEFF2(value) ((LCDC_HEOCFG31_XPHI7COEFF2_Msk & ((value) << LCDC_HEOCFG31_XPHI7COEFF2_Pos)))\r
+#define LCDC_HEOCFG31_XPHI7COEFF3_Pos 24\r
+#define LCDC_HEOCFG31_XPHI7COEFF3_Msk (0xffu << LCDC_HEOCFG31_XPHI7COEFF3_Pos) /**< \brief (LCDC_HEOCFG31) Horizontal Coefficient for phase 7 tap 3 */\r
+#define LCDC_HEOCFG31_XPHI7COEFF3(value) ((LCDC_HEOCFG31_XPHI7COEFF3_Msk & ((value) << LCDC_HEOCFG31_XPHI7COEFF3_Pos)))\r
+/* -------- LCDC_HEOCFG32 : (LCDC Offset: 0x0000040C) High-End Overlay Configuration Register 32 -------- */\r
+#define LCDC_HEOCFG32_XPHI7COEFF4_Pos 0\r
+#define LCDC_HEOCFG32_XPHI7COEFF4_Msk (0xffu << LCDC_HEOCFG32_XPHI7COEFF4_Pos) /**< \brief (LCDC_HEOCFG32) Horizontal Coefficient for phase 7 tap 4 */\r
+#define LCDC_HEOCFG32_XPHI7COEFF4(value) ((LCDC_HEOCFG32_XPHI7COEFF4_Msk & ((value) << LCDC_HEOCFG32_XPHI7COEFF4_Pos)))\r
+/* -------- LCDC_HEOCFG33 : (LCDC Offset: 0x00000410) High-End Overlay Configuration Register 33 -------- */\r
+#define LCDC_HEOCFG33_YPHI0COEFF0_Pos 0\r
+#define LCDC_HEOCFG33_YPHI0COEFF0_Msk (0xffu << LCDC_HEOCFG33_YPHI0COEFF0_Pos) /**< \brief (LCDC_HEOCFG33) Vertical Coefficient for phase 0 tap 0 */\r
+#define LCDC_HEOCFG33_YPHI0COEFF0(value) ((LCDC_HEOCFG33_YPHI0COEFF0_Msk & ((value) << LCDC_HEOCFG33_YPHI0COEFF0_Pos)))\r
+#define LCDC_HEOCFG33_YPHI0COEFF1_Pos 8\r
+#define LCDC_HEOCFG33_YPHI0COEFF1_Msk (0xffu << LCDC_HEOCFG33_YPHI0COEFF1_Pos) /**< \brief (LCDC_HEOCFG33) Vertical Coefficient for phase 0 tap 1 */\r
+#define LCDC_HEOCFG33_YPHI0COEFF1(value) ((LCDC_HEOCFG33_YPHI0COEFF1_Msk & ((value) << LCDC_HEOCFG33_YPHI0COEFF1_Pos)))\r
+#define LCDC_HEOCFG33_YPHI0COEFF2_Pos 16\r
+#define LCDC_HEOCFG33_YPHI0COEFF2_Msk (0xffu << LCDC_HEOCFG33_YPHI0COEFF2_Pos) /**< \brief (LCDC_HEOCFG33) Vertical Coefficient for phase 0 tap 2 */\r
+#define LCDC_HEOCFG33_YPHI0COEFF2(value) ((LCDC_HEOCFG33_YPHI0COEFF2_Msk & ((value) << LCDC_HEOCFG33_YPHI0COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG34 : (LCDC Offset: 0x00000414) High-End Overlay Configuration Register 34 -------- */\r
+#define LCDC_HEOCFG34_YPHI1COEFF0_Pos 0\r
+#define LCDC_HEOCFG34_YPHI1COEFF0_Msk (0xffu << LCDC_HEOCFG34_YPHI1COEFF0_Pos) /**< \brief (LCDC_HEOCFG34) Vertical Coefficient for phase 1 tap 0 */\r
+#define LCDC_HEOCFG34_YPHI1COEFF0(value) ((LCDC_HEOCFG34_YPHI1COEFF0_Msk & ((value) << LCDC_HEOCFG34_YPHI1COEFF0_Pos)))\r
+#define LCDC_HEOCFG34_YPHI1COEFF1_Pos 8\r
+#define LCDC_HEOCFG34_YPHI1COEFF1_Msk (0xffu << LCDC_HEOCFG34_YPHI1COEFF1_Pos) /**< \brief (LCDC_HEOCFG34) Vertical Coefficient for phase 1 tap 1 */\r
+#define LCDC_HEOCFG34_YPHI1COEFF1(value) ((LCDC_HEOCFG34_YPHI1COEFF1_Msk & ((value) << LCDC_HEOCFG34_YPHI1COEFF1_Pos)))\r
+#define LCDC_HEOCFG34_YPHI1COEFF2_Pos 16\r
+#define LCDC_HEOCFG34_YPHI1COEFF2_Msk (0xffu << LCDC_HEOCFG34_YPHI1COEFF2_Pos) /**< \brief (LCDC_HEOCFG34) Vertical Coefficient for phase 1 tap 2 */\r
+#define LCDC_HEOCFG34_YPHI1COEFF2(value) ((LCDC_HEOCFG34_YPHI1COEFF2_Msk & ((value) << LCDC_HEOCFG34_YPHI1COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG35 : (LCDC Offset: 0x00000418) High-End Overlay Configuration Register 35 -------- */\r
+#define LCDC_HEOCFG35_YPHI2COEFF0_Pos 0\r
+#define LCDC_HEOCFG35_YPHI2COEFF0_Msk (0xffu << LCDC_HEOCFG35_YPHI2COEFF0_Pos) /**< \brief (LCDC_HEOCFG35) Vertical Coefficient for phase 2 tap 0 */\r
+#define LCDC_HEOCFG35_YPHI2COEFF0(value) ((LCDC_HEOCFG35_YPHI2COEFF0_Msk & ((value) << LCDC_HEOCFG35_YPHI2COEFF0_Pos)))\r
+#define LCDC_HEOCFG35_YPHI2COEFF1_Pos 8\r
+#define LCDC_HEOCFG35_YPHI2COEFF1_Msk (0xffu << LCDC_HEOCFG35_YPHI2COEFF1_Pos) /**< \brief (LCDC_HEOCFG35) Vertical Coefficient for phase 2 tap 1 */\r
+#define LCDC_HEOCFG35_YPHI2COEFF1(value) ((LCDC_HEOCFG35_YPHI2COEFF1_Msk & ((value) << LCDC_HEOCFG35_YPHI2COEFF1_Pos)))\r
+#define LCDC_HEOCFG35_YPHI2COEFF2_Pos 16\r
+#define LCDC_HEOCFG35_YPHI2COEFF2_Msk (0xffu << LCDC_HEOCFG35_YPHI2COEFF2_Pos) /**< \brief (LCDC_HEOCFG35) Vertical Coefficient for phase 2 tap 2 */\r
+#define LCDC_HEOCFG35_YPHI2COEFF2(value) ((LCDC_HEOCFG35_YPHI2COEFF2_Msk & ((value) << LCDC_HEOCFG35_YPHI2COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG36 : (LCDC Offset: 0x0000041C) High-End Overlay Configuration Register 36 -------- */\r
+#define LCDC_HEOCFG36_YPHI3COEFF0_Pos 0\r
+#define LCDC_HEOCFG36_YPHI3COEFF0_Msk (0xffu << LCDC_HEOCFG36_YPHI3COEFF0_Pos) /**< \brief (LCDC_HEOCFG36) Vertical Coefficient for phase 3 tap 0 */\r
+#define LCDC_HEOCFG36_YPHI3COEFF0(value) ((LCDC_HEOCFG36_YPHI3COEFF0_Msk & ((value) << LCDC_HEOCFG36_YPHI3COEFF0_Pos)))\r
+#define LCDC_HEOCFG36_YPHI3COEFF1_Pos 8\r
+#define LCDC_HEOCFG36_YPHI3COEFF1_Msk (0xffu << LCDC_HEOCFG36_YPHI3COEFF1_Pos) /**< \brief (LCDC_HEOCFG36) Vertical Coefficient for phase 3 tap 1 */\r
+#define LCDC_HEOCFG36_YPHI3COEFF1(value) ((LCDC_HEOCFG36_YPHI3COEFF1_Msk & ((value) << LCDC_HEOCFG36_YPHI3COEFF1_Pos)))\r
+#define LCDC_HEOCFG36_YPHI3COEFF2_Pos 16\r
+#define LCDC_HEOCFG36_YPHI3COEFF2_Msk (0xffu << LCDC_HEOCFG36_YPHI3COEFF2_Pos) /**< \brief (LCDC_HEOCFG36) Vertical Coefficient for phase 3 tap 2 */\r
+#define LCDC_HEOCFG36_YPHI3COEFF2(value) ((LCDC_HEOCFG36_YPHI3COEFF2_Msk & ((value) << LCDC_HEOCFG36_YPHI3COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG37 : (LCDC Offset: 0x00000420) High-End Overlay Configuration Register 37 -------- */\r
+#define LCDC_HEOCFG37_YPHI4COEFF0_Pos 0\r
+#define LCDC_HEOCFG37_YPHI4COEFF0_Msk (0xffu << LCDC_HEOCFG37_YPHI4COEFF0_Pos) /**< \brief (LCDC_HEOCFG37) Vertical Coefficient for phase 4 tap 0 */\r
+#define LCDC_HEOCFG37_YPHI4COEFF0(value) ((LCDC_HEOCFG37_YPHI4COEFF0_Msk & ((value) << LCDC_HEOCFG37_YPHI4COEFF0_Pos)))\r
+#define LCDC_HEOCFG37_YPHI4COEFF1_Pos 8\r
+#define LCDC_HEOCFG37_YPHI4COEFF1_Msk (0xffu << LCDC_HEOCFG37_YPHI4COEFF1_Pos) /**< \brief (LCDC_HEOCFG37) Vertical Coefficient for phase 4 tap 1 */\r
+#define LCDC_HEOCFG37_YPHI4COEFF1(value) ((LCDC_HEOCFG37_YPHI4COEFF1_Msk & ((value) << LCDC_HEOCFG37_YPHI4COEFF1_Pos)))\r
+#define LCDC_HEOCFG37_YPHI4COEFF2_Pos 16\r
+#define LCDC_HEOCFG37_YPHI4COEFF2_Msk (0xffu << LCDC_HEOCFG37_YPHI4COEFF2_Pos) /**< \brief (LCDC_HEOCFG37) Vertical Coefficient for phase 4 tap 2 */\r
+#define LCDC_HEOCFG37_YPHI4COEFF2(value) ((LCDC_HEOCFG37_YPHI4COEFF2_Msk & ((value) << LCDC_HEOCFG37_YPHI4COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG38 : (LCDC Offset: 0x00000424) High-End Overlay Configuration Register 38 -------- */\r
+#define LCDC_HEOCFG38_YPHI5COEFF0_Pos 0\r
+#define LCDC_HEOCFG38_YPHI5COEFF0_Msk (0xffu << LCDC_HEOCFG38_YPHI5COEFF0_Pos) /**< \brief (LCDC_HEOCFG38) Vertical Coefficient for phase 5 tap 0 */\r
+#define LCDC_HEOCFG38_YPHI5COEFF0(value) ((LCDC_HEOCFG38_YPHI5COEFF0_Msk & ((value) << LCDC_HEOCFG38_YPHI5COEFF0_Pos)))\r
+#define LCDC_HEOCFG38_YPHI5COEFF1_Pos 8\r
+#define LCDC_HEOCFG38_YPHI5COEFF1_Msk (0xffu << LCDC_HEOCFG38_YPHI5COEFF1_Pos) /**< \brief (LCDC_HEOCFG38) Vertical Coefficient for phase 5 tap 1 */\r
+#define LCDC_HEOCFG38_YPHI5COEFF1(value) ((LCDC_HEOCFG38_YPHI5COEFF1_Msk & ((value) << LCDC_HEOCFG38_YPHI5COEFF1_Pos)))\r
+#define LCDC_HEOCFG38_YPHI5COEFF2_Pos 16\r
+#define LCDC_HEOCFG38_YPHI5COEFF2_Msk (0xffu << LCDC_HEOCFG38_YPHI5COEFF2_Pos) /**< \brief (LCDC_HEOCFG38) Vertical Coefficient for phase 5 tap 2 */\r
+#define LCDC_HEOCFG38_YPHI5COEFF2(value) ((LCDC_HEOCFG38_YPHI5COEFF2_Msk & ((value) << LCDC_HEOCFG38_YPHI5COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG39 : (LCDC Offset: 0x00000428) High-End Overlay Configuration Register 39 -------- */\r
+#define LCDC_HEOCFG39_YPHI6COEFF0_Pos 0\r
+#define LCDC_HEOCFG39_YPHI6COEFF0_Msk (0xffu << LCDC_HEOCFG39_YPHI6COEFF0_Pos) /**< \brief (LCDC_HEOCFG39) Vertical Coefficient for phase 6 tap 0 */\r
+#define LCDC_HEOCFG39_YPHI6COEFF0(value) ((LCDC_HEOCFG39_YPHI6COEFF0_Msk & ((value) << LCDC_HEOCFG39_YPHI6COEFF0_Pos)))\r
+#define LCDC_HEOCFG39_YPHI6COEFF1_Pos 8\r
+#define LCDC_HEOCFG39_YPHI6COEFF1_Msk (0xffu << LCDC_HEOCFG39_YPHI6COEFF1_Pos) /**< \brief (LCDC_HEOCFG39) Vertical Coefficient for phase 6 tap 1 */\r
+#define LCDC_HEOCFG39_YPHI6COEFF1(value) ((LCDC_HEOCFG39_YPHI6COEFF1_Msk & ((value) << LCDC_HEOCFG39_YPHI6COEFF1_Pos)))\r
+#define LCDC_HEOCFG39_YPHI6COEFF2_Pos 16\r
+#define LCDC_HEOCFG39_YPHI6COEFF2_Msk (0xffu << LCDC_HEOCFG39_YPHI6COEFF2_Pos) /**< \brief (LCDC_HEOCFG39) Vertical Coefficient for phase 6 tap 2 */\r
+#define LCDC_HEOCFG39_YPHI6COEFF2(value) ((LCDC_HEOCFG39_YPHI6COEFF2_Msk & ((value) << LCDC_HEOCFG39_YPHI6COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG40 : (LCDC Offset: 0x0000042C) High-End Overlay Configuration Register 40 -------- */\r
+#define LCDC_HEOCFG40_YPHI7COEFF0_Pos 0\r
+#define LCDC_HEOCFG40_YPHI7COEFF0_Msk (0xffu << LCDC_HEOCFG40_YPHI7COEFF0_Pos) /**< \brief (LCDC_HEOCFG40) Vertical Coefficient for phase 7 tap 0 */\r
+#define LCDC_HEOCFG40_YPHI7COEFF0(value) ((LCDC_HEOCFG40_YPHI7COEFF0_Msk & ((value) << LCDC_HEOCFG40_YPHI7COEFF0_Pos)))\r
+#define LCDC_HEOCFG40_YPHI7COEFF1_Pos 8\r
+#define LCDC_HEOCFG40_YPHI7COEFF1_Msk (0xffu << LCDC_HEOCFG40_YPHI7COEFF1_Pos) /**< \brief (LCDC_HEOCFG40) Vertical Coefficient for phase 7 tap 1 */\r
+#define LCDC_HEOCFG40_YPHI7COEFF1(value) ((LCDC_HEOCFG40_YPHI7COEFF1_Msk & ((value) << LCDC_HEOCFG40_YPHI7COEFF1_Pos)))\r
+#define LCDC_HEOCFG40_YPHI7COEFF2_Pos 16\r
+#define LCDC_HEOCFG40_YPHI7COEFF2_Msk (0xffu << LCDC_HEOCFG40_YPHI7COEFF2_Pos) /**< \brief (LCDC_HEOCFG40) Vertical Coefficient for phase 7 tap 2 */\r
+#define LCDC_HEOCFG40_YPHI7COEFF2(value) ((LCDC_HEOCFG40_YPHI7COEFF2_Msk & ((value) << LCDC_HEOCFG40_YPHI7COEFF2_Pos)))\r
+/* -------- LCDC_HEOCFG41 : (LCDC Offset: 0x00000430) High-End Overlay Configuration Register 41 -------- */\r
+#define LCDC_HEOCFG41_XPHIDEF_Pos 0\r
+#define LCDC_HEOCFG41_XPHIDEF_Msk (0x7u << LCDC_HEOCFG41_XPHIDEF_Pos) /**< \brief (LCDC_HEOCFG41) Horizontal Filter Phase Offset */\r
+#define LCDC_HEOCFG41_XPHIDEF(value) ((LCDC_HEOCFG41_XPHIDEF_Msk & ((value) << LCDC_HEOCFG41_XPHIDEF_Pos)))\r
+#define LCDC_HEOCFG41_YPHIDEF_Pos 16\r
+#define LCDC_HEOCFG41_YPHIDEF_Msk (0x7u << LCDC_HEOCFG41_YPHIDEF_Pos) /**< \brief (LCDC_HEOCFG41) Vertical Filter Phase Offset */\r
+#define LCDC_HEOCFG41_YPHIDEF(value) ((LCDC_HEOCFG41_YPHIDEF_Msk & ((value) << LCDC_HEOCFG41_YPHIDEF_Pos)))\r
+/* -------- LCDC_BASECLUT[256] : (LCDC Offset: 0x600) Base CLUT Register -------- */\r
+#define LCDC_BASECLUT_BCLUT_Pos 0\r
+#define LCDC_BASECLUT_BCLUT_Msk (0xffu << LCDC_BASECLUT_BCLUT_Pos) /**< \brief (LCDC_BASECLUT[256]) Blue Color entry */\r
+#define LCDC_BASECLUT_BCLUT(value) ((LCDC_BASECLUT_BCLUT_Msk & ((value) << LCDC_BASECLUT_BCLUT_Pos)))\r
+#define LCDC_BASECLUT_GCLUT_Pos 8\r
+#define LCDC_BASECLUT_GCLUT_Msk (0xffu << LCDC_BASECLUT_GCLUT_Pos) /**< \brief (LCDC_BASECLUT[256]) Green Color entry */\r
+#define LCDC_BASECLUT_GCLUT(value) ((LCDC_BASECLUT_GCLUT_Msk & ((value) << LCDC_BASECLUT_GCLUT_Pos)))\r
+#define LCDC_BASECLUT_RCLUT_Pos 16\r
+#define LCDC_BASECLUT_RCLUT_Msk (0xffu << LCDC_BASECLUT_RCLUT_Pos) /**< \brief (LCDC_BASECLUT[256]) Red Color entry */\r
+#define LCDC_BASECLUT_RCLUT(value) ((LCDC_BASECLUT_RCLUT_Msk & ((value) << LCDC_BASECLUT_RCLUT_Pos)))\r
+/* -------- LCDC_OVR1CLUT[256] : (LCDC Offset: 0xA00) Overlay 1 CLUT Register -------- */\r
+#define LCDC_OVR1CLUT_BCLUT_Pos 0\r
+#define LCDC_OVR1CLUT_BCLUT_Msk (0xffu << LCDC_OVR1CLUT_BCLUT_Pos) /**< \brief (LCDC_OVR1CLUT[256]) Blue Color entry */\r
+#define LCDC_OVR1CLUT_BCLUT(value) ((LCDC_OVR1CLUT_BCLUT_Msk & ((value) << LCDC_OVR1CLUT_BCLUT_Pos)))\r
+#define LCDC_OVR1CLUT_GCLUT_Pos 8\r
+#define LCDC_OVR1CLUT_GCLUT_Msk (0xffu << LCDC_OVR1CLUT_GCLUT_Pos) /**< \brief (LCDC_OVR1CLUT[256]) Green Color entry */\r
+#define LCDC_OVR1CLUT_GCLUT(value) ((LCDC_OVR1CLUT_GCLUT_Msk & ((value) << LCDC_OVR1CLUT_GCLUT_Pos)))\r
+#define LCDC_OVR1CLUT_RCLUT_Pos 16\r
+#define LCDC_OVR1CLUT_RCLUT_Msk (0xffu << LCDC_OVR1CLUT_RCLUT_Pos) /**< \brief (LCDC_OVR1CLUT[256]) Red Color entry */\r
+#define LCDC_OVR1CLUT_RCLUT(value) ((LCDC_OVR1CLUT_RCLUT_Msk & ((value) << LCDC_OVR1CLUT_RCLUT_Pos)))\r
+#define LCDC_OVR1CLUT_ACLUT_Pos 24\r
+#define LCDC_OVR1CLUT_ACLUT_Msk (0xffu << LCDC_OVR1CLUT_ACLUT_Pos) /**< \brief (LCDC_OVR1CLUT[256]) Alpha Color entry */\r
+#define LCDC_OVR1CLUT_ACLUT(value) ((LCDC_OVR1CLUT_ACLUT_Msk & ((value) << LCDC_OVR1CLUT_ACLUT_Pos)))\r
+/* -------- LCDC_OVR2CLUT[256] : (LCDC Offset: 0xE00) Overlay 2 CLUT Register -------- */\r
+#define LCDC_OVR2CLUT_BCLUT_Pos 0\r
+#define LCDC_OVR2CLUT_BCLUT_Msk (0xffu << LCDC_OVR2CLUT_BCLUT_Pos) /**< \brief (LCDC_OVR2CLUT[256]) Blue Color entry */\r
+#define LCDC_OVR2CLUT_BCLUT(value) ((LCDC_OVR2CLUT_BCLUT_Msk & ((value) << LCDC_OVR2CLUT_BCLUT_Pos)))\r
+#define LCDC_OVR2CLUT_GCLUT_Pos 8\r
+#define LCDC_OVR2CLUT_GCLUT_Msk (0xffu << LCDC_OVR2CLUT_GCLUT_Pos) /**< \brief (LCDC_OVR2CLUT[256]) Green Color entry */\r
+#define LCDC_OVR2CLUT_GCLUT(value) ((LCDC_OVR2CLUT_GCLUT_Msk & ((value) << LCDC_OVR2CLUT_GCLUT_Pos)))\r
+#define LCDC_OVR2CLUT_RCLUT_Pos 16\r
+#define LCDC_OVR2CLUT_RCLUT_Msk (0xffu << LCDC_OVR2CLUT_RCLUT_Pos) /**< \brief (LCDC_OVR2CLUT[256]) Red Color entry */\r
+#define LCDC_OVR2CLUT_RCLUT(value) ((LCDC_OVR2CLUT_RCLUT_Msk & ((value) << LCDC_OVR2CLUT_RCLUT_Pos)))\r
+#define LCDC_OVR2CLUT_ACLUT_Pos 24\r
+#define LCDC_OVR2CLUT_ACLUT_Msk (0xffu << LCDC_OVR2CLUT_ACLUT_Pos) /**< \brief (LCDC_OVR2CLUT[256]) Alpha Color entry */\r
+#define LCDC_OVR2CLUT_ACLUT(value) ((LCDC_OVR2CLUT_ACLUT_Msk & ((value) << LCDC_OVR2CLUT_ACLUT_Pos)))\r
+/* -------- LCDC_HEOCLUT[256] : (LCDC Offset: 0x1200) High End Overlay CLUT Register -------- */\r
+#define LCDC_HEOCLUT_BCLUT_Pos 0\r
+#define LCDC_HEOCLUT_BCLUT_Msk (0xffu << LCDC_HEOCLUT_BCLUT_Pos) /**< \brief (LCDC_HEOCLUT[256]) Blue Color entry */\r
+#define LCDC_HEOCLUT_BCLUT(value) ((LCDC_HEOCLUT_BCLUT_Msk & ((value) << LCDC_HEOCLUT_BCLUT_Pos)))\r
+#define LCDC_HEOCLUT_GCLUT_Pos 8\r
+#define LCDC_HEOCLUT_GCLUT_Msk (0xffu << LCDC_HEOCLUT_GCLUT_Pos) /**< \brief (LCDC_HEOCLUT[256]) Green Color entry */\r
+#define LCDC_HEOCLUT_GCLUT(value) ((LCDC_HEOCLUT_GCLUT_Msk & ((value) << LCDC_HEOCLUT_GCLUT_Pos)))\r
+#define LCDC_HEOCLUT_RCLUT_Pos 16\r
+#define LCDC_HEOCLUT_RCLUT_Msk (0xffu << LCDC_HEOCLUT_RCLUT_Pos) /**< \brief (LCDC_HEOCLUT[256]) Red Color entry */\r
+#define LCDC_HEOCLUT_RCLUT(value) ((LCDC_HEOCLUT_RCLUT_Msk & ((value) << LCDC_HEOCLUT_RCLUT_Pos)))\r
+#define LCDC_HEOCLUT_ACLUT_Pos 24\r
+#define LCDC_HEOCLUT_ACLUT_Msk (0xffu << LCDC_HEOCLUT_ACLUT_Pos) /**< \brief (LCDC_HEOCLUT[256]) Alpha Color entry */\r
+#define LCDC_HEOCLUT_ACLUT(value) ((LCDC_HEOCLUT_ACLUT_Msk & ((value) << LCDC_HEOCLUT_ACLUT_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR AHB Bus Matrix */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_MATRIX AHB Bus Matrix */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief MatrixPr hardware registers */\r
+typedef struct {\r
+  __IO uint32_t MATRIX_PRAS; /**< \brief (MatrixPr Offset: 0x0) Priority Register A for Slave 0 */\r
+  __IO uint32_t MATRIX_PRBS; /**< \brief (MatrixPr Offset: 0x4) Priority Register B for Slave 0 */\r
+} MatrixPr;\r
+/** \brief Matrix hardware registers */\r
+#define MATRIXPR_NUMBER 13\r
+typedef struct {\r
+  __IO uint32_t MATRIX_MCFG[10];            /**< \brief (Matrix Offset: 0x0000) Master Configuration Register */\r
+  __I  uint32_t Reserved1[6];\r
+  __IO uint32_t MATRIX_SCFG[13];            /**< \brief (Matrix Offset: 0x0040) Slave Configuration Register */\r
+  __I  uint32_t Reserved2[3];\r
+       MatrixPr MATRIX_PR[MATRIXPR_NUMBER]; /**< \brief (Matrix Offset: 0x0080) 0 .. 12 */\r
+  __I  uint32_t Reserved3[26];\r
+  __O  uint32_t MATRIX_MEIER;               /**< \brief (Matrix Offset: 0x0150) Master Error Interrupt Enable Register */\r
+  __O  uint32_t MATRIX_MEIDR;               /**< \brief (Matrix Offset: 0x0154) Master Error Interrupt Disable Register */\r
+  __I  uint32_t MATRIX_MEIMR;               /**< \brief (Matrix Offset: 0x0158) Master Error Interrupt Mask Register */\r
+  __I  uint32_t MATRIX_MESR;                /**< \brief (Matrix Offset: 0x015C) Master Error Status Register */\r
+  __I  uint32_t MATRIX_MEAR[10];            /**< \brief (Matrix Offset: 0x0160) Master 0 Error Address Register */\r
+  __I  uint32_t Reserved4[23];\r
+  __IO uint32_t MATRIX_WPMR;                /**< \brief (Matrix Offset: 0x01E4) Write Protect Mode Register */\r
+  __I  uint32_t MATRIX_WPSR;                /**< \brief (Matrix Offset: 0x01E8) Write Protect Status Register */\r
+  __I  uint32_t Reserved5[5];\r
+  __IO uint32_t MATRIX_SSR[13];             /**< \brief (Matrix Offset: 0x0200) Security Slave 0 Register */\r
+  __I  uint32_t Reserved6[3];\r
+  __IO uint32_t MATRIX_SASSR[13];           /**< \brief (Matrix Offset: 0x0240) Security Areas Split Slave 0 Register */\r
+  __I  uint32_t Reserved7[3];\r
+  __IO uint32_t MATRIX_SRTSR[13];           /**< \brief (Matrix Offset: 0x0280) Security Region Top Slave 0 Register */\r
+  __I  uint32_t Reserved8[3];\r
+  __IO uint32_t MATRIX_SPSELR[3];           /**< \brief (Matrix Offset: 0x02C0) Security Peripheral Select 1 Register */\r
+} Matrix;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- MATRIX_MCFG[10] : (MATRIX Offset: 0x0000) Master Configuration Register -------- */\r
+#define MATRIX_MCFG_ULBT_Pos 0\r
+#define MATRIX_MCFG_ULBT_Msk (0x7u << MATRIX_MCFG_ULBT_Pos) /**< \brief (MATRIX_MCFG[10]) Undefined Length Burst Type */\r
+#define MATRIX_MCFG_ULBT(value) ((MATRIX_MCFG_ULBT_Msk & ((value) << MATRIX_MCFG_ULBT_Pos)))\r
+/* -------- MATRIX_SCFG[13] : (MATRIX Offset: 0x0040) Slave Configuration Register -------- */\r
+#define MATRIX_SCFG_SLOT_CYCLE_Pos 0\r
+#define MATRIX_SCFG_SLOT_CYCLE_Msk (0x1ffu << MATRIX_SCFG_SLOT_CYCLE_Pos) /**< \brief (MATRIX_SCFG[13]) Maximum Bus Grant Duration for Masters */\r
+#define MATRIX_SCFG_SLOT_CYCLE(value) ((MATRIX_SCFG_SLOT_CYCLE_Msk & ((value) << MATRIX_SCFG_SLOT_CYCLE_Pos)))\r
+#define MATRIX_SCFG_DEFMSTR_TYPE_Pos 16\r
+#define MATRIX_SCFG_DEFMSTR_TYPE_Msk (0x3u << MATRIX_SCFG_DEFMSTR_TYPE_Pos) /**< \brief (MATRIX_SCFG[13]) Default Master Type */\r
+#define MATRIX_SCFG_DEFMSTR_TYPE(value) ((MATRIX_SCFG_DEFMSTR_TYPE_Msk & ((value) << MATRIX_SCFG_DEFMSTR_TYPE_Pos)))\r
+#define MATRIX_SCFG_FIXED_DEFMSTR_Pos 18\r
+#define MATRIX_SCFG_FIXED_DEFMSTR_Msk (0xfu << MATRIX_SCFG_FIXED_DEFMSTR_Pos) /**< \brief (MATRIX_SCFG[13]) Fixed Default Master */\r
+#define MATRIX_SCFG_FIXED_DEFMSTR(value) ((MATRIX_SCFG_FIXED_DEFMSTR_Msk & ((value) << MATRIX_SCFG_FIXED_DEFMSTR_Pos)))\r
+/* -------- MATRIX_PRAS : (MATRIX Offset: N/A) Priority Register A for Slave 0 -------- */\r
+#define MATRIX_PRAS_M0PR_Pos 0\r
+#define MATRIX_PRAS_M0PR_Msk (0x3u << MATRIX_PRAS_M0PR_Pos) /**< \brief (MATRIX_PRAS) Master 0 Priority */\r
+#define MATRIX_PRAS_M0PR(value) ((MATRIX_PRAS_M0PR_Msk & ((value) << MATRIX_PRAS_M0PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN0 (0x1u << 2) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 0 */\r
+#define MATRIX_PRAS_M1PR_Pos 4\r
+#define MATRIX_PRAS_M1PR_Msk (0x3u << MATRIX_PRAS_M1PR_Pos) /**< \brief (MATRIX_PRAS) Master 1 Priority */\r
+#define MATRIX_PRAS_M1PR(value) ((MATRIX_PRAS_M1PR_Msk & ((value) << MATRIX_PRAS_M1PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN1 (0x1u << 6) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 1 */\r
+#define MATRIX_PRAS_M2PR_Pos 8\r
+#define MATRIX_PRAS_M2PR_Msk (0x3u << MATRIX_PRAS_M2PR_Pos) /**< \brief (MATRIX_PRAS) Master 2 Priority */\r
+#define MATRIX_PRAS_M2PR(value) ((MATRIX_PRAS_M2PR_Msk & ((value) << MATRIX_PRAS_M2PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN2 (0x1u << 10) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 2 */\r
+#define MATRIX_PRAS_M3PR_Pos 12\r
+#define MATRIX_PRAS_M3PR_Msk (0x3u << MATRIX_PRAS_M3PR_Pos) /**< \brief (MATRIX_PRAS) Master 3 Priority */\r
+#define MATRIX_PRAS_M3PR(value) ((MATRIX_PRAS_M3PR_Msk & ((value) << MATRIX_PRAS_M3PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN3 (0x1u << 14) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 3 */\r
+#define MATRIX_PRAS_M4PR_Pos 16\r
+#define MATRIX_PRAS_M4PR_Msk (0x3u << MATRIX_PRAS_M4PR_Pos) /**< \brief (MATRIX_PRAS) Master 4 Priority */\r
+#define MATRIX_PRAS_M4PR(value) ((MATRIX_PRAS_M4PR_Msk & ((value) << MATRIX_PRAS_M4PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN4 (0x1u << 18) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 4 */\r
+#define MATRIX_PRAS_M5PR_Pos 20\r
+#define MATRIX_PRAS_M5PR_Msk (0x3u << MATRIX_PRAS_M5PR_Pos) /**< \brief (MATRIX_PRAS) Master 5 Priority */\r
+#define MATRIX_PRAS_M5PR(value) ((MATRIX_PRAS_M5PR_Msk & ((value) << MATRIX_PRAS_M5PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN5 (0x1u << 22) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 5 */\r
+#define MATRIX_PRAS_M6PR_Pos 24\r
+#define MATRIX_PRAS_M6PR_Msk (0x3u << MATRIX_PRAS_M6PR_Pos) /**< \brief (MATRIX_PRAS) Master 6 Priority */\r
+#define MATRIX_PRAS_M6PR(value) ((MATRIX_PRAS_M6PR_Msk & ((value) << MATRIX_PRAS_M6PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN6 (0x1u << 26) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 6 */\r
+#define MATRIX_PRAS_M7PR_Pos 28\r
+#define MATRIX_PRAS_M7PR_Msk (0x3u << MATRIX_PRAS_M7PR_Pos) /**< \brief (MATRIX_PRAS) Master 7 Priority */\r
+#define MATRIX_PRAS_M7PR(value) ((MATRIX_PRAS_M7PR_Msk & ((value) << MATRIX_PRAS_M7PR_Pos)))\r
+#define MATRIX_PRAS_LQOSEN7 (0x1u << 30) /**< \brief (MATRIX_PRAS) Latency Quality of Service Enable for Master 7 */\r
+/* -------- MATRIX_PRBS : (MATRIX Offset: N/A) Priority Register B for Slave 0 -------- */\r
+#define MATRIX_PRBS_M8PR_Pos 0\r
+#define MATRIX_PRBS_M8PR_Msk (0x3u << MATRIX_PRBS_M8PR_Pos) /**< \brief (MATRIX_PRBS) Master 8 Priority */\r
+#define MATRIX_PRBS_M8PR(value) ((MATRIX_PRBS_M8PR_Msk & ((value) << MATRIX_PRBS_M8PR_Pos)))\r
+#define MATRIX_PRBS_LQOSEN8 (0x1u << 2) /**< \brief (MATRIX_PRBS) Latency Quality of Service Enable for Master 8 */\r
+#define MATRIX_PRBS_M9PR_Pos 4\r
+#define MATRIX_PRBS_M9PR_Msk (0x3u << MATRIX_PRBS_M9PR_Pos) /**< \brief (MATRIX_PRBS) Master 9 Priority */\r
+#define MATRIX_PRBS_M9PR(value) ((MATRIX_PRBS_M9PR_Msk & ((value) << MATRIX_PRBS_M9PR_Pos)))\r
+#define MATRIX_PRBS_LQOSEN9 (0x1u << 6) /**< \brief (MATRIX_PRBS) Latency Quality of Service Enable for Master 9 */\r
+/* -------- MATRIX_MEIER : (MATRIX Offset: 0x0150) Master Error Interrupt Enable Register -------- */\r
+#define MATRIX_MEIER_MERR0 (0x1u << 0) /**< \brief (MATRIX_MEIER) Master 0 Access Error */\r
+#define MATRIX_MEIER_MERR1 (0x1u << 1) /**< \brief (MATRIX_MEIER) Master 1 Access Error */\r
+#define MATRIX_MEIER_MERR2 (0x1u << 2) /**< \brief (MATRIX_MEIER) Master 2 Access Error */\r
+#define MATRIX_MEIER_MERR3 (0x1u << 3) /**< \brief (MATRIX_MEIER) Master 3 Access Error */\r
+#define MATRIX_MEIER_MERR4 (0x1u << 4) /**< \brief (MATRIX_MEIER) Master 4 Access Error */\r
+#define MATRIX_MEIER_MERR5 (0x1u << 5) /**< \brief (MATRIX_MEIER) Master 5 Access Error */\r
+#define MATRIX_MEIER_MERR6 (0x1u << 6) /**< \brief (MATRIX_MEIER) Master 6 Access Error */\r
+#define MATRIX_MEIER_MERR7 (0x1u << 7) /**< \brief (MATRIX_MEIER) Master 7 Access Error */\r
+#define MATRIX_MEIER_MERR8 (0x1u << 8) /**< \brief (MATRIX_MEIER) Master 8 Access Error */\r
+#define MATRIX_MEIER_MERR9 (0x1u << 9) /**< \brief (MATRIX_MEIER) Master 9 Access Error */\r
+/* -------- MATRIX_MEIDR : (MATRIX Offset: 0x0154) Master Error Interrupt Disable Register -------- */\r
+#define MATRIX_MEIDR_MERR0 (0x1u << 0) /**< \brief (MATRIX_MEIDR) Master 0 Access Error */\r
+#define MATRIX_MEIDR_MERR1 (0x1u << 1) /**< \brief (MATRIX_MEIDR) Master 1 Access Error */\r
+#define MATRIX_MEIDR_MERR2 (0x1u << 2) /**< \brief (MATRIX_MEIDR) Master 2 Access Error */\r
+#define MATRIX_MEIDR_MERR3 (0x1u << 3) /**< \brief (MATRIX_MEIDR) Master 3 Access Error */\r
+#define MATRIX_MEIDR_MERR4 (0x1u << 4) /**< \brief (MATRIX_MEIDR) Master 4 Access Error */\r
+#define MATRIX_MEIDR_MERR5 (0x1u << 5) /**< \brief (MATRIX_MEIDR) Master 5 Access Error */\r
+#define MATRIX_MEIDR_MERR6 (0x1u << 6) /**< \brief (MATRIX_MEIDR) Master 6 Access Error */\r
+#define MATRIX_MEIDR_MERR7 (0x1u << 7) /**< \brief (MATRIX_MEIDR) Master 7 Access Error */\r
+#define MATRIX_MEIDR_MERR8 (0x1u << 8) /**< \brief (MATRIX_MEIDR) Master 8 Access Error */\r
+#define MATRIX_MEIDR_MERR9 (0x1u << 9) /**< \brief (MATRIX_MEIDR) Master 9 Access Error */\r
+/* -------- MATRIX_MEIMR : (MATRIX Offset: 0x0158) Master Error Interrupt Mask Register -------- */\r
+#define MATRIX_MEIMR_MERR0 (0x1u << 0) /**< \brief (MATRIX_MEIMR) Master 0 Access Error */\r
+#define MATRIX_MEIMR_MERR1 (0x1u << 1) /**< \brief (MATRIX_MEIMR) Master 1 Access Error */\r
+#define MATRIX_MEIMR_MERR2 (0x1u << 2) /**< \brief (MATRIX_MEIMR) Master 2 Access Error */\r
+#define MATRIX_MEIMR_MERR3 (0x1u << 3) /**< \brief (MATRIX_MEIMR) Master 3 Access Error */\r
+#define MATRIX_MEIMR_MERR4 (0x1u << 4) /**< \brief (MATRIX_MEIMR) Master 4 Access Error */\r
+#define MATRIX_MEIMR_MERR5 (0x1u << 5) /**< \brief (MATRIX_MEIMR) Master 5 Access Error */\r
+#define MATRIX_MEIMR_MERR6 (0x1u << 6) /**< \brief (MATRIX_MEIMR) Master 6 Access Error */\r
+#define MATRIX_MEIMR_MERR7 (0x1u << 7) /**< \brief (MATRIX_MEIMR) Master 7 Access Error */\r
+#define MATRIX_MEIMR_MERR8 (0x1u << 8) /**< \brief (MATRIX_MEIMR) Master 8 Access Error */\r
+#define MATRIX_MEIMR_MERR9 (0x1u << 9) /**< \brief (MATRIX_MEIMR) Master 9 Access Error */\r
+/* -------- MATRIX_MESR : (MATRIX Offset: 0x015C) Master Error Status Register -------- */\r
+#define MATRIX_MESR_MERR0 (0x1u << 0) /**< \brief (MATRIX_MESR) Master 0 Access Error */\r
+#define MATRIX_MESR_MERR1 (0x1u << 1) /**< \brief (MATRIX_MESR) Master 1 Access Error */\r
+#define MATRIX_MESR_MERR2 (0x1u << 2) /**< \brief (MATRIX_MESR) Master 2 Access Error */\r
+#define MATRIX_MESR_MERR3 (0x1u << 3) /**< \brief (MATRIX_MESR) Master 3 Access Error */\r
+#define MATRIX_MESR_MERR4 (0x1u << 4) /**< \brief (MATRIX_MESR) Master 4 Access Error */\r
+#define MATRIX_MESR_MERR5 (0x1u << 5) /**< \brief (MATRIX_MESR) Master 5 Access Error */\r
+#define MATRIX_MESR_MERR6 (0x1u << 6) /**< \brief (MATRIX_MESR) Master 6 Access Error */\r
+#define MATRIX_MESR_MERR7 (0x1u << 7) /**< \brief (MATRIX_MESR) Master 7 Access Error */\r
+#define MATRIX_MESR_MERR8 (0x1u << 8) /**< \brief (MATRIX_MESR) Master 8 Access Error */\r
+#define MATRIX_MESR_MERR9 (0x1u << 9) /**< \brief (MATRIX_MESR) Master 9 Access Error */\r
+/* -------- MATRIX_MEAR[10] : (MATRIX Offset: 0x0160) Master 0 Error Address Register -------- */\r
+#define MATRIX_MEAR_ERRADD_Pos 0\r
+#define MATRIX_MEAR_ERRADD_Msk (0xffffffffu << MATRIX_MEAR_ERRADD_Pos) /**< \brief (MATRIX_MEAR[10]) Master Error Address */\r
+/* -------- MATRIX_WPMR : (MATRIX Offset: 0x01E4) Write Protect Mode Register -------- */\r
+#define MATRIX_WPMR_WPEN (0x1u << 0) /**< \brief (MATRIX_WPMR) Write Protect Enable */\r
+#define MATRIX_WPMR_WPKEY_Pos 8\r
+#define MATRIX_WPMR_WPKEY_Msk (0xffffffu << MATRIX_WPMR_WPKEY_Pos) /**< \brief (MATRIX_WPMR) Write Protect KEY (Write-only) */\r
+#define MATRIX_WPMR_WPKEY(value) ((MATRIX_WPMR_WPKEY_Msk & ((value) << MATRIX_WPMR_WPKEY_Pos)))\r
+/* -------- MATRIX_WPSR : (MATRIX Offset: 0x01E8) Write Protect Status Register -------- */\r
+#define MATRIX_WPSR_WPVS (0x1u << 0) /**< \brief (MATRIX_WPSR) Write Protect Violation Status */\r
+#define MATRIX_WPSR_WPVSRC_Pos 8\r
+#define MATRIX_WPSR_WPVSRC_Msk (0xffffu << MATRIX_WPSR_WPVSRC_Pos) /**< \brief (MATRIX_WPSR) Write Protect Violation Source */\r
+/* -------- MATRIX_SSR[13] : (MATRIX Offset: 0x0200) Security Slave 0 Register -------- */\r
+#define MATRIX_SSR_LANSECH0 (0x1u << 0) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH1 (0x1u << 1) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH2 (0x1u << 2) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH3 (0x1u << 3) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH4 (0x1u << 4) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH5 (0x1u << 5) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH6 (0x1u << 6) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_LANSECH7 (0x1u << 7) /**< \brief (MATRIX_SSR[13]) Low Area Not Secured in HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH0 (0x1u << 8) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH1 (0x1u << 9) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH2 (0x1u << 10) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH3 (0x1u << 11) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH4 (0x1u << 12) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH5 (0x1u << 13) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH6 (0x1u << 14) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_RDNSECH7 (0x1u << 15) /**< \brief (MATRIX_SSR[13]) Read Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH0 (0x1u << 16) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH1 (0x1u << 17) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH2 (0x1u << 18) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH3 (0x1u << 19) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH4 (0x1u << 20) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH5 (0x1u << 21) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH6 (0x1u << 22) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+#define MATRIX_SSR_WRNSECH7 (0x1u << 23) /**< \brief (MATRIX_SSR[13]) Write Not Secured for HSELx Security Region */\r
+/* -------- MATRIX_SASSR[13] : (MATRIX Offset: 0x0240) Security Areas Split Slave 0 Register -------- */\r
+#define MATRIX_SASSR_SASPLIT0_Pos 0\r
+#define MATRIX_SASSR_SASPLIT0_Msk (0xfu << MATRIX_SASSR_SASPLIT0_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT0(value) ((MATRIX_SASSR_SASPLIT0_Msk & ((value) << MATRIX_SASSR_SASPLIT0_Pos)))\r
+#define MATRIX_SASSR_SASPLIT1_Pos 4\r
+#define MATRIX_SASSR_SASPLIT1_Msk (0xfu << MATRIX_SASSR_SASPLIT1_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT1(value) ((MATRIX_SASSR_SASPLIT1_Msk & ((value) << MATRIX_SASSR_SASPLIT1_Pos)))\r
+#define MATRIX_SASSR_SASPLIT2_Pos 8\r
+#define MATRIX_SASSR_SASPLIT2_Msk (0xfu << MATRIX_SASSR_SASPLIT2_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT2(value) ((MATRIX_SASSR_SASPLIT2_Msk & ((value) << MATRIX_SASSR_SASPLIT2_Pos)))\r
+#define MATRIX_SASSR_SASPLIT3_Pos 12\r
+#define MATRIX_SASSR_SASPLIT3_Msk (0xfu << MATRIX_SASSR_SASPLIT3_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT3(value) ((MATRIX_SASSR_SASPLIT3_Msk & ((value) << MATRIX_SASSR_SASPLIT3_Pos)))\r
+#define MATRIX_SASSR_SASPLIT4_Pos 16\r
+#define MATRIX_SASSR_SASPLIT4_Msk (0xfu << MATRIX_SASSR_SASPLIT4_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT4(value) ((MATRIX_SASSR_SASPLIT4_Msk & ((value) << MATRIX_SASSR_SASPLIT4_Pos)))\r
+#define MATRIX_SASSR_SASPLIT5_Pos 20\r
+#define MATRIX_SASSR_SASPLIT5_Msk (0xfu << MATRIX_SASSR_SASPLIT5_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT5(value) ((MATRIX_SASSR_SASPLIT5_Msk & ((value) << MATRIX_SASSR_SASPLIT5_Pos)))\r
+#define MATRIX_SASSR_SASPLIT6_Pos 24\r
+#define MATRIX_SASSR_SASPLIT6_Msk (0xfu << MATRIX_SASSR_SASPLIT6_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT6(value) ((MATRIX_SASSR_SASPLIT6_Msk & ((value) << MATRIX_SASSR_SASPLIT6_Pos)))\r
+#define MATRIX_SASSR_SASPLIT7_Pos 28\r
+#define MATRIX_SASSR_SASPLIT7_Msk (0xfu << MATRIX_SASSR_SASPLIT7_Pos) /**< \brief (MATRIX_SASSR[13]) Security Areas Split for HSELx Security Region */\r
+#define MATRIX_SASSR_SASPLIT7(value) ((MATRIX_SASSR_SASPLIT7_Msk & ((value) << MATRIX_SASSR_SASPLIT7_Pos)))\r
+/* -------- MATRIX_SRTSR[13] : (MATRIX Offset: 0x0280) Security Region Top Slave 0 Register -------- */\r
+#define MATRIX_SRTSR_SRTOP0_Pos 0\r
+#define MATRIX_SRTSR_SRTOP0_Msk (0xfu << MATRIX_SRTSR_SRTOP0_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP0(value) ((MATRIX_SRTSR_SRTOP0_Msk & ((value) << MATRIX_SRTSR_SRTOP0_Pos)))\r
+#define MATRIX_SRTSR_SRTOP1_Pos 4\r
+#define MATRIX_SRTSR_SRTOP1_Msk (0xfu << MATRIX_SRTSR_SRTOP1_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP1(value) ((MATRIX_SRTSR_SRTOP1_Msk & ((value) << MATRIX_SRTSR_SRTOP1_Pos)))\r
+#define MATRIX_SRTSR_SRTOP2_Pos 8\r
+#define MATRIX_SRTSR_SRTOP2_Msk (0xfu << MATRIX_SRTSR_SRTOP2_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP2(value) ((MATRIX_SRTSR_SRTOP2_Msk & ((value) << MATRIX_SRTSR_SRTOP2_Pos)))\r
+#define MATRIX_SRTSR_SRTOP3_Pos 12\r
+#define MATRIX_SRTSR_SRTOP3_Msk (0xfu << MATRIX_SRTSR_SRTOP3_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP3(value) ((MATRIX_SRTSR_SRTOP3_Msk & ((value) << MATRIX_SRTSR_SRTOP3_Pos)))\r
+#define MATRIX_SRTSR_SRTOP4_Pos 16\r
+#define MATRIX_SRTSR_SRTOP4_Msk (0xfu << MATRIX_SRTSR_SRTOP4_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP4(value) ((MATRIX_SRTSR_SRTOP4_Msk & ((value) << MATRIX_SRTSR_SRTOP4_Pos)))\r
+#define MATRIX_SRTSR_SRTOP5_Pos 20\r
+#define MATRIX_SRTSR_SRTOP5_Msk (0xfu << MATRIX_SRTSR_SRTOP5_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP5(value) ((MATRIX_SRTSR_SRTOP5_Msk & ((value) << MATRIX_SRTSR_SRTOP5_Pos)))\r
+#define MATRIX_SRTSR_SRTOP6_Pos 24\r
+#define MATRIX_SRTSR_SRTOP6_Msk (0xfu << MATRIX_SRTSR_SRTOP6_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP6(value) ((MATRIX_SRTSR_SRTOP6_Msk & ((value) << MATRIX_SRTSR_SRTOP6_Pos)))\r
+#define MATRIX_SRTSR_SRTOP7_Pos 28\r
+#define MATRIX_SRTSR_SRTOP7_Msk (0xfu << MATRIX_SRTSR_SRTOP7_Pos) /**< \brief (MATRIX_SRTSR[13]) HSELx Security Region Top */\r
+#define MATRIX_SRTSR_SRTOP7(value) ((MATRIX_SRTSR_SRTOP7_Msk & ((value) << MATRIX_SRTSR_SRTOP7_Pos)))\r
+/* -------- MATRIX_SPSELR[3] : (MATRIX Offset: 0x02C0) Security Peripheral Select 1 Register -------- */\r
+#define MATRIX_SPSELR_NSECP0 (0x1u << 0) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP1 (0x1u << 1) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP2 (0x1u << 2) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP3 (0x1u << 3) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP4 (0x1u << 4) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP5 (0x1u << 5) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP6 (0x1u << 6) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP7 (0x1u << 7) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP8 (0x1u << 8) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP9 (0x1u << 9) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP10 (0x1u << 10) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP11 (0x1u << 11) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP12 (0x1u << 12) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP13 (0x1u << 13) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP14 (0x1u << 14) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP15 (0x1u << 15) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP16 (0x1u << 16) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP17 (0x1u << 17) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP18 (0x1u << 18) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP19 (0x1u << 19) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP20 (0x1u << 20) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP21 (0x1u << 21) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP22 (0x1u << 22) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP23 (0x1u << 23) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP24 (0x1u << 24) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP25 (0x1u << 25) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP26 (0x1u << 26) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP27 (0x1u << 27) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP28 (0x1u << 28) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP29 (0x1u << 29) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP30 (0x1u << 30) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+#define MATRIX_SPSELR_NSECP31 (0x1u << 31) /**< \brief (MATRIX_SPSELR[3]) Not Secured PSELy Peripheral */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR AHB Multi-port DDR-SDRAM Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_MPDDRC AHB Multi-port DDR-SDRAM Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Mpddrc hardware registers */\r
+typedef struct {\r
+  __IO uint32_t MPDDRC_MR;             /**< \brief (Mpddrc Offset: 0x00) MPDDRC Mode Register */\r
+  __IO uint32_t MPDDRC_RTR;            /**< \brief (Mpddrc Offset: 0x04) MPDDRC Refresh Timer Register */\r
+  __IO uint32_t MPDDRC_CR;             /**< \brief (Mpddrc Offset: 0x08) MPDDRC Configuration Register */\r
+  __IO uint32_t MPDDRC_TPR0;           /**< \brief (Mpddrc Offset: 0x0C) MPDDRC Timing Parameter 0 Register */\r
+  __IO uint32_t MPDDRC_TPR1;           /**< \brief (Mpddrc Offset: 0x10) MPDDRC Timing Parameter 1 Register */\r
+  __IO uint32_t MPDDRC_TPR2;           /**< \brief (Mpddrc Offset: 0x14) MPDDRC Timing Parameter 2 Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __IO uint32_t MPDDRC_LPR;            /**< \brief (Mpddrc Offset: 0x1C) MPDDRC Low-power Register */\r
+  __IO uint32_t MPDDRC_MD;             /**< \brief (Mpddrc Offset: 0x20) MPDDRC Memory Device Register */\r
+  __I  uint32_t Reserved2[1];\r
+  __IO uint32_t MPDDRC_LPDDR2_LPR;     /**< \brief (Mpddrc Offset: 0x28) MPDDRC LPDDR2 Low-power Register */\r
+  __IO uint32_t MPDDRC_LPDDR2_CAL_MR4; /**< \brief (Mpddrc Offset: 0x2C) MPDDRC LPDDR2 Calibration and MR4 Register */\r
+  __IO uint32_t MPDDRC_LPDDR2_TIM_CAL; /**< \brief (Mpddrc Offset: 0x30) MPDDRC LPDDR2 Timing Calibration Register */\r
+  __IO uint32_t MPDDRC_IO_CALIBR;      /**< \brief (Mpddrc Offset: 0x34) MPDDRC IO Calibration */\r
+  __IO uint32_t MPDDRC_OCMS;           /**< \brief (Mpddrc Offset: 0x38) MPDDRC OCMS Register */\r
+  __O  uint32_t MPDDRC_OCMS_KEY1;      /**< \brief (Mpddrc Offset: 0x3C) MPDDRC OCMS KEY1 Register */\r
+  __O  uint32_t MPDDRC_OCMS_KEY2;      /**< \brief (Mpddrc Offset: 0x40) MPDDRC OCMS KEY2 Register */\r
+  __IO uint32_t MPDDRC_CONF_ARBITER;   /**< \brief (Mpddrc Offset: 0x44) MPDDRC Configuration Arbiter */\r
+  __IO uint32_t MPDDRC_TIMEOUT;        /**< \brief (Mpddrc Offset: 0x48) MPDDRC Time-out Port 0/1/2/3 */\r
+  __IO uint32_t MPDDRC_REQ_PORT_0123;  /**< \brief (Mpddrc Offset: 0x4C) MPDDRC Time-out Request Port 0/1/2/3 */\r
+  __IO uint32_t MPDDRC_REQ_PORT_4567;  /**< \brief (Mpddrc Offset: 0x50) MPDDRC Time-out Request Port 4/5/6/7 */\r
+  __I  uint32_t MPDDRC_BDW_PORT_0123;  /**< \brief (Mpddrc Offset: 0x54) MPDDRC Bandwidth Port 0/1/2/3 */\r
+  __I  uint32_t MPDDRC_BDW_PORT_4567;  /**< \brief (Mpddrc Offset: 0x58) MPDDRC Bandwidth Port 4/5/6/7 */\r
+  __IO uint32_t MPDDRC_RD_DATA_PATH;   /**< \brief (Mpddrc Offset: 0x5C) MPDDRC_READ_DATA_PATH */\r
+  __IO uint32_t MPDDRC_SAW[4];         /**< \brief (Mpddrc Offset: 0x60) MPDDRC Smart Adaptation Wrapper 0 Register */\r
+  __I  uint32_t Reserved3[29];\r
+  __IO uint32_t MPDDRC_WPMR;           /**< \brief (Mpddrc Offset: 0xE4) MPDDRC Write Protect Control Register */\r
+  __I  uint32_t MPDDRC_WPSR;           /**< \brief (Mpddrc Offset: 0xE8) MPDDRC Write Protect Status Register */\r
+  __I  uint32_t Reserved4[5];\r
+  __IO uint32_t MPDDRC_DLL_OS;         /**< \brief (Mpddrc Offset: 0x100) MPDDRC DLL Offset Selection Register */\r
+  __IO uint32_t MPDDRC_DLL_MO;         /**< \brief (Mpddrc Offset: 0x104) MPDDRC DLL MASTER Offset Register */\r
+  __IO uint32_t MPDDRC_DLL_SO0;        /**< \brief (Mpddrc Offset: 0x108) MPDDRC DLL SLAVE Offset 0 Register */\r
+  __IO uint32_t MPDDRC_DLL_SO1;        /**< \brief (Mpddrc Offset: 0x10C) MPDDRC DLL SLAVE Offset 1 Register */\r
+  __IO uint32_t MPDDRC_DLL_WRO;        /**< \brief (Mpddrc Offset: 0x110) MPDDRC DLL CLKWR Offset Register */\r
+  __IO uint32_t MPDDRC_DLL_ADO;        /**< \brief (Mpddrc Offset: 0x114) MPDDRC DLL CLKAD Offset Register */\r
+  __I  uint32_t MPDDRC_DLL_SM[4];      /**< \brief (Mpddrc Offset: 0x118) MPDDRC DLL Status MASTER0 Register */\r
+  __I  uint32_t MPDDRC_DLL_SSL[8];     /**< \brief (Mpddrc Offset: 0x128) MPDDRC DLL Status SLAVE0 Register */\r
+  __I  uint32_t MPDDRC_DLL_SWR[4];     /**< \brief (Mpddrc Offset: 0x148) MPDDRC DLL Status CLKWR0 Register */\r
+  __I  uint32_t MPDDRC_DLL_SAD;        /**< \brief (Mpddrc Offset: 0x158) MPDDRC DLL Status CLKAD Register */\r
+} Mpddrc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- MPDDRC_MR : (MPDDRC Offset: 0x00) MPDDRC Mode Register -------- */\r
+#define MPDDRC_MR_MODE_Pos 0\r
+#define MPDDRC_MR_MODE_Msk (0x7u << MPDDRC_MR_MODE_Pos) /**< \brief (MPDDRC_MR) MPDDRC Command Mode */\r
+#define   MPDDRC_MR_MODE_NORMAL_CMD (0x0u << 0) /**< \brief (MPDDRC_MR) Normal Mode. Any access to the MPDDRC is decoded normally. To activate this mode, the command must be followed by a write to the DDR-SDRAM. */\r
+#define   MPDDRC_MR_MODE_NOP_CMD (0x1u << 0) /**< \brief (MPDDRC_MR) The MPDDRC issues a NOP command when the DDR-SDRAM device is accessed regardless of the cycle. To activate this mode, the command must be followed by a write to the DDR-SDRAM. */\r
+#define   MPDDRC_MR_MODE_PRCGALL_CMD (0x2u << 0) /**< \brief (MPDDRC_MR) The MPDDRC issues the All Banks Precharge command when the DDR-SDRAM device is accessed regardless of the cycle. To activate this mode, the command must be followed by a write to the SDRAM. */\r
+#define   MPDDRC_MR_MODE_LMR_CMD (0x3u << 0) /**< \brief (MPDDRC_MR) The MPDDRC issues a Load Mode Register command when the DDR-SDRAM device is accessed regardless of the cycle. To activate this mode, the command must be followed by a write to the DDR-SDRAM. */\r
+#define   MPDDRC_MR_MODE_RFSH_CMD (0x4u << 0) /**< \brief (MPDDRC_MR) The MPDDRC issues an Auto-Refresh command when the DDR-SDRAM device is accessed regardless of the cycle. Previously, an "All Banks Precharge" command must be issued. To activate this mode, the command must be followed by a write to the DDR-SDRAM. */\r
+#define   MPDDRC_MR_MODE_EXT_LMR_CMD (0x5u << 0) /**< \brief (MPDDRC_MR) The MPDDRC issues an Extended Load Mode Register command when the SDRAM device is accessed regardless of the cycle. To activate this mode, the command must be followed by a write to the DDR-SDRAM. The write in the DDR-SDRAM must be done in the appropriate bank. */\r
+#define   MPDDRC_MR_MODE_DEEP_CMD (0x6u << 0) /**< \brief (MPDDRC_MR) Deep power mode: Access to deep power-down mode */\r
+#define   MPDDRC_MR_MODE_LPDDR2_CMD (0x7u << 0) /**< \brief (MPDDRC_MR) The MPDDRC issues an LPDDR2 Mode Register command when the Low-power DDR2-SDRAM device is accessed regardless of the cycle. To activate this mode, the Mode Register command must be followed by a write to the Low-power DDR2-SDRAM. */\r
+#define MPDDRC_MR_MRS_Pos 8\r
+#define MPDDRC_MR_MRS_Msk (0xffu << MPDDRC_MR_MRS_Pos) /**< \brief (MPDDRC_MR) Mode Register Select LPDDR2 */\r
+#define MPDDRC_MR_MRS(value) ((MPDDRC_MR_MRS_Msk & ((value) << MPDDRC_MR_MRS_Pos)))\r
+/* -------- MPDDRC_RTR : (MPDDRC Offset: 0x04) MPDDRC Refresh Timer Register -------- */\r
+#define MPDDRC_RTR_COUNT_Pos 0\r
+#define MPDDRC_RTR_COUNT_Msk (0xfffu << MPDDRC_RTR_COUNT_Pos) /**< \brief (MPDDRC_RTR) MPDDRC Refresh Timer Count */\r
+#define MPDDRC_RTR_COUNT(value) ((MPDDRC_RTR_COUNT_Msk & ((value) << MPDDRC_RTR_COUNT_Pos)))\r
+#define MPDDRC_RTR_ADJ_REF (0x1u << 16) /**< \brief (MPDDRC_RTR) Adjust Refresh Rate */\r
+#define MPDDRC_RTR_REF_PB (0x1u << 17) /**< \brief (MPDDRC_RTR) Refresh Per Bank */\r
+#define MPDDRC_RTR_MR4_VALUE_Pos 20\r
+#define MPDDRC_RTR_MR4_VALUE_Msk (0x7u << MPDDRC_RTR_MR4_VALUE_Pos) /**< \brief (MPDDRC_RTR) Content of MR4 Register */\r
+#define MPDDRC_RTR_MR4_VALUE(value) ((MPDDRC_RTR_MR4_VALUE_Msk & ((value) << MPDDRC_RTR_MR4_VALUE_Pos)))\r
+/* -------- MPDDRC_CR : (MPDDRC Offset: 0x08) MPDDRC Configuration Register -------- */\r
+#define MPDDRC_CR_NC_Pos 0\r
+#define MPDDRC_CR_NC_Msk (0x3u << MPDDRC_CR_NC_Pos) /**< \brief (MPDDRC_CR) Number of Column Bits */\r
+#define   MPDDRC_CR_NC_9_COL_BITS (0x0u << 0) /**< \brief (MPDDRC_CR) 9 bit to define the column number, up to 512 column */\r
+#define   MPDDRC_CR_NC_10_COL_BITS (0x1u << 0) /**< \brief (MPDDRC_CR) 10 bit to define the column number, up to 1024 columns */\r
+#define   MPDDRC_CR_NC_11_COL_BITS (0x2u << 0) /**< \brief (MPDDRC_CR) 11 bit to define the column number, up to 2048 columns */\r
+#define   MPDDRC_CR_NC_12_COL_BITS (0x3u << 0) /**< \brief (MPDDRC_CR) 12 bit to define the column number, up to 4096 columns */\r
+#define MPDDRC_CR_NR_Pos 2\r
+#define MPDDRC_CR_NR_Msk (0x3u << MPDDRC_CR_NR_Pos) /**< \brief (MPDDRC_CR) Number of Row Bits */\r
+#define   MPDDRC_CR_NR_11_ROW_BITS (0x0u << 2) /**< \brief (MPDDRC_CR) 11 bit to define the row number, up to 2048 rows */\r
+#define   MPDDRC_CR_NR_12_ROW_BITS (0x1u << 2) /**< \brief (MPDDRC_CR) 12 bit to define the row number, up to 4096 rows */\r
+#define   MPDDRC_CR_NR_13_ROW_BITS (0x2u << 2) /**< \brief (MPDDRC_CR) 13 bit to define the row number, up to 8192 rows */\r
+#define   MPDDRC_CR_NR_14_ROW_BITS (0x3u << 2) /**< \brief (MPDDRC_CR) 14 bit to define the row number, up to 16384 rows */\r
+#define MPDDRC_CR_CAS_Pos 4\r
+#define MPDDRC_CR_CAS_Msk (0x7u << MPDDRC_CR_CAS_Pos) /**< \brief (MPDDRC_CR) CAS Latency */\r
+#define   MPDDRC_CR_CAS_DDR_CAS2 (0x2u << 4) /**< \brief (MPDDRC_CR) LPDDR1 CAS Latency 2 */\r
+#define   MPDDRC_CR_CAS_DDR_CAS3 (0x3u << 4) /**< \brief (MPDDRC_CR) DDR2/LPDDR2/LPDDR1 CAS Latency 3 */\r
+#define   MPDDRC_CR_CAS_DDR_CAS4 (0x4u << 4) /**< \brief (MPDDRC_CR) DDR2/LPDDR2 CAS Latency 4 */\r
+#define   MPDDRC_CR_CAS_DDR_CAS5 (0x5u << 4) /**< \brief (MPDDRC_CR) DDR2/LPDDR2 CAS Latency 5 */\r
+#define   MPDDRC_CR_CAS_DDR_CAS6 (0x6u << 4) /**< \brief (MPDDRC_CR) DDR2 CAS Latency 6 */\r
+#define MPDDRC_CR_DLL (0x1u << 7) /**< \brief (MPDDRC_CR) Reset DLL */\r
+#define   MPDDRC_CR_DLL_RESET_DISABLED (0x0u << 7) /**< \brief (MPDDRC_CR) Disable DLL reset. */\r
+#define   MPDDRC_CR_DLL_RESET_ENABLED (0x1u << 7) /**< \brief (MPDDRC_CR) Enable DLL reset. */\r
+#define MPDDRC_CR_DIC_DS (0x1u << 8) /**< \brief (MPDDRC_CR) Output Driver Impedance Control (Drive Strength) */\r
+#define   MPDDRC_CR_DIC_DS_DDR2_NORMALSTRENGTH (0x0u << 8) /**< \brief (MPDDRC_CR) Normal driver strength */\r
+#define   MPDDRC_CR_DIC_DS_DDR2_WEAKSTRENGTH (0x1u << 8) /**< \brief (MPDDRC_CR) Weak driver strength */\r
+#define MPDDRC_CR_DIS_DLL (0x1u << 9) /**< \brief (MPDDRC_CR) DISABLE DLL */\r
+#define MPDDRC_CR_ZQ_Pos 10\r
+#define MPDDRC_CR_ZQ_Msk (0x3u << MPDDRC_CR_ZQ_Pos) /**< \brief (MPDDRC_CR) ZQ Calibration */\r
+#define   MPDDRC_CR_ZQ_INIT (0x0u << 10) /**< \brief (MPDDRC_CR) Calibration command after initialization */\r
+#define   MPDDRC_CR_ZQ_LONG (0x1u << 10) /**< \brief (MPDDRC_CR) Long calibration */\r
+#define   MPDDRC_CR_ZQ_SHORT (0x2u << 10) /**< \brief (MPDDRC_CR) Short calibration */\r
+#define   MPDDRC_CR_ZQ_RESET (0x3u << 10) /**< \brief (MPDDRC_CR) ZQ Reset */\r
+#define MPDDRC_CR_OCD_Pos 12\r
+#define MPDDRC_CR_OCD_Msk (0x7u << MPDDRC_CR_OCD_Pos) /**< \brief (MPDDRC_CR) Off-chip Driver */\r
+#define   MPDDRC_CR_OCD_DDR2_EXITCALIB (0x0u << 12) /**< \brief (MPDDRC_CR) Exit from OCD calibration mode and maintain settings */\r
+#define   MPDDRC_CR_OCD_DDR2_DEFAULT_CALIB (0x7u << 12) /**< \brief (MPDDRC_CR) OCD calibration default */\r
+#define MPDDRC_CR_DQMS (0x1u << 16) /**< \brief (MPDDRC_CR) Mask Data is Shared */\r
+#define   MPDDRC_CR_DQMS_NOT_SHARED (0x0u << 16) /**< \brief (MPDDRC_CR) DQM is not shared with another controller. */\r
+#define   MPDDRC_CR_DQMS_SHARED (0x1u << 16) /**< \brief (MPDDRC_CR) DQM is shared with another controller. */\r
+#define MPDDRC_CR_ENRDM (0x1u << 17) /**< \brief (MPDDRC_CR) Enable Read Measure */\r
+#define   MPDDRC_CR_ENRDM_OFF (0x0u << 17) /**< \brief (MPDDRC_CR) DQS/DDR_DATA phase error correction is disabled. */\r
+#define   MPDDRC_CR_ENRDM_ON (0x1u << 17) /**< \brief (MPDDRC_CR) DQS/DDR_DATA phase error correction is enabled. */\r
+#define MPDDRC_CR_LC_LPDDR1 (0x1u << 19) /**< \brief (MPDDRC_CR) Low-cost Low-power DDR1. */\r
+#define   MPDDRC_CR_LC_LPDDR1_NOT_2_BANKS (0x0u << 19) /**< \brief (MPDDRC_CR) Any type of memory devices except of low cost, low density Low Power DDR1. */\r
+#define   MPDDRC_CR_LC_LPDDR1_2_BANKS_LPDDR1 (0x1u << 19) /**< \brief (MPDDRC_CR) Low-cost and low-density Low-power DDR1. These devices have a density of 32 Mbits and are organized as 2 internal banks. To use this feature, the user has to define the type of memory and the data bus width (see "MPDDRC Memory Device Register" on page 69).The 16-bit memory device is organized as 2 banks, 9 columns and 11 rows. The 32-bit memory device is organized as 2 banks, 8 columns and 11 rows.It is impossible to use two 16-bit memory devices (2x32 Mbits) for creating one 32-bit memory device (64 Mbits). In this case, it is recommended to use one 32-bit memory device which embeds 4 internal banks. */\r
+#define MPDDRC_CR_NB (0x1u << 20) /**< \brief (MPDDRC_CR) Number of Banks */\r
+#define   MPDDRC_CR_NB_4_BANKS (0x0u << 20) /**< \brief (MPDDRC_CR) 4 banks memory devices. */\r
+#define   MPDDRC_CR_NB_8_BANKS (0x1u << 20) /**< \brief (MPDDRC_CR) 8 banks. Only possible when using the DDR2-SDRAM and Low-power DDR2-SDRAM devices. */\r
+#define MPDDRC_CR_NDQS (0x1u << 21) /**< \brief (MPDDRC_CR) Not DQS */\r
+#define   MPDDRC_CR_NDQS_ENABLED (0x0u << 21) /**< \brief (MPDDRC_CR) Not DQS is enabled. */\r
+#define   MPDDRC_CR_NDQS_DISABLED (0x1u << 21) /**< \brief (MPDDRC_CR) Not DQS is disabled. */\r
+#define MPDDRC_CR_DECOD (0x1u << 22) /**< \brief (MPDDRC_CR) Type of Decoding */\r
+#define   MPDDRC_CR_DECOD_SEQUENTIAL (0x0u << 22) /**< \brief (MPDDRC_CR) Method for address mapping where banks alternate at each last DDR-SDRAM page of the current bank. */\r
+#define   MPDDRC_CR_DECOD_INTERLEAVED (0x1u << 22) /**< \brief (MPDDRC_CR) Method for address mapping where banks alternate at each SDRAM end page of the current bank. */\r
+#define MPDDRC_CR_UNAL (0x1u << 23) /**< \brief (MPDDRC_CR) Support Unaligned Access */\r
+#define   MPDDRC_CR_UNAL_UNSUPPORTED (0x0u << 23) /**< \brief (MPDDRC_CR) Unaligned access is not supported. */\r
+#define   MPDDRC_CR_UNAL_SUPPORTED (0x1u << 23) /**< \brief (MPDDRC_CR) Unaligned access is supported. */\r
+/* -------- MPDDRC_TPR0 : (MPDDRC Offset: 0x0C) MPDDRC Timing Parameter 0 Register -------- */\r
+#define MPDDRC_TPR0_TRAS_Pos 0\r
+#define MPDDRC_TPR0_TRAS_Msk (0xfu << MPDDRC_TPR0_TRAS_Pos) /**< \brief (MPDDRC_TPR0) Active to Precharge Delay */\r
+#define MPDDRC_TPR0_TRAS(value) ((MPDDRC_TPR0_TRAS_Msk & ((value) << MPDDRC_TPR0_TRAS_Pos)))\r
+#define MPDDRC_TPR0_TRCD_Pos 4\r
+#define MPDDRC_TPR0_TRCD_Msk (0xfu << MPDDRC_TPR0_TRCD_Pos) /**< \brief (MPDDRC_TPR0) Row to Column Delay */\r
+#define MPDDRC_TPR0_TRCD(value) ((MPDDRC_TPR0_TRCD_Msk & ((value) << MPDDRC_TPR0_TRCD_Pos)))\r
+#define MPDDRC_TPR0_TWR_Pos 8\r
+#define MPDDRC_TPR0_TWR_Msk (0xfu << MPDDRC_TPR0_TWR_Pos) /**< \brief (MPDDRC_TPR0) Write Recovery Delay */\r
+#define MPDDRC_TPR0_TWR(value) ((MPDDRC_TPR0_TWR_Msk & ((value) << MPDDRC_TPR0_TWR_Pos)))\r
+#define MPDDRC_TPR0_TRC_Pos 12\r
+#define MPDDRC_TPR0_TRC_Msk (0xfu << MPDDRC_TPR0_TRC_Pos) /**< \brief (MPDDRC_TPR0) Row Cycle Delay */\r
+#define MPDDRC_TPR0_TRC(value) ((MPDDRC_TPR0_TRC_Msk & ((value) << MPDDRC_TPR0_TRC_Pos)))\r
+#define MPDDRC_TPR0_TRP_Pos 16\r
+#define MPDDRC_TPR0_TRP_Msk (0xfu << MPDDRC_TPR0_TRP_Pos) /**< \brief (MPDDRC_TPR0) Row Precharge Delay */\r
+#define MPDDRC_TPR0_TRP(value) ((MPDDRC_TPR0_TRP_Msk & ((value) << MPDDRC_TPR0_TRP_Pos)))\r
+#define MPDDRC_TPR0_TRRD_Pos 20\r
+#define MPDDRC_TPR0_TRRD_Msk (0xfu << MPDDRC_TPR0_TRRD_Pos) /**< \brief (MPDDRC_TPR0) Active BankA to Active BankB */\r
+#define MPDDRC_TPR0_TRRD(value) ((MPDDRC_TPR0_TRRD_Msk & ((value) << MPDDRC_TPR0_TRRD_Pos)))\r
+#define MPDDRC_TPR0_TWTR_Pos 24\r
+#define MPDDRC_TPR0_TWTR_Msk (0xfu << MPDDRC_TPR0_TWTR_Pos) /**< \brief (MPDDRC_TPR0) Internal Write to Read Delay */\r
+#define MPDDRC_TPR0_TWTR(value) ((MPDDRC_TPR0_TWTR_Msk & ((value) << MPDDRC_TPR0_TWTR_Pos)))\r
+#define MPDDRC_TPR0_TMRD_Pos 28\r
+#define MPDDRC_TPR0_TMRD_Msk (0xfu << MPDDRC_TPR0_TMRD_Pos) /**< \brief (MPDDRC_TPR0) Load Mode Register Command to Activate or Refresh Command */\r
+#define MPDDRC_TPR0_TMRD(value) ((MPDDRC_TPR0_TMRD_Msk & ((value) << MPDDRC_TPR0_TMRD_Pos)))\r
+/* -------- MPDDRC_TPR1 : (MPDDRC Offset: 0x10) MPDDRC Timing Parameter 1 Register -------- */\r
+#define MPDDRC_TPR1_TRFC_Pos 0\r
+#define MPDDRC_TPR1_TRFC_Msk (0x7fu << MPDDRC_TPR1_TRFC_Pos) /**< \brief (MPDDRC_TPR1) Row Cycle Delay */\r
+#define MPDDRC_TPR1_TRFC(value) ((MPDDRC_TPR1_TRFC_Msk & ((value) << MPDDRC_TPR1_TRFC_Pos)))\r
+#define MPDDRC_TPR1_TXSNR_Pos 8\r
+#define MPDDRC_TPR1_TXSNR_Msk (0xffu << MPDDRC_TPR1_TXSNR_Pos) /**< \brief (MPDDRC_TPR1) Exit Self-refresh Delay to Non Read Command */\r
+#define MPDDRC_TPR1_TXSNR(value) ((MPDDRC_TPR1_TXSNR_Msk & ((value) << MPDDRC_TPR1_TXSNR_Pos)))\r
+#define MPDDRC_TPR1_TXSRD_Pos 16\r
+#define MPDDRC_TPR1_TXSRD_Msk (0xffu << MPDDRC_TPR1_TXSRD_Pos) /**< \brief (MPDDRC_TPR1) Exit Self-refresh Delay to Read Command */\r
+#define MPDDRC_TPR1_TXSRD(value) ((MPDDRC_TPR1_TXSRD_Msk & ((value) << MPDDRC_TPR1_TXSRD_Pos)))\r
+#define MPDDRC_TPR1_TXP_Pos 24\r
+#define MPDDRC_TPR1_TXP_Msk (0xfu << MPDDRC_TPR1_TXP_Pos) /**< \brief (MPDDRC_TPR1) Exit Power-down Delay to First Command */\r
+#define MPDDRC_TPR1_TXP(value) ((MPDDRC_TPR1_TXP_Msk & ((value) << MPDDRC_TPR1_TXP_Pos)))\r
+/* -------- MPDDRC_TPR2 : (MPDDRC Offset: 0x14) MPDDRC Timing Parameter 2 Register -------- */\r
+#define MPDDRC_TPR2_TXARD_Pos 0\r
+#define MPDDRC_TPR2_TXARD_Msk (0xfu << MPDDRC_TPR2_TXARD_Pos) /**< \brief (MPDDRC_TPR2) Exit Active Power Down Delay to Read Command in Mode "Fast Exit" */\r
+#define MPDDRC_TPR2_TXARD(value) ((MPDDRC_TPR2_TXARD_Msk & ((value) << MPDDRC_TPR2_TXARD_Pos)))\r
+#define MPDDRC_TPR2_TXARDS_Pos 4\r
+#define MPDDRC_TPR2_TXARDS_Msk (0xfu << MPDDRC_TPR2_TXARDS_Pos) /**< \brief (MPDDRC_TPR2) Exit Active Power Down Delay to Read Command in Mode "Slow Exit" */\r
+#define MPDDRC_TPR2_TXARDS(value) ((MPDDRC_TPR2_TXARDS_Msk & ((value) << MPDDRC_TPR2_TXARDS_Pos)))\r
+#define MPDDRC_TPR2_TRPA_Pos 8\r
+#define MPDDRC_TPR2_TRPA_Msk (0xfu << MPDDRC_TPR2_TRPA_Pos) /**< \brief (MPDDRC_TPR2) Row Precharge All Delay */\r
+#define MPDDRC_TPR2_TRPA(value) ((MPDDRC_TPR2_TRPA_Msk & ((value) << MPDDRC_TPR2_TRPA_Pos)))\r
+#define MPDDRC_TPR2_TRTP_Pos 12\r
+#define MPDDRC_TPR2_TRTP_Msk (0x7u << MPDDRC_TPR2_TRTP_Pos) /**< \brief (MPDDRC_TPR2) Read to Precharge */\r
+#define MPDDRC_TPR2_TRTP(value) ((MPDDRC_TPR2_TRTP_Msk & ((value) << MPDDRC_TPR2_TRTP_Pos)))\r
+#define MPDDRC_TPR2_TFAW_Pos 16\r
+#define MPDDRC_TPR2_TFAW_Msk (0xfu << MPDDRC_TPR2_TFAW_Pos) /**< \brief (MPDDRC_TPR2) Four Active Windows */\r
+#define MPDDRC_TPR2_TFAW(value) ((MPDDRC_TPR2_TFAW_Msk & ((value) << MPDDRC_TPR2_TFAW_Pos)))\r
+/* -------- MPDDRC_LPR : (MPDDRC Offset: 0x1C) MPDDRC Low-power Register -------- */\r
+#define MPDDRC_LPR_LPCB_Pos 0\r
+#define MPDDRC_LPR_LPCB_Msk (0x3u << MPDDRC_LPR_LPCB_Pos) /**< \brief (MPDDRC_LPR) Low-power Command Bit */\r
+#define   MPDDRC_LPR_LPCB_NOLOWPOWER (0x0u << 0) /**< \brief (MPDDRC_LPR) Low-power feature is inhibited. No power-down, self-refresh and deep-power modes are issued to the DDR-SDRAM device. */\r
+#define   MPDDRC_LPR_LPCB_SELFREFRESH (0x1u << 0) /**< \brief (MPDDRC_LPR) The MPDDRC issues a self-refresh command to the DDR-SDRAM device, the clock(s) is/are deactivated and the CKE signal is set low. The DDR-SDRAM device leaves the self-refresh mode when accessed and reenters it after the access. */\r
+#define   MPDDRC_LPR_LPCB_POWERDOWN (0x2u << 0) /**< \brief (MPDDRC_LPR) The MPDDRC issues a Power-down command to the DDR-SDRAM device after each access, the CKE signal is set low. The DDR-SDRAM device leaves the power-down mode when accessed and reenters it after the access. */\r
+#define   MPDDRC_LPR_LPCB_DEEPPOWERDOWN (0x3u << 0) /**< \brief (MPDDRC_LPR) The MPDDRC issues a Deep Power-down command to the Low-power DDR-SDRAM device. */\r
+#define MPDDRC_LPR_CLK_FR (0x1u << 2) /**< \brief (MPDDRC_LPR) Clock Frozen Command Bit */\r
+#define   MPDDRC_LPR_CLK_FR_DISABLED (0x0u << 2) /**< \brief (MPDDRC_LPR) Clock(s) is/are not frozen. */\r
+#define   MPDDRC_LPR_CLK_FR_ENABLED (0x1u << 2) /**< \brief (MPDDRC_LPR) Clock(s) is/are frozen. */\r
+#define MPDDRC_LPR_LPDDR2_PWOFF (0x1u << 3) /**< \brief (MPDDRC_LPR) LPDDR2 Power Off Bit */\r
+#define   MPDDRC_LPR_LPDDR2_PWOFF_DISABLED (0x0u << 3) /**< \brief (MPDDRC_LPR) No power off sequence applied to LPDDR2. */\r
+#define   MPDDRC_LPR_LPDDR2_PWOFF_ENABLED (0x1u << 3) /**< \brief (MPDDRC_LPR) A power off sequence is applied to the LPDDR2 device. CKE is forced low. */\r
+#define MPDDRC_LPR_PASR_Pos 4\r
+#define MPDDRC_LPR_PASR_Msk (0x7u << MPDDRC_LPR_PASR_Pos) /**< \brief (MPDDRC_LPR) Partial Array Self-refresh */\r
+#define MPDDRC_LPR_PASR(value) ((MPDDRC_LPR_PASR_Msk & ((value) << MPDDRC_LPR_PASR_Pos)))\r
+#define MPDDRC_LPR_DS_Pos 8\r
+#define MPDDRC_LPR_DS_Msk (0x7u << MPDDRC_LPR_DS_Pos) /**< \brief (MPDDRC_LPR) Drive Strength */\r
+#define MPDDRC_LPR_DS(value) ((MPDDRC_LPR_DS_Msk & ((value) << MPDDRC_LPR_DS_Pos)))\r
+#define MPDDRC_LPR_TIMEOUT_Pos 12\r
+#define MPDDRC_LPR_TIMEOUT_Msk (0x3u << MPDDRC_LPR_TIMEOUT_Pos) /**< \brief (MPDDRC_LPR) Time Between Last Transfer and Low Power Mode */\r
+#define   MPDDRC_LPR_TIMEOUT_NONE (0x0u << 12) /**< \brief (MPDDRC_LPR) SDRAM low-power mode is activated immediately after the end of the last transfer. */\r
+#define   MPDDRC_LPR_TIMEOUT_DELAY_64_CLK (0x1u << 12) /**< \brief (MPDDRC_LPR) SDRAM low-power mode is activated 64 clock cycles after the end of the last transfer. */\r
+#define   MPDDRC_LPR_TIMEOUT_DELAY_128_CLK (0x2u << 12) /**< \brief (MPDDRC_LPR) SDRAM low-power mode is activated 128 clock cycles after the end of the last transfer. */\r
+#define MPDDRC_LPR_APDE (0x1u << 16) /**< \brief (MPDDRC_LPR) Active Power Down Exit Time */\r
+#define   MPDDRC_LPR_APDE_DDR2_FAST_EXIT (0x0u << 16) /**< \brief (MPDDRC_LPR) Fast Exit from Power Down. The DDR2-SDRAM devices only. */\r
+#define   MPDDRC_LPR_APDE_DDR2_SLOW_EXIT (0x1u << 16) /**< \brief (MPDDRC_LPR) Slow Exit from Power Down. The DDR2-SDRAM devices only. */\r
+#define MPDDRC_LPR_UPD_MR_Pos 20\r
+#define MPDDRC_LPR_UPD_MR_Msk (0x3u << MPDDRC_LPR_UPD_MR_Pos) /**< \brief (MPDDRC_LPR) Update Load Mode Register and Extended Mode Register */\r
+#define   MPDDRC_LPR_UPD_MR_NO_UPDATE (0x0u << 20) /**< \brief (MPDDRC_LPR) Update of Load Mode and Extended Mode registers is disabled. */\r
+#define   MPDDRC_LPR_UPD_MR_UPDATE_SHAREDBUS (0x1u << 20) /**< \brief (MPDDRC_LPR) DDRSDRC shares an external bus. Automatic update is done during a refresh command and a pending read or write access in the SDRAM device. */\r
+#define   MPDDRC_LPR_UPD_MR_UPDATE_NOSHAREDBUS (0x2u << 20) /**< \brief (MPDDRC_LPR) DDRSDRC does not share an external bus. Automatic update is done before entering in self-refresh mode. */\r
+/* -------- MPDDRC_MD : (MPDDRC Offset: 0x20) MPDDRC Memory Device Register -------- */\r
+#define MPDDRC_MD_MD_Pos 0\r
+#define MPDDRC_MD_MD_Msk (0x7u << MPDDRC_MD_MD_Pos) /**< \brief (MPDDRC_MD) Memory Device */\r
+#define   MPDDRC_MD_MD_DDR_SDRAM (0x2u << 0) /**< \brief (MPDDRC_MD) DDR1-SDRAM */\r
+#define   MPDDRC_MD_MD_LPDDR_SDRAM (0x3u << 0) /**< \brief (MPDDRC_MD) Low-power DDR1-SDRAM */\r
+#define   MPDDRC_MD_MD_DDR2_SDRAM (0x6u << 0) /**< \brief (MPDDRC_MD) DDR2-SDRAM */\r
+#define   MPDDRC_MD_MD_LPDDR2_SDRAM (0x7u << 0) /**< \brief (MPDDRC_MD) Low-Power DDR2-SDRAM */\r
+#define MPDDRC_MD_DBW (0x1u << 4) /**< \brief (MPDDRC_MD) Data Bus Width */\r
+#define   MPDDRC_MD_DBW_DBW_32_BITS (0x0u << 4) /**< \brief (MPDDRC_MD) Data bus width is 32 bits. */\r
+#define   MPDDRC_MD_DBW_DBW_16_BITS (0x1u << 4) /**< \brief (MPDDRC_MD) Data bus width is 16 bits. */\r
+/* -------- MPDDRC_LPDDR2_LPR : (MPDDRC Offset: 0x28) MPDDRC LPDDR2 Low-power Register -------- */\r
+#define MPDDRC_LPDDR2_LPR_BK_MASK_PASR_Pos 0\r
+#define MPDDRC_LPDDR2_LPR_BK_MASK_PASR_Msk (0xffu << MPDDRC_LPDDR2_LPR_BK_MASK_PASR_Pos) /**< \brief (MPDDRC_LPDDR2_LPR) Bank Mask Bit/PASR */\r
+#define MPDDRC_LPDDR2_LPR_BK_MASK_PASR(value) ((MPDDRC_LPDDR2_LPR_BK_MASK_PASR_Msk & ((value) << MPDDRC_LPDDR2_LPR_BK_MASK_PASR_Pos)))\r
+#define MPDDRC_LPDDR2_LPR_SEG_MASK_Pos 8\r
+#define MPDDRC_LPDDR2_LPR_SEG_MASK_Msk (0xffffu << MPDDRC_LPDDR2_LPR_SEG_MASK_Pos) /**< \brief (MPDDRC_LPDDR2_LPR) Segment Mask Bit */\r
+#define MPDDRC_LPDDR2_LPR_SEG_MASK(value) ((MPDDRC_LPDDR2_LPR_SEG_MASK_Msk & ((value) << MPDDRC_LPDDR2_LPR_SEG_MASK_Pos)))\r
+#define MPDDRC_LPDDR2_LPR_DS_Pos 24\r
+#define MPDDRC_LPDDR2_LPR_DS_Msk (0xfu << MPDDRC_LPDDR2_LPR_DS_Pos) /**< \brief (MPDDRC_LPDDR2_LPR) Drive strength */\r
+#define MPDDRC_LPDDR2_LPR_DS(value) ((MPDDRC_LPDDR2_LPR_DS_Msk & ((value) << MPDDRC_LPDDR2_LPR_DS_Pos)))\r
+/* -------- MPDDRC_LPDDR2_CAL_MR4 : (MPDDRC Offset: 0x2C) MPDDRC LPDDR2 Calibration and MR4 Register -------- */\r
+#define MPDDRC_LPDDR2_CAL_MR4_COUNT_CAL_Pos 0\r
+#define MPDDRC_LPDDR2_CAL_MR4_COUNT_CAL_Msk (0xffffu << MPDDRC_LPDDR2_CAL_MR4_COUNT_CAL_Pos) /**< \brief (MPDDRC_LPDDR2_CAL_MR4) LPDDR2 Calibration Timer Count */\r
+#define MPDDRC_LPDDR2_CAL_MR4_COUNT_CAL(value) ((MPDDRC_LPDDR2_CAL_MR4_COUNT_CAL_Msk & ((value) << MPDDRC_LPDDR2_CAL_MR4_COUNT_CAL_Pos)))\r
+#define MPDDRC_LPDDR2_CAL_MR4_MR4_READ_Pos 16\r
+#define MPDDRC_LPDDR2_CAL_MR4_MR4_READ_Msk (0xffffu << MPDDRC_LPDDR2_CAL_MR4_MR4_READ_Pos) /**< \brief (MPDDRC_LPDDR2_CAL_MR4) Mode Register 4 Read Interval */\r
+#define MPDDRC_LPDDR2_CAL_MR4_MR4_READ(value) ((MPDDRC_LPDDR2_CAL_MR4_MR4_READ_Msk & ((value) << MPDDRC_LPDDR2_CAL_MR4_MR4_READ_Pos)))\r
+/* -------- MPDDRC_LPDDR2_TIM_CAL : (MPDDRC Offset: 0x30) MPDDRC LPDDR2 Timing Calibration Register -------- */\r
+#define MPDDRC_LPDDR2_TIM_CAL_ZQCS_Pos 0\r
+#define MPDDRC_LPDDR2_TIM_CAL_ZQCS_Msk (0xffu << MPDDRC_LPDDR2_TIM_CAL_ZQCS_Pos) /**< \brief (MPDDRC_LPDDR2_TIM_CAL) ZQ Calibration Short */\r
+#define MPDDRC_LPDDR2_TIM_CAL_ZQCS(value) ((MPDDRC_LPDDR2_TIM_CAL_ZQCS_Msk & ((value) << MPDDRC_LPDDR2_TIM_CAL_ZQCS_Pos)))\r
+/* -------- MPDDRC_IO_CALIBR : (MPDDRC Offset: 0x34) MPDDRC IO Calibration -------- */\r
+#define MPDDRC_IO_CALIBR_RDIV_Pos 0\r
+#define MPDDRC_IO_CALIBR_RDIV_Msk (0x7u << MPDDRC_IO_CALIBR_RDIV_Pos) /**< \brief (MPDDRC_IO_CALIBR) Resistor Divider, Output Driver Impedance */\r
+#define   MPDDRC_IO_CALIBR_RDIV_RZQ_34 (0x1u << 0) /**< \brief (MPDDRC_IO_CALIBR) LPDDR2 RZQ = 34,3 Ohms, DDR2/LPDDR1: Not applicable */\r
+#define   MPDDRC_IO_CALIBR_RDIV_RZQ_40_RZQ_33_3 (0x2u << 0) /**< \brief (MPDDRC_IO_CALIBR) LPDDR2:RZQ = 40 Ohms, DDR2/LPDDR1: RZQ = 33,3 Ohms */\r
+#define   MPDDRC_IO_CALIBR_RDIV_RZQ_48_RZQ_40 (0x3u << 0) /**< \brief (MPDDRC_IO_CALIBR) LPDDR2:RZQ =48 Ohms, DDR2/LPDDR1: RZQ =40 Ohms */\r
+#define   MPDDRC_IO_CALIBR_RDIV_RZQ_60_RZQ_50 (0x4u << 0) /**< \brief (MPDDRC_IO_CALIBR) LPDDR2:RZQ =60 Ohms, DDR2/LPDDR1: RZQ =50 Ohms */\r
+#define   MPDDRC_IO_CALIBR_RDIV_RZQ_80_RZQ_66_7 (0x6u << 0) /**< \brief (MPDDRC_IO_CALIBR) LPDDR2: RZQ = 80 Ohms, DDR2/LPDDR1: RZQ = 66,7 Ohms */\r
+#define   MPDDRC_IO_CALIBR_RDIV_RZQ_120_RZQ_100 (0x7u << 0) /**< \brief (MPDDRC_IO_CALIBR) LPDDR2:RZQ = 120 Ohms, DDR2/LPDDR1: RZQ = 100 Ohms */\r
+#define MPDDRC_IO_CALIBR_EN_CALIB (0x1u << 4) /**< \brief (MPDDRC_IO_CALIBR) Enable of the Calibration */\r
+#define   MPDDRC_IO_CALIBR_EN_CALIB_DISABLE_CALIBRATION (0x0u << 4) /**< \brief (MPDDRC_IO_CALIBR) Calibration is disabled. */\r
+#define   MPDDRC_IO_CALIBR_EN_CALIB_ENABLE_CALIBRATION (0x1u << 4) /**< \brief (MPDDRC_IO_CALIBR) Calibration is enabled. */\r
+#define MPDDRC_IO_CALIBR_TZQIO_Pos 8\r
+#define MPDDRC_IO_CALIBR_TZQIO_Msk (0x7u << MPDDRC_IO_CALIBR_TZQIO_Pos) /**< \brief (MPDDRC_IO_CALIBR) IO Calibration */\r
+#define MPDDRC_IO_CALIBR_TZQIO(value) ((MPDDRC_IO_CALIBR_TZQIO_Msk & ((value) << MPDDRC_IO_CALIBR_TZQIO_Pos)))\r
+#define MPDDRC_IO_CALIBR_CALCODEP_Pos 16\r
+#define MPDDRC_IO_CALIBR_CALCODEP_Msk (0xfu << MPDDRC_IO_CALIBR_CALCODEP_Pos) /**< \brief (MPDDRC_IO_CALIBR) Number of Transistor P */\r
+#define MPDDRC_IO_CALIBR_CALCODEP(value) ((MPDDRC_IO_CALIBR_CALCODEP_Msk & ((value) << MPDDRC_IO_CALIBR_CALCODEP_Pos)))\r
+#define MPDDRC_IO_CALIBR_CALCODEN_Pos 20\r
+#define MPDDRC_IO_CALIBR_CALCODEN_Msk (0xfu << MPDDRC_IO_CALIBR_CALCODEN_Pos) /**< \brief (MPDDRC_IO_CALIBR) Number of Transistor N */\r
+#define MPDDRC_IO_CALIBR_CALCODEN(value) ((MPDDRC_IO_CALIBR_CALCODEN_Msk & ((value) << MPDDRC_IO_CALIBR_CALCODEN_Pos)))\r
+/* -------- MPDDRC_OCMS : (MPDDRC Offset: 0x38) MPDDRC OCMS Register -------- */\r
+#define MPDDRC_OCMS_SCR_EN (0x1u << 0) /**< \brief (MPDDRC_OCMS) Scrambling Enable */\r
+/* -------- MPDDRC_OCMS_KEY1 : (MPDDRC Offset: 0x3C) MPDDRC OCMS KEY1 Register -------- */\r
+#define MPDDRC_OCMS_KEY1_KEY1_Pos 0\r
+#define MPDDRC_OCMS_KEY1_KEY1_Msk (0xffffffffu << MPDDRC_OCMS_KEY1_KEY1_Pos) /**< \brief (MPDDRC_OCMS_KEY1) Off-chip Memory Scrambling (OCMS) Key Part 1 */\r
+#define MPDDRC_OCMS_KEY1_KEY1(value) ((MPDDRC_OCMS_KEY1_KEY1_Msk & ((value) << MPDDRC_OCMS_KEY1_KEY1_Pos)))\r
+/* -------- MPDDRC_OCMS_KEY2 : (MPDDRC Offset: 0x40) MPDDRC OCMS KEY2 Register -------- */\r
+#define MPDDRC_OCMS_KEY2_KEY2_Pos 0\r
+#define MPDDRC_OCMS_KEY2_KEY2_Msk (0xffffffffu << MPDDRC_OCMS_KEY2_KEY2_Pos) /**< \brief (MPDDRC_OCMS_KEY2) Off-chip Memory Scrambling (OCMS) Key Part 2 */\r
+#define MPDDRC_OCMS_KEY2_KEY2(value) ((MPDDRC_OCMS_KEY2_KEY2_Msk & ((value) << MPDDRC_OCMS_KEY2_KEY2_Pos)))\r
+/* -------- MPDDRC_CONF_ARBITER : (MPDDRC Offset: 0x44) MPDDRC Configuration Arbiter -------- */\r
+#define MPDDRC_CONF_ARBITER_ARB_Pos 0\r
+#define MPDDRC_CONF_ARBITER_ARB_Msk (0x3u << MPDDRC_CONF_ARBITER_ARB_Pos) /**< \brief (MPDDRC_CONF_ARBITER) Type of Arbitration */\r
+#define   MPDDRC_CONF_ARBITER_ARB_ROUND (0x0u << 0) /**< \brief (MPDDRC_CONF_ARBITER) Round Robin */\r
+#define   MPDDRC_CONF_ARBITER_ARB_NB_REQUEST (0x1u << 0) /**< \brief (MPDDRC_CONF_ARBITER) Request Policy */\r
+#define   MPDDRC_CONF_ARBITER_ARB_BANDWIDTH (0x2u << 0) /**< \brief (MPDDRC_CONF_ARBITER) Bandwidth Policy */\r
+#define MPDDRC_CONF_ARBITER_BDW_BURST (0x1u << 2) /**< \brief (MPDDRC_CONF_ARBITER) Bandwidth is Reached or Bandwidth and Current Burst Access is Ended */\r
+#define MPDDRC_CONF_ARBITER_BDW_MAX_CUR (0x1u << 3) /**< \brief (MPDDRC_CONF_ARBITER) Bandwidth Max or Current */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P0 (0x1u << 8) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P1 (0x1u << 9) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P2 (0x1u << 10) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P3 (0x1u << 11) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P4 (0x1u << 12) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P5 (0x1u << 13) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P6 (0x1u << 14) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_RQ_WD_P7 (0x1u << 15) /**< \brief (MPDDRC_CONF_ARBITER) Request or Word from port X */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P0 (0x1u << 16) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P1 (0x1u << 17) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P2 (0x1u << 18) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P3 (0x1u << 19) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P4 (0x1u << 20) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P5 (0x1u << 21) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P6 (0x1u << 22) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+#define MPDDRC_CONF_ARBITER_MA_PR_P7 (0x1u << 23) /**< \brief (MPDDRC_CONF_ARBITER) Master or Software Provide Information */\r
+/* -------- MPDDRC_TIMEOUT : (MPDDRC Offset: 0x48) MPDDRC Time-out Port 0/1/2/3 -------- */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P0_Pos 0\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P0_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P0_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P0(value) ((MPDDRC_TIMEOUT_TIMEOUT_P0_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P0_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P1_Pos 4\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P1_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P1_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P1(value) ((MPDDRC_TIMEOUT_TIMEOUT_P1_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P1_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P2_Pos 8\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P2_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P2_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P2(value) ((MPDDRC_TIMEOUT_TIMEOUT_P2_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P2_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P3_Pos 12\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P3_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P3_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P3(value) ((MPDDRC_TIMEOUT_TIMEOUT_P3_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P3_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P4_Pos 16\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P4_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P4_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P4(value) ((MPDDRC_TIMEOUT_TIMEOUT_P4_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P4_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P5_Pos 20\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P5_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P5_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P5(value) ((MPDDRC_TIMEOUT_TIMEOUT_P5_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P5_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P6_Pos 24\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P6_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P6_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P6(value) ((MPDDRC_TIMEOUT_TIMEOUT_P6_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P6_Pos)))\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P7_Pos 28\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P7_Msk (0xfu << MPDDRC_TIMEOUT_TIMEOUT_P7_Pos) /**< \brief (MPDDRC_TIMEOUT) Time-out for Ports 0, 1, 2, 3, 4, 5, 6 and 7 */\r
+#define MPDDRC_TIMEOUT_TIMEOUT_P7(value) ((MPDDRC_TIMEOUT_TIMEOUT_P7_Msk & ((value) << MPDDRC_TIMEOUT_TIMEOUT_P7_Pos)))\r
+/* -------- MPDDRC_REQ_PORT_0123 : (MPDDRC Offset: 0x4C) MPDDRC Time-out Request Port 0/1/2/3 -------- */\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P0_Pos 0\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P0_Msk (0xffu << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P0_Pos) /**< \brief (MPDDRC_REQ_PORT_0123) Number of Requests, Number of Words or Bandwidth Allocation from Port 0-1-2-3 */\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P0(value) ((MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P0_Msk & ((value) << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P0_Pos)))\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P1_Pos 8\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P1_Msk (0xffu << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P1_Pos) /**< \brief (MPDDRC_REQ_PORT_0123) Number of Requests, Number of Words or Bandwidth Allocation from Port 0-1-2-3 */\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P1(value) ((MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P1_Msk & ((value) << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P1_Pos)))\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P2_Pos 16\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P2_Msk (0xffu << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P2_Pos) /**< \brief (MPDDRC_REQ_PORT_0123) Number of Requests, Number of Words or Bandwidth Allocation from Port 0-1-2-3 */\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P2(value) ((MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P2_Msk & ((value) << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P2_Pos)))\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P3_Pos 24\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P3_Msk (0xffu << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P3_Pos) /**< \brief (MPDDRC_REQ_PORT_0123) Number of Requests, Number of Words or Bandwidth Allocation from Port 0-1-2-3 */\r
+#define MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P3(value) ((MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P3_Msk & ((value) << MPDDRC_REQ_PORT_0123_NRQ_NWD_BDW_P3_Pos)))\r
+/* -------- MPDDRC_REQ_PORT_4567 : (MPDDRC Offset: 0x50) MPDDRC Time-out Request Port 4/5/6/7 -------- */\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P4_Pos 0\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P4_Msk (0xffu << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P4_Pos) /**< \brief (MPDDRC_REQ_PORT_4567) Number of Requests, Number of Words or Bandwidth allocation from port 4-5-6-7 */\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P4(value) ((MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P4_Msk & ((value) << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P4_Pos)))\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P5_Pos 8\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P5_Msk (0xffu << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P5_Pos) /**< \brief (MPDDRC_REQ_PORT_4567) Number of Requests, Number of Words or Bandwidth allocation from port 4-5-6-7 */\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P5(value) ((MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P5_Msk & ((value) << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P5_Pos)))\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P6_Pos 16\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P6_Msk (0xffu << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P6_Pos) /**< \brief (MPDDRC_REQ_PORT_4567) Number of Requests, Number of Words or Bandwidth allocation from port 4-5-6-7 */\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P6(value) ((MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P6_Msk & ((value) << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P6_Pos)))\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P7_Pos 24\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P7_Msk (0xffu << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P7_Pos) /**< \brief (MPDDRC_REQ_PORT_4567) Number of Requests, Number of Words or Bandwidth allocation from port 4-5-6-7 */\r
+#define MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P7(value) ((MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P7_Msk & ((value) << MPDDRC_REQ_PORT_4567_NRQ_NWD_BDW_P7_Pos)))\r
+/* -------- MPDDRC_BDW_PORT_0123 : (MPDDRC Offset: 0x54) MPDDRC Bandwidth Port 0/1/2/3 -------- */\r
+#define MPDDRC_BDW_PORT_0123_BDW_P0_Pos 0\r
+#define MPDDRC_BDW_PORT_0123_BDW_P0_Msk (0x7fu << MPDDRC_BDW_PORT_0123_BDW_P0_Pos) /**< \brief (MPDDRC_BDW_PORT_0123) Current/Maximum Bandwidth from Port 0-1-2-3 */\r
+#define MPDDRC_BDW_PORT_0123_BDW_P1_Pos 8\r
+#define MPDDRC_BDW_PORT_0123_BDW_P1_Msk (0x7fu << MPDDRC_BDW_PORT_0123_BDW_P1_Pos) /**< \brief (MPDDRC_BDW_PORT_0123) Current/Maximum Bandwidth from Port 0-1-2-3 */\r
+#define MPDDRC_BDW_PORT_0123_BDW_P2_Pos 16\r
+#define MPDDRC_BDW_PORT_0123_BDW_P2_Msk (0x7fu << MPDDRC_BDW_PORT_0123_BDW_P2_Pos) /**< \brief (MPDDRC_BDW_PORT_0123) Current/Maximum Bandwidth from Port 0-1-2-3 */\r
+#define MPDDRC_BDW_PORT_0123_BDW_P3_Pos 24\r
+#define MPDDRC_BDW_PORT_0123_BDW_P3_Msk (0x7fu << MPDDRC_BDW_PORT_0123_BDW_P3_Pos) /**< \brief (MPDDRC_BDW_PORT_0123) Current/Maximum Bandwidth from Port 0-1-2-3 */\r
+/* -------- MPDDRC_BDW_PORT_4567 : (MPDDRC Offset: 0x58) MPDDRC Bandwidth Port 4/5/6/7 -------- */\r
+#define MPDDRC_BDW_PORT_4567_BDW_P4_Pos 0\r
+#define MPDDRC_BDW_PORT_4567_BDW_P4_Msk (0x7fu << MPDDRC_BDW_PORT_4567_BDW_P4_Pos) /**< \brief (MPDDRC_BDW_PORT_4567) Current/Maximum Bandwidth from Port 4-5-6-7 */\r
+#define MPDDRC_BDW_PORT_4567_BDW_P5_Pos 8\r
+#define MPDDRC_BDW_PORT_4567_BDW_P5_Msk (0x7fu << MPDDRC_BDW_PORT_4567_BDW_P5_Pos) /**< \brief (MPDDRC_BDW_PORT_4567) Current/Maximum Bandwidth from Port 4-5-6-7 */\r
+#define MPDDRC_BDW_PORT_4567_BDW_P6_Pos 16\r
+#define MPDDRC_BDW_PORT_4567_BDW_P6_Msk (0x7fu << MPDDRC_BDW_PORT_4567_BDW_P6_Pos) /**< \brief (MPDDRC_BDW_PORT_4567) Current/Maximum Bandwidth from Port 4-5-6-7 */\r
+#define MPDDRC_BDW_PORT_4567_BDW_P7_Pos 24\r
+#define MPDDRC_BDW_PORT_4567_BDW_P7_Msk (0x7fu << MPDDRC_BDW_PORT_4567_BDW_P7_Pos) /**< \brief (MPDDRC_BDW_PORT_4567) Current/Maximum Bandwidth from Port 4-5-6-7 */\r
+/* -------- MPDDRC_RD_DATA_PATH : (MPDDRC Offset: 0x5C) MPDDRC_READ_DATA_PATH -------- */\r
+#define MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_Pos 0\r
+#define MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_Msk (0x3u << MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_Pos) /**< \brief (MPDDRC_RD_DATA_PATH) Shift Sampling Point of Data */\r
+#define   MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_NO_SHIFT (0x0u << 0) /**< \brief (MPDDRC_RD_DATA_PATH) Initial sampling point. */\r
+#define   MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_SHIFT_ONE_CYCLE (0x1u << 0) /**< \brief (MPDDRC_RD_DATA_PATH) Sampling point is shifted of one cycle. */\r
+#define   MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_SHIFT_TWO_CYCLES (0x2u << 0) /**< \brief (MPDDRC_RD_DATA_PATH) Sampling point is shifted of two cycles. */\r
+#define   MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING_SHIFT_THREE_CYCLES (0x3u << 0) /**< \brief (MPDDRC_RD_DATA_PATH) Sampling point is shifted of three cycles, unique for LPDDR2.Not applicable for the DDR2 and LPDDR1devices. */\r
+/* -------- MPDDRC_SAW[4] : (MPDDRC Offset: 0x60) MPDDRC Smart Adaptation Wrapper 0 Register -------- */\r
+#define MPDDRC_SAW_FLUSH_MAX_Pos 0\r
+#define MPDDRC_SAW_FLUSH_MAX_Msk (0xffu << MPDDRC_SAW_FLUSH_MAX_Pos) /**< \brief (MPDDRC_SAW[4]) Clears FIFO Content */\r
+#define MPDDRC_SAW_FLUSH_MAX(value) ((MPDDRC_SAW_FLUSH_MAX_Msk & ((value) << MPDDRC_SAW_FLUSH_MAX_Pos)))\r
+#define MPDDRC_SAW_INCR_THRESH_Pos 8\r
+#define MPDDRC_SAW_INCR_THRESH_Msk (0x3fu << MPDDRC_SAW_INCR_THRESH_Pos) /**< \brief (MPDDRC_SAW[4]) Incremental Threshold */\r
+#define   MPDDRC_SAW_INCR_THRESH_1_WORD (0x1u << 8) /**< \brief (MPDDRC_SAW[4]) 1 word/dword max */\r
+#define   MPDDRC_SAW_INCR_THRESH_2_WORDS (0x2u << 8) /**< \brief (MPDDRC_SAW[4]) 2 word/dword max */\r
+#define   MPDDRC_SAW_INCR_THRESH_4_WORDS (0x4u << 8) /**< \brief (MPDDRC_SAW[4]) 4 word/dword max */\r
+#define   MPDDRC_SAW_INCR_THRESH_8_WORDS (0x8u << 8) /**< \brief (MPDDRC_SAW[4]) 8 word/dword max */\r
+#define   MPDDRC_SAW_INCR_THRESH_16_WORDS (0x10u << 8) /**< \brief (MPDDRC_SAW[4]) 16 word/dword max */\r
+#define   MPDDRC_SAW_INCR_THRESH_32_WORDS (0x20u << 8) /**< \brief (MPDDRC_SAW[4]) 32 word/dword max */\r
+#define MPDDRC_SAW_PFCH_THRESH_Pos 16\r
+#define MPDDRC_SAW_PFCH_THRESH_Msk (0x3fu << MPDDRC_SAW_PFCH_THRESH_Pos) /**< \brief (MPDDRC_SAW[4]) Prefetch Threshold */\r
+#define   MPDDRC_SAW_PFCH_THRESH_2_WORDS (0x2u << 16) /**< \brief (MPDDRC_SAW[4]) 2 word/dword max */\r
+#define   MPDDRC_SAW_PFCH_THRESH_4_WORDS (0x4u << 16) /**< \brief (MPDDRC_SAW[4]) 4 word/dword max */\r
+#define   MPDDRC_SAW_PFCH_THRESH_8_WORDS (0x8u << 16) /**< \brief (MPDDRC_SAW[4]) 8 word/dword max */\r
+/* -------- MPDDRC_WPMR : (MPDDRC Offset: 0xE4) MPDDRC Write Protect Control Register -------- */\r
+#define MPDDRC_WPMR_WPEN (0x1u << 0) /**< \brief (MPDDRC_WPMR) Write Protection Enable */\r
+#define MPDDRC_WPMR_WPKEY_Pos 8\r
+#define MPDDRC_WPMR_WPKEY_Msk (0xffffffu << MPDDRC_WPMR_WPKEY_Pos) /**< \brief (MPDDRC_WPMR) Write Protection KEY */\r
+#define   MPDDRC_WPMR_WPKEY_PASSWD (0x444452u << 8) /**< \brief (MPDDRC_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit.Always reads as 0. */\r
+/* -------- MPDDRC_WPSR : (MPDDRC Offset: 0xE8) MPDDRC Write Protect Status Register -------- */\r
+#define MPDDRC_WPSR_WPVS (0x1u << 0) /**< \brief (MPDDRC_WPSR) Write Protection Enable */\r
+#define MPDDRC_WPSR_WPVSRC_Pos 8\r
+#define MPDDRC_WPSR_WPVSRC_Msk (0xffffu << MPDDRC_WPSR_WPVSRC_Pos) /**< \brief (MPDDRC_WPSR) Write Protection Violation Source */\r
+/* -------- MPDDRC_DLL_OS : (MPDDRC Offset: 0x100) MPDDRC DLL Offset Selection Register -------- */\r
+#define MPDDRC_DLL_OS_SELOFF (0x1u << 0) /**< \brief (MPDDRC_DLL_OS) Offset Selection */\r
+/* -------- MPDDRC_DLL_MO : (MPDDRC Offset: 0x104) MPDDRC DLL MASTER Offset Register -------- */\r
+#define MPDDRC_DLL_MO_M0OFF_Pos 0\r
+#define MPDDRC_DLL_MO_M0OFF_Msk (0xffu << MPDDRC_DLL_MO_M0OFF_Pos) /**< \brief (MPDDRC_DLL_MO) Master 0 Delay Line Offset */\r
+#define MPDDRC_DLL_MO_M0OFF(value) ((MPDDRC_DLL_MO_M0OFF_Msk & ((value) << MPDDRC_DLL_MO_M0OFF_Pos)))\r
+/* -------- MPDDRC_DLL_SO0 : (MPDDRC Offset: 0x108) MPDDRC DLL SLAVE Offset 0 Register -------- */\r
+#define MPDDRC_DLL_SO0_S0OFF_Pos 0\r
+#define MPDDRC_DLL_SO0_S0OFF_Msk (0xffu << MPDDRC_DLL_SO0_S0OFF_Pos) /**< \brief (MPDDRC_DLL_SO0) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO0_S0OFF(value) ((MPDDRC_DLL_SO0_S0OFF_Msk & ((value) << MPDDRC_DLL_SO0_S0OFF_Pos)))\r
+#define MPDDRC_DLL_SO0_S1OFF_Pos 8\r
+#define MPDDRC_DLL_SO0_S1OFF_Msk (0xffu << MPDDRC_DLL_SO0_S1OFF_Pos) /**< \brief (MPDDRC_DLL_SO0) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO0_S1OFF(value) ((MPDDRC_DLL_SO0_S1OFF_Msk & ((value) << MPDDRC_DLL_SO0_S1OFF_Pos)))\r
+#define MPDDRC_DLL_SO0_S2OFF_Pos 16\r
+#define MPDDRC_DLL_SO0_S2OFF_Msk (0xffu << MPDDRC_DLL_SO0_S2OFF_Pos) /**< \brief (MPDDRC_DLL_SO0) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO0_S2OFF(value) ((MPDDRC_DLL_SO0_S2OFF_Msk & ((value) << MPDDRC_DLL_SO0_S2OFF_Pos)))\r
+#define MPDDRC_DLL_SO0_S3OFF_Pos 24\r
+#define MPDDRC_DLL_SO0_S3OFF_Msk (0xffu << MPDDRC_DLL_SO0_S3OFF_Pos) /**< \brief (MPDDRC_DLL_SO0) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO0_S3OFF(value) ((MPDDRC_DLL_SO0_S3OFF_Msk & ((value) << MPDDRC_DLL_SO0_S3OFF_Pos)))\r
+/* -------- MPDDRC_DLL_SO1 : (MPDDRC Offset: 0x10C) MPDDRC DLL SLAVE Offset 1 Register -------- */\r
+#define MPDDRC_DLL_SO1_S4OFF_Pos 0\r
+#define MPDDRC_DLL_SO1_S4OFF_Msk (0xffu << MPDDRC_DLL_SO1_S4OFF_Pos) /**< \brief (MPDDRC_DLL_SO1) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO1_S4OFF(value) ((MPDDRC_DLL_SO1_S4OFF_Msk & ((value) << MPDDRC_DLL_SO1_S4OFF_Pos)))\r
+#define MPDDRC_DLL_SO1_S5OFF_Pos 8\r
+#define MPDDRC_DLL_SO1_S5OFF_Msk (0xffu << MPDDRC_DLL_SO1_S5OFF_Pos) /**< \brief (MPDDRC_DLL_SO1) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO1_S5OFF(value) ((MPDDRC_DLL_SO1_S5OFF_Msk & ((value) << MPDDRC_DLL_SO1_S5OFF_Pos)))\r
+#define MPDDRC_DLL_SO1_S6OFF_Pos 16\r
+#define MPDDRC_DLL_SO1_S6OFF_Msk (0xffu << MPDDRC_DLL_SO1_S6OFF_Pos) /**< \brief (MPDDRC_DLL_SO1) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO1_S6OFF(value) ((MPDDRC_DLL_SO1_S6OFF_Msk & ((value) << MPDDRC_DLL_SO1_S6OFF_Pos)))\r
+#define MPDDRC_DLL_SO1_S7OFF_Pos 24\r
+#define MPDDRC_DLL_SO1_S7OFF_Msk (0xffu << MPDDRC_DLL_SO1_S7OFF_Pos) /**< \brief (MPDDRC_DLL_SO1) SLAVEx Delay Line Offset */\r
+#define MPDDRC_DLL_SO1_S7OFF(value) ((MPDDRC_DLL_SO1_S7OFF_Msk & ((value) << MPDDRC_DLL_SO1_S7OFF_Pos)))\r
+/* -------- MPDDRC_DLL_WRO : (MPDDRC Offset: 0x110) MPDDRC DLL CLKWR Offset Register -------- */\r
+#define MPDDRC_DLL_WRO_WR0OFF_Pos 0\r
+#define MPDDRC_DLL_WRO_WR0OFF_Msk (0xffu << MPDDRC_DLL_WRO_WR0OFF_Pos) /**< \brief (MPDDRC_DLL_WRO) CLKWRx Delay Line Offset */\r
+#define MPDDRC_DLL_WRO_WR0OFF(value) ((MPDDRC_DLL_WRO_WR0OFF_Msk & ((value) << MPDDRC_DLL_WRO_WR0OFF_Pos)))\r
+#define MPDDRC_DLL_WRO_WR1OFF_Pos 8\r
+#define MPDDRC_DLL_WRO_WR1OFF_Msk (0xffu << MPDDRC_DLL_WRO_WR1OFF_Pos) /**< \brief (MPDDRC_DLL_WRO) CLKWRx Delay Line Offset */\r
+#define MPDDRC_DLL_WRO_WR1OFF(value) ((MPDDRC_DLL_WRO_WR1OFF_Msk & ((value) << MPDDRC_DLL_WRO_WR1OFF_Pos)))\r
+#define MPDDRC_DLL_WRO_WR2OFF_Pos 16\r
+#define MPDDRC_DLL_WRO_WR2OFF_Msk (0xffu << MPDDRC_DLL_WRO_WR2OFF_Pos) /**< \brief (MPDDRC_DLL_WRO) CLKWRx Delay Line Offset */\r
+#define MPDDRC_DLL_WRO_WR2OFF(value) ((MPDDRC_DLL_WRO_WR2OFF_Msk & ((value) << MPDDRC_DLL_WRO_WR2OFF_Pos)))\r
+#define MPDDRC_DLL_WRO_WR3OFF_Pos 24\r
+#define MPDDRC_DLL_WRO_WR3OFF_Msk (0xffu << MPDDRC_DLL_WRO_WR3OFF_Pos) /**< \brief (MPDDRC_DLL_WRO) CLKWRx Delay Line Offset */\r
+#define MPDDRC_DLL_WRO_WR3OFF(value) ((MPDDRC_DLL_WRO_WR3OFF_Msk & ((value) << MPDDRC_DLL_WRO_WR3OFF_Pos)))\r
+/* -------- MPDDRC_DLL_ADO : (MPDDRC Offset: 0x114) MPDDRC DLL CLKAD Offset Register -------- */\r
+#define MPDDRC_DLL_ADO_ADOFF_Pos 0\r
+#define MPDDRC_DLL_ADO_ADOFF_Msk (0xffu << MPDDRC_DLL_ADO_ADOFF_Pos) /**< \brief (MPDDRC_DLL_ADO) CLKAD Delay Line Offset */\r
+#define MPDDRC_DLL_ADO_ADOFF(value) ((MPDDRC_DLL_ADO_ADOFF_Msk & ((value) << MPDDRC_DLL_ADO_ADOFF_Pos)))\r
+/* -------- MPDDRC_DLL_SM[4] : (MPDDRC Offset: 0x118) MPDDRC DLL Status MASTER0 Register -------- */\r
+#define MPDDRC_DLL_SM_MDINC (0x1u << 0) /**< \brief (MPDDRC_DLL_SM[4]) MASTERx Delay Increment */\r
+#define MPDDRC_DLL_SM_MDDEC (0x1u << 1) /**< \brief (MPDDRC_DLL_SM[4]) MASTERx Delay Decrement */\r
+#define MPDDRC_DLL_SM_MDOVF (0x1u << 2) /**< \brief (MPDDRC_DLL_SM[4]) MASTERx Delay Overflow Flag */\r
+#define MPDDRC_DLL_SM_MDLVAL_Pos 8\r
+#define MPDDRC_DLL_SM_MDLVAL_Msk (0xffu << MPDDRC_DLL_SM_MDLVAL_Pos) /**< \brief (MPDDRC_DLL_SM[4]) MASTERx Delay Lock Value */\r
+#define MPDDRC_DLL_SM_MDCNT_Pos 20\r
+#define MPDDRC_DLL_SM_MDCNT_Msk (0xffu << MPDDRC_DLL_SM_MDCNT_Pos) /**< \brief (MPDDRC_DLL_SM[4]) MASTERx Delay Counter Value */\r
+/* -------- MPDDRC_DLL_SSL[8] : (MPDDRC Offset: 0x128) MPDDRC DLL Status SLAVE0 Register -------- */\r
+#define MPDDRC_DLL_SSL_SDCOVF (0x1u << 0) /**< \brief (MPDDRC_DLL_SSL[8]) SLAVEx Delay Correction Overflow Flag */\r
+#define MPDDRC_DLL_SSL_SDCUDF (0x1u << 1) /**< \brief (MPDDRC_DLL_SSL[8]) SLAVEx Delay Correction Underflow Flag */\r
+#define MPDDRC_DLL_SSL_SDERF (0x1u << 2) /**< \brief (MPDDRC_DLL_SSL[8]) SLAVEx Delay Correction Error Flag */\r
+#define MPDDRC_DLL_SSL_SDCNT_Pos 8\r
+#define MPDDRC_DLL_SSL_SDCNT_Msk (0xffu << MPDDRC_DLL_SSL_SDCNT_Pos) /**< \brief (MPDDRC_DLL_SSL[8]) SLAVEx Delay Counter Value */\r
+#define MPDDRC_DLL_SSL_SDCVAL_Pos 20\r
+#define MPDDRC_DLL_SSL_SDCVAL_Msk (0xffu << MPDDRC_DLL_SSL_SDCVAL_Pos) /**< \brief (MPDDRC_DLL_SSL[8]) SLAVEx Delay Correction Value */\r
+/* -------- MPDDRC_DLL_SWR[4] : (MPDDRC Offset: 0x148) MPDDRC DLL Status CLKWR0 Register -------- */\r
+#define MPDDRC_DLL_SWR_WRDCNT_Pos 0\r
+#define MPDDRC_DLL_SWR_WRDCNT_Msk (0xffu << MPDDRC_DLL_SWR_WRDCNT_Pos) /**< \brief (MPDDRC_DLL_SWR[4]) CLKWRx Delay Counter Value */\r
+/* -------- MPDDRC_DLL_SAD : (MPDDRC Offset: 0x158) MPDDRC DLL Status CLKAD Register -------- */\r
+#define MPDDRC_DLL_SAD_ADDCNT_Pos 0\r
+#define MPDDRC_DLL_SAD_ADDCNT_Msk (0xffu << MPDDRC_DLL_SAD_ADDCNT_Pos) /**< \brief (MPDDRC_DLL_SAD) CLKAD Delay Counter Value */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Parallel Input/Output Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_PIO Parallel Input/Output Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Pio hardware registers */\r
+typedef struct {\r
+  __O  uint32_t PIO_PER;       /**< \brief (Pio Offset: 0x0000) PIO Enable Register */\r
+  __O  uint32_t PIO_PDR;       /**< \brief (Pio Offset: 0x0004) PIO Disable Register */\r
+  __I  uint32_t PIO_PSR;       /**< \brief (Pio Offset: 0x0008) PIO Status Register */\r
+  __IO uint32_t PIO_ISLR;      /**< \brief (Pio Offset: 0x000C) PIO Interrupt Security Level Register */\r
+  __O  uint32_t PIO_OER;       /**< \brief (Pio Offset: 0x0010) Output Enable Register */\r
+  __O  uint32_t PIO_ODR;       /**< \brief (Pio Offset: 0x0014) Output Disable Register */\r
+  __I  uint32_t PIO_OSR;       /**< \brief (Pio Offset: 0x0018) Output Status Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __O  uint32_t PIO_IFER;      /**< \brief (Pio Offset: 0x0020) Glitch Input Filter Enable Register */\r
+  __O  uint32_t PIO_IFDR;      /**< \brief (Pio Offset: 0x0024) Glitch Input Filter Disable Register */\r
+  __I  uint32_t PIO_IFSR;      /**< \brief (Pio Offset: 0x0028) Glitch Input Filter Status Register */\r
+  __I  uint32_t Reserved2[1];\r
+  __O  uint32_t PIO_SODR;      /**< \brief (Pio Offset: 0x0030) Set Output Data Register */\r
+  __O  uint32_t PIO_CODR;      /**< \brief (Pio Offset: 0x0034) Clear Output Data Register */\r
+  __IO uint32_t PIO_ODSR;      /**< \brief (Pio Offset: 0x0038) Output Data Status Register */\r
+  __I  uint32_t PIO_PDSR;      /**< \brief (Pio Offset: 0x003C) Pin Data Status Register */\r
+  __O  uint32_t PIO_IER;       /**< \brief (Pio Offset: 0x0040) Interrupt Enable Register */\r
+  __O  uint32_t PIO_IDR;       /**< \brief (Pio Offset: 0x0044) Interrupt Disable Register */\r
+  __I  uint32_t PIO_IMR;       /**< \brief (Pio Offset: 0x0048) Interrupt Mask Register */\r
+  __I  uint32_t PIO_ISR;       /**< \brief (Pio Offset: 0x004C) Interrupt Status Register */\r
+  __O  uint32_t PIO_MDER;      /**< \brief (Pio Offset: 0x0050) Multi-driver Enable Register */\r
+  __O  uint32_t PIO_MDDR;      /**< \brief (Pio Offset: 0x0054) Multi-driver Disable Register */\r
+  __I  uint32_t PIO_MDSR;      /**< \brief (Pio Offset: 0x0058) Multi-driver Status Register */\r
+  __I  uint32_t Reserved3[1];\r
+  __O  uint32_t PIO_PUDR;      /**< \brief (Pio Offset: 0x0060) Pull-up Disable Register */\r
+  __O  uint32_t PIO_PUER;      /**< \brief (Pio Offset: 0x0064) Pull-up Enable Register */\r
+  __I  uint32_t PIO_PUSR;      /**< \brief (Pio Offset: 0x0068) Pad Pull-up Status Register */\r
+  __I  uint32_t Reserved4[1];\r
+  __IO uint32_t PIO_ABCDSR[2]; /**< \brief (Pio Offset: 0x0070) Peripheral Select Register */\r
+  __I  uint32_t Reserved5[2];\r
+  __O  uint32_t PIO_IFSCDR;    /**< \brief (Pio Offset: 0x0080) Input Filter Slow Clock Disable Register */\r
+  __O  uint32_t PIO_IFSCER;    /**< \brief (Pio Offset: 0x0084) Input Filter Slow Clock Enable Register */\r
+  __I  uint32_t PIO_IFSCSR;    /**< \brief (Pio Offset: 0x0088) Input Filter Slow Clock Status Register */\r
+  __IO uint32_t PIO_SCDR;      /**< \brief (Pio Offset: 0x008C) Slow Clock Divider Debouncing Register */\r
+  __O  uint32_t PIO_PPDDR;     /**< \brief (Pio Offset: 0x0090) Pad Pull-down Disable Register */\r
+  __O  uint32_t PIO_PPDER;     /**< \brief (Pio Offset: 0x0094) Pad Pull-down Enable Register */\r
+  __I  uint32_t PIO_PPDSR;     /**< \brief (Pio Offset: 0x0098) Pad Pull-down Status Register */\r
+  __I  uint32_t Reserved6[1];\r
+  __O  uint32_t PIO_OWER;      /**< \brief (Pio Offset: 0x00A0) Output Write Enable */\r
+  __O  uint32_t PIO_OWDR;      /**< \brief (Pio Offset: 0x00A4) Output Write Disable */\r
+  __I  uint32_t PIO_OWSR;      /**< \brief (Pio Offset: 0x00A8) Output Write Status Register */\r
+  __I  uint32_t Reserved7[1];\r
+  __O  uint32_t PIO_AIMER;     /**< \brief (Pio Offset: 0x00B0) Additional Interrupt Modes Enable Register */\r
+  __O  uint32_t PIO_AIMDR;     /**< \brief (Pio Offset: 0x00B4) Additional Interrupt Modes Disables Register */\r
+  __I  uint32_t PIO_AIMMR;     /**< \brief (Pio Offset: 0x00B8) Additional Interrupt Modes Mask Register */\r
+  __I  uint32_t Reserved8[1];\r
+  __O  uint32_t PIO_ESR;       /**< \brief (Pio Offset: 0x00C0) Edge Select Register */\r
+  __O  uint32_t PIO_LSR;       /**< \brief (Pio Offset: 0x00C4) Level Select Register */\r
+  __I  uint32_t PIO_ELSR;      /**< \brief (Pio Offset: 0x00C8) Edge/Level Status Register */\r
+  __I  uint32_t Reserved9[1];\r
+  __O  uint32_t PIO_FELLSR;    /**< \brief (Pio Offset: 0x00D0) Falling Edge/Low Level Select Register */\r
+  __O  uint32_t PIO_REHLSR;    /**< \brief (Pio Offset: 0x00D4) Rising Edge/ High Level Select Register */\r
+  __I  uint32_t PIO_FRLHSR;    /**< \brief (Pio Offset: 0x00D8) Fall/Rise - Low/High Status Register */\r
+  __I  uint32_t Reserved10[2];\r
+  __IO uint32_t PIO_WPMR;      /**< \brief (Pio Offset: 0x00E4) Write Protect Mode Register */\r
+  __I  uint32_t PIO_WPSR;      /**< \brief (Pio Offset: 0x00E8) Write Protect Status Register */\r
+  __I  uint32_t Reserved11[5];\r
+  __IO uint32_t PIO_SCHMITT;   /**< \brief (Pio Offset: 0x0100) Schmitt Trigger Register */\r
+  __I  uint32_t Reserved12[5];\r
+  __IO uint32_t PIO_DRIVER1;   /**< \brief (Pio Offset: 0x0118) I/O Drive Register 1 */\r
+  __IO uint32_t PIO_DRIVER2;   /**< \brief (Pio Offset: 0x011C) I/O Drive Register 2 */\r
+} Pio;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- PIO_PER : (PIO Offset: 0x0000) PIO Enable Register -------- */\r
+#define PIO_PER_P0 (0x1u << 0) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P1 (0x1u << 1) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P2 (0x1u << 2) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P3 (0x1u << 3) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P4 (0x1u << 4) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P5 (0x1u << 5) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P6 (0x1u << 6) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P7 (0x1u << 7) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P8 (0x1u << 8) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P9 (0x1u << 9) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P10 (0x1u << 10) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P11 (0x1u << 11) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P12 (0x1u << 12) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P13 (0x1u << 13) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P14 (0x1u << 14) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P15 (0x1u << 15) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P16 (0x1u << 16) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P17 (0x1u << 17) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P18 (0x1u << 18) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P19 (0x1u << 19) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P20 (0x1u << 20) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P21 (0x1u << 21) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P22 (0x1u << 22) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P23 (0x1u << 23) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P24 (0x1u << 24) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P25 (0x1u << 25) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P26 (0x1u << 26) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P27 (0x1u << 27) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P28 (0x1u << 28) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P29 (0x1u << 29) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P30 (0x1u << 30) /**< \brief (PIO_PER) PIO Enable */\r
+#define PIO_PER_P31 (0x1u << 31) /**< \brief (PIO_PER) PIO Enable */\r
+/* -------- PIO_PDR : (PIO Offset: 0x0004) PIO Disable Register -------- */\r
+#define PIO_PDR_P0 (0x1u << 0) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P1 (0x1u << 1) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P2 (0x1u << 2) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P3 (0x1u << 3) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P4 (0x1u << 4) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P5 (0x1u << 5) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P6 (0x1u << 6) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P7 (0x1u << 7) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P8 (0x1u << 8) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P9 (0x1u << 9) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P10 (0x1u << 10) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P11 (0x1u << 11) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P12 (0x1u << 12) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P13 (0x1u << 13) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P14 (0x1u << 14) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P15 (0x1u << 15) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P16 (0x1u << 16) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P17 (0x1u << 17) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P18 (0x1u << 18) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P19 (0x1u << 19) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P20 (0x1u << 20) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P21 (0x1u << 21) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P22 (0x1u << 22) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P23 (0x1u << 23) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P24 (0x1u << 24) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P25 (0x1u << 25) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P26 (0x1u << 26) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P27 (0x1u << 27) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P28 (0x1u << 28) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P29 (0x1u << 29) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P30 (0x1u << 30) /**< \brief (PIO_PDR) PIO Disable */\r
+#define PIO_PDR_P31 (0x1u << 31) /**< \brief (PIO_PDR) PIO Disable */\r
+/* -------- PIO_PSR : (PIO Offset: 0x0008) PIO Status Register -------- */\r
+#define PIO_PSR_P0 (0x1u << 0) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P1 (0x1u << 1) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P2 (0x1u << 2) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P3 (0x1u << 3) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P4 (0x1u << 4) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P5 (0x1u << 5) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P6 (0x1u << 6) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P7 (0x1u << 7) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P8 (0x1u << 8) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P9 (0x1u << 9) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P10 (0x1u << 10) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P11 (0x1u << 11) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P12 (0x1u << 12) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P13 (0x1u << 13) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P14 (0x1u << 14) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P15 (0x1u << 15) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P16 (0x1u << 16) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P17 (0x1u << 17) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P18 (0x1u << 18) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P19 (0x1u << 19) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P20 (0x1u << 20) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P21 (0x1u << 21) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P22 (0x1u << 22) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P23 (0x1u << 23) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P24 (0x1u << 24) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P25 (0x1u << 25) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P26 (0x1u << 26) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P27 (0x1u << 27) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P28 (0x1u << 28) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P29 (0x1u << 29) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P30 (0x1u << 30) /**< \brief (PIO_PSR) PIO Status */\r
+#define PIO_PSR_P31 (0x1u << 31) /**< \brief (PIO_PSR) PIO Status */\r
+/* -------- PIO_ISLR : (PIO Offset: 0x000C) PIO Interrupt Security Level Register -------- */\r
+#define PIO_ISLR_P0 (0x1u << 0) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P1 (0x1u << 1) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P2 (0x1u << 2) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P3 (0x1u << 3) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P4 (0x1u << 4) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P5 (0x1u << 5) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P6 (0x1u << 6) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P7 (0x1u << 7) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P8 (0x1u << 8) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P9 (0x1u << 9) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P10 (0x1u << 10) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P11 (0x1u << 11) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P12 (0x1u << 12) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P13 (0x1u << 13) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P14 (0x1u << 14) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P15 (0x1u << 15) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P16 (0x1u << 16) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P17 (0x1u << 17) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P18 (0x1u << 18) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P19 (0x1u << 19) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P20 (0x1u << 20) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P21 (0x1u << 21) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P22 (0x1u << 22) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P23 (0x1u << 23) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P24 (0x1u << 24) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P25 (0x1u << 25) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P26 (0x1u << 26) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P27 (0x1u << 27) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P28 (0x1u << 28) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P29 (0x1u << 29) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P30 (0x1u << 30) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+#define PIO_ISLR_P31 (0x1u << 31) /**< \brief (PIO_ISLR) PIO Interrupt Security Level */\r
+/* -------- PIO_OER : (PIO Offset: 0x0010) Output Enable Register -------- */\r
+#define PIO_OER_P0 (0x1u << 0) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P1 (0x1u << 1) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P2 (0x1u << 2) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P3 (0x1u << 3) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P4 (0x1u << 4) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P5 (0x1u << 5) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P6 (0x1u << 6) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P7 (0x1u << 7) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P8 (0x1u << 8) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P9 (0x1u << 9) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P10 (0x1u << 10) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P11 (0x1u << 11) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P12 (0x1u << 12) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P13 (0x1u << 13) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P14 (0x1u << 14) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P15 (0x1u << 15) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P16 (0x1u << 16) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P17 (0x1u << 17) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P18 (0x1u << 18) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P19 (0x1u << 19) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P20 (0x1u << 20) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P21 (0x1u << 21) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P22 (0x1u << 22) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P23 (0x1u << 23) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P24 (0x1u << 24) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P25 (0x1u << 25) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P26 (0x1u << 26) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P27 (0x1u << 27) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P28 (0x1u << 28) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P29 (0x1u << 29) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P30 (0x1u << 30) /**< \brief (PIO_OER) Output Enable */\r
+#define PIO_OER_P31 (0x1u << 31) /**< \brief (PIO_OER) Output Enable */\r
+/* -------- PIO_ODR : (PIO Offset: 0x0014) Output Disable Register -------- */\r
+#define PIO_ODR_P0 (0x1u << 0) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P1 (0x1u << 1) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P2 (0x1u << 2) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P3 (0x1u << 3) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P4 (0x1u << 4) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P5 (0x1u << 5) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P6 (0x1u << 6) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P7 (0x1u << 7) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P8 (0x1u << 8) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P9 (0x1u << 9) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P10 (0x1u << 10) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P11 (0x1u << 11) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P12 (0x1u << 12) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P13 (0x1u << 13) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P14 (0x1u << 14) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P15 (0x1u << 15) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P16 (0x1u << 16) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P17 (0x1u << 17) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P18 (0x1u << 18) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P19 (0x1u << 19) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P20 (0x1u << 20) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P21 (0x1u << 21) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P22 (0x1u << 22) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P23 (0x1u << 23) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P24 (0x1u << 24) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P25 (0x1u << 25) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P26 (0x1u << 26) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P27 (0x1u << 27) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P28 (0x1u << 28) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P29 (0x1u << 29) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P30 (0x1u << 30) /**< \brief (PIO_ODR) Output Disable */\r
+#define PIO_ODR_P31 (0x1u << 31) /**< \brief (PIO_ODR) Output Disable */\r
+/* -------- PIO_OSR : (PIO Offset: 0x0018) Output Status Register -------- */\r
+#define PIO_OSR_P0 (0x1u << 0) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P1 (0x1u << 1) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P2 (0x1u << 2) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P3 (0x1u << 3) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P4 (0x1u << 4) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P5 (0x1u << 5) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P6 (0x1u << 6) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P7 (0x1u << 7) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P8 (0x1u << 8) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P9 (0x1u << 9) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P10 (0x1u << 10) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P11 (0x1u << 11) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P12 (0x1u << 12) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P13 (0x1u << 13) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P14 (0x1u << 14) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P15 (0x1u << 15) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P16 (0x1u << 16) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P17 (0x1u << 17) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P18 (0x1u << 18) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P19 (0x1u << 19) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P20 (0x1u << 20) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P21 (0x1u << 21) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P22 (0x1u << 22) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P23 (0x1u << 23) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P24 (0x1u << 24) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P25 (0x1u << 25) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P26 (0x1u << 26) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P27 (0x1u << 27) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P28 (0x1u << 28) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P29 (0x1u << 29) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P30 (0x1u << 30) /**< \brief (PIO_OSR) Output Status */\r
+#define PIO_OSR_P31 (0x1u << 31) /**< \brief (PIO_OSR) Output Status */\r
+/* -------- PIO_IFER : (PIO Offset: 0x0020) Glitch Input Filter Enable Register -------- */\r
+#define PIO_IFER_P0 (0x1u << 0) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P1 (0x1u << 1) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P2 (0x1u << 2) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P3 (0x1u << 3) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P4 (0x1u << 4) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P5 (0x1u << 5) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P6 (0x1u << 6) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P7 (0x1u << 7) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P8 (0x1u << 8) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P9 (0x1u << 9) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P10 (0x1u << 10) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P11 (0x1u << 11) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P12 (0x1u << 12) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P13 (0x1u << 13) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P14 (0x1u << 14) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P15 (0x1u << 15) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P16 (0x1u << 16) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P17 (0x1u << 17) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P18 (0x1u << 18) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P19 (0x1u << 19) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P20 (0x1u << 20) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P21 (0x1u << 21) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P22 (0x1u << 22) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P23 (0x1u << 23) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P24 (0x1u << 24) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P25 (0x1u << 25) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P26 (0x1u << 26) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P27 (0x1u << 27) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P28 (0x1u << 28) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P29 (0x1u << 29) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P30 (0x1u << 30) /**< \brief (PIO_IFER) Input Filter Enable */\r
+#define PIO_IFER_P31 (0x1u << 31) /**< \brief (PIO_IFER) Input Filter Enable */\r
+/* -------- PIO_IFDR : (PIO Offset: 0x0024) Glitch Input Filter Disable Register -------- */\r
+#define PIO_IFDR_P0 (0x1u << 0) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P1 (0x1u << 1) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P2 (0x1u << 2) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P3 (0x1u << 3) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P4 (0x1u << 4) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P5 (0x1u << 5) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P6 (0x1u << 6) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P7 (0x1u << 7) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P8 (0x1u << 8) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P9 (0x1u << 9) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P10 (0x1u << 10) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P11 (0x1u << 11) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P12 (0x1u << 12) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P13 (0x1u << 13) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P14 (0x1u << 14) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P15 (0x1u << 15) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P16 (0x1u << 16) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P17 (0x1u << 17) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P18 (0x1u << 18) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P19 (0x1u << 19) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P20 (0x1u << 20) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P21 (0x1u << 21) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P22 (0x1u << 22) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P23 (0x1u << 23) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P24 (0x1u << 24) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P25 (0x1u << 25) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P26 (0x1u << 26) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P27 (0x1u << 27) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P28 (0x1u << 28) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P29 (0x1u << 29) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P30 (0x1u << 30) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+#define PIO_IFDR_P31 (0x1u << 31) /**< \brief (PIO_IFDR) Input Filter Disable */\r
+/* -------- PIO_IFSR : (PIO Offset: 0x0028) Glitch Input Filter Status Register -------- */\r
+#define PIO_IFSR_P0 (0x1u << 0) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P1 (0x1u << 1) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P2 (0x1u << 2) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P3 (0x1u << 3) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P4 (0x1u << 4) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P5 (0x1u << 5) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P6 (0x1u << 6) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P7 (0x1u << 7) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P8 (0x1u << 8) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P9 (0x1u << 9) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P10 (0x1u << 10) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P11 (0x1u << 11) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P12 (0x1u << 12) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P13 (0x1u << 13) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P14 (0x1u << 14) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P15 (0x1u << 15) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P16 (0x1u << 16) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P17 (0x1u << 17) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P18 (0x1u << 18) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P19 (0x1u << 19) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P20 (0x1u << 20) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P21 (0x1u << 21) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P22 (0x1u << 22) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P23 (0x1u << 23) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P24 (0x1u << 24) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P25 (0x1u << 25) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P26 (0x1u << 26) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P27 (0x1u << 27) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P28 (0x1u << 28) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P29 (0x1u << 29) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P30 (0x1u << 30) /**< \brief (PIO_IFSR) Input Filer Status */\r
+#define PIO_IFSR_P31 (0x1u << 31) /**< \brief (PIO_IFSR) Input Filer Status */\r
+/* -------- PIO_SODR : (PIO Offset: 0x0030) Set Output Data Register -------- */\r
+#define PIO_SODR_P0 (0x1u << 0) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P1 (0x1u << 1) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P2 (0x1u << 2) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P3 (0x1u << 3) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P4 (0x1u << 4) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P5 (0x1u << 5) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P6 (0x1u << 6) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P7 (0x1u << 7) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P8 (0x1u << 8) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P9 (0x1u << 9) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P10 (0x1u << 10) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P11 (0x1u << 11) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P12 (0x1u << 12) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P13 (0x1u << 13) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P14 (0x1u << 14) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P15 (0x1u << 15) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P16 (0x1u << 16) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P17 (0x1u << 17) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P18 (0x1u << 18) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P19 (0x1u << 19) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P20 (0x1u << 20) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P21 (0x1u << 21) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P22 (0x1u << 22) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P23 (0x1u << 23) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P24 (0x1u << 24) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P25 (0x1u << 25) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P26 (0x1u << 26) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P27 (0x1u << 27) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P28 (0x1u << 28) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P29 (0x1u << 29) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P30 (0x1u << 30) /**< \brief (PIO_SODR) Set Output Data */\r
+#define PIO_SODR_P31 (0x1u << 31) /**< \brief (PIO_SODR) Set Output Data */\r
+/* -------- PIO_CODR : (PIO Offset: 0x0034) Clear Output Data Register -------- */\r
+#define PIO_CODR_P0 (0x1u << 0) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P1 (0x1u << 1) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P2 (0x1u << 2) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P3 (0x1u << 3) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P4 (0x1u << 4) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P5 (0x1u << 5) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P6 (0x1u << 6) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P7 (0x1u << 7) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P8 (0x1u << 8) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P9 (0x1u << 9) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P10 (0x1u << 10) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P11 (0x1u << 11) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P12 (0x1u << 12) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P13 (0x1u << 13) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P14 (0x1u << 14) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P15 (0x1u << 15) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P16 (0x1u << 16) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P17 (0x1u << 17) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P18 (0x1u << 18) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P19 (0x1u << 19) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P20 (0x1u << 20) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P21 (0x1u << 21) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P22 (0x1u << 22) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P23 (0x1u << 23) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P24 (0x1u << 24) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P25 (0x1u << 25) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P26 (0x1u << 26) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P27 (0x1u << 27) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P28 (0x1u << 28) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P29 (0x1u << 29) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P30 (0x1u << 30) /**< \brief (PIO_CODR) Clear Output Data */\r
+#define PIO_CODR_P31 (0x1u << 31) /**< \brief (PIO_CODR) Clear Output Data */\r
+/* -------- PIO_ODSR : (PIO Offset: 0x0038) Output Data Status Register -------- */\r
+#define PIO_ODSR_P0 (0x1u << 0) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P1 (0x1u << 1) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P2 (0x1u << 2) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P3 (0x1u << 3) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P4 (0x1u << 4) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P5 (0x1u << 5) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P6 (0x1u << 6) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P7 (0x1u << 7) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P8 (0x1u << 8) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P9 (0x1u << 9) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P10 (0x1u << 10) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P11 (0x1u << 11) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P12 (0x1u << 12) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P13 (0x1u << 13) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P14 (0x1u << 14) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P15 (0x1u << 15) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P16 (0x1u << 16) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P17 (0x1u << 17) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P18 (0x1u << 18) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P19 (0x1u << 19) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P20 (0x1u << 20) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P21 (0x1u << 21) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P22 (0x1u << 22) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P23 (0x1u << 23) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P24 (0x1u << 24) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P25 (0x1u << 25) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P26 (0x1u << 26) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P27 (0x1u << 27) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P28 (0x1u << 28) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P29 (0x1u << 29) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P30 (0x1u << 30) /**< \brief (PIO_ODSR) Output Data Status */\r
+#define PIO_ODSR_P31 (0x1u << 31) /**< \brief (PIO_ODSR) Output Data Status */\r
+/* -------- PIO_PDSR : (PIO Offset: 0x003C) Pin Data Status Register -------- */\r
+#define PIO_PDSR_P0 (0x1u << 0) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P1 (0x1u << 1) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P2 (0x1u << 2) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P3 (0x1u << 3) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P4 (0x1u << 4) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P5 (0x1u << 5) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P6 (0x1u << 6) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P7 (0x1u << 7) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P8 (0x1u << 8) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P9 (0x1u << 9) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P10 (0x1u << 10) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P11 (0x1u << 11) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P12 (0x1u << 12) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P13 (0x1u << 13) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P14 (0x1u << 14) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P15 (0x1u << 15) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P16 (0x1u << 16) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P17 (0x1u << 17) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P18 (0x1u << 18) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P19 (0x1u << 19) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P20 (0x1u << 20) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P21 (0x1u << 21) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P22 (0x1u << 22) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P23 (0x1u << 23) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P24 (0x1u << 24) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P25 (0x1u << 25) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P26 (0x1u << 26) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P27 (0x1u << 27) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P28 (0x1u << 28) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P29 (0x1u << 29) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P30 (0x1u << 30) /**< \brief (PIO_PDSR) Output Data Status */\r
+#define PIO_PDSR_P31 (0x1u << 31) /**< \brief (PIO_PDSR) Output Data Status */\r
+/* -------- PIO_IER : (PIO Offset: 0x0040) Interrupt Enable Register -------- */\r
+#define PIO_IER_P0 (0x1u << 0) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P1 (0x1u << 1) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P2 (0x1u << 2) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P3 (0x1u << 3) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P4 (0x1u << 4) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P5 (0x1u << 5) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P6 (0x1u << 6) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P7 (0x1u << 7) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P8 (0x1u << 8) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P9 (0x1u << 9) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P10 (0x1u << 10) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P11 (0x1u << 11) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P12 (0x1u << 12) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P13 (0x1u << 13) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P14 (0x1u << 14) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P15 (0x1u << 15) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P16 (0x1u << 16) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P17 (0x1u << 17) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P18 (0x1u << 18) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P19 (0x1u << 19) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P20 (0x1u << 20) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P21 (0x1u << 21) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P22 (0x1u << 22) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P23 (0x1u << 23) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P24 (0x1u << 24) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P25 (0x1u << 25) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P26 (0x1u << 26) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P27 (0x1u << 27) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P28 (0x1u << 28) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P29 (0x1u << 29) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P30 (0x1u << 30) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+#define PIO_IER_P31 (0x1u << 31) /**< \brief (PIO_IER) Input Change Interrupt Enable */\r
+/* -------- PIO_IDR : (PIO Offset: 0x0044) Interrupt Disable Register -------- */\r
+#define PIO_IDR_P0 (0x1u << 0) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P1 (0x1u << 1) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P2 (0x1u << 2) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P3 (0x1u << 3) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P4 (0x1u << 4) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P5 (0x1u << 5) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P6 (0x1u << 6) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P7 (0x1u << 7) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P8 (0x1u << 8) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P9 (0x1u << 9) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P10 (0x1u << 10) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P11 (0x1u << 11) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P12 (0x1u << 12) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P13 (0x1u << 13) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P14 (0x1u << 14) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P15 (0x1u << 15) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P16 (0x1u << 16) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P17 (0x1u << 17) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P18 (0x1u << 18) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P19 (0x1u << 19) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P20 (0x1u << 20) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P21 (0x1u << 21) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P22 (0x1u << 22) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P23 (0x1u << 23) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P24 (0x1u << 24) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P25 (0x1u << 25) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P26 (0x1u << 26) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P27 (0x1u << 27) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P28 (0x1u << 28) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P29 (0x1u << 29) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P30 (0x1u << 30) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+#define PIO_IDR_P31 (0x1u << 31) /**< \brief (PIO_IDR) Input Change Interrupt Disable */\r
+/* -------- PIO_IMR : (PIO Offset: 0x0048) Interrupt Mask Register -------- */\r
+#define PIO_IMR_P0 (0x1u << 0) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P1 (0x1u << 1) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P2 (0x1u << 2) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P3 (0x1u << 3) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P4 (0x1u << 4) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P5 (0x1u << 5) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P6 (0x1u << 6) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P7 (0x1u << 7) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P8 (0x1u << 8) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P9 (0x1u << 9) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P10 (0x1u << 10) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P11 (0x1u << 11) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P12 (0x1u << 12) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P13 (0x1u << 13) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P14 (0x1u << 14) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P15 (0x1u << 15) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P16 (0x1u << 16) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P17 (0x1u << 17) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P18 (0x1u << 18) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P19 (0x1u << 19) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P20 (0x1u << 20) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P21 (0x1u << 21) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P22 (0x1u << 22) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P23 (0x1u << 23) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P24 (0x1u << 24) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P25 (0x1u << 25) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P26 (0x1u << 26) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P27 (0x1u << 27) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P28 (0x1u << 28) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P29 (0x1u << 29) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P30 (0x1u << 30) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+#define PIO_IMR_P31 (0x1u << 31) /**< \brief (PIO_IMR) Input Change Interrupt Mask */\r
+/* -------- PIO_ISR : (PIO Offset: 0x004C) Interrupt Status Register -------- */\r
+#define PIO_ISR_P0 (0x1u << 0) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P1 (0x1u << 1) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P2 (0x1u << 2) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P3 (0x1u << 3) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P4 (0x1u << 4) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P5 (0x1u << 5) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P6 (0x1u << 6) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P7 (0x1u << 7) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P8 (0x1u << 8) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P9 (0x1u << 9) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P10 (0x1u << 10) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P11 (0x1u << 11) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P12 (0x1u << 12) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P13 (0x1u << 13) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P14 (0x1u << 14) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P15 (0x1u << 15) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P16 (0x1u << 16) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P17 (0x1u << 17) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P18 (0x1u << 18) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P19 (0x1u << 19) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P20 (0x1u << 20) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P21 (0x1u << 21) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P22 (0x1u << 22) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P23 (0x1u << 23) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P24 (0x1u << 24) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P25 (0x1u << 25) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P26 (0x1u << 26) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P27 (0x1u << 27) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P28 (0x1u << 28) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P29 (0x1u << 29) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P30 (0x1u << 30) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+#define PIO_ISR_P31 (0x1u << 31) /**< \brief (PIO_ISR) Input Change Interrupt Status */\r
+/* -------- PIO_MDER : (PIO Offset: 0x0050) Multi-driver Enable Register -------- */\r
+#define PIO_MDER_P0 (0x1u << 0) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P1 (0x1u << 1) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P2 (0x1u << 2) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P3 (0x1u << 3) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P4 (0x1u << 4) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P5 (0x1u << 5) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P6 (0x1u << 6) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P7 (0x1u << 7) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P8 (0x1u << 8) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P9 (0x1u << 9) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P10 (0x1u << 10) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P11 (0x1u << 11) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P12 (0x1u << 12) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P13 (0x1u << 13) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P14 (0x1u << 14) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P15 (0x1u << 15) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P16 (0x1u << 16) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P17 (0x1u << 17) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P18 (0x1u << 18) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P19 (0x1u << 19) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P20 (0x1u << 20) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P21 (0x1u << 21) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P22 (0x1u << 22) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P23 (0x1u << 23) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P24 (0x1u << 24) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P25 (0x1u << 25) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P26 (0x1u << 26) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P27 (0x1u << 27) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P28 (0x1u << 28) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P29 (0x1u << 29) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P30 (0x1u << 30) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+#define PIO_MDER_P31 (0x1u << 31) /**< \brief (PIO_MDER) Multi Drive Enable */\r
+/* -------- PIO_MDDR : (PIO Offset: 0x0054) Multi-driver Disable Register -------- */\r
+#define PIO_MDDR_P0 (0x1u << 0) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P1 (0x1u << 1) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P2 (0x1u << 2) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P3 (0x1u << 3) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P4 (0x1u << 4) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P5 (0x1u << 5) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P6 (0x1u << 6) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P7 (0x1u << 7) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P8 (0x1u << 8) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P9 (0x1u << 9) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P10 (0x1u << 10) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P11 (0x1u << 11) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P12 (0x1u << 12) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P13 (0x1u << 13) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P14 (0x1u << 14) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P15 (0x1u << 15) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P16 (0x1u << 16) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P17 (0x1u << 17) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P18 (0x1u << 18) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P19 (0x1u << 19) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P20 (0x1u << 20) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P21 (0x1u << 21) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P22 (0x1u << 22) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P23 (0x1u << 23) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P24 (0x1u << 24) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P25 (0x1u << 25) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P26 (0x1u << 26) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P27 (0x1u << 27) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P28 (0x1u << 28) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P29 (0x1u << 29) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P30 (0x1u << 30) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+#define PIO_MDDR_P31 (0x1u << 31) /**< \brief (PIO_MDDR) Multi Drive Disable. */\r
+/* -------- PIO_MDSR : (PIO Offset: 0x0058) Multi-driver Status Register -------- */\r
+#define PIO_MDSR_P0 (0x1u << 0) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P1 (0x1u << 1) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P2 (0x1u << 2) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P3 (0x1u << 3) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P4 (0x1u << 4) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P5 (0x1u << 5) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P6 (0x1u << 6) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P7 (0x1u << 7) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P8 (0x1u << 8) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P9 (0x1u << 9) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P10 (0x1u << 10) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P11 (0x1u << 11) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P12 (0x1u << 12) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P13 (0x1u << 13) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P14 (0x1u << 14) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P15 (0x1u << 15) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P16 (0x1u << 16) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P17 (0x1u << 17) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P18 (0x1u << 18) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P19 (0x1u << 19) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P20 (0x1u << 20) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P21 (0x1u << 21) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P22 (0x1u << 22) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P23 (0x1u << 23) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P24 (0x1u << 24) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P25 (0x1u << 25) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P26 (0x1u << 26) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P27 (0x1u << 27) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P28 (0x1u << 28) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P29 (0x1u << 29) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P30 (0x1u << 30) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+#define PIO_MDSR_P31 (0x1u << 31) /**< \brief (PIO_MDSR) Multi Drive Status. */\r
+/* -------- PIO_PUDR : (PIO Offset: 0x0060) Pull-up Disable Register -------- */\r
+#define PIO_PUDR_P0 (0x1u << 0) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P1 (0x1u << 1) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P2 (0x1u << 2) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P3 (0x1u << 3) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P4 (0x1u << 4) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P5 (0x1u << 5) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P6 (0x1u << 6) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P7 (0x1u << 7) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P8 (0x1u << 8) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P9 (0x1u << 9) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P10 (0x1u << 10) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P11 (0x1u << 11) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P12 (0x1u << 12) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P13 (0x1u << 13) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P14 (0x1u << 14) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P15 (0x1u << 15) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P16 (0x1u << 16) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P17 (0x1u << 17) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P18 (0x1u << 18) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P19 (0x1u << 19) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P20 (0x1u << 20) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P21 (0x1u << 21) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P22 (0x1u << 22) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P23 (0x1u << 23) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P24 (0x1u << 24) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P25 (0x1u << 25) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P26 (0x1u << 26) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P27 (0x1u << 27) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P28 (0x1u << 28) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P29 (0x1u << 29) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P30 (0x1u << 30) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+#define PIO_PUDR_P31 (0x1u << 31) /**< \brief (PIO_PUDR) Pull Up Disable. */\r
+/* -------- PIO_PUER : (PIO Offset: 0x0064) Pull-up Enable Register -------- */\r
+#define PIO_PUER_P0 (0x1u << 0) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P1 (0x1u << 1) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P2 (0x1u << 2) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P3 (0x1u << 3) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P4 (0x1u << 4) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P5 (0x1u << 5) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P6 (0x1u << 6) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P7 (0x1u << 7) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P8 (0x1u << 8) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P9 (0x1u << 9) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P10 (0x1u << 10) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P11 (0x1u << 11) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P12 (0x1u << 12) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P13 (0x1u << 13) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P14 (0x1u << 14) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P15 (0x1u << 15) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P16 (0x1u << 16) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P17 (0x1u << 17) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P18 (0x1u << 18) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P19 (0x1u << 19) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P20 (0x1u << 20) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P21 (0x1u << 21) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P22 (0x1u << 22) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P23 (0x1u << 23) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P24 (0x1u << 24) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P25 (0x1u << 25) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P26 (0x1u << 26) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P27 (0x1u << 27) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P28 (0x1u << 28) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P29 (0x1u << 29) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P30 (0x1u << 30) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+#define PIO_PUER_P31 (0x1u << 31) /**< \brief (PIO_PUER) Pull Up Enable. */\r
+/* -------- PIO_PUSR : (PIO Offset: 0x0068) Pad Pull-up Status Register -------- */\r
+#define PIO_PUSR_P0 (0x1u << 0) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P1 (0x1u << 1) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P2 (0x1u << 2) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P3 (0x1u << 3) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P4 (0x1u << 4) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P5 (0x1u << 5) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P6 (0x1u << 6) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P7 (0x1u << 7) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P8 (0x1u << 8) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P9 (0x1u << 9) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P10 (0x1u << 10) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P11 (0x1u << 11) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P12 (0x1u << 12) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P13 (0x1u << 13) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P14 (0x1u << 14) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P15 (0x1u << 15) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P16 (0x1u << 16) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P17 (0x1u << 17) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P18 (0x1u << 18) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P19 (0x1u << 19) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P20 (0x1u << 20) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P21 (0x1u << 21) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P22 (0x1u << 22) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P23 (0x1u << 23) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P24 (0x1u << 24) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P25 (0x1u << 25) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P26 (0x1u << 26) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P27 (0x1u << 27) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P28 (0x1u << 28) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P29 (0x1u << 29) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P30 (0x1u << 30) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+#define PIO_PUSR_P31 (0x1u << 31) /**< \brief (PIO_PUSR) Pull Up Status. */\r
+/* -------- PIO_ABCDSR[2] : (PIO Offset: 0x0070) Peripheral Select Register -------- */\r
+#define PIO_ABCDSR_P0 (0x1u << 0) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P1 (0x1u << 1) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P2 (0x1u << 2) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P3 (0x1u << 3) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P4 (0x1u << 4) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P5 (0x1u << 5) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P6 (0x1u << 6) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P7 (0x1u << 7) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P8 (0x1u << 8) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P9 (0x1u << 9) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P10 (0x1u << 10) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P11 (0x1u << 11) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P12 (0x1u << 12) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P13 (0x1u << 13) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P14 (0x1u << 14) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P15 (0x1u << 15) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P16 (0x1u << 16) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P17 (0x1u << 17) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P18 (0x1u << 18) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P19 (0x1u << 19) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P20 (0x1u << 20) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P21 (0x1u << 21) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P22 (0x1u << 22) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P23 (0x1u << 23) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P24 (0x1u << 24) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P25 (0x1u << 25) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P26 (0x1u << 26) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P27 (0x1u << 27) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P28 (0x1u << 28) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P29 (0x1u << 29) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P30 (0x1u << 30) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+#define PIO_ABCDSR_P31 (0x1u << 31) /**< \brief (PIO_ABCDSR[2]) Peripheral Select. */\r
+/* -------- PIO_IFSCDR : (PIO Offset: 0x0080) Input Filter Slow Clock Disable Register -------- */\r
+#define PIO_IFSCDR_P0 (0x1u << 0) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P1 (0x1u << 1) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P2 (0x1u << 2) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P3 (0x1u << 3) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P4 (0x1u << 4) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P5 (0x1u << 5) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P6 (0x1u << 6) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P7 (0x1u << 7) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P8 (0x1u << 8) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P9 (0x1u << 9) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P10 (0x1u << 10) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P11 (0x1u << 11) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P12 (0x1u << 12) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P13 (0x1u << 13) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P14 (0x1u << 14) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P15 (0x1u << 15) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P16 (0x1u << 16) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P17 (0x1u << 17) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P18 (0x1u << 18) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P19 (0x1u << 19) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P20 (0x1u << 20) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P21 (0x1u << 21) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P22 (0x1u << 22) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P23 (0x1u << 23) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P24 (0x1u << 24) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P25 (0x1u << 25) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P26 (0x1u << 26) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P27 (0x1u << 27) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P28 (0x1u << 28) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P29 (0x1u << 29) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P30 (0x1u << 30) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+#define PIO_IFSCDR_P31 (0x1u << 31) /**< \brief (PIO_IFSCDR) PIO Clock Glitch Filtering Select. */\r
+/* -------- PIO_IFSCER : (PIO Offset: 0x0084) Input Filter Slow Clock Enable Register -------- */\r
+#define PIO_IFSCER_P0 (0x1u << 0) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P1 (0x1u << 1) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P2 (0x1u << 2) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P3 (0x1u << 3) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P4 (0x1u << 4) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P5 (0x1u << 5) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P6 (0x1u << 6) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P7 (0x1u << 7) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P8 (0x1u << 8) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P9 (0x1u << 9) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P10 (0x1u << 10) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P11 (0x1u << 11) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P12 (0x1u << 12) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P13 (0x1u << 13) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P14 (0x1u << 14) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P15 (0x1u << 15) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P16 (0x1u << 16) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P17 (0x1u << 17) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P18 (0x1u << 18) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P19 (0x1u << 19) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P20 (0x1u << 20) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P21 (0x1u << 21) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P22 (0x1u << 22) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P23 (0x1u << 23) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P24 (0x1u << 24) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P25 (0x1u << 25) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P26 (0x1u << 26) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P27 (0x1u << 27) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P28 (0x1u << 28) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P29 (0x1u << 29) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P30 (0x1u << 30) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+#define PIO_IFSCER_P31 (0x1u << 31) /**< \brief (PIO_IFSCER) Debouncing Filtering Select. */\r
+/* -------- PIO_IFSCSR : (PIO Offset: 0x0088) Input Filter Slow Clock Status Register -------- */\r
+#define PIO_IFSCSR_P0 (0x1u << 0) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P1 (0x1u << 1) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P2 (0x1u << 2) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P3 (0x1u << 3) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P4 (0x1u << 4) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P5 (0x1u << 5) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P6 (0x1u << 6) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P7 (0x1u << 7) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P8 (0x1u << 8) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P9 (0x1u << 9) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P10 (0x1u << 10) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P11 (0x1u << 11) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P12 (0x1u << 12) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P13 (0x1u << 13) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P14 (0x1u << 14) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P15 (0x1u << 15) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P16 (0x1u << 16) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P17 (0x1u << 17) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P18 (0x1u << 18) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P19 (0x1u << 19) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P20 (0x1u << 20) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P21 (0x1u << 21) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P22 (0x1u << 22) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P23 (0x1u << 23) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P24 (0x1u << 24) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P25 (0x1u << 25) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P26 (0x1u << 26) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P27 (0x1u << 27) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P28 (0x1u << 28) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P29 (0x1u << 29) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P30 (0x1u << 30) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+#define PIO_IFSCSR_P31 (0x1u << 31) /**< \brief (PIO_IFSCSR) Glitch or Debouncing Filter Selection Status */\r
+/* -------- PIO_SCDR : (PIO Offset: 0x008C) Slow Clock Divider Debouncing Register -------- */\r
+#define PIO_SCDR_DIV_Pos 0\r
+#define PIO_SCDR_DIV_Msk (0x3fffu << PIO_SCDR_DIV_Pos) /**< \brief (PIO_SCDR) Slow Clock Divider Selection for Debouncing */\r
+#define PIO_SCDR_DIV(value) ((PIO_SCDR_DIV_Msk & ((value) << PIO_SCDR_DIV_Pos)))\r
+/* -------- PIO_PPDDR : (PIO Offset: 0x0090) Pad Pull-down Disable Register -------- */\r
+#define PIO_PPDDR_P0 (0x1u << 0) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P1 (0x1u << 1) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P2 (0x1u << 2) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P3 (0x1u << 3) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P4 (0x1u << 4) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P5 (0x1u << 5) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P6 (0x1u << 6) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P7 (0x1u << 7) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P8 (0x1u << 8) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P9 (0x1u << 9) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P10 (0x1u << 10) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P11 (0x1u << 11) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P12 (0x1u << 12) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P13 (0x1u << 13) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P14 (0x1u << 14) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P15 (0x1u << 15) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P16 (0x1u << 16) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P17 (0x1u << 17) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P18 (0x1u << 18) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P19 (0x1u << 19) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P20 (0x1u << 20) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P21 (0x1u << 21) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P22 (0x1u << 22) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P23 (0x1u << 23) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P24 (0x1u << 24) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P25 (0x1u << 25) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P26 (0x1u << 26) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P27 (0x1u << 27) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P28 (0x1u << 28) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P29 (0x1u << 29) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P30 (0x1u << 30) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+#define PIO_PPDDR_P31 (0x1u << 31) /**< \brief (PIO_PPDDR) Pull Down Disable */\r
+/* -------- PIO_PPDER : (PIO Offset: 0x0094) Pad Pull-down Enable Register -------- */\r
+#define PIO_PPDER_P0 (0x1u << 0) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P1 (0x1u << 1) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P2 (0x1u << 2) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P3 (0x1u << 3) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P4 (0x1u << 4) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P5 (0x1u << 5) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P6 (0x1u << 6) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P7 (0x1u << 7) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P8 (0x1u << 8) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P9 (0x1u << 9) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P10 (0x1u << 10) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P11 (0x1u << 11) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P12 (0x1u << 12) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P13 (0x1u << 13) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P14 (0x1u << 14) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P15 (0x1u << 15) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P16 (0x1u << 16) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P17 (0x1u << 17) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P18 (0x1u << 18) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P19 (0x1u << 19) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P20 (0x1u << 20) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P21 (0x1u << 21) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P22 (0x1u << 22) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P23 (0x1u << 23) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P24 (0x1u << 24) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P25 (0x1u << 25) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P26 (0x1u << 26) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P27 (0x1u << 27) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P28 (0x1u << 28) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P29 (0x1u << 29) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P30 (0x1u << 30) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+#define PIO_PPDER_P31 (0x1u << 31) /**< \brief (PIO_PPDER) Pull Down Enable */\r
+/* -------- PIO_PPDSR : (PIO Offset: 0x0098) Pad Pull-down Status Register -------- */\r
+#define PIO_PPDSR_P0 (0x1u << 0) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P1 (0x1u << 1) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P2 (0x1u << 2) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P3 (0x1u << 3) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P4 (0x1u << 4) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P5 (0x1u << 5) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P6 (0x1u << 6) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P7 (0x1u << 7) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P8 (0x1u << 8) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P9 (0x1u << 9) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P10 (0x1u << 10) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P11 (0x1u << 11) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P12 (0x1u << 12) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P13 (0x1u << 13) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P14 (0x1u << 14) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P15 (0x1u << 15) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P16 (0x1u << 16) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P17 (0x1u << 17) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P18 (0x1u << 18) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P19 (0x1u << 19) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P20 (0x1u << 20) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P21 (0x1u << 21) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P22 (0x1u << 22) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P23 (0x1u << 23) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P24 (0x1u << 24) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P25 (0x1u << 25) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P26 (0x1u << 26) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P27 (0x1u << 27) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P28 (0x1u << 28) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P29 (0x1u << 29) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P30 (0x1u << 30) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+#define PIO_PPDSR_P31 (0x1u << 31) /**< \brief (PIO_PPDSR) Pull Down Status */\r
+/* -------- PIO_OWER : (PIO Offset: 0x00A0) Output Write Enable -------- */\r
+#define PIO_OWER_P0 (0x1u << 0) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P1 (0x1u << 1) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P2 (0x1u << 2) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P3 (0x1u << 3) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P4 (0x1u << 4) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P5 (0x1u << 5) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P6 (0x1u << 6) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P7 (0x1u << 7) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P8 (0x1u << 8) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P9 (0x1u << 9) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P10 (0x1u << 10) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P11 (0x1u << 11) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P12 (0x1u << 12) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P13 (0x1u << 13) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P14 (0x1u << 14) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P15 (0x1u << 15) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P16 (0x1u << 16) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P17 (0x1u << 17) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P18 (0x1u << 18) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P19 (0x1u << 19) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P20 (0x1u << 20) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P21 (0x1u << 21) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P22 (0x1u << 22) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P23 (0x1u << 23) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P24 (0x1u << 24) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P25 (0x1u << 25) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P26 (0x1u << 26) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P27 (0x1u << 27) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P28 (0x1u << 28) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P29 (0x1u << 29) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P30 (0x1u << 30) /**< \brief (PIO_OWER) Output Write Enable */\r
+#define PIO_OWER_P31 (0x1u << 31) /**< \brief (PIO_OWER) Output Write Enable */\r
+/* -------- PIO_OWDR : (PIO Offset: 0x00A4) Output Write Disable -------- */\r
+#define PIO_OWDR_P0 (0x1u << 0) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P1 (0x1u << 1) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P2 (0x1u << 2) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P3 (0x1u << 3) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P4 (0x1u << 4) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P5 (0x1u << 5) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P6 (0x1u << 6) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P7 (0x1u << 7) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P8 (0x1u << 8) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P9 (0x1u << 9) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P10 (0x1u << 10) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P11 (0x1u << 11) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P12 (0x1u << 12) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P13 (0x1u << 13) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P14 (0x1u << 14) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P15 (0x1u << 15) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P16 (0x1u << 16) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P17 (0x1u << 17) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P18 (0x1u << 18) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P19 (0x1u << 19) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P20 (0x1u << 20) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P21 (0x1u << 21) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P22 (0x1u << 22) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P23 (0x1u << 23) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P24 (0x1u << 24) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P25 (0x1u << 25) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P26 (0x1u << 26) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P27 (0x1u << 27) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P28 (0x1u << 28) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P29 (0x1u << 29) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P30 (0x1u << 30) /**< \brief (PIO_OWDR) Output Write Disable */\r
+#define PIO_OWDR_P31 (0x1u << 31) /**< \brief (PIO_OWDR) Output Write Disable */\r
+/* -------- PIO_OWSR : (PIO Offset: 0x00A8) Output Write Status Register -------- */\r
+#define PIO_OWSR_P0 (0x1u << 0) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P1 (0x1u << 1) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P2 (0x1u << 2) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P3 (0x1u << 3) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P4 (0x1u << 4) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P5 (0x1u << 5) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P6 (0x1u << 6) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P7 (0x1u << 7) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P8 (0x1u << 8) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P9 (0x1u << 9) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P10 (0x1u << 10) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P11 (0x1u << 11) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P12 (0x1u << 12) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P13 (0x1u << 13) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P14 (0x1u << 14) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P15 (0x1u << 15) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P16 (0x1u << 16) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P17 (0x1u << 17) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P18 (0x1u << 18) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P19 (0x1u << 19) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P20 (0x1u << 20) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P21 (0x1u << 21) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P22 (0x1u << 22) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P23 (0x1u << 23) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P24 (0x1u << 24) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P25 (0x1u << 25) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P26 (0x1u << 26) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P27 (0x1u << 27) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P28 (0x1u << 28) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P29 (0x1u << 29) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P30 (0x1u << 30) /**< \brief (PIO_OWSR) Output Write Status */\r
+#define PIO_OWSR_P31 (0x1u << 31) /**< \brief (PIO_OWSR) Output Write Status */\r
+/* -------- PIO_AIMER : (PIO Offset: 0x00B0) Additional Interrupt Modes Enable Register -------- */\r
+#define PIO_AIMER_P0 (0x1u << 0) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P1 (0x1u << 1) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P2 (0x1u << 2) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P3 (0x1u << 3) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P4 (0x1u << 4) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P5 (0x1u << 5) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P6 (0x1u << 6) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P7 (0x1u << 7) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P8 (0x1u << 8) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P9 (0x1u << 9) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P10 (0x1u << 10) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P11 (0x1u << 11) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P12 (0x1u << 12) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P13 (0x1u << 13) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P14 (0x1u << 14) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P15 (0x1u << 15) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P16 (0x1u << 16) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P17 (0x1u << 17) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P18 (0x1u << 18) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P19 (0x1u << 19) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P20 (0x1u << 20) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P21 (0x1u << 21) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P22 (0x1u << 22) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P23 (0x1u << 23) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P24 (0x1u << 24) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P25 (0x1u << 25) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P26 (0x1u << 26) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P27 (0x1u << 27) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P28 (0x1u << 28) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P29 (0x1u << 29) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P30 (0x1u << 30) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+#define PIO_AIMER_P31 (0x1u << 31) /**< \brief (PIO_AIMER) Additional Interrupt Modes Enable */\r
+/* -------- PIO_AIMDR : (PIO Offset: 0x00B4) Additional Interrupt Modes Disables Register -------- */\r
+#define PIO_AIMDR_P0 (0x1u << 0) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P1 (0x1u << 1) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P2 (0x1u << 2) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P3 (0x1u << 3) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P4 (0x1u << 4) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P5 (0x1u << 5) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P6 (0x1u << 6) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P7 (0x1u << 7) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P8 (0x1u << 8) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P9 (0x1u << 9) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P10 (0x1u << 10) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P11 (0x1u << 11) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P12 (0x1u << 12) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P13 (0x1u << 13) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P14 (0x1u << 14) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P15 (0x1u << 15) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P16 (0x1u << 16) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P17 (0x1u << 17) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P18 (0x1u << 18) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P19 (0x1u << 19) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P20 (0x1u << 20) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P21 (0x1u << 21) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P22 (0x1u << 22) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P23 (0x1u << 23) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P24 (0x1u << 24) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P25 (0x1u << 25) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P26 (0x1u << 26) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P27 (0x1u << 27) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P28 (0x1u << 28) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P29 (0x1u << 29) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P30 (0x1u << 30) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+#define PIO_AIMDR_P31 (0x1u << 31) /**< \brief (PIO_AIMDR) Additional Interrupt Modes Disable */\r
+/* -------- PIO_AIMMR : (PIO Offset: 0x00B8) Additional Interrupt Modes Mask Register -------- */\r
+#define PIO_AIMMR_P0 (0x1u << 0) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P1 (0x1u << 1) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P2 (0x1u << 2) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P3 (0x1u << 3) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P4 (0x1u << 4) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P5 (0x1u << 5) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P6 (0x1u << 6) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P7 (0x1u << 7) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P8 (0x1u << 8) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P9 (0x1u << 9) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P10 (0x1u << 10) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P11 (0x1u << 11) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P12 (0x1u << 12) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P13 (0x1u << 13) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P14 (0x1u << 14) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P15 (0x1u << 15) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P16 (0x1u << 16) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P17 (0x1u << 17) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P18 (0x1u << 18) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P19 (0x1u << 19) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P20 (0x1u << 20) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P21 (0x1u << 21) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P22 (0x1u << 22) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P23 (0x1u << 23) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P24 (0x1u << 24) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P25 (0x1u << 25) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P26 (0x1u << 26) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P27 (0x1u << 27) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P28 (0x1u << 28) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P29 (0x1u << 29) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P30 (0x1u << 30) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+#define PIO_AIMMR_P31 (0x1u << 31) /**< \brief (PIO_AIMMR) Peripheral CD Status */\r
+/* -------- PIO_ESR : (PIO Offset: 0x00C0) Edge Select Register -------- */\r
+#define PIO_ESR_P0 (0x1u << 0) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P1 (0x1u << 1) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P2 (0x1u << 2) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P3 (0x1u << 3) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P4 (0x1u << 4) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P5 (0x1u << 5) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P6 (0x1u << 6) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P7 (0x1u << 7) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P8 (0x1u << 8) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P9 (0x1u << 9) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P10 (0x1u << 10) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P11 (0x1u << 11) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P12 (0x1u << 12) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P13 (0x1u << 13) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P14 (0x1u << 14) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P15 (0x1u << 15) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P16 (0x1u << 16) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P17 (0x1u << 17) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P18 (0x1u << 18) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P19 (0x1u << 19) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P20 (0x1u << 20) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P21 (0x1u << 21) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P22 (0x1u << 22) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P23 (0x1u << 23) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P24 (0x1u << 24) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P25 (0x1u << 25) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P26 (0x1u << 26) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P27 (0x1u << 27) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P28 (0x1u << 28) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P29 (0x1u << 29) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P30 (0x1u << 30) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+#define PIO_ESR_P31 (0x1u << 31) /**< \brief (PIO_ESR) Edge Interrupt Selection */\r
+/* -------- PIO_LSR : (PIO Offset: 0x00C4) Level Select Register -------- */\r
+#define PIO_LSR_P0 (0x1u << 0) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P1 (0x1u << 1) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P2 (0x1u << 2) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P3 (0x1u << 3) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P4 (0x1u << 4) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P5 (0x1u << 5) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P6 (0x1u << 6) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P7 (0x1u << 7) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P8 (0x1u << 8) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P9 (0x1u << 9) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P10 (0x1u << 10) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P11 (0x1u << 11) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P12 (0x1u << 12) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P13 (0x1u << 13) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P14 (0x1u << 14) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P15 (0x1u << 15) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P16 (0x1u << 16) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P17 (0x1u << 17) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P18 (0x1u << 18) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P19 (0x1u << 19) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P20 (0x1u << 20) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P21 (0x1u << 21) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P22 (0x1u << 22) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P23 (0x1u << 23) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P24 (0x1u << 24) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P25 (0x1u << 25) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P26 (0x1u << 26) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P27 (0x1u << 27) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P28 (0x1u << 28) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P29 (0x1u << 29) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P30 (0x1u << 30) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+#define PIO_LSR_P31 (0x1u << 31) /**< \brief (PIO_LSR) Level Interrupt Selection */\r
+/* -------- PIO_ELSR : (PIO Offset: 0x00C8) Edge/Level Status Register -------- */\r
+#define PIO_ELSR_P0 (0x1u << 0) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P1 (0x1u << 1) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P2 (0x1u << 2) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P3 (0x1u << 3) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P4 (0x1u << 4) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P5 (0x1u << 5) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P6 (0x1u << 6) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P7 (0x1u << 7) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P8 (0x1u << 8) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P9 (0x1u << 9) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P10 (0x1u << 10) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P11 (0x1u << 11) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P12 (0x1u << 12) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P13 (0x1u << 13) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P14 (0x1u << 14) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P15 (0x1u << 15) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P16 (0x1u << 16) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P17 (0x1u << 17) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P18 (0x1u << 18) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P19 (0x1u << 19) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P20 (0x1u << 20) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P21 (0x1u << 21) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P22 (0x1u << 22) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P23 (0x1u << 23) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P24 (0x1u << 24) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P25 (0x1u << 25) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P26 (0x1u << 26) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P27 (0x1u << 27) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P28 (0x1u << 28) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P29 (0x1u << 29) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P30 (0x1u << 30) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+#define PIO_ELSR_P31 (0x1u << 31) /**< \brief (PIO_ELSR) Edge/Level Interrupt Source Selection */\r
+/* -------- PIO_FELLSR : (PIO Offset: 0x00D0) Falling Edge/Low Level Select Register -------- */\r
+#define PIO_FELLSR_P0 (0x1u << 0) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P1 (0x1u << 1) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P2 (0x1u << 2) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P3 (0x1u << 3) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P4 (0x1u << 4) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P5 (0x1u << 5) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P6 (0x1u << 6) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P7 (0x1u << 7) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P8 (0x1u << 8) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P9 (0x1u << 9) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P10 (0x1u << 10) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P11 (0x1u << 11) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P12 (0x1u << 12) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P13 (0x1u << 13) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P14 (0x1u << 14) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P15 (0x1u << 15) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P16 (0x1u << 16) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P17 (0x1u << 17) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P18 (0x1u << 18) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P19 (0x1u << 19) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P20 (0x1u << 20) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P21 (0x1u << 21) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P22 (0x1u << 22) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P23 (0x1u << 23) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P24 (0x1u << 24) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P25 (0x1u << 25) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P26 (0x1u << 26) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P27 (0x1u << 27) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P28 (0x1u << 28) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P29 (0x1u << 29) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P30 (0x1u << 30) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+#define PIO_FELLSR_P31 (0x1u << 31) /**< \brief (PIO_FELLSR) Falling Edge/Low Level Interrupt Selection */\r
+/* -------- PIO_REHLSR : (PIO Offset: 0x00D4) Rising Edge/ High Level Select Register -------- */\r
+#define PIO_REHLSR_P0 (0x1u << 0) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P1 (0x1u << 1) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P2 (0x1u << 2) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P3 (0x1u << 3) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P4 (0x1u << 4) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P5 (0x1u << 5) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P6 (0x1u << 6) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P7 (0x1u << 7) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P8 (0x1u << 8) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P9 (0x1u << 9) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P10 (0x1u << 10) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P11 (0x1u << 11) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P12 (0x1u << 12) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P13 (0x1u << 13) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P14 (0x1u << 14) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P15 (0x1u << 15) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P16 (0x1u << 16) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P17 (0x1u << 17) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P18 (0x1u << 18) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P19 (0x1u << 19) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P20 (0x1u << 20) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P21 (0x1u << 21) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P22 (0x1u << 22) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P23 (0x1u << 23) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P24 (0x1u << 24) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P25 (0x1u << 25) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P26 (0x1u << 26) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P27 (0x1u << 27) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P28 (0x1u << 28) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P29 (0x1u << 29) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P30 (0x1u << 30) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+#define PIO_REHLSR_P31 (0x1u << 31) /**< \brief (PIO_REHLSR) Rising Edge /High Level Interrupt Selection */\r
+/* -------- PIO_FRLHSR : (PIO Offset: 0x00D8) Fall/Rise - Low/High Status Register -------- */\r
+#define PIO_FRLHSR_P0 (0x1u << 0) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P1 (0x1u << 1) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P2 (0x1u << 2) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P3 (0x1u << 3) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P4 (0x1u << 4) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P5 (0x1u << 5) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P6 (0x1u << 6) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P7 (0x1u << 7) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P8 (0x1u << 8) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P9 (0x1u << 9) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P10 (0x1u << 10) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P11 (0x1u << 11) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P12 (0x1u << 12) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P13 (0x1u << 13) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P14 (0x1u << 14) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P15 (0x1u << 15) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P16 (0x1u << 16) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P17 (0x1u << 17) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P18 (0x1u << 18) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P19 (0x1u << 19) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P20 (0x1u << 20) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P21 (0x1u << 21) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P22 (0x1u << 22) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P23 (0x1u << 23) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P24 (0x1u << 24) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P25 (0x1u << 25) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P26 (0x1u << 26) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P27 (0x1u << 27) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P28 (0x1u << 28) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P29 (0x1u << 29) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P30 (0x1u << 30) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+#define PIO_FRLHSR_P31 (0x1u << 31) /**< \brief (PIO_FRLHSR) Edge /Level Interrupt Source Selection */\r
+/* -------- PIO_WPMR : (PIO Offset: 0x00E4) Write Protect Mode Register -------- */\r
+#define PIO_WPMR_WPEN (0x1u << 0) /**< \brief (PIO_WPMR) Write Protect Enable */\r
+#define PIO_WPMR_WPKEY_Pos 8\r
+#define PIO_WPMR_WPKEY_Msk (0xffffffu << PIO_WPMR_WPKEY_Pos) /**< \brief (PIO_WPMR) Write Protect KEY. */\r
+#define   PIO_WPMR_WPKEY_PASSWD (0x50494Fu << 8) /**< \brief (PIO_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit. Always reads as 0. */\r
+/* -------- PIO_WPSR : (PIO Offset: 0x00E8) Write Protect Status Register -------- */\r
+#define PIO_WPSR_WPVS (0x1u << 0) /**< \brief (PIO_WPSR) Write Protect Violation Status */\r
+#define PIO_WPSR_WPVSRC_Pos 8\r
+#define PIO_WPSR_WPVSRC_Msk (0xffffu << PIO_WPSR_WPVSRC_Pos) /**< \brief (PIO_WPSR) Write Protect Violation Source */\r
+/* -------- PIO_SCHMITT : (PIO Offset: 0x0100) Schmitt Trigger Register -------- */\r
+#define PIO_SCHMITT_SCHMITT0 (0x1u << 0) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT1 (0x1u << 1) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT2 (0x1u << 2) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT3 (0x1u << 3) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT4 (0x1u << 4) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT5 (0x1u << 5) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT6 (0x1u << 6) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT7 (0x1u << 7) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT8 (0x1u << 8) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT9 (0x1u << 9) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT10 (0x1u << 10) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT11 (0x1u << 11) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT12 (0x1u << 12) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT13 (0x1u << 13) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT14 (0x1u << 14) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT15 (0x1u << 15) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT16 (0x1u << 16) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT17 (0x1u << 17) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT18 (0x1u << 18) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT19 (0x1u << 19) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT20 (0x1u << 20) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT21 (0x1u << 21) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT22 (0x1u << 22) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT23 (0x1u << 23) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT24 (0x1u << 24) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT25 (0x1u << 25) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT26 (0x1u << 26) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT27 (0x1u << 27) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT28 (0x1u << 28) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT29 (0x1u << 29) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT30 (0x1u << 30) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+#define PIO_SCHMITT_SCHMITT31 (0x1u << 31) /**< \brief (PIO_SCHMITT) Schmitt Trigger Control */\r
+/* -------- PIO_DRIVER1 : (PIO Offset: 0x0118) I/O Drive Register 1 -------- */\r
+#define PIO_DRIVER1_LINE0_Pos 0\r
+#define PIO_DRIVER1_LINE0_Msk (0x3u << PIO_DRIVER1_LINE0_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 0 */\r
+#define   PIO_DRIVER1_LINE0_LO_DRIVE (0x0u << 0) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE0_ME_DRIVE (0x2u << 0) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE0_HI_DRIVE (0x3u << 0) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE1_Pos 2\r
+#define PIO_DRIVER1_LINE1_Msk (0x3u << PIO_DRIVER1_LINE1_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 1 */\r
+#define   PIO_DRIVER1_LINE1_LO_DRIVE (0x0u << 2) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE1_ME_DRIVE (0x2u << 2) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE1_HI_DRIVE (0x3u << 2) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE2_Pos 4\r
+#define PIO_DRIVER1_LINE2_Msk (0x3u << PIO_DRIVER1_LINE2_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 2 */\r
+#define   PIO_DRIVER1_LINE2_LO_DRIVE (0x0u << 4) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE2_ME_DRIVE (0x2u << 4) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE2_HI_DRIVE (0x3u << 4) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE3_Pos 6\r
+#define PIO_DRIVER1_LINE3_Msk (0x3u << PIO_DRIVER1_LINE3_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 3 */\r
+#define   PIO_DRIVER1_LINE3_LO_DRIVE (0x0u << 6) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE3_ME_DRIVE (0x2u << 6) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE3_HI_DRIVE (0x3u << 6) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE4_Pos 8\r
+#define PIO_DRIVER1_LINE4_Msk (0x3u << PIO_DRIVER1_LINE4_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 4 */\r
+#define   PIO_DRIVER1_LINE4_LO_DRIVE (0x0u << 8) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE4_ME_DRIVE (0x2u << 8) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE4_HI_DRIVE (0x3u << 8) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE5_Pos 10\r
+#define PIO_DRIVER1_LINE5_Msk (0x3u << PIO_DRIVER1_LINE5_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 5 */\r
+#define   PIO_DRIVER1_LINE5_LO_DRIVE (0x0u << 10) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE5_ME_DRIVE (0x2u << 10) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE5_HI_DRIVE (0x3u << 10) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE6_Pos 12\r
+#define PIO_DRIVER1_LINE6_Msk (0x3u << PIO_DRIVER1_LINE6_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 6 */\r
+#define   PIO_DRIVER1_LINE6_LO_DRIVE (0x0u << 12) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE6_ME_DRIVE (0x2u << 12) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE6_HI_DRIVE (0x3u << 12) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE7_Pos 14\r
+#define PIO_DRIVER1_LINE7_Msk (0x3u << PIO_DRIVER1_LINE7_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 7 */\r
+#define   PIO_DRIVER1_LINE7_LO_DRIVE (0x0u << 14) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE7_ME_DRIVE (0x2u << 14) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE7_HI_DRIVE (0x3u << 14) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE8_Pos 16\r
+#define PIO_DRIVER1_LINE8_Msk (0x3u << PIO_DRIVER1_LINE8_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 8 */\r
+#define   PIO_DRIVER1_LINE8_LO_DRIVE (0x0u << 16) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE8_ME_DRIVE (0x2u << 16) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE8_HI_DRIVE (0x3u << 16) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE9_Pos 18\r
+#define PIO_DRIVER1_LINE9_Msk (0x3u << PIO_DRIVER1_LINE9_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 9 */\r
+#define   PIO_DRIVER1_LINE9_LO_DRIVE (0x0u << 18) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE9_ME_DRIVE (0x2u << 18) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE9_HI_DRIVE (0x3u << 18) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE10_Pos 20\r
+#define PIO_DRIVER1_LINE10_Msk (0x3u << PIO_DRIVER1_LINE10_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 10 */\r
+#define   PIO_DRIVER1_LINE10_LO_DRIVE (0x0u << 20) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE10_ME_DRIVE (0x2u << 20) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE10_HI_DRIVE (0x3u << 20) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE11_Pos 22\r
+#define PIO_DRIVER1_LINE11_Msk (0x3u << PIO_DRIVER1_LINE11_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 11 */\r
+#define   PIO_DRIVER1_LINE11_LO_DRIVE (0x0u << 22) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE11_ME_DRIVE (0x2u << 22) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE11_HI_DRIVE (0x3u << 22) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE12_Pos 24\r
+#define PIO_DRIVER1_LINE12_Msk (0x3u << PIO_DRIVER1_LINE12_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 12 */\r
+#define   PIO_DRIVER1_LINE12_LO_DRIVE (0x0u << 24) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE12_ME_DRIVE (0x2u << 24) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE12_HI_DRIVE (0x3u << 24) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE13_Pos 26\r
+#define PIO_DRIVER1_LINE13_Msk (0x3u << PIO_DRIVER1_LINE13_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 13 */\r
+#define   PIO_DRIVER1_LINE13_LO_DRIVE (0x0u << 26) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE13_ME_DRIVE (0x2u << 26) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE13_HI_DRIVE (0x3u << 26) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE14_Pos 28\r
+#define PIO_DRIVER1_LINE14_Msk (0x3u << PIO_DRIVER1_LINE14_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 14 */\r
+#define   PIO_DRIVER1_LINE14_LO_DRIVE (0x0u << 28) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE14_ME_DRIVE (0x2u << 28) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE14_HI_DRIVE (0x3u << 28) /**< \brief (PIO_DRIVER1) High drive */\r
+#define PIO_DRIVER1_LINE15_Pos 30\r
+#define PIO_DRIVER1_LINE15_Msk (0x3u << PIO_DRIVER1_LINE15_Pos) /**< \brief (PIO_DRIVER1) Drive of PIO Line 15 */\r
+#define   PIO_DRIVER1_LINE15_LO_DRIVE (0x0u << 30) /**< \brief (PIO_DRIVER1) Low drive */\r
+#define   PIO_DRIVER1_LINE15_ME_DRIVE (0x2u << 30) /**< \brief (PIO_DRIVER1) Medium drive */\r
+#define   PIO_DRIVER1_LINE15_HI_DRIVE (0x3u << 30) /**< \brief (PIO_DRIVER1) High drive */\r
+/* -------- PIO_DRIVER2 : (PIO Offset: 0x011C) I/O Drive Register 2 -------- */\r
+#define PIO_DRIVER2_LINE16_Pos 0\r
+#define PIO_DRIVER2_LINE16_Msk (0x3u << PIO_DRIVER2_LINE16_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 16 */\r
+#define   PIO_DRIVER2_LINE16_LO_DRIVE (0x0u << 0) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE16_ME_DRIVE (0x2u << 0) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE16_HI_DRIVE (0x3u << 0) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE17_Pos 2\r
+#define PIO_DRIVER2_LINE17_Msk (0x3u << PIO_DRIVER2_LINE17_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 17 */\r
+#define   PIO_DRIVER2_LINE17_LO_DRIVE (0x0u << 2) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE17_ME_DRIVE (0x2u << 2) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE17_HI_DRIVE (0x3u << 2) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE18_Pos 4\r
+#define PIO_DRIVER2_LINE18_Msk (0x3u << PIO_DRIVER2_LINE18_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 18 */\r
+#define   PIO_DRIVER2_LINE18_LO_DRIVE (0x0u << 4) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE18_ME_DRIVE (0x2u << 4) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE18_HI_DRIVE (0x3u << 4) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE19_Pos 6\r
+#define PIO_DRIVER2_LINE19_Msk (0x3u << PIO_DRIVER2_LINE19_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 19 */\r
+#define   PIO_DRIVER2_LINE19_LO_DRIVE (0x0u << 6) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE19_ME_DRIVE (0x2u << 6) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE19_HI_DRIVE (0x3u << 6) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE20_Pos 8\r
+#define PIO_DRIVER2_LINE20_Msk (0x3u << PIO_DRIVER2_LINE20_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 20 */\r
+#define   PIO_DRIVER2_LINE20_LO_DRIVE (0x0u << 8) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE20_ME_DRIVE (0x2u << 8) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE20_HI_DRIVE (0x3u << 8) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE21_Pos 10\r
+#define PIO_DRIVER2_LINE21_Msk (0x3u << PIO_DRIVER2_LINE21_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 21 */\r
+#define   PIO_DRIVER2_LINE21_LO_DRIVE (0x0u << 10) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE21_ME_DRIVE (0x2u << 10) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE21_HI_DRIVE (0x3u << 10) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE22_Pos 12\r
+#define PIO_DRIVER2_LINE22_Msk (0x3u << PIO_DRIVER2_LINE22_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 22 */\r
+#define   PIO_DRIVER2_LINE22_LO_DRIVE (0x0u << 12) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE22_ME_DRIVE (0x2u << 12) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE22_HI_DRIVE (0x3u << 12) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE23_Pos 14\r
+#define PIO_DRIVER2_LINE23_Msk (0x3u << PIO_DRIVER2_LINE23_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 23 */\r
+#define   PIO_DRIVER2_LINE23_LO_DRIVE (0x0u << 14) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE23_ME_DRIVE (0x2u << 14) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE23_HI_DRIVE (0x3u << 14) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE24_Pos 16\r
+#define PIO_DRIVER2_LINE24_Msk (0x3u << PIO_DRIVER2_LINE24_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 24 */\r
+#define   PIO_DRIVER2_LINE24_LO_DRIVE (0x0u << 16) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE24_ME_DRIVE (0x2u << 16) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE24_HI_DRIVE (0x3u << 16) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE25_Pos 18\r
+#define PIO_DRIVER2_LINE25_Msk (0x3u << PIO_DRIVER2_LINE25_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 25 */\r
+#define   PIO_DRIVER2_LINE25_LO_DRIVE (0x0u << 18) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE25_ME_DRIVE (0x2u << 18) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE25_HI_DRIVE (0x3u << 18) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE26_Pos 20\r
+#define PIO_DRIVER2_LINE26_Msk (0x3u << PIO_DRIVER2_LINE26_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 26 */\r
+#define   PIO_DRIVER2_LINE26_LO_DRIVE (0x0u << 20) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE26_ME_DRIVE (0x2u << 20) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE26_HI_DRIVE (0x3u << 20) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE27_Pos 22\r
+#define PIO_DRIVER2_LINE27_Msk (0x3u << PIO_DRIVER2_LINE27_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 27 */\r
+#define   PIO_DRIVER2_LINE27_LO_DRIVE (0x0u << 22) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE27_ME_DRIVE (0x2u << 22) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE27_HI_DRIVE (0x3u << 22) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE28_Pos 24\r
+#define PIO_DRIVER2_LINE28_Msk (0x3u << PIO_DRIVER2_LINE28_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 28 */\r
+#define   PIO_DRIVER2_LINE28_LO_DRIVE (0x0u << 24) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE28_ME_DRIVE (0x2u << 24) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE28_HI_DRIVE (0x3u << 24) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE29_Pos 26\r
+#define PIO_DRIVER2_LINE29_Msk (0x3u << PIO_DRIVER2_LINE29_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 29 */\r
+#define   PIO_DRIVER2_LINE29_LO_DRIVE (0x0u << 26) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE29_ME_DRIVE (0x2u << 26) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE29_HI_DRIVE (0x3u << 26) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE30_Pos 28\r
+#define PIO_DRIVER2_LINE30_Msk (0x3u << PIO_DRIVER2_LINE30_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 30 */\r
+#define   PIO_DRIVER2_LINE30_LO_DRIVE (0x0u << 28) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE30_ME_DRIVE (0x2u << 28) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE30_HI_DRIVE (0x3u << 28) /**< \brief (PIO_DRIVER2) High drive */\r
+#define PIO_DRIVER2_LINE31_Pos 30\r
+#define PIO_DRIVER2_LINE31_Msk (0x3u << PIO_DRIVER2_LINE31_Pos) /**< \brief (PIO_DRIVER2) Drive of PIO line 31 */\r
+#define   PIO_DRIVER2_LINE31_LO_DRIVE (0x0u << 30) /**< \brief (PIO_DRIVER2) Low drive */\r
+#define   PIO_DRIVER2_LINE31_ME_DRIVE (0x2u << 30) /**< \brief (PIO_DRIVER2) Medium drive */\r
+#define   PIO_DRIVER2_LINE31_HI_DRIVE (0x3u << 30) /**< \brief (PIO_DRIVER2) High drive */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Periodic Interval Timer */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_PIT Periodic Interval Timer */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Pit hardware registers */\r
+typedef struct {\r
+  __IO uint32_t PIT_MR;   /**< \brief (Pit Offset: 0x00) Mode Register */\r
+  __I  uint32_t PIT_SR;   /**< \brief (Pit Offset: 0x04) Status Register */\r
+  __I  uint32_t PIT_PIVR; /**< \brief (Pit Offset: 0x08) Periodic Interval Value Register */\r
+  __I  uint32_t PIT_PIIR; /**< \brief (Pit Offset: 0x0C) Periodic Interval Image Register */\r
+} Pit;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- PIT_MR : (PIT Offset: 0x00) Mode Register -------- */\r
+#define PIT_MR_PIV_Pos 0\r
+#define PIT_MR_PIV_Msk (0xfffffu << PIT_MR_PIV_Pos) /**< \brief (PIT_MR) Periodic Interval Value */\r
+#define PIT_MR_PIV(value) ((PIT_MR_PIV_Msk & ((value) << PIT_MR_PIV_Pos)))\r
+#define PIT_MR_PITEN (0x1u << 24) /**< \brief (PIT_MR) Period Interval Timer Enabled */\r
+#define PIT_MR_PITIEN (0x1u << 25) /**< \brief (PIT_MR) Periodic Interval Timer Interrupt Enable */\r
+/* -------- PIT_SR : (PIT Offset: 0x04) Status Register -------- */\r
+#define PIT_SR_PITS (0x1u << 0) /**< \brief (PIT_SR) Periodic Interval Timer Status */\r
+/* -------- PIT_PIVR : (PIT Offset: 0x08) Periodic Interval Value Register -------- */\r
+#define PIT_PIVR_CPIV_Pos 0\r
+#define PIT_PIVR_CPIV_Msk (0xfffffu << PIT_PIVR_CPIV_Pos) /**< \brief (PIT_PIVR) Current Periodic Interval Value */\r
+#define PIT_PIVR_PICNT_Pos 20\r
+#define PIT_PIVR_PICNT_Msk (0xfffu << PIT_PIVR_PICNT_Pos) /**< \brief (PIT_PIVR) Periodic Interval Counter */\r
+/* -------- PIT_PIIR : (PIT Offset: 0x0C) Periodic Interval Image Register -------- */\r
+#define PIT_PIIR_CPIV_Pos 0\r
+#define PIT_PIIR_CPIV_Msk (0xfffffu << PIT_PIIR_CPIV_Pos) /**< \brief (PIT_PIIR) Current Periodic Interval Value */\r
+#define PIT_PIIR_PICNT_Pos 20\r
+#define PIT_PIIR_PICNT_Msk (0xfffu << PIT_PIIR_PICNT_Pos) /**< \brief (PIT_PIIR) Periodic Interval Counter */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Power Management Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_PMC Power Management Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Pmc hardware registers */\r
+typedef struct {\r
+  __O  uint32_t PMC_SCER;      /**< \brief (Pmc Offset: 0x0000) System Clock Enable Register */\r
+  __O  uint32_t PMC_SCDR;      /**< \brief (Pmc Offset: 0x0004) System Clock Disable Register */\r
+  __I  uint32_t PMC_SCSR;      /**< \brief (Pmc Offset: 0x0008) System Clock Status Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __O  uint32_t PMC_PCER0;     /**< \brief (Pmc Offset: 0x0010) Peripheral Clock Enable Register 0 */\r
+  __O  uint32_t PMC_PCDR0;     /**< \brief (Pmc Offset: 0x0014) Peripheral Clock Disable Register 0 */\r
+  __I  uint32_t PMC_PCSR0;     /**< \brief (Pmc Offset: 0x0018) Peripheral Clock Status Register 0 */\r
+  __IO uint32_t CKGR_UCKR;     /**< \brief (Pmc Offset: 0x001C) UTMI Clock Register */\r
+  __IO uint32_t CKGR_MOR;      /**< \brief (Pmc Offset: 0x0020) Main Oscillator Register */\r
+  __I  uint32_t CKGR_MCFR;     /**< \brief (Pmc Offset: 0x0024) Main Clock Frequency Register */\r
+  __IO uint32_t CKGR_PLLAR;    /**< \brief (Pmc Offset: 0x0028) PLLA Register */\r
+  __I  uint32_t Reserved2[1];\r
+  __IO uint32_t PMC_MCKR;      /**< \brief (Pmc Offset: 0x0030) Master Clock Register */\r
+  __I  uint32_t Reserved3[1];\r
+  __IO uint32_t PMC_USB;       /**< \brief (Pmc Offset: 0x0038) USB Clock Register */\r
+  __IO uint32_t PMC_SMD;       /**< \brief (Pmc Offset: 0x003C) Soft Modem Clock Register */\r
+  __IO uint32_t PMC_PCK[3];    /**< \brief (Pmc Offset: 0x0040) Programmable Clock 0 Register */\r
+  __I  uint32_t Reserved4[5];\r
+  __O  uint32_t PMC_IER;       /**< \brief (Pmc Offset: 0x0060) Interrupt Enable Register */\r
+  __O  uint32_t PMC_IDR;       /**< \brief (Pmc Offset: 0x0064) Interrupt Disable Register */\r
+  __I  uint32_t PMC_SR;        /**< \brief (Pmc Offset: 0x0068) Status Register */\r
+  __I  uint32_t PMC_IMR;       /**< \brief (Pmc Offset: 0x006C) Interrupt Mask Register */\r
+  __I  uint32_t Reserved5[2];\r
+  __O  uint32_t PMC_FOCR;      /**< \brief (Pmc Offset: 0x0078) Fault Output Clear Register */\r
+  __I  uint32_t Reserved6[1];\r
+  __O  uint32_t PMC_PLLICPR;   /**< \brief (Pmc Offset: 0x0080) PLL Charge Pump Current Register */\r
+  __I  uint32_t Reserved7[24];\r
+  __IO uint32_t PMC_WPMR;      /**< \brief (Pmc Offset: 0x00E4) Write Protect Mode Register */\r
+  __I  uint32_t PMC_WPSR;      /**< \brief (Pmc Offset: 0x00E8) Write Protect Status Register */\r
+  __I  uint32_t Reserved8[5];\r
+  __O  uint32_t PMC_PCER1;     /**< \brief (Pmc Offset: 0x0100) Peripheral Clock Enable Register 1 */\r
+  __O  uint32_t PMC_PCDR1;     /**< \brief (Pmc Offset: 0x0104) Peripheral Clock Disable Register 1 */\r
+  __I  uint32_t PMC_PCSR1;     /**< \brief (Pmc Offset: 0x0108) Peripheral Clock Status Register 1 */\r
+  __IO uint32_t PMC_PCR;       /**< \brief (Pmc Offset: 0x010C) Peripheral Control Register */\r
+} Pmc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- PMC_SCER : (PMC Offset: 0x0000) System Clock Enable Register -------- */\r
+#define PMC_SCER_DDRCK (0x1u << 2) /**< \brief (PMC_SCER) DDR Clock Enable */\r
+#define PMC_SCER_LCDCK (0x1u << 3) /**< \brief (PMC_SCER) LCD2x Clock Enable */\r
+#define PMC_SCER_SMDCK (0x1u << 4) /**< \brief (PMC_SCER) SMD Clock Enable */\r
+#define PMC_SCER_UHP (0x1u << 6) /**< \brief (PMC_SCER) USB Host OHCI Clocks Enable */\r
+#define PMC_SCER_UDP (0x1u << 7) /**< \brief (PMC_SCER) USB Device Clock Enable */\r
+#define PMC_SCER_PCK0 (0x1u << 8) /**< \brief (PMC_SCER) Programmable Clock 0 Output Enable */\r
+#define PMC_SCER_PCK1 (0x1u << 9) /**< \brief (PMC_SCER) Programmable Clock 1 Output Enable */\r
+#define PMC_SCER_PCK2 (0x1u << 10) /**< \brief (PMC_SCER) Programmable Clock 2 Output Enable */\r
+/* -------- PMC_SCDR : (PMC Offset: 0x0004) System Clock Disable Register -------- */\r
+#define PMC_SCDR_PCK (0x1u << 0) /**< \brief (PMC_SCDR) Processor Clock Disable */\r
+#define PMC_SCDR_DDRCK (0x1u << 2) /**< \brief (PMC_SCDR) DDR Clock Disable */\r
+#define PMC_SCDR_LCDCK (0x1u << 3) /**< \brief (PMC_SCDR) LCD2x Clock Disable */\r
+#define PMC_SCDR_SMDCK (0x1u << 4) /**< \brief (PMC_SCDR) SMD Clock Disable */\r
+#define PMC_SCDR_UHP (0x1u << 6) /**< \brief (PMC_SCDR) USB Host OHCI Clock Disable */\r
+#define PMC_SCDR_UDP (0x1u << 7) /**< \brief (PMC_SCDR) USB Device Clock Enable */\r
+#define PMC_SCDR_PCK0 (0x1u << 8) /**< \brief (PMC_SCDR) Programmable Clock 0 Output Disable */\r
+#define PMC_SCDR_PCK1 (0x1u << 9) /**< \brief (PMC_SCDR) Programmable Clock 1 Output Disable */\r
+#define PMC_SCDR_PCK2 (0x1u << 10) /**< \brief (PMC_SCDR) Programmable Clock 2 Output Disable */\r
+/* -------- PMC_SCSR : (PMC Offset: 0x0008) System Clock Status Register -------- */\r
+#define PMC_SCSR_PCK (0x1u << 0) /**< \brief (PMC_SCSR) Processor Clock Status */\r
+#define PMC_SCSR_DDRCK (0x1u << 2) /**< \brief (PMC_SCSR) DDR Clock Status */\r
+#define PMC_SCSR_LCDCK (0x1u << 3) /**< \brief (PMC_SCSR) LCD2x Clock Status */\r
+#define PMC_SCSR_SMDCK (0x1u << 4) /**< \brief (PMC_SCSR) SMD Clock Status */\r
+#define PMC_SCSR_UHP (0x1u << 6) /**< \brief (PMC_SCSR) USB Host Port Clock Status */\r
+#define PMC_SCSR_UDP (0x1u << 7) /**< \brief (PMC_SCSR) USB Device Port Clock Status */\r
+#define PMC_SCSR_PCK0 (0x1u << 8) /**< \brief (PMC_SCSR) Programmable Clock 0 Output Status */\r
+#define PMC_SCSR_PCK1 (0x1u << 9) /**< \brief (PMC_SCSR) Programmable Clock 1 Output Status */\r
+#define PMC_SCSR_PCK2 (0x1u << 10) /**< \brief (PMC_SCSR) Programmable Clock 2 Output Status */\r
+/* -------- PMC_PCER0 : (PMC Offset: 0x0010) Peripheral Clock Enable Register 0 -------- */\r
+#define PMC_PCER0_PID2 (0x1u << 2) /**< \brief (PMC_PCER0) Peripheral Clock 2 Enable */\r
+#define PMC_PCER0_PID3 (0x1u << 3) /**< \brief (PMC_PCER0) Peripheral Clock 3 Enable */\r
+#define PMC_PCER0_PID4 (0x1u << 4) /**< \brief (PMC_PCER0) Peripheral Clock 4 Enable */\r
+#define PMC_PCER0_PID5 (0x1u << 5) /**< \brief (PMC_PCER0) Peripheral Clock 5 Enable */\r
+#define PMC_PCER0_PID6 (0x1u << 6) /**< \brief (PMC_PCER0) Peripheral Clock 6 Enable */\r
+#define PMC_PCER0_PID7 (0x1u << 7) /**< \brief (PMC_PCER0) Peripheral Clock 7 Enable */\r
+#define PMC_PCER0_PID8 (0x1u << 8) /**< \brief (PMC_PCER0) Peripheral Clock 8 Enable */\r
+#define PMC_PCER0_PID9 (0x1u << 9) /**< \brief (PMC_PCER0) Peripheral Clock 9 Enable */\r
+#define PMC_PCER0_PID10 (0x1u << 10) /**< \brief (PMC_PCER0) Peripheral Clock 10 Enable */\r
+#define PMC_PCER0_PID11 (0x1u << 11) /**< \brief (PMC_PCER0) Peripheral Clock 11 Enable */\r
+#define PMC_PCER0_PID12 (0x1u << 12) /**< \brief (PMC_PCER0) Peripheral Clock 12 Enable */\r
+#define PMC_PCER0_PID13 (0x1u << 13) /**< \brief (PMC_PCER0) Peripheral Clock 13 Enable */\r
+#define PMC_PCER0_PID14 (0x1u << 14) /**< \brief (PMC_PCER0) Peripheral Clock 14 Enable */\r
+#define PMC_PCER0_PID15 (0x1u << 15) /**< \brief (PMC_PCER0) Peripheral Clock 15 Enable */\r
+#define PMC_PCER0_PID16 (0x1u << 16) /**< \brief (PMC_PCER0) Peripheral Clock 16 Enable */\r
+#define PMC_PCER0_PID17 (0x1u << 17) /**< \brief (PMC_PCER0) Peripheral Clock 17 Enable */\r
+#define PMC_PCER0_PID18 (0x1u << 18) /**< \brief (PMC_PCER0) Peripheral Clock 18 Enable */\r
+#define PMC_PCER0_PID19 (0x1u << 19) /**< \brief (PMC_PCER0) Peripheral Clock 19 Enable */\r
+#define PMC_PCER0_PID20 (0x1u << 20) /**< \brief (PMC_PCER0) Peripheral Clock 20 Enable */\r
+#define PMC_PCER0_PID21 (0x1u << 21) /**< \brief (PMC_PCER0) Peripheral Clock 21 Enable */\r
+#define PMC_PCER0_PID22 (0x1u << 22) /**< \brief (PMC_PCER0) Peripheral Clock 22 Enable */\r
+#define PMC_PCER0_PID23 (0x1u << 23) /**< \brief (PMC_PCER0) Peripheral Clock 23 Enable */\r
+#define PMC_PCER0_PID24 (0x1u << 24) /**< \brief (PMC_PCER0) Peripheral Clock 24 Enable */\r
+#define PMC_PCER0_PID25 (0x1u << 25) /**< \brief (PMC_PCER0) Peripheral Clock 25 Enable */\r
+#define PMC_PCER0_PID26 (0x1u << 26) /**< \brief (PMC_PCER0) Peripheral Clock 26 Enable */\r
+#define PMC_PCER0_PID27 (0x1u << 27) /**< \brief (PMC_PCER0) Peripheral Clock 27 Enable */\r
+#define PMC_PCER0_PID28 (0x1u << 28) /**< \brief (PMC_PCER0) Peripheral Clock 28 Enable */\r
+#define PMC_PCER0_PID29 (0x1u << 29) /**< \brief (PMC_PCER0) Peripheral Clock 29 Enable */\r
+#define PMC_PCER0_PID30 (0x1u << 30) /**< \brief (PMC_PCER0) Peripheral Clock 30 Enable */\r
+#define PMC_PCER0_PID31 (0x1u << 31) /**< \brief (PMC_PCER0) Peripheral Clock 31 Enable */\r
+/* -------- PMC_PCDR0 : (PMC Offset: 0x0014) Peripheral Clock Disable Register 0 -------- */\r
+#define PMC_PCDR0_PID2 (0x1u << 2) /**< \brief (PMC_PCDR0) Peripheral Clock 2 Disable */\r
+#define PMC_PCDR0_PID3 (0x1u << 3) /**< \brief (PMC_PCDR0) Peripheral Clock 3 Disable */\r
+#define PMC_PCDR0_PID4 (0x1u << 4) /**< \brief (PMC_PCDR0) Peripheral Clock 4 Disable */\r
+#define PMC_PCDR0_PID5 (0x1u << 5) /**< \brief (PMC_PCDR0) Peripheral Clock 5 Disable */\r
+#define PMC_PCDR0_PID6 (0x1u << 6) /**< \brief (PMC_PCDR0) Peripheral Clock 6 Disable */\r
+#define PMC_PCDR0_PID7 (0x1u << 7) /**< \brief (PMC_PCDR0) Peripheral Clock 7 Disable */\r
+#define PMC_PCDR0_PID8 (0x1u << 8) /**< \brief (PMC_PCDR0) Peripheral Clock 8 Disable */\r
+#define PMC_PCDR0_PID9 (0x1u << 9) /**< \brief (PMC_PCDR0) Peripheral Clock 9 Disable */\r
+#define PMC_PCDR0_PID10 (0x1u << 10) /**< \brief (PMC_PCDR0) Peripheral Clock 10 Disable */\r
+#define PMC_PCDR0_PID11 (0x1u << 11) /**< \brief (PMC_PCDR0) Peripheral Clock 11 Disable */\r
+#define PMC_PCDR0_PID12 (0x1u << 12) /**< \brief (PMC_PCDR0) Peripheral Clock 12 Disable */\r
+#define PMC_PCDR0_PID13 (0x1u << 13) /**< \brief (PMC_PCDR0) Peripheral Clock 13 Disable */\r
+#define PMC_PCDR0_PID14 (0x1u << 14) /**< \brief (PMC_PCDR0) Peripheral Clock 14 Disable */\r
+#define PMC_PCDR0_PID15 (0x1u << 15) /**< \brief (PMC_PCDR0) Peripheral Clock 15 Disable */\r
+#define PMC_PCDR0_PID16 (0x1u << 16) /**< \brief (PMC_PCDR0) Peripheral Clock 16 Disable */\r
+#define PMC_PCDR0_PID17 (0x1u << 17) /**< \brief (PMC_PCDR0) Peripheral Clock 17 Disable */\r
+#define PMC_PCDR0_PID18 (0x1u << 18) /**< \brief (PMC_PCDR0) Peripheral Clock 18 Disable */\r
+#define PMC_PCDR0_PID19 (0x1u << 19) /**< \brief (PMC_PCDR0) Peripheral Clock 19 Disable */\r
+#define PMC_PCDR0_PID20 (0x1u << 20) /**< \brief (PMC_PCDR0) Peripheral Clock 20 Disable */\r
+#define PMC_PCDR0_PID21 (0x1u << 21) /**< \brief (PMC_PCDR0) Peripheral Clock 21 Disable */\r
+#define PMC_PCDR0_PID22 (0x1u << 22) /**< \brief (PMC_PCDR0) Peripheral Clock 22 Disable */\r
+#define PMC_PCDR0_PID23 (0x1u << 23) /**< \brief (PMC_PCDR0) Peripheral Clock 23 Disable */\r
+#define PMC_PCDR0_PID24 (0x1u << 24) /**< \brief (PMC_PCDR0) Peripheral Clock 24 Disable */\r
+#define PMC_PCDR0_PID25 (0x1u << 25) /**< \brief (PMC_PCDR0) Peripheral Clock 25 Disable */\r
+#define PMC_PCDR0_PID26 (0x1u << 26) /**< \brief (PMC_PCDR0) Peripheral Clock 26 Disable */\r
+#define PMC_PCDR0_PID27 (0x1u << 27) /**< \brief (PMC_PCDR0) Peripheral Clock 27 Disable */\r
+#define PMC_PCDR0_PID28 (0x1u << 28) /**< \brief (PMC_PCDR0) Peripheral Clock 28 Disable */\r
+#define PMC_PCDR0_PID29 (0x1u << 29) /**< \brief (PMC_PCDR0) Peripheral Clock 29 Disable */\r
+#define PMC_PCDR0_PID30 (0x1u << 30) /**< \brief (PMC_PCDR0) Peripheral Clock 30 Disable */\r
+#define PMC_PCDR0_PID31 (0x1u << 31) /**< \brief (PMC_PCDR0) Peripheral Clock 31 Disable */\r
+/* -------- PMC_PCSR0 : (PMC Offset: 0x0018) Peripheral Clock Status Register 0 -------- */\r
+#define PMC_PCSR0_PID2 (0x1u << 2) /**< \brief (PMC_PCSR0) Peripheral Clock 2 Status */\r
+#define PMC_PCSR0_PID3 (0x1u << 3) /**< \brief (PMC_PCSR0) Peripheral Clock 3 Status */\r
+#define PMC_PCSR0_PID4 (0x1u << 4) /**< \brief (PMC_PCSR0) Peripheral Clock 4 Status */\r
+#define PMC_PCSR0_PID5 (0x1u << 5) /**< \brief (PMC_PCSR0) Peripheral Clock 5 Status */\r
+#define PMC_PCSR0_PID6 (0x1u << 6) /**< \brief (PMC_PCSR0) Peripheral Clock 6 Status */\r
+#define PMC_PCSR0_PID7 (0x1u << 7) /**< \brief (PMC_PCSR0) Peripheral Clock 7 Status */\r
+#define PMC_PCSR0_PID8 (0x1u << 8) /**< \brief (PMC_PCSR0) Peripheral Clock 8 Status */\r
+#define PMC_PCSR0_PID9 (0x1u << 9) /**< \brief (PMC_PCSR0) Peripheral Clock 9 Status */\r
+#define PMC_PCSR0_PID10 (0x1u << 10) /**< \brief (PMC_PCSR0) Peripheral Clock 10 Status */\r
+#define PMC_PCSR0_PID11 (0x1u << 11) /**< \brief (PMC_PCSR0) Peripheral Clock 11 Status */\r
+#define PMC_PCSR0_PID12 (0x1u << 12) /**< \brief (PMC_PCSR0) Peripheral Clock 12 Status */\r
+#define PMC_PCSR0_PID13 (0x1u << 13) /**< \brief (PMC_PCSR0) Peripheral Clock 13 Status */\r
+#define PMC_PCSR0_PID14 (0x1u << 14) /**< \brief (PMC_PCSR0) Peripheral Clock 14 Status */\r
+#define PMC_PCSR0_PID15 (0x1u << 15) /**< \brief (PMC_PCSR0) Peripheral Clock 15 Status */\r
+#define PMC_PCSR0_PID16 (0x1u << 16) /**< \brief (PMC_PCSR0) Peripheral Clock 16 Status */\r
+#define PMC_PCSR0_PID17 (0x1u << 17) /**< \brief (PMC_PCSR0) Peripheral Clock 17 Status */\r
+#define PMC_PCSR0_PID18 (0x1u << 18) /**< \brief (PMC_PCSR0) Peripheral Clock 18 Status */\r
+#define PMC_PCSR0_PID19 (0x1u << 19) /**< \brief (PMC_PCSR0) Peripheral Clock 19 Status */\r
+#define PMC_PCSR0_PID20 (0x1u << 20) /**< \brief (PMC_PCSR0) Peripheral Clock 20 Status */\r
+#define PMC_PCSR0_PID21 (0x1u << 21) /**< \brief (PMC_PCSR0) Peripheral Clock 21 Status */\r
+#define PMC_PCSR0_PID22 (0x1u << 22) /**< \brief (PMC_PCSR0) Peripheral Clock 22 Status */\r
+#define PMC_PCSR0_PID23 (0x1u << 23) /**< \brief (PMC_PCSR0) Peripheral Clock 23 Status */\r
+#define PMC_PCSR0_PID24 (0x1u << 24) /**< \brief (PMC_PCSR0) Peripheral Clock 24 Status */\r
+#define PMC_PCSR0_PID25 (0x1u << 25) /**< \brief (PMC_PCSR0) Peripheral Clock 25 Status */\r
+#define PMC_PCSR0_PID26 (0x1u << 26) /**< \brief (PMC_PCSR0) Peripheral Clock 26 Status */\r
+#define PMC_PCSR0_PID27 (0x1u << 27) /**< \brief (PMC_PCSR0) Peripheral Clock 27 Status */\r
+#define PMC_PCSR0_PID28 (0x1u << 28) /**< \brief (PMC_PCSR0) Peripheral Clock 28 Status */\r
+#define PMC_PCSR0_PID29 (0x1u << 29) /**< \brief (PMC_PCSR0) Peripheral Clock 29 Status */\r
+#define PMC_PCSR0_PID30 (0x1u << 30) /**< \brief (PMC_PCSR0) Peripheral Clock 30 Status */\r
+#define PMC_PCSR0_PID31 (0x1u << 31) /**< \brief (PMC_PCSR0) Peripheral Clock 31 Status */\r
+/* -------- CKGR_UCKR : (PMC Offset: 0x001C) UTMI Clock Register -------- */\r
+#define CKGR_UCKR_UPLLEN (0x1u << 16) /**< \brief (CKGR_UCKR) UTMI PLL Enable */\r
+#define CKGR_UCKR_UPLLCOUNT_Pos 20\r
+#define CKGR_UCKR_UPLLCOUNT_Msk (0xfu << CKGR_UCKR_UPLLCOUNT_Pos) /**< \brief (CKGR_UCKR) UTMI PLL Start-up Time */\r
+#define CKGR_UCKR_UPLLCOUNT(value) ((CKGR_UCKR_UPLLCOUNT_Msk & ((value) << CKGR_UCKR_UPLLCOUNT_Pos)))\r
+#define CKGR_UCKR_BIASEN (0x1u << 24) /**< \brief (CKGR_UCKR) UTMI BIAS Enable */\r
+#define CKGR_UCKR_BIASCOUNT_Pos 28\r
+#define CKGR_UCKR_BIASCOUNT_Msk (0xfu << CKGR_UCKR_BIASCOUNT_Pos) /**< \brief (CKGR_UCKR) UTMI BIAS Start-up Time */\r
+#define CKGR_UCKR_BIASCOUNT(value) ((CKGR_UCKR_BIASCOUNT_Msk & ((value) << CKGR_UCKR_BIASCOUNT_Pos)))\r
+/* -------- CKGR_MOR : (PMC Offset: 0x0020) Main Oscillator Register -------- */\r
+#define CKGR_MOR_MOSCXTEN (0x1u << 0) /**< \brief (CKGR_MOR) Main Crystal Oscillator Enable */\r
+#define CKGR_MOR_MOSCXTBY (0x1u << 1) /**< \brief (CKGR_MOR) Main Crystal Oscillator Bypass */\r
+#define CKGR_MOR_MOSCXTST_Pos 8\r
+#define CKGR_MOR_MOSCXTST_Msk (0xffu << CKGR_MOR_MOSCXTST_Pos) /**< \brief (CKGR_MOR) Main Crystal Oscillator Startup Time */\r
+#define CKGR_MOR_MOSCXTST(value) ((CKGR_MOR_MOSCXTST_Msk & ((value) << CKGR_MOR_MOSCXTST_Pos)))\r
+#define CKGR_MOR_KEY_Pos 16\r
+#define CKGR_MOR_KEY_Msk (0xffu << CKGR_MOR_KEY_Pos) /**< \brief (CKGR_MOR) Password */\r
+#define   CKGR_MOR_KEY_PASSWD (0x37u << 16) /**< \brief (CKGR_MOR) Writing any other value in this field aborts the write operation. */\r
+#define CKGR_MOR_MOSCSEL (0x1u << 24) /**< \brief (CKGR_MOR) Main Oscillator Selection */\r
+#define CKGR_MOR_CFDEN (0x1u << 25) /**< \brief (CKGR_MOR) Clock Failure Detector Enable */\r
+/* -------- CKGR_MCFR : (PMC Offset: 0x0024) Main Clock Frequency Register -------- */\r
+#define CKGR_MCFR_MAINF_Pos 0\r
+#define CKGR_MCFR_MAINF_Msk (0xffffu << CKGR_MCFR_MAINF_Pos) /**< \brief (CKGR_MCFR) Main Clock Frequency */\r
+#define CKGR_MCFR_MAINFRDY (0x1u << 16) /**< \brief (CKGR_MCFR) Main Clock Ready */\r
+/* -------- CKGR_PLLAR : (PMC Offset: 0x0028) PLLA Register -------- */\r
+#define CKGR_PLLAR_PLLACOUNT_Pos 8\r
+#define CKGR_PLLAR_PLLACOUNT_Msk (0x3fu << CKGR_PLLAR_PLLACOUNT_Pos) /**< \brief (CKGR_PLLAR) PLLA Counter */\r
+#define CKGR_PLLAR_PLLACOUNT(value) ((CKGR_PLLAR_PLLACOUNT_Msk & ((value) << CKGR_PLLAR_PLLACOUNT_Pos)))\r
+#define CKGR_PLLAR_OUTA_Pos 14\r
+#define CKGR_PLLAR_OUTA_Msk (0xfu << CKGR_PLLAR_OUTA_Pos) /**< \brief (CKGR_PLLAR) PLLA Clock Frequency Range */\r
+#define CKGR_PLLAR_OUTA(value) ((CKGR_PLLAR_OUTA_Msk & ((value) << CKGR_PLLAR_OUTA_Pos)))\r
+#define CKGR_PLLAR_MULA_Pos 18\r
+#define CKGR_PLLAR_MULA_Msk (0x7fu << CKGR_PLLAR_MULA_Pos) /**< \brief (CKGR_PLLAR) PLLA Multiplier */\r
+#define CKGR_PLLAR_MULA(value) ((CKGR_PLLAR_MULA_Msk & ((value) << CKGR_PLLAR_MULA_Pos)))\r
+#define CKGR_PLLAR_ONE (0x1u << 29) /**< \brief (CKGR_PLLAR) Must Be Set to 1 */\r
+/* -------- PMC_MCKR : (PMC Offset: 0x0030) Master Clock Register -------- */\r
+#define PMC_MCKR_CSS_Pos 0\r
+#define PMC_MCKR_CSS_Msk (0x3u << PMC_MCKR_CSS_Pos) /**< \brief (PMC_MCKR) Master/Processor Clock Source Selection */\r
+#define   PMC_MCKR_CSS_SLOW_CLK (0x0u << 0) /**< \brief (PMC_MCKR) Slow Clock is selected */\r
+#define   PMC_MCKR_CSS_MAIN_CLK (0x1u << 0) /**< \brief (PMC_MCKR) Main Clock is selected */\r
+#define   PMC_MCKR_CSS_PLLA_CLK (0x2u << 0) /**< \brief (PMC_MCKR) PLLACK is selected */\r
+#define   PMC_MCKR_CSS_UPLL_CLK (0x3u << 0) /**< \brief (PMC_MCKR) UPLL Clock is selected */\r
+#define PMC_MCKR_PRES_Pos 4\r
+#define PMC_MCKR_PRES_Msk (0x7u << PMC_MCKR_PRES_Pos) /**< \brief (PMC_MCKR) Master/Processor Clock Prescaler */\r
+#define   PMC_MCKR_PRES_CLOCK (0x0u << 4) /**< \brief (PMC_MCKR) Selected clock */\r
+#define   PMC_MCKR_PRES_CLOCK_DIV2 (0x1u << 4) /**< \brief (PMC_MCKR) Selected clock divided by 2 */\r
+#define   PMC_MCKR_PRES_CLOCK_DIV4 (0x2u << 4) /**< \brief (PMC_MCKR) Selected clock divided by 4 */\r
+#define   PMC_MCKR_PRES_CLOCK_DIV8 (0x3u << 4) /**< \brief (PMC_MCKR) Selected clock divided by 8 */\r
+#define   PMC_MCKR_PRES_CLOCK_DIV16 (0x4u << 4) /**< \brief (PMC_MCKR) Selected clock divided by 16 */\r
+#define   PMC_MCKR_PRES_CLOCK_DIV32 (0x5u << 4) /**< \brief (PMC_MCKR) Selected clock divided by 32 */\r
+#define   PMC_MCKR_PRES_CLOCK_DIV64 (0x6u << 4) /**< \brief (PMC_MCKR) Selected clock divided by 64 */\r
+#define PMC_MCKR_MDIV_Pos 8\r
+#define PMC_MCKR_MDIV_Msk (0x3u << PMC_MCKR_MDIV_Pos) /**< \brief (PMC_MCKR) Master Clock Division */\r
+#define   PMC_MCKR_MDIV_EQ_PCK (0x0u << 8) /**< \brief (PMC_MCKR) Master Clock is Prescaler Output Clock divided by 1.Warning: SysClk DDR and DDRCK are not available. */\r
+#define   PMC_MCKR_MDIV_PCK_DIV2 (0x1u << 8) /**< \brief (PMC_MCKR) Master Clock is Prescaler Output Clock divided by 2.SysClk DDR is equal to 2 x MCK. DDRCK is equal to MCK. */\r
+#define   PMC_MCKR_MDIV_PCK_DIV4 (0x2u << 8) /**< \brief (PMC_MCKR) Master Clock is Prescaler Output Clock divided by 4.SysClk DDR is equal to 2 x MCK. DDRCK is equal to MCK. */\r
+#define   PMC_MCKR_MDIV_PCK_DIV3 (0x3u << 8) /**< \brief (PMC_MCKR) Master Clock is Prescaler Output Clock divided by 3.SysClk DDR is equal to 2 x MCK. DDRCK is equal to MCK. */\r
+#define PMC_MCKR_PLLADIV2 (0x1u << 12) /**< \brief (PMC_MCKR) PLLA Divisor by 2 */\r
+#define PMC_MCKR_H32MXDIV (0x1u << 24) /**< \brief (PMC_MCKR) AHB 32-bit Matrix Divisor */\r
+#define   PMC_MCKR_H32MXDIV_H32MXDIV1 (0x0u << 24) /**< \brief (PMC_MCKR) The AHB 32-bit Matrix frequency is equal to the AHB 64-bit Matrix frequency. It is possible only if the AHB 64-bit Matrix frequency is not exceeding 90 MHz. */\r
+#define   PMC_MCKR_H32MXDIV_H32MXDIV2 (0x1u << 24) /**< \brief (PMC_MCKR) The AHB 32-bit Matrix frequency is equal to the AHB 64-bit Matrix frequency divided by 2. */\r
+/* -------- PMC_USB : (PMC Offset: 0x0038) USB Clock Register -------- */\r
+#define PMC_USB_USBS (0x1u << 0) /**< \brief (PMC_USB) USB OHCI Input clock selection */\r
+#define PMC_USB_USBDIV_Pos 8\r
+#define PMC_USB_USBDIV_Msk (0xfu << PMC_USB_USBDIV_Pos) /**< \brief (PMC_USB) Divider for USB OHCI Clock. */\r
+#define PMC_USB_USBDIV(value) ((PMC_USB_USBDIV_Msk & ((value) << PMC_USB_USBDIV_Pos)))\r
+/* -------- PMC_SMD : (PMC Offset: 0x003C) Soft Modem Clock Register -------- */\r
+#define PMC_SMD_SMDS (0x1u << 0) /**< \brief (PMC_SMD) SMD input clock selection */\r
+#define PMC_SMD_SMDDIV_Pos 8\r
+#define PMC_SMD_SMDDIV_Msk (0x1fu << PMC_SMD_SMDDIV_Pos) /**< \brief (PMC_SMD) Divider for SMD Clock. */\r
+#define PMC_SMD_SMDDIV(value) ((PMC_SMD_SMDDIV_Msk & ((value) << PMC_SMD_SMDDIV_Pos)))\r
+/* -------- PMC_PCK[3] : (PMC Offset: 0x0040) Programmable Clock 0 Register -------- */\r
+#define PMC_PCK_CSS_Pos 0\r
+#define PMC_PCK_CSS_Msk (0x7u << PMC_PCK_CSS_Pos) /**< \brief (PMC_PCK[3]) Master Clock Source Selection */\r
+#define   PMC_PCK_CSS_SLOW_CLK (0x0u << 0) /**< \brief (PMC_PCK[3]) Slow Clock is selected */\r
+#define   PMC_PCK_CSS_MAIN_CLK (0x1u << 0) /**< \brief (PMC_PCK[3]) Main Clock is selected */\r
+#define   PMC_PCK_CSS_PLLA_CLK (0x2u << 0) /**< \brief (PMC_PCK[3]) PLLACK is selected */\r
+#define   PMC_PCK_CSS_UPLL_CLK (0x3u << 0) /**< \brief (PMC_PCK[3]) UPLL Clock is selected */\r
+#define   PMC_PCK_CSS_MCK_CLK (0x4u << 0) /**< \brief (PMC_PCK[3]) Master Clock is selected */\r
+#define PMC_PCK_PRES_Pos 4\r
+#define PMC_PCK_PRES_Msk (0x7u << PMC_PCK_PRES_Pos) /**< \brief (PMC_PCK[3]) Programmable Clock Prescaler */\r
+#define   PMC_PCK_PRES_CLOCK (0x0u << 4) /**< \brief (PMC_PCK[3]) Selected clock */\r
+#define   PMC_PCK_PRES_CLOCK_DIV2 (0x1u << 4) /**< \brief (PMC_PCK[3]) Selected clock divided by 2 */\r
+#define   PMC_PCK_PRES_CLOCK_DIV4 (0x2u << 4) /**< \brief (PMC_PCK[3]) Selected clock divided by 4 */\r
+#define   PMC_PCK_PRES_CLOCK_DIV8 (0x3u << 4) /**< \brief (PMC_PCK[3]) Selected clock divided by 8 */\r
+#define   PMC_PCK_PRES_CLOCK_DIV16 (0x4u << 4) /**< \brief (PMC_PCK[3]) Selected clock divided by 16 */\r
+#define   PMC_PCK_PRES_CLOCK_DIV32 (0x5u << 4) /**< \brief (PMC_PCK[3]) Selected clock divided by 32 */\r
+#define   PMC_PCK_PRES_CLOCK_DIV64 (0x6u << 4) /**< \brief (PMC_PCK[3]) Selected clock divided by 64 */\r
+/* -------- PMC_IER : (PMC Offset: 0x0060) Interrupt Enable Register -------- */\r
+#define PMC_IER_MOSCXTS (0x1u << 0) /**< \brief (PMC_IER) Main Crystal Oscillator Status Interrupt Enable */\r
+#define PMC_IER_LOCKA (0x1u << 1) /**< \brief (PMC_IER) PLLA Lock Interrupt Enable */\r
+#define PMC_IER_MCKRDY (0x1u << 3) /**< \brief (PMC_IER) Master Clock Ready Interrupt Enable */\r
+#define PMC_IER_LOCKU (0x1u << 6) /**< \brief (PMC_IER) UTMI PLL Lock Interrupt Enable */\r
+#define PMC_IER_PCKRDY0 (0x1u << 8) /**< \brief (PMC_IER) Programmable Clock Ready 0 Interrupt Enable */\r
+#define PMC_IER_PCKRDY1 (0x1u << 9) /**< \brief (PMC_IER) Programmable Clock Ready 1 Interrupt Enable */\r
+#define PMC_IER_PCKRDY2 (0x1u << 10) /**< \brief (PMC_IER) Programmable Clock Ready 2 Interrupt Enable */\r
+#define PMC_IER_MOSCSELS (0x1u << 16) /**< \brief (PMC_IER) Main Oscillator Selection Status Interrupt Enable */\r
+#define PMC_IER_MOSCRCS (0x1u << 17) /**< \brief (PMC_IER) Main On-Chip RC Status Interrupt Enable */\r
+#define PMC_IER_CFDEV (0x1u << 18) /**< \brief (PMC_IER) Clock Failure Detector Event Interrupt Enable */\r
+/* -------- PMC_IDR : (PMC Offset: 0x0064) Interrupt Disable Register -------- */\r
+#define PMC_IDR_MOSCXTS (0x1u << 0) /**< \brief (PMC_IDR) Main Crystal Oscillator Status Interrupt Disable */\r
+#define PMC_IDR_LOCKA (0x1u << 1) /**< \brief (PMC_IDR) PLLA Lock Interrupt Disable */\r
+#define PMC_IDR_MCKRDY (0x1u << 3) /**< \brief (PMC_IDR) Master Clock Ready Interrupt Disable */\r
+#define PMC_IDR_LOCKU (0x1u << 6) /**< \brief (PMC_IDR) UTMI PLL Lock Interrupt Enable */\r
+#define PMC_IDR_PCKRDY0 (0x1u << 8) /**< \brief (PMC_IDR) Programmable Clock Ready 0 Interrupt Disable */\r
+#define PMC_IDR_PCKRDY1 (0x1u << 9) /**< \brief (PMC_IDR) Programmable Clock Ready 1 Interrupt Disable */\r
+#define PMC_IDR_PCKRDY2 (0x1u << 10) /**< \brief (PMC_IDR) Programmable Clock Ready 2 Interrupt Disable */\r
+#define PMC_IDR_MOSCSELS (0x1u << 16) /**< \brief (PMC_IDR) Main Oscillator Selection Status Interrupt Disable */\r
+#define PMC_IDR_MOSCRCS (0x1u << 17) /**< \brief (PMC_IDR) Main On-Chip RC Status Interrupt Disable */\r
+#define PMC_IDR_CFDEV (0x1u << 18) /**< \brief (PMC_IDR) Clock Failure Detector Event Interrupt Disable */\r
+/* -------- PMC_SR : (PMC Offset: 0x0068) Status Register -------- */\r
+#define PMC_SR_MOSCXTS (0x1u << 0) /**< \brief (PMC_SR) Main XTAL Oscillator Status */\r
+#define PMC_SR_LOCKA (0x1u << 1) /**< \brief (PMC_SR) PLLA Lock Status */\r
+#define PMC_SR_MCKRDY (0x1u << 3) /**< \brief (PMC_SR) Master Clock Status */\r
+#define PMC_SR_LOCKU (0x1u << 6) /**< \brief (PMC_SR) UPLL Clock Status */\r
+#define PMC_SR_OSCSELS (0x1u << 7) /**< \brief (PMC_SR) Slow Clock Oscillator Selection */\r
+#define PMC_SR_PCKRDY0 (0x1u << 8) /**< \brief (PMC_SR) Programmable Clock Ready Status */\r
+#define PMC_SR_PCKRDY1 (0x1u << 9) /**< \brief (PMC_SR) Programmable Clock Ready Status */\r
+#define PMC_SR_PCKRDY2 (0x1u << 10) /**< \brief (PMC_SR) Programmable Clock Ready Status */\r
+#define PMC_SR_MOSCSELS (0x1u << 16) /**< \brief (PMC_SR) Main Oscillator Selection Status */\r
+#define PMC_SR_MOSCRCS (0x1u << 17) /**< \brief (PMC_SR) Main On-Chip RC Oscillator Status */\r
+#define PMC_SR_CFDEV (0x1u << 18) /**< \brief (PMC_SR) Clock Failure Detector Event */\r
+#define PMC_SR_CFDS (0x1u << 19) /**< \brief (PMC_SR) Clock Failure Detector Status */\r
+#define PMC_SR_FOS (0x1u << 20) /**< \brief (PMC_SR) Clock Failure Detector Fault Output Status */\r
+/* -------- PMC_IMR : (PMC Offset: 0x006C) Interrupt Mask Register -------- */\r
+#define PMC_IMR_MOSCXTS (0x1u << 0) /**< \brief (PMC_IMR) Main Crystal Oscillator Status Interrupt Mask */\r
+#define PMC_IMR_LOCKA (0x1u << 1) /**< \brief (PMC_IMR) PLLA Lock Interrupt Mask */\r
+#define PMC_IMR_MCKRDY (0x1u << 3) /**< \brief (PMC_IMR) Master Clock Ready Interrupt Mask */\r
+#define PMC_IMR_PCKRDY0 (0x1u << 8) /**< \brief (PMC_IMR) Programmable Clock Ready 0 Interrupt Mask */\r
+#define PMC_IMR_PCKRDY1 (0x1u << 9) /**< \brief (PMC_IMR) Programmable Clock Ready 1 Interrupt Mask */\r
+#define PMC_IMR_PCKRDY2 (0x1u << 10) /**< \brief (PMC_IMR) Programmable Clock Ready 2 Interrupt Mask */\r
+#define PMC_IMR_MOSCSELS (0x1u << 16) /**< \brief (PMC_IMR) Main Oscillator Selection Status Interrupt Mask */\r
+#define PMC_IMR_MOSCRCS (0x1u << 17) /**< \brief (PMC_IMR) Main On-Chip RC Status Interrupt Mask */\r
+#define PMC_IMR_CFDEV (0x1u << 18) /**< \brief (PMC_IMR) Clock Failure Detector Event Interrupt Mask */\r
+/* -------- PMC_FOCR : (PMC Offset: 0x0078) Fault Output Clear Register -------- */\r
+#define PMC_FOCR_FOCLR (0x1u << 0) /**< \brief (PMC_FOCR) Fault Output Clear */\r
+/* -------- PMC_PLLICPR : (PMC Offset: 0x0080) PLL Charge Pump Current Register -------- */\r
+#define PMC_PLLICPR_ICP_PLLA_Pos 0\r
+#define PMC_PLLICPR_ICP_PLLA_Msk (0x3u << PMC_PLLICPR_ICP_PLLA_Pos) /**< \brief (PMC_PLLICPR) Charge Pump Current PLLA */\r
+#define PMC_PLLICPR_ICP_PLLA(value) ((PMC_PLLICPR_ICP_PLLA_Msk & ((value) << PMC_PLLICPR_ICP_PLLA_Pos)))\r
+#define PMC_PLLICPR_IPLL_PLLA_Pos 8\r
+#define PMC_PLLICPR_IPLL_PLLA_Msk (0x7u << PMC_PLLICPR_IPLL_PLLA_Pos) /**< \brief (PMC_PLLICPR) Engineering Configuration PLLA */\r
+#define PMC_PLLICPR_IPLL_PLLA(value) ((PMC_PLLICPR_IPLL_PLLA_Msk & ((value) << PMC_PLLICPR_IPLL_PLLA_Pos)))\r
+#define PMC_PLLICPR_ICP_PLLU_Pos 16\r
+#define PMC_PLLICPR_ICP_PLLU_Msk (0x3u << PMC_PLLICPR_ICP_PLLU_Pos) /**< \brief (PMC_PLLICPR) Charge Pump Current PLL UTMI */\r
+#define PMC_PLLICPR_ICP_PLLU(value) ((PMC_PLLICPR_ICP_PLLU_Msk & ((value) << PMC_PLLICPR_ICP_PLLU_Pos)))\r
+#define PMC_PLLICPR_IVCO_PLLU_Pos 24\r
+#define PMC_PLLICPR_IVCO_PLLU_Msk (0x3u << PMC_PLLICPR_IVCO_PLLU_Pos) /**< \brief (PMC_PLLICPR) Voltage Control Output Current PLL UTMI */\r
+#define PMC_PLLICPR_IVCO_PLLU(value) ((PMC_PLLICPR_IVCO_PLLU_Msk & ((value) << PMC_PLLICPR_IVCO_PLLU_Pos)))\r
+/* -------- PMC_WPMR : (PMC Offset: 0x00E4) Write Protect Mode Register -------- */\r
+#define PMC_WPMR_WPEN (0x1u << 0) /**< \brief (PMC_WPMR) Write Protect Enable */\r
+#define PMC_WPMR_WPKEY_Pos 8\r
+#define PMC_WPMR_WPKEY_Msk (0xffffffu << PMC_WPMR_WPKEY_Pos) /**< \brief (PMC_WPMR) Write Protect KEY */\r
+#define   PMC_WPMR_WPKEY_PASSWD (0x504D43u << 8) /**< \brief (PMC_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit.Always reads as 0. */\r
+/* -------- PMC_WPSR : (PMC Offset: 0x00E8) Write Protect Status Register -------- */\r
+#define PMC_WPSR_WPVS (0x1u << 0) /**< \brief (PMC_WPSR) Write Protect Violation Status */\r
+#define PMC_WPSR_WPVSRC_Pos 8\r
+#define PMC_WPSR_WPVSRC_Msk (0xffffu << PMC_WPSR_WPVSRC_Pos) /**< \brief (PMC_WPSR) Write Protect Violation Source */\r
+/* -------- PMC_PCER1 : (PMC Offset: 0x0100) Peripheral Clock Enable Register 1 -------- */\r
+#define PMC_PCER1_PID32 (0x1u << 0) /**< \brief (PMC_PCER1) Peripheral Clock 32 Enable */\r
+#define PMC_PCER1_PID33 (0x1u << 1) /**< \brief (PMC_PCER1) Peripheral Clock 33 Enable */\r
+#define PMC_PCER1_PID34 (0x1u << 2) /**< \brief (PMC_PCER1) Peripheral Clock 34 Enable */\r
+#define PMC_PCER1_PID35 (0x1u << 3) /**< \brief (PMC_PCER1) Peripheral Clock 35 Enable */\r
+#define PMC_PCER1_PID36 (0x1u << 4) /**< \brief (PMC_PCER1) Peripheral Clock 36 Enable */\r
+#define PMC_PCER1_PID37 (0x1u << 5) /**< \brief (PMC_PCER1) Peripheral Clock 37 Enable */\r
+#define PMC_PCER1_PID38 (0x1u << 6) /**< \brief (PMC_PCER1) Peripheral Clock 38 Enable */\r
+#define PMC_PCER1_PID39 (0x1u << 7) /**< \brief (PMC_PCER1) Peripheral Clock 39 Enable */\r
+#define PMC_PCER1_PID40 (0x1u << 8) /**< \brief (PMC_PCER1) Peripheral Clock 40 Enable */\r
+#define PMC_PCER1_PID41 (0x1u << 9) /**< \brief (PMC_PCER1) Peripheral Clock 41 Enable */\r
+#define PMC_PCER1_PID42 (0x1u << 10) /**< \brief (PMC_PCER1) Peripheral Clock 42 Enable */\r
+#define PMC_PCER1_PID43 (0x1u << 11) /**< \brief (PMC_PCER1) Peripheral Clock 43 Enable */\r
+#define PMC_PCER1_PID44 (0x1u << 12) /**< \brief (PMC_PCER1) Peripheral Clock 44 Enable */\r
+#define PMC_PCER1_PID45 (0x1u << 13) /**< \brief (PMC_PCER1) Peripheral Clock 45 Enable */\r
+#define PMC_PCER1_PID46 (0x1u << 14) /**< \brief (PMC_PCER1) Peripheral Clock 46 Enable */\r
+#define PMC_PCER1_PID47 (0x1u << 15) /**< \brief (PMC_PCER1) Peripheral Clock 47 Enable */\r
+#define PMC_PCER1_PID48 (0x1u << 16) /**< \brief (PMC_PCER1) Peripheral Clock 48 Enable */\r
+#define PMC_PCER1_PID49 (0x1u << 17) /**< \brief (PMC_PCER1) Peripheral Clock 49 Enable */\r
+#define PMC_PCER1_PID50 (0x1u << 18) /**< \brief (PMC_PCER1) Peripheral Clock 50 Enable */\r
+#define PMC_PCER1_PID51 (0x1u << 19) /**< \brief (PMC_PCER1) Peripheral Clock 51 Enable */\r
+#define PMC_PCER1_PID52 (0x1u << 20) /**< \brief (PMC_PCER1) Peripheral Clock 52 Enable */\r
+#define PMC_PCER1_PID53 (0x1u << 21) /**< \brief (PMC_PCER1) Peripheral Clock 53 Enable */\r
+#define PMC_PCER1_PID54 (0x1u << 22) /**< \brief (PMC_PCER1) Peripheral Clock 54 Enable */\r
+#define PMC_PCER1_PID55 (0x1u << 23) /**< \brief (PMC_PCER1) Peripheral Clock 55 Enable */\r
+#define PMC_PCER1_PID56 (0x1u << 24) /**< \brief (PMC_PCER1) Peripheral Clock 56 Enable */\r
+#define PMC_PCER1_PID57 (0x1u << 25) /**< \brief (PMC_PCER1) Peripheral Clock 57 Enable */\r
+#define PMC_PCER1_PID58 (0x1u << 26) /**< \brief (PMC_PCER1) Peripheral Clock 58 Enable */\r
+#define PMC_PCER1_PID59 (0x1u << 27) /**< \brief (PMC_PCER1) Peripheral Clock 59 Enable */\r
+#define PMC_PCER1_PID60 (0x1u << 28) /**< \brief (PMC_PCER1) Peripheral Clock 60 Enable */\r
+#define PMC_PCER1_PID61 (0x1u << 29) /**< \brief (PMC_PCER1) Peripheral Clock 61 Enable */\r
+#define PMC_PCER1_PID62 (0x1u << 30) /**< \brief (PMC_PCER1) Peripheral Clock 62 Enable */\r
+#define PMC_PCER1_PID63 (0x1u << 31) /**< \brief (PMC_PCER1) Peripheral Clock 63 Enable */\r
+/* -------- PMC_PCDR1 : (PMC Offset: 0x0104) Peripheral Clock Disable Register 1 -------- */\r
+#define PMC_PCDR1_PID32 (0x1u << 0) /**< \brief (PMC_PCDR1) Peripheral Clock 32 Disable */\r
+#define PMC_PCDR1_PID33 (0x1u << 1) /**< \brief (PMC_PCDR1) Peripheral Clock 33 Disable */\r
+#define PMC_PCDR1_PID34 (0x1u << 2) /**< \brief (PMC_PCDR1) Peripheral Clock 34 Disable */\r
+#define PMC_PCDR1_PID35 (0x1u << 3) /**< \brief (PMC_PCDR1) Peripheral Clock 35 Disable */\r
+#define PMC_PCDR1_PID36 (0x1u << 4) /**< \brief (PMC_PCDR1) Peripheral Clock 36 Disable */\r
+#define PMC_PCDR1_PID37 (0x1u << 5) /**< \brief (PMC_PCDR1) Peripheral Clock 37 Disable */\r
+#define PMC_PCDR1_PID38 (0x1u << 6) /**< \brief (PMC_PCDR1) Peripheral Clock 38 Disable */\r
+#define PMC_PCDR1_PID39 (0x1u << 7) /**< \brief (PMC_PCDR1) Peripheral Clock 39 Disable */\r
+#define PMC_PCDR1_PID40 (0x1u << 8) /**< \brief (PMC_PCDR1) Peripheral Clock 40 Disable */\r
+#define PMC_PCDR1_PID41 (0x1u << 9) /**< \brief (PMC_PCDR1) Peripheral Clock 41 Disable */\r
+#define PMC_PCDR1_PID42 (0x1u << 10) /**< \brief (PMC_PCDR1) Peripheral Clock 42 Disable */\r
+#define PMC_PCDR1_PID43 (0x1u << 11) /**< \brief (PMC_PCDR1) Peripheral Clock 43 Disable */\r
+#define PMC_PCDR1_PID44 (0x1u << 12) /**< \brief (PMC_PCDR1) Peripheral Clock 44 Disable */\r
+#define PMC_PCDR1_PID45 (0x1u << 13) /**< \brief (PMC_PCDR1) Peripheral Clock 45 Disable */\r
+#define PMC_PCDR1_PID46 (0x1u << 14) /**< \brief (PMC_PCDR1) Peripheral Clock 46 Disable */\r
+#define PMC_PCDR1_PID47 (0x1u << 15) /**< \brief (PMC_PCDR1) Peripheral Clock 47 Disable */\r
+#define PMC_PCDR1_PID48 (0x1u << 16) /**< \brief (PMC_PCDR1) Peripheral Clock 48 Disable */\r
+#define PMC_PCDR1_PID49 (0x1u << 17) /**< \brief (PMC_PCDR1) Peripheral Clock 49 Disable */\r
+#define PMC_PCDR1_PID50 (0x1u << 18) /**< \brief (PMC_PCDR1) Peripheral Clock 50 Disable */\r
+#define PMC_PCDR1_PID51 (0x1u << 19) /**< \brief (PMC_PCDR1) Peripheral Clock 51 Disable */\r
+#define PMC_PCDR1_PID52 (0x1u << 20) /**< \brief (PMC_PCDR1) Peripheral Clock 52 Disable */\r
+#define PMC_PCDR1_PID53 (0x1u << 21) /**< \brief (PMC_PCDR1) Peripheral Clock 53 Disable */\r
+#define PMC_PCDR1_PID54 (0x1u << 22) /**< \brief (PMC_PCDR1) Peripheral Clock 54 Disable */\r
+#define PMC_PCDR1_PID55 (0x1u << 23) /**< \brief (PMC_PCDR1) Peripheral Clock 55 Disable */\r
+#define PMC_PCDR1_PID56 (0x1u << 24) /**< \brief (PMC_PCDR1) Peripheral Clock 56 Disable */\r
+#define PMC_PCDR1_PID57 (0x1u << 25) /**< \brief (PMC_PCDR1) Peripheral Clock 57 Disable */\r
+#define PMC_PCDR1_PID58 (0x1u << 26) /**< \brief (PMC_PCDR1) Peripheral Clock 58 Disable */\r
+#define PMC_PCDR1_PID59 (0x1u << 27) /**< \brief (PMC_PCDR1) Peripheral Clock 59 Disable */\r
+#define PMC_PCDR1_PID60 (0x1u << 28) /**< \brief (PMC_PCDR1) Peripheral Clock 60 Disable */\r
+#define PMC_PCDR1_PID61 (0x1u << 29) /**< \brief (PMC_PCDR1) Peripheral Clock 61 Disable */\r
+#define PMC_PCDR1_PID62 (0x1u << 30) /**< \brief (PMC_PCDR1) Peripheral Clock 62 Disable */\r
+#define PMC_PCDR1_PID63 (0x1u << 31) /**< \brief (PMC_PCDR1) Peripheral Clock 63 Disable */\r
+/* -------- PMC_PCSR1 : (PMC Offset: 0x0108) Peripheral Clock Status Register 1 -------- */\r
+#define PMC_PCSR1_PID32 (0x1u << 0) /**< \brief (PMC_PCSR1) Peripheral Clock 32 Status */\r
+#define PMC_PCSR1_PID33 (0x1u << 1) /**< \brief (PMC_PCSR1) Peripheral Clock 33 Status */\r
+#define PMC_PCSR1_PID34 (0x1u << 2) /**< \brief (PMC_PCSR1) Peripheral Clock 34 Status */\r
+#define PMC_PCSR1_PID35 (0x1u << 3) /**< \brief (PMC_PCSR1) Peripheral Clock 35 Status */\r
+#define PMC_PCSR1_PID36 (0x1u << 4) /**< \brief (PMC_PCSR1) Peripheral Clock 36 Status */\r
+#define PMC_PCSR1_PID37 (0x1u << 5) /**< \brief (PMC_PCSR1) Peripheral Clock 37 Status */\r
+#define PMC_PCSR1_PID38 (0x1u << 6) /**< \brief (PMC_PCSR1) Peripheral Clock 38 Status */\r
+#define PMC_PCSR1_PID39 (0x1u << 7) /**< \brief (PMC_PCSR1) Peripheral Clock 39 Status */\r
+#define PMC_PCSR1_PID40 (0x1u << 8) /**< \brief (PMC_PCSR1) Peripheral Clock 40 Status */\r
+#define PMC_PCSR1_PID41 (0x1u << 9) /**< \brief (PMC_PCSR1) Peripheral Clock 41 Status */\r
+#define PMC_PCSR1_PID42 (0x1u << 10) /**< \brief (PMC_PCSR1) Peripheral Clock 42 Status */\r
+#define PMC_PCSR1_PID43 (0x1u << 11) /**< \brief (PMC_PCSR1) Peripheral Clock 43 Status */\r
+#define PMC_PCSR1_PID44 (0x1u << 12) /**< \brief (PMC_PCSR1) Peripheral Clock 44 Status */\r
+#define PMC_PCSR1_PID45 (0x1u << 13) /**< \brief (PMC_PCSR1) Peripheral Clock 45 Status */\r
+#define PMC_PCSR1_PID46 (0x1u << 14) /**< \brief (PMC_PCSR1) Peripheral Clock 46 Status */\r
+#define PMC_PCSR1_PID47 (0x1u << 15) /**< \brief (PMC_PCSR1) Peripheral Clock 47 Status */\r
+#define PMC_PCSR1_PID48 (0x1u << 16) /**< \brief (PMC_PCSR1) Peripheral Clock 48 Status */\r
+#define PMC_PCSR1_PID49 (0x1u << 17) /**< \brief (PMC_PCSR1) Peripheral Clock 49 Status */\r
+#define PMC_PCSR1_PID50 (0x1u << 18) /**< \brief (PMC_PCSR1) Peripheral Clock 50 Status */\r
+#define PMC_PCSR1_PID51 (0x1u << 19) /**< \brief (PMC_PCSR1) Peripheral Clock 51 Status */\r
+#define PMC_PCSR1_PID52 (0x1u << 20) /**< \brief (PMC_PCSR1) Peripheral Clock 52 Status */\r
+#define PMC_PCSR1_PID53 (0x1u << 21) /**< \brief (PMC_PCSR1) Peripheral Clock 53 Status */\r
+#define PMC_PCSR1_PID54 (0x1u << 22) /**< \brief (PMC_PCSR1) Peripheral Clock 54 Status */\r
+#define PMC_PCSR1_PID55 (0x1u << 23) /**< \brief (PMC_PCSR1) Peripheral Clock 55 Status */\r
+#define PMC_PCSR1_PID56 (0x1u << 24) /**< \brief (PMC_PCSR1) Peripheral Clock 56 Status */\r
+#define PMC_PCSR1_PID57 (0x1u << 25) /**< \brief (PMC_PCSR1) Peripheral Clock 57 Status */\r
+#define PMC_PCSR1_PID58 (0x1u << 26) /**< \brief (PMC_PCSR1) Peripheral Clock 58 Status */\r
+#define PMC_PCSR1_PID59 (0x1u << 27) /**< \brief (PMC_PCSR1) Peripheral Clock 59 Status */\r
+#define PMC_PCSR1_PID60 (0x1u << 28) /**< \brief (PMC_PCSR1) Peripheral Clock 60 Status */\r
+#define PMC_PCSR1_PID61 (0x1u << 29) /**< \brief (PMC_PCSR1) Peripheral Clock 61 Status */\r
+#define PMC_PCSR1_PID62 (0x1u << 30) /**< \brief (PMC_PCSR1) Peripheral Clock 62 Status */\r
+#define PMC_PCSR1_PID63 (0x1u << 31) /**< \brief (PMC_PCSR1) Peripheral Clock 63 Status */\r
+/* -------- PMC_PCR : (PMC Offset: 0x010C) Peripheral Control Register -------- */\r
+#define PMC_PCR_PID_Pos 0\r
+#define PMC_PCR_PID_Msk (0x3fu << PMC_PCR_PID_Pos) /**< \brief (PMC_PCR) Peripheral ID */\r
+#define PMC_PCR_PID(value) ((PMC_PCR_PID_Msk & ((value) << PMC_PCR_PID_Pos)))\r
+#define PMC_PCR_CMD (0x1u << 12) /**< \brief (PMC_PCR) Command */\r
+#define PMC_PCR_DIV_Pos 16\r
+#define PMC_PCR_DIV_Msk (0x3u << PMC_PCR_DIV_Pos) /**< \brief (PMC_PCR) Divisor value */\r
+#define   PMC_PCR_DIV_PERIPH_DIV_MCK (0x0u << 16) /**< \brief (PMC_PCR) Peripheral clock is MCK */\r
+#define   PMC_PCR_DIV_PERIPH_DIV2_MCK (0x1u << 16) /**< \brief (PMC_PCR) Peripheral clock is MCK/2 */\r
+#define   PMC_PCR_DIV_PERIPH_DIV4_MCK (0x2u << 16) /**< \brief (PMC_PCR) Peripheral clock is MCK/4 */\r
+#define   PMC_PCR_DIV_PERIPH_DIV8_MCK (0x3u << 16) /**< \brief (PMC_PCR) Peripheral clock is MCK/8 */\r
+#define PMC_PCR_EN (0x1u << 28) /**< \brief (PMC_PCR) Enable */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_PWM Pulse Width Modulation Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief PwmCh_num hardware registers */\r
+typedef struct {\r
+  __IO uint32_t PWM_CMR;     /**< \brief (PwmCh_num Offset: 0x0) PWM Channel Mode Register */\r
+  __IO uint32_t PWM_CDTY;    /**< \brief (PwmCh_num Offset: 0x4) PWM Channel Duty Cycle Register */\r
+  __O  uint32_t PWM_CDTYUPD; /**< \brief (PwmCh_num Offset: 0x8) PWM Channel Duty Cycle Update Register */\r
+  __IO uint32_t PWM_CPRD;    /**< \brief (PwmCh_num Offset: 0xC) PWM Channel Period Register */\r
+  __O  uint32_t PWM_CPRDUPD; /**< \brief (PwmCh_num Offset: 0x10) PWM Channel Period Update Register */\r
+  __I  uint32_t PWM_CCNT;    /**< \brief (PwmCh_num Offset: 0x14) PWM Channel Counter Register */\r
+  __IO uint32_t PWM_DT;      /**< \brief (PwmCh_num Offset: 0x18) PWM Channel Dead Time Register */\r
+  __O  uint32_t PWM_DTUPD;   /**< \brief (PwmCh_num Offset: 0x1C) PWM Channel Dead Time Update Register */\r
+} PwmCh_num;\r
+/** \brief PwmCmp hardware registers */\r
+typedef struct {\r
+  __IO uint32_t PWM_CMPV;    /**< \brief (PwmCmp Offset: 0x0) PWM Comparison 0 Value Register */\r
+  __O  uint32_t PWM_CMPVUPD; /**< \brief (PwmCmp Offset: 0x4) PWM Comparison 0 Value Update Register */\r
+  __IO uint32_t PWM_CMPM;    /**< \brief (PwmCmp Offset: 0x8) PWM Comparison 0 Mode Register */\r
+  __O  uint32_t PWM_CMPMUPD; /**< \brief (PwmCmp Offset: 0xC) PWM Comparison 0 Mode Update Register */\r
+} PwmCmp;\r
+/** \brief Pwm hardware registers */\r
+#define PWMCMP_NUMBER 8\r
+#define PWMCH_NUM_NUMBER 4\r
+typedef struct {\r
+  __IO uint32_t  PWM_CLK;                      /**< \brief (Pwm Offset: 0x00) PWM Clock Register */\r
+  __O  uint32_t  PWM_ENA;                      /**< \brief (Pwm Offset: 0x04) PWM Enable Register */\r
+  __O  uint32_t  PWM_DIS;                      /**< \brief (Pwm Offset: 0x08) PWM Disable Register */\r
+  __I  uint32_t  PWM_SR;                       /**< \brief (Pwm Offset: 0x0C) PWM Status Register */\r
+  __O  uint32_t  PWM_IER1;                     /**< \brief (Pwm Offset: 0x10) PWM Interrupt Enable Register 1 */\r
+  __O  uint32_t  PWM_IDR1;                     /**< \brief (Pwm Offset: 0x14) PWM Interrupt Disable Register 1 */\r
+  __I  uint32_t  PWM_IMR1;                     /**< \brief (Pwm Offset: 0x18) PWM Interrupt Mask Register 1 */\r
+  __I  uint32_t  PWM_ISR1;                     /**< \brief (Pwm Offset: 0x1C) PWM Interrupt Status Register 1 */\r
+  __IO uint32_t  PWM_SCM;                      /**< \brief (Pwm Offset: 0x20) PWM Sync Channels Mode Register */\r
+  __I  uint32_t  Reserved1[1];\r
+  __IO uint32_t  PWM_SCUC;                     /**< \brief (Pwm Offset: 0x28) PWM Sync Channels Update Control Register */\r
+  __IO uint32_t  PWM_SCUP;                     /**< \brief (Pwm Offset: 0x2C) PWM Sync Channels Update Period Register */\r
+  __O  uint32_t  PWM_SCUPUPD;                  /**< \brief (Pwm Offset: 0x30) PWM Sync Channels Update Period Update Register */\r
+  __O  uint32_t  PWM_IER2;                     /**< \brief (Pwm Offset: 0x34) PWM Interrupt Enable Register 2 */\r
+  __O  uint32_t  PWM_IDR2;                     /**< \brief (Pwm Offset: 0x38) PWM Interrupt Disable Register 2 */\r
+  __I  uint32_t  PWM_IMR2;                     /**< \brief (Pwm Offset: 0x3C) PWM Interrupt Mask Register 2 */\r
+  __I  uint32_t  PWM_ISR2;                     /**< \brief (Pwm Offset: 0x40) PWM Interrupt Status Register 2 */\r
+  __IO uint32_t  PWM_OOV;                      /**< \brief (Pwm Offset: 0x44) PWM Output Override Value Register */\r
+  __IO uint32_t  PWM_OS;                       /**< \brief (Pwm Offset: 0x48) PWM Output Selection Register */\r
+  __O  uint32_t  PWM_OSS;                      /**< \brief (Pwm Offset: 0x4C) PWM Output Selection Set Register */\r
+  __O  uint32_t  PWM_OSC;                      /**< \brief (Pwm Offset: 0x50) PWM Output Selection Clear Register */\r
+  __O  uint32_t  PWM_OSSUPD;                   /**< \brief (Pwm Offset: 0x54) PWM Output Selection Set Update Register */\r
+  __O  uint32_t  PWM_OSCUPD;                   /**< \brief (Pwm Offset: 0x58) PWM Output Selection Clear Update Register */\r
+  __IO uint32_t  PWM_FMR;                      /**< \brief (Pwm Offset: 0x5C) PWM Fault Mode Register */\r
+  __I  uint32_t  PWM_FSR;                      /**< \brief (Pwm Offset: 0x60) PWM Fault Status Register */\r
+  __O  uint32_t  PWM_FCR;                      /**< \brief (Pwm Offset: 0x64) PWM Fault Clear Register */\r
+  __IO uint32_t  PWM_FPV1;                     /**< \brief (Pwm Offset: 0x68) PWM Fault Protection Value Register 1 */\r
+  __IO uint32_t  PWM_FPE;                      /**< \brief (Pwm Offset: 0x6C) PWM Fault Protection Enable Register */\r
+  __I  uint32_t  Reserved2[3];\r
+  __IO uint32_t  PWM_ELMR[2];                  /**< \brief (Pwm Offset: 0x7C) PWM Event Line 0 Mode Register */\r
+  __I  uint32_t  Reserved3[7];\r
+  __IO uint32_t  PWM_SSPR;                     /**< \brief (Pwm Offset: 0xA0) PWM Spread Spectrum Register */\r
+  __O  uint32_t  PWM_SSPUP;                    /**< \brief (Pwm Offset: 0xA4) PWM Spread Spectrum Update Register */\r
+  __I  uint32_t  Reserved4[2];\r
+  __IO uint32_t  PWM_SMMR;                     /**< \brief (Pwm Offset: 0xB0) PWM Stepper Motor Mode Register */\r
+  __I  uint32_t  Reserved5[3];\r
+  __IO uint32_t  PWM_FPV2;                     /**< \brief (Pwm Offset: 0xC0) PWM Fault Protection Value 2 Register */\r
+  __I  uint32_t  Reserved6[8];\r
+  __O  uint32_t  PWM_WPCR;                     /**< \brief (Pwm Offset: 0xE4) PWM Write Protect Control Register */\r
+  __I  uint32_t  PWM_WPSR;                     /**< \brief (Pwm Offset: 0xE8) PWM Write Protect Status Register */\r
+  __I  uint32_t  Reserved7[17];\r
+       PwmCmp    PWM_CMP[PWMCMP_NUMBER];       /**< \brief (Pwm Offset: 0x130) 0 .. 7 */\r
+  __I  uint32_t  Reserved8[20];\r
+       PwmCh_num PWM_CH_NUM[PWMCH_NUM_NUMBER]; /**< \brief (Pwm Offset: 0x200) ch_num = 0 .. 3 */\r
+  __I  uint32_t  Reserved9[96];\r
+  __O  uint32_t  PWM_CMUPD0;                   /**< \brief (Pwm Offset: 0x400) PWM Channel Mode Update Register (ch_num = 0) */\r
+  __I  uint32_t  Reserved10[7];\r
+  __O  uint32_t  PWM_CMUPD1;                   /**< \brief (Pwm Offset: 0x420) PWM Channel Mode Update Register (ch_num = 1) */\r
+  __I  uint32_t  Reserved11[7];\r
+  __O  uint32_t  PWM_CMUPD2;                   /**< \brief (Pwm Offset: 0x440) PWM Channel Mode Update Register (ch_num = 2) */\r
+  __I  uint32_t  Reserved12[7];\r
+  __O  uint32_t  PWM_CMUPD3;                   /**< \brief (Pwm Offset: 0x460) PWM Channel Mode Update Register (ch_num = 3) */\r
+} Pwm;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- PWM_CLK : (PWM Offset: 0x00) PWM Clock Register -------- */\r
+#define PWM_CLK_DIVA_Pos 0\r
+#define PWM_CLK_DIVA_Msk (0xffu << PWM_CLK_DIVA_Pos) /**< \brief (PWM_CLK) CLKA, CLKB Divide Factor */\r
+#define PWM_CLK_DIVA(value) ((PWM_CLK_DIVA_Msk & ((value) << PWM_CLK_DIVA_Pos)))\r
+#define PWM_CLK_PREA_Pos 8\r
+#define PWM_CLK_PREA_Msk (0xfu << PWM_CLK_PREA_Pos) /**< \brief (PWM_CLK) CLKA, CLKB Source Clock Selection */\r
+#define PWM_CLK_PREA(value) ((PWM_CLK_PREA_Msk & ((value) << PWM_CLK_PREA_Pos)))\r
+#define PWM_CLK_DIVB_Pos 16\r
+#define PWM_CLK_DIVB_Msk (0xffu << PWM_CLK_DIVB_Pos) /**< \brief (PWM_CLK) CLKA, CLKB Divide Factor */\r
+#define PWM_CLK_DIVB(value) ((PWM_CLK_DIVB_Msk & ((value) << PWM_CLK_DIVB_Pos)))\r
+#define PWM_CLK_PREB_Pos 24\r
+#define PWM_CLK_PREB_Msk (0xfu << PWM_CLK_PREB_Pos) /**< \brief (PWM_CLK) CLKA, CLKB Source Clock Selection */\r
+#define PWM_CLK_PREB(value) ((PWM_CLK_PREB_Msk & ((value) << PWM_CLK_PREB_Pos)))\r
+/* -------- PWM_ENA : (PWM Offset: 0x04) PWM Enable Register -------- */\r
+#define PWM_ENA_CHID0 (0x1u << 0) /**< \brief (PWM_ENA) Channel ID */\r
+#define PWM_ENA_CHID1 (0x1u << 1) /**< \brief (PWM_ENA) Channel ID */\r
+#define PWM_ENA_CHID2 (0x1u << 2) /**< \brief (PWM_ENA) Channel ID */\r
+#define PWM_ENA_CHID3 (0x1u << 3) /**< \brief (PWM_ENA) Channel ID */\r
+/* -------- PWM_DIS : (PWM Offset: 0x08) PWM Disable Register -------- */\r
+#define PWM_DIS_CHID0 (0x1u << 0) /**< \brief (PWM_DIS) Channel ID */\r
+#define PWM_DIS_CHID1 (0x1u << 1) /**< \brief (PWM_DIS) Channel ID */\r
+#define PWM_DIS_CHID2 (0x1u << 2) /**< \brief (PWM_DIS) Channel ID */\r
+#define PWM_DIS_CHID3 (0x1u << 3) /**< \brief (PWM_DIS) Channel ID */\r
+/* -------- PWM_SR : (PWM Offset: 0x0C) PWM Status Register -------- */\r
+#define PWM_SR_CHID0 (0x1u << 0) /**< \brief (PWM_SR) Channel ID */\r
+#define PWM_SR_CHID1 (0x1u << 1) /**< \brief (PWM_SR) Channel ID */\r
+#define PWM_SR_CHID2 (0x1u << 2) /**< \brief (PWM_SR) Channel ID */\r
+#define PWM_SR_CHID3 (0x1u << 3) /**< \brief (PWM_SR) Channel ID */\r
+/* -------- PWM_IER1 : (PWM Offset: 0x10) PWM Interrupt Enable Register 1 -------- */\r
+#define PWM_IER1_CHID0 (0x1u << 0) /**< \brief (PWM_IER1) Counter Event on Channel 0 Interrupt Enable */\r
+#define PWM_IER1_CHID1 (0x1u << 1) /**< \brief (PWM_IER1) Counter Event on Channel 1 Interrupt Enable */\r
+#define PWM_IER1_CHID2 (0x1u << 2) /**< \brief (PWM_IER1) Counter Event on Channel 2 Interrupt Enable */\r
+#define PWM_IER1_CHID3 (0x1u << 3) /**< \brief (PWM_IER1) Counter Event on Channel 3 Interrupt Enable */\r
+#define PWM_IER1_FCHID0 (0x1u << 16) /**< \brief (PWM_IER1) Fault Protection Trigger on Channel 0 Interrupt Enable */\r
+#define PWM_IER1_FCHID1 (0x1u << 17) /**< \brief (PWM_IER1) Fault Protection Trigger on Channel 1 Interrupt Enable */\r
+#define PWM_IER1_FCHID2 (0x1u << 18) /**< \brief (PWM_IER1) Fault Protection Trigger on Channel 2 Interrupt Enable */\r
+#define PWM_IER1_FCHID3 (0x1u << 19) /**< \brief (PWM_IER1) Fault Protection Trigger on Channel 3 Interrupt Enable */\r
+/* -------- PWM_IDR1 : (PWM Offset: 0x14) PWM Interrupt Disable Register 1 -------- */\r
+#define PWM_IDR1_CHID0 (0x1u << 0) /**< \brief (PWM_IDR1) Counter Event on Channel 0 Interrupt Disable */\r
+#define PWM_IDR1_CHID1 (0x1u << 1) /**< \brief (PWM_IDR1) Counter Event on Channel 1 Interrupt Disable */\r
+#define PWM_IDR1_CHID2 (0x1u << 2) /**< \brief (PWM_IDR1) Counter Event on Channel 2 Interrupt Disable */\r
+#define PWM_IDR1_CHID3 (0x1u << 3) /**< \brief (PWM_IDR1) Counter Event on Channel 3 Interrupt Disable */\r
+#define PWM_IDR1_FCHID0 (0x1u << 16) /**< \brief (PWM_IDR1) Fault Protection Trigger on Channel 0 Interrupt Disable */\r
+#define PWM_IDR1_FCHID1 (0x1u << 17) /**< \brief (PWM_IDR1) Fault Protection Trigger on Channel 1 Interrupt Disable */\r
+#define PWM_IDR1_FCHID2 (0x1u << 18) /**< \brief (PWM_IDR1) Fault Protection Trigger on Channel 2 Interrupt Disable */\r
+#define PWM_IDR1_FCHID3 (0x1u << 19) /**< \brief (PWM_IDR1) Fault Protection Trigger on Channel 3 Interrupt Disable */\r
+/* -------- PWM_IMR1 : (PWM Offset: 0x18) PWM Interrupt Mask Register 1 -------- */\r
+#define PWM_IMR1_CHID0 (0x1u << 0) /**< \brief (PWM_IMR1) Counter Event on Channel 0 Interrupt Mask */\r
+#define PWM_IMR1_CHID1 (0x1u << 1) /**< \brief (PWM_IMR1) Counter Event on Channel 1 Interrupt Mask */\r
+#define PWM_IMR1_CHID2 (0x1u << 2) /**< \brief (PWM_IMR1) Counter Event on Channel 2 Interrupt Mask */\r
+#define PWM_IMR1_CHID3 (0x1u << 3) /**< \brief (PWM_IMR1) Counter Event on Channel 3 Interrupt Mask */\r
+#define PWM_IMR1_FCHID0 (0x1u << 16) /**< \brief (PWM_IMR1) Fault Protection Trigger on Channel 0 Interrupt Mask */\r
+#define PWM_IMR1_FCHID1 (0x1u << 17) /**< \brief (PWM_IMR1) Fault Protection Trigger on Channel 1 Interrupt Mask */\r
+#define PWM_IMR1_FCHID2 (0x1u << 18) /**< \brief (PWM_IMR1) Fault Protection Trigger on Channel 2 Interrupt Mask */\r
+#define PWM_IMR1_FCHID3 (0x1u << 19) /**< \brief (PWM_IMR1) Fault Protection Trigger on Channel 3 Interrupt Mask */\r
+/* -------- PWM_ISR1 : (PWM Offset: 0x1C) PWM Interrupt Status Register 1 -------- */\r
+#define PWM_ISR1_CHID0 (0x1u << 0) /**< \brief (PWM_ISR1) Counter Event on Channel 0 */\r
+#define PWM_ISR1_CHID1 (0x1u << 1) /**< \brief (PWM_ISR1) Counter Event on Channel 1 */\r
+#define PWM_ISR1_CHID2 (0x1u << 2) /**< \brief (PWM_ISR1) Counter Event on Channel 2 */\r
+#define PWM_ISR1_CHID3 (0x1u << 3) /**< \brief (PWM_ISR1) Counter Event on Channel 3 */\r
+#define PWM_ISR1_FCHID0 (0x1u << 16) /**< \brief (PWM_ISR1) Fault Protection Trigger on Channel 0 */\r
+#define PWM_ISR1_FCHID1 (0x1u << 17) /**< \brief (PWM_ISR1) Fault Protection Trigger on Channel 1 */\r
+#define PWM_ISR1_FCHID2 (0x1u << 18) /**< \brief (PWM_ISR1) Fault Protection Trigger on Channel 2 */\r
+#define PWM_ISR1_FCHID3 (0x1u << 19) /**< \brief (PWM_ISR1) Fault Protection Trigger on Channel 3 */\r
+/* -------- PWM_SCM : (PWM Offset: 0x20) PWM Sync Channels Mode Register -------- */\r
+#define PWM_SCM_SYNC0 (0x1u << 0) /**< \brief (PWM_SCM) Synchronous Channel 0 */\r
+#define PWM_SCM_SYNC1 (0x1u << 1) /**< \brief (PWM_SCM) Synchronous Channel 1 */\r
+#define PWM_SCM_SYNC2 (0x1u << 2) /**< \brief (PWM_SCM) Synchronous Channel 2 */\r
+#define PWM_SCM_SYNC3 (0x1u << 3) /**< \brief (PWM_SCM) Synchronous Channel 3 */\r
+#define PWM_SCM_UPDM_Pos 16\r
+#define PWM_SCM_UPDM_Msk (0x3u << PWM_SCM_UPDM_Pos) /**< \brief (PWM_SCM) Synchronous Channels Update Mode */\r
+#define   PWM_SCM_UPDM_MODE0 (0x0u << 16) /**< \brief (PWM_SCM) Manual write of double buffer registers and manual update of synchronous channels */\r
+#define   PWM_SCM_UPDM_MODE1 (0x1u << 16) /**< \brief (PWM_SCM) Manual write of double buffer registers and automatic update of synchronous channels */\r
+/* -------- PWM_SCUC : (PWM Offset: 0x28) PWM Sync Channels Update Control Register -------- */\r
+#define PWM_SCUC_UPDULOCK (0x1u << 0) /**< \brief (PWM_SCUC) Synchronous Channels Update Unlock */\r
+/* -------- PWM_SCUP : (PWM Offset: 0x2C) PWM Sync Channels Update Period Register -------- */\r
+#define PWM_SCUP_UPR_Pos 0\r
+#define PWM_SCUP_UPR_Msk (0xfu << PWM_SCUP_UPR_Pos) /**< \brief (PWM_SCUP) Update Period */\r
+#define PWM_SCUP_UPR(value) ((PWM_SCUP_UPR_Msk & ((value) << PWM_SCUP_UPR_Pos)))\r
+#define PWM_SCUP_UPRCNT_Pos 4\r
+#define PWM_SCUP_UPRCNT_Msk (0xfu << PWM_SCUP_UPRCNT_Pos) /**< \brief (PWM_SCUP) Update Period Counter */\r
+#define PWM_SCUP_UPRCNT(value) ((PWM_SCUP_UPRCNT_Msk & ((value) << PWM_SCUP_UPRCNT_Pos)))\r
+/* -------- PWM_SCUPUPD : (PWM Offset: 0x30) PWM Sync Channels Update Period Update Register -------- */\r
+#define PWM_SCUPUPD_UPRUPD_Pos 0\r
+#define PWM_SCUPUPD_UPRUPD_Msk (0xfu << PWM_SCUPUPD_UPRUPD_Pos) /**< \brief (PWM_SCUPUPD) Update Period Update */\r
+#define PWM_SCUPUPD_UPRUPD(value) ((PWM_SCUPUPD_UPRUPD_Msk & ((value) << PWM_SCUPUPD_UPRUPD_Pos)))\r
+/* -------- PWM_IER2 : (PWM Offset: 0x34) PWM Interrupt Enable Register 2 -------- */\r
+#define PWM_IER2_WRDY (0x1u << 0) /**< \brief (PWM_IER2) Write Ready for Synchronous Channels Update Interrupt Enable */\r
+#define PWM_IER2_UNRE (0x1u << 3) /**< \brief (PWM_IER2) Synchronous Channels Update Underrun Error Interrupt Enable */\r
+#define PWM_IER2_CMPM0 (0x1u << 8) /**< \brief (PWM_IER2) Comparison 0 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM1 (0x1u << 9) /**< \brief (PWM_IER2) Comparison 1 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM2 (0x1u << 10) /**< \brief (PWM_IER2) Comparison 2 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM3 (0x1u << 11) /**< \brief (PWM_IER2) Comparison 3 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM4 (0x1u << 12) /**< \brief (PWM_IER2) Comparison 4 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM5 (0x1u << 13) /**< \brief (PWM_IER2) Comparison 5 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM6 (0x1u << 14) /**< \brief (PWM_IER2) Comparison 6 Match Interrupt Enable */\r
+#define PWM_IER2_CMPM7 (0x1u << 15) /**< \brief (PWM_IER2) Comparison 7 Match Interrupt Enable */\r
+#define PWM_IER2_CMPU0 (0x1u << 16) /**< \brief (PWM_IER2) Comparison 0 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU1 (0x1u << 17) /**< \brief (PWM_IER2) Comparison 1 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU2 (0x1u << 18) /**< \brief (PWM_IER2) Comparison 2 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU3 (0x1u << 19) /**< \brief (PWM_IER2) Comparison 3 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU4 (0x1u << 20) /**< \brief (PWM_IER2) Comparison 4 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU5 (0x1u << 21) /**< \brief (PWM_IER2) Comparison 5 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU6 (0x1u << 22) /**< \brief (PWM_IER2) Comparison 6 Update Interrupt Enable */\r
+#define PWM_IER2_CMPU7 (0x1u << 23) /**< \brief (PWM_IER2) Comparison 7 Update Interrupt Enable */\r
+/* -------- PWM_IDR2 : (PWM Offset: 0x38) PWM Interrupt Disable Register 2 -------- */\r
+#define PWM_IDR2_WRDY (0x1u << 0) /**< \brief (PWM_IDR2) Write Ready for Synchronous Channels Update Interrupt Disable */\r
+#define PWM_IDR2_UNRE (0x1u << 3) /**< \brief (PWM_IDR2) Synchronous Channels Update Underrun Error Interrupt Disable */\r
+#define PWM_IDR2_CMPM0 (0x1u << 8) /**< \brief (PWM_IDR2) Comparison 0 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM1 (0x1u << 9) /**< \brief (PWM_IDR2) Comparison 1 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM2 (0x1u << 10) /**< \brief (PWM_IDR2) Comparison 2 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM3 (0x1u << 11) /**< \brief (PWM_IDR2) Comparison 3 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM4 (0x1u << 12) /**< \brief (PWM_IDR2) Comparison 4 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM5 (0x1u << 13) /**< \brief (PWM_IDR2) Comparison 5 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM6 (0x1u << 14) /**< \brief (PWM_IDR2) Comparison 6 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPM7 (0x1u << 15) /**< \brief (PWM_IDR2) Comparison 7 Match Interrupt Disable */\r
+#define PWM_IDR2_CMPU0 (0x1u << 16) /**< \brief (PWM_IDR2) Comparison 0 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU1 (0x1u << 17) /**< \brief (PWM_IDR2) Comparison 1 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU2 (0x1u << 18) /**< \brief (PWM_IDR2) Comparison 2 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU3 (0x1u << 19) /**< \brief (PWM_IDR2) Comparison 3 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU4 (0x1u << 20) /**< \brief (PWM_IDR2) Comparison 4 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU5 (0x1u << 21) /**< \brief (PWM_IDR2) Comparison 5 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU6 (0x1u << 22) /**< \brief (PWM_IDR2) Comparison 6 Update Interrupt Disable */\r
+#define PWM_IDR2_CMPU7 (0x1u << 23) /**< \brief (PWM_IDR2) Comparison 7 Update Interrupt Disable */\r
+/* -------- PWM_IMR2 : (PWM Offset: 0x3C) PWM Interrupt Mask Register 2 -------- */\r
+#define PWM_IMR2_WRDY (0x1u << 0) /**< \brief (PWM_IMR2) Write Ready for Synchronous Channels Update Interrupt Mask */\r
+#define PWM_IMR2_UNRE (0x1u << 3) /**< \brief (PWM_IMR2) Synchronous Channels Update Underrun Error Interrupt Mask */\r
+#define PWM_IMR2_CMPM0 (0x1u << 8) /**< \brief (PWM_IMR2) Comparison 0 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM1 (0x1u << 9) /**< \brief (PWM_IMR2) Comparison 1 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM2 (0x1u << 10) /**< \brief (PWM_IMR2) Comparison 2 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM3 (0x1u << 11) /**< \brief (PWM_IMR2) Comparison 3 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM4 (0x1u << 12) /**< \brief (PWM_IMR2) Comparison 4 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM5 (0x1u << 13) /**< \brief (PWM_IMR2) Comparison 5 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM6 (0x1u << 14) /**< \brief (PWM_IMR2) Comparison 6 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPM7 (0x1u << 15) /**< \brief (PWM_IMR2) Comparison 7 Match Interrupt Mask */\r
+#define PWM_IMR2_CMPU0 (0x1u << 16) /**< \brief (PWM_IMR2) Comparison 0 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU1 (0x1u << 17) /**< \brief (PWM_IMR2) Comparison 1 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU2 (0x1u << 18) /**< \brief (PWM_IMR2) Comparison 2 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU3 (0x1u << 19) /**< \brief (PWM_IMR2) Comparison 3 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU4 (0x1u << 20) /**< \brief (PWM_IMR2) Comparison 4 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU5 (0x1u << 21) /**< \brief (PWM_IMR2) Comparison 5 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU6 (0x1u << 22) /**< \brief (PWM_IMR2) Comparison 6 Update Interrupt Mask */\r
+#define PWM_IMR2_CMPU7 (0x1u << 23) /**< \brief (PWM_IMR2) Comparison 7 Update Interrupt Mask */\r
+/* -------- PWM_ISR2 : (PWM Offset: 0x40) PWM Interrupt Status Register 2 -------- */\r
+#define PWM_ISR2_WRDY (0x1u << 0) /**< \brief (PWM_ISR2) Write Ready for Synchronous Channels Update */\r
+#define PWM_ISR2_UNRE (0x1u << 3) /**< \brief (PWM_ISR2) Synchronous Channels Update Underrun Error */\r
+#define PWM_ISR2_CMPM0 (0x1u << 8) /**< \brief (PWM_ISR2) Comparison 0 Match */\r
+#define PWM_ISR2_CMPM1 (0x1u << 9) /**< \brief (PWM_ISR2) Comparison 1 Match */\r
+#define PWM_ISR2_CMPM2 (0x1u << 10) /**< \brief (PWM_ISR2) Comparison 2 Match */\r
+#define PWM_ISR2_CMPM3 (0x1u << 11) /**< \brief (PWM_ISR2) Comparison 3 Match */\r
+#define PWM_ISR2_CMPM4 (0x1u << 12) /**< \brief (PWM_ISR2) Comparison 4 Match */\r
+#define PWM_ISR2_CMPM5 (0x1u << 13) /**< \brief (PWM_ISR2) Comparison 5 Match */\r
+#define PWM_ISR2_CMPM6 (0x1u << 14) /**< \brief (PWM_ISR2) Comparison 6 Match */\r
+#define PWM_ISR2_CMPM7 (0x1u << 15) /**< \brief (PWM_ISR2) Comparison 7 Match */\r
+#define PWM_ISR2_CMPU0 (0x1u << 16) /**< \brief (PWM_ISR2) Comparison 0 Update */\r
+#define PWM_ISR2_CMPU1 (0x1u << 17) /**< \brief (PWM_ISR2) Comparison 1 Update */\r
+#define PWM_ISR2_CMPU2 (0x1u << 18) /**< \brief (PWM_ISR2) Comparison 2 Update */\r
+#define PWM_ISR2_CMPU3 (0x1u << 19) /**< \brief (PWM_ISR2) Comparison 3 Update */\r
+#define PWM_ISR2_CMPU4 (0x1u << 20) /**< \brief (PWM_ISR2) Comparison 4 Update */\r
+#define PWM_ISR2_CMPU5 (0x1u << 21) /**< \brief (PWM_ISR2) Comparison 5 Update */\r
+#define PWM_ISR2_CMPU6 (0x1u << 22) /**< \brief (PWM_ISR2) Comparison 6 Update */\r
+#define PWM_ISR2_CMPU7 (0x1u << 23) /**< \brief (PWM_ISR2) Comparison 7 Update */\r
+/* -------- PWM_OOV : (PWM Offset: 0x44) PWM Output Override Value Register -------- */\r
+#define PWM_OOV_OOVH0 (0x1u << 0) /**< \brief (PWM_OOV) Output Override Value for PWMH output of the channel 0 */\r
+#define PWM_OOV_OOVH1 (0x1u << 1) /**< \brief (PWM_OOV) Output Override Value for PWMH output of the channel 1 */\r
+#define PWM_OOV_OOVH2 (0x1u << 2) /**< \brief (PWM_OOV) Output Override Value for PWMH output of the channel 2 */\r
+#define PWM_OOV_OOVH3 (0x1u << 3) /**< \brief (PWM_OOV) Output Override Value for PWMH output of the channel 3 */\r
+#define PWM_OOV_OOVL0 (0x1u << 16) /**< \brief (PWM_OOV) Output Override Value for PWML output of the channel 0 */\r
+#define PWM_OOV_OOVL1 (0x1u << 17) /**< \brief (PWM_OOV) Output Override Value for PWML output of the channel 1 */\r
+#define PWM_OOV_OOVL2 (0x1u << 18) /**< \brief (PWM_OOV) Output Override Value for PWML output of the channel 2 */\r
+#define PWM_OOV_OOVL3 (0x1u << 19) /**< \brief (PWM_OOV) Output Override Value for PWML output of the channel 3 */\r
+/* -------- PWM_OS : (PWM Offset: 0x48) PWM Output Selection Register -------- */\r
+#define PWM_OS_OSH0 (0x1u << 0) /**< \brief (PWM_OS) Output Selection for PWMH output of the channel 0 */\r
+#define PWM_OS_OSH1 (0x1u << 1) /**< \brief (PWM_OS) Output Selection for PWMH output of the channel 1 */\r
+#define PWM_OS_OSH2 (0x1u << 2) /**< \brief (PWM_OS) Output Selection for PWMH output of the channel 2 */\r
+#define PWM_OS_OSH3 (0x1u << 3) /**< \brief (PWM_OS) Output Selection for PWMH output of the channel 3 */\r
+#define PWM_OS_OSL0 (0x1u << 16) /**< \brief (PWM_OS) Output Selection for PWML output of the channel 0 */\r
+#define PWM_OS_OSL1 (0x1u << 17) /**< \brief (PWM_OS) Output Selection for PWML output of the channel 1 */\r
+#define PWM_OS_OSL2 (0x1u << 18) /**< \brief (PWM_OS) Output Selection for PWML output of the channel 2 */\r
+#define PWM_OS_OSL3 (0x1u << 19) /**< \brief (PWM_OS) Output Selection for PWML output of the channel 3 */\r
+/* -------- PWM_OSS : (PWM Offset: 0x4C) PWM Output Selection Set Register -------- */\r
+#define PWM_OSS_OSSH0 (0x1u << 0) /**< \brief (PWM_OSS) Output Selection Set for PWMH output of the channel 0 */\r
+#define PWM_OSS_OSSH1 (0x1u << 1) /**< \brief (PWM_OSS) Output Selection Set for PWMH output of the channel 1 */\r
+#define PWM_OSS_OSSH2 (0x1u << 2) /**< \brief (PWM_OSS) Output Selection Set for PWMH output of the channel 2 */\r
+#define PWM_OSS_OSSH3 (0x1u << 3) /**< \brief (PWM_OSS) Output Selection Set for PWMH output of the channel 3 */\r
+#define PWM_OSS_OSSL0 (0x1u << 16) /**< \brief (PWM_OSS) Output Selection Set for PWML output of the channel 0 */\r
+#define PWM_OSS_OSSL1 (0x1u << 17) /**< \brief (PWM_OSS) Output Selection Set for PWML output of the channel 1 */\r
+#define PWM_OSS_OSSL2 (0x1u << 18) /**< \brief (PWM_OSS) Output Selection Set for PWML output of the channel 2 */\r
+#define PWM_OSS_OSSL3 (0x1u << 19) /**< \brief (PWM_OSS) Output Selection Set for PWML output of the channel 3 */\r
+/* -------- PWM_OSC : (PWM Offset: 0x50) PWM Output Selection Clear Register -------- */\r
+#define PWM_OSC_OSCH0 (0x1u << 0) /**< \brief (PWM_OSC) Output Selection Clear for PWMH output of the channel 0 */\r
+#define PWM_OSC_OSCH1 (0x1u << 1) /**< \brief (PWM_OSC) Output Selection Clear for PWMH output of the channel 1 */\r
+#define PWM_OSC_OSCH2 (0x1u << 2) /**< \brief (PWM_OSC) Output Selection Clear for PWMH output of the channel 2 */\r
+#define PWM_OSC_OSCH3 (0x1u << 3) /**< \brief (PWM_OSC) Output Selection Clear for PWMH output of the channel 3 */\r
+#define PWM_OSC_OSCL0 (0x1u << 16) /**< \brief (PWM_OSC) Output Selection Clear for PWML output of the channel 0 */\r
+#define PWM_OSC_OSCL1 (0x1u << 17) /**< \brief (PWM_OSC) Output Selection Clear for PWML output of the channel 1 */\r
+#define PWM_OSC_OSCL2 (0x1u << 18) /**< \brief (PWM_OSC) Output Selection Clear for PWML output of the channel 2 */\r
+#define PWM_OSC_OSCL3 (0x1u << 19) /**< \brief (PWM_OSC) Output Selection Clear for PWML output of the channel 3 */\r
+/* -------- PWM_OSSUPD : (PWM Offset: 0x54) PWM Output Selection Set Update Register -------- */\r
+#define PWM_OSSUPD_OSSUPH0 (0x1u << 0) /**< \brief (PWM_OSSUPD) Output Selection Set for PWMH output of the channel 0 */\r
+#define PWM_OSSUPD_OSSUPH1 (0x1u << 1) /**< \brief (PWM_OSSUPD) Output Selection Set for PWMH output of the channel 1 */\r
+#define PWM_OSSUPD_OSSUPH2 (0x1u << 2) /**< \brief (PWM_OSSUPD) Output Selection Set for PWMH output of the channel 2 */\r
+#define PWM_OSSUPD_OSSUPH3 (0x1u << 3) /**< \brief (PWM_OSSUPD) Output Selection Set for PWMH output of the channel 3 */\r
+#define PWM_OSSUPD_OSSUPL0 (0x1u << 16) /**< \brief (PWM_OSSUPD) Output Selection Set for PWML output of the channel 0 */\r
+#define PWM_OSSUPD_OSSUPL1 (0x1u << 17) /**< \brief (PWM_OSSUPD) Output Selection Set for PWML output of the channel 1 */\r
+#define PWM_OSSUPD_OSSUPL2 (0x1u << 18) /**< \brief (PWM_OSSUPD) Output Selection Set for PWML output of the channel 2 */\r
+#define PWM_OSSUPD_OSSUPL3 (0x1u << 19) /**< \brief (PWM_OSSUPD) Output Selection Set for PWML output of the channel 3 */\r
+/* -------- PWM_OSCUPD : (PWM Offset: 0x58) PWM Output Selection Clear Update Register -------- */\r
+#define PWM_OSCUPD_OSCUPH0 (0x1u << 0) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWMH output of the channel 0 */\r
+#define PWM_OSCUPD_OSCUPH1 (0x1u << 1) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWMH output of the channel 1 */\r
+#define PWM_OSCUPD_OSCUPH2 (0x1u << 2) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWMH output of the channel 2 */\r
+#define PWM_OSCUPD_OSCUPH3 (0x1u << 3) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWMH output of the channel 3 */\r
+#define PWM_OSCUPD_OSCUPL0 (0x1u << 16) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWML output of the channel 0 */\r
+#define PWM_OSCUPD_OSCUPL1 (0x1u << 17) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWML output of the channel 1 */\r
+#define PWM_OSCUPD_OSCUPL2 (0x1u << 18) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWML output of the channel 2 */\r
+#define PWM_OSCUPD_OSCUPL3 (0x1u << 19) /**< \brief (PWM_OSCUPD) Output Selection Clear for PWML output of the channel 3 */\r
+/* -------- PWM_FMR : (PWM Offset: 0x5C) PWM Fault Mode Register -------- */\r
+#define PWM_FMR_FPOL_Pos 0\r
+#define PWM_FMR_FPOL_Msk (0xffu << PWM_FMR_FPOL_Pos) /**< \brief (PWM_FMR) Fault Polarity (fault input bit varies from 0 to 7) */\r
+#define PWM_FMR_FPOL(value) ((PWM_FMR_FPOL_Msk & ((value) << PWM_FMR_FPOL_Pos)))\r
+#define PWM_FMR_FMOD_Pos 8\r
+#define PWM_FMR_FMOD_Msk (0xffu << PWM_FMR_FMOD_Pos) /**< \brief (PWM_FMR) Fault Activation Mode (fault input bit varies from 0 to 7) */\r
+#define PWM_FMR_FMOD(value) ((PWM_FMR_FMOD_Msk & ((value) << PWM_FMR_FMOD_Pos)))\r
+#define PWM_FMR_FFIL_Pos 16\r
+#define PWM_FMR_FFIL_Msk (0xffu << PWM_FMR_FFIL_Pos) /**< \brief (PWM_FMR) Fault Filtering (fault input bit varies from 0 to 7) */\r
+#define PWM_FMR_FFIL(value) ((PWM_FMR_FFIL_Msk & ((value) << PWM_FMR_FFIL_Pos)))\r
+/* -------- PWM_FSR : (PWM Offset: 0x60) PWM Fault Status Register -------- */\r
+#define PWM_FSR_FIV_Pos 0\r
+#define PWM_FSR_FIV_Msk (0xffu << PWM_FSR_FIV_Pos) /**< \brief (PWM_FSR) Fault Input Value (fault input bit varies from 0 to 7) */\r
+#define PWM_FSR_FS_Pos 8\r
+#define PWM_FSR_FS_Msk (0xffu << PWM_FSR_FS_Pos) /**< \brief (PWM_FSR) Fault Status (fault input bit varies from 0 to 7) */\r
+/* -------- PWM_FCR : (PWM Offset: 0x64) PWM Fault Clear Register -------- */\r
+#define PWM_FCR_FCLR_Pos 0\r
+#define PWM_FCR_FCLR_Msk (0xffu << PWM_FCR_FCLR_Pos) /**< \brief (PWM_FCR) Fault Clear (fault input bit varies from 0 to 7) */\r
+#define PWM_FCR_FCLR(value) ((PWM_FCR_FCLR_Msk & ((value) << PWM_FCR_FCLR_Pos)))\r
+/* -------- PWM_FPV1 : (PWM Offset: 0x68) PWM Fault Protection Value Register 1 -------- */\r
+#define PWM_FPV1_FPVH0 (0x1u << 0) /**< \brief (PWM_FPV1) Fault Protection Value for PWMH output on channel 0 */\r
+#define PWM_FPV1_FPVH1 (0x1u << 1) /**< \brief (PWM_FPV1) Fault Protection Value for PWMH output on channel 1 */\r
+#define PWM_FPV1_FPVH2 (0x1u << 2) /**< \brief (PWM_FPV1) Fault Protection Value for PWMH output on channel 2 */\r
+#define PWM_FPV1_FPVH3 (0x1u << 3) /**< \brief (PWM_FPV1) Fault Protection Value for PWMH output on channel 3 */\r
+#define PWM_FPV1_FPVL0 (0x1u << 16) /**< \brief (PWM_FPV1) Fault Protection Value for PWML output on channel 0 */\r
+#define PWM_FPV1_FPVL1 (0x1u << 17) /**< \brief (PWM_FPV1) Fault Protection Value for PWML output on channel 1 */\r
+#define PWM_FPV1_FPVL2 (0x1u << 18) /**< \brief (PWM_FPV1) Fault Protection Value for PWML output on channel 2 */\r
+#define PWM_FPV1_FPVL3 (0x1u << 19) /**< \brief (PWM_FPV1) Fault Protection Value for PWML output on channel 3 */\r
+/* -------- PWM_FPE : (PWM Offset: 0x6C) PWM Fault Protection Enable Register -------- */\r
+#define PWM_FPE_FPE0_Pos 0\r
+#define PWM_FPE_FPE0_Msk (0xffu << PWM_FPE_FPE0_Pos) /**< \brief (PWM_FPE) Fault Protection Enable for channel 0 (fault input bit varies from 0 to 7) */\r
+#define PWM_FPE_FPE0(value) ((PWM_FPE_FPE0_Msk & ((value) << PWM_FPE_FPE0_Pos)))\r
+#define PWM_FPE_FPE1_Pos 8\r
+#define PWM_FPE_FPE1_Msk (0xffu << PWM_FPE_FPE1_Pos) /**< \brief (PWM_FPE) Fault Protection Enable for channel 1 (fault input bit varies from 0 to 7) */\r
+#define PWM_FPE_FPE1(value) ((PWM_FPE_FPE1_Msk & ((value) << PWM_FPE_FPE1_Pos)))\r
+#define PWM_FPE_FPE2_Pos 16\r
+#define PWM_FPE_FPE2_Msk (0xffu << PWM_FPE_FPE2_Pos) /**< \brief (PWM_FPE) Fault Protection Enable for channel 2 (fault input bit varies from 0 to 7) */\r
+#define PWM_FPE_FPE2(value) ((PWM_FPE_FPE2_Msk & ((value) << PWM_FPE_FPE2_Pos)))\r
+#define PWM_FPE_FPE3_Pos 24\r
+#define PWM_FPE_FPE3_Msk (0xffu << PWM_FPE_FPE3_Pos) /**< \brief (PWM_FPE) Fault Protection Enable for channel 3 (fault input bit varies from 0 to 7) */\r
+#define PWM_FPE_FPE3(value) ((PWM_FPE_FPE3_Msk & ((value) << PWM_FPE_FPE3_Pos)))\r
+/* -------- PWM_ELMR[2] : (PWM Offset: 0x7C) PWM Event Line 0 Mode Register -------- */\r
+#define PWM_ELMR_CSEL0 (0x1u << 0) /**< \brief (PWM_ELMR[2]) Comparison 0 Selection */\r
+#define PWM_ELMR_CSEL1 (0x1u << 1) /**< \brief (PWM_ELMR[2]) Comparison 1 Selection */\r
+#define PWM_ELMR_CSEL2 (0x1u << 2) /**< \brief (PWM_ELMR[2]) Comparison 2 Selection */\r
+#define PWM_ELMR_CSEL3 (0x1u << 3) /**< \brief (PWM_ELMR[2]) Comparison 3 Selection */\r
+#define PWM_ELMR_CSEL4 (0x1u << 4) /**< \brief (PWM_ELMR[2]) Comparison 4 Selection */\r
+#define PWM_ELMR_CSEL5 (0x1u << 5) /**< \brief (PWM_ELMR[2]) Comparison 5 Selection */\r
+#define PWM_ELMR_CSEL6 (0x1u << 6) /**< \brief (PWM_ELMR[2]) Comparison 6 Selection */\r
+#define PWM_ELMR_CSEL7 (0x1u << 7) /**< \brief (PWM_ELMR[2]) Comparison 7 Selection */\r
+/* -------- PWM_SSPR : (PWM Offset: 0xA0) PWM Spread Spectrum Register -------- */\r
+#define PWM_SSPR_SPRD_Pos 0\r
+#define PWM_SSPR_SPRD_Msk (0xffffffu << PWM_SSPR_SPRD_Pos) /**< \brief (PWM_SSPR) Spread Spectrum Limit Value */\r
+#define PWM_SSPR_SPRD(value) ((PWM_SSPR_SPRD_Msk & ((value) << PWM_SSPR_SPRD_Pos)))\r
+#define PWM_SSPR_SPRDM (0x1u << 24) /**< \brief (PWM_SSPR) Spread Spectrum Counter Mode */\r
+/* -------- PWM_SSPUP : (PWM Offset: 0xA4) PWM Spread Spectrum Update Register -------- */\r
+#define PWM_SSPUP_SPRDUP_Pos 0\r
+#define PWM_SSPUP_SPRDUP_Msk (0xffffffu << PWM_SSPUP_SPRDUP_Pos) /**< \brief (PWM_SSPUP) Spread Spectrum Limit Value Update */\r
+#define PWM_SSPUP_SPRDUP(value) ((PWM_SSPUP_SPRDUP_Msk & ((value) << PWM_SSPUP_SPRDUP_Pos)))\r
+/* -------- PWM_SMMR : (PWM Offset: 0xB0) PWM Stepper Motor Mode Register -------- */\r
+#define PWM_SMMR_GCEN0 (0x1u << 0) /**< \brief (PWM_SMMR) Gray Count ENable */\r
+#define PWM_SMMR_GCEN1 (0x1u << 1) /**< \brief (PWM_SMMR) Gray Count ENable */\r
+#define PWM_SMMR_DOWN0 (0x1u << 16) /**< \brief (PWM_SMMR) DOWN Count */\r
+#define PWM_SMMR_DOWN1 (0x1u << 17) /**< \brief (PWM_SMMR) DOWN Count */\r
+/* -------- PWM_FPV2 : (PWM Offset: 0xC0) PWM Fault Protection Value 2 Register -------- */\r
+#define PWM_FPV2_FPZH0 (0x1u << 0) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWMH output on channel 0 */\r
+#define PWM_FPV2_FPZH1 (0x1u << 1) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWMH output on channel 1 */\r
+#define PWM_FPV2_FPZH2 (0x1u << 2) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWMH output on channel 2 */\r
+#define PWM_FPV2_FPZH3 (0x1u << 3) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWMH output on channel 3 */\r
+#define PWM_FPV2_FPZL0 (0x1u << 16) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWML output on channel 0 */\r
+#define PWM_FPV2_FPZL1 (0x1u << 17) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWML output on channel 1 */\r
+#define PWM_FPV2_FPZL2 (0x1u << 18) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWML output on channel 2 */\r
+#define PWM_FPV2_FPZL3 (0x1u << 19) /**< \brief (PWM_FPV2) Fault Protection to Hi-Z for PWML output on channel 3 */\r
+/* -------- PWM_WPCR : (PWM Offset: 0xE4) PWM Write Protect Control Register -------- */\r
+#define PWM_WPCR_WPCMD_Pos 0\r
+#define PWM_WPCR_WPCMD_Msk (0x3u << PWM_WPCR_WPCMD_Pos) /**< \brief (PWM_WPCR) Write Protect Command */\r
+#define PWM_WPCR_WPCMD(value) ((PWM_WPCR_WPCMD_Msk & ((value) << PWM_WPCR_WPCMD_Pos)))\r
+#define PWM_WPCR_WPRG0 (0x1u << 2) /**< \brief (PWM_WPCR) Write Protect Register Group 0 */\r
+#define PWM_WPCR_WPRG1 (0x1u << 3) /**< \brief (PWM_WPCR) Write Protect Register Group 1 */\r
+#define PWM_WPCR_WPRG2 (0x1u << 4) /**< \brief (PWM_WPCR) Write Protect Register Group 2 */\r
+#define PWM_WPCR_WPRG3 (0x1u << 5) /**< \brief (PWM_WPCR) Write Protect Register Group 3 */\r
+#define PWM_WPCR_WPRG4 (0x1u << 6) /**< \brief (PWM_WPCR) Write Protect Register Group 4 */\r
+#define PWM_WPCR_WPRG5 (0x1u << 7) /**< \brief (PWM_WPCR) Write Protect Register Group 5 */\r
+#define PWM_WPCR_WPKEY_Pos 8\r
+#define PWM_WPCR_WPKEY_Msk (0xffffffu << PWM_WPCR_WPKEY_Pos) /**< \brief (PWM_WPCR) Write Protect Key */\r
+#define PWM_WPCR_WPKEY(value) ((PWM_WPCR_WPKEY_Msk & ((value) << PWM_WPCR_WPKEY_Pos)))\r
+/* -------- PWM_WPSR : (PWM Offset: 0xE8) PWM Write Protect Status Register -------- */\r
+#define PWM_WPSR_WPSWS0 (0x1u << 0) /**< \brief (PWM_WPSR) Write Protect SW Status */\r
+#define PWM_WPSR_WPSWS1 (0x1u << 1) /**< \brief (PWM_WPSR) Write Protect SW Status */\r
+#define PWM_WPSR_WPSWS2 (0x1u << 2) /**< \brief (PWM_WPSR) Write Protect SW Status */\r
+#define PWM_WPSR_WPSWS3 (0x1u << 3) /**< \brief (PWM_WPSR) Write Protect SW Status */\r
+#define PWM_WPSR_WPSWS4 (0x1u << 4) /**< \brief (PWM_WPSR) Write Protect SW Status */\r
+#define PWM_WPSR_WPSWS5 (0x1u << 5) /**< \brief (PWM_WPSR) Write Protect SW Status */\r
+#define PWM_WPSR_WPVS (0x1u << 7) /**< \brief (PWM_WPSR) Write Protect Violation Status */\r
+#define PWM_WPSR_WPHWS0 (0x1u << 8) /**< \brief (PWM_WPSR) Write Protect HW Status */\r
+#define PWM_WPSR_WPHWS1 (0x1u << 9) /**< \brief (PWM_WPSR) Write Protect HW Status */\r
+#define PWM_WPSR_WPHWS2 (0x1u << 10) /**< \brief (PWM_WPSR) Write Protect HW Status */\r
+#define PWM_WPSR_WPHWS3 (0x1u << 11) /**< \brief (PWM_WPSR) Write Protect HW Status */\r
+#define PWM_WPSR_WPHWS4 (0x1u << 12) /**< \brief (PWM_WPSR) Write Protect HW Status */\r
+#define PWM_WPSR_WPHWS5 (0x1u << 13) /**< \brief (PWM_WPSR) Write Protect HW Status */\r
+#define PWM_WPSR_WPVSRC_Pos 16\r
+#define PWM_WPSR_WPVSRC_Msk (0xffffu << PWM_WPSR_WPVSRC_Pos) /**< \brief (PWM_WPSR) Write Protect Violation Source */\r
+/* -------- PWM_CMPV : (PWM Offset: N/A) PWM Comparison 0 Value Register -------- */\r
+#define PWM_CMPV_CV_Pos 0\r
+#define PWM_CMPV_CV_Msk (0xffffffu << PWM_CMPV_CV_Pos) /**< \brief (PWM_CMPV) Comparison x Value */\r
+#define PWM_CMPV_CV(value) ((PWM_CMPV_CV_Msk & ((value) << PWM_CMPV_CV_Pos)))\r
+#define PWM_CMPV_CVM (0x1u << 24) /**< \brief (PWM_CMPV) Comparison x Value Mode */\r
+/* -------- PWM_CMPVUPD : (PWM Offset: N/A) PWM Comparison 0 Value Update Register -------- */\r
+#define PWM_CMPVUPD_CVUPD_Pos 0\r
+#define PWM_CMPVUPD_CVUPD_Msk (0xffffffu << PWM_CMPVUPD_CVUPD_Pos) /**< \brief (PWM_CMPVUPD) Comparison x Value Update */\r
+#define PWM_CMPVUPD_CVUPD(value) ((PWM_CMPVUPD_CVUPD_Msk & ((value) << PWM_CMPVUPD_CVUPD_Pos)))\r
+#define PWM_CMPVUPD_CVMUPD (0x1u << 24) /**< \brief (PWM_CMPVUPD) Comparison x Value Mode Update */\r
+/* -------- PWM_CMPM : (PWM Offset: N/A) PWM Comparison 0 Mode Register -------- */\r
+#define PWM_CMPM_CEN (0x1u << 0) /**< \brief (PWM_CMPM) Comparison x Enable */\r
+#define PWM_CMPM_CTR_Pos 4\r
+#define PWM_CMPM_CTR_Msk (0xfu << PWM_CMPM_CTR_Pos) /**< \brief (PWM_CMPM) Comparison x Trigger */\r
+#define PWM_CMPM_CTR(value) ((PWM_CMPM_CTR_Msk & ((value) << PWM_CMPM_CTR_Pos)))\r
+#define PWM_CMPM_CPR_Pos 8\r
+#define PWM_CMPM_CPR_Msk (0xfu << PWM_CMPM_CPR_Pos) /**< \brief (PWM_CMPM) Comparison x Period */\r
+#define PWM_CMPM_CPR(value) ((PWM_CMPM_CPR_Msk & ((value) << PWM_CMPM_CPR_Pos)))\r
+#define PWM_CMPM_CPRCNT_Pos 12\r
+#define PWM_CMPM_CPRCNT_Msk (0xfu << PWM_CMPM_CPRCNT_Pos) /**< \brief (PWM_CMPM) Comparison x Period Counter */\r
+#define PWM_CMPM_CPRCNT(value) ((PWM_CMPM_CPRCNT_Msk & ((value) << PWM_CMPM_CPRCNT_Pos)))\r
+#define PWM_CMPM_CUPR_Pos 16\r
+#define PWM_CMPM_CUPR_Msk (0xfu << PWM_CMPM_CUPR_Pos) /**< \brief (PWM_CMPM) Comparison x Update Period */\r
+#define PWM_CMPM_CUPR(value) ((PWM_CMPM_CUPR_Msk & ((value) << PWM_CMPM_CUPR_Pos)))\r
+#define PWM_CMPM_CUPRCNT_Pos 20\r
+#define PWM_CMPM_CUPRCNT_Msk (0xfu << PWM_CMPM_CUPRCNT_Pos) /**< \brief (PWM_CMPM) Comparison x Update Period Counter */\r
+#define PWM_CMPM_CUPRCNT(value) ((PWM_CMPM_CUPRCNT_Msk & ((value) << PWM_CMPM_CUPRCNT_Pos)))\r
+/* -------- PWM_CMPMUPD : (PWM Offset: N/A) PWM Comparison 0 Mode Update Register -------- */\r
+#define PWM_CMPMUPD_CENUPD (0x1u << 0) /**< \brief (PWM_CMPMUPD) Comparison x Enable Update */\r
+#define PWM_CMPMUPD_CTRUPD_Pos 4\r
+#define PWM_CMPMUPD_CTRUPD_Msk (0xfu << PWM_CMPMUPD_CTRUPD_Pos) /**< \brief (PWM_CMPMUPD) Comparison x Trigger Update */\r
+#define PWM_CMPMUPD_CTRUPD(value) ((PWM_CMPMUPD_CTRUPD_Msk & ((value) << PWM_CMPMUPD_CTRUPD_Pos)))\r
+#define PWM_CMPMUPD_CPRUPD_Pos 8\r
+#define PWM_CMPMUPD_CPRUPD_Msk (0xfu << PWM_CMPMUPD_CPRUPD_Pos) /**< \brief (PWM_CMPMUPD) Comparison x Period Update */\r
+#define PWM_CMPMUPD_CPRUPD(value) ((PWM_CMPMUPD_CPRUPD_Msk & ((value) << PWM_CMPMUPD_CPRUPD_Pos)))\r
+#define PWM_CMPMUPD_CUPRUPD_Pos 16\r
+#define PWM_CMPMUPD_CUPRUPD_Msk (0xfu << PWM_CMPMUPD_CUPRUPD_Pos) /**< \brief (PWM_CMPMUPD) Comparison x Update Period Update */\r
+#define PWM_CMPMUPD_CUPRUPD(value) ((PWM_CMPMUPD_CUPRUPD_Msk & ((value) << PWM_CMPMUPD_CUPRUPD_Pos)))\r
+/* -------- PWM_CMR : (PWM Offset: N/A) PWM Channel Mode Register -------- */\r
+#define PWM_CMR_CPRE_Pos 0\r
+#define PWM_CMR_CPRE_Msk (0xfu << PWM_CMR_CPRE_Pos) /**< \brief (PWM_CMR) Channel Pre-scaler */\r
+#define   PWM_CMR_CPRE_MCK (0x0u << 0) /**< \brief (PWM_CMR) Master clock */\r
+#define   PWM_CMR_CPRE_MCK_DIV_2 (0x1u << 0) /**< \brief (PWM_CMR) Master clock/2 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_4 (0x2u << 0) /**< \brief (PWM_CMR) Master clock/4 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_8 (0x3u << 0) /**< \brief (PWM_CMR) Master clock/8 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_16 (0x4u << 0) /**< \brief (PWM_CMR) Master clock/16 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_32 (0x5u << 0) /**< \brief (PWM_CMR) Master clock/32 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_64 (0x6u << 0) /**< \brief (PWM_CMR) Master clock/64 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_128 (0x7u << 0) /**< \brief (PWM_CMR) Master clock/128 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_256 (0x8u << 0) /**< \brief (PWM_CMR) Master clock/256 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_512 (0x9u << 0) /**< \brief (PWM_CMR) Master clock/512 */\r
+#define   PWM_CMR_CPRE_MCK_DIV_1024 (0xAu << 0) /**< \brief (PWM_CMR) Master clock/1024 */\r
+#define   PWM_CMR_CPRE_CLKA (0xBu << 0) /**< \brief (PWM_CMR) Clock A */\r
+#define   PWM_CMR_CPRE_CLKB (0xCu << 0) /**< \brief (PWM_CMR) Clock B */\r
+#define PWM_CMR_CALG (0x1u << 8) /**< \brief (PWM_CMR) Channel Alignment */\r
+#define PWM_CMR_CPOL (0x1u << 9) /**< \brief (PWM_CMR) Channel Polarity */\r
+#define PWM_CMR_CES (0x1u << 10) /**< \brief (PWM_CMR) Counter Event Selection */\r
+#define PWM_CMR_UPDS (0x1u << 11) /**< \brief (PWM_CMR) Update Selection */\r
+#define PWM_CMR_DTE (0x1u << 16) /**< \brief (PWM_CMR) Dead-Time Generator Enable */\r
+#define PWM_CMR_DTHI (0x1u << 17) /**< \brief (PWM_CMR) Dead-Time PWMHx Output Inverted */\r
+#define PWM_CMR_DTLI (0x1u << 18) /**< \brief (PWM_CMR) Dead-Time PWMLx Output Inverted */\r
+/* -------- PWM_CDTY : (PWM Offset: N/A) PWM Channel Duty Cycle Register -------- */\r
+#define PWM_CDTY_CDTY_Pos 0\r
+#define PWM_CDTY_CDTY_Msk (0xffffffu << PWM_CDTY_CDTY_Pos) /**< \brief (PWM_CDTY) Channel Duty-Cycle */\r
+#define PWM_CDTY_CDTY(value) ((PWM_CDTY_CDTY_Msk & ((value) << PWM_CDTY_CDTY_Pos)))\r
+/* -------- PWM_CDTYUPD : (PWM Offset: N/A) PWM Channel Duty Cycle Update Register -------- */\r
+#define PWM_CDTYUPD_CDTYUPD_Pos 0\r
+#define PWM_CDTYUPD_CDTYUPD_Msk (0xffffffu << PWM_CDTYUPD_CDTYUPD_Pos) /**< \brief (PWM_CDTYUPD) Channel Duty-Cycle Update */\r
+#define PWM_CDTYUPD_CDTYUPD(value) ((PWM_CDTYUPD_CDTYUPD_Msk & ((value) << PWM_CDTYUPD_CDTYUPD_Pos)))\r
+/* -------- PWM_CPRD : (PWM Offset: N/A) PWM Channel Period Register -------- */\r
+#define PWM_CPRD_CPRD_Pos 0\r
+#define PWM_CPRD_CPRD_Msk (0xffffffu << PWM_CPRD_CPRD_Pos) /**< \brief (PWM_CPRD) Channel Period */\r
+#define PWM_CPRD_CPRD(value) ((PWM_CPRD_CPRD_Msk & ((value) << PWM_CPRD_CPRD_Pos)))\r
+/* -------- PWM_CPRDUPD : (PWM Offset: N/A) PWM Channel Period Update Register -------- */\r
+#define PWM_CPRDUPD_CPRDUPD_Pos 0\r
+#define PWM_CPRDUPD_CPRDUPD_Msk (0xffffffu << PWM_CPRDUPD_CPRDUPD_Pos) /**< \brief (PWM_CPRDUPD) Channel Period Update */\r
+#define PWM_CPRDUPD_CPRDUPD(value) ((PWM_CPRDUPD_CPRDUPD_Msk & ((value) << PWM_CPRDUPD_CPRDUPD_Pos)))\r
+/* -------- PWM_CCNT : (PWM Offset: N/A) PWM Channel Counter Register -------- */\r
+#define PWM_CCNT_CNT_Pos 0\r
+#define PWM_CCNT_CNT_Msk (0xffffffu << PWM_CCNT_CNT_Pos) /**< \brief (PWM_CCNT) Channel Counter Register */\r
+/* -------- PWM_DT : (PWM Offset: N/A) PWM Channel Dead Time Register -------- */\r
+#define PWM_DT_DTH_Pos 0\r
+#define PWM_DT_DTH_Msk (0xffffu << PWM_DT_DTH_Pos) /**< \brief (PWM_DT) Dead-Time Value for PWMHx Output */\r
+#define PWM_DT_DTH(value) ((PWM_DT_DTH_Msk & ((value) << PWM_DT_DTH_Pos)))\r
+#define PWM_DT_DTL_Pos 16\r
+#define PWM_DT_DTL_Msk (0xffffu << PWM_DT_DTL_Pos) /**< \brief (PWM_DT) Dead-Time Value for PWMLx Output */\r
+#define PWM_DT_DTL(value) ((PWM_DT_DTL_Msk & ((value) << PWM_DT_DTL_Pos)))\r
+/* -------- PWM_DTUPD : (PWM Offset: N/A) PWM Channel Dead Time Update Register -------- */\r
+#define PWM_DTUPD_DTHUPD_Pos 0\r
+#define PWM_DTUPD_DTHUPD_Msk (0xffffu << PWM_DTUPD_DTHUPD_Pos) /**< \brief (PWM_DTUPD) Dead-Time Value Update for PWMHx Output */\r
+#define PWM_DTUPD_DTHUPD(value) ((PWM_DTUPD_DTHUPD_Msk & ((value) << PWM_DTUPD_DTHUPD_Pos)))\r
+#define PWM_DTUPD_DTLUPD_Pos 16\r
+#define PWM_DTUPD_DTLUPD_Msk (0xffffu << PWM_DTUPD_DTLUPD_Pos) /**< \brief (PWM_DTUPD) Dead-Time Value Update for PWMLx Output */\r
+#define PWM_DTUPD_DTLUPD(value) ((PWM_DTUPD_DTLUPD_Msk & ((value) << PWM_DTUPD_DTLUPD_Pos)))\r
+/* -------- PWM_CMUPD0 : (PWM Offset: 0x400) PWM Channel Mode Update Register (ch_num = 0) -------- */\r
+#define PWM_CMUPD0_CPOLUP (0x1u << 9) /**< \brief (PWM_CMUPD0) Channel Polarity Update */\r
+#define PWM_CMUPD0_CPOLINVUP (0x1u << 13) /**< \brief (PWM_CMUPD0) Channel Polarity Inversion Update */\r
+/* -------- PWM_CMUPD1 : (PWM Offset: 0x420) PWM Channel Mode Update Register (ch_num = 1) -------- */\r
+#define PWM_CMUPD1_CPOLUP (0x1u << 9) /**< \brief (PWM_CMUPD1) Channel Polarity Update */\r
+#define PWM_CMUPD1_CPOLINVUP (0x1u << 13) /**< \brief (PWM_CMUPD1) Channel Polarity Inversion Update */\r
+/* -------- PWM_CMUPD2 : (PWM Offset: 0x440) PWM Channel Mode Update Register (ch_num = 2) -------- */\r
+#define PWM_CMUPD2_CPOLUP (0x1u << 9) /**< \brief (PWM_CMUPD2) Channel Polarity Update */\r
+#define PWM_CMUPD2_CPOLINVUP (0x1u << 13) /**< \brief (PWM_CMUPD2) Channel Polarity Inversion Update */\r
+/* -------- PWM_CMUPD3 : (PWM Offset: 0x460) PWM Channel Mode Update Register (ch_num = 3) -------- */\r
+#define PWM_CMUPD3_CPOLUP (0x1u << 9) /**< \brief (PWM_CMUPD3) Channel Polarity Update */\r
+#define PWM_CMUPD3_CPOLINVUP (0x1u << 13) /**< \brief (PWM_CMUPD3) Channel Polarity Inversion Update */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Reset Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_RSTC Reset Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Rstc hardware registers */\r
+typedef struct {\r
+  __O  uint32_t RSTC_CR; /**< \brief (Rstc Offset: 0x00) Control Register */\r
+  __I  uint32_t RSTC_SR; /**< \brief (Rstc Offset: 0x04) Status Register */\r
+  __IO uint32_t RSTC_MR; /**< \brief (Rstc Offset: 0x08) Mode Register */\r
+} Rstc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- RSTC_CR : (RSTC Offset: 0x00) Control Register -------- */\r
+#define RSTC_CR_PROCRST (0x1u << 0) /**< \brief (RSTC_CR) Processor Reset */\r
+#define RSTC_CR_PERRST (0x1u << 2) /**< \brief (RSTC_CR) Peripheral Reset */\r
+#define RSTC_CR_EXTRST (0x1u << 3) /**< \brief (RSTC_CR) External Reset */\r
+#define RSTC_CR_KEY_Pos 24\r
+#define RSTC_CR_KEY_Msk (0xffu << RSTC_CR_KEY_Pos) /**< \brief (RSTC_CR) Password */\r
+#define RSTC_CR_KEY(value) ((RSTC_CR_KEY_Msk & ((value) << RSTC_CR_KEY_Pos)))\r
+/* -------- RSTC_SR : (RSTC Offset: 0x04) Status Register -------- */\r
+#define RSTC_SR_URSTS (0x1u << 0) /**< \brief (RSTC_SR) User Reset Status */\r
+#define RSTC_SR_RSTTYP_Pos 8\r
+#define RSTC_SR_RSTTYP_Msk (0x7u << RSTC_SR_RSTTYP_Pos) /**< \brief (RSTC_SR) Reset Type */\r
+#define RSTC_SR_NRSTL (0x1u << 16) /**< \brief (RSTC_SR) NRST Pin Level */\r
+#define RSTC_SR_SRCMP (0x1u << 17) /**< \brief (RSTC_SR) Software Reset Command in Progress */\r
+/* -------- RSTC_MR : (RSTC Offset: 0x08) Mode Register -------- */\r
+#define RSTC_MR_URSTEN (0x1u << 0) /**< \brief (RSTC_MR) User Reset Enable */\r
+#define RSTC_MR_URSTIEN (0x1u << 4) /**< \brief (RSTC_MR) User Reset Interrupt Enable */\r
+#define RSTC_MR_ERSTL_Pos 8\r
+#define RSTC_MR_ERSTL_Msk (0xfu << RSTC_MR_ERSTL_Pos) /**< \brief (RSTC_MR) External Reset Length */\r
+#define RSTC_MR_ERSTL(value) ((RSTC_MR_ERSTL_Msk & ((value) << RSTC_MR_ERSTL_Pos)))\r
+#define RSTC_MR_KEY_Pos 24\r
+#define RSTC_MR_KEY_Msk (0xffu << RSTC_MR_KEY_Pos) /**< \brief (RSTC_MR) Password */\r
+#define RSTC_MR_KEY(value) ((RSTC_MR_KEY_Msk & ((value) << RSTC_MR_KEY_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Real-time Clock */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_RTC Real-time Clock */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief RtcTs hardware registers */\r
+typedef struct {\r
+  __I uint32_t RTC_TSTR; /**< \brief (RtcTs Offset: 0x0) TimeStamp Time Register 0 */\r
+  __I uint32_t RTC_TSDR; /**< \brief (RtcTs Offset: 0x4) TimeStamp Date Register 0 */\r
+  __I uint32_t RTC_TSSR; /**< \brief (RtcTs Offset: 0x8) TimeStamp Source Register 0 */\r
+} RtcTs;\r
+/** \brief Rtc hardware registers */\r
+#define RTCTS_NUMBER 2\r
+typedef struct {\r
+  __IO uint32_t RTC_CR;               /**< \brief (Rtc Offset: 0x00) Control Register */\r
+  __IO uint32_t RTC_MR;               /**< \brief (Rtc Offset: 0x04) Mode Register */\r
+  __IO uint32_t RTC_TIMR;             /**< \brief (Rtc Offset: 0x08) Time Register */\r
+  __IO uint32_t RTC_CALR;             /**< \brief (Rtc Offset: 0x0C) Calendar Register */\r
+  __IO uint32_t RTC_TIMALR;           /**< \brief (Rtc Offset: 0x10) Time Alarm Register */\r
+  __IO uint32_t RTC_CALALR;           /**< \brief (Rtc Offset: 0x14) Calendar Alarm Register */\r
+  __I  uint32_t RTC_SR;               /**< \brief (Rtc Offset: 0x18) Status Register */\r
+  __O  uint32_t RTC_SCCR;             /**< \brief (Rtc Offset: 0x1C) Status Clear Command Register */\r
+  __O  uint32_t RTC_IER;              /**< \brief (Rtc Offset: 0x20) Interrupt Enable Register */\r
+  __O  uint32_t RTC_IDR;              /**< \brief (Rtc Offset: 0x24) Interrupt Disable Register */\r
+  __I  uint32_t RTC_IMR;              /**< \brief (Rtc Offset: 0x28) Interrupt Mask Register */\r
+  __I  uint32_t RTC_VER;              /**< \brief (Rtc Offset: 0x2C) Valid Entry Register */\r
+  __I  uint32_t Reserved1[32];\r
+       RtcTs    RTC_TS[RTCTS_NUMBER]; /**< \brief (Rtc Offset: 0xB0) 0 .. 1 */\r
+} Rtc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- RTC_CR : (RTC Offset: 0x00) Control Register -------- */\r
+#define RTC_CR_UPDTIM (0x1u << 0) /**< \brief (RTC_CR) Update Request Time Register */\r
+#define RTC_CR_UPDCAL (0x1u << 1) /**< \brief (RTC_CR) Update Request Calendar Register */\r
+#define RTC_CR_TIMEVSEL_Pos 8\r
+#define RTC_CR_TIMEVSEL_Msk (0x3u << RTC_CR_TIMEVSEL_Pos) /**< \brief (RTC_CR) Time Event Selection */\r
+#define   RTC_CR_TIMEVSEL_MINUTE (0x0u << 8) /**< \brief (RTC_CR) Minute change */\r
+#define   RTC_CR_TIMEVSEL_HOUR (0x1u << 8) /**< \brief (RTC_CR) Hour change */\r
+#define   RTC_CR_TIMEVSEL_MIDNIGHT (0x2u << 8) /**< \brief (RTC_CR) Every day at midnight */\r
+#define   RTC_CR_TIMEVSEL_NOON (0x3u << 8) /**< \brief (RTC_CR) Every day at noon */\r
+#define RTC_CR_CALEVSEL_Pos 16\r
+#define RTC_CR_CALEVSEL_Msk (0x3u << RTC_CR_CALEVSEL_Pos) /**< \brief (RTC_CR) Calendar Event Selection */\r
+#define   RTC_CR_CALEVSEL_WEEK (0x0u << 16) /**< \brief (RTC_CR) Week change (every Monday at time 00:00:00) */\r
+#define   RTC_CR_CALEVSEL_MONTH (0x1u << 16) /**< \brief (RTC_CR) Month change (every 01 of each month at time 00:00:00) */\r
+#define   RTC_CR_CALEVSEL_YEAR (0x2u << 16) /**< \brief (RTC_CR) Year change (every January 1 at time 00:00:00) */\r
+/* -------- RTC_MR : (RTC Offset: 0x04) Mode Register -------- */\r
+#define RTC_MR_HRMOD (0x1u << 0) /**< \brief (RTC_MR) 12-/24-hour Mode */\r
+#define RTC_MR_PERSIAN (0x1u << 1) /**< \brief (RTC_MR) PERSIAN Calendar */\r
+#define RTC_MR_NEGPPM (0x1u << 4) /**< \brief (RTC_MR) NEGative PPM Correction */\r
+#define RTC_MR_CORRECTION_Pos 8\r
+#define RTC_MR_CORRECTION_Msk (0x7fu << RTC_MR_CORRECTION_Pos) /**< \brief (RTC_MR) Slow Clock Correction */\r
+#define RTC_MR_CORRECTION(value) ((RTC_MR_CORRECTION_Msk & ((value) << RTC_MR_CORRECTION_Pos)))\r
+#define RTC_MR_HIGHPPM (0x1u << 15) /**< \brief (RTC_MR) HIGH PPM Correction */\r
+/* -------- RTC_TIMR : (RTC Offset: 0x08) Time Register -------- */\r
+#define RTC_TIMR_SEC_Pos 0\r
+#define RTC_TIMR_SEC_Msk (0x7fu << RTC_TIMR_SEC_Pos) /**< \brief (RTC_TIMR) Current Second */\r
+#define RTC_TIMR_SEC(value) ((RTC_TIMR_SEC_Msk & ((value) << RTC_TIMR_SEC_Pos)))\r
+#define RTC_TIMR_MIN_Pos 8\r
+#define RTC_TIMR_MIN_Msk (0x7fu << RTC_TIMR_MIN_Pos) /**< \brief (RTC_TIMR) Current Minute */\r
+#define RTC_TIMR_MIN(value) ((RTC_TIMR_MIN_Msk & ((value) << RTC_TIMR_MIN_Pos)))\r
+#define RTC_TIMR_HOUR_Pos 16\r
+#define RTC_TIMR_HOUR_Msk (0x3fu << RTC_TIMR_HOUR_Pos) /**< \brief (RTC_TIMR) Current Hour */\r
+#define RTC_TIMR_HOUR(value) ((RTC_TIMR_HOUR_Msk & ((value) << RTC_TIMR_HOUR_Pos)))\r
+#define RTC_TIMR_AMPM (0x1u << 22) /**< \brief (RTC_TIMR) Ante Meridiem Post Meridiem Indicator */\r
+/* -------- RTC_CALR : (RTC Offset: 0x0C) Calendar Register -------- */\r
+#define RTC_CALR_CENT_Pos 0\r
+#define RTC_CALR_CENT_Msk (0x7fu << RTC_CALR_CENT_Pos) /**< \brief (RTC_CALR) Current Century */\r
+#define RTC_CALR_CENT(value) ((RTC_CALR_CENT_Msk & ((value) << RTC_CALR_CENT_Pos)))\r
+#define RTC_CALR_YEAR_Pos 8\r
+#define RTC_CALR_YEAR_Msk (0xffu << RTC_CALR_YEAR_Pos) /**< \brief (RTC_CALR) Current Year */\r
+#define RTC_CALR_YEAR(value) ((RTC_CALR_YEAR_Msk & ((value) << RTC_CALR_YEAR_Pos)))\r
+#define RTC_CALR_MONTH_Pos 16\r
+#define RTC_CALR_MONTH_Msk (0x1fu << RTC_CALR_MONTH_Pos) /**< \brief (RTC_CALR) Current Month */\r
+#define RTC_CALR_MONTH(value) ((RTC_CALR_MONTH_Msk & ((value) << RTC_CALR_MONTH_Pos)))\r
+#define RTC_CALR_DAY_Pos 21\r
+#define RTC_CALR_DAY_Msk (0x7u << RTC_CALR_DAY_Pos) /**< \brief (RTC_CALR) Current Day in Current Week */\r
+#define RTC_CALR_DAY(value) ((RTC_CALR_DAY_Msk & ((value) << RTC_CALR_DAY_Pos)))\r
+#define RTC_CALR_DATE_Pos 24\r
+#define RTC_CALR_DATE_Msk (0x3fu << RTC_CALR_DATE_Pos) /**< \brief (RTC_CALR) Current Day in Current Month */\r
+#define RTC_CALR_DATE(value) ((RTC_CALR_DATE_Msk & ((value) << RTC_CALR_DATE_Pos)))\r
+/* -------- RTC_TIMALR : (RTC Offset: 0x10) Time Alarm Register -------- */\r
+#define RTC_TIMALR_SEC_Pos 0\r
+#define RTC_TIMALR_SEC_Msk (0x7fu << RTC_TIMALR_SEC_Pos) /**< \brief (RTC_TIMALR) Second Alarm */\r
+#define RTC_TIMALR_SEC(value) ((RTC_TIMALR_SEC_Msk & ((value) << RTC_TIMALR_SEC_Pos)))\r
+#define RTC_TIMALR_SECEN (0x1u << 7) /**< \brief (RTC_TIMALR) Second Alarm Enable */\r
+#define RTC_TIMALR_MIN_Pos 8\r
+#define RTC_TIMALR_MIN_Msk (0x7fu << RTC_TIMALR_MIN_Pos) /**< \brief (RTC_TIMALR) Minute Alarm */\r
+#define RTC_TIMALR_MIN(value) ((RTC_TIMALR_MIN_Msk & ((value) << RTC_TIMALR_MIN_Pos)))\r
+#define RTC_TIMALR_MINEN (0x1u << 15) /**< \brief (RTC_TIMALR) Minute Alarm Enable */\r
+#define RTC_TIMALR_HOUR_Pos 16\r
+#define RTC_TIMALR_HOUR_Msk (0x3fu << RTC_TIMALR_HOUR_Pos) /**< \brief (RTC_TIMALR) Hour Alarm */\r
+#define RTC_TIMALR_HOUR(value) ((RTC_TIMALR_HOUR_Msk & ((value) << RTC_TIMALR_HOUR_Pos)))\r
+#define RTC_TIMALR_AMPM (0x1u << 22) /**< \brief (RTC_TIMALR) AM/PM Indicator */\r
+#define RTC_TIMALR_HOUREN (0x1u << 23) /**< \brief (RTC_TIMALR) Hour Alarm Enable */\r
+/* -------- RTC_CALALR : (RTC Offset: 0x14) Calendar Alarm Register -------- */\r
+#define RTC_CALALR_MONTH_Pos 16\r
+#define RTC_CALALR_MONTH_Msk (0x1fu << RTC_CALALR_MONTH_Pos) /**< \brief (RTC_CALALR) Month Alarm */\r
+#define RTC_CALALR_MONTH(value) ((RTC_CALALR_MONTH_Msk & ((value) << RTC_CALALR_MONTH_Pos)))\r
+#define RTC_CALALR_MTHEN (0x1u << 23) /**< \brief (RTC_CALALR) Month Alarm Enable */\r
+#define RTC_CALALR_DATE_Pos 24\r
+#define RTC_CALALR_DATE_Msk (0x3fu << RTC_CALALR_DATE_Pos) /**< \brief (RTC_CALALR) Date Alarm */\r
+#define RTC_CALALR_DATE(value) ((RTC_CALALR_DATE_Msk & ((value) << RTC_CALALR_DATE_Pos)))\r
+#define RTC_CALALR_DATEEN (0x1u << 31) /**< \brief (RTC_CALALR) Date Alarm Enable */\r
+/* -------- RTC_SR : (RTC Offset: 0x18) Status Register -------- */\r
+#define RTC_SR_ACKUPD (0x1u << 0) /**< \brief (RTC_SR) Acknowledge for Update */\r
+#define   RTC_SR_ACKUPD_FREERUN (0x0u << 0) /**< \brief (RTC_SR) Time and calendar registers cannot be updated. */\r
+#define   RTC_SR_ACKUPD_UPDATE (0x1u << 0) /**< \brief (RTC_SR) Time and calendar registers can be updated. */\r
+#define RTC_SR_ALARM (0x1u << 1) /**< \brief (RTC_SR) Alarm Flag */\r
+#define   RTC_SR_ALARM_NO_ALARMEVENT (0x0u << 1) /**< \brief (RTC_SR) No alarm matching condition occurred. */\r
+#define   RTC_SR_ALARM_ALARMEVENT (0x1u << 1) /**< \brief (RTC_SR) An alarm matching condition has occurred. */\r
+#define RTC_SR_SEC (0x1u << 2) /**< \brief (RTC_SR) Second Event */\r
+#define   RTC_SR_SEC_NO_SECEVENT (0x0u << 2) /**< \brief (RTC_SR) No second event has occurred since the last clear. */\r
+#define   RTC_SR_SEC_SECEVENT (0x1u << 2) /**< \brief (RTC_SR) At least one second event has occurred since the last clear. */\r
+#define RTC_SR_TIMEV (0x1u << 3) /**< \brief (RTC_SR) Time Event */\r
+#define   RTC_SR_TIMEV_NO_TIMEVENT (0x0u << 3) /**< \brief (RTC_SR) No time event has occurred since the last clear. */\r
+#define   RTC_SR_TIMEV_TIMEVENT (0x1u << 3) /**< \brief (RTC_SR) At least one time event has occurred since the last clear. */\r
+#define RTC_SR_CALEV (0x1u << 4) /**< \brief (RTC_SR) Calendar Event */\r
+#define   RTC_SR_CALEV_NO_CALEVENT (0x0u << 4) /**< \brief (RTC_SR) No calendar event has occurred since the last clear. */\r
+#define   RTC_SR_CALEV_CALEVENT (0x1u << 4) /**< \brief (RTC_SR) At least one calendar event has occurred since the last clear. */\r
+#define RTC_SR_TDERR (0x1u << 5) /**< \brief (RTC_SR) Time and/or Date Free Running Error */\r
+#define   RTC_SR_TDERR_CORRECT (0x0u << 5) /**< \brief (RTC_SR) The internal free running counters are carrying valid values since the last read of RTC_SR. */\r
+#define   RTC_SR_TDERR_ERR_TIMEDATE (0x1u << 5) /**< \brief (RTC_SR) The internal free running counters have been corrupted (invalid date or time, non-BCD values) since the last read and/or they are still invalid. */\r
+/* -------- RTC_SCCR : (RTC Offset: 0x1C) Status Clear Command Register -------- */\r
+#define RTC_SCCR_ACKCLR (0x1u << 0) /**< \brief (RTC_SCCR) Acknowledge Clear */\r
+#define RTC_SCCR_ALRCLR (0x1u << 1) /**< \brief (RTC_SCCR) Alarm Clear */\r
+#define RTC_SCCR_SECCLR (0x1u << 2) /**< \brief (RTC_SCCR) Second Clear */\r
+#define RTC_SCCR_TIMCLR (0x1u << 3) /**< \brief (RTC_SCCR) Time Clear */\r
+#define RTC_SCCR_CALCLR (0x1u << 4) /**< \brief (RTC_SCCR) Calendar Clear */\r
+#define RTC_SCCR_TDERRCLR (0x1u << 5) /**< \brief (RTC_SCCR) Time and/or Date Free Running Error Clear */\r
+/* -------- RTC_IER : (RTC Offset: 0x20) Interrupt Enable Register -------- */\r
+#define RTC_IER_ACKEN (0x1u << 0) /**< \brief (RTC_IER) Acknowledge Update Interrupt Enable */\r
+#define RTC_IER_ALREN (0x1u << 1) /**< \brief (RTC_IER) Alarm Interrupt Enable */\r
+#define RTC_IER_SECEN (0x1u << 2) /**< \brief (RTC_IER) Second Event Interrupt Enable */\r
+#define RTC_IER_TIMEN (0x1u << 3) /**< \brief (RTC_IER) Time Event Interrupt Enable */\r
+#define RTC_IER_CALEN (0x1u << 4) /**< \brief (RTC_IER) Calendar Event Interrupt Enable */\r
+#define RTC_IER_TDERREN (0x1u << 5) /**< \brief (RTC_IER) Time and/or Date Error Interrupt Enable */\r
+/* -------- RTC_IDR : (RTC Offset: 0x24) Interrupt Disable Register -------- */\r
+#define RTC_IDR_ACKDIS (0x1u << 0) /**< \brief (RTC_IDR) Acknowledge Update Interrupt Disable */\r
+#define RTC_IDR_ALRDIS (0x1u << 1) /**< \brief (RTC_IDR) Alarm Interrupt Disable */\r
+#define RTC_IDR_SECDIS (0x1u << 2) /**< \brief (RTC_IDR) Second Event Interrupt Disable */\r
+#define RTC_IDR_TIMDIS (0x1u << 3) /**< \brief (RTC_IDR) Time Event Interrupt Disable */\r
+#define RTC_IDR_CALDIS (0x1u << 4) /**< \brief (RTC_IDR) Calendar Event Interrupt Disable */\r
+#define RTC_IDR_TDERRDIS (0x1u << 5) /**< \brief (RTC_IDR) Time and/or Date Error Interrupt Disable */\r
+/* -------- RTC_IMR : (RTC Offset: 0x28) Interrupt Mask Register -------- */\r
+#define RTC_IMR_ACK (0x1u << 0) /**< \brief (RTC_IMR) Acknowledge Update Interrupt Mask */\r
+#define RTC_IMR_ALR (0x1u << 1) /**< \brief (RTC_IMR) Alarm Interrupt Mask */\r
+#define RTC_IMR_SEC (0x1u << 2) /**< \brief (RTC_IMR) Second Event Interrupt Mask */\r
+#define RTC_IMR_TIM (0x1u << 3) /**< \brief (RTC_IMR) Time Event Interrupt Mask */\r
+#define RTC_IMR_CAL (0x1u << 4) /**< \brief (RTC_IMR) Calendar Event Interrupt Mask */\r
+/* -------- RTC_VER : (RTC Offset: 0x2C) Valid Entry Register -------- */\r
+#define RTC_VER_NVTIM (0x1u << 0) /**< \brief (RTC_VER) Non-valid Time */\r
+#define RTC_VER_NVCAL (0x1u << 1) /**< \brief (RTC_VER) Non-valid Calendar */\r
+#define RTC_VER_NVTIMALR (0x1u << 2) /**< \brief (RTC_VER) Non-valid Time Alarm */\r
+#define RTC_VER_NVCALALR (0x1u << 3) /**< \brief (RTC_VER) Non-valid Calendar Alarm */\r
+/* -------- RTC_TSTR : (RTC Offset: N/A) TimeStamp Time Register 0 -------- */\r
+#define RTC_TSTR_SEC_Pos 0\r
+#define RTC_TSTR_SEC_Msk (0x7fu << RTC_TSTR_SEC_Pos) /**< \brief (RTC_TSTR) SEConds of the tamper */\r
+#define RTC_TSTR_MIN_Pos 8\r
+#define RTC_TSTR_MIN_Msk (0x7fu << RTC_TSTR_MIN_Pos) /**< \brief (RTC_TSTR) MINutes of the tamper */\r
+#define RTC_TSTR_HOUR_Pos 16\r
+#define RTC_TSTR_HOUR_Msk (0x3fu << RTC_TSTR_HOUR_Pos) /**< \brief (RTC_TSTR) HOURs of the tamper */\r
+#define RTC_TSTR_AMPM (0x1u << 22) /**< \brief (RTC_TSTR) AMPM indicator of the tamper */\r
+#define RTC_TSTR_TEVCNT_Pos 24\r
+#define RTC_TSTR_TEVCNT_Msk (0xfu << RTC_TSTR_TEVCNT_Pos) /**< \brief (RTC_TSTR) Tamper events counter */\r
+#define RTC_TSTR_BACKUP (0x1u << 31) /**< \brief (RTC_TSTR) system mode of the tamper */\r
+/* -------- RTC_TSDR : (RTC Offset: N/A) TimeStamp Date Register 0 -------- */\r
+#define RTC_TSDR_CENT_Pos 0\r
+#define RTC_TSDR_CENT_Msk (0x7fu << RTC_TSDR_CENT_Pos) /**< \brief (RTC_TSDR) Century of the tamper */\r
+#define RTC_TSDR_YEAR_Pos 8\r
+#define RTC_TSDR_YEAR_Msk (0xffu << RTC_TSDR_YEAR_Pos) /**< \brief (RTC_TSDR) Year of the tamper */\r
+#define RTC_TSDR_MONTH_Pos 16\r
+#define RTC_TSDR_MONTH_Msk (0x1fu << RTC_TSDR_MONTH_Pos) /**< \brief (RTC_TSDR) Month of the tamper */\r
+#define RTC_TSDR_DAY_Pos 21\r
+#define RTC_TSDR_DAY_Msk (0x7u << RTC_TSDR_DAY_Pos) /**< \brief (RTC_TSDR) Day of the tamper */\r
+#define RTC_TSDR_DATE_Pos 24\r
+#define RTC_TSDR_DATE_Msk (0x3fu << RTC_TSDR_DATE_Pos) /**< \brief (RTC_TSDR) Date of the tamper */\r
+/* -------- RTC_TSSR : (RTC Offset: N/A) TimeStamp Source Register 0 -------- */\r
+#define RTC_TSSR_SHLDM (0x1u << 0) /**< \brief (RTC_TSSR) Shield Monitor */\r
+#define RTC_TSSR_DBLFM (0x1u << 1) /**< \brief (RTC_TSSR) Double Frequency Monitor */\r
+#define RTC_TSSR_TST (0x1u << 2) /**< \brief (RTC_TSSR) Test pin Monitor */\r
+#define RTC_TSSR_JTAG (0x1u << 3) /**< \brief (RTC_TSSR) JTAG pins Monitor */\r
+#define RTC_TSSR_REGUL (0x1u << 4) /**< \brief (RTC_TSSR) Core regulator disconnection Monitor */\r
+#define RTC_TSSR_MCKM (0x1u << 5) /**< \brief (RTC_TSSR) Master Clock Monitor */\r
+#define RTC_TSSR_TPML (0x1u << 6) /**< \brief (RTC_TSSR) Low Temperature Monitor */\r
+#define RTC_TSSR_TPMH (0x1u << 7) /**< \brief (RTC_TSSR) High Temperature Monitor */\r
+#define RTC_TSSR_VDDRL (0x1u << 8) /**< \brief (RTC_TSSR) Low VDDDDR Voltage Monitor */\r
+#define RTC_TSSR_VDDRH (0x1u << 9) /**< \brief (RTC_TSSR) High VDDDDR Voltage Monitor */\r
+#define RTC_TSSR_VDDBUL (0x1u << 10) /**< \brief (RTC_TSSR) Low VDDBU Voltage Monitor */\r
+#define RTC_TSSR_VDDBUH (0x1u << 11) /**< \brief (RTC_TSSR) High VDDBU Voltage Monitor */\r
+#define RTC_TSSR_VDDCOREL (0x1u << 12) /**< \brief (RTC_TSSR) Low VDDCORE Voltage Monitor */\r
+#define RTC_TSSR_VDDCOREH (0x1u << 13) /**< \brief (RTC_TSSR) High VDDCORE Voltage Monitor */\r
+#define RTC_TSSR_VDDIOL (0x1u << 14) /**< \brief (RTC_TSSR) Low VDDIO Voltage Monitor */\r
+#define RTC_TSSR_VDDIOH (0x1u << 15) /**< \brief (RTC_TSSR) High VDDIO Voltage Monitor */\r
+#define RTC_TSSR_DET0 (0x1u << 16) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET1 (0x1u << 17) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET2 (0x1u << 18) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET3 (0x1u << 19) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET4 (0x1u << 20) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET5 (0x1u << 21) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET6 (0x1u << 22) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET7 (0x1u << 23) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET8 (0x1u << 24) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET9 (0x1u << 25) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET10 (0x1u << 26) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET11 (0x1u << 27) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET12 (0x1u << 28) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET13 (0x1u << 29) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET14 (0x1u << 30) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+#define RTC_TSSR_DET15 (0x1u << 31) /**< \brief (RTC_TSSR) PIOBU Intrusion Detector */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Slow Clock Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SCKC Slow Clock Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Sckc hardware registers */\r
+typedef struct {\r
+  __IO uint32_t SCKC_CR; /**< \brief (Sckc Offset: 0x0) Slow Clock Configuration Register */\r
+} Sckc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SCKC_CR : (SCKC Offset: 0x0) Slow Clock Configuration Register -------- */\r
+#define SCKC_CR_OSCSEL (0x1u << 3) /**< \brief (SCKC_CR) Slow Clock Selector */\r
+#define   SCKC_CR_OSCSEL_RC (0x0u << 3) /**< \brief (SCKC_CR) Slow clock is internal 32 kHz RC oscillator. */\r
+#define   SCKC_CR_OSCSEL_XTAL (0x1u << 3) /**< \brief (SCKC_CR) Slow clock is 32768 Hz oscillator. */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Secure Fuse Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SFC Secure Fuse Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Sfc hardware registers */\r
+typedef struct {\r
+  __O  uint32_t SFC_KR;       /**< \brief (Sfc Offset: 0x00) SFC Key Register */\r
+  __IO uint32_t SFC_MR;       /**< \brief (Sfc Offset: 0X04) SFC Mode Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __IO uint32_t SFC_IER;      /**< \brief (Sfc Offset: 0x10) SFC Interrupt Enable Register */\r
+  __IO uint32_t SFC_IDR;      /**< \brief (Sfc Offset: 0x14) SFC Interrupt Disable Register */\r
+  __I  uint32_t SFC_IMR;      /**< \brief (Sfc Offset: 0x18) SFC Interrupt Mask Register */\r
+  __I  uint32_t SFC_SR;       /**< \brief (Sfc Offset: 0x1C) SFC Status Register */\r
+  __IO uint32_t SFC_DR[24];   /**< \brief (Sfc Offset: 0x20) SFC Data Register */\r
+} Sfc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SFC_KR : (SFC Offset: 0x00) SFC Key Register -------- */\r
+#define SFC_KR_KEY_Pos 0\r
+#define SFC_KR_KEY_Msk (0xffu << SFC_KR_KEY_Pos) /**< \brief (SFC_KR) Key Code */\r
+#define SFC_KR_KEY(value) ((SFC_KR_KEY_Msk & ((value) << SFC_KR_KEY_Pos)))\r
+/* -------- SFC_MR : (SFC Offset: 0X04) SFC Mode Register -------- */\r
+#define SFC_MR_MSK (0x1u << 0) /**< \brief (SFC_MR) Mask Data Registers */\r
+/* -------- SFC_IER : (SFC Offset: 0x10) SFC Interrupt Enable Register -------- */\r
+#define SFC_IER_PGMC (0x1u << 0) /**< \brief (SFC_IER) Programming Sequence Completed Interrupt Enable */\r
+#define SFC_IER_APLE (0x1u << 16) /**< \brief (SFC_IER) ATMEL Programming Lock Error Interrupt Enable */\r
+#define SFC_IER_ACE (0x1u << 17) /**< \brief (SFC_IER) ATMEL Check Error Interrupt Enable */\r
+/* -------- SFC_IDR : (SFC Offset: 0x14) SFC Interrupt Disable Register -------- */\r
+#define SFC_IDR_PGMC (0x1u << 0) /**< \brief (SFC_IDR) Programming Sequence Completed Interrupt Disable */\r
+#define SFC_IDR_APLE (0x1u << 16) /**< \brief (SFC_IDR) ATMEL Programming Lock Error Interrupt Disable */\r
+#define SFC_IDR_ACE (0x1u << 17) /**< \brief (SFC_IDR) ATMEL Check Error Interrupt Disable */\r
+/* -------- SFC_IMR : (SFC Offset: 0x18) SFC Interrupt Mask Register -------- */\r
+#define SFC_IMR_PGMC (0x1u << 0) /**< \brief (SFC_IMR) Programming Sequence Completed Interrupt Mask */\r
+#define SFC_IMR_APLE (0x1u << 16) /**< \brief (SFC_IMR) ATMEL Programming Lock Error Interrupt Mask */\r
+#define SFC_IMR_ACE (0x1u << 17) /**< \brief (SFC_IMR) ATMEL Check Error Interrupt Mask */\r
+/* -------- SFC_SR : (SFC Offset: 0x1C) SFC Status Register -------- */\r
+#define SFC_SR_PGMC (0x1u << 0) /**< \brief (SFC_SR) Programming Sequence Completed */\r
+#define SFC_SR_APLE (0x1u << 16) /**< \brief (SFC_SR) ATMEL Programming Lock Error */\r
+#define SFC_SR_ACE (0x1u << 17) /**< \brief (SFC_SR) ATMEL Check Error */\r
+/* -------- SFC_DR[24] : (SFC Offset: 0x20) SFC Data Register -------- */\r
+#define SFC_DR_DATA_Pos 0\r
+#define SFC_DR_DATA_Msk (0xffffffffu << SFC_DR_DATA_Pos) /**< \brief (SFC_DR[24]) Fuse Data */\r
+#define SFC_DR_DATA(value) ((SFC_DR_DATA_Msk & ((value) << SFC_DR_DATA_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Special Function Registers */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SFR Special Function Registers */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Sfr hardware registers */\r
+typedef struct {\r
+  __I  uint32_t Reserved1[4];\r
+  __IO uint32_t SFR_OHCIICR;  /**< \brief (Sfr Offset: 0x10) OHCI Interrupt Configuration Register */\r
+  __I  uint32_t SFR_OHCIISR;  /**< \brief (Sfr Offset: 0x14) OHCI Interrupt Status Register */\r
+  __I  uint32_t Reserved2[4];\r
+  __IO uint32_t SFR_SECURE;   /**< \brief (Sfr Offset: 0x28) Security Configuration Register */\r
+  __I  uint32_t Reserved3[5];\r
+  __IO uint32_t SFR_EBICFG;   /**< \brief (Sfr Offset: 0x40) EBI Configuration Register */\r
+  __I  uint32_t Reserved4[2];\r
+  __I  uint32_t SFR_SN0;      /**< \brief (Sfr Offset: 0x4C) Serial Number 0 Register */\r
+  __I  uint32_t SFR_SN1;      /**< \brief (Sfr Offset: 0x50) Seriel Number 1 Register */\r
+} Sfr;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SFR_OHCIICR : (SFR Offset: 0x10) OHCI Interrupt Configuration Register -------- */\r
+#define SFR_OHCIICR_RES0 (0x1u << 0) /**< \brief (SFR_OHCIICR) USB PORTx RESET */\r
+#define SFR_OHCIICR_RES1 (0x1u << 1) /**< \brief (SFR_OHCIICR) USB PORTx RESET */\r
+#define SFR_OHCIICR_RES2 (0x1u << 2) /**< \brief (SFR_OHCIICR) USB PORTx RESET */\r
+#define SFR_OHCIICR_ARIE (0x1u << 4) /**< \brief (SFR_OHCIICR) OHCI Asynchronous Resume Interrupt Enable */\r
+#define SFR_OHCIICR_APPSTART (0x1u << 5) /**< \brief (SFR_OHCIICR) Reserved */\r
+#define SFR_OHCIICR_UDPPUDIS (0x1u << 23) /**< \brief (SFR_OHCIICR) USB DEVICE PULL-UP DISABLE */\r
+/* -------- SFR_OHCIISR : (SFR Offset: 0x14) OHCI Interrupt Status Register -------- */\r
+#define SFR_OHCIISR_RIS0 (0x1u << 0) /**< \brief (SFR_OHCIISR) OHCI Resume Interrupt Status Port 0 */\r
+#define SFR_OHCIISR_RIS1 (0x1u << 1) /**< \brief (SFR_OHCIISR) OHCI Resume Interrupt Status Port 1 */\r
+#define SFR_OHCIISR_RIS2 (0x1u << 2) /**< \brief (SFR_OHCIISR) OHCI Resume Interrupt Status Port 2 */\r
+/* -------- SFR_SECURE : (SFR Offset: 0x28) Security Configuration Register -------- */\r
+#define SFR_SECURE_ROM (0x1u << 0) /**< \brief (SFR_SECURE) Disable Access to ROM Code */\r
+#define SFR_SECURE_FUSE (0x1u << 8) /**< \brief (SFR_SECURE) Disable Access to Fuse Controller */\r
+/* -------- SFR_EBICFG : (SFR Offset: 0x40) EBI Configuration Register -------- */\r
+#define SFR_EBICFG_DRIVE0_Pos 0\r
+#define SFR_EBICFG_DRIVE0_Msk (0x3u << SFR_EBICFG_DRIVE0_Pos) /**< \brief (SFR_EBICFG) EBI Pins Drive Level */\r
+#define   SFR_EBICFG_DRIVE0_LOW (0x0u << 0) /**< \brief (SFR_EBICFG) Low drive level */\r
+#define   SFR_EBICFG_DRIVE0_MEDIUM (0x2u << 0) /**< \brief (SFR_EBICFG) Medium drive level */\r
+#define   SFR_EBICFG_DRIVE0_HIGH (0x3u << 0) /**< \brief (SFR_EBICFG) High drive level */\r
+#define SFR_EBICFG_PULL0_Pos 2\r
+#define SFR_EBICFG_PULL0_Msk (0x3u << SFR_EBICFG_PULL0_Pos) /**< \brief (SFR_EBICFG) EBI Pins Pull Value */\r
+#define   SFR_EBICFG_PULL0_UP (0x0u << 2) /**< \brief (SFR_EBICFG) Pull-up */\r
+#define   SFR_EBICFG_PULL0_NONE (0x1u << 2) /**< \brief (SFR_EBICFG) No Pull */\r
+#define   SFR_EBICFG_PULL0_DOWN (0x3u << 2) /**< \brief (SFR_EBICFG) Pull-down */\r
+#define SFR_EBICFG_SCH0 (0x1u << 4) /**< \brief (SFR_EBICFG) EBI Pins Schmitt Trigger */\r
+#define SFR_EBICFG_DRIVE1_Pos 8\r
+#define SFR_EBICFG_DRIVE1_Msk (0x3u << SFR_EBICFG_DRIVE1_Pos) /**< \brief (SFR_EBICFG) EBI Pins Drive Level */\r
+#define   SFR_EBICFG_DRIVE1_LOW (0x0u << 8) /**< \brief (SFR_EBICFG) Low drive level */\r
+#define   SFR_EBICFG_DRIVE1_MEDIUM (0x2u << 8) /**< \brief (SFR_EBICFG) Medium drive level */\r
+#define   SFR_EBICFG_DRIVE1_HIGH (0x3u << 8) /**< \brief (SFR_EBICFG) High drive level */\r
+#define SFR_EBICFG_PULL1_Pos 10\r
+#define SFR_EBICFG_PULL1_Msk (0x3u << SFR_EBICFG_PULL1_Pos) /**< \brief (SFR_EBICFG) EBI Pins Pull Value */\r
+#define   SFR_EBICFG_PULL1_UP (0x0u << 10) /**< \brief (SFR_EBICFG) Pull-up */\r
+#define   SFR_EBICFG_PULL1_NONE (0x1u << 10) /**< \brief (SFR_EBICFG) No Pull */\r
+#define   SFR_EBICFG_PULL1_DOWN (0x3u << 10) /**< \brief (SFR_EBICFG) Pull-down */\r
+#define SFR_EBICFG_SCH1 (0x1u << 12) /**< \brief (SFR_EBICFG) EBI Pins Schmitt Trigger */\r
+#define SFR_EBICFG_BMS (0x1u << 16) /**< \brief (SFR_EBICFG) BMS Sampled Value (Read Only) */\r
+#define   SFR_EBICFG_BMS_ROM (0x0u << 16) /**< \brief (SFR_EBICFG) Boot on ROM. */\r
+#define   SFR_EBICFG_BMS_EBI (0x1u << 16) /**< \brief (SFR_EBICFG) Boot on EBI. */\r
+/* -------- SFR_SN0 : (SFR Offset: 0x4C) Serial Number 0 Register -------- */\r
+#define SFR_SN0_SN0_Pos 0\r
+#define SFR_SN0_SN0_Msk (0xffffffffu << SFR_SN0_SN0_Pos) /**< \brief (SFR_SN0) Serial Number 0 */\r
+/* -------- SFR_SN1 : (SFR Offset: 0x50) Seriel Number 1 Register -------- */\r
+#define SFR_SN1_SN1_Pos 0\r
+#define SFR_SN1_SN1_Msk (0xffffffu << SFR_SN1_SN1_Pos) /**< \brief (SFR_SN1) Serial Number 1 */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Secure Hash Algorithm */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SHA Secure Hash Algorithm */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Sha hardware registers */\r
+typedef struct {\r
+  __O  uint32_t SHA_CR;          /**< \brief (Sha Offset: 0x00) Control Register */\r
+  __IO uint32_t SHA_MR;          /**< \brief (Sha Offset: 0x04) Mode Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __O  uint32_t SHA_IER;         /**< \brief (Sha Offset: 0x10) Interrupt Enable Register */\r
+  __O  uint32_t SHA_IDR;         /**< \brief (Sha Offset: 0x14) Interrupt Disable Register */\r
+  __I  uint32_t SHA_IMR;         /**< \brief (Sha Offset: 0x18) Interrupt Mask Register */\r
+  __I  uint32_t SHA_ISR;         /**< \brief (Sha Offset: 0x1C) Interrupt Status Register */\r
+  __I  uint32_t Reserved2[8];\r
+  __O  uint32_t SHA_IDATAR[16];  /**< \brief (Sha Offset: 0x40) Input Data 0 Register */\r
+  __IO uint32_t SHA_IODATAR[16]; /**< \brief (Sha Offset: 0x80) Input/Output Data 0 Register */\r
+} Sha;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SHA_CR : (SHA Offset: 0x00) Control Register -------- */\r
+#define SHA_CR_START (0x1u << 0) /**< \brief (SHA_CR) Start Processing */\r
+#define SHA_CR_FIRST (0x1u << 4) /**< \brief (SHA_CR) First Block of a Message */\r
+#define SHA_CR_SWRST (0x1u << 8) /**< \brief (SHA_CR) Software Reset */\r
+/* -------- SHA_MR : (SHA Offset: 0x04) Mode Register -------- */\r
+#define SHA_MR_SMOD_Pos 0\r
+#define SHA_MR_SMOD_Msk (0x3u << SHA_MR_SMOD_Pos) /**< \brief (SHA_MR) Start Mode */\r
+#define   SHA_MR_SMOD_MANUAL_START (0x0u << 0) /**< \brief (SHA_MR) Manual Mode */\r
+#define   SHA_MR_SMOD_AUTO_START (0x1u << 0) /**< \brief (SHA_MR) Auto Mode */\r
+#define   SHA_MR_SMOD_IDATAR0_START (0x2u << 0) /**< \brief (SHA_MR) SHA_IDATAR0 access only Auto Mode */\r
+#define SHA_MR_PROCDLY (0x1u << 4) /**< \brief (SHA_MR) Processing Delay */\r
+#define   SHA_MR_PROCDLY_SHORTEST (0x0u << 4) /**< \brief (SHA_MR) SHA processing runtime is the shortest one */\r
+#define   SHA_MR_PROCDLY_LONGEST (0x1u << 4) /**< \brief (SHA_MR) SHA processing runtime is the longest one */\r
+#define SHA_MR_ALGO_Pos 8\r
+#define SHA_MR_ALGO_Msk (0x7u << SHA_MR_ALGO_Pos) /**< \brief (SHA_MR) SHA Algorithm. */\r
+#define   SHA_MR_ALGO_SHA1 (0x0u << 8) /**< \brief (SHA_MR) SHA1 algorithm processed */\r
+#define   SHA_MR_ALGO_SHA256 (0x1u << 8) /**< \brief (SHA_MR) SHA256 algorithm processed */\r
+#define   SHA_MR_ALGO_SHA384 (0x2u << 8) /**< \brief (SHA_MR) SHA384 algorithm processed */\r
+#define   SHA_MR_ALGO_SHA512 (0x3u << 8) /**< \brief (SHA_MR) SHA512 algorithm processed */\r
+#define   SHA_MR_ALGO_SHA224 (0x4u << 8) /**< \brief (SHA_MR) SHA224 algorithm processed */\r
+#define SHA_MR_DUALBUFF (0x1u << 16) /**< \brief (SHA_MR) Dual Input BUFFer */\r
+#define   SHA_MR_DUALBUFF_INACTIVE (0x0u << 16) /**< \brief (SHA_MR) SHA_IDATARx and SHA_IODATARx cannot be written during processing of previous block. */\r
+#define   SHA_MR_DUALBUFF_ACTIVE (0x1u << 16) /**< \brief (SHA_MR) SHA_IDATARx and SHA_IODATARx can be written during processing of previous block when SMOD=0x2. It speeds up the overall runtime of large files. */\r
+/* -------- SHA_IER : (SHA Offset: 0x10) Interrupt Enable Register -------- */\r
+#define SHA_IER_DATRDY (0x1u << 0) /**< \brief (SHA_IER) Data Ready Interrupt Enable */\r
+#define SHA_IER_URAD (0x1u << 8) /**< \brief (SHA_IER) Unspecified Register Access Detection Interrupt Enable */\r
+/* -------- SHA_IDR : (SHA Offset: 0x14) Interrupt Disable Register -------- */\r
+#define SHA_IDR_DATRDY (0x1u << 0) /**< \brief (SHA_IDR) Data Ready Interrupt Disable */\r
+#define SHA_IDR_URAD (0x1u << 8) /**< \brief (SHA_IDR) Unspecified Register Access Detection Interrupt Disable */\r
+/* -------- SHA_IMR : (SHA Offset: 0x18) Interrupt Mask Register -------- */\r
+#define SHA_IMR_DATRDY (0x1u << 0) /**< \brief (SHA_IMR) Data Ready Interrupt Mask */\r
+#define SHA_IMR_URAD (0x1u << 8) /**< \brief (SHA_IMR) Unspecified Register Access Detection Interrupt Mask */\r
+/* -------- SHA_ISR : (SHA Offset: 0x1C) Interrupt Status Register -------- */\r
+#define SHA_ISR_DATRDY (0x1u << 0) /**< \brief (SHA_ISR) Data Ready */\r
+#define SHA_ISR_URAD (0x1u << 8) /**< \brief (SHA_ISR) Unspecified Register Access Detection Status */\r
+#define SHA_ISR_URAT_Pos 12\r
+#define SHA_ISR_URAT_Msk (0x7u << SHA_ISR_URAT_Pos) /**< \brief (SHA_ISR) Unspecified Register Access Type */\r
+/* -------- SHA_IDATAR[16] : (SHA Offset: 0x40) Input Data 0 Register -------- */\r
+#define SHA_IDATAR_IDATA_Pos 0\r
+#define SHA_IDATAR_IDATA_Msk (0xffffffffu << SHA_IDATAR_IDATA_Pos) /**< \brief (SHA_IDATAR[16]) Input Data */\r
+#define SHA_IDATAR_IDATA(value) ((SHA_IDATAR_IDATA_Msk & ((value) << SHA_IDATAR_IDATA_Pos)))\r
+/* -------- SHA_IODATAR[16] : (SHA Offset: 0x80) Input/Output Data 0 Register -------- */\r
+#define SHA_IODATAR_IODATA_Pos 0\r
+#define SHA_IODATAR_IODATA_Msk (0xffffffffu << SHA_IODATAR_IODATA_Pos) /**< \brief (SHA_IODATAR[16]) Input/Output Data */\r
+#define SHA_IODATAR_IODATA(value) ((SHA_IODATAR_IODATA_Msk & ((value) << SHA_IODATAR_IODATA_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Shutdown Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SHDWC Shutdown Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Shdwc hardware registers */\r
+typedef struct {\r
+  __O  uint32_t SHDW_CR; /**< \brief (Shdwc Offset: 0x00) Shutdown Control Register */\r
+  __IO uint32_t SHDW_MR; /**< \brief (Shdwc Offset: 0x04) Shutdown Mode Register */\r
+  __I  uint32_t SHDW_SR; /**< \brief (Shdwc Offset: 0x08) Shutdown Status Register */\r
+} Shdwc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SHDW_CR : (SHDWC Offset: 0x00) Shutdown Control Register -------- */\r
+#define SHDW_CR_SHDW (0x1u << 0) /**< \brief (SHDW_CR) Shutdown Command */\r
+#define SHDW_CR_KEY_Pos 24\r
+#define SHDW_CR_KEY_Msk (0xffu << SHDW_CR_KEY_Pos) /**< \brief (SHDW_CR) Password */\r
+#define SHDW_CR_KEY(value) ((SHDW_CR_KEY_Msk & ((value) << SHDW_CR_KEY_Pos)))\r
+/* -------- SHDW_MR : (SHDWC Offset: 0x04) Shutdown Mode Register -------- */\r
+#define SHDW_MR_WKMODE0_Pos 0\r
+#define SHDW_MR_WKMODE0_Msk (0x3u << SHDW_MR_WKMODE0_Pos) /**< \brief (SHDW_MR) Wake-up Mode 0 */\r
+#define   SHDW_MR_WKMODE0_NO_DETECTION (0x0u << 0) /**< \brief (SHDW_MR) No detection is performed on the wake-up input */\r
+#define   SHDW_MR_WKMODE0_RISING_EDGE (0x1u << 0) /**< \brief (SHDW_MR) Low to high transition triggers the detection process */\r
+#define   SHDW_MR_WKMODE0_FALLING_EDGE (0x2u << 0) /**< \brief (SHDW_MR) High to low level transition triggers the detection process */\r
+#define   SHDW_MR_WKMODE0_ANY_EDGE (0x3u << 0) /**< \brief (SHDW_MR) Any edge on the wake-up input triggers the detection process */\r
+#define SHDW_MR_CPTWK0_Pos 4\r
+#define SHDW_MR_CPTWK0_Msk (0xfu << SHDW_MR_CPTWK0_Pos) /**< \brief (SHDW_MR) Debounce Counter on Wake-up 0 */\r
+#define SHDW_MR_CPTWK0(value) ((SHDW_MR_CPTWK0_Msk & ((value) << SHDW_MR_CPTWK0_Pos)))\r
+#define SHDW_MR_WKMODE1_Pos 8\r
+#define SHDW_MR_WKMODE1_Msk (0x3u << SHDW_MR_WKMODE1_Pos) /**< \brief (SHDW_MR) Wake-up Mode 1 */\r
+#define   SHDW_MR_WKMODE1_NO_DETECTION (0x0u << 8) /**< \brief (SHDW_MR) No detection is performed on the wake-up input */\r
+#define   SHDW_MR_WKMODE1_RISING_EDGE (0x1u << 8) /**< \brief (SHDW_MR) Low to high transition triggers the detection process */\r
+#define   SHDW_MR_WKMODE1_FALLING_EDGE (0x2u << 8) /**< \brief (SHDW_MR) High to low level transition triggers the detection process */\r
+#define   SHDW_MR_WKMODE1_ANY_EDGE (0x3u << 8) /**< \brief (SHDW_MR) Any edge on the wake-up input triggers the detection process */\r
+#define SHDW_MR_CPTWK1_Pos 12\r
+#define SHDW_MR_CPTWK1_Msk (0xfu << SHDW_MR_CPTWK1_Pos) /**< \brief (SHDW_MR) Debounce Counter on Wake-up 1 */\r
+#define SHDW_MR_CPTWK1(value) ((SHDW_MR_CPTWK1_Msk & ((value) << SHDW_MR_CPTWK1_Pos)))\r
+#define SHDW_MR_RTCWKEN (0x1u << 17) /**< \brief (SHDW_MR) Real-time Clock Wake-up Enable */\r
+/* -------- SHDW_SR : (SHDWC Offset: 0x08) Shutdown Status Register -------- */\r
+#define SHDW_SR_WAKEUP0 (0x1u << 0) /**< \brief (SHDW_SR) Wake-up 0 Status */\r
+#define SHDW_SR_WAKEUP1 (0x1u << 1) /**< \brief (SHDW_SR) Wake-up 1 Status */\r
+#define SHDW_SR_RTCWK (0x1u << 17) /**< \brief (SHDW_SR) Real-time Clock Wake-up */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Software Modem Device */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SMD Software Modem Device */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Smd hardware registers */\r
+typedef struct {\r
+  __IO uint32_t SMD_CONTROL_POPR; /**< \brief (Smd Offset: 0x00) SMD Control or Pop Removal register */\r
+  __IO uint32_t SMD_STATUS_REV;   /**< \brief (Smd Offset: 0x04) SMD Status or Revision register */\r
+  __IO uint32_t SMD_WRAP;         /**< \brief (Smd Offset: 0x08) SMD Wrapper/Power register */\r
+  __IO uint32_t SMD_DRIVE;        /**< \brief (Smd Offset: 0x0C) SMD Drive register */\r
+  __IO uint32_t SMD_ADJ;          /**< \brief (Smd Offset: 0x10) SMD Adjustment register */\r
+  __IO uint32_t SMD_VOLC;         /**< \brief (Smd Offset: 0x14) SMD Volume Control register */\r
+  __IO uint32_t SMD_AUX;          /**< \brief (Smd Offset: 0x18) SMD Auxiliary Control register */\r
+  __IO uint32_t SMD_PULSE;        /**< \brief (Smd Offset: 0x1C) SMD Pulse Dialing Control register */\r
+  __IO uint32_t SMD_DATA1_LOW;    /**< \brief (Smd Offset: 0x20) SMD Data1 Lower Byte register */\r
+  __IO uint32_t SMD_DATA1_UP;     /**< \brief (Smd Offset: 0x24) SMD Data1 Upper Byte register */\r
+  __IO uint32_t SMD_CTRL1_LOW;    /**< \brief (Smd Offset: 0x28) SMD Control1 Lower Byte register */\r
+  __IO uint32_t SMD_CTRL1_UP;     /**< \brief (Smd Offset: 0x2C) SMD Control1 Upper Byte register */\r
+  __I  uint32_t SMD_DATA2_LOW;    /**< \brief (Smd Offset: 0x30) SMD Data2 Lower Byte register */\r
+  __I  uint32_t SMD_DATA2_UP;     /**< \brief (Smd Offset: 0x34) SMD Data2 Upper Byte register */\r
+  __I  uint32_t SMD_CTRL2;        /**< \brief (Smd Offset: 0x38) SMD Control2 register */\r
+  __IO uint32_t SMD_PARAM_TRIM;   /**< \brief (Smd Offset: 0x3C) SMD Parameter register (for pulse dialing / ring detection) */\r
+  __IO uint32_t SMD_FIFOCTRL;     /**< \brief (Smd Offset: 0x40) SMD FIFO Control register */\r
+  __IO uint32_t SMD_IRQ_LVL;      /**< \brief (Smd Offset: 0x44) SMD FIFO IRQ Level register */\r
+  __IO uint32_t SMD_LPWR_CLK_ENB; /**< \brief (Smd Offset: 0x48) SMD Low Power Clock Enable register */\r
+  __I  uint32_t Reserved1[1];\r
+  __O  uint32_t SMD_TXDATA_FIFO;  /**< \brief (Smd Offset: 0x50) SMD Transmit Data FIFO */\r
+  __I  uint32_t SMD_RXDATA_FIFO;  /**< \brief (Smd Offset: 0x54) SMD Receive Data FIFO */\r
+} Smd;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SMD_CONTROL_POPR : (SMD Offset: 0x00) SMD Control or Pop Removal register -------- */\r
+#define SMD_CONTROL_POPR_SD_DMAEOE (0x1u << 0) /**< \brief (SMD_CONTROL_POPR) SMD Serializer/Deserializer and DMA Engine Operation Enable. */\r
+#define SMD_CONTROL_POPR_PCGE (0x1u << 1) /**< \brief (SMD_CONTROL_POPR) SMD Power Clock Generation Enable. */\r
+#define SMD_CONTROL_POPR_PE_CTRL2_IE (0x1u << 2) /**< \brief (SMD_CONTROL_POPR) PE_CTRL2 Interrupt Enable. */\r
+#define SMD_CONTROL_POPR_CDSTDIB_IE (0x1u << 3) /**< \brief (SMD_CONTROL_POPR) CDSTDIB Interrupt Enable. */\r
+#define SMD_CONTROL_POPR_RXFIFO_OV_IE (0x1u << 4) /**< \brief (SMD_CONTROL_POPR) RXFIFO_OVER Interrupt Enable. */\r
+#define SMD_CONTROL_POPR_TXFIFO_UN_IE (0x1u << 5) /**< \brief (SMD_CONTROL_POPR) TXFIFO_UNDER Interrupt Enable. */\r
+#define SMD_CONTROL_POPR_RXFIFO_NE_IE (0x1u << 6) /**< \brief (SMD_CONTROL_POPR) RXFIFO_NE Interrupt Enable. */\r
+#define SMD_CONTROL_POPR_TXFIFO_NF_IE (0x1u << 7) /**< \brief (SMD_CONTROL_POPR) TXFIFO_NF Interrupt Enable. */\r
+#define SMD_CONTROL_POPR_POP_REM_Pos 0\r
+#define SMD_CONTROL_POPR_POP_REM_Msk (0xffu << SMD_CONTROL_POPR_POP_REM_Pos) /**< \brief (SMD_CONTROL_POPR) SMD Pop Removal Register */\r
+#define SMD_CONTROL_POPR_POP_REM(value) ((SMD_CONTROL_POPR_POP_REM_Msk & ((value) << SMD_CONTROL_POPR_POP_REM_Pos)))\r
+/* -------- SMD_STATUS_REV : (SMD Offset: 0x04) SMD Status or Revision register -------- */\r
+#define SMD_STATUS_REV_MADCVS (0x1u << 0) /**< \brief (SMD_STATUS_REV) SMD Monitoring ADC Value Stored in SMD_CTRL2. */\r
+#define SMD_STATUS_REV_DTCADIBI (0x1u << 1) /**< \brief (SMD_STATUS_REV) SMD Data Transfer Completed Across DIB Interface. */\r
+#define SMD_STATUS_REV_PE_CTRL2 (0x1u << 2) /**< \brief (SMD_STATUS_REV) SMD Parity Error in CTRL2. */\r
+#define SMD_STATUS_REV_CDSTDIB (0x1u << 3) /**< \brief (SMD_STATUS_REV) SMD Control Data Sent Through DIB. */\r
+#define SMD_STATUS_REV_RXFIFO_OV (0x1u << 4) /**< \brief (SMD_STATUS_REV) SMD RX FIFO Overflow. */\r
+#define SMD_STATUS_REV_TXFIFO_UN (0x1u << 5) /**< \brief (SMD_STATUS_REV) SMD TX FIFO Underflow. */\r
+#define SMD_STATUS_REV_RXFIFO_NE (0x1u << 6) /**< \brief (SMD_STATUS_REV) SMD RX FIFO Not Empty. */\r
+#define SMD_STATUS_REV_TXFIFO_NF (0x1u << 7) /**< \brief (SMD_STATUS_REV) SMD TX FIFO Not Full. */\r
+#define SMD_STATUS_REV_REVISION_Pos 0\r
+#define SMD_STATUS_REV_REVISION_Msk (0xffu << SMD_STATUS_REV_REVISION_Pos) /**< \brief (SMD_STATUS_REV) SMD Revision Register */\r
+#define SMD_STATUS_REV_REVISION(value) ((SMD_STATUS_REV_REVISION_Msk & ((value) << SMD_STATUS_REV_REVISION_Pos)))\r
+/* -------- SMD_WRAP : (SMD Offset: 0x08) SMD Wrapper/Power register -------- */\r
+#define SMD_WRAP_NFB_Pos 0\r
+#define SMD_WRAP_NFB_Msk (0x3u << SMD_WRAP_NFB_Pos) /**< \brief (SMD_WRAP) SMD Number of Frame Bits. */\r
+#define SMD_WRAP_NFB(value) ((SMD_WRAP_NFB_Msk & ((value) << SMD_WRAP_NFB_Pos)))\r
+#define SMD_WRAP_PS_Pos 2\r
+#define SMD_WRAP_PS_Msk (0x3fu << SMD_WRAP_PS_Pos) /**< \brief (SMD_WRAP) SMD Power Settings. */\r
+#define SMD_WRAP_PS(value) ((SMD_WRAP_PS_Msk & ((value) << SMD_WRAP_PS_Pos)))\r
+/* -------- SMD_DRIVE : (SMD Offset: 0x0C) SMD Drive register -------- */\r
+#define SMD_DRIVE_MIE (0x1u << 0) /**< \brief (SMD_DRIVE) MADCVS Interrupt Enable. */\r
+#define SMD_DRIVE_DC_PWRCLKPN (0x1u << 1) /**< \brief (SMD_DRIVE) Direct Control of PWRCLKP, PWRCLKN Pins Enable. */\r
+#define SMD_DRIVE_PWRCLKP_PV2 (0x1u << 2) /**< \brief (SMD_DRIVE) PWRCLKP Pin Value. */\r
+#define SMD_DRIVE_PWRCLKP_PV (0x1u << 3) /**< \brief (SMD_DRIVE) PWRCLKP Pin Value. */\r
+#define SMD_DRIVE_PWRCLKN_PCS2_Pos 4\r
+#define SMD_DRIVE_PWRCLKN_PCS2_Msk (0x3u << SMD_DRIVE_PWRCLKN_PCS2_Pos) /**< \brief (SMD_DRIVE) PWRCLKN Pin Control Select. */\r
+#define SMD_DRIVE_PWRCLKN_PCS2(value) ((SMD_DRIVE_PWRCLKN_PCS2_Msk & ((value) << SMD_DRIVE_PWRCLKN_PCS2_Pos)))\r
+#define SMD_DRIVE_PWRCLKP_PCS_Pos 6\r
+#define SMD_DRIVE_PWRCLKP_PCS_Msk (0x3u << SMD_DRIVE_PWRCLKP_PCS_Pos) /**< \brief (SMD_DRIVE) PWRCLKP Pin Control Select. */\r
+#define SMD_DRIVE_PWRCLKP_PCS(value) ((SMD_DRIVE_PWRCLKP_PCS_Msk & ((value) << SMD_DRIVE_PWRCLKP_PCS_Pos)))\r
+/* -------- SMD_ADJ : (SMD Offset: 0x10) SMD Adjustment register -------- */\r
+#define SMD_ADJ_RSAS_Pos 0\r
+#define SMD_ADJ_RSAS_Msk (0x3u << SMD_ADJ_RSAS_Pos) /**< \brief (SMD_ADJ) Register Synchronization Adjust Select. */\r
+#define SMD_ADJ_RSAS(value) ((SMD_ADJ_RSAS_Msk & ((value) << SMD_ADJ_RSAS_Pos)))\r
+#define SMD_ADJ_DCOE (0x1u << 2) /**< \brief (SMD_ADJ) Data Channel Operation Enable. */\r
+#define SMD_ADJ_PCFDS (0x1u << 3) /**< \brief (SMD_ADJ) Power Clock Frequency Derivation Select. */\r
+#define SMD_ADJ_PWM_ADJ_PWRCLK_Pos 4\r
+#define SMD_ADJ_PWM_ADJ_PWRCLK_Msk (0x3u << SMD_ADJ_PWM_ADJ_PWRCLK_Pos) /**< \brief (SMD_ADJ) PWM Adjust for PWRCLK. */\r
+#define SMD_ADJ_PWM_ADJ_PWRCLK(value) ((SMD_ADJ_PWM_ADJ_PWRCLK_Msk & ((value) << SMD_ADJ_PWM_ADJ_PWRCLK_Pos)))\r
+#define SMD_ADJ_ALOS (0x1u << 6) /**< \brief (SMD_ADJ) Address Location Offset Select. */\r
+#define SMD_ADJ_PWRCLKPN_FS (0x1u << 7) /**< \brief (SMD_ADJ) PWRCLKP and PWRCLKN Function Swap. */\r
+/* -------- SMD_VOLC : (SMD Offset: 0x14) SMD Volume Control register -------- */\r
+#define SMD_VOLC_DSVC_Pos 0\r
+#define SMD_VOLC_DSVC_Msk (0x7u << SMD_VOLC_DSVC_Pos) /**< \brief (SMD_VOLC) Digital Speaker Volume Control. */\r
+#define SMD_VOLC_DSVC(value) ((SMD_VOLC_DSVC_Msk & ((value) << SMD_VOLC_DSVC_Pos)))\r
+#define SMD_VOLC_DSSC_Pos 3\r
+#define SMD_VOLC_DSSC_Msk (0x3u << SMD_VOLC_DSSC_Pos) /**< \brief (SMD_VOLC) Digital Speaker Source Control. */\r
+#define SMD_VOLC_DSSC(value) ((SMD_VOLC_DSSC_Msk & ((value) << SMD_VOLC_DSSC_Pos)))\r
+#define SMD_VOLC_DSPDC (0x1u << 5) /**< \brief (SMD_VOLC) Digital Speaker Pin Drive Control. */\r
+#define SMD_VOLC_DSOC_Pos 6\r
+#define SMD_VOLC_DSOC_Msk (0x3u << SMD_VOLC_DSOC_Pos) /**< \brief (SMD_VOLC) Digital Speaker Output Control. */\r
+#define SMD_VOLC_DSOC(value) ((SMD_VOLC_DSOC_Msk & ((value) << SMD_VOLC_DSOC_Pos)))\r
+/* -------- SMD_AUX : (SMD Offset: 0x18) SMD Auxiliary Control register -------- */\r
+#define SMD_AUX_DMA_AE (0x1u << 0) /**< \brief (SMD_AUX) DMA Access Enable. */\r
+#define SMD_AUX_RDSME (0x1u << 1) /**< \brief (SMD_AUX) Ring Detection State Machine Enable. */\r
+#define SMD_AUX_RDWUE (0x1u << 2) /**< \brief (SMD_AUX) Ring Detect Wake Up Enable. */\r
+#define SMD_AUX_RDIE (0x1u << 3) /**< \brief (SMD_AUX) RD Interrupt Enable. */\r
+#define SMD_AUX_EPWUE (0x1u << 4) /**< \brief (SMD_AUX) Extension Pickup Wake Up Enable. */\r
+#define SMD_AUX_EHPDIE (0x1u << 5) /**< \brief (SMD_AUX) EHPD Interrupt Enable. */\r
+#define SMD_AUX_RD (0x1u << 6) /**< \brief (SMD_AUX) Ring Detected. */\r
+#define SMD_AUX_EHPD (0x1u << 7) /**< \brief (SMD_AUX) Extension Handset Pickup Detected. */\r
+/* -------- SMD_PULSE : (SMD Offset: 0x1C) SMD Pulse Dialing Control register -------- */\r
+#define SMD_PULSE_NDP_Pos 0\r
+#define SMD_PULSE_NDP_Msk (0xfu << SMD_PULSE_NDP_Pos) /**< \brief (SMD_PULSE) Number of Dialing Pulses. */\r
+#define SMD_PULSE_NDP(value) ((SMD_PULSE_NDP_Msk & ((value) << SMD_PULSE_NDP_Pos)))\r
+#define SMD_PULSE_PDF_IE (0x1u << 4) /**< \brief (SMD_PULSE) PDF Interrupt Enable. */\r
+#define SMD_PULSE_PDCS_IE (0x1u << 5) /**< \brief (SMD_PULSE) PDCS Interrupt Enable. */\r
+#define SMD_PULSE_PDF (0x1u << 6) /**< \brief (SMD_PULSE) Pulse Dialing Failed. */\r
+#define SMD_PULSE_PDCS (0x1u << 7) /**< \brief (SMD_PULSE) Pulse Dialing Completed Successfully. */\r
+/* -------- SMD_DATA1_LOW : (SMD Offset: 0x20) SMD Data1 Lower Byte register -------- */\r
+#define SMD_DATA1_LOW_TXFIFO_LB_Pos 0\r
+#define SMD_DATA1_LOW_TXFIFO_LB_Msk (0xffu << SMD_DATA1_LOW_TXFIFO_LB_Pos) /**< \brief (SMD_DATA1_LOW) TX FIFO Lower Byte */\r
+#define SMD_DATA1_LOW_TXFIFO_LB(value) ((SMD_DATA1_LOW_TXFIFO_LB_Msk & ((value) << SMD_DATA1_LOW_TXFIFO_LB_Pos)))\r
+/* -------- SMD_DATA1_UP : (SMD Offset: 0x24) SMD Data1 Upper Byte register -------- */\r
+#define SMD_DATA1_UP_TXFIFO_UB_Pos 0\r
+#define SMD_DATA1_UP_TXFIFO_UB_Msk (0xffu << SMD_DATA1_UP_TXFIFO_UB_Pos) /**< \brief (SMD_DATA1_UP) TX FIFO Upper Byte. */\r
+#define SMD_DATA1_UP_TXFIFO_UB(value) ((SMD_DATA1_UP_TXFIFO_UB_Msk & ((value) << SMD_DATA1_UP_TXFIFO_UB_Pos)))\r
+/* -------- SMD_CTRL1_LOW : (SMD Offset: 0x28) SMD Control1 Lower Byte register -------- */\r
+#define SMD_CTRL1_LOW_CCC_LB_Pos 0\r
+#define SMD_CTRL1_LOW_CCC_LB_Msk (0xffu << SMD_CTRL1_LOW_CCC_LB_Pos) /**< \brief (SMD_CTRL1_LOW) Control Channel Command Lower Byte. */\r
+#define SMD_CTRL1_LOW_CCC_LB(value) ((SMD_CTRL1_LOW_CCC_LB_Msk & ((value) << SMD_CTRL1_LOW_CCC_LB_Pos)))\r
+/* -------- SMD_CTRL1_UP : (SMD Offset: 0x2C) SMD Control1 Upper Byte register -------- */\r
+#define SMD_CTRL1_UP_CCC_UB_Pos 0\r
+#define SMD_CTRL1_UP_CCC_UB_Msk (0x7fu << SMD_CTRL1_UP_CCC_UB_Pos) /**< \brief (SMD_CTRL1_UP) Control Channel Command Upper Byte. */\r
+#define SMD_CTRL1_UP_CCC_UB(value) ((SMD_CTRL1_UP_CCC_UB_Msk & ((value) << SMD_CTRL1_UP_CCC_UB_Pos)))\r
+#define SMD_CTRL1_UP_CCC_RW (0x1u << 7) /**< \brief (SMD_CTRL1_UP) Control Channel Command Read-Write. */\r
+/* -------- SMD_DATA2_LOW : (SMD Offset: 0x30) SMD Data2 Lower Byte register -------- */\r
+#define SMD_DATA2_LOW_DATA2_LB_Pos 0\r
+#define SMD_DATA2_LOW_DATA2_LB_Msk (0xffu << SMD_DATA2_LOW_DATA2_LB_Pos) /**< \brief (SMD_DATA2_LOW) Data 2 Lower Byte. */\r
+/* -------- SMD_DATA2_UP : (SMD Offset: 0x34) SMD Data2 Upper Byte register -------- */\r
+#define SMD_DATA2_UP_DATA2_UB_Pos 0\r
+#define SMD_DATA2_UP_DATA2_UB_Msk (0xffu << SMD_DATA2_UP_DATA2_UB_Pos) /**< \brief (SMD_DATA2_UP) Data 2 Upper Byte. */\r
+/* -------- SMD_CTRL2 : (SMD Offset: 0x38) SMD Control2 register -------- */\r
+#define SMD_CTRL2_CTRL2_CR_Pos 0\r
+#define SMD_CTRL2_CTRL2_CR_Msk (0xffu << SMD_CTRL2_CTRL2_CR_Pos) /**< \brief (SMD_CTRL2) Control 2 Channel Response. */\r
+/* -------- SMD_PARAM_TRIM : (SMD Offset: 0x3C) SMD Parameter register (for pulse dialing / ring detection) -------- */\r
+#define SMD_PARAM_TRIM_DC_PD (0x1u << 0) /**< \brief (SMD_PARAM_TRIM) Duty Cycle during Pulse Dialing. */\r
+#define SMD_PARAM_TRIM_PPSR_PD (0x1u << 1) /**< \brief (SMD_PARAM_TRIM) Pulse per Second Rate during Pulse Dialing. */\r
+#define SMD_PARAM_TRIM_DBD_PDSM_Pos 2\r
+#define SMD_PARAM_TRIM_DBD_PDSM_Msk (0x3fu << SMD_PARAM_TRIM_DBD_PDSM_Pos) /**< \brief (SMD_PARAM_TRIM) Delay Between Digits of the Pulse Dialing State Machine. */\r
+#define SMD_PARAM_TRIM_DBD_PDSM(value) ((SMD_PARAM_TRIM_DBD_PDSM_Msk & ((value) << SMD_PARAM_TRIM_DBD_PDSM_Pos)))\r
+#define SMD_PARAM_TRIM_RDMETC_Pos 0\r
+#define SMD_PARAM_TRIM_RDMETC_Msk (0xfu << SMD_PARAM_TRIM_RDMETC_Pos) /**< \brief (SMD_PARAM_TRIM) Ring Detection Mode Extra Toggling Control. */\r
+#define SMD_PARAM_TRIM_RDMETC(value) ((SMD_PARAM_TRIM_RDMETC_Msk & ((value) << SMD_PARAM_TRIM_RDMETC_Pos)))\r
+#define SMD_PARAM_TRIM_TL_RD_Pos 4\r
+#define SMD_PARAM_TRIM_TL_RD_Msk (0x3u << SMD_PARAM_TRIM_TL_RD_Pos) /**< \brief (SMD_PARAM_TRIM) Threshold Level for Ring Detection. */\r
+#define SMD_PARAM_TRIM_TL_RD(value) ((SMD_PARAM_TRIM_TL_RD_Msk & ((value) << SMD_PARAM_TRIM_TL_RD_Pos)))\r
+#define SMD_PARAM_TRIM_BREAK_DBD_Pos 0\r
+#define SMD_PARAM_TRIM_BREAK_DBD_Msk (0xfu << SMD_PARAM_TRIM_BREAK_DBD_Pos) /**< \brief (SMD_PARAM_TRIM) "Break" Duration Between Digits. */\r
+#define SMD_PARAM_TRIM_BREAK_DBD(value) ((SMD_PARAM_TRIM_BREAK_DBD_Msk & ((value) << SMD_PARAM_TRIM_BREAK_DBD_Pos)))\r
+#define SMD_PARAM_TRIM_MAKE_DBD_Pos 4\r
+#define SMD_PARAM_TRIM_MAKE_DBD_Msk (0xfu << SMD_PARAM_TRIM_MAKE_DBD_Pos) /**< \brief (SMD_PARAM_TRIM) "Make" Duration Between Digits. */\r
+#define SMD_PARAM_TRIM_MAKE_DBD(value) ((SMD_PARAM_TRIM_MAKE_DBD_Msk & ((value) << SMD_PARAM_TRIM_MAKE_DBD_Pos)))\r
+#define SMD_PARAM_TRIM_MIN_DIB_Pos 0\r
+#define SMD_PARAM_TRIM_MIN_DIB_Msk (0xffu << SMD_PARAM_TRIM_MIN_DIB_Pos) /**< \brief (SMD_PARAM_TRIM) Minimum amount of DIB frames inside the burst. */\r
+#define SMD_PARAM_TRIM_MIN_DIB(value) ((SMD_PARAM_TRIM_MIN_DIB_Msk & ((value) << SMD_PARAM_TRIM_MIN_DIB_Pos)))\r
+/* -------- SMD_FIFOCTRL : (SMD Offset: 0x40) SMD FIFO Control register -------- */\r
+#define SMD_FIFOCTRL_ENB_DMACONT_RX (0x1u << 2) /**< \brief (SMD_FIFOCTRL) Enable DMA Continue for the SMD RXFIFO. */\r
+#define SMD_FIFOCTRL_ENB_DMACONT_TX (0x1u << 3) /**< \brief (SMD_FIFOCTRL) Enable DMA Continue for the SMD TXFIFO. */\r
+#define SMD_FIFOCTRL_RX_FLUSH (0x1u << 6) /**< \brief (SMD_FIFOCTRL) Flush the SMD RXFIFO. */\r
+#define SMD_FIFOCTRL_TX_FLUSH (0x1u << 7) /**< \brief (SMD_FIFOCTRL) Flush the SMD TXFIFO. */\r
+#define SMD_FIFOCTRL_ENB_FIFOIRQ (0x1u << 8) /**< \brief (SMD_FIFOCTRL) FIFO Interrupt Enable. */\r
+#define SMD_FIFOCTRL_FIFOIRQ_STATUS (0x1u << 9) /**< \brief (SMD_FIFOCTRL) FIFO Interrupt. */\r
+/* -------- SMD_IRQ_LVL : (SMD Offset: 0x44) SMD FIFO IRQ Level register -------- */\r
+#define SMD_IRQ_LVL_IRQ_LVL_Pos 0\r
+#define SMD_IRQ_LVL_IRQ_LVL_Msk (0xffu << SMD_IRQ_LVL_IRQ_LVL_Pos) /**< \brief (SMD_IRQ_LVL) IRQ Count Level. */\r
+#define SMD_IRQ_LVL_IRQ_LVL(value) ((SMD_IRQ_LVL_IRQ_LVL_Msk & ((value) << SMD_IRQ_LVL_IRQ_LVL_Pos)))\r
+/* -------- SMD_LPWR_CLK_ENB : (SMD Offset: 0x48) SMD Low Power Clock Enable register -------- */\r
+#define SMD_LPWR_CLK_ENB_LPWR_DIFF (0x1u << 2) /**< \brief (SMD_LPWR_CLK_ENB) SMD Low Power Differential Receive Disable. */\r
+/* -------- SMD_TXDATA_FIFO : (SMD Offset: 0x50) SMD Transmit Data FIFO -------- */\r
+#define SMD_TXDATA_FIFO_FIFO_DATA_Pos 0\r
+#define SMD_TXDATA_FIFO_FIFO_DATA_Msk (0xffffffffu << SMD_TXDATA_FIFO_FIFO_DATA_Pos) /**< \brief (SMD_TXDATA_FIFO) SMD FIFO Data. */\r
+#define SMD_TXDATA_FIFO_FIFO_DATA(value) ((SMD_TXDATA_FIFO_FIFO_DATA_Msk & ((value) << SMD_TXDATA_FIFO_FIFO_DATA_Pos)))\r
+/* -------- SMD_RXDATA_FIFO : (SMD Offset: 0x54) SMD Receive Data FIFO -------- */\r
+#define SMD_RXDATA_FIFO_FIFO_DATA_Pos 0\r
+#define SMD_RXDATA_FIFO_FIFO_DATA_Msk (0xffffffffu << SMD_RXDATA_FIFO_FIFO_DATA_Pos) /**< \brief (SMD_RXDATA_FIFO) SMD FIFO Data. */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Serial Peripheral Interface */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SPI Serial Peripheral Interface */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Spi hardware registers */\r
+typedef struct {\r
+  __O  uint32_t SPI_CR;        /**< \brief (Spi Offset: 0x00) Control Register */\r
+  __IO uint32_t SPI_MR;        /**< \brief (Spi Offset: 0x04) Mode Register */\r
+  __I  uint32_t SPI_RDR;       /**< \brief (Spi Offset: 0x08) Receive Data Register */\r
+  __O  uint32_t SPI_TDR;       /**< \brief (Spi Offset: 0x0C) Transmit Data Register */\r
+  __I  uint32_t SPI_SR;        /**< \brief (Spi Offset: 0x10) Status Register */\r
+  __O  uint32_t SPI_IER;       /**< \brief (Spi Offset: 0x14) Interrupt Enable Register */\r
+  __O  uint32_t SPI_IDR;       /**< \brief (Spi Offset: 0x18) Interrupt Disable Register */\r
+  __I  uint32_t SPI_IMR;       /**< \brief (Spi Offset: 0x1C) Interrupt Mask Register */\r
+  __I  uint32_t Reserved1[4];\r
+  __IO uint32_t SPI_CSR[4];    /**< \brief (Spi Offset: 0x30) Chip Select Register */\r
+  __I  uint32_t Reserved2[41];\r
+  __IO uint32_t SPI_WPMR;      /**< \brief (Spi Offset: 0xE4) Write Protection Control Register */\r
+  __I  uint32_t SPI_WPSR;      /**< \brief (Spi Offset: 0xE8) Write Protection Status Register */\r
+} Spi;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SPI_CR : (SPI Offset: 0x00) Control Register -------- */\r
+#define SPI_CR_SPIEN (0x1u << 0) /**< \brief (SPI_CR) SPI Enable */\r
+#define SPI_CR_SPIDIS (0x1u << 1) /**< \brief (SPI_CR) SPI Disable */\r
+#define SPI_CR_SWRST (0x1u << 7) /**< \brief (SPI_CR) SPI Software Reset */\r
+#define SPI_CR_LASTXFER (0x1u << 24) /**< \brief (SPI_CR) Last Transfer */\r
+/* -------- SPI_MR : (SPI Offset: 0x04) Mode Register -------- */\r
+#define SPI_MR_MSTR (0x1u << 0) /**< \brief (SPI_MR) Master/Slave Mode */\r
+#define SPI_MR_PS (0x1u << 1) /**< \brief (SPI_MR) Peripheral Select */\r
+#define SPI_MR_PCSDEC (0x1u << 2) /**< \brief (SPI_MR) Chip Select Decode */\r
+#define SPI_MR_MODFDIS (0x1u << 4) /**< \brief (SPI_MR) Mode Fault Detection */\r
+#define SPI_MR_WDRBT (0x1u << 5) /**< \brief (SPI_MR) Wait Data Read Before Transfer */\r
+#define SPI_MR_LLB (0x1u << 7) /**< \brief (SPI_MR) Local Loopback Enable */\r
+#define SPI_MR_PCS_Pos 16\r
+#define SPI_MR_PCS_Msk (0xfu << SPI_MR_PCS_Pos) /**< \brief (SPI_MR) Peripheral Chip Select */\r
+#define SPI_MR_PCS(value) ((SPI_MR_PCS_Msk & ((value) << SPI_MR_PCS_Pos)))\r
+#define SPI_MR_DLYBCS_Pos 24\r
+#define SPI_MR_DLYBCS_Msk (0xffu << SPI_MR_DLYBCS_Pos) /**< \brief (SPI_MR) Delay Between Chip Selects */\r
+#define SPI_MR_DLYBCS(value) ((SPI_MR_DLYBCS_Msk & ((value) << SPI_MR_DLYBCS_Pos)))\r
+/* -------- SPI_RDR : (SPI Offset: 0x08) Receive Data Register -------- */\r
+#define SPI_RDR_RD_Pos 0\r
+#define SPI_RDR_RD_Msk (0xffffu << SPI_RDR_RD_Pos) /**< \brief (SPI_RDR) Receive Data */\r
+#define SPI_RDR_PCS_Pos 16\r
+#define SPI_RDR_PCS_Msk (0xfu << SPI_RDR_PCS_Pos) /**< \brief (SPI_RDR) Peripheral Chip Select */\r
+/* -------- SPI_TDR : (SPI Offset: 0x0C) Transmit Data Register -------- */\r
+#define SPI_TDR_TD_Pos 0\r
+#define SPI_TDR_TD_Msk (0xffffu << SPI_TDR_TD_Pos) /**< \brief (SPI_TDR) Transmit Data */\r
+#define SPI_TDR_TD(value) ((SPI_TDR_TD_Msk & ((value) << SPI_TDR_TD_Pos)))\r
+#define SPI_TDR_PCS_Pos 16\r
+#define SPI_TDR_PCS_Msk (0xfu << SPI_TDR_PCS_Pos) /**< \brief (SPI_TDR) Peripheral Chip Select */\r
+#define SPI_TDR_PCS(value) ((SPI_TDR_PCS_Msk & ((value) << SPI_TDR_PCS_Pos)))\r
+#define SPI_TDR_LASTXFER (0x1u << 24) /**< \brief (SPI_TDR) Last Transfer */\r
+/* -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- */\r
+#define SPI_SR_RDRF (0x1u << 0) /**< \brief (SPI_SR) Receive Data Register Full */\r
+#define SPI_SR_TDRE (0x1u << 1) /**< \brief (SPI_SR) Transmit Data Register Empty */\r
+#define SPI_SR_MODF (0x1u << 2) /**< \brief (SPI_SR) Mode Fault Error */\r
+#define SPI_SR_OVRES (0x1u << 3) /**< \brief (SPI_SR) Overrun Error Status */\r
+#define SPI_SR_NSSR (0x1u << 8) /**< \brief (SPI_SR) NSS Rising */\r
+#define SPI_SR_TXEMPTY (0x1u << 9) /**< \brief (SPI_SR) Transmission Registers Empty */\r
+#define SPI_SR_UNDES (0x1u << 10) /**< \brief (SPI_SR) Underrun Error Status (Slave Mode Only) */\r
+#define SPI_SR_SPIENS (0x1u << 16) /**< \brief (SPI_SR) SPI Enable Status */\r
+/* -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- */\r
+#define SPI_IER_RDRF (0x1u << 0) /**< \brief (SPI_IER) Receive Data Register Full Interrupt Enable */\r
+#define SPI_IER_TDRE (0x1u << 1) /**< \brief (SPI_IER) SPI Transmit Data Register Empty Interrupt Enable */\r
+#define SPI_IER_MODF (0x1u << 2) /**< \brief (SPI_IER) Mode Fault Error Interrupt Enable */\r
+#define SPI_IER_OVRES (0x1u << 3) /**< \brief (SPI_IER) Overrun Error Interrupt Enable */\r
+#define SPI_IER_NSSR (0x1u << 8) /**< \brief (SPI_IER) NSS Rising Interrupt Enable */\r
+#define SPI_IER_TXEMPTY (0x1u << 9) /**< \brief (SPI_IER) Transmission Registers Empty Enable */\r
+#define SPI_IER_UNDES (0x1u << 10) /**< \brief (SPI_IER) Underrun Error Interrupt Enable */\r
+/* -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- */\r
+#define SPI_IDR_RDRF (0x1u << 0) /**< \brief (SPI_IDR) Receive Data Register Full Interrupt Disable */\r
+#define SPI_IDR_TDRE (0x1u << 1) /**< \brief (SPI_IDR) SPI Transmit Data Register Empty Interrupt Disable */\r
+#define SPI_IDR_MODF (0x1u << 2) /**< \brief (SPI_IDR) Mode Fault Error Interrupt Disable */\r
+#define SPI_IDR_OVRES (0x1u << 3) /**< \brief (SPI_IDR) Overrun Error Interrupt Disable */\r
+#define SPI_IDR_NSSR (0x1u << 8) /**< \brief (SPI_IDR) NSS Rising Interrupt Disable */\r
+#define SPI_IDR_TXEMPTY (0x1u << 9) /**< \brief (SPI_IDR) Transmission Registers Empty Disable */\r
+#define SPI_IDR_UNDES (0x1u << 10) /**< \brief (SPI_IDR) Underrun Error Interrupt Disable */\r
+/* -------- SPI_IMR : (SPI Offset: 0x1C) Interrupt Mask Register -------- */\r
+#define SPI_IMR_RDRF (0x1u << 0) /**< \brief (SPI_IMR) Receive Data Register Full Interrupt Mask */\r
+#define SPI_IMR_TDRE (0x1u << 1) /**< \brief (SPI_IMR) SPI Transmit Data Register Empty Interrupt Mask */\r
+#define SPI_IMR_MODF (0x1u << 2) /**< \brief (SPI_IMR) Mode Fault Error Interrupt Mask */\r
+#define SPI_IMR_OVRES (0x1u << 3) /**< \brief (SPI_IMR) Overrun Error Interrupt Mask */\r
+#define SPI_IMR_NSSR (0x1u << 8) /**< \brief (SPI_IMR) NSS Rising Interrupt Mask */\r
+#define SPI_IMR_TXEMPTY (0x1u << 9) /**< \brief (SPI_IMR) Transmission Registers Empty Mask */\r
+#define SPI_IMR_UNDES (0x1u << 10) /**< \brief (SPI_IMR) Underrun Error Interrupt Mask */\r
+/* -------- SPI_CSR[4] : (SPI Offset: 0x30) Chip Select Register -------- */\r
+#define SPI_CSR_CPOL (0x1u << 0) /**< \brief (SPI_CSR[4]) Clock Polarity */\r
+#define SPI_CSR_NCPHA (0x1u << 1) /**< \brief (SPI_CSR[4]) Clock Phase */\r
+#define SPI_CSR_CSNAAT (0x1u << 2) /**< \brief (SPI_CSR[4]) Chip Select Not Active After Transfer (Ignored if CSAAT = 1) */\r
+#define SPI_CSR_CSAAT (0x1u << 3) /**< \brief (SPI_CSR[4]) Chip Select Active After Transfer */\r
+#define SPI_CSR_BITS_Pos 4\r
+#define SPI_CSR_BITS_Msk (0xfu << SPI_CSR_BITS_Pos) /**< \brief (SPI_CSR[4]) Bits Per Transfer */\r
+#define   SPI_CSR_BITS_8_BIT (0x0u << 4) /**< \brief (SPI_CSR[4]) 8 bits for transfer */\r
+#define   SPI_CSR_BITS_9_BIT (0x1u << 4) /**< \brief (SPI_CSR[4]) 9 bits for transfer */\r
+#define   SPI_CSR_BITS_10_BIT (0x2u << 4) /**< \brief (SPI_CSR[4]) 10 bits for transfer */\r
+#define   SPI_CSR_BITS_11_BIT (0x3u << 4) /**< \brief (SPI_CSR[4]) 11 bits for transfer */\r
+#define   SPI_CSR_BITS_12_BIT (0x4u << 4) /**< \brief (SPI_CSR[4]) 12 bits for transfer */\r
+#define   SPI_CSR_BITS_13_BIT (0x5u << 4) /**< \brief (SPI_CSR[4]) 13 bits for transfer */\r
+#define   SPI_CSR_BITS_14_BIT (0x6u << 4) /**< \brief (SPI_CSR[4]) 14 bits for transfer */\r
+#define   SPI_CSR_BITS_15_BIT (0x7u << 4) /**< \brief (SPI_CSR[4]) 15 bits for transfer */\r
+#define   SPI_CSR_BITS_16_BIT (0x8u << 4) /**< \brief (SPI_CSR[4]) 16 bits for transfer */\r
+#define SPI_CSR_SCBR_Pos 8\r
+#define SPI_CSR_SCBR_Msk (0xffu << SPI_CSR_SCBR_Pos) /**< \brief (SPI_CSR[4]) Serial Clock Baud Rate */\r
+#define SPI_CSR_SCBR(value) ((SPI_CSR_SCBR_Msk & ((value) << SPI_CSR_SCBR_Pos)))\r
+#define SPI_CSR_DLYBS_Pos 16\r
+#define SPI_CSR_DLYBS_Msk (0xffu << SPI_CSR_DLYBS_Pos) /**< \brief (SPI_CSR[4]) Delay Before SPCK */\r
+#define SPI_CSR_DLYBS(value) ((SPI_CSR_DLYBS_Msk & ((value) << SPI_CSR_DLYBS_Pos)))\r
+#define SPI_CSR_DLYBCT_Pos 24\r
+#define SPI_CSR_DLYBCT_Msk (0xffu << SPI_CSR_DLYBCT_Pos) /**< \brief (SPI_CSR[4]) Delay Between Consecutive Transfers */\r
+#define SPI_CSR_DLYBCT(value) ((SPI_CSR_DLYBCT_Msk & ((value) << SPI_CSR_DLYBCT_Pos)))\r
+/* -------- SPI_WPMR : (SPI Offset: 0xE4) Write Protection Control Register -------- */\r
+#define SPI_WPMR_WPEN (0x1u << 0) /**< \brief (SPI_WPMR) Write Protect Enable */\r
+#define SPI_WPMR_WPKEY_Pos 8\r
+#define SPI_WPMR_WPKEY_Msk (0xffffffu << SPI_WPMR_WPKEY_Pos) /**< \brief (SPI_WPMR) Write Protect Key */\r
+#define   SPI_WPMR_WPKEY_PASSWD (0x535049u << 8) /**< \brief (SPI_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit.Always reads as 0. */\r
+/* -------- SPI_WPSR : (SPI Offset: 0xE8) Write Protection Status Register -------- */\r
+#define SPI_WPSR_WPVS (0x1u << 0) /**< \brief (SPI_WPSR) Write Protection Violation Status */\r
+#define SPI_WPSR_WPVSRC_Pos 8\r
+#define SPI_WPSR_WPVSRC_Msk (0xffu << SPI_WPSR_WPVSRC_Pos) /**< \brief (SPI_WPSR) Write Protection Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Synchronous Serial Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_SSC Synchronous Serial Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Ssc hardware registers */\r
+typedef struct {\r
+  __O  uint32_t SSC_CR;        /**< \brief (Ssc Offset: 0x0) Control Register */\r
+  __IO uint32_t SSC_CMR;       /**< \brief (Ssc Offset: 0x4) Clock Mode Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __IO uint32_t SSC_RCMR;      /**< \brief (Ssc Offset: 0x10) Receive Clock Mode Register */\r
+  __IO uint32_t SSC_RFMR;      /**< \brief (Ssc Offset: 0x14) Receive Frame Mode Register */\r
+  __IO uint32_t SSC_TCMR;      /**< \brief (Ssc Offset: 0x18) Transmit Clock Mode Register */\r
+  __IO uint32_t SSC_TFMR;      /**< \brief (Ssc Offset: 0x1C) Transmit Frame Mode Register */\r
+  __I  uint32_t SSC_RHR;       /**< \brief (Ssc Offset: 0x20) Receive Holding Register */\r
+  __O  uint32_t SSC_THR;       /**< \brief (Ssc Offset: 0x24) Transmit Holding Register */\r
+  __I  uint32_t Reserved2[2];\r
+  __I  uint32_t SSC_RSHR;      /**< \brief (Ssc Offset: 0x30) Receive Sync. Holding Register */\r
+  __IO uint32_t SSC_TSHR;      /**< \brief (Ssc Offset: 0x34) Transmit Sync. Holding Register */\r
+  __IO uint32_t SSC_RC0R;      /**< \brief (Ssc Offset: 0x38) Receive Compare 0 Register */\r
+  __IO uint32_t SSC_RC1R;      /**< \brief (Ssc Offset: 0x3C) Receive Compare 1 Register */\r
+  __I  uint32_t SSC_SR;        /**< \brief (Ssc Offset: 0x40) Status Register */\r
+  __O  uint32_t SSC_IER;       /**< \brief (Ssc Offset: 0x44) Interrupt Enable Register */\r
+  __O  uint32_t SSC_IDR;       /**< \brief (Ssc Offset: 0x48) Interrupt Disable Register */\r
+  __I  uint32_t SSC_IMR;       /**< \brief (Ssc Offset: 0x4C) Interrupt Mask Register */\r
+  __I  uint32_t Reserved3[37];\r
+  __IO uint32_t SSC_WPMR;      /**< \brief (Ssc Offset: 0xE4) Write Protect Mode Register */\r
+  __I  uint32_t SSC_WPSR;      /**< \brief (Ssc Offset: 0xE8) Write Protect Status Register */\r
+} Ssc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- SSC_CR : (SSC Offset: 0x0) Control Register -------- */\r
+#define SSC_CR_RXEN (0x1u << 0) /**< \brief (SSC_CR) Receive Enable */\r
+#define SSC_CR_RXDIS (0x1u << 1) /**< \brief (SSC_CR) Receive Disable */\r
+#define SSC_CR_TXEN (0x1u << 8) /**< \brief (SSC_CR) Transmit Enable */\r
+#define SSC_CR_TXDIS (0x1u << 9) /**< \brief (SSC_CR) Transmit Disable */\r
+#define SSC_CR_SWRST (0x1u << 15) /**< \brief (SSC_CR) Software Reset */\r
+/* -------- SSC_CMR : (SSC Offset: 0x4) Clock Mode Register -------- */\r
+#define SSC_CMR_DIV_Pos 0\r
+#define SSC_CMR_DIV_Msk (0xfffu << SSC_CMR_DIV_Pos) /**< \brief (SSC_CMR) Clock Divider */\r
+#define SSC_CMR_DIV(value) ((SSC_CMR_DIV_Msk & ((value) << SSC_CMR_DIV_Pos)))\r
+/* -------- SSC_RCMR : (SSC Offset: 0x10) Receive Clock Mode Register -------- */\r
+#define SSC_RCMR_CKS_Pos 0\r
+#define SSC_RCMR_CKS_Msk (0x3u << SSC_RCMR_CKS_Pos) /**< \brief (SSC_RCMR) Receive Clock Selection */\r
+#define   SSC_RCMR_CKS_MCK (0x0u << 0) /**< \brief (SSC_RCMR) Divided Clock */\r
+#define   SSC_RCMR_CKS_TK (0x1u << 0) /**< \brief (SSC_RCMR) TK Clock signal */\r
+#define   SSC_RCMR_CKS_RK (0x2u << 0) /**< \brief (SSC_RCMR) RK pin */\r
+#define SSC_RCMR_CKO_Pos 2\r
+#define SSC_RCMR_CKO_Msk (0x7u << SSC_RCMR_CKO_Pos) /**< \brief (SSC_RCMR) Receive Clock Output Mode Selection */\r
+#define   SSC_RCMR_CKO_NONE (0x0u << 2) /**< \brief (SSC_RCMR) None, RK pin is an input */\r
+#define   SSC_RCMR_CKO_CONTINUOUS (0x1u << 2) /**< \brief (SSC_RCMR) Continuous Receive Clock, RK pin is an output */\r
+#define   SSC_RCMR_CKO_TRANSFER (0x2u << 2) /**< \brief (SSC_RCMR) Receive Clock only during data transfers, RK pin is an output */\r
+#define SSC_RCMR_CKI (0x1u << 5) /**< \brief (SSC_RCMR) Receive Clock Inversion */\r
+#define SSC_RCMR_CKG_Pos 6\r
+#define SSC_RCMR_CKG_Msk (0x3u << SSC_RCMR_CKG_Pos) /**< \brief (SSC_RCMR) Receive Clock Gating Selection */\r
+#define   SSC_RCMR_CKG_CONTINUOUS (0x0u << 6) /**< \brief (SSC_RCMR) None */\r
+#define   SSC_RCMR_CKG_EN_RF_LOW (0x1u << 6) /**< \brief (SSC_RCMR) Receive Clock enabled only if RF Pin is Low */\r
+#define   SSC_RCMR_CKG_EN_RF_HIGH (0x2u << 6) /**< \brief (SSC_RCMR) Receive Clock enabled only if RF Pin is High */\r
+#define SSC_RCMR_START_Pos 8\r
+#define SSC_RCMR_START_Msk (0xfu << SSC_RCMR_START_Pos) /**< \brief (SSC_RCMR) Receive Start Selection */\r
+#define   SSC_RCMR_START_CONTINUOUS (0x0u << 8) /**< \brief (SSC_RCMR) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. */\r
+#define   SSC_RCMR_START_TRANSMIT (0x1u << 8) /**< \brief (SSC_RCMR) Transmit start */\r
+#define   SSC_RCMR_START_RF_LOW (0x2u << 8) /**< \brief (SSC_RCMR) Detection of a low level on RF signal */\r
+#define   SSC_RCMR_START_RF_HIGH (0x3u << 8) /**< \brief (SSC_RCMR) Detection of a high level on RF signal */\r
+#define   SSC_RCMR_START_RF_FALLING (0x4u << 8) /**< \brief (SSC_RCMR) Detection of a falling edge on RF signal */\r
+#define   SSC_RCMR_START_RF_RISING (0x5u << 8) /**< \brief (SSC_RCMR) Detection of a rising edge on RF signal */\r
+#define   SSC_RCMR_START_RF_LEVEL (0x6u << 8) /**< \brief (SSC_RCMR) Detection of any level change on RF signal */\r
+#define   SSC_RCMR_START_RF_EDGE (0x7u << 8) /**< \brief (SSC_RCMR) Detection of any edge on RF signal */\r
+#define   SSC_RCMR_START_CMP_0 (0x8u << 8) /**< \brief (SSC_RCMR) Compare 0 */\r
+#define SSC_RCMR_STOP (0x1u << 12) /**< \brief (SSC_RCMR) Receive Stop Selection */\r
+#define SSC_RCMR_STTDLY_Pos 16\r
+#define SSC_RCMR_STTDLY_Msk (0xffu << SSC_RCMR_STTDLY_Pos) /**< \brief (SSC_RCMR) Receive Start Delay */\r
+#define SSC_RCMR_STTDLY(value) ((SSC_RCMR_STTDLY_Msk & ((value) << SSC_RCMR_STTDLY_Pos)))\r
+#define SSC_RCMR_PERIOD_Pos 24\r
+#define SSC_RCMR_PERIOD_Msk (0xffu << SSC_RCMR_PERIOD_Pos) /**< \brief (SSC_RCMR) Receive Period Divider Selection */\r
+#define SSC_RCMR_PERIOD(value) ((SSC_RCMR_PERIOD_Msk & ((value) << SSC_RCMR_PERIOD_Pos)))\r
+/* -------- SSC_RFMR : (SSC Offset: 0x14) Receive Frame Mode Register -------- */\r
+#define SSC_RFMR_DATLEN_Pos 0\r
+#define SSC_RFMR_DATLEN_Msk (0x1fu << SSC_RFMR_DATLEN_Pos) /**< \brief (SSC_RFMR) Data Length */\r
+#define SSC_RFMR_DATLEN(value) ((SSC_RFMR_DATLEN_Msk & ((value) << SSC_RFMR_DATLEN_Pos)))\r
+#define SSC_RFMR_LOOP (0x1u << 5) /**< \brief (SSC_RFMR) Loop Mode */\r
+#define SSC_RFMR_MSBF (0x1u << 7) /**< \brief (SSC_RFMR) Most Significant Bit First */\r
+#define SSC_RFMR_DATNB_Pos 8\r
+#define SSC_RFMR_DATNB_Msk (0xfu << SSC_RFMR_DATNB_Pos) /**< \brief (SSC_RFMR) Data Number per Frame */\r
+#define SSC_RFMR_DATNB(value) ((SSC_RFMR_DATNB_Msk & ((value) << SSC_RFMR_DATNB_Pos)))\r
+#define SSC_RFMR_FSLEN_Pos 16\r
+#define SSC_RFMR_FSLEN_Msk (0xfu << SSC_RFMR_FSLEN_Pos) /**< \brief (SSC_RFMR) Receive Frame Sync Length */\r
+#define SSC_RFMR_FSLEN(value) ((SSC_RFMR_FSLEN_Msk & ((value) << SSC_RFMR_FSLEN_Pos)))\r
+#define SSC_RFMR_FSOS_Pos 20\r
+#define SSC_RFMR_FSOS_Msk (0x7u << SSC_RFMR_FSOS_Pos) /**< \brief (SSC_RFMR) Receive Frame Sync Output Selection */\r
+#define   SSC_RFMR_FSOS_NONE (0x0u << 20) /**< \brief (SSC_RFMR) None, RF pin is an input */\r
+#define   SSC_RFMR_FSOS_NEGATIVE (0x1u << 20) /**< \brief (SSC_RFMR) Negative Pulse, RF pin is an output */\r
+#define   SSC_RFMR_FSOS_POSITIVE (0x2u << 20) /**< \brief (SSC_RFMR) Positive Pulse, RF pin is an output */\r
+#define   SSC_RFMR_FSOS_LOW (0x3u << 20) /**< \brief (SSC_RFMR) Driven Low during data transfer, RF pin is an output */\r
+#define   SSC_RFMR_FSOS_HIGH (0x4u << 20) /**< \brief (SSC_RFMR) Driven High during data transfer, RF pin is an output */\r
+#define   SSC_RFMR_FSOS_TOGGLING (0x5u << 20) /**< \brief (SSC_RFMR) Toggling at each start of data transfer, RF pin is an output */\r
+#define SSC_RFMR_FSEDGE (0x1u << 24) /**< \brief (SSC_RFMR) Frame Sync Edge Detection */\r
+#define   SSC_RFMR_FSEDGE_POSITIVE (0x0u << 24) /**< \brief (SSC_RFMR) Positive Edge Detection */\r
+#define   SSC_RFMR_FSEDGE_NEGATIVE (0x1u << 24) /**< \brief (SSC_RFMR) Negative Edge Detection */\r
+#define SSC_RFMR_FSLEN_EXT_Pos 28\r
+#define SSC_RFMR_FSLEN_EXT_Msk (0xfu << SSC_RFMR_FSLEN_EXT_Pos) /**< \brief (SSC_RFMR) FSLEN Field Extension */\r
+#define SSC_RFMR_FSLEN_EXT(value) ((SSC_RFMR_FSLEN_EXT_Msk & ((value) << SSC_RFMR_FSLEN_EXT_Pos)))\r
+/* -------- SSC_TCMR : (SSC Offset: 0x18) Transmit Clock Mode Register -------- */\r
+#define SSC_TCMR_CKS_Pos 0\r
+#define SSC_TCMR_CKS_Msk (0x3u << SSC_TCMR_CKS_Pos) /**< \brief (SSC_TCMR) Transmit Clock Selection */\r
+#define   SSC_TCMR_CKS_MCK (0x0u << 0) /**< \brief (SSC_TCMR) Divided Clock */\r
+#define   SSC_TCMR_CKS_RK (0x1u << 0) /**< \brief (SSC_TCMR) RK Clock signal */\r
+#define   SSC_TCMR_CKS_TK (0x2u << 0) /**< \brief (SSC_TCMR) TK pin */\r
+#define SSC_TCMR_CKO_Pos 2\r
+#define SSC_TCMR_CKO_Msk (0x7u << SSC_TCMR_CKO_Pos) /**< \brief (SSC_TCMR) Transmit Clock Output Mode Selection */\r
+#define   SSC_TCMR_CKO_NONE (0x0u << 2) /**< \brief (SSC_TCMR) None, TK pin is an input */\r
+#define   SSC_TCMR_CKO_CONTINUOUS (0x1u << 2) /**< \brief (SSC_TCMR) Continuous Transmit Clock, TK pin is an output */\r
+#define   SSC_TCMR_CKO_TRANSFER (0x2u << 2) /**< \brief (SSC_TCMR) Transmit Clock only during data transfers, TK pin is an output */\r
+#define SSC_TCMR_CKI (0x1u << 5) /**< \brief (SSC_TCMR) Transmit Clock Inversion */\r
+#define SSC_TCMR_CKG_Pos 6\r
+#define SSC_TCMR_CKG_Msk (0x3u << SSC_TCMR_CKG_Pos) /**< \brief (SSC_TCMR) Transmit Clock Gating Selection */\r
+#define   SSC_TCMR_CKG_CONTINUOUS (0x0u << 6) /**< \brief (SSC_TCMR) None */\r
+#define   SSC_TCMR_CKG_EN_TF_LOW (0x1u << 6) /**< \brief (SSC_TCMR) Transmit Clock enabled only if TF pin is Low */\r
+#define   SSC_TCMR_CKG_EN_TF_HIGH (0x2u << 6) /**< \brief (SSC_TCMR) Transmit Clock enabled only if TF pin is High */\r
+#define SSC_TCMR_START_Pos 8\r
+#define SSC_TCMR_START_Msk (0xfu << SSC_TCMR_START_Pos) /**< \brief (SSC_TCMR) Transmit Start Selection */\r
+#define   SSC_TCMR_START_CONTINUOUS (0x0u << 8) /**< \brief (SSC_TCMR) Continuous, as soon as a word is written in the SSC_THR Register (if Transmit is enabled), and immediately after the end of transfer of the previous data. */\r
+#define   SSC_TCMR_START_RECEIVE (0x1u << 8) /**< \brief (SSC_TCMR) Receive start */\r
+#define   SSC_TCMR_START_TF_LOW (0x2u << 8) /**< \brief (SSC_TCMR) Detection of a low level on TF signal */\r
+#define   SSC_TCMR_START_TF_HIGH (0x3u << 8) /**< \brief (SSC_TCMR) Detection of a high level on TF signal */\r
+#define   SSC_TCMR_START_TF_FALLING (0x4u << 8) /**< \brief (SSC_TCMR) Detection of a falling edge on TF signal */\r
+#define   SSC_TCMR_START_TF_RISING (0x5u << 8) /**< \brief (SSC_TCMR) Detection of a rising edge on TF signal */\r
+#define   SSC_TCMR_START_TF_LEVEL (0x6u << 8) /**< \brief (SSC_TCMR) Detection of any level change on TF signal */\r
+#define   SSC_TCMR_START_TF_EDGE (0x7u << 8) /**< \brief (SSC_TCMR) Detection of any edge on TF signal */\r
+#define SSC_TCMR_STTDLY_Pos 16\r
+#define SSC_TCMR_STTDLY_Msk (0xffu << SSC_TCMR_STTDLY_Pos) /**< \brief (SSC_TCMR) Transmit Start Delay */\r
+#define SSC_TCMR_STTDLY(value) ((SSC_TCMR_STTDLY_Msk & ((value) << SSC_TCMR_STTDLY_Pos)))\r
+#define SSC_TCMR_PERIOD_Pos 24\r
+#define SSC_TCMR_PERIOD_Msk (0xffu << SSC_TCMR_PERIOD_Pos) /**< \brief (SSC_TCMR) Transmit Period Divider Selection */\r
+#define SSC_TCMR_PERIOD(value) ((SSC_TCMR_PERIOD_Msk & ((value) << SSC_TCMR_PERIOD_Pos)))\r
+/* -------- SSC_TFMR : (SSC Offset: 0x1C) Transmit Frame Mode Register -------- */\r
+#define SSC_TFMR_DATLEN_Pos 0\r
+#define SSC_TFMR_DATLEN_Msk (0x1fu << SSC_TFMR_DATLEN_Pos) /**< \brief (SSC_TFMR) Data Length */\r
+#define SSC_TFMR_DATLEN(value) ((SSC_TFMR_DATLEN_Msk & ((value) << SSC_TFMR_DATLEN_Pos)))\r
+#define SSC_TFMR_DATDEF (0x1u << 5) /**< \brief (SSC_TFMR) Data Default Value */\r
+#define SSC_TFMR_MSBF (0x1u << 7) /**< \brief (SSC_TFMR) Most Significant Bit First */\r
+#define SSC_TFMR_DATNB_Pos 8\r
+#define SSC_TFMR_DATNB_Msk (0xfu << SSC_TFMR_DATNB_Pos) /**< \brief (SSC_TFMR) Data Number per frame */\r
+#define SSC_TFMR_DATNB(value) ((SSC_TFMR_DATNB_Msk & ((value) << SSC_TFMR_DATNB_Pos)))\r
+#define SSC_TFMR_FSLEN_Pos 16\r
+#define SSC_TFMR_FSLEN_Msk (0xfu << SSC_TFMR_FSLEN_Pos) /**< \brief (SSC_TFMR) Transmit Frame Sync Length */\r
+#define SSC_TFMR_FSLEN(value) ((SSC_TFMR_FSLEN_Msk & ((value) << SSC_TFMR_FSLEN_Pos)))\r
+#define SSC_TFMR_FSOS_Pos 20\r
+#define SSC_TFMR_FSOS_Msk (0x7u << SSC_TFMR_FSOS_Pos) /**< \brief (SSC_TFMR) Transmit Frame Sync Output Selection */\r
+#define   SSC_TFMR_FSOS_NONE (0x0u << 20) /**< \brief (SSC_TFMR) None, TF pin is an input */\r
+#define   SSC_TFMR_FSOS_NEGATIVE (0x1u << 20) /**< \brief (SSC_TFMR) Negative Pulse, TF pin is an output */\r
+#define   SSC_TFMR_FSOS_POSITIVE (0x2u << 20) /**< \brief (SSC_TFMR) Positive Pulse,TF pin is an output */\r
+#define   SSC_TFMR_FSOS_LOW (0x3u << 20) /**< \brief (SSC_TFMR) TF pin Driven Low during data transfer */\r
+#define   SSC_TFMR_FSOS_HIGH (0x4u << 20) /**< \brief (SSC_TFMR) TF pin Driven High during data transfer */\r
+#define   SSC_TFMR_FSOS_TOGGLING (0x5u << 20) /**< \brief (SSC_TFMR) TF pin Toggles at each start of data transfer */\r
+#define SSC_TFMR_FSDEN (0x1u << 23) /**< \brief (SSC_TFMR) Frame Sync Data Enable */\r
+#define SSC_TFMR_FSEDGE (0x1u << 24) /**< \brief (SSC_TFMR) Frame Sync Edge Detection */\r
+#define   SSC_TFMR_FSEDGE_POSITIVE (0x0u << 24) /**< \brief (SSC_TFMR) Positive Edge Detection */\r
+#define   SSC_TFMR_FSEDGE_NEGATIVE (0x1u << 24) /**< \brief (SSC_TFMR) Negative Edge Detection */\r
+#define SSC_TFMR_FSLEN_EXT_Pos 28\r
+#define SSC_TFMR_FSLEN_EXT_Msk (0xfu << SSC_TFMR_FSLEN_EXT_Pos) /**< \brief (SSC_TFMR) FSLEN Field Extension */\r
+#define SSC_TFMR_FSLEN_EXT(value) ((SSC_TFMR_FSLEN_EXT_Msk & ((value) << SSC_TFMR_FSLEN_EXT_Pos)))\r
+/* -------- SSC_RHR : (SSC Offset: 0x20) Receive Holding Register -------- */\r
+#define SSC_RHR_RDAT_Pos 0\r
+#define SSC_RHR_RDAT_Msk (0xffffffffu << SSC_RHR_RDAT_Pos) /**< \brief (SSC_RHR) Receive Data */\r
+/* -------- SSC_THR : (SSC Offset: 0x24) Transmit Holding Register -------- */\r
+#define SSC_THR_TDAT_Pos 0\r
+#define SSC_THR_TDAT_Msk (0xffffffffu << SSC_THR_TDAT_Pos) /**< \brief (SSC_THR) Transmit Data */\r
+#define SSC_THR_TDAT(value) ((SSC_THR_TDAT_Msk & ((value) << SSC_THR_TDAT_Pos)))\r
+/* -------- SSC_RSHR : (SSC Offset: 0x30) Receive Sync. Holding Register -------- */\r
+#define SSC_RSHR_RSDAT_Pos 0\r
+#define SSC_RSHR_RSDAT_Msk (0xffffu << SSC_RSHR_RSDAT_Pos) /**< \brief (SSC_RSHR) Receive Synchronization Data */\r
+/* -------- SSC_TSHR : (SSC Offset: 0x34) Transmit Sync. Holding Register -------- */\r
+#define SSC_TSHR_TSDAT_Pos 0\r
+#define SSC_TSHR_TSDAT_Msk (0xffffu << SSC_TSHR_TSDAT_Pos) /**< \brief (SSC_TSHR) Transmit Synchronization Data */\r
+#define SSC_TSHR_TSDAT(value) ((SSC_TSHR_TSDAT_Msk & ((value) << SSC_TSHR_TSDAT_Pos)))\r
+/* -------- SSC_RC0R : (SSC Offset: 0x38) Receive Compare 0 Register -------- */\r
+#define SSC_RC0R_CP0_Pos 0\r
+#define SSC_RC0R_CP0_Msk (0xffffu << SSC_RC0R_CP0_Pos) /**< \brief (SSC_RC0R) Receive Compare Data 0 */\r
+#define SSC_RC0R_CP0(value) ((SSC_RC0R_CP0_Msk & ((value) << SSC_RC0R_CP0_Pos)))\r
+/* -------- SSC_RC1R : (SSC Offset: 0x3C) Receive Compare 1 Register -------- */\r
+#define SSC_RC1R_CP1_Pos 0\r
+#define SSC_RC1R_CP1_Msk (0xffffu << SSC_RC1R_CP1_Pos) /**< \brief (SSC_RC1R) Receive Compare Data 1 */\r
+#define SSC_RC1R_CP1(value) ((SSC_RC1R_CP1_Msk & ((value) << SSC_RC1R_CP1_Pos)))\r
+/* -------- SSC_SR : (SSC Offset: 0x40) Status Register -------- */\r
+#define SSC_SR_TXRDY (0x1u << 0) /**< \brief (SSC_SR) Transmit Ready */\r
+#define SSC_SR_TXEMPTY (0x1u << 1) /**< \brief (SSC_SR) Transmit Empty */\r
+#define SSC_SR_RXRDY (0x1u << 4) /**< \brief (SSC_SR) Receive Ready */\r
+#define SSC_SR_OVRUN (0x1u << 5) /**< \brief (SSC_SR) Receive Overrun */\r
+#define SSC_SR_CP0 (0x1u << 8) /**< \brief (SSC_SR) Compare 0 */\r
+#define SSC_SR_CP1 (0x1u << 9) /**< \brief (SSC_SR) Compare 1 */\r
+#define SSC_SR_TXSYN (0x1u << 10) /**< \brief (SSC_SR) Transmit Sync */\r
+#define SSC_SR_RXSYN (0x1u << 11) /**< \brief (SSC_SR) Receive Sync */\r
+#define SSC_SR_TXEN (0x1u << 16) /**< \brief (SSC_SR) Transmit Enable */\r
+#define SSC_SR_RXEN (0x1u << 17) /**< \brief (SSC_SR) Receive Enable */\r
+/* -------- SSC_IER : (SSC Offset: 0x44) Interrupt Enable Register -------- */\r
+#define SSC_IER_TXRDY (0x1u << 0) /**< \brief (SSC_IER) Transmit Ready Interrupt Enable */\r
+#define SSC_IER_TXEMPTY (0x1u << 1) /**< \brief (SSC_IER) Transmit Empty Interrupt Enable */\r
+#define SSC_IER_RXRDY (0x1u << 4) /**< \brief (SSC_IER) Receive Ready Interrupt Enable */\r
+#define SSC_IER_OVRUN (0x1u << 5) /**< \brief (SSC_IER) Receive Overrun Interrupt Enable */\r
+#define SSC_IER_CP0 (0x1u << 8) /**< \brief (SSC_IER) Compare 0 Interrupt Enable */\r
+#define SSC_IER_CP1 (0x1u << 9) /**< \brief (SSC_IER) Compare 1 Interrupt Enable */\r
+#define SSC_IER_TXSYN (0x1u << 10) /**< \brief (SSC_IER) Tx Sync Interrupt Enable */\r
+#define SSC_IER_RXSYN (0x1u << 11) /**< \brief (SSC_IER) Rx Sync Interrupt Enable */\r
+/* -------- SSC_IDR : (SSC Offset: 0x48) Interrupt Disable Register -------- */\r
+#define SSC_IDR_TXRDY (0x1u << 0) /**< \brief (SSC_IDR) Transmit Ready Interrupt Disable */\r
+#define SSC_IDR_TXEMPTY (0x1u << 1) /**< \brief (SSC_IDR) Transmit Empty Interrupt Disable */\r
+#define SSC_IDR_RXRDY (0x1u << 4) /**< \brief (SSC_IDR) Receive Ready Interrupt Disable */\r
+#define SSC_IDR_OVRUN (0x1u << 5) /**< \brief (SSC_IDR) Receive Overrun Interrupt Disable */\r
+#define SSC_IDR_CP0 (0x1u << 8) /**< \brief (SSC_IDR) Compare 0 Interrupt Disable */\r
+#define SSC_IDR_CP1 (0x1u << 9) /**< \brief (SSC_IDR) Compare 1 Interrupt Disable */\r
+#define SSC_IDR_TXSYN (0x1u << 10) /**< \brief (SSC_IDR) Tx Sync Interrupt Enable */\r
+#define SSC_IDR_RXSYN (0x1u << 11) /**< \brief (SSC_IDR) Rx Sync Interrupt Enable */\r
+/* -------- SSC_IMR : (SSC Offset: 0x4C) Interrupt Mask Register -------- */\r
+#define SSC_IMR_TXRDY (0x1u << 0) /**< \brief (SSC_IMR) Transmit Ready Interrupt Mask */\r
+#define SSC_IMR_TXEMPTY (0x1u << 1) /**< \brief (SSC_IMR) Transmit Empty Interrupt Mask */\r
+#define SSC_IMR_RXRDY (0x1u << 4) /**< \brief (SSC_IMR) Receive Ready Interrupt Mask */\r
+#define SSC_IMR_OVRUN (0x1u << 5) /**< \brief (SSC_IMR) Receive Overrun Interrupt Mask */\r
+#define SSC_IMR_CP0 (0x1u << 8) /**< \brief (SSC_IMR) Compare 0 Interrupt Mask */\r
+#define SSC_IMR_CP1 (0x1u << 9) /**< \brief (SSC_IMR) Compare 1 Interrupt Mask */\r
+#define SSC_IMR_TXSYN (0x1u << 10) /**< \brief (SSC_IMR) Tx Sync Interrupt Mask */\r
+#define SSC_IMR_RXSYN (0x1u << 11) /**< \brief (SSC_IMR) Rx Sync Interrupt Mask */\r
+/* -------- SSC_WPMR : (SSC Offset: 0xE4) Write Protect Mode Register -------- */\r
+#define SSC_WPMR_WPEN (0x1u << 0) /**< \brief (SSC_WPMR) Write Protect Enable */\r
+#define SSC_WPMR_WPKEY_Pos 8\r
+#define SSC_WPMR_WPKEY_Msk (0xffffffu << SSC_WPMR_WPKEY_Pos) /**< \brief (SSC_WPMR) Write Protect KEY */\r
+#define SSC_WPMR_WPKEY(value) ((SSC_WPMR_WPKEY_Msk & ((value) << SSC_WPMR_WPKEY_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Timer Counter */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_TC Timer Counter */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief TcChannel hardware registers */\r
+typedef struct {\r
+  __O  uint32_t TC_CCR;       /**< \brief (TcChannel Offset: 0x0) Channel Control Register */\r
+  __IO uint32_t TC_CMR;       /**< \brief (TcChannel Offset: 0x4) Channel Mode Register */\r
+  __IO uint32_t TC_SMMR;      /**< \brief (TcChannel Offset: 0x8) Stepper Motor Mode Register */\r
+  __I  uint32_t TC_RAB;       /**< \brief (TcChannel Offset: 0xC) Register AB */\r
+  __I  uint32_t TC_CV;        /**< \brief (TcChannel Offset: 0x10) Counter Value */\r
+  __IO uint32_t TC_RA;        /**< \brief (TcChannel Offset: 0x14) Register A */\r
+  __IO uint32_t TC_RB;        /**< \brief (TcChannel Offset: 0x18) Register B */\r
+  __IO uint32_t TC_RC;        /**< \brief (TcChannel Offset: 0x1C) Register C */\r
+  __I  uint32_t TC_SR;        /**< \brief (TcChannel Offset: 0x20) Status Register */\r
+  __O  uint32_t TC_IER;       /**< \brief (TcChannel Offset: 0x24) Interrupt Enable Register */\r
+  __O  uint32_t TC_IDR;       /**< \brief (TcChannel Offset: 0x28) Interrupt Disable Register */\r
+  __I  uint32_t TC_IMR;       /**< \brief (TcChannel Offset: 0x2C) Interrupt Mask Register */\r
+  __IO uint32_t TC_EMR;       /**< \brief (TcChannel Offset: 0x30) Extended Mode Register */\r
+  __I  uint32_t Reserved1[3];\r
+} TcChannel;\r
+/** \brief Tc hardware registers */\r
+#define TCCHANNEL_NUMBER 3\r
+typedef struct {\r
+       TcChannel TC_CHANNEL[TCCHANNEL_NUMBER]; /**< \brief (Tc Offset: 0x0) channel = 0 .. 2 */\r
+  __O  uint32_t  TC_BCR;                       /**< \brief (Tc Offset: 0xC0) Block Control Register */\r
+  __IO uint32_t  TC_BMR;                       /**< \brief (Tc Offset: 0xC4) Block Mode Register */\r
+  __O  uint32_t  TC_QIER;                      /**< \brief (Tc Offset: 0xC8) QDEC Interrupt Enable Register */\r
+  __O  uint32_t  TC_QIDR;                      /**< \brief (Tc Offset: 0xCC) QDEC Interrupt Disable Register */\r
+  __I  uint32_t  TC_QIMR;                      /**< \brief (Tc Offset: 0xD0) QDEC Interrupt Mask Register */\r
+  __I  uint32_t  TC_QISR;                      /**< \brief (Tc Offset: 0xD4) QDEC Interrupt Status Register */\r
+  __IO uint32_t  TC_FMR;                       /**< \brief (Tc Offset: 0xD8) Fault Mode Register */\r
+  __I  uint32_t  Reserved1[2];\r
+  __IO uint32_t  TC_WPMR;                      /**< \brief (Tc Offset: 0xE4) Write Protect Mode Register */\r
+} Tc;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- TC_CCR : (TC Offset: N/A) Channel Control Register -------- */\r
+#define TC_CCR_CLKEN (0x1u << 0) /**< \brief (TC_CCR) Counter Clock Enable Command */\r
+#define TC_CCR_CLKDIS (0x1u << 1) /**< \brief (TC_CCR) Counter Clock Disable Command */\r
+#define TC_CCR_SWTRG (0x1u << 2) /**< \brief (TC_CCR) Software Trigger Command */\r
+/* -------- TC_CMR : (TC Offset: N/A) Channel Mode Register -------- */\r
+#define TC_CMR_TCCLKS_Pos 0\r
+#define TC_CMR_TCCLKS_Msk (0x7u << TC_CMR_TCCLKS_Pos) /**< \brief (TC_CMR) Clock Selection */\r
+#define   TC_CMR_TCCLKS_TIMER_CLOCK1 (0x0u << 0) /**< \brief (TC_CMR) Clock selected: TCLK1 */\r
+#define   TC_CMR_TCCLKS_TIMER_CLOCK2 (0x1u << 0) /**< \brief (TC_CMR) Clock selected: TCLK2 */\r
+#define   TC_CMR_TCCLKS_TIMER_CLOCK3 (0x2u << 0) /**< \brief (TC_CMR) Clock selected: TCLK3 */\r
+#define   TC_CMR_TCCLKS_TIMER_CLOCK4 (0x3u << 0) /**< \brief (TC_CMR) Clock selected: TCLK4 */\r
+#define   TC_CMR_TCCLKS_TIMER_CLOCK5 (0x4u << 0) /**< \brief (TC_CMR) Clock selected: TCLK5 */\r
+#define   TC_CMR_TCCLKS_XC0 (0x5u << 0) /**< \brief (TC_CMR) Clock selected: XC0 */\r
+#define   TC_CMR_TCCLKS_XC1 (0x6u << 0) /**< \brief (TC_CMR) Clock selected: XC1 */\r
+#define   TC_CMR_TCCLKS_XC2 (0x7u << 0) /**< \brief (TC_CMR) Clock selected: XC2 */\r
+#define TC_CMR_CLKI (0x1u << 3) /**< \brief (TC_CMR) Clock Invert */\r
+#define TC_CMR_BURST_Pos 4\r
+#define TC_CMR_BURST_Msk (0x3u << TC_CMR_BURST_Pos) /**< \brief (TC_CMR) Burst Signal Selection */\r
+#define   TC_CMR_BURST_NONE (0x0u << 4) /**< \brief (TC_CMR) The clock is not gated by an external signal. */\r
+#define   TC_CMR_BURST_XC0 (0x1u << 4) /**< \brief (TC_CMR) XC0 is ANDed with the selected clock. */\r
+#define   TC_CMR_BURST_XC1 (0x2u << 4) /**< \brief (TC_CMR) XC1 is ANDed with the selected clock. */\r
+#define   TC_CMR_BURST_XC2 (0x3u << 4) /**< \brief (TC_CMR) XC2 is ANDed with the selected clock. */\r
+#define TC_CMR_LDBSTOP (0x1u << 6) /**< \brief (TC_CMR) Counter Clock Stopped with RB Loading */\r
+#define TC_CMR_LDBDIS (0x1u << 7) /**< \brief (TC_CMR) Counter Clock Disable with RB Loading */\r
+#define TC_CMR_ETRGEDG_Pos 8\r
+#define TC_CMR_ETRGEDG_Msk (0x3u << TC_CMR_ETRGEDG_Pos) /**< \brief (TC_CMR) External Trigger Edge Selection */\r
+#define   TC_CMR_ETRGEDG_NONE (0x0u << 8) /**< \brief (TC_CMR) The clock is not gated by an external signal. */\r
+#define   TC_CMR_ETRGEDG_RISING (0x1u << 8) /**< \brief (TC_CMR) Rising edge */\r
+#define   TC_CMR_ETRGEDG_FALLING (0x2u << 8) /**< \brief (TC_CMR) Falling edge */\r
+#define   TC_CMR_ETRGEDG_EDGE (0x3u << 8) /**< \brief (TC_CMR) Each edge */\r
+#define TC_CMR_ABETRG (0x1u << 10) /**< \brief (TC_CMR) TIOA or TIOB External Trigger Selection */\r
+#define TC_CMR_CPCTRG (0x1u << 14) /**< \brief (TC_CMR) RC Compare Trigger Enable */\r
+#define TC_CMR_WAVE (0x1u << 15) /**< \brief (TC_CMR) Waveform Mode */\r
+#define TC_CMR_LDRA_Pos 16\r
+#define TC_CMR_LDRA_Msk (0x3u << TC_CMR_LDRA_Pos) /**< \brief (TC_CMR) RA Loading Edge Selection */\r
+#define   TC_CMR_LDRA_NONE (0x0u << 16) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_LDRA_RISING (0x1u << 16) /**< \brief (TC_CMR) Rising edge of TIOA */\r
+#define   TC_CMR_LDRA_FALLING (0x2u << 16) /**< \brief (TC_CMR) Falling edge of TIOA */\r
+#define   TC_CMR_LDRA_EDGE (0x3u << 16) /**< \brief (TC_CMR) Each edge of TIOA */\r
+#define TC_CMR_LDRB_Pos 18\r
+#define TC_CMR_LDRB_Msk (0x3u << TC_CMR_LDRB_Pos) /**< \brief (TC_CMR) RB Loading Edge Selection */\r
+#define   TC_CMR_LDRB_NONE (0x0u << 18) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_LDRB_RISING (0x1u << 18) /**< \brief (TC_CMR) Rising edge of TIOA */\r
+#define   TC_CMR_LDRB_FALLING (0x2u << 18) /**< \brief (TC_CMR) Falling edge of TIOA */\r
+#define   TC_CMR_LDRB_EDGE (0x3u << 18) /**< \brief (TC_CMR) Each edge of TIOA */\r
+#define TC_CMR_SBSMPLR_Pos 20\r
+#define TC_CMR_SBSMPLR_Msk (0x7u << TC_CMR_SBSMPLR_Pos) /**< \brief (TC_CMR) Loading Edge Subsampling Ratio */\r
+#define   TC_CMR_SBSMPLR_ONE (0x0u << 20) /**< \brief (TC_CMR) Load a Capture Register each selected edge */\r
+#define   TC_CMR_SBSMPLR_HALF (0x1u << 20) /**< \brief (TC_CMR) Load a Capture Register every 2 selected edges */\r
+#define   TC_CMR_SBSMPLR_FOURTH (0x2u << 20) /**< \brief (TC_CMR) Load a Capture Register every 4 selected edges */\r
+#define   TC_CMR_SBSMPLR_EIGHTH (0x3u << 20) /**< \brief (TC_CMR) Load a Capture Register every 8 selected edges */\r
+#define   TC_CMR_SBSMPLR_SIXTEENTH (0x4u << 20) /**< \brief (TC_CMR) Load a Capture Register every 16 selected edges */\r
+#define TC_CMR_CPCSTOP (0x1u << 6) /**< \brief (TC_CMR) Counter Clock Stopped with RC Compare */\r
+#define TC_CMR_CPCDIS (0x1u << 7) /**< \brief (TC_CMR) Counter Clock Disable with RC Compare */\r
+#define TC_CMR_EEVTEDG_Pos 8\r
+#define TC_CMR_EEVTEDG_Msk (0x3u << TC_CMR_EEVTEDG_Pos) /**< \brief (TC_CMR) External Event Edge Selection */\r
+#define   TC_CMR_EEVTEDG_NONE (0x0u << 8) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_EEVTEDG_RISING (0x1u << 8) /**< \brief (TC_CMR) Rising edge */\r
+#define   TC_CMR_EEVTEDG_FALLING (0x2u << 8) /**< \brief (TC_CMR) Falling edge */\r
+#define   TC_CMR_EEVTEDG_EDGE (0x3u << 8) /**< \brief (TC_CMR) Each edge */\r
+#define TC_CMR_EEVT_Pos 10\r
+#define TC_CMR_EEVT_Msk (0x3u << TC_CMR_EEVT_Pos) /**< \brief (TC_CMR) External Event Selection */\r
+#define   TC_CMR_EEVT_TIOB (0x0u << 10) /**< \brief (TC_CMR) TIOB */\r
+#define   TC_CMR_EEVT_XC0 (0x1u << 10) /**< \brief (TC_CMR) XC0 */\r
+#define   TC_CMR_EEVT_XC1 (0x2u << 10) /**< \brief (TC_CMR) XC1 */\r
+#define   TC_CMR_EEVT_XC2 (0x3u << 10) /**< \brief (TC_CMR) XC2 */\r
+#define TC_CMR_ENETRG (0x1u << 12) /**< \brief (TC_CMR) External Event Trigger Enable */\r
+#define TC_CMR_WAVSEL_Pos 13\r
+#define TC_CMR_WAVSEL_Msk (0x3u << TC_CMR_WAVSEL_Pos) /**< \brief (TC_CMR) Waveform Selection */\r
+#define   TC_CMR_WAVSEL_UP (0x0u << 13) /**< \brief (TC_CMR) UP mode without automatic trigger on RC Compare */\r
+#define   TC_CMR_WAVSEL_UPDOWN (0x1u << 13) /**< \brief (TC_CMR) UPDOWN mode without automatic trigger on RC Compare */\r
+#define   TC_CMR_WAVSEL_UP_RC (0x2u << 13) /**< \brief (TC_CMR) UP mode with automatic trigger on RC Compare */\r
+#define   TC_CMR_WAVSEL_UPDOWN_RC (0x3u << 13) /**< \brief (TC_CMR) UPDOWN mode with automatic trigger on RC Compare */\r
+#define TC_CMR_ACPA_Pos 16\r
+#define TC_CMR_ACPA_Msk (0x3u << TC_CMR_ACPA_Pos) /**< \brief (TC_CMR) RA Compare Effect on TIOA */\r
+#define   TC_CMR_ACPA_NONE (0x0u << 16) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_ACPA_SET (0x1u << 16) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_ACPA_CLEAR (0x2u << 16) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_ACPA_TOGGLE (0x3u << 16) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_ACPC_Pos 18\r
+#define TC_CMR_ACPC_Msk (0x3u << TC_CMR_ACPC_Pos) /**< \brief (TC_CMR) RC Compare Effect on TIOA */\r
+#define   TC_CMR_ACPC_NONE (0x0u << 18) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_ACPC_SET (0x1u << 18) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_ACPC_CLEAR (0x2u << 18) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_ACPC_TOGGLE (0x3u << 18) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_AEEVT_Pos 20\r
+#define TC_CMR_AEEVT_Msk (0x3u << TC_CMR_AEEVT_Pos) /**< \brief (TC_CMR) External Event Effect on TIOA */\r
+#define   TC_CMR_AEEVT_NONE (0x0u << 20) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_AEEVT_SET (0x1u << 20) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_AEEVT_CLEAR (0x2u << 20) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_AEEVT_TOGGLE (0x3u << 20) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_ASWTRG_Pos 22\r
+#define TC_CMR_ASWTRG_Msk (0x3u << TC_CMR_ASWTRG_Pos) /**< \brief (TC_CMR) Software Trigger Effect on TIOA */\r
+#define   TC_CMR_ASWTRG_NONE (0x0u << 22) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_ASWTRG_SET (0x1u << 22) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_ASWTRG_CLEAR (0x2u << 22) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_ASWTRG_TOGGLE (0x3u << 22) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_BCPB_Pos 24\r
+#define TC_CMR_BCPB_Msk (0x3u << TC_CMR_BCPB_Pos) /**< \brief (TC_CMR) RB Compare Effect on TIOB */\r
+#define   TC_CMR_BCPB_NONE (0x0u << 24) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_BCPB_SET (0x1u << 24) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_BCPB_CLEAR (0x2u << 24) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_BCPB_TOGGLE (0x3u << 24) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_BCPC_Pos 26\r
+#define TC_CMR_BCPC_Msk (0x3u << TC_CMR_BCPC_Pos) /**< \brief (TC_CMR) RC Compare Effect on TIOB */\r
+#define   TC_CMR_BCPC_NONE (0x0u << 26) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_BCPC_SET (0x1u << 26) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_BCPC_CLEAR (0x2u << 26) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_BCPC_TOGGLE (0x3u << 26) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_BEEVT_Pos 28\r
+#define TC_CMR_BEEVT_Msk (0x3u << TC_CMR_BEEVT_Pos) /**< \brief (TC_CMR) External Event Effect on TIOB */\r
+#define   TC_CMR_BEEVT_NONE (0x0u << 28) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_BEEVT_SET (0x1u << 28) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_BEEVT_CLEAR (0x2u << 28) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_BEEVT_TOGGLE (0x3u << 28) /**< \brief (TC_CMR) Toggle */\r
+#define TC_CMR_BSWTRG_Pos 30\r
+#define TC_CMR_BSWTRG_Msk (0x3u << TC_CMR_BSWTRG_Pos) /**< \brief (TC_CMR) Software Trigger Effect on TIOB */\r
+#define   TC_CMR_BSWTRG_NONE (0x0u << 30) /**< \brief (TC_CMR) None */\r
+#define   TC_CMR_BSWTRG_SET (0x1u << 30) /**< \brief (TC_CMR) Set */\r
+#define   TC_CMR_BSWTRG_CLEAR (0x2u << 30) /**< \brief (TC_CMR) Clear */\r
+#define   TC_CMR_BSWTRG_TOGGLE (0x3u << 30) /**< \brief (TC_CMR) Toggle */\r
+/* -------- TC_SMMR : (TC Offset: N/A) Stepper Motor Mode Register -------- */\r
+#define TC_SMMR_GCEN (0x1u << 0) /**< \brief (TC_SMMR) Gray Count Enable */\r
+#define TC_SMMR_DOWN (0x1u << 1) /**< \brief (TC_SMMR) DOWN Count */\r
+/* -------- TC_RAB : (TC Offset: N/A) Register AB -------- */\r
+#define TC_RAB_RAB_Pos 0\r
+#define TC_RAB_RAB_Msk (0xffffffffu << TC_RAB_RAB_Pos) /**< \brief (TC_RAB) Register A or Register B */\r
+/* -------- TC_CV : (TC Offset: N/A) Counter Value -------- */\r
+#define TC_CV_CV_Pos 0\r
+#define TC_CV_CV_Msk (0xffffffffu << TC_CV_CV_Pos) /**< \brief (TC_CV) Counter Value */\r
+/* -------- TC_RA : (TC Offset: N/A) Register A -------- */\r
+#define TC_RA_RA_Pos 0\r
+#define TC_RA_RA_Msk (0xffffffffu << TC_RA_RA_Pos) /**< \brief (TC_RA) Register A */\r
+#define TC_RA_RA(value) ((TC_RA_RA_Msk & ((value) << TC_RA_RA_Pos)))\r
+/* -------- TC_RB : (TC Offset: N/A) Register B -------- */\r
+#define TC_RB_RB_Pos 0\r
+#define TC_RB_RB_Msk (0xffffffffu << TC_RB_RB_Pos) /**< \brief (TC_RB) Register B */\r
+#define TC_RB_RB(value) ((TC_RB_RB_Msk & ((value) << TC_RB_RB_Pos)))\r
+/* -------- TC_RC : (TC Offset: N/A) Register C -------- */\r
+#define TC_RC_RC_Pos 0\r
+#define TC_RC_RC_Msk (0xffffffffu << TC_RC_RC_Pos) /**< \brief (TC_RC) Register C */\r
+#define TC_RC_RC(value) ((TC_RC_RC_Msk & ((value) << TC_RC_RC_Pos)))\r
+/* -------- TC_SR : (TC Offset: N/A) Status Register -------- */\r
+#define TC_SR_COVFS (0x1u << 0) /**< \brief (TC_SR) Counter Overflow Status */\r
+#define TC_SR_LOVRS (0x1u << 1) /**< \brief (TC_SR) Load Overrun Status */\r
+#define TC_SR_CPAS (0x1u << 2) /**< \brief (TC_SR) RA Compare Status */\r
+#define TC_SR_CPBS (0x1u << 3) /**< \brief (TC_SR) RB Compare Status */\r
+#define TC_SR_CPCS (0x1u << 4) /**< \brief (TC_SR) RC Compare Status */\r
+#define TC_SR_LDRAS (0x1u << 5) /**< \brief (TC_SR) RA Loading Status */\r
+#define TC_SR_LDRBS (0x1u << 6) /**< \brief (TC_SR) RB Loading Status */\r
+#define TC_SR_ETRGS (0x1u << 7) /**< \brief (TC_SR) External Trigger Status */\r
+#define TC_SR_CLKSTA (0x1u << 16) /**< \brief (TC_SR) Clock Enabling Status */\r
+#define TC_SR_MTIOA (0x1u << 17) /**< \brief (TC_SR) TIOA Mirror */\r
+#define TC_SR_MTIOB (0x1u << 18) /**< \brief (TC_SR) TIOB Mirror */\r
+/* -------- TC_IER : (TC Offset: N/A) Interrupt Enable Register -------- */\r
+#define TC_IER_COVFS (0x1u << 0) /**< \brief (TC_IER) Counter Overflow */\r
+#define TC_IER_LOVRS (0x1u << 1) /**< \brief (TC_IER) Load Overrun */\r
+#define TC_IER_CPAS (0x1u << 2) /**< \brief (TC_IER) RA Compare */\r
+#define TC_IER_CPBS (0x1u << 3) /**< \brief (TC_IER) RB Compare */\r
+#define TC_IER_CPCS (0x1u << 4) /**< \brief (TC_IER) RC Compare */\r
+#define TC_IER_LDRAS (0x1u << 5) /**< \brief (TC_IER) RA Loading */\r
+#define TC_IER_LDRBS (0x1u << 6) /**< \brief (TC_IER) RB Loading */\r
+#define TC_IER_ETRGS (0x1u << 7) /**< \brief (TC_IER) External Trigger */\r
+/* -------- TC_IDR : (TC Offset: N/A) Interrupt Disable Register -------- */\r
+#define TC_IDR_COVFS (0x1u << 0) /**< \brief (TC_IDR) Counter Overflow */\r
+#define TC_IDR_LOVRS (0x1u << 1) /**< \brief (TC_IDR) Load Overrun */\r
+#define TC_IDR_CPAS (0x1u << 2) /**< \brief (TC_IDR) RA Compare */\r
+#define TC_IDR_CPBS (0x1u << 3) /**< \brief (TC_IDR) RB Compare */\r
+#define TC_IDR_CPCS (0x1u << 4) /**< \brief (TC_IDR) RC Compare */\r
+#define TC_IDR_LDRAS (0x1u << 5) /**< \brief (TC_IDR) RA Loading */\r
+#define TC_IDR_LDRBS (0x1u << 6) /**< \brief (TC_IDR) RB Loading */\r
+#define TC_IDR_ETRGS (0x1u << 7) /**< \brief (TC_IDR) External Trigger */\r
+/* -------- TC_IMR : (TC Offset: N/A) Interrupt Mask Register -------- */\r
+#define TC_IMR_COVFS (0x1u << 0) /**< \brief (TC_IMR) Counter Overflow */\r
+#define TC_IMR_LOVRS (0x1u << 1) /**< \brief (TC_IMR) Load Overrun */\r
+#define TC_IMR_CPAS (0x1u << 2) /**< \brief (TC_IMR) RA Compare */\r
+#define TC_IMR_CPBS (0x1u << 3) /**< \brief (TC_IMR) RB Compare */\r
+#define TC_IMR_CPCS (0x1u << 4) /**< \brief (TC_IMR) RC Compare */\r
+#define TC_IMR_LDRAS (0x1u << 5) /**< \brief (TC_IMR) RA Loading */\r
+#define TC_IMR_LDRBS (0x1u << 6) /**< \brief (TC_IMR) RB Loading */\r
+#define TC_IMR_ETRGS (0x1u << 7) /**< \brief (TC_IMR) External Trigger */\r
+/* -------- TC_EMR : (TC Offset: N/A) Extended Mode Register -------- */\r
+#define TC_EMR_TRIGSRCA_Pos 0\r
+#define TC_EMR_TRIGSRCA_Msk (0x3u << TC_EMR_TRIGSRCA_Pos) /**< \brief (TC_EMR) TRIGger SouRCe for input A */\r
+#define   TC_EMR_TRIGSRCA_EXTERNAL_TIOAx (0x0u << 0) /**< \brief (TC_EMR) the trigger/capture input A is driven by external pin TIOAx */\r
+#define   TC_EMR_TRIGSRCA_PWMx (0x1u << 0) /**< \brief (TC_EMR) the trigger/capture input A is driven internally by PWMx */\r
+#define TC_EMR_TRIGSRCB_Pos 4\r
+#define TC_EMR_TRIGSRCB_Msk (0x3u << TC_EMR_TRIGSRCB_Pos) /**< \brief (TC_EMR) TRIGger SouRCe for input B */\r
+#define   TC_EMR_TRIGSRCB_EXTERNAL_TIOBx (0x0u << 4) /**< \brief (TC_EMR) the trigger/capture input B is driven by external pin TIOBx */\r
+#define   TC_EMR_TRIGSRCB_PWMx (0x1u << 4) /**< \brief (TC_EMR) the trigger/capture input B is driven internally by PWMx */\r
+#define TC_EMR_NODIVCLK (0x1u << 8) /**< \brief (TC_EMR) NO DIVided CLocK */\r
+/* -------- TC_BCR : (TC Offset: 0xC0) Block Control Register -------- */\r
+#define TC_BCR_SYNC (0x1u << 0) /**< \brief (TC_BCR) Synchro Command */\r
+/* -------- TC_BMR : (TC Offset: 0xC4) Block Mode Register -------- */\r
+#define TC_BMR_TC0XC0S_Pos 0\r
+#define TC_BMR_TC0XC0S_Msk (0x3u << TC_BMR_TC0XC0S_Pos) /**< \brief (TC_BMR) External Clock Signal 0 Selection */\r
+#define   TC_BMR_TC0XC0S_TCLK0 (0x0u << 0) /**< \brief (TC_BMR) Signal connected to XC0: TCLK0 */\r
+#define   TC_BMR_TC0XC0S_TIOA1 (0x2u << 0) /**< \brief (TC_BMR) Signal connected to XC0: TIOA1 */\r
+#define   TC_BMR_TC0XC0S_TIOA2 (0x3u << 0) /**< \brief (TC_BMR) Signal connected to XC0: TIOA2 */\r
+#define TC_BMR_TC1XC1S_Pos 2\r
+#define TC_BMR_TC1XC1S_Msk (0x3u << TC_BMR_TC1XC1S_Pos) /**< \brief (TC_BMR) External Clock Signal 1 Selection */\r
+#define   TC_BMR_TC1XC1S_TCLK1 (0x0u << 2) /**< \brief (TC_BMR) Signal connected to XC1: TCLK1 */\r
+#define   TC_BMR_TC1XC1S_TIOA0 (0x2u << 2) /**< \brief (TC_BMR) Signal connected to XC1: TIOA0 */\r
+#define   TC_BMR_TC1XC1S_TIOA2 (0x3u << 2) /**< \brief (TC_BMR) Signal connected to XC1: TIOA2 */\r
+#define TC_BMR_TC2XC2S_Pos 4\r
+#define TC_BMR_TC2XC2S_Msk (0x3u << TC_BMR_TC2XC2S_Pos) /**< \brief (TC_BMR) External Clock Signal 2 Selection */\r
+#define   TC_BMR_TC2XC2S_TCLK2 (0x0u << 4) /**< \brief (TC_BMR) Signal connected to XC2: TCLK2 */\r
+#define   TC_BMR_TC2XC2S_TIOA1 (0x2u << 4) /**< \brief (TC_BMR) Signal connected to XC2: TIOA1 */\r
+#define   TC_BMR_TC2XC2S_TIOA2 (0x3u << 4) /**< \brief (TC_BMR) Signal connected to XC2: TIOA2 */\r
+#define TC_BMR_QDEN (0x1u << 8) /**< \brief (TC_BMR) Quadrature Decoder ENabled */\r
+#define TC_BMR_POSEN (0x1u << 9) /**< \brief (TC_BMR) POSition ENabled */\r
+#define TC_BMR_SPEEDEN (0x1u << 10) /**< \brief (TC_BMR) SPEED ENabled */\r
+#define TC_BMR_QDTRANS (0x1u << 11) /**< \brief (TC_BMR) Quadrature Decoding TRANSparent */\r
+#define TC_BMR_EDGPHA (0x1u << 12) /**< \brief (TC_BMR) EDGe on PHA count mode */\r
+#define TC_BMR_INVA (0x1u << 13) /**< \brief (TC_BMR) INVerted phA */\r
+#define TC_BMR_INVB (0x1u << 14) /**< \brief (TC_BMR) INVerted phB */\r
+#define TC_BMR_INVIDX (0x1u << 15) /**< \brief (TC_BMR) INVerted InDeX */\r
+#define TC_BMR_SWAP (0x1u << 16) /**< \brief (TC_BMR) SWAP PHA and PHB */\r
+#define TC_BMR_IDXPHB (0x1u << 17) /**< \brief (TC_BMR) InDeX pin is PHB pin */\r
+#define TC_BMR_FILTER (0x1u << 19) /**< \brief (TC_BMR)  */\r
+#define TC_BMR_MAXFILT_Pos 20\r
+#define TC_BMR_MAXFILT_Msk (0x3fu << TC_BMR_MAXFILT_Pos) /**< \brief (TC_BMR) MAXimum FILTer */\r
+#define TC_BMR_MAXFILT(value) ((TC_BMR_MAXFILT_Msk & ((value) << TC_BMR_MAXFILT_Pos)))\r
+/* -------- TC_QIER : (TC Offset: 0xC8) QDEC Interrupt Enable Register -------- */\r
+#define TC_QIER_IDX (0x1u << 0) /**< \brief (TC_QIER) InDeX */\r
+#define TC_QIER_DIRCHG (0x1u << 1) /**< \brief (TC_QIER) DIRection CHanGe */\r
+#define TC_QIER_QERR (0x1u << 2) /**< \brief (TC_QIER) Quadrature ERRor */\r
+/* -------- TC_QIDR : (TC Offset: 0xCC) QDEC Interrupt Disable Register -------- */\r
+#define TC_QIDR_IDX (0x1u << 0) /**< \brief (TC_QIDR) InDeX */\r
+#define TC_QIDR_DIRCHG (0x1u << 1) /**< \brief (TC_QIDR) DIRection CHanGe */\r
+#define TC_QIDR_QERR (0x1u << 2) /**< \brief (TC_QIDR) Quadrature ERRor */\r
+/* -------- TC_QIMR : (TC Offset: 0xD0) QDEC Interrupt Mask Register -------- */\r
+#define TC_QIMR_IDX (0x1u << 0) /**< \brief (TC_QIMR) InDeX */\r
+#define TC_QIMR_DIRCHG (0x1u << 1) /**< \brief (TC_QIMR) DIRection CHanGe */\r
+#define TC_QIMR_QERR (0x1u << 2) /**< \brief (TC_QIMR) Quadrature ERRor */\r
+/* -------- TC_QISR : (TC Offset: 0xD4) QDEC Interrupt Status Register -------- */\r
+#define TC_QISR_IDX (0x1u << 0) /**< \brief (TC_QISR) InDeX */\r
+#define TC_QISR_DIRCHG (0x1u << 1) /**< \brief (TC_QISR) DIRection CHanGe */\r
+#define TC_QISR_QERR (0x1u << 2) /**< \brief (TC_QISR) Quadrature ERRor */\r
+#define TC_QISR_DIR (0x1u << 8) /**< \brief (TC_QISR) DIRection */\r
+/* -------- TC_FMR : (TC Offset: 0xD8) Fault Mode Register -------- */\r
+#define TC_FMR_ENCF0 (0x1u << 0) /**< \brief (TC_FMR) ENable Compare Fault Channel 0 */\r
+#define TC_FMR_ENCF1 (0x1u << 1) /**< \brief (TC_FMR) ENable Compare Fault Channel 1 */\r
+/* -------- TC_WPMR : (TC Offset: 0xE4) Write Protect Mode Register -------- */\r
+#define TC_WPMR_WPEN (0x1u << 0) /**< \brief (TC_WPMR) Write Protect Enable */\r
+#define TC_WPMR_WPKEY_Pos 8\r
+#define TC_WPMR_WPKEY_Msk (0xffffffu << TC_WPMR_WPKEY_Pos) /**< \brief (TC_WPMR) Write Protect KEY */\r
+#define   TC_WPMR_WPKEY_PASSWD (0x54494Du << 8) /**< \brief (TC_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit.Always reads as 0. */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Triple Data Encryption Standard */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_TDES Triple Data Encryption Standard */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Tdes hardware registers */\r
+typedef struct {\r
+  __O  uint32_t TDES_CR;        /**< \brief (Tdes Offset: 0x00) Control Register */\r
+  __IO uint32_t TDES_MR;        /**< \brief (Tdes Offset: 0x04) Mode Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __O  uint32_t TDES_IER;       /**< \brief (Tdes Offset: 0x10) Interrupt Enable Register */\r
+  __O  uint32_t TDES_IDR;       /**< \brief (Tdes Offset: 0x14) Interrupt Disable Register */\r
+  __I  uint32_t TDES_IMR;       /**< \brief (Tdes Offset: 0x18) Interrupt Mask Register */\r
+  __I  uint32_t TDES_ISR;       /**< \brief (Tdes Offset: 0x1C) Interrupt Status Register */\r
+  __O  uint32_t TDES_KEY1WR[2]; /**< \brief (Tdes Offset: 0x20) Key 1 Word Register */\r
+  __O  uint32_t TDES_KEY2WR[2]; /**< \brief (Tdes Offset: 0x28) Key 2 Word Register */\r
+  __O  uint32_t TDES_KEY3WR[2]; /**< \brief (Tdes Offset: 0x30) Key 3 Word Register */\r
+  __I  uint32_t Reserved2[2];\r
+  __O  uint32_t TDES_IDATAR[2]; /**< \brief (Tdes Offset: 0x40) Input Data Register */\r
+  __I  uint32_t Reserved3[2];\r
+  __I  uint32_t TDES_ODATAR[2]; /**< \brief (Tdes Offset: 0x50) Output Data Register */\r
+  __I  uint32_t Reserved4[2];\r
+  __O  uint32_t TDES_IVR[2];    /**< \brief (Tdes Offset: 0x60) Initialization Vector Register */\r
+  __I  uint32_t Reserved5[2];\r
+  __IO uint32_t TDES_XTEA_RNDR; /**< \brief (Tdes Offset: 0x70) XTEA Rounds Register */\r
+} Tdes;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- TDES_CR : (TDES Offset: 0x00) Control Register -------- */\r
+#define TDES_CR_START (0x1u << 0) /**< \brief (TDES_CR) Start Processing */\r
+#define TDES_CR_SWRST (0x1u << 8) /**< \brief (TDES_CR) Software Reset */\r
+#define TDES_CR_LOADSEED (0x1u << 16) /**< \brief (TDES_CR) Load Seed */\r
+/* -------- TDES_MR : (TDES Offset: 0x04) Mode Register -------- */\r
+#define TDES_MR_CIPHER (0x1u << 0) /**< \brief (TDES_MR) Processing Mode */\r
+#define   TDES_MR_CIPHER_DECRYPT (0x0u << 0) /**< \brief (TDES_MR) Decrypts data. */\r
+#define   TDES_MR_CIPHER_ENCRYPT (0x1u << 0) /**< \brief (TDES_MR) Encrypts data. */\r
+#define TDES_MR_TDESMOD_Pos 1\r
+#define TDES_MR_TDESMOD_Msk (0x3u << TDES_MR_TDESMOD_Pos) /**< \brief (TDES_MR) ALGORITHM mode */\r
+#define TDES_MR_TDESMOD(value) ((TDES_MR_TDESMOD_Msk & ((value) << TDES_MR_TDESMOD_Pos)))\r
+#define TDES_MR_KEYMOD (0x1u << 4) /**< \brief (TDES_MR) Key Mode */\r
+#define TDES_MR_SMOD_Pos 8\r
+#define TDES_MR_SMOD_Msk (0x3u << TDES_MR_SMOD_Pos) /**< \brief (TDES_MR) Start Mode */\r
+#define   TDES_MR_SMOD_MANUAL_START (0x0u << 8) /**< \brief (TDES_MR) Manual Mode */\r
+#define   TDES_MR_SMOD_AUTO_START (0x1u << 8) /**< \brief (TDES_MR) Auto Mode */\r
+#define   TDES_MR_SMOD_IDATAR0_START (0x2u << 8) /**< \brief (TDES_MR) TDES_IDATAR0 access only Auto Mode */\r
+#define TDES_MR_OPMOD_Pos 12\r
+#define TDES_MR_OPMOD_Msk (0x3u << TDES_MR_OPMOD_Pos) /**< \brief (TDES_MR) Operation Mode */\r
+#define   TDES_MR_OPMOD_ECB (0x0u << 12) /**< \brief (TDES_MR) ECB: Electronic Code Book mode */\r
+#define   TDES_MR_OPMOD_CBC (0x1u << 12) /**< \brief (TDES_MR) CBC: Cipher Block Chaining mode */\r
+#define   TDES_MR_OPMOD_OFB (0x2u << 12) /**< \brief (TDES_MR) OFB: Output Feedback mode */\r
+#define   TDES_MR_OPMOD_CFB (0x3u << 12) /**< \brief (TDES_MR) CFB: Cipher Feedback mode */\r
+#define TDES_MR_LOD (0x1u << 15) /**< \brief (TDES_MR) Last Output Data Mode */\r
+#define TDES_MR_CFBS_Pos 16\r
+#define TDES_MR_CFBS_Msk (0x3u << TDES_MR_CFBS_Pos) /**< \brief (TDES_MR) Cipher Feedback Data Size */\r
+#define   TDES_MR_CFBS_SIZE_64BIT (0x0u << 16) /**< \brief (TDES_MR) 64-bit */\r
+#define   TDES_MR_CFBS_SIZE_32BIT (0x1u << 16) /**< \brief (TDES_MR) 32-bit */\r
+#define   TDES_MR_CFBS_SIZE_16BIT (0x2u << 16) /**< \brief (TDES_MR) 16-bit */\r
+#define   TDES_MR_CFBS_SIZE_8BIT (0x3u << 16) /**< \brief (TDES_MR) 8-bit */\r
+#define TDES_MR_CKEY_Pos 20\r
+#define TDES_MR_CKEY_Msk (0xfu << TDES_MR_CKEY_Pos) /**< \brief (TDES_MR) Countermeasure Key */\r
+#define TDES_MR_CKEY(value) ((TDES_MR_CKEY_Msk & ((value) << TDES_MR_CKEY_Pos)))\r
+#define TDES_MR_CMTYP1 (0x1u << 24) /**< \brief (TDES_MR) Countermeasure Type 1 */\r
+#define   TDES_MR_CMTYP1_NO_PAUSE (0x0u << 24) /**< \brief (TDES_MR) Countermeasure type 1 is disabled */\r
+#define   TDES_MR_CMTYP1_PAUSE (0x1u << 24) /**< \brief (TDES_MR) Counter-Measure type 1 is enabled */\r
+#define TDES_MR_CMTYP2 (0x1u << 25) /**< \brief (TDES_MR) Countermeasure Type 2 */\r
+#define   TDES_MR_CMTYP2_NO_DUMMY (0x0u << 25) /**< \brief (TDES_MR) Countermeasure type 2 is disabled */\r
+#define   TDES_MR_CMTYP2_DUMMY (0x1u << 25) /**< \brief (TDES_MR) Countermeasure type 2 is enabled */\r
+#define TDES_MR_CMTYP3 (0x1u << 26) /**< \brief (TDES_MR) Countermeasure Type 3 */\r
+#define   TDES_MR_CMTYP3_NO_RESTART (0x0u << 26) /**< \brief (TDES_MR) Countermeasure type 3 is disabled */\r
+#define   TDES_MR_CMTYP3_RESTART (0x1u << 26) /**< \brief (TDES_MR) Countermeasure type 3 is enabled */\r
+#define TDES_MR_CMTYP4 (0x1u << 27) /**< \brief (TDES_MR) Countermeasure Type 4 */\r
+#define   TDES_MR_CMTYP4_NO_IDLECURRENT (0x0u << 27) /**< \brief (TDES_MR) Countermeasure type 4 is disabled */\r
+#define   TDES_MR_CMTYP4_IDLECURRENT (0x1u << 27) /**< \brief (TDES_MR) Countermeasure type 4 is enabled */\r
+#define TDES_MR_CMTYP5 (0x1u << 28) /**< \brief (TDES_MR) Countermeasure Type 5 */\r
+#define   TDES_MR_CMTYP5_NO_ADDACCESS (0x0u << 28) /**< \brief (TDES_MR) Countermeasure type 5 is disabled */\r
+#define   TDES_MR_CMTYP5_ADDACCESS (0x1u << 28) /**< \brief (TDES_MR) Countermeasure type 5 is enabled */\r
+#define TDES_MR_CMTYP6 (0x1u << 29) /**< \brief (TDES_MR) Countermeasure Type 6 */\r
+#define   TDES_MR_CMTYP6_NO_UNIFORM (0x0u << 29) /**< \brief (TDES_MR) Countermeasure type 6 is disabled */\r
+#define   TDES_MR_CMTYP6_UNIFORM (0x1u << 29) /**< \brief (TDES_MR) Countermeasure type 6 is enabled */\r
+/* -------- TDES_IER : (TDES Offset: 0x10) Interrupt Enable Register -------- */\r
+#define TDES_IER_DATRDY (0x1u << 0) /**< \brief (TDES_IER) Data Ready Interrupt Enable */\r
+#define TDES_IER_URAD (0x1u << 8) /**< \brief (TDES_IER) Unspecified Register Access Detection Interrupt Enable */\r
+/* -------- TDES_IDR : (TDES Offset: 0x14) Interrupt Disable Register -------- */\r
+#define TDES_IDR_DATRDY (0x1u << 0) /**< \brief (TDES_IDR) Data Ready Interrupt Disable */\r
+#define TDES_IDR_URAD (0x1u << 8) /**< \brief (TDES_IDR) Unspecified Register Access Detection Interrupt Disable */\r
+/* -------- TDES_IMR : (TDES Offset: 0x18) Interrupt Mask Register -------- */\r
+#define TDES_IMR_DATRDY (0x1u << 0) /**< \brief (TDES_IMR) Data Ready Interrupt Mask */\r
+#define TDES_IMR_URAD (0x1u << 8) /**< \brief (TDES_IMR) Unspecified Register Access Detection Interrupt Mask */\r
+/* -------- TDES_ISR : (TDES Offset: 0x1C) Interrupt Status Register -------- */\r
+#define TDES_ISR_DATRDY (0x1u << 0) /**< \brief (TDES_ISR) Data Ready */\r
+#define TDES_ISR_URAD (0x1u << 8) /**< \brief (TDES_ISR) Unspecified Register Access Detection Status */\r
+#define TDES_ISR_URAT_Pos 12\r
+#define TDES_ISR_URAT_Msk (0x3u << TDES_ISR_URAT_Pos) /**< \brief (TDES_ISR) Unspecified Register Access */\r
+#define   TDES_ISR_URAT_IDR_WR_PROCESSING (0x0u << 12) /**< \brief (TDES_ISR) Input Data Register written during the data processing when SMOD=0x2 mode. */\r
+#define   TDES_ISR_URAT_ODR_RD_PROCESSING (0x1u << 12) /**< \brief (TDES_ISR) Output Data Register read during the data processing. */\r
+#define   TDES_ISR_URAT_MR_WR_PROCESSING (0x2u << 12) /**< \brief (TDES_ISR) Mode Register written during the data processing. */\r
+#define   TDES_ISR_URAT_WOR_RD_ACCESS (0x3u << 12) /**< \brief (TDES_ISR) Write-only register read access. */\r
+/* -------- TDES_KEY1WR[2] : (TDES Offset: 0x20) Key 1 Word Register -------- */\r
+#define TDES_KEY1WR_KEY1W_Pos 0\r
+#define TDES_KEY1WR_KEY1W_Msk (0xffffffffu << TDES_KEY1WR_KEY1W_Pos) /**< \brief (TDES_KEY1WR[2]) Key 1 Word */\r
+#define TDES_KEY1WR_KEY1W(value) ((TDES_KEY1WR_KEY1W_Msk & ((value) << TDES_KEY1WR_KEY1W_Pos)))\r
+/* -------- TDES_KEY2WR[2] : (TDES Offset: 0x28) Key 2 Word Register -------- */\r
+#define TDES_KEY2WR_KEY2W_Pos 0\r
+#define TDES_KEY2WR_KEY2W_Msk (0xffffffffu << TDES_KEY2WR_KEY2W_Pos) /**< \brief (TDES_KEY2WR[2]) Key 2 Word */\r
+#define TDES_KEY2WR_KEY2W(value) ((TDES_KEY2WR_KEY2W_Msk & ((value) << TDES_KEY2WR_KEY2W_Pos)))\r
+/* -------- TDES_KEY3WR[2] : (TDES Offset: 0x30) Key 3 Word Register -------- */\r
+#define TDES_KEY3WR_KEY3W_Pos 0\r
+#define TDES_KEY3WR_KEY3W_Msk (0xffffffffu << TDES_KEY3WR_KEY3W_Pos) /**< \brief (TDES_KEY3WR[2]) Key 3 Word */\r
+#define TDES_KEY3WR_KEY3W(value) ((TDES_KEY3WR_KEY3W_Msk & ((value) << TDES_KEY3WR_KEY3W_Pos)))\r
+/* -------- TDES_IDATAR[2] : (TDES Offset: 0x40) Input Data Register -------- */\r
+#define TDES_IDATAR_IDATA_Pos 0\r
+#define TDES_IDATAR_IDATA_Msk (0xffffffffu << TDES_IDATAR_IDATA_Pos) /**< \brief (TDES_IDATAR[2]) Input Data */\r
+#define TDES_IDATAR_IDATA(value) ((TDES_IDATAR_IDATA_Msk & ((value) << TDES_IDATAR_IDATA_Pos)))\r
+/* -------- TDES_ODATAR[2] : (TDES Offset: 0x50) Output Data Register -------- */\r
+#define TDES_ODATAR_ODATA_Pos 0\r
+#define TDES_ODATAR_ODATA_Msk (0xffffffffu << TDES_ODATAR_ODATA_Pos) /**< \brief (TDES_ODATAR[2]) Output Data */\r
+/* -------- TDES_IVR[2] : (TDES Offset: 0x60) Initialization Vector Register -------- */\r
+#define TDES_IVR_IV_Pos 0\r
+#define TDES_IVR_IV_Msk (0xffffffffu << TDES_IVR_IV_Pos) /**< \brief (TDES_IVR[2]) Initialization Vector */\r
+#define TDES_IVR_IV(value) ((TDES_IVR_IV_Msk & ((value) << TDES_IVR_IV_Pos)))\r
+/* -------- TDES_XTEA_RNDR : (TDES Offset: 0x70) XTEA Rounds Register -------- */\r
+#define TDES_XTEA_RNDR_XTEA_RNDS_Pos 0\r
+#define TDES_XTEA_RNDR_XTEA_RNDS_Msk (0x3fu << TDES_XTEA_RNDR_XTEA_RNDS_Pos) /**< \brief (TDES_XTEA_RNDR) Number of Rounds */\r
+#define TDES_XTEA_RNDR_XTEA_RNDS(value) ((TDES_XTEA_RNDR_XTEA_RNDS_Msk & ((value) << TDES_XTEA_RNDR_XTEA_RNDS_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR True Random Number Generator */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_TRNG True Random Number Generator */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Trng hardware registers */\r
+typedef struct {\r
+  __O uint32_t TRNG_CR;       /**< \brief (Trng Offset: 0x00) Control Register */\r
+  __I uint32_t Reserved1[3];\r
+  __O uint32_t TRNG_IER;      /**< \brief (Trng Offset: 0x10) Interrupt Enable Register */\r
+  __O uint32_t TRNG_IDR;      /**< \brief (Trng Offset: 0x14) Interrupt Disable Register */\r
+  __I uint32_t TRNG_IMR;      /**< \brief (Trng Offset: 0x18) Interrupt Mask Register */\r
+  __I uint32_t TRNG_ISR;      /**< \brief (Trng Offset: 0x1C) Interrupt Status Register */\r
+  __I uint32_t Reserved2[12];\r
+  __I uint32_t TRNG_ODATA;    /**< \brief (Trng Offset: 0x50) Output Data Register */\r
+} Trng;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- TRNG_CR : (TRNG Offset: 0x00) Control Register -------- */\r
+#define TRNG_CR_ENABLE (0x1u << 0) /**< \brief (TRNG_CR) Enables the TRNG to provide random values */\r
+#define TRNG_CR_KEY_Pos 8\r
+#define TRNG_CR_KEY_Msk (0xffffffu << TRNG_CR_KEY_Pos) /**< \brief (TRNG_CR) Security Key */\r
+#define TRNG_CR_KEY(value) ((TRNG_CR_KEY_Msk & ((value) << TRNG_CR_KEY_Pos)))\r
+/* -------- TRNG_IER : (TRNG Offset: 0x10) Interrupt Enable Register -------- */\r
+#define TRNG_IER_DATRDY (0x1u << 0) /**< \brief (TRNG_IER) Data Ready Interrupt Enable */\r
+/* -------- TRNG_IDR : (TRNG Offset: 0x14) Interrupt Disable Register -------- */\r
+#define TRNG_IDR_DATRDY (0x1u << 0) /**< \brief (TRNG_IDR) Data Ready Interrupt Disable */\r
+/* -------- TRNG_IMR : (TRNG Offset: 0x18) Interrupt Mask Register -------- */\r
+#define TRNG_IMR_DATRDY (0x1u << 0) /**< \brief (TRNG_IMR) Data Ready Interrupt Mask */\r
+/* -------- TRNG_ISR : (TRNG Offset: 0x1C) Interrupt Status Register -------- */\r
+#define TRNG_ISR_DATRDY (0x1u << 0) /**< \brief (TRNG_ISR) Data Ready */\r
+/* -------- TRNG_ODATA : (TRNG Offset: 0x50) Output Data Register -------- */\r
+#define TRNG_ODATA_ODATA_Pos 0\r
+#define TRNG_ODATA_ODATA_Msk (0xffffffffu << TRNG_ODATA_ODATA_Pos) /**< \brief (TRNG_ODATA) Output Data */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Two-wire Interface */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_TWI Two-wire Interface */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Twi hardware registers */\r
+typedef struct {\r
+  __O  uint32_t TWI_CR;        /**< \brief (Twi Offset: 0x00) Control Register */\r
+  __IO uint32_t TWI_MMR;       /**< \brief (Twi Offset: 0x04) Master Mode Register */\r
+  __IO uint32_t TWI_SMR;       /**< \brief (Twi Offset: 0x08) Slave Mode Register */\r
+  __IO uint32_t TWI_IADR;      /**< \brief (Twi Offset: 0x0C) Internal Address Register */\r
+  __IO uint32_t TWI_CWGR;      /**< \brief (Twi Offset: 0x10) Clock Waveform Generator Register */\r
+  __I  uint32_t Reserved1[3];\r
+  __I  uint32_t TWI_SR;        /**< \brief (Twi Offset: 0x20) Status Register */\r
+  __O  uint32_t TWI_IER;       /**< \brief (Twi Offset: 0x24) Interrupt Enable Register */\r
+  __O  uint32_t TWI_IDR;       /**< \brief (Twi Offset: 0x28) Interrupt Disable Register */\r
+  __I  uint32_t TWI_IMR;       /**< \brief (Twi Offset: 0x2C) Interrupt Mask Register */\r
+  __I  uint32_t TWI_RHR;       /**< \brief (Twi Offset: 0x30) Receive Holding Register */\r
+  __O  uint32_t TWI_THR;       /**< \brief (Twi Offset: 0x34) Transmit Holding Register */\r
+  __I  uint32_t Reserved2[43];\r
+  __IO uint32_t TWI_WPMR;      /**< \brief (Twi Offset: 0xE4) Protection Mode Register */\r
+  __I  uint32_t TWI_WPSR;      /**< \brief (Twi Offset: 0xE8) Protection Status Register */\r
+} Twi;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- TWI_CR : (TWI Offset: 0x00) Control Register -------- */\r
+#define TWI_CR_START (0x1u << 0) /**< \brief (TWI_CR) Send a START Condition */\r
+#define TWI_CR_STOP (0x1u << 1) /**< \brief (TWI_CR) Send a STOP Condition */\r
+#define TWI_CR_MSEN (0x1u << 2) /**< \brief (TWI_CR) TWI Master Mode Enabled */\r
+#define TWI_CR_MSDIS (0x1u << 3) /**< \brief (TWI_CR) TWI Master Mode Disabled */\r
+#define TWI_CR_SVEN (0x1u << 4) /**< \brief (TWI_CR) TWI Slave Mode Enabled */\r
+#define TWI_CR_SVDIS (0x1u << 5) /**< \brief (TWI_CR) TWI Slave Mode Disabled */\r
+#define TWI_CR_SWRST (0x1u << 7) /**< \brief (TWI_CR) Software Reset */\r
+/* -------- TWI_MMR : (TWI Offset: 0x04) Master Mode Register -------- */\r
+#define TWI_MMR_IADRSZ_Pos 8\r
+#define TWI_MMR_IADRSZ_Msk (0x3u << TWI_MMR_IADRSZ_Pos) /**< \brief (TWI_MMR) Internal Device Address Size */\r
+#define   TWI_MMR_IADRSZ_NONE (0x0u << 8) /**< \brief (TWI_MMR) No internal device address */\r
+#define   TWI_MMR_IADRSZ_1_BYTE (0x1u << 8) /**< \brief (TWI_MMR) One-byte internal device address */\r
+#define   TWI_MMR_IADRSZ_2_BYTE (0x2u << 8) /**< \brief (TWI_MMR) Two-byte internal device address */\r
+#define   TWI_MMR_IADRSZ_3_BYTE (0x3u << 8) /**< \brief (TWI_MMR) Three-byte internal device address */\r
+#define TWI_MMR_MREAD (0x1u << 12) /**< \brief (TWI_MMR) Master Read Direction */\r
+#define TWI_MMR_DADR_Pos 16\r
+#define TWI_MMR_DADR_Msk (0x7fu << TWI_MMR_DADR_Pos) /**< \brief (TWI_MMR) Device Address */\r
+#define TWI_MMR_DADR(value) ((TWI_MMR_DADR_Msk & ((value) << TWI_MMR_DADR_Pos)))\r
+/* -------- TWI_SMR : (TWI Offset: 0x08) Slave Mode Register -------- */\r
+#define TWI_SMR_SADR_Pos 16\r
+#define TWI_SMR_SADR_Msk (0x7fu << TWI_SMR_SADR_Pos) /**< \brief (TWI_SMR) Slave Address */\r
+#define TWI_SMR_SADR(value) ((TWI_SMR_SADR_Msk & ((value) << TWI_SMR_SADR_Pos)))\r
+/* -------- TWI_IADR : (TWI Offset: 0x0C) Internal Address Register -------- */\r
+#define TWI_IADR_IADR_Pos 0\r
+#define TWI_IADR_IADR_Msk (0xffffffu << TWI_IADR_IADR_Pos) /**< \brief (TWI_IADR) Internal Address */\r
+#define TWI_IADR_IADR(value) ((TWI_IADR_IADR_Msk & ((value) << TWI_IADR_IADR_Pos)))\r
+/* -------- TWI_CWGR : (TWI Offset: 0x10) Clock Waveform Generator Register -------- */\r
+#define TWI_CWGR_CLDIV_Pos 0\r
+#define TWI_CWGR_CLDIV_Msk (0xffu << TWI_CWGR_CLDIV_Pos) /**< \brief (TWI_CWGR) Clock Low Divider */\r
+#define TWI_CWGR_CLDIV(value) ((TWI_CWGR_CLDIV_Msk & ((value) << TWI_CWGR_CLDIV_Pos)))\r
+#define TWI_CWGR_CHDIV_Pos 8\r
+#define TWI_CWGR_CHDIV_Msk (0xffu << TWI_CWGR_CHDIV_Pos) /**< \brief (TWI_CWGR) Clock High Divider */\r
+#define TWI_CWGR_CHDIV(value) ((TWI_CWGR_CHDIV_Msk & ((value) << TWI_CWGR_CHDIV_Pos)))\r
+#define TWI_CWGR_CKDIV_Pos 16\r
+#define TWI_CWGR_CKDIV_Msk (0x7u << TWI_CWGR_CKDIV_Pos) /**< \brief (TWI_CWGR) Clock Divider */\r
+#define TWI_CWGR_CKDIV(value) ((TWI_CWGR_CKDIV_Msk & ((value) << TWI_CWGR_CKDIV_Pos)))\r
+#define TWI_CWGR_HOLD_Pos 24\r
+#define TWI_CWGR_HOLD_Msk (0x1fu << TWI_CWGR_HOLD_Pos) /**< \brief (TWI_CWGR) TWD Hold Time versus TWCK falling */\r
+#define TWI_CWGR_HOLD(value) ((TWI_CWGR_HOLD_Msk & ((value) << TWI_CWGR_HOLD_Pos)))\r
+/* -------- TWI_SR : (TWI Offset: 0x20) Status Register -------- */\r
+#define TWI_SR_TXCOMP (0x1u << 0) /**< \brief (TWI_SR) Transmission Completed (automatically set / reset) */\r
+#define TWI_SR_RXRDY (0x1u << 1) /**< \brief (TWI_SR) Receive Holding Register Ready (automatically set / reset) */\r
+#define TWI_SR_TXRDY (0x1u << 2) /**< \brief (TWI_SR) Transmit Holding Register Ready (automatically set / reset) */\r
+#define TWI_SR_SVREAD (0x1u << 3) /**< \brief (TWI_SR) Slave Read (automatically set / reset) */\r
+#define TWI_SR_SVACC (0x1u << 4) /**< \brief (TWI_SR) Slave Access (automatically set / reset) */\r
+#define TWI_SR_GACC (0x1u << 5) /**< \brief (TWI_SR) General Call Access (clear on read) */\r
+#define TWI_SR_OVRE (0x1u << 6) /**< \brief (TWI_SR) Overrun Error (clear on read) */\r
+#define TWI_SR_NACK (0x1u << 8) /**< \brief (TWI_SR) Not Acknowledged (clear on read) */\r
+#define TWI_SR_ARBLST (0x1u << 9) /**< \brief (TWI_SR) Arbitration Lost (clear on read) */\r
+#define TWI_SR_SCLWS (0x1u << 10) /**< \brief (TWI_SR) Clock Wait State (automatically set / reset) */\r
+#define TWI_SR_EOSACC (0x1u << 11) /**< \brief (TWI_SR) End Of Slave Access (clear on read) */\r
+/* -------- TWI_IER : (TWI Offset: 0x24) Interrupt Enable Register -------- */\r
+#define TWI_IER_TXCOMP (0x1u << 0) /**< \brief (TWI_IER) Transmission Completed Interrupt Enable */\r
+#define TWI_IER_RXRDY (0x1u << 1) /**< \brief (TWI_IER) Receive Holding Register Ready Interrupt Enable */\r
+#define TWI_IER_TXRDY (0x1u << 2) /**< \brief (TWI_IER) Transmit Holding Register Ready Interrupt Enable */\r
+#define TWI_IER_SVACC (0x1u << 4) /**< \brief (TWI_IER) Slave Access Interrupt Enable */\r
+#define TWI_IER_GACC (0x1u << 5) /**< \brief (TWI_IER) General Call Access Interrupt Enable */\r
+#define TWI_IER_OVRE (0x1u << 6) /**< \brief (TWI_IER) Overrun Error Interrupt Enable */\r
+#define TWI_IER_NACK (0x1u << 8) /**< \brief (TWI_IER) Not Acknowledge Interrupt Enable */\r
+#define TWI_IER_ARBLST (0x1u << 9) /**< \brief (TWI_IER) Arbitration Lost Interrupt Enable */\r
+#define TWI_IER_SCL_WS (0x1u << 10) /**< \brief (TWI_IER) Clock Wait State Interrupt Enable */\r
+#define TWI_IER_EOSACC (0x1u << 11) /**< \brief (TWI_IER) End Of Slave Access Interrupt Enable */\r
+/* -------- TWI_IDR : (TWI Offset: 0x28) Interrupt Disable Register -------- */\r
+#define TWI_IDR_TXCOMP (0x1u << 0) /**< \brief (TWI_IDR) Transmission Completed Interrupt Disable */\r
+#define TWI_IDR_RXRDY (0x1u << 1) /**< \brief (TWI_IDR) Receive Holding Register Ready Interrupt Disable */\r
+#define TWI_IDR_TXRDY (0x1u << 2) /**< \brief (TWI_IDR) Transmit Holding Register Ready Interrupt Disable */\r
+#define TWI_IDR_SVACC (0x1u << 4) /**< \brief (TWI_IDR) Slave Access Interrupt Disable */\r
+#define TWI_IDR_GACC (0x1u << 5) /**< \brief (TWI_IDR) General Call Access Interrupt Disable */\r
+#define TWI_IDR_OVRE (0x1u << 6) /**< \brief (TWI_IDR) Overrun Error Interrupt Disable */\r
+#define TWI_IDR_NACK (0x1u << 8) /**< \brief (TWI_IDR) Not Acknowledge Interrupt Disable */\r
+#define TWI_IDR_ARBLST (0x1u << 9) /**< \brief (TWI_IDR) Arbitration Lost Interrupt Disable */\r
+#define TWI_IDR_SCL_WS (0x1u << 10) /**< \brief (TWI_IDR) Clock Wait State Interrupt Disable */\r
+#define TWI_IDR_EOSACC (0x1u << 11) /**< \brief (TWI_IDR) End Of Slave Access Interrupt Disable */\r
+/* -------- TWI_IMR : (TWI Offset: 0x2C) Interrupt Mask Register -------- */\r
+#define TWI_IMR_TXCOMP (0x1u << 0) /**< \brief (TWI_IMR) Transmission Completed Interrupt Mask */\r
+#define TWI_IMR_RXRDY (0x1u << 1) /**< \brief (TWI_IMR) Receive Holding Register Ready Interrupt Mask */\r
+#define TWI_IMR_TXRDY (0x1u << 2) /**< \brief (TWI_IMR) Transmit Holding Register Ready Interrupt Mask */\r
+#define TWI_IMR_SVACC (0x1u << 4) /**< \brief (TWI_IMR) Slave Access Interrupt Mask */\r
+#define TWI_IMR_GACC (0x1u << 5) /**< \brief (TWI_IMR) General Call Access Interrupt Mask */\r
+#define TWI_IMR_OVRE (0x1u << 6) /**< \brief (TWI_IMR) Overrun Error Interrupt Mask */\r
+#define TWI_IMR_NACK (0x1u << 8) /**< \brief (TWI_IMR) Not Acknowledge Interrupt Mask */\r
+#define TWI_IMR_ARBLST (0x1u << 9) /**< \brief (TWI_IMR) Arbitration Lost Interrupt Mask */\r
+#define TWI_IMR_SCL_WS (0x1u << 10) /**< \brief (TWI_IMR) Clock Wait State Interrupt Mask */\r
+#define TWI_IMR_EOSACC (0x1u << 11) /**< \brief (TWI_IMR) End Of Slave Access Interrupt Mask */\r
+/* -------- TWI_RHR : (TWI Offset: 0x30) Receive Holding Register -------- */\r
+#define TWI_RHR_RXDATA_Pos 0\r
+#define TWI_RHR_RXDATA_Msk (0xffu << TWI_RHR_RXDATA_Pos) /**< \brief (TWI_RHR) Master or Slave Receive Holding Data */\r
+/* -------- TWI_THR : (TWI Offset: 0x34) Transmit Holding Register -------- */\r
+#define TWI_THR_TXDATA_Pos 0\r
+#define TWI_THR_TXDATA_Msk (0xffu << TWI_THR_TXDATA_Pos) /**< \brief (TWI_THR) Master or Slave Transmit Holding Data */\r
+#define TWI_THR_TXDATA(value) ((TWI_THR_TXDATA_Msk & ((value) << TWI_THR_TXDATA_Pos)))\r
+/* -------- TWI_WPMR : (TWI Offset: 0xE4) Protection Mode Register -------- */\r
+#define TWI_WPMR_WPEN (0x1u << 0) /**< \brief (TWI_WPMR) Write Protect Enable */\r
+#define TWI_WPMR_WPKEY_Pos 8\r
+#define TWI_WPMR_WPKEY_Msk (0xffffffu << TWI_WPMR_WPKEY_Pos) /**< \brief (TWI_WPMR) Write Protect Key */\r
+#define   TWI_WPMR_WPKEY_PASSWD (0x545749u << 8) /**< \brief (TWI_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit.Always reads as 0 */\r
+/* -------- TWI_WPSR : (TWI Offset: 0xE8) Protection Status Register -------- */\r
+#define TWI_WPSR_WPVS (0x1u << 0) /**< \brief (TWI_WPSR) Write Protect Violation Status */\r
+#define TWI_WPSR_WPVSRC_Pos 8\r
+#define TWI_WPSR_WPVSRC_Msk (0xffffffu << TWI_WPSR_WPVSRC_Pos) /**< \brief (TWI_WPSR) Write Protect Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Universal Asynchronous Receiver Transmitter */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_UART Universal Asynchronous Receiver Transmitter */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Uart hardware registers */\r
+typedef struct {\r
+  __O  uint32_t UART_CR;   /**< \brief (Uart Offset: 0x0000) Control Register */\r
+  __IO uint32_t UART_MR;   /**< \brief (Uart Offset: 0x0004) Mode Register */\r
+  __O  uint32_t UART_IER;  /**< \brief (Uart Offset: 0x0008) Interrupt Enable Register */\r
+  __O  uint32_t UART_IDR;  /**< \brief (Uart Offset: 0x000C) Interrupt Disable Register */\r
+  __I  uint32_t UART_IMR;  /**< \brief (Uart Offset: 0x0010) Interrupt Mask Register */\r
+  __I  uint32_t UART_SR;   /**< \brief (Uart Offset: 0x0014) Status Register */\r
+  __I  uint32_t UART_RHR;  /**< \brief (Uart Offset: 0x0018) Receive Holding Register */\r
+  __O  uint32_t UART_THR;  /**< \brief (Uart Offset: 0x001C) Transmit Holding Register */\r
+  __IO uint32_t UART_BRGR; /**< \brief (Uart Offset: 0x0020) Baud Rate Generator Register */\r
+} Uart;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- UART_CR : (UART Offset: 0x0000) Control Register -------- */\r
+#define UART_CR_RSTRX (0x1u << 2) /**< \brief (UART_CR) Reset Receiver */\r
+#define UART_CR_RSTTX (0x1u << 3) /**< \brief (UART_CR) Reset Transmitter */\r
+#define UART_CR_RXEN (0x1u << 4) /**< \brief (UART_CR) Receiver Enable */\r
+#define UART_CR_RXDIS (0x1u << 5) /**< \brief (UART_CR) Receiver Disable */\r
+#define UART_CR_TXEN (0x1u << 6) /**< \brief (UART_CR) Transmitter Enable */\r
+#define UART_CR_TXDIS (0x1u << 7) /**< \brief (UART_CR) Transmitter Disable */\r
+#define UART_CR_RSTSTA (0x1u << 8) /**< \brief (UART_CR) Reset Status Bits */\r
+/* -------- UART_MR : (UART Offset: 0x0004) Mode Register -------- */\r
+#define UART_MR_PAR_Pos 9\r
+#define UART_MR_PAR_Msk (0x7u << UART_MR_PAR_Pos) /**< \brief (UART_MR) Parity Type */\r
+#define   UART_MR_PAR_EVEN (0x0u << 9) /**< \brief (UART_MR) Even Parity */\r
+#define   UART_MR_PAR_ODD (0x1u << 9) /**< \brief (UART_MR) Odd Parity */\r
+#define   UART_MR_PAR_SPACE (0x2u << 9) /**< \brief (UART_MR) Space: parity forced to 0 */\r
+#define   UART_MR_PAR_MARK (0x3u << 9) /**< \brief (UART_MR) Mark: parity forced to 1 */\r
+#define   UART_MR_PAR_NO (0x4u << 9) /**< \brief (UART_MR) No Parity */\r
+#define UART_MR_CHMODE_Pos 14\r
+#define UART_MR_CHMODE_Msk (0x3u << UART_MR_CHMODE_Pos) /**< \brief (UART_MR) Channel Mode */\r
+#define   UART_MR_CHMODE_NORMAL (0x0u << 14) /**< \brief (UART_MR) Normal Mode */\r
+#define   UART_MR_CHMODE_AUTOMATIC (0x1u << 14) /**< \brief (UART_MR) Automatic Echo */\r
+#define   UART_MR_CHMODE_LOCAL_LOOPBACK (0x2u << 14) /**< \brief (UART_MR) Local Loopback */\r
+#define   UART_MR_CHMODE_REMOTE_LOOPBACK (0x3u << 14) /**< \brief (UART_MR) Remote Loopback */\r
+/* -------- UART_IER : (UART Offset: 0x0008) Interrupt Enable Register -------- */\r
+#define UART_IER_RXRDY (0x1u << 0) /**< \brief (UART_IER) Enable RXRDY Interrupt */\r
+#define UART_IER_TXRDY (0x1u << 1) /**< \brief (UART_IER) Enable TXRDY Interrupt */\r
+#define UART_IER_OVRE (0x1u << 5) /**< \brief (UART_IER) Enable Overrun Error Interrupt */\r
+#define UART_IER_FRAME (0x1u << 6) /**< \brief (UART_IER) Enable Framing Error Interrupt */\r
+#define UART_IER_PARE (0x1u << 7) /**< \brief (UART_IER) Enable Parity Error Interrupt */\r
+#define UART_IER_TXEMPTY (0x1u << 9) /**< \brief (UART_IER) Enable TXEMPTY Interrupt */\r
+/* -------- UART_IDR : (UART Offset: 0x000C) Interrupt Disable Register -------- */\r
+#define UART_IDR_RXRDY (0x1u << 0) /**< \brief (UART_IDR) Disable RXRDY Interrupt */\r
+#define UART_IDR_TXRDY (0x1u << 1) /**< \brief (UART_IDR) Disable TXRDY Interrupt */\r
+#define UART_IDR_OVRE (0x1u << 5) /**< \brief (UART_IDR) Disable Overrun Error Interrupt */\r
+#define UART_IDR_FRAME (0x1u << 6) /**< \brief (UART_IDR) Disable Framing Error Interrupt */\r
+#define UART_IDR_PARE (0x1u << 7) /**< \brief (UART_IDR) Disable Parity Error Interrupt */\r
+#define UART_IDR_TXEMPTY (0x1u << 9) /**< \brief (UART_IDR) Disable TXEMPTY Interrupt */\r
+/* -------- UART_IMR : (UART Offset: 0x0010) Interrupt Mask Register -------- */\r
+#define UART_IMR_RXRDY (0x1u << 0) /**< \brief (UART_IMR) Mask RXRDY Interrupt */\r
+#define UART_IMR_TXRDY (0x1u << 1) /**< \brief (UART_IMR) Disable TXRDY Interrupt */\r
+#define UART_IMR_OVRE (0x1u << 5) /**< \brief (UART_IMR) Mask Overrun Error Interrupt */\r
+#define UART_IMR_FRAME (0x1u << 6) /**< \brief (UART_IMR) Mask Framing Error Interrupt */\r
+#define UART_IMR_PARE (0x1u << 7) /**< \brief (UART_IMR) Mask Parity Error Interrupt */\r
+#define UART_IMR_TXEMPTY (0x1u << 9) /**< \brief (UART_IMR) Mask TXEMPTY Interrupt */\r
+/* -------- UART_SR : (UART Offset: 0x0014) Status Register -------- */\r
+#define UART_SR_RXRDY (0x1u << 0) /**< \brief (UART_SR) Receiver Ready */\r
+#define UART_SR_TXRDY (0x1u << 1) /**< \brief (UART_SR) Transmitter Ready */\r
+#define UART_SR_OVRE (0x1u << 5) /**< \brief (UART_SR) Overrun Error */\r
+#define UART_SR_FRAME (0x1u << 6) /**< \brief (UART_SR) Framing Error */\r
+#define UART_SR_PARE (0x1u << 7) /**< \brief (UART_SR) Parity Error */\r
+#define UART_SR_TXEMPTY (0x1u << 9) /**< \brief (UART_SR) Transmitter Empty */\r
+/* -------- UART_RHR : (UART Offset: 0x0018) Receive Holding Register -------- */\r
+#define UART_RHR_RXCHR_Pos 0\r
+#define UART_RHR_RXCHR_Msk (0xffu << UART_RHR_RXCHR_Pos) /**< \brief (UART_RHR) Received Character */\r
+/* -------- UART_THR : (UART Offset: 0x001C) Transmit Holding Register -------- */\r
+#define UART_THR_TXCHR_Pos 0\r
+#define UART_THR_TXCHR_Msk (0xffu << UART_THR_TXCHR_Pos) /**< \brief (UART_THR) Character to be Transmitted */\r
+#define UART_THR_TXCHR(value) ((UART_THR_TXCHR_Msk & ((value) << UART_THR_TXCHR_Pos)))\r
+/* -------- UART_BRGR : (UART Offset: 0x0020) Baud Rate Generator Register -------- */\r
+#define UART_BRGR_CD_Pos 0\r
+#define UART_BRGR_CD_Msk (0xffffu << UART_BRGR_CD_Pos) /**< \brief (UART_BRGR) Clock Divisor */\r
+#define UART_BRGR_CD(value) ((UART_BRGR_CD_Msk & ((value) << UART_BRGR_CD_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR USB High Speed Device Port */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_UDPHS USB High Speed Device Port */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief UdphsDma hardware registers */\r
+typedef struct {\r
+  __IO uint32_t UDPHS_DMANXTDSC;  /**< \brief (UdphsDma Offset: 0x0) UDPHS DMA Next Descriptor Address Register */\r
+  __IO uint32_t UDPHS_DMAADDRESS; /**< \brief (UdphsDma Offset: 0x4) UDPHS DMA Channel Address Register */\r
+  __IO uint32_t UDPHS_DMACONTROL; /**< \brief (UdphsDma Offset: 0x8) UDPHS DMA Channel Control Register */\r
+  __IO uint32_t UDPHS_DMASTATUS;  /**< \brief (UdphsDma Offset: 0xC) UDPHS DMA Channel Status Register */\r
+} UdphsDma;\r
+/** \brief UdphsEpt hardware registers */\r
+typedef struct {\r
+  __IO uint32_t UDPHS_EPTCFG;    /**< \brief (UdphsEpt Offset: 0x0) UDPHS Endpoint Configuration Register */\r
+  __O  uint32_t UDPHS_EPTCTLENB; /**< \brief (UdphsEpt Offset: 0x4) UDPHS Endpoint Control Enable Register */\r
+  __O  uint32_t UDPHS_EPTCTLDIS; /**< \brief (UdphsEpt Offset: 0x8) UDPHS Endpoint Control Disable Register */\r
+  __I  uint32_t UDPHS_EPTCTL;    /**< \brief (UdphsEpt Offset: 0xC) UDPHS Endpoint Control Register */\r
+  __I  uint32_t Reserved1[1];\r
+  __O  uint32_t UDPHS_EPTSETSTA; /**< \brief (UdphsEpt Offset: 0x14) UDPHS Endpoint Set Status Register */\r
+  __O  uint32_t UDPHS_EPTCLRSTA; /**< \brief (UdphsEpt Offset: 0x18) UDPHS Endpoint Clear Status Register */\r
+  __I  uint32_t UDPHS_EPTSTA;    /**< \brief (UdphsEpt Offset: 0x1C) UDPHS Endpoint Status Register */\r
+} UdphsEpt;\r
+/** \brief Udphs hardware registers */\r
+#define UDPHSEPT_NUMBER 16\r
+#define UDPHSDMA_NUMBER 7\r
+typedef struct {\r
+  __IO uint32_t UDPHS_CTRL;                 /**< \brief (Udphs Offset: 0x00) UDPHS Control Register */\r
+  __I  uint32_t UDPHS_FNUM;                 /**< \brief (Udphs Offset: 0x04) UDPHS Frame Number Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __IO uint32_t UDPHS_IEN;                  /**< \brief (Udphs Offset: 0x10) UDPHS Interrupt Enable Register */\r
+  __I  uint32_t UDPHS_INTSTA;               /**< \brief (Udphs Offset: 0x14) UDPHS Interrupt Status Register */\r
+  __O  uint32_t UDPHS_CLRINT;               /**< \brief (Udphs Offset: 0x18) UDPHS Clear Interrupt Register */\r
+  __O  uint32_t UDPHS_EPTRST;               /**< \brief (Udphs Offset: 0x1C) UDPHS Endpoints Reset Register */\r
+  __I  uint32_t Reserved2[48];\r
+  __IO uint32_t UDPHS_TST;                  /**< \brief (Udphs Offset: 0xE0) UDPHS Test Register */\r
+  __I  uint32_t Reserved3[7];\r
+       UdphsEpt UDPHS_EPT[UDPHSEPT_NUMBER]; /**< \brief (Udphs Offset: 0x100) endpoint = 0 .. 15 */\r
+       UdphsDma UDPHS_DMA[UDPHSDMA_NUMBER]; /**< \brief (Udphs Offset: 0x300) channel = 0 .. 6 */\r
+} Udphs;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- UDPHS_CTRL : (UDPHS Offset: 0x00) UDPHS Control Register -------- */\r
+#define UDPHS_CTRL_DEV_ADDR_Pos 0\r
+#define UDPHS_CTRL_DEV_ADDR_Msk (0x7fu << UDPHS_CTRL_DEV_ADDR_Pos) /**< \brief (UDPHS_CTRL) UDPHS Address */\r
+#define UDPHS_CTRL_DEV_ADDR(value) ((UDPHS_CTRL_DEV_ADDR_Msk & ((value) << UDPHS_CTRL_DEV_ADDR_Pos)))\r
+#define UDPHS_CTRL_FADDR_EN (0x1u << 7) /**< \brief (UDPHS_CTRL) Function Address Enable */\r
+#define UDPHS_CTRL_EN_UDPHS (0x1u << 8) /**< \brief (UDPHS_CTRL) UDPHS Enable */\r
+#define UDPHS_CTRL_DETACH (0x1u << 9) /**< \brief (UDPHS_CTRL) Detach Command */\r
+#define UDPHS_CTRL_REWAKEUP (0x1u << 10) /**< \brief (UDPHS_CTRL) Send Remote Wake Up */\r
+#define UDPHS_CTRL_PULLD_DIS (0x1u << 11) /**< \brief (UDPHS_CTRL) Pull-Down Disable */\r
+/* -------- UDPHS_FNUM : (UDPHS Offset: 0x04) UDPHS Frame Number Register -------- */\r
+#define UDPHS_FNUM_MICRO_FRAME_NUM_Pos 0\r
+#define UDPHS_FNUM_MICRO_FRAME_NUM_Msk (0x7u << UDPHS_FNUM_MICRO_FRAME_NUM_Pos) /**< \brief (UDPHS_FNUM) Microframe Number */\r
+#define UDPHS_FNUM_FRAME_NUMBER_Pos 3\r
+#define UDPHS_FNUM_FRAME_NUMBER_Msk (0x7ffu << UDPHS_FNUM_FRAME_NUMBER_Pos) /**< \brief (UDPHS_FNUM) Frame Number as defined in the Packet Field Formats */\r
+#define UDPHS_FNUM_FNUM_ERR (0x1u << 31) /**< \brief (UDPHS_FNUM) Frame Number CRC Error */\r
+/* -------- UDPHS_IEN : (UDPHS Offset: 0x10) UDPHS Interrupt Enable Register -------- */\r
+#define UDPHS_IEN_DET_SUSPD (0x1u << 1) /**< \brief (UDPHS_IEN) Suspend Interrupt Enable */\r
+#define UDPHS_IEN_MICRO_SOF (0x1u << 2) /**< \brief (UDPHS_IEN) Micro-SOF Interrupt Enable */\r
+#define UDPHS_IEN_INT_SOF (0x1u << 3) /**< \brief (UDPHS_IEN) SOF Interrupt Enable */\r
+#define UDPHS_IEN_ENDRESET (0x1u << 4) /**< \brief (UDPHS_IEN) End Of Reset Interrupt Enable */\r
+#define UDPHS_IEN_WAKE_UP (0x1u << 5) /**< \brief (UDPHS_IEN) Wake Up CPU Interrupt Enable */\r
+#define UDPHS_IEN_ENDOFRSM (0x1u << 6) /**< \brief (UDPHS_IEN) End Of Resume Interrupt Enable */\r
+#define UDPHS_IEN_UPSTR_RES (0x1u << 7) /**< \brief (UDPHS_IEN) Upstream Resume Interrupt Enable */\r
+#define UDPHS_IEN_EPT_0 (0x1u << 8) /**< \brief (UDPHS_IEN) Endpoint 0 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_1 (0x1u << 9) /**< \brief (UDPHS_IEN) Endpoint 1 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_2 (0x1u << 10) /**< \brief (UDPHS_IEN) Endpoint 2 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_3 (0x1u << 11) /**< \brief (UDPHS_IEN) Endpoint 3 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_4 (0x1u << 12) /**< \brief (UDPHS_IEN) Endpoint 4 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_5 (0x1u << 13) /**< \brief (UDPHS_IEN) Endpoint 5 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_6 (0x1u << 14) /**< \brief (UDPHS_IEN) Endpoint 6 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_7 (0x1u << 15) /**< \brief (UDPHS_IEN) Endpoint 7 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_8 (0x1u << 16) /**< \brief (UDPHS_IEN) Endpoint 8 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_9 (0x1u << 17) /**< \brief (UDPHS_IEN) Endpoint 9 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_10 (0x1u << 18) /**< \brief (UDPHS_IEN) Endpoint 10 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_11 (0x1u << 19) /**< \brief (UDPHS_IEN) Endpoint 11 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_12 (0x1u << 20) /**< \brief (UDPHS_IEN) Endpoint 12 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_13 (0x1u << 21) /**< \brief (UDPHS_IEN) Endpoint 13 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_14 (0x1u << 22) /**< \brief (UDPHS_IEN) Endpoint 14 Interrupt Enable */\r
+#define UDPHS_IEN_EPT_15 (0x1u << 23) /**< \brief (UDPHS_IEN) Endpoint 15 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_1 (0x1u << 25) /**< \brief (UDPHS_IEN) DMA Channel 1 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_2 (0x1u << 26) /**< \brief (UDPHS_IEN) DMA Channel 2 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_3 (0x1u << 27) /**< \brief (UDPHS_IEN) DMA Channel 3 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_4 (0x1u << 28) /**< \brief (UDPHS_IEN) DMA Channel 4 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_5 (0x1u << 29) /**< \brief (UDPHS_IEN) DMA Channel 5 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_6 (0x1u << 30) /**< \brief (UDPHS_IEN) DMA Channel 6 Interrupt Enable */\r
+#define UDPHS_IEN_DMA_7 (0x1u << 31) /**< \brief (UDPHS_IEN) DMA Channel 7 Interrupt Enable */\r
+/* -------- UDPHS_INTSTA : (UDPHS Offset: 0x14) UDPHS Interrupt Status Register -------- */\r
+#define UDPHS_INTSTA_SPEED (0x1u << 0) /**< \brief (UDPHS_INTSTA) Speed Status */\r
+#define UDPHS_INTSTA_DET_SUSPD (0x1u << 1) /**< \brief (UDPHS_INTSTA) Suspend Interrupt */\r
+#define UDPHS_INTSTA_MICRO_SOF (0x1u << 2) /**< \brief (UDPHS_INTSTA) Micro Start Of Frame Interrupt */\r
+#define UDPHS_INTSTA_INT_SOF (0x1u << 3) /**< \brief (UDPHS_INTSTA) Start Of Frame Interrupt */\r
+#define UDPHS_INTSTA_ENDRESET (0x1u << 4) /**< \brief (UDPHS_INTSTA) End Of Reset Interrupt */\r
+#define UDPHS_INTSTA_WAKE_UP (0x1u << 5) /**< \brief (UDPHS_INTSTA) Wake Up CPU Interrupt */\r
+#define UDPHS_INTSTA_ENDOFRSM (0x1u << 6) /**< \brief (UDPHS_INTSTA) End Of Resume Interrupt */\r
+#define UDPHS_INTSTA_UPSTR_RES (0x1u << 7) /**< \brief (UDPHS_INTSTA) Upstream Resume Interrupt */\r
+#define UDPHS_INTSTA_EPT_0 (0x1u << 8) /**< \brief (UDPHS_INTSTA) Endpoint 0 Interrupt */\r
+#define UDPHS_INTSTA_EPT_1 (0x1u << 9) /**< \brief (UDPHS_INTSTA) Endpoint 1 Interrupt */\r
+#define UDPHS_INTSTA_EPT_2 (0x1u << 10) /**< \brief (UDPHS_INTSTA) Endpoint 2 Interrupt */\r
+#define UDPHS_INTSTA_EPT_3 (0x1u << 11) /**< \brief (UDPHS_INTSTA) Endpoint 3 Interrupt */\r
+#define UDPHS_INTSTA_EPT_4 (0x1u << 12) /**< \brief (UDPHS_INTSTA) Endpoint 4 Interrupt */\r
+#define UDPHS_INTSTA_EPT_5 (0x1u << 13) /**< \brief (UDPHS_INTSTA) Endpoint 5 Interrupt */\r
+#define UDPHS_INTSTA_EPT_6 (0x1u << 14) /**< \brief (UDPHS_INTSTA) Endpoint 6 Interrupt */\r
+#define UDPHS_INTSTA_EPT_7 (0x1u << 15) /**< \brief (UDPHS_INTSTA) Endpoint 7 Interrupt */\r
+#define UDPHS_INTSTA_EPT_8 (0x1u << 16) /**< \brief (UDPHS_INTSTA) Endpoint 8 Interrupt */\r
+#define UDPHS_INTSTA_EPT_9 (0x1u << 17) /**< \brief (UDPHS_INTSTA) Endpoint 9 Interrupt */\r
+#define UDPHS_INTSTA_EPT_10 (0x1u << 18) /**< \brief (UDPHS_INTSTA) Endpoint 10 Interrupt */\r
+#define UDPHS_INTSTA_EPT_11 (0x1u << 19) /**< \brief (UDPHS_INTSTA) Endpoint 11 Interrupt */\r
+#define UDPHS_INTSTA_EPT_12 (0x1u << 20) /**< \brief (UDPHS_INTSTA) Endpoint 12 Interrupt */\r
+#define UDPHS_INTSTA_EPT_13 (0x1u << 21) /**< \brief (UDPHS_INTSTA) Endpoint 13 Interrupt */\r
+#define UDPHS_INTSTA_EPT_14 (0x1u << 22) /**< \brief (UDPHS_INTSTA) Endpoint 14 Interrupt */\r
+#define UDPHS_INTSTA_EPT_15 (0x1u << 23) /**< \brief (UDPHS_INTSTA) Endpoint 15 Interrupt */\r
+#define UDPHS_INTSTA_DMA_1 (0x1u << 25) /**< \brief (UDPHS_INTSTA) DMA Channel 1 Interrupt */\r
+#define UDPHS_INTSTA_DMA_2 (0x1u << 26) /**< \brief (UDPHS_INTSTA) DMA Channel 2 Interrupt */\r
+#define UDPHS_INTSTA_DMA_3 (0x1u << 27) /**< \brief (UDPHS_INTSTA) DMA Channel 3 Interrupt */\r
+#define UDPHS_INTSTA_DMA_4 (0x1u << 28) /**< \brief (UDPHS_INTSTA) DMA Channel 4 Interrupt */\r
+#define UDPHS_INTSTA_DMA_5 (0x1u << 29) /**< \brief (UDPHS_INTSTA) DMA Channel 5 Interrupt */\r
+#define UDPHS_INTSTA_DMA_6 (0x1u << 30) /**< \brief (UDPHS_INTSTA) DMA Channel 6 Interrupt */\r
+#define UDPHS_INTSTA_DMA_7 (0x1u << 31) /**< \brief (UDPHS_INTSTA) DMA Channel 7 Interrupt */\r
+/* -------- UDPHS_CLRINT : (UDPHS Offset: 0x18) UDPHS Clear Interrupt Register -------- */\r
+#define UDPHS_CLRINT_DET_SUSPD (0x1u << 1) /**< \brief (UDPHS_CLRINT) Suspend Interrupt Clear */\r
+#define UDPHS_CLRINT_MICRO_SOF (0x1u << 2) /**< \brief (UDPHS_CLRINT) Micro Start Of Frame Interrupt Clear */\r
+#define UDPHS_CLRINT_INT_SOF (0x1u << 3) /**< \brief (UDPHS_CLRINT) Start Of Frame Interrupt Clear */\r
+#define UDPHS_CLRINT_ENDRESET (0x1u << 4) /**< \brief (UDPHS_CLRINT) End Of Reset Interrupt Clear */\r
+#define UDPHS_CLRINT_WAKE_UP (0x1u << 5) /**< \brief (UDPHS_CLRINT) Wake Up CPU Interrupt Clear */\r
+#define UDPHS_CLRINT_ENDOFRSM (0x1u << 6) /**< \brief (UDPHS_CLRINT) End Of Resume Interrupt Clear */\r
+#define UDPHS_CLRINT_UPSTR_RES (0x1u << 7) /**< \brief (UDPHS_CLRINT) Upstream Resume Interrupt Clear */\r
+/* -------- UDPHS_EPTRST : (UDPHS Offset: 0x1C) UDPHS Endpoints Reset Register -------- */\r
+#define UDPHS_EPTRST_EPT_0 (0x1u << 0) /**< \brief (UDPHS_EPTRST) Endpoint 0 Reset */\r
+#define UDPHS_EPTRST_EPT_1 (0x1u << 1) /**< \brief (UDPHS_EPTRST) Endpoint 1 Reset */\r
+#define UDPHS_EPTRST_EPT_2 (0x1u << 2) /**< \brief (UDPHS_EPTRST) Endpoint 2 Reset */\r
+#define UDPHS_EPTRST_EPT_3 (0x1u << 3) /**< \brief (UDPHS_EPTRST) Endpoint 3 Reset */\r
+#define UDPHS_EPTRST_EPT_4 (0x1u << 4) /**< \brief (UDPHS_EPTRST) Endpoint 4 Reset */\r
+#define UDPHS_EPTRST_EPT_5 (0x1u << 5) /**< \brief (UDPHS_EPTRST) Endpoint 5 Reset */\r
+#define UDPHS_EPTRST_EPT_6 (0x1u << 6) /**< \brief (UDPHS_EPTRST) Endpoint 6 Reset */\r
+#define UDPHS_EPTRST_EPT_7 (0x1u << 7) /**< \brief (UDPHS_EPTRST) Endpoint 7 Reset */\r
+#define UDPHS_EPTRST_EPT_8 (0x1u << 8) /**< \brief (UDPHS_EPTRST) Endpoint 8 Reset */\r
+#define UDPHS_EPTRST_EPT_9 (0x1u << 9) /**< \brief (UDPHS_EPTRST) Endpoint 9 Reset */\r
+#define UDPHS_EPTRST_EPT_10 (0x1u << 10) /**< \brief (UDPHS_EPTRST) Endpoint 10 Reset */\r
+#define UDPHS_EPTRST_EPT_11 (0x1u << 11) /**< \brief (UDPHS_EPTRST) Endpoint 11 Reset */\r
+#define UDPHS_EPTRST_EPT_12 (0x1u << 12) /**< \brief (UDPHS_EPTRST) Endpoint 12 Reset */\r
+#define UDPHS_EPTRST_EPT_13 (0x1u << 13) /**< \brief (UDPHS_EPTRST) Endpoint 13 Reset */\r
+#define UDPHS_EPTRST_EPT_14 (0x1u << 14) /**< \brief (UDPHS_EPTRST) Endpoint 14 Reset */\r
+#define UDPHS_EPTRST_EPT_15 (0x1u << 15) /**< \brief (UDPHS_EPTRST) Endpoint 15 Reset */\r
+/* -------- UDPHS_TST : (UDPHS Offset: 0xE0) UDPHS Test Register -------- */\r
+#define UDPHS_TST_SPEED_CFG_Pos 0\r
+#define UDPHS_TST_SPEED_CFG_Msk (0x3u << UDPHS_TST_SPEED_CFG_Pos) /**< \brief (UDPHS_TST) Speed Configuration */\r
+#define   UDPHS_TST_SPEED_CFG_NORMAL (0x0u << 0) /**< \brief (UDPHS_TST) Normal Mode: The macro is in Full Speed mode, ready to make a High Speed identification, if the host supports it and then to automatically switch to High Speed mode */\r
+#define   UDPHS_TST_SPEED_CFG_HIGH_SPEED (0x2u << 0) /**< \brief (UDPHS_TST) Force High Speed: Set this value to force the hardware to work in High Speed mode. Only for debug or test purpose. */\r
+#define   UDPHS_TST_SPEED_CFG_FULL_SPEED (0x3u << 0) /**< \brief (UDPHS_TST) Force Full Speed: Set this value to force the hardware to work only in Full Speed mode. In this configuration, the macro will not respond to a High Speed reset handshake. */\r
+#define UDPHS_TST_TST_J (0x1u << 2) /**< \brief (UDPHS_TST) Test J Mode */\r
+#define UDPHS_TST_TST_K (0x1u << 3) /**< \brief (UDPHS_TST) Test K Mode */\r
+#define UDPHS_TST_TST_PKT (0x1u << 4) /**< \brief (UDPHS_TST) Test Packet Mode */\r
+#define UDPHS_TST_OPMODE2 (0x1u << 5) /**< \brief (UDPHS_TST) OpMode2 */\r
+/* -------- UDPHS_EPTCFG : (UDPHS Offset: N/A) UDPHS Endpoint Configuration Register -------- */\r
+#define UDPHS_EPTCFG_EPT_SIZE_Pos 0\r
+#define UDPHS_EPTCFG_EPT_SIZE_Msk (0x7u << UDPHS_EPTCFG_EPT_SIZE_Pos) /**< \brief (UDPHS_EPTCFG) Endpoint Size */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_8 (0x0u << 0) /**< \brief (UDPHS_EPTCFG) 8 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_16 (0x1u << 0) /**< \brief (UDPHS_EPTCFG) 16 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_32 (0x2u << 0) /**< \brief (UDPHS_EPTCFG) 32 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_64 (0x3u << 0) /**< \brief (UDPHS_EPTCFG) 64 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_128 (0x4u << 0) /**< \brief (UDPHS_EPTCFG) 128 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_256 (0x5u << 0) /**< \brief (UDPHS_EPTCFG) 256 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_512 (0x6u << 0) /**< \brief (UDPHS_EPTCFG) 512 bytes */\r
+#define   UDPHS_EPTCFG_EPT_SIZE_1024 (0x7u << 0) /**< \brief (UDPHS_EPTCFG) 1024 bytes */\r
+#define UDPHS_EPTCFG_EPT_DIR (0x1u << 3) /**< \brief (UDPHS_EPTCFG) Endpoint Direction */\r
+#define UDPHS_EPTCFG_EPT_TYPE_Pos 4\r
+#define UDPHS_EPTCFG_EPT_TYPE_Msk (0x3u << UDPHS_EPTCFG_EPT_TYPE_Pos) /**< \brief (UDPHS_EPTCFG) Endpoint Type */\r
+#define   UDPHS_EPTCFG_EPT_TYPE_CTRL8 (0x0u << 4) /**< \brief (UDPHS_EPTCFG) Control endpoint */\r
+#define   UDPHS_EPTCFG_EPT_TYPE_ISO (0x1u << 4) /**< \brief (UDPHS_EPTCFG) Isochronous endpoint */\r
+#define   UDPHS_EPTCFG_EPT_TYPE_BULK (0x2u << 4) /**< \brief (UDPHS_EPTCFG) Bulk endpoint */\r
+#define   UDPHS_EPTCFG_EPT_TYPE_INT (0x3u << 4) /**< \brief (UDPHS_EPTCFG) Interrupt endpoint */\r
+#define UDPHS_EPTCFG_BK_NUMBER_Pos 6\r
+#define UDPHS_EPTCFG_BK_NUMBER_Msk (0x3u << UDPHS_EPTCFG_BK_NUMBER_Pos) /**< \brief (UDPHS_EPTCFG) Number of Banks */\r
+#define   UDPHS_EPTCFG_BK_NUMBER_0 (0x0u << 6) /**< \brief (UDPHS_EPTCFG) Zero bank, the endpoint is not mapped in memory */\r
+#define   UDPHS_EPTCFG_BK_NUMBER_1 (0x1u << 6) /**< \brief (UDPHS_EPTCFG) One bank (bank 0) */\r
+#define   UDPHS_EPTCFG_BK_NUMBER_2 (0x2u << 6) /**< \brief (UDPHS_EPTCFG) Double bank (Ping-Pong: bank0/bank1) */\r
+#define   UDPHS_EPTCFG_BK_NUMBER_3 (0x3u << 6) /**< \brief (UDPHS_EPTCFG) Triple bank (bank0/bank1/bank2) */\r
+#define UDPHS_EPTCFG_NB_TRANS_Pos 8\r
+#define UDPHS_EPTCFG_NB_TRANS_Msk (0x3u << UDPHS_EPTCFG_NB_TRANS_Pos) /**< \brief (UDPHS_EPTCFG) Number Of Transaction per Microframe */\r
+#define UDPHS_EPTCFG_NB_TRANS(value) ((UDPHS_EPTCFG_NB_TRANS_Msk & ((value) << UDPHS_EPTCFG_NB_TRANS_Pos)))\r
+#define UDPHS_EPTCFG_EPT_MAPD (0x1u << 31) /**< \brief (UDPHS_EPTCFG) Endpoint Mapped */\r
+/* -------- UDPHS_EPTCTLENB : (UDPHS Offset: N/A) UDPHS Endpoint Control Enable Register -------- */\r
+#define UDPHS_EPTCTLENB_EPT_ENABL (0x1u << 0) /**< \brief (UDPHS_EPTCTLENB) Endpoint Enable */\r
+#define UDPHS_EPTCTLENB_AUTO_VALID (0x1u << 1) /**< \brief (UDPHS_EPTCTLENB) Packet Auto-Valid Enable */\r
+#define UDPHS_EPTCTLENB_INTDIS_DMA (0x1u << 3) /**< \brief (UDPHS_EPTCTLENB) Interrupts Disable DMA */\r
+#define UDPHS_EPTCTLENB_NYET_DIS (0x1u << 4) /**< \brief (UDPHS_EPTCTLENB) NYET Disable (Only for High Speed Bulk OUT endpoints) */\r
+#define UDPHS_EPTCTLENB_ERR_OVFLW (0x1u << 8) /**< \brief (UDPHS_EPTCTLENB) Overflow Error Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_RXRDY_TXKL (0x1u << 9) /**< \brief (UDPHS_EPTCTLENB) Received OUT Data Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_TX_COMPLT (0x1u << 10) /**< \brief (UDPHS_EPTCTLENB) Transmitted IN Data Complete Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_TXRDY (0x1u << 11) /**< \brief (UDPHS_EPTCTLENB) TX Packet Ready Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_RX_SETUP (0x1u << 12) /**< \brief (UDPHS_EPTCTLENB) Received SETUP */\r
+#define UDPHS_EPTCTLENB_STALL_SNT (0x1u << 13) /**< \brief (UDPHS_EPTCTLENB) Stall Sent Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_NAK_IN (0x1u << 14) /**< \brief (UDPHS_EPTCTLENB) NAKIN Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_NAK_OUT (0x1u << 15) /**< \brief (UDPHS_EPTCTLENB) NAKOUT Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_BUSY_BANK (0x1u << 18) /**< \brief (UDPHS_EPTCTLENB) Busy Bank Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_SHRT_PCKT (0x1u << 31) /**< \brief (UDPHS_EPTCTLENB) Short Packet Send/Short Packet Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_DATAX_RX (0x1u << 6) /**< \brief (UDPHS_EPTCTLENB) DATAx Interrupt Enable (Only for high bandwidth Isochronous OUT endpoints) */\r
+#define UDPHS_EPTCTLENB_MDATA_RX (0x1u << 7) /**< \brief (UDPHS_EPTCTLENB) MDATA Interrupt Enable (Only for high bandwidth Isochronous OUT endpoints) */\r
+#define UDPHS_EPTCTLENB_TXRDY_TRER (0x1u << 11) /**< \brief (UDPHS_EPTCTLENB) TX Packet Ready/Transaction Error Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_ERR_FL_ISO (0x1u << 12) /**< \brief (UDPHS_EPTCTLENB) Error Flow Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_ERR_CRC_NTR (0x1u << 13) /**< \brief (UDPHS_EPTCTLENB) ISO CRC Error/Number of Transaction Error Interrupt Enable */\r
+#define UDPHS_EPTCTLENB_ERR_FLUSH (0x1u << 14) /**< \brief (UDPHS_EPTCTLENB) Bank Flush Error Interrupt Enable */\r
+/* -------- UDPHS_EPTCTLDIS : (UDPHS Offset: N/A) UDPHS Endpoint Control Disable Register -------- */\r
+#define UDPHS_EPTCTLDIS_EPT_DISABL (0x1u << 0) /**< \brief (UDPHS_EPTCTLDIS) Endpoint Disable */\r
+#define UDPHS_EPTCTLDIS_AUTO_VALID (0x1u << 1) /**< \brief (UDPHS_EPTCTLDIS) Packet Auto-Valid Disable */\r
+#define UDPHS_EPTCTLDIS_INTDIS_DMA (0x1u << 3) /**< \brief (UDPHS_EPTCTLDIS) Interrupts Disable DMA */\r
+#define UDPHS_EPTCTLDIS_NYET_DIS (0x1u << 4) /**< \brief (UDPHS_EPTCTLDIS) NYET Enable (Only for High Speed Bulk OUT endpoints) */\r
+#define UDPHS_EPTCTLDIS_ERR_OVFLW (0x1u << 8) /**< \brief (UDPHS_EPTCTLDIS) Overflow Error Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_RXRDY_TXKL (0x1u << 9) /**< \brief (UDPHS_EPTCTLDIS) Received OUT Data Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_TX_COMPLT (0x1u << 10) /**< \brief (UDPHS_EPTCTLDIS) Transmitted IN Data Complete Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_TXRDY (0x1u << 11) /**< \brief (UDPHS_EPTCTLDIS) TX Packet Ready Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_RX_SETUP (0x1u << 12) /**< \brief (UDPHS_EPTCTLDIS) Received SETUP Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_STALL_SNT (0x1u << 13) /**< \brief (UDPHS_EPTCTLDIS) Stall Sent Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_NAK_IN (0x1u << 14) /**< \brief (UDPHS_EPTCTLDIS) NAKIN Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_NAK_OUT (0x1u << 15) /**< \brief (UDPHS_EPTCTLDIS) NAKOUT Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_BUSY_BANK (0x1u << 18) /**< \brief (UDPHS_EPTCTLDIS) Busy Bank Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_SHRT_PCKT (0x1u << 31) /**< \brief (UDPHS_EPTCTLDIS) Short Packet Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_DATAX_RX (0x1u << 6) /**< \brief (UDPHS_EPTCTLDIS) DATAx Interrupt Disable (Only for High Bandwidth Isochronous OUT endpoints) */\r
+#define UDPHS_EPTCTLDIS_MDATA_RX (0x1u << 7) /**< \brief (UDPHS_EPTCTLDIS) MDATA Interrupt Disable (Only for High Bandwidth Isochronous OUT endpoints) */\r
+#define UDPHS_EPTCTLDIS_TXRDY_TRER (0x1u << 11) /**< \brief (UDPHS_EPTCTLDIS) TX Packet Ready/Transaction Error Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_ERR_FL_ISO (0x1u << 12) /**< \brief (UDPHS_EPTCTLDIS) Error Flow Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_ERR_CRC_NTR (0x1u << 13) /**< \brief (UDPHS_EPTCTLDIS) ISO CRC Error/Number of Transaction Error Interrupt Disable */\r
+#define UDPHS_EPTCTLDIS_ERR_FLUSH (0x1u << 14) /**< \brief (UDPHS_EPTCTLDIS) bank flush error Interrupt Disable */\r
+/* -------- UDPHS_EPTCTL : (UDPHS Offset: N/A) UDPHS Endpoint Control Register -------- */\r
+#define UDPHS_EPTCTL_EPT_ENABL (0x1u << 0) /**< \brief (UDPHS_EPTCTL) Endpoint Enable */\r
+#define UDPHS_EPTCTL_AUTO_VALID (0x1u << 1) /**< \brief (UDPHS_EPTCTL) Packet Auto-Valid Enabled (Not for CONTROL Endpoints) */\r
+#define UDPHS_EPTCTL_INTDIS_DMA (0x1u << 3) /**< \brief (UDPHS_EPTCTL) Interrupt Disables DMA */\r
+#define UDPHS_EPTCTL_NYET_DIS (0x1u << 4) /**< \brief (UDPHS_EPTCTL) NYET Disable (Only for High Speed Bulk OUT endpoints) */\r
+#define UDPHS_EPTCTL_ERR_OVFLW (0x1u << 8) /**< \brief (UDPHS_EPTCTL) Overflow Error Interrupt Enabled */\r
+#define UDPHS_EPTCTL_RXRDY_TXKL (0x1u << 9) /**< \brief (UDPHS_EPTCTL) Received OUT Data Interrupt Enabled */\r
+#define UDPHS_EPTCTL_TX_COMPLT (0x1u << 10) /**< \brief (UDPHS_EPTCTL) Transmitted IN Data Complete Interrupt Enabled */\r
+#define UDPHS_EPTCTL_TXRDY (0x1u << 11) /**< \brief (UDPHS_EPTCTL) TX Packet Ready Interrupt Enabled */\r
+#define UDPHS_EPTCTL_RX_SETUP (0x1u << 12) /**< \brief (UDPHS_EPTCTL) Received SETUP Interrupt Enabled */\r
+#define UDPHS_EPTCTL_STALL_SNT (0x1u << 13) /**< \brief (UDPHS_EPTCTL) Stall Sent Interrupt Enabled */\r
+#define UDPHS_EPTCTL_NAK_IN (0x1u << 14) /**< \brief (UDPHS_EPTCTL) NAKIN Interrupt Enabled */\r
+#define UDPHS_EPTCTL_NAK_OUT (0x1u << 15) /**< \brief (UDPHS_EPTCTL) NAKOUT Interrupt Enabled */\r
+#define UDPHS_EPTCTL_BUSY_BANK (0x1u << 18) /**< \brief (UDPHS_EPTCTL) Busy Bank Interrupt Enabled */\r
+#define UDPHS_EPTCTL_SHRT_PCKT (0x1u << 31) /**< \brief (UDPHS_EPTCTL) Short Packet Interrupt Enabled */\r
+#define UDPHS_EPTCTL_DATAX_RX (0x1u << 6) /**< \brief (UDPHS_EPTCTL) DATAx Interrupt Enabled (Only for High Bandwidth Isochronous OUT endpoints) */\r
+#define UDPHS_EPTCTL_MDATA_RX (0x1u << 7) /**< \brief (UDPHS_EPTCTL) MDATA Interrupt Enabled (Only for High Bandwidth Isochronous OUT endpoints) */\r
+#define UDPHS_EPTCTL_TXRDY_TRER (0x1u << 11) /**< \brief (UDPHS_EPTCTL) TX Packet Ready/Transaction Error Interrupt Enabled */\r
+#define UDPHS_EPTCTL_ERR_FL_ISO (0x1u << 12) /**< \brief (UDPHS_EPTCTL) Error Flow Interrupt Enabled */\r
+#define UDPHS_EPTCTL_ERR_CRC_NTR (0x1u << 13) /**< \brief (UDPHS_EPTCTL) ISO CRC Error/Number of Transaction Error Interrupt Enabled */\r
+#define UDPHS_EPTCTL_ERR_FLUSH (0x1u << 14) /**< \brief (UDPHS_EPTCTL) Bank Flush Error Interrupt Enabled */\r
+/* -------- UDPHS_EPTSETSTA : (UDPHS Offset: N/A) UDPHS Endpoint Set Status Register -------- */\r
+#define UDPHS_EPTSETSTA_FRCESTALL (0x1u << 5) /**< \brief (UDPHS_EPTSETSTA) Stall Handshake Request Set */\r
+#define UDPHS_EPTSETSTA_RXRDY_TXKL (0x1u << 9) /**< \brief (UDPHS_EPTSETSTA) KILL Bank Set (for IN Endpoint) */\r
+#define UDPHS_EPTSETSTA_TXRDY (0x1u << 11) /**< \brief (UDPHS_EPTSETSTA) TX Packet Ready Set */\r
+#define UDPHS_EPTSETSTA_TXRDY_TRER (0x1u << 11) /**< \brief (UDPHS_EPTSETSTA) TX Packet Ready Set */\r
+/* -------- UDPHS_EPTCLRSTA : (UDPHS Offset: N/A) UDPHS Endpoint Clear Status Register -------- */\r
+#define UDPHS_EPTCLRSTA_FRCESTALL (0x1u << 5) /**< \brief (UDPHS_EPTCLRSTA) Stall Handshake Request Clear */\r
+#define UDPHS_EPTCLRSTA_TOGGLESQ (0x1u << 6) /**< \brief (UDPHS_EPTCLRSTA) Data Toggle Clear */\r
+#define UDPHS_EPTCLRSTA_RXRDY_TXKL (0x1u << 9) /**< \brief (UDPHS_EPTCLRSTA) Received OUT Data Clear */\r
+#define UDPHS_EPTCLRSTA_TX_COMPLT (0x1u << 10) /**< \brief (UDPHS_EPTCLRSTA) Transmitted IN Data Complete Clear */\r
+#define UDPHS_EPTCLRSTA_RX_SETUP (0x1u << 12) /**< \brief (UDPHS_EPTCLRSTA) Received SETUP Clear */\r
+#define UDPHS_EPTCLRSTA_STALL_SNT (0x1u << 13) /**< \brief (UDPHS_EPTCLRSTA) Stall Sent Clear */\r
+#define UDPHS_EPTCLRSTA_NAK_IN (0x1u << 14) /**< \brief (UDPHS_EPTCLRSTA) NAKIN Clear */\r
+#define UDPHS_EPTCLRSTA_NAK_OUT (0x1u << 15) /**< \brief (UDPHS_EPTCLRSTA) NAKOUT Clear */\r
+#define UDPHS_EPTCLRSTA_ERR_FL_ISO (0x1u << 12) /**< \brief (UDPHS_EPTCLRSTA) Error Flow Clear */\r
+#define UDPHS_EPTCLRSTA_ERR_CRC_NTR (0x1u << 13) /**< \brief (UDPHS_EPTCLRSTA) Number of Transaction Error Clear */\r
+#define UDPHS_EPTCLRSTA_ERR_FLUSH (0x1u << 14) /**< \brief (UDPHS_EPTCLRSTA) Bank Flush Error Clear */\r
+/* -------- UDPHS_EPTSTA : (UDPHS Offset: N/A) UDPHS Endpoint Status Register -------- */\r
+#define UDPHS_EPTSTA_FRCESTALL (0x1u << 5) /**< \brief (UDPHS_EPTSTA) Stall Handshake Request */\r
+#define UDPHS_EPTSTA_TOGGLESQ_STA_Pos 6\r
+#define UDPHS_EPTSTA_TOGGLESQ_STA_Msk (0x3u << UDPHS_EPTSTA_TOGGLESQ_STA_Pos) /**< \brief (UDPHS_EPTSTA) Toggle Sequencing */\r
+#define   UDPHS_EPTSTA_TOGGLESQ_STA_DATA0 (0x0u << 6) /**< \brief (UDPHS_EPTSTA) DATA0 */\r
+#define   UDPHS_EPTSTA_TOGGLESQ_STA_DATA1 (0x1u << 6) /**< \brief (UDPHS_EPTSTA) DATA1 */\r
+#define   UDPHS_EPTSTA_TOGGLESQ_STA_DATA2 (0x2u << 6) /**< \brief (UDPHS_EPTSTA) Reserved for High Bandwidth Isochronous Endpoint */\r
+#define   UDPHS_EPTSTA_TOGGLESQ_STA_MDATA (0x3u << 6) /**< \brief (UDPHS_EPTSTA) Reserved for High Bandwidth Isochronous Endpoint */\r
+#define UDPHS_EPTSTA_ERR_OVFLW (0x1u << 8) /**< \brief (UDPHS_EPTSTA) Overflow Error */\r
+#define UDPHS_EPTSTA_RXRDY_TXKL (0x1u << 9) /**< \brief (UDPHS_EPTSTA) Received OUT Data/KILL Bank */\r
+#define UDPHS_EPTSTA_TX_COMPLT (0x1u << 10) /**< \brief (UDPHS_EPTSTA) Transmitted IN Data Complete */\r
+#define UDPHS_EPTSTA_TXRDY (0x1u << 11) /**< \brief (UDPHS_EPTSTA) TX Packet Ready */\r
+#define UDPHS_EPTSTA_RX_SETUP (0x1u << 12) /**< \brief (UDPHS_EPTSTA) Received SETUP */\r
+#define UDPHS_EPTSTA_STALL_SNT (0x1u << 13) /**< \brief (UDPHS_EPTSTA) Stall Sent */\r
+#define UDPHS_EPTSTA_NAK_IN (0x1u << 14) /**< \brief (UDPHS_EPTSTA) NAK IN */\r
+#define UDPHS_EPTSTA_NAK_OUT (0x1u << 15) /**< \brief (UDPHS_EPTSTA) NAK OUT */\r
+#define UDPHS_EPTSTA_CURBK_CTLDIR_Pos 16\r
+#define UDPHS_EPTSTA_CURBK_CTLDIR_Msk (0x3u << UDPHS_EPTSTA_CURBK_CTLDIR_Pos) /**< \brief (UDPHS_EPTSTA) Current Bank/Control Direction */\r
+#define UDPHS_EPTSTA_BUSY_BANK_STA_Pos 18\r
+#define UDPHS_EPTSTA_BUSY_BANK_STA_Msk (0x3u << UDPHS_EPTSTA_BUSY_BANK_STA_Pos) /**< \brief (UDPHS_EPTSTA) Busy Bank Number */\r
+#define   UDPHS_EPTSTA_BUSY_BANK_STA_1BUSYBANK (0x0u << 18) /**< \brief (UDPHS_EPTSTA) 1 busy bank */\r
+#define   UDPHS_EPTSTA_BUSY_BANK_STA_2BUSYBANKS (0x1u << 18) /**< \brief (UDPHS_EPTSTA) 2 busy banks */\r
+#define   UDPHS_EPTSTA_BUSY_BANK_STA_3BUSYBANKS (0x2u << 18) /**< \brief (UDPHS_EPTSTA) 3 busy banks */\r
+#define UDPHS_EPTSTA_BYTE_COUNT_Pos 20\r
+#define UDPHS_EPTSTA_BYTE_COUNT_Msk (0x7ffu << UDPHS_EPTSTA_BYTE_COUNT_Pos) /**< \brief (UDPHS_EPTSTA) UDPHS Byte Count */\r
+#define UDPHS_EPTSTA_SHRT_PCKT (0x1u << 31) /**< \brief (UDPHS_EPTSTA) Short Packet */\r
+#define UDPHS_EPTSTA_TXRDY_TRER (0x1u << 11) /**< \brief (UDPHS_EPTSTA) TX Packet Ready/Transaction Error */\r
+#define UDPHS_EPTSTA_ERR_FL_ISO (0x1u << 12) /**< \brief (UDPHS_EPTSTA) Error Flow */\r
+#define UDPHS_EPTSTA_ERR_CRC_NTR (0x1u << 13) /**< \brief (UDPHS_EPTSTA) CRC ISO Error/Number of Transaction Error */\r
+#define UDPHS_EPTSTA_ERR_FLUSH (0x1u << 14) /**< \brief (UDPHS_EPTSTA) Bank Flush Error */\r
+#define UDPHS_EPTSTA_CURBK_Pos 16\r
+#define UDPHS_EPTSTA_CURBK_Msk (0x3u << UDPHS_EPTSTA_CURBK_Pos) /**< \brief (UDPHS_EPTSTA) Current Bank */\r
+#define   UDPHS_EPTSTA_CURBK_BANK0 (0x0u << 16) /**< \brief (UDPHS_EPTSTA) Bank 0 (or single bank) */\r
+#define   UDPHS_EPTSTA_CURBK_BANK1 (0x1u << 16) /**< \brief (UDPHS_EPTSTA) Bank 1 */\r
+#define   UDPHS_EPTSTA_CURBK_BANK2 (0x2u << 16) /**< \brief (UDPHS_EPTSTA) Bank 2 */\r
+/* -------- UDPHS_DMANXTDSC : (UDPHS Offset: N/A) UDPHS DMA Next Descriptor Address Register -------- */\r
+#define UDPHS_DMANXTDSC_NXT_DSC_ADD_Pos 0\r
+#define UDPHS_DMANXTDSC_NXT_DSC_ADD_Msk (0xffffffffu << UDPHS_DMANXTDSC_NXT_DSC_ADD_Pos) /**< \brief (UDPHS_DMANXTDSC) Next Descriptor Address */\r
+#define UDPHS_DMANXTDSC_NXT_DSC_ADD(value) ((UDPHS_DMANXTDSC_NXT_DSC_ADD_Msk & ((value) << UDPHS_DMANXTDSC_NXT_DSC_ADD_Pos)))\r
+/* -------- UDPHS_DMAADDRESS : (UDPHS Offset: N/A) UDPHS DMA Channel Address Register -------- */\r
+#define UDPHS_DMAADDRESS_BUFF_ADD_Pos 0\r
+#define UDPHS_DMAADDRESS_BUFF_ADD_Msk (0xffffffffu << UDPHS_DMAADDRESS_BUFF_ADD_Pos) /**< \brief (UDPHS_DMAADDRESS) Buffer Address */\r
+#define UDPHS_DMAADDRESS_BUFF_ADD(value) ((UDPHS_DMAADDRESS_BUFF_ADD_Msk & ((value) << UDPHS_DMAADDRESS_BUFF_ADD_Pos)))\r
+/* -------- UDPHS_DMACONTROL : (UDPHS Offset: N/A) UDPHS DMA Channel Control Register -------- */\r
+#define UDPHS_DMACONTROL_CHANN_ENB (0x1u << 0) /**< \brief (UDPHS_DMACONTROL) (Channel Enable Command) */\r
+#define UDPHS_DMACONTROL_LDNXT_DSC (0x1u << 1) /**< \brief (UDPHS_DMACONTROL) Load Next Channel Transfer Descriptor Enable (Command) */\r
+#define UDPHS_DMACONTROL_END_TR_EN (0x1u << 2) /**< \brief (UDPHS_DMACONTROL) End of Transfer Enable (Control) */\r
+#define UDPHS_DMACONTROL_END_B_EN (0x1u << 3) /**< \brief (UDPHS_DMACONTROL) End of Buffer Enable (Control) */\r
+#define UDPHS_DMACONTROL_END_TR_IT (0x1u << 4) /**< \brief (UDPHS_DMACONTROL) End of Transfer Interrupt Enable */\r
+#define UDPHS_DMACONTROL_END_BUFFIT (0x1u << 5) /**< \brief (UDPHS_DMACONTROL) End of Buffer Interrupt Enable */\r
+#define UDPHS_DMACONTROL_DESC_LD_IT (0x1u << 6) /**< \brief (UDPHS_DMACONTROL) Descriptor Loaded Interrupt Enable */\r
+#define UDPHS_DMACONTROL_BURST_LCK (0x1u << 7) /**< \brief (UDPHS_DMACONTROL) Burst Lock Enable */\r
+#define UDPHS_DMACONTROL_BUFF_LENGTH_Pos 16\r
+#define UDPHS_DMACONTROL_BUFF_LENGTH_Msk (0xffffu << UDPHS_DMACONTROL_BUFF_LENGTH_Pos) /**< \brief (UDPHS_DMACONTROL) Buffer Byte Length (Write-only) */\r
+#define UDPHS_DMACONTROL_BUFF_LENGTH(value) ((UDPHS_DMACONTROL_BUFF_LENGTH_Msk & ((value) << UDPHS_DMACONTROL_BUFF_LENGTH_Pos)))\r
+/* -------- UDPHS_DMASTATUS : (UDPHS Offset: N/A) UDPHS DMA Channel Status Register -------- */\r
+#define UDPHS_DMASTATUS_CHANN_ENB (0x1u << 0) /**< \brief (UDPHS_DMASTATUS) Channel Enable Status */\r
+#define UDPHS_DMASTATUS_CHANN_ACT (0x1u << 1) /**< \brief (UDPHS_DMASTATUS) Channel Active Status */\r
+#define UDPHS_DMASTATUS_END_TR_ST (0x1u << 4) /**< \brief (UDPHS_DMASTATUS) End of Channel Transfer Status */\r
+#define UDPHS_DMASTATUS_END_BF_ST (0x1u << 5) /**< \brief (UDPHS_DMASTATUS) End of Channel Buffer Status */\r
+#define UDPHS_DMASTATUS_DESC_LDST (0x1u << 6) /**< \brief (UDPHS_DMASTATUS) Descriptor Loaded Status */\r
+#define UDPHS_DMASTATUS_BUFF_COUNT_Pos 16\r
+#define UDPHS_DMASTATUS_BUFF_COUNT_Msk (0xffffu << UDPHS_DMASTATUS_BUFF_COUNT_Pos) /**< \brief (UDPHS_DMASTATUS) Buffer Byte Count */\r
+#define UDPHS_DMASTATUS_BUFF_COUNT(value) ((UDPHS_DMASTATUS_BUFF_COUNT_Msk & ((value) << UDPHS_DMASTATUS_BUFF_COUNT_Pos)))\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Universal Synchronous Asynchronous Receiver Transmitter */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_USART Universal Synchronous Asynchronous Receiver Transmitter */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Usart hardware registers */\r
+typedef struct {\r
+  __O  uint32_t US_CR;         /**< \brief (Usart Offset: 0x0000) Control Register */\r
+  __IO uint32_t US_MR;         /**< \brief (Usart Offset: 0x0004) Mode Register */\r
+  __O  uint32_t US_IER;        /**< \brief (Usart Offset: 0x0008) Interrupt Enable Register */\r
+  __O  uint32_t US_IDR;        /**< \brief (Usart Offset: 0x000C) Interrupt Disable Register */\r
+  __I  uint32_t US_IMR;        /**< \brief (Usart Offset: 0x0010) Interrupt Mask Register */\r
+  __I  uint32_t US_CSR;        /**< \brief (Usart Offset: 0x0014) Channel Status Register */\r
+  __I  uint32_t US_RHR;        /**< \brief (Usart Offset: 0x0018) Receiver Holding Register */\r
+  __O  uint32_t US_THR;        /**< \brief (Usart Offset: 0x001C) Transmitter Holding Register */\r
+  __IO uint32_t US_BRGR;       /**< \brief (Usart Offset: 0x0020) Baud Rate Generator Register */\r
+  __IO uint32_t US_RTOR;       /**< \brief (Usart Offset: 0x0024) Receiver Time-out Register */\r
+  __IO uint32_t US_TTGR;       /**< \brief (Usart Offset: 0x0028) Transmitter Timeguard Register */\r
+  __I  uint32_t Reserved1[5];\r
+  __IO uint32_t US_FIDI;       /**< \brief (Usart Offset: 0x0040) FI DI Ratio Register */\r
+  __I  uint32_t US_NER;        /**< \brief (Usart Offset: 0x0044) Number of Errors Register */\r
+  __I  uint32_t Reserved2[1];\r
+  __IO uint32_t US_IF;         /**< \brief (Usart Offset: 0x004C) IrDA Filter Register */\r
+  __IO uint32_t US_MAN;        /**< \brief (Usart Offset: 0x0050) Manchester Encoder Decoder Register */\r
+  __I  uint32_t Reserved3[36];\r
+  __IO uint32_t US_WPMR;       /**< \brief (Usart Offset: 0x00E4) Write Protect Mode Register */\r
+  __I  uint32_t US_WPSR;       /**< \brief (Usart Offset: 0x00E8) Write Protect Status Register */\r
+} Usart;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- US_CR : (USART Offset: 0x0000) Control Register -------- */\r
+#define US_CR_RSTRX (0x1u << 2) /**< \brief (US_CR) Reset Receiver */\r
+#define US_CR_RSTTX (0x1u << 3) /**< \brief (US_CR) Reset Transmitter */\r
+#define US_CR_RXEN (0x1u << 4) /**< \brief (US_CR) Receiver Enable */\r
+#define US_CR_RXDIS (0x1u << 5) /**< \brief (US_CR) Receiver Disable */\r
+#define US_CR_TXEN (0x1u << 6) /**< \brief (US_CR) Transmitter Enable */\r
+#define US_CR_TXDIS (0x1u << 7) /**< \brief (US_CR) Transmitter Disable */\r
+#define US_CR_RSTSTA (0x1u << 8) /**< \brief (US_CR) Reset Status Bits */\r
+#define US_CR_STTBRK (0x1u << 9) /**< \brief (US_CR) Start Break */\r
+#define US_CR_STPBRK (0x1u << 10) /**< \brief (US_CR) Stop Break */\r
+#define US_CR_STTTO (0x1u << 11) /**< \brief (US_CR) Start Time-out */\r
+#define US_CR_SENDA (0x1u << 12) /**< \brief (US_CR) Send Address */\r
+#define US_CR_RSTIT (0x1u << 13) /**< \brief (US_CR) Reset Iterations */\r
+#define US_CR_RSTNACK (0x1u << 14) /**< \brief (US_CR) Reset Non Acknowledge */\r
+#define US_CR_RETTO (0x1u << 15) /**< \brief (US_CR) Rearm Time-out */\r
+#define US_CR_RTSEN (0x1u << 18) /**< \brief (US_CR) Request to Send Enable */\r
+#define US_CR_RTSDIS (0x1u << 19) /**< \brief (US_CR) Request to Send Disable */\r
+#define US_CR_FCS (0x1u << 18) /**< \brief (US_CR) Force SPI Chip Select */\r
+#define US_CR_RCS (0x1u << 19) /**< \brief (US_CR) Release SPI Chip Select */\r
+/* -------- US_MR : (USART Offset: 0x0004) Mode Register -------- */\r
+#define US_MR_USART_MODE_Pos 0\r
+#define US_MR_USART_MODE_Msk (0xfu << US_MR_USART_MODE_Pos) /**< \brief (US_MR) USART Mode of Operation */\r
+#define   US_MR_USART_MODE_NORMAL (0x0u << 0) /**< \brief (US_MR) Normal mode */\r
+#define   US_MR_USART_MODE_RS485 (0x1u << 0) /**< \brief (US_MR) RS485 */\r
+#define   US_MR_USART_MODE_HW_HANDSHAKING (0x2u << 0) /**< \brief (US_MR) Hardware Handshaking */\r
+#define   US_MR_USART_MODE_IS07816_T_0 (0x4u << 0) /**< \brief (US_MR) IS07816 Protocol: T = 0 */\r
+#define   US_MR_USART_MODE_IS07816_T_1 (0x6u << 0) /**< \brief (US_MR) IS07816 Protocol: T = 1 */\r
+#define   US_MR_USART_MODE_IRDA (0x8u << 0) /**< \brief (US_MR) IrDA */\r
+#define   US_MR_USART_MODE_SPI_MASTER (0xEu << 0) /**< \brief (US_MR) SPI Master */\r
+#define   US_MR_USART_MODE_SPI_SLAVE (0xFu << 0) /**< \brief (US_MR) SPI Slave */\r
+#define US_MR_USCLKS_Pos 4\r
+#define US_MR_USCLKS_Msk (0x3u << US_MR_USCLKS_Pos) /**< \brief (US_MR) Clock Selection */\r
+#define   US_MR_USCLKS_MCK (0x0u << 4) /**< \brief (US_MR) Master Clock MCK is selected */\r
+#define   US_MR_USCLKS_DIV (0x1u << 4) /**< \brief (US_MR) Internal Clock Divided MCK/DIV (DIV=(DIV=8)) is selected */\r
+#define   US_MR_USCLKS_SCK (0x3u << 4) /**< \brief (US_MR) Serial Clock SLK is selected */\r
+#define US_MR_CHRL_Pos 6\r
+#define US_MR_CHRL_Msk (0x3u << US_MR_CHRL_Pos) /**< \brief (US_MR) Character Length. */\r
+#define   US_MR_CHRL_5_BIT (0x0u << 6) /**< \brief (US_MR) Character length is 5 bits */\r
+#define   US_MR_CHRL_6_BIT (0x1u << 6) /**< \brief (US_MR) Character length is 6 bits */\r
+#define   US_MR_CHRL_7_BIT (0x2u << 6) /**< \brief (US_MR) Character length is 7 bits */\r
+#define   US_MR_CHRL_8_BIT (0x3u << 6) /**< \brief (US_MR) Character length is 8 bits */\r
+#define US_MR_SYNC (0x1u << 8) /**< \brief (US_MR) Synchronous Mode Select */\r
+#define US_MR_PAR_Pos 9\r
+#define US_MR_PAR_Msk (0x7u << US_MR_PAR_Pos) /**< \brief (US_MR) Parity Type */\r
+#define   US_MR_PAR_EVEN (0x0u << 9) /**< \brief (US_MR) Even parity */\r
+#define   US_MR_PAR_ODD (0x1u << 9) /**< \brief (US_MR) Odd parity */\r
+#define   US_MR_PAR_SPACE (0x2u << 9) /**< \brief (US_MR) Parity forced to 0 (Space) */\r
+#define   US_MR_PAR_MARK (0x3u << 9) /**< \brief (US_MR) Parity forced to 1 (Mark) */\r
+#define   US_MR_PAR_NO (0x4u << 9) /**< \brief (US_MR) No parity */\r
+#define   US_MR_PAR_MULTIDROP (0x6u << 9) /**< \brief (US_MR) Multidrop mode */\r
+#define US_MR_NBSTOP_Pos 12\r
+#define US_MR_NBSTOP_Msk (0x3u << US_MR_NBSTOP_Pos) /**< \brief (US_MR) Number of Stop Bits */\r
+#define   US_MR_NBSTOP_1_BIT (0x0u << 12) /**< \brief (US_MR) 1 stop bit */\r
+#define   US_MR_NBSTOP_1_5_BIT (0x1u << 12) /**< \brief (US_MR) 1.5 stop bit (SYNC = 0) or reserved (SYNC = 1) */\r
+#define   US_MR_NBSTOP_2_BIT (0x2u << 12) /**< \brief (US_MR) 2 stop bits */\r
+#define US_MR_CHMODE_Pos 14\r
+#define US_MR_CHMODE_Msk (0x3u << US_MR_CHMODE_Pos) /**< \brief (US_MR) Channel Mode */\r
+#define   US_MR_CHMODE_NORMAL (0x0u << 14) /**< \brief (US_MR) Normal Mode */\r
+#define   US_MR_CHMODE_AUTOMATIC (0x1u << 14) /**< \brief (US_MR) Automatic Echo. Receiver input is connected to the TXD pin. */\r
+#define   US_MR_CHMODE_LOCAL_LOOPBACK (0x2u << 14) /**< \brief (US_MR) Local Loopback. Transmitter output is connected to the Receiver Input. */\r
+#define   US_MR_CHMODE_REMOTE_LOOPBACK (0x3u << 14) /**< \brief (US_MR) Remote Loopback. RXD pin is internally connected to the TXD pin. */\r
+#define US_MR_MSBF (0x1u << 16) /**< \brief (US_MR) Bit Order */\r
+#define US_MR_MODE9 (0x1u << 17) /**< \brief (US_MR) 9-bit Character Length */\r
+#define US_MR_CLKO (0x1u << 18) /**< \brief (US_MR) Clock Output Select */\r
+#define US_MR_OVER (0x1u << 19) /**< \brief (US_MR) Oversampling Mode */\r
+#define US_MR_INACK (0x1u << 20) /**< \brief (US_MR) Inhibit Non Acknowledge */\r
+#define US_MR_DSNACK (0x1u << 21) /**< \brief (US_MR) Disable Successive NACK */\r
+#define US_MR_VAR_SYNC (0x1u << 22) /**< \brief (US_MR) Variable Synchronization of Command/Data Sync Start Frame Delimiter */\r
+#define US_MR_INVDATA (0x1u << 23) /**< \brief (US_MR) Inverted Data */\r
+#define US_MR_MAX_ITERATION_Pos 24\r
+#define US_MR_MAX_ITERATION_Msk (0x7u << US_MR_MAX_ITERATION_Pos) /**< \brief (US_MR) Maximum Number of Automatic Iteration */\r
+#define US_MR_MAX_ITERATION(value) ((US_MR_MAX_ITERATION_Msk & ((value) << US_MR_MAX_ITERATION_Pos)))\r
+#define US_MR_FILTER (0x1u << 28) /**< \brief (US_MR) Infrared Receive Line Filter */\r
+#define US_MR_MAN (0x1u << 29) /**< \brief (US_MR) Manchester Encoder/Decoder Enable */\r
+#define US_MR_MODSYNC (0x1u << 30) /**< \brief (US_MR) Manchester Synchronization Mode */\r
+#define US_MR_ONEBIT (0x1u << 31) /**< \brief (US_MR) Start Frame Delimiter Selector */\r
+#define US_MR_CPHA (0x1u << 8) /**< \brief (US_MR) SPI Clock Phase */\r
+#define US_MR_CPOL (0x1u << 16) /**< \brief (US_MR) SPI Clock Polarity */\r
+#define US_MR_WRDBT (0x1u << 20) /**< \brief (US_MR) Wait Read Data Before Transfer */\r
+/* -------- US_IER : (USART Offset: 0x0008) Interrupt Enable Register -------- */\r
+#define US_IER_RXRDY (0x1u << 0) /**< \brief (US_IER) RXRDY Interrupt Enable */\r
+#define US_IER_TXRDY (0x1u << 1) /**< \brief (US_IER) TXRDY Interrupt Enable */\r
+#define US_IER_RXBRK (0x1u << 2) /**< \brief (US_IER) Receiver Break Interrupt Enable */\r
+#define US_IER_OVRE (0x1u << 5) /**< \brief (US_IER) Overrun Error Interrupt Enable */\r
+#define US_IER_FRAME (0x1u << 6) /**< \brief (US_IER) Framing Error Interrupt Enable */\r
+#define US_IER_PARE (0x1u << 7) /**< \brief (US_IER) Parity Error Interrupt Enable */\r
+#define US_IER_TIMEOUT (0x1u << 8) /**< \brief (US_IER) Time-out Interrupt Enable */\r
+#define US_IER_TXEMPTY (0x1u << 9) /**< \brief (US_IER) TXEMPTY Interrupt Enable */\r
+#define US_IER_ITER (0x1u << 10) /**< \brief (US_IER) Max number of Repetitions Reached Interrupt Enable */\r
+#define US_IER_NACK (0x1u << 13) /**< \brief (US_IER) Non AcknowledgeInterrupt Enable */\r
+#define US_IER_CTSIC (0x1u << 19) /**< \brief (US_IER) Clear to Send Input Change Interrupt Enable */\r
+#define US_IER_MANE (0x1u << 24) /**< \brief (US_IER) Manchester Error Interrupt Enable */\r
+#define US_IER_UNRE (0x1u << 10) /**< \brief (US_IER) SPI Underrun Error Interrupt Enable */\r
+/* -------- US_IDR : (USART Offset: 0x000C) Interrupt Disable Register -------- */\r
+#define US_IDR_RXRDY (0x1u << 0) /**< \brief (US_IDR) RXRDY Interrupt Disable */\r
+#define US_IDR_TXRDY (0x1u << 1) /**< \brief (US_IDR) TXRDY Interrupt Disable */\r
+#define US_IDR_RXBRK (0x1u << 2) /**< \brief (US_IDR) Receiver Break Interrupt Disable */\r
+#define US_IDR_OVRE (0x1u << 5) /**< \brief (US_IDR) Overrun Error Interrupt Enable */\r
+#define US_IDR_FRAME (0x1u << 6) /**< \brief (US_IDR) Framing Error Interrupt Disable */\r
+#define US_IDR_PARE (0x1u << 7) /**< \brief (US_IDR) Parity Error Interrupt Disable */\r
+#define US_IDR_TIMEOUT (0x1u << 8) /**< \brief (US_IDR) Time-out Interrupt Disable */\r
+#define US_IDR_TXEMPTY (0x1u << 9) /**< \brief (US_IDR) TXEMPTY Interrupt Disable */\r
+#define US_IDR_ITER (0x1u << 10) /**< \brief (US_IDR) Max Number of Repetitions Reached Interrupt Disable */\r
+#define US_IDR_NACK (0x1u << 13) /**< \brief (US_IDR) Non AcknowledgeInterrupt Disable */\r
+#define US_IDR_CTSIC (0x1u << 19) /**< \brief (US_IDR) Clear to Send Input Change Interrupt Disable */\r
+#define US_IDR_MANE (0x1u << 24) /**< \brief (US_IDR) Manchester Error Interrupt Disable */\r
+#define US_IDR_UNRE (0x1u << 10) /**< \brief (US_IDR) SPI Underrun Error Interrupt Disable */\r
+/* -------- US_IMR : (USART Offset: 0x0010) Interrupt Mask Register -------- */\r
+#define US_IMR_RXRDY (0x1u << 0) /**< \brief (US_IMR) RXRDY Interrupt Mask */\r
+#define US_IMR_TXRDY (0x1u << 1) /**< \brief (US_IMR) TXRDY Interrupt Mask */\r
+#define US_IMR_RXBRK (0x1u << 2) /**< \brief (US_IMR) Receiver Break Interrupt Mask */\r
+#define US_IMR_OVRE (0x1u << 5) /**< \brief (US_IMR) Overrun Error Interrupt Mask */\r
+#define US_IMR_FRAME (0x1u << 6) /**< \brief (US_IMR) Framing Error Interrupt Mask */\r
+#define US_IMR_PARE (0x1u << 7) /**< \brief (US_IMR) Parity Error Interrupt Mask */\r
+#define US_IMR_TIMEOUT (0x1u << 8) /**< \brief (US_IMR) Time-out Interrupt Mask */\r
+#define US_IMR_TXEMPTY (0x1u << 9) /**< \brief (US_IMR) TXEMPTY Interrupt Mask */\r
+#define US_IMR_ITER (0x1u << 10) /**< \brief (US_IMR) Max Number of Repetitions Reached Interrupt Mask */\r
+#define US_IMR_NACK (0x1u << 13) /**< \brief (US_IMR) Non AcknowledgeInterrupt Mask */\r
+#define US_IMR_CTSIC (0x1u << 19) /**< \brief (US_IMR) Clear to Send Input Change Interrupt Mask */\r
+#define US_IMR_MANE (0x1u << 24) /**< \brief (US_IMR) Manchester Error Interrupt Mask */\r
+#define US_IMR_UNRE (0x1u << 10) /**< \brief (US_IMR) SPI Underrun Error Interrupt Mask */\r
+/* -------- US_CSR : (USART Offset: 0x0014) Channel Status Register -------- */\r
+#define US_CSR_RXRDY (0x1u << 0) /**< \brief (US_CSR) Receiver Ready */\r
+#define US_CSR_TXRDY (0x1u << 1) /**< \brief (US_CSR) Transmitter Ready */\r
+#define US_CSR_RXBRK (0x1u << 2) /**< \brief (US_CSR) Break Received/End of Break */\r
+#define US_CSR_OVRE (0x1u << 5) /**< \brief (US_CSR) Overrun Error */\r
+#define US_CSR_FRAME (0x1u << 6) /**< \brief (US_CSR) Framing Error */\r
+#define US_CSR_PARE (0x1u << 7) /**< \brief (US_CSR) Parity Error */\r
+#define US_CSR_TIMEOUT (0x1u << 8) /**< \brief (US_CSR) Receiver Time-out */\r
+#define US_CSR_TXEMPTY (0x1u << 9) /**< \brief (US_CSR) Transmitter Empty */\r
+#define US_CSR_ITER (0x1u << 10) /**< \brief (US_CSR) Max Number of Repetitions Reached */\r
+#define US_CSR_NACK (0x1u << 13) /**< \brief (US_CSR) Non AcknowledgeInterrupt */\r
+#define US_CSR_CTSIC (0x1u << 19) /**< \brief (US_CSR) Clear to Send Input Change Flag */\r
+#define US_CSR_CTS (0x1u << 23) /**< \brief (US_CSR) Image of CTS Input */\r
+#define US_CSR_MANERR (0x1u << 24) /**< \brief (US_CSR) Manchester Error */\r
+#define US_CSR_UNRE (0x1u << 10) /**< \brief (US_CSR) Underrun Error */\r
+/* -------- US_RHR : (USART Offset: 0x0018) Receiver Holding Register -------- */\r
+#define US_RHR_RXCHR_Pos 0\r
+#define US_RHR_RXCHR_Msk (0x1ffu << US_RHR_RXCHR_Pos) /**< \brief (US_RHR) Received Character */\r
+#define US_RHR_RXSYNH (0x1u << 15) /**< \brief (US_RHR) Received Sync */\r
+/* -------- US_THR : (USART Offset: 0x001C) Transmitter Holding Register -------- */\r
+#define US_THR_TXCHR_Pos 0\r
+#define US_THR_TXCHR_Msk (0x1ffu << US_THR_TXCHR_Pos) /**< \brief (US_THR) Character to be Transmitted */\r
+#define US_THR_TXCHR(value) ((US_THR_TXCHR_Msk & ((value) << US_THR_TXCHR_Pos)))\r
+#define US_THR_TXSYNH (0x1u << 15) /**< \brief (US_THR) Sync Field to be Transmitted */\r
+/* -------- US_BRGR : (USART Offset: 0x0020) Baud Rate Generator Register -------- */\r
+#define US_BRGR_CD_Pos 0\r
+#define US_BRGR_CD_Msk (0xffffu << US_BRGR_CD_Pos) /**< \brief (US_BRGR) Clock Divider */\r
+#define US_BRGR_CD(value) ((US_BRGR_CD_Msk & ((value) << US_BRGR_CD_Pos)))\r
+#define US_BRGR_FP_Pos 16\r
+#define US_BRGR_FP_Msk (0x7u << US_BRGR_FP_Pos) /**< \brief (US_BRGR) Fractional Part */\r
+#define US_BRGR_FP(value) ((US_BRGR_FP_Msk & ((value) << US_BRGR_FP_Pos)))\r
+/* -------- US_RTOR : (USART Offset: 0x0024) Receiver Time-out Register -------- */\r
+#define US_RTOR_TO_Pos 0\r
+#define US_RTOR_TO_Msk (0xffffu << US_RTOR_TO_Pos) /**< \brief (US_RTOR) Time-out Value */\r
+#define US_RTOR_TO(value) ((US_RTOR_TO_Msk & ((value) << US_RTOR_TO_Pos)))\r
+/* -------- US_TTGR : (USART Offset: 0x0028) Transmitter Timeguard Register -------- */\r
+#define US_TTGR_TG_Pos 0\r
+#define US_TTGR_TG_Msk (0xffu << US_TTGR_TG_Pos) /**< \brief (US_TTGR) Timeguard Value */\r
+#define US_TTGR_TG(value) ((US_TTGR_TG_Msk & ((value) << US_TTGR_TG_Pos)))\r
+/* -------- US_FIDI : (USART Offset: 0x0040) FI DI Ratio Register -------- */\r
+#define US_FIDI_FI_DI_RATIO_Pos 0\r
+#define US_FIDI_FI_DI_RATIO_Msk (0xffffu << US_FIDI_FI_DI_RATIO_Pos) /**< \brief (US_FIDI) FI Over DI Ratio Value */\r
+#define US_FIDI_FI_DI_RATIO(value) ((US_FIDI_FI_DI_RATIO_Msk & ((value) << US_FIDI_FI_DI_RATIO_Pos)))\r
+/* -------- US_NER : (USART Offset: 0x0044) Number of Errors Register -------- */\r
+#define US_NER_NB_ERRORS_Pos 0\r
+#define US_NER_NB_ERRORS_Msk (0xffu << US_NER_NB_ERRORS_Pos) /**< \brief (US_NER) Number of Errors */\r
+/* -------- US_IF : (USART Offset: 0x004C) IrDA Filter Register -------- */\r
+#define US_IF_IRDA_FILTER_Pos 0\r
+#define US_IF_IRDA_FILTER_Msk (0xffu << US_IF_IRDA_FILTER_Pos) /**< \brief (US_IF) IrDA Filter */\r
+#define US_IF_IRDA_FILTER(value) ((US_IF_IRDA_FILTER_Msk & ((value) << US_IF_IRDA_FILTER_Pos)))\r
+/* -------- US_MAN : (USART Offset: 0x0050) Manchester Encoder Decoder Register -------- */\r
+#define US_MAN_TX_PL_Pos 0\r
+#define US_MAN_TX_PL_Msk (0xfu << US_MAN_TX_PL_Pos) /**< \brief (US_MAN) Transmitter Preamble Length */\r
+#define US_MAN_TX_PL(value) ((US_MAN_TX_PL_Msk & ((value) << US_MAN_TX_PL_Pos)))\r
+#define US_MAN_TX_PP_Pos 8\r
+#define US_MAN_TX_PP_Msk (0x3u << US_MAN_TX_PP_Pos) /**< \brief (US_MAN) Transmitter Preamble Pattern */\r
+#define   US_MAN_TX_PP_ALL_ONE (0x0u << 8) /**< \brief (US_MAN) The preamble is composed of '1's */\r
+#define   US_MAN_TX_PP_ALL_ZERO (0x1u << 8) /**< \brief (US_MAN) The preamble is composed of '0's */\r
+#define   US_MAN_TX_PP_ZERO_ONE (0x2u << 8) /**< \brief (US_MAN) The preamble is composed of '01's */\r
+#define   US_MAN_TX_PP_ONE_ZERO (0x3u << 8) /**< \brief (US_MAN) The preamble is composed of '10's */\r
+#define US_MAN_TX_MPOL (0x1u << 12) /**< \brief (US_MAN) Transmitter Manchester Polarity */\r
+#define US_MAN_RX_PL_Pos 16\r
+#define US_MAN_RX_PL_Msk (0xfu << US_MAN_RX_PL_Pos) /**< \brief (US_MAN) Receiver Preamble Length */\r
+#define US_MAN_RX_PL(value) ((US_MAN_RX_PL_Msk & ((value) << US_MAN_RX_PL_Pos)))\r
+#define US_MAN_RX_PP_Pos 24\r
+#define US_MAN_RX_PP_Msk (0x3u << US_MAN_RX_PP_Pos) /**< \brief (US_MAN) Receiver Preamble Pattern detected */\r
+#define   US_MAN_RX_PP_ALL_ONE (0x0u << 24) /**< \brief (US_MAN) The preamble is composed of '1's */\r
+#define   US_MAN_RX_PP_ALL_ZERO (0x1u << 24) /**< \brief (US_MAN) The preamble is composed of '0's */\r
+#define   US_MAN_RX_PP_ZERO_ONE (0x2u << 24) /**< \brief (US_MAN) The preamble is composed of '01's */\r
+#define   US_MAN_RX_PP_ONE_ZERO (0x3u << 24) /**< \brief (US_MAN) The preamble is composed of '10's */\r
+#define US_MAN_RX_MPOL (0x1u << 28) /**< \brief (US_MAN) Receiver Manchester Polarity */\r
+#define US_MAN_ONE (0x1u << 29) /**< \brief (US_MAN) Must Be Set to 1 */\r
+#define US_MAN_DRIFT (0x1u << 30) /**< \brief (US_MAN) Drift Compensation */\r
+/* -------- US_WPMR : (USART Offset: 0x00E4) Write Protect Mode Register -------- */\r
+#define US_WPMR_WPEN (0x1u << 0) /**< \brief (US_WPMR) Write Protect Enable */\r
+#define US_WPMR_WPKEY_Pos 8\r
+#define US_WPMR_WPKEY_Msk (0xffffffu << US_WPMR_WPKEY_Pos) /**< \brief (US_WPMR) Write Protect KEY. */\r
+#define   US_WPMR_WPKEY_PASSWD (0x555341u << 8) /**< \brief (US_WPMR) Writing any other value in this field aborts the write operation of the WPEN bit. Always reads as 0. */\r
+/* -------- US_WPSR : (USART Offset: 0x00E8) Write Protect Status Register -------- */\r
+#define US_WPSR_WPVS (0x1u << 0) /**< \brief (US_WPSR) Write Protect Violation Status */\r
+#define US_WPSR_WPVSRC_Pos 8\r
+#define US_WPSR_WPVSRC_Msk (0xffffu << US_WPSR_WPVSRC_Pos) /**< \brief (US_WPSR) Write Protect Violation Source */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Watchdog Timer */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_WDT Watchdog Timer */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Wdt hardware registers */\r
+typedef struct {\r
+  __O  uint32_t WDT_CR; /**< \brief (Wdt Offset: 0x00) Control Register */\r
+  __IO uint32_t WDT_MR; /**< \brief (Wdt Offset: 0x04) Mode Register */\r
+  __I  uint32_t WDT_SR; /**< \brief (Wdt Offset: 0x08) Status Register */\r
+} Wdt;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- WDT_CR : (WDT Offset: 0x00) Control Register -------- */\r
+#define WDT_CR_WDRSTT (0x1u << 0) /**< \brief (WDT_CR) Watchdog Restart */\r
+#define WDT_CR_LOCKMR (0x1u << 4) /**< \brief (WDT_CR) Locks Mode Register Write Access */\r
+#define WDT_CR_KEY_Pos 24\r
+#define WDT_CR_KEY_Msk (0xffu << WDT_CR_KEY_Pos) /**< \brief (WDT_CR) Password. */\r
+#define   WDT_CR_KEY_PASSWD (0xA5u << 24) /**< \brief (WDT_CR) Writing any other value in this field aborts the write operation. */\r
+/* -------- WDT_MR : (WDT Offset: 0x04) Mode Register -------- */\r
+#define WDT_MR_WDV_Pos 0\r
+#define WDT_MR_WDV_Msk (0xfffu << WDT_MR_WDV_Pos) /**< \brief (WDT_MR) Watchdog Counter Value */\r
+#define WDT_MR_WDV(value) ((WDT_MR_WDV_Msk & ((value) << WDT_MR_WDV_Pos)))\r
+#define WDT_MR_WDFIEN (0x1u << 12) /**< \brief (WDT_MR) Watchdog Fault Interrupt Enable */\r
+#define WDT_MR_WDRSTEN (0x1u << 13) /**< \brief (WDT_MR) Watchdog Reset Enable */\r
+#define WDT_MR_WDRPROC (0x1u << 14) /**< \brief (WDT_MR) Watchdog Reset Processor */\r
+#define WDT_MR_WDDIS (0x1u << 15) /**< \brief (WDT_MR) Watchdog Disable */\r
+#define WDT_MR_WDD_Pos 16\r
+#define WDT_MR_WDD_Msk (0xfffu << WDT_MR_WDD_Pos) /**< \brief (WDT_MR) Watchdog Delta Value */\r
+#define WDT_MR_WDD(value) ((WDT_MR_WDD_Msk & ((value) << WDT_MR_WDD_Pos)))\r
+#define WDT_MR_WDDBGHLT (0x1u << 28) /**< \brief (WDT_MR) Watchdog Debug Halt */\r
+#define WDT_MR_WDIDLEHLT (0x1u << 29) /**< \brief (WDT_MR) Watchdog Idle Halt */\r
+/* -------- WDT_SR : (WDT Offset: 0x08) Status Register -------- */\r
+#define WDT_SR_WDUNF (0x1u << 0) /**< \brief (WDT_SR) Watchdog Underflow */\r
+#define WDT_SR_WDERR (0x1u << 1) /**< \brief (WDT_SR) Watchdog Error */\r
+\r
+/*@}*/\r
+\r
+/* ============================================================================= */\r
+/**  SOFTWARE API DEFINITION FOR Extensible DMA Controller */\r
+/* ============================================================================= */\r
+/** \addtogroup SAMA5D4_XDMAC Extensible DMA Controller */\r
+/*@{*/\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief XdmacChid hardware registers */\r
+typedef struct {\r
+  __O  uint32_t XDMAC_CIE;     /**< \brief (XdmacChid Offset: 0x0) Channel Interrupt Enable Register */\r
+  __O  uint32_t XDMAC_CID;     /**< \brief (XdmacChid Offset: 0x4) Channel Interrupt Disable Register */\r
+  __O  uint32_t XDMAC_CIM;     /**< \brief (XdmacChid Offset: 0x8) Channel Interrupt Mask Register */\r
+  __I  uint32_t XDMAC_CIS;     /**< \brief (XdmacChid Offset: 0xC) Channel Interrupt Status Register */\r
+  __IO uint32_t XDMAC_CSA;     /**< \brief (XdmacChid Offset: 0x10) Channel Source Address Register */\r
+  __IO uint32_t XDMAC_CDA;     /**< \brief (XdmacChid Offset: 0x14) Channel Destination Address Register */\r
+  __IO uint32_t XDMAC_CNDA;    /**< \brief (XdmacChid Offset: 0x18) Channel Next Descriptor Address Register */\r
+  __IO uint32_t XDMAC_CNDC;    /**< \brief (XdmacChid Offset: 0x1C) Channel Next Descriptor Control Register */\r
+  __IO uint32_t XDMAC_CUBC;    /**< \brief (XdmacChid Offset: 0x20) Channel Microblock Control Register */\r
+  __IO uint32_t XDMAC_CBC;     /**< \brief (XdmacChid Offset: 0x24) Channel Block Control Register */\r
+  __IO uint32_t XDMAC_CC;      /**< \brief (XdmacChid Offset: 0x28) Channel Configuration Register */\r
+  __IO uint32_t XDMAC_CDS_MSP; /**< \brief (XdmacChid Offset: 0x2C) Channel Data Stride Memory Set Pattern */\r
+  __IO uint32_t XDMAC_CSUS;    /**< \brief (XdmacChid Offset: 0x30) Channel Source Microblock Stride */\r
+  __IO uint32_t XDMAC_CDUS;    /**< \brief (XdmacChid Offset: 0x34) Channel Destination Microblock Stride */\r
+  __I  uint32_t Reserved1[2];\r
+} XdmacChid;\r
+/** \brief Xdmac hardware registers */\r
+#define XDMACCHID_NUMBER 16\r
+typedef struct {\r
+  __IO uint32_t  XDMAC_GTYPE;                  /**< \brief (Xdmac Offset: 0x00) Global Type register */\r
+  __I  uint32_t  XDMAC_GCFG;                   /**< \brief (Xdmac Offset: 0x04) Global Configuration Register */\r
+  __IO uint32_t  XDMAC_GWAC;                   /**< \brief (Xdmac Offset: 0x08) Global Weighted Arbiter Configuration Register */\r
+  __O  uint32_t  XDMAC_GIE;                    /**< \brief (Xdmac Offset: 0x0C) Global Interrupt Enable Register */\r
+  __O  uint32_t  XDMAC_GID;                    /**< \brief (Xdmac Offset: 0x10) Global Interrupt Disable Register */\r
+  __I  uint32_t  XDMAC_GIM;                    /**< \brief (Xdmac Offset: 0x14) Global Interrupt Mask Register */\r
+  __I  uint32_t  XDMAC_GIS;                    /**< \brief (Xdmac Offset: 0x18) Global Interrupt Status Register */\r
+  __O  uint32_t  XDMAC_GE;                     /**< \brief (Xdmac Offset: 0x1C) Global Channel Enable Register */\r
+  __O  uint32_t  XDMAC_GD;                     /**< \brief (Xdmac Offset: 0x20) Global Channel Disable Register */\r
+  __I  uint32_t  XDMAC_GS;                     /**< \brief (Xdmac Offset: 0x24) Global Channel Status Register */\r
+  __IO uint32_t  XDMAC_GRS;                    /**< \brief (Xdmac Offset: 0x28) Global Channel Read Suspend Register */\r
+  __IO uint32_t  XDMAC_GWS;                    /**< \brief (Xdmac Offset: 0x2C) Global Channel Write Suspend Register */\r
+  __O  uint32_t  XDMAC_GRWS;                   /**< \brief (Xdmac Offset: 0x30) Global Channel Read Write Suspend Register */\r
+  __O  uint32_t  XDMAC_GRWR;                   /**< \brief (Xdmac Offset: 0x34) Global Channel Read Write Resume Register */\r
+  __O  uint32_t  XDMAC_GSWR;                   /**< \brief (Xdmac Offset: 0x38) Global Channel Software Request Register */\r
+  __I  uint32_t  XDMAC_GSWS;                   /**< \brief (Xdmac Offset: 0x3C) Global Channel Software Request Status Register */\r
+  __O  uint32_t  XDMAC_GSWF;                   /**< \brief (Xdmac Offset: 0x40) Global Channel Software Flush Request Register */\r
+  __I  uint32_t  Reserved1[3];\r
+       XdmacChid XDMAC_CHID[XDMACCHID_NUMBER]; /**< \brief (Xdmac Offset: 0x50) chid = 0 .. 15 */\r
+} Xdmac;\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* -------- XDMAC_GTYPE : (XDMAC Offset: 0x00) Global Type register -------- */\r
+#define XDMAC_GTYPE_NB_CH_Pos 0\r
+#define XDMAC_GTYPE_NB_CH_Msk (0x1fu << XDMAC_GTYPE_NB_CH_Pos) /**< \brief (XDMAC_GTYPE) Number of Channels Minus One */\r
+#define XDMAC_GTYPE_NB_CH(value) ((XDMAC_GTYPE_NB_CH_Msk & ((value) << XDMAC_GTYPE_NB_CH_Pos)))\r
+#define XDMAC_GTYPE_FIFO_SZ_Pos 5\r
+#define XDMAC_GTYPE_FIFO_SZ_Msk (0x7ffu << XDMAC_GTYPE_FIFO_SZ_Pos) /**< \brief (XDMAC_GTYPE) Number of Bytes */\r
+#define XDMAC_GTYPE_FIFO_SZ(value) ((XDMAC_GTYPE_FIFO_SZ_Msk & ((value) << XDMAC_GTYPE_FIFO_SZ_Pos)))\r
+#define XDMAC_GTYPE_NB_REQ_Pos 16\r
+#define XDMAC_GTYPE_NB_REQ_Msk (0x7fu << XDMAC_GTYPE_NB_REQ_Pos) /**< \brief (XDMAC_GTYPE) Number of Peripheral Requests Minus One */\r
+#define XDMAC_GTYPE_NB_REQ(value) ((XDMAC_GTYPE_NB_REQ_Msk & ((value) << XDMAC_GTYPE_NB_REQ_Pos)))\r
+/* -------- XDMAC_GCFG : (XDMAC Offset: 0x04) Global Configuration Register -------- */\r
+#define XDMAC_GCFG_CGDISREG (0x1u << 0) /**< \brief (XDMAC_GCFG) Configuration Registers Clock Gating Disable */\r
+#define XDMAC_GCFG_CGDISPIPE (0x1u << 1) /**< \brief (XDMAC_GCFG) Pipeline Clock Gating Disable */\r
+#define XDMAC_GCFG_CGDISFIFO (0x1u << 2) /**< \brief (XDMAC_GCFG) FIFO Clock Gating Disable */\r
+#define XDMAC_GCFG_CGDISIF (0x1u << 3) /**< \brief (XDMAC_GCFG) Bus Interface Clock Gating Disable */\r
+#define XDMAC_GCFG_BXKBEN (0x1u << 8) /**< \brief (XDMAC_GCFG) Boundary X Kilo byte Enable */\r
+/* -------- XDMAC_GWAC : (XDMAC Offset: 0x08) Global Weighted Arbiter Configuration Register -------- */\r
+#define XDMAC_GWAC_PW0_Pos 0\r
+#define XDMAC_GWAC_PW0_Msk (0xfu << XDMAC_GWAC_PW0_Pos) /**< \brief (XDMAC_GWAC) Pool Weight 0 */\r
+#define XDMAC_GWAC_PW0(value) ((XDMAC_GWAC_PW0_Msk & ((value) << XDMAC_GWAC_PW0_Pos)))\r
+#define XDMAC_GWAC_PW1_Pos 4\r
+#define XDMAC_GWAC_PW1_Msk (0xfu << XDMAC_GWAC_PW1_Pos) /**< \brief (XDMAC_GWAC) Pool Weight 1 */\r
+#define XDMAC_GWAC_PW1(value) ((XDMAC_GWAC_PW1_Msk & ((value) << XDMAC_GWAC_PW1_Pos)))\r
+#define XDMAC_GWAC_PW2_Pos 8\r
+#define XDMAC_GWAC_PW2_Msk (0xfu << XDMAC_GWAC_PW2_Pos) /**< \brief (XDMAC_GWAC) Pool Weight 2 */\r
+#define XDMAC_GWAC_PW2(value) ((XDMAC_GWAC_PW2_Msk & ((value) << XDMAC_GWAC_PW2_Pos)))\r
+#define XDMAC_GWAC_PW3_Pos 12\r
+#define XDMAC_GWAC_PW3_Msk (0xfu << XDMAC_GWAC_PW3_Pos) /**< \brief (XDMAC_GWAC) Pool Weight 3 */\r
+#define XDMAC_GWAC_PW3(value) ((XDMAC_GWAC_PW3_Msk & ((value) << XDMAC_GWAC_PW3_Pos)))\r
+/* -------- XDMAC_GIE : (XDMAC Offset: 0x0C) Global Interrupt Enable Register -------- */\r
+#define XDMAC_GIE_IE0 (0x1u << 0) /**< \brief (XDMAC_GIE) XDMAC Channel 0 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE1 (0x1u << 1) /**< \brief (XDMAC_GIE) XDMAC Channel 1 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE2 (0x1u << 2) /**< \brief (XDMAC_GIE) XDMAC Channel 2 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE3 (0x1u << 3) /**< \brief (XDMAC_GIE) XDMAC Channel 3 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE4 (0x1u << 4) /**< \brief (XDMAC_GIE) XDMAC Channel 4 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE5 (0x1u << 5) /**< \brief (XDMAC_GIE) XDMAC Channel 5 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE6 (0x1u << 6) /**< \brief (XDMAC_GIE) XDMAC Channel 6 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE7 (0x1u << 7) /**< \brief (XDMAC_GIE) XDMAC Channel 7 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE8 (0x1u << 8) /**< \brief (XDMAC_GIE) XDMAC Channel 8 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE9 (0x1u << 9) /**< \brief (XDMAC_GIE) XDMAC Channel 9 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE10 (0x1u << 10) /**< \brief (XDMAC_GIE) XDMAC Channel 10 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE11 (0x1u << 11) /**< \brief (XDMAC_GIE) XDMAC Channel 11 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE12 (0x1u << 12) /**< \brief (XDMAC_GIE) XDMAC Channel 12 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE13 (0x1u << 13) /**< \brief (XDMAC_GIE) XDMAC Channel 13 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE14 (0x1u << 14) /**< \brief (XDMAC_GIE) XDMAC Channel 14 Interrupt Enable Bit */\r
+#define XDMAC_GIE_IE15 (0x1u << 15) /**< \brief (XDMAC_GIE) XDMAC Channel 15 Interrupt Enable Bit */\r
+/* -------- XDMAC_GID : (XDMAC Offset: 0x10) Global Interrupt Disable Register -------- */\r
+#define XDMAC_GID_ID0 (0x1u << 0) /**< \brief (XDMAC_GID) XDMAC Channel 0 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID1 (0x1u << 1) /**< \brief (XDMAC_GID) XDMAC Channel 1 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID2 (0x1u << 2) /**< \brief (XDMAC_GID) XDMAC Channel 2 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID3 (0x1u << 3) /**< \brief (XDMAC_GID) XDMAC Channel 3 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID4 (0x1u << 4) /**< \brief (XDMAC_GID) XDMAC Channel 4 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID5 (0x1u << 5) /**< \brief (XDMAC_GID) XDMAC Channel 5 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID6 (0x1u << 6) /**< \brief (XDMAC_GID) XDMAC Channel 6 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID7 (0x1u << 7) /**< \brief (XDMAC_GID) XDMAC Channel 7 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID8 (0x1u << 8) /**< \brief (XDMAC_GID) XDMAC Channel 8 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID9 (0x1u << 9) /**< \brief (XDMAC_GID) XDMAC Channel 9 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID10 (0x1u << 10) /**< \brief (XDMAC_GID) XDMAC Channel 10 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID11 (0x1u << 11) /**< \brief (XDMAC_GID) XDMAC Channel 11 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID12 (0x1u << 12) /**< \brief (XDMAC_GID) XDMAC Channel 12 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID13 (0x1u << 13) /**< \brief (XDMAC_GID) XDMAC Channel 13 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID14 (0x1u << 14) /**< \brief (XDMAC_GID) XDMAC Channel 14 Interrupt Disable Bit */\r
+#define XDMAC_GID_ID15 (0x1u << 15) /**< \brief (XDMAC_GID) XDMAC Channel 15 Interrupt Disable Bit */\r
+/* -------- XDMAC_GIM : (XDMAC Offset: 0x14) Global Interrupt Mask Register -------- */\r
+#define XDMAC_GIM_IM0 (0x1u << 0) /**< \brief (XDMAC_GIM) XDMAC Channel 0 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM1 (0x1u << 1) /**< \brief (XDMAC_GIM) XDMAC Channel 1 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM2 (0x1u << 2) /**< \brief (XDMAC_GIM) XDMAC Channel 2 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM3 (0x1u << 3) /**< \brief (XDMAC_GIM) XDMAC Channel 3 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM4 (0x1u << 4) /**< \brief (XDMAC_GIM) XDMAC Channel 4 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM5 (0x1u << 5) /**< \brief (XDMAC_GIM) XDMAC Channel 5 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM6 (0x1u << 6) /**< \brief (XDMAC_GIM) XDMAC Channel 6 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM7 (0x1u << 7) /**< \brief (XDMAC_GIM) XDMAC Channel 7 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM8 (0x1u << 8) /**< \brief (XDMAC_GIM) XDMAC Channel 8 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM9 (0x1u << 9) /**< \brief (XDMAC_GIM) XDMAC Channel 9 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM10 (0x1u << 10) /**< \brief (XDMAC_GIM) XDMAC Channel 10 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM11 (0x1u << 11) /**< \brief (XDMAC_GIM) XDMAC Channel 11 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM12 (0x1u << 12) /**< \brief (XDMAC_GIM) XDMAC Channel 12 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM13 (0x1u << 13) /**< \brief (XDMAC_GIM) XDMAC Channel 13 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM14 (0x1u << 14) /**< \brief (XDMAC_GIM) XDMAC Channel 14 Interrupt Mask Bit */\r
+#define XDMAC_GIM_IM15 (0x1u << 15) /**< \brief (XDMAC_GIM) XDMAC Channel 15 Interrupt Mask Bit */\r
+/* -------- XDMAC_GIS : (XDMAC Offset: 0x18) Global Interrupt Status Register -------- */\r
+#define XDMAC_GIS_IS0 (0x1u << 0) /**< \brief (XDMAC_GIS) XDMAC Channel 0 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS1 (0x1u << 1) /**< \brief (XDMAC_GIS) XDMAC Channel 1 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS2 (0x1u << 2) /**< \brief (XDMAC_GIS) XDMAC Channel 2 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS3 (0x1u << 3) /**< \brief (XDMAC_GIS) XDMAC Channel 3 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS4 (0x1u << 4) /**< \brief (XDMAC_GIS) XDMAC Channel 4 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS5 (0x1u << 5) /**< \brief (XDMAC_GIS) XDMAC Channel 5 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS6 (0x1u << 6) /**< \brief (XDMAC_GIS) XDMAC Channel 6 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS7 (0x1u << 7) /**< \brief (XDMAC_GIS) XDMAC Channel 7 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS8 (0x1u << 8) /**< \brief (XDMAC_GIS) XDMAC Channel 8 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS9 (0x1u << 9) /**< \brief (XDMAC_GIS) XDMAC Channel 9 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS10 (0x1u << 10) /**< \brief (XDMAC_GIS) XDMAC Channel 10 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS11 (0x1u << 11) /**< \brief (XDMAC_GIS) XDMAC Channel 11 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS12 (0x1u << 12) /**< \brief (XDMAC_GIS) XDMAC Channel 12 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS13 (0x1u << 13) /**< \brief (XDMAC_GIS) XDMAC Channel 13 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS14 (0x1u << 14) /**< \brief (XDMAC_GIS) XDMAC Channel 14 Interrupt Status Bit */\r
+#define XDMAC_GIS_IS15 (0x1u << 15) /**< \brief (XDMAC_GIS) XDMAC Channel 15 Interrupt Status Bit */\r
+/* -------- XDMAC_GE : (XDMAC Offset: 0x1C) Global Channel Enable Register -------- */\r
+#define XDMAC_GE_EN0 (0x1u << 0) /**< \brief (XDMAC_GE) XDMAC Channel 0 Enable Bit */\r
+#define XDMAC_GE_EN1 (0x1u << 1) /**< \brief (XDMAC_GE) XDMAC Channel 1 Enable Bit */\r
+#define XDMAC_GE_EN2 (0x1u << 2) /**< \brief (XDMAC_GE) XDMAC Channel 2 Enable Bit */\r
+#define XDMAC_GE_EN3 (0x1u << 3) /**< \brief (XDMAC_GE) XDMAC Channel 3 Enable Bit */\r
+#define XDMAC_GE_EN4 (0x1u << 4) /**< \brief (XDMAC_GE) XDMAC Channel 4 Enable Bit */\r
+#define XDMAC_GE_EN5 (0x1u << 5) /**< \brief (XDMAC_GE) XDMAC Channel 5 Enable Bit */\r
+#define XDMAC_GE_EN6 (0x1u << 6) /**< \brief (XDMAC_GE) XDMAC Channel 6 Enable Bit */\r
+#define XDMAC_GE_EN7 (0x1u << 7) /**< \brief (XDMAC_GE) XDMAC Channel 7 Enable Bit */\r
+#define XDMAC_GE_EN8 (0x1u << 8) /**< \brief (XDMAC_GE) XDMAC Channel 8 Enable Bit */\r
+#define XDMAC_GE_EN9 (0x1u << 9) /**< \brief (XDMAC_GE) XDMAC Channel 9 Enable Bit */\r
+#define XDMAC_GE_EN10 (0x1u << 10) /**< \brief (XDMAC_GE) XDMAC Channel 10 Enable Bit */\r
+#define XDMAC_GE_EN11 (0x1u << 11) /**< \brief (XDMAC_GE) XDMAC Channel 11 Enable Bit */\r
+#define XDMAC_GE_EN12 (0x1u << 12) /**< \brief (XDMAC_GE) XDMAC Channel 12 Enable Bit */\r
+#define XDMAC_GE_EN13 (0x1u << 13) /**< \brief (XDMAC_GE) XDMAC Channel 13 Enable Bit */\r
+#define XDMAC_GE_EN14 (0x1u << 14) /**< \brief (XDMAC_GE) XDMAC Channel 14 Enable Bit */\r
+#define XDMAC_GE_EN15 (0x1u << 15) /**< \brief (XDMAC_GE) XDMAC Channel 15 Enable Bit */\r
+/* -------- XDMAC_GD : (XDMAC Offset: 0x20) Global Channel Disable Register -------- */\r
+#define XDMAC_GD_DI0 (0x1u << 0) /**< \brief (XDMAC_GD) XDMAC Channel 0 Disable Bit */\r
+#define XDMAC_GD_DI1 (0x1u << 1) /**< \brief (XDMAC_GD) XDMAC Channel 1 Disable Bit */\r
+#define XDMAC_GD_DI2 (0x1u << 2) /**< \brief (XDMAC_GD) XDMAC Channel 2 Disable Bit */\r
+#define XDMAC_GD_DI3 (0x1u << 3) /**< \brief (XDMAC_GD) XDMAC Channel 3 Disable Bit */\r
+#define XDMAC_GD_DI4 (0x1u << 4) /**< \brief (XDMAC_GD) XDMAC Channel 4 Disable Bit */\r
+#define XDMAC_GD_DI5 (0x1u << 5) /**< \brief (XDMAC_GD) XDMAC Channel 5 Disable Bit */\r
+#define XDMAC_GD_DI6 (0x1u << 6) /**< \brief (XDMAC_GD) XDMAC Channel 6 Disable Bit */\r
+#define XDMAC_GD_DI7 (0x1u << 7) /**< \brief (XDMAC_GD) XDMAC Channel 7 Disable Bit */\r
+#define XDMAC_GD_DI8 (0x1u << 8) /**< \brief (XDMAC_GD) XDMAC Channel 8 Disable Bit */\r
+#define XDMAC_GD_DI9 (0x1u << 9) /**< \brief (XDMAC_GD) XDMAC Channel 9 Disable Bit */\r
+#define XDMAC_GD_DI10 (0x1u << 10) /**< \brief (XDMAC_GD) XDMAC Channel 10 Disable Bit */\r
+#define XDMAC_GD_DI11 (0x1u << 11) /**< \brief (XDMAC_GD) XDMAC Channel 11 Disable Bit */\r
+#define XDMAC_GD_DI12 (0x1u << 12) /**< \brief (XDMAC_GD) XDMAC Channel 12 Disable Bit */\r
+#define XDMAC_GD_DI13 (0x1u << 13) /**< \brief (XDMAC_GD) XDMAC Channel 13 Disable Bit */\r
+#define XDMAC_GD_DI14 (0x1u << 14) /**< \brief (XDMAC_GD) XDMAC Channel 14 Disable Bit */\r
+#define XDMAC_GD_DI15 (0x1u << 15) /**< \brief (XDMAC_GD) XDMAC Channel 15 Disable Bit */\r
+/* -------- XDMAC_GS : (XDMAC Offset: 0x24) Global Channel Status Register -------- */\r
+#define XDMAC_GS_ST0 (0x1u << 0) /**< \brief (XDMAC_GS) XDMAC Channel 0 Status Bit */\r
+#define XDMAC_GS_ST1 (0x1u << 1) /**< \brief (XDMAC_GS) XDMAC Channel 1 Status Bit */\r
+#define XDMAC_GS_ST2 (0x1u << 2) /**< \brief (XDMAC_GS) XDMAC Channel 2 Status Bit */\r
+#define XDMAC_GS_ST3 (0x1u << 3) /**< \brief (XDMAC_GS) XDMAC Channel 3 Status Bit */\r
+#define XDMAC_GS_ST4 (0x1u << 4) /**< \brief (XDMAC_GS) XDMAC Channel 4 Status Bit */\r
+#define XDMAC_GS_ST5 (0x1u << 5) /**< \brief (XDMAC_GS) XDMAC Channel 5 Status Bit */\r
+#define XDMAC_GS_ST6 (0x1u << 6) /**< \brief (XDMAC_GS) XDMAC Channel 6 Status Bit */\r
+#define XDMAC_GS_ST7 (0x1u << 7) /**< \brief (XDMAC_GS) XDMAC Channel 7 Status Bit */\r
+#define XDMAC_GS_ST8 (0x1u << 8) /**< \brief (XDMAC_GS) XDMAC Channel 8 Status Bit */\r
+#define XDMAC_GS_ST9 (0x1u << 9) /**< \brief (XDMAC_GS) XDMAC Channel 9 Status Bit */\r
+#define XDMAC_GS_ST10 (0x1u << 10) /**< \brief (XDMAC_GS) XDMAC Channel 10 Status Bit */\r
+#define XDMAC_GS_ST11 (0x1u << 11) /**< \brief (XDMAC_GS) XDMAC Channel 11 Status Bit */\r
+#define XDMAC_GS_ST12 (0x1u << 12) /**< \brief (XDMAC_GS) XDMAC Channel 12 Status Bit */\r
+#define XDMAC_GS_ST13 (0x1u << 13) /**< \brief (XDMAC_GS) XDMAC Channel 13 Status Bit */\r
+#define XDMAC_GS_ST14 (0x1u << 14) /**< \brief (XDMAC_GS) XDMAC Channel 14 Status Bit */\r
+#define XDMAC_GS_ST15 (0x1u << 15) /**< \brief (XDMAC_GS) XDMAC Channel 15 Status Bit */\r
+/* -------- XDMAC_GRS : (XDMAC Offset: 0x28) Global Channel Read Suspend Register -------- */\r
+#define XDMAC_GRS_RS0 (0x1u << 0) /**< \brief (XDMAC_GRS) XDMAC Channel 0 Read Suspend Bit */\r
+#define XDMAC_GRS_RS1 (0x1u << 1) /**< \brief (XDMAC_GRS) XDMAC Channel 1 Read Suspend Bit */\r
+#define XDMAC_GRS_RS2 (0x1u << 2) /**< \brief (XDMAC_GRS) XDMAC Channel 2 Read Suspend Bit */\r
+#define XDMAC_GRS_RS3 (0x1u << 3) /**< \brief (XDMAC_GRS) XDMAC Channel 3 Read Suspend Bit */\r
+#define XDMAC_GRS_RS4 (0x1u << 4) /**< \brief (XDMAC_GRS) XDMAC Channel 4 Read Suspend Bit */\r
+#define XDMAC_GRS_RS5 (0x1u << 5) /**< \brief (XDMAC_GRS) XDMAC Channel 5 Read Suspend Bit */\r
+#define XDMAC_GRS_RS6 (0x1u << 6) /**< \brief (XDMAC_GRS) XDMAC Channel 6 Read Suspend Bit */\r
+#define XDMAC_GRS_RS7 (0x1u << 7) /**< \brief (XDMAC_GRS) XDMAC Channel 7 Read Suspend Bit */\r
+#define XDMAC_GRS_RS8 (0x1u << 8) /**< \brief (XDMAC_GRS) XDMAC Channel 8 Read Suspend Bit */\r
+#define XDMAC_GRS_RS9 (0x1u << 9) /**< \brief (XDMAC_GRS) XDMAC Channel 9 Read Suspend Bit */\r
+#define XDMAC_GRS_RS10 (0x1u << 10) /**< \brief (XDMAC_GRS) XDMAC Channel 10 Read Suspend Bit */\r
+#define XDMAC_GRS_RS11 (0x1u << 11) /**< \brief (XDMAC_GRS) XDMAC Channel 11 Read Suspend Bit */\r
+#define XDMAC_GRS_RS12 (0x1u << 12) /**< \brief (XDMAC_GRS) XDMAC Channel 12 Read Suspend Bit */\r
+#define XDMAC_GRS_RS13 (0x1u << 13) /**< \brief (XDMAC_GRS) XDMAC Channel 13 Read Suspend Bit */\r
+#define XDMAC_GRS_RS14 (0x1u << 14) /**< \brief (XDMAC_GRS) XDMAC Channel 14 Read Suspend Bit */\r
+#define XDMAC_GRS_RS15 (0x1u << 15) /**< \brief (XDMAC_GRS) XDMAC Channel 15 Read Suspend Bit */\r
+/* -------- XDMAC_GWS : (XDMAC Offset: 0x2C) Global Channel Write Suspend Register -------- */\r
+#define XDMAC_GWS_WS0 (0x1u << 0) /**< \brief (XDMAC_GWS) XDMAC Channel 0 Write Suspend Bit */\r
+#define XDMAC_GWS_WS1 (0x1u << 1) /**< \brief (XDMAC_GWS) XDMAC Channel 1 Write Suspend Bit */\r
+#define XDMAC_GWS_WS2 (0x1u << 2) /**< \brief (XDMAC_GWS) XDMAC Channel 2 Write Suspend Bit */\r
+#define XDMAC_GWS_WS3 (0x1u << 3) /**< \brief (XDMAC_GWS) XDMAC Channel 3 Write Suspend Bit */\r
+#define XDMAC_GWS_WS4 (0x1u << 4) /**< \brief (XDMAC_GWS) XDMAC Channel 4 Write Suspend Bit */\r
+#define XDMAC_GWS_WS5 (0x1u << 5) /**< \brief (XDMAC_GWS) XDMAC Channel 5 Write Suspend Bit */\r
+#define XDMAC_GWS_WS6 (0x1u << 6) /**< \brief (XDMAC_GWS) XDMAC Channel 6 Write Suspend Bit */\r
+#define XDMAC_GWS_WS7 (0x1u << 7) /**< \brief (XDMAC_GWS) XDMAC Channel 7 Write Suspend Bit */\r
+#define XDMAC_GWS_WS8 (0x1u << 8) /**< \brief (XDMAC_GWS) XDMAC Channel 8 Write Suspend Bit */\r
+#define XDMAC_GWS_WS9 (0x1u << 9) /**< \brief (XDMAC_GWS) XDMAC Channel 9 Write Suspend Bit */\r
+#define XDMAC_GWS_WS10 (0x1u << 10) /**< \brief (XDMAC_GWS) XDMAC Channel 10 Write Suspend Bit */\r
+#define XDMAC_GWS_WS11 (0x1u << 11) /**< \brief (XDMAC_GWS) XDMAC Channel 11 Write Suspend Bit */\r
+#define XDMAC_GWS_WS12 (0x1u << 12) /**< \brief (XDMAC_GWS) XDMAC Channel 12 Write Suspend Bit */\r
+#define XDMAC_GWS_WS13 (0x1u << 13) /**< \brief (XDMAC_GWS) XDMAC Channel 13 Write Suspend Bit */\r
+#define XDMAC_GWS_WS14 (0x1u << 14) /**< \brief (XDMAC_GWS) XDMAC Channel 14 Write Suspend Bit */\r
+#define XDMAC_GWS_WS15 (0x1u << 15) /**< \brief (XDMAC_GWS) XDMAC Channel 15 Write Suspend Bit */\r
+/* -------- XDMAC_GRWS : (XDMAC Offset: 0x30) Global Channel Read Write Suspend Register -------- */\r
+#define XDMAC_GRWS_RWS0 (0x1u << 0) /**< \brief (XDMAC_GRWS) XDMAC Channel 0 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS1 (0x1u << 1) /**< \brief (XDMAC_GRWS) XDMAC Channel 1 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS2 (0x1u << 2) /**< \brief (XDMAC_GRWS) XDMAC Channel 2 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS3 (0x1u << 3) /**< \brief (XDMAC_GRWS) XDMAC Channel 3 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS4 (0x1u << 4) /**< \brief (XDMAC_GRWS) XDMAC Channel 4 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS5 (0x1u << 5) /**< \brief (XDMAC_GRWS) XDMAC Channel 5 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS6 (0x1u << 6) /**< \brief (XDMAC_GRWS) XDMAC Channel 6 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS7 (0x1u << 7) /**< \brief (XDMAC_GRWS) XDMAC Channel 7 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS8 (0x1u << 8) /**< \brief (XDMAC_GRWS) XDMAC Channel 8 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS9 (0x1u << 9) /**< \brief (XDMAC_GRWS) XDMAC Channel 9 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS10 (0x1u << 10) /**< \brief (XDMAC_GRWS) XDMAC Channel 10 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS11 (0x1u << 11) /**< \brief (XDMAC_GRWS) XDMAC Channel 11 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS12 (0x1u << 12) /**< \brief (XDMAC_GRWS) XDMAC Channel 12 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS13 (0x1u << 13) /**< \brief (XDMAC_GRWS) XDMAC Channel 13 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS14 (0x1u << 14) /**< \brief (XDMAC_GRWS) XDMAC Channel 14 Read Write Suspend Bit */\r
+#define XDMAC_GRWS_RWS15 (0x1u << 15) /**< \brief (XDMAC_GRWS) XDMAC Channel 15 Read Write Suspend Bit */\r
+/* -------- XDMAC_GRWR : (XDMAC Offset: 0x34) Global Channel Read Write Resume Register -------- */\r
+#define XDMAC_GRWR_RWR0 (0x1u << 0) /**< \brief (XDMAC_GRWR) XDMAC Channel 0 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR1 (0x1u << 1) /**< \brief (XDMAC_GRWR) XDMAC Channel 1 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR2 (0x1u << 2) /**< \brief (XDMAC_GRWR) XDMAC Channel 2 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR3 (0x1u << 3) /**< \brief (XDMAC_GRWR) XDMAC Channel 3 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR4 (0x1u << 4) /**< \brief (XDMAC_GRWR) XDMAC Channel 4 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR5 (0x1u << 5) /**< \brief (XDMAC_GRWR) XDMAC Channel 5 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR6 (0x1u << 6) /**< \brief (XDMAC_GRWR) XDMAC Channel 6 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR7 (0x1u << 7) /**< \brief (XDMAC_GRWR) XDMAC Channel 7 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR8 (0x1u << 8) /**< \brief (XDMAC_GRWR) XDMAC Channel 8 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR9 (0x1u << 9) /**< \brief (XDMAC_GRWR) XDMAC Channel 9 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR10 (0x1u << 10) /**< \brief (XDMAC_GRWR) XDMAC Channel 10 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR11 (0x1u << 11) /**< \brief (XDMAC_GRWR) XDMAC Channel 11 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR12 (0x1u << 12) /**< \brief (XDMAC_GRWR) XDMAC Channel 12 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR13 (0x1u << 13) /**< \brief (XDMAC_GRWR) XDMAC Channel 13 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR14 (0x1u << 14) /**< \brief (XDMAC_GRWR) XDMAC Channel 14 Read Write Resume Bit */\r
+#define XDMAC_GRWR_RWR15 (0x1u << 15) /**< \brief (XDMAC_GRWR) XDMAC Channel 15 Read Write Resume Bit */\r
+/* -------- XDMAC_GSWR : (XDMAC Offset: 0x38) Global Channel Software Request Register -------- */\r
+#define XDMAC_GSWR_SWREQ0 (0x1u << 0) /**< \brief (XDMAC_GSWR) XDMAC Channel 0 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ1 (0x1u << 1) /**< \brief (XDMAC_GSWR) XDMAC Channel 1 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ2 (0x1u << 2) /**< \brief (XDMAC_GSWR) XDMAC Channel 2 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ3 (0x1u << 3) /**< \brief (XDMAC_GSWR) XDMAC Channel 3 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ4 (0x1u << 4) /**< \brief (XDMAC_GSWR) XDMAC Channel 4 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ5 (0x1u << 5) /**< \brief (XDMAC_GSWR) XDMAC Channel 5 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ6 (0x1u << 6) /**< \brief (XDMAC_GSWR) XDMAC Channel 6 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ7 (0x1u << 7) /**< \brief (XDMAC_GSWR) XDMAC Channel 7 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ8 (0x1u << 8) /**< \brief (XDMAC_GSWR) XDMAC Channel 8 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ9 (0x1u << 9) /**< \brief (XDMAC_GSWR) XDMAC Channel 9 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ10 (0x1u << 10) /**< \brief (XDMAC_GSWR) XDMAC Channel 10 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ11 (0x1u << 11) /**< \brief (XDMAC_GSWR) XDMAC Channel 11 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ12 (0x1u << 12) /**< \brief (XDMAC_GSWR) XDMAC Channel 12 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ13 (0x1u << 13) /**< \brief (XDMAC_GSWR) XDMAC Channel 13 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ14 (0x1u << 14) /**< \brief (XDMAC_GSWR) XDMAC Channel 14 Software Request Bit */\r
+#define XDMAC_GSWR_SWREQ15 (0x1u << 15) /**< \brief (XDMAC_GSWR) XDMAC Channel 15 Software Request Bit */\r
+/* -------- XDMAC_GSWS : (XDMAC Offset: 0x3C) Global Channel Software Request Status Register -------- */\r
+#define XDMAC_GSWS_SWRS0 (0x1u << 0) /**< \brief (XDMAC_GSWS) XDMAC Channel 0 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS1 (0x1u << 1) /**< \brief (XDMAC_GSWS) XDMAC Channel 1 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS2 (0x1u << 2) /**< \brief (XDMAC_GSWS) XDMAC Channel 2 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS3 (0x1u << 3) /**< \brief (XDMAC_GSWS) XDMAC Channel 3 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS4 (0x1u << 4) /**< \brief (XDMAC_GSWS) XDMAC Channel 4 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS5 (0x1u << 5) /**< \brief (XDMAC_GSWS) XDMAC Channel 5 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS6 (0x1u << 6) /**< \brief (XDMAC_GSWS) XDMAC Channel 6 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS7 (0x1u << 7) /**< \brief (XDMAC_GSWS) XDMAC Channel 7 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS8 (0x1u << 8) /**< \brief (XDMAC_GSWS) XDMAC Channel 8 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS9 (0x1u << 9) /**< \brief (XDMAC_GSWS) XDMAC Channel 9 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS10 (0x1u << 10) /**< \brief (XDMAC_GSWS) XDMAC Channel 10 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS11 (0x1u << 11) /**< \brief (XDMAC_GSWS) XDMAC Channel 11 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS12 (0x1u << 12) /**< \brief (XDMAC_GSWS) XDMAC Channel 12 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS13 (0x1u << 13) /**< \brief (XDMAC_GSWS) XDMAC Channel 13 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS14 (0x1u << 14) /**< \brief (XDMAC_GSWS) XDMAC Channel 14 Software Request Status Bit */\r
+#define XDMAC_GSWS_SWRS15 (0x1u << 15) /**< \brief (XDMAC_GSWS) XDMAC Channel 15 Software Request Status Bit */\r
+/* -------- XDMAC_GSWF : (XDMAC Offset: 0x40) Global Channel Software Flush Request Register -------- */\r
+#define XDMAC_GSWF_SWF0 (0x1u << 0) /**< \brief (XDMAC_GSWF) XDMAC Channel 0 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF1 (0x1u << 1) /**< \brief (XDMAC_GSWF) XDMAC Channel 1 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF2 (0x1u << 2) /**< \brief (XDMAC_GSWF) XDMAC Channel 2 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF3 (0x1u << 3) /**< \brief (XDMAC_GSWF) XDMAC Channel 3 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF4 (0x1u << 4) /**< \brief (XDMAC_GSWF) XDMAC Channel 4 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF5 (0x1u << 5) /**< \brief (XDMAC_GSWF) XDMAC Channel 5 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF6 (0x1u << 6) /**< \brief (XDMAC_GSWF) XDMAC Channel 6 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF7 (0x1u << 7) /**< \brief (XDMAC_GSWF) XDMAC Channel 7 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF8 (0x1u << 8) /**< \brief (XDMAC_GSWF) XDMAC Channel 8 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF9 (0x1u << 9) /**< \brief (XDMAC_GSWF) XDMAC Channel 9 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF10 (0x1u << 10) /**< \brief (XDMAC_GSWF) XDMAC Channel 10 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF11 (0x1u << 11) /**< \brief (XDMAC_GSWF) XDMAC Channel 11 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF12 (0x1u << 12) /**< \brief (XDMAC_GSWF) XDMAC Channel 12 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF13 (0x1u << 13) /**< \brief (XDMAC_GSWF) XDMAC Channel 13 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF14 (0x1u << 14) /**< \brief (XDMAC_GSWF) XDMAC Channel 14 Software Flush Request Bit */\r
+#define XDMAC_GSWF_SWF15 (0x1u << 15) /**< \brief (XDMAC_GSWF) XDMAC Channel 15 Software Flush Request Bit */\r
+/* -------- XDMAC_CIE : (XDMAC Offset: N/A) Channel Interrupt Enable Register -------- */\r
+#define XDMAC_CIE_BIE (0x1u << 0) /**< \brief (XDMAC_CIE) End of Block Interrupt Enable Bit */\r
+#define XDMAC_CIE_LIE (0x1u << 1) /**< \brief (XDMAC_CIE) End of Linked List Interrupt Enable Bit */\r
+#define XDMAC_CIE_DIE (0x1u << 2) /**< \brief (XDMAC_CIE) End of Disable Interrupt Enable Bit */\r
+#define XDMAC_CIE_FIE (0x1u << 3) /**< \brief (XDMAC_CIE) End of Flush Interrupt Enable Bit */\r
+#define XDMAC_CIE_RBIE (0x1u << 4) /**< \brief (XDMAC_CIE) Read Bus Error Interrupt Enable Bit */\r
+#define XDMAC_CIE_WBIE (0x1u << 5) /**< \brief (XDMAC_CIE) Write Bus Error Interrupt Enable Bit */\r
+#define XDMAC_CIE_ROIE (0x1u << 6) /**< \brief (XDMAC_CIE) Request Overflow Error Interrupt Enable Bit */\r
+/* -------- XDMAC_CID : (XDMAC Offset: N/A) Channel Interrupt Disable Register -------- */\r
+#define XDMAC_CID_BID (0x1u << 0) /**< \brief (XDMAC_CID) End of Block Interrupt Disable Bit */\r
+#define XDMAC_CID_LID (0x1u << 1) /**< \brief (XDMAC_CID) End of Linked List Interrupt Disable Bit */\r
+#define XDMAC_CID_DID (0x1u << 2) /**< \brief (XDMAC_CID) End of Disable Interrupt Disable Bit */\r
+#define XDMAC_CID_FID (0x1u << 3) /**< \brief (XDMAC_CID) End of Flush Interrupt Disable Bit */\r
+#define XDMAC_CID_RBEID (0x1u << 4) /**< \brief (XDMAC_CID) Read Bus Error Interrupt Disable Bit */\r
+#define XDMAC_CID_WBEID (0x1u << 5) /**< \brief (XDMAC_CID) Write Bus Error Interrupt Disable Bit */\r
+#define XDMAC_CID_ROID (0x1u << 6) /**< \brief (XDMAC_CID) Request Overflow Error Interrupt Disable Bit */\r
+/* -------- XDMAC_CIM : (XDMAC Offset: N/A) Channel Interrupt Mask Register -------- */\r
+#define XDMAC_CIM_BIM (0x1u << 0) /**< \brief (XDMAC_CIM) End of Block Interrupt Mask Bit */\r
+#define XDMAC_CIM_LIM (0x1u << 1) /**< \brief (XDMAC_CIM) End of Linked List Interrupt Mask Bit */\r
+#define XDMAC_CIM_DIM (0x1u << 2) /**< \brief (XDMAC_CIM) End of Disable Interrupt Mask bit */\r
+#define XDMAC_CIM_FIM (0x1u << 3) /**< \brief (XDMAC_CIM) End of Flush Interrupt Mask Bit */\r
+#define XDMAC_CIM_RBEIM (0x1u << 4) /**< \brief (XDMAC_CIM) Read Bus Error Interrupt Mask Bit */\r
+#define XDMAC_CIM_WBEIM (0x1u << 5) /**< \brief (XDMAC_CIM) Write Bus Error Interrupt Mask Bit */\r
+#define XDMAC_CIM_ROIM (0x1u << 6) /**< \brief (XDMAC_CIM) Request Overflow Error Interrupt Mask Bit */\r
+/* -------- XDMAC_CIS : (XDMAC Offset: N/A) Channel Interrupt Status Register -------- */\r
+#define XDMAC_CIS_BIS (0x1u << 0) /**< \brief (XDMAC_CIS) End of Block Interrupt Status Bit */\r
+#define XDMAC_CIS_LIS (0x1u << 1) /**< \brief (XDMAC_CIS) End of Linked List Interrupt Status Bit */\r
+#define XDMAC_CIS_DIS (0x1u << 2) /**< \brief (XDMAC_CIS) End of Disable Interrupt Status Bit */\r
+#define XDMAC_CIS_FIS (0x1u << 3) /**< \brief (XDMAC_CIS) End of Flush Interrupt Status Bit */\r
+#define XDMAC_CIS_RBEIS (0x1u << 4) /**< \brief (XDMAC_CIS) Read Bus Error Interrupt Status Bit */\r
+#define XDMAC_CIS_WBEIS (0x1u << 5) /**< \brief (XDMAC_CIS) Write Bus Error Interrupt Status Bit */\r
+#define XDMAC_CIS_ROIS (0x1u << 6) /**< \brief (XDMAC_CIS) Request Overflow Error Interrupt Status Bit */\r
+/* -------- XDMAC_CSA : (XDMAC Offset: N/A) Channel Source Address Register -------- */\r
+#define XDMAC_CSA_SA_Pos 0\r
+#define XDMAC_CSA_SA_Msk (0xffffffffu << XDMAC_CSA_SA_Pos) /**< \brief (XDMAC_CSA) Channel x Source Address */\r
+#define XDMAC_CSA_SA(value) ((XDMAC_CSA_SA_Msk & ((value) << XDMAC_CSA_SA_Pos)))\r
+/* -------- XDMAC_CDA : (XDMAC Offset: N/A) Channel Destination Address Register -------- */\r
+#define XDMAC_CDA_DA_Pos 0\r
+#define XDMAC_CDA_DA_Msk (0xffffffffu << XDMAC_CDA_DA_Pos) /**< \brief (XDMAC_CDA) Channel x Destination Address */\r
+#define XDMAC_CDA_DA(value) ((XDMAC_CDA_DA_Msk & ((value) << XDMAC_CDA_DA_Pos)))\r
+/* -------- XDMAC_CNDA : (XDMAC Offset: N/A) Channel Next Descriptor Address Register -------- */\r
+#define XDMAC_CNDA_NDAIF (0x1u << 0) /**< \brief (XDMAC_CNDA) Channel x Next Descriptor Interface */\r
+#define XDMAC_CNDA_NDA_Pos 2\r
+#define XDMAC_CNDA_NDA_Msk (0x3fffffffu << XDMAC_CNDA_NDA_Pos) /**< \brief (XDMAC_CNDA) Channel x Next Descriptor Address */\r
+#define XDMAC_CNDA_NDA(value) ((XDMAC_CNDA_NDA_Msk & ((value) << XDMAC_CNDA_NDA_Pos)))\r
+/* -------- XDMAC_CNDC : (XDMAC Offset: N/A) Channel Next Descriptor Control Register -------- */\r
+#define XDMAC_CNDC_NDE (0x1u << 0) /**< \brief (XDMAC_CNDC) Channel x Next Descriptor Enable */\r
+#define   XDMAC_CNDC_NDE_DSCR_FETCH_DIS (0x0u << 0) /**< \brief (XDMAC_CNDC) Descriptor fetch is disabled */\r
+#define   XDMAC_CNDC_NDE_DSCR_FETCH_EN (0x1u << 0) /**< \brief (XDMAC_CNDC) Descriptor fetch is enabled */\r
+#define XDMAC_CNDC_NDSUP (0x1u << 1) /**< \brief (XDMAC_CNDC) Channel x Next Descriptor Source Update */\r
+#define   XDMAC_CNDC_NDSUP_SRC_PARAMS_UNCHANGED (0x0u << 1) /**< \brief (XDMAC_CNDC) Source parameters remain unchanged. */\r
+#define   XDMAC_CNDC_NDSUP_SRC_PARAMS_UPDATED (0x1u << 1) /**< \brief (XDMAC_CNDC) Source parameters are updated when the descriptor is retrieved. */\r
+#define XDMAC_CNDC_NDDUP (0x1u << 2) /**< \brief (XDMAC_CNDC) Channel x Next Descriptor Destination Update */\r
+#define   XDMAC_CNDC_NDDUP_DST_PARAMS_UNCHANGED (0x0u << 2) /**< \brief (XDMAC_CNDC) Destination parameters remain unchanged. */\r
+#define   XDMAC_CNDC_NDDUP_DST_PARAMS_UPDATED (0x1u << 2) /**< \brief (XDMAC_CNDC) Destination parameters are updated when the descriptor is retrieved. */\r
+#define XDMAC_CNDC_NDVIEW_Pos 3\r
+#define XDMAC_CNDC_NDVIEW_Msk (0x3u << XDMAC_CNDC_NDVIEW_Pos) /**< \brief (XDMAC_CNDC) Channel x Next Descriptor View */\r
+#define   XDMAC_CNDC_NDVIEW_NDV0 (0x0u << 3) /**< \brief (XDMAC_CNDC) Next Descriptor View 0 */\r
+#define   XDMAC_CNDC_NDVIEW_NDV1 (0x1u << 3) /**< \brief (XDMAC_CNDC) Next Descriptor View 1 */\r
+#define   XDMAC_CNDC_NDVIEW_NDV2 (0x2u << 3) /**< \brief (XDMAC_CNDC) Next Descriptor View 2 */\r
+#define   XDMAC_CNDC_NDVIEW_NDV3 (0x3u << 3) /**< \brief (XDMAC_CNDC) Next Descriptor View 3 */\r
+/* -------- XDMAC_CUBC : (XDMAC Offset: N/A) Channel Microblock Control Register -------- */\r
+#define XDMAC_CUBC_UBLEN_Pos 0\r
+#define XDMAC_CUBC_UBLEN_Msk (0xffffffu << XDMAC_CUBC_UBLEN_Pos) /**< \brief (XDMAC_CUBC) Channel x Microblock Length */\r
+#define XDMAC_CUBC_UBLEN(value) ((XDMAC_CUBC_UBLEN_Msk & ((value) << XDMAC_CUBC_UBLEN_Pos)))\r
+/* -------- XDMAC_CBC : (XDMAC Offset: N/A) Channel Block Control Register -------- */\r
+#define XDMAC_CBC_BLEN_Pos 0\r
+#define XDMAC_CBC_BLEN_Msk (0xfffu << XDMAC_CBC_BLEN_Pos) /**< \brief (XDMAC_CBC) Channel x Block Length */\r
+#define XDMAC_CBC_BLEN(value) ((XDMAC_CBC_BLEN_Msk & ((value) << XDMAC_CBC_BLEN_Pos)))\r
+/* -------- XDMAC_CC : (XDMAC Offset: N/A) Channel Configuration Register -------- */\r
+#define XDMAC_CC_TYPE (0x1u << 0) /**< \brief (XDMAC_CC) Channel x Transfer Type */\r
+#define   XDMAC_CC_TYPE_MEM_TRAN (0x0u << 0) /**< \brief (XDMAC_CC) Self triggered mode (Memory to Memory Transfer). */\r
+#define   XDMAC_CC_TYPE_PER_TRAN (0x1u << 0) /**< \brief (XDMAC_CC) Synchronized mode (Peripheral to Memory or Memory to Peripheral Transfer). */\r
+#define XDMAC_CC_MBSIZE_Pos 1\r
+#define XDMAC_CC_MBSIZE_Msk (0x3u << XDMAC_CC_MBSIZE_Pos) /**< \brief (XDMAC_CC) Channel x Memory Burst Size */\r
+#define   XDMAC_CC_MBSIZE_SINGLE (0x0u << 1) /**< \brief (XDMAC_CC) The memory burst size is set to one. */\r
+#define   XDMAC_CC_MBSIZE_FOUR (0x1u << 1) /**< \brief (XDMAC_CC) The memory burst size is set to four. */\r
+#define   XDMAC_CC_MBSIZE_EIGHT (0x2u << 1) /**< \brief (XDMAC_CC) The memory burst size is set to eight. */\r
+#define   XDMAC_CC_MBSIZE_SIXTEEN (0x3u << 1) /**< \brief (XDMAC_CC) The memory burst size is set to sixteen. */\r
+#define XDMAC_CC_DSYNC (0x1u << 4) /**< \brief (XDMAC_CC) Channel x Synchronization */\r
+#define   XDMAC_CC_DSYNC_PER2MEM (0x0u << 4) /**< \brief (XDMAC_CC) Peripheral to Memory transfer */\r
+#define   XDMAC_CC_DSYNC_MEM2PER (0x1u << 4) /**< \brief (XDMAC_CC) Memory to Peripheral transfer */\r
+#define XDMAC_CC_PROT (0x1u << 5) /**< \brief (XDMAC_CC) Channel x Protection */\r
+#define   XDMAC_CC_PROT_SEC (0x0u << 5) /**< \brief (XDMAC_CC) Channel is secured */\r
+#define   XDMAC_CC_PROT_UNSEC (0x1u << 5) /**< \brief (XDMAC_CC) Channel is unsecured */\r
+#define XDMAC_CC_SWREQ (0x1u << 6) /**< \brief (XDMAC_CC) Channel x Software Request Trigger */\r
+#define   XDMAC_CC_SWREQ_HWR_CONNECTED (0x0u << 6) /**< \brief (XDMAC_CC) Hardware request line is connected to the peripheral request line. */\r
+#define   XDMAC_CC_SWREQ_SWR_CONNECTED (0x1u << 6) /**< \brief (XDMAC_CC) Software request is connected to the peripheral request line. */\r
+#define XDMAC_CC_MEMSET (0x1u << 7) /**< \brief (XDMAC_CC) Channel x Fill Block of memory */\r
+#define   XDMAC_CC_MEMSET_NORMAL_MODE (0x0u << 7) /**< \brief (XDMAC_CC) Memset is not activated */\r
+#define   XDMAC_CC_MEMSET_HW_MODE (0x1u << 7) /**< \brief (XDMAC_CC) Sets the block of memory pointed by DA field to the specified value. This operation is performed on 8, 16 or 32 bits basis. */\r
+#define XDMAC_CC_CSIZE_Pos 8\r
+#define XDMAC_CC_CSIZE_Msk (0x7u << XDMAC_CC_CSIZE_Pos) /**< \brief (XDMAC_CC) Channel x Chunk Size */\r
+#define   XDMAC_CC_CSIZE_CHK_1 (0x0u << 8) /**< \brief (XDMAC_CC) 1 data transferred */\r
+#define   XDMAC_CC_CSIZE_CHK_2 (0x1u << 8) /**< \brief (XDMAC_CC) 2 data transferred */\r
+#define   XDMAC_CC_CSIZE_CHK_4 (0x2u << 8) /**< \brief (XDMAC_CC) 4 data transferred */\r
+#define   XDMAC_CC_CSIZE_CHK_8 (0x3u << 8) /**< \brief (XDMAC_CC) 8 data transferred */\r
+#define   XDMAC_CC_CSIZE_CHK_16 (0x4u << 8) /**< \brief (XDMAC_CC) 16 data transferred */\r
+#define XDMAC_CC_DWIDTH_Pos 11\r
+#define XDMAC_CC_DWIDTH_Msk (0x3u << XDMAC_CC_DWIDTH_Pos) /**< \brief (XDMAC_CC) Channel x Data Width */\r
+#define   XDMAC_CC_DWIDTH_BYTE (0x0u << 11) /**< \brief (XDMAC_CC) The data size is set to 8 bits */\r
+#define   XDMAC_CC_DWIDTH_HALFWORD (0x1u << 11) /**< \brief (XDMAC_CC) The data size is set to 16 bits */\r
+#define   XDMAC_CC_DWIDTH_WORD (0x2u << 11) /**< \brief (XDMAC_CC) The data size is set to 32 bits */\r
+#define   XDMAC_CC_DWIDTH_DWORD (0x3u << 11) /**< \brief (XDMAC_CC) The data size is set to 64bits */\r
+#define XDMAC_CC_SIF (0x1u << 13) /**< \brief (XDMAC_CC) Channel x Source Interface Identifier */\r
+#define   XDMAC_CC_SIF_AHB_IF0 (0x0u << 13) /**< \brief (XDMAC_CC) The data is read through the system bus interface 0 */\r
+#define   XDMAC_CC_SIF_AHB_IF1 (0x1u << 13) /**< \brief (XDMAC_CC) The data is read through the system bus interface 1 */\r
+#define XDMAC_CC_DIF (0x1u << 14) /**< \brief (XDMAC_CC) Channel x Destination Interface Identifier */\r
+#define   XDMAC_CC_DIF_AHB_IF0 (0x0u << 14) /**< \brief (XDMAC_CC) The data is written through the system bus interface 0 */\r
+#define   XDMAC_CC_DIF_AHB_IF1 (0x1u << 14) /**< \brief (XDMAC_CC) The data is written though the system bus interface 1 */\r
+#define XDMAC_CC_SAM_Pos 16\r
+#define XDMAC_CC_SAM_Msk (0x3u << XDMAC_CC_SAM_Pos) /**< \brief (XDMAC_CC) Channel x Source Addressing Mode */\r
+#define   XDMAC_CC_SAM_FIXED_AM (0x0u << 16) /**< \brief (XDMAC_CC) The address remains unchanged. */\r
+#define   XDMAC_CC_SAM_INCREMENTED_AM (0x1u << 16) /**< \brief (XDMAC_CC) The addressing mode is incremented (the increment size is set to the data size). */\r
+#define   XDMAC_CC_SAM_UBS_AM (0x2u << 16) /**< \brief (XDMAC_CC) The microblock stride is added at the microblock boundary. */\r
+#define   XDMAC_CC_SAM_UBS_DS_AM (0x3u << 16) /**< \brief (XDMAC_CC) The microblock stride is added at the microblock boundary, the data stride is added at the data boundary. */\r
+#define XDMAC_CC_DAM_Pos 18\r
+#define XDMAC_CC_DAM_Msk (0x3u << XDMAC_CC_DAM_Pos) /**< \brief (XDMAC_CC) Channel x Destination Addressing Mode */\r
+#define   XDMAC_CC_DAM_FIXED_AM (0x0u << 18) /**< \brief (XDMAC_CC) The address remains unchanged. */\r
+#define   XDMAC_CC_DAM_INCREMENTED_AM (0x1u << 18) /**< \brief (XDMAC_CC) The addressing mode is incremented (the increment size is set to the data size). */\r
+#define   XDMAC_CC_DAM_UBS_AM (0x2u << 18) /**< \brief (XDMAC_CC) The microblock stride is added at the microblock boundary. */\r
+#define   XDMAC_CC_DAM_UBS_DS_AM (0x3u << 18) /**< \brief (XDMAC_CC) The microblock stride is added at the microblock boundary, the data stride is added at the data boundary. */\r
+#define XDMAC_CC_INITD (0x1u << 21) /**< \brief (XDMAC_CC) Channel Initialization Terminated (this bit is read only) */\r
+#define   XDMAC_CC_INITD_TERMINATED (0x0u << 21) /**< \brief (XDMAC_CC) Channel initialization is in progress. */\r
+#define   XDMAC_CC_INITD_IN_PROGRESS (0x1u << 21) /**< \brief (XDMAC_CC) Channel initialization is completed. */\r
+#define XDMAC_CC_RDIP (0x1u << 22) /**< \brief (XDMAC_CC) Read in Progress (this bit is read only) */\r
+#define   XDMAC_CC_RDIP_DONE (0x0u << 22) /**< \brief (XDMAC_CC) No Active read transaction on the bus. */\r
+#define   XDMAC_CC_RDIP_IN_PROGRESS (0x1u << 22) /**< \brief (XDMAC_CC) A read transaction is in progress. */\r
+#define XDMAC_CC_WRIP (0x1u << 23) /**< \brief (XDMAC_CC) Write in Progress (this bit is read only) */\r
+#define   XDMAC_CC_WRIP_DONE (0x0u << 23) /**< \brief (XDMAC_CC) No Active write transaction on the bus. */\r
+#define   XDMAC_CC_WRIP_IN_PROGRESS (0x1u << 23) /**< \brief (XDMAC_CC) A Write transaction is in progress. */\r
+#define XDMAC_CC_PERID_Pos 24\r
+#define XDMAC_CC_PERID_Msk (0x7fu << XDMAC_CC_PERID_Pos) /**< \brief (XDMAC_CC) Channel x Peripheral Identifier */\r
+#define XDMAC_CC_PERID(value) ((XDMAC_CC_PERID_Msk & ((value) << XDMAC_CC_PERID_Pos)))\r
+/* -------- XDMAC_CDS_MSP : (XDMAC Offset: N/A) Channel Data Stride Memory Set Pattern -------- */\r
+#define XDMAC_CDS_MSP_SDS_MSP_Pos 0\r
+#define XDMAC_CDS_MSP_SDS_MSP_Msk (0xffffu << XDMAC_CDS_MSP_SDS_MSP_Pos) /**< \brief (XDMAC_CDS_MSP) Channel x Source Data stride or Memory Set Pattern */\r
+#define XDMAC_CDS_MSP_SDS_MSP(value) ((XDMAC_CDS_MSP_SDS_MSP_Msk & ((value) << XDMAC_CDS_MSP_SDS_MSP_Pos)))\r
+#define XDMAC_CDS_MSP_DDS_MSP_Pos 16\r
+#define XDMAC_CDS_MSP_DDS_MSP_Msk (0xffffu << XDMAC_CDS_MSP_DDS_MSP_Pos) /**< \brief (XDMAC_CDS_MSP) Channel x Destination Data Stride or Memory Set Pattern */\r
+#define XDMAC_CDS_MSP_DDS_MSP(value) ((XDMAC_CDS_MSP_DDS_MSP_Msk & ((value) << XDMAC_CDS_MSP_DDS_MSP_Pos)))\r
+/* -------- XDMAC_CSUS : (XDMAC Offset: N/A) Channel Source Microblock Stride -------- */\r
+#define XDMAC_CSUS_SUBS_Pos 0\r
+#define XDMAC_CSUS_SUBS_Msk (0xffffffu << XDMAC_CSUS_SUBS_Pos) /**< \brief (XDMAC_CSUS) Channel x Source Microblock Stride */\r
+#define XDMAC_CSUS_SUBS(value) ((XDMAC_CSUS_SUBS_Msk & ((value) << XDMAC_CSUS_SUBS_Pos)))\r
+/* -------- XDMAC_CDUS : (XDMAC Offset: N/A) Channel Destination Microblock Stride -------- */\r
+#define XDMAC_CDUS_DUBS_Pos 0\r
+#define XDMAC_CDUS_DUBS_Msk (0xffffffu << XDMAC_CDUS_DUBS_Pos) /**< \brief (XDMAC_CDUS) Channel x Destination Microblock Stride */\r
+#define XDMAC_CDUS_DUBS(value) ((XDMAC_CDUS_DUBS_Msk & ((value) << XDMAC_CDUS_DUBS_Pos)))\r
+\r
+/*@}*/\r
+\r
+/*@}*/\r
+\r
+/* ************************************************************************** */\r
+/*   REGISTER ACCESS DEFINITIONS FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+/** \addtogroup SAMA5D4_reg Registers Access Definitions */\r
+/*@{*/\r
+\r
+/* ========== Register definition for AXIMX peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_AXIMX_REMAP                 (0x00700000U) /**< \brief (AXIMX) Remap Register */\r
+#else\r
+  #define REG_AXIMX_REMAP (*(__O uint32_t*)0x00700000U) /**< \brief (AXIMX) Remap Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SMD peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SMD_CONTROL_POPR                  (0x00900000U) /**< \brief (SMD) SMD Control or Pop Removal register */\r
+  #define REG_SMD_STATUS_REV                    (0x00900004U) /**< \brief (SMD) SMD Status or Revision register */\r
+  #define REG_SMD_WRAP                          (0x00900008U) /**< \brief (SMD) SMD Wrapper/Power register */\r
+  #define REG_SMD_DRIVE                         (0x0090000CU) /**< \brief (SMD) SMD Drive register */\r
+  #define REG_SMD_ADJ                           (0x00900010U) /**< \brief (SMD) SMD Adjustment register */\r
+  #define REG_SMD_VOLC                          (0x00900014U) /**< \brief (SMD) SMD Volume Control register */\r
+  #define REG_SMD_AUX                           (0x00900018U) /**< \brief (SMD) SMD Auxiliary Control register */\r
+  #define REG_SMD_PULSE                         (0x0090001CU) /**< \brief (SMD) SMD Pulse Dialing Control register */\r
+  #define REG_SMD_DATA1_LOW                     (0x00900020U) /**< \brief (SMD) SMD Data1 Lower Byte register */\r
+  #define REG_SMD_DATA1_UP                      (0x00900024U) /**< \brief (SMD) SMD Data1 Upper Byte register */\r
+  #define REG_SMD_CTRL1_LOW                     (0x00900028U) /**< \brief (SMD) SMD Control1 Lower Byte register */\r
+  #define REG_SMD_CTRL1_UP                      (0x0090002CU) /**< \brief (SMD) SMD Control1 Upper Byte register */\r
+  #define REG_SMD_DATA2_LOW                     (0x00900030U) /**< \brief (SMD) SMD Data2 Lower Byte register */\r
+  #define REG_SMD_DATA2_UP                      (0x00900034U) /**< \brief (SMD) SMD Data2 Upper Byte register */\r
+  #define REG_SMD_CTRL2                         (0x00900038U) /**< \brief (SMD) SMD Control2 register */\r
+  #define REG_SMD_PARAM_TRIM                    (0x0090003CU) /**< \brief (SMD) SMD Parameter register (for pulse dialing / ring detection) */\r
+  #define REG_SMD_FIFOCTRL                      (0x00900040U) /**< \brief (SMD) SMD FIFO Control register */\r
+  #define REG_SMD_IRQ_LVL                       (0x00900044U) /**< \brief (SMD) SMD FIFO IRQ Level register */\r
+  #define REG_SMD_LPWR_CLK_ENB                  (0x00900048U) /**< \brief (SMD) SMD Low Power Clock Enable register */\r
+  #define REG_SMD_TXDATA_FIFO                   (0x00900050U) /**< \brief (SMD) SMD Transmit Data FIFO */\r
+  #define REG_SMD_RXDATA_FIFO                   (0x00900054U) /**< \brief (SMD) SMD Receive Data FIFO */\r
+#else\r
+  #define REG_SMD_CONTROL_POPR (*(__IO uint32_t*)0x00900000U) /**< \brief (SMD) SMD Control or Pop Removal register */\r
+  #define REG_SMD_STATUS_REV   (*(__IO uint32_t*)0x00900004U) /**< \brief (SMD) SMD Status or Revision register */\r
+  #define REG_SMD_WRAP         (*(__IO uint32_t*)0x00900008U) /**< \brief (SMD) SMD Wrapper/Power register */\r
+  #define REG_SMD_DRIVE        (*(__IO uint32_t*)0x0090000CU) /**< \brief (SMD) SMD Drive register */\r
+  #define REG_SMD_ADJ          (*(__IO uint32_t*)0x00900010U) /**< \brief (SMD) SMD Adjustment register */\r
+  #define REG_SMD_VOLC         (*(__IO uint32_t*)0x00900014U) /**< \brief (SMD) SMD Volume Control register */\r
+  #define REG_SMD_AUX          (*(__IO uint32_t*)0x00900018U) /**< \brief (SMD) SMD Auxiliary Control register */\r
+  #define REG_SMD_PULSE        (*(__IO uint32_t*)0x0090001CU) /**< \brief (SMD) SMD Pulse Dialing Control register */\r
+  #define REG_SMD_DATA1_LOW    (*(__IO uint32_t*)0x00900020U) /**< \brief (SMD) SMD Data1 Lower Byte register */\r
+  #define REG_SMD_DATA1_UP     (*(__IO uint32_t*)0x00900024U) /**< \brief (SMD) SMD Data1 Upper Byte register */\r
+  #define REG_SMD_CTRL1_LOW    (*(__IO uint32_t*)0x00900028U) /**< \brief (SMD) SMD Control1 Lower Byte register */\r
+  #define REG_SMD_CTRL1_UP     (*(__IO uint32_t*)0x0090002CU) /**< \brief (SMD) SMD Control1 Upper Byte register */\r
+  #define REG_SMD_DATA2_LOW    (*(__I  uint32_t*)0x00900030U) /**< \brief (SMD) SMD Data2 Lower Byte register */\r
+  #define REG_SMD_DATA2_UP     (*(__I  uint32_t*)0x00900034U) /**< \brief (SMD) SMD Data2 Upper Byte register */\r
+  #define REG_SMD_CTRL2        (*(__I  uint32_t*)0x00900038U) /**< \brief (SMD) SMD Control2 register */\r
+  #define REG_SMD_PARAM_TRIM   (*(__IO uint32_t*)0x0090003CU) /**< \brief (SMD) SMD Parameter register (for pulse dialing / ring detection) */\r
+  #define REG_SMD_FIFOCTRL     (*(__IO uint32_t*)0x00900040U) /**< \brief (SMD) SMD FIFO Control register */\r
+  #define REG_SMD_IRQ_LVL      (*(__IO uint32_t*)0x00900044U) /**< \brief (SMD) SMD FIFO IRQ Level register */\r
+  #define REG_SMD_LPWR_CLK_ENB (*(__IO uint32_t*)0x00900048U) /**< \brief (SMD) SMD Low Power Clock Enable register */\r
+  #define REG_SMD_TXDATA_FIFO  (*(__O  uint32_t*)0x00900050U) /**< \brief (SMD) SMD Transmit Data FIFO */\r
+  #define REG_SMD_RXDATA_FIFO  (*(__I  uint32_t*)0x00900054U) /**< \brief (SMD) SMD Receive Data FIFO */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for L2CC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_L2CC_IDR                     (0x00A00000U) /**< \brief (L2CC) Cache ID Register */\r
+  #define REG_L2CC_TYPR                    (0x00A00004U) /**< \brief (L2CC) Cache Type Register */\r
+  #define REG_L2CC_CR                      (0x00A00100U) /**< \brief (L2CC) Control Register */\r
+  #define REG_L2CC_ACR                     (0x00A00104U) /**< \brief (L2CC) Auxiliary Control Register */\r
+  #define REG_L2CC_TRCR                    (0x00A00108U) /**< \brief (L2CC) Tag RAM Control Register */\r
+  #define REG_L2CC_DRCR                    (0x00A0010CU) /**< \brief (L2CC) Data RAM Control Register */\r
+  #define REG_L2CC_ECR                     (0x00A00200U) /**< \brief (L2CC) Event Counter Control Register */\r
+  #define REG_L2CC_ECFGR1                  (0x00A00204U) /**< \brief (L2CC) Event Counter 1 Configuration Register */\r
+  #define REG_L2CC_ECFGR0                  (0x00A00208U) /**< \brief (L2CC) Event Counter 0 Configuration Register */\r
+  #define REG_L2CC_EVR1                    (0x00A0020CU) /**< \brief (L2CC) Event Counter 1 Value Register */\r
+  #define REG_L2CC_EVR0                    (0x00A00210U) /**< \brief (L2CC) Event Counter 0 Value Register */\r
+  #define REG_L2CC_IMR                     (0x00A00214U) /**< \brief (L2CC) Interrupt Mask Register */\r
+  #define REG_L2CC_MISR                    (0x00A00218U) /**< \brief (L2CC) Masked Interrupt Status Register */\r
+  #define REG_L2CC_RISR                    (0x00A0021CU) /**< \brief (L2CC) Raw Interrupt Status Register */\r
+  #define REG_L2CC_ICR                     (0x00A00220U) /**< \brief (L2CC) Interrupt Clear Register */\r
+  #define REG_L2CC_CSR                     (0x00A00730U) /**< \brief (L2CC) Cache Synchronization Register */\r
+  #define REG_L2CC_IPALR                   (0x00A00770U) /**< \brief (L2CC) Invalidate Physical Address Line Register */\r
+  #define REG_L2CC_IWR                     (0x00A0077CU) /**< \brief (L2CC) Invalidate Way Register */\r
+  #define REG_L2CC_CPALR                   (0x00A007B0U) /**< \brief (L2CC) Clean Physical Address Line Register */\r
+  #define REG_L2CC_CIR                     (0x00A007B8U) /**< \brief (L2CC) Clean Index Register */\r
+  #define REG_L2CC_CWR                     (0x00A007BCU) /**< \brief (L2CC) Clean Way Register */\r
+  #define REG_L2CC_CIPALR                  (0x00A007F0U) /**< \brief (L2CC) Clean Invalidate Physical Address Line Register */\r
+  #define REG_L2CC_CIIR                    (0x00A007F8U) /**< \brief (L2CC) Clean Invalidate Index Register */\r
+  #define REG_L2CC_CIWR                    (0x00A007FCU) /**< \brief (L2CC) Clean Invalidate Way Register */\r
+  #define REG_L2CC_DLKR                    (0x00A00900U) /**< \brief (L2CC) Data Lockdown Register */\r
+  #define REG_L2CC_ILKR                    (0x00A00904U) /**< \brief (L2CC) Instruction Lockdown Register */\r
+  #define REG_L2CC_DCR                     (0x00A00F40U) /**< \brief (L2CC) Debug Control Register */\r
+  #define REG_L2CC_PCR                     (0x00A00F60U) /**< \brief (L2CC) Prefetch Control Register */\r
+  #define REG_L2CC_POWCR                   (0x00A00F80U) /**< \brief (L2CC) Power Control Register */\r
+#else\r
+  #define REG_L2CC_IDR    (*(__I  uint32_t*)0x00A00000U) /**< \brief (L2CC) Cache ID Register */\r
+  #define REG_L2CC_TYPR   (*(__I  uint32_t*)0x00A00004U) /**< \brief (L2CC) Cache Type Register */\r
+  #define REG_L2CC_CR     (*(__IO uint32_t*)0x00A00100U) /**< \brief (L2CC) Control Register */\r
+  #define REG_L2CC_ACR    (*(__IO uint32_t*)0x00A00104U) /**< \brief (L2CC) Auxiliary Control Register */\r
+  #define REG_L2CC_TRCR   (*(__IO uint32_t*)0x00A00108U) /**< \brief (L2CC) Tag RAM Control Register */\r
+  #define REG_L2CC_DRCR   (*(__IO uint32_t*)0x00A0010CU) /**< \brief (L2CC) Data RAM Control Register */\r
+  #define REG_L2CC_ECR    (*(__IO uint32_t*)0x00A00200U) /**< \brief (L2CC) Event Counter Control Register */\r
+  #define REG_L2CC_ECFGR1 (*(__IO uint32_t*)0x00A00204U) /**< \brief (L2CC) Event Counter 1 Configuration Register */\r
+  #define REG_L2CC_ECFGR0 (*(__IO uint32_t*)0x00A00208U) /**< \brief (L2CC) Event Counter 0 Configuration Register */\r
+  #define REG_L2CC_EVR1   (*(__IO uint32_t*)0x00A0020CU) /**< \brief (L2CC) Event Counter 1 Value Register */\r
+  #define REG_L2CC_EVR0   (*(__IO uint32_t*)0x00A00210U) /**< \brief (L2CC) Event Counter 0 Value Register */\r
+  #define REG_L2CC_IMR    (*(__IO uint32_t*)0x00A00214U) /**< \brief (L2CC) Interrupt Mask Register */\r
+  #define REG_L2CC_MISR   (*(__I  uint32_t*)0x00A00218U) /**< \brief (L2CC) Masked Interrupt Status Register */\r
+  #define REG_L2CC_RISR   (*(__I  uint32_t*)0x00A0021CU) /**< \brief (L2CC) Raw Interrupt Status Register */\r
+  #define REG_L2CC_ICR    (*(__IO uint32_t*)0x00A00220U) /**< \brief (L2CC) Interrupt Clear Register */\r
+  #define REG_L2CC_CSR    (*(__IO uint32_t*)0x00A00730U) /**< \brief (L2CC) Cache Synchronization Register */\r
+  #define REG_L2CC_IPALR  (*(__IO uint32_t*)0x00A00770U) /**< \brief (L2CC) Invalidate Physical Address Line Register */\r
+  #define REG_L2CC_IWR    (*(__IO uint32_t*)0x00A0077CU) /**< \brief (L2CC) Invalidate Way Register */\r
+  #define REG_L2CC_CPALR  (*(__IO uint32_t*)0x00A007B0U) /**< \brief (L2CC) Clean Physical Address Line Register */\r
+  #define REG_L2CC_CIR    (*(__IO uint32_t*)0x00A007B8U) /**< \brief (L2CC) Clean Index Register */\r
+  #define REG_L2CC_CWR    (*(__IO uint32_t*)0x00A007BCU) /**< \brief (L2CC) Clean Way Register */\r
+  #define REG_L2CC_CIPALR (*(__IO uint32_t*)0x00A007F0U) /**< \brief (L2CC) Clean Invalidate Physical Address Line Register */\r
+  #define REG_L2CC_CIIR   (*(__IO uint32_t*)0x00A007F8U) /**< \brief (L2CC) Clean Invalidate Index Register */\r
+  #define REG_L2CC_CIWR   (*(__IO uint32_t*)0x00A007FCU) /**< \brief (L2CC) Clean Invalidate Way Register */\r
+  #define REG_L2CC_DLKR   (*(__IO uint32_t*)0x00A00900U) /**< \brief (L2CC) Data Lockdown Register */\r
+  #define REG_L2CC_ILKR   (*(__IO uint32_t*)0x00A00904U) /**< \brief (L2CC) Instruction Lockdown Register */\r
+  #define REG_L2CC_DCR    (*(__IO uint32_t*)0x00A00F40U) /**< \brief (L2CC) Debug Control Register */\r
+  #define REG_L2CC_PCR    (*(__IO uint32_t*)0x00A00F60U) /**< \brief (L2CC) Prefetch Control Register */\r
+  #define REG_L2CC_POWCR  (*(__IO uint32_t*)0x00A00F80U) /**< \brief (L2CC) Power Control Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for LCDC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_LCDC_LCDCFG0                   (0xF0000000U) /**< \brief (LCDC) LCD Controller Configuration Register 0 */\r
+  #define REG_LCDC_LCDCFG1                   (0xF0000004U) /**< \brief (LCDC) LCD Controller Configuration Register 1 */\r
+  #define REG_LCDC_LCDCFG2                   (0xF0000008U) /**< \brief (LCDC) LCD Controller Configuration Register 2 */\r
+  #define REG_LCDC_LCDCFG3                   (0xF000000CU) /**< \brief (LCDC) LCD Controller Configuration Register 3 */\r
+  #define REG_LCDC_LCDCFG4                   (0xF0000010U) /**< \brief (LCDC) LCD Controller Configuration Register 4 */\r
+  #define REG_LCDC_LCDCFG5                   (0xF0000014U) /**< \brief (LCDC) LCD Controller Configuration Register 5 */\r
+  #define REG_LCDC_LCDCFG6                   (0xF0000018U) /**< \brief (LCDC) LCD Controller Configuration Register 6 */\r
+  #define REG_LCDC_LCDEN                     (0xF0000020U) /**< \brief (LCDC) LCD Controller Enable Register */\r
+  #define REG_LCDC_LCDDIS                    (0xF0000024U) /**< \brief (LCDC) LCD Controller Disable Register */\r
+  #define REG_LCDC_LCDSR                     (0xF0000028U) /**< \brief (LCDC) LCD Controller Status Register */\r
+  #define REG_LCDC_LCDIER                    (0xF000002CU) /**< \brief (LCDC) LCD Controller Interrupt Enable Register */\r
+  #define REG_LCDC_LCDIDR                    (0xF0000030U) /**< \brief (LCDC) LCD Controller Interrupt Disable Register */\r
+  #define REG_LCDC_LCDIMR                    (0xF0000034U) /**< \brief (LCDC) LCD Controller Interrupt Mask Register */\r
+  #define REG_LCDC_LCDISR                    (0xF0000038U) /**< \brief (LCDC) LCD Controller Interrupt Status Register */\r
+  #define REG_LCDC_BASECHER                  (0xF0000040U) /**< \brief (LCDC) Base Layer Channel Enable Register */\r
+  #define REG_LCDC_BASECHDR                  (0xF0000044U) /**< \brief (LCDC) Base Layer Channel Disable Register */\r
+  #define REG_LCDC_BASECHSR                  (0xF0000048U) /**< \brief (LCDC) Base Layer Channel Status Register */\r
+  #define REG_LCDC_BASEIER                   (0xF000004CU) /**< \brief (LCDC) Base Layer Interrupt Enable Register */\r
+  #define REG_LCDC_BASEIDR                   (0xF0000050U) /**< \brief (LCDC) Base Layer Interrupt Disabled Register */\r
+  #define REG_LCDC_BASEIMR                   (0xF0000054U) /**< \brief (LCDC) Base Layer Interrupt Mask Register */\r
+  #define REG_LCDC_BASEISR                   (0xF0000058U) /**< \brief (LCDC) Base Layer Interrupt status Register */\r
+  #define REG_LCDC_BASEHEAD                  (0xF000005CU) /**< \brief (LCDC) Base DMA Head Register */\r
+  #define REG_LCDC_BASEADDR                  (0xF0000060U) /**< \brief (LCDC) Base DMA Address Register */\r
+  #define REG_LCDC_BASECTRL                  (0xF0000064U) /**< \brief (LCDC) Base DMA Control Register */\r
+  #define REG_LCDC_BASENEXT                  (0xF0000068U) /**< \brief (LCDC) Base DMA Next Register */\r
+  #define REG_LCDC_BASECFG0                  (0xF000006CU) /**< \brief (LCDC) Base Configuration register 0 */\r
+  #define REG_LCDC_BASECFG1                  (0xF0000070U) /**< \brief (LCDC) Base Configuration register 1 */\r
+  #define REG_LCDC_BASECFG2                  (0xF0000074U) /**< \brief (LCDC) Base Configuration register 2 */\r
+  #define REG_LCDC_BASECFG3                  (0xF0000078U) /**< \brief (LCDC) Base Configuration register 3 */\r
+  #define REG_LCDC_BASECFG4                  (0xF000007CU) /**< \brief (LCDC) Base Configuration register 4 */\r
+  #define REG_LCDC_BASECFG5                  (0xF0000080U) /**< \brief (LCDC) Base Configuration register 5 */\r
+  #define REG_LCDC_BASECFG6                  (0xF0000084U) /**< \brief (LCDC) Base Configuration register 6 */\r
+  #define REG_LCDC_OVRCHER1                  (0xF0000140U) /**< \brief (LCDC) Overlay 1 Channel Enable Register */\r
+  #define REG_LCDC_OVRCHDR1                  (0xF0000144U) /**< \brief (LCDC) Overlay 1 Channel Disable Register */\r
+  #define REG_LCDC_OVRCHSR1                  (0xF0000148U) /**< \brief (LCDC) Overlay 1 Channel Status Register */\r
+  #define REG_LCDC_OVRIER1                   (0xF000014CU) /**< \brief (LCDC) Overlay 1 Interrupt Enable Register */\r
+  #define REG_LCDC_OVRIDR1                   (0xF0000150U) /**< \brief (LCDC) Overlay 1 Interrupt Disable Register */\r
+  #define REG_LCDC_OVRIMR1                   (0xF0000154U) /**< \brief (LCDC) Overlay 1 Interrupt Mask Register */\r
+  #define REG_LCDC_OVRISR1                   (0xF0000158U) /**< \brief (LCDC) Overlay 1 Interrupt Status Register */\r
+  #define REG_LCDC_OVRHEAD1                  (0xF000015CU) /**< \brief (LCDC) Overlay 1 DMA Head Register */\r
+  #define REG_LCDC_OVRADDR1                  (0xF0000160U) /**< \brief (LCDC) Overlay 1 DMA Address Register */\r
+  #define REG_LCDC_OVRCTRL1                  (0xF0000164U) /**< \brief (LCDC) Overlay 1 DMA Control Register */\r
+  #define REG_LCDC_OVRNEXT1                  (0xF0000168U) /**< \brief (LCDC) Overlay 1 DMA Next Register */\r
+  #define REG_LCDC_OVR1CFG0                  (0xF000016CU) /**< \brief (LCDC) Overlay 1 Configuration 0 Register */\r
+  #define REG_LCDC_OVR1CFG1                  (0xF0000170U) /**< \brief (LCDC) Overlay 1 Configuration 1 Register */\r
+  #define REG_LCDC_OVR1CFG2                  (0xF0000174U) /**< \brief (LCDC) Overlay 1 Configuration 2 Register */\r
+  #define REG_LCDC_OVR1CFG3                  (0xF0000178U) /**< \brief (LCDC) Overlay 1 Configuration 3 Register */\r
+  #define REG_LCDC_OVR1CFG4                  (0xF000017CU) /**< \brief (LCDC) Overlay 1 Configuration 4 Register */\r
+  #define REG_LCDC_OVR1CFG5                  (0xF0000180U) /**< \brief (LCDC) Overlay 1 Configuration 5 Register */\r
+  #define REG_LCDC_OVR1CFG6                  (0xF0000184U) /**< \brief (LCDC) Overlay 1 Configuration 6 Register */\r
+  #define REG_LCDC_OVR1CFG7                  (0xF0000188U) /**< \brief (LCDC) Overlay 1 Configuration 7 Register */\r
+  #define REG_LCDC_OVR1CFG8                  (0xF000018CU) /**< \brief (LCDC) Overlay 1 Configuration 8Register */\r
+  #define REG_LCDC_OVR1CFG9                  (0xF0000190U) /**< \brief (LCDC) Overlay 1 Configuration 9 Register */\r
+  #define REG_LCDC_OVRCHER2                  (0xF0000240U) /**< \brief (LCDC) Overlay 2 Channel Enable Register */\r
+  #define REG_LCDC_OVRCHDR2                  (0xF0000244U) /**< \brief (LCDC) Overlay 2 Channel Disable Register */\r
+  #define REG_LCDC_OVRCHSR2                  (0xF0000248U) /**< \brief (LCDC) Overlay 2 Channel Status Register */\r
+  #define REG_LCDC_OVRIER2                   (0xF000024CU) /**< \brief (LCDC) Overlay 2 Interrupt Enable Register */\r
+  #define REG_LCDC_OVRIDR2                   (0xF0000250U) /**< \brief (LCDC) Overlay 2 Interrupt Disable Register */\r
+  #define REG_LCDC_OVRIMR2                   (0xF0000254U) /**< \brief (LCDC) Overlay 2 Interrupt Mask Register */\r
+  #define REG_LCDC_OVRISR2                   (0xF0000258U) /**< \brief (LCDC) Overlay 2 Interrupt status Register */\r
+  #define REG_LCDC_OVRHEAD2                  (0xF000025CU) /**< \brief (LCDC) Overlay 2 DMA Head Register */\r
+  #define REG_LCDC_OVRADDR2                  (0xF0000260U) /**< \brief (LCDC) Overlay 2 DMA Address Register */\r
+  #define REG_LCDC_OVRCTRL2                  (0xF0000264U) /**< \brief (LCDC) Overlay 2 DMA Control Register */\r
+  #define REG_LCDC_OVRNEXT2                  (0xF0000268U) /**< \brief (LCDC) Overlay 2 DMA Next Register */\r
+  #define REG_LCDC_OVR2CFG0                  (0xF000026CU) /**< \brief (LCDC) Overlay 2 Configuration 0 Register */\r
+  #define REG_LCDC_OVR2CFG1                  (0xF0000270U) /**< \brief (LCDC) Overlay 2 Configuration 1 Register */\r
+  #define REG_LCDC_OVR2CFG2                  (0xF0000274U) /**< \brief (LCDC) Overlay 2 Configuration 2 Register */\r
+  #define REG_LCDC_OVR2CFG3                  (0xF0000278U) /**< \brief (LCDC) Overlay 2 Configuration 3 Register */\r
+  #define REG_LCDC_OVR2CFG4                  (0xF000027CU) /**< \brief (LCDC) Overlay 2 Configuration 4 Register */\r
+  #define REG_LCDC_OVR2CFG5                  (0xF0000280U) /**< \brief (LCDC) Overlay 2 Configuration 5 Register */\r
+  #define REG_LCDC_OVR2CFG6                  (0xF0000284U) /**< \brief (LCDC) Overlay 2 Configuration 6 Register */\r
+  #define REG_LCDC_OVR2CFG7                  (0xF0000288U) /**< \brief (LCDC) Overlay 2 Configuration 7 Register */\r
+  #define REG_LCDC_OVR2CFG8                  (0xF000028CU) /**< \brief (LCDC) Overlay 2 Configuration 8 Register */\r
+  #define REG_LCDC_OVR2CFG9                  (0xF0000290U) /**< \brief (LCDC) Overlay 2 Configuration 9 Register */\r
+  #define REG_LCDC_HEOCHER                   (0xF0000340U) /**< \brief (LCDC) High-End Overlay Channel Enable Register */\r
+  #define REG_LCDC_HEOCHDR                   (0xF0000344U) /**< \brief (LCDC) High-End Overlay Channel Disable Register */\r
+  #define REG_LCDC_HEOCHSR                   (0xF0000348U) /**< \brief (LCDC) High-End Overlay Channel Status Register */\r
+  #define REG_LCDC_HEOIER                    (0xF000034CU) /**< \brief (LCDC) High-End Overlay Interrupt Enable Register */\r
+  #define REG_LCDC_HEOIDR                    (0xF0000350U) /**< \brief (LCDC) High-End Overlay Interrupt Disable Register */\r
+  #define REG_LCDC_HEOIMR                    (0xF0000354U) /**< \brief (LCDC) High-End Overlay Interrupt Mask Register */\r
+  #define REG_LCDC_HEOISR                    (0xF0000358U) /**< \brief (LCDC) High-End Overlay Interrupt Status Register */\r
+  #define REG_LCDC_HEOHEAD                   (0xF000035CU) /**< \brief (LCDC) High-End Overlay DMA Head Register */\r
+  #define REG_LCDC_HEOADDR                   (0xF0000360U) /**< \brief (LCDC) High-End Overlay DMA Address Register */\r
+  #define REG_LCDC_HEOCTRL                   (0xF0000364U) /**< \brief (LCDC) High-End Overlay DMA Control Register */\r
+  #define REG_LCDC_HEONEXT                   (0xF0000368U) /**< \brief (LCDC) High-End Overlay DMA Next Register */\r
+  #define REG_LCDC_HEOUHEAD                  (0xF000036CU) /**< \brief (LCDC) High-End Overlay U DMA Head Register */\r
+  #define REG_LCDC_HEOUADDR                  (0xF0000370U) /**< \brief (LCDC) High-End Overlay U DMA Address Register */\r
+  #define REG_LCDC_HEOUCTRL                  (0xF0000374U) /**< \brief (LCDC) High-End Overlay U DMA control Register */\r
+  #define REG_LCDC_HEOUNEXT                  (0xF0000378U) /**< \brief (LCDC) High-End Overlay U DMA Next Register */\r
+  #define REG_LCDC_HEOVHEAD                  (0xF000037CU) /**< \brief (LCDC) High-End Overlay V DMA Head Register */\r
+  #define REG_LCDC_HEOVADDR                  (0xF0000380U) /**< \brief (LCDC) High-End Overlay V DMA Address Register */\r
+  #define REG_LCDC_HEOVCTRL                  (0xF0000384U) /**< \brief (LCDC) High-End Overlay V DMA control Register */\r
+  #define REG_LCDC_HEOVNEXT                  (0xF0000388U) /**< \brief (LCDC) High-End Overlay VDMA Next Register */\r
+  #define REG_LCDC_HEOCFG0                   (0xF000038CU) /**< \brief (LCDC) High-End Overlay Configuration Register 0 */\r
+  #define REG_LCDC_HEOCFG1                   (0xF0000390U) /**< \brief (LCDC) High-End Overlay Configuration Register 1 */\r
+  #define REG_LCDC_HEOCFG2                   (0xF0000394U) /**< \brief (LCDC) High-End Overlay Configuration Register 2 */\r
+  #define REG_LCDC_HEOCFG3                   (0xF0000398U) /**< \brief (LCDC) High-End Overlay Configuration Register 3 */\r
+  #define REG_LCDC_HEOCFG4                   (0xF000039CU) /**< \brief (LCDC) High-End Overlay Configuration Register 4 */\r
+  #define REG_LCDC_HEOCFG5                   (0xF00003A0U) /**< \brief (LCDC) High-End Overlay Configuration Register 5 */\r
+  #define REG_LCDC_HEOCFG6                   (0xF00003A4U) /**< \brief (LCDC) High-End Overlay Configuration Register 6 */\r
+  #define REG_LCDC_HEOCFG7                   (0xF00003A8U) /**< \brief (LCDC) High-End Overlay Configuration Register 7 */\r
+  #define REG_LCDC_HEOCFG8                   (0xF00003ACU) /**< \brief (LCDC) High-End Overlay Configuration Register 8 */\r
+  #define REG_LCDC_HEOCFG9                   (0xF00003B0U) /**< \brief (LCDC) High-End Overlay Configuration Register 9 */\r
+  #define REG_LCDC_HEOCFG10                  (0xF00003B4U) /**< \brief (LCDC) High-End Overlay Configuration Register 10 */\r
+  #define REG_LCDC_HEOCFG11                  (0xF00003B8U) /**< \brief (LCDC) High-End Overlay Configuration Register 11 */\r
+  #define REG_LCDC_HEOCFG12                  (0xF00003BCU) /**< \brief (LCDC) High-End Overlay Configuration Register 12 */\r
+  #define REG_LCDC_HEOCFG13                  (0xF00003C0U) /**< \brief (LCDC) High-End Overlay Configuration Register 13 */\r
+  #define REG_LCDC_HEOCFG14                  (0xF00003C4U) /**< \brief (LCDC) High-End Overlay Configuration Register 14 */\r
+  #define REG_LCDC_HEOCFG15                  (0xF00003C8U) /**< \brief (LCDC) High-End Overlay Configuration Register 15 */\r
+  #define REG_LCDC_HEOCFG16                  (0xF00003CCU) /**< \brief (LCDC) High-End Overlay Configuration Register 16 */\r
+  #define REG_LCDC_HEOCFG17                  (0xF00003D0U) /**< \brief (LCDC) High-End Overlay Configuration Register 17 */\r
+  #define REG_LCDC_HEOCFG18                  (0xF00003D4U) /**< \brief (LCDC) High-End Overlay Configuration Register 18 */\r
+  #define REG_LCDC_HEOCFG19                  (0xF00003D8U) /**< \brief (LCDC) High-End Overlay Configuration Register 19 */\r
+  #define REG_LCDC_HEOCFG20                  (0xF00003DCU) /**< \brief (LCDC) High-End Overlay Configuration Register 20 */\r
+  #define REG_LCDC_HEOCFG21                  (0xF00003E0U) /**< \brief (LCDC) High-End Overlay Configuration Register 21 */\r
+  #define REG_LCDC_HEOCFG22                  (0xF00003E4U) /**< \brief (LCDC) High-End Overlay Configuration Register 22 */\r
+  #define REG_LCDC_HEOCFG23                  (0xF00003E8U) /**< \brief (LCDC) High-End Overlay Configuration Register 23 */\r
+  #define REG_LCDC_HEOCFG24                  (0xF00003ECU) /**< \brief (LCDC) High-End Overlay Configuration Register 24 */\r
+  #define REG_LCDC_HEOCFG25                  (0xF00003F0U) /**< \brief (LCDC) High-End Overlay Configuration Register 25 */\r
+  #define REG_LCDC_HEOCFG26                  (0xF00003F4U) /**< \brief (LCDC) High-End Overlay Configuration Register 26 */\r
+  #define REG_LCDC_HEOCFG27                  (0xF00003F8U) /**< \brief (LCDC) High-End Overlay Configuration Register 27 */\r
+  #define REG_LCDC_HEOCFG28                  (0xF00003FCU) /**< \brief (LCDC) High-End Overlay Configuration Register 28 */\r
+  #define REG_LCDC_HEOCFG29                  (0xF0000400U) /**< \brief (LCDC) High-End Overlay Configuration Register 29 */\r
+  #define REG_LCDC_HEOCFG30                  (0xF0000404U) /**< \brief (LCDC) High-End Overlay Configuration Register 30 */\r
+  #define REG_LCDC_HEOCFG31                  (0xF0000408U) /**< \brief (LCDC) High-End Overlay Configuration Register 31 */\r
+  #define REG_LCDC_HEOCFG32                  (0xF000040CU) /**< \brief (LCDC) High-End Overlay Configuration Register 32 */\r
+  #define REG_LCDC_HEOCFG33                  (0xF0000410U) /**< \brief (LCDC) High-End Overlay Configuration Register 33 */\r
+  #define REG_LCDC_HEOCFG34                  (0xF0000414U) /**< \brief (LCDC) High-End Overlay Configuration Register 34 */\r
+  #define REG_LCDC_HEOCFG35                  (0xF0000418U) /**< \brief (LCDC) High-End Overlay Configuration Register 35 */\r
+  #define REG_LCDC_HEOCFG36                  (0xF000041CU) /**< \brief (LCDC) High-End Overlay Configuration Register 36 */\r
+  #define REG_LCDC_HEOCFG37                  (0xF0000420U) /**< \brief (LCDC) High-End Overlay Configuration Register 37 */\r
+  #define REG_LCDC_HEOCFG38                  (0xF0000424U) /**< \brief (LCDC) High-End Overlay Configuration Register 38 */\r
+  #define REG_LCDC_HEOCFG39                  (0xF0000428U) /**< \brief (LCDC) High-End Overlay Configuration Register 39 */\r
+  #define REG_LCDC_HEOCFG40                  (0xF000042CU) /**< \brief (LCDC) High-End Overlay Configuration Register 40 */\r
+  #define REG_LCDC_HEOCFG41                  (0xF0000430U) /**< \brief (LCDC) High-End Overlay Configuration Register 41 */\r
+  #define REG_LCDC_BASECLUT                  (0xF0000600U) /**< \brief (LCDC) Base CLUT Register */\r
+  #define REG_LCDC_OVR1CLUT                  (0xF0000A00U) /**< \brief (LCDC) Overlay 1 CLUT Register */\r
+  #define REG_LCDC_OVR2CLUT                  (0xF0000E00U) /**< \brief (LCDC) Overlay 2 CLUT Register */\r
+  #define REG_LCDC_HEOCLUT                   (0xF0001200U) /**< \brief (LCDC) High End Overlay CLUT Register */\r
+#else\r
+  #define REG_LCDC_LCDCFG0  (*(__IO uint32_t*)0xF0000000U) /**< \brief (LCDC) LCD Controller Configuration Register 0 */\r
+  #define REG_LCDC_LCDCFG1  (*(__IO uint32_t*)0xF0000004U) /**< \brief (LCDC) LCD Controller Configuration Register 1 */\r
+  #define REG_LCDC_LCDCFG2  (*(__IO uint32_t*)0xF0000008U) /**< \brief (LCDC) LCD Controller Configuration Register 2 */\r
+  #define REG_LCDC_LCDCFG3  (*(__IO uint32_t*)0xF000000CU) /**< \brief (LCDC) LCD Controller Configuration Register 3 */\r
+  #define REG_LCDC_LCDCFG4  (*(__IO uint32_t*)0xF0000010U) /**< \brief (LCDC) LCD Controller Configuration Register 4 */\r
+  #define REG_LCDC_LCDCFG5  (*(__IO uint32_t*)0xF0000014U) /**< \brief (LCDC) LCD Controller Configuration Register 5 */\r
+  #define REG_LCDC_LCDCFG6  (*(__IO uint32_t*)0xF0000018U) /**< \brief (LCDC) LCD Controller Configuration Register 6 */\r
+  #define REG_LCDC_LCDEN    (*(__O  uint32_t*)0xF0000020U) /**< \brief (LCDC) LCD Controller Enable Register */\r
+  #define REG_LCDC_LCDDIS   (*(__O  uint32_t*)0xF0000024U) /**< \brief (LCDC) LCD Controller Disable Register */\r
+  #define REG_LCDC_LCDSR    (*(__I  uint32_t*)0xF0000028U) /**< \brief (LCDC) LCD Controller Status Register */\r
+  #define REG_LCDC_LCDIER   (*(__O  uint32_t*)0xF000002CU) /**< \brief (LCDC) LCD Controller Interrupt Enable Register */\r
+  #define REG_LCDC_LCDIDR   (*(__O  uint32_t*)0xF0000030U) /**< \brief (LCDC) LCD Controller Interrupt Disable Register */\r
+  #define REG_LCDC_LCDIMR   (*(__I  uint32_t*)0xF0000034U) /**< \brief (LCDC) LCD Controller Interrupt Mask Register */\r
+  #define REG_LCDC_LCDISR   (*(__I  uint32_t*)0xF0000038U) /**< \brief (LCDC) LCD Controller Interrupt Status Register */\r
+  #define REG_LCDC_BASECHER (*(__O  uint32_t*)0xF0000040U) /**< \brief (LCDC) Base Layer Channel Enable Register */\r
+  #define REG_LCDC_BASECHDR (*(__O  uint32_t*)0xF0000044U) /**< \brief (LCDC) Base Layer Channel Disable Register */\r
+  #define REG_LCDC_BASECHSR (*(__I  uint32_t*)0xF0000048U) /**< \brief (LCDC) Base Layer Channel Status Register */\r
+  #define REG_LCDC_BASEIER  (*(__O  uint32_t*)0xF000004CU) /**< \brief (LCDC) Base Layer Interrupt Enable Register */\r
+  #define REG_LCDC_BASEIDR  (*(__O  uint32_t*)0xF0000050U) /**< \brief (LCDC) Base Layer Interrupt Disabled Register */\r
+  #define REG_LCDC_BASEIMR  (*(__I  uint32_t*)0xF0000054U) /**< \brief (LCDC) Base Layer Interrupt Mask Register */\r
+  #define REG_LCDC_BASEISR  (*(__I  uint32_t*)0xF0000058U) /**< \brief (LCDC) Base Layer Interrupt status Register */\r
+  #define REG_LCDC_BASEHEAD (*(__IO uint32_t*)0xF000005CU) /**< \brief (LCDC) Base DMA Head Register */\r
+  #define REG_LCDC_BASEADDR (*(__IO uint32_t*)0xF0000060U) /**< \brief (LCDC) Base DMA Address Register */\r
+  #define REG_LCDC_BASECTRL (*(__IO uint32_t*)0xF0000064U) /**< \brief (LCDC) Base DMA Control Register */\r
+  #define REG_LCDC_BASENEXT (*(__IO uint32_t*)0xF0000068U) /**< \brief (LCDC) Base DMA Next Register */\r
+  #define REG_LCDC_BASECFG0 (*(__IO uint32_t*)0xF000006CU) /**< \brief (LCDC) Base Configuration register 0 */\r
+  #define REG_LCDC_BASECFG1 (*(__IO uint32_t*)0xF0000070U) /**< \brief (LCDC) Base Configuration register 1 */\r
+  #define REG_LCDC_BASECFG2 (*(__IO uint32_t*)0xF0000074U) /**< \brief (LCDC) Base Configuration register 2 */\r
+  #define REG_LCDC_BASECFG3 (*(__IO uint32_t*)0xF0000078U) /**< \brief (LCDC) Base Configuration register 3 */\r
+  #define REG_LCDC_BASECFG4 (*(__IO uint32_t*)0xF000007CU) /**< \brief (LCDC) Base Configuration register 4 */\r
+  #define REG_LCDC_BASECFG5 (*(__IO uint32_t*)0xF0000080U) /**< \brief (LCDC) Base Configuration register 5 */\r
+  #define REG_LCDC_BASECFG6 (*(__IO uint32_t*)0xF0000084U) /**< \brief (LCDC) Base Configuration register 6 */\r
+  #define REG_LCDC_OVRCHER1 (*(__O  uint32_t*)0xF0000140U) /**< \brief (LCDC) Overlay 1 Channel Enable Register */\r
+  #define REG_LCDC_OVRCHDR1 (*(__O  uint32_t*)0xF0000144U) /**< \brief (LCDC) Overlay 1 Channel Disable Register */\r
+  #define REG_LCDC_OVRCHSR1 (*(__I  uint32_t*)0xF0000148U) /**< \brief (LCDC) Overlay 1 Channel Status Register */\r
+  #define REG_LCDC_OVRIER1  (*(__O  uint32_t*)0xF000014CU) /**< \brief (LCDC) Overlay 1 Interrupt Enable Register */\r
+  #define REG_LCDC_OVRIDR1  (*(__O  uint32_t*)0xF0000150U) /**< \brief (LCDC) Overlay 1 Interrupt Disable Register */\r
+  #define REG_LCDC_OVRIMR1  (*(__I  uint32_t*)0xF0000154U) /**< \brief (LCDC) Overlay 1 Interrupt Mask Register */\r
+  #define REG_LCDC_OVRISR1  (*(__I  uint32_t*)0xF0000158U) /**< \brief (LCDC) Overlay 1 Interrupt Status Register */\r
+  #define REG_LCDC_OVRHEAD1 (*(__IO uint32_t*)0xF000015CU) /**< \brief (LCDC) Overlay 1 DMA Head Register */\r
+  #define REG_LCDC_OVRADDR1 (*(__IO uint32_t*)0xF0000160U) /**< \brief (LCDC) Overlay 1 DMA Address Register */\r
+  #define REG_LCDC_OVRCTRL1 (*(__IO uint32_t*)0xF0000164U) /**< \brief (LCDC) Overlay 1 DMA Control Register */\r
+  #define REG_LCDC_OVRNEXT1 (*(__IO uint32_t*)0xF0000168U) /**< \brief (LCDC) Overlay 1 DMA Next Register */\r
+  #define REG_LCDC_OVR1CFG0 (*(__IO uint32_t*)0xF000016CU) /**< \brief (LCDC) Overlay 1 Configuration 0 Register */\r
+  #define REG_LCDC_OVR1CFG1 (*(__IO uint32_t*)0xF0000170U) /**< \brief (LCDC) Overlay 1 Configuration 1 Register */\r
+  #define REG_LCDC_OVR1CFG2 (*(__IO uint32_t*)0xF0000174U) /**< \brief (LCDC) Overlay 1 Configuration 2 Register */\r
+  #define REG_LCDC_OVR1CFG3 (*(__IO uint32_t*)0xF0000178U) /**< \brief (LCDC) Overlay 1 Configuration 3 Register */\r
+  #define REG_LCDC_OVR1CFG4 (*(__IO uint32_t*)0xF000017CU) /**< \brief (LCDC) Overlay 1 Configuration 4 Register */\r
+  #define REG_LCDC_OVR1CFG5 (*(__IO uint32_t*)0xF0000180U) /**< \brief (LCDC) Overlay 1 Configuration 5 Register */\r
+  #define REG_LCDC_OVR1CFG6 (*(__IO uint32_t*)0xF0000184U) /**< \brief (LCDC) Overlay 1 Configuration 6 Register */\r
+  #define REG_LCDC_OVR1CFG7 (*(__IO uint32_t*)0xF0000188U) /**< \brief (LCDC) Overlay 1 Configuration 7 Register */\r
+  #define REG_LCDC_OVR1CFG8 (*(__IO uint32_t*)0xF000018CU) /**< \brief (LCDC) Overlay 1 Configuration 8Register */\r
+  #define REG_LCDC_OVR1CFG9 (*(__IO uint32_t*)0xF0000190U) /**< \brief (LCDC) Overlay 1 Configuration 9 Register */\r
+  #define REG_LCDC_OVRCHER2 (*(__O  uint32_t*)0xF0000240U) /**< \brief (LCDC) Overlay 2 Channel Enable Register */\r
+  #define REG_LCDC_OVRCHDR2 (*(__O  uint32_t*)0xF0000244U) /**< \brief (LCDC) Overlay 2 Channel Disable Register */\r
+  #define REG_LCDC_OVRCHSR2 (*(__I  uint32_t*)0xF0000248U) /**< \brief (LCDC) Overlay 2 Channel Status Register */\r
+  #define REG_LCDC_OVRIER2  (*(__O  uint32_t*)0xF000024CU) /**< \brief (LCDC) Overlay 2 Interrupt Enable Register */\r
+  #define REG_LCDC_OVRIDR2  (*(__O  uint32_t*)0xF0000250U) /**< \brief (LCDC) Overlay 2 Interrupt Disable Register */\r
+  #define REG_LCDC_OVRIMR2  (*(__I  uint32_t*)0xF0000254U) /**< \brief (LCDC) Overlay 2 Interrupt Mask Register */\r
+  #define REG_LCDC_OVRISR2  (*(__I  uint32_t*)0xF0000258U) /**< \brief (LCDC) Overlay 2 Interrupt status Register */\r
+  #define REG_LCDC_OVRHEAD2 (*(__IO uint32_t*)0xF000025CU) /**< \brief (LCDC) Overlay 2 DMA Head Register */\r
+  #define REG_LCDC_OVRADDR2 (*(__IO uint32_t*)0xF0000260U) /**< \brief (LCDC) Overlay 2 DMA Address Register */\r
+  #define REG_LCDC_OVRCTRL2 (*(__IO uint32_t*)0xF0000264U) /**< \brief (LCDC) Overlay 2 DMA Control Register */\r
+  #define REG_LCDC_OVRNEXT2 (*(__IO uint32_t*)0xF0000268U) /**< \brief (LCDC) Overlay 2 DMA Next Register */\r
+  #define REG_LCDC_OVR2CFG0 (*(__IO uint32_t*)0xF000026CU) /**< \brief (LCDC) Overlay 2 Configuration 0 Register */\r
+  #define REG_LCDC_OVR2CFG1 (*(__IO uint32_t*)0xF0000270U) /**< \brief (LCDC) Overlay 2 Configuration 1 Register */\r
+  #define REG_LCDC_OVR2CFG2 (*(__IO uint32_t*)0xF0000274U) /**< \brief (LCDC) Overlay 2 Configuration 2 Register */\r
+  #define REG_LCDC_OVR2CFG3 (*(__IO uint32_t*)0xF0000278U) /**< \brief (LCDC) Overlay 2 Configuration 3 Register */\r
+  #define REG_LCDC_OVR2CFG4 (*(__IO uint32_t*)0xF000027CU) /**< \brief (LCDC) Overlay 2 Configuration 4 Register */\r
+  #define REG_LCDC_OVR2CFG5 (*(__IO uint32_t*)0xF0000280U) /**< \brief (LCDC) Overlay 2 Configuration 5 Register */\r
+  #define REG_LCDC_OVR2CFG6 (*(__IO uint32_t*)0xF0000284U) /**< \brief (LCDC) Overlay 2 Configuration 6 Register */\r
+  #define REG_LCDC_OVR2CFG7 (*(__IO uint32_t*)0xF0000288U) /**< \brief (LCDC) Overlay 2 Configuration 7 Register */\r
+  #define REG_LCDC_OVR2CFG8 (*(__IO uint32_t*)0xF000028CU) /**< \brief (LCDC) Overlay 2 Configuration 8 Register */\r
+  #define REG_LCDC_OVR2CFG9 (*(__IO uint32_t*)0xF0000290U) /**< \brief (LCDC) Overlay 2 Configuration 9 Register */\r
+  #define REG_LCDC_HEOCHER  (*(__O  uint32_t*)0xF0000340U) /**< \brief (LCDC) High-End Overlay Channel Enable Register */\r
+  #define REG_LCDC_HEOCHDR  (*(__O  uint32_t*)0xF0000344U) /**< \brief (LCDC) High-End Overlay Channel Disable Register */\r
+  #define REG_LCDC_HEOCHSR  (*(__I  uint32_t*)0xF0000348U) /**< \brief (LCDC) High-End Overlay Channel Status Register */\r
+  #define REG_LCDC_HEOIER   (*(__O  uint32_t*)0xF000034CU) /**< \brief (LCDC) High-End Overlay Interrupt Enable Register */\r
+  #define REG_LCDC_HEOIDR   (*(__O  uint32_t*)0xF0000350U) /**< \brief (LCDC) High-End Overlay Interrupt Disable Register */\r
+  #define REG_LCDC_HEOIMR   (*(__I  uint32_t*)0xF0000354U) /**< \brief (LCDC) High-End Overlay Interrupt Mask Register */\r
+  #define REG_LCDC_HEOISR   (*(__I  uint32_t*)0xF0000358U) /**< \brief (LCDC) High-End Overlay Interrupt Status Register */\r
+  #define REG_LCDC_HEOHEAD  (*(__IO uint32_t*)0xF000035CU) /**< \brief (LCDC) High-End Overlay DMA Head Register */\r
+  #define REG_LCDC_HEOADDR  (*(__IO uint32_t*)0xF0000360U) /**< \brief (LCDC) High-End Overlay DMA Address Register */\r
+  #define REG_LCDC_HEOCTRL  (*(__IO uint32_t*)0xF0000364U) /**< \brief (LCDC) High-End Overlay DMA Control Register */\r
+  #define REG_LCDC_HEONEXT  (*(__IO uint32_t*)0xF0000368U) /**< \brief (LCDC) High-End Overlay DMA Next Register */\r
+  #define REG_LCDC_HEOUHEAD (*(__IO uint32_t*)0xF000036CU) /**< \brief (LCDC) High-End Overlay U DMA Head Register */\r
+  #define REG_LCDC_HEOUADDR (*(__IO uint32_t*)0xF0000370U) /**< \brief (LCDC) High-End Overlay U DMA Address Register */\r
+  #define REG_LCDC_HEOUCTRL (*(__IO uint32_t*)0xF0000374U) /**< \brief (LCDC) High-End Overlay U DMA control Register */\r
+  #define REG_LCDC_HEOUNEXT (*(__IO uint32_t*)0xF0000378U) /**< \brief (LCDC) High-End Overlay U DMA Next Register */\r
+  #define REG_LCDC_HEOVHEAD (*(__IO uint32_t*)0xF000037CU) /**< \brief (LCDC) High-End Overlay V DMA Head Register */\r
+  #define REG_LCDC_HEOVADDR (*(__IO uint32_t*)0xF0000380U) /**< \brief (LCDC) High-End Overlay V DMA Address Register */\r
+  #define REG_LCDC_HEOVCTRL (*(__IO uint32_t*)0xF0000384U) /**< \brief (LCDC) High-End Overlay V DMA control Register */\r
+  #define REG_LCDC_HEOVNEXT (*(__IO uint32_t*)0xF0000388U) /**< \brief (LCDC) High-End Overlay VDMA Next Register */\r
+  #define REG_LCDC_HEOCFG0  (*(__IO uint32_t*)0xF000038CU) /**< \brief (LCDC) High-End Overlay Configuration Register 0 */\r
+  #define REG_LCDC_HEOCFG1  (*(__IO uint32_t*)0xF0000390U) /**< \brief (LCDC) High-End Overlay Configuration Register 1 */\r
+  #define REG_LCDC_HEOCFG2  (*(__IO uint32_t*)0xF0000394U) /**< \brief (LCDC) High-End Overlay Configuration Register 2 */\r
+  #define REG_LCDC_HEOCFG3  (*(__IO uint32_t*)0xF0000398U) /**< \brief (LCDC) High-End Overlay Configuration Register 3 */\r
+  #define REG_LCDC_HEOCFG4  (*(__IO uint32_t*)0xF000039CU) /**< \brief (LCDC) High-End Overlay Configuration Register 4 */\r
+  #define REG_LCDC_HEOCFG5  (*(__IO uint32_t*)0xF00003A0U) /**< \brief (LCDC) High-End Overlay Configuration Register 5 */\r
+  #define REG_LCDC_HEOCFG6  (*(__IO uint32_t*)0xF00003A4U) /**< \brief (LCDC) High-End Overlay Configuration Register 6 */\r
+  #define REG_LCDC_HEOCFG7  (*(__IO uint32_t*)0xF00003A8U) /**< \brief (LCDC) High-End Overlay Configuration Register 7 */\r
+  #define REG_LCDC_HEOCFG8  (*(__IO uint32_t*)0xF00003ACU) /**< \brief (LCDC) High-End Overlay Configuration Register 8 */\r
+  #define REG_LCDC_HEOCFG9  (*(__IO uint32_t*)0xF00003B0U) /**< \brief (LCDC) High-End Overlay Configuration Register 9 */\r
+  #define REG_LCDC_HEOCFG10 (*(__IO uint32_t*)0xF00003B4U) /**< \brief (LCDC) High-End Overlay Configuration Register 10 */\r
+  #define REG_LCDC_HEOCFG11 (*(__IO uint32_t*)0xF00003B8U) /**< \brief (LCDC) High-End Overlay Configuration Register 11 */\r
+  #define REG_LCDC_HEOCFG12 (*(__IO uint32_t*)0xF00003BCU) /**< \brief (LCDC) High-End Overlay Configuration Register 12 */\r
+  #define REG_LCDC_HEOCFG13 (*(__IO uint32_t*)0xF00003C0U) /**< \brief (LCDC) High-End Overlay Configuration Register 13 */\r
+  #define REG_LCDC_HEOCFG14 (*(__IO uint32_t*)0xF00003C4U) /**< \brief (LCDC) High-End Overlay Configuration Register 14 */\r
+  #define REG_LCDC_HEOCFG15 (*(__IO uint32_t*)0xF00003C8U) /**< \brief (LCDC) High-End Overlay Configuration Register 15 */\r
+  #define REG_LCDC_HEOCFG16 (*(__IO uint32_t*)0xF00003CCU) /**< \brief (LCDC) High-End Overlay Configuration Register 16 */\r
+  #define REG_LCDC_HEOCFG17 (*(__IO uint32_t*)0xF00003D0U) /**< \brief (LCDC) High-End Overlay Configuration Register 17 */\r
+  #define REG_LCDC_HEOCFG18 (*(__IO uint32_t*)0xF00003D4U) /**< \brief (LCDC) High-End Overlay Configuration Register 18 */\r
+  #define REG_LCDC_HEOCFG19 (*(__IO uint32_t*)0xF00003D8U) /**< \brief (LCDC) High-End Overlay Configuration Register 19 */\r
+  #define REG_LCDC_HEOCFG20 (*(__IO uint32_t*)0xF00003DCU) /**< \brief (LCDC) High-End Overlay Configuration Register 20 */\r
+  #define REG_LCDC_HEOCFG21 (*(__IO uint32_t*)0xF00003E0U) /**< \brief (LCDC) High-End Overlay Configuration Register 21 */\r
+  #define REG_LCDC_HEOCFG22 (*(__IO uint32_t*)0xF00003E4U) /**< \brief (LCDC) High-End Overlay Configuration Register 22 */\r
+  #define REG_LCDC_HEOCFG23 (*(__IO uint32_t*)0xF00003E8U) /**< \brief (LCDC) High-End Overlay Configuration Register 23 */\r
+  #define REG_LCDC_HEOCFG24 (*(__IO uint32_t*)0xF00003ECU) /**< \brief (LCDC) High-End Overlay Configuration Register 24 */\r
+  #define REG_LCDC_HEOCFG25 (*(__IO uint32_t*)0xF00003F0U) /**< \brief (LCDC) High-End Overlay Configuration Register 25 */\r
+  #define REG_LCDC_HEOCFG26 (*(__IO uint32_t*)0xF00003F4U) /**< \brief (LCDC) High-End Overlay Configuration Register 26 */\r
+  #define REG_LCDC_HEOCFG27 (*(__IO uint32_t*)0xF00003F8U) /**< \brief (LCDC) High-End Overlay Configuration Register 27 */\r
+  #define REG_LCDC_HEOCFG28 (*(__IO uint32_t*)0xF00003FCU) /**< \brief (LCDC) High-End Overlay Configuration Register 28 */\r
+  #define REG_LCDC_HEOCFG29 (*(__IO uint32_t*)0xF0000400U) /**< \brief (LCDC) High-End Overlay Configuration Register 29 */\r
+  #define REG_LCDC_HEOCFG30 (*(__IO uint32_t*)0xF0000404U) /**< \brief (LCDC) High-End Overlay Configuration Register 30 */\r
+  #define REG_LCDC_HEOCFG31 (*(__IO uint32_t*)0xF0000408U) /**< \brief (LCDC) High-End Overlay Configuration Register 31 */\r
+  #define REG_LCDC_HEOCFG32 (*(__IO uint32_t*)0xF000040CU) /**< \brief (LCDC) High-End Overlay Configuration Register 32 */\r
+  #define REG_LCDC_HEOCFG33 (*(__IO uint32_t*)0xF0000410U) /**< \brief (LCDC) High-End Overlay Configuration Register 33 */\r
+  #define REG_LCDC_HEOCFG34 (*(__IO uint32_t*)0xF0000414U) /**< \brief (LCDC) High-End Overlay Configuration Register 34 */\r
+  #define REG_LCDC_HEOCFG35 (*(__IO uint32_t*)0xF0000418U) /**< \brief (LCDC) High-End Overlay Configuration Register 35 */\r
+  #define REG_LCDC_HEOCFG36 (*(__IO uint32_t*)0xF000041CU) /**< \brief (LCDC) High-End Overlay Configuration Register 36 */\r
+  #define REG_LCDC_HEOCFG37 (*(__IO uint32_t*)0xF0000420U) /**< \brief (LCDC) High-End Overlay Configuration Register 37 */\r
+  #define REG_LCDC_HEOCFG38 (*(__IO uint32_t*)0xF0000424U) /**< \brief (LCDC) High-End Overlay Configuration Register 38 */\r
+  #define REG_LCDC_HEOCFG39 (*(__IO uint32_t*)0xF0000428U) /**< \brief (LCDC) High-End Overlay Configuration Register 39 */\r
+  #define REG_LCDC_HEOCFG40 (*(__IO uint32_t*)0xF000042CU) /**< \brief (LCDC) High-End Overlay Configuration Register 40 */\r
+  #define REG_LCDC_HEOCFG41 (*(__IO uint32_t*)0xF0000430U) /**< \brief (LCDC) High-End Overlay Configuration Register 41 */\r
+  #define REG_LCDC_BASECLUT (*(__IO uint32_t*)0xF0000600U) /**< \brief (LCDC) Base CLUT Register */\r
+  #define REG_LCDC_OVR1CLUT (*(__IO uint32_t*)0xF0000A00U) /**< \brief (LCDC) Overlay 1 CLUT Register */\r
+  #define REG_LCDC_OVR2CLUT (*(__IO uint32_t*)0xF0000E00U) /**< \brief (LCDC) Overlay 2 CLUT Register */\r
+  #define REG_LCDC_HEOCLUT  (*(__IO uint32_t*)0xF0001200U) /**< \brief (LCDC) High End Overlay CLUT Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for AESB peripheral ========== */\r
+\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_AESB_CR                      (0xF0020000U) /**< \brief (AESB) Control Register */\r
+  #define REG_AESB_MR                      (0xF0020004U) /**< \brief (AESB) Mode Register */\r
+  #define REG_AESB_IER                     (0xF0020010U) /**< \brief (AESB) Interrupt Enable Register */\r
+  #define REG_AESB_IDR                     (0xF0020014U) /**< \brief (AESB) Interrupt Disable Register */\r
+  #define REG_AESB_IMR                     (0xF0020018U) /**< \brief (AESB) Interrupt Mask Register */\r
+  #define REG_AESB_ISR                     (0xF002001CU) /**< \brief (AESB) Interrupt Status Register */\r
+  #define REG_AESB_KEYWR                   (0xF0020020U) /**< \brief (AESB) Key Word Register */\r
+  #define REG_AESB_IDATAR                  (0xF0020040U) /**< \brief (AESB) Input Data Register */\r
+  #define REG_AESB_ODATAR                  (0xF0020050U) /**< \brief (AESB) Output Data Register */\r
+  #define REG_AESB_IVR                     (0xF0020060U) /**< \brief (AESB) Initialization Vector Register */\r
+#else\r
+  #define REG_AESB_CR     (*(__O  uint32_t*)0xF0020000U) /**< \brief (AESB) Control Register */\r
+  #define REG_AESB_MR     (*(__IO uint32_t*)0xF0020004U) /**< \brief (AESB) Mode Register */\r
+  #define REG_AESB_IER    (*(__O  uint32_t*)0xF0020010U) /**< \brief (AESB) Interrupt Enable Register */\r
+  #define REG_AESB_IDR    (*(__O  uint32_t*)0xF0020014U) /**< \brief (AESB) Interrupt Disable Register */\r
+  #define REG_AESB_IMR    (*(__I  uint32_t*)0xF0020018U) /**< \brief (AESB) Interrupt Mask Register */\r
+  #define REG_AESB_ISR    (*(__I  uint32_t*)0xF002001CU) /**< \brief (AESB) Interrupt Status Register */\r
+  #define REG_AESB_KEYWR  (*(__O  uint32_t*)0xF0020020U) /**< \brief (AESB) Key Word Register */\r
+  #define REG_AESB_IDATAR (*(__O  uint32_t*)0xF0020040U) /**< \brief (AESB) Input Data Register */\r
+  #define REG_AESB_ODATAR (*(__I  uint32_t*)0xF0020050U) /**< \brief (AESB) Output Data Register */\r
+  #define REG_AESB_IVR    (*(__O  uint32_t*)0xF0020060U) /**< \brief (AESB) Initialization Vector Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for XDMAC1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_XDMAC1_GTYPE                      (0xF0004000U) /**< \brief (XDMAC1) Global Type register */\r
+  #define REG_XDMAC1_GCFG                       (0xF0004004U) /**< \brief (XDMAC1) Global Configuration Register */\r
+  #define REG_XDMAC1_GWAC                       (0xF0004008U) /**< \brief (XDMAC1) Global Weighted Arbiter Configuration Register */\r
+  #define REG_XDMAC1_GIE                        (0xF000400CU) /**< \brief (XDMAC1) Global Interrupt Enable Register */\r
+  #define REG_XDMAC1_GID                        (0xF0004010U) /**< \brief (XDMAC1) Global Interrupt Disable Register */\r
+  #define REG_XDMAC1_GIM                        (0xF0004014U) /**< \brief (XDMAC1) Global Interrupt Mask Register */\r
+  #define REG_XDMAC1_GIS                        (0xF0004018U) /**< \brief (XDMAC1) Global Interrupt Status Register */\r
+  #define REG_XDMAC1_GE                         (0xF000401CU) /**< \brief (XDMAC1) Global Channel Enable Register */\r
+  #define REG_XDMAC1_GD                         (0xF0004020U) /**< \brief (XDMAC1) Global Channel Disable Register */\r
+  #define REG_XDMAC1_GS                         (0xF0004024U) /**< \brief (XDMAC1) Global Channel Status Register */\r
+  #define REG_XDMAC1_GRS                        (0xF0004028U) /**< \brief (XDMAC1) Global Channel Read Suspend Register */\r
+  #define REG_XDMAC1_GWS                        (0xF000402CU) /**< \brief (XDMAC1) Global Channel Write Suspend Register */\r
+  #define REG_XDMAC1_GRWS                       (0xF0004030U) /**< \brief (XDMAC1) Global Channel Read Write Suspend Register */\r
+  #define REG_XDMAC1_GRWR                       (0xF0004034U) /**< \brief (XDMAC1) Global Channel Read Write Resume Register */\r
+  #define REG_XDMAC1_GSWR                       (0xF0004038U) /**< \brief (XDMAC1) Global Channel Software Request Register */\r
+  #define REG_XDMAC1_GSWS                       (0xF000403CU) /**< \brief (XDMAC1) Global Channel Software Request Status Register */\r
+  #define REG_XDMAC1_GSWF                       (0xF0004040U) /**< \brief (XDMAC1) Global Channel Software Flush Request Register */\r
+  #define REG_XDMAC1_CIE0                       (0xF0004050U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 0) */\r
+  #define REG_XDMAC1_CID0                       (0xF0004054U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 0) */\r
+  #define REG_XDMAC1_CIM0                       (0xF0004058U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 0) */\r
+  #define REG_XDMAC1_CIS0                       (0xF000405CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 0) */\r
+  #define REG_XDMAC1_CSA0                       (0xF0004060U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 0) */\r
+  #define REG_XDMAC1_CDA0                       (0xF0004064U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 0) */\r
+  #define REG_XDMAC1_CNDA0                      (0xF0004068U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 0) */\r
+  #define REG_XDMAC1_CNDC0                      (0xF000406CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 0) */\r
+  #define REG_XDMAC1_CUBC0                      (0xF0004070U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 0) */\r
+  #define REG_XDMAC1_CBC0                       (0xF0004074U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 0) */\r
+  #define REG_XDMAC1_CC0                        (0xF0004078U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 0) */\r
+  #define REG_XDMAC1_CDS_MSP0                   (0xF000407CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 0) */\r
+  #define REG_XDMAC1_CSUS0                      (0xF0004080U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC1_CDUS0                      (0xF0004084U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC1_CIE1                       (0xF0004090U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 1) */\r
+  #define REG_XDMAC1_CID1                       (0xF0004094U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 1) */\r
+  #define REG_XDMAC1_CIM1                       (0xF0004098U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 1) */\r
+  #define REG_XDMAC1_CIS1                       (0xF000409CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 1) */\r
+  #define REG_XDMAC1_CSA1                       (0xF00040A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 1) */\r
+  #define REG_XDMAC1_CDA1                       (0xF00040A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 1) */\r
+  #define REG_XDMAC1_CNDA1                      (0xF00040A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 1) */\r
+  #define REG_XDMAC1_CNDC1                      (0xF00040ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 1) */\r
+  #define REG_XDMAC1_CUBC1                      (0xF00040B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 1) */\r
+  #define REG_XDMAC1_CBC1                       (0xF00040B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 1) */\r
+  #define REG_XDMAC1_CC1                        (0xF00040B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 1) */\r
+  #define REG_XDMAC1_CDS_MSP1                   (0xF00040BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 1) */\r
+  #define REG_XDMAC1_CSUS1                      (0xF00040C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC1_CDUS1                      (0xF00040C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC1_CIE2                       (0xF00040D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 2) */\r
+  #define REG_XDMAC1_CID2                       (0xF00040D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 2) */\r
+  #define REG_XDMAC1_CIM2                       (0xF00040D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 2) */\r
+  #define REG_XDMAC1_CIS2                       (0xF00040DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 2) */\r
+  #define REG_XDMAC1_CSA2                       (0xF00040E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 2) */\r
+  #define REG_XDMAC1_CDA2                       (0xF00040E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 2) */\r
+  #define REG_XDMAC1_CNDA2                      (0xF00040E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 2) */\r
+  #define REG_XDMAC1_CNDC2                      (0xF00040ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 2) */\r
+  #define REG_XDMAC1_CUBC2                      (0xF00040F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 2) */\r
+  #define REG_XDMAC1_CBC2                       (0xF00040F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 2) */\r
+  #define REG_XDMAC1_CC2                        (0xF00040F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 2) */\r
+  #define REG_XDMAC1_CDS_MSP2                   (0xF00040FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 2) */\r
+  #define REG_XDMAC1_CSUS2                      (0xF0004100U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC1_CDUS2                      (0xF0004104U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC1_CIE3                       (0xF0004110U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 3) */\r
+  #define REG_XDMAC1_CID3                       (0xF0004114U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 3) */\r
+  #define REG_XDMAC1_CIM3                       (0xF0004118U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 3) */\r
+  #define REG_XDMAC1_CIS3                       (0xF000411CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 3) */\r
+  #define REG_XDMAC1_CSA3                       (0xF0004120U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 3) */\r
+  #define REG_XDMAC1_CDA3                       (0xF0004124U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 3) */\r
+  #define REG_XDMAC1_CNDA3                      (0xF0004128U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 3) */\r
+  #define REG_XDMAC1_CNDC3                      (0xF000412CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 3) */\r
+  #define REG_XDMAC1_CUBC3                      (0xF0004130U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 3) */\r
+  #define REG_XDMAC1_CBC3                       (0xF0004134U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 3) */\r
+  #define REG_XDMAC1_CC3                        (0xF0004138U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 3) */\r
+  #define REG_XDMAC1_CDS_MSP3                   (0xF000413CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 3) */\r
+  #define REG_XDMAC1_CSUS3                      (0xF0004140U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC1_CDUS3                      (0xF0004144U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC1_CIE4                       (0xF0004150U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 4) */\r
+  #define REG_XDMAC1_CID4                       (0xF0004154U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 4) */\r
+  #define REG_XDMAC1_CIM4                       (0xF0004158U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 4) */\r
+  #define REG_XDMAC1_CIS4                       (0xF000415CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 4) */\r
+  #define REG_XDMAC1_CSA4                       (0xF0004160U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 4) */\r
+  #define REG_XDMAC1_CDA4                       (0xF0004164U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 4) */\r
+  #define REG_XDMAC1_CNDA4                      (0xF0004168U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 4) */\r
+  #define REG_XDMAC1_CNDC4                      (0xF000416CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 4) */\r
+  #define REG_XDMAC1_CUBC4                      (0xF0004170U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 4) */\r
+  #define REG_XDMAC1_CBC4                       (0xF0004174U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 4) */\r
+  #define REG_XDMAC1_CC4                        (0xF0004178U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 4) */\r
+  #define REG_XDMAC1_CDS_MSP4                   (0xF000417CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 4) */\r
+  #define REG_XDMAC1_CSUS4                      (0xF0004180U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC1_CDUS4                      (0xF0004184U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC1_CIE5                       (0xF0004190U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 5) */\r
+  #define REG_XDMAC1_CID5                       (0xF0004194U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 5) */\r
+  #define REG_XDMAC1_CIM5                       (0xF0004198U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 5) */\r
+  #define REG_XDMAC1_CIS5                       (0xF000419CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 5) */\r
+  #define REG_XDMAC1_CSA5                       (0xF00041A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 5) */\r
+  #define REG_XDMAC1_CDA5                       (0xF00041A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 5) */\r
+  #define REG_XDMAC1_CNDA5                      (0xF00041A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 5) */\r
+  #define REG_XDMAC1_CNDC5                      (0xF00041ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 5) */\r
+  #define REG_XDMAC1_CUBC5                      (0xF00041B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 5) */\r
+  #define REG_XDMAC1_CBC5                       (0xF00041B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 5) */\r
+  #define REG_XDMAC1_CC5                        (0xF00041B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 5) */\r
+  #define REG_XDMAC1_CDS_MSP5                   (0xF00041BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 5) */\r
+  #define REG_XDMAC1_CSUS5                      (0xF00041C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC1_CDUS5                      (0xF00041C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC1_CIE6                       (0xF00041D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 6) */\r
+  #define REG_XDMAC1_CID6                       (0xF00041D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 6) */\r
+  #define REG_XDMAC1_CIM6                       (0xF00041D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 6) */\r
+  #define REG_XDMAC1_CIS6                       (0xF00041DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 6) */\r
+  #define REG_XDMAC1_CSA6                       (0xF00041E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 6) */\r
+  #define REG_XDMAC1_CDA6                       (0xF00041E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 6) */\r
+  #define REG_XDMAC1_CNDA6                      (0xF00041E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 6) */\r
+  #define REG_XDMAC1_CNDC6                      (0xF00041ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 6) */\r
+  #define REG_XDMAC1_CUBC6                      (0xF00041F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 6) */\r
+  #define REG_XDMAC1_CBC6                       (0xF00041F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 6) */\r
+  #define REG_XDMAC1_CC6                        (0xF00041F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 6) */\r
+  #define REG_XDMAC1_CDS_MSP6                   (0xF00041FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 6) */\r
+  #define REG_XDMAC1_CSUS6                      (0xF0004200U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC1_CDUS6                      (0xF0004204U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC1_CIE7                       (0xF0004210U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 7) */\r
+  #define REG_XDMAC1_CID7                       (0xF0004214U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 7) */\r
+  #define REG_XDMAC1_CIM7                       (0xF0004218U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 7) */\r
+  #define REG_XDMAC1_CIS7                       (0xF000421CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 7) */\r
+  #define REG_XDMAC1_CSA7                       (0xF0004220U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 7) */\r
+  #define REG_XDMAC1_CDA7                       (0xF0004224U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 7) */\r
+  #define REG_XDMAC1_CNDA7                      (0xF0004228U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 7) */\r
+  #define REG_XDMAC1_CNDC7                      (0xF000422CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 7) */\r
+  #define REG_XDMAC1_CUBC7                      (0xF0004230U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 7) */\r
+  #define REG_XDMAC1_CBC7                       (0xF0004234U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 7) */\r
+  #define REG_XDMAC1_CC7                        (0xF0004238U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 7) */\r
+  #define REG_XDMAC1_CDS_MSP7                   (0xF000423CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 7) */\r
+  #define REG_XDMAC1_CSUS7                      (0xF0004240U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC1_CDUS7                      (0xF0004244U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC1_CIE8                       (0xF0004250U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 8) */\r
+  #define REG_XDMAC1_CID8                       (0xF0004254U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 8) */\r
+  #define REG_XDMAC1_CIM8                       (0xF0004258U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 8) */\r
+  #define REG_XDMAC1_CIS8                       (0xF000425CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 8) */\r
+  #define REG_XDMAC1_CSA8                       (0xF0004260U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 8) */\r
+  #define REG_XDMAC1_CDA8                       (0xF0004264U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 8) */\r
+  #define REG_XDMAC1_CNDA8                      (0xF0004268U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 8) */\r
+  #define REG_XDMAC1_CNDC8                      (0xF000426CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 8) */\r
+  #define REG_XDMAC1_CUBC8                      (0xF0004270U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 8) */\r
+  #define REG_XDMAC1_CBC8                       (0xF0004274U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 8) */\r
+  #define REG_XDMAC1_CC8                        (0xF0004278U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 8) */\r
+  #define REG_XDMAC1_CDS_MSP8                   (0xF000427CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 8) */\r
+  #define REG_XDMAC1_CSUS8                      (0xF0004280U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC1_CDUS8                      (0xF0004284U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC1_CIE9                       (0xF0004290U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 9) */\r
+  #define REG_XDMAC1_CID9                       (0xF0004294U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 9) */\r
+  #define REG_XDMAC1_CIM9                       (0xF0004298U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 9) */\r
+  #define REG_XDMAC1_CIS9                       (0xF000429CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 9) */\r
+  #define REG_XDMAC1_CSA9                       (0xF00042A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 9) */\r
+  #define REG_XDMAC1_CDA9                       (0xF00042A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 9) */\r
+  #define REG_XDMAC1_CNDA9                      (0xF00042A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 9) */\r
+  #define REG_XDMAC1_CNDC9                      (0xF00042ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 9) */\r
+  #define REG_XDMAC1_CUBC9                      (0xF00042B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 9) */\r
+  #define REG_XDMAC1_CBC9                       (0xF00042B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 9) */\r
+  #define REG_XDMAC1_CC9                        (0xF00042B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 9) */\r
+  #define REG_XDMAC1_CDS_MSP9                   (0xF00042BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 9) */\r
+  #define REG_XDMAC1_CSUS9                      (0xF00042C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC1_CDUS9                      (0xF00042C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC1_CIE10                      (0xF00042D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 10) */\r
+  #define REG_XDMAC1_CID10                      (0xF00042D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 10) */\r
+  #define REG_XDMAC1_CIM10                      (0xF00042D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 10) */\r
+  #define REG_XDMAC1_CIS10                      (0xF00042DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 10) */\r
+  #define REG_XDMAC1_CSA10                      (0xF00042E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 10) */\r
+  #define REG_XDMAC1_CDA10                      (0xF00042E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 10) */\r
+  #define REG_XDMAC1_CNDA10                     (0xF00042E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 10) */\r
+  #define REG_XDMAC1_CNDC10                     (0xF00042ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 10) */\r
+  #define REG_XDMAC1_CUBC10                     (0xF00042F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 10) */\r
+  #define REG_XDMAC1_CBC10                      (0xF00042F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 10) */\r
+  #define REG_XDMAC1_CC10                       (0xF00042F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 10) */\r
+  #define REG_XDMAC1_CDS_MSP10                  (0xF00042FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 10) */\r
+  #define REG_XDMAC1_CSUS10                     (0xF0004300U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC1_CDUS10                     (0xF0004304U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC1_CIE11                      (0xF0004310U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 11) */\r
+  #define REG_XDMAC1_CID11                      (0xF0004314U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 11) */\r
+  #define REG_XDMAC1_CIM11                      (0xF0004318U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 11) */\r
+  #define REG_XDMAC1_CIS11                      (0xF000431CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 11) */\r
+  #define REG_XDMAC1_CSA11                      (0xF0004320U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 11) */\r
+  #define REG_XDMAC1_CDA11                      (0xF0004324U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 11) */\r
+  #define REG_XDMAC1_CNDA11                     (0xF0004328U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 11) */\r
+  #define REG_XDMAC1_CNDC11                     (0xF000432CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 11) */\r
+  #define REG_XDMAC1_CUBC11                     (0xF0004330U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 11) */\r
+  #define REG_XDMAC1_CBC11                      (0xF0004334U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 11) */\r
+  #define REG_XDMAC1_CC11                       (0xF0004338U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 11) */\r
+  #define REG_XDMAC1_CDS_MSP11                  (0xF000433CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 11) */\r
+  #define REG_XDMAC1_CSUS11                     (0xF0004340U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC1_CDUS11                     (0xF0004344U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC1_CIE12                      (0xF0004350U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 12) */\r
+  #define REG_XDMAC1_CID12                      (0xF0004354U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 12) */\r
+  #define REG_XDMAC1_CIM12                      (0xF0004358U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 12) */\r
+  #define REG_XDMAC1_CIS12                      (0xF000435CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 12) */\r
+  #define REG_XDMAC1_CSA12                      (0xF0004360U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 12) */\r
+  #define REG_XDMAC1_CDA12                      (0xF0004364U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 12) */\r
+  #define REG_XDMAC1_CNDA12                     (0xF0004368U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 12) */\r
+  #define REG_XDMAC1_CNDC12                     (0xF000436CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 12) */\r
+  #define REG_XDMAC1_CUBC12                     (0xF0004370U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 12) */\r
+  #define REG_XDMAC1_CBC12                      (0xF0004374U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 12) */\r
+  #define REG_XDMAC1_CC12                       (0xF0004378U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 12) */\r
+  #define REG_XDMAC1_CDS_MSP12                  (0xF000437CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 12) */\r
+  #define REG_XDMAC1_CSUS12                     (0xF0004380U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC1_CDUS12                     (0xF0004384U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC1_CIE13                      (0xF0004390U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 13) */\r
+  #define REG_XDMAC1_CID13                      (0xF0004394U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 13) */\r
+  #define REG_XDMAC1_CIM13                      (0xF0004398U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 13) */\r
+  #define REG_XDMAC1_CIS13                      (0xF000439CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 13) */\r
+  #define REG_XDMAC1_CSA13                      (0xF00043A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 13) */\r
+  #define REG_XDMAC1_CDA13                      (0xF00043A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 13) */\r
+  #define REG_XDMAC1_CNDA13                     (0xF00043A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 13) */\r
+  #define REG_XDMAC1_CNDC13                     (0xF00043ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 13) */\r
+  #define REG_XDMAC1_CUBC13                     (0xF00043B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 13) */\r
+  #define REG_XDMAC1_CBC13                      (0xF00043B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 13) */\r
+  #define REG_XDMAC1_CC13                       (0xF00043B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 13) */\r
+  #define REG_XDMAC1_CDS_MSP13                  (0xF00043BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 13) */\r
+  #define REG_XDMAC1_CSUS13                     (0xF00043C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC1_CDUS13                     (0xF00043C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC1_CIE14                      (0xF00043D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 14) */\r
+  #define REG_XDMAC1_CID14                      (0xF00043D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 14) */\r
+  #define REG_XDMAC1_CIM14                      (0xF00043D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 14) */\r
+  #define REG_XDMAC1_CIS14                      (0xF00043DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 14) */\r
+  #define REG_XDMAC1_CSA14                      (0xF00043E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 14) */\r
+  #define REG_XDMAC1_CDA14                      (0xF00043E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 14) */\r
+  #define REG_XDMAC1_CNDA14                     (0xF00043E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 14) */\r
+  #define REG_XDMAC1_CNDC14                     (0xF00043ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 14) */\r
+  #define REG_XDMAC1_CUBC14                     (0xF00043F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 14) */\r
+  #define REG_XDMAC1_CBC14                      (0xF00043F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 14) */\r
+  #define REG_XDMAC1_CC14                       (0xF00043F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 14) */\r
+  #define REG_XDMAC1_CDS_MSP14                  (0xF00043FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 14) */\r
+  #define REG_XDMAC1_CSUS14                     (0xF0004400U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC1_CDUS14                     (0xF0004404U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC1_CIE15                      (0xF0004410U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 15) */\r
+  #define REG_XDMAC1_CID15                      (0xF0004414U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 15) */\r
+  #define REG_XDMAC1_CIM15                      (0xF0004418U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 15) */\r
+  #define REG_XDMAC1_CIS15                      (0xF000441CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 15) */\r
+  #define REG_XDMAC1_CSA15                      (0xF0004420U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 15) */\r
+  #define REG_XDMAC1_CDA15                      (0xF0004424U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 15) */\r
+  #define REG_XDMAC1_CNDA15                     (0xF0004428U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 15) */\r
+  #define REG_XDMAC1_CNDC15                     (0xF000442CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 15) */\r
+  #define REG_XDMAC1_CUBC15                     (0xF0004430U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 15) */\r
+  #define REG_XDMAC1_CBC15                      (0xF0004434U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 15) */\r
+  #define REG_XDMAC1_CC15                       (0xF0004438U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 15) */\r
+  #define REG_XDMAC1_CDS_MSP15                  (0xF000443CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 15) */\r
+  #define REG_XDMAC1_CSUS15                     (0xF0004440U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 15) */\r
+  #define REG_XDMAC1_CDUS15                     (0xF0004444U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 15) */\r
+#else\r
+  #define REG_XDMAC1_GTYPE     (*(__IO uint32_t*)0xF0004000U) /**< \brief (XDMAC1) Global Type register */\r
+  #define REG_XDMAC1_GCFG      (*(__I  uint32_t*)0xF0004004U) /**< \brief (XDMAC1) Global Configuration Register */\r
+  #define REG_XDMAC1_GWAC      (*(__IO uint32_t*)0xF0004008U) /**< \brief (XDMAC1) Global Weighted Arbiter Configuration Register */\r
+  #define REG_XDMAC1_GIE       (*(__O  uint32_t*)0xF000400CU) /**< \brief (XDMAC1) Global Interrupt Enable Register */\r
+  #define REG_XDMAC1_GID       (*(__O  uint32_t*)0xF0004010U) /**< \brief (XDMAC1) Global Interrupt Disable Register */\r
+  #define REG_XDMAC1_GIM       (*(__I  uint32_t*)0xF0004014U) /**< \brief (XDMAC1) Global Interrupt Mask Register */\r
+  #define REG_XDMAC1_GIS       (*(__I  uint32_t*)0xF0004018U) /**< \brief (XDMAC1) Global Interrupt Status Register */\r
+  #define REG_XDMAC1_GE        (*(__O  uint32_t*)0xF000401CU) /**< \brief (XDMAC1) Global Channel Enable Register */\r
+  #define REG_XDMAC1_GD        (*(__O  uint32_t*)0xF0004020U) /**< \brief (XDMAC1) Global Channel Disable Register */\r
+  #define REG_XDMAC1_GS        (*(__I  uint32_t*)0xF0004024U) /**< \brief (XDMAC1) Global Channel Status Register */\r
+  #define REG_XDMAC1_GRS       (*(__IO uint32_t*)0xF0004028U) /**< \brief (XDMAC1) Global Channel Read Suspend Register */\r
+  #define REG_XDMAC1_GWS       (*(__IO uint32_t*)0xF000402CU) /**< \brief (XDMAC1) Global Channel Write Suspend Register */\r
+  #define REG_XDMAC1_GRWS      (*(__O  uint32_t*)0xF0004030U) /**< \brief (XDMAC1) Global Channel Read Write Suspend Register */\r
+  #define REG_XDMAC1_GRWR      (*(__O  uint32_t*)0xF0004034U) /**< \brief (XDMAC1) Global Channel Read Write Resume Register */\r
+  #define REG_XDMAC1_GSWR      (*(__O  uint32_t*)0xF0004038U) /**< \brief (XDMAC1) Global Channel Software Request Register */\r
+  #define REG_XDMAC1_GSWS      (*(__I  uint32_t*)0xF000403CU) /**< \brief (XDMAC1) Global Channel Software Request Status Register */\r
+  #define REG_XDMAC1_GSWF      (*(__O  uint32_t*)0xF0004040U) /**< \brief (XDMAC1) Global Channel Software Flush Request Register */\r
+  #define REG_XDMAC1_CIE0      (*(__O  uint32_t*)0xF0004050U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 0) */\r
+  #define REG_XDMAC1_CID0      (*(__O  uint32_t*)0xF0004054U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 0) */\r
+  #define REG_XDMAC1_CIM0      (*(__O  uint32_t*)0xF0004058U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 0) */\r
+  #define REG_XDMAC1_CIS0      (*(__I  uint32_t*)0xF000405CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 0) */\r
+  #define REG_XDMAC1_CSA0      (*(__IO uint32_t*)0xF0004060U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 0) */\r
+  #define REG_XDMAC1_CDA0      (*(__IO uint32_t*)0xF0004064U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 0) */\r
+  #define REG_XDMAC1_CNDA0     (*(__IO uint32_t*)0xF0004068U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 0) */\r
+  #define REG_XDMAC1_CNDC0     (*(__IO uint32_t*)0xF000406CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 0) */\r
+  #define REG_XDMAC1_CUBC0     (*(__IO uint32_t*)0xF0004070U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 0) */\r
+  #define REG_XDMAC1_CBC0      (*(__IO uint32_t*)0xF0004074U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 0) */\r
+  #define REG_XDMAC1_CC0       (*(__IO uint32_t*)0xF0004078U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 0) */\r
+  #define REG_XDMAC1_CDS_MSP0  (*(__IO uint32_t*)0xF000407CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 0) */\r
+  #define REG_XDMAC1_CSUS0     (*(__IO uint32_t*)0xF0004080U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC1_CDUS0     (*(__IO uint32_t*)0xF0004084U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC1_CIE1      (*(__O  uint32_t*)0xF0004090U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 1) */\r
+  #define REG_XDMAC1_CID1      (*(__O  uint32_t*)0xF0004094U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 1) */\r
+  #define REG_XDMAC1_CIM1      (*(__O  uint32_t*)0xF0004098U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 1) */\r
+  #define REG_XDMAC1_CIS1      (*(__I  uint32_t*)0xF000409CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 1) */\r
+  #define REG_XDMAC1_CSA1      (*(__IO uint32_t*)0xF00040A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 1) */\r
+  #define REG_XDMAC1_CDA1      (*(__IO uint32_t*)0xF00040A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 1) */\r
+  #define REG_XDMAC1_CNDA1     (*(__IO uint32_t*)0xF00040A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 1) */\r
+  #define REG_XDMAC1_CNDC1     (*(__IO uint32_t*)0xF00040ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 1) */\r
+  #define REG_XDMAC1_CUBC1     (*(__IO uint32_t*)0xF00040B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 1) */\r
+  #define REG_XDMAC1_CBC1      (*(__IO uint32_t*)0xF00040B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 1) */\r
+  #define REG_XDMAC1_CC1       (*(__IO uint32_t*)0xF00040B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 1) */\r
+  #define REG_XDMAC1_CDS_MSP1  (*(__IO uint32_t*)0xF00040BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 1) */\r
+  #define REG_XDMAC1_CSUS1     (*(__IO uint32_t*)0xF00040C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC1_CDUS1     (*(__IO uint32_t*)0xF00040C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC1_CIE2      (*(__O  uint32_t*)0xF00040D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 2) */\r
+  #define REG_XDMAC1_CID2      (*(__O  uint32_t*)0xF00040D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 2) */\r
+  #define REG_XDMAC1_CIM2      (*(__O  uint32_t*)0xF00040D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 2) */\r
+  #define REG_XDMAC1_CIS2      (*(__I  uint32_t*)0xF00040DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 2) */\r
+  #define REG_XDMAC1_CSA2      (*(__IO uint32_t*)0xF00040E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 2) */\r
+  #define REG_XDMAC1_CDA2      (*(__IO uint32_t*)0xF00040E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 2) */\r
+  #define REG_XDMAC1_CNDA2     (*(__IO uint32_t*)0xF00040E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 2) */\r
+  #define REG_XDMAC1_CNDC2     (*(__IO uint32_t*)0xF00040ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 2) */\r
+  #define REG_XDMAC1_CUBC2     (*(__IO uint32_t*)0xF00040F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 2) */\r
+  #define REG_XDMAC1_CBC2      (*(__IO uint32_t*)0xF00040F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 2) */\r
+  #define REG_XDMAC1_CC2       (*(__IO uint32_t*)0xF00040F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 2) */\r
+  #define REG_XDMAC1_CDS_MSP2  (*(__IO uint32_t*)0xF00040FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 2) */\r
+  #define REG_XDMAC1_CSUS2     (*(__IO uint32_t*)0xF0004100U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC1_CDUS2     (*(__IO uint32_t*)0xF0004104U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC1_CIE3      (*(__O  uint32_t*)0xF0004110U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 3) */\r
+  #define REG_XDMAC1_CID3      (*(__O  uint32_t*)0xF0004114U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 3) */\r
+  #define REG_XDMAC1_CIM3      (*(__O  uint32_t*)0xF0004118U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 3) */\r
+  #define REG_XDMAC1_CIS3      (*(__I  uint32_t*)0xF000411CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 3) */\r
+  #define REG_XDMAC1_CSA3      (*(__IO uint32_t*)0xF0004120U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 3) */\r
+  #define REG_XDMAC1_CDA3      (*(__IO uint32_t*)0xF0004124U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 3) */\r
+  #define REG_XDMAC1_CNDA3     (*(__IO uint32_t*)0xF0004128U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 3) */\r
+  #define REG_XDMAC1_CNDC3     (*(__IO uint32_t*)0xF000412CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 3) */\r
+  #define REG_XDMAC1_CUBC3     (*(__IO uint32_t*)0xF0004130U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 3) */\r
+  #define REG_XDMAC1_CBC3      (*(__IO uint32_t*)0xF0004134U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 3) */\r
+  #define REG_XDMAC1_CC3       (*(__IO uint32_t*)0xF0004138U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 3) */\r
+  #define REG_XDMAC1_CDS_MSP3  (*(__IO uint32_t*)0xF000413CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 3) */\r
+  #define REG_XDMAC1_CSUS3     (*(__IO uint32_t*)0xF0004140U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC1_CDUS3     (*(__IO uint32_t*)0xF0004144U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC1_CIE4      (*(__O  uint32_t*)0xF0004150U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 4) */\r
+  #define REG_XDMAC1_CID4      (*(__O  uint32_t*)0xF0004154U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 4) */\r
+  #define REG_XDMAC1_CIM4      (*(__O  uint32_t*)0xF0004158U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 4) */\r
+  #define REG_XDMAC1_CIS4      (*(__I  uint32_t*)0xF000415CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 4) */\r
+  #define REG_XDMAC1_CSA4      (*(__IO uint32_t*)0xF0004160U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 4) */\r
+  #define REG_XDMAC1_CDA4      (*(__IO uint32_t*)0xF0004164U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 4) */\r
+  #define REG_XDMAC1_CNDA4     (*(__IO uint32_t*)0xF0004168U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 4) */\r
+  #define REG_XDMAC1_CNDC4     (*(__IO uint32_t*)0xF000416CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 4) */\r
+  #define REG_XDMAC1_CUBC4     (*(__IO uint32_t*)0xF0004170U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 4) */\r
+  #define REG_XDMAC1_CBC4      (*(__IO uint32_t*)0xF0004174U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 4) */\r
+  #define REG_XDMAC1_CC4       (*(__IO uint32_t*)0xF0004178U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 4) */\r
+  #define REG_XDMAC1_CDS_MSP4  (*(__IO uint32_t*)0xF000417CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 4) */\r
+  #define REG_XDMAC1_CSUS4     (*(__IO uint32_t*)0xF0004180U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC1_CDUS4     (*(__IO uint32_t*)0xF0004184U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC1_CIE5      (*(__O  uint32_t*)0xF0004190U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 5) */\r
+  #define REG_XDMAC1_CID5      (*(__O  uint32_t*)0xF0004194U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 5) */\r
+  #define REG_XDMAC1_CIM5      (*(__O  uint32_t*)0xF0004198U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 5) */\r
+  #define REG_XDMAC1_CIS5      (*(__I  uint32_t*)0xF000419CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 5) */\r
+  #define REG_XDMAC1_CSA5      (*(__IO uint32_t*)0xF00041A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 5) */\r
+  #define REG_XDMAC1_CDA5      (*(__IO uint32_t*)0xF00041A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 5) */\r
+  #define REG_XDMAC1_CNDA5     (*(__IO uint32_t*)0xF00041A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 5) */\r
+  #define REG_XDMAC1_CNDC5     (*(__IO uint32_t*)0xF00041ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 5) */\r
+  #define REG_XDMAC1_CUBC5     (*(__IO uint32_t*)0xF00041B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 5) */\r
+  #define REG_XDMAC1_CBC5      (*(__IO uint32_t*)0xF00041B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 5) */\r
+  #define REG_XDMAC1_CC5       (*(__IO uint32_t*)0xF00041B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 5) */\r
+  #define REG_XDMAC1_CDS_MSP5  (*(__IO uint32_t*)0xF00041BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 5) */\r
+  #define REG_XDMAC1_CSUS5     (*(__IO uint32_t*)0xF00041C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC1_CDUS5     (*(__IO uint32_t*)0xF00041C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC1_CIE6      (*(__O  uint32_t*)0xF00041D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 6) */\r
+  #define REG_XDMAC1_CID6      (*(__O  uint32_t*)0xF00041D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 6) */\r
+  #define REG_XDMAC1_CIM6      (*(__O  uint32_t*)0xF00041D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 6) */\r
+  #define REG_XDMAC1_CIS6      (*(__I  uint32_t*)0xF00041DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 6) */\r
+  #define REG_XDMAC1_CSA6      (*(__IO uint32_t*)0xF00041E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 6) */\r
+  #define REG_XDMAC1_CDA6      (*(__IO uint32_t*)0xF00041E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 6) */\r
+  #define REG_XDMAC1_CNDA6     (*(__IO uint32_t*)0xF00041E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 6) */\r
+  #define REG_XDMAC1_CNDC6     (*(__IO uint32_t*)0xF00041ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 6) */\r
+  #define REG_XDMAC1_CUBC6     (*(__IO uint32_t*)0xF00041F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 6) */\r
+  #define REG_XDMAC1_CBC6      (*(__IO uint32_t*)0xF00041F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 6) */\r
+  #define REG_XDMAC1_CC6       (*(__IO uint32_t*)0xF00041F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 6) */\r
+  #define REG_XDMAC1_CDS_MSP6  (*(__IO uint32_t*)0xF00041FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 6) */\r
+  #define REG_XDMAC1_CSUS6     (*(__IO uint32_t*)0xF0004200U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC1_CDUS6     (*(__IO uint32_t*)0xF0004204U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC1_CIE7      (*(__O  uint32_t*)0xF0004210U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 7) */\r
+  #define REG_XDMAC1_CID7      (*(__O  uint32_t*)0xF0004214U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 7) */\r
+  #define REG_XDMAC1_CIM7      (*(__O  uint32_t*)0xF0004218U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 7) */\r
+  #define REG_XDMAC1_CIS7      (*(__I  uint32_t*)0xF000421CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 7) */\r
+  #define REG_XDMAC1_CSA7      (*(__IO uint32_t*)0xF0004220U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 7) */\r
+  #define REG_XDMAC1_CDA7      (*(__IO uint32_t*)0xF0004224U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 7) */\r
+  #define REG_XDMAC1_CNDA7     (*(__IO uint32_t*)0xF0004228U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 7) */\r
+  #define REG_XDMAC1_CNDC7     (*(__IO uint32_t*)0xF000422CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 7) */\r
+  #define REG_XDMAC1_CUBC7     (*(__IO uint32_t*)0xF0004230U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 7) */\r
+  #define REG_XDMAC1_CBC7      (*(__IO uint32_t*)0xF0004234U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 7) */\r
+  #define REG_XDMAC1_CC7       (*(__IO uint32_t*)0xF0004238U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 7) */\r
+  #define REG_XDMAC1_CDS_MSP7  (*(__IO uint32_t*)0xF000423CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 7) */\r
+  #define REG_XDMAC1_CSUS7     (*(__IO uint32_t*)0xF0004240U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC1_CDUS7     (*(__IO uint32_t*)0xF0004244U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC1_CIE8      (*(__O  uint32_t*)0xF0004250U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 8) */\r
+  #define REG_XDMAC1_CID8      (*(__O  uint32_t*)0xF0004254U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 8) */\r
+  #define REG_XDMAC1_CIM8      (*(__O  uint32_t*)0xF0004258U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 8) */\r
+  #define REG_XDMAC1_CIS8      (*(__I  uint32_t*)0xF000425CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 8) */\r
+  #define REG_XDMAC1_CSA8      (*(__IO uint32_t*)0xF0004260U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 8) */\r
+  #define REG_XDMAC1_CDA8      (*(__IO uint32_t*)0xF0004264U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 8) */\r
+  #define REG_XDMAC1_CNDA8     (*(__IO uint32_t*)0xF0004268U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 8) */\r
+  #define REG_XDMAC1_CNDC8     (*(__IO uint32_t*)0xF000426CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 8) */\r
+  #define REG_XDMAC1_CUBC8     (*(__IO uint32_t*)0xF0004270U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 8) */\r
+  #define REG_XDMAC1_CBC8      (*(__IO uint32_t*)0xF0004274U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 8) */\r
+  #define REG_XDMAC1_CC8       (*(__IO uint32_t*)0xF0004278U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 8) */\r
+  #define REG_XDMAC1_CDS_MSP8  (*(__IO uint32_t*)0xF000427CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 8) */\r
+  #define REG_XDMAC1_CSUS8     (*(__IO uint32_t*)0xF0004280U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC1_CDUS8     (*(__IO uint32_t*)0xF0004284U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC1_CIE9      (*(__O  uint32_t*)0xF0004290U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 9) */\r
+  #define REG_XDMAC1_CID9      (*(__O  uint32_t*)0xF0004294U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 9) */\r
+  #define REG_XDMAC1_CIM9      (*(__O  uint32_t*)0xF0004298U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 9) */\r
+  #define REG_XDMAC1_CIS9      (*(__I  uint32_t*)0xF000429CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 9) */\r
+  #define REG_XDMAC1_CSA9      (*(__IO uint32_t*)0xF00042A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 9) */\r
+  #define REG_XDMAC1_CDA9      (*(__IO uint32_t*)0xF00042A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 9) */\r
+  #define REG_XDMAC1_CNDA9     (*(__IO uint32_t*)0xF00042A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 9) */\r
+  #define REG_XDMAC1_CNDC9     (*(__IO uint32_t*)0xF00042ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 9) */\r
+  #define REG_XDMAC1_CUBC9     (*(__IO uint32_t*)0xF00042B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 9) */\r
+  #define REG_XDMAC1_CBC9      (*(__IO uint32_t*)0xF00042B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 9) */\r
+  #define REG_XDMAC1_CC9       (*(__IO uint32_t*)0xF00042B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 9) */\r
+  #define REG_XDMAC1_CDS_MSP9  (*(__IO uint32_t*)0xF00042BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 9) */\r
+  #define REG_XDMAC1_CSUS9     (*(__IO uint32_t*)0xF00042C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC1_CDUS9     (*(__IO uint32_t*)0xF00042C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC1_CIE10     (*(__O  uint32_t*)0xF00042D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 10) */\r
+  #define REG_XDMAC1_CID10     (*(__O  uint32_t*)0xF00042D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 10) */\r
+  #define REG_XDMAC1_CIM10     (*(__O  uint32_t*)0xF00042D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 10) */\r
+  #define REG_XDMAC1_CIS10     (*(__I  uint32_t*)0xF00042DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 10) */\r
+  #define REG_XDMAC1_CSA10     (*(__IO uint32_t*)0xF00042E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 10) */\r
+  #define REG_XDMAC1_CDA10     (*(__IO uint32_t*)0xF00042E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 10) */\r
+  #define REG_XDMAC1_CNDA10    (*(__IO uint32_t*)0xF00042E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 10) */\r
+  #define REG_XDMAC1_CNDC10    (*(__IO uint32_t*)0xF00042ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 10) */\r
+  #define REG_XDMAC1_CUBC10    (*(__IO uint32_t*)0xF00042F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 10) */\r
+  #define REG_XDMAC1_CBC10     (*(__IO uint32_t*)0xF00042F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 10) */\r
+  #define REG_XDMAC1_CC10      (*(__IO uint32_t*)0xF00042F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 10) */\r
+  #define REG_XDMAC1_CDS_MSP10 (*(__IO uint32_t*)0xF00042FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 10) */\r
+  #define REG_XDMAC1_CSUS10    (*(__IO uint32_t*)0xF0004300U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC1_CDUS10    (*(__IO uint32_t*)0xF0004304U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC1_CIE11     (*(__O  uint32_t*)0xF0004310U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 11) */\r
+  #define REG_XDMAC1_CID11     (*(__O  uint32_t*)0xF0004314U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 11) */\r
+  #define REG_XDMAC1_CIM11     (*(__O  uint32_t*)0xF0004318U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 11) */\r
+  #define REG_XDMAC1_CIS11     (*(__I  uint32_t*)0xF000431CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 11) */\r
+  #define REG_XDMAC1_CSA11     (*(__IO uint32_t*)0xF0004320U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 11) */\r
+  #define REG_XDMAC1_CDA11     (*(__IO uint32_t*)0xF0004324U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 11) */\r
+  #define REG_XDMAC1_CNDA11    (*(__IO uint32_t*)0xF0004328U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 11) */\r
+  #define REG_XDMAC1_CNDC11    (*(__IO uint32_t*)0xF000432CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 11) */\r
+  #define REG_XDMAC1_CUBC11    (*(__IO uint32_t*)0xF0004330U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 11) */\r
+  #define REG_XDMAC1_CBC11     (*(__IO uint32_t*)0xF0004334U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 11) */\r
+  #define REG_XDMAC1_CC11      (*(__IO uint32_t*)0xF0004338U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 11) */\r
+  #define REG_XDMAC1_CDS_MSP11 (*(__IO uint32_t*)0xF000433CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 11) */\r
+  #define REG_XDMAC1_CSUS11    (*(__IO uint32_t*)0xF0004340U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC1_CDUS11    (*(__IO uint32_t*)0xF0004344U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC1_CIE12     (*(__O  uint32_t*)0xF0004350U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 12) */\r
+  #define REG_XDMAC1_CID12     (*(__O  uint32_t*)0xF0004354U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 12) */\r
+  #define REG_XDMAC1_CIM12     (*(__O  uint32_t*)0xF0004358U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 12) */\r
+  #define REG_XDMAC1_CIS12     (*(__I  uint32_t*)0xF000435CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 12) */\r
+  #define REG_XDMAC1_CSA12     (*(__IO uint32_t*)0xF0004360U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 12) */\r
+  #define REG_XDMAC1_CDA12     (*(__IO uint32_t*)0xF0004364U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 12) */\r
+  #define REG_XDMAC1_CNDA12    (*(__IO uint32_t*)0xF0004368U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 12) */\r
+  #define REG_XDMAC1_CNDC12    (*(__IO uint32_t*)0xF000436CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 12) */\r
+  #define REG_XDMAC1_CUBC12    (*(__IO uint32_t*)0xF0004370U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 12) */\r
+  #define REG_XDMAC1_CBC12     (*(__IO uint32_t*)0xF0004374U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 12) */\r
+  #define REG_XDMAC1_CC12      (*(__IO uint32_t*)0xF0004378U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 12) */\r
+  #define REG_XDMAC1_CDS_MSP12 (*(__IO uint32_t*)0xF000437CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 12) */\r
+  #define REG_XDMAC1_CSUS12    (*(__IO uint32_t*)0xF0004380U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC1_CDUS12    (*(__IO uint32_t*)0xF0004384U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC1_CIE13     (*(__O  uint32_t*)0xF0004390U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 13) */\r
+  #define REG_XDMAC1_CID13     (*(__O  uint32_t*)0xF0004394U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 13) */\r
+  #define REG_XDMAC1_CIM13     (*(__O  uint32_t*)0xF0004398U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 13) */\r
+  #define REG_XDMAC1_CIS13     (*(__I  uint32_t*)0xF000439CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 13) */\r
+  #define REG_XDMAC1_CSA13     (*(__IO uint32_t*)0xF00043A0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 13) */\r
+  #define REG_XDMAC1_CDA13     (*(__IO uint32_t*)0xF00043A4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 13) */\r
+  #define REG_XDMAC1_CNDA13    (*(__IO uint32_t*)0xF00043A8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 13) */\r
+  #define REG_XDMAC1_CNDC13    (*(__IO uint32_t*)0xF00043ACU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 13) */\r
+  #define REG_XDMAC1_CUBC13    (*(__IO uint32_t*)0xF00043B0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 13) */\r
+  #define REG_XDMAC1_CBC13     (*(__IO uint32_t*)0xF00043B4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 13) */\r
+  #define REG_XDMAC1_CC13      (*(__IO uint32_t*)0xF00043B8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 13) */\r
+  #define REG_XDMAC1_CDS_MSP13 (*(__IO uint32_t*)0xF00043BCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 13) */\r
+  #define REG_XDMAC1_CSUS13    (*(__IO uint32_t*)0xF00043C0U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC1_CDUS13    (*(__IO uint32_t*)0xF00043C4U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC1_CIE14     (*(__O  uint32_t*)0xF00043D0U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 14) */\r
+  #define REG_XDMAC1_CID14     (*(__O  uint32_t*)0xF00043D4U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 14) */\r
+  #define REG_XDMAC1_CIM14     (*(__O  uint32_t*)0xF00043D8U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 14) */\r
+  #define REG_XDMAC1_CIS14     (*(__I  uint32_t*)0xF00043DCU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 14) */\r
+  #define REG_XDMAC1_CSA14     (*(__IO uint32_t*)0xF00043E0U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 14) */\r
+  #define REG_XDMAC1_CDA14     (*(__IO uint32_t*)0xF00043E4U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 14) */\r
+  #define REG_XDMAC1_CNDA14    (*(__IO uint32_t*)0xF00043E8U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 14) */\r
+  #define REG_XDMAC1_CNDC14    (*(__IO uint32_t*)0xF00043ECU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 14) */\r
+  #define REG_XDMAC1_CUBC14    (*(__IO uint32_t*)0xF00043F0U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 14) */\r
+  #define REG_XDMAC1_CBC14     (*(__IO uint32_t*)0xF00043F4U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 14) */\r
+  #define REG_XDMAC1_CC14      (*(__IO uint32_t*)0xF00043F8U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 14) */\r
+  #define REG_XDMAC1_CDS_MSP14 (*(__IO uint32_t*)0xF00043FCU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 14) */\r
+  #define REG_XDMAC1_CSUS14    (*(__IO uint32_t*)0xF0004400U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC1_CDUS14    (*(__IO uint32_t*)0xF0004404U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC1_CIE15     (*(__O  uint32_t*)0xF0004410U) /**< \brief (XDMAC1) Channel Interrupt Enable Register (chid = 15) */\r
+  #define REG_XDMAC1_CID15     (*(__O  uint32_t*)0xF0004414U) /**< \brief (XDMAC1) Channel Interrupt Disable Register (chid = 15) */\r
+  #define REG_XDMAC1_CIM15     (*(__O  uint32_t*)0xF0004418U) /**< \brief (XDMAC1) Channel Interrupt Mask Register (chid = 15) */\r
+  #define REG_XDMAC1_CIS15     (*(__I  uint32_t*)0xF000441CU) /**< \brief (XDMAC1) Channel Interrupt Status Register (chid = 15) */\r
+  #define REG_XDMAC1_CSA15     (*(__IO uint32_t*)0xF0004420U) /**< \brief (XDMAC1) Channel Source Address Register (chid = 15) */\r
+  #define REG_XDMAC1_CDA15     (*(__IO uint32_t*)0xF0004424U) /**< \brief (XDMAC1) Channel Destination Address Register (chid = 15) */\r
+  #define REG_XDMAC1_CNDA15    (*(__IO uint32_t*)0xF0004428U) /**< \brief (XDMAC1) Channel Next Descriptor Address Register (chid = 15) */\r
+  #define REG_XDMAC1_CNDC15    (*(__IO uint32_t*)0xF000442CU) /**< \brief (XDMAC1) Channel Next Descriptor Control Register (chid = 15) */\r
+  #define REG_XDMAC1_CUBC15    (*(__IO uint32_t*)0xF0004430U) /**< \brief (XDMAC1) Channel Microblock Control Register (chid = 15) */\r
+  #define REG_XDMAC1_CBC15     (*(__IO uint32_t*)0xF0004434U) /**< \brief (XDMAC1) Channel Block Control Register (chid = 15) */\r
+  #define REG_XDMAC1_CC15      (*(__IO uint32_t*)0xF0004438U) /**< \brief (XDMAC1) Channel Configuration Register (chid = 15) */\r
+  #define REG_XDMAC1_CDS_MSP15 (*(__IO uint32_t*)0xF000443CU) /**< \brief (XDMAC1) Channel Data Stride Memory Set Pattern (chid = 15) */\r
+  #define REG_XDMAC1_CSUS15    (*(__IO uint32_t*)0xF0004440U) /**< \brief (XDMAC1) Channel Source Microblock Stride (chid = 15) */\r
+  #define REG_XDMAC1_CDUS15    (*(__IO uint32_t*)0xF0004444U) /**< \brief (XDMAC1) Channel Destination Microblock Stride (chid = 15) */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for ISI peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_ISI_CFG1                        (0xF0008000U) /**< \brief (ISI) ISI Configuration 1 Register */\r
+  #define REG_ISI_CFG2                        (0xF0008004U) /**< \brief (ISI) ISI Configuration 2 Register */\r
+  #define REG_ISI_PSIZE                       (0xF0008008U) /**< \brief (ISI) ISI Preview Size Register */\r
+  #define REG_ISI_PDECF                       (0xF000800CU) /**< \brief (ISI) ISI Preview Decimation Factor Register */\r
+  #define REG_ISI_Y2R_SET0                    (0xF0008010U) /**< \brief (ISI) ISI CSC YCrCb To RGB Set 0 Register */\r
+  #define REG_ISI_Y2R_SET1                    (0xF0008014U) /**< \brief (ISI) ISI CSC YCrCb To RGB Set 1 Register */\r
+  #define REG_ISI_R2Y_SET0                    (0xF0008018U) /**< \brief (ISI) ISI CSC RGB To YCrCb Set 0 Register */\r
+  #define REG_ISI_R2Y_SET1                    (0xF000801CU) /**< \brief (ISI) ISI CSC RGB To YCrCb Set 1 Register */\r
+  #define REG_ISI_R2Y_SET2                    (0xF0008020U) /**< \brief (ISI) ISI CSC RGB To YCrCb Set 2 Register */\r
+  #define REG_ISI_CR                          (0xF0008024U) /**< \brief (ISI) ISI Control Register */\r
+  #define REG_ISI_SR                          (0xF0008028U) /**< \brief (ISI) ISI Status Register */\r
+  #define REG_ISI_IER                         (0xF000802CU) /**< \brief (ISI) ISI Interrupt Enable Register */\r
+  #define REG_ISI_IDR                         (0xF0008030U) /**< \brief (ISI) ISI Interrupt Disable Register */\r
+  #define REG_ISI_IMR                         (0xF0008034U) /**< \brief (ISI) ISI Interrupt Mask Register */\r
+  #define REG_ISI_DMA_CHER                    (0xF0008038U) /**< \brief (ISI) DMA Channel Enable Register */\r
+  #define REG_ISI_DMA_CHDR                    (0xF000803CU) /**< \brief (ISI) DMA Channel Disable Register */\r
+  #define REG_ISI_DMA_CHSR                    (0xF0008040U) /**< \brief (ISI) DMA Channel Status Register */\r
+  #define REG_ISI_DMA_P_ADDR                  (0xF0008044U) /**< \brief (ISI) DMA Preview Base Address Register */\r
+  #define REG_ISI_DMA_P_CTRL                  (0xF0008048U) /**< \brief (ISI) DMA Preview Control Register */\r
+  #define REG_ISI_DMA_P_DSCR                  (0xF000804CU) /**< \brief (ISI) DMA Preview Descriptor Address Register */\r
+  #define REG_ISI_DMA_C_ADDR                  (0xF0008050U) /**< \brief (ISI) DMA Codec Base Address Register */\r
+  #define REG_ISI_DMA_C_CTRL                  (0xF0008054U) /**< \brief (ISI) DMA Codec Control Register */\r
+  #define REG_ISI_DMA_C_DSCR                  (0xF0008058U) /**< \brief (ISI) DMA Codec Descriptor Address Register */\r
+  #define REG_ISI_WPCR                        (0xF00080E4U) /**< \brief (ISI) Write Protection Control Register */\r
+  #define REG_ISI_WPSR                        (0xF00080E8U) /**< \brief (ISI) Write Protection Status Register */\r
+#else\r
+  #define REG_ISI_CFG1       (*(__IO uint32_t*)0xF0008000U) /**< \brief (ISI) ISI Configuration 1 Register */\r
+  #define REG_ISI_CFG2       (*(__IO uint32_t*)0xF0008004U) /**< \brief (ISI) ISI Configuration 2 Register */\r
+  #define REG_ISI_PSIZE      (*(__IO uint32_t*)0xF0008008U) /**< \brief (ISI) ISI Preview Size Register */\r
+  #define REG_ISI_PDECF      (*(__IO uint32_t*)0xF000800CU) /**< \brief (ISI) ISI Preview Decimation Factor Register */\r
+  #define REG_ISI_Y2R_SET0   (*(__IO uint32_t*)0xF0008010U) /**< \brief (ISI) ISI CSC YCrCb To RGB Set 0 Register */\r
+  #define REG_ISI_Y2R_SET1   (*(__IO uint32_t*)0xF0008014U) /**< \brief (ISI) ISI CSC YCrCb To RGB Set 1 Register */\r
+  #define REG_ISI_R2Y_SET0   (*(__IO uint32_t*)0xF0008018U) /**< \brief (ISI) ISI CSC RGB To YCrCb Set 0 Register */\r
+  #define REG_ISI_R2Y_SET1   (*(__IO uint32_t*)0xF000801CU) /**< \brief (ISI) ISI CSC RGB To YCrCb Set 1 Register */\r
+  #define REG_ISI_R2Y_SET2   (*(__IO uint32_t*)0xF0008020U) /**< \brief (ISI) ISI CSC RGB To YCrCb Set 2 Register */\r
+  #define REG_ISI_CR         (*(__O  uint32_t*)0xF0008024U) /**< \brief (ISI) ISI Control Register */\r
+  #define REG_ISI_SR         (*(__I  uint32_t*)0xF0008028U) /**< \brief (ISI) ISI Status Register */\r
+  #define REG_ISI_IER        (*(__O  uint32_t*)0xF000802CU) /**< \brief (ISI) ISI Interrupt Enable Register */\r
+  #define REG_ISI_IDR        (*(__O  uint32_t*)0xF0008030U) /**< \brief (ISI) ISI Interrupt Disable Register */\r
+  #define REG_ISI_IMR        (*(__I  uint32_t*)0xF0008034U) /**< \brief (ISI) ISI Interrupt Mask Register */\r
+  #define REG_ISI_DMA_CHER   (*(__O  uint32_t*)0xF0008038U) /**< \brief (ISI) DMA Channel Enable Register */\r
+  #define REG_ISI_DMA_CHDR   (*(__O  uint32_t*)0xF000803CU) /**< \brief (ISI) DMA Channel Disable Register */\r
+  #define REG_ISI_DMA_CHSR   (*(__I  uint32_t*)0xF0008040U) /**< \brief (ISI) DMA Channel Status Register */\r
+  #define REG_ISI_DMA_P_ADDR (*(__IO uint32_t*)0xF0008044U) /**< \brief (ISI) DMA Preview Base Address Register */\r
+  #define REG_ISI_DMA_P_CTRL (*(__IO uint32_t*)0xF0008048U) /**< \brief (ISI) DMA Preview Control Register */\r
+  #define REG_ISI_DMA_P_DSCR (*(__IO uint32_t*)0xF000804CU) /**< \brief (ISI) DMA Preview Descriptor Address Register */\r
+  #define REG_ISI_DMA_C_ADDR (*(__IO uint32_t*)0xF0008050U) /**< \brief (ISI) DMA Codec Base Address Register */\r
+  #define REG_ISI_DMA_C_CTRL (*(__IO uint32_t*)0xF0008054U) /**< \brief (ISI) DMA Codec Control Register */\r
+  #define REG_ISI_DMA_C_DSCR (*(__IO uint32_t*)0xF0008058U) /**< \brief (ISI) DMA Codec Descriptor Address Register */\r
+  #define REG_ISI_WPCR       (*(__IO uint32_t*)0xF00080E4U) /**< \brief (ISI) Write Protection Control Register */\r
+  #define REG_ISI_WPSR       (*(__I  uint32_t*)0xF00080E8U) /**< \brief (ISI) Write Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for MPDDRC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_MPDDRC_MR                              (0xF0010000U) /**< \brief (MPDDRC) MPDDRC Mode Register */\r
+  #define REG_MPDDRC_RTR                             (0xF0010004U) /**< \brief (MPDDRC) MPDDRC Refresh Timer Register */\r
+  #define REG_MPDDRC_CR                              (0xF0010008U) /**< \brief (MPDDRC) MPDDRC Configuration Register */\r
+  #define REG_MPDDRC_TPR0                            (0xF001000CU) /**< \brief (MPDDRC) MPDDRC Timing Parameter 0 Register */\r
+  #define REG_MPDDRC_TPR1                            (0xF0010010U) /**< \brief (MPDDRC) MPDDRC Timing Parameter 1 Register */\r
+  #define REG_MPDDRC_TPR2                            (0xF0010014U) /**< \brief (MPDDRC) MPDDRC Timing Parameter 2 Register */\r
+  #define REG_MPDDRC_LPR                             (0xF001001CU) /**< \brief (MPDDRC) MPDDRC Low-power Register */\r
+  #define REG_MPDDRC_MD                              (0xF0010020U) /**< \brief (MPDDRC) MPDDRC Memory Device Register */\r
+  #define REG_MPDDRC_LPDDR2_LPR                      (0xF0010028U) /**< \brief (MPDDRC) MPDDRC LPDDR2 Low-power Register */\r
+  #define REG_MPDDRC_LPDDR2_CAL_MR4                  (0xF001002CU) /**< \brief (MPDDRC) MPDDRC LPDDR2 Calibration and MR4 Register */\r
+  #define REG_MPDDRC_LPDDR2_TIM_CAL                  (0xF0010030U) /**< \brief (MPDDRC) MPDDRC LPDDR2 Timing Calibration Register */\r
+  #define REG_MPDDRC_IO_CALIBR                       (0xF0010034U) /**< \brief (MPDDRC) MPDDRC IO Calibration */\r
+  #define REG_MPDDRC_OCMS                            (0xF0010038U) /**< \brief (MPDDRC) MPDDRC OCMS Register */\r
+  #define REG_MPDDRC_OCMS_KEY1                       (0xF001003CU) /**< \brief (MPDDRC) MPDDRC OCMS KEY1 Register */\r
+  #define REG_MPDDRC_OCMS_KEY2                       (0xF0010040U) /**< \brief (MPDDRC) MPDDRC OCMS KEY2 Register */\r
+  #define REG_MPDDRC_CONF_ARBITER                    (0xF0010044U) /**< \brief (MPDDRC) MPDDRC Configuration Arbiter */\r
+  #define REG_MPDDRC_TIMEOUT                         (0xF0010048U) /**< \brief (MPDDRC) MPDDRC Time-out Port 0/1/2/3 */\r
+  #define REG_MPDDRC_REQ_PORT_0123                   (0xF001004CU) /**< \brief (MPDDRC) MPDDRC Time-out Request Port 0/1/2/3 */\r
+  #define REG_MPDDRC_REQ_PORT_4567                   (0xF0010050U) /**< \brief (MPDDRC) MPDDRC Time-out Request Port 4/5/6/7 */\r
+  #define REG_MPDDRC_BDW_PORT_0123                   (0xF0010054U) /**< \brief (MPDDRC) MPDDRC Bandwidth Port 0/1/2/3 */\r
+  #define REG_MPDDRC_BDW_PORT_4567                   (0xF0010058U) /**< \brief (MPDDRC) MPDDRC Bandwidth Port 4/5/6/7 */\r
+  #define REG_MPDDRC_RD_DATA_PATH                    (0xF001005CU) /**< \brief (MPDDRC) MPDDRC_READ_DATA_PATH */\r
+  #define REG_MPDDRC_SAW                             (0xF0010060U) /**< \brief (MPDDRC) MPDDRC Smart Adaptation Wrapper 0 Register */\r
+  #define REG_MPDDRC_WPMR                            (0xF00100E4U) /**< \brief (MPDDRC) MPDDRC Write Protect Control Register */\r
+  #define REG_MPDDRC_WPSR                            (0xF00100E8U) /**< \brief (MPDDRC) MPDDRC Write Protect Status Register */\r
+  #define REG_MPDDRC_DLL_OS                          (0xF0010100U) /**< \brief (MPDDRC) MPDDRC DLL Offset Selection Register */\r
+  #define REG_MPDDRC_DLL_MO                          (0xF0010104U) /**< \brief (MPDDRC) MPDDRC DLL MASTER Offset Register */\r
+  #define REG_MPDDRC_DLL_SO0                         (0xF0010108U) /**< \brief (MPDDRC) MPDDRC DLL SLAVE Offset 0 Register */\r
+  #define REG_MPDDRC_DLL_SO1                         (0xF001010CU) /**< \brief (MPDDRC) MPDDRC DLL SLAVE Offset 1 Register */\r
+  #define REG_MPDDRC_DLL_WRO                         (0xF0010110U) /**< \brief (MPDDRC) MPDDRC DLL CLKWR Offset Register */\r
+  #define REG_MPDDRC_DLL_ADO                         (0xF0010114U) /**< \brief (MPDDRC) MPDDRC DLL CLKAD Offset Register */\r
+  #define REG_MPDDRC_DLL_SM                          (0xF0010118U) /**< \brief (MPDDRC) MPDDRC DLL Status MASTER0 Register */\r
+  #define REG_MPDDRC_DLL_SSL                         (0xF0010128U) /**< \brief (MPDDRC) MPDDRC DLL Status SLAVE0 Register */\r
+  #define REG_MPDDRC_DLL_SWR                         (0xF0010148U) /**< \brief (MPDDRC) MPDDRC DLL Status CLKWR0 Register */\r
+  #define REG_MPDDRC_DLL_SAD                         (0xF0010158U) /**< \brief (MPDDRC) MPDDRC DLL Status CLKAD Register */\r
+#else\r
+  #define REG_MPDDRC_MR             (*(__IO uint32_t*)0xF0010000U) /**< \brief (MPDDRC) MPDDRC Mode Register */\r
+  #define REG_MPDDRC_RTR            (*(__IO uint32_t*)0xF0010004U) /**< \brief (MPDDRC) MPDDRC Refresh Timer Register */\r
+  #define REG_MPDDRC_CR             (*(__IO uint32_t*)0xF0010008U) /**< \brief (MPDDRC) MPDDRC Configuration Register */\r
+  #define REG_MPDDRC_TPR0           (*(__IO uint32_t*)0xF001000CU) /**< \brief (MPDDRC) MPDDRC Timing Parameter 0 Register */\r
+  #define REG_MPDDRC_TPR1           (*(__IO uint32_t*)0xF0010010U) /**< \brief (MPDDRC) MPDDRC Timing Parameter 1 Register */\r
+  #define REG_MPDDRC_TPR2           (*(__IO uint32_t*)0xF0010014U) /**< \brief (MPDDRC) MPDDRC Timing Parameter 2 Register */\r
+  #define REG_MPDDRC_LPR            (*(__IO uint32_t*)0xF001001CU) /**< \brief (MPDDRC) MPDDRC Low-power Register */\r
+  #define REG_MPDDRC_MD             (*(__IO uint32_t*)0xF0010020U) /**< \brief (MPDDRC) MPDDRC Memory Device Register */\r
+  #define REG_MPDDRC_LPDDR2_LPR     (*(__IO uint32_t*)0xF0010028U) /**< \brief (MPDDRC) MPDDRC LPDDR2 Low-power Register */\r
+  #define REG_MPDDRC_LPDDR2_CAL_MR4 (*(__IO uint32_t*)0xF001002CU) /**< \brief (MPDDRC) MPDDRC LPDDR2 Calibration and MR4 Register */\r
+  #define REG_MPDDRC_LPDDR2_TIM_CAL (*(__IO uint32_t*)0xF0010030U) /**< \brief (MPDDRC) MPDDRC LPDDR2 Timing Calibration Register */\r
+  #define REG_MPDDRC_IO_CALIBR      (*(__IO uint32_t*)0xF0010034U) /**< \brief (MPDDRC) MPDDRC IO Calibration */\r
+  #define REG_MPDDRC_OCMS           (*(__IO uint32_t*)0xF0010038U) /**< \brief (MPDDRC) MPDDRC OCMS Register */\r
+  #define REG_MPDDRC_OCMS_KEY1      (*(__O  uint32_t*)0xF001003CU) /**< \brief (MPDDRC) MPDDRC OCMS KEY1 Register */\r
+  #define REG_MPDDRC_OCMS_KEY2      (*(__O  uint32_t*)0xF0010040U) /**< \brief (MPDDRC) MPDDRC OCMS KEY2 Register */\r
+  #define REG_MPDDRC_CONF_ARBITER   (*(__IO uint32_t*)0xF0010044U) /**< \brief (MPDDRC) MPDDRC Configuration Arbiter */\r
+  #define REG_MPDDRC_TIMEOUT        (*(__IO uint32_t*)0xF0010048U) /**< \brief (MPDDRC) MPDDRC Time-out Port 0/1/2/3 */\r
+  #define REG_MPDDRC_REQ_PORT_0123  (*(__IO uint32_t*)0xF001004CU) /**< \brief (MPDDRC) MPDDRC Time-out Request Port 0/1/2/3 */\r
+  #define REG_MPDDRC_REQ_PORT_4567  (*(__IO uint32_t*)0xF0010050U) /**< \brief (MPDDRC) MPDDRC Time-out Request Port 4/5/6/7 */\r
+  #define REG_MPDDRC_BDW_PORT_0123  (*(__I  uint32_t*)0xF0010054U) /**< \brief (MPDDRC) MPDDRC Bandwidth Port 0/1/2/3 */\r
+  #define REG_MPDDRC_BDW_PORT_4567  (*(__I  uint32_t*)0xF0010058U) /**< \brief (MPDDRC) MPDDRC Bandwidth Port 4/5/6/7 */\r
+  #define REG_MPDDRC_RD_DATA_PATH   (*(__IO uint32_t*)0xF001005CU) /**< \brief (MPDDRC) MPDDRC_READ_DATA_PATH */\r
+  #define REG_MPDDRC_SAW            (*(__IO uint32_t*)0xF0010060U) /**< \brief (MPDDRC) MPDDRC Smart Adaptation Wrapper 0 Register */\r
+  #define REG_MPDDRC_WPMR           (*(__IO uint32_t*)0xF00100E4U) /**< \brief (MPDDRC) MPDDRC Write Protect Control Register */\r
+  #define REG_MPDDRC_WPSR           (*(__I  uint32_t*)0xF00100E8U) /**< \brief (MPDDRC) MPDDRC Write Protect Status Register */\r
+  #define REG_MPDDRC_DLL_OS         (*(__IO uint32_t*)0xF0010100U) /**< \brief (MPDDRC) MPDDRC DLL Offset Selection Register */\r
+  #define REG_MPDDRC_DLL_MO         (*(__IO uint32_t*)0xF0010104U) /**< \brief (MPDDRC) MPDDRC DLL MASTER Offset Register */\r
+  #define REG_MPDDRC_DLL_SO0        (*(__IO uint32_t*)0xF0010108U) /**< \brief (MPDDRC) MPDDRC DLL SLAVE Offset 0 Register */\r
+  #define REG_MPDDRC_DLL_SO1        (*(__IO uint32_t*)0xF001010CU) /**< \brief (MPDDRC) MPDDRC DLL SLAVE Offset 1 Register */\r
+  #define REG_MPDDRC_DLL_WRO        (*(__IO uint32_t*)0xF0010110U) /**< \brief (MPDDRC) MPDDRC DLL CLKWR Offset Register */\r
+  #define REG_MPDDRC_DLL_ADO        (*(__IO uint32_t*)0xF0010114U) /**< \brief (MPDDRC) MPDDRC DLL CLKAD Offset Register */\r
+  #define REG_MPDDRC_DLL_SM         (*(__I  uint32_t*)0xF0010118U) /**< \brief (MPDDRC) MPDDRC DLL Status MASTER0 Register */\r
+  #define REG_MPDDRC_DLL_SSL        (*(__I  uint32_t*)0xF0010128U) /**< \brief (MPDDRC) MPDDRC DLL Status SLAVE0 Register */\r
+  #define REG_MPDDRC_DLL_SWR        (*(__I  uint32_t*)0xF0010148U) /**< \brief (MPDDRC) MPDDRC DLL Status CLKWR0 Register */\r
+  #define REG_MPDDRC_DLL_SAD        (*(__I  uint32_t*)0xF0010158U) /**< \brief (MPDDRC) MPDDRC DLL Status CLKAD Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for XDMAC0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_XDMAC0_GTYPE                      (0xF0014000U) /**< \brief (XDMAC0) Global Type register */\r
+  #define REG_XDMAC0_GCFG                       (0xF0014004U) /**< \brief (XDMAC0) Global Configuration Register */\r
+  #define REG_XDMAC0_GWAC                       (0xF0014008U) /**< \brief (XDMAC0) Global Weighted Arbiter Configuration Register */\r
+  #define REG_XDMAC0_GIE                        (0xF001400CU) /**< \brief (XDMAC0) Global Interrupt Enable Register */\r
+  #define REG_XDMAC0_GID                        (0xF0014010U) /**< \brief (XDMAC0) Global Interrupt Disable Register */\r
+  #define REG_XDMAC0_GIM                        (0xF0014014U) /**< \brief (XDMAC0) Global Interrupt Mask Register */\r
+  #define REG_XDMAC0_GIS                        (0xF0014018U) /**< \brief (XDMAC0) Global Interrupt Status Register */\r
+  #define REG_XDMAC0_GE                         (0xF001401CU) /**< \brief (XDMAC0) Global Channel Enable Register */\r
+  #define REG_XDMAC0_GD                         (0xF0014020U) /**< \brief (XDMAC0) Global Channel Disable Register */\r
+  #define REG_XDMAC0_GS                         (0xF0014024U) /**< \brief (XDMAC0) Global Channel Status Register */\r
+  #define REG_XDMAC0_GRS                        (0xF0014028U) /**< \brief (XDMAC0) Global Channel Read Suspend Register */\r
+  #define REG_XDMAC0_GWS                        (0xF001402CU) /**< \brief (XDMAC0) Global Channel Write Suspend Register */\r
+  #define REG_XDMAC0_GRWS                       (0xF0014030U) /**< \brief (XDMAC0) Global Channel Read Write Suspend Register */\r
+  #define REG_XDMAC0_GRWR                       (0xF0014034U) /**< \brief (XDMAC0) Global Channel Read Write Resume Register */\r
+  #define REG_XDMAC0_GSWR                       (0xF0014038U) /**< \brief (XDMAC0) Global Channel Software Request Register */\r
+  #define REG_XDMAC0_GSWS                       (0xF001403CU) /**< \brief (XDMAC0) Global Channel Software Request Status Register */\r
+  #define REG_XDMAC0_GSWF                       (0xF0014040U) /**< \brief (XDMAC0) Global Channel Software Flush Request Register */\r
+  #define REG_XDMAC0_CIE0                       (0xF0014050U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 0) */\r
+  #define REG_XDMAC0_CID0                       (0xF0014054U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 0) */\r
+  #define REG_XDMAC0_CIM0                       (0xF0014058U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 0) */\r
+  #define REG_XDMAC0_CIS0                       (0xF001405CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 0) */\r
+  #define REG_XDMAC0_CSA0                       (0xF0014060U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 0) */\r
+  #define REG_XDMAC0_CDA0                       (0xF0014064U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 0) */\r
+  #define REG_XDMAC0_CNDA0                      (0xF0014068U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 0) */\r
+  #define REG_XDMAC0_CNDC0                      (0xF001406CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 0) */\r
+  #define REG_XDMAC0_CUBC0                      (0xF0014070U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 0) */\r
+  #define REG_XDMAC0_CBC0                       (0xF0014074U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 0) */\r
+  #define REG_XDMAC0_CC0                        (0xF0014078U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 0) */\r
+  #define REG_XDMAC0_CDS_MSP0                   (0xF001407CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 0) */\r
+  #define REG_XDMAC0_CSUS0                      (0xF0014080U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC0_CDUS0                      (0xF0014084U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC0_CIE1                       (0xF0014090U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 1) */\r
+  #define REG_XDMAC0_CID1                       (0xF0014094U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 1) */\r
+  #define REG_XDMAC0_CIM1                       (0xF0014098U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 1) */\r
+  #define REG_XDMAC0_CIS1                       (0xF001409CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 1) */\r
+  #define REG_XDMAC0_CSA1                       (0xF00140A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 1) */\r
+  #define REG_XDMAC0_CDA1                       (0xF00140A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 1) */\r
+  #define REG_XDMAC0_CNDA1                      (0xF00140A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 1) */\r
+  #define REG_XDMAC0_CNDC1                      (0xF00140ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 1) */\r
+  #define REG_XDMAC0_CUBC1                      (0xF00140B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 1) */\r
+  #define REG_XDMAC0_CBC1                       (0xF00140B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 1) */\r
+  #define REG_XDMAC0_CC1                        (0xF00140B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 1) */\r
+  #define REG_XDMAC0_CDS_MSP1                   (0xF00140BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 1) */\r
+  #define REG_XDMAC0_CSUS1                      (0xF00140C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC0_CDUS1                      (0xF00140C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC0_CIE2                       (0xF00140D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 2) */\r
+  #define REG_XDMAC0_CID2                       (0xF00140D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 2) */\r
+  #define REG_XDMAC0_CIM2                       (0xF00140D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 2) */\r
+  #define REG_XDMAC0_CIS2                       (0xF00140DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 2) */\r
+  #define REG_XDMAC0_CSA2                       (0xF00140E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 2) */\r
+  #define REG_XDMAC0_CDA2                       (0xF00140E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 2) */\r
+  #define REG_XDMAC0_CNDA2                      (0xF00140E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 2) */\r
+  #define REG_XDMAC0_CNDC2                      (0xF00140ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 2) */\r
+  #define REG_XDMAC0_CUBC2                      (0xF00140F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 2) */\r
+  #define REG_XDMAC0_CBC2                       (0xF00140F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 2) */\r
+  #define REG_XDMAC0_CC2                        (0xF00140F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 2) */\r
+  #define REG_XDMAC0_CDS_MSP2                   (0xF00140FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 2) */\r
+  #define REG_XDMAC0_CSUS2                      (0xF0014100U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC0_CDUS2                      (0xF0014104U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC0_CIE3                       (0xF0014110U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 3) */\r
+  #define REG_XDMAC0_CID3                       (0xF0014114U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 3) */\r
+  #define REG_XDMAC0_CIM3                       (0xF0014118U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 3) */\r
+  #define REG_XDMAC0_CIS3                       (0xF001411CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 3) */\r
+  #define REG_XDMAC0_CSA3                       (0xF0014120U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 3) */\r
+  #define REG_XDMAC0_CDA3                       (0xF0014124U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 3) */\r
+  #define REG_XDMAC0_CNDA3                      (0xF0014128U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 3) */\r
+  #define REG_XDMAC0_CNDC3                      (0xF001412CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 3) */\r
+  #define REG_XDMAC0_CUBC3                      (0xF0014130U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 3) */\r
+  #define REG_XDMAC0_CBC3                       (0xF0014134U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 3) */\r
+  #define REG_XDMAC0_CC3                        (0xF0014138U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 3) */\r
+  #define REG_XDMAC0_CDS_MSP3                   (0xF001413CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 3) */\r
+  #define REG_XDMAC0_CSUS3                      (0xF0014140U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC0_CDUS3                      (0xF0014144U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC0_CIE4                       (0xF0014150U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 4) */\r
+  #define REG_XDMAC0_CID4                       (0xF0014154U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 4) */\r
+  #define REG_XDMAC0_CIM4                       (0xF0014158U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 4) */\r
+  #define REG_XDMAC0_CIS4                       (0xF001415CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 4) */\r
+  #define REG_XDMAC0_CSA4                       (0xF0014160U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 4) */\r
+  #define REG_XDMAC0_CDA4                       (0xF0014164U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 4) */\r
+  #define REG_XDMAC0_CNDA4                      (0xF0014168U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 4) */\r
+  #define REG_XDMAC0_CNDC4                      (0xF001416CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 4) */\r
+  #define REG_XDMAC0_CUBC4                      (0xF0014170U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 4) */\r
+  #define REG_XDMAC0_CBC4                       (0xF0014174U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 4) */\r
+  #define REG_XDMAC0_CC4                        (0xF0014178U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 4) */\r
+  #define REG_XDMAC0_CDS_MSP4                   (0xF001417CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 4) */\r
+  #define REG_XDMAC0_CSUS4                      (0xF0014180U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC0_CDUS4                      (0xF0014184U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC0_CIE5                       (0xF0014190U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 5) */\r
+  #define REG_XDMAC0_CID5                       (0xF0014194U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 5) */\r
+  #define REG_XDMAC0_CIM5                       (0xF0014198U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 5) */\r
+  #define REG_XDMAC0_CIS5                       (0xF001419CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 5) */\r
+  #define REG_XDMAC0_CSA5                       (0xF00141A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 5) */\r
+  #define REG_XDMAC0_CDA5                       (0xF00141A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 5) */\r
+  #define REG_XDMAC0_CNDA5                      (0xF00141A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 5) */\r
+  #define REG_XDMAC0_CNDC5                      (0xF00141ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 5) */\r
+  #define REG_XDMAC0_CUBC5                      (0xF00141B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 5) */\r
+  #define REG_XDMAC0_CBC5                       (0xF00141B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 5) */\r
+  #define REG_XDMAC0_CC5                        (0xF00141B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 5) */\r
+  #define REG_XDMAC0_CDS_MSP5                   (0xF00141BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 5) */\r
+  #define REG_XDMAC0_CSUS5                      (0xF00141C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC0_CDUS5                      (0xF00141C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC0_CIE6                       (0xF00141D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 6) */\r
+  #define REG_XDMAC0_CID6                       (0xF00141D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 6) */\r
+  #define REG_XDMAC0_CIM6                       (0xF00141D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 6) */\r
+  #define REG_XDMAC0_CIS6                       (0xF00141DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 6) */\r
+  #define REG_XDMAC0_CSA6                       (0xF00141E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 6) */\r
+  #define REG_XDMAC0_CDA6                       (0xF00141E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 6) */\r
+  #define REG_XDMAC0_CNDA6                      (0xF00141E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 6) */\r
+  #define REG_XDMAC0_CNDC6                      (0xF00141ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 6) */\r
+  #define REG_XDMAC0_CUBC6                      (0xF00141F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 6) */\r
+  #define REG_XDMAC0_CBC6                       (0xF00141F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 6) */\r
+  #define REG_XDMAC0_CC6                        (0xF00141F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 6) */\r
+  #define REG_XDMAC0_CDS_MSP6                   (0xF00141FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 6) */\r
+  #define REG_XDMAC0_CSUS6                      (0xF0014200U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC0_CDUS6                      (0xF0014204U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC0_CIE7                       (0xF0014210U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 7) */\r
+  #define REG_XDMAC0_CID7                       (0xF0014214U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 7) */\r
+  #define REG_XDMAC0_CIM7                       (0xF0014218U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 7) */\r
+  #define REG_XDMAC0_CIS7                       (0xF001421CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 7) */\r
+  #define REG_XDMAC0_CSA7                       (0xF0014220U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 7) */\r
+  #define REG_XDMAC0_CDA7                       (0xF0014224U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 7) */\r
+  #define REG_XDMAC0_CNDA7                      (0xF0014228U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 7) */\r
+  #define REG_XDMAC0_CNDC7                      (0xF001422CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 7) */\r
+  #define REG_XDMAC0_CUBC7                      (0xF0014230U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 7) */\r
+  #define REG_XDMAC0_CBC7                       (0xF0014234U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 7) */\r
+  #define REG_XDMAC0_CC7                        (0xF0014238U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 7) */\r
+  #define REG_XDMAC0_CDS_MSP7                   (0xF001423CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 7) */\r
+  #define REG_XDMAC0_CSUS7                      (0xF0014240U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC0_CDUS7                      (0xF0014244U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC0_CIE8                       (0xF0014250U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 8) */\r
+  #define REG_XDMAC0_CID8                       (0xF0014254U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 8) */\r
+  #define REG_XDMAC0_CIM8                       (0xF0014258U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 8) */\r
+  #define REG_XDMAC0_CIS8                       (0xF001425CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 8) */\r
+  #define REG_XDMAC0_CSA8                       (0xF0014260U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 8) */\r
+  #define REG_XDMAC0_CDA8                       (0xF0014264U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 8) */\r
+  #define REG_XDMAC0_CNDA8                      (0xF0014268U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 8) */\r
+  #define REG_XDMAC0_CNDC8                      (0xF001426CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 8) */\r
+  #define REG_XDMAC0_CUBC8                      (0xF0014270U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 8) */\r
+  #define REG_XDMAC0_CBC8                       (0xF0014274U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 8) */\r
+  #define REG_XDMAC0_CC8                        (0xF0014278U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 8) */\r
+  #define REG_XDMAC0_CDS_MSP8                   (0xF001427CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 8) */\r
+  #define REG_XDMAC0_CSUS8                      (0xF0014280U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC0_CDUS8                      (0xF0014284U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC0_CIE9                       (0xF0014290U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 9) */\r
+  #define REG_XDMAC0_CID9                       (0xF0014294U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 9) */\r
+  #define REG_XDMAC0_CIM9                       (0xF0014298U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 9) */\r
+  #define REG_XDMAC0_CIS9                       (0xF001429CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 9) */\r
+  #define REG_XDMAC0_CSA9                       (0xF00142A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 9) */\r
+  #define REG_XDMAC0_CDA9                       (0xF00142A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 9) */\r
+  #define REG_XDMAC0_CNDA9                      (0xF00142A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 9) */\r
+  #define REG_XDMAC0_CNDC9                      (0xF00142ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 9) */\r
+  #define REG_XDMAC0_CUBC9                      (0xF00142B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 9) */\r
+  #define REG_XDMAC0_CBC9                       (0xF00142B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 9) */\r
+  #define REG_XDMAC0_CC9                        (0xF00142B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 9) */\r
+  #define REG_XDMAC0_CDS_MSP9                   (0xF00142BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 9) */\r
+  #define REG_XDMAC0_CSUS9                      (0xF00142C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC0_CDUS9                      (0xF00142C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC0_CIE10                      (0xF00142D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 10) */\r
+  #define REG_XDMAC0_CID10                      (0xF00142D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 10) */\r
+  #define REG_XDMAC0_CIM10                      (0xF00142D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 10) */\r
+  #define REG_XDMAC0_CIS10                      (0xF00142DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 10) */\r
+  #define REG_XDMAC0_CSA10                      (0xF00142E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 10) */\r
+  #define REG_XDMAC0_CDA10                      (0xF00142E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 10) */\r
+  #define REG_XDMAC0_CNDA10                     (0xF00142E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 10) */\r
+  #define REG_XDMAC0_CNDC10                     (0xF00142ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 10) */\r
+  #define REG_XDMAC0_CUBC10                     (0xF00142F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 10) */\r
+  #define REG_XDMAC0_CBC10                      (0xF00142F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 10) */\r
+  #define REG_XDMAC0_CC10                       (0xF00142F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 10) */\r
+  #define REG_XDMAC0_CDS_MSP10                  (0xF00142FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 10) */\r
+  #define REG_XDMAC0_CSUS10                     (0xF0014300U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC0_CDUS10                     (0xF0014304U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC0_CIE11                      (0xF0014310U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 11) */\r
+  #define REG_XDMAC0_CID11                      (0xF0014314U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 11) */\r
+  #define REG_XDMAC0_CIM11                      (0xF0014318U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 11) */\r
+  #define REG_XDMAC0_CIS11                      (0xF001431CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 11) */\r
+  #define REG_XDMAC0_CSA11                      (0xF0014320U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 11) */\r
+  #define REG_XDMAC0_CDA11                      (0xF0014324U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 11) */\r
+  #define REG_XDMAC0_CNDA11                     (0xF0014328U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 11) */\r
+  #define REG_XDMAC0_CNDC11                     (0xF001432CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 11) */\r
+  #define REG_XDMAC0_CUBC11                     (0xF0014330U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 11) */\r
+  #define REG_XDMAC0_CBC11                      (0xF0014334U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 11) */\r
+  #define REG_XDMAC0_CC11                       (0xF0014338U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 11) */\r
+  #define REG_XDMAC0_CDS_MSP11                  (0xF001433CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 11) */\r
+  #define REG_XDMAC0_CSUS11                     (0xF0014340U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC0_CDUS11                     (0xF0014344U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC0_CIE12                      (0xF0014350U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 12) */\r
+  #define REG_XDMAC0_CID12                      (0xF0014354U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 12) */\r
+  #define REG_XDMAC0_CIM12                      (0xF0014358U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 12) */\r
+  #define REG_XDMAC0_CIS12                      (0xF001435CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 12) */\r
+  #define REG_XDMAC0_CSA12                      (0xF0014360U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 12) */\r
+  #define REG_XDMAC0_CDA12                      (0xF0014364U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 12) */\r
+  #define REG_XDMAC0_CNDA12                     (0xF0014368U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 12) */\r
+  #define REG_XDMAC0_CNDC12                     (0xF001436CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 12) */\r
+  #define REG_XDMAC0_CUBC12                     (0xF0014370U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 12) */\r
+  #define REG_XDMAC0_CBC12                      (0xF0014374U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 12) */\r
+  #define REG_XDMAC0_CC12                       (0xF0014378U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 12) */\r
+  #define REG_XDMAC0_CDS_MSP12                  (0xF001437CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 12) */\r
+  #define REG_XDMAC0_CSUS12                     (0xF0014380U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC0_CDUS12                     (0xF0014384U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC0_CIE13                      (0xF0014390U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 13) */\r
+  #define REG_XDMAC0_CID13                      (0xF0014394U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 13) */\r
+  #define REG_XDMAC0_CIM13                      (0xF0014398U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 13) */\r
+  #define REG_XDMAC0_CIS13                      (0xF001439CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 13) */\r
+  #define REG_XDMAC0_CSA13                      (0xF00143A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 13) */\r
+  #define REG_XDMAC0_CDA13                      (0xF00143A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 13) */\r
+  #define REG_XDMAC0_CNDA13                     (0xF00143A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 13) */\r
+  #define REG_XDMAC0_CNDC13                     (0xF00143ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 13) */\r
+  #define REG_XDMAC0_CUBC13                     (0xF00143B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 13) */\r
+  #define REG_XDMAC0_CBC13                      (0xF00143B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 13) */\r
+  #define REG_XDMAC0_CC13                       (0xF00143B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 13) */\r
+  #define REG_XDMAC0_CDS_MSP13                  (0xF00143BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 13) */\r
+  #define REG_XDMAC0_CSUS13                     (0xF00143C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC0_CDUS13                     (0xF00143C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC0_CIE14                      (0xF00143D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 14) */\r
+  #define REG_XDMAC0_CID14                      (0xF00143D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 14) */\r
+  #define REG_XDMAC0_CIM14                      (0xF00143D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 14) */\r
+  #define REG_XDMAC0_CIS14                      (0xF00143DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 14) */\r
+  #define REG_XDMAC0_CSA14                      (0xF00143E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 14) */\r
+  #define REG_XDMAC0_CDA14                      (0xF00143E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 14) */\r
+  #define REG_XDMAC0_CNDA14                     (0xF00143E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 14) */\r
+  #define REG_XDMAC0_CNDC14                     (0xF00143ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 14) */\r
+  #define REG_XDMAC0_CUBC14                     (0xF00143F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 14) */\r
+  #define REG_XDMAC0_CBC14                      (0xF00143F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 14) */\r
+  #define REG_XDMAC0_CC14                       (0xF00143F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 14) */\r
+  #define REG_XDMAC0_CDS_MSP14                  (0xF00143FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 14) */\r
+  #define REG_XDMAC0_CSUS14                     (0xF0014400U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC0_CDUS14                     (0xF0014404U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC0_CIE15                      (0xF0014410U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 15) */\r
+  #define REG_XDMAC0_CID15                      (0xF0014414U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 15) */\r
+  #define REG_XDMAC0_CIM15                      (0xF0014418U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 15) */\r
+  #define REG_XDMAC0_CIS15                      (0xF001441CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 15) */\r
+  #define REG_XDMAC0_CSA15                      (0xF0014420U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 15) */\r
+  #define REG_XDMAC0_CDA15                      (0xF0014424U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 15) */\r
+  #define REG_XDMAC0_CNDA15                     (0xF0014428U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 15) */\r
+  #define REG_XDMAC0_CNDC15                     (0xF001442CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 15) */\r
+  #define REG_XDMAC0_CUBC15                     (0xF0014430U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 15) */\r
+  #define REG_XDMAC0_CBC15                      (0xF0014434U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 15) */\r
+  #define REG_XDMAC0_CC15                       (0xF0014438U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 15) */\r
+  #define REG_XDMAC0_CDS_MSP15                  (0xF001443CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 15) */\r
+  #define REG_XDMAC0_CSUS15                     (0xF0014440U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 15) */\r
+  #define REG_XDMAC0_CDUS15                     (0xF0014444U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 15) */\r
+#else\r
+  #define REG_XDMAC0_GTYPE     (*(__IO uint32_t*)0xF0014000U) /**< \brief (XDMAC0) Global Type register */\r
+  #define REG_XDMAC0_GCFG      (*(__I  uint32_t*)0xF0014004U) /**< \brief (XDMAC0) Global Configuration Register */\r
+  #define REG_XDMAC0_GWAC      (*(__IO uint32_t*)0xF0014008U) /**< \brief (XDMAC0) Global Weighted Arbiter Configuration Register */\r
+  #define REG_XDMAC0_GIE       (*(__O  uint32_t*)0xF001400CU) /**< \brief (XDMAC0) Global Interrupt Enable Register */\r
+  #define REG_XDMAC0_GID       (*(__O  uint32_t*)0xF0014010U) /**< \brief (XDMAC0) Global Interrupt Disable Register */\r
+  #define REG_XDMAC0_GIM       (*(__I  uint32_t*)0xF0014014U) /**< \brief (XDMAC0) Global Interrupt Mask Register */\r
+  #define REG_XDMAC0_GIS       (*(__I  uint32_t*)0xF0014018U) /**< \brief (XDMAC0) Global Interrupt Status Register */\r
+  #define REG_XDMAC0_GE        (*(__O  uint32_t*)0xF001401CU) /**< \brief (XDMAC0) Global Channel Enable Register */\r
+  #define REG_XDMAC0_GD        (*(__O  uint32_t*)0xF0014020U) /**< \brief (XDMAC0) Global Channel Disable Register */\r
+  #define REG_XDMAC0_GS        (*(__I  uint32_t*)0xF0014024U) /**< \brief (XDMAC0) Global Channel Status Register */\r
+  #define REG_XDMAC0_GRS       (*(__IO uint32_t*)0xF0014028U) /**< \brief (XDMAC0) Global Channel Read Suspend Register */\r
+  #define REG_XDMAC0_GWS       (*(__IO uint32_t*)0xF001402CU) /**< \brief (XDMAC0) Global Channel Write Suspend Register */\r
+  #define REG_XDMAC0_GRWS      (*(__O  uint32_t*)0xF0014030U) /**< \brief (XDMAC0) Global Channel Read Write Suspend Register */\r
+  #define REG_XDMAC0_GRWR      (*(__O  uint32_t*)0xF0014034U) /**< \brief (XDMAC0) Global Channel Read Write Resume Register */\r
+  #define REG_XDMAC0_GSWR      (*(__O  uint32_t*)0xF0014038U) /**< \brief (XDMAC0) Global Channel Software Request Register */\r
+  #define REG_XDMAC0_GSWS      (*(__I  uint32_t*)0xF001403CU) /**< \brief (XDMAC0) Global Channel Software Request Status Register */\r
+  #define REG_XDMAC0_GSWF      (*(__O  uint32_t*)0xF0014040U) /**< \brief (XDMAC0) Global Channel Software Flush Request Register */\r
+  #define REG_XDMAC0_CIE0      (*(__O  uint32_t*)0xF0014050U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 0) */\r
+  #define REG_XDMAC0_CID0      (*(__O  uint32_t*)0xF0014054U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 0) */\r
+  #define REG_XDMAC0_CIM0      (*(__O  uint32_t*)0xF0014058U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 0) */\r
+  #define REG_XDMAC0_CIS0      (*(__I  uint32_t*)0xF001405CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 0) */\r
+  #define REG_XDMAC0_CSA0      (*(__IO uint32_t*)0xF0014060U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 0) */\r
+  #define REG_XDMAC0_CDA0      (*(__IO uint32_t*)0xF0014064U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 0) */\r
+  #define REG_XDMAC0_CNDA0     (*(__IO uint32_t*)0xF0014068U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 0) */\r
+  #define REG_XDMAC0_CNDC0     (*(__IO uint32_t*)0xF001406CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 0) */\r
+  #define REG_XDMAC0_CUBC0     (*(__IO uint32_t*)0xF0014070U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 0) */\r
+  #define REG_XDMAC0_CBC0      (*(__IO uint32_t*)0xF0014074U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 0) */\r
+  #define REG_XDMAC0_CC0       (*(__IO uint32_t*)0xF0014078U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 0) */\r
+  #define REG_XDMAC0_CDS_MSP0  (*(__IO uint32_t*)0xF001407CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 0) */\r
+  #define REG_XDMAC0_CSUS0     (*(__IO uint32_t*)0xF0014080U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC0_CDUS0     (*(__IO uint32_t*)0xF0014084U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 0) */\r
+  #define REG_XDMAC0_CIE1      (*(__O  uint32_t*)0xF0014090U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 1) */\r
+  #define REG_XDMAC0_CID1      (*(__O  uint32_t*)0xF0014094U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 1) */\r
+  #define REG_XDMAC0_CIM1      (*(__O  uint32_t*)0xF0014098U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 1) */\r
+  #define REG_XDMAC0_CIS1      (*(__I  uint32_t*)0xF001409CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 1) */\r
+  #define REG_XDMAC0_CSA1      (*(__IO uint32_t*)0xF00140A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 1) */\r
+  #define REG_XDMAC0_CDA1      (*(__IO uint32_t*)0xF00140A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 1) */\r
+  #define REG_XDMAC0_CNDA1     (*(__IO uint32_t*)0xF00140A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 1) */\r
+  #define REG_XDMAC0_CNDC1     (*(__IO uint32_t*)0xF00140ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 1) */\r
+  #define REG_XDMAC0_CUBC1     (*(__IO uint32_t*)0xF00140B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 1) */\r
+  #define REG_XDMAC0_CBC1      (*(__IO uint32_t*)0xF00140B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 1) */\r
+  #define REG_XDMAC0_CC1       (*(__IO uint32_t*)0xF00140B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 1) */\r
+  #define REG_XDMAC0_CDS_MSP1  (*(__IO uint32_t*)0xF00140BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 1) */\r
+  #define REG_XDMAC0_CSUS1     (*(__IO uint32_t*)0xF00140C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC0_CDUS1     (*(__IO uint32_t*)0xF00140C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 1) */\r
+  #define REG_XDMAC0_CIE2      (*(__O  uint32_t*)0xF00140D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 2) */\r
+  #define REG_XDMAC0_CID2      (*(__O  uint32_t*)0xF00140D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 2) */\r
+  #define REG_XDMAC0_CIM2      (*(__O  uint32_t*)0xF00140D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 2) */\r
+  #define REG_XDMAC0_CIS2      (*(__I  uint32_t*)0xF00140DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 2) */\r
+  #define REG_XDMAC0_CSA2      (*(__IO uint32_t*)0xF00140E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 2) */\r
+  #define REG_XDMAC0_CDA2      (*(__IO uint32_t*)0xF00140E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 2) */\r
+  #define REG_XDMAC0_CNDA2     (*(__IO uint32_t*)0xF00140E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 2) */\r
+  #define REG_XDMAC0_CNDC2     (*(__IO uint32_t*)0xF00140ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 2) */\r
+  #define REG_XDMAC0_CUBC2     (*(__IO uint32_t*)0xF00140F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 2) */\r
+  #define REG_XDMAC0_CBC2      (*(__IO uint32_t*)0xF00140F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 2) */\r
+  #define REG_XDMAC0_CC2       (*(__IO uint32_t*)0xF00140F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 2) */\r
+  #define REG_XDMAC0_CDS_MSP2  (*(__IO uint32_t*)0xF00140FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 2) */\r
+  #define REG_XDMAC0_CSUS2     (*(__IO uint32_t*)0xF0014100U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC0_CDUS2     (*(__IO uint32_t*)0xF0014104U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 2) */\r
+  #define REG_XDMAC0_CIE3      (*(__O  uint32_t*)0xF0014110U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 3) */\r
+  #define REG_XDMAC0_CID3      (*(__O  uint32_t*)0xF0014114U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 3) */\r
+  #define REG_XDMAC0_CIM3      (*(__O  uint32_t*)0xF0014118U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 3) */\r
+  #define REG_XDMAC0_CIS3      (*(__I  uint32_t*)0xF001411CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 3) */\r
+  #define REG_XDMAC0_CSA3      (*(__IO uint32_t*)0xF0014120U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 3) */\r
+  #define REG_XDMAC0_CDA3      (*(__IO uint32_t*)0xF0014124U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 3) */\r
+  #define REG_XDMAC0_CNDA3     (*(__IO uint32_t*)0xF0014128U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 3) */\r
+  #define REG_XDMAC0_CNDC3     (*(__IO uint32_t*)0xF001412CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 3) */\r
+  #define REG_XDMAC0_CUBC3     (*(__IO uint32_t*)0xF0014130U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 3) */\r
+  #define REG_XDMAC0_CBC3      (*(__IO uint32_t*)0xF0014134U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 3) */\r
+  #define REG_XDMAC0_CC3       (*(__IO uint32_t*)0xF0014138U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 3) */\r
+  #define REG_XDMAC0_CDS_MSP3  (*(__IO uint32_t*)0xF001413CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 3) */\r
+  #define REG_XDMAC0_CSUS3     (*(__IO uint32_t*)0xF0014140U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC0_CDUS3     (*(__IO uint32_t*)0xF0014144U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 3) */\r
+  #define REG_XDMAC0_CIE4      (*(__O  uint32_t*)0xF0014150U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 4) */\r
+  #define REG_XDMAC0_CID4      (*(__O  uint32_t*)0xF0014154U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 4) */\r
+  #define REG_XDMAC0_CIM4      (*(__O  uint32_t*)0xF0014158U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 4) */\r
+  #define REG_XDMAC0_CIS4      (*(__I  uint32_t*)0xF001415CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 4) */\r
+  #define REG_XDMAC0_CSA4      (*(__IO uint32_t*)0xF0014160U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 4) */\r
+  #define REG_XDMAC0_CDA4      (*(__IO uint32_t*)0xF0014164U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 4) */\r
+  #define REG_XDMAC0_CNDA4     (*(__IO uint32_t*)0xF0014168U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 4) */\r
+  #define REG_XDMAC0_CNDC4     (*(__IO uint32_t*)0xF001416CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 4) */\r
+  #define REG_XDMAC0_CUBC4     (*(__IO uint32_t*)0xF0014170U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 4) */\r
+  #define REG_XDMAC0_CBC4      (*(__IO uint32_t*)0xF0014174U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 4) */\r
+  #define REG_XDMAC0_CC4       (*(__IO uint32_t*)0xF0014178U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 4) */\r
+  #define REG_XDMAC0_CDS_MSP4  (*(__IO uint32_t*)0xF001417CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 4) */\r
+  #define REG_XDMAC0_CSUS4     (*(__IO uint32_t*)0xF0014180U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC0_CDUS4     (*(__IO uint32_t*)0xF0014184U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 4) */\r
+  #define REG_XDMAC0_CIE5      (*(__O  uint32_t*)0xF0014190U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 5) */\r
+  #define REG_XDMAC0_CID5      (*(__O  uint32_t*)0xF0014194U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 5) */\r
+  #define REG_XDMAC0_CIM5      (*(__O  uint32_t*)0xF0014198U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 5) */\r
+  #define REG_XDMAC0_CIS5      (*(__I  uint32_t*)0xF001419CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 5) */\r
+  #define REG_XDMAC0_CSA5      (*(__IO uint32_t*)0xF00141A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 5) */\r
+  #define REG_XDMAC0_CDA5      (*(__IO uint32_t*)0xF00141A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 5) */\r
+  #define REG_XDMAC0_CNDA5     (*(__IO uint32_t*)0xF00141A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 5) */\r
+  #define REG_XDMAC0_CNDC5     (*(__IO uint32_t*)0xF00141ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 5) */\r
+  #define REG_XDMAC0_CUBC5     (*(__IO uint32_t*)0xF00141B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 5) */\r
+  #define REG_XDMAC0_CBC5      (*(__IO uint32_t*)0xF00141B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 5) */\r
+  #define REG_XDMAC0_CC5       (*(__IO uint32_t*)0xF00141B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 5) */\r
+  #define REG_XDMAC0_CDS_MSP5  (*(__IO uint32_t*)0xF00141BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 5) */\r
+  #define REG_XDMAC0_CSUS5     (*(__IO uint32_t*)0xF00141C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC0_CDUS5     (*(__IO uint32_t*)0xF00141C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 5) */\r
+  #define REG_XDMAC0_CIE6      (*(__O  uint32_t*)0xF00141D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 6) */\r
+  #define REG_XDMAC0_CID6      (*(__O  uint32_t*)0xF00141D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 6) */\r
+  #define REG_XDMAC0_CIM6      (*(__O  uint32_t*)0xF00141D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 6) */\r
+  #define REG_XDMAC0_CIS6      (*(__I  uint32_t*)0xF00141DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 6) */\r
+  #define REG_XDMAC0_CSA6      (*(__IO uint32_t*)0xF00141E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 6) */\r
+  #define REG_XDMAC0_CDA6      (*(__IO uint32_t*)0xF00141E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 6) */\r
+  #define REG_XDMAC0_CNDA6     (*(__IO uint32_t*)0xF00141E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 6) */\r
+  #define REG_XDMAC0_CNDC6     (*(__IO uint32_t*)0xF00141ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 6) */\r
+  #define REG_XDMAC0_CUBC6     (*(__IO uint32_t*)0xF00141F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 6) */\r
+  #define REG_XDMAC0_CBC6      (*(__IO uint32_t*)0xF00141F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 6) */\r
+  #define REG_XDMAC0_CC6       (*(__IO uint32_t*)0xF00141F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 6) */\r
+  #define REG_XDMAC0_CDS_MSP6  (*(__IO uint32_t*)0xF00141FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 6) */\r
+  #define REG_XDMAC0_CSUS6     (*(__IO uint32_t*)0xF0014200U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC0_CDUS6     (*(__IO uint32_t*)0xF0014204U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 6) */\r
+  #define REG_XDMAC0_CIE7      (*(__O  uint32_t*)0xF0014210U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 7) */\r
+  #define REG_XDMAC0_CID7      (*(__O  uint32_t*)0xF0014214U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 7) */\r
+  #define REG_XDMAC0_CIM7      (*(__O  uint32_t*)0xF0014218U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 7) */\r
+  #define REG_XDMAC0_CIS7      (*(__I  uint32_t*)0xF001421CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 7) */\r
+  #define REG_XDMAC0_CSA7      (*(__IO uint32_t*)0xF0014220U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 7) */\r
+  #define REG_XDMAC0_CDA7      (*(__IO uint32_t*)0xF0014224U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 7) */\r
+  #define REG_XDMAC0_CNDA7     (*(__IO uint32_t*)0xF0014228U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 7) */\r
+  #define REG_XDMAC0_CNDC7     (*(__IO uint32_t*)0xF001422CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 7) */\r
+  #define REG_XDMAC0_CUBC7     (*(__IO uint32_t*)0xF0014230U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 7) */\r
+  #define REG_XDMAC0_CBC7      (*(__IO uint32_t*)0xF0014234U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 7) */\r
+  #define REG_XDMAC0_CC7       (*(__IO uint32_t*)0xF0014238U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 7) */\r
+  #define REG_XDMAC0_CDS_MSP7  (*(__IO uint32_t*)0xF001423CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 7) */\r
+  #define REG_XDMAC0_CSUS7     (*(__IO uint32_t*)0xF0014240U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC0_CDUS7     (*(__IO uint32_t*)0xF0014244U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 7) */\r
+  #define REG_XDMAC0_CIE8      (*(__O  uint32_t*)0xF0014250U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 8) */\r
+  #define REG_XDMAC0_CID8      (*(__O  uint32_t*)0xF0014254U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 8) */\r
+  #define REG_XDMAC0_CIM8      (*(__O  uint32_t*)0xF0014258U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 8) */\r
+  #define REG_XDMAC0_CIS8      (*(__I  uint32_t*)0xF001425CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 8) */\r
+  #define REG_XDMAC0_CSA8      (*(__IO uint32_t*)0xF0014260U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 8) */\r
+  #define REG_XDMAC0_CDA8      (*(__IO uint32_t*)0xF0014264U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 8) */\r
+  #define REG_XDMAC0_CNDA8     (*(__IO uint32_t*)0xF0014268U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 8) */\r
+  #define REG_XDMAC0_CNDC8     (*(__IO uint32_t*)0xF001426CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 8) */\r
+  #define REG_XDMAC0_CUBC8     (*(__IO uint32_t*)0xF0014270U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 8) */\r
+  #define REG_XDMAC0_CBC8      (*(__IO uint32_t*)0xF0014274U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 8) */\r
+  #define REG_XDMAC0_CC8       (*(__IO uint32_t*)0xF0014278U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 8) */\r
+  #define REG_XDMAC0_CDS_MSP8  (*(__IO uint32_t*)0xF001427CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 8) */\r
+  #define REG_XDMAC0_CSUS8     (*(__IO uint32_t*)0xF0014280U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC0_CDUS8     (*(__IO uint32_t*)0xF0014284U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 8) */\r
+  #define REG_XDMAC0_CIE9      (*(__O  uint32_t*)0xF0014290U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 9) */\r
+  #define REG_XDMAC0_CID9      (*(__O  uint32_t*)0xF0014294U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 9) */\r
+  #define REG_XDMAC0_CIM9      (*(__O  uint32_t*)0xF0014298U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 9) */\r
+  #define REG_XDMAC0_CIS9      (*(__I  uint32_t*)0xF001429CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 9) */\r
+  #define REG_XDMAC0_CSA9      (*(__IO uint32_t*)0xF00142A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 9) */\r
+  #define REG_XDMAC0_CDA9      (*(__IO uint32_t*)0xF00142A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 9) */\r
+  #define REG_XDMAC0_CNDA9     (*(__IO uint32_t*)0xF00142A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 9) */\r
+  #define REG_XDMAC0_CNDC9     (*(__IO uint32_t*)0xF00142ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 9) */\r
+  #define REG_XDMAC0_CUBC9     (*(__IO uint32_t*)0xF00142B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 9) */\r
+  #define REG_XDMAC0_CBC9      (*(__IO uint32_t*)0xF00142B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 9) */\r
+  #define REG_XDMAC0_CC9       (*(__IO uint32_t*)0xF00142B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 9) */\r
+  #define REG_XDMAC0_CDS_MSP9  (*(__IO uint32_t*)0xF00142BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 9) */\r
+  #define REG_XDMAC0_CSUS9     (*(__IO uint32_t*)0xF00142C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC0_CDUS9     (*(__IO uint32_t*)0xF00142C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 9) */\r
+  #define REG_XDMAC0_CIE10     (*(__O  uint32_t*)0xF00142D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 10) */\r
+  #define REG_XDMAC0_CID10     (*(__O  uint32_t*)0xF00142D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 10) */\r
+  #define REG_XDMAC0_CIM10     (*(__O  uint32_t*)0xF00142D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 10) */\r
+  #define REG_XDMAC0_CIS10     (*(__I  uint32_t*)0xF00142DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 10) */\r
+  #define REG_XDMAC0_CSA10     (*(__IO uint32_t*)0xF00142E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 10) */\r
+  #define REG_XDMAC0_CDA10     (*(__IO uint32_t*)0xF00142E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 10) */\r
+  #define REG_XDMAC0_CNDA10    (*(__IO uint32_t*)0xF00142E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 10) */\r
+  #define REG_XDMAC0_CNDC10    (*(__IO uint32_t*)0xF00142ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 10) */\r
+  #define REG_XDMAC0_CUBC10    (*(__IO uint32_t*)0xF00142F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 10) */\r
+  #define REG_XDMAC0_CBC10     (*(__IO uint32_t*)0xF00142F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 10) */\r
+  #define REG_XDMAC0_CC10      (*(__IO uint32_t*)0xF00142F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 10) */\r
+  #define REG_XDMAC0_CDS_MSP10 (*(__IO uint32_t*)0xF00142FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 10) */\r
+  #define REG_XDMAC0_CSUS10    (*(__IO uint32_t*)0xF0014300U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC0_CDUS10    (*(__IO uint32_t*)0xF0014304U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 10) */\r
+  #define REG_XDMAC0_CIE11     (*(__O  uint32_t*)0xF0014310U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 11) */\r
+  #define REG_XDMAC0_CID11     (*(__O  uint32_t*)0xF0014314U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 11) */\r
+  #define REG_XDMAC0_CIM11     (*(__O  uint32_t*)0xF0014318U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 11) */\r
+  #define REG_XDMAC0_CIS11     (*(__I  uint32_t*)0xF001431CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 11) */\r
+  #define REG_XDMAC0_CSA11     (*(__IO uint32_t*)0xF0014320U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 11) */\r
+  #define REG_XDMAC0_CDA11     (*(__IO uint32_t*)0xF0014324U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 11) */\r
+  #define REG_XDMAC0_CNDA11    (*(__IO uint32_t*)0xF0014328U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 11) */\r
+  #define REG_XDMAC0_CNDC11    (*(__IO uint32_t*)0xF001432CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 11) */\r
+  #define REG_XDMAC0_CUBC11    (*(__IO uint32_t*)0xF0014330U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 11) */\r
+  #define REG_XDMAC0_CBC11     (*(__IO uint32_t*)0xF0014334U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 11) */\r
+  #define REG_XDMAC0_CC11      (*(__IO uint32_t*)0xF0014338U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 11) */\r
+  #define REG_XDMAC0_CDS_MSP11 (*(__IO uint32_t*)0xF001433CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 11) */\r
+  #define REG_XDMAC0_CSUS11    (*(__IO uint32_t*)0xF0014340U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC0_CDUS11    (*(__IO uint32_t*)0xF0014344U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 11) */\r
+  #define REG_XDMAC0_CIE12     (*(__O  uint32_t*)0xF0014350U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 12) */\r
+  #define REG_XDMAC0_CID12     (*(__O  uint32_t*)0xF0014354U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 12) */\r
+  #define REG_XDMAC0_CIM12     (*(__O  uint32_t*)0xF0014358U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 12) */\r
+  #define REG_XDMAC0_CIS12     (*(__I  uint32_t*)0xF001435CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 12) */\r
+  #define REG_XDMAC0_CSA12     (*(__IO uint32_t*)0xF0014360U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 12) */\r
+  #define REG_XDMAC0_CDA12     (*(__IO uint32_t*)0xF0014364U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 12) */\r
+  #define REG_XDMAC0_CNDA12    (*(__IO uint32_t*)0xF0014368U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 12) */\r
+  #define REG_XDMAC0_CNDC12    (*(__IO uint32_t*)0xF001436CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 12) */\r
+  #define REG_XDMAC0_CUBC12    (*(__IO uint32_t*)0xF0014370U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 12) */\r
+  #define REG_XDMAC0_CBC12     (*(__IO uint32_t*)0xF0014374U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 12) */\r
+  #define REG_XDMAC0_CC12      (*(__IO uint32_t*)0xF0014378U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 12) */\r
+  #define REG_XDMAC0_CDS_MSP12 (*(__IO uint32_t*)0xF001437CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 12) */\r
+  #define REG_XDMAC0_CSUS12    (*(__IO uint32_t*)0xF0014380U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC0_CDUS12    (*(__IO uint32_t*)0xF0014384U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 12) */\r
+  #define REG_XDMAC0_CIE13     (*(__O  uint32_t*)0xF0014390U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 13) */\r
+  #define REG_XDMAC0_CID13     (*(__O  uint32_t*)0xF0014394U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 13) */\r
+  #define REG_XDMAC0_CIM13     (*(__O  uint32_t*)0xF0014398U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 13) */\r
+  #define REG_XDMAC0_CIS13     (*(__I  uint32_t*)0xF001439CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 13) */\r
+  #define REG_XDMAC0_CSA13     (*(__IO uint32_t*)0xF00143A0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 13) */\r
+  #define REG_XDMAC0_CDA13     (*(__IO uint32_t*)0xF00143A4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 13) */\r
+  #define REG_XDMAC0_CNDA13    (*(__IO uint32_t*)0xF00143A8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 13) */\r
+  #define REG_XDMAC0_CNDC13    (*(__IO uint32_t*)0xF00143ACU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 13) */\r
+  #define REG_XDMAC0_CUBC13    (*(__IO uint32_t*)0xF00143B0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 13) */\r
+  #define REG_XDMAC0_CBC13     (*(__IO uint32_t*)0xF00143B4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 13) */\r
+  #define REG_XDMAC0_CC13      (*(__IO uint32_t*)0xF00143B8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 13) */\r
+  #define REG_XDMAC0_CDS_MSP13 (*(__IO uint32_t*)0xF00143BCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 13) */\r
+  #define REG_XDMAC0_CSUS13    (*(__IO uint32_t*)0xF00143C0U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC0_CDUS13    (*(__IO uint32_t*)0xF00143C4U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 13) */\r
+  #define REG_XDMAC0_CIE14     (*(__O  uint32_t*)0xF00143D0U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 14) */\r
+  #define REG_XDMAC0_CID14     (*(__O  uint32_t*)0xF00143D4U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 14) */\r
+  #define REG_XDMAC0_CIM14     (*(__O  uint32_t*)0xF00143D8U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 14) */\r
+  #define REG_XDMAC0_CIS14     (*(__I  uint32_t*)0xF00143DCU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 14) */\r
+  #define REG_XDMAC0_CSA14     (*(__IO uint32_t*)0xF00143E0U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 14) */\r
+  #define REG_XDMAC0_CDA14     (*(__IO uint32_t*)0xF00143E4U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 14) */\r
+  #define REG_XDMAC0_CNDA14    (*(__IO uint32_t*)0xF00143E8U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 14) */\r
+  #define REG_XDMAC0_CNDC14    (*(__IO uint32_t*)0xF00143ECU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 14) */\r
+  #define REG_XDMAC0_CUBC14    (*(__IO uint32_t*)0xF00143F0U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 14) */\r
+  #define REG_XDMAC0_CBC14     (*(__IO uint32_t*)0xF00143F4U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 14) */\r
+  #define REG_XDMAC0_CC14      (*(__IO uint32_t*)0xF00143F8U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 14) */\r
+  #define REG_XDMAC0_CDS_MSP14 (*(__IO uint32_t*)0xF00143FCU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 14) */\r
+  #define REG_XDMAC0_CSUS14    (*(__IO uint32_t*)0xF0014400U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC0_CDUS14    (*(__IO uint32_t*)0xF0014404U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 14) */\r
+  #define REG_XDMAC0_CIE15     (*(__O  uint32_t*)0xF0014410U) /**< \brief (XDMAC0) Channel Interrupt Enable Register (chid = 15) */\r
+  #define REG_XDMAC0_CID15     (*(__O  uint32_t*)0xF0014414U) /**< \brief (XDMAC0) Channel Interrupt Disable Register (chid = 15) */\r
+  #define REG_XDMAC0_CIM15     (*(__O  uint32_t*)0xF0014418U) /**< \brief (XDMAC0) Channel Interrupt Mask Register (chid = 15) */\r
+  #define REG_XDMAC0_CIS15     (*(__I  uint32_t*)0xF001441CU) /**< \brief (XDMAC0) Channel Interrupt Status Register (chid = 15) */\r
+  #define REG_XDMAC0_CSA15     (*(__IO uint32_t*)0xF0014420U) /**< \brief (XDMAC0) Channel Source Address Register (chid = 15) */\r
+  #define REG_XDMAC0_CDA15     (*(__IO uint32_t*)0xF0014424U) /**< \brief (XDMAC0) Channel Destination Address Register (chid = 15) */\r
+  #define REG_XDMAC0_CNDA15    (*(__IO uint32_t*)0xF0014428U) /**< \brief (XDMAC0) Channel Next Descriptor Address Register (chid = 15) */\r
+  #define REG_XDMAC0_CNDC15    (*(__IO uint32_t*)0xF001442CU) /**< \brief (XDMAC0) Channel Next Descriptor Control Register (chid = 15) */\r
+  #define REG_XDMAC0_CUBC15    (*(__IO uint32_t*)0xF0014430U) /**< \brief (XDMAC0) Channel Microblock Control Register (chid = 15) */\r
+  #define REG_XDMAC0_CBC15     (*(__IO uint32_t*)0xF0014434U) /**< \brief (XDMAC0) Channel Block Control Register (chid = 15) */\r
+  #define REG_XDMAC0_CC15      (*(__IO uint32_t*)0xF0014438U) /**< \brief (XDMAC0) Channel Configuration Register (chid = 15) */\r
+  #define REG_XDMAC0_CDS_MSP15 (*(__IO uint32_t*)0xF001443CU) /**< \brief (XDMAC0) Channel Data Stride Memory Set Pattern (chid = 15) */\r
+  #define REG_XDMAC0_CSUS15    (*(__IO uint32_t*)0xF0014440U) /**< \brief (XDMAC0) Channel Source Microblock Stride (chid = 15) */\r
+  #define REG_XDMAC0_CDUS15    (*(__IO uint32_t*)0xF0014444U) /**< \brief (XDMAC0) Channel Destination Microblock Stride (chid = 15) */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PMC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PMC_SCER                     (0xF0018000U) /**< \brief (PMC) System Clock Enable Register */\r
+  #define REG_PMC_SCDR                     (0xF0018004U) /**< \brief (PMC) System Clock Disable Register */\r
+  #define REG_PMC_SCSR                     (0xF0018008U) /**< \brief (PMC) System Clock Status Register */\r
+  #define REG_PMC_PCER0                    (0xF0018010U) /**< \brief (PMC) Peripheral Clock Enable Register 0 */\r
+  #define REG_PMC_PCDR0                    (0xF0018014U) /**< \brief (PMC) Peripheral Clock Disable Register 0 */\r
+  #define REG_PMC_PCSR0                    (0xF0018018U) /**< \brief (PMC) Peripheral Clock Status Register 0 */\r
+  #define REG_CKGR_UCKR                    (0xF001801CU) /**< \brief (PMC) UTMI Clock Register */\r
+  #define REG_CKGR_MOR                     (0xF0018020U) /**< \brief (PMC) Main Oscillator Register */\r
+  #define REG_CKGR_MCFR                    (0xF0018024U) /**< \brief (PMC) Main Clock Frequency Register */\r
+  #define REG_CKGR_PLLAR                   (0xF0018028U) /**< \brief (PMC) PLLA Register */\r
+  #define REG_PMC_MCKR                     (0xF0018030U) /**< \brief (PMC) Master Clock Register */\r
+  #define REG_PMC_USB                      (0xF0018038U) /**< \brief (PMC) USB Clock Register */\r
+  #define REG_PMC_SMD                      (0xF001803CU) /**< \brief (PMC) Soft Modem Clock Register */\r
+  #define REG_PMC_PCK                      (0xF0018040U) /**< \brief (PMC) Programmable Clock 0 Register */\r
+  #define REG_PMC_IER                      (0xF0018060U) /**< \brief (PMC) Interrupt Enable Register */\r
+  #define REG_PMC_IDR                      (0xF0018064U) /**< \brief (PMC) Interrupt Disable Register */\r
+  #define REG_PMC_SR                       (0xF0018068U) /**< \brief (PMC) Status Register */\r
+  #define REG_PMC_IMR                      (0xF001806CU) /**< \brief (PMC) Interrupt Mask Register */\r
+  #define REG_PMC_FOCR                     (0xF0018078U) /**< \brief (PMC) Fault Output Clear Register */\r
+  #define REG_PMC_PLLICPR                  (0xF0018080U) /**< \brief (PMC) PLL Charge Pump Current Register */\r
+  #define REG_PMC_WPMR                     (0xF00180E4U) /**< \brief (PMC) Write Protect Mode Register */\r
+  #define REG_PMC_WPSR                     (0xF00180E8U) /**< \brief (PMC) Write Protect Status Register */\r
+  #define REG_PMC_PCER1                    (0xF0018100U) /**< \brief (PMC) Peripheral Clock Enable Register 1 */\r
+  #define REG_PMC_PCDR1                    (0xF0018104U) /**< \brief (PMC) Peripheral Clock Disable Register 1 */\r
+  #define REG_PMC_PCSR1                    (0xF0018108U) /**< \brief (PMC) Peripheral Clock Status Register 1 */\r
+  #define REG_PMC_PCR                      (0xF001810CU) /**< \brief (PMC) Peripheral Control Register */\r
+#else\r
+  #define REG_PMC_SCER    (*(__O  uint32_t*)0xF0018000U) /**< \brief (PMC) System Clock Enable Register */\r
+  #define REG_PMC_SCDR    (*(__O  uint32_t*)0xF0018004U) /**< \brief (PMC) System Clock Disable Register */\r
+  #define REG_PMC_SCSR    (*(__I  uint32_t*)0xF0018008U) /**< \brief (PMC) System Clock Status Register */\r
+  #define REG_PMC_PCER0   (*(__O  uint32_t*)0xF0018010U) /**< \brief (PMC) Peripheral Clock Enable Register 0 */\r
+  #define REG_PMC_PCDR0   (*(__O  uint32_t*)0xF0018014U) /**< \brief (PMC) Peripheral Clock Disable Register 0 */\r
+  #define REG_PMC_PCSR0   (*(__I  uint32_t*)0xF0018018U) /**< \brief (PMC) Peripheral Clock Status Register 0 */\r
+  #define REG_CKGR_UCKR   (*(__IO uint32_t*)0xF001801CU) /**< \brief (PMC) UTMI Clock Register */\r
+  #define REG_CKGR_MOR    (*(__IO uint32_t*)0xF0018020U) /**< \brief (PMC) Main Oscillator Register */\r
+  #define REG_CKGR_MCFR   (*(__I  uint32_t*)0xF0018024U) /**< \brief (PMC) Main Clock Frequency Register */\r
+  #define REG_CKGR_PLLAR  (*(__IO uint32_t*)0xF0018028U) /**< \brief (PMC) PLLA Register */\r
+  #define REG_PMC_MCKR    (*(__IO uint32_t*)0xF0018030U) /**< \brief (PMC) Master Clock Register */\r
+  #define REG_PMC_USB     (*(__IO uint32_t*)0xF0018038U) /**< \brief (PMC) USB Clock Register */\r
+  #define REG_PMC_SMD     (*(__IO uint32_t*)0xF001803CU) /**< \brief (PMC) Soft Modem Clock Register */\r
+  #define REG_PMC_PCK     (*(__IO uint32_t*)0xF0018040U) /**< \brief (PMC) Programmable Clock 0 Register */\r
+  #define REG_PMC_IER     (*(__O  uint32_t*)0xF0018060U) /**< \brief (PMC) Interrupt Enable Register */\r
+  #define REG_PMC_IDR     (*(__O  uint32_t*)0xF0018064U) /**< \brief (PMC) Interrupt Disable Register */\r
+  #define REG_PMC_SR      (*(__I  uint32_t*)0xF0018068U) /**< \brief (PMC) Status Register */\r
+  #define REG_PMC_IMR     (*(__I  uint32_t*)0xF001806CU) /**< \brief (PMC) Interrupt Mask Register */\r
+  #define REG_PMC_FOCR    (*(__O  uint32_t*)0xF0018078U) /**< \brief (PMC) Fault Output Clear Register */\r
+  #define REG_PMC_PLLICPR (*(__O  uint32_t*)0xF0018080U) /**< \brief (PMC) PLL Charge Pump Current Register */\r
+  #define REG_PMC_WPMR    (*(__IO uint32_t*)0xF00180E4U) /**< \brief (PMC) Write Protect Mode Register */\r
+  #define REG_PMC_WPSR    (*(__I  uint32_t*)0xF00180E8U) /**< \brief (PMC) Write Protect Status Register */\r
+  #define REG_PMC_PCER1   (*(__O  uint32_t*)0xF0018100U) /**< \brief (PMC) Peripheral Clock Enable Register 1 */\r
+  #define REG_PMC_PCDR1   (*(__O  uint32_t*)0xF0018104U) /**< \brief (PMC) Peripheral Clock Disable Register 1 */\r
+  #define REG_PMC_PCSR1   (*(__I  uint32_t*)0xF0018108U) /**< \brief (PMC) Peripheral Clock Status Register 1 */\r
+  #define REG_PMC_PCR     (*(__IO uint32_t*)0xF001810CU) /**< \brief (PMC) Peripheral Control Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for MATRIX0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_MATRIX0_MCFG                    (0xF001C000U) /**< \brief (MATRIX0) Master Configuration Register */\r
+  #define REG_MATRIX0_SCFG                    (0xF001C040U) /**< \brief (MATRIX0) Slave Configuration Register */\r
+  #define REG_MATRIX0_PRAS0                   (0xF001C080U) /**< \brief (MATRIX0) Priority Register A for Slave 0 */\r
+  #define REG_MATRIX0_PRBS0                   (0xF001C084U) /**< \brief (MATRIX0) Priority Register B for Slave 0 */\r
+  #define REG_MATRIX0_PRAS1                   (0xF001C088U) /**< \brief (MATRIX0) Priority Register A for Slave 1 */\r
+  #define REG_MATRIX0_PRBS1                   (0xF001C08CU) /**< \brief (MATRIX0) Priority Register B for Slave 1 */\r
+  #define REG_MATRIX0_PRAS2                   (0xF001C090U) /**< \brief (MATRIX0) Priority Register A for Slave 2 */\r
+  #define REG_MATRIX0_PRBS2                   (0xF001C094U) /**< \brief (MATRIX0) Priority Register B for Slave 2 */\r
+  #define REG_MATRIX0_PRAS3                   (0xF001C098U) /**< \brief (MATRIX0) Priority Register A for Slave 3 */\r
+  #define REG_MATRIX0_PRBS3                   (0xF001C09CU) /**< \brief (MATRIX0) Priority Register B for Slave 3 */\r
+  #define REG_MATRIX0_PRAS4                   (0xF001C0A0U) /**< \brief (MATRIX0) Priority Register A for Slave 4 */\r
+  #define REG_MATRIX0_PRBS4                   (0xF001C0A4U) /**< \brief (MATRIX0) Priority Register B for Slave 4 */\r
+  #define REG_MATRIX0_PRAS5                   (0xF001C0A8U) /**< \brief (MATRIX0) Priority Register A for Slave 5 */\r
+  #define REG_MATRIX0_PRBS5                   (0xF001C0ACU) /**< \brief (MATRIX0) Priority Register B for Slave 5 */\r
+  #define REG_MATRIX0_PRAS6                   (0xF001C0B0U) /**< \brief (MATRIX0) Priority Register A for Slave 6 */\r
+  #define REG_MATRIX0_PRBS6                   (0xF001C0B4U) /**< \brief (MATRIX0) Priority Register B for Slave 6 */\r
+  #define REG_MATRIX0_PRAS7                   (0xF001C0B8U) /**< \brief (MATRIX0) Priority Register A for Slave 7 */\r
+  #define REG_MATRIX0_PRBS7                   (0xF001C0BCU) /**< \brief (MATRIX0) Priority Register B for Slave 7 */\r
+  #define REG_MATRIX0_PRAS8                   (0xF001C0C0U) /**< \brief (MATRIX0) Priority Register A for Slave 8 */\r
+  #define REG_MATRIX0_PRBS8                   (0xF001C0C4U) /**< \brief (MATRIX0) Priority Register B for Slave 8 */\r
+  #define REG_MATRIX0_PRAS9                   (0xF001C0C8U) /**< \brief (MATRIX0) Priority Register A for Slave 9 */\r
+  #define REG_MATRIX0_PRBS9                   (0xF001C0CCU) /**< \brief (MATRIX0) Priority Register B for Slave 9 */\r
+  #define REG_MATRIX0_PRAS10                  (0xF001C0D0U) /**< \brief (MATRIX0) Priority Register A for Slave 10 */\r
+  #define REG_MATRIX0_PRBS10                  (0xF001C0D4U) /**< \brief (MATRIX0) Priority Register B for Slave 10 */\r
+  #define REG_MATRIX0_PRAS11                  (0xF001C0D8U) /**< \brief (MATRIX0) Priority Register A for Slave 11 */\r
+  #define REG_MATRIX0_PRBS11                  (0xF001C0DCU) /**< \brief (MATRIX0) Priority Register B for Slave 11 */\r
+  #define REG_MATRIX0_PRAS12                  (0xF001C0E0U) /**< \brief (MATRIX0) Priority Register A for Slave 12 */\r
+  #define REG_MATRIX0_PRBS12                  (0xF001C0E4U) /**< \brief (MATRIX0) Priority Register B for Slave 12 */\r
+  #define REG_MATRIX0_MEIER                   (0xF001C150U) /**< \brief (MATRIX0) Master Error Interrupt Enable Register */\r
+  #define REG_MATRIX0_MEIDR                   (0xF001C154U) /**< \brief (MATRIX0) Master Error Interrupt Disable Register */\r
+  #define REG_MATRIX0_MEIMR                   (0xF001C158U) /**< \brief (MATRIX0) Master Error Interrupt Mask Register */\r
+  #define REG_MATRIX0_MESR                    (0xF001C15CU) /**< \brief (MATRIX0) Master Error Status Register */\r
+  #define REG_MATRIX0_MEAR                    (0xF001C160U) /**< \brief (MATRIX0) Master 0 Error Address Register */\r
+  #define REG_MATRIX0_WPMR                    (0xF001C1E4U) /**< \brief (MATRIX0) Write Protect Mode Register */\r
+  #define REG_MATRIX0_WPSR                    (0xF001C1E8U) /**< \brief (MATRIX0) Write Protect Status Register */\r
+  #define REG_MATRIX0_SSR                     (0xF001C200U) /**< \brief (MATRIX0) Security Slave 0 Register */\r
+  #define REG_MATRIX0_SASSR                   (0xF001C240U) /**< \brief (MATRIX0) Security Areas Split Slave 0 Register */\r
+  #define REG_MATRIX0_SRTSR                   (0xF001C280U) /**< \brief (MATRIX0) Security Region Top Slave 0 Register */\r
+  #define REG_MATRIX0_SPSELR                  (0xF001C2C0U) /**< \brief (MATRIX0) Security Peripheral Select 1 Register */\r
+#else\r
+  #define REG_MATRIX0_MCFG   (*(__IO uint32_t*)0xF001C000U) /**< \brief (MATRIX0) Master Configuration Register */\r
+  #define REG_MATRIX0_SCFG   (*(__IO uint32_t*)0xF001C040U) /**< \brief (MATRIX0) Slave Configuration Register */\r
+  #define REG_MATRIX0_PRAS0  (*(__IO uint32_t*)0xF001C080U) /**< \brief (MATRIX0) Priority Register A for Slave 0 */\r
+  #define REG_MATRIX0_PRBS0  (*(__IO uint32_t*)0xF001C084U) /**< \brief (MATRIX0) Priority Register B for Slave 0 */\r
+  #define REG_MATRIX0_PRAS1  (*(__IO uint32_t*)0xF001C088U) /**< \brief (MATRIX0) Priority Register A for Slave 1 */\r
+  #define REG_MATRIX0_PRBS1  (*(__IO uint32_t*)0xF001C08CU) /**< \brief (MATRIX0) Priority Register B for Slave 1 */\r
+  #define REG_MATRIX0_PRAS2  (*(__IO uint32_t*)0xF001C090U) /**< \brief (MATRIX0) Priority Register A for Slave 2 */\r
+  #define REG_MATRIX0_PRBS2  (*(__IO uint32_t*)0xF001C094U) /**< \brief (MATRIX0) Priority Register B for Slave 2 */\r
+  #define REG_MATRIX0_PRAS3  (*(__IO uint32_t*)0xF001C098U) /**< \brief (MATRIX0) Priority Register A for Slave 3 */\r
+  #define REG_MATRIX0_PRBS3  (*(__IO uint32_t*)0xF001C09CU) /**< \brief (MATRIX0) Priority Register B for Slave 3 */\r
+  #define REG_MATRIX0_PRAS4  (*(__IO uint32_t*)0xF001C0A0U) /**< \brief (MATRIX0) Priority Register A for Slave 4 */\r
+  #define REG_MATRIX0_PRBS4  (*(__IO uint32_t*)0xF001C0A4U) /**< \brief (MATRIX0) Priority Register B for Slave 4 */\r
+  #define REG_MATRIX0_PRAS5  (*(__IO uint32_t*)0xF001C0A8U) /**< \brief (MATRIX0) Priority Register A for Slave 5 */\r
+  #define REG_MATRIX0_PRBS5  (*(__IO uint32_t*)0xF001C0ACU) /**< \brief (MATRIX0) Priority Register B for Slave 5 */\r
+  #define REG_MATRIX0_PRAS6  (*(__IO uint32_t*)0xF001C0B0U) /**< \brief (MATRIX0) Priority Register A for Slave 6 */\r
+  #define REG_MATRIX0_PRBS6  (*(__IO uint32_t*)0xF001C0B4U) /**< \brief (MATRIX0) Priority Register B for Slave 6 */\r
+  #define REG_MATRIX0_PRAS7  (*(__IO uint32_t*)0xF001C0B8U) /**< \brief (MATRIX0) Priority Register A for Slave 7 */\r
+  #define REG_MATRIX0_PRBS7  (*(__IO uint32_t*)0xF001C0BCU) /**< \brief (MATRIX0) Priority Register B for Slave 7 */\r
+  #define REG_MATRIX0_PRAS8  (*(__IO uint32_t*)0xF001C0C0U) /**< \brief (MATRIX0) Priority Register A for Slave 8 */\r
+  #define REG_MATRIX0_PRBS8  (*(__IO uint32_t*)0xF001C0C4U) /**< \brief (MATRIX0) Priority Register B for Slave 8 */\r
+  #define REG_MATRIX0_PRAS9  (*(__IO uint32_t*)0xF001C0C8U) /**< \brief (MATRIX0) Priority Register A for Slave 9 */\r
+  #define REG_MATRIX0_PRBS9  (*(__IO uint32_t*)0xF001C0CCU) /**< \brief (MATRIX0) Priority Register B for Slave 9 */\r
+  #define REG_MATRIX0_PRAS10 (*(__IO uint32_t*)0xF001C0D0U) /**< \brief (MATRIX0) Priority Register A for Slave 10 */\r
+  #define REG_MATRIX0_PRBS10 (*(__IO uint32_t*)0xF001C0D4U) /**< \brief (MATRIX0) Priority Register B for Slave 10 */\r
+  #define REG_MATRIX0_PRAS11 (*(__IO uint32_t*)0xF001C0D8U) /**< \brief (MATRIX0) Priority Register A for Slave 11 */\r
+  #define REG_MATRIX0_PRBS11 (*(__IO uint32_t*)0xF001C0DCU) /**< \brief (MATRIX0) Priority Register B for Slave 11 */\r
+  #define REG_MATRIX0_PRAS12 (*(__IO uint32_t*)0xF001C0E0U) /**< \brief (MATRIX0) Priority Register A for Slave 12 */\r
+  #define REG_MATRIX0_PRBS12 (*(__IO uint32_t*)0xF001C0E4U) /**< \brief (MATRIX0) Priority Register B for Slave 12 */\r
+  #define REG_MATRIX0_MEIER  (*(__O  uint32_t*)0xF001C150U) /**< \brief (MATRIX0) Master Error Interrupt Enable Register */\r
+  #define REG_MATRIX0_MEIDR  (*(__O  uint32_t*)0xF001C154U) /**< \brief (MATRIX0) Master Error Interrupt Disable Register */\r
+  #define REG_MATRIX0_MEIMR  (*(__I  uint32_t*)0xF001C158U) /**< \brief (MATRIX0) Master Error Interrupt Mask Register */\r
+  #define REG_MATRIX0_MESR   (*(__I  uint32_t*)0xF001C15CU) /**< \brief (MATRIX0) Master Error Status Register */\r
+  #define REG_MATRIX0_MEAR   (*(__I  uint32_t*)0xF001C160U) /**< \brief (MATRIX0) Master 0 Error Address Register */\r
+  #define REG_MATRIX0_WPMR   (*(__IO uint32_t*)0xF001C1E4U) /**< \brief (MATRIX0) Write Protect Mode Register */\r
+  #define REG_MATRIX0_WPSR   (*(__I  uint32_t*)0xF001C1E8U) /**< \brief (MATRIX0) Write Protect Status Register */\r
+  #define REG_MATRIX0_SSR    (*(__IO uint32_t*)0xF001C200U) /**< \brief (MATRIX0) Security Slave 0 Register */\r
+  #define REG_MATRIX0_SASSR  (*(__IO uint32_t*)0xF001C240U) /**< \brief (MATRIX0) Security Areas Split Slave 0 Register */\r
+  #define REG_MATRIX0_SRTSR  (*(__IO uint32_t*)0xF001C280U) /**< \brief (MATRIX0) Security Region Top Slave 0 Register */\r
+  #define REG_MATRIX0_SPSELR (*(__IO uint32_t*)0xF001C2C0U) /**< \brief (MATRIX0) Security Peripheral Select 1 Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for HSMCI0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_HSMCI0_CR                     (0xF8000000U) /**< \brief (HSMCI0) Control Register */\r
+  #define REG_HSMCI0_MR                     (0xF8000004U) /**< \brief (HSMCI0) Mode Register */\r
+  #define REG_HSMCI0_DTOR                   (0xF8000008U) /**< \brief (HSMCI0) Data Timeout Register */\r
+  #define REG_HSMCI0_SDCR                   (0xF800000CU) /**< \brief (HSMCI0) SD/SDIO Card Register */\r
+  #define REG_HSMCI0_ARGR                   (0xF8000010U) /**< \brief (HSMCI0) Argument Register */\r
+  #define REG_HSMCI0_CMDR                   (0xF8000014U) /**< \brief (HSMCI0) Command Register */\r
+  #define REG_HSMCI0_BLKR                   (0xF8000018U) /**< \brief (HSMCI0) Block Register */\r
+  #define REG_HSMCI0_CSTOR                  (0xF800001CU) /**< \brief (HSMCI0) Completion Signal Timeout Register */\r
+  #define REG_HSMCI0_RSPR                   (0xF8000020U) /**< \brief (HSMCI0) Response Register */\r
+  #define REG_HSMCI0_RDR                    (0xF8000030U) /**< \brief (HSMCI0) Receive Data Register */\r
+  #define REG_HSMCI0_TDR                    (0xF8000034U) /**< \brief (HSMCI0) Transmit Data Register */\r
+  #define REG_HSMCI0_SR                     (0xF8000040U) /**< \brief (HSMCI0) Status Register */\r
+  #define REG_HSMCI0_IER                    (0xF8000044U) /**< \brief (HSMCI0) Interrupt Enable Register */\r
+  #define REG_HSMCI0_IDR                    (0xF8000048U) /**< \brief (HSMCI0) Interrupt Disable Register */\r
+  #define REG_HSMCI0_IMR                    (0xF800004CU) /**< \brief (HSMCI0) Interrupt Mask Register */\r
+  #define REG_HSMCI0_DMA                    (0xF8000050U) /**< \brief (HSMCI0) DMA Configuration Register */\r
+  #define REG_HSMCI0_CFG                    (0xF8000054U) /**< \brief (HSMCI0) Configuration Register */\r
+  #define REG_HSMCI0_WPMR                   (0xF80000E4U) /**< \brief (HSMCI0) Write Protection Mode Register */\r
+  #define REG_HSMCI0_WPSR                   (0xF80000E8U) /**< \brief (HSMCI0) Write Protection Status Register */\r
+  #define REG_HSMCI0_FIFO                   (0xF8000200U) /**< \brief (HSMCI0) FIFO Memory Aperture0 */\r
+#else\r
+  #define REG_HSMCI0_CR    (*(__O  uint32_t*)0xF8000000U) /**< \brief (HSMCI0) Control Register */\r
+  #define REG_HSMCI0_MR    (*(__IO uint32_t*)0xF8000004U) /**< \brief (HSMCI0) Mode Register */\r
+  #define REG_HSMCI0_DTOR  (*(__IO uint32_t*)0xF8000008U) /**< \brief (HSMCI0) Data Timeout Register */\r
+  #define REG_HSMCI0_SDCR  (*(__IO uint32_t*)0xF800000CU) /**< \brief (HSMCI0) SD/SDIO Card Register */\r
+  #define REG_HSMCI0_ARGR  (*(__IO uint32_t*)0xF8000010U) /**< \brief (HSMCI0) Argument Register */\r
+  #define REG_HSMCI0_CMDR  (*(__O  uint32_t*)0xF8000014U) /**< \brief (HSMCI0) Command Register */\r
+  #define REG_HSMCI0_BLKR  (*(__IO uint32_t*)0xF8000018U) /**< \brief (HSMCI0) Block Register */\r
+  #define REG_HSMCI0_CSTOR (*(__IO uint32_t*)0xF800001CU) /**< \brief (HSMCI0) Completion Signal Timeout Register */\r
+  #define REG_HSMCI0_RSPR  (*(__I  uint32_t*)0xF8000020U) /**< \brief (HSMCI0) Response Register */\r
+  #define REG_HSMCI0_RDR   (*(__I  uint32_t*)0xF8000030U) /**< \brief (HSMCI0) Receive Data Register */\r
+  #define REG_HSMCI0_TDR   (*(__O  uint32_t*)0xF8000034U) /**< \brief (HSMCI0) Transmit Data Register */\r
+  #define REG_HSMCI0_SR    (*(__I  uint32_t*)0xF8000040U) /**< \brief (HSMCI0) Status Register */\r
+  #define REG_HSMCI0_IER   (*(__O  uint32_t*)0xF8000044U) /**< \brief (HSMCI0) Interrupt Enable Register */\r
+  #define REG_HSMCI0_IDR   (*(__O  uint32_t*)0xF8000048U) /**< \brief (HSMCI0) Interrupt Disable Register */\r
+  #define REG_HSMCI0_IMR   (*(__I  uint32_t*)0xF800004CU) /**< \brief (HSMCI0) Interrupt Mask Register */\r
+  #define REG_HSMCI0_DMA   (*(__IO uint32_t*)0xF8000050U) /**< \brief (HSMCI0) DMA Configuration Register */\r
+  #define REG_HSMCI0_CFG   (*(__IO uint32_t*)0xF8000054U) /**< \brief (HSMCI0) Configuration Register */\r
+  #define REG_HSMCI0_WPMR  (*(__IO uint32_t*)0xF80000E4U) /**< \brief (HSMCI0) Write Protection Mode Register */\r
+  #define REG_HSMCI0_WPSR  (*(__I  uint32_t*)0xF80000E8U) /**< \brief (HSMCI0) Write Protection Status Register */\r
+  #define REG_HSMCI0_FIFO  (*(__IO uint32_t*)0xF8000200U) /**< \brief (HSMCI0) FIFO Memory Aperture0 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for UART0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_UART0_CR                    (0xF8004000U) /**< \brief (UART0) Control Register */\r
+  #define REG_UART0_MR                    (0xF8004004U) /**< \brief (UART0) Mode Register */\r
+  #define REG_UART0_IER                   (0xF8004008U) /**< \brief (UART0) Interrupt Enable Register */\r
+  #define REG_UART0_IDR                   (0xF800400CU) /**< \brief (UART0) Interrupt Disable Register */\r
+  #define REG_UART0_IMR                   (0xF8004010U) /**< \brief (UART0) Interrupt Mask Register */\r
+  #define REG_UART0_SR                    (0xF8004014U) /**< \brief (UART0) Status Register */\r
+  #define REG_UART0_RHR                   (0xF8004018U) /**< \brief (UART0) Receive Holding Register */\r
+  #define REG_UART0_THR                   (0xF800401CU) /**< \brief (UART0) Transmit Holding Register */\r
+  #define REG_UART0_BRGR                  (0xF8004020U) /**< \brief (UART0) Baud Rate Generator Register */\r
+#else\r
+  #define REG_UART0_CR   (*(__O  uint32_t*)0xF8004000U) /**< \brief (UART0) Control Register */\r
+  #define REG_UART0_MR   (*(__IO uint32_t*)0xF8004004U) /**< \brief (UART0) Mode Register */\r
+  #define REG_UART0_IER  (*(__O  uint32_t*)0xF8004008U) /**< \brief (UART0) Interrupt Enable Register */\r
+  #define REG_UART0_IDR  (*(__O  uint32_t*)0xF800400CU) /**< \brief (UART0) Interrupt Disable Register */\r
+  #define REG_UART0_IMR  (*(__I  uint32_t*)0xF8004010U) /**< \brief (UART0) Interrupt Mask Register */\r
+  #define REG_UART0_SR   (*(__I  uint32_t*)0xF8004014U) /**< \brief (UART0) Status Register */\r
+  #define REG_UART0_RHR  (*(__I  uint32_t*)0xF8004018U) /**< \brief (UART0) Receive Holding Register */\r
+  #define REG_UART0_THR  (*(__O  uint32_t*)0xF800401CU) /**< \brief (UART0) Transmit Holding Register */\r
+  #define REG_UART0_BRGR (*(__IO uint32_t*)0xF8004020U) /**< \brief (UART0) Baud Rate Generator Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SSC0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SSC0_CR                    (0xF8008000U) /**< \brief (SSC0) Control Register */\r
+  #define REG_SSC0_CMR                   (0xF8008004U) /**< \brief (SSC0) Clock Mode Register */\r
+  #define REG_SSC0_RCMR                  (0xF8008010U) /**< \brief (SSC0) Receive Clock Mode Register */\r
+  #define REG_SSC0_RFMR                  (0xF8008014U) /**< \brief (SSC0) Receive Frame Mode Register */\r
+  #define REG_SSC0_TCMR                  (0xF8008018U) /**< \brief (SSC0) Transmit Clock Mode Register */\r
+  #define REG_SSC0_TFMR                  (0xF800801CU) /**< \brief (SSC0) Transmit Frame Mode Register */\r
+  #define REG_SSC0_RHR                   (0xF8008020U) /**< \brief (SSC0) Receive Holding Register */\r
+  #define REG_SSC0_THR                   (0xF8008024U) /**< \brief (SSC0) Transmit Holding Register */\r
+  #define REG_SSC0_RSHR                  (0xF8008030U) /**< \brief (SSC0) Receive Sync. Holding Register */\r
+  #define REG_SSC0_TSHR                  (0xF8008034U) /**< \brief (SSC0) Transmit Sync. Holding Register */\r
+  #define REG_SSC0_RC0R                  (0xF8008038U) /**< \brief (SSC0) Receive Compare 0 Register */\r
+  #define REG_SSC0_RC1R                  (0xF800803CU) /**< \brief (SSC0) Receive Compare 1 Register */\r
+  #define REG_SSC0_SR                    (0xF8008040U) /**< \brief (SSC0) Status Register */\r
+  #define REG_SSC0_IER                   (0xF8008044U) /**< \brief (SSC0) Interrupt Enable Register */\r
+  #define REG_SSC0_IDR                   (0xF8008048U) /**< \brief (SSC0) Interrupt Disable Register */\r
+  #define REG_SSC0_IMR                   (0xF800804CU) /**< \brief (SSC0) Interrupt Mask Register */\r
+  #define REG_SSC0_WPMR                  (0xF80080E4U) /**< \brief (SSC0) Write Protect Mode Register */\r
+  #define REG_SSC0_WPSR                  (0xF80080E8U) /**< \brief (SSC0) Write Protect Status Register */\r
+#else\r
+  #define REG_SSC0_CR   (*(__O  uint32_t*)0xF8008000U) /**< \brief (SSC0) Control Register */\r
+  #define REG_SSC0_CMR  (*(__IO uint32_t*)0xF8008004U) /**< \brief (SSC0) Clock Mode Register */\r
+  #define REG_SSC0_RCMR (*(__IO uint32_t*)0xF8008010U) /**< \brief (SSC0) Receive Clock Mode Register */\r
+  #define REG_SSC0_RFMR (*(__IO uint32_t*)0xF8008014U) /**< \brief (SSC0) Receive Frame Mode Register */\r
+  #define REG_SSC0_TCMR (*(__IO uint32_t*)0xF8008018U) /**< \brief (SSC0) Transmit Clock Mode Register */\r
+  #define REG_SSC0_TFMR (*(__IO uint32_t*)0xF800801CU) /**< \brief (SSC0) Transmit Frame Mode Register */\r
+  #define REG_SSC0_RHR  (*(__I  uint32_t*)0xF8008020U) /**< \brief (SSC0) Receive Holding Register */\r
+  #define REG_SSC0_THR  (*(__O  uint32_t*)0xF8008024U) /**< \brief (SSC0) Transmit Holding Register */\r
+  #define REG_SSC0_RSHR (*(__I  uint32_t*)0xF8008030U) /**< \brief (SSC0) Receive Sync. Holding Register */\r
+  #define REG_SSC0_TSHR (*(__IO uint32_t*)0xF8008034U) /**< \brief (SSC0) Transmit Sync. Holding Register */\r
+  #define REG_SSC0_RC0R (*(__IO uint32_t*)0xF8008038U) /**< \brief (SSC0) Receive Compare 0 Register */\r
+  #define REG_SSC0_RC1R (*(__IO uint32_t*)0xF800803CU) /**< \brief (SSC0) Receive Compare 1 Register */\r
+  #define REG_SSC0_SR   (*(__I  uint32_t*)0xF8008040U) /**< \brief (SSC0) Status Register */\r
+  #define REG_SSC0_IER  (*(__O  uint32_t*)0xF8008044U) /**< \brief (SSC0) Interrupt Enable Register */\r
+  #define REG_SSC0_IDR  (*(__O  uint32_t*)0xF8008048U) /**< \brief (SSC0) Interrupt Disable Register */\r
+  #define REG_SSC0_IMR  (*(__I  uint32_t*)0xF800804CU) /**< \brief (SSC0) Interrupt Mask Register */\r
+  #define REG_SSC0_WPMR (*(__IO uint32_t*)0xF80080E4U) /**< \brief (SSC0) Write Protect Mode Register */\r
+  #define REG_SSC0_WPSR (*(__I  uint32_t*)0xF80080E8U) /**< \brief (SSC0) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PWM peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PWM_CLK                       (0xF800C000U) /**< \brief (PWM) PWM Clock Register */\r
+  #define REG_PWM_ENA                       (0xF800C004U) /**< \brief (PWM) PWM Enable Register */\r
+  #define REG_PWM_DIS                       (0xF800C008U) /**< \brief (PWM) PWM Disable Register */\r
+  #define REG_PWM_SR                        (0xF800C00CU) /**< \brief (PWM) PWM Status Register */\r
+  #define REG_PWM_IER1                      (0xF800C010U) /**< \brief (PWM) PWM Interrupt Enable Register 1 */\r
+  #define REG_PWM_IDR1                      (0xF800C014U) /**< \brief (PWM) PWM Interrupt Disable Register 1 */\r
+  #define REG_PWM_IMR1                      (0xF800C018U) /**< \brief (PWM) PWM Interrupt Mask Register 1 */\r
+  #define REG_PWM_ISR1                      (0xF800C01CU) /**< \brief (PWM) PWM Interrupt Status Register 1 */\r
+  #define REG_PWM_SCM                       (0xF800C020U) /**< \brief (PWM) PWM Sync Channels Mode Register */\r
+  #define REG_PWM_SCUC                      (0xF800C028U) /**< \brief (PWM) PWM Sync Channels Update Control Register */\r
+  #define REG_PWM_SCUP                      (0xF800C02CU) /**< \brief (PWM) PWM Sync Channels Update Period Register */\r
+  #define REG_PWM_SCUPUPD                   (0xF800C030U) /**< \brief (PWM) PWM Sync Channels Update Period Update Register */\r
+  #define REG_PWM_IER2                      (0xF800C034U) /**< \brief (PWM) PWM Interrupt Enable Register 2 */\r
+  #define REG_PWM_IDR2                      (0xF800C038U) /**< \brief (PWM) PWM Interrupt Disable Register 2 */\r
+  #define REG_PWM_IMR2                      (0xF800C03CU) /**< \brief (PWM) PWM Interrupt Mask Register 2 */\r
+  #define REG_PWM_ISR2                      (0xF800C040U) /**< \brief (PWM) PWM Interrupt Status Register 2 */\r
+  #define REG_PWM_OOV                       (0xF800C044U) /**< \brief (PWM) PWM Output Override Value Register */\r
+  #define REG_PWM_OS                        (0xF800C048U) /**< \brief (PWM) PWM Output Selection Register */\r
+  #define REG_PWM_OSS                       (0xF800C04CU) /**< \brief (PWM) PWM Output Selection Set Register */\r
+  #define REG_PWM_OSC                       (0xF800C050U) /**< \brief (PWM) PWM Output Selection Clear Register */\r
+  #define REG_PWM_OSSUPD                    (0xF800C054U) /**< \brief (PWM) PWM Output Selection Set Update Register */\r
+  #define REG_PWM_OSCUPD                    (0xF800C058U) /**< \brief (PWM) PWM Output Selection Clear Update Register */\r
+  #define REG_PWM_FMR                       (0xF800C05CU) /**< \brief (PWM) PWM Fault Mode Register */\r
+  #define REG_PWM_FSR                       (0xF800C060U) /**< \brief (PWM) PWM Fault Status Register */\r
+  #define REG_PWM_FCR                       (0xF800C064U) /**< \brief (PWM) PWM Fault Clear Register */\r
+  #define REG_PWM_FPV1                      (0xF800C068U) /**< \brief (PWM) PWM Fault Protection Value Register 1 */\r
+  #define REG_PWM_FPE                       (0xF800C06CU) /**< \brief (PWM) PWM Fault Protection Enable Register */\r
+  #define REG_PWM_ELMR                      (0xF800C07CU) /**< \brief (PWM) PWM Event Line 0 Mode Register */\r
+  #define REG_PWM_SSPR                      (0xF800C0A0U) /**< \brief (PWM) PWM Spread Spectrum Register */\r
+  #define REG_PWM_SSPUP                     (0xF800C0A4U) /**< \brief (PWM) PWM Spread Spectrum Update Register */\r
+  #define REG_PWM_SMMR                      (0xF800C0B0U) /**< \brief (PWM) PWM Stepper Motor Mode Register */\r
+  #define REG_PWM_FPV2                      (0xF800C0C0U) /**< \brief (PWM) PWM Fault Protection Value 2 Register */\r
+  #define REG_PWM_WPCR                      (0xF800C0E4U) /**< \brief (PWM) PWM Write Protect Control Register */\r
+  #define REG_PWM_WPSR                      (0xF800C0E8U) /**< \brief (PWM) PWM Write Protect Status Register */\r
+  #define REG_PWM_CMPV0                     (0xF800C130U) /**< \brief (PWM) PWM Comparison 0 Value Register */\r
+  #define REG_PWM_CMPVUPD0                  (0xF800C134U) /**< \brief (PWM) PWM Comparison 0 Value Update Register */\r
+  #define REG_PWM_CMPM0                     (0xF800C138U) /**< \brief (PWM) PWM Comparison 0 Mode Register */\r
+  #define REG_PWM_CMPMUPD0                  (0xF800C13CU) /**< \brief (PWM) PWM Comparison 0 Mode Update Register */\r
+  #define REG_PWM_CMPV1                     (0xF800C140U) /**< \brief (PWM) PWM Comparison 1 Value Register */\r
+  #define REG_PWM_CMPVUPD1                  (0xF800C144U) /**< \brief (PWM) PWM Comparison 1 Value Update Register */\r
+  #define REG_PWM_CMPM1                     (0xF800C148U) /**< \brief (PWM) PWM Comparison 1 Mode Register */\r
+  #define REG_PWM_CMPMUPD1                  (0xF800C14CU) /**< \brief (PWM) PWM Comparison 1 Mode Update Register */\r
+  #define REG_PWM_CMPV2                     (0xF800C150U) /**< \brief (PWM) PWM Comparison 2 Value Register */\r
+  #define REG_PWM_CMPVUPD2                  (0xF800C154U) /**< \brief (PWM) PWM Comparison 2 Value Update Register */\r
+  #define REG_PWM_CMPM2                     (0xF800C158U) /**< \brief (PWM) PWM Comparison 2 Mode Register */\r
+  #define REG_PWM_CMPMUPD2                  (0xF800C15CU) /**< \brief (PWM) PWM Comparison 2 Mode Update Register */\r
+  #define REG_PWM_CMPV3                     (0xF800C160U) /**< \brief (PWM) PWM Comparison 3 Value Register */\r
+  #define REG_PWM_CMPVUPD3                  (0xF800C164U) /**< \brief (PWM) PWM Comparison 3 Value Update Register */\r
+  #define REG_PWM_CMPM3                     (0xF800C168U) /**< \brief (PWM) PWM Comparison 3 Mode Register */\r
+  #define REG_PWM_CMPMUPD3                  (0xF800C16CU) /**< \brief (PWM) PWM Comparison 3 Mode Update Register */\r
+  #define REG_PWM_CMPV4                     (0xF800C170U) /**< \brief (PWM) PWM Comparison 4 Value Register */\r
+  #define REG_PWM_CMPVUPD4                  (0xF800C174U) /**< \brief (PWM) PWM Comparison 4 Value Update Register */\r
+  #define REG_PWM_CMPM4                     (0xF800C178U) /**< \brief (PWM) PWM Comparison 4 Mode Register */\r
+  #define REG_PWM_CMPMUPD4                  (0xF800C17CU) /**< \brief (PWM) PWM Comparison 4 Mode Update Register */\r
+  #define REG_PWM_CMPV5                     (0xF800C180U) /**< \brief (PWM) PWM Comparison 5 Value Register */\r
+  #define REG_PWM_CMPVUPD5                  (0xF800C184U) /**< \brief (PWM) PWM Comparison 5 Value Update Register */\r
+  #define REG_PWM_CMPM5                     (0xF800C188U) /**< \brief (PWM) PWM Comparison 5 Mode Register */\r
+  #define REG_PWM_CMPMUPD5                  (0xF800C18CU) /**< \brief (PWM) PWM Comparison 5 Mode Update Register */\r
+  #define REG_PWM_CMPV6                     (0xF800C190U) /**< \brief (PWM) PWM Comparison 6 Value Register */\r
+  #define REG_PWM_CMPVUPD6                  (0xF800C194U) /**< \brief (PWM) PWM Comparison 6 Value Update Register */\r
+  #define REG_PWM_CMPM6                     (0xF800C198U) /**< \brief (PWM) PWM Comparison 6 Mode Register */\r
+  #define REG_PWM_CMPMUPD6                  (0xF800C19CU) /**< \brief (PWM) PWM Comparison 6 Mode Update Register */\r
+  #define REG_PWM_CMPV7                     (0xF800C1A0U) /**< \brief (PWM) PWM Comparison 7 Value Register */\r
+  #define REG_PWM_CMPVUPD7                  (0xF800C1A4U) /**< \brief (PWM) PWM Comparison 7 Value Update Register */\r
+  #define REG_PWM_CMPM7                     (0xF800C1A8U) /**< \brief (PWM) PWM Comparison 7 Mode Register */\r
+  #define REG_PWM_CMPMUPD7                  (0xF800C1ACU) /**< \brief (PWM) PWM Comparison 7 Mode Update Register */\r
+  #define REG_PWM_CMR0                      (0xF800C200U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 0) */\r
+  #define REG_PWM_CDTY0                     (0xF800C204U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 0) */\r
+  #define REG_PWM_CDTYUPD0                  (0xF800C208U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 0) */\r
+  #define REG_PWM_CPRD0                     (0xF800C20CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 0) */\r
+  #define REG_PWM_CPRDUPD0                  (0xF800C210U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 0) */\r
+  #define REG_PWM_CCNT0                     (0xF800C214U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 0) */\r
+  #define REG_PWM_DT0                       (0xF800C218U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 0) */\r
+  #define REG_PWM_DTUPD0                    (0xF800C21CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 0) */\r
+  #define REG_PWM_CMR1                      (0xF800C220U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 1) */\r
+  #define REG_PWM_CDTY1                     (0xF800C224U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 1) */\r
+  #define REG_PWM_CDTYUPD1                  (0xF800C228U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 1) */\r
+  #define REG_PWM_CPRD1                     (0xF800C22CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 1) */\r
+  #define REG_PWM_CPRDUPD1                  (0xF800C230U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 1) */\r
+  #define REG_PWM_CCNT1                     (0xF800C234U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 1) */\r
+  #define REG_PWM_DT1                       (0xF800C238U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 1) */\r
+  #define REG_PWM_DTUPD1                    (0xF800C23CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 1) */\r
+  #define REG_PWM_CMR2                      (0xF800C240U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 2) */\r
+  #define REG_PWM_CDTY2                     (0xF800C244U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 2) */\r
+  #define REG_PWM_CDTYUPD2                  (0xF800C248U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 2) */\r
+  #define REG_PWM_CPRD2                     (0xF800C24CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 2) */\r
+  #define REG_PWM_CPRDUPD2                  (0xF800C250U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 2) */\r
+  #define REG_PWM_CCNT2                     (0xF800C254U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 2) */\r
+  #define REG_PWM_DT2                       (0xF800C258U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 2) */\r
+  #define REG_PWM_DTUPD2                    (0xF800C25CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 2) */\r
+  #define REG_PWM_CMR3                      (0xF800C260U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 3) */\r
+  #define REG_PWM_CDTY3                     (0xF800C264U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 3) */\r
+  #define REG_PWM_CDTYUPD3                  (0xF800C268U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 3) */\r
+  #define REG_PWM_CPRD3                     (0xF800C26CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 3) */\r
+  #define REG_PWM_CPRDUPD3                  (0xF800C270U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 3) */\r
+  #define REG_PWM_CCNT3                     (0xF800C274U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 3) */\r
+  #define REG_PWM_DT3                       (0xF800C278U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 3) */\r
+  #define REG_PWM_DTUPD3                    (0xF800C27CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 3) */\r
+  #define REG_PWM_CMUPD0                    (0xF800C400U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 0) */\r
+  #define REG_PWM_CMUPD1                    (0xF800C420U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 1) */\r
+  #define REG_PWM_CMUPD2                    (0xF800C440U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 2) */\r
+  #define REG_PWM_CMUPD3                    (0xF800C460U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 3) */\r
+#else\r
+  #define REG_PWM_CLK      (*(__IO uint32_t*)0xF800C000U) /**< \brief (PWM) PWM Clock Register */\r
+  #define REG_PWM_ENA      (*(__O  uint32_t*)0xF800C004U) /**< \brief (PWM) PWM Enable Register */\r
+  #define REG_PWM_DIS      (*(__O  uint32_t*)0xF800C008U) /**< \brief (PWM) PWM Disable Register */\r
+  #define REG_PWM_SR       (*(__I  uint32_t*)0xF800C00CU) /**< \brief (PWM) PWM Status Register */\r
+  #define REG_PWM_IER1     (*(__O  uint32_t*)0xF800C010U) /**< \brief (PWM) PWM Interrupt Enable Register 1 */\r
+  #define REG_PWM_IDR1     (*(__O  uint32_t*)0xF800C014U) /**< \brief (PWM) PWM Interrupt Disable Register 1 */\r
+  #define REG_PWM_IMR1     (*(__I  uint32_t*)0xF800C018U) /**< \brief (PWM) PWM Interrupt Mask Register 1 */\r
+  #define REG_PWM_ISR1     (*(__I  uint32_t*)0xF800C01CU) /**< \brief (PWM) PWM Interrupt Status Register 1 */\r
+  #define REG_PWM_SCM      (*(__IO uint32_t*)0xF800C020U) /**< \brief (PWM) PWM Sync Channels Mode Register */\r
+  #define REG_PWM_SCUC     (*(__IO uint32_t*)0xF800C028U) /**< \brief (PWM) PWM Sync Channels Update Control Register */\r
+  #define REG_PWM_SCUP     (*(__IO uint32_t*)0xF800C02CU) /**< \brief (PWM) PWM Sync Channels Update Period Register */\r
+  #define REG_PWM_SCUPUPD  (*(__O  uint32_t*)0xF800C030U) /**< \brief (PWM) PWM Sync Channels Update Period Update Register */\r
+  #define REG_PWM_IER2     (*(__O  uint32_t*)0xF800C034U) /**< \brief (PWM) PWM Interrupt Enable Register 2 */\r
+  #define REG_PWM_IDR2     (*(__O  uint32_t*)0xF800C038U) /**< \brief (PWM) PWM Interrupt Disable Register 2 */\r
+  #define REG_PWM_IMR2     (*(__I  uint32_t*)0xF800C03CU) /**< \brief (PWM) PWM Interrupt Mask Register 2 */\r
+  #define REG_PWM_ISR2     (*(__I  uint32_t*)0xF800C040U) /**< \brief (PWM) PWM Interrupt Status Register 2 */\r
+  #define REG_PWM_OOV      (*(__IO uint32_t*)0xF800C044U) /**< \brief (PWM) PWM Output Override Value Register */\r
+  #define REG_PWM_OS       (*(__IO uint32_t*)0xF800C048U) /**< \brief (PWM) PWM Output Selection Register */\r
+  #define REG_PWM_OSS      (*(__O  uint32_t*)0xF800C04CU) /**< \brief (PWM) PWM Output Selection Set Register */\r
+  #define REG_PWM_OSC      (*(__O  uint32_t*)0xF800C050U) /**< \brief (PWM) PWM Output Selection Clear Register */\r
+  #define REG_PWM_OSSUPD   (*(__O  uint32_t*)0xF800C054U) /**< \brief (PWM) PWM Output Selection Set Update Register */\r
+  #define REG_PWM_OSCUPD   (*(__O  uint32_t*)0xF800C058U) /**< \brief (PWM) PWM Output Selection Clear Update Register */\r
+  #define REG_PWM_FMR      (*(__IO uint32_t*)0xF800C05CU) /**< \brief (PWM) PWM Fault Mode Register */\r
+  #define REG_PWM_FSR      (*(__I  uint32_t*)0xF800C060U) /**< \brief (PWM) PWM Fault Status Register */\r
+  #define REG_PWM_FCR      (*(__O  uint32_t*)0xF800C064U) /**< \brief (PWM) PWM Fault Clear Register */\r
+  #define REG_PWM_FPV1     (*(__IO uint32_t*)0xF800C068U) /**< \brief (PWM) PWM Fault Protection Value Register 1 */\r
+  #define REG_PWM_FPE      (*(__IO uint32_t*)0xF800C06CU) /**< \brief (PWM) PWM Fault Protection Enable Register */\r
+  #define REG_PWM_ELMR     (*(__IO uint32_t*)0xF800C07CU) /**< \brief (PWM) PWM Event Line 0 Mode Register */\r
+  #define REG_PWM_SSPR     (*(__IO uint32_t*)0xF800C0A0U) /**< \brief (PWM) PWM Spread Spectrum Register */\r
+  #define REG_PWM_SSPUP    (*(__O  uint32_t*)0xF800C0A4U) /**< \brief (PWM) PWM Spread Spectrum Update Register */\r
+  #define REG_PWM_SMMR     (*(__IO uint32_t*)0xF800C0B0U) /**< \brief (PWM) PWM Stepper Motor Mode Register */\r
+  #define REG_PWM_FPV2     (*(__IO uint32_t*)0xF800C0C0U) /**< \brief (PWM) PWM Fault Protection Value 2 Register */\r
+  #define REG_PWM_WPCR     (*(__O  uint32_t*)0xF800C0E4U) /**< \brief (PWM) PWM Write Protect Control Register */\r
+  #define REG_PWM_WPSR     (*(__I  uint32_t*)0xF800C0E8U) /**< \brief (PWM) PWM Write Protect Status Register */\r
+  #define REG_PWM_CMPV0    (*(__IO uint32_t*)0xF800C130U) /**< \brief (PWM) PWM Comparison 0 Value Register */\r
+  #define REG_PWM_CMPVUPD0 (*(__O  uint32_t*)0xF800C134U) /**< \brief (PWM) PWM Comparison 0 Value Update Register */\r
+  #define REG_PWM_CMPM0    (*(__IO uint32_t*)0xF800C138U) /**< \brief (PWM) PWM Comparison 0 Mode Register */\r
+  #define REG_PWM_CMPMUPD0 (*(__O  uint32_t*)0xF800C13CU) /**< \brief (PWM) PWM Comparison 0 Mode Update Register */\r
+  #define REG_PWM_CMPV1    (*(__IO uint32_t*)0xF800C140U) /**< \brief (PWM) PWM Comparison 1 Value Register */\r
+  #define REG_PWM_CMPVUPD1 (*(__O  uint32_t*)0xF800C144U) /**< \brief (PWM) PWM Comparison 1 Value Update Register */\r
+  #define REG_PWM_CMPM1    (*(__IO uint32_t*)0xF800C148U) /**< \brief (PWM) PWM Comparison 1 Mode Register */\r
+  #define REG_PWM_CMPMUPD1 (*(__O  uint32_t*)0xF800C14CU) /**< \brief (PWM) PWM Comparison 1 Mode Update Register */\r
+  #define REG_PWM_CMPV2    (*(__IO uint32_t*)0xF800C150U) /**< \brief (PWM) PWM Comparison 2 Value Register */\r
+  #define REG_PWM_CMPVUPD2 (*(__O  uint32_t*)0xF800C154U) /**< \brief (PWM) PWM Comparison 2 Value Update Register */\r
+  #define REG_PWM_CMPM2    (*(__IO uint32_t*)0xF800C158U) /**< \brief (PWM) PWM Comparison 2 Mode Register */\r
+  #define REG_PWM_CMPMUPD2 (*(__O  uint32_t*)0xF800C15CU) /**< \brief (PWM) PWM Comparison 2 Mode Update Register */\r
+  #define REG_PWM_CMPV3    (*(__IO uint32_t*)0xF800C160U) /**< \brief (PWM) PWM Comparison 3 Value Register */\r
+  #define REG_PWM_CMPVUPD3 (*(__O  uint32_t*)0xF800C164U) /**< \brief (PWM) PWM Comparison 3 Value Update Register */\r
+  #define REG_PWM_CMPM3    (*(__IO uint32_t*)0xF800C168U) /**< \brief (PWM) PWM Comparison 3 Mode Register */\r
+  #define REG_PWM_CMPMUPD3 (*(__O  uint32_t*)0xF800C16CU) /**< \brief (PWM) PWM Comparison 3 Mode Update Register */\r
+  #define REG_PWM_CMPV4    (*(__IO uint32_t*)0xF800C170U) /**< \brief (PWM) PWM Comparison 4 Value Register */\r
+  #define REG_PWM_CMPVUPD4 (*(__O  uint32_t*)0xF800C174U) /**< \brief (PWM) PWM Comparison 4 Value Update Register */\r
+  #define REG_PWM_CMPM4    (*(__IO uint32_t*)0xF800C178U) /**< \brief (PWM) PWM Comparison 4 Mode Register */\r
+  #define REG_PWM_CMPMUPD4 (*(__O  uint32_t*)0xF800C17CU) /**< \brief (PWM) PWM Comparison 4 Mode Update Register */\r
+  #define REG_PWM_CMPV5    (*(__IO uint32_t*)0xF800C180U) /**< \brief (PWM) PWM Comparison 5 Value Register */\r
+  #define REG_PWM_CMPVUPD5 (*(__O  uint32_t*)0xF800C184U) /**< \brief (PWM) PWM Comparison 5 Value Update Register */\r
+  #define REG_PWM_CMPM5    (*(__IO uint32_t*)0xF800C188U) /**< \brief (PWM) PWM Comparison 5 Mode Register */\r
+  #define REG_PWM_CMPMUPD5 (*(__O  uint32_t*)0xF800C18CU) /**< \brief (PWM) PWM Comparison 5 Mode Update Register */\r
+  #define REG_PWM_CMPV6    (*(__IO uint32_t*)0xF800C190U) /**< \brief (PWM) PWM Comparison 6 Value Register */\r
+  #define REG_PWM_CMPVUPD6 (*(__O  uint32_t*)0xF800C194U) /**< \brief (PWM) PWM Comparison 6 Value Update Register */\r
+  #define REG_PWM_CMPM6    (*(__IO uint32_t*)0xF800C198U) /**< \brief (PWM) PWM Comparison 6 Mode Register */\r
+  #define REG_PWM_CMPMUPD6 (*(__O  uint32_t*)0xF800C19CU) /**< \brief (PWM) PWM Comparison 6 Mode Update Register */\r
+  #define REG_PWM_CMPV7    (*(__IO uint32_t*)0xF800C1A0U) /**< \brief (PWM) PWM Comparison 7 Value Register */\r
+  #define REG_PWM_CMPVUPD7 (*(__O  uint32_t*)0xF800C1A4U) /**< \brief (PWM) PWM Comparison 7 Value Update Register */\r
+  #define REG_PWM_CMPM7    (*(__IO uint32_t*)0xF800C1A8U) /**< \brief (PWM) PWM Comparison 7 Mode Register */\r
+  #define REG_PWM_CMPMUPD7 (*(__O  uint32_t*)0xF800C1ACU) /**< \brief (PWM) PWM Comparison 7 Mode Update Register */\r
+  #define REG_PWM_CMR0     (*(__IO uint32_t*)0xF800C200U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 0) */\r
+  #define REG_PWM_CDTY0    (*(__IO uint32_t*)0xF800C204U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 0) */\r
+  #define REG_PWM_CDTYUPD0 (*(__O  uint32_t*)0xF800C208U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 0) */\r
+  #define REG_PWM_CPRD0    (*(__IO uint32_t*)0xF800C20CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 0) */\r
+  #define REG_PWM_CPRDUPD0 (*(__O  uint32_t*)0xF800C210U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 0) */\r
+  #define REG_PWM_CCNT0    (*(__I  uint32_t*)0xF800C214U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 0) */\r
+  #define REG_PWM_DT0      (*(__IO uint32_t*)0xF800C218U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 0) */\r
+  #define REG_PWM_DTUPD0   (*(__O  uint32_t*)0xF800C21CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 0) */\r
+  #define REG_PWM_CMR1     (*(__IO uint32_t*)0xF800C220U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 1) */\r
+  #define REG_PWM_CDTY1    (*(__IO uint32_t*)0xF800C224U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 1) */\r
+  #define REG_PWM_CDTYUPD1 (*(__O  uint32_t*)0xF800C228U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 1) */\r
+  #define REG_PWM_CPRD1    (*(__IO uint32_t*)0xF800C22CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 1) */\r
+  #define REG_PWM_CPRDUPD1 (*(__O  uint32_t*)0xF800C230U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 1) */\r
+  #define REG_PWM_CCNT1    (*(__I  uint32_t*)0xF800C234U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 1) */\r
+  #define REG_PWM_DT1      (*(__IO uint32_t*)0xF800C238U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 1) */\r
+  #define REG_PWM_DTUPD1   (*(__O  uint32_t*)0xF800C23CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 1) */\r
+  #define REG_PWM_CMR2     (*(__IO uint32_t*)0xF800C240U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 2) */\r
+  #define REG_PWM_CDTY2    (*(__IO uint32_t*)0xF800C244U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 2) */\r
+  #define REG_PWM_CDTYUPD2 (*(__O  uint32_t*)0xF800C248U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 2) */\r
+  #define REG_PWM_CPRD2    (*(__IO uint32_t*)0xF800C24CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 2) */\r
+  #define REG_PWM_CPRDUPD2 (*(__O  uint32_t*)0xF800C250U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 2) */\r
+  #define REG_PWM_CCNT2    (*(__I  uint32_t*)0xF800C254U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 2) */\r
+  #define REG_PWM_DT2      (*(__IO uint32_t*)0xF800C258U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 2) */\r
+  #define REG_PWM_DTUPD2   (*(__O  uint32_t*)0xF800C25CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 2) */\r
+  #define REG_PWM_CMR3     (*(__IO uint32_t*)0xF800C260U) /**< \brief (PWM) PWM Channel Mode Register (ch_num = 3) */\r
+  #define REG_PWM_CDTY3    (*(__IO uint32_t*)0xF800C264U) /**< \brief (PWM) PWM Channel Duty Cycle Register (ch_num = 3) */\r
+  #define REG_PWM_CDTYUPD3 (*(__O  uint32_t*)0xF800C268U) /**< \brief (PWM) PWM Channel Duty Cycle Update Register (ch_num = 3) */\r
+  #define REG_PWM_CPRD3    (*(__IO uint32_t*)0xF800C26CU) /**< \brief (PWM) PWM Channel Period Register (ch_num = 3) */\r
+  #define REG_PWM_CPRDUPD3 (*(__O  uint32_t*)0xF800C270U) /**< \brief (PWM) PWM Channel Period Update Register (ch_num = 3) */\r
+  #define REG_PWM_CCNT3    (*(__I  uint32_t*)0xF800C274U) /**< \brief (PWM) PWM Channel Counter Register (ch_num = 3) */\r
+  #define REG_PWM_DT3      (*(__IO uint32_t*)0xF800C278U) /**< \brief (PWM) PWM Channel Dead Time Register (ch_num = 3) */\r
+  #define REG_PWM_DTUPD3   (*(__O  uint32_t*)0xF800C27CU) /**< \brief (PWM) PWM Channel Dead Time Update Register (ch_num = 3) */\r
+  #define REG_PWM_CMUPD0   (*(__O  uint32_t*)0xF800C400U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 0) */\r
+  #define REG_PWM_CMUPD1   (*(__O  uint32_t*)0xF800C420U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 1) */\r
+  #define REG_PWM_CMUPD2   (*(__O  uint32_t*)0xF800C440U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 2) */\r
+  #define REG_PWM_CMUPD3   (*(__O  uint32_t*)0xF800C460U) /**< \brief (PWM) PWM Channel Mode Update Register (ch_num = 3) */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SPI0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SPI0_CR                    (0xF8010000U) /**< \brief (SPI0) Control Register */\r
+  #define REG_SPI0_MR                    (0xF8010004U) /**< \brief (SPI0) Mode Register */\r
+  #define REG_SPI0_RDR                   (0xF8010008U) /**< \brief (SPI0) Receive Data Register */\r
+  #define REG_SPI0_TDR                   (0xF801000CU) /**< \brief (SPI0) Transmit Data Register */\r
+  #define REG_SPI0_SR                    (0xF8010010U) /**< \brief (SPI0) Status Register */\r
+  #define REG_SPI0_IER                   (0xF8010014U) /**< \brief (SPI0) Interrupt Enable Register */\r
+  #define REG_SPI0_IDR                   (0xF8010018U) /**< \brief (SPI0) Interrupt Disable Register */\r
+  #define REG_SPI0_IMR                   (0xF801001CU) /**< \brief (SPI0) Interrupt Mask Register */\r
+  #define REG_SPI0_CSR                   (0xF8010030U) /**< \brief (SPI0) Chip Select Register */\r
+  #define REG_SPI0_WPMR                  (0xF80100E4U) /**< \brief (SPI0) Write Protection Control Register */\r
+  #define REG_SPI0_WPSR                  (0xF80100E8U) /**< \brief (SPI0) Write Protection Status Register */\r
+#else\r
+  #define REG_SPI0_CR   (*(__O  uint32_t*)0xF8010000U) /**< \brief (SPI0) Control Register */\r
+  #define REG_SPI0_MR   (*(__IO uint32_t*)0xF8010004U) /**< \brief (SPI0) Mode Register */\r
+  #define REG_SPI0_RDR  (*(__I  uint32_t*)0xF8010008U) /**< \brief (SPI0) Receive Data Register */\r
+  #define REG_SPI0_TDR  (*(__O  uint32_t*)0xF801000CU) /**< \brief (SPI0) Transmit Data Register */\r
+  #define REG_SPI0_SR   (*(__I  uint32_t*)0xF8010010U) /**< \brief (SPI0) Status Register */\r
+  #define REG_SPI0_IER  (*(__O  uint32_t*)0xF8010014U) /**< \brief (SPI0) Interrupt Enable Register */\r
+  #define REG_SPI0_IDR  (*(__O  uint32_t*)0xF8010018U) /**< \brief (SPI0) Interrupt Disable Register */\r
+  #define REG_SPI0_IMR  (*(__I  uint32_t*)0xF801001CU) /**< \brief (SPI0) Interrupt Mask Register */\r
+  #define REG_SPI0_CSR  (*(__IO uint32_t*)0xF8010030U) /**< \brief (SPI0) Chip Select Register */\r
+  #define REG_SPI0_WPMR (*(__IO uint32_t*)0xF80100E4U) /**< \brief (SPI0) Write Protection Control Register */\r
+  #define REG_SPI0_WPSR (*(__I  uint32_t*)0xF80100E8U) /**< \brief (SPI0) Write Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TWI0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TWI0_CR                    (0xF8014000U) /**< \brief (TWI0) Control Register */\r
+  #define REG_TWI0_MMR                   (0xF8014004U) /**< \brief (TWI0) Master Mode Register */\r
+  #define REG_TWI0_SMR                   (0xF8014008U) /**< \brief (TWI0) Slave Mode Register */\r
+  #define REG_TWI0_IADR                  (0xF801400CU) /**< \brief (TWI0) Internal Address Register */\r
+  #define REG_TWI0_CWGR                  (0xF8014010U) /**< \brief (TWI0) Clock Waveform Generator Register */\r
+  #define REG_TWI0_SR                    (0xF8014020U) /**< \brief (TWI0) Status Register */\r
+  #define REG_TWI0_IER                   (0xF8014024U) /**< \brief (TWI0) Interrupt Enable Register */\r
+  #define REG_TWI0_IDR                   (0xF8014028U) /**< \brief (TWI0) Interrupt Disable Register */\r
+  #define REG_TWI0_IMR                   (0xF801402CU) /**< \brief (TWI0) Interrupt Mask Register */\r
+  #define REG_TWI0_RHR                   (0xF8014030U) /**< \brief (TWI0) Receive Holding Register */\r
+  #define REG_TWI0_THR                   (0xF8014034U) /**< \brief (TWI0) Transmit Holding Register */\r
+  #define REG_TWI0_WPMR                  (0xF80140E4U) /**< \brief (TWI0) Protection Mode Register */\r
+  #define REG_TWI0_WPSR                  (0xF80140E8U) /**< \brief (TWI0) Protection Status Register */\r
+#else\r
+  #define REG_TWI0_CR   (*(__O  uint32_t*)0xF8014000U) /**< \brief (TWI0) Control Register */\r
+  #define REG_TWI0_MMR  (*(__IO uint32_t*)0xF8014004U) /**< \brief (TWI0) Master Mode Register */\r
+  #define REG_TWI0_SMR  (*(__IO uint32_t*)0xF8014008U) /**< \brief (TWI0) Slave Mode Register */\r
+  #define REG_TWI0_IADR (*(__IO uint32_t*)0xF801400CU) /**< \brief (TWI0) Internal Address Register */\r
+  #define REG_TWI0_CWGR (*(__IO uint32_t*)0xF8014010U) /**< \brief (TWI0) Clock Waveform Generator Register */\r
+  #define REG_TWI0_SR   (*(__I  uint32_t*)0xF8014020U) /**< \brief (TWI0) Status Register */\r
+  #define REG_TWI0_IER  (*(__O  uint32_t*)0xF8014024U) /**< \brief (TWI0) Interrupt Enable Register */\r
+  #define REG_TWI0_IDR  (*(__O  uint32_t*)0xF8014028U) /**< \brief (TWI0) Interrupt Disable Register */\r
+  #define REG_TWI0_IMR  (*(__I  uint32_t*)0xF801402CU) /**< \brief (TWI0) Interrupt Mask Register */\r
+  #define REG_TWI0_RHR  (*(__I  uint32_t*)0xF8014030U) /**< \brief (TWI0) Receive Holding Register */\r
+  #define REG_TWI0_THR  (*(__O  uint32_t*)0xF8014034U) /**< \brief (TWI0) Transmit Holding Register */\r
+  #define REG_TWI0_WPMR (*(__IO uint32_t*)0xF80140E4U) /**< \brief (TWI0) Protection Mode Register */\r
+  #define REG_TWI0_WPSR (*(__I  uint32_t*)0xF80140E8U) /**< \brief (TWI0) Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TWI1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TWI1_CR                    (0xF8018000U) /**< \brief (TWI1) Control Register */\r
+  #define REG_TWI1_MMR                   (0xF8018004U) /**< \brief (TWI1) Master Mode Register */\r
+  #define REG_TWI1_SMR                   (0xF8018008U) /**< \brief (TWI1) Slave Mode Register */\r
+  #define REG_TWI1_IADR                  (0xF801800CU) /**< \brief (TWI1) Internal Address Register */\r
+  #define REG_TWI1_CWGR                  (0xF8018010U) /**< \brief (TWI1) Clock Waveform Generator Register */\r
+  #define REG_TWI1_SR                    (0xF8018020U) /**< \brief (TWI1) Status Register */\r
+  #define REG_TWI1_IER                   (0xF8018024U) /**< \brief (TWI1) Interrupt Enable Register */\r
+  #define REG_TWI1_IDR                   (0xF8018028U) /**< \brief (TWI1) Interrupt Disable Register */\r
+  #define REG_TWI1_IMR                   (0xF801802CU) /**< \brief (TWI1) Interrupt Mask Register */\r
+  #define REG_TWI1_RHR                   (0xF8018030U) /**< \brief (TWI1) Receive Holding Register */\r
+  #define REG_TWI1_THR                   (0xF8018034U) /**< \brief (TWI1) Transmit Holding Register */\r
+  #define REG_TWI1_WPMR                  (0xF80180E4U) /**< \brief (TWI1) Protection Mode Register */\r
+  #define REG_TWI1_WPSR                  (0xF80180E8U) /**< \brief (TWI1) Protection Status Register */\r
+#else\r
+  #define REG_TWI1_CR   (*(__O  uint32_t*)0xF8018000U) /**< \brief (TWI1) Control Register */\r
+  #define REG_TWI1_MMR  (*(__IO uint32_t*)0xF8018004U) /**< \brief (TWI1) Master Mode Register */\r
+  #define REG_TWI1_SMR  (*(__IO uint32_t*)0xF8018008U) /**< \brief (TWI1) Slave Mode Register */\r
+  #define REG_TWI1_IADR (*(__IO uint32_t*)0xF801800CU) /**< \brief (TWI1) Internal Address Register */\r
+  #define REG_TWI1_CWGR (*(__IO uint32_t*)0xF8018010U) /**< \brief (TWI1) Clock Waveform Generator Register */\r
+  #define REG_TWI1_SR   (*(__I  uint32_t*)0xF8018020U) /**< \brief (TWI1) Status Register */\r
+  #define REG_TWI1_IER  (*(__O  uint32_t*)0xF8018024U) /**< \brief (TWI1) Interrupt Enable Register */\r
+  #define REG_TWI1_IDR  (*(__O  uint32_t*)0xF8018028U) /**< \brief (TWI1) Interrupt Disable Register */\r
+  #define REG_TWI1_IMR  (*(__I  uint32_t*)0xF801802CU) /**< \brief (TWI1) Interrupt Mask Register */\r
+  #define REG_TWI1_RHR  (*(__I  uint32_t*)0xF8018030U) /**< \brief (TWI1) Receive Holding Register */\r
+  #define REG_TWI1_THR  (*(__O  uint32_t*)0xF8018034U) /**< \brief (TWI1) Transmit Holding Register */\r
+  #define REG_TWI1_WPMR (*(__IO uint32_t*)0xF80180E4U) /**< \brief (TWI1) Protection Mode Register */\r
+  #define REG_TWI1_WPSR (*(__I  uint32_t*)0xF80180E8U) /**< \brief (TWI1) Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TC0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TC0_CCR0                   (0xF801C000U) /**< \brief (TC0) Channel Control Register (channel = 0) */\r
+  #define REG_TC0_CMR0                   (0xF801C004U) /**< \brief (TC0) Channel Mode Register (channel = 0) */\r
+  #define REG_TC0_SMMR0                  (0xF801C008U) /**< \brief (TC0) Stepper Motor Mode Register (channel = 0) */\r
+  #define REG_TC0_RAB0                   (0xF801C00CU) /**< \brief (TC0) Register AB (channel = 0) */\r
+  #define REG_TC0_CV0                    (0xF801C010U) /**< \brief (TC0) Counter Value (channel = 0) */\r
+  #define REG_TC0_RA0                    (0xF801C014U) /**< \brief (TC0) Register A (channel = 0) */\r
+  #define REG_TC0_RB0                    (0xF801C018U) /**< \brief (TC0) Register B (channel = 0) */\r
+  #define REG_TC0_RC0                    (0xF801C01CU) /**< \brief (TC0) Register C (channel = 0) */\r
+  #define REG_TC0_SR0                    (0xF801C020U) /**< \brief (TC0) Status Register (channel = 0) */\r
+  #define REG_TC0_IER0                   (0xF801C024U) /**< \brief (TC0) Interrupt Enable Register (channel = 0) */\r
+  #define REG_TC0_IDR0                   (0xF801C028U) /**< \brief (TC0) Interrupt Disable Register (channel = 0) */\r
+  #define REG_TC0_IMR0                   (0xF801C02CU) /**< \brief (TC0) Interrupt Mask Register (channel = 0) */\r
+  #define REG_TC0_EMR0                   (0xF801C030U) /**< \brief (TC0) Extended Mode Register (channel = 0) */\r
+  #define REG_TC0_CCR1                   (0xF801C040U) /**< \brief (TC0) Channel Control Register (channel = 1) */\r
+  #define REG_TC0_CMR1                   (0xF801C044U) /**< \brief (TC0) Channel Mode Register (channel = 1) */\r
+  #define REG_TC0_SMMR1                  (0xF801C048U) /**< \brief (TC0) Stepper Motor Mode Register (channel = 1) */\r
+  #define REG_TC0_RAB1                   (0xF801C04CU) /**< \brief (TC0) Register AB (channel = 1) */\r
+  #define REG_TC0_CV1                    (0xF801C050U) /**< \brief (TC0) Counter Value (channel = 1) */\r
+  #define REG_TC0_RA1                    (0xF801C054U) /**< \brief (TC0) Register A (channel = 1) */\r
+  #define REG_TC0_RB1                    (0xF801C058U) /**< \brief (TC0) Register B (channel = 1) */\r
+  #define REG_TC0_RC1                    (0xF801C05CU) /**< \brief (TC0) Register C (channel = 1) */\r
+  #define REG_TC0_SR1                    (0xF801C060U) /**< \brief (TC0) Status Register (channel = 1) */\r
+  #define REG_TC0_IER1                   (0xF801C064U) /**< \brief (TC0) Interrupt Enable Register (channel = 1) */\r
+  #define REG_TC0_IDR1                   (0xF801C068U) /**< \brief (TC0) Interrupt Disable Register (channel = 1) */\r
+  #define REG_TC0_IMR1                   (0xF801C06CU) /**< \brief (TC0) Interrupt Mask Register (channel = 1) */\r
+  #define REG_TC0_EMR1                   (0xF801C070U) /**< \brief (TC0) Extended Mode Register (channel = 1) */\r
+  #define REG_TC0_CCR2                   (0xF801C080U) /**< \brief (TC0) Channel Control Register (channel = 2) */\r
+  #define REG_TC0_CMR2                   (0xF801C084U) /**< \brief (TC0) Channel Mode Register (channel = 2) */\r
+  #define REG_TC0_SMMR2                  (0xF801C088U) /**< \brief (TC0) Stepper Motor Mode Register (channel = 2) */\r
+  #define REG_TC0_RAB2                   (0xF801C08CU) /**< \brief (TC0) Register AB (channel = 2) */\r
+  #define REG_TC0_CV2                    (0xF801C090U) /**< \brief (TC0) Counter Value (channel = 2) */\r
+  #define REG_TC0_RA2                    (0xF801C094U) /**< \brief (TC0) Register A (channel = 2) */\r
+  #define REG_TC0_RB2                    (0xF801C098U) /**< \brief (TC0) Register B (channel = 2) */\r
+  #define REG_TC0_RC2                    (0xF801C09CU) /**< \brief (TC0) Register C (channel = 2) */\r
+  #define REG_TC0_SR2                    (0xF801C0A0U) /**< \brief (TC0) Status Register (channel = 2) */\r
+  #define REG_TC0_IER2                   (0xF801C0A4U) /**< \brief (TC0) Interrupt Enable Register (channel = 2) */\r
+  #define REG_TC0_IDR2                   (0xF801C0A8U) /**< \brief (TC0) Interrupt Disable Register (channel = 2) */\r
+  #define REG_TC0_IMR2                   (0xF801C0ACU) /**< \brief (TC0) Interrupt Mask Register (channel = 2) */\r
+  #define REG_TC0_EMR2                   (0xF801C0B0U) /**< \brief (TC0) Extended Mode Register (channel = 2) */\r
+  #define REG_TC0_BCR                    (0xF801C0C0U) /**< \brief (TC0) Block Control Register */\r
+  #define REG_TC0_BMR                    (0xF801C0C4U) /**< \brief (TC0) Block Mode Register */\r
+  #define REG_TC0_QIER                   (0xF801C0C8U) /**< \brief (TC0) QDEC Interrupt Enable Register */\r
+  #define REG_TC0_QIDR                   (0xF801C0CCU) /**< \brief (TC0) QDEC Interrupt Disable Register */\r
+  #define REG_TC0_QIMR                   (0xF801C0D0U) /**< \brief (TC0) QDEC Interrupt Mask Register */\r
+  #define REG_TC0_QISR                   (0xF801C0D4U) /**< \brief (TC0) QDEC Interrupt Status Register */\r
+  #define REG_TC0_FMR                    (0xF801C0D8U) /**< \brief (TC0) Fault Mode Register */\r
+  #define REG_TC0_WPMR                   (0xF801C0E4U) /**< \brief (TC0) Write Protect Mode Register */\r
+#else\r
+  #define REG_TC0_CCR0  (*(__O  uint32_t*)0xF801C000U) /**< \brief (TC0) Channel Control Register (channel = 0) */\r
+  #define REG_TC0_CMR0  (*(__IO uint32_t*)0xF801C004U) /**< \brief (TC0) Channel Mode Register (channel = 0) */\r
+  #define REG_TC0_SMMR0 (*(__IO uint32_t*)0xF801C008U) /**< \brief (TC0) Stepper Motor Mode Register (channel = 0) */\r
+  #define REG_TC0_RAB0  (*(__I  uint32_t*)0xF801C00CU) /**< \brief (TC0) Register AB (channel = 0) */\r
+  #define REG_TC0_CV0   (*(__I  uint32_t*)0xF801C010U) /**< \brief (TC0) Counter Value (channel = 0) */\r
+  #define REG_TC0_RA0   (*(__IO uint32_t*)0xF801C014U) /**< \brief (TC0) Register A (channel = 0) */\r
+  #define REG_TC0_RB0   (*(__IO uint32_t*)0xF801C018U) /**< \brief (TC0) Register B (channel = 0) */\r
+  #define REG_TC0_RC0   (*(__IO uint32_t*)0xF801C01CU) /**< \brief (TC0) Register C (channel = 0) */\r
+  #define REG_TC0_SR0   (*(__I  uint32_t*)0xF801C020U) /**< \brief (TC0) Status Register (channel = 0) */\r
+  #define REG_TC0_IER0  (*(__O  uint32_t*)0xF801C024U) /**< \brief (TC0) Interrupt Enable Register (channel = 0) */\r
+  #define REG_TC0_IDR0  (*(__O  uint32_t*)0xF801C028U) /**< \brief (TC0) Interrupt Disable Register (channel = 0) */\r
+  #define REG_TC0_IMR0  (*(__I  uint32_t*)0xF801C02CU) /**< \brief (TC0) Interrupt Mask Register (channel = 0) */\r
+  #define REG_TC0_EMR0  (*(__IO uint32_t*)0xF801C030U) /**< \brief (TC0) Extended Mode Register (channel = 0) */\r
+  #define REG_TC0_CCR1  (*(__O  uint32_t*)0xF801C040U) /**< \brief (TC0) Channel Control Register (channel = 1) */\r
+  #define REG_TC0_CMR1  (*(__IO uint32_t*)0xF801C044U) /**< \brief (TC0) Channel Mode Register (channel = 1) */\r
+  #define REG_TC0_SMMR1 (*(__IO uint32_t*)0xF801C048U) /**< \brief (TC0) Stepper Motor Mode Register (channel = 1) */\r
+  #define REG_TC0_RAB1  (*(__I  uint32_t*)0xF801C04CU) /**< \brief (TC0) Register AB (channel = 1) */\r
+  #define REG_TC0_CV1   (*(__I  uint32_t*)0xF801C050U) /**< \brief (TC0) Counter Value (channel = 1) */\r
+  #define REG_TC0_RA1   (*(__IO uint32_t*)0xF801C054U) /**< \brief (TC0) Register A (channel = 1) */\r
+  #define REG_TC0_RB1   (*(__IO uint32_t*)0xF801C058U) /**< \brief (TC0) Register B (channel = 1) */\r
+  #define REG_TC0_RC1   (*(__IO uint32_t*)0xF801C05CU) /**< \brief (TC0) Register C (channel = 1) */\r
+  #define REG_TC0_SR1   (*(__I  uint32_t*)0xF801C060U) /**< \brief (TC0) Status Register (channel = 1) */\r
+  #define REG_TC0_IER1  (*(__O  uint32_t*)0xF801C064U) /**< \brief (TC0) Interrupt Enable Register (channel = 1) */\r
+  #define REG_TC0_IDR1  (*(__O  uint32_t*)0xF801C068U) /**< \brief (TC0) Interrupt Disable Register (channel = 1) */\r
+  #define REG_TC0_IMR1  (*(__I  uint32_t*)0xF801C06CU) /**< \brief (TC0) Interrupt Mask Register (channel = 1) */\r
+  #define REG_TC0_EMR1  (*(__IO uint32_t*)0xF801C070U) /**< \brief (TC0) Extended Mode Register (channel = 1) */\r
+  #define REG_TC0_CCR2  (*(__O  uint32_t*)0xF801C080U) /**< \brief (TC0) Channel Control Register (channel = 2) */\r
+  #define REG_TC0_CMR2  (*(__IO uint32_t*)0xF801C084U) /**< \brief (TC0) Channel Mode Register (channel = 2) */\r
+  #define REG_TC0_SMMR2 (*(__IO uint32_t*)0xF801C088U) /**< \brief (TC0) Stepper Motor Mode Register (channel = 2) */\r
+  #define REG_TC0_RAB2  (*(__I  uint32_t*)0xF801C08CU) /**< \brief (TC0) Register AB (channel = 2) */\r
+  #define REG_TC0_CV2   (*(__I  uint32_t*)0xF801C090U) /**< \brief (TC0) Counter Value (channel = 2) */\r
+  #define REG_TC0_RA2   (*(__IO uint32_t*)0xF801C094U) /**< \brief (TC0) Register A (channel = 2) */\r
+  #define REG_TC0_RB2   (*(__IO uint32_t*)0xF801C098U) /**< \brief (TC0) Register B (channel = 2) */\r
+  #define REG_TC0_RC2   (*(__IO uint32_t*)0xF801C09CU) /**< \brief (TC0) Register C (channel = 2) */\r
+  #define REG_TC0_SR2   (*(__I  uint32_t*)0xF801C0A0U) /**< \brief (TC0) Status Register (channel = 2) */\r
+  #define REG_TC0_IER2  (*(__O  uint32_t*)0xF801C0A4U) /**< \brief (TC0) Interrupt Enable Register (channel = 2) */\r
+  #define REG_TC0_IDR2  (*(__O  uint32_t*)0xF801C0A8U) /**< \brief (TC0) Interrupt Disable Register (channel = 2) */\r
+  #define REG_TC0_IMR2  (*(__I  uint32_t*)0xF801C0ACU) /**< \brief (TC0) Interrupt Mask Register (channel = 2) */\r
+  #define REG_TC0_EMR2  (*(__IO uint32_t*)0xF801C0B0U) /**< \brief (TC0) Extended Mode Register (channel = 2) */\r
+  #define REG_TC0_BCR   (*(__O  uint32_t*)0xF801C0C0U) /**< \brief (TC0) Block Control Register */\r
+  #define REG_TC0_BMR   (*(__IO uint32_t*)0xF801C0C4U) /**< \brief (TC0) Block Mode Register */\r
+  #define REG_TC0_QIER  (*(__O  uint32_t*)0xF801C0C8U) /**< \brief (TC0) QDEC Interrupt Enable Register */\r
+  #define REG_TC0_QIDR  (*(__O  uint32_t*)0xF801C0CCU) /**< \brief (TC0) QDEC Interrupt Disable Register */\r
+  #define REG_TC0_QIMR  (*(__I  uint32_t*)0xF801C0D0U) /**< \brief (TC0) QDEC Interrupt Mask Register */\r
+  #define REG_TC0_QISR  (*(__I  uint32_t*)0xF801C0D4U) /**< \brief (TC0) QDEC Interrupt Status Register */\r
+  #define REG_TC0_FMR   (*(__IO uint32_t*)0xF801C0D8U) /**< \brief (TC0) Fault Mode Register */\r
+  #define REG_TC0_WPMR  (*(__IO uint32_t*)0xF801C0E4U) /**< \brief (TC0) Write Protect Mode Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for GMAC0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_GMAC0_NCR                        (0xF8020000U) /**< \brief (GMAC0) Network Control Register */\r
+  #define REG_GMAC0_NCFGR                      (0xF8020004U) /**< \brief (GMAC0) Network Configuration Register */\r
+  #define REG_GMAC0_NSR                        (0xF8020008U) /**< \brief (GMAC0) Network Status Register */\r
+  #define REG_GMAC0_UR                         (0xF802000CU) /**< \brief (GMAC0) User Register */\r
+  #define REG_GMAC0_DCFGR                      (0xF8020010U) /**< \brief (GMAC0) DMA Configuration Register */\r
+  #define REG_GMAC0_TSR                        (0xF8020014U) /**< \brief (GMAC0) Transmit Status Register */\r
+  #define REG_GMAC0_RBQB                       (0xF8020018U) /**< \brief (GMAC0) Receive Buffer Queue Base Address */\r
+  #define REG_GMAC0_TBQB                       (0xF802001CU) /**< \brief (GMAC0) Transmit Buffer Queue Base Address */\r
+  #define REG_GMAC0_RSR                        (0xF8020020U) /**< \brief (GMAC0) Receive Status Register */\r
+  #define REG_GMAC0_ISR                        (0xF8020024U) /**< \brief (GMAC0) Interrupt Status Register */\r
+  #define REG_GMAC0_IER                        (0xF8020028U) /**< \brief (GMAC0) Interrupt Enable Register */\r
+  #define REG_GMAC0_IDR                        (0xF802002CU) /**< \brief (GMAC0) Interrupt Disable Register */\r
+  #define REG_GMAC0_IMR                        (0xF8020030U) /**< \brief (GMAC0) Interrupt Mask Register */\r
+  #define REG_GMAC0_MAN                        (0xF8020034U) /**< \brief (GMAC0) PHY Maintenance Register */\r
+  #define REG_GMAC0_RPQ                        (0xF8020038U) /**< \brief (GMAC0) Received Pause Quantum Register */\r
+  #define REG_GMAC0_TPQ                        (0xF802003CU) /**< \brief (GMAC0) Transmit Pause Quantum Register */\r
+  #define REG_GMAC0_HRB                        (0xF8020080U) /**< \brief (GMAC0) Hash Register Bottom [31:0] */\r
+  #define REG_GMAC0_HRT                        (0xF8020084U) /**< \brief (GMAC0) Hash Register Top [63:32] */\r
+  #define REG_GMAC0_SAB1                       (0xF8020088U) /**< \brief (GMAC0) Specific Address 1 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT1                       (0xF802008CU) /**< \brief (GMAC0) Specific Address 1 Top [47:32] Register */\r
+  #define REG_GMAC0_SAB2                       (0xF8020090U) /**< \brief (GMAC0) Specific Address 2 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT2                       (0xF8020094U) /**< \brief (GMAC0) Specific Address 2 Top [47:32] Register */\r
+  #define REG_GMAC0_SAB3                       (0xF8020098U) /**< \brief (GMAC0) Specific Address 3 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT3                       (0xF802009CU) /**< \brief (GMAC0) Specific Address 3 Top [47:32] Register */\r
+  #define REG_GMAC0_SAB4                       (0xF80200A0U) /**< \brief (GMAC0) Specific Address 4 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT4                       (0xF80200A4U) /**< \brief (GMAC0) Specific Address 4 Top [47:32] Register */\r
+  #define REG_GMAC0_TIDM                       (0xF80200A8U) /**< \brief (GMAC0) Type ID Match 1 Register */\r
+  #define REG_GMAC0_WOL                        (0xF80200B8U) /**< \brief (GMAC0) Wake on LAN Register */\r
+  #define REG_GMAC0_IPGS                       (0xF80200BCU) /**< \brief (GMAC0) IPG Stretch Register */\r
+  #define REG_GMAC0_SVLAN                      (0xF80200C0U) /**< \brief (GMAC0) Stacked VLAN Register */\r
+  #define REG_GMAC0_TPFCP                      (0xF80200C4U) /**< \brief (GMAC0) Transmit PFC Pause Register */\r
+  #define REG_GMAC0_SAMB1                      (0xF80200C8U) /**< \brief (GMAC0) Specific Address 1 Mask Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAMT1                      (0xF80200CCU) /**< \brief (GMAC0) Specific Address 1 Mask Top [47:32] Register */\r
+  #define REG_GMAC0_OTLO                       (0xF8020100U) /**< \brief (GMAC0) Octets Transmitted [31:0] Register */\r
+  #define REG_GMAC0_OTHI                       (0xF8020104U) /**< \brief (GMAC0) Octets Transmitted [47:32] Register */\r
+  #define REG_GMAC0_FT                         (0xF8020108U) /**< \brief (GMAC0) Frames Transmitted Register */\r
+  #define REG_GMAC0_BCFT                       (0xF802010CU) /**< \brief (GMAC0) Broadcast Frames Transmitted Register */\r
+  #define REG_GMAC0_MFT                        (0xF8020110U) /**< \brief (GMAC0) Multicast Frames Transmitted Register */\r
+  #define REG_GMAC0_PFT                        (0xF8020114U) /**< \brief (GMAC0) Pause Frames Transmitted Register */\r
+  #define REG_GMAC0_BFT64                      (0xF8020118U) /**< \brief (GMAC0) 64 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT127                    (0xF802011CU) /**< \brief (GMAC0) 65 to 127 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT255                    (0xF8020120U) /**< \brief (GMAC0) 128 to 255 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT511                    (0xF8020124U) /**< \brief (GMAC0) 256 to 511 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT1023                   (0xF8020128U) /**< \brief (GMAC0) 512 to 1023 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT1518                   (0xF802012CU) /**< \brief (GMAC0) 1024 to 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_GTBFT1518                  (0xF8020130U) /**< \brief (GMAC0) Greater Than 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TUR                        (0xF8020134U) /**< \brief (GMAC0) Transmit Under Runs Register */\r
+  #define REG_GMAC0_SCF                        (0xF8020138U) /**< \brief (GMAC0) Single Collision Frames Register */\r
+  #define REG_GMAC0_MCF                        (0xF802013CU) /**< \brief (GMAC0) Multiple Collision Frames Register */\r
+  #define REG_GMAC0_EC                         (0xF8020140U) /**< \brief (GMAC0) Excessive Collisions Register */\r
+  #define REG_GMAC0_LC                         (0xF8020144U) /**< \brief (GMAC0) Late Collisions Register */\r
+  #define REG_GMAC0_DTF                        (0xF8020148U) /**< \brief (GMAC0) Deferred Transmission Frames Register */\r
+  #define REG_GMAC0_CSE                        (0xF802014CU) /**< \brief (GMAC0) Carrier Sense Errors Register */\r
+  #define REG_GMAC0_ORLO                       (0xF8020150U) /**< \brief (GMAC0) Octets Received [31:0] Received */\r
+  #define REG_GMAC0_ORHI                       (0xF8020154U) /**< \brief (GMAC0) Octets Received [47:32] Received */\r
+  #define REG_GMAC0_FR                         (0xF8020158U) /**< \brief (GMAC0) Frames Received Register */\r
+  #define REG_GMAC0_BCFR                       (0xF802015CU) /**< \brief (GMAC0) Broadcast Frames Received Register */\r
+  #define REG_GMAC0_MFR                        (0xF8020160U) /**< \brief (GMAC0) Multicast Frames Received Register */\r
+  #define REG_GMAC0_PFR                        (0xF8020164U) /**< \brief (GMAC0) Pause Frames Received Register */\r
+  #define REG_GMAC0_BFR64                      (0xF8020168U) /**< \brief (GMAC0) 64 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR127                    (0xF802016CU) /**< \brief (GMAC0) 65 to 127 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR255                    (0xF8020170U) /**< \brief (GMAC0) 128 to 255 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR511                    (0xF8020174U) /**< \brief (GMAC0) 256 to 511Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR1023                   (0xF8020178U) /**< \brief (GMAC0) 512 to 1023 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR1518                   (0xF802017CU) /**< \brief (GMAC0) 1024 to 1518 Byte Frames Received Register */\r
+  #define REG_GMAC0_TMXBFR                     (0xF8020180U) /**< \brief (GMAC0) 1519 to Maximum Byte Frames Received Register */\r
+  #define REG_GMAC0_UFR                        (0xF8020184U) /**< \brief (GMAC0) Undersize Frames Received Register */\r
+  #define REG_GMAC0_OFR                        (0xF8020188U) /**< \brief (GMAC0) Oversize Frames Received Register */\r
+  #define REG_GMAC0_JR                         (0xF802018CU) /**< \brief (GMAC0) Jabbers Received Register */\r
+  #define REG_GMAC0_FCSE                       (0xF8020190U) /**< \brief (GMAC0) Frame Check Sequence Errors Register */\r
+  #define REG_GMAC0_LFFE                       (0xF8020194U) /**< \brief (GMAC0) Length Field Frame Errors Register */\r
+  #define REG_GMAC0_RSE                        (0xF8020198U) /**< \brief (GMAC0) Receive Symbol Errors Register */\r
+  #define REG_GMAC0_AE                         (0xF802019CU) /**< \brief (GMAC0) Alignment Errors Register */\r
+  #define REG_GMAC0_RRE                        (0xF80201A0U) /**< \brief (GMAC0) Receive Resource Errors Register */\r
+  #define REG_GMAC0_ROE                        (0xF80201A4U) /**< \brief (GMAC0) Receive Overrun Register */\r
+  #define REG_GMAC0_IHCE                       (0xF80201A8U) /**< \brief (GMAC0) IP Header Checksum Errors Register */\r
+  #define REG_GMAC0_TCE                        (0xF80201ACU) /**< \brief (GMAC0) TCP Checksum Errors Register */\r
+  #define REG_GMAC0_UCE                        (0xF80201B0U) /**< \brief (GMAC0) UDP Checksum Errors Register */\r
+  #define REG_GMAC0_TSSS                       (0xF80201C8U) /**< \brief (GMAC0) 1588 Timer Sync Strobe Seconds Register */\r
+  #define REG_GMAC0_TSSN                       (0xF80201CCU) /**< \brief (GMAC0) 1588 Timer Sync Strobe Nanoseconds Register */\r
+  #define REG_GMAC0_TS                         (0xF80201D0U) /**< \brief (GMAC0) 1588 Timer Seconds Register */\r
+  #define REG_GMAC0_TN                         (0xF80201D4U) /**< \brief (GMAC0) 1588 Timer Nanoseconds Register */\r
+  #define REG_GMAC0_TA                         (0xF80201D8U) /**< \brief (GMAC0) 1588 Timer Adjust Register */\r
+  #define REG_GMAC0_TI                         (0xF80201DCU) /**< \brief (GMAC0) 1588 Timer Increment Register */\r
+  #define REG_GMAC0_EFTS                       (0xF80201E0U) /**< \brief (GMAC0) PTP Event Frame Transmitted Seconds */\r
+  #define REG_GMAC0_EFTN                       (0xF80201E4U) /**< \brief (GMAC0) PTP Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC0_EFRS                       (0xF80201E8U) /**< \brief (GMAC0) PTP Event Frame Received Seconds */\r
+  #define REG_GMAC0_EFRN                       (0xF80201ECU) /**< \brief (GMAC0) PTP Event Frame Received Nanoseconds */\r
+  #define REG_GMAC0_PEFTS                      (0xF80201F0U) /**< \brief (GMAC0) PTP Peer Event Frame Transmitted Seconds */\r
+  #define REG_GMAC0_PEFTN                      (0xF80201F4U) /**< \brief (GMAC0) PTP Peer Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC0_PEFRS                      (0xF80201F8U) /**< \brief (GMAC0) PTP Peer Event Frame Received Seconds */\r
+  #define REG_GMAC0_PEFRN                      (0xF80201FCU) /**< \brief (GMAC0) PTP Peer Event Frame Received Nanoseconds */\r
+#else\r
+  #define REG_GMAC0_NCR       (*(__IO uint32_t*)0xF8020000U) /**< \brief (GMAC0) Network Control Register */\r
+  #define REG_GMAC0_NCFGR     (*(__IO uint32_t*)0xF8020004U) /**< \brief (GMAC0) Network Configuration Register */\r
+  #define REG_GMAC0_NSR       (*(__I  uint32_t*)0xF8020008U) /**< \brief (GMAC0) Network Status Register */\r
+  #define REG_GMAC0_UR        (*(__IO uint32_t*)0xF802000CU) /**< \brief (GMAC0) User Register */\r
+  #define REG_GMAC0_DCFGR     (*(__IO uint32_t*)0xF8020010U) /**< \brief (GMAC0) DMA Configuration Register */\r
+  #define REG_GMAC0_TSR       (*(__IO uint32_t*)0xF8020014U) /**< \brief (GMAC0) Transmit Status Register */\r
+  #define REG_GMAC0_RBQB      (*(__IO uint32_t*)0xF8020018U) /**< \brief (GMAC0) Receive Buffer Queue Base Address */\r
+  #define REG_GMAC0_TBQB      (*(__IO uint32_t*)0xF802001CU) /**< \brief (GMAC0) Transmit Buffer Queue Base Address */\r
+  #define REG_GMAC0_RSR       (*(__IO uint32_t*)0xF8020020U) /**< \brief (GMAC0) Receive Status Register */\r
+  #define REG_GMAC0_ISR       (*(__I  uint32_t*)0xF8020024U) /**< \brief (GMAC0) Interrupt Status Register */\r
+  #define REG_GMAC0_IER       (*(__O  uint32_t*)0xF8020028U) /**< \brief (GMAC0) Interrupt Enable Register */\r
+  #define REG_GMAC0_IDR       (*(__O  uint32_t*)0xF802002CU) /**< \brief (GMAC0) Interrupt Disable Register */\r
+  #define REG_GMAC0_IMR       (*(__I  uint32_t*)0xF8020030U) /**< \brief (GMAC0) Interrupt Mask Register */\r
+  #define REG_GMAC0_MAN       (*(__IO uint32_t*)0xF8020034U) /**< \brief (GMAC0) PHY Maintenance Register */\r
+  #define REG_GMAC0_RPQ       (*(__I  uint32_t*)0xF8020038U) /**< \brief (GMAC0) Received Pause Quantum Register */\r
+  #define REG_GMAC0_TPQ       (*(__IO uint32_t*)0xF802003CU) /**< \brief (GMAC0) Transmit Pause Quantum Register */\r
+  #define REG_GMAC0_HRB       (*(__IO uint32_t*)0xF8020080U) /**< \brief (GMAC0) Hash Register Bottom [31:0] */\r
+  #define REG_GMAC0_HRT       (*(__IO uint32_t*)0xF8020084U) /**< \brief (GMAC0) Hash Register Top [63:32] */\r
+  #define REG_GMAC0_SAB1      (*(__IO uint32_t*)0xF8020088U) /**< \brief (GMAC0) Specific Address 1 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT1      (*(__IO uint32_t*)0xF802008CU) /**< \brief (GMAC0) Specific Address 1 Top [47:32] Register */\r
+  #define REG_GMAC0_SAB2      (*(__IO uint32_t*)0xF8020090U) /**< \brief (GMAC0) Specific Address 2 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT2      (*(__IO uint32_t*)0xF8020094U) /**< \brief (GMAC0) Specific Address 2 Top [47:32] Register */\r
+  #define REG_GMAC0_SAB3      (*(__IO uint32_t*)0xF8020098U) /**< \brief (GMAC0) Specific Address 3 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT3      (*(__IO uint32_t*)0xF802009CU) /**< \brief (GMAC0) Specific Address 3 Top [47:32] Register */\r
+  #define REG_GMAC0_SAB4      (*(__IO uint32_t*)0xF80200A0U) /**< \brief (GMAC0) Specific Address 4 Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAT4      (*(__IO uint32_t*)0xF80200A4U) /**< \brief (GMAC0) Specific Address 4 Top [47:32] Register */\r
+  #define REG_GMAC0_TIDM      (*(__IO uint32_t*)0xF80200A8U) /**< \brief (GMAC0) Type ID Match 1 Register */\r
+  #define REG_GMAC0_WOL       (*(__IO uint32_t*)0xF80200B8U) /**< \brief (GMAC0) Wake on LAN Register */\r
+  #define REG_GMAC0_IPGS      (*(__IO uint32_t*)0xF80200BCU) /**< \brief (GMAC0) IPG Stretch Register */\r
+  #define REG_GMAC0_SVLAN     (*(__IO uint32_t*)0xF80200C0U) /**< \brief (GMAC0) Stacked VLAN Register */\r
+  #define REG_GMAC0_TPFCP     (*(__IO uint32_t*)0xF80200C4U) /**< \brief (GMAC0) Transmit PFC Pause Register */\r
+  #define REG_GMAC0_SAMB1     (*(__IO uint32_t*)0xF80200C8U) /**< \brief (GMAC0) Specific Address 1 Mask Bottom [31:0] Register */\r
+  #define REG_GMAC0_SAMT1     (*(__IO uint32_t*)0xF80200CCU) /**< \brief (GMAC0) Specific Address 1 Mask Top [47:32] Register */\r
+  #define REG_GMAC0_OTLO      (*(__I  uint32_t*)0xF8020100U) /**< \brief (GMAC0) Octets Transmitted [31:0] Register */\r
+  #define REG_GMAC0_OTHI      (*(__I  uint32_t*)0xF8020104U) /**< \brief (GMAC0) Octets Transmitted [47:32] Register */\r
+  #define REG_GMAC0_FT        (*(__I  uint32_t*)0xF8020108U) /**< \brief (GMAC0) Frames Transmitted Register */\r
+  #define REG_GMAC0_BCFT      (*(__I  uint32_t*)0xF802010CU) /**< \brief (GMAC0) Broadcast Frames Transmitted Register */\r
+  #define REG_GMAC0_MFT       (*(__I  uint32_t*)0xF8020110U) /**< \brief (GMAC0) Multicast Frames Transmitted Register */\r
+  #define REG_GMAC0_PFT       (*(__I  uint32_t*)0xF8020114U) /**< \brief (GMAC0) Pause Frames Transmitted Register */\r
+  #define REG_GMAC0_BFT64     (*(__I  uint32_t*)0xF8020118U) /**< \brief (GMAC0) 64 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT127   (*(__I  uint32_t*)0xF802011CU) /**< \brief (GMAC0) 65 to 127 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT255   (*(__I  uint32_t*)0xF8020120U) /**< \brief (GMAC0) 128 to 255 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT511   (*(__I  uint32_t*)0xF8020124U) /**< \brief (GMAC0) 256 to 511 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT1023  (*(__I  uint32_t*)0xF8020128U) /**< \brief (GMAC0) 512 to 1023 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TBFT1518  (*(__I  uint32_t*)0xF802012CU) /**< \brief (GMAC0) 1024 to 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_GTBFT1518 (*(__I  uint32_t*)0xF8020130U) /**< \brief (GMAC0) Greater Than 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC0_TUR       (*(__I  uint32_t*)0xF8020134U) /**< \brief (GMAC0) Transmit Under Runs Register */\r
+  #define REG_GMAC0_SCF       (*(__I  uint32_t*)0xF8020138U) /**< \brief (GMAC0) Single Collision Frames Register */\r
+  #define REG_GMAC0_MCF       (*(__I  uint32_t*)0xF802013CU) /**< \brief (GMAC0) Multiple Collision Frames Register */\r
+  #define REG_GMAC0_EC        (*(__I  uint32_t*)0xF8020140U) /**< \brief (GMAC0) Excessive Collisions Register */\r
+  #define REG_GMAC0_LC        (*(__I  uint32_t*)0xF8020144U) /**< \brief (GMAC0) Late Collisions Register */\r
+  #define REG_GMAC0_DTF       (*(__I  uint32_t*)0xF8020148U) /**< \brief (GMAC0) Deferred Transmission Frames Register */\r
+  #define REG_GMAC0_CSE       (*(__I  uint32_t*)0xF802014CU) /**< \brief (GMAC0) Carrier Sense Errors Register */\r
+  #define REG_GMAC0_ORLO      (*(__I  uint32_t*)0xF8020150U) /**< \brief (GMAC0) Octets Received [31:0] Received */\r
+  #define REG_GMAC0_ORHI      (*(__I  uint32_t*)0xF8020154U) /**< \brief (GMAC0) Octets Received [47:32] Received */\r
+  #define REG_GMAC0_FR        (*(__I  uint32_t*)0xF8020158U) /**< \brief (GMAC0) Frames Received Register */\r
+  #define REG_GMAC0_BCFR      (*(__I  uint32_t*)0xF802015CU) /**< \brief (GMAC0) Broadcast Frames Received Register */\r
+  #define REG_GMAC0_MFR       (*(__I  uint32_t*)0xF8020160U) /**< \brief (GMAC0) Multicast Frames Received Register */\r
+  #define REG_GMAC0_PFR       (*(__I  uint32_t*)0xF8020164U) /**< \brief (GMAC0) Pause Frames Received Register */\r
+  #define REG_GMAC0_BFR64     (*(__I  uint32_t*)0xF8020168U) /**< \brief (GMAC0) 64 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR127   (*(__I  uint32_t*)0xF802016CU) /**< \brief (GMAC0) 65 to 127 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR255   (*(__I  uint32_t*)0xF8020170U) /**< \brief (GMAC0) 128 to 255 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR511   (*(__I  uint32_t*)0xF8020174U) /**< \brief (GMAC0) 256 to 511Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR1023  (*(__I  uint32_t*)0xF8020178U) /**< \brief (GMAC0) 512 to 1023 Byte Frames Received Register */\r
+  #define REG_GMAC0_TBFR1518  (*(__I  uint32_t*)0xF802017CU) /**< \brief (GMAC0) 1024 to 1518 Byte Frames Received Register */\r
+  #define REG_GMAC0_TMXBFR    (*(__I  uint32_t*)0xF8020180U) /**< \brief (GMAC0) 1519 to Maximum Byte Frames Received Register */\r
+  #define REG_GMAC0_UFR       (*(__I  uint32_t*)0xF8020184U) /**< \brief (GMAC0) Undersize Frames Received Register */\r
+  #define REG_GMAC0_OFR       (*(__I  uint32_t*)0xF8020188U) /**< \brief (GMAC0) Oversize Frames Received Register */\r
+  #define REG_GMAC0_JR        (*(__I  uint32_t*)0xF802018CU) /**< \brief (GMAC0) Jabbers Received Register */\r
+  #define REG_GMAC0_FCSE      (*(__I  uint32_t*)0xF8020190U) /**< \brief (GMAC0) Frame Check Sequence Errors Register */\r
+  #define REG_GMAC0_LFFE      (*(__I  uint32_t*)0xF8020194U) /**< \brief (GMAC0) Length Field Frame Errors Register */\r
+  #define REG_GMAC0_RSE       (*(__I  uint32_t*)0xF8020198U) /**< \brief (GMAC0) Receive Symbol Errors Register */\r
+  #define REG_GMAC0_AE        (*(__I  uint32_t*)0xF802019CU) /**< \brief (GMAC0) Alignment Errors Register */\r
+  #define REG_GMAC0_RRE       (*(__I  uint32_t*)0xF80201A0U) /**< \brief (GMAC0) Receive Resource Errors Register */\r
+  #define REG_GMAC0_ROE       (*(__I  uint32_t*)0xF80201A4U) /**< \brief (GMAC0) Receive Overrun Register */\r
+  #define REG_GMAC0_IHCE      (*(__I  uint32_t*)0xF80201A8U) /**< \brief (GMAC0) IP Header Checksum Errors Register */\r
+  #define REG_GMAC0_TCE       (*(__I  uint32_t*)0xF80201ACU) /**< \brief (GMAC0) TCP Checksum Errors Register */\r
+  #define REG_GMAC0_UCE       (*(__I  uint32_t*)0xF80201B0U) /**< \brief (GMAC0) UDP Checksum Errors Register */\r
+  #define REG_GMAC0_TSSS      (*(__IO uint32_t*)0xF80201C8U) /**< \brief (GMAC0) 1588 Timer Sync Strobe Seconds Register */\r
+  #define REG_GMAC0_TSSN      (*(__IO uint32_t*)0xF80201CCU) /**< \brief (GMAC0) 1588 Timer Sync Strobe Nanoseconds Register */\r
+  #define REG_GMAC0_TS        (*(__IO uint32_t*)0xF80201D0U) /**< \brief (GMAC0) 1588 Timer Seconds Register */\r
+  #define REG_GMAC0_TN        (*(__IO uint32_t*)0xF80201D4U) /**< \brief (GMAC0) 1588 Timer Nanoseconds Register */\r
+  #define REG_GMAC0_TA        (*(__O  uint32_t*)0xF80201D8U) /**< \brief (GMAC0) 1588 Timer Adjust Register */\r
+  #define REG_GMAC0_TI        (*(__IO uint32_t*)0xF80201DCU) /**< \brief (GMAC0) 1588 Timer Increment Register */\r
+  #define REG_GMAC0_EFTS      (*(__I  uint32_t*)0xF80201E0U) /**< \brief (GMAC0) PTP Event Frame Transmitted Seconds */\r
+  #define REG_GMAC0_EFTN      (*(__I  uint32_t*)0xF80201E4U) /**< \brief (GMAC0) PTP Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC0_EFRS      (*(__I  uint32_t*)0xF80201E8U) /**< \brief (GMAC0) PTP Event Frame Received Seconds */\r
+  #define REG_GMAC0_EFRN      (*(__I  uint32_t*)0xF80201ECU) /**< \brief (GMAC0) PTP Event Frame Received Nanoseconds */\r
+  #define REG_GMAC0_PEFTS     (*(__I  uint32_t*)0xF80201F0U) /**< \brief (GMAC0) PTP Peer Event Frame Transmitted Seconds */\r
+  #define REG_GMAC0_PEFTN     (*(__I  uint32_t*)0xF80201F4U) /**< \brief (GMAC0) PTP Peer Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC0_PEFRS     (*(__I  uint32_t*)0xF80201F8U) /**< \brief (GMAC0) PTP Peer Event Frame Received Seconds */\r
+  #define REG_GMAC0_PEFRN     (*(__I  uint32_t*)0xF80201FCU) /**< \brief (GMAC0) PTP Peer Event Frame Received Nanoseconds */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TWI2 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TWI2_CR                    (0xF8024000U) /**< \brief (TWI2) Control Register */\r
+  #define REG_TWI2_MMR                   (0xF8024004U) /**< \brief (TWI2) Master Mode Register */\r
+  #define REG_TWI2_SMR                   (0xF8024008U) /**< \brief (TWI2) Slave Mode Register */\r
+  #define REG_TWI2_IADR                  (0xF802400CU) /**< \brief (TWI2) Internal Address Register */\r
+  #define REG_TWI2_CWGR                  (0xF8024010U) /**< \brief (TWI2) Clock Waveform Generator Register */\r
+  #define REG_TWI2_SR                    (0xF8024020U) /**< \brief (TWI2) Status Register */\r
+  #define REG_TWI2_IER                   (0xF8024024U) /**< \brief (TWI2) Interrupt Enable Register */\r
+  #define REG_TWI2_IDR                   (0xF8024028U) /**< \brief (TWI2) Interrupt Disable Register */\r
+  #define REG_TWI2_IMR                   (0xF802402CU) /**< \brief (TWI2) Interrupt Mask Register */\r
+  #define REG_TWI2_RHR                   (0xF8024030U) /**< \brief (TWI2) Receive Holding Register */\r
+  #define REG_TWI2_THR                   (0xF8024034U) /**< \brief (TWI2) Transmit Holding Register */\r
+  #define REG_TWI2_WPMR                  (0xF80240E4U) /**< \brief (TWI2) Protection Mode Register */\r
+  #define REG_TWI2_WPSR                  (0xF80240E8U) /**< \brief (TWI2) Protection Status Register */\r
+#else\r
+  #define REG_TWI2_CR   (*(__O  uint32_t*)0xF8024000U) /**< \brief (TWI2) Control Register */\r
+  #define REG_TWI2_MMR  (*(__IO uint32_t*)0xF8024004U) /**< \brief (TWI2) Master Mode Register */\r
+  #define REG_TWI2_SMR  (*(__IO uint32_t*)0xF8024008U) /**< \brief (TWI2) Slave Mode Register */\r
+  #define REG_TWI2_IADR (*(__IO uint32_t*)0xF802400CU) /**< \brief (TWI2) Internal Address Register */\r
+  #define REG_TWI2_CWGR (*(__IO uint32_t*)0xF8024010U) /**< \brief (TWI2) Clock Waveform Generator Register */\r
+  #define REG_TWI2_SR   (*(__I  uint32_t*)0xF8024020U) /**< \brief (TWI2) Status Register */\r
+  #define REG_TWI2_IER  (*(__O  uint32_t*)0xF8024024U) /**< \brief (TWI2) Interrupt Enable Register */\r
+  #define REG_TWI2_IDR  (*(__O  uint32_t*)0xF8024028U) /**< \brief (TWI2) Interrupt Disable Register */\r
+  #define REG_TWI2_IMR  (*(__I  uint32_t*)0xF802402CU) /**< \brief (TWI2) Interrupt Mask Register */\r
+  #define REG_TWI2_RHR  (*(__I  uint32_t*)0xF8024030U) /**< \brief (TWI2) Receive Holding Register */\r
+  #define REG_TWI2_THR  (*(__O  uint32_t*)0xF8024034U) /**< \brief (TWI2) Transmit Holding Register */\r
+  #define REG_TWI2_WPMR (*(__IO uint32_t*)0xF80240E4U) /**< \brief (TWI2) Protection Mode Register */\r
+  #define REG_TWI2_WPSR (*(__I  uint32_t*)0xF80240E8U) /**< \brief (TWI2) Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SFR peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SFR_OHCIICR                  (0xF8028010U) /**< \brief (SFR) OHCI Interrupt Configuration Register */\r
+  #define REG_SFR_OHCIISR                  (0xF8028014U) /**< \brief (SFR) OHCI Interrupt Status Register */\r
+  #define REG_SFR_SECURE                   (0xF8028028U) /**< \brief (SFR) Security Configuration Register */\r
+  #define REG_SFR_EBICFG                   (0xF8028040U) /**< \brief (SFR) EBI Configuration Register */\r
+  #define REG_SFR_SN0                      (0xF802804CU) /**< \brief (SFR) Serial Number 0 Register */\r
+  #define REG_SFR_SN1                      (0xF8028050U) /**< \brief (SFR) Seriel Number 1 Register */\r
+#else\r
+  #define REG_SFR_OHCIICR (*(__IO uint32_t*)0xF8028010U) /**< \brief (SFR) OHCI Interrupt Configuration Register */\r
+  #define REG_SFR_OHCIISR (*(__I  uint32_t*)0xF8028014U) /**< \brief (SFR) OHCI Interrupt Status Register */\r
+  #define REG_SFR_SECURE  (*(__IO uint32_t*)0xF8028028U) /**< \brief (SFR) Security Configuration Register */\r
+  #define REG_SFR_EBICFG  (*(__IO uint32_t*)0xF8028040U) /**< \brief (SFR) EBI Configuration Register */\r
+  #define REG_SFR_SN0     (*(__I  uint32_t*)0xF802804CU) /**< \brief (SFR) Serial Number 0 Register */\r
+  #define REG_SFR_SN1     (*(__I  uint32_t*)0xF8028050U) /**< \brief (SFR) Seriel Number 1 Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for USART0 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_USART0_CR                    (0xF802C000U) /**< \brief (USART0) Control Register */\r
+  #define REG_USART0_MR                    (0xF802C004U) /**< \brief (USART0) Mode Register */\r
+  #define REG_USART0_IER                   (0xF802C008U) /**< \brief (USART0) Interrupt Enable Register */\r
+  #define REG_USART0_IDR                   (0xF802C00CU) /**< \brief (USART0) Interrupt Disable Register */\r
+  #define REG_USART0_IMR                   (0xF802C010U) /**< \brief (USART0) Interrupt Mask Register */\r
+  #define REG_USART0_CSR                   (0xF802C014U) /**< \brief (USART0) Channel Status Register */\r
+  #define REG_USART0_RHR                   (0xF802C018U) /**< \brief (USART0) Receiver Holding Register */\r
+  #define REG_USART0_THR                   (0xF802C01CU) /**< \brief (USART0) Transmitter Holding Register */\r
+  #define REG_USART0_BRGR                  (0xF802C020U) /**< \brief (USART0) Baud Rate Generator Register */\r
+  #define REG_USART0_RTOR                  (0xF802C024U) /**< \brief (USART0) Receiver Time-out Register */\r
+  #define REG_USART0_TTGR                  (0xF802C028U) /**< \brief (USART0) Transmitter Timeguard Register */\r
+  #define REG_USART0_FIDI                  (0xF802C040U) /**< \brief (USART0) FI DI Ratio Register */\r
+  #define REG_USART0_NER                   (0xF802C044U) /**< \brief (USART0) Number of Errors Register */\r
+  #define REG_USART0_IF                    (0xF802C04CU) /**< \brief (USART0) IrDA Filter Register */\r
+  #define REG_USART0_MAN                   (0xF802C050U) /**< \brief (USART0) Manchester Encoder Decoder Register */\r
+  #define REG_USART0_WPMR                  (0xF802C0E4U) /**< \brief (USART0) Write Protect Mode Register */\r
+  #define REG_USART0_WPSR                  (0xF802C0E8U) /**< \brief (USART0) Write Protect Status Register */\r
+#else\r
+  #define REG_USART0_CR   (*(__O  uint32_t*)0xF802C000U) /**< \brief (USART0) Control Register */\r
+  #define REG_USART0_MR   (*(__IO uint32_t*)0xF802C004U) /**< \brief (USART0) Mode Register */\r
+  #define REG_USART0_IER  (*(__O  uint32_t*)0xF802C008U) /**< \brief (USART0) Interrupt Enable Register */\r
+  #define REG_USART0_IDR  (*(__O  uint32_t*)0xF802C00CU) /**< \brief (USART0) Interrupt Disable Register */\r
+  #define REG_USART0_IMR  (*(__I  uint32_t*)0xF802C010U) /**< \brief (USART0) Interrupt Mask Register */\r
+  #define REG_USART0_CSR  (*(__I  uint32_t*)0xF802C014U) /**< \brief (USART0) Channel Status Register */\r
+  #define REG_USART0_RHR  (*(__I  uint32_t*)0xF802C018U) /**< \brief (USART0) Receiver Holding Register */\r
+  #define REG_USART0_THR  (*(__O  uint32_t*)0xF802C01CU) /**< \brief (USART0) Transmitter Holding Register */\r
+  #define REG_USART0_BRGR (*(__IO uint32_t*)0xF802C020U) /**< \brief (USART0) Baud Rate Generator Register */\r
+  #define REG_USART0_RTOR (*(__IO uint32_t*)0xF802C024U) /**< \brief (USART0) Receiver Time-out Register */\r
+  #define REG_USART0_TTGR (*(__IO uint32_t*)0xF802C028U) /**< \brief (USART0) Transmitter Timeguard Register */\r
+  #define REG_USART0_FIDI (*(__IO uint32_t*)0xF802C040U) /**< \brief (USART0) FI DI Ratio Register */\r
+  #define REG_USART0_NER  (*(__I  uint32_t*)0xF802C044U) /**< \brief (USART0) Number of Errors Register */\r
+  #define REG_USART0_IF   (*(__IO uint32_t*)0xF802C04CU) /**< \brief (USART0) IrDA Filter Register */\r
+  #define REG_USART0_MAN  (*(__IO uint32_t*)0xF802C050U) /**< \brief (USART0) Manchester Encoder Decoder Register */\r
+  #define REG_USART0_WPMR (*(__IO uint32_t*)0xF802C0E4U) /**< \brief (USART0) Write Protect Mode Register */\r
+  #define REG_USART0_WPSR (*(__I  uint32_t*)0xF802C0E8U) /**< \brief (USART0) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for USART1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_USART1_CR                    (0xF8030000U) /**< \brief (USART1) Control Register */\r
+  #define REG_USART1_MR                    (0xF8030004U) /**< \brief (USART1) Mode Register */\r
+  #define REG_USART1_IER                   (0xF8030008U) /**< \brief (USART1) Interrupt Enable Register */\r
+  #define REG_USART1_IDR                   (0xF803000CU) /**< \brief (USART1) Interrupt Disable Register */\r
+  #define REG_USART1_IMR                   (0xF8030010U) /**< \brief (USART1) Interrupt Mask Register */\r
+  #define REG_USART1_CSR                   (0xF8030014U) /**< \brief (USART1) Channel Status Register */\r
+  #define REG_USART1_RHR                   (0xF8030018U) /**< \brief (USART1) Receiver Holding Register */\r
+  #define REG_USART1_THR                   (0xF803001CU) /**< \brief (USART1) Transmitter Holding Register */\r
+  #define REG_USART1_BRGR                  (0xF8030020U) /**< \brief (USART1) Baud Rate Generator Register */\r
+  #define REG_USART1_RTOR                  (0xF8030024U) /**< \brief (USART1) Receiver Time-out Register */\r
+  #define REG_USART1_TTGR                  (0xF8030028U) /**< \brief (USART1) Transmitter Timeguard Register */\r
+  #define REG_USART1_FIDI                  (0xF8030040U) /**< \brief (USART1) FI DI Ratio Register */\r
+  #define REG_USART1_NER                   (0xF8030044U) /**< \brief (USART1) Number of Errors Register */\r
+  #define REG_USART1_IF                    (0xF803004CU) /**< \brief (USART1) IrDA Filter Register */\r
+  #define REG_USART1_MAN                   (0xF8030050U) /**< \brief (USART1) Manchester Encoder Decoder Register */\r
+  #define REG_USART1_WPMR                  (0xF80300E4U) /**< \brief (USART1) Write Protect Mode Register */\r
+  #define REG_USART1_WPSR                  (0xF80300E8U) /**< \brief (USART1) Write Protect Status Register */\r
+#else\r
+  #define REG_USART1_CR   (*(__O  uint32_t*)0xF8030000U) /**< \brief (USART1) Control Register */\r
+  #define REG_USART1_MR   (*(__IO uint32_t*)0xF8030004U) /**< \brief (USART1) Mode Register */\r
+  #define REG_USART1_IER  (*(__O  uint32_t*)0xF8030008U) /**< \brief (USART1) Interrupt Enable Register */\r
+  #define REG_USART1_IDR  (*(__O  uint32_t*)0xF803000CU) /**< \brief (USART1) Interrupt Disable Register */\r
+  #define REG_USART1_IMR  (*(__I  uint32_t*)0xF8030010U) /**< \brief (USART1) Interrupt Mask Register */\r
+  #define REG_USART1_CSR  (*(__I  uint32_t*)0xF8030014U) /**< \brief (USART1) Channel Status Register */\r
+  #define REG_USART1_RHR  (*(__I  uint32_t*)0xF8030018U) /**< \brief (USART1) Receiver Holding Register */\r
+  #define REG_USART1_THR  (*(__O  uint32_t*)0xF803001CU) /**< \brief (USART1) Transmitter Holding Register */\r
+  #define REG_USART1_BRGR (*(__IO uint32_t*)0xF8030020U) /**< \brief (USART1) Baud Rate Generator Register */\r
+  #define REG_USART1_RTOR (*(__IO uint32_t*)0xF8030024U) /**< \brief (USART1) Receiver Time-out Register */\r
+  #define REG_USART1_TTGR (*(__IO uint32_t*)0xF8030028U) /**< \brief (USART1) Transmitter Timeguard Register */\r
+  #define REG_USART1_FIDI (*(__IO uint32_t*)0xF8030040U) /**< \brief (USART1) FI DI Ratio Register */\r
+  #define REG_USART1_NER  (*(__I  uint32_t*)0xF8030044U) /**< \brief (USART1) Number of Errors Register */\r
+  #define REG_USART1_IF   (*(__IO uint32_t*)0xF803004CU) /**< \brief (USART1) IrDA Filter Register */\r
+  #define REG_USART1_MAN  (*(__IO uint32_t*)0xF8030050U) /**< \brief (USART1) Manchester Encoder Decoder Register */\r
+  #define REG_USART1_WPMR (*(__IO uint32_t*)0xF80300E4U) /**< \brief (USART1) Write Protect Mode Register */\r
+  #define REG_USART1_WPSR (*(__I  uint32_t*)0xF80300E8U) /**< \brief (USART1) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for HSMCI1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_HSMCI1_CR                     (0xFC000000U) /**< \brief (HSMCI1) Control Register */\r
+  #define REG_HSMCI1_MR                     (0xFC000004U) /**< \brief (HSMCI1) Mode Register */\r
+  #define REG_HSMCI1_DTOR                   (0xFC000008U) /**< \brief (HSMCI1) Data Timeout Register */\r
+  #define REG_HSMCI1_SDCR                   (0xFC00000CU) /**< \brief (HSMCI1) SD/SDIO Card Register */\r
+  #define REG_HSMCI1_ARGR                   (0xFC000010U) /**< \brief (HSMCI1) Argument Register */\r
+  #define REG_HSMCI1_CMDR                   (0xFC000014U) /**< \brief (HSMCI1) Command Register */\r
+  #define REG_HSMCI1_BLKR                   (0xFC000018U) /**< \brief (HSMCI1) Block Register */\r
+  #define REG_HSMCI1_CSTOR                  (0xFC00001CU) /**< \brief (HSMCI1) Completion Signal Timeout Register */\r
+  #define REG_HSMCI1_RSPR                   (0xFC000020U) /**< \brief (HSMCI1) Response Register */\r
+  #define REG_HSMCI1_RDR                    (0xFC000030U) /**< \brief (HSMCI1) Receive Data Register */\r
+  #define REG_HSMCI1_TDR                    (0xFC000034U) /**< \brief (HSMCI1) Transmit Data Register */\r
+  #define REG_HSMCI1_SR                     (0xFC000040U) /**< \brief (HSMCI1) Status Register */\r
+  #define REG_HSMCI1_IER                    (0xFC000044U) /**< \brief (HSMCI1) Interrupt Enable Register */\r
+  #define REG_HSMCI1_IDR                    (0xFC000048U) /**< \brief (HSMCI1) Interrupt Disable Register */\r
+  #define REG_HSMCI1_IMR                    (0xFC00004CU) /**< \brief (HSMCI1) Interrupt Mask Register */\r
+  #define REG_HSMCI1_DMA                    (0xFC000050U) /**< \brief (HSMCI1) DMA Configuration Register */\r
+  #define REG_HSMCI1_CFG                    (0xFC000054U) /**< \brief (HSMCI1) Configuration Register */\r
+  #define REG_HSMCI1_WPMR                   (0xFC0000E4U) /**< \brief (HSMCI1) Write Protection Mode Register */\r
+  #define REG_HSMCI1_WPSR                   (0xFC0000E8U) /**< \brief (HSMCI1) Write Protection Status Register */\r
+  #define REG_HSMCI1_FIFO                   (0xFC000200U) /**< \brief (HSMCI1) FIFO Memory Aperture0 */\r
+#else\r
+  #define REG_HSMCI1_CR    (*(__O  uint32_t*)0xFC000000U) /**< \brief (HSMCI1) Control Register */\r
+  #define REG_HSMCI1_MR    (*(__IO uint32_t*)0xFC000004U) /**< \brief (HSMCI1) Mode Register */\r
+  #define REG_HSMCI1_DTOR  (*(__IO uint32_t*)0xFC000008U) /**< \brief (HSMCI1) Data Timeout Register */\r
+  #define REG_HSMCI1_SDCR  (*(__IO uint32_t*)0xFC00000CU) /**< \brief (HSMCI1) SD/SDIO Card Register */\r
+  #define REG_HSMCI1_ARGR  (*(__IO uint32_t*)0xFC000010U) /**< \brief (HSMCI1) Argument Register */\r
+  #define REG_HSMCI1_CMDR  (*(__O  uint32_t*)0xFC000014U) /**< \brief (HSMCI1) Command Register */\r
+  #define REG_HSMCI1_BLKR  (*(__IO uint32_t*)0xFC000018U) /**< \brief (HSMCI1) Block Register */\r
+  #define REG_HSMCI1_CSTOR (*(__IO uint32_t*)0xFC00001CU) /**< \brief (HSMCI1) Completion Signal Timeout Register */\r
+  #define REG_HSMCI1_RSPR  (*(__I  uint32_t*)0xFC000020U) /**< \brief (HSMCI1) Response Register */\r
+  #define REG_HSMCI1_RDR   (*(__I  uint32_t*)0xFC000030U) /**< \brief (HSMCI1) Receive Data Register */\r
+  #define REG_HSMCI1_TDR   (*(__O  uint32_t*)0xFC000034U) /**< \brief (HSMCI1) Transmit Data Register */\r
+  #define REG_HSMCI1_SR    (*(__I  uint32_t*)0xFC000040U) /**< \brief (HSMCI1) Status Register */\r
+  #define REG_HSMCI1_IER   (*(__O  uint32_t*)0xFC000044U) /**< \brief (HSMCI1) Interrupt Enable Register */\r
+  #define REG_HSMCI1_IDR   (*(__O  uint32_t*)0xFC000048U) /**< \brief (HSMCI1) Interrupt Disable Register */\r
+  #define REG_HSMCI1_IMR   (*(__I  uint32_t*)0xFC00004CU) /**< \brief (HSMCI1) Interrupt Mask Register */\r
+  #define REG_HSMCI1_DMA   (*(__IO uint32_t*)0xFC000050U) /**< \brief (HSMCI1) DMA Configuration Register */\r
+  #define REG_HSMCI1_CFG   (*(__IO uint32_t*)0xFC000054U) /**< \brief (HSMCI1) Configuration Register */\r
+  #define REG_HSMCI1_WPMR  (*(__IO uint32_t*)0xFC0000E4U) /**< \brief (HSMCI1) Write Protection Mode Register */\r
+  #define REG_HSMCI1_WPSR  (*(__I  uint32_t*)0xFC0000E8U) /**< \brief (HSMCI1) Write Protection Status Register */\r
+  #define REG_HSMCI1_FIFO  (*(__IO uint32_t*)0xFC000200U) /**< \brief (HSMCI1) FIFO Memory Aperture0 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for UART1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_UART1_CR                    (0xFC004000U) /**< \brief (UART1) Control Register */\r
+  #define REG_UART1_MR                    (0xFC004004U) /**< \brief (UART1) Mode Register */\r
+  #define REG_UART1_IER                   (0xFC004008U) /**< \brief (UART1) Interrupt Enable Register */\r
+  #define REG_UART1_IDR                   (0xFC00400CU) /**< \brief (UART1) Interrupt Disable Register */\r
+  #define REG_UART1_IMR                   (0xFC004010U) /**< \brief (UART1) Interrupt Mask Register */\r
+  #define REG_UART1_SR                    (0xFC004014U) /**< \brief (UART1) Status Register */\r
+  #define REG_UART1_RHR                   (0xFC004018U) /**< \brief (UART1) Receive Holding Register */\r
+  #define REG_UART1_THR                   (0xFC00401CU) /**< \brief (UART1) Transmit Holding Register */\r
+  #define REG_UART1_BRGR                  (0xFC004020U) /**< \brief (UART1) Baud Rate Generator Register */\r
+#else\r
+  #define REG_UART1_CR   (*(__O  uint32_t*)0xFC004000U) /**< \brief (UART1) Control Register */\r
+  #define REG_UART1_MR   (*(__IO uint32_t*)0xFC004004U) /**< \brief (UART1) Mode Register */\r
+  #define REG_UART1_IER  (*(__O  uint32_t*)0xFC004008U) /**< \brief (UART1) Interrupt Enable Register */\r
+  #define REG_UART1_IDR  (*(__O  uint32_t*)0xFC00400CU) /**< \brief (UART1) Interrupt Disable Register */\r
+  #define REG_UART1_IMR  (*(__I  uint32_t*)0xFC004010U) /**< \brief (UART1) Interrupt Mask Register */\r
+  #define REG_UART1_SR   (*(__I  uint32_t*)0xFC004014U) /**< \brief (UART1) Status Register */\r
+  #define REG_UART1_RHR  (*(__I  uint32_t*)0xFC004018U) /**< \brief (UART1) Receive Holding Register */\r
+  #define REG_UART1_THR  (*(__O  uint32_t*)0xFC00401CU) /**< \brief (UART1) Transmit Holding Register */\r
+  #define REG_UART1_BRGR (*(__IO uint32_t*)0xFC004020U) /**< \brief (UART1) Baud Rate Generator Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for USART2 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_USART2_CR                    (0xFC008000U) /**< \brief (USART2) Control Register */\r
+  #define REG_USART2_MR                    (0xFC008004U) /**< \brief (USART2) Mode Register */\r
+  #define REG_USART2_IER                   (0xFC008008U) /**< \brief (USART2) Interrupt Enable Register */\r
+  #define REG_USART2_IDR                   (0xFC00800CU) /**< \brief (USART2) Interrupt Disable Register */\r
+  #define REG_USART2_IMR                   (0xFC008010U) /**< \brief (USART2) Interrupt Mask Register */\r
+  #define REG_USART2_CSR                   (0xFC008014U) /**< \brief (USART2) Channel Status Register */\r
+  #define REG_USART2_RHR                   (0xFC008018U) /**< \brief (USART2) Receiver Holding Register */\r
+  #define REG_USART2_THR                   (0xFC00801CU) /**< \brief (USART2) Transmitter Holding Register */\r
+  #define REG_USART2_BRGR                  (0xFC008020U) /**< \brief (USART2) Baud Rate Generator Register */\r
+  #define REG_USART2_RTOR                  (0xFC008024U) /**< \brief (USART2) Receiver Time-out Register */\r
+  #define REG_USART2_TTGR                  (0xFC008028U) /**< \brief (USART2) Transmitter Timeguard Register */\r
+  #define REG_USART2_FIDI                  (0xFC008040U) /**< \brief (USART2) FI DI Ratio Register */\r
+  #define REG_USART2_NER                   (0xFC008044U) /**< \brief (USART2) Number of Errors Register */\r
+  #define REG_USART2_IF                    (0xFC00804CU) /**< \brief (USART2) IrDA Filter Register */\r
+  #define REG_USART2_MAN                   (0xFC008050U) /**< \brief (USART2) Manchester Encoder Decoder Register */\r
+  #define REG_USART2_WPMR                  (0xFC0080E4U) /**< \brief (USART2) Write Protect Mode Register */\r
+  #define REG_USART2_WPSR                  (0xFC0080E8U) /**< \brief (USART2) Write Protect Status Register */\r
+#else\r
+  #define REG_USART2_CR   (*(__O  uint32_t*)0xFC008000U) /**< \brief (USART2) Control Register */\r
+  #define REG_USART2_MR   (*(__IO uint32_t*)0xFC008004U) /**< \brief (USART2) Mode Register */\r
+  #define REG_USART2_IER  (*(__O  uint32_t*)0xFC008008U) /**< \brief (USART2) Interrupt Enable Register */\r
+  #define REG_USART2_IDR  (*(__O  uint32_t*)0xFC00800CU) /**< \brief (USART2) Interrupt Disable Register */\r
+  #define REG_USART2_IMR  (*(__I  uint32_t*)0xFC008010U) /**< \brief (USART2) Interrupt Mask Register */\r
+  #define REG_USART2_CSR  (*(__I  uint32_t*)0xFC008014U) /**< \brief (USART2) Channel Status Register */\r
+  #define REG_USART2_RHR  (*(__I  uint32_t*)0xFC008018U) /**< \brief (USART2) Receiver Holding Register */\r
+  #define REG_USART2_THR  (*(__O  uint32_t*)0xFC00801CU) /**< \brief (USART2) Transmitter Holding Register */\r
+  #define REG_USART2_BRGR (*(__IO uint32_t*)0xFC008020U) /**< \brief (USART2) Baud Rate Generator Register */\r
+  #define REG_USART2_RTOR (*(__IO uint32_t*)0xFC008024U) /**< \brief (USART2) Receiver Time-out Register */\r
+  #define REG_USART2_TTGR (*(__IO uint32_t*)0xFC008028U) /**< \brief (USART2) Transmitter Timeguard Register */\r
+  #define REG_USART2_FIDI (*(__IO uint32_t*)0xFC008040U) /**< \brief (USART2) FI DI Ratio Register */\r
+  #define REG_USART2_NER  (*(__I  uint32_t*)0xFC008044U) /**< \brief (USART2) Number of Errors Register */\r
+  #define REG_USART2_IF   (*(__IO uint32_t*)0xFC00804CU) /**< \brief (USART2) IrDA Filter Register */\r
+  #define REG_USART2_MAN  (*(__IO uint32_t*)0xFC008050U) /**< \brief (USART2) Manchester Encoder Decoder Register */\r
+  #define REG_USART2_WPMR (*(__IO uint32_t*)0xFC0080E4U) /**< \brief (USART2) Write Protect Mode Register */\r
+  #define REG_USART2_WPSR (*(__I  uint32_t*)0xFC0080E8U) /**< \brief (USART2) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for USART3 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_USART3_CR                    (0xFC00C000U) /**< \brief (USART3) Control Register */\r
+  #define REG_USART3_MR                    (0xFC00C004U) /**< \brief (USART3) Mode Register */\r
+  #define REG_USART3_IER                   (0xFC00C008U) /**< \brief (USART3) Interrupt Enable Register */\r
+  #define REG_USART3_IDR                   (0xFC00C00CU) /**< \brief (USART3) Interrupt Disable Register */\r
+  #define REG_USART3_IMR                   (0xFC00C010U) /**< \brief (USART3) Interrupt Mask Register */\r
+  #define REG_USART3_CSR                   (0xFC00C014U) /**< \brief (USART3) Channel Status Register */\r
+  #define REG_USART3_RHR                   (0xFC00C018U) /**< \brief (USART3) Receiver Holding Register */\r
+  #define REG_USART3_THR                   (0xFC00C01CU) /**< \brief (USART3) Transmitter Holding Register */\r
+  #define REG_USART3_BRGR                  (0xFC00C020U) /**< \brief (USART3) Baud Rate Generator Register */\r
+  #define REG_USART3_RTOR                  (0xFC00C024U) /**< \brief (USART3) Receiver Time-out Register */\r
+  #define REG_USART3_TTGR                  (0xFC00C028U) /**< \brief (USART3) Transmitter Timeguard Register */\r
+  #define REG_USART3_FIDI                  (0xFC00C040U) /**< \brief (USART3) FI DI Ratio Register */\r
+  #define REG_USART3_NER                   (0xFC00C044U) /**< \brief (USART3) Number of Errors Register */\r
+  #define REG_USART3_IF                    (0xFC00C04CU) /**< \brief (USART3) IrDA Filter Register */\r
+  #define REG_USART3_MAN                   (0xFC00C050U) /**< \brief (USART3) Manchester Encoder Decoder Register */\r
+  #define REG_USART3_WPMR                  (0xFC00C0E4U) /**< \brief (USART3) Write Protect Mode Register */\r
+  #define REG_USART3_WPSR                  (0xFC00C0E8U) /**< \brief (USART3) Write Protect Status Register */\r
+#else\r
+  #define REG_USART3_CR   (*(__O  uint32_t*)0xFC00C000U) /**< \brief (USART3) Control Register */\r
+  #define REG_USART3_MR   (*(__IO uint32_t*)0xFC00C004U) /**< \brief (USART3) Mode Register */\r
+  #define REG_USART3_IER  (*(__O  uint32_t*)0xFC00C008U) /**< \brief (USART3) Interrupt Enable Register */\r
+  #define REG_USART3_IDR  (*(__O  uint32_t*)0xFC00C00CU) /**< \brief (USART3) Interrupt Disable Register */\r
+  #define REG_USART3_IMR  (*(__I  uint32_t*)0xFC00C010U) /**< \brief (USART3) Interrupt Mask Register */\r
+  #define REG_USART3_CSR  (*(__I  uint32_t*)0xFC00C014U) /**< \brief (USART3) Channel Status Register */\r
+  #define REG_USART3_RHR  (*(__I  uint32_t*)0xFC00C018U) /**< \brief (USART3) Receiver Holding Register */\r
+  #define REG_USART3_THR  (*(__O  uint32_t*)0xFC00C01CU) /**< \brief (USART3) Transmitter Holding Register */\r
+  #define REG_USART3_BRGR (*(__IO uint32_t*)0xFC00C020U) /**< \brief (USART3) Baud Rate Generator Register */\r
+  #define REG_USART3_RTOR (*(__IO uint32_t*)0xFC00C024U) /**< \brief (USART3) Receiver Time-out Register */\r
+  #define REG_USART3_TTGR (*(__IO uint32_t*)0xFC00C028U) /**< \brief (USART3) Transmitter Timeguard Register */\r
+  #define REG_USART3_FIDI (*(__IO uint32_t*)0xFC00C040U) /**< \brief (USART3) FI DI Ratio Register */\r
+  #define REG_USART3_NER  (*(__I  uint32_t*)0xFC00C044U) /**< \brief (USART3) Number of Errors Register */\r
+  #define REG_USART3_IF   (*(__IO uint32_t*)0xFC00C04CU) /**< \brief (USART3) IrDA Filter Register */\r
+  #define REG_USART3_MAN  (*(__IO uint32_t*)0xFC00C050U) /**< \brief (USART3) Manchester Encoder Decoder Register */\r
+  #define REG_USART3_WPMR (*(__IO uint32_t*)0xFC00C0E4U) /**< \brief (USART3) Write Protect Mode Register */\r
+  #define REG_USART3_WPSR (*(__I  uint32_t*)0xFC00C0E8U) /**< \brief (USART3) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for USART4 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_USART4_CR                    (0xFC010000U) /**< \brief (USART4) Control Register */\r
+  #define REG_USART4_MR                    (0xFC010004U) /**< \brief (USART4) Mode Register */\r
+  #define REG_USART4_IER                   (0xFC010008U) /**< \brief (USART4) Interrupt Enable Register */\r
+  #define REG_USART4_IDR                   (0xFC01000CU) /**< \brief (USART4) Interrupt Disable Register */\r
+  #define REG_USART4_IMR                   (0xFC010010U) /**< \brief (USART4) Interrupt Mask Register */\r
+  #define REG_USART4_CSR                   (0xFC010014U) /**< \brief (USART4) Channel Status Register */\r
+  #define REG_USART4_RHR                   (0xFC010018U) /**< \brief (USART4) Receiver Holding Register */\r
+  #define REG_USART4_THR                   (0xFC01001CU) /**< \brief (USART4) Transmitter Holding Register */\r
+  #define REG_USART4_BRGR                  (0xFC010020U) /**< \brief (USART4) Baud Rate Generator Register */\r
+  #define REG_USART4_RTOR                  (0xFC010024U) /**< \brief (USART4) Receiver Time-out Register */\r
+  #define REG_USART4_TTGR                  (0xFC010028U) /**< \brief (USART4) Transmitter Timeguard Register */\r
+  #define REG_USART4_FIDI                  (0xFC010040U) /**< \brief (USART4) FI DI Ratio Register */\r
+  #define REG_USART4_NER                   (0xFC010044U) /**< \brief (USART4) Number of Errors Register */\r
+  #define REG_USART4_IF                    (0xFC01004CU) /**< \brief (USART4) IrDA Filter Register */\r
+  #define REG_USART4_MAN                   (0xFC010050U) /**< \brief (USART4) Manchester Encoder Decoder Register */\r
+  #define REG_USART4_WPMR                  (0xFC0100E4U) /**< \brief (USART4) Write Protect Mode Register */\r
+  #define REG_USART4_WPSR                  (0xFC0100E8U) /**< \brief (USART4) Write Protect Status Register */\r
+#else\r
+  #define REG_USART4_CR   (*(__O  uint32_t*)0xFC010000U) /**< \brief (USART4) Control Register */\r
+  #define REG_USART4_MR   (*(__IO uint32_t*)0xFC010004U) /**< \brief (USART4) Mode Register */\r
+  #define REG_USART4_IER  (*(__O  uint32_t*)0xFC010008U) /**< \brief (USART4) Interrupt Enable Register */\r
+  #define REG_USART4_IDR  (*(__O  uint32_t*)0xFC01000CU) /**< \brief (USART4) Interrupt Disable Register */\r
+  #define REG_USART4_IMR  (*(__I  uint32_t*)0xFC010010U) /**< \brief (USART4) Interrupt Mask Register */\r
+  #define REG_USART4_CSR  (*(__I  uint32_t*)0xFC010014U) /**< \brief (USART4) Channel Status Register */\r
+  #define REG_USART4_RHR  (*(__I  uint32_t*)0xFC010018U) /**< \brief (USART4) Receiver Holding Register */\r
+  #define REG_USART4_THR  (*(__O  uint32_t*)0xFC01001CU) /**< \brief (USART4) Transmitter Holding Register */\r
+  #define REG_USART4_BRGR (*(__IO uint32_t*)0xFC010020U) /**< \brief (USART4) Baud Rate Generator Register */\r
+  #define REG_USART4_RTOR (*(__IO uint32_t*)0xFC010024U) /**< \brief (USART4) Receiver Time-out Register */\r
+  #define REG_USART4_TTGR (*(__IO uint32_t*)0xFC010028U) /**< \brief (USART4) Transmitter Timeguard Register */\r
+  #define REG_USART4_FIDI (*(__IO uint32_t*)0xFC010040U) /**< \brief (USART4) FI DI Ratio Register */\r
+  #define REG_USART4_NER  (*(__I  uint32_t*)0xFC010044U) /**< \brief (USART4) Number of Errors Register */\r
+  #define REG_USART4_IF   (*(__IO uint32_t*)0xFC01004CU) /**< \brief (USART4) IrDA Filter Register */\r
+  #define REG_USART4_MAN  (*(__IO uint32_t*)0xFC010050U) /**< \brief (USART4) Manchester Encoder Decoder Register */\r
+  #define REG_USART4_WPMR (*(__IO uint32_t*)0xFC0100E4U) /**< \brief (USART4) Write Protect Mode Register */\r
+  #define REG_USART4_WPSR (*(__I  uint32_t*)0xFC0100E8U) /**< \brief (USART4) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SSC1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SSC1_CR                    (0xFC014000U) /**< \brief (SSC1) Control Register */\r
+  #define REG_SSC1_CMR                   (0xFC014004U) /**< \brief (SSC1) Clock Mode Register */\r
+  #define REG_SSC1_RCMR                  (0xFC014010U) /**< \brief (SSC1) Receive Clock Mode Register */\r
+  #define REG_SSC1_RFMR                  (0xFC014014U) /**< \brief (SSC1) Receive Frame Mode Register */\r
+  #define REG_SSC1_TCMR                  (0xFC014018U) /**< \brief (SSC1) Transmit Clock Mode Register */\r
+  #define REG_SSC1_TFMR                  (0xFC01401CU) /**< \brief (SSC1) Transmit Frame Mode Register */\r
+  #define REG_SSC1_RHR                   (0xFC014020U) /**< \brief (SSC1) Receive Holding Register */\r
+  #define REG_SSC1_THR                   (0xFC014024U) /**< \brief (SSC1) Transmit Holding Register */\r
+  #define REG_SSC1_RSHR                  (0xFC014030U) /**< \brief (SSC1) Receive Sync. Holding Register */\r
+  #define REG_SSC1_TSHR                  (0xFC014034U) /**< \brief (SSC1) Transmit Sync. Holding Register */\r
+  #define REG_SSC1_RC0R                  (0xFC014038U) /**< \brief (SSC1) Receive Compare 0 Register */\r
+  #define REG_SSC1_RC1R                  (0xFC01403CU) /**< \brief (SSC1) Receive Compare 1 Register */\r
+  #define REG_SSC1_SR                    (0xFC014040U) /**< \brief (SSC1) Status Register */\r
+  #define REG_SSC1_IER                   (0xFC014044U) /**< \brief (SSC1) Interrupt Enable Register */\r
+  #define REG_SSC1_IDR                   (0xFC014048U) /**< \brief (SSC1) Interrupt Disable Register */\r
+  #define REG_SSC1_IMR                   (0xFC01404CU) /**< \brief (SSC1) Interrupt Mask Register */\r
+  #define REG_SSC1_WPMR                  (0xFC0140E4U) /**< \brief (SSC1) Write Protect Mode Register */\r
+  #define REG_SSC1_WPSR                  (0xFC0140E8U) /**< \brief (SSC1) Write Protect Status Register */\r
+#else\r
+  #define REG_SSC1_CR   (*(__O  uint32_t*)0xFC014000U) /**< \brief (SSC1) Control Register */\r
+  #define REG_SSC1_CMR  (*(__IO uint32_t*)0xFC014004U) /**< \brief (SSC1) Clock Mode Register */\r
+  #define REG_SSC1_RCMR (*(__IO uint32_t*)0xFC014010U) /**< \brief (SSC1) Receive Clock Mode Register */\r
+  #define REG_SSC1_RFMR (*(__IO uint32_t*)0xFC014014U) /**< \brief (SSC1) Receive Frame Mode Register */\r
+  #define REG_SSC1_TCMR (*(__IO uint32_t*)0xFC014018U) /**< \brief (SSC1) Transmit Clock Mode Register */\r
+  #define REG_SSC1_TFMR (*(__IO uint32_t*)0xFC01401CU) /**< \brief (SSC1) Transmit Frame Mode Register */\r
+  #define REG_SSC1_RHR  (*(__I  uint32_t*)0xFC014020U) /**< \brief (SSC1) Receive Holding Register */\r
+  #define REG_SSC1_THR  (*(__O  uint32_t*)0xFC014024U) /**< \brief (SSC1) Transmit Holding Register */\r
+  #define REG_SSC1_RSHR (*(__I  uint32_t*)0xFC014030U) /**< \brief (SSC1) Receive Sync. Holding Register */\r
+  #define REG_SSC1_TSHR (*(__IO uint32_t*)0xFC014034U) /**< \brief (SSC1) Transmit Sync. Holding Register */\r
+  #define REG_SSC1_RC0R (*(__IO uint32_t*)0xFC014038U) /**< \brief (SSC1) Receive Compare 0 Register */\r
+  #define REG_SSC1_RC1R (*(__IO uint32_t*)0xFC01403CU) /**< \brief (SSC1) Receive Compare 1 Register */\r
+  #define REG_SSC1_SR   (*(__I  uint32_t*)0xFC014040U) /**< \brief (SSC1) Status Register */\r
+  #define REG_SSC1_IER  (*(__O  uint32_t*)0xFC014044U) /**< \brief (SSC1) Interrupt Enable Register */\r
+  #define REG_SSC1_IDR  (*(__O  uint32_t*)0xFC014048U) /**< \brief (SSC1) Interrupt Disable Register */\r
+  #define REG_SSC1_IMR  (*(__I  uint32_t*)0xFC01404CU) /**< \brief (SSC1) Interrupt Mask Register */\r
+  #define REG_SSC1_WPMR (*(__IO uint32_t*)0xFC0140E4U) /**< \brief (SSC1) Write Protect Mode Register */\r
+  #define REG_SSC1_WPSR (*(__I  uint32_t*)0xFC0140E8U) /**< \brief (SSC1) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SPI1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SPI1_CR                    (0xFC018000U) /**< \brief (SPI1) Control Register */\r
+  #define REG_SPI1_MR                    (0xFC018004U) /**< \brief (SPI1) Mode Register */\r
+  #define REG_SPI1_RDR                   (0xFC018008U) /**< \brief (SPI1) Receive Data Register */\r
+  #define REG_SPI1_TDR                   (0xFC01800CU) /**< \brief (SPI1) Transmit Data Register */\r
+  #define REG_SPI1_SR                    (0xFC018010U) /**< \brief (SPI1) Status Register */\r
+  #define REG_SPI1_IER                   (0xFC018014U) /**< \brief (SPI1) Interrupt Enable Register */\r
+  #define REG_SPI1_IDR                   (0xFC018018U) /**< \brief (SPI1) Interrupt Disable Register */\r
+  #define REG_SPI1_IMR                   (0xFC01801CU) /**< \brief (SPI1) Interrupt Mask Register */\r
+  #define REG_SPI1_CSR                   (0xFC018030U) /**< \brief (SPI1) Chip Select Register */\r
+  #define REG_SPI1_WPMR                  (0xFC0180E4U) /**< \brief (SPI1) Write Protection Control Register */\r
+  #define REG_SPI1_WPSR                  (0xFC0180E8U) /**< \brief (SPI1) Write Protection Status Register */\r
+#else\r
+  #define REG_SPI1_CR   (*(__O  uint32_t*)0xFC018000U) /**< \brief (SPI1) Control Register */\r
+  #define REG_SPI1_MR   (*(__IO uint32_t*)0xFC018004U) /**< \brief (SPI1) Mode Register */\r
+  #define REG_SPI1_RDR  (*(__I  uint32_t*)0xFC018008U) /**< \brief (SPI1) Receive Data Register */\r
+  #define REG_SPI1_TDR  (*(__O  uint32_t*)0xFC01800CU) /**< \brief (SPI1) Transmit Data Register */\r
+  #define REG_SPI1_SR   (*(__I  uint32_t*)0xFC018010U) /**< \brief (SPI1) Status Register */\r
+  #define REG_SPI1_IER  (*(__O  uint32_t*)0xFC018014U) /**< \brief (SPI1) Interrupt Enable Register */\r
+  #define REG_SPI1_IDR  (*(__O  uint32_t*)0xFC018018U) /**< \brief (SPI1) Interrupt Disable Register */\r
+  #define REG_SPI1_IMR  (*(__I  uint32_t*)0xFC01801CU) /**< \brief (SPI1) Interrupt Mask Register */\r
+  #define REG_SPI1_CSR  (*(__IO uint32_t*)0xFC018030U) /**< \brief (SPI1) Chip Select Register */\r
+  #define REG_SPI1_WPMR (*(__IO uint32_t*)0xFC0180E4U) /**< \brief (SPI1) Write Protection Control Register */\r
+  #define REG_SPI1_WPSR (*(__I  uint32_t*)0xFC0180E8U) /**< \brief (SPI1) Write Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SPI2 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SPI2_CR                    (0xFC01C000U) /**< \brief (SPI2) Control Register */\r
+  #define REG_SPI2_MR                    (0xFC01C004U) /**< \brief (SPI2) Mode Register */\r
+  #define REG_SPI2_RDR                   (0xFC01C008U) /**< \brief (SPI2) Receive Data Register */\r
+  #define REG_SPI2_TDR                   (0xFC01C00CU) /**< \brief (SPI2) Transmit Data Register */\r
+  #define REG_SPI2_SR                    (0xFC01C010U) /**< \brief (SPI2) Status Register */\r
+  #define REG_SPI2_IER                   (0xFC01C014U) /**< \brief (SPI2) Interrupt Enable Register */\r
+  #define REG_SPI2_IDR                   (0xFC01C018U) /**< \brief (SPI2) Interrupt Disable Register */\r
+  #define REG_SPI2_IMR                   (0xFC01C01CU) /**< \brief (SPI2) Interrupt Mask Register */\r
+  #define REG_SPI2_CSR                   (0xFC01C030U) /**< \brief (SPI2) Chip Select Register */\r
+  #define REG_SPI2_WPMR                  (0xFC01C0E4U) /**< \brief (SPI2) Write Protection Control Register */\r
+  #define REG_SPI2_WPSR                  (0xFC01C0E8U) /**< \brief (SPI2) Write Protection Status Register */\r
+#else\r
+  #define REG_SPI2_CR   (*(__O  uint32_t*)0xFC01C000U) /**< \brief (SPI2) Control Register */\r
+  #define REG_SPI2_MR   (*(__IO uint32_t*)0xFC01C004U) /**< \brief (SPI2) Mode Register */\r
+  #define REG_SPI2_RDR  (*(__I  uint32_t*)0xFC01C008U) /**< \brief (SPI2) Receive Data Register */\r
+  #define REG_SPI2_TDR  (*(__O  uint32_t*)0xFC01C00CU) /**< \brief (SPI2) Transmit Data Register */\r
+  #define REG_SPI2_SR   (*(__I  uint32_t*)0xFC01C010U) /**< \brief (SPI2) Status Register */\r
+  #define REG_SPI2_IER  (*(__O  uint32_t*)0xFC01C014U) /**< \brief (SPI2) Interrupt Enable Register */\r
+  #define REG_SPI2_IDR  (*(__O  uint32_t*)0xFC01C018U) /**< \brief (SPI2) Interrupt Disable Register */\r
+  #define REG_SPI2_IMR  (*(__I  uint32_t*)0xFC01C01CU) /**< \brief (SPI2) Interrupt Mask Register */\r
+  #define REG_SPI2_CSR  (*(__IO uint32_t*)0xFC01C030U) /**< \brief (SPI2) Chip Select Register */\r
+  #define REG_SPI2_WPMR (*(__IO uint32_t*)0xFC01C0E4U) /**< \brief (SPI2) Write Protection Control Register */\r
+  #define REG_SPI2_WPSR (*(__I  uint32_t*)0xFC01C0E8U) /**< \brief (SPI2) Write Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TC1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TC1_CCR0                   (0xFC020000U) /**< \brief (TC1) Channel Control Register (channel = 0) */\r
+  #define REG_TC1_CMR0                   (0xFC020004U) /**< \brief (TC1) Channel Mode Register (channel = 0) */\r
+  #define REG_TC1_SMMR0                  (0xFC020008U) /**< \brief (TC1) Stepper Motor Mode Register (channel = 0) */\r
+  #define REG_TC1_RAB0                   (0xFC02000CU) /**< \brief (TC1) Register AB (channel = 0) */\r
+  #define REG_TC1_CV0                    (0xFC020010U) /**< \brief (TC1) Counter Value (channel = 0) */\r
+  #define REG_TC1_RA0                    (0xFC020014U) /**< \brief (TC1) Register A (channel = 0) */\r
+  #define REG_TC1_RB0                    (0xFC020018U) /**< \brief (TC1) Register B (channel = 0) */\r
+  #define REG_TC1_RC0                    (0xFC02001CU) /**< \brief (TC1) Register C (channel = 0) */\r
+  #define REG_TC1_SR0                    (0xFC020020U) /**< \brief (TC1) Status Register (channel = 0) */\r
+  #define REG_TC1_IER0                   (0xFC020024U) /**< \brief (TC1) Interrupt Enable Register (channel = 0) */\r
+  #define REG_TC1_IDR0                   (0xFC020028U) /**< \brief (TC1) Interrupt Disable Register (channel = 0) */\r
+  #define REG_TC1_IMR0                   (0xFC02002CU) /**< \brief (TC1) Interrupt Mask Register (channel = 0) */\r
+  #define REG_TC1_EMR0                   (0xFC020030U) /**< \brief (TC1) Extended Mode Register (channel = 0) */\r
+  #define REG_TC1_CCR1                   (0xFC020040U) /**< \brief (TC1) Channel Control Register (channel = 1) */\r
+  #define REG_TC1_CMR1                   (0xFC020044U) /**< \brief (TC1) Channel Mode Register (channel = 1) */\r
+  #define REG_TC1_SMMR1                  (0xFC020048U) /**< \brief (TC1) Stepper Motor Mode Register (channel = 1) */\r
+  #define REG_TC1_RAB1                   (0xFC02004CU) /**< \brief (TC1) Register AB (channel = 1) */\r
+  #define REG_TC1_CV1                    (0xFC020050U) /**< \brief (TC1) Counter Value (channel = 1) */\r
+  #define REG_TC1_RA1                    (0xFC020054U) /**< \brief (TC1) Register A (channel = 1) */\r
+  #define REG_TC1_RB1                    (0xFC020058U) /**< \brief (TC1) Register B (channel = 1) */\r
+  #define REG_TC1_RC1                    (0xFC02005CU) /**< \brief (TC1) Register C (channel = 1) */\r
+  #define REG_TC1_SR1                    (0xFC020060U) /**< \brief (TC1) Status Register (channel = 1) */\r
+  #define REG_TC1_IER1                   (0xFC020064U) /**< \brief (TC1) Interrupt Enable Register (channel = 1) */\r
+  #define REG_TC1_IDR1                   (0xFC020068U) /**< \brief (TC1) Interrupt Disable Register (channel = 1) */\r
+  #define REG_TC1_IMR1                   (0xFC02006CU) /**< \brief (TC1) Interrupt Mask Register (channel = 1) */\r
+  #define REG_TC1_EMR1                   (0xFC020070U) /**< \brief (TC1) Extended Mode Register (channel = 1) */\r
+  #define REG_TC1_CCR2                   (0xFC020080U) /**< \brief (TC1) Channel Control Register (channel = 2) */\r
+  #define REG_TC1_CMR2                   (0xFC020084U) /**< \brief (TC1) Channel Mode Register (channel = 2) */\r
+  #define REG_TC1_SMMR2                  (0xFC020088U) /**< \brief (TC1) Stepper Motor Mode Register (channel = 2) */\r
+  #define REG_TC1_RAB2                   (0xFC02008CU) /**< \brief (TC1) Register AB (channel = 2) */\r
+  #define REG_TC1_CV2                    (0xFC020090U) /**< \brief (TC1) Counter Value (channel = 2) */\r
+  #define REG_TC1_RA2                    (0xFC020094U) /**< \brief (TC1) Register A (channel = 2) */\r
+  #define REG_TC1_RB2                    (0xFC020098U) /**< \brief (TC1) Register B (channel = 2) */\r
+  #define REG_TC1_RC2                    (0xFC02009CU) /**< \brief (TC1) Register C (channel = 2) */\r
+  #define REG_TC1_SR2                    (0xFC0200A0U) /**< \brief (TC1) Status Register (channel = 2) */\r
+  #define REG_TC1_IER2                   (0xFC0200A4U) /**< \brief (TC1) Interrupt Enable Register (channel = 2) */\r
+  #define REG_TC1_IDR2                   (0xFC0200A8U) /**< \brief (TC1) Interrupt Disable Register (channel = 2) */\r
+  #define REG_TC1_IMR2                   (0xFC0200ACU) /**< \brief (TC1) Interrupt Mask Register (channel = 2) */\r
+  #define REG_TC1_EMR2                   (0xFC0200B0U) /**< \brief (TC1) Extended Mode Register (channel = 2) */\r
+  #define REG_TC1_BCR                    (0xFC0200C0U) /**< \brief (TC1) Block Control Register */\r
+  #define REG_TC1_BMR                    (0xFC0200C4U) /**< \brief (TC1) Block Mode Register */\r
+  #define REG_TC1_QIER                   (0xFC0200C8U) /**< \brief (TC1) QDEC Interrupt Enable Register */\r
+  #define REG_TC1_QIDR                   (0xFC0200CCU) /**< \brief (TC1) QDEC Interrupt Disable Register */\r
+  #define REG_TC1_QIMR                   (0xFC0200D0U) /**< \brief (TC1) QDEC Interrupt Mask Register */\r
+  #define REG_TC1_QISR                   (0xFC0200D4U) /**< \brief (TC1) QDEC Interrupt Status Register */\r
+  #define REG_TC1_FMR                    (0xFC0200D8U) /**< \brief (TC1) Fault Mode Register */\r
+  #define REG_TC1_WPMR                   (0xFC0200E4U) /**< \brief (TC1) Write Protect Mode Register */\r
+#else\r
+  #define REG_TC1_CCR0  (*(__O  uint32_t*)0xFC020000U) /**< \brief (TC1) Channel Control Register (channel = 0) */\r
+  #define REG_TC1_CMR0  (*(__IO uint32_t*)0xFC020004U) /**< \brief (TC1) Channel Mode Register (channel = 0) */\r
+  #define REG_TC1_SMMR0 (*(__IO uint32_t*)0xFC020008U) /**< \brief (TC1) Stepper Motor Mode Register (channel = 0) */\r
+  #define REG_TC1_RAB0  (*(__I  uint32_t*)0xFC02000CU) /**< \brief (TC1) Register AB (channel = 0) */\r
+  #define REG_TC1_CV0   (*(__I  uint32_t*)0xFC020010U) /**< \brief (TC1) Counter Value (channel = 0) */\r
+  #define REG_TC1_RA0   (*(__IO uint32_t*)0xFC020014U) /**< \brief (TC1) Register A (channel = 0) */\r
+  #define REG_TC1_RB0   (*(__IO uint32_t*)0xFC020018U) /**< \brief (TC1) Register B (channel = 0) */\r
+  #define REG_TC1_RC0   (*(__IO uint32_t*)0xFC02001CU) /**< \brief (TC1) Register C (channel = 0) */\r
+  #define REG_TC1_SR0   (*(__I  uint32_t*)0xFC020020U) /**< \brief (TC1) Status Register (channel = 0) */\r
+  #define REG_TC1_IER0  (*(__O  uint32_t*)0xFC020024U) /**< \brief (TC1) Interrupt Enable Register (channel = 0) */\r
+  #define REG_TC1_IDR0  (*(__O  uint32_t*)0xFC020028U) /**< \brief (TC1) Interrupt Disable Register (channel = 0) */\r
+  #define REG_TC1_IMR0  (*(__I  uint32_t*)0xFC02002CU) /**< \brief (TC1) Interrupt Mask Register (channel = 0) */\r
+  #define REG_TC1_EMR0  (*(__IO uint32_t*)0xFC020030U) /**< \brief (TC1) Extended Mode Register (channel = 0) */\r
+  #define REG_TC1_CCR1  (*(__O  uint32_t*)0xFC020040U) /**< \brief (TC1) Channel Control Register (channel = 1) */\r
+  #define REG_TC1_CMR1  (*(__IO uint32_t*)0xFC020044U) /**< \brief (TC1) Channel Mode Register (channel = 1) */\r
+  #define REG_TC1_SMMR1 (*(__IO uint32_t*)0xFC020048U) /**< \brief (TC1) Stepper Motor Mode Register (channel = 1) */\r
+  #define REG_TC1_RAB1  (*(__I  uint32_t*)0xFC02004CU) /**< \brief (TC1) Register AB (channel = 1) */\r
+  #define REG_TC1_CV1   (*(__I  uint32_t*)0xFC020050U) /**< \brief (TC1) Counter Value (channel = 1) */\r
+  #define REG_TC1_RA1   (*(__IO uint32_t*)0xFC020054U) /**< \brief (TC1) Register A (channel = 1) */\r
+  #define REG_TC1_RB1   (*(__IO uint32_t*)0xFC020058U) /**< \brief (TC1) Register B (channel = 1) */\r
+  #define REG_TC1_RC1   (*(__IO uint32_t*)0xFC02005CU) /**< \brief (TC1) Register C (channel = 1) */\r
+  #define REG_TC1_SR1   (*(__I  uint32_t*)0xFC020060U) /**< \brief (TC1) Status Register (channel = 1) */\r
+  #define REG_TC1_IER1  (*(__O  uint32_t*)0xFC020064U) /**< \brief (TC1) Interrupt Enable Register (channel = 1) */\r
+  #define REG_TC1_IDR1  (*(__O  uint32_t*)0xFC020068U) /**< \brief (TC1) Interrupt Disable Register (channel = 1) */\r
+  #define REG_TC1_IMR1  (*(__I  uint32_t*)0xFC02006CU) /**< \brief (TC1) Interrupt Mask Register (channel = 1) */\r
+  #define REG_TC1_EMR1  (*(__IO uint32_t*)0xFC020070U) /**< \brief (TC1) Extended Mode Register (channel = 1) */\r
+  #define REG_TC1_CCR2  (*(__O  uint32_t*)0xFC020080U) /**< \brief (TC1) Channel Control Register (channel = 2) */\r
+  #define REG_TC1_CMR2  (*(__IO uint32_t*)0xFC020084U) /**< \brief (TC1) Channel Mode Register (channel = 2) */\r
+  #define REG_TC1_SMMR2 (*(__IO uint32_t*)0xFC020088U) /**< \brief (TC1) Stepper Motor Mode Register (channel = 2) */\r
+  #define REG_TC1_RAB2  (*(__I  uint32_t*)0xFC02008CU) /**< \brief (TC1) Register AB (channel = 2) */\r
+  #define REG_TC1_CV2   (*(__I  uint32_t*)0xFC020090U) /**< \brief (TC1) Counter Value (channel = 2) */\r
+  #define REG_TC1_RA2   (*(__IO uint32_t*)0xFC020094U) /**< \brief (TC1) Register A (channel = 2) */\r
+  #define REG_TC1_RB2   (*(__IO uint32_t*)0xFC020098U) /**< \brief (TC1) Register B (channel = 2) */\r
+  #define REG_TC1_RC2   (*(__IO uint32_t*)0xFC02009CU) /**< \brief (TC1) Register C (channel = 2) */\r
+  #define REG_TC1_SR2   (*(__I  uint32_t*)0xFC0200A0U) /**< \brief (TC1) Status Register (channel = 2) */\r
+  #define REG_TC1_IER2  (*(__O  uint32_t*)0xFC0200A4U) /**< \brief (TC1) Interrupt Enable Register (channel = 2) */\r
+  #define REG_TC1_IDR2  (*(__O  uint32_t*)0xFC0200A8U) /**< \brief (TC1) Interrupt Disable Register (channel = 2) */\r
+  #define REG_TC1_IMR2  (*(__I  uint32_t*)0xFC0200ACU) /**< \brief (TC1) Interrupt Mask Register (channel = 2) */\r
+  #define REG_TC1_EMR2  (*(__IO uint32_t*)0xFC0200B0U) /**< \brief (TC1) Extended Mode Register (channel = 2) */\r
+  #define REG_TC1_BCR   (*(__O  uint32_t*)0xFC0200C0U) /**< \brief (TC1) Block Control Register */\r
+  #define REG_TC1_BMR   (*(__IO uint32_t*)0xFC0200C4U) /**< \brief (TC1) Block Mode Register */\r
+  #define REG_TC1_QIER  (*(__O  uint32_t*)0xFC0200C8U) /**< \brief (TC1) QDEC Interrupt Enable Register */\r
+  #define REG_TC1_QIDR  (*(__O  uint32_t*)0xFC0200CCU) /**< \brief (TC1) QDEC Interrupt Disable Register */\r
+  #define REG_TC1_QIMR  (*(__I  uint32_t*)0xFC0200D0U) /**< \brief (TC1) QDEC Interrupt Mask Register */\r
+  #define REG_TC1_QISR  (*(__I  uint32_t*)0xFC0200D4U) /**< \brief (TC1) QDEC Interrupt Status Register */\r
+  #define REG_TC1_FMR   (*(__IO uint32_t*)0xFC0200D8U) /**< \brief (TC1) Fault Mode Register */\r
+  #define REG_TC1_WPMR  (*(__IO uint32_t*)0xFC0200E4U) /**< \brief (TC1) Write Protect Mode Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TC2 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TC2_CCR0                   (0xFC024000U) /**< \brief (TC2) Channel Control Register (channel = 0) */\r
+  #define REG_TC2_CMR0                   (0xFC024004U) /**< \brief (TC2) Channel Mode Register (channel = 0) */\r
+  #define REG_TC2_SMMR0                  (0xFC024008U) /**< \brief (TC2) Stepper Motor Mode Register (channel = 0) */\r
+  #define REG_TC2_RAB0                   (0xFC02400CU) /**< \brief (TC2) Register AB (channel = 0) */\r
+  #define REG_TC2_CV0                    (0xFC024010U) /**< \brief (TC2) Counter Value (channel = 0) */\r
+  #define REG_TC2_RA0                    (0xFC024014U) /**< \brief (TC2) Register A (channel = 0) */\r
+  #define REG_TC2_RB0                    (0xFC024018U) /**< \brief (TC2) Register B (channel = 0) */\r
+  #define REG_TC2_RC0                    (0xFC02401CU) /**< \brief (TC2) Register C (channel = 0) */\r
+  #define REG_TC2_SR0                    (0xFC024020U) /**< \brief (TC2) Status Register (channel = 0) */\r
+  #define REG_TC2_IER0                   (0xFC024024U) /**< \brief (TC2) Interrupt Enable Register (channel = 0) */\r
+  #define REG_TC2_IDR0                   (0xFC024028U) /**< \brief (TC2) Interrupt Disable Register (channel = 0) */\r
+  #define REG_TC2_IMR0                   (0xFC02402CU) /**< \brief (TC2) Interrupt Mask Register (channel = 0) */\r
+  #define REG_TC2_EMR0                   (0xFC024030U) /**< \brief (TC2) Extended Mode Register (channel = 0) */\r
+  #define REG_TC2_CCR1                   (0xFC024040U) /**< \brief (TC2) Channel Control Register (channel = 1) */\r
+  #define REG_TC2_CMR1                   (0xFC024044U) /**< \brief (TC2) Channel Mode Register (channel = 1) */\r
+  #define REG_TC2_SMMR1                  (0xFC024048U) /**< \brief (TC2) Stepper Motor Mode Register (channel = 1) */\r
+  #define REG_TC2_RAB1                   (0xFC02404CU) /**< \brief (TC2) Register AB (channel = 1) */\r
+  #define REG_TC2_CV1                    (0xFC024050U) /**< \brief (TC2) Counter Value (channel = 1) */\r
+  #define REG_TC2_RA1                    (0xFC024054U) /**< \brief (TC2) Register A (channel = 1) */\r
+  #define REG_TC2_RB1                    (0xFC024058U) /**< \brief (TC2) Register B (channel = 1) */\r
+  #define REG_TC2_RC1                    (0xFC02405CU) /**< \brief (TC2) Register C (channel = 1) */\r
+  #define REG_TC2_SR1                    (0xFC024060U) /**< \brief (TC2) Status Register (channel = 1) */\r
+  #define REG_TC2_IER1                   (0xFC024064U) /**< \brief (TC2) Interrupt Enable Register (channel = 1) */\r
+  #define REG_TC2_IDR1                   (0xFC024068U) /**< \brief (TC2) Interrupt Disable Register (channel = 1) */\r
+  #define REG_TC2_IMR1                   (0xFC02406CU) /**< \brief (TC2) Interrupt Mask Register (channel = 1) */\r
+  #define REG_TC2_EMR1                   (0xFC024070U) /**< \brief (TC2) Extended Mode Register (channel = 1) */\r
+  #define REG_TC2_CCR2                   (0xFC024080U) /**< \brief (TC2) Channel Control Register (channel = 2) */\r
+  #define REG_TC2_CMR2                   (0xFC024084U) /**< \brief (TC2) Channel Mode Register (channel = 2) */\r
+  #define REG_TC2_SMMR2                  (0xFC024088U) /**< \brief (TC2) Stepper Motor Mode Register (channel = 2) */\r
+  #define REG_TC2_RAB2                   (0xFC02408CU) /**< \brief (TC2) Register AB (channel = 2) */\r
+  #define REG_TC2_CV2                    (0xFC024090U) /**< \brief (TC2) Counter Value (channel = 2) */\r
+  #define REG_TC2_RA2                    (0xFC024094U) /**< \brief (TC2) Register A (channel = 2) */\r
+  #define REG_TC2_RB2                    (0xFC024098U) /**< \brief (TC2) Register B (channel = 2) */\r
+  #define REG_TC2_RC2                    (0xFC02409CU) /**< \brief (TC2) Register C (channel = 2) */\r
+  #define REG_TC2_SR2                    (0xFC0240A0U) /**< \brief (TC2) Status Register (channel = 2) */\r
+  #define REG_TC2_IER2                   (0xFC0240A4U) /**< \brief (TC2) Interrupt Enable Register (channel = 2) */\r
+  #define REG_TC2_IDR2                   (0xFC0240A8U) /**< \brief (TC2) Interrupt Disable Register (channel = 2) */\r
+  #define REG_TC2_IMR2                   (0xFC0240ACU) /**< \brief (TC2) Interrupt Mask Register (channel = 2) */\r
+  #define REG_TC2_EMR2                   (0xFC0240B0U) /**< \brief (TC2) Extended Mode Register (channel = 2) */\r
+  #define REG_TC2_BCR                    (0xFC0240C0U) /**< \brief (TC2) Block Control Register */\r
+  #define REG_TC2_BMR                    (0xFC0240C4U) /**< \brief (TC2) Block Mode Register */\r
+  #define REG_TC2_QIER                   (0xFC0240C8U) /**< \brief (TC2) QDEC Interrupt Enable Register */\r
+  #define REG_TC2_QIDR                   (0xFC0240CCU) /**< \brief (TC2) QDEC Interrupt Disable Register */\r
+  #define REG_TC2_QIMR                   (0xFC0240D0U) /**< \brief (TC2) QDEC Interrupt Mask Register */\r
+  #define REG_TC2_QISR                   (0xFC0240D4U) /**< \brief (TC2) QDEC Interrupt Status Register */\r
+  #define REG_TC2_FMR                    (0xFC0240D8U) /**< \brief (TC2) Fault Mode Register */\r
+  #define REG_TC2_WPMR                   (0xFC0240E4U) /**< \brief (TC2) Write Protect Mode Register */\r
+#else\r
+  #define REG_TC2_CCR0  (*(__O  uint32_t*)0xFC024000U) /**< \brief (TC2) Channel Control Register (channel = 0) */\r
+  #define REG_TC2_CMR0  (*(__IO uint32_t*)0xFC024004U) /**< \brief (TC2) Channel Mode Register (channel = 0) */\r
+  #define REG_TC2_SMMR0 (*(__IO uint32_t*)0xFC024008U) /**< \brief (TC2) Stepper Motor Mode Register (channel = 0) */\r
+  #define REG_TC2_RAB0  (*(__I  uint32_t*)0xFC02400CU) /**< \brief (TC2) Register AB (channel = 0) */\r
+  #define REG_TC2_CV0   (*(__I  uint32_t*)0xFC024010U) /**< \brief (TC2) Counter Value (channel = 0) */\r
+  #define REG_TC2_RA0   (*(__IO uint32_t*)0xFC024014U) /**< \brief (TC2) Register A (channel = 0) */\r
+  #define REG_TC2_RB0   (*(__IO uint32_t*)0xFC024018U) /**< \brief (TC2) Register B (channel = 0) */\r
+  #define REG_TC2_RC0   (*(__IO uint32_t*)0xFC02401CU) /**< \brief (TC2) Register C (channel = 0) */\r
+  #define REG_TC2_SR0   (*(__I  uint32_t*)0xFC024020U) /**< \brief (TC2) Status Register (channel = 0) */\r
+  #define REG_TC2_IER0  (*(__O  uint32_t*)0xFC024024U) /**< \brief (TC2) Interrupt Enable Register (channel = 0) */\r
+  #define REG_TC2_IDR0  (*(__O  uint32_t*)0xFC024028U) /**< \brief (TC2) Interrupt Disable Register (channel = 0) */\r
+  #define REG_TC2_IMR0  (*(__I  uint32_t*)0xFC02402CU) /**< \brief (TC2) Interrupt Mask Register (channel = 0) */\r
+  #define REG_TC2_EMR0  (*(__IO uint32_t*)0xFC024030U) /**< \brief (TC2) Extended Mode Register (channel = 0) */\r
+  #define REG_TC2_CCR1  (*(__O  uint32_t*)0xFC024040U) /**< \brief (TC2) Channel Control Register (channel = 1) */\r
+  #define REG_TC2_CMR1  (*(__IO uint32_t*)0xFC024044U) /**< \brief (TC2) Channel Mode Register (channel = 1) */\r
+  #define REG_TC2_SMMR1 (*(__IO uint32_t*)0xFC024048U) /**< \brief (TC2) Stepper Motor Mode Register (channel = 1) */\r
+  #define REG_TC2_RAB1  (*(__I  uint32_t*)0xFC02404CU) /**< \brief (TC2) Register AB (channel = 1) */\r
+  #define REG_TC2_CV1   (*(__I  uint32_t*)0xFC024050U) /**< \brief (TC2) Counter Value (channel = 1) */\r
+  #define REG_TC2_RA1   (*(__IO uint32_t*)0xFC024054U) /**< \brief (TC2) Register A (channel = 1) */\r
+  #define REG_TC2_RB1   (*(__IO uint32_t*)0xFC024058U) /**< \brief (TC2) Register B (channel = 1) */\r
+  #define REG_TC2_RC1   (*(__IO uint32_t*)0xFC02405CU) /**< \brief (TC2) Register C (channel = 1) */\r
+  #define REG_TC2_SR1   (*(__I  uint32_t*)0xFC024060U) /**< \brief (TC2) Status Register (channel = 1) */\r
+  #define REG_TC2_IER1  (*(__O  uint32_t*)0xFC024064U) /**< \brief (TC2) Interrupt Enable Register (channel = 1) */\r
+  #define REG_TC2_IDR1  (*(__O  uint32_t*)0xFC024068U) /**< \brief (TC2) Interrupt Disable Register (channel = 1) */\r
+  #define REG_TC2_IMR1  (*(__I  uint32_t*)0xFC02406CU) /**< \brief (TC2) Interrupt Mask Register (channel = 1) */\r
+  #define REG_TC2_EMR1  (*(__IO uint32_t*)0xFC024070U) /**< \brief (TC2) Extended Mode Register (channel = 1) */\r
+  #define REG_TC2_CCR2  (*(__O  uint32_t*)0xFC024080U) /**< \brief (TC2) Channel Control Register (channel = 2) */\r
+  #define REG_TC2_CMR2  (*(__IO uint32_t*)0xFC024084U) /**< \brief (TC2) Channel Mode Register (channel = 2) */\r
+  #define REG_TC2_SMMR2 (*(__IO uint32_t*)0xFC024088U) /**< \brief (TC2) Stepper Motor Mode Register (channel = 2) */\r
+  #define REG_TC2_RAB2  (*(__I  uint32_t*)0xFC02408CU) /**< \brief (TC2) Register AB (channel = 2) */\r
+  #define REG_TC2_CV2   (*(__I  uint32_t*)0xFC024090U) /**< \brief (TC2) Counter Value (channel = 2) */\r
+  #define REG_TC2_RA2   (*(__IO uint32_t*)0xFC024094U) /**< \brief (TC2) Register A (channel = 2) */\r
+  #define REG_TC2_RB2   (*(__IO uint32_t*)0xFC024098U) /**< \brief (TC2) Register B (channel = 2) */\r
+  #define REG_TC2_RC2   (*(__IO uint32_t*)0xFC02409CU) /**< \brief (TC2) Register C (channel = 2) */\r
+  #define REG_TC2_SR2   (*(__I  uint32_t*)0xFC0240A0U) /**< \brief (TC2) Status Register (channel = 2) */\r
+  #define REG_TC2_IER2  (*(__O  uint32_t*)0xFC0240A4U) /**< \brief (TC2) Interrupt Enable Register (channel = 2) */\r
+  #define REG_TC2_IDR2  (*(__O  uint32_t*)0xFC0240A8U) /**< \brief (TC2) Interrupt Disable Register (channel = 2) */\r
+  #define REG_TC2_IMR2  (*(__I  uint32_t*)0xFC0240ACU) /**< \brief (TC2) Interrupt Mask Register (channel = 2) */\r
+  #define REG_TC2_EMR2  (*(__IO uint32_t*)0xFC0240B0U) /**< \brief (TC2) Extended Mode Register (channel = 2) */\r
+  #define REG_TC2_BCR   (*(__O  uint32_t*)0xFC0240C0U) /**< \brief (TC2) Block Control Register */\r
+  #define REG_TC2_BMR   (*(__IO uint32_t*)0xFC0240C4U) /**< \brief (TC2) Block Mode Register */\r
+  #define REG_TC2_QIER  (*(__O  uint32_t*)0xFC0240C8U) /**< \brief (TC2) QDEC Interrupt Enable Register */\r
+  #define REG_TC2_QIDR  (*(__O  uint32_t*)0xFC0240CCU) /**< \brief (TC2) QDEC Interrupt Disable Register */\r
+  #define REG_TC2_QIMR  (*(__I  uint32_t*)0xFC0240D0U) /**< \brief (TC2) QDEC Interrupt Mask Register */\r
+  #define REG_TC2_QISR  (*(__I  uint32_t*)0xFC0240D4U) /**< \brief (TC2) QDEC Interrupt Status Register */\r
+  #define REG_TC2_FMR   (*(__IO uint32_t*)0xFC0240D8U) /**< \brief (TC2) Fault Mode Register */\r
+  #define REG_TC2_WPMR  (*(__IO uint32_t*)0xFC0240E4U) /**< \brief (TC2) Write Protect Mode Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for GMAC1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_GMAC1_NCR                        (0xFC028000U) /**< \brief (GMAC1) Network Control Register */\r
+  #define REG_GMAC1_NCFGR                      (0xFC028004U) /**< \brief (GMAC1) Network Configuration Register */\r
+  #define REG_GMAC1_NSR                        (0xFC028008U) /**< \brief (GMAC1) Network Status Register */\r
+  #define REG_GMAC1_UR                         (0xFC02800CU) /**< \brief (GMAC1) User Register */\r
+  #define REG_GMAC1_DCFGR                      (0xFC028010U) /**< \brief (GMAC1) DMA Configuration Register */\r
+  #define REG_GMAC1_TSR                        (0xFC028014U) /**< \brief (GMAC1) Transmit Status Register */\r
+  #define REG_GMAC1_RBQB                       (0xFC028018U) /**< \brief (GMAC1) Receive Buffer Queue Base Address */\r
+  #define REG_GMAC1_TBQB                       (0xFC02801CU) /**< \brief (GMAC1) Transmit Buffer Queue Base Address */\r
+  #define REG_GMAC1_RSR                        (0xFC028020U) /**< \brief (GMAC1) Receive Status Register */\r
+  #define REG_GMAC1_ISR                        (0xFC028024U) /**< \brief (GMAC1) Interrupt Status Register */\r
+  #define REG_GMAC1_IER                        (0xFC028028U) /**< \brief (GMAC1) Interrupt Enable Register */\r
+  #define REG_GMAC1_IDR                        (0xFC02802CU) /**< \brief (GMAC1) Interrupt Disable Register */\r
+  #define REG_GMAC1_IMR                        (0xFC028030U) /**< \brief (GMAC1) Interrupt Mask Register */\r
+  #define REG_GMAC1_MAN                        (0xFC028034U) /**< \brief (GMAC1) PHY Maintenance Register */\r
+  #define REG_GMAC1_RPQ                        (0xFC028038U) /**< \brief (GMAC1) Received Pause Quantum Register */\r
+  #define REG_GMAC1_TPQ                        (0xFC02803CU) /**< \brief (GMAC1) Transmit Pause Quantum Register */\r
+  #define REG_GMAC1_HRB                        (0xFC028080U) /**< \brief (GMAC1) Hash Register Bottom [31:0] */\r
+  #define REG_GMAC1_HRT                        (0xFC028084U) /**< \brief (GMAC1) Hash Register Top [63:32] */\r
+  #define REG_GMAC1_SAB1                       (0xFC028088U) /**< \brief (GMAC1) Specific Address 1 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT1                       (0xFC02808CU) /**< \brief (GMAC1) Specific Address 1 Top [47:32] Register */\r
+  #define REG_GMAC1_SAB2                       (0xFC028090U) /**< \brief (GMAC1) Specific Address 2 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT2                       (0xFC028094U) /**< \brief (GMAC1) Specific Address 2 Top [47:32] Register */\r
+  #define REG_GMAC1_SAB3                       (0xFC028098U) /**< \brief (GMAC1) Specific Address 3 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT3                       (0xFC02809CU) /**< \brief (GMAC1) Specific Address 3 Top [47:32] Register */\r
+  #define REG_GMAC1_SAB4                       (0xFC0280A0U) /**< \brief (GMAC1) Specific Address 4 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT4                       (0xFC0280A4U) /**< \brief (GMAC1) Specific Address 4 Top [47:32] Register */\r
+  #define REG_GMAC1_TIDM                       (0xFC0280A8U) /**< \brief (GMAC1) Type ID Match 1 Register */\r
+  #define REG_GMAC1_WOL                        (0xFC0280B8U) /**< \brief (GMAC1) Wake on LAN Register */\r
+  #define REG_GMAC1_IPGS                       (0xFC0280BCU) /**< \brief (GMAC1) IPG Stretch Register */\r
+  #define REG_GMAC1_SVLAN                      (0xFC0280C0U) /**< \brief (GMAC1) Stacked VLAN Register */\r
+  #define REG_GMAC1_TPFCP                      (0xFC0280C4U) /**< \brief (GMAC1) Transmit PFC Pause Register */\r
+  #define REG_GMAC1_SAMB1                      (0xFC0280C8U) /**< \brief (GMAC1) Specific Address 1 Mask Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAMT1                      (0xFC0280CCU) /**< \brief (GMAC1) Specific Address 1 Mask Top [47:32] Register */\r
+  #define REG_GMAC1_OTLO                       (0xFC028100U) /**< \brief (GMAC1) Octets Transmitted [31:0] Register */\r
+  #define REG_GMAC1_OTHI                       (0xFC028104U) /**< \brief (GMAC1) Octets Transmitted [47:32] Register */\r
+  #define REG_GMAC1_FT                         (0xFC028108U) /**< \brief (GMAC1) Frames Transmitted Register */\r
+  #define REG_GMAC1_BCFT                       (0xFC02810CU) /**< \brief (GMAC1) Broadcast Frames Transmitted Register */\r
+  #define REG_GMAC1_MFT                        (0xFC028110U) /**< \brief (GMAC1) Multicast Frames Transmitted Register */\r
+  #define REG_GMAC1_PFT                        (0xFC028114U) /**< \brief (GMAC1) Pause Frames Transmitted Register */\r
+  #define REG_GMAC1_BFT64                      (0xFC028118U) /**< \brief (GMAC1) 64 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT127                    (0xFC02811CU) /**< \brief (GMAC1) 65 to 127 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT255                    (0xFC028120U) /**< \brief (GMAC1) 128 to 255 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT511                    (0xFC028124U) /**< \brief (GMAC1) 256 to 511 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT1023                   (0xFC028128U) /**< \brief (GMAC1) 512 to 1023 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT1518                   (0xFC02812CU) /**< \brief (GMAC1) 1024 to 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_GTBFT1518                  (0xFC028130U) /**< \brief (GMAC1) Greater Than 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TUR                        (0xFC028134U) /**< \brief (GMAC1) Transmit Under Runs Register */\r
+  #define REG_GMAC1_SCF                        (0xFC028138U) /**< \brief (GMAC1) Single Collision Frames Register */\r
+  #define REG_GMAC1_MCF                        (0xFC02813CU) /**< \brief (GMAC1) Multiple Collision Frames Register */\r
+  #define REG_GMAC1_EC                         (0xFC028140U) /**< \brief (GMAC1) Excessive Collisions Register */\r
+  #define REG_GMAC1_LC                         (0xFC028144U) /**< \brief (GMAC1) Late Collisions Register */\r
+  #define REG_GMAC1_DTF                        (0xFC028148U) /**< \brief (GMAC1) Deferred Transmission Frames Register */\r
+  #define REG_GMAC1_CSE                        (0xFC02814CU) /**< \brief (GMAC1) Carrier Sense Errors Register */\r
+  #define REG_GMAC1_ORLO                       (0xFC028150U) /**< \brief (GMAC1) Octets Received [31:0] Received */\r
+  #define REG_GMAC1_ORHI                       (0xFC028154U) /**< \brief (GMAC1) Octets Received [47:32] Received */\r
+  #define REG_GMAC1_FR                         (0xFC028158U) /**< \brief (GMAC1) Frames Received Register */\r
+  #define REG_GMAC1_BCFR                       (0xFC02815CU) /**< \brief (GMAC1) Broadcast Frames Received Register */\r
+  #define REG_GMAC1_MFR                        (0xFC028160U) /**< \brief (GMAC1) Multicast Frames Received Register */\r
+  #define REG_GMAC1_PFR                        (0xFC028164U) /**< \brief (GMAC1) Pause Frames Received Register */\r
+  #define REG_GMAC1_BFR64                      (0xFC028168U) /**< \brief (GMAC1) 64 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR127                    (0xFC02816CU) /**< \brief (GMAC1) 65 to 127 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR255                    (0xFC028170U) /**< \brief (GMAC1) 128 to 255 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR511                    (0xFC028174U) /**< \brief (GMAC1) 256 to 511Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR1023                   (0xFC028178U) /**< \brief (GMAC1) 512 to 1023 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR1518                   (0xFC02817CU) /**< \brief (GMAC1) 1024 to 1518 Byte Frames Received Register */\r
+  #define REG_GMAC1_TMXBFR                     (0xFC028180U) /**< \brief (GMAC1) 1519 to Maximum Byte Frames Received Register */\r
+  #define REG_GMAC1_UFR                        (0xFC028184U) /**< \brief (GMAC1) Undersize Frames Received Register */\r
+  #define REG_GMAC1_OFR                        (0xFC028188U) /**< \brief (GMAC1) Oversize Frames Received Register */\r
+  #define REG_GMAC1_JR                         (0xFC02818CU) /**< \brief (GMAC1) Jabbers Received Register */\r
+  #define REG_GMAC1_FCSE                       (0xFC028190U) /**< \brief (GMAC1) Frame Check Sequence Errors Register */\r
+  #define REG_GMAC1_LFFE                       (0xFC028194U) /**< \brief (GMAC1) Length Field Frame Errors Register */\r
+  #define REG_GMAC1_RSE                        (0xFC028198U) /**< \brief (GMAC1) Receive Symbol Errors Register */\r
+  #define REG_GMAC1_AE                         (0xFC02819CU) /**< \brief (GMAC1) Alignment Errors Register */\r
+  #define REG_GMAC1_RRE                        (0xFC0281A0U) /**< \brief (GMAC1) Receive Resource Errors Register */\r
+  #define REG_GMAC1_ROE                        (0xFC0281A4U) /**< \brief (GMAC1) Receive Overrun Register */\r
+  #define REG_GMAC1_IHCE                       (0xFC0281A8U) /**< \brief (GMAC1) IP Header Checksum Errors Register */\r
+  #define REG_GMAC1_TCE                        (0xFC0281ACU) /**< \brief (GMAC1) TCP Checksum Errors Register */\r
+  #define REG_GMAC1_UCE                        (0xFC0281B0U) /**< \brief (GMAC1) UDP Checksum Errors Register */\r
+  #define REG_GMAC1_TSSS                       (0xFC0281C8U) /**< \brief (GMAC1) 1588 Timer Sync Strobe Seconds Register */\r
+  #define REG_GMAC1_TSSN                       (0xFC0281CCU) /**< \brief (GMAC1) 1588 Timer Sync Strobe Nanoseconds Register */\r
+  #define REG_GMAC1_TS                         (0xFC0281D0U) /**< \brief (GMAC1) 1588 Timer Seconds Register */\r
+  #define REG_GMAC1_TN                         (0xFC0281D4U) /**< \brief (GMAC1) 1588 Timer Nanoseconds Register */\r
+  #define REG_GMAC1_TA                         (0xFC0281D8U) /**< \brief (GMAC1) 1588 Timer Adjust Register */\r
+  #define REG_GMAC1_TI                         (0xFC0281DCU) /**< \brief (GMAC1) 1588 Timer Increment Register */\r
+  #define REG_GMAC1_EFTS                       (0xFC0281E0U) /**< \brief (GMAC1) PTP Event Frame Transmitted Seconds */\r
+  #define REG_GMAC1_EFTN                       (0xFC0281E4U) /**< \brief (GMAC1) PTP Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC1_EFRS                       (0xFC0281E8U) /**< \brief (GMAC1) PTP Event Frame Received Seconds */\r
+  #define REG_GMAC1_EFRN                       (0xFC0281ECU) /**< \brief (GMAC1) PTP Event Frame Received Nanoseconds */\r
+  #define REG_GMAC1_PEFTS                      (0xFC0281F0U) /**< \brief (GMAC1) PTP Peer Event Frame Transmitted Seconds */\r
+  #define REG_GMAC1_PEFTN                      (0xFC0281F4U) /**< \brief (GMAC1) PTP Peer Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC1_PEFRS                      (0xFC0281F8U) /**< \brief (GMAC1) PTP Peer Event Frame Received Seconds */\r
+  #define REG_GMAC1_PEFRN                      (0xFC0281FCU) /**< \brief (GMAC1) PTP Peer Event Frame Received Nanoseconds */\r
+#else\r
+  #define REG_GMAC1_NCR       (*(__IO uint32_t*)0xFC028000U) /**< \brief (GMAC1) Network Control Register */\r
+  #define REG_GMAC1_NCFGR     (*(__IO uint32_t*)0xFC028004U) /**< \brief (GMAC1) Network Configuration Register */\r
+  #define REG_GMAC1_NSR       (*(__I  uint32_t*)0xFC028008U) /**< \brief (GMAC1) Network Status Register */\r
+  #define REG_GMAC1_UR        (*(__IO uint32_t*)0xFC02800CU) /**< \brief (GMAC1) User Register */\r
+  #define REG_GMAC1_DCFGR     (*(__IO uint32_t*)0xFC028010U) /**< \brief (GMAC1) DMA Configuration Register */\r
+  #define REG_GMAC1_TSR       (*(__IO uint32_t*)0xFC028014U) /**< \brief (GMAC1) Transmit Status Register */\r
+  #define REG_GMAC1_RBQB      (*(__IO uint32_t*)0xFC028018U) /**< \brief (GMAC1) Receive Buffer Queue Base Address */\r
+  #define REG_GMAC1_TBQB      (*(__IO uint32_t*)0xFC02801CU) /**< \brief (GMAC1) Transmit Buffer Queue Base Address */\r
+  #define REG_GMAC1_RSR       (*(__IO uint32_t*)0xFC028020U) /**< \brief (GMAC1) Receive Status Register */\r
+  #define REG_GMAC1_ISR       (*(__I  uint32_t*)0xFC028024U) /**< \brief (GMAC1) Interrupt Status Register */\r
+  #define REG_GMAC1_IER       (*(__O  uint32_t*)0xFC028028U) /**< \brief (GMAC1) Interrupt Enable Register */\r
+  #define REG_GMAC1_IDR       (*(__O  uint32_t*)0xFC02802CU) /**< \brief (GMAC1) Interrupt Disable Register */\r
+  #define REG_GMAC1_IMR       (*(__I  uint32_t*)0xFC028030U) /**< \brief (GMAC1) Interrupt Mask Register */\r
+  #define REG_GMAC1_MAN       (*(__IO uint32_t*)0xFC028034U) /**< \brief (GMAC1) PHY Maintenance Register */\r
+  #define REG_GMAC1_RPQ       (*(__I  uint32_t*)0xFC028038U) /**< \brief (GMAC1) Received Pause Quantum Register */\r
+  #define REG_GMAC1_TPQ       (*(__IO uint32_t*)0xFC02803CU) /**< \brief (GMAC1) Transmit Pause Quantum Register */\r
+  #define REG_GMAC1_HRB       (*(__IO uint32_t*)0xFC028080U) /**< \brief (GMAC1) Hash Register Bottom [31:0] */\r
+  #define REG_GMAC1_HRT       (*(__IO uint32_t*)0xFC028084U) /**< \brief (GMAC1) Hash Register Top [63:32] */\r
+  #define REG_GMAC1_SAB1      (*(__IO uint32_t*)0xFC028088U) /**< \brief (GMAC1) Specific Address 1 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT1      (*(__IO uint32_t*)0xFC02808CU) /**< \brief (GMAC1) Specific Address 1 Top [47:32] Register */\r
+  #define REG_GMAC1_SAB2      (*(__IO uint32_t*)0xFC028090U) /**< \brief (GMAC1) Specific Address 2 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT2      (*(__IO uint32_t*)0xFC028094U) /**< \brief (GMAC1) Specific Address 2 Top [47:32] Register */\r
+  #define REG_GMAC1_SAB3      (*(__IO uint32_t*)0xFC028098U) /**< \brief (GMAC1) Specific Address 3 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT3      (*(__IO uint32_t*)0xFC02809CU) /**< \brief (GMAC1) Specific Address 3 Top [47:32] Register */\r
+  #define REG_GMAC1_SAB4      (*(__IO uint32_t*)0xFC0280A0U) /**< \brief (GMAC1) Specific Address 4 Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAT4      (*(__IO uint32_t*)0xFC0280A4U) /**< \brief (GMAC1) Specific Address 4 Top [47:32] Register */\r
+  #define REG_GMAC1_TIDM      (*(__IO uint32_t*)0xFC0280A8U) /**< \brief (GMAC1) Type ID Match 1 Register */\r
+  #define REG_GMAC1_WOL       (*(__IO uint32_t*)0xFC0280B8U) /**< \brief (GMAC1) Wake on LAN Register */\r
+  #define REG_GMAC1_IPGS      (*(__IO uint32_t*)0xFC0280BCU) /**< \brief (GMAC1) IPG Stretch Register */\r
+  #define REG_GMAC1_SVLAN     (*(__IO uint32_t*)0xFC0280C0U) /**< \brief (GMAC1) Stacked VLAN Register */\r
+  #define REG_GMAC1_TPFCP     (*(__IO uint32_t*)0xFC0280C4U) /**< \brief (GMAC1) Transmit PFC Pause Register */\r
+  #define REG_GMAC1_SAMB1     (*(__IO uint32_t*)0xFC0280C8U) /**< \brief (GMAC1) Specific Address 1 Mask Bottom [31:0] Register */\r
+  #define REG_GMAC1_SAMT1     (*(__IO uint32_t*)0xFC0280CCU) /**< \brief (GMAC1) Specific Address 1 Mask Top [47:32] Register */\r
+  #define REG_GMAC1_OTLO      (*(__I  uint32_t*)0xFC028100U) /**< \brief (GMAC1) Octets Transmitted [31:0] Register */\r
+  #define REG_GMAC1_OTHI      (*(__I  uint32_t*)0xFC028104U) /**< \brief (GMAC1) Octets Transmitted [47:32] Register */\r
+  #define REG_GMAC1_FT        (*(__I  uint32_t*)0xFC028108U) /**< \brief (GMAC1) Frames Transmitted Register */\r
+  #define REG_GMAC1_BCFT      (*(__I  uint32_t*)0xFC02810CU) /**< \brief (GMAC1) Broadcast Frames Transmitted Register */\r
+  #define REG_GMAC1_MFT       (*(__I  uint32_t*)0xFC028110U) /**< \brief (GMAC1) Multicast Frames Transmitted Register */\r
+  #define REG_GMAC1_PFT       (*(__I  uint32_t*)0xFC028114U) /**< \brief (GMAC1) Pause Frames Transmitted Register */\r
+  #define REG_GMAC1_BFT64     (*(__I  uint32_t*)0xFC028118U) /**< \brief (GMAC1) 64 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT127   (*(__I  uint32_t*)0xFC02811CU) /**< \brief (GMAC1) 65 to 127 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT255   (*(__I  uint32_t*)0xFC028120U) /**< \brief (GMAC1) 128 to 255 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT511   (*(__I  uint32_t*)0xFC028124U) /**< \brief (GMAC1) 256 to 511 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT1023  (*(__I  uint32_t*)0xFC028128U) /**< \brief (GMAC1) 512 to 1023 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TBFT1518  (*(__I  uint32_t*)0xFC02812CU) /**< \brief (GMAC1) 1024 to 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_GTBFT1518 (*(__I  uint32_t*)0xFC028130U) /**< \brief (GMAC1) Greater Than 1518 Byte Frames Transmitted Register */\r
+  #define REG_GMAC1_TUR       (*(__I  uint32_t*)0xFC028134U) /**< \brief (GMAC1) Transmit Under Runs Register */\r
+  #define REG_GMAC1_SCF       (*(__I  uint32_t*)0xFC028138U) /**< \brief (GMAC1) Single Collision Frames Register */\r
+  #define REG_GMAC1_MCF       (*(__I  uint32_t*)0xFC02813CU) /**< \brief (GMAC1) Multiple Collision Frames Register */\r
+  #define REG_GMAC1_EC        (*(__I  uint32_t*)0xFC028140U) /**< \brief (GMAC1) Excessive Collisions Register */\r
+  #define REG_GMAC1_LC        (*(__I  uint32_t*)0xFC028144U) /**< \brief (GMAC1) Late Collisions Register */\r
+  #define REG_GMAC1_DTF       (*(__I  uint32_t*)0xFC028148U) /**< \brief (GMAC1) Deferred Transmission Frames Register */\r
+  #define REG_GMAC1_CSE       (*(__I  uint32_t*)0xFC02814CU) /**< \brief (GMAC1) Carrier Sense Errors Register */\r
+  #define REG_GMAC1_ORLO      (*(__I  uint32_t*)0xFC028150U) /**< \brief (GMAC1) Octets Received [31:0] Received */\r
+  #define REG_GMAC1_ORHI      (*(__I  uint32_t*)0xFC028154U) /**< \brief (GMAC1) Octets Received [47:32] Received */\r
+  #define REG_GMAC1_FR        (*(__I  uint32_t*)0xFC028158U) /**< \brief (GMAC1) Frames Received Register */\r
+  #define REG_GMAC1_BCFR      (*(__I  uint32_t*)0xFC02815CU) /**< \brief (GMAC1) Broadcast Frames Received Register */\r
+  #define REG_GMAC1_MFR       (*(__I  uint32_t*)0xFC028160U) /**< \brief (GMAC1) Multicast Frames Received Register */\r
+  #define REG_GMAC1_PFR       (*(__I  uint32_t*)0xFC028164U) /**< \brief (GMAC1) Pause Frames Received Register */\r
+  #define REG_GMAC1_BFR64     (*(__I  uint32_t*)0xFC028168U) /**< \brief (GMAC1) 64 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR127   (*(__I  uint32_t*)0xFC02816CU) /**< \brief (GMAC1) 65 to 127 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR255   (*(__I  uint32_t*)0xFC028170U) /**< \brief (GMAC1) 128 to 255 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR511   (*(__I  uint32_t*)0xFC028174U) /**< \brief (GMAC1) 256 to 511Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR1023  (*(__I  uint32_t*)0xFC028178U) /**< \brief (GMAC1) 512 to 1023 Byte Frames Received Register */\r
+  #define REG_GMAC1_TBFR1518  (*(__I  uint32_t*)0xFC02817CU) /**< \brief (GMAC1) 1024 to 1518 Byte Frames Received Register */\r
+  #define REG_GMAC1_TMXBFR    (*(__I  uint32_t*)0xFC028180U) /**< \brief (GMAC1) 1519 to Maximum Byte Frames Received Register */\r
+  #define REG_GMAC1_UFR       (*(__I  uint32_t*)0xFC028184U) /**< \brief (GMAC1) Undersize Frames Received Register */\r
+  #define REG_GMAC1_OFR       (*(__I  uint32_t*)0xFC028188U) /**< \brief (GMAC1) Oversize Frames Received Register */\r
+  #define REG_GMAC1_JR        (*(__I  uint32_t*)0xFC02818CU) /**< \brief (GMAC1) Jabbers Received Register */\r
+  #define REG_GMAC1_FCSE      (*(__I  uint32_t*)0xFC028190U) /**< \brief (GMAC1) Frame Check Sequence Errors Register */\r
+  #define REG_GMAC1_LFFE      (*(__I  uint32_t*)0xFC028194U) /**< \brief (GMAC1) Length Field Frame Errors Register */\r
+  #define REG_GMAC1_RSE       (*(__I  uint32_t*)0xFC028198U) /**< \brief (GMAC1) Receive Symbol Errors Register */\r
+  #define REG_GMAC1_AE        (*(__I  uint32_t*)0xFC02819CU) /**< \brief (GMAC1) Alignment Errors Register */\r
+  #define REG_GMAC1_RRE       (*(__I  uint32_t*)0xFC0281A0U) /**< \brief (GMAC1) Receive Resource Errors Register */\r
+  #define REG_GMAC1_ROE       (*(__I  uint32_t*)0xFC0281A4U) /**< \brief (GMAC1) Receive Overrun Register */\r
+  #define REG_GMAC1_IHCE      (*(__I  uint32_t*)0xFC0281A8U) /**< \brief (GMAC1) IP Header Checksum Errors Register */\r
+  #define REG_GMAC1_TCE       (*(__I  uint32_t*)0xFC0281ACU) /**< \brief (GMAC1) TCP Checksum Errors Register */\r
+  #define REG_GMAC1_UCE       (*(__I  uint32_t*)0xFC0281B0U) /**< \brief (GMAC1) UDP Checksum Errors Register */\r
+  #define REG_GMAC1_TSSS      (*(__IO uint32_t*)0xFC0281C8U) /**< \brief (GMAC1) 1588 Timer Sync Strobe Seconds Register */\r
+  #define REG_GMAC1_TSSN      (*(__IO uint32_t*)0xFC0281CCU) /**< \brief (GMAC1) 1588 Timer Sync Strobe Nanoseconds Register */\r
+  #define REG_GMAC1_TS        (*(__IO uint32_t*)0xFC0281D0U) /**< \brief (GMAC1) 1588 Timer Seconds Register */\r
+  #define REG_GMAC1_TN        (*(__IO uint32_t*)0xFC0281D4U) /**< \brief (GMAC1) 1588 Timer Nanoseconds Register */\r
+  #define REG_GMAC1_TA        (*(__O  uint32_t*)0xFC0281D8U) /**< \brief (GMAC1) 1588 Timer Adjust Register */\r
+  #define REG_GMAC1_TI        (*(__IO uint32_t*)0xFC0281DCU) /**< \brief (GMAC1) 1588 Timer Increment Register */\r
+  #define REG_GMAC1_EFTS      (*(__I  uint32_t*)0xFC0281E0U) /**< \brief (GMAC1) PTP Event Frame Transmitted Seconds */\r
+  #define REG_GMAC1_EFTN      (*(__I  uint32_t*)0xFC0281E4U) /**< \brief (GMAC1) PTP Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC1_EFRS      (*(__I  uint32_t*)0xFC0281E8U) /**< \brief (GMAC1) PTP Event Frame Received Seconds */\r
+  #define REG_GMAC1_EFRN      (*(__I  uint32_t*)0xFC0281ECU) /**< \brief (GMAC1) PTP Event Frame Received Nanoseconds */\r
+  #define REG_GMAC1_PEFTS     (*(__I  uint32_t*)0xFC0281F0U) /**< \brief (GMAC1) PTP Peer Event Frame Transmitted Seconds */\r
+  #define REG_GMAC1_PEFTN     (*(__I  uint32_t*)0xFC0281F4U) /**< \brief (GMAC1) PTP Peer Event Frame Transmitted Nanoseconds */\r
+  #define REG_GMAC1_PEFRS     (*(__I  uint32_t*)0xFC0281F8U) /**< \brief (GMAC1) PTP Peer Event Frame Received Seconds */\r
+  #define REG_GMAC1_PEFRN     (*(__I  uint32_t*)0xFC0281FCU) /**< \brief (GMAC1) PTP Peer Event Frame Received Nanoseconds */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for UDPHS peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_UDPHS_CTRL                         (0xFC02C000U) /**< \brief (UDPHS) UDPHS Control Register */\r
+  #define REG_UDPHS_FNUM                         (0xFC02C004U) /**< \brief (UDPHS) UDPHS Frame Number Register */\r
+  #define REG_UDPHS_IEN                          (0xFC02C010U) /**< \brief (UDPHS) UDPHS Interrupt Enable Register */\r
+  #define REG_UDPHS_INTSTA                       (0xFC02C014U) /**< \brief (UDPHS) UDPHS Interrupt Status Register */\r
+  #define REG_UDPHS_CLRINT                       (0xFC02C018U) /**< \brief (UDPHS) UDPHS Clear Interrupt Register */\r
+  #define REG_UDPHS_EPTRST                       (0xFC02C01CU) /**< \brief (UDPHS) UDPHS Endpoints Reset Register */\r
+  #define REG_UDPHS_TST                          (0xFC02C0E0U) /**< \brief (UDPHS) UDPHS Test Register */\r
+  #define REG_UDPHS_EPTCFG0                      (0xFC02C100U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCTLENB0                   (0xFC02C104U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCTLDIS0                   (0xFC02C108U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCTL0                      (0xFC02C10CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTSETSTA0                   (0xFC02C114U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCLRSTA0                   (0xFC02C118U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTSTA0                      (0xFC02C11CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCFG1                      (0xFC02C120U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCTLENB1                   (0xFC02C124U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCTLDIS1                   (0xFC02C128U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCTL1                      (0xFC02C12CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTSETSTA1                   (0xFC02C134U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCLRSTA1                   (0xFC02C138U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTSTA1                      (0xFC02C13CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCFG2                      (0xFC02C140U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCTLENB2                   (0xFC02C144U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCTLDIS2                   (0xFC02C148U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCTL2                      (0xFC02C14CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTSETSTA2                   (0xFC02C154U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCLRSTA2                   (0xFC02C158U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTSTA2                      (0xFC02C15CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCFG3                      (0xFC02C160U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCTLENB3                   (0xFC02C164U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCTLDIS3                   (0xFC02C168U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCTL3                      (0xFC02C16CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTSETSTA3                   (0xFC02C174U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCLRSTA3                   (0xFC02C178U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTSTA3                      (0xFC02C17CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCFG4                      (0xFC02C180U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCTLENB4                   (0xFC02C184U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCTLDIS4                   (0xFC02C188U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCTL4                      (0xFC02C18CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTSETSTA4                   (0xFC02C194U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCLRSTA4                   (0xFC02C198U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTSTA4                      (0xFC02C19CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCFG5                      (0xFC02C1A0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCTLENB5                   (0xFC02C1A4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCTLDIS5                   (0xFC02C1A8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCTL5                      (0xFC02C1ACU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTSETSTA5                   (0xFC02C1B4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCLRSTA5                   (0xFC02C1B8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTSTA5                      (0xFC02C1BCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCFG6                      (0xFC02C1C0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCTLENB6                   (0xFC02C1C4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCTLDIS6                   (0xFC02C1C8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCTL6                      (0xFC02C1CCU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTSETSTA6                   (0xFC02C1D4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCLRSTA6                   (0xFC02C1D8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTSTA6                      (0xFC02C1DCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCFG7                      (0xFC02C1E0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCTLENB7                   (0xFC02C1E4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCTLDIS7                   (0xFC02C1E8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCTL7                      (0xFC02C1ECU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTSETSTA7                   (0xFC02C1F4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCLRSTA7                   (0xFC02C1F8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTSTA7                      (0xFC02C1FCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCFG8                      (0xFC02C200U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCTLENB8                   (0xFC02C204U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCTLDIS8                   (0xFC02C208U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCTL8                      (0xFC02C20CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTSETSTA8                   (0xFC02C214U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCLRSTA8                   (0xFC02C218U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTSTA8                      (0xFC02C21CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCFG9                      (0xFC02C220U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCTLENB9                   (0xFC02C224U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCTLDIS9                   (0xFC02C228U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCTL9                      (0xFC02C22CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTSETSTA9                   (0xFC02C234U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCLRSTA9                   (0xFC02C238U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTSTA9                      (0xFC02C23CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCFG10                     (0xFC02C240U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCTLENB10                  (0xFC02C244U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCTLDIS10                  (0xFC02C248U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCTL10                     (0xFC02C24CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTSETSTA10                  (0xFC02C254U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCLRSTA10                  (0xFC02C258U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTSTA10                     (0xFC02C25CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCFG11                     (0xFC02C260U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCTLENB11                  (0xFC02C264U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCTLDIS11                  (0xFC02C268U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCTL11                     (0xFC02C26CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTSETSTA11                  (0xFC02C274U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCLRSTA11                  (0xFC02C278U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTSTA11                     (0xFC02C27CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCFG12                     (0xFC02C280U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCTLENB12                  (0xFC02C284U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCTLDIS12                  (0xFC02C288U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCTL12                     (0xFC02C28CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTSETSTA12                  (0xFC02C294U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCLRSTA12                  (0xFC02C298U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTSTA12                     (0xFC02C29CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCFG13                     (0xFC02C2A0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCTLENB13                  (0xFC02C2A4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCTLDIS13                  (0xFC02C2A8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCTL13                     (0xFC02C2ACU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTSETSTA13                  (0xFC02C2B4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCLRSTA13                  (0xFC02C2B8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTSTA13                     (0xFC02C2BCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCFG14                     (0xFC02C2C0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCTLENB14                  (0xFC02C2C4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCTLDIS14                  (0xFC02C2C8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCTL14                     (0xFC02C2CCU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTSETSTA14                  (0xFC02C2D4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCLRSTA14                  (0xFC02C2D8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTSTA14                     (0xFC02C2DCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCFG15                     (0xFC02C2E0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCTLENB15                  (0xFC02C2E4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCTLDIS15                  (0xFC02C2E8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCTL15                     (0xFC02C2ECU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTSETSTA15                  (0xFC02C2F4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCLRSTA15                  (0xFC02C2F8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTSTA15                     (0xFC02C2FCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 15) */\r
+  #define REG_UDPHS_DMANXTDSC0                   (0xFC02C300U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 0) */\r
+  #define REG_UDPHS_DMAADDRESS0                  (0xFC02C304U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 0) */\r
+  #define REG_UDPHS_DMACONTROL0                  (0xFC02C308U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 0) */\r
+  #define REG_UDPHS_DMASTATUS0                   (0xFC02C30CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 0) */\r
+  #define REG_UDPHS_DMANXTDSC1                   (0xFC02C310U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 1) */\r
+  #define REG_UDPHS_DMAADDRESS1                  (0xFC02C314U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 1) */\r
+  #define REG_UDPHS_DMACONTROL1                  (0xFC02C318U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 1) */\r
+  #define REG_UDPHS_DMASTATUS1                   (0xFC02C31CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 1) */\r
+  #define REG_UDPHS_DMANXTDSC2                   (0xFC02C320U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 2) */\r
+  #define REG_UDPHS_DMAADDRESS2                  (0xFC02C324U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 2) */\r
+  #define REG_UDPHS_DMACONTROL2                  (0xFC02C328U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 2) */\r
+  #define REG_UDPHS_DMASTATUS2                   (0xFC02C32CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 2) */\r
+  #define REG_UDPHS_DMANXTDSC3                   (0xFC02C330U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 3) */\r
+  #define REG_UDPHS_DMAADDRESS3                  (0xFC02C334U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 3) */\r
+  #define REG_UDPHS_DMACONTROL3                  (0xFC02C338U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 3) */\r
+  #define REG_UDPHS_DMASTATUS3                   (0xFC02C33CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 3) */\r
+  #define REG_UDPHS_DMANXTDSC4                   (0xFC02C340U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 4) */\r
+  #define REG_UDPHS_DMAADDRESS4                  (0xFC02C344U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 4) */\r
+  #define REG_UDPHS_DMACONTROL4                  (0xFC02C348U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 4) */\r
+  #define REG_UDPHS_DMASTATUS4                   (0xFC02C34CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 4) */\r
+  #define REG_UDPHS_DMANXTDSC5                   (0xFC02C350U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 5) */\r
+  #define REG_UDPHS_DMAADDRESS5                  (0xFC02C354U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 5) */\r
+  #define REG_UDPHS_DMACONTROL5                  (0xFC02C358U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 5) */\r
+  #define REG_UDPHS_DMASTATUS5                   (0xFC02C35CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 5) */\r
+  #define REG_UDPHS_DMANXTDSC6                   (0xFC02C360U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 6) */\r
+  #define REG_UDPHS_DMAADDRESS6                  (0xFC02C364U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 6) */\r
+  #define REG_UDPHS_DMACONTROL6                  (0xFC02C368U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 6) */\r
+  #define REG_UDPHS_DMASTATUS6                   (0xFC02C36CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 6) */\r
+#else\r
+  #define REG_UDPHS_CTRL        (*(__IO uint32_t*)0xFC02C000U) /**< \brief (UDPHS) UDPHS Control Register */\r
+  #define REG_UDPHS_FNUM        (*(__I  uint32_t*)0xFC02C004U) /**< \brief (UDPHS) UDPHS Frame Number Register */\r
+  #define REG_UDPHS_IEN         (*(__IO uint32_t*)0xFC02C010U) /**< \brief (UDPHS) UDPHS Interrupt Enable Register */\r
+  #define REG_UDPHS_INTSTA      (*(__I  uint32_t*)0xFC02C014U) /**< \brief (UDPHS) UDPHS Interrupt Status Register */\r
+  #define REG_UDPHS_CLRINT      (*(__O  uint32_t*)0xFC02C018U) /**< \brief (UDPHS) UDPHS Clear Interrupt Register */\r
+  #define REG_UDPHS_EPTRST      (*(__O  uint32_t*)0xFC02C01CU) /**< \brief (UDPHS) UDPHS Endpoints Reset Register */\r
+  #define REG_UDPHS_TST         (*(__IO uint32_t*)0xFC02C0E0U) /**< \brief (UDPHS) UDPHS Test Register */\r
+  #define REG_UDPHS_EPTCFG0     (*(__IO uint32_t*)0xFC02C100U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCTLENB0  (*(__O  uint32_t*)0xFC02C104U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCTLDIS0  (*(__O  uint32_t*)0xFC02C108U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCTL0     (*(__I  uint32_t*)0xFC02C10CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTSETSTA0  (*(__O  uint32_t*)0xFC02C114U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCLRSTA0  (*(__O  uint32_t*)0xFC02C118U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTSTA0     (*(__I  uint32_t*)0xFC02C11CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 0) */\r
+  #define REG_UDPHS_EPTCFG1     (*(__IO uint32_t*)0xFC02C120U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCTLENB1  (*(__O  uint32_t*)0xFC02C124U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCTLDIS1  (*(__O  uint32_t*)0xFC02C128U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCTL1     (*(__I  uint32_t*)0xFC02C12CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTSETSTA1  (*(__O  uint32_t*)0xFC02C134U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCLRSTA1  (*(__O  uint32_t*)0xFC02C138U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTSTA1     (*(__I  uint32_t*)0xFC02C13CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 1) */\r
+  #define REG_UDPHS_EPTCFG2     (*(__IO uint32_t*)0xFC02C140U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCTLENB2  (*(__O  uint32_t*)0xFC02C144U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCTLDIS2  (*(__O  uint32_t*)0xFC02C148U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCTL2     (*(__I  uint32_t*)0xFC02C14CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTSETSTA2  (*(__O  uint32_t*)0xFC02C154U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCLRSTA2  (*(__O  uint32_t*)0xFC02C158U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTSTA2     (*(__I  uint32_t*)0xFC02C15CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 2) */\r
+  #define REG_UDPHS_EPTCFG3     (*(__IO uint32_t*)0xFC02C160U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCTLENB3  (*(__O  uint32_t*)0xFC02C164U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCTLDIS3  (*(__O  uint32_t*)0xFC02C168U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCTL3     (*(__I  uint32_t*)0xFC02C16CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTSETSTA3  (*(__O  uint32_t*)0xFC02C174U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCLRSTA3  (*(__O  uint32_t*)0xFC02C178U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTSTA3     (*(__I  uint32_t*)0xFC02C17CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 3) */\r
+  #define REG_UDPHS_EPTCFG4     (*(__IO uint32_t*)0xFC02C180U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCTLENB4  (*(__O  uint32_t*)0xFC02C184U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCTLDIS4  (*(__O  uint32_t*)0xFC02C188U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCTL4     (*(__I  uint32_t*)0xFC02C18CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTSETSTA4  (*(__O  uint32_t*)0xFC02C194U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCLRSTA4  (*(__O  uint32_t*)0xFC02C198U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTSTA4     (*(__I  uint32_t*)0xFC02C19CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 4) */\r
+  #define REG_UDPHS_EPTCFG5     (*(__IO uint32_t*)0xFC02C1A0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCTLENB5  (*(__O  uint32_t*)0xFC02C1A4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCTLDIS5  (*(__O  uint32_t*)0xFC02C1A8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCTL5     (*(__I  uint32_t*)0xFC02C1ACU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTSETSTA5  (*(__O  uint32_t*)0xFC02C1B4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCLRSTA5  (*(__O  uint32_t*)0xFC02C1B8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTSTA5     (*(__I  uint32_t*)0xFC02C1BCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 5) */\r
+  #define REG_UDPHS_EPTCFG6     (*(__IO uint32_t*)0xFC02C1C0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCTLENB6  (*(__O  uint32_t*)0xFC02C1C4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCTLDIS6  (*(__O  uint32_t*)0xFC02C1C8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCTL6     (*(__I  uint32_t*)0xFC02C1CCU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTSETSTA6  (*(__O  uint32_t*)0xFC02C1D4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCLRSTA6  (*(__O  uint32_t*)0xFC02C1D8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTSTA6     (*(__I  uint32_t*)0xFC02C1DCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 6) */\r
+  #define REG_UDPHS_EPTCFG7     (*(__IO uint32_t*)0xFC02C1E0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCTLENB7  (*(__O  uint32_t*)0xFC02C1E4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCTLDIS7  (*(__O  uint32_t*)0xFC02C1E8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCTL7     (*(__I  uint32_t*)0xFC02C1ECU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTSETSTA7  (*(__O  uint32_t*)0xFC02C1F4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCLRSTA7  (*(__O  uint32_t*)0xFC02C1F8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTSTA7     (*(__I  uint32_t*)0xFC02C1FCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 7) */\r
+  #define REG_UDPHS_EPTCFG8     (*(__IO uint32_t*)0xFC02C200U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCTLENB8  (*(__O  uint32_t*)0xFC02C204U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCTLDIS8  (*(__O  uint32_t*)0xFC02C208U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCTL8     (*(__I  uint32_t*)0xFC02C20CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTSETSTA8  (*(__O  uint32_t*)0xFC02C214U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCLRSTA8  (*(__O  uint32_t*)0xFC02C218U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTSTA8     (*(__I  uint32_t*)0xFC02C21CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 8) */\r
+  #define REG_UDPHS_EPTCFG9     (*(__IO uint32_t*)0xFC02C220U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCTLENB9  (*(__O  uint32_t*)0xFC02C224U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCTLDIS9  (*(__O  uint32_t*)0xFC02C228U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCTL9     (*(__I  uint32_t*)0xFC02C22CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTSETSTA9  (*(__O  uint32_t*)0xFC02C234U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCLRSTA9  (*(__O  uint32_t*)0xFC02C238U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTSTA9     (*(__I  uint32_t*)0xFC02C23CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 9) */\r
+  #define REG_UDPHS_EPTCFG10    (*(__IO uint32_t*)0xFC02C240U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCTLENB10 (*(__O  uint32_t*)0xFC02C244U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCTLDIS10 (*(__O  uint32_t*)0xFC02C248U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCTL10    (*(__I  uint32_t*)0xFC02C24CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTSETSTA10 (*(__O  uint32_t*)0xFC02C254U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCLRSTA10 (*(__O  uint32_t*)0xFC02C258U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTSTA10    (*(__I  uint32_t*)0xFC02C25CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 10) */\r
+  #define REG_UDPHS_EPTCFG11    (*(__IO uint32_t*)0xFC02C260U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCTLENB11 (*(__O  uint32_t*)0xFC02C264U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCTLDIS11 (*(__O  uint32_t*)0xFC02C268U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCTL11    (*(__I  uint32_t*)0xFC02C26CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTSETSTA11 (*(__O  uint32_t*)0xFC02C274U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCLRSTA11 (*(__O  uint32_t*)0xFC02C278U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTSTA11    (*(__I  uint32_t*)0xFC02C27CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 11) */\r
+  #define REG_UDPHS_EPTCFG12    (*(__IO uint32_t*)0xFC02C280U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCTLENB12 (*(__O  uint32_t*)0xFC02C284U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCTLDIS12 (*(__O  uint32_t*)0xFC02C288U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCTL12    (*(__I  uint32_t*)0xFC02C28CU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTSETSTA12 (*(__O  uint32_t*)0xFC02C294U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCLRSTA12 (*(__O  uint32_t*)0xFC02C298U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTSTA12    (*(__I  uint32_t*)0xFC02C29CU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 12) */\r
+  #define REG_UDPHS_EPTCFG13    (*(__IO uint32_t*)0xFC02C2A0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCTLENB13 (*(__O  uint32_t*)0xFC02C2A4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCTLDIS13 (*(__O  uint32_t*)0xFC02C2A8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCTL13    (*(__I  uint32_t*)0xFC02C2ACU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTSETSTA13 (*(__O  uint32_t*)0xFC02C2B4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCLRSTA13 (*(__O  uint32_t*)0xFC02C2B8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTSTA13    (*(__I  uint32_t*)0xFC02C2BCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 13) */\r
+  #define REG_UDPHS_EPTCFG14    (*(__IO uint32_t*)0xFC02C2C0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCTLENB14 (*(__O  uint32_t*)0xFC02C2C4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCTLDIS14 (*(__O  uint32_t*)0xFC02C2C8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCTL14    (*(__I  uint32_t*)0xFC02C2CCU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTSETSTA14 (*(__O  uint32_t*)0xFC02C2D4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCLRSTA14 (*(__O  uint32_t*)0xFC02C2D8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTSTA14    (*(__I  uint32_t*)0xFC02C2DCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 14) */\r
+  #define REG_UDPHS_EPTCFG15    (*(__IO uint32_t*)0xFC02C2E0U) /**< \brief (UDPHS) UDPHS Endpoint Configuration Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCTLENB15 (*(__O  uint32_t*)0xFC02C2E4U) /**< \brief (UDPHS) UDPHS Endpoint Control Enable Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCTLDIS15 (*(__O  uint32_t*)0xFC02C2E8U) /**< \brief (UDPHS) UDPHS Endpoint Control Disable Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCTL15    (*(__I  uint32_t*)0xFC02C2ECU) /**< \brief (UDPHS) UDPHS Endpoint Control Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTSETSTA15 (*(__O  uint32_t*)0xFC02C2F4U) /**< \brief (UDPHS) UDPHS Endpoint Set Status Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTCLRSTA15 (*(__O  uint32_t*)0xFC02C2F8U) /**< \brief (UDPHS) UDPHS Endpoint Clear Status Register (endpoint = 15) */\r
+  #define REG_UDPHS_EPTSTA15    (*(__I  uint32_t*)0xFC02C2FCU) /**< \brief (UDPHS) UDPHS Endpoint Status Register (endpoint = 15) */\r
+  #define REG_UDPHS_DMANXTDSC0  (*(__IO uint32_t*)0xFC02C300U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 0) */\r
+  #define REG_UDPHS_DMAADDRESS0 (*(__IO uint32_t*)0xFC02C304U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 0) */\r
+  #define REG_UDPHS_DMACONTROL0 (*(__IO uint32_t*)0xFC02C308U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 0) */\r
+  #define REG_UDPHS_DMASTATUS0  (*(__IO uint32_t*)0xFC02C30CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 0) */\r
+  #define REG_UDPHS_DMANXTDSC1  (*(__IO uint32_t*)0xFC02C310U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 1) */\r
+  #define REG_UDPHS_DMAADDRESS1 (*(__IO uint32_t*)0xFC02C314U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 1) */\r
+  #define REG_UDPHS_DMACONTROL1 (*(__IO uint32_t*)0xFC02C318U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 1) */\r
+  #define REG_UDPHS_DMASTATUS1  (*(__IO uint32_t*)0xFC02C31CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 1) */\r
+  #define REG_UDPHS_DMANXTDSC2  (*(__IO uint32_t*)0xFC02C320U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 2) */\r
+  #define REG_UDPHS_DMAADDRESS2 (*(__IO uint32_t*)0xFC02C324U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 2) */\r
+  #define REG_UDPHS_DMACONTROL2 (*(__IO uint32_t*)0xFC02C328U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 2) */\r
+  #define REG_UDPHS_DMASTATUS2  (*(__IO uint32_t*)0xFC02C32CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 2) */\r
+  #define REG_UDPHS_DMANXTDSC3  (*(__IO uint32_t*)0xFC02C330U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 3) */\r
+  #define REG_UDPHS_DMAADDRESS3 (*(__IO uint32_t*)0xFC02C334U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 3) */\r
+  #define REG_UDPHS_DMACONTROL3 (*(__IO uint32_t*)0xFC02C338U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 3) */\r
+  #define REG_UDPHS_DMASTATUS3  (*(__IO uint32_t*)0xFC02C33CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 3) */\r
+  #define REG_UDPHS_DMANXTDSC4  (*(__IO uint32_t*)0xFC02C340U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 4) */\r
+  #define REG_UDPHS_DMAADDRESS4 (*(__IO uint32_t*)0xFC02C344U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 4) */\r
+  #define REG_UDPHS_DMACONTROL4 (*(__IO uint32_t*)0xFC02C348U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 4) */\r
+  #define REG_UDPHS_DMASTATUS4  (*(__IO uint32_t*)0xFC02C34CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 4) */\r
+  #define REG_UDPHS_DMANXTDSC5  (*(__IO uint32_t*)0xFC02C350U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 5) */\r
+  #define REG_UDPHS_DMAADDRESS5 (*(__IO uint32_t*)0xFC02C354U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 5) */\r
+  #define REG_UDPHS_DMACONTROL5 (*(__IO uint32_t*)0xFC02C358U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 5) */\r
+  #define REG_UDPHS_DMASTATUS5  (*(__IO uint32_t*)0xFC02C35CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 5) */\r
+  #define REG_UDPHS_DMANXTDSC6  (*(__IO uint32_t*)0xFC02C360U) /**< \brief (UDPHS) UDPHS DMA Next Descriptor Address Register (channel = 6) */\r
+  #define REG_UDPHS_DMAADDRESS6 (*(__IO uint32_t*)0xFC02C364U) /**< \brief (UDPHS) UDPHS DMA Channel Address Register (channel = 6) */\r
+  #define REG_UDPHS_DMACONTROL6 (*(__IO uint32_t*)0xFC02C368U) /**< \brief (UDPHS) UDPHS DMA Channel Control Register (channel = 6) */\r
+  #define REG_UDPHS_DMASTATUS6  (*(__IO uint32_t*)0xFC02C36CU) /**< \brief (UDPHS) UDPHS DMA Channel Status Register (channel = 6) */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TRNG peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TRNG_CR                    (0xFC030000U) /**< \brief (TRNG) Control Register */\r
+  #define REG_TRNG_IER                   (0xFC030010U) /**< \brief (TRNG) Interrupt Enable Register */\r
+  #define REG_TRNG_IDR                   (0xFC030014U) /**< \brief (TRNG) Interrupt Disable Register */\r
+  #define REG_TRNG_IMR                   (0xFC030018U) /**< \brief (TRNG) Interrupt Mask Register */\r
+  #define REG_TRNG_ISR                   (0xFC03001CU) /**< \brief (TRNG) Interrupt Status Register */\r
+  #define REG_TRNG_ODATA                 (0xFC030050U) /**< \brief (TRNG) Output Data Register */\r
+#else\r
+  #define REG_TRNG_CR    (*(__O uint32_t*)0xFC030000U) /**< \brief (TRNG) Control Register */\r
+  #define REG_TRNG_IER   (*(__O uint32_t*)0xFC030010U) /**< \brief (TRNG) Interrupt Enable Register */\r
+  #define REG_TRNG_IDR   (*(__O uint32_t*)0xFC030014U) /**< \brief (TRNG) Interrupt Disable Register */\r
+  #define REG_TRNG_IMR   (*(__I uint32_t*)0xFC030018U) /**< \brief (TRNG) Interrupt Mask Register */\r
+  #define REG_TRNG_ISR   (*(__I uint32_t*)0xFC03001CU) /**< \brief (TRNG) Interrupt Status Register */\r
+  #define REG_TRNG_ODATA (*(__I uint32_t*)0xFC030050U) /**< \brief (TRNG) Output Data Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for ADC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_ADC_CR                      (0xFC034000U) /**< \brief (ADC) Control Register */\r
+  #define REG_ADC_MR                      (0xFC034004U) /**< \brief (ADC) Mode Register */\r
+  #define REG_ADC_SEQR1                   (0xFC034008U) /**< \brief (ADC) Channel Sequence Register 1 */\r
+  #define REG_ADC_SEQR2                   (0xFC03400CU) /**< \brief (ADC) Channel Sequence Register 2 */\r
+  #define REG_ADC_CHER                    (0xFC034010U) /**< \brief (ADC) Channel Enable Register */\r
+  #define REG_ADC_CHDR                    (0xFC034014U) /**< \brief (ADC) Channel Disable Register */\r
+  #define REG_ADC_CHSR                    (0xFC034018U) /**< \brief (ADC) Channel Status Register */\r
+  #define REG_ADC_LCDR                    (0xFC034020U) /**< \brief (ADC) Last Converted Data Register */\r
+  #define REG_ADC_IER                     (0xFC034024U) /**< \brief (ADC) Interrupt Enable Register */\r
+  #define REG_ADC_IDR                     (0xFC034028U) /**< \brief (ADC) Interrupt Disable Register */\r
+  #define REG_ADC_IMR                     (0xFC03402CU) /**< \brief (ADC) Interrupt Mask Register */\r
+  #define REG_ADC_ISR                     (0xFC034030U) /**< \brief (ADC) Interrupt Status Register */\r
+  #define REG_ADC_OVER                    (0xFC03403CU) /**< \brief (ADC) Overrun Status Register */\r
+  #define REG_ADC_EMR                     (0xFC034040U) /**< \brief (ADC) Extended Mode Register */\r
+  #define REG_ADC_CWR                     (0xFC034044U) /**< \brief (ADC) Compare Window Register */\r
+  #define REG_ADC_CDR                     (0xFC034050U) /**< \brief (ADC) Channel Data Register */\r
+  #define REG_ADC_ACR                     (0xFC034094U) /**< \brief (ADC) Analog Control Register */\r
+  #define REG_ADC_TSMR                    (0xFC0340B0U) /**< \brief (ADC) Touchscreen Mode Register */\r
+  #define REG_ADC_XPOSR                   (0xFC0340B4U) /**< \brief (ADC) Touchscreen X Position Register */\r
+  #define REG_ADC_YPOSR                   (0xFC0340B8U) /**< \brief (ADC) Touchscreen Y Position Register */\r
+  #define REG_ADC_PRESSR                  (0xFC0340BCU) /**< \brief (ADC) Touchscreen Pressure Register */\r
+  #define REG_ADC_TRGR                    (0xFC0340C0U) /**< \brief (ADC) Trigger Register */\r
+  #define REG_ADC_WPMR                    (0xFC0340E4U) /**< \brief (ADC) Write Protect Mode Register */\r
+  #define REG_ADC_WPSR                    (0xFC0340E8U) /**< \brief (ADC) Write Protect Status Register */\r
+#else\r
+  #define REG_ADC_CR     (*(__O  uint32_t*)0xFC034000U) /**< \brief (ADC) Control Register */\r
+  #define REG_ADC_MR     (*(__IO uint32_t*)0xFC034004U) /**< \brief (ADC) Mode Register */\r
+  #define REG_ADC_SEQR1  (*(__IO uint32_t*)0xFC034008U) /**< \brief (ADC) Channel Sequence Register 1 */\r
+  #define REG_ADC_SEQR2  (*(__IO uint32_t*)0xFC03400CU) /**< \brief (ADC) Channel Sequence Register 2 */\r
+  #define REG_ADC_CHER   (*(__O  uint32_t*)0xFC034010U) /**< \brief (ADC) Channel Enable Register */\r
+  #define REG_ADC_CHDR   (*(__O  uint32_t*)0xFC034014U) /**< \brief (ADC) Channel Disable Register */\r
+  #define REG_ADC_CHSR   (*(__I  uint32_t*)0xFC034018U) /**< \brief (ADC) Channel Status Register */\r
+  #define REG_ADC_LCDR   (*(__I  uint32_t*)0xFC034020U) /**< \brief (ADC) Last Converted Data Register */\r
+  #define REG_ADC_IER    (*(__O  uint32_t*)0xFC034024U) /**< \brief (ADC) Interrupt Enable Register */\r
+  #define REG_ADC_IDR    (*(__O  uint32_t*)0xFC034028U) /**< \brief (ADC) Interrupt Disable Register */\r
+  #define REG_ADC_IMR    (*(__I  uint32_t*)0xFC03402CU) /**< \brief (ADC) Interrupt Mask Register */\r
+  #define REG_ADC_ISR    (*(__I  uint32_t*)0xFC034030U) /**< \brief (ADC) Interrupt Status Register */\r
+  #define REG_ADC_OVER   (*(__I  uint32_t*)0xFC03403CU) /**< \brief (ADC) Overrun Status Register */\r
+  #define REG_ADC_EMR    (*(__IO uint32_t*)0xFC034040U) /**< \brief (ADC) Extended Mode Register */\r
+  #define REG_ADC_CWR    (*(__IO uint32_t*)0xFC034044U) /**< \brief (ADC) Compare Window Register */\r
+  #define REG_ADC_CDR    (*(__I  uint32_t*)0xFC034050U) /**< \brief (ADC) Channel Data Register */\r
+  #define REG_ADC_ACR    (*(__IO uint32_t*)0xFC034094U) /**< \brief (ADC) Analog Control Register */\r
+  #define REG_ADC_TSMR   (*(__IO uint32_t*)0xFC0340B0U) /**< \brief (ADC) Touchscreen Mode Register */\r
+  #define REG_ADC_XPOSR  (*(__I  uint32_t*)0xFC0340B4U) /**< \brief (ADC) Touchscreen X Position Register */\r
+  #define REG_ADC_YPOSR  (*(__I  uint32_t*)0xFC0340B8U) /**< \brief (ADC) Touchscreen Y Position Register */\r
+  #define REG_ADC_PRESSR (*(__I  uint32_t*)0xFC0340BCU) /**< \brief (ADC) Touchscreen Pressure Register */\r
+  #define REG_ADC_TRGR   (*(__IO uint32_t*)0xFC0340C0U) /**< \brief (ADC) Trigger Register */\r
+  #define REG_ADC_WPMR   (*(__IO uint32_t*)0xFC0340E4U) /**< \brief (ADC) Write Protect Mode Register */\r
+  #define REG_ADC_WPSR   (*(__I  uint32_t*)0xFC0340E8U) /**< \brief (ADC) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TWI3 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TWI3_CR                    (0xFC038000U) /**< \brief (TWI3) Control Register */\r
+  #define REG_TWI3_MMR                   (0xFC038004U) /**< \brief (TWI3) Master Mode Register */\r
+  #define REG_TWI3_SMR                   (0xFC038008U) /**< \brief (TWI3) Slave Mode Register */\r
+  #define REG_TWI3_IADR                  (0xFC03800CU) /**< \brief (TWI3) Internal Address Register */\r
+  #define REG_TWI3_CWGR                  (0xFC038010U) /**< \brief (TWI3) Clock Waveform Generator Register */\r
+  #define REG_TWI3_SR                    (0xFC038020U) /**< \brief (TWI3) Status Register */\r
+  #define REG_TWI3_IER                   (0xFC038024U) /**< \brief (TWI3) Interrupt Enable Register */\r
+  #define REG_TWI3_IDR                   (0xFC038028U) /**< \brief (TWI3) Interrupt Disable Register */\r
+  #define REG_TWI3_IMR                   (0xFC03802CU) /**< \brief (TWI3) Interrupt Mask Register */\r
+  #define REG_TWI3_RHR                   (0xFC038030U) /**< \brief (TWI3) Receive Holding Register */\r
+  #define REG_TWI3_THR                   (0xFC038034U) /**< \brief (TWI3) Transmit Holding Register */\r
+  #define REG_TWI3_WPMR                  (0xFC0380E4U) /**< \brief (TWI3) Protection Mode Register */\r
+  #define REG_TWI3_WPSR                  (0xFC0380E8U) /**< \brief (TWI3) Protection Status Register */\r
+#else\r
+  #define REG_TWI3_CR   (*(__O  uint32_t*)0xFC038000U) /**< \brief (TWI3) Control Register */\r
+  #define REG_TWI3_MMR  (*(__IO uint32_t*)0xFC038004U) /**< \brief (TWI3) Master Mode Register */\r
+  #define REG_TWI3_SMR  (*(__IO uint32_t*)0xFC038008U) /**< \brief (TWI3) Slave Mode Register */\r
+  #define REG_TWI3_IADR (*(__IO uint32_t*)0xFC03800CU) /**< \brief (TWI3) Internal Address Register */\r
+  #define REG_TWI3_CWGR (*(__IO uint32_t*)0xFC038010U) /**< \brief (TWI3) Clock Waveform Generator Register */\r
+  #define REG_TWI3_SR   (*(__I  uint32_t*)0xFC038020U) /**< \brief (TWI3) Status Register */\r
+  #define REG_TWI3_IER  (*(__O  uint32_t*)0xFC038024U) /**< \brief (TWI3) Interrupt Enable Register */\r
+  #define REG_TWI3_IDR  (*(__O  uint32_t*)0xFC038028U) /**< \brief (TWI3) Interrupt Disable Register */\r
+  #define REG_TWI3_IMR  (*(__I  uint32_t*)0xFC03802CU) /**< \brief (TWI3) Interrupt Mask Register */\r
+  #define REG_TWI3_RHR  (*(__I  uint32_t*)0xFC038030U) /**< \brief (TWI3) Receive Holding Register */\r
+  #define REG_TWI3_THR  (*(__O  uint32_t*)0xFC038034U) /**< \brief (TWI3) Transmit Holding Register */\r
+  #define REG_TWI3_WPMR (*(__IO uint32_t*)0xFC0380E4U) /**< \brief (TWI3) Protection Mode Register */\r
+  #define REG_TWI3_WPSR (*(__I  uint32_t*)0xFC0380E8U) /**< \brief (TWI3) Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for ICM peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_ICM_CFG                     (0xFC040000U) /**< \brief (ICM) Configuration Register */\r
+  #define REG_ICM_CTRL                    (0xFC040004U) /**< \brief (ICM) Control Register */\r
+  #define REG_ICM_SR                      (0xFC040008U) /**< \brief (ICM) Status Register */\r
+  #define REG_ICM_IER                     (0xFC040010U) /**< \brief (ICM) Interrupt Enable Register */\r
+  #define REG_ICM_IDR                     (0xFC040014U) /**< \brief (ICM) Interrupt Disable Register */\r
+  #define REG_ICM_IMR                     (0xFC040018U) /**< \brief (ICM) Interrupt Mask Register */\r
+  #define REG_ICM_ISR                     (0xFC04001CU) /**< \brief (ICM) Interrupt Status Register */\r
+  #define REG_ICM_UASR                    (0xFC040020U) /**< \brief (ICM) Undefined Access Status Register */\r
+  #define REG_ICM_DSCR                    (0xFC040030U) /**< \brief (ICM) Region Descriptor Area Start Address Register */\r
+  #define REG_ICM_HASH                    (0xFC040034U) /**< \brief (ICM) Region Hash Area Start Address Register */\r
+  #define REG_ICM_UIHVAL                  (0xFC040038U) /**< \brief (ICM) User Initial Hash Value 0 Register */\r
+#else\r
+  #define REG_ICM_CFG    (*(__IO uint32_t*)0xFC040000U) /**< \brief (ICM) Configuration Register */\r
+  #define REG_ICM_CTRL   (*(__O  uint32_t*)0xFC040004U) /**< \brief (ICM) Control Register */\r
+  #define REG_ICM_SR     (*(__O  uint32_t*)0xFC040008U) /**< \brief (ICM) Status Register */\r
+  #define REG_ICM_IER    (*(__O  uint32_t*)0xFC040010U) /**< \brief (ICM) Interrupt Enable Register */\r
+  #define REG_ICM_IDR    (*(__O  uint32_t*)0xFC040014U) /**< \brief (ICM) Interrupt Disable Register */\r
+  #define REG_ICM_IMR    (*(__I  uint32_t*)0xFC040018U) /**< \brief (ICM) Interrupt Mask Register */\r
+  #define REG_ICM_ISR    (*(__I  uint32_t*)0xFC04001CU) /**< \brief (ICM) Interrupt Status Register */\r
+  #define REG_ICM_UASR   (*(__I  uint32_t*)0xFC040020U) /**< \brief (ICM) Undefined Access Status Register */\r
+  #define REG_ICM_DSCR   (*(__IO uint32_t*)0xFC040030U) /**< \brief (ICM) Region Descriptor Area Start Address Register */\r
+  #define REG_ICM_HASH   (*(__IO uint32_t*)0xFC040034U) /**< \brief (ICM) Region Hash Area Start Address Register */\r
+  #define REG_ICM_UIHVAL (*(__O  uint32_t*)0xFC040038U) /**< \brief (ICM) User Initial Hash Value 0 Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for AES peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_AES_CR                       (0xFC044000U) /**< \brief (AES) Control Register */\r
+  #define REG_AES_MR                       (0xFC044004U) /**< \brief (AES) Mode Register */\r
+  #define REG_AES_IER                      (0xFC044010U) /**< \brief (AES) Interrupt Enable Register */\r
+  #define REG_AES_IDR                      (0xFC044014U) /**< \brief (AES) Interrupt Disable Register */\r
+  #define REG_AES_IMR                      (0xFC044018U) /**< \brief (AES) Interrupt Mask Register */\r
+  #define REG_AES_ISR                      (0xFC04401CU) /**< \brief (AES) Interrupt Status Register */\r
+  #define REG_AES_KEYWR                    (0xFC044020U) /**< \brief (AES) Key Word Register */\r
+  #define REG_AES_IDATAR                   (0xFC044040U) /**< \brief (AES) Input Data Register */\r
+  #define REG_AES_ODATAR                   (0xFC044050U) /**< \brief (AES) Output Data Register */\r
+  #define REG_AES_IVR                      (0xFC044060U) /**< \brief (AES) Initialization Vector Register */\r
+  #define REG_AES_AADLENR                  (0xFC044070U) /**< \brief (AES) Additional Authenticated Data Length Register */\r
+  #define REG_AES_CLENR                    (0xFC044074U) /**< \brief (AES) Plaintext/Ciphertext Length Register */\r
+  #define REG_AES_GHASHR                   (0xFC044078U) /**< \brief (AES) GCM Intermediate Hash Word Register */\r
+  #define REG_AES_TAGR                     (0xFC044088U) /**< \brief (AES) GCM Authentication Tag Word Register */\r
+  #define REG_AES_CTRR                     (0xFC044098U) /**< \brief (AES) GCM Encryption Counter Value Register */\r
+  #define REG_AES_GCMHR                    (0xFC04409CU) /**< \brief (AES) GCM H World Register */\r
+#else\r
+  #define REG_AES_CR      (*(__O  uint32_t*)0xFC044000U) /**< \brief (AES) Control Register */\r
+  #define REG_AES_MR      (*(__IO uint32_t*)0xFC044004U) /**< \brief (AES) Mode Register */\r
+  #define REG_AES_IER     (*(__O  uint32_t*)0xFC044010U) /**< \brief (AES) Interrupt Enable Register */\r
+  #define REG_AES_IDR     (*(__O  uint32_t*)0xFC044014U) /**< \brief (AES) Interrupt Disable Register */\r
+  #define REG_AES_IMR     (*(__I  uint32_t*)0xFC044018U) /**< \brief (AES) Interrupt Mask Register */\r
+  #define REG_AES_ISR     (*(__I  uint32_t*)0xFC04401CU) /**< \brief (AES) Interrupt Status Register */\r
+  #define REG_AES_KEYWR   (*(__O  uint32_t*)0xFC044020U) /**< \brief (AES) Key Word Register */\r
+  #define REG_AES_IDATAR  (*(__O  uint32_t*)0xFC044040U) /**< \brief (AES) Input Data Register */\r
+  #define REG_AES_ODATAR  (*(__I  uint32_t*)0xFC044050U) /**< \brief (AES) Output Data Register */\r
+  #define REG_AES_IVR     (*(__O  uint32_t*)0xFC044060U) /**< \brief (AES) Initialization Vector Register */\r
+  #define REG_AES_AADLENR (*(__IO uint32_t*)0xFC044070U) /**< \brief (AES) Additional Authenticated Data Length Register */\r
+  #define REG_AES_CLENR   (*(__IO uint32_t*)0xFC044074U) /**< \brief (AES) Plaintext/Ciphertext Length Register */\r
+  #define REG_AES_GHASHR  (*(__IO uint32_t*)0xFC044078U) /**< \brief (AES) GCM Intermediate Hash Word Register */\r
+  #define REG_AES_TAGR    (*(__I  uint32_t*)0xFC044088U) /**< \brief (AES) GCM Authentication Tag Word Register */\r
+  #define REG_AES_CTRR    (*(__I  uint32_t*)0xFC044098U) /**< \brief (AES) GCM Encryption Counter Value Register */\r
+  #define REG_AES_GCMHR   (*(__IO uint32_t*)0xFC04409CU) /**< \brief (AES) GCM H World Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for TDES peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_TDES_CR                         (0xFC04C000U) /**< \brief (TDES) Control Register */\r
+  #define REG_TDES_MR                         (0xFC04C004U) /**< \brief (TDES) Mode Register */\r
+  #define REG_TDES_IER                        (0xFC04C010U) /**< \brief (TDES) Interrupt Enable Register */\r
+  #define REG_TDES_IDR                        (0xFC04C014U) /**< \brief (TDES) Interrupt Disable Register */\r
+  #define REG_TDES_IMR                        (0xFC04C018U) /**< \brief (TDES) Interrupt Mask Register */\r
+  #define REG_TDES_ISR                        (0xFC04C01CU) /**< \brief (TDES) Interrupt Status Register */\r
+  #define REG_TDES_KEY1WR                     (0xFC04C020U) /**< \brief (TDES) Key 1 Word Register */\r
+  #define REG_TDES_KEY2WR                     (0xFC04C028U) /**< \brief (TDES) Key 2 Word Register */\r
+  #define REG_TDES_KEY3WR                     (0xFC04C030U) /**< \brief (TDES) Key 3 Word Register */\r
+  #define REG_TDES_IDATAR                     (0xFC04C040U) /**< \brief (TDES) Input Data Register */\r
+  #define REG_TDES_ODATAR                     (0xFC04C050U) /**< \brief (TDES) Output Data Register */\r
+  #define REG_TDES_IVR                        (0xFC04C060U) /**< \brief (TDES) Initialization Vector Register */\r
+  #define REG_TDES_XTEA_RNDR                  (0xFC04C070U) /**< \brief (TDES) XTEA Rounds Register */\r
+#else\r
+  #define REG_TDES_CR        (*(__O  uint32_t*)0xFC04C000U) /**< \brief (TDES) Control Register */\r
+  #define REG_TDES_MR        (*(__IO uint32_t*)0xFC04C004U) /**< \brief (TDES) Mode Register */\r
+  #define REG_TDES_IER       (*(__O  uint32_t*)0xFC04C010U) /**< \brief (TDES) Interrupt Enable Register */\r
+  #define REG_TDES_IDR       (*(__O  uint32_t*)0xFC04C014U) /**< \brief (TDES) Interrupt Disable Register */\r
+  #define REG_TDES_IMR       (*(__I  uint32_t*)0xFC04C018U) /**< \brief (TDES) Interrupt Mask Register */\r
+  #define REG_TDES_ISR       (*(__I  uint32_t*)0xFC04C01CU) /**< \brief (TDES) Interrupt Status Register */\r
+  #define REG_TDES_KEY1WR    (*(__O  uint32_t*)0xFC04C020U) /**< \brief (TDES) Key 1 Word Register */\r
+  #define REG_TDES_KEY2WR    (*(__O  uint32_t*)0xFC04C028U) /**< \brief (TDES) Key 2 Word Register */\r
+  #define REG_TDES_KEY3WR    (*(__O  uint32_t*)0xFC04C030U) /**< \brief (TDES) Key 3 Word Register */\r
+  #define REG_TDES_IDATAR    (*(__O  uint32_t*)0xFC04C040U) /**< \brief (TDES) Input Data Register */\r
+  #define REG_TDES_ODATAR    (*(__I  uint32_t*)0xFC04C050U) /**< \brief (TDES) Output Data Register */\r
+  #define REG_TDES_IVR       (*(__O  uint32_t*)0xFC04C060U) /**< \brief (TDES) Initialization Vector Register */\r
+  #define REG_TDES_XTEA_RNDR (*(__IO uint32_t*)0xFC04C070U) /**< \brief (TDES) XTEA Rounds Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SHA peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SHA_CR                       (0xFC050000U) /**< \brief (SHA) Control Register */\r
+  #define REG_SHA_MR                       (0xFC050004U) /**< \brief (SHA) Mode Register */\r
+  #define REG_SHA_IER                      (0xFC050010U) /**< \brief (SHA) Interrupt Enable Register */\r
+  #define REG_SHA_IDR                      (0xFC050014U) /**< \brief (SHA) Interrupt Disable Register */\r
+  #define REG_SHA_IMR                      (0xFC050018U) /**< \brief (SHA) Interrupt Mask Register */\r
+  #define REG_SHA_ISR                      (0xFC05001CU) /**< \brief (SHA) Interrupt Status Register */\r
+  #define REG_SHA_IDATAR                   (0xFC050040U) /**< \brief (SHA) Input Data 0 Register */\r
+  #define REG_SHA_IODATAR                  (0xFC050080U) /**< \brief (SHA) Input/Output Data 0 Register */\r
+#else\r
+  #define REG_SHA_CR      (*(__O  uint32_t*)0xFC050000U) /**< \brief (SHA) Control Register */\r
+  #define REG_SHA_MR      (*(__IO uint32_t*)0xFC050004U) /**< \brief (SHA) Mode Register */\r
+  #define REG_SHA_IER     (*(__O  uint32_t*)0xFC050010U) /**< \brief (SHA) Interrupt Enable Register */\r
+  #define REG_SHA_IDR     (*(__O  uint32_t*)0xFC050014U) /**< \brief (SHA) Interrupt Disable Register */\r
+  #define REG_SHA_IMR     (*(__I  uint32_t*)0xFC050018U) /**< \brief (SHA) Interrupt Mask Register */\r
+  #define REG_SHA_ISR     (*(__I  uint32_t*)0xFC05001CU) /**< \brief (SHA) Interrupt Status Register */\r
+  #define REG_SHA_IDATAR  (*(__O  uint32_t*)0xFC050040U) /**< \brief (SHA) Input Data 0 Register */\r
+  #define REG_SHA_IODATAR (*(__IO uint32_t*)0xFC050080U) /**< \brief (SHA) Input/Output Data 0 Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for MATRIX1 peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_MATRIX1_MCFG                    (0xFC054000U) /**< \brief (MATRIX1) Master Configuration Register */\r
+  #define REG_MATRIX1_SCFG                    (0xFC054040U) /**< \brief (MATRIX1) Slave Configuration Register */\r
+  #define REG_MATRIX1_PRAS0                   (0xFC054080U) /**< \brief (MATRIX1) Priority Register A for Slave 0 */\r
+  #define REG_MATRIX1_PRBS0                   (0xFC054084U) /**< \brief (MATRIX1) Priority Register B for Slave 0 */\r
+  #define REG_MATRIX1_PRAS1                   (0xFC054088U) /**< \brief (MATRIX1) Priority Register A for Slave 1 */\r
+  #define REG_MATRIX1_PRBS1                   (0xFC05408CU) /**< \brief (MATRIX1) Priority Register B for Slave 1 */\r
+  #define REG_MATRIX1_PRAS2                   (0xFC054090U) /**< \brief (MATRIX1) Priority Register A for Slave 2 */\r
+  #define REG_MATRIX1_PRBS2                   (0xFC054094U) /**< \brief (MATRIX1) Priority Register B for Slave 2 */\r
+  #define REG_MATRIX1_PRAS3                   (0xFC054098U) /**< \brief (MATRIX1) Priority Register A for Slave 3 */\r
+  #define REG_MATRIX1_PRBS3                   (0xFC05409CU) /**< \brief (MATRIX1) Priority Register B for Slave 3 */\r
+  #define REG_MATRIX1_PRAS4                   (0xFC0540A0U) /**< \brief (MATRIX1) Priority Register A for Slave 4 */\r
+  #define REG_MATRIX1_PRBS4                   (0xFC0540A4U) /**< \brief (MATRIX1) Priority Register B for Slave 4 */\r
+  #define REG_MATRIX1_PRAS5                   (0xFC0540A8U) /**< \brief (MATRIX1) Priority Register A for Slave 5 */\r
+  #define REG_MATRIX1_PRBS5                   (0xFC0540ACU) /**< \brief (MATRIX1) Priority Register B for Slave 5 */\r
+  #define REG_MATRIX1_PRAS6                   (0xFC0540B0U) /**< \brief (MATRIX1) Priority Register A for Slave 6 */\r
+  #define REG_MATRIX1_PRBS6                   (0xFC0540B4U) /**< \brief (MATRIX1) Priority Register B for Slave 6 */\r
+  #define REG_MATRIX1_PRAS7                   (0xFC0540B8U) /**< \brief (MATRIX1) Priority Register A for Slave 7 */\r
+  #define REG_MATRIX1_PRBS7                   (0xFC0540BCU) /**< \brief (MATRIX1) Priority Register B for Slave 7 */\r
+  #define REG_MATRIX1_PRAS8                   (0xFC0540C0U) /**< \brief (MATRIX1) Priority Register A for Slave 8 */\r
+  #define REG_MATRIX1_PRBS8                   (0xFC0540C4U) /**< \brief (MATRIX1) Priority Register B for Slave 8 */\r
+  #define REG_MATRIX1_PRAS9                   (0xFC0540C8U) /**< \brief (MATRIX1) Priority Register A for Slave 9 */\r
+  #define REG_MATRIX1_PRBS9                   (0xFC0540CCU) /**< \brief (MATRIX1) Priority Register B for Slave 9 */\r
+  #define REG_MATRIX1_PRAS10                  (0xFC0540D0U) /**< \brief (MATRIX1) Priority Register A for Slave 10 */\r
+  #define REG_MATRIX1_PRBS10                  (0xFC0540D4U) /**< \brief (MATRIX1) Priority Register B for Slave 10 */\r
+  #define REG_MATRIX1_PRAS11                  (0xFC0540D8U) /**< \brief (MATRIX1) Priority Register A for Slave 11 */\r
+  #define REG_MATRIX1_PRBS11                  (0xFC0540DCU) /**< \brief (MATRIX1) Priority Register B for Slave 11 */\r
+  #define REG_MATRIX1_PRAS12                  (0xFC0540E0U) /**< \brief (MATRIX1) Priority Register A for Slave 12 */\r
+  #define REG_MATRIX1_PRBS12                  (0xFC0540E4U) /**< \brief (MATRIX1) Priority Register B for Slave 12 */\r
+  #define REG_MATRIX1_MEIER                   (0xFC054150U) /**< \brief (MATRIX1) Master Error Interrupt Enable Register */\r
+  #define REG_MATRIX1_MEIDR                   (0xFC054154U) /**< \brief (MATRIX1) Master Error Interrupt Disable Register */\r
+  #define REG_MATRIX1_MEIMR                   (0xFC054158U) /**< \brief (MATRIX1) Master Error Interrupt Mask Register */\r
+  #define REG_MATRIX1_MESR                    (0xFC05415CU) /**< \brief (MATRIX1) Master Error Status Register */\r
+  #define REG_MATRIX1_MEAR                    (0xFC054160U) /**< \brief (MATRIX1) Master 0 Error Address Register */\r
+  #define REG_MATRIX1_WPMR                    (0xFC0541E4U) /**< \brief (MATRIX1) Write Protect Mode Register */\r
+  #define REG_MATRIX1_WPSR                    (0xFC0541E8U) /**< \brief (MATRIX1) Write Protect Status Register */\r
+  #define REG_MATRIX1_SSR                     (0xFC054200U) /**< \brief (MATRIX1) Security Slave 0 Register */\r
+  #define REG_MATRIX1_SASSR                   (0xFC054240U) /**< \brief (MATRIX1) Security Areas Split Slave 0 Register */\r
+  #define REG_MATRIX1_SRTSR                   (0xFC054280U) /**< \brief (MATRIX1) Security Region Top Slave 0 Register */\r
+  #define REG_MATRIX1_SPSELR                  (0xFC0542C0U) /**< \brief (MATRIX1) Security Peripheral Select 1 Register */\r
+#else\r
+  #define REG_MATRIX1_MCFG   (*(__IO uint32_t*)0xFC054000U) /**< \brief (MATRIX1) Master Configuration Register */\r
+  #define REG_MATRIX1_SCFG   (*(__IO uint32_t*)0xFC054040U) /**< \brief (MATRIX1) Slave Configuration Register */\r
+  #define REG_MATRIX1_PRAS0  (*(__IO uint32_t*)0xFC054080U) /**< \brief (MATRIX1) Priority Register A for Slave 0 */\r
+  #define REG_MATRIX1_PRBS0  (*(__IO uint32_t*)0xFC054084U) /**< \brief (MATRIX1) Priority Register B for Slave 0 */\r
+  #define REG_MATRIX1_PRAS1  (*(__IO uint32_t*)0xFC054088U) /**< \brief (MATRIX1) Priority Register A for Slave 1 */\r
+  #define REG_MATRIX1_PRBS1  (*(__IO uint32_t*)0xFC05408CU) /**< \brief (MATRIX1) Priority Register B for Slave 1 */\r
+  #define REG_MATRIX1_PRAS2  (*(__IO uint32_t*)0xFC054090U) /**< \brief (MATRIX1) Priority Register A for Slave 2 */\r
+  #define REG_MATRIX1_PRBS2  (*(__IO uint32_t*)0xFC054094U) /**< \brief (MATRIX1) Priority Register B for Slave 2 */\r
+  #define REG_MATRIX1_PRAS3  (*(__IO uint32_t*)0xFC054098U) /**< \brief (MATRIX1) Priority Register A for Slave 3 */\r
+  #define REG_MATRIX1_PRBS3  (*(__IO uint32_t*)0xFC05409CU) /**< \brief (MATRIX1) Priority Register B for Slave 3 */\r
+  #define REG_MATRIX1_PRAS4  (*(__IO uint32_t*)0xFC0540A0U) /**< \brief (MATRIX1) Priority Register A for Slave 4 */\r
+  #define REG_MATRIX1_PRBS4  (*(__IO uint32_t*)0xFC0540A4U) /**< \brief (MATRIX1) Priority Register B for Slave 4 */\r
+  #define REG_MATRIX1_PRAS5  (*(__IO uint32_t*)0xFC0540A8U) /**< \brief (MATRIX1) Priority Register A for Slave 5 */\r
+  #define REG_MATRIX1_PRBS5  (*(__IO uint32_t*)0xFC0540ACU) /**< \brief (MATRIX1) Priority Register B for Slave 5 */\r
+  #define REG_MATRIX1_PRAS6  (*(__IO uint32_t*)0xFC0540B0U) /**< \brief (MATRIX1) Priority Register A for Slave 6 */\r
+  #define REG_MATRIX1_PRBS6  (*(__IO uint32_t*)0xFC0540B4U) /**< \brief (MATRIX1) Priority Register B for Slave 6 */\r
+  #define REG_MATRIX1_PRAS7  (*(__IO uint32_t*)0xFC0540B8U) /**< \brief (MATRIX1) Priority Register A for Slave 7 */\r
+  #define REG_MATRIX1_PRBS7  (*(__IO uint32_t*)0xFC0540BCU) /**< \brief (MATRIX1) Priority Register B for Slave 7 */\r
+  #define REG_MATRIX1_PRAS8  (*(__IO uint32_t*)0xFC0540C0U) /**< \brief (MATRIX1) Priority Register A for Slave 8 */\r
+  #define REG_MATRIX1_PRBS8  (*(__IO uint32_t*)0xFC0540C4U) /**< \brief (MATRIX1) Priority Register B for Slave 8 */\r
+  #define REG_MATRIX1_PRAS9  (*(__IO uint32_t*)0xFC0540C8U) /**< \brief (MATRIX1) Priority Register A for Slave 9 */\r
+  #define REG_MATRIX1_PRBS9  (*(__IO uint32_t*)0xFC0540CCU) /**< \brief (MATRIX1) Priority Register B for Slave 9 */\r
+  #define REG_MATRIX1_PRAS10 (*(__IO uint32_t*)0xFC0540D0U) /**< \brief (MATRIX1) Priority Register A for Slave 10 */\r
+  #define REG_MATRIX1_PRBS10 (*(__IO uint32_t*)0xFC0540D4U) /**< \brief (MATRIX1) Priority Register B for Slave 10 */\r
+  #define REG_MATRIX1_PRAS11 (*(__IO uint32_t*)0xFC0540D8U) /**< \brief (MATRIX1) Priority Register A for Slave 11 */\r
+  #define REG_MATRIX1_PRBS11 (*(__IO uint32_t*)0xFC0540DCU) /**< \brief (MATRIX1) Priority Register B for Slave 11 */\r
+  #define REG_MATRIX1_PRAS12 (*(__IO uint32_t*)0xFC0540E0U) /**< \brief (MATRIX1) Priority Register A for Slave 12 */\r
+  #define REG_MATRIX1_PRBS12 (*(__IO uint32_t*)0xFC0540E4U) /**< \brief (MATRIX1) Priority Register B for Slave 12 */\r
+  #define REG_MATRIX1_MEIER  (*(__O  uint32_t*)0xFC054150U) /**< \brief (MATRIX1) Master Error Interrupt Enable Register */\r
+  #define REG_MATRIX1_MEIDR  (*(__O  uint32_t*)0xFC054154U) /**< \brief (MATRIX1) Master Error Interrupt Disable Register */\r
+  #define REG_MATRIX1_MEIMR  (*(__I  uint32_t*)0xFC054158U) /**< \brief (MATRIX1) Master Error Interrupt Mask Register */\r
+  #define REG_MATRIX1_MESR   (*(__I  uint32_t*)0xFC05415CU) /**< \brief (MATRIX1) Master Error Status Register */\r
+  #define REG_MATRIX1_MEAR   (*(__I  uint32_t*)0xFC054160U) /**< \brief (MATRIX1) Master 0 Error Address Register */\r
+  #define REG_MATRIX1_WPMR   (*(__IO uint32_t*)0xFC0541E4U) /**< \brief (MATRIX1) Write Protect Mode Register */\r
+  #define REG_MATRIX1_WPSR   (*(__I  uint32_t*)0xFC0541E8U) /**< \brief (MATRIX1) Write Protect Status Register */\r
+  #define REG_MATRIX1_SSR    (*(__IO uint32_t*)0xFC054200U) /**< \brief (MATRIX1) Security Slave 0 Register */\r
+  #define REG_MATRIX1_SASSR  (*(__IO uint32_t*)0xFC054240U) /**< \brief (MATRIX1) Security Areas Split Slave 0 Register */\r
+  #define REG_MATRIX1_SRTSR  (*(__IO uint32_t*)0xFC054280U) /**< \brief (MATRIX1) Security Region Top Slave 0 Register */\r
+  #define REG_MATRIX1_SPSELR (*(__IO uint32_t*)0xFC0542C0U) /**< \brief (MATRIX1) Security Peripheral Select 1 Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for HSMC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_HSMC_CFG                         (0xFC05C000U) /**< \brief (HSMC) HSMC NFC Configuration Register */\r
+  #define REG_HSMC_CTRL                        (0xFC05C004U) /**< \brief (HSMC) HSMC NFC Control Register */\r
+  #define REG_HSMC_SR                          (0xFC05C008U) /**< \brief (HSMC) HSMC NFC Status Register */\r
+  #define REG_HSMC_IER                         (0xFC05C00CU) /**< \brief (HSMC) HSMC NFC Interrupt Enable Register */\r
+  #define REG_HSMC_IDR                         (0xFC05C010U) /**< \brief (HSMC) HSMC NFC Interrupt Disable Register */\r
+  #define REG_HSMC_IMR                         (0xFC05C014U) /**< \brief (HSMC) HSMC NFC Interrupt Mask Register */\r
+  #define REG_HSMC_ADDR                        (0xFC05C018U) /**< \brief (HSMC) HSMC NFC Address Cycle Zero Register */\r
+  #define REG_HSMC_BANK                        (0xFC05C01CU) /**< \brief (HSMC) HSMC Bank Address Register */\r
+  #define REG_HSMC_ECC_CTRL                    (0xFC05C020U) /**< \brief (HSMC) HSMC ECC Control Register */\r
+  #define REG_HSMC_ECC_MD                      (0xFC05C024U) /**< \brief (HSMC) HSMC ECC Mode Register */\r
+  #define REG_HSMC_ECC_SR1                     (0xFC05C028U) /**< \brief (HSMC) HSMC ECC Status 1 Register */\r
+  #define REG_HSMC_ECC_PR0                     (0xFC05C02CU) /**< \brief (HSMC) HSMC ECC Parity 0 Register */\r
+  #define REG_HSMC_ECC_PR1                     (0xFC05C030U) /**< \brief (HSMC) HSMC ECC parity 1 Register */\r
+  #define REG_HSMC_ECC_SR2                     (0xFC05C034U) /**< \brief (HSMC) HSMC ECC status 2 Register */\r
+  #define REG_HSMC_ECC_PR2                     (0xFC05C038U) /**< \brief (HSMC) HSMC ECC parity 2 Register */\r
+  #define REG_HSMC_ECC_PR3                     (0xFC05C03CU) /**< \brief (HSMC) HSMC ECC parity 3 Register */\r
+  #define REG_HSMC_ECC_PR4                     (0xFC05C040U) /**< \brief (HSMC) HSMC ECC parity 4 Register */\r
+  #define REG_HSMC_ECC_PR5                     (0xFC05C044U) /**< \brief (HSMC) HSMC ECC parity 5 Register */\r
+  #define REG_HSMC_ECC_PR6                     (0xFC05C048U) /**< \brief (HSMC) HSMC ECC parity 6 Register */\r
+  #define REG_HSMC_ECC_PR7                     (0xFC05C04CU) /**< \brief (HSMC) HSMC ECC parity 7 Register */\r
+  #define REG_HSMC_ECC_PR8                     (0xFC05C050U) /**< \brief (HSMC) HSMC ECC parity 8 Register */\r
+  #define REG_HSMC_ECC_PR9                     (0xFC05C054U) /**< \brief (HSMC) HSMC ECC parity 9 Register */\r
+  #define REG_HSMC_ECC_PR10                    (0xFC05C058U) /**< \brief (HSMC) HSMC ECC parity 10 Register */\r
+  #define REG_HSMC_ECC_PR11                    (0xFC05C05CU) /**< \brief (HSMC) HSMC ECC parity 11 Register */\r
+  #define REG_HSMC_ECC_PR12                    (0xFC05C060U) /**< \brief (HSMC) HSMC ECC parity 12 Register */\r
+  #define REG_HSMC_ECC_PR13                    (0xFC05C064U) /**< \brief (HSMC) HSMC ECC parity 13 Register */\r
+  #define REG_HSMC_ECC_PR14                    (0xFC05C068U) /**< \brief (HSMC) HSMC ECC parity 14 Register */\r
+  #define REG_HSMC_ECC_PR15                    (0xFC05C06CU) /**< \brief (HSMC) HSMC ECC parity 15 Register */\r
+  #define REG_HSMC_PMECCFG                     (0xFC05C070U) /**< \brief (HSMC) PMECC Configuration Register */\r
+  #define REG_HSMC_PMECCSAREA                  (0xFC05C074U) /**< \brief (HSMC) PMECC Spare Area Size Register */\r
+  #define REG_HSMC_PMECCSADDR                  (0xFC05C078U) /**< \brief (HSMC) PMECC Start Address Register */\r
+  #define REG_HSMC_PMECCEADDR                  (0xFC05C07CU) /**< \brief (HSMC) PMECC End Address Register */\r
+  #define REG_HSMC_PMECCTRL                    (0xFC05C084U) /**< \brief (HSMC) PMECC Control Register */\r
+  #define REG_HSMC_PMECCSR                     (0xFC05C088U) /**< \brief (HSMC) PMECC Status Register */\r
+  #define REG_HSMC_PMECCIER                    (0xFC05C08CU) /**< \brief (HSMC) PMECC Interrupt Enable register */\r
+  #define REG_HSMC_PMECCIDR                    (0xFC05C090U) /**< \brief (HSMC) PMECC Interrupt Disable Register */\r
+  #define REG_HSMC_PMECCIMR                    (0xFC05C094U) /**< \brief (HSMC) PMECC Interrupt Mask Register */\r
+  #define REG_HSMC_PMECCISR                    (0xFC05C098U) /**< \brief (HSMC) PMECC Interrupt Status Register */\r
+  #define REG_HSMC_PMECC0_0                    (0xFC05C0B0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC1_0                    (0xFC05C0B4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC2_0                    (0xFC05C0B8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC3_0                    (0xFC05C0BCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC4_0                    (0xFC05C0C0U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC5_0                    (0xFC05C0C4U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC6_0                    (0xFC05C0C8U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC7_0                    (0xFC05C0CCU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC8_0                    (0xFC05C0D0U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC9_0                    (0xFC05C0D4U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC10_0                   (0xFC05C0D8U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC0_1                    (0xFC05C0F0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC1_1                    (0xFC05C0F4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC2_1                    (0xFC05C0F8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC3_1                    (0xFC05C0FCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC4_1                    (0xFC05C100U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC5_1                    (0xFC05C104U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC6_1                    (0xFC05C108U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC7_1                    (0xFC05C10CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC8_1                    (0xFC05C110U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC9_1                    (0xFC05C114U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC10_1                   (0xFC05C118U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC0_2                    (0xFC05C130U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC1_2                    (0xFC05C134U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC2_2                    (0xFC05C138U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC3_2                    (0xFC05C13CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC4_2                    (0xFC05C140U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC5_2                    (0xFC05C144U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC6_2                    (0xFC05C148U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC7_2                    (0xFC05C14CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC8_2                    (0xFC05C150U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC9_2                    (0xFC05C154U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC10_2                   (0xFC05C158U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC0_3                    (0xFC05C170U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC1_3                    (0xFC05C174U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC2_3                    (0xFC05C178U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC3_3                    (0xFC05C17CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC4_3                    (0xFC05C180U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC5_3                    (0xFC05C184U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC6_3                    (0xFC05C188U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC7_3                    (0xFC05C18CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC8_3                    (0xFC05C190U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC9_3                    (0xFC05C194U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC10_3                   (0xFC05C198U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC0_4                    (0xFC05C1B0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC1_4                    (0xFC05C1B4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC2_4                    (0xFC05C1B8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC3_4                    (0xFC05C1BCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC4_4                    (0xFC05C1C0U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC5_4                    (0xFC05C1C4U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC6_4                    (0xFC05C1C8U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC7_4                    (0xFC05C1CCU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC8_4                    (0xFC05C1D0U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC9_4                    (0xFC05C1D4U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC10_4                   (0xFC05C1D8U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC0_5                    (0xFC05C1F0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC1_5                    (0xFC05C1F4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC2_5                    (0xFC05C1F8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC3_5                    (0xFC05C1FCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC4_5                    (0xFC05C200U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC5_5                    (0xFC05C204U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC6_5                    (0xFC05C208U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC7_5                    (0xFC05C20CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC8_5                    (0xFC05C210U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC9_5                    (0xFC05C214U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC10_5                   (0xFC05C218U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC0_6                    (0xFC05C230U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC1_6                    (0xFC05C234U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC2_6                    (0xFC05C238U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC3_6                    (0xFC05C23CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC4_6                    (0xFC05C240U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC5_6                    (0xFC05C244U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC6_6                    (0xFC05C248U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC7_6                    (0xFC05C24CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC8_6                    (0xFC05C250U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC9_6                    (0xFC05C254U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC10_6                   (0xFC05C258U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC0_7                    (0xFC05C270U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC1_7                    (0xFC05C274U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC2_7                    (0xFC05C278U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC3_7                    (0xFC05C27CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC4_7                    (0xFC05C280U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC5_7                    (0xFC05C284U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC6_7                    (0xFC05C288U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC7_7                    (0xFC05C28CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC8_7                    (0xFC05C290U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC9_7                    (0xFC05C294U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC10_7                   (0xFC05C298U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM0_0                      (0xFC05C2B0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM1_0                      (0xFC05C2B4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM2_0                      (0xFC05C2B8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM3_0                      (0xFC05C2BCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM4_0                      (0xFC05C2C0U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM5_0                      (0xFC05C2C4U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM6_0                      (0xFC05C2C8U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM7_0                      (0xFC05C2CCU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM8_0                      (0xFC05C2D0U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM9_0                      (0xFC05C2D4U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM10_0                     (0xFC05C2D8U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM11_0                     (0xFC05C2DCU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM0_1                      (0xFC05C2F0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM1_1                      (0xFC05C2F4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM2_1                      (0xFC05C2F8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM3_1                      (0xFC05C2FCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM4_1                      (0xFC05C300U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM5_1                      (0xFC05C304U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM6_1                      (0xFC05C308U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM7_1                      (0xFC05C30CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM8_1                      (0xFC05C310U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM9_1                      (0xFC05C314U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM10_1                     (0xFC05C318U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM11_1                     (0xFC05C31CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM0_2                      (0xFC05C330U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM1_2                      (0xFC05C334U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM2_2                      (0xFC05C338U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM3_2                      (0xFC05C33CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM4_2                      (0xFC05C340U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM5_2                      (0xFC05C344U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM6_2                      (0xFC05C348U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM7_2                      (0xFC05C34CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM8_2                      (0xFC05C350U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM9_2                      (0xFC05C354U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM10_2                     (0xFC05C358U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM11_2                     (0xFC05C35CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM0_3                      (0xFC05C370U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM1_3                      (0xFC05C374U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM2_3                      (0xFC05C378U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM3_3                      (0xFC05C37CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM4_3                      (0xFC05C380U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM5_3                      (0xFC05C384U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM6_3                      (0xFC05C388U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM7_3                      (0xFC05C38CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM8_3                      (0xFC05C390U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM9_3                      (0xFC05C394U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM10_3                     (0xFC05C398U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM11_3                     (0xFC05C39CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM0_4                      (0xFC05C3B0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM1_4                      (0xFC05C3B4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM2_4                      (0xFC05C3B8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM3_4                      (0xFC05C3BCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM4_4                      (0xFC05C3C0U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM5_4                      (0xFC05C3C4U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM6_4                      (0xFC05C3C8U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM7_4                      (0xFC05C3CCU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM8_4                      (0xFC05C3D0U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM9_4                      (0xFC05C3D4U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM10_4                     (0xFC05C3D8U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM11_4                     (0xFC05C3DCU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM0_5                      (0xFC05C3F0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM1_5                      (0xFC05C3F4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM2_5                      (0xFC05C3F8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM3_5                      (0xFC05C3FCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM4_5                      (0xFC05C400U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM5_5                      (0xFC05C404U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM6_5                      (0xFC05C408U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM7_5                      (0xFC05C40CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM8_5                      (0xFC05C410U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM9_5                      (0xFC05C414U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM10_5                     (0xFC05C418U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM11_5                     (0xFC05C41CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM0_6                      (0xFC05C430U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM1_6                      (0xFC05C434U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM2_6                      (0xFC05C438U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM3_6                      (0xFC05C43CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM4_6                      (0xFC05C440U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM5_6                      (0xFC05C444U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM6_6                      (0xFC05C448U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM7_6                      (0xFC05C44CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM8_6                      (0xFC05C450U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM9_6                      (0xFC05C454U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM10_6                     (0xFC05C458U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM11_6                     (0xFC05C45CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM0_7                      (0xFC05C470U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM1_7                      (0xFC05C474U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM2_7                      (0xFC05C478U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM3_7                      (0xFC05C47CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM4_7                      (0xFC05C480U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM5_7                      (0xFC05C484U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM6_7                      (0xFC05C488U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM7_7                      (0xFC05C48CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM8_7                      (0xFC05C490U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM9_7                      (0xFC05C494U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM10_7                     (0xFC05C498U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM11_7                     (0xFC05C49CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 7) */\r
+  #define REG_HSMC_ELCFG                       (0xFC05C500U) /**< \brief (HSMC) PMECC Error Location Configuration Register */\r
+  #define REG_HSMC_ELPRIM                      (0xFC05C504U) /**< \brief (HSMC) PMECC Error Location Primitive Register */\r
+  #define REG_HSMC_ELEN                        (0xFC05C508U) /**< \brief (HSMC) PMECC Error Location Enable Register */\r
+  #define REG_HSMC_ELDIS                       (0xFC05C50CU) /**< \brief (HSMC) PMECC Error Location Disable Register */\r
+  #define REG_HSMC_ELSR                        (0xFC05C510U) /**< \brief (HSMC) PMECC Error Location Status Register */\r
+  #define REG_HSMC_ELIER                       (0xFC05C514U) /**< \brief (HSMC) PMECC Error Location Interrupt Enable register */\r
+  #define REG_HSMC_ELIDR                       (0xFC05C518U) /**< \brief (HSMC) PMECC Error Location Interrupt Disable Register */\r
+  #define REG_HSMC_ELIMR                       (0xFC05C51CU) /**< \brief (HSMC) PMECC Error Location Interrupt Mask Register */\r
+  #define REG_HSMC_ELISR                       (0xFC05C520U) /**< \brief (HSMC) PMECC Error Location Interrupt Status Register */\r
+  #define REG_HSMC_SIGMA0                      (0xFC05C528U) /**< \brief (HSMC) PMECC Error Location SIGMA 0 Register */\r
+  #define REG_HSMC_SIGMA1                      (0xFC05C52CU) /**< \brief (HSMC) PMECC Error Location SIGMA 1 Register */\r
+  #define REG_HSMC_SIGMA2                      (0xFC05C530U) /**< \brief (HSMC) PMECC Error Location SIGMA 2 Register */\r
+  #define REG_HSMC_SIGMA3                      (0xFC05C534U) /**< \brief (HSMC) PMECC Error Location SIGMA 3 Register */\r
+  #define REG_HSMC_SIGMA4                      (0xFC05C538U) /**< \brief (HSMC) PMECC Error Location SIGMA 4 Register */\r
+  #define REG_HSMC_SIGMA5                      (0xFC05C53CU) /**< \brief (HSMC) PMECC Error Location SIGMA 5 Register */\r
+  #define REG_HSMC_SIGMA6                      (0xFC05C540U) /**< \brief (HSMC) PMECC Error Location SIGMA 6 Register */\r
+  #define REG_HSMC_SIGMA7                      (0xFC05C544U) /**< \brief (HSMC) PMECC Error Location SIGMA 7 Register */\r
+  #define REG_HSMC_SIGMA8                      (0xFC05C548U) /**< \brief (HSMC) PMECC Error Location SIGMA 8 Register */\r
+  #define REG_HSMC_SIGMA9                      (0xFC05C54CU) /**< \brief (HSMC) PMECC Error Location SIGMA 9 Register */\r
+  #define REG_HSMC_SIGMA10                     (0xFC05C550U) /**< \brief (HSMC) PMECC Error Location SIGMA 10 Register */\r
+  #define REG_HSMC_SIGMA11                     (0xFC05C554U) /**< \brief (HSMC) PMECC Error Location SIGMA 11 Register */\r
+  #define REG_HSMC_SIGMA12                     (0xFC05C558U) /**< \brief (HSMC) PMECC Error Location SIGMA 12 Register */\r
+  #define REG_HSMC_SIGMA13                     (0xFC05C55CU) /**< \brief (HSMC) PMECC Error Location SIGMA 13 Register */\r
+  #define REG_HSMC_SIGMA14                     (0xFC05C560U) /**< \brief (HSMC) PMECC Error Location SIGMA 14 Register */\r
+  #define REG_HSMC_SIGMA15                     (0xFC05C564U) /**< \brief (HSMC) PMECC Error Location SIGMA 15 Register */\r
+  #define REG_HSMC_SIGMA16                     (0xFC05C568U) /**< \brief (HSMC) PMECC Error Location SIGMA 16 Register */\r
+  #define REG_HSMC_SIGMA17                     (0xFC05C56CU) /**< \brief (HSMC) PMECC Error Location SIGMA 17 Register */\r
+  #define REG_HSMC_SIGMA18                     (0xFC05C570U) /**< \brief (HSMC) PMECC Error Location SIGMA 18 Register */\r
+  #define REG_HSMC_SIGMA19                     (0xFC05C574U) /**< \brief (HSMC) PMECC Error Location SIGMA 19 Register */\r
+  #define REG_HSMC_SIGMA20                     (0xFC05C578U) /**< \brief (HSMC) PMECC Error Location SIGMA 20 Register */\r
+  #define REG_HSMC_SIGMA21                     (0xFC05C57CU) /**< \brief (HSMC) PMECC Error Location SIGMA 21 Register */\r
+  #define REG_HSMC_SIGMA22                     (0xFC05C580U) /**< \brief (HSMC) PMECC Error Location SIGMA 22 Register */\r
+  #define REG_HSMC_SIGMA23                     (0xFC05C584U) /**< \brief (HSMC) PMECC Error Location SIGMA 23 Register */\r
+  #define REG_HSMC_SIGMA24                     (0xFC05C588U) /**< \brief (HSMC) PMECC Error Location SIGMA 24 Register */\r
+  #define REG_HSMC_ERRLOC                      (0xFC05C58CU) /**< \brief (HSMC) PMECC Error Location 0 Register */\r
+  #define REG_HSMC_SETUP0                      (0xFC05C600U) /**< \brief (HSMC) HSMC Setup Register (CS_number = 0) */\r
+  #define REG_HSMC_PULSE0                      (0xFC05C604U) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 0) */\r
+  #define REG_HSMC_CYCLE0                      (0xFC05C608U) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 0) */\r
+  #define REG_HSMC_TIMINGS0                    (0xFC05C60CU) /**< \brief (HSMC) HSMC Timings Register (CS_number = 0) */\r
+  #define REG_HSMC_MODE0                       (0xFC05C610U) /**< \brief (HSMC) HSMC Mode Register (CS_number = 0) */\r
+  #define REG_HSMC_SETUP1                      (0xFC05C614U) /**< \brief (HSMC) HSMC Setup Register (CS_number = 1) */\r
+  #define REG_HSMC_PULSE1                      (0xFC05C618U) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 1) */\r
+  #define REG_HSMC_CYCLE1                      (0xFC05C61CU) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 1) */\r
+  #define REG_HSMC_TIMINGS1                    (0xFC05C620U) /**< \brief (HSMC) HSMC Timings Register (CS_number = 1) */\r
+  #define REG_HSMC_MODE1                       (0xFC05C624U) /**< \brief (HSMC) HSMC Mode Register (CS_number = 1) */\r
+  #define REG_HSMC_SETUP2                      (0xFC05C628U) /**< \brief (HSMC) HSMC Setup Register (CS_number = 2) */\r
+  #define REG_HSMC_PULSE2                      (0xFC05C62CU) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 2) */\r
+  #define REG_HSMC_CYCLE2                      (0xFC05C630U) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 2) */\r
+  #define REG_HSMC_TIMINGS2                    (0xFC05C634U) /**< \brief (HSMC) HSMC Timings Register (CS_number = 2) */\r
+  #define REG_HSMC_MODE2                       (0xFC05C638U) /**< \brief (HSMC) HSMC Mode Register (CS_number = 2) */\r
+  #define REG_HSMC_SETUP3                      (0xFC05C63CU) /**< \brief (HSMC) HSMC Setup Register (CS_number = 3) */\r
+  #define REG_HSMC_PULSE3                      (0xFC05C640U) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 3) */\r
+  #define REG_HSMC_CYCLE3                      (0xFC05C644U) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 3) */\r
+  #define REG_HSMC_TIMINGS3                    (0xFC05C648U) /**< \brief (HSMC) HSMC Timings Register (CS_number = 3) */\r
+  #define REG_HSMC_MODE3                       (0xFC05C64CU) /**< \brief (HSMC) HSMC Mode Register (CS_number = 3) */\r
+  #define REG_HSMC_OCMS                        (0xFC05C6A0U) /**< \brief (HSMC) HSMC OCMS Register */\r
+  #define REG_HSMC_KEY1                        (0xFC05C6A4U) /**< \brief (HSMC) HSMC OCMS KEY1 Register */\r
+  #define REG_HSMC_KEY2                        (0xFC05C6A8U) /**< \brief (HSMC) HSMC OCMS KEY2 Register */\r
+  #define REG_HSMC_WPCR                        (0xFC05C6E4U) /**< \brief (HSMC) HSMC Write Protection Control Register */\r
+  #define REG_HSMC_WPSR                        (0xFC05C6E8U) /**< \brief (HSMC) HSMC Write Protection Status Register */\r
+#else\r
+  #define REG_HSMC_CFG        (*(__IO uint32_t*)0xFC05C000U) /**< \brief (HSMC) HSMC NFC Configuration Register */\r
+  #define REG_HSMC_CTRL       (*(__O  uint32_t*)0xFC05C004U) /**< \brief (HSMC) HSMC NFC Control Register */\r
+  #define REG_HSMC_SR         (*(__I  uint32_t*)0xFC05C008U) /**< \brief (HSMC) HSMC NFC Status Register */\r
+  #define REG_HSMC_IER        (*(__O  uint32_t*)0xFC05C00CU) /**< \brief (HSMC) HSMC NFC Interrupt Enable Register */\r
+  #define REG_HSMC_IDR        (*(__O  uint32_t*)0xFC05C010U) /**< \brief (HSMC) HSMC NFC Interrupt Disable Register */\r
+  #define REG_HSMC_IMR        (*(__I  uint32_t*)0xFC05C014U) /**< \brief (HSMC) HSMC NFC Interrupt Mask Register */\r
+  #define REG_HSMC_ADDR       (*(__IO uint32_t*)0xFC05C018U) /**< \brief (HSMC) HSMC NFC Address Cycle Zero Register */\r
+  #define REG_HSMC_BANK       (*(__IO uint32_t*)0xFC05C01CU) /**< \brief (HSMC) HSMC Bank Address Register */\r
+  #define REG_HSMC_ECC_CTRL   (*(__O  uint32_t*)0xFC05C020U) /**< \brief (HSMC) HSMC ECC Control Register */\r
+  #define REG_HSMC_ECC_MD     (*(__IO uint32_t*)0xFC05C024U) /**< \brief (HSMC) HSMC ECC Mode Register */\r
+  #define REG_HSMC_ECC_SR1    (*(__I  uint32_t*)0xFC05C028U) /**< \brief (HSMC) HSMC ECC Status 1 Register */\r
+  #define REG_HSMC_ECC_PR0    (*(__I  uint32_t*)0xFC05C02CU) /**< \brief (HSMC) HSMC ECC Parity 0 Register */\r
+  #define REG_HSMC_ECC_PR1    (*(__I  uint32_t*)0xFC05C030U) /**< \brief (HSMC) HSMC ECC parity 1 Register */\r
+  #define REG_HSMC_ECC_SR2    (*(__I  uint32_t*)0xFC05C034U) /**< \brief (HSMC) HSMC ECC status 2 Register */\r
+  #define REG_HSMC_ECC_PR2    (*(__I  uint32_t*)0xFC05C038U) /**< \brief (HSMC) HSMC ECC parity 2 Register */\r
+  #define REG_HSMC_ECC_PR3    (*(__I  uint32_t*)0xFC05C03CU) /**< \brief (HSMC) HSMC ECC parity 3 Register */\r
+  #define REG_HSMC_ECC_PR4    (*(__I  uint32_t*)0xFC05C040U) /**< \brief (HSMC) HSMC ECC parity 4 Register */\r
+  #define REG_HSMC_ECC_PR5    (*(__I  uint32_t*)0xFC05C044U) /**< \brief (HSMC) HSMC ECC parity 5 Register */\r
+  #define REG_HSMC_ECC_PR6    (*(__I  uint32_t*)0xFC05C048U) /**< \brief (HSMC) HSMC ECC parity 6 Register */\r
+  #define REG_HSMC_ECC_PR7    (*(__I  uint32_t*)0xFC05C04CU) /**< \brief (HSMC) HSMC ECC parity 7 Register */\r
+  #define REG_HSMC_ECC_PR8    (*(__I  uint32_t*)0xFC05C050U) /**< \brief (HSMC) HSMC ECC parity 8 Register */\r
+  #define REG_HSMC_ECC_PR9    (*(__I  uint32_t*)0xFC05C054U) /**< \brief (HSMC) HSMC ECC parity 9 Register */\r
+  #define REG_HSMC_ECC_PR10   (*(__I  uint32_t*)0xFC05C058U) /**< \brief (HSMC) HSMC ECC parity 10 Register */\r
+  #define REG_HSMC_ECC_PR11   (*(__I  uint32_t*)0xFC05C05CU) /**< \brief (HSMC) HSMC ECC parity 11 Register */\r
+  #define REG_HSMC_ECC_PR12   (*(__I  uint32_t*)0xFC05C060U) /**< \brief (HSMC) HSMC ECC parity 12 Register */\r
+  #define REG_HSMC_ECC_PR13   (*(__I  uint32_t*)0xFC05C064U) /**< \brief (HSMC) HSMC ECC parity 13 Register */\r
+  #define REG_HSMC_ECC_PR14   (*(__I  uint32_t*)0xFC05C068U) /**< \brief (HSMC) HSMC ECC parity 14 Register */\r
+  #define REG_HSMC_ECC_PR15   (*(__I  uint32_t*)0xFC05C06CU) /**< \brief (HSMC) HSMC ECC parity 15 Register */\r
+  #define REG_HSMC_PMECCFG    (*(__IO uint32_t*)0xFC05C070U) /**< \brief (HSMC) PMECC Configuration Register */\r
+  #define REG_HSMC_PMECCSAREA (*(__IO uint32_t*)0xFC05C074U) /**< \brief (HSMC) PMECC Spare Area Size Register */\r
+  #define REG_HSMC_PMECCSADDR (*(__IO uint32_t*)0xFC05C078U) /**< \brief (HSMC) PMECC Start Address Register */\r
+  #define REG_HSMC_PMECCEADDR (*(__IO uint32_t*)0xFC05C07CU) /**< \brief (HSMC) PMECC End Address Register */\r
+  #define REG_HSMC_PMECCTRL   (*(__O  uint32_t*)0xFC05C084U) /**< \brief (HSMC) PMECC Control Register */\r
+  #define REG_HSMC_PMECCSR    (*(__I  uint32_t*)0xFC05C088U) /**< \brief (HSMC) PMECC Status Register */\r
+  #define REG_HSMC_PMECCIER   (*(__O  uint32_t*)0xFC05C08CU) /**< \brief (HSMC) PMECC Interrupt Enable register */\r
+  #define REG_HSMC_PMECCIDR   (*(__O  uint32_t*)0xFC05C090U) /**< \brief (HSMC) PMECC Interrupt Disable Register */\r
+  #define REG_HSMC_PMECCIMR   (*(__I  uint32_t*)0xFC05C094U) /**< \brief (HSMC) PMECC Interrupt Mask Register */\r
+  #define REG_HSMC_PMECCISR   (*(__I  uint32_t*)0xFC05C098U) /**< \brief (HSMC) PMECC Interrupt Status Register */\r
+  #define REG_HSMC_PMECC0_0   (*(__I  uint32_t*)0xFC05C0B0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC1_0   (*(__I  uint32_t*)0xFC05C0B4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC2_0   (*(__I  uint32_t*)0xFC05C0B8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC3_0   (*(__I  uint32_t*)0xFC05C0BCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC4_0   (*(__I  uint32_t*)0xFC05C0C0U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC5_0   (*(__I  uint32_t*)0xFC05C0C4U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC6_0   (*(__I  uint32_t*)0xFC05C0C8U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC7_0   (*(__I  uint32_t*)0xFC05C0CCU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC8_0   (*(__I  uint32_t*)0xFC05C0D0U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC9_0   (*(__I  uint32_t*)0xFC05C0D4U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC10_0  (*(__I  uint32_t*)0xFC05C0D8U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 0) */\r
+  #define REG_HSMC_PMECC0_1   (*(__I  uint32_t*)0xFC05C0F0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC1_1   (*(__I  uint32_t*)0xFC05C0F4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC2_1   (*(__I  uint32_t*)0xFC05C0F8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC3_1   (*(__I  uint32_t*)0xFC05C0FCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC4_1   (*(__I  uint32_t*)0xFC05C100U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC5_1   (*(__I  uint32_t*)0xFC05C104U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC6_1   (*(__I  uint32_t*)0xFC05C108U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC7_1   (*(__I  uint32_t*)0xFC05C10CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC8_1   (*(__I  uint32_t*)0xFC05C110U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC9_1   (*(__I  uint32_t*)0xFC05C114U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC10_1  (*(__I  uint32_t*)0xFC05C118U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 1) */\r
+  #define REG_HSMC_PMECC0_2   (*(__I  uint32_t*)0xFC05C130U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC1_2   (*(__I  uint32_t*)0xFC05C134U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC2_2   (*(__I  uint32_t*)0xFC05C138U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC3_2   (*(__I  uint32_t*)0xFC05C13CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC4_2   (*(__I  uint32_t*)0xFC05C140U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC5_2   (*(__I  uint32_t*)0xFC05C144U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC6_2   (*(__I  uint32_t*)0xFC05C148U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC7_2   (*(__I  uint32_t*)0xFC05C14CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC8_2   (*(__I  uint32_t*)0xFC05C150U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC9_2   (*(__I  uint32_t*)0xFC05C154U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC10_2  (*(__I  uint32_t*)0xFC05C158U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 2) */\r
+  #define REG_HSMC_PMECC0_3   (*(__I  uint32_t*)0xFC05C170U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC1_3   (*(__I  uint32_t*)0xFC05C174U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC2_3   (*(__I  uint32_t*)0xFC05C178U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC3_3   (*(__I  uint32_t*)0xFC05C17CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC4_3   (*(__I  uint32_t*)0xFC05C180U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC5_3   (*(__I  uint32_t*)0xFC05C184U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC6_3   (*(__I  uint32_t*)0xFC05C188U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC7_3   (*(__I  uint32_t*)0xFC05C18CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC8_3   (*(__I  uint32_t*)0xFC05C190U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC9_3   (*(__I  uint32_t*)0xFC05C194U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC10_3  (*(__I  uint32_t*)0xFC05C198U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 3) */\r
+  #define REG_HSMC_PMECC0_4   (*(__I  uint32_t*)0xFC05C1B0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC1_4   (*(__I  uint32_t*)0xFC05C1B4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC2_4   (*(__I  uint32_t*)0xFC05C1B8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC3_4   (*(__I  uint32_t*)0xFC05C1BCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC4_4   (*(__I  uint32_t*)0xFC05C1C0U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC5_4   (*(__I  uint32_t*)0xFC05C1C4U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC6_4   (*(__I  uint32_t*)0xFC05C1C8U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC7_4   (*(__I  uint32_t*)0xFC05C1CCU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC8_4   (*(__I  uint32_t*)0xFC05C1D0U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC9_4   (*(__I  uint32_t*)0xFC05C1D4U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC10_4  (*(__I  uint32_t*)0xFC05C1D8U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 4) */\r
+  #define REG_HSMC_PMECC0_5   (*(__I  uint32_t*)0xFC05C1F0U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC1_5   (*(__I  uint32_t*)0xFC05C1F4U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC2_5   (*(__I  uint32_t*)0xFC05C1F8U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC3_5   (*(__I  uint32_t*)0xFC05C1FCU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC4_5   (*(__I  uint32_t*)0xFC05C200U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC5_5   (*(__I  uint32_t*)0xFC05C204U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC6_5   (*(__I  uint32_t*)0xFC05C208U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC7_5   (*(__I  uint32_t*)0xFC05C20CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC8_5   (*(__I  uint32_t*)0xFC05C210U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC9_5   (*(__I  uint32_t*)0xFC05C214U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC10_5  (*(__I  uint32_t*)0xFC05C218U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 5) */\r
+  #define REG_HSMC_PMECC0_6   (*(__I  uint32_t*)0xFC05C230U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC1_6   (*(__I  uint32_t*)0xFC05C234U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC2_6   (*(__I  uint32_t*)0xFC05C238U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC3_6   (*(__I  uint32_t*)0xFC05C23CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC4_6   (*(__I  uint32_t*)0xFC05C240U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC5_6   (*(__I  uint32_t*)0xFC05C244U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC6_6   (*(__I  uint32_t*)0xFC05C248U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC7_6   (*(__I  uint32_t*)0xFC05C24CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC8_6   (*(__I  uint32_t*)0xFC05C250U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC9_6   (*(__I  uint32_t*)0xFC05C254U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC10_6  (*(__I  uint32_t*)0xFC05C258U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 6) */\r
+  #define REG_HSMC_PMECC0_7   (*(__I  uint32_t*)0xFC05C270U) /**< \brief (HSMC) PMECC Redundancy 0 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC1_7   (*(__I  uint32_t*)0xFC05C274U) /**< \brief (HSMC) PMECC Redundancy 1 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC2_7   (*(__I  uint32_t*)0xFC05C278U) /**< \brief (HSMC) PMECC Redundancy 2 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC3_7   (*(__I  uint32_t*)0xFC05C27CU) /**< \brief (HSMC) PMECC Redundancy 3 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC4_7   (*(__I  uint32_t*)0xFC05C280U) /**< \brief (HSMC) PMECC Redundancy 4 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC5_7   (*(__I  uint32_t*)0xFC05C284U) /**< \brief (HSMC) PMECC Redundancy 5 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC6_7   (*(__I  uint32_t*)0xFC05C288U) /**< \brief (HSMC) PMECC Redundancy 6 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC7_7   (*(__I  uint32_t*)0xFC05C28CU) /**< \brief (HSMC) PMECC Redundancy 7 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC8_7   (*(__I  uint32_t*)0xFC05C290U) /**< \brief (HSMC) PMECC Redundancy 8 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC9_7   (*(__I  uint32_t*)0xFC05C294U) /**< \brief (HSMC) PMECC Redundancy 9 Register (sec_num = 7) */\r
+  #define REG_HSMC_PMECC10_7  (*(__I  uint32_t*)0xFC05C298U) /**< \brief (HSMC) PMECC Redundancy 10 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM0_0     (*(__I  uint32_t*)0xFC05C2B0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM1_0     (*(__I  uint32_t*)0xFC05C2B4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM2_0     (*(__I  uint32_t*)0xFC05C2B8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM3_0     (*(__I  uint32_t*)0xFC05C2BCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM4_0     (*(__I  uint32_t*)0xFC05C2C0U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM5_0     (*(__I  uint32_t*)0xFC05C2C4U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM6_0     (*(__I  uint32_t*)0xFC05C2C8U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM7_0     (*(__I  uint32_t*)0xFC05C2CCU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM8_0     (*(__I  uint32_t*)0xFC05C2D0U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM9_0     (*(__I  uint32_t*)0xFC05C2D4U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM10_0    (*(__I  uint32_t*)0xFC05C2D8U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM11_0    (*(__I  uint32_t*)0xFC05C2DCU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 0) */\r
+  #define REG_HSMC_REM0_1     (*(__I  uint32_t*)0xFC05C2F0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM1_1     (*(__I  uint32_t*)0xFC05C2F4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM2_1     (*(__I  uint32_t*)0xFC05C2F8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM3_1     (*(__I  uint32_t*)0xFC05C2FCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM4_1     (*(__I  uint32_t*)0xFC05C300U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM5_1     (*(__I  uint32_t*)0xFC05C304U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM6_1     (*(__I  uint32_t*)0xFC05C308U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM7_1     (*(__I  uint32_t*)0xFC05C30CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM8_1     (*(__I  uint32_t*)0xFC05C310U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM9_1     (*(__I  uint32_t*)0xFC05C314U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM10_1    (*(__I  uint32_t*)0xFC05C318U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM11_1    (*(__I  uint32_t*)0xFC05C31CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 1) */\r
+  #define REG_HSMC_REM0_2     (*(__I  uint32_t*)0xFC05C330U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM1_2     (*(__I  uint32_t*)0xFC05C334U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM2_2     (*(__I  uint32_t*)0xFC05C338U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM3_2     (*(__I  uint32_t*)0xFC05C33CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM4_2     (*(__I  uint32_t*)0xFC05C340U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM5_2     (*(__I  uint32_t*)0xFC05C344U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM6_2     (*(__I  uint32_t*)0xFC05C348U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM7_2     (*(__I  uint32_t*)0xFC05C34CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM8_2     (*(__I  uint32_t*)0xFC05C350U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM9_2     (*(__I  uint32_t*)0xFC05C354U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM10_2    (*(__I  uint32_t*)0xFC05C358U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM11_2    (*(__I  uint32_t*)0xFC05C35CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 2) */\r
+  #define REG_HSMC_REM0_3     (*(__I  uint32_t*)0xFC05C370U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM1_3     (*(__I  uint32_t*)0xFC05C374U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM2_3     (*(__I  uint32_t*)0xFC05C378U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM3_3     (*(__I  uint32_t*)0xFC05C37CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM4_3     (*(__I  uint32_t*)0xFC05C380U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM5_3     (*(__I  uint32_t*)0xFC05C384U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM6_3     (*(__I  uint32_t*)0xFC05C388U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM7_3     (*(__I  uint32_t*)0xFC05C38CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM8_3     (*(__I  uint32_t*)0xFC05C390U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM9_3     (*(__I  uint32_t*)0xFC05C394U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM10_3    (*(__I  uint32_t*)0xFC05C398U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM11_3    (*(__I  uint32_t*)0xFC05C39CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 3) */\r
+  #define REG_HSMC_REM0_4     (*(__I  uint32_t*)0xFC05C3B0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM1_4     (*(__I  uint32_t*)0xFC05C3B4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM2_4     (*(__I  uint32_t*)0xFC05C3B8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM3_4     (*(__I  uint32_t*)0xFC05C3BCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM4_4     (*(__I  uint32_t*)0xFC05C3C0U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM5_4     (*(__I  uint32_t*)0xFC05C3C4U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM6_4     (*(__I  uint32_t*)0xFC05C3C8U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM7_4     (*(__I  uint32_t*)0xFC05C3CCU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM8_4     (*(__I  uint32_t*)0xFC05C3D0U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM9_4     (*(__I  uint32_t*)0xFC05C3D4U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM10_4    (*(__I  uint32_t*)0xFC05C3D8U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM11_4    (*(__I  uint32_t*)0xFC05C3DCU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 4) */\r
+  #define REG_HSMC_REM0_5     (*(__I  uint32_t*)0xFC05C3F0U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM1_5     (*(__I  uint32_t*)0xFC05C3F4U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM2_5     (*(__I  uint32_t*)0xFC05C3F8U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM3_5     (*(__I  uint32_t*)0xFC05C3FCU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM4_5     (*(__I  uint32_t*)0xFC05C400U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM5_5     (*(__I  uint32_t*)0xFC05C404U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM6_5     (*(__I  uint32_t*)0xFC05C408U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM7_5     (*(__I  uint32_t*)0xFC05C40CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM8_5     (*(__I  uint32_t*)0xFC05C410U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM9_5     (*(__I  uint32_t*)0xFC05C414U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM10_5    (*(__I  uint32_t*)0xFC05C418U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM11_5    (*(__I  uint32_t*)0xFC05C41CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 5) */\r
+  #define REG_HSMC_REM0_6     (*(__I  uint32_t*)0xFC05C430U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM1_6     (*(__I  uint32_t*)0xFC05C434U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM2_6     (*(__I  uint32_t*)0xFC05C438U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM3_6     (*(__I  uint32_t*)0xFC05C43CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM4_6     (*(__I  uint32_t*)0xFC05C440U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM5_6     (*(__I  uint32_t*)0xFC05C444U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM6_6     (*(__I  uint32_t*)0xFC05C448U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM7_6     (*(__I  uint32_t*)0xFC05C44CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM8_6     (*(__I  uint32_t*)0xFC05C450U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM9_6     (*(__I  uint32_t*)0xFC05C454U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM10_6    (*(__I  uint32_t*)0xFC05C458U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM11_6    (*(__I  uint32_t*)0xFC05C45CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 6) */\r
+  #define REG_HSMC_REM0_7     (*(__I  uint32_t*)0xFC05C470U) /**< \brief (HSMC) PMECC Remainder 0 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM1_7     (*(__I  uint32_t*)0xFC05C474U) /**< \brief (HSMC) PMECC Remainder 1 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM2_7     (*(__I  uint32_t*)0xFC05C478U) /**< \brief (HSMC) PMECC Remainder 2 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM3_7     (*(__I  uint32_t*)0xFC05C47CU) /**< \brief (HSMC) PMECC Remainder 3 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM4_7     (*(__I  uint32_t*)0xFC05C480U) /**< \brief (HSMC) PMECC Remainder 4 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM5_7     (*(__I  uint32_t*)0xFC05C484U) /**< \brief (HSMC) PMECC Remainder 5 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM6_7     (*(__I  uint32_t*)0xFC05C488U) /**< \brief (HSMC) PMECC Remainder 6 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM7_7     (*(__I  uint32_t*)0xFC05C48CU) /**< \brief (HSMC) PMECC Remainder 7 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM8_7     (*(__I  uint32_t*)0xFC05C490U) /**< \brief (HSMC) PMECC Remainder 8 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM9_7     (*(__I  uint32_t*)0xFC05C494U) /**< \brief (HSMC) PMECC Remainder 9 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM10_7    (*(__I  uint32_t*)0xFC05C498U) /**< \brief (HSMC) PMECC Remainder 10 Register (sec_num = 7) */\r
+  #define REG_HSMC_REM11_7    (*(__I  uint32_t*)0xFC05C49CU) /**< \brief (HSMC) PMECC Remainder 11 Register (sec_num = 7) */\r
+  #define REG_HSMC_ELCFG      (*(__IO uint32_t*)0xFC05C500U) /**< \brief (HSMC) PMECC Error Location Configuration Register */\r
+  #define REG_HSMC_ELPRIM     (*(__I  uint32_t*)0xFC05C504U) /**< \brief (HSMC) PMECC Error Location Primitive Register */\r
+  #define REG_HSMC_ELEN       (*(__O  uint32_t*)0xFC05C508U) /**< \brief (HSMC) PMECC Error Location Enable Register */\r
+  #define REG_HSMC_ELDIS      (*(__O  uint32_t*)0xFC05C50CU) /**< \brief (HSMC) PMECC Error Location Disable Register */\r
+  #define REG_HSMC_ELSR       (*(__I  uint32_t*)0xFC05C510U) /**< \brief (HSMC) PMECC Error Location Status Register */\r
+  #define REG_HSMC_ELIER      (*(__O  uint32_t*)0xFC05C514U) /**< \brief (HSMC) PMECC Error Location Interrupt Enable register */\r
+  #define REG_HSMC_ELIDR      (*(__O  uint32_t*)0xFC05C518U) /**< \brief (HSMC) PMECC Error Location Interrupt Disable Register */\r
+  #define REG_HSMC_ELIMR      (*(__I  uint32_t*)0xFC05C51CU) /**< \brief (HSMC) PMECC Error Location Interrupt Mask Register */\r
+  #define REG_HSMC_ELISR      (*(__I  uint32_t*)0xFC05C520U) /**< \brief (HSMC) PMECC Error Location Interrupt Status Register */\r
+  #define REG_HSMC_SIGMA0     (*(__IO uint32_t*)0xFC05C528U) /**< \brief (HSMC) PMECC Error Location SIGMA 0 Register */\r
+  #define REG_HSMC_SIGMA1     (*(__IO uint32_t*)0xFC05C52CU) /**< \brief (HSMC) PMECC Error Location SIGMA 1 Register */\r
+  #define REG_HSMC_SIGMA2     (*(__IO uint32_t*)0xFC05C530U) /**< \brief (HSMC) PMECC Error Location SIGMA 2 Register */\r
+  #define REG_HSMC_SIGMA3     (*(__IO uint32_t*)0xFC05C534U) /**< \brief (HSMC) PMECC Error Location SIGMA 3 Register */\r
+  #define REG_HSMC_SIGMA4     (*(__IO uint32_t*)0xFC05C538U) /**< \brief (HSMC) PMECC Error Location SIGMA 4 Register */\r
+  #define REG_HSMC_SIGMA5     (*(__IO uint32_t*)0xFC05C53CU) /**< \brief (HSMC) PMECC Error Location SIGMA 5 Register */\r
+  #define REG_HSMC_SIGMA6     (*(__IO uint32_t*)0xFC05C540U) /**< \brief (HSMC) PMECC Error Location SIGMA 6 Register */\r
+  #define REG_HSMC_SIGMA7     (*(__IO uint32_t*)0xFC05C544U) /**< \brief (HSMC) PMECC Error Location SIGMA 7 Register */\r
+  #define REG_HSMC_SIGMA8     (*(__IO uint32_t*)0xFC05C548U) /**< \brief (HSMC) PMECC Error Location SIGMA 8 Register */\r
+  #define REG_HSMC_SIGMA9     (*(__IO uint32_t*)0xFC05C54CU) /**< \brief (HSMC) PMECC Error Location SIGMA 9 Register */\r
+  #define REG_HSMC_SIGMA10    (*(__IO uint32_t*)0xFC05C550U) /**< \brief (HSMC) PMECC Error Location SIGMA 10 Register */\r
+  #define REG_HSMC_SIGMA11    (*(__IO uint32_t*)0xFC05C554U) /**< \brief (HSMC) PMECC Error Location SIGMA 11 Register */\r
+  #define REG_HSMC_SIGMA12    (*(__IO uint32_t*)0xFC05C558U) /**< \brief (HSMC) PMECC Error Location SIGMA 12 Register */\r
+  #define REG_HSMC_SIGMA13    (*(__IO uint32_t*)0xFC05C55CU) /**< \brief (HSMC) PMECC Error Location SIGMA 13 Register */\r
+  #define REG_HSMC_SIGMA14    (*(__IO uint32_t*)0xFC05C560U) /**< \brief (HSMC) PMECC Error Location SIGMA 14 Register */\r
+  #define REG_HSMC_SIGMA15    (*(__IO uint32_t*)0xFC05C564U) /**< \brief (HSMC) PMECC Error Location SIGMA 15 Register */\r
+  #define REG_HSMC_SIGMA16    (*(__IO uint32_t*)0xFC05C568U) /**< \brief (HSMC) PMECC Error Location SIGMA 16 Register */\r
+  #define REG_HSMC_SIGMA17    (*(__IO uint32_t*)0xFC05C56CU) /**< \brief (HSMC) PMECC Error Location SIGMA 17 Register */\r
+  #define REG_HSMC_SIGMA18    (*(__IO uint32_t*)0xFC05C570U) /**< \brief (HSMC) PMECC Error Location SIGMA 18 Register */\r
+  #define REG_HSMC_SIGMA19    (*(__IO uint32_t*)0xFC05C574U) /**< \brief (HSMC) PMECC Error Location SIGMA 19 Register */\r
+  #define REG_HSMC_SIGMA20    (*(__IO uint32_t*)0xFC05C578U) /**< \brief (HSMC) PMECC Error Location SIGMA 20 Register */\r
+  #define REG_HSMC_SIGMA21    (*(__IO uint32_t*)0xFC05C57CU) /**< \brief (HSMC) PMECC Error Location SIGMA 21 Register */\r
+  #define REG_HSMC_SIGMA22    (*(__IO uint32_t*)0xFC05C580U) /**< \brief (HSMC) PMECC Error Location SIGMA 22 Register */\r
+  #define REG_HSMC_SIGMA23    (*(__IO uint32_t*)0xFC05C584U) /**< \brief (HSMC) PMECC Error Location SIGMA 23 Register */\r
+  #define REG_HSMC_SIGMA24    (*(__IO uint32_t*)0xFC05C588U) /**< \brief (HSMC) PMECC Error Location SIGMA 24 Register */\r
+  #define REG_HSMC_ERRLOC     (*(__I  uint32_t*)0xFC05C58CU) /**< \brief (HSMC) PMECC Error Location 0 Register */\r
+  #define REG_HSMC_SETUP0     (*(__IO uint32_t*)0xFC05C600U) /**< \brief (HSMC) HSMC Setup Register (CS_number = 0) */\r
+  #define REG_HSMC_PULSE0     (*(__IO uint32_t*)0xFC05C604U) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 0) */\r
+  #define REG_HSMC_CYCLE0     (*(__IO uint32_t*)0xFC05C608U) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 0) */\r
+  #define REG_HSMC_TIMINGS0   (*(__IO uint32_t*)0xFC05C60CU) /**< \brief (HSMC) HSMC Timings Register (CS_number = 0) */\r
+  #define REG_HSMC_MODE0      (*(__IO uint32_t*)0xFC05C610U) /**< \brief (HSMC) HSMC Mode Register (CS_number = 0) */\r
+  #define REG_HSMC_SETUP1     (*(__IO uint32_t*)0xFC05C614U) /**< \brief (HSMC) HSMC Setup Register (CS_number = 1) */\r
+  #define REG_HSMC_PULSE1     (*(__IO uint32_t*)0xFC05C618U) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 1) */\r
+  #define REG_HSMC_CYCLE1     (*(__IO uint32_t*)0xFC05C61CU) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 1) */\r
+  #define REG_HSMC_TIMINGS1   (*(__IO uint32_t*)0xFC05C620U) /**< \brief (HSMC) HSMC Timings Register (CS_number = 1) */\r
+  #define REG_HSMC_MODE1      (*(__IO uint32_t*)0xFC05C624U) /**< \brief (HSMC) HSMC Mode Register (CS_number = 1) */\r
+  #define REG_HSMC_SETUP2     (*(__IO uint32_t*)0xFC05C628U) /**< \brief (HSMC) HSMC Setup Register (CS_number = 2) */\r
+  #define REG_HSMC_PULSE2     (*(__IO uint32_t*)0xFC05C62CU) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 2) */\r
+  #define REG_HSMC_CYCLE2     (*(__IO uint32_t*)0xFC05C630U) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 2) */\r
+  #define REG_HSMC_TIMINGS2   (*(__IO uint32_t*)0xFC05C634U) /**< \brief (HSMC) HSMC Timings Register (CS_number = 2) */\r
+  #define REG_HSMC_MODE2      (*(__IO uint32_t*)0xFC05C638U) /**< \brief (HSMC) HSMC Mode Register (CS_number = 2) */\r
+  #define REG_HSMC_SETUP3     (*(__IO uint32_t*)0xFC05C63CU) /**< \brief (HSMC) HSMC Setup Register (CS_number = 3) */\r
+  #define REG_HSMC_PULSE3     (*(__IO uint32_t*)0xFC05C640U) /**< \brief (HSMC) HSMC Pulse Register (CS_number = 3) */\r
+  #define REG_HSMC_CYCLE3     (*(__IO uint32_t*)0xFC05C644U) /**< \brief (HSMC) HSMC Cycle Register (CS_number = 3) */\r
+  #define REG_HSMC_TIMINGS3   (*(__IO uint32_t*)0xFC05C648U) /**< \brief (HSMC) HSMC Timings Register (CS_number = 3) */\r
+  #define REG_HSMC_MODE3      (*(__IO uint32_t*)0xFC05C64CU) /**< \brief (HSMC) HSMC Mode Register (CS_number = 3) */\r
+  #define REG_HSMC_OCMS       (*(__IO uint32_t*)0xFC05C6A0U) /**< \brief (HSMC) HSMC OCMS Register */\r
+  #define REG_HSMC_KEY1       (*(__O  uint32_t*)0xFC05C6A4U) /**< \brief (HSMC) HSMC OCMS KEY1 Register */\r
+  #define REG_HSMC_KEY2       (*(__O  uint32_t*)0xFC05C6A8U) /**< \brief (HSMC) HSMC OCMS KEY2 Register */\r
+  #define REG_HSMC_WPCR       (*(__O  uint32_t*)0xFC05C6E4U) /**< \brief (HSMC) HSMC Write Protection Control Register */\r
+  #define REG_HSMC_WPSR       (*(__I  uint32_t*)0xFC05C6E8U) /**< \brief (HSMC) HSMC Write Protection Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SFC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SFC_KR                   (0xFC060000U) /**< \brief (SFC) SFC Key Register */\r
+  #define REG_SFC_MR                   (0xFC060004U) /**< \brief (SFC) SFC Mode Register */\r
+  #define REG_SFC_IER                  (0xFC060010U) /**< \brief (SFC) SFC Interrupt Enable Register */\r
+  #define REG_SFC_IDR                  (0xFC060014U) /**< \brief (SFC) SFC Interrupt Disable Register */\r
+  #define REG_SFC_IMR                  (0xFC060018U) /**< \brief (SFC) SFC Interrupt Mask Register */\r
+  #define REG_SFC_SR                   (0xFC06001CU) /**< \brief (SFC) SFC Status Register */\r
+  #define REG_SFC_DR                   (0xFC060020U) /**< \brief (SFC) SFC Data Register */\r
+#else\r
+  #define REG_SFC_KR  (*(__O  uint32_t*)0xFC060000U) /**< \brief (SFC) SFC Key Register */\r
+  #define REG_SFC_MR  (*(__IO uint32_t*)0xFC060004U) /**< \brief (SFC) SFC Mode Register */\r
+  #define REG_SFC_IER (*(__IO uint32_t*)0xFC060010U) /**< \brief (SFC) SFC Interrupt Enable Register */\r
+  #define REG_SFC_IDR (*(__IO uint32_t*)0xFC060014U) /**< \brief (SFC) SFC Interrupt Disable Register */\r
+  #define REG_SFC_IMR (*(__I  uint32_t*)0xFC060018U) /**< \brief (SFC) SFC Interrupt Mask Register */\r
+  #define REG_SFC_SR  (*(__I  uint32_t*)0xFC06001CU) /**< \brief (SFC) SFC Status Register */\r
+  #define REG_SFC_DR  (*(__IO uint32_t*)0xFC060020U) /**< \brief (SFC) SFC Data Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PIOD peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PIOD_PER                      (0xFC068000U) /**< \brief (PIOD) PIO Enable Register */\r
+  #define REG_PIOD_PDR                      (0xFC068004U) /**< \brief (PIOD) PIO Disable Register */\r
+  #define REG_PIOD_PSR                      (0xFC068008U) /**< \brief (PIOD) PIO Status Register */\r
+  #define REG_PIOD_ISLR                     (0xFC06800CU) /**< \brief (PIOD) PIO Interrupt Security Level Register */\r
+  #define REG_PIOD_OER                      (0xFC068010U) /**< \brief (PIOD) Output Enable Register */\r
+  #define REG_PIOD_ODR                      (0xFC068014U) /**< \brief (PIOD) Output Disable Register */\r
+  #define REG_PIOD_OSR                      (0xFC068018U) /**< \brief (PIOD) Output Status Register */\r
+  #define REG_PIOD_IFER                     (0xFC068020U) /**< \brief (PIOD) Glitch Input Filter Enable Register */\r
+  #define REG_PIOD_IFDR                     (0xFC068024U) /**< \brief (PIOD) Glitch Input Filter Disable Register */\r
+  #define REG_PIOD_IFSR                     (0xFC068028U) /**< \brief (PIOD) Glitch Input Filter Status Register */\r
+  #define REG_PIOD_SODR                     (0xFC068030U) /**< \brief (PIOD) Set Output Data Register */\r
+  #define REG_PIOD_CODR                     (0xFC068034U) /**< \brief (PIOD) Clear Output Data Register */\r
+  #define REG_PIOD_ODSR                     (0xFC068038U) /**< \brief (PIOD) Output Data Status Register */\r
+  #define REG_PIOD_PDSR                     (0xFC06803CU) /**< \brief (PIOD) Pin Data Status Register */\r
+  #define REG_PIOD_IER                      (0xFC068040U) /**< \brief (PIOD) Interrupt Enable Register */\r
+  #define REG_PIOD_IDR                      (0xFC068044U) /**< \brief (PIOD) Interrupt Disable Register */\r
+  #define REG_PIOD_IMR                      (0xFC068048U) /**< \brief (PIOD) Interrupt Mask Register */\r
+  #define REG_PIOD_ISR                      (0xFC06804CU) /**< \brief (PIOD) Interrupt Status Register */\r
+  #define REG_PIOD_MDER                     (0xFC068050U) /**< \brief (PIOD) Multi-driver Enable Register */\r
+  #define REG_PIOD_MDDR                     (0xFC068054U) /**< \brief (PIOD) Multi-driver Disable Register */\r
+  #define REG_PIOD_MDSR                     (0xFC068058U) /**< \brief (PIOD) Multi-driver Status Register */\r
+  #define REG_PIOD_PUDR                     (0xFC068060U) /**< \brief (PIOD) Pull-up Disable Register */\r
+  #define REG_PIOD_PUER                     (0xFC068064U) /**< \brief (PIOD) Pull-up Enable Register */\r
+  #define REG_PIOD_PUSR                     (0xFC068068U) /**< \brief (PIOD) Pad Pull-up Status Register */\r
+  #define REG_PIOD_ABCDSR                   (0xFC068070U) /**< \brief (PIOD) Peripheral Select Register */\r
+  #define REG_PIOD_IFSCDR                   (0xFC068080U) /**< \brief (PIOD) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOD_IFSCER                   (0xFC068084U) /**< \brief (PIOD) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOD_IFSCSR                   (0xFC068088U) /**< \brief (PIOD) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOD_SCDR                     (0xFC06808CU) /**< \brief (PIOD) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOD_PPDDR                    (0xFC068090U) /**< \brief (PIOD) Pad Pull-down Disable Register */\r
+  #define REG_PIOD_PPDER                    (0xFC068094U) /**< \brief (PIOD) Pad Pull-down Enable Register */\r
+  #define REG_PIOD_PPDSR                    (0xFC068098U) /**< \brief (PIOD) Pad Pull-down Status Register */\r
+  #define REG_PIOD_OWER                     (0xFC0680A0U) /**< \brief (PIOD) Output Write Enable */\r
+  #define REG_PIOD_OWDR                     (0xFC0680A4U) /**< \brief (PIOD) Output Write Disable */\r
+  #define REG_PIOD_OWSR                     (0xFC0680A8U) /**< \brief (PIOD) Output Write Status Register */\r
+  #define REG_PIOD_AIMER                    (0xFC0680B0U) /**< \brief (PIOD) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOD_AIMDR                    (0xFC0680B4U) /**< \brief (PIOD) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOD_AIMMR                    (0xFC0680B8U) /**< \brief (PIOD) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOD_ESR                      (0xFC0680C0U) /**< \brief (PIOD) Edge Select Register */\r
+  #define REG_PIOD_LSR                      (0xFC0680C4U) /**< \brief (PIOD) Level Select Register */\r
+  #define REG_PIOD_ELSR                     (0xFC0680C8U) /**< \brief (PIOD) Edge/Level Status Register */\r
+  #define REG_PIOD_FELLSR                   (0xFC0680D0U) /**< \brief (PIOD) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOD_REHLSR                   (0xFC0680D4U) /**< \brief (PIOD) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOD_FRLHSR                   (0xFC0680D8U) /**< \brief (PIOD) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOD_WPMR                     (0xFC0680E4U) /**< \brief (PIOD) Write Protect Mode Register */\r
+  #define REG_PIOD_WPSR                     (0xFC0680E8U) /**< \brief (PIOD) Write Protect Status Register */\r
+  #define REG_PIOD_SCHMITT                  (0xFC068100U) /**< \brief (PIOD) Schmitt Trigger Register */\r
+  #define REG_PIOD_DRIVER1                  (0xFC068118U) /**< \brief (PIOD) I/O Drive Register 1 */\r
+  #define REG_PIOD_DRIVER2                  (0xFC06811CU) /**< \brief (PIOD) I/O Drive Register 2 */\r
+#else\r
+  #define REG_PIOD_PER     (*(__O  uint32_t*)0xFC068000U) /**< \brief (PIOD) PIO Enable Register */\r
+  #define REG_PIOD_PDR     (*(__O  uint32_t*)0xFC068004U) /**< \brief (PIOD) PIO Disable Register */\r
+  #define REG_PIOD_PSR     (*(__I  uint32_t*)0xFC068008U) /**< \brief (PIOD) PIO Status Register */\r
+  #define REG_PIOD_ISLR    (*(__IO uint32_t*)0xFC06800CU) /**< \brief (PIOD) PIO Interrupt Security Level Register */\r
+  #define REG_PIOD_OER     (*(__O  uint32_t*)0xFC068010U) /**< \brief (PIOD) Output Enable Register */\r
+  #define REG_PIOD_ODR     (*(__O  uint32_t*)0xFC068014U) /**< \brief (PIOD) Output Disable Register */\r
+  #define REG_PIOD_OSR     (*(__I  uint32_t*)0xFC068018U) /**< \brief (PIOD) Output Status Register */\r
+  #define REG_PIOD_IFER    (*(__O  uint32_t*)0xFC068020U) /**< \brief (PIOD) Glitch Input Filter Enable Register */\r
+  #define REG_PIOD_IFDR    (*(__O  uint32_t*)0xFC068024U) /**< \brief (PIOD) Glitch Input Filter Disable Register */\r
+  #define REG_PIOD_IFSR    (*(__I  uint32_t*)0xFC068028U) /**< \brief (PIOD) Glitch Input Filter Status Register */\r
+  #define REG_PIOD_SODR    (*(__O  uint32_t*)0xFC068030U) /**< \brief (PIOD) Set Output Data Register */\r
+  #define REG_PIOD_CODR    (*(__O  uint32_t*)0xFC068034U) /**< \brief (PIOD) Clear Output Data Register */\r
+  #define REG_PIOD_ODSR    (*(__IO uint32_t*)0xFC068038U) /**< \brief (PIOD) Output Data Status Register */\r
+  #define REG_PIOD_PDSR    (*(__I  uint32_t*)0xFC06803CU) /**< \brief (PIOD) Pin Data Status Register */\r
+  #define REG_PIOD_IER     (*(__O  uint32_t*)0xFC068040U) /**< \brief (PIOD) Interrupt Enable Register */\r
+  #define REG_PIOD_IDR     (*(__O  uint32_t*)0xFC068044U) /**< \brief (PIOD) Interrupt Disable Register */\r
+  #define REG_PIOD_IMR     (*(__I  uint32_t*)0xFC068048U) /**< \brief (PIOD) Interrupt Mask Register */\r
+  #define REG_PIOD_ISR     (*(__I  uint32_t*)0xFC06804CU) /**< \brief (PIOD) Interrupt Status Register */\r
+  #define REG_PIOD_MDER    (*(__O  uint32_t*)0xFC068050U) /**< \brief (PIOD) Multi-driver Enable Register */\r
+  #define REG_PIOD_MDDR    (*(__O  uint32_t*)0xFC068054U) /**< \brief (PIOD) Multi-driver Disable Register */\r
+  #define REG_PIOD_MDSR    (*(__I  uint32_t*)0xFC068058U) /**< \brief (PIOD) Multi-driver Status Register */\r
+  #define REG_PIOD_PUDR    (*(__O  uint32_t*)0xFC068060U) /**< \brief (PIOD) Pull-up Disable Register */\r
+  #define REG_PIOD_PUER    (*(__O  uint32_t*)0xFC068064U) /**< \brief (PIOD) Pull-up Enable Register */\r
+  #define REG_PIOD_PUSR    (*(__I  uint32_t*)0xFC068068U) /**< \brief (PIOD) Pad Pull-up Status Register */\r
+  #define REG_PIOD_ABCDSR  (*(__IO uint32_t*)0xFC068070U) /**< \brief (PIOD) Peripheral Select Register */\r
+  #define REG_PIOD_IFSCDR  (*(__O  uint32_t*)0xFC068080U) /**< \brief (PIOD) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOD_IFSCER  (*(__O  uint32_t*)0xFC068084U) /**< \brief (PIOD) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOD_IFSCSR  (*(__I  uint32_t*)0xFC068088U) /**< \brief (PIOD) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOD_SCDR    (*(__IO uint32_t*)0xFC06808CU) /**< \brief (PIOD) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOD_PPDDR   (*(__O  uint32_t*)0xFC068090U) /**< \brief (PIOD) Pad Pull-down Disable Register */\r
+  #define REG_PIOD_PPDER   (*(__O  uint32_t*)0xFC068094U) /**< \brief (PIOD) Pad Pull-down Enable Register */\r
+  #define REG_PIOD_PPDSR   (*(__I  uint32_t*)0xFC068098U) /**< \brief (PIOD) Pad Pull-down Status Register */\r
+  #define REG_PIOD_OWER    (*(__O  uint32_t*)0xFC0680A0U) /**< \brief (PIOD) Output Write Enable */\r
+  #define REG_PIOD_OWDR    (*(__O  uint32_t*)0xFC0680A4U) /**< \brief (PIOD) Output Write Disable */\r
+  #define REG_PIOD_OWSR    (*(__I  uint32_t*)0xFC0680A8U) /**< \brief (PIOD) Output Write Status Register */\r
+  #define REG_PIOD_AIMER   (*(__O  uint32_t*)0xFC0680B0U) /**< \brief (PIOD) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOD_AIMDR   (*(__O  uint32_t*)0xFC0680B4U) /**< \brief (PIOD) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOD_AIMMR   (*(__I  uint32_t*)0xFC0680B8U) /**< \brief (PIOD) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOD_ESR     (*(__O  uint32_t*)0xFC0680C0U) /**< \brief (PIOD) Edge Select Register */\r
+  #define REG_PIOD_LSR     (*(__O  uint32_t*)0xFC0680C4U) /**< \brief (PIOD) Level Select Register */\r
+  #define REG_PIOD_ELSR    (*(__I  uint32_t*)0xFC0680C8U) /**< \brief (PIOD) Edge/Level Status Register */\r
+  #define REG_PIOD_FELLSR  (*(__O  uint32_t*)0xFC0680D0U) /**< \brief (PIOD) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOD_REHLSR  (*(__O  uint32_t*)0xFC0680D4U) /**< \brief (PIOD) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOD_FRLHSR  (*(__I  uint32_t*)0xFC0680D8U) /**< \brief (PIOD) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOD_WPMR    (*(__IO uint32_t*)0xFC0680E4U) /**< \brief (PIOD) Write Protect Mode Register */\r
+  #define REG_PIOD_WPSR    (*(__I  uint32_t*)0xFC0680E8U) /**< \brief (PIOD) Write Protect Status Register */\r
+  #define REG_PIOD_SCHMITT (*(__IO uint32_t*)0xFC068100U) /**< \brief (PIOD) Schmitt Trigger Register */\r
+  #define REG_PIOD_DRIVER1 (*(__IO uint32_t*)0xFC068118U) /**< \brief (PIOD) I/O Drive Register 1 */\r
+  #define REG_PIOD_DRIVER2 (*(__IO uint32_t*)0xFC06811CU) /**< \brief (PIOD) I/O Drive Register 2 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SAIC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SAIC_SSR                    (0xFC068400U) /**< \brief (SAIC) Source Select Register */\r
+  #define REG_SAIC_SMR                    (0xFC068404U) /**< \brief (SAIC) Source Mode Register */\r
+  #define REG_SAIC_SVR                    (0xFC068408U) /**< \brief (SAIC) Source Vector Register */\r
+  #define REG_SAIC_IVR                    (0xFC068410U) /**< \brief (SAIC) Interrupt Vector Register */\r
+  #define REG_SAIC_FVR                    (0xFC068414U) /**< \brief (SAIC) FIQ Interrupt Vector Register */\r
+  #define REG_SAIC_ISR                    (0xFC068418U) /**< \brief (SAIC) Interrupt Status Register */\r
+  #define REG_SAIC_IPR0                   (0xFC068420U) /**< \brief (SAIC) Interrupt Pending Register 0 */\r
+  #define REG_SAIC_IPR1                   (0xFC068424U) /**< \brief (SAIC) Interrupt Pending Register 1 */\r
+  #define REG_SAIC_IPR2                   (0xFC068428U) /**< \brief (SAIC) Interrupt Pending Register 2 */\r
+  #define REG_SAIC_IPR3                   (0xFC06842CU) /**< \brief (SAIC) Interrupt Pending Register 3 */\r
+  #define REG_SAIC_IMR                    (0xFC068430U) /**< \brief (SAIC) Interrupt Mask Register */\r
+  #define REG_SAIC_CISR                   (0xFC068434U) /**< \brief (SAIC) Core Interrupt Status Register */\r
+  #define REG_SAIC_EOICR                  (0xFC068438U) /**< \brief (SAIC) End of Interrupt Command Register */\r
+  #define REG_SAIC_SPU                    (0xFC06843CU) /**< \brief (SAIC) Spurious Interrupt Vector Register */\r
+  #define REG_SAIC_IECR                   (0xFC068440U) /**< \brief (SAIC) Interrupt Enable Command Register */\r
+  #define REG_SAIC_IDCR                   (0xFC068444U) /**< \brief (SAIC) Interrupt Disable Command Register */\r
+  #define REG_SAIC_ICCR                   (0xFC068448U) /**< \brief (SAIC) Interrupt Clear Command Register */\r
+  #define REG_SAIC_ISCR                   (0xFC06844CU) /**< \brief (SAIC) Interrupt Set Command Register */\r
+  #define REG_SAIC_FFER                   (0xFC068450U) /**< \brief (SAIC) Fast Forcing Enable Register */\r
+  #define REG_SAIC_FFDR                   (0xFC068454U) /**< \brief (SAIC) Fast Forcing Disable Register */\r
+  #define REG_SAIC_FFSR                   (0xFC068458U) /**< \brief (SAIC) Fast Forcing Status Register */\r
+  #define REG_SAIC_DCR                    (0xFC06846CU) /**< \brief (SAIC) Debug Control Register */\r
+  #define REG_SAIC_WPMR                   (0xFC0684E4U) /**< \brief (SAIC) Write Protect Mode Register */\r
+  #define REG_SAIC_WPSR                   (0xFC0684E8U) /**< \brief (SAIC) Write Protect Status Register */\r
+#else\r
+  #define REG_SAIC_SSR   (*(__IO uint32_t*)0xFC068400U) /**< \brief (SAIC) Source Select Register */\r
+  #define REG_SAIC_SMR   (*(__IO uint32_t*)0xFC068404U) /**< \brief (SAIC) Source Mode Register */\r
+  #define REG_SAIC_SVR   (*(__IO uint32_t*)0xFC068408U) /**< \brief (SAIC) Source Vector Register */\r
+  #define REG_SAIC_IVR   (*(__I  uint32_t*)0xFC068410U) /**< \brief (SAIC) Interrupt Vector Register */\r
+  #define REG_SAIC_FVR   (*(__I  uint32_t*)0xFC068414U) /**< \brief (SAIC) FIQ Interrupt Vector Register */\r
+  #define REG_SAIC_ISR   (*(__I  uint32_t*)0xFC068418U) /**< \brief (SAIC) Interrupt Status Register */\r
+  #define REG_SAIC_IPR0  (*(__I  uint32_t*)0xFC068420U) /**< \brief (SAIC) Interrupt Pending Register 0 */\r
+  #define REG_SAIC_IPR1  (*(__I  uint32_t*)0xFC068424U) /**< \brief (SAIC) Interrupt Pending Register 1 */\r
+  #define REG_SAIC_IPR2  (*(__I  uint32_t*)0xFC068428U) /**< \brief (SAIC) Interrupt Pending Register 2 */\r
+  #define REG_SAIC_IPR3  (*(__I  uint32_t*)0xFC06842CU) /**< \brief (SAIC) Interrupt Pending Register 3 */\r
+  #define REG_SAIC_IMR   (*(__I  uint32_t*)0xFC068430U) /**< \brief (SAIC) Interrupt Mask Register */\r
+  #define REG_SAIC_CISR  (*(__I  uint32_t*)0xFC068434U) /**< \brief (SAIC) Core Interrupt Status Register */\r
+  #define REG_SAIC_EOICR (*(__O  uint32_t*)0xFC068438U) /**< \brief (SAIC) End of Interrupt Command Register */\r
+  #define REG_SAIC_SPU   (*(__IO uint32_t*)0xFC06843CU) /**< \brief (SAIC) Spurious Interrupt Vector Register */\r
+  #define REG_SAIC_IECR  (*(__O  uint32_t*)0xFC068440U) /**< \brief (SAIC) Interrupt Enable Command Register */\r
+  #define REG_SAIC_IDCR  (*(__O  uint32_t*)0xFC068444U) /**< \brief (SAIC) Interrupt Disable Command Register */\r
+  #define REG_SAIC_ICCR  (*(__O  uint32_t*)0xFC068448U) /**< \brief (SAIC) Interrupt Clear Command Register */\r
+  #define REG_SAIC_ISCR  (*(__O  uint32_t*)0xFC06844CU) /**< \brief (SAIC) Interrupt Set Command Register */\r
+  #define REG_SAIC_FFER  (*(__O  uint32_t*)0xFC068450U) /**< \brief (SAIC) Fast Forcing Enable Register */\r
+  #define REG_SAIC_FFDR  (*(__O  uint32_t*)0xFC068454U) /**< \brief (SAIC) Fast Forcing Disable Register */\r
+  #define REG_SAIC_FFSR  (*(__I  uint32_t*)0xFC068458U) /**< \brief (SAIC) Fast Forcing Status Register */\r
+  #define REG_SAIC_DCR   (*(__IO uint32_t*)0xFC06846CU) /**< \brief (SAIC) Debug Control Register */\r
+  #define REG_SAIC_WPMR  (*(__IO uint32_t*)0xFC0684E4U) /**< \brief (SAIC) Write Protect Mode Register */\r
+  #define REG_SAIC_WPSR  (*(__I  uint32_t*)0xFC0684E8U) /**< \brief (SAIC) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for RSTC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_RSTC_CR                  (0xFC068600U) /**< \brief (RSTC) Control Register */\r
+  #define REG_RSTC_SR                  (0xFC068604U) /**< \brief (RSTC) Status Register */\r
+  #define REG_RSTC_MR                  (0xFC068608U) /**< \brief (RSTC) Mode Register */\r
+#else\r
+  #define REG_RSTC_CR (*(__O  uint32_t*)0xFC068600U) /**< \brief (RSTC) Control Register */\r
+  #define REG_RSTC_SR (*(__I  uint32_t*)0xFC068604U) /**< \brief (RSTC) Status Register */\r
+  #define REG_RSTC_MR (*(__IO uint32_t*)0xFC068608U) /**< \brief (RSTC) Mode Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SHDWC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SHDWC_CR                  (0xFC068610U) /**< \brief (SHDWC) Shutdown Control Register */\r
+  #define REG_SHDWC_MR                  (0xFC068614U) /**< \brief (SHDWC) Shutdown Mode Register */\r
+  #define REG_SHDWC_SR                  (0xFC068618U) /**< \brief (SHDWC) Shutdown Status Register */\r
+#else\r
+  #define REG_SHDWC_CR (*(__O  uint32_t*)0xFC068610U) /**< \brief (SHDWC) Shutdown Control Register */\r
+  #define REG_SHDWC_MR (*(__IO uint32_t*)0xFC068614U) /**< \brief (SHDWC) Shutdown Mode Register */\r
+  #define REG_SHDWC_SR (*(__I  uint32_t*)0xFC068618U) /**< \brief (SHDWC) Shutdown Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PIT peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PIT_MR                    (0xFC068630U) /**< \brief (PIT) Mode Register */\r
+  #define REG_PIT_SR                    (0xFC068634U) /**< \brief (PIT) Status Register */\r
+  #define REG_PIT_PIVR                  (0xFC068638U) /**< \brief (PIT) Periodic Interval Value Register */\r
+  #define REG_PIT_PIIR                  (0xFC06863CU) /**< \brief (PIT) Periodic Interval Image Register */\r
+#else\r
+  #define REG_PIT_MR   (*(__IO uint32_t*)0xFC068630U) /**< \brief (PIT) Mode Register */\r
+  #define REG_PIT_SR   (*(__I  uint32_t*)0xFC068634U) /**< \brief (PIT) Status Register */\r
+  #define REG_PIT_PIVR (*(__I  uint32_t*)0xFC068638U) /**< \brief (PIT) Periodic Interval Value Register */\r
+  #define REG_PIT_PIIR (*(__I  uint32_t*)0xFC06863CU) /**< \brief (PIT) Periodic Interval Image Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for WDT peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_WDT_CR                  (0xFC068640U) /**< \brief (WDT) Control Register */\r
+  #define REG_WDT_MR                  (0xFC068644U) /**< \brief (WDT) Mode Register */\r
+  #define REG_WDT_SR                  (0xFC068648U) /**< \brief (WDT) Status Register */\r
+#else\r
+  #define REG_WDT_CR (*(__O  uint32_t*)0xFC068640U) /**< \brief (WDT) Control Register */\r
+  #define REG_WDT_MR (*(__IO uint32_t*)0xFC068644U) /**< \brief (WDT) Mode Register */\r
+  #define REG_WDT_SR (*(__I  uint32_t*)0xFC068648U) /**< \brief (WDT) Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for SCKC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_SCKC_CR                  (0xFC068650U) /**< \brief (SCKC) Slow Clock Configuration Register */\r
+#else\r
+  #define REG_SCKC_CR (*(__IO uint32_t*)0xFC068650U) /**< \brief (SCKC) Slow Clock Configuration Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for RTC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_RTC_CR                      (0xFC0686B0U) /**< \brief (RTC) Control Register */\r
+  #define REG_RTC_MR                      (0xFC0686B4U) /**< \brief (RTC) Mode Register */\r
+  #define REG_RTC_TIMR                    (0xFC0686B8U) /**< \brief (RTC) Time Register */\r
+  #define REG_RTC_CALR                    (0xFC0686BCU) /**< \brief (RTC) Calendar Register */\r
+  #define REG_RTC_TIMALR                  (0xFC0686C0U) /**< \brief (RTC) Time Alarm Register */\r
+  #define REG_RTC_CALALR                  (0xFC0686C4U) /**< \brief (RTC) Calendar Alarm Register */\r
+  #define REG_RTC_SR                      (0xFC0686C8U) /**< \brief (RTC) Status Register */\r
+  #define REG_RTC_SCCR                    (0xFC0686CCU) /**< \brief (RTC) Status Clear Command Register */\r
+  #define REG_RTC_IER                     (0xFC0686D0U) /**< \brief (RTC) Interrupt Enable Register */\r
+  #define REG_RTC_IDR                     (0xFC0686D4U) /**< \brief (RTC) Interrupt Disable Register */\r
+  #define REG_RTC_IMR                     (0xFC0686D8U) /**< \brief (RTC) Interrupt Mask Register */\r
+  #define REG_RTC_VER                     (0xFC0686DCU) /**< \brief (RTC) Valid Entry Register */\r
+  #define REG_RTC_TSTR0                   (0xFC068760U) /**< \brief (RTC) TimeStamp Time Register 0 */\r
+  #define REG_RTC_TSDR0                   (0xFC068764U) /**< \brief (RTC) TimeStamp Date Register 0 */\r
+  #define REG_RTC_TSSR0                   (0xFC068768U) /**< \brief (RTC) TimeStamp Source Register 0 */\r
+  #define REG_RTC_TSTR1                   (0xFC06876CU) /**< \brief (RTC) TimeStamp Time Register 1 */\r
+  #define REG_RTC_TSDR1                   (0xFC068770U) /**< \brief (RTC) TimeStamp Date Register 1 */\r
+  #define REG_RTC_TSSR1                   (0xFC068774U) /**< \brief (RTC) TimeStamp Source Register 1 */\r
+#else\r
+  #define REG_RTC_CR     (*(__IO uint32_t*)0xFC0686B0U) /**< \brief (RTC) Control Register */\r
+  #define REG_RTC_MR     (*(__IO uint32_t*)0xFC0686B4U) /**< \brief (RTC) Mode Register */\r
+  #define REG_RTC_TIMR   (*(__IO uint32_t*)0xFC0686B8U) /**< \brief (RTC) Time Register */\r
+  #define REG_RTC_CALR   (*(__IO uint32_t*)0xFC0686BCU) /**< \brief (RTC) Calendar Register */\r
+  #define REG_RTC_TIMALR (*(__IO uint32_t*)0xFC0686C0U) /**< \brief (RTC) Time Alarm Register */\r
+  #define REG_RTC_CALALR (*(__IO uint32_t*)0xFC0686C4U) /**< \brief (RTC) Calendar Alarm Register */\r
+  #define REG_RTC_SR     (*(__I  uint32_t*)0xFC0686C8U) /**< \brief (RTC) Status Register */\r
+  #define REG_RTC_SCCR   (*(__O  uint32_t*)0xFC0686CCU) /**< \brief (RTC) Status Clear Command Register */\r
+  #define REG_RTC_IER    (*(__O  uint32_t*)0xFC0686D0U) /**< \brief (RTC) Interrupt Enable Register */\r
+  #define REG_RTC_IDR    (*(__O  uint32_t*)0xFC0686D4U) /**< \brief (RTC) Interrupt Disable Register */\r
+  #define REG_RTC_IMR    (*(__I  uint32_t*)0xFC0686D8U) /**< \brief (RTC) Interrupt Mask Register */\r
+  #define REG_RTC_VER    (*(__I  uint32_t*)0xFC0686DCU) /**< \brief (RTC) Valid Entry Register */\r
+  #define REG_RTC_TSTR0  (*(__I  uint32_t*)0xFC068760U) /**< \brief (RTC) TimeStamp Time Register 0 */\r
+  #define REG_RTC_TSDR0  (*(__I  uint32_t*)0xFC068764U) /**< \brief (RTC) TimeStamp Date Register 0 */\r
+  #define REG_RTC_TSSR0  (*(__I  uint32_t*)0xFC068768U) /**< \brief (RTC) TimeStamp Source Register 0 */\r
+  #define REG_RTC_TSTR1  (*(__I  uint32_t*)0xFC06876CU) /**< \brief (RTC) TimeStamp Time Register 1 */\r
+  #define REG_RTC_TSDR1  (*(__I  uint32_t*)0xFC068770U) /**< \brief (RTC) TimeStamp Date Register 1 */\r
+  #define REG_RTC_TSSR1  (*(__I  uint32_t*)0xFC068774U) /**< \brief (RTC) TimeStamp Source Register 1 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for DBGU peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_DBGU_CR                    (0xFC069000U) /**< \brief (DBGU) Control Register */\r
+  #define REG_DBGU_MR                    (0xFC069004U) /**< \brief (DBGU) Mode Register */\r
+  #define REG_DBGU_IER                   (0xFC069008U) /**< \brief (DBGU) Interrupt Enable Register */\r
+  #define REG_DBGU_IDR                   (0xFC06900CU) /**< \brief (DBGU) Interrupt Disable Register */\r
+  #define REG_DBGU_IMR                   (0xFC069010U) /**< \brief (DBGU) Interrupt Mask Register */\r
+  #define REG_DBGU_SR                    (0xFC069014U) /**< \brief (DBGU) Status Register */\r
+  #define REG_DBGU_RHR                   (0xFC069018U) /**< \brief (DBGU) Receive Holding Register */\r
+  #define REG_DBGU_THR                   (0xFC06901CU) /**< \brief (DBGU) Transmit Holding Register */\r
+  #define REG_DBGU_BRGR                  (0xFC069020U) /**< \brief (DBGU) Baud Rate Generator Register */\r
+  #define REG_DBGU_CIDR                  (0xFC069040U) /**< \brief (DBGU) Chip ID Register */\r
+  #define REG_DBGU_EXID                  (0xFC069044U) /**< \brief (DBGU) Chip ID Extension Register */\r
+  #define REG_DBGU_FNR                   (0xFC069048U) /**< \brief (DBGU) Force NTRST Register */\r
+#else\r
+  #define REG_DBGU_CR   (*(__O  uint32_t*)0xFC069000U) /**< \brief (DBGU) Control Register */\r
+  #define REG_DBGU_MR   (*(__IO uint32_t*)0xFC069004U) /**< \brief (DBGU) Mode Register */\r
+  #define REG_DBGU_IER  (*(__O  uint32_t*)0xFC069008U) /**< \brief (DBGU) Interrupt Enable Register */\r
+  #define REG_DBGU_IDR  (*(__O  uint32_t*)0xFC06900CU) /**< \brief (DBGU) Interrupt Disable Register */\r
+  #define REG_DBGU_IMR  (*(__I  uint32_t*)0xFC069010U) /**< \brief (DBGU) Interrupt Mask Register */\r
+  #define REG_DBGU_SR   (*(__I  uint32_t*)0xFC069014U) /**< \brief (DBGU) Status Register */\r
+  #define REG_DBGU_RHR  (*(__I  uint32_t*)0xFC069018U) /**< \brief (DBGU) Receive Holding Register */\r
+  #define REG_DBGU_THR  (*(__O  uint32_t*)0xFC06901CU) /**< \brief (DBGU) Transmit Holding Register */\r
+  #define REG_DBGU_BRGR (*(__IO uint32_t*)0xFC069020U) /**< \brief (DBGU) Baud Rate Generator Register */\r
+  #define REG_DBGU_CIDR (*(__I  uint32_t*)0xFC069040U) /**< \brief (DBGU) Chip ID Register */\r
+  #define REG_DBGU_EXID (*(__I  uint32_t*)0xFC069044U) /**< \brief (DBGU) Chip ID Extension Register */\r
+  #define REG_DBGU_FNR  (*(__IO uint32_t*)0xFC069048U) /**< \brief (DBGU) Force NTRST Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PIOA peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PIOA_PER                      (0xFC06A000U) /**< \brief (PIOA) PIO Enable Register */\r
+  #define REG_PIOA_PDR                      (0xFC06A004U) /**< \brief (PIOA) PIO Disable Register */\r
+  #define REG_PIOA_PSR                      (0xFC06A008U) /**< \brief (PIOA) PIO Status Register */\r
+  #define REG_PIOA_ISLR                     (0xFC06A00CU) /**< \brief (PIOA) PIO Interrupt Security Level Register */\r
+  #define REG_PIOA_OER                      (0xFC06A010U) /**< \brief (PIOA) Output Enable Register */\r
+  #define REG_PIOA_ODR                      (0xFC06A014U) /**< \brief (PIOA) Output Disable Register */\r
+  #define REG_PIOA_OSR                      (0xFC06A018U) /**< \brief (PIOA) Output Status Register */\r
+  #define REG_PIOA_IFER                     (0xFC06A020U) /**< \brief (PIOA) Glitch Input Filter Enable Register */\r
+  #define REG_PIOA_IFDR                     (0xFC06A024U) /**< \brief (PIOA) Glitch Input Filter Disable Register */\r
+  #define REG_PIOA_IFSR                     (0xFC06A028U) /**< \brief (PIOA) Glitch Input Filter Status Register */\r
+  #define REG_PIOA_SODR                     (0xFC06A030U) /**< \brief (PIOA) Set Output Data Register */\r
+  #define REG_PIOA_CODR                     (0xFC06A034U) /**< \brief (PIOA) Clear Output Data Register */\r
+  #define REG_PIOA_ODSR                     (0xFC06A038U) /**< \brief (PIOA) Output Data Status Register */\r
+  #define REG_PIOA_PDSR                     (0xFC06A03CU) /**< \brief (PIOA) Pin Data Status Register */\r
+  #define REG_PIOA_IER                      (0xFC06A040U) /**< \brief (PIOA) Interrupt Enable Register */\r
+  #define REG_PIOA_IDR                      (0xFC06A044U) /**< \brief (PIOA) Interrupt Disable Register */\r
+  #define REG_PIOA_IMR                      (0xFC06A048U) /**< \brief (PIOA) Interrupt Mask Register */\r
+  #define REG_PIOA_ISR                      (0xFC06A04CU) /**< \brief (PIOA) Interrupt Status Register */\r
+  #define REG_PIOA_MDER                     (0xFC06A050U) /**< \brief (PIOA) Multi-driver Enable Register */\r
+  #define REG_PIOA_MDDR                     (0xFC06A054U) /**< \brief (PIOA) Multi-driver Disable Register */\r
+  #define REG_PIOA_MDSR                     (0xFC06A058U) /**< \brief (PIOA) Multi-driver Status Register */\r
+  #define REG_PIOA_PUDR                     (0xFC06A060U) /**< \brief (PIOA) Pull-up Disable Register */\r
+  #define REG_PIOA_PUER                     (0xFC06A064U) /**< \brief (PIOA) Pull-up Enable Register */\r
+  #define REG_PIOA_PUSR                     (0xFC06A068U) /**< \brief (PIOA) Pad Pull-up Status Register */\r
+  #define REG_PIOA_ABCDSR                   (0xFC06A070U) /**< \brief (PIOA) Peripheral Select Register */\r
+  #define REG_PIOA_IFSCDR                   (0xFC06A080U) /**< \brief (PIOA) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOA_IFSCER                   (0xFC06A084U) /**< \brief (PIOA) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOA_IFSCSR                   (0xFC06A088U) /**< \brief (PIOA) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOA_SCDR                     (0xFC06A08CU) /**< \brief (PIOA) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOA_PPDDR                    (0xFC06A090U) /**< \brief (PIOA) Pad Pull-down Disable Register */\r
+  #define REG_PIOA_PPDER                    (0xFC06A094U) /**< \brief (PIOA) Pad Pull-down Enable Register */\r
+  #define REG_PIOA_PPDSR                    (0xFC06A098U) /**< \brief (PIOA) Pad Pull-down Status Register */\r
+  #define REG_PIOA_OWER                     (0xFC06A0A0U) /**< \brief (PIOA) Output Write Enable */\r
+  #define REG_PIOA_OWDR                     (0xFC06A0A4U) /**< \brief (PIOA) Output Write Disable */\r
+  #define REG_PIOA_OWSR                     (0xFC06A0A8U) /**< \brief (PIOA) Output Write Status Register */\r
+  #define REG_PIOA_AIMER                    (0xFC06A0B0U) /**< \brief (PIOA) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOA_AIMDR                    (0xFC06A0B4U) /**< \brief (PIOA) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOA_AIMMR                    (0xFC06A0B8U) /**< \brief (PIOA) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOA_ESR                      (0xFC06A0C0U) /**< \brief (PIOA) Edge Select Register */\r
+  #define REG_PIOA_LSR                      (0xFC06A0C4U) /**< \brief (PIOA) Level Select Register */\r
+  #define REG_PIOA_ELSR                     (0xFC06A0C8U) /**< \brief (PIOA) Edge/Level Status Register */\r
+  #define REG_PIOA_FELLSR                   (0xFC06A0D0U) /**< \brief (PIOA) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOA_REHLSR                   (0xFC06A0D4U) /**< \brief (PIOA) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOA_FRLHSR                   (0xFC06A0D8U) /**< \brief (PIOA) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOA_WPMR                     (0xFC06A0E4U) /**< \brief (PIOA) Write Protect Mode Register */\r
+  #define REG_PIOA_WPSR                     (0xFC06A0E8U) /**< \brief (PIOA) Write Protect Status Register */\r
+  #define REG_PIOA_SCHMITT                  (0xFC06A100U) /**< \brief (PIOA) Schmitt Trigger Register */\r
+  #define REG_PIOA_DRIVER1                  (0xFC06A118U) /**< \brief (PIOA) I/O Drive Register 1 */\r
+  #define REG_PIOA_DRIVER2                  (0xFC06A11CU) /**< \brief (PIOA) I/O Drive Register 2 */\r
+#else\r
+  #define REG_PIOA_PER     (*(__O  uint32_t*)0xFC06A000U) /**< \brief (PIOA) PIO Enable Register */\r
+  #define REG_PIOA_PDR     (*(__O  uint32_t*)0xFC06A004U) /**< \brief (PIOA) PIO Disable Register */\r
+  #define REG_PIOA_PSR     (*(__I  uint32_t*)0xFC06A008U) /**< \brief (PIOA) PIO Status Register */\r
+  #define REG_PIOA_ISLR    (*(__IO uint32_t*)0xFC06A00CU) /**< \brief (PIOA) PIO Interrupt Security Level Register */\r
+  #define REG_PIOA_OER     (*(__O  uint32_t*)0xFC06A010U) /**< \brief (PIOA) Output Enable Register */\r
+  #define REG_PIOA_ODR     (*(__O  uint32_t*)0xFC06A014U) /**< \brief (PIOA) Output Disable Register */\r
+  #define REG_PIOA_OSR     (*(__I  uint32_t*)0xFC06A018U) /**< \brief (PIOA) Output Status Register */\r
+  #define REG_PIOA_IFER    (*(__O  uint32_t*)0xFC06A020U) /**< \brief (PIOA) Glitch Input Filter Enable Register */\r
+  #define REG_PIOA_IFDR    (*(__O  uint32_t*)0xFC06A024U) /**< \brief (PIOA) Glitch Input Filter Disable Register */\r
+  #define REG_PIOA_IFSR    (*(__I  uint32_t*)0xFC06A028U) /**< \brief (PIOA) Glitch Input Filter Status Register */\r
+  #define REG_PIOA_SODR    (*(__O  uint32_t*)0xFC06A030U) /**< \brief (PIOA) Set Output Data Register */\r
+  #define REG_PIOA_CODR    (*(__O  uint32_t*)0xFC06A034U) /**< \brief (PIOA) Clear Output Data Register */\r
+  #define REG_PIOA_ODSR    (*(__IO uint32_t*)0xFC06A038U) /**< \brief (PIOA) Output Data Status Register */\r
+  #define REG_PIOA_PDSR    (*(__I  uint32_t*)0xFC06A03CU) /**< \brief (PIOA) Pin Data Status Register */\r
+  #define REG_PIOA_IER     (*(__O  uint32_t*)0xFC06A040U) /**< \brief (PIOA) Interrupt Enable Register */\r
+  #define REG_PIOA_IDR     (*(__O  uint32_t*)0xFC06A044U) /**< \brief (PIOA) Interrupt Disable Register */\r
+  #define REG_PIOA_IMR     (*(__I  uint32_t*)0xFC06A048U) /**< \brief (PIOA) Interrupt Mask Register */\r
+  #define REG_PIOA_ISR     (*(__I  uint32_t*)0xFC06A04CU) /**< \brief (PIOA) Interrupt Status Register */\r
+  #define REG_PIOA_MDER    (*(__O  uint32_t*)0xFC06A050U) /**< \brief (PIOA) Multi-driver Enable Register */\r
+  #define REG_PIOA_MDDR    (*(__O  uint32_t*)0xFC06A054U) /**< \brief (PIOA) Multi-driver Disable Register */\r
+  #define REG_PIOA_MDSR    (*(__I  uint32_t*)0xFC06A058U) /**< \brief (PIOA) Multi-driver Status Register */\r
+  #define REG_PIOA_PUDR    (*(__O  uint32_t*)0xFC06A060U) /**< \brief (PIOA) Pull-up Disable Register */\r
+  #define REG_PIOA_PUER    (*(__O  uint32_t*)0xFC06A064U) /**< \brief (PIOA) Pull-up Enable Register */\r
+  #define REG_PIOA_PUSR    (*(__I  uint32_t*)0xFC06A068U) /**< \brief (PIOA) Pad Pull-up Status Register */\r
+  #define REG_PIOA_ABCDSR  (*(__IO uint32_t*)0xFC06A070U) /**< \brief (PIOA) Peripheral Select Register */\r
+  #define REG_PIOA_IFSCDR  (*(__O  uint32_t*)0xFC06A080U) /**< \brief (PIOA) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOA_IFSCER  (*(__O  uint32_t*)0xFC06A084U) /**< \brief (PIOA) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOA_IFSCSR  (*(__I  uint32_t*)0xFC06A088U) /**< \brief (PIOA) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOA_SCDR    (*(__IO uint32_t*)0xFC06A08CU) /**< \brief (PIOA) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOA_PPDDR   (*(__O  uint32_t*)0xFC06A090U) /**< \brief (PIOA) Pad Pull-down Disable Register */\r
+  #define REG_PIOA_PPDER   (*(__O  uint32_t*)0xFC06A094U) /**< \brief (PIOA) Pad Pull-down Enable Register */\r
+  #define REG_PIOA_PPDSR   (*(__I  uint32_t*)0xFC06A098U) /**< \brief (PIOA) Pad Pull-down Status Register */\r
+  #define REG_PIOA_OWER    (*(__O  uint32_t*)0xFC06A0A0U) /**< \brief (PIOA) Output Write Enable */\r
+  #define REG_PIOA_OWDR    (*(__O  uint32_t*)0xFC06A0A4U) /**< \brief (PIOA) Output Write Disable */\r
+  #define REG_PIOA_OWSR    (*(__I  uint32_t*)0xFC06A0A8U) /**< \brief (PIOA) Output Write Status Register */\r
+  #define REG_PIOA_AIMER   (*(__O  uint32_t*)0xFC06A0B0U) /**< \brief (PIOA) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOA_AIMDR   (*(__O  uint32_t*)0xFC06A0B4U) /**< \brief (PIOA) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOA_AIMMR   (*(__I  uint32_t*)0xFC06A0B8U) /**< \brief (PIOA) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOA_ESR     (*(__O  uint32_t*)0xFC06A0C0U) /**< \brief (PIOA) Edge Select Register */\r
+  #define REG_PIOA_LSR     (*(__O  uint32_t*)0xFC06A0C4U) /**< \brief (PIOA) Level Select Register */\r
+  #define REG_PIOA_ELSR    (*(__I  uint32_t*)0xFC06A0C8U) /**< \brief (PIOA) Edge/Level Status Register */\r
+  #define REG_PIOA_FELLSR  (*(__O  uint32_t*)0xFC06A0D0U) /**< \brief (PIOA) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOA_REHLSR  (*(__O  uint32_t*)0xFC06A0D4U) /**< \brief (PIOA) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOA_FRLHSR  (*(__I  uint32_t*)0xFC06A0D8U) /**< \brief (PIOA) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOA_WPMR    (*(__IO uint32_t*)0xFC06A0E4U) /**< \brief (PIOA) Write Protect Mode Register */\r
+  #define REG_PIOA_WPSR    (*(__I  uint32_t*)0xFC06A0E8U) /**< \brief (PIOA) Write Protect Status Register */\r
+  #define REG_PIOA_SCHMITT (*(__IO uint32_t*)0xFC06A100U) /**< \brief (PIOA) Schmitt Trigger Register */\r
+  #define REG_PIOA_DRIVER1 (*(__IO uint32_t*)0xFC06A118U) /**< \brief (PIOA) I/O Drive Register 1 */\r
+  #define REG_PIOA_DRIVER2 (*(__IO uint32_t*)0xFC06A11CU) /**< \brief (PIOA) I/O Drive Register 2 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PIOB peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PIOB_PER                      (0xFC06B000U) /**< \brief (PIOB) PIO Enable Register */\r
+  #define REG_PIOB_PDR                      (0xFC06B004U) /**< \brief (PIOB) PIO Disable Register */\r
+  #define REG_PIOB_PSR                      (0xFC06B008U) /**< \brief (PIOB) PIO Status Register */\r
+  #define REG_PIOB_ISLR                     (0xFC06B00CU) /**< \brief (PIOB) PIO Interrupt Security Level Register */\r
+  #define REG_PIOB_OER                      (0xFC06B010U) /**< \brief (PIOB) Output Enable Register */\r
+  #define REG_PIOB_ODR                      (0xFC06B014U) /**< \brief (PIOB) Output Disable Register */\r
+  #define REG_PIOB_OSR                      (0xFC06B018U) /**< \brief (PIOB) Output Status Register */\r
+  #define REG_PIOB_IFER                     (0xFC06B020U) /**< \brief (PIOB) Glitch Input Filter Enable Register */\r
+  #define REG_PIOB_IFDR                     (0xFC06B024U) /**< \brief (PIOB) Glitch Input Filter Disable Register */\r
+  #define REG_PIOB_IFSR                     (0xFC06B028U) /**< \brief (PIOB) Glitch Input Filter Status Register */\r
+  #define REG_PIOB_SODR                     (0xFC06B030U) /**< \brief (PIOB) Set Output Data Register */\r
+  #define REG_PIOB_CODR                     (0xFC06B034U) /**< \brief (PIOB) Clear Output Data Register */\r
+  #define REG_PIOB_ODSR                     (0xFC06B038U) /**< \brief (PIOB) Output Data Status Register */\r
+  #define REG_PIOB_PDSR                     (0xFC06B03CU) /**< \brief (PIOB) Pin Data Status Register */\r
+  #define REG_PIOB_IER                      (0xFC06B040U) /**< \brief (PIOB) Interrupt Enable Register */\r
+  #define REG_PIOB_IDR                      (0xFC06B044U) /**< \brief (PIOB) Interrupt Disable Register */\r
+  #define REG_PIOB_IMR                      (0xFC06B048U) /**< \brief (PIOB) Interrupt Mask Register */\r
+  #define REG_PIOB_ISR                      (0xFC06B04CU) /**< \brief (PIOB) Interrupt Status Register */\r
+  #define REG_PIOB_MDER                     (0xFC06B050U) /**< \brief (PIOB) Multi-driver Enable Register */\r
+  #define REG_PIOB_MDDR                     (0xFC06B054U) /**< \brief (PIOB) Multi-driver Disable Register */\r
+  #define REG_PIOB_MDSR                     (0xFC06B058U) /**< \brief (PIOB) Multi-driver Status Register */\r
+  #define REG_PIOB_PUDR                     (0xFC06B060U) /**< \brief (PIOB) Pull-up Disable Register */\r
+  #define REG_PIOB_PUER                     (0xFC06B064U) /**< \brief (PIOB) Pull-up Enable Register */\r
+  #define REG_PIOB_PUSR                     (0xFC06B068U) /**< \brief (PIOB) Pad Pull-up Status Register */\r
+  #define REG_PIOB_ABCDSR                   (0xFC06B070U) /**< \brief (PIOB) Peripheral Select Register */\r
+  #define REG_PIOB_IFSCDR                   (0xFC06B080U) /**< \brief (PIOB) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOB_IFSCER                   (0xFC06B084U) /**< \brief (PIOB) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOB_IFSCSR                   (0xFC06B088U) /**< \brief (PIOB) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOB_SCDR                     (0xFC06B08CU) /**< \brief (PIOB) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOB_PPDDR                    (0xFC06B090U) /**< \brief (PIOB) Pad Pull-down Disable Register */\r
+  #define REG_PIOB_PPDER                    (0xFC06B094U) /**< \brief (PIOB) Pad Pull-down Enable Register */\r
+  #define REG_PIOB_PPDSR                    (0xFC06B098U) /**< \brief (PIOB) Pad Pull-down Status Register */\r
+  #define REG_PIOB_OWER                     (0xFC06B0A0U) /**< \brief (PIOB) Output Write Enable */\r
+  #define REG_PIOB_OWDR                     (0xFC06B0A4U) /**< \brief (PIOB) Output Write Disable */\r
+  #define REG_PIOB_OWSR                     (0xFC06B0A8U) /**< \brief (PIOB) Output Write Status Register */\r
+  #define REG_PIOB_AIMER                    (0xFC06B0B0U) /**< \brief (PIOB) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOB_AIMDR                    (0xFC06B0B4U) /**< \brief (PIOB) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOB_AIMMR                    (0xFC06B0B8U) /**< \brief (PIOB) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOB_ESR                      (0xFC06B0C0U) /**< \brief (PIOB) Edge Select Register */\r
+  #define REG_PIOB_LSR                      (0xFC06B0C4U) /**< \brief (PIOB) Level Select Register */\r
+  #define REG_PIOB_ELSR                     (0xFC06B0C8U) /**< \brief (PIOB) Edge/Level Status Register */\r
+  #define REG_PIOB_FELLSR                   (0xFC06B0D0U) /**< \brief (PIOB) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOB_REHLSR                   (0xFC06B0D4U) /**< \brief (PIOB) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOB_FRLHSR                   (0xFC06B0D8U) /**< \brief (PIOB) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOB_WPMR                     (0xFC06B0E4U) /**< \brief (PIOB) Write Protect Mode Register */\r
+  #define REG_PIOB_WPSR                     (0xFC06B0E8U) /**< \brief (PIOB) Write Protect Status Register */\r
+  #define REG_PIOB_SCHMITT                  (0xFC06B100U) /**< \brief (PIOB) Schmitt Trigger Register */\r
+  #define REG_PIOB_DRIVER1                  (0xFC06B118U) /**< \brief (PIOB) I/O Drive Register 1 */\r
+  #define REG_PIOB_DRIVER2                  (0xFC06B11CU) /**< \brief (PIOB) I/O Drive Register 2 */\r
+#else\r
+  #define REG_PIOB_PER     (*(__O  uint32_t*)0xFC06B000U) /**< \brief (PIOB) PIO Enable Register */\r
+  #define REG_PIOB_PDR     (*(__O  uint32_t*)0xFC06B004U) /**< \brief (PIOB) PIO Disable Register */\r
+  #define REG_PIOB_PSR     (*(__I  uint32_t*)0xFC06B008U) /**< \brief (PIOB) PIO Status Register */\r
+  #define REG_PIOB_ISLR    (*(__IO uint32_t*)0xFC06B00CU) /**< \brief (PIOB) PIO Interrupt Security Level Register */\r
+  #define REG_PIOB_OER     (*(__O  uint32_t*)0xFC06B010U) /**< \brief (PIOB) Output Enable Register */\r
+  #define REG_PIOB_ODR     (*(__O  uint32_t*)0xFC06B014U) /**< \brief (PIOB) Output Disable Register */\r
+  #define REG_PIOB_OSR     (*(__I  uint32_t*)0xFC06B018U) /**< \brief (PIOB) Output Status Register */\r
+  #define REG_PIOB_IFER    (*(__O  uint32_t*)0xFC06B020U) /**< \brief (PIOB) Glitch Input Filter Enable Register */\r
+  #define REG_PIOB_IFDR    (*(__O  uint32_t*)0xFC06B024U) /**< \brief (PIOB) Glitch Input Filter Disable Register */\r
+  #define REG_PIOB_IFSR    (*(__I  uint32_t*)0xFC06B028U) /**< \brief (PIOB) Glitch Input Filter Status Register */\r
+  #define REG_PIOB_SODR    (*(__O  uint32_t*)0xFC06B030U) /**< \brief (PIOB) Set Output Data Register */\r
+  #define REG_PIOB_CODR    (*(__O  uint32_t*)0xFC06B034U) /**< \brief (PIOB) Clear Output Data Register */\r
+  #define REG_PIOB_ODSR    (*(__IO uint32_t*)0xFC06B038U) /**< \brief (PIOB) Output Data Status Register */\r
+  #define REG_PIOB_PDSR    (*(__I  uint32_t*)0xFC06B03CU) /**< \brief (PIOB) Pin Data Status Register */\r
+  #define REG_PIOB_IER     (*(__O  uint32_t*)0xFC06B040U) /**< \brief (PIOB) Interrupt Enable Register */\r
+  #define REG_PIOB_IDR     (*(__O  uint32_t*)0xFC06B044U) /**< \brief (PIOB) Interrupt Disable Register */\r
+  #define REG_PIOB_IMR     (*(__I  uint32_t*)0xFC06B048U) /**< \brief (PIOB) Interrupt Mask Register */\r
+  #define REG_PIOB_ISR     (*(__I  uint32_t*)0xFC06B04CU) /**< \brief (PIOB) Interrupt Status Register */\r
+  #define REG_PIOB_MDER    (*(__O  uint32_t*)0xFC06B050U) /**< \brief (PIOB) Multi-driver Enable Register */\r
+  #define REG_PIOB_MDDR    (*(__O  uint32_t*)0xFC06B054U) /**< \brief (PIOB) Multi-driver Disable Register */\r
+  #define REG_PIOB_MDSR    (*(__I  uint32_t*)0xFC06B058U) /**< \brief (PIOB) Multi-driver Status Register */\r
+  #define REG_PIOB_PUDR    (*(__O  uint32_t*)0xFC06B060U) /**< \brief (PIOB) Pull-up Disable Register */\r
+  #define REG_PIOB_PUER    (*(__O  uint32_t*)0xFC06B064U) /**< \brief (PIOB) Pull-up Enable Register */\r
+  #define REG_PIOB_PUSR    (*(__I  uint32_t*)0xFC06B068U) /**< \brief (PIOB) Pad Pull-up Status Register */\r
+  #define REG_PIOB_ABCDSR  (*(__IO uint32_t*)0xFC06B070U) /**< \brief (PIOB) Peripheral Select Register */\r
+  #define REG_PIOB_IFSCDR  (*(__O  uint32_t*)0xFC06B080U) /**< \brief (PIOB) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOB_IFSCER  (*(__O  uint32_t*)0xFC06B084U) /**< \brief (PIOB) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOB_IFSCSR  (*(__I  uint32_t*)0xFC06B088U) /**< \brief (PIOB) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOB_SCDR    (*(__IO uint32_t*)0xFC06B08CU) /**< \brief (PIOB) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOB_PPDDR   (*(__O  uint32_t*)0xFC06B090U) /**< \brief (PIOB) Pad Pull-down Disable Register */\r
+  #define REG_PIOB_PPDER   (*(__O  uint32_t*)0xFC06B094U) /**< \brief (PIOB) Pad Pull-down Enable Register */\r
+  #define REG_PIOB_PPDSR   (*(__I  uint32_t*)0xFC06B098U) /**< \brief (PIOB) Pad Pull-down Status Register */\r
+  #define REG_PIOB_OWER    (*(__O  uint32_t*)0xFC06B0A0U) /**< \brief (PIOB) Output Write Enable */\r
+  #define REG_PIOB_OWDR    (*(__O  uint32_t*)0xFC06B0A4U) /**< \brief (PIOB) Output Write Disable */\r
+  #define REG_PIOB_OWSR    (*(__I  uint32_t*)0xFC06B0A8U) /**< \brief (PIOB) Output Write Status Register */\r
+  #define REG_PIOB_AIMER   (*(__O  uint32_t*)0xFC06B0B0U) /**< \brief (PIOB) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOB_AIMDR   (*(__O  uint32_t*)0xFC06B0B4U) /**< \brief (PIOB) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOB_AIMMR   (*(__I  uint32_t*)0xFC06B0B8U) /**< \brief (PIOB) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOB_ESR     (*(__O  uint32_t*)0xFC06B0C0U) /**< \brief (PIOB) Edge Select Register */\r
+  #define REG_PIOB_LSR     (*(__O  uint32_t*)0xFC06B0C4U) /**< \brief (PIOB) Level Select Register */\r
+  #define REG_PIOB_ELSR    (*(__I  uint32_t*)0xFC06B0C8U) /**< \brief (PIOB) Edge/Level Status Register */\r
+  #define REG_PIOB_FELLSR  (*(__O  uint32_t*)0xFC06B0D0U) /**< \brief (PIOB) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOB_REHLSR  (*(__O  uint32_t*)0xFC06B0D4U) /**< \brief (PIOB) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOB_FRLHSR  (*(__I  uint32_t*)0xFC06B0D8U) /**< \brief (PIOB) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOB_WPMR    (*(__IO uint32_t*)0xFC06B0E4U) /**< \brief (PIOB) Write Protect Mode Register */\r
+  #define REG_PIOB_WPSR    (*(__I  uint32_t*)0xFC06B0E8U) /**< \brief (PIOB) Write Protect Status Register */\r
+  #define REG_PIOB_SCHMITT (*(__IO uint32_t*)0xFC06B100U) /**< \brief (PIOB) Schmitt Trigger Register */\r
+  #define REG_PIOB_DRIVER1 (*(__IO uint32_t*)0xFC06B118U) /**< \brief (PIOB) I/O Drive Register 1 */\r
+  #define REG_PIOB_DRIVER2 (*(__IO uint32_t*)0xFC06B11CU) /**< \brief (PIOB) I/O Drive Register 2 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PIOC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PIOC_PER                      (0xFC06C000U) /**< \brief (PIOC) PIO Enable Register */\r
+  #define REG_PIOC_PDR                      (0xFC06C004U) /**< \brief (PIOC) PIO Disable Register */\r
+  #define REG_PIOC_PSR                      (0xFC06C008U) /**< \brief (PIOC) PIO Status Register */\r
+  #define REG_PIOC_ISLR                     (0xFC06C00CU) /**< \brief (PIOC) PIO Interrupt Security Level Register */\r
+  #define REG_PIOC_OER                      (0xFC06C010U) /**< \brief (PIOC) Output Enable Register */\r
+  #define REG_PIOC_ODR                      (0xFC06C014U) /**< \brief (PIOC) Output Disable Register */\r
+  #define REG_PIOC_OSR                      (0xFC06C018U) /**< \brief (PIOC) Output Status Register */\r
+  #define REG_PIOC_IFER                     (0xFC06C020U) /**< \brief (PIOC) Glitch Input Filter Enable Register */\r
+  #define REG_PIOC_IFDR                     (0xFC06C024U) /**< \brief (PIOC) Glitch Input Filter Disable Register */\r
+  #define REG_PIOC_IFSR                     (0xFC06C028U) /**< \brief (PIOC) Glitch Input Filter Status Register */\r
+  #define REG_PIOC_SODR                     (0xFC06C030U) /**< \brief (PIOC) Set Output Data Register */\r
+  #define REG_PIOC_CODR                     (0xFC06C034U) /**< \brief (PIOC) Clear Output Data Register */\r
+  #define REG_PIOC_ODSR                     (0xFC06C038U) /**< \brief (PIOC) Output Data Status Register */\r
+  #define REG_PIOC_PDSR                     (0xFC06C03CU) /**< \brief (PIOC) Pin Data Status Register */\r
+  #define REG_PIOC_IER                      (0xFC06C040U) /**< \brief (PIOC) Interrupt Enable Register */\r
+  #define REG_PIOC_IDR                      (0xFC06C044U) /**< \brief (PIOC) Interrupt Disable Register */\r
+  #define REG_PIOC_IMR                      (0xFC06C048U) /**< \brief (PIOC) Interrupt Mask Register */\r
+  #define REG_PIOC_ISR                      (0xFC06C04CU) /**< \brief (PIOC) Interrupt Status Register */\r
+  #define REG_PIOC_MDER                     (0xFC06C050U) /**< \brief (PIOC) Multi-driver Enable Register */\r
+  #define REG_PIOC_MDDR                     (0xFC06C054U) /**< \brief (PIOC) Multi-driver Disable Register */\r
+  #define REG_PIOC_MDSR                     (0xFC06C058U) /**< \brief (PIOC) Multi-driver Status Register */\r
+  #define REG_PIOC_PUDR                     (0xFC06C060U) /**< \brief (PIOC) Pull-up Disable Register */\r
+  #define REG_PIOC_PUER                     (0xFC06C064U) /**< \brief (PIOC) Pull-up Enable Register */\r
+  #define REG_PIOC_PUSR                     (0xFC06C068U) /**< \brief (PIOC) Pad Pull-up Status Register */\r
+  #define REG_PIOC_ABCDSR                   (0xFC06C070U) /**< \brief (PIOC) Peripheral Select Register */\r
+  #define REG_PIOC_IFSCDR                   (0xFC06C080U) /**< \brief (PIOC) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOC_IFSCER                   (0xFC06C084U) /**< \brief (PIOC) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOC_IFSCSR                   (0xFC06C088U) /**< \brief (PIOC) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOC_SCDR                     (0xFC06C08CU) /**< \brief (PIOC) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOC_PPDDR                    (0xFC06C090U) /**< \brief (PIOC) Pad Pull-down Disable Register */\r
+  #define REG_PIOC_PPDER                    (0xFC06C094U) /**< \brief (PIOC) Pad Pull-down Enable Register */\r
+  #define REG_PIOC_PPDSR                    (0xFC06C098U) /**< \brief (PIOC) Pad Pull-down Status Register */\r
+  #define REG_PIOC_OWER                     (0xFC06C0A0U) /**< \brief (PIOC) Output Write Enable */\r
+  #define REG_PIOC_OWDR                     (0xFC06C0A4U) /**< \brief (PIOC) Output Write Disable */\r
+  #define REG_PIOC_OWSR                     (0xFC06C0A8U) /**< \brief (PIOC) Output Write Status Register */\r
+  #define REG_PIOC_AIMER                    (0xFC06C0B0U) /**< \brief (PIOC) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOC_AIMDR                    (0xFC06C0B4U) /**< \brief (PIOC) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOC_AIMMR                    (0xFC06C0B8U) /**< \brief (PIOC) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOC_ESR                      (0xFC06C0C0U) /**< \brief (PIOC) Edge Select Register */\r
+  #define REG_PIOC_LSR                      (0xFC06C0C4U) /**< \brief (PIOC) Level Select Register */\r
+  #define REG_PIOC_ELSR                     (0xFC06C0C8U) /**< \brief (PIOC) Edge/Level Status Register */\r
+  #define REG_PIOC_FELLSR                   (0xFC06C0D0U) /**< \brief (PIOC) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOC_REHLSR                   (0xFC06C0D4U) /**< \brief (PIOC) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOC_FRLHSR                   (0xFC06C0D8U) /**< \brief (PIOC) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOC_WPMR                     (0xFC06C0E4U) /**< \brief (PIOC) Write Protect Mode Register */\r
+  #define REG_PIOC_WPSR                     (0xFC06C0E8U) /**< \brief (PIOC) Write Protect Status Register */\r
+  #define REG_PIOC_SCHMITT                  (0xFC06C100U) /**< \brief (PIOC) Schmitt Trigger Register */\r
+  #define REG_PIOC_DRIVER1                  (0xFC06C118U) /**< \brief (PIOC) I/O Drive Register 1 */\r
+  #define REG_PIOC_DRIVER2                  (0xFC06C11CU) /**< \brief (PIOC) I/O Drive Register 2 */\r
+#else\r
+  #define REG_PIOC_PER     (*(__O  uint32_t*)0xFC06C000U) /**< \brief (PIOC) PIO Enable Register */\r
+  #define REG_PIOC_PDR     (*(__O  uint32_t*)0xFC06C004U) /**< \brief (PIOC) PIO Disable Register */\r
+  #define REG_PIOC_PSR     (*(__I  uint32_t*)0xFC06C008U) /**< \brief (PIOC) PIO Status Register */\r
+  #define REG_PIOC_ISLR    (*(__IO uint32_t*)0xFC06C00CU) /**< \brief (PIOC) PIO Interrupt Security Level Register */\r
+  #define REG_PIOC_OER     (*(__O  uint32_t*)0xFC06C010U) /**< \brief (PIOC) Output Enable Register */\r
+  #define REG_PIOC_ODR     (*(__O  uint32_t*)0xFC06C014U) /**< \brief (PIOC) Output Disable Register */\r
+  #define REG_PIOC_OSR     (*(__I  uint32_t*)0xFC06C018U) /**< \brief (PIOC) Output Status Register */\r
+  #define REG_PIOC_IFER    (*(__O  uint32_t*)0xFC06C020U) /**< \brief (PIOC) Glitch Input Filter Enable Register */\r
+  #define REG_PIOC_IFDR    (*(__O  uint32_t*)0xFC06C024U) /**< \brief (PIOC) Glitch Input Filter Disable Register */\r
+  #define REG_PIOC_IFSR    (*(__I  uint32_t*)0xFC06C028U) /**< \brief (PIOC) Glitch Input Filter Status Register */\r
+  #define REG_PIOC_SODR    (*(__O  uint32_t*)0xFC06C030U) /**< \brief (PIOC) Set Output Data Register */\r
+  #define REG_PIOC_CODR    (*(__O  uint32_t*)0xFC06C034U) /**< \brief (PIOC) Clear Output Data Register */\r
+  #define REG_PIOC_ODSR    (*(__IO uint32_t*)0xFC06C038U) /**< \brief (PIOC) Output Data Status Register */\r
+  #define REG_PIOC_PDSR    (*(__I  uint32_t*)0xFC06C03CU) /**< \brief (PIOC) Pin Data Status Register */\r
+  #define REG_PIOC_IER     (*(__O  uint32_t*)0xFC06C040U) /**< \brief (PIOC) Interrupt Enable Register */\r
+  #define REG_PIOC_IDR     (*(__O  uint32_t*)0xFC06C044U) /**< \brief (PIOC) Interrupt Disable Register */\r
+  #define REG_PIOC_IMR     (*(__I  uint32_t*)0xFC06C048U) /**< \brief (PIOC) Interrupt Mask Register */\r
+  #define REG_PIOC_ISR     (*(__I  uint32_t*)0xFC06C04CU) /**< \brief (PIOC) Interrupt Status Register */\r
+  #define REG_PIOC_MDER    (*(__O  uint32_t*)0xFC06C050U) /**< \brief (PIOC) Multi-driver Enable Register */\r
+  #define REG_PIOC_MDDR    (*(__O  uint32_t*)0xFC06C054U) /**< \brief (PIOC) Multi-driver Disable Register */\r
+  #define REG_PIOC_MDSR    (*(__I  uint32_t*)0xFC06C058U) /**< \brief (PIOC) Multi-driver Status Register */\r
+  #define REG_PIOC_PUDR    (*(__O  uint32_t*)0xFC06C060U) /**< \brief (PIOC) Pull-up Disable Register */\r
+  #define REG_PIOC_PUER    (*(__O  uint32_t*)0xFC06C064U) /**< \brief (PIOC) Pull-up Enable Register */\r
+  #define REG_PIOC_PUSR    (*(__I  uint32_t*)0xFC06C068U) /**< \brief (PIOC) Pad Pull-up Status Register */\r
+  #define REG_PIOC_ABCDSR  (*(__IO uint32_t*)0xFC06C070U) /**< \brief (PIOC) Peripheral Select Register */\r
+  #define REG_PIOC_IFSCDR  (*(__O  uint32_t*)0xFC06C080U) /**< \brief (PIOC) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOC_IFSCER  (*(__O  uint32_t*)0xFC06C084U) /**< \brief (PIOC) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOC_IFSCSR  (*(__I  uint32_t*)0xFC06C088U) /**< \brief (PIOC) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOC_SCDR    (*(__IO uint32_t*)0xFC06C08CU) /**< \brief (PIOC) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOC_PPDDR   (*(__O  uint32_t*)0xFC06C090U) /**< \brief (PIOC) Pad Pull-down Disable Register */\r
+  #define REG_PIOC_PPDER   (*(__O  uint32_t*)0xFC06C094U) /**< \brief (PIOC) Pad Pull-down Enable Register */\r
+  #define REG_PIOC_PPDSR   (*(__I  uint32_t*)0xFC06C098U) /**< \brief (PIOC) Pad Pull-down Status Register */\r
+  #define REG_PIOC_OWER    (*(__O  uint32_t*)0xFC06C0A0U) /**< \brief (PIOC) Output Write Enable */\r
+  #define REG_PIOC_OWDR    (*(__O  uint32_t*)0xFC06C0A4U) /**< \brief (PIOC) Output Write Disable */\r
+  #define REG_PIOC_OWSR    (*(__I  uint32_t*)0xFC06C0A8U) /**< \brief (PIOC) Output Write Status Register */\r
+  #define REG_PIOC_AIMER   (*(__O  uint32_t*)0xFC06C0B0U) /**< \brief (PIOC) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOC_AIMDR   (*(__O  uint32_t*)0xFC06C0B4U) /**< \brief (PIOC) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOC_AIMMR   (*(__I  uint32_t*)0xFC06C0B8U) /**< \brief (PIOC) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOC_ESR     (*(__O  uint32_t*)0xFC06C0C0U) /**< \brief (PIOC) Edge Select Register */\r
+  #define REG_PIOC_LSR     (*(__O  uint32_t*)0xFC06C0C4U) /**< \brief (PIOC) Level Select Register */\r
+  #define REG_PIOC_ELSR    (*(__I  uint32_t*)0xFC06C0C8U) /**< \brief (PIOC) Edge/Level Status Register */\r
+  #define REG_PIOC_FELLSR  (*(__O  uint32_t*)0xFC06C0D0U) /**< \brief (PIOC) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOC_REHLSR  (*(__O  uint32_t*)0xFC06C0D4U) /**< \brief (PIOC) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOC_FRLHSR  (*(__I  uint32_t*)0xFC06C0D8U) /**< \brief (PIOC) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOC_WPMR    (*(__IO uint32_t*)0xFC06C0E4U) /**< \brief (PIOC) Write Protect Mode Register */\r
+  #define REG_PIOC_WPSR    (*(__I  uint32_t*)0xFC06C0E8U) /**< \brief (PIOC) Write Protect Status Register */\r
+  #define REG_PIOC_SCHMITT (*(__IO uint32_t*)0xFC06C100U) /**< \brief (PIOC) Schmitt Trigger Register */\r
+  #define REG_PIOC_DRIVER1 (*(__IO uint32_t*)0xFC06C118U) /**< \brief (PIOC) I/O Drive Register 1 */\r
+  #define REG_PIOC_DRIVER2 (*(__IO uint32_t*)0xFC06C11CU) /**< \brief (PIOC) I/O Drive Register 2 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for PIOE peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_PIOE_PER                      (0xFC06D000U) /**< \brief (PIOE) PIO Enable Register */\r
+  #define REG_PIOE_PDR                      (0xFC06D004U) /**< \brief (PIOE) PIO Disable Register */\r
+  #define REG_PIOE_PSR                      (0xFC06D008U) /**< \brief (PIOE) PIO Status Register */\r
+  #define REG_PIOE_ISLR                     (0xFC06D00CU) /**< \brief (PIOE) PIO Interrupt Security Level Register */\r
+  #define REG_PIOE_OER                      (0xFC06D010U) /**< \brief (PIOE) Output Enable Register */\r
+  #define REG_PIOE_ODR                      (0xFC06D014U) /**< \brief (PIOE) Output Disable Register */\r
+  #define REG_PIOE_OSR                      (0xFC06D018U) /**< \brief (PIOE) Output Status Register */\r
+  #define REG_PIOE_IFER                     (0xFC06D020U) /**< \brief (PIOE) Glitch Input Filter Enable Register */\r
+  #define REG_PIOE_IFDR                     (0xFC06D024U) /**< \brief (PIOE) Glitch Input Filter Disable Register */\r
+  #define REG_PIOE_IFSR                     (0xFC06D028U) /**< \brief (PIOE) Glitch Input Filter Status Register */\r
+  #define REG_PIOE_SODR                     (0xFC06D030U) /**< \brief (PIOE) Set Output Data Register */\r
+  #define REG_PIOE_CODR                     (0xFC06D034U) /**< \brief (PIOE) Clear Output Data Register */\r
+  #define REG_PIOE_ODSR                     (0xFC06D038U) /**< \brief (PIOE) Output Data Status Register */\r
+  #define REG_PIOE_PDSR                     (0xFC06D03CU) /**< \brief (PIOE) Pin Data Status Register */\r
+  #define REG_PIOE_IER                      (0xFC06D040U) /**< \brief (PIOE) Interrupt Enable Register */\r
+  #define REG_PIOE_IDR                      (0xFC06D044U) /**< \brief (PIOE) Interrupt Disable Register */\r
+  #define REG_PIOE_IMR                      (0xFC06D048U) /**< \brief (PIOE) Interrupt Mask Register */\r
+  #define REG_PIOE_ISR                      (0xFC06D04CU) /**< \brief (PIOE) Interrupt Status Register */\r
+  #define REG_PIOE_MDER                     (0xFC06D050U) /**< \brief (PIOE) Multi-driver Enable Register */\r
+  #define REG_PIOE_MDDR                     (0xFC06D054U) /**< \brief (PIOE) Multi-driver Disable Register */\r
+  #define REG_PIOE_MDSR                     (0xFC06D058U) /**< \brief (PIOE) Multi-driver Status Register */\r
+  #define REG_PIOE_PUDR                     (0xFC06D060U) /**< \brief (PIOE) Pull-up Disable Register */\r
+  #define REG_PIOE_PUER                     (0xFC06D064U) /**< \brief (PIOE) Pull-up Enable Register */\r
+  #define REG_PIOE_PUSR                     (0xFC06D068U) /**< \brief (PIOE) Pad Pull-up Status Register */\r
+  #define REG_PIOE_ABCDSR                   (0xFC06D070U) /**< \brief (PIOE) Peripheral Select Register */\r
+  #define REG_PIOE_IFSCDR                   (0xFC06D080U) /**< \brief (PIOE) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOE_IFSCER                   (0xFC06D084U) /**< \brief (PIOE) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOE_IFSCSR                   (0xFC06D088U) /**< \brief (PIOE) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOE_SCDR                     (0xFC06D08CU) /**< \brief (PIOE) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOE_PPDDR                    (0xFC06D090U) /**< \brief (PIOE) Pad Pull-down Disable Register */\r
+  #define REG_PIOE_PPDER                    (0xFC06D094U) /**< \brief (PIOE) Pad Pull-down Enable Register */\r
+  #define REG_PIOE_PPDSR                    (0xFC06D098U) /**< \brief (PIOE) Pad Pull-down Status Register */\r
+  #define REG_PIOE_OWER                     (0xFC06D0A0U) /**< \brief (PIOE) Output Write Enable */\r
+  #define REG_PIOE_OWDR                     (0xFC06D0A4U) /**< \brief (PIOE) Output Write Disable */\r
+  #define REG_PIOE_OWSR                     (0xFC06D0A8U) /**< \brief (PIOE) Output Write Status Register */\r
+  #define REG_PIOE_AIMER                    (0xFC06D0B0U) /**< \brief (PIOE) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOE_AIMDR                    (0xFC06D0B4U) /**< \brief (PIOE) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOE_AIMMR                    (0xFC06D0B8U) /**< \brief (PIOE) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOE_ESR                      (0xFC06D0C0U) /**< \brief (PIOE) Edge Select Register */\r
+  #define REG_PIOE_LSR                      (0xFC06D0C4U) /**< \brief (PIOE) Level Select Register */\r
+  #define REG_PIOE_ELSR                     (0xFC06D0C8U) /**< \brief (PIOE) Edge/Level Status Register */\r
+  #define REG_PIOE_FELLSR                   (0xFC06D0D0U) /**< \brief (PIOE) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOE_REHLSR                   (0xFC06D0D4U) /**< \brief (PIOE) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOE_FRLHSR                   (0xFC06D0D8U) /**< \brief (PIOE) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOE_WPMR                     (0xFC06D0E4U) /**< \brief (PIOE) Write Protect Mode Register */\r
+  #define REG_PIOE_WPSR                     (0xFC06D0E8U) /**< \brief (PIOE) Write Protect Status Register */\r
+  #define REG_PIOE_SCHMITT                  (0xFC06D100U) /**< \brief (PIOE) Schmitt Trigger Register */\r
+  #define REG_PIOE_DRIVER1                  (0xFC06D118U) /**< \brief (PIOE) I/O Drive Register 1 */\r
+  #define REG_PIOE_DRIVER2                  (0xFC06D11CU) /**< \brief (PIOE) I/O Drive Register 2 */\r
+#else\r
+  #define REG_PIOE_PER     (*(__O  uint32_t*)0xFC06D000U) /**< \brief (PIOE) PIO Enable Register */\r
+  #define REG_PIOE_PDR     (*(__O  uint32_t*)0xFC06D004U) /**< \brief (PIOE) PIO Disable Register */\r
+  #define REG_PIOE_PSR     (*(__I  uint32_t*)0xFC06D008U) /**< \brief (PIOE) PIO Status Register */\r
+  #define REG_PIOE_ISLR    (*(__IO uint32_t*)0xFC06D00CU) /**< \brief (PIOE) PIO Interrupt Security Level Register */\r
+  #define REG_PIOE_OER     (*(__O  uint32_t*)0xFC06D010U) /**< \brief (PIOE) Output Enable Register */\r
+  #define REG_PIOE_ODR     (*(__O  uint32_t*)0xFC06D014U) /**< \brief (PIOE) Output Disable Register */\r
+  #define REG_PIOE_OSR     (*(__I  uint32_t*)0xFC06D018U) /**< \brief (PIOE) Output Status Register */\r
+  #define REG_PIOE_IFER    (*(__O  uint32_t*)0xFC06D020U) /**< \brief (PIOE) Glitch Input Filter Enable Register */\r
+  #define REG_PIOE_IFDR    (*(__O  uint32_t*)0xFC06D024U) /**< \brief (PIOE) Glitch Input Filter Disable Register */\r
+  #define REG_PIOE_IFSR    (*(__I  uint32_t*)0xFC06D028U) /**< \brief (PIOE) Glitch Input Filter Status Register */\r
+  #define REG_PIOE_SODR    (*(__O  uint32_t*)0xFC06D030U) /**< \brief (PIOE) Set Output Data Register */\r
+  #define REG_PIOE_CODR    (*(__O  uint32_t*)0xFC06D034U) /**< \brief (PIOE) Clear Output Data Register */\r
+  #define REG_PIOE_ODSR    (*(__IO uint32_t*)0xFC06D038U) /**< \brief (PIOE) Output Data Status Register */\r
+  #define REG_PIOE_PDSR    (*(__I  uint32_t*)0xFC06D03CU) /**< \brief (PIOE) Pin Data Status Register */\r
+  #define REG_PIOE_IER     (*(__O  uint32_t*)0xFC06D040U) /**< \brief (PIOE) Interrupt Enable Register */\r
+  #define REG_PIOE_IDR     (*(__O  uint32_t*)0xFC06D044U) /**< \brief (PIOE) Interrupt Disable Register */\r
+  #define REG_PIOE_IMR     (*(__I  uint32_t*)0xFC06D048U) /**< \brief (PIOE) Interrupt Mask Register */\r
+  #define REG_PIOE_ISR     (*(__I  uint32_t*)0xFC06D04CU) /**< \brief (PIOE) Interrupt Status Register */\r
+  #define REG_PIOE_MDER    (*(__O  uint32_t*)0xFC06D050U) /**< \brief (PIOE) Multi-driver Enable Register */\r
+  #define REG_PIOE_MDDR    (*(__O  uint32_t*)0xFC06D054U) /**< \brief (PIOE) Multi-driver Disable Register */\r
+  #define REG_PIOE_MDSR    (*(__I  uint32_t*)0xFC06D058U) /**< \brief (PIOE) Multi-driver Status Register */\r
+  #define REG_PIOE_PUDR    (*(__O  uint32_t*)0xFC06D060U) /**< \brief (PIOE) Pull-up Disable Register */\r
+  #define REG_PIOE_PUER    (*(__O  uint32_t*)0xFC06D064U) /**< \brief (PIOE) Pull-up Enable Register */\r
+  #define REG_PIOE_PUSR    (*(__I  uint32_t*)0xFC06D068U) /**< \brief (PIOE) Pad Pull-up Status Register */\r
+  #define REG_PIOE_ABCDSR  (*(__IO uint32_t*)0xFC06D070U) /**< \brief (PIOE) Peripheral Select Register */\r
+  #define REG_PIOE_IFSCDR  (*(__O  uint32_t*)0xFC06D080U) /**< \brief (PIOE) Input Filter Slow Clock Disable Register */\r
+  #define REG_PIOE_IFSCER  (*(__O  uint32_t*)0xFC06D084U) /**< \brief (PIOE) Input Filter Slow Clock Enable Register */\r
+  #define REG_PIOE_IFSCSR  (*(__I  uint32_t*)0xFC06D088U) /**< \brief (PIOE) Input Filter Slow Clock Status Register */\r
+  #define REG_PIOE_SCDR    (*(__IO uint32_t*)0xFC06D08CU) /**< \brief (PIOE) Slow Clock Divider Debouncing Register */\r
+  #define REG_PIOE_PPDDR   (*(__O  uint32_t*)0xFC06D090U) /**< \brief (PIOE) Pad Pull-down Disable Register */\r
+  #define REG_PIOE_PPDER   (*(__O  uint32_t*)0xFC06D094U) /**< \brief (PIOE) Pad Pull-down Enable Register */\r
+  #define REG_PIOE_PPDSR   (*(__I  uint32_t*)0xFC06D098U) /**< \brief (PIOE) Pad Pull-down Status Register */\r
+  #define REG_PIOE_OWER    (*(__O  uint32_t*)0xFC06D0A0U) /**< \brief (PIOE) Output Write Enable */\r
+  #define REG_PIOE_OWDR    (*(__O  uint32_t*)0xFC06D0A4U) /**< \brief (PIOE) Output Write Disable */\r
+  #define REG_PIOE_OWSR    (*(__I  uint32_t*)0xFC06D0A8U) /**< \brief (PIOE) Output Write Status Register */\r
+  #define REG_PIOE_AIMER   (*(__O  uint32_t*)0xFC06D0B0U) /**< \brief (PIOE) Additional Interrupt Modes Enable Register */\r
+  #define REG_PIOE_AIMDR   (*(__O  uint32_t*)0xFC06D0B4U) /**< \brief (PIOE) Additional Interrupt Modes Disables Register */\r
+  #define REG_PIOE_AIMMR   (*(__I  uint32_t*)0xFC06D0B8U) /**< \brief (PIOE) Additional Interrupt Modes Mask Register */\r
+  #define REG_PIOE_ESR     (*(__O  uint32_t*)0xFC06D0C0U) /**< \brief (PIOE) Edge Select Register */\r
+  #define REG_PIOE_LSR     (*(__O  uint32_t*)0xFC06D0C4U) /**< \brief (PIOE) Level Select Register */\r
+  #define REG_PIOE_ELSR    (*(__I  uint32_t*)0xFC06D0C8U) /**< \brief (PIOE) Edge/Level Status Register */\r
+  #define REG_PIOE_FELLSR  (*(__O  uint32_t*)0xFC06D0D0U) /**< \brief (PIOE) Falling Edge/Low Level Select Register */\r
+  #define REG_PIOE_REHLSR  (*(__O  uint32_t*)0xFC06D0D4U) /**< \brief (PIOE) Rising Edge/ High Level Select Register */\r
+  #define REG_PIOE_FRLHSR  (*(__I  uint32_t*)0xFC06D0D8U) /**< \brief (PIOE) Fall/Rise - Low/High Status Register */\r
+  #define REG_PIOE_WPMR    (*(__IO uint32_t*)0xFC06D0E4U) /**< \brief (PIOE) Write Protect Mode Register */\r
+  #define REG_PIOE_WPSR    (*(__I  uint32_t*)0xFC06D0E8U) /**< \brief (PIOE) Write Protect Status Register */\r
+  #define REG_PIOE_SCHMITT (*(__IO uint32_t*)0xFC06D100U) /**< \brief (PIOE) Schmitt Trigger Register */\r
+  #define REG_PIOE_DRIVER1 (*(__IO uint32_t*)0xFC06D118U) /**< \brief (PIOE) I/O Drive Register 1 */\r
+  #define REG_PIOE_DRIVER2 (*(__IO uint32_t*)0xFC06D11CU) /**< \brief (PIOE) I/O Drive Register 2 */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/* ========== Register definition for AIC peripheral ========== */\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+  #define REG_AIC_SSR                    (0xFC06E000U) /**< \brief (AIC) Source Select Register */\r
+  #define REG_AIC_SMR                    (0xFC06E004U) /**< \brief (AIC) Source Mode Register */\r
+  #define REG_AIC_SVR                    (0xFC06E008U) /**< \brief (AIC) Source Vector Register */\r
+  #define REG_AIC_IVR                    (0xFC06E010U) /**< \brief (AIC) Interrupt Vector Register */\r
+  #define REG_AIC_FVR                    (0xFC06E014U) /**< \brief (AIC) FIQ Interrupt Vector Register */\r
+  #define REG_AIC_ISR                    (0xFC06E018U) /**< \brief (AIC) Interrupt Status Register */\r
+  #define REG_AIC_IPR0                   (0xFC06E020U) /**< \brief (AIC) Interrupt Pending Register 0 */\r
+  #define REG_AIC_IPR1                   (0xFC06E024U) /**< \brief (AIC) Interrupt Pending Register 1 */\r
+  #define REG_AIC_IPR2                   (0xFC06E028U) /**< \brief (AIC) Interrupt Pending Register 2 */\r
+  #define REG_AIC_IPR3                   (0xFC06E02CU) /**< \brief (AIC) Interrupt Pending Register 3 */\r
+  #define REG_AIC_IMR                    (0xFC06E030U) /**< \brief (AIC) Interrupt Mask Register */\r
+  #define REG_AIC_CISR                   (0xFC06E034U) /**< \brief (AIC) Core Interrupt Status Register */\r
+  #define REG_AIC_EOICR                  (0xFC06E038U) /**< \brief (AIC) End of Interrupt Command Register */\r
+  #define REG_AIC_SPU                    (0xFC06E03CU) /**< \brief (AIC) Spurious Interrupt Vector Register */\r
+  #define REG_AIC_IECR                   (0xFC06E040U) /**< \brief (AIC) Interrupt Enable Command Register */\r
+  #define REG_AIC_IDCR                   (0xFC06E044U) /**< \brief (AIC) Interrupt Disable Command Register */\r
+  #define REG_AIC_ICCR                   (0xFC06E048U) /**< \brief (AIC) Interrupt Clear Command Register */\r
+  #define REG_AIC_ISCR                   (0xFC06E04CU) /**< \brief (AIC) Interrupt Set Command Register */\r
+  #define REG_AIC_FFER                   (0xFC06E050U) /**< \brief (AIC) Fast Forcing Enable Register */\r
+  #define REG_AIC_FFDR                   (0xFC06E054U) /**< \brief (AIC) Fast Forcing Disable Register */\r
+  #define REG_AIC_FFSR                   (0xFC06E058U) /**< \brief (AIC) Fast Forcing Status Register */\r
+  #define REG_AIC_DCR                    (0xFC06E06CU) /**< \brief (AIC) Debug Control Register */\r
+  #define REG_AIC_WPMR                   (0xFC06E0E4U) /**< \brief (AIC) Write Protect Mode Register */\r
+  #define REG_AIC_WPSR                   (0xFC06E0E8U) /**< \brief (AIC) Write Protect Status Register */\r
+#else\r
+  #define REG_AIC_SSR   (*(__IO uint32_t*)0xFC06E000U) /**< \brief (AIC) Source Select Register */\r
+  #define REG_AIC_SMR   (*(__IO uint32_t*)0xFC06E004U) /**< \brief (AIC) Source Mode Register */\r
+  #define REG_AIC_SVR   (*(__IO uint32_t*)0xFC06E008U) /**< \brief (AIC) Source Vector Register */\r
+  #define REG_AIC_IVR   (*(__I  uint32_t*)0xFC06E010U) /**< \brief (AIC) Interrupt Vector Register */\r
+  #define REG_AIC_FVR   (*(__I  uint32_t*)0xFC06E014U) /**< \brief (AIC) FIQ Interrupt Vector Register */\r
+  #define REG_AIC_ISR   (*(__I  uint32_t*)0xFC06E018U) /**< \brief (AIC) Interrupt Status Register */\r
+  #define REG_AIC_IPR0  (*(__I  uint32_t*)0xFC06E020U) /**< \brief (AIC) Interrupt Pending Register 0 */\r
+  #define REG_AIC_IPR1  (*(__I  uint32_t*)0xFC06E024U) /**< \brief (AIC) Interrupt Pending Register 1 */\r
+  #define REG_AIC_IPR2  (*(__I  uint32_t*)0xFC06E028U) /**< \brief (AIC) Interrupt Pending Register 2 */\r
+  #define REG_AIC_IPR3  (*(__I  uint32_t*)0xFC06E02CU) /**< \brief (AIC) Interrupt Pending Register 3 */\r
+  #define REG_AIC_IMR   (*(__I  uint32_t*)0xFC06E030U) /**< \brief (AIC) Interrupt Mask Register */\r
+  #define REG_AIC_CISR  (*(__I  uint32_t*)0xFC06E034U) /**< \brief (AIC) Core Interrupt Status Register */\r
+  #define REG_AIC_EOICR (*(__O  uint32_t*)0xFC06E038U) /**< \brief (AIC) End of Interrupt Command Register */\r
+  #define REG_AIC_SPU   (*(__IO uint32_t*)0xFC06E03CU) /**< \brief (AIC) Spurious Interrupt Vector Register */\r
+  #define REG_AIC_IECR  (*(__O  uint32_t*)0xFC06E040U) /**< \brief (AIC) Interrupt Enable Command Register */\r
+  #define REG_AIC_IDCR  (*(__O  uint32_t*)0xFC06E044U) /**< \brief (AIC) Interrupt Disable Command Register */\r
+  #define REG_AIC_ICCR  (*(__O  uint32_t*)0xFC06E048U) /**< \brief (AIC) Interrupt Clear Command Register */\r
+  #define REG_AIC_ISCR  (*(__O  uint32_t*)0xFC06E04CU) /**< \brief (AIC) Interrupt Set Command Register */\r
+  #define REG_AIC_FFER  (*(__O  uint32_t*)0xFC06E050U) /**< \brief (AIC) Fast Forcing Enable Register */\r
+  #define REG_AIC_FFDR  (*(__O  uint32_t*)0xFC06E054U) /**< \brief (AIC) Fast Forcing Disable Register */\r
+  #define REG_AIC_FFSR  (*(__I  uint32_t*)0xFC06E058U) /**< \brief (AIC) Fast Forcing Status Register */\r
+  #define REG_AIC_DCR   (*(__IO uint32_t*)0xFC06E06CU) /**< \brief (AIC) Debug Control Register */\r
+  #define REG_AIC_WPMR  (*(__IO uint32_t*)0xFC06E0E4U) /**< \brief (AIC) Write Protect Mode Register */\r
+  #define REG_AIC_WPSR  (*(__I  uint32_t*)0xFC06E0E8U) /**< \brief (AIC) Write Protect Status Register */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/*@}*/\r
+\r
+/* ************************************************************************** */\r
+/*   PERIPHERAL ID DEFINITIONS FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+/** \addtogroup SAMA5D4_id Peripheral Ids Definitions */\r
+/*@{*/\r
+\r
+#define ID_FIQ     ( 0) /**< \brief FIQ Interrupt ID (FIQ) */\r
+#define ID_SYS     ( 1) /**< \brief System Controller Interrupt (SYS) */\r
+#define ID_ARM     ( 2) /**< \brief Performance Monitor Unit (ARM) */\r
+#define ID_PIT     ( 3) /**< \brief Periodic Interval Timer Interrupt (PIT) */\r
+#define ID_WDT     ( 4) /**< \brief Watchdog timer Interrupt (WDT) */\r
+#define ID_PIOD    ( 5) /**< \brief Parallel I/O Controller D (PIOD) */\r
+#define ID_USART0  ( 6) /**< \brief USART 0 (USART0) */\r
+#define ID_USART1  ( 7) /**< \brief USART 1 (USART1) */\r
+#define ID_XDMAC0  ( 8) /**< \brief DMA Controller 0 (XDMAC0) */\r
+#define ID_ICM     ( 9) /**< \brief Integritry Check Monitor (ICM) */\r
+#define ID_PKCC                10      /**< \brief Public Key Crypto Controller */\r
+#define ID_AES     (12) /**< \brief Advanced Encryption Standard (AES) */\r
+#define ID_AESB    (13) /**< \brief AES bridge (AESB) */\r
+#define ID_TDES    (14) /**< \brief Triple Data Encryption Standard (TDES) */\r
+#define ID_SHA     (15) /**< \brief SHA Signature (SHA) */\r
+#define ID_MPDDRC  (16) /**< \brief MPDDR controller (MPDDRC) */\r
+#define ID_MATRIX1 (17) /**< \brief H32MX, 32-bit AHB Matrix (MATRIX1) */\r
+#define ID_MATRIX0 (18) /**< \brief H64MX, 64-bit AHB Matrix (MATRIX0) */\r
+#define ID_VDEC    (19) /**< \brief Video Decoder (VDEC) */\r
+#define ID_MSADCC  (21) /**< \brief Magnetic Stripe converter Controller (MSADCC) */\r
+#define ID_HSMC    (22) /**< \brief Multi-bit ECC Interrupt (HSMC) */\r
+#define ID_PIOA    (23) /**< \brief Parallel I/O Controller A (PIOA) */\r
+#define ID_PIOB    (24) /**< \brief Parallel I/O Controller B (PIOB) */\r
+#define ID_PIOC    (25) /**< \brief Parallel I/O Controller C (PIOC) */\r
+#define ID_PIOE    (26) /**< \brief Parallel I/O Controller E (PIOE) */\r
+#define ID_UART0   (27) /**< \brief UART 0 (UART0) */\r
+#define ID_UART1   (28) /**< \brief UART 1 (UART1) */\r
+#define ID_USART2  (29) /**< \brief USART 2 (USART2) */\r
+#define ID_USART3  (30) /**< \brief USART 3 (USART3) */\r
+#define ID_USART4  (31) /**< \brief USART 4 (USART4) */\r
+#define ID_TWI0    (32) /**< \brief Two-Wire Interface 0 (TWI0) */\r
+#define ID_TWI1    (33) /**< \brief Two-Wire Interface 1 (TWI1) */\r
+#define ID_TWI2    (34) /**< \brief Two-Wire Interface 2 (TWI2) */\r
+#define ID_HSMCI0  (35) /**< \brief High Speed Multimedia Card Interface 0 (HSMCI0) */\r
+#define ID_HSMCI1  (36) /**< \brief High Speed Multimedia Card Interface 1 (HSMCI1) */\r
+#define ID_SPI0    (37) /**< \brief Serial Peripheral Interface 0 (SPI0) */\r
+#define ID_SPI1    (38) /**< \brief Serial Peripheral Interface 1 (SPI1) */\r
+#define ID_SPI2    (39) /**< \brief Serial Peripheral Interface 2 (SPI2) */\r
+#define ID_TC0     (40) /**< \brief Timer Counter 0 (ch. 0, 1, 2) (TC0) */\r
+#define ID_TC1     (41) /**< \brief Timer Counter 1 (ch. 3, 4, 5) (TC1) */\r
+#define ID_TC2     (42) /**< \brief Timer Counter 2 (ch. 6, 7, 8) (TC2) */\r
+#define ID_PWM     (43) /**< \brief Pulse Width Modulation Controller (PWM) */\r
+#define ID_ADC     (44) /**< \brief Touch Screen ADC Controller (ADC) */\r
+#define ID_DBGU    (45) /**< \brief Debug Unit Interrupt (DBGU) */\r
+#define ID_UHPHS   (46) /**< \brief USB Host High Speed (UHPHS) */\r
+#define ID_UDPHS   (47) /**< \brief USB Device High Speed (UDPHS) */\r
+#define ID_SSC0    (48) /**< \brief Synchronous Serial Controller 0 (SSC0) */\r
+#define ID_SSC1    (49) /**< \brief Synchronous Serial Controller 1 (SSC1) */\r
+#define ID_XDMAC1  (50) /**< \brief DMA Controller 1 (XDMAC1) */\r
+#define ID_LCDC    (51) /**< \brief LCD Controller (LCDC) */\r
+#define ID_ISI     (52) /**< \brief Camera Interface (ISI) */\r
+#define ID_TRNG    (53) /**< \brief True Random Number Generator (TRNG) */\r
+#define ID_GMAC0   (54) /**< \brief Ethernet MAC 0 (GMAC0) */\r
+#define ID_GMAC1   (55) /**< \brief Ethernet MAC 1 (GMAC1) */\r
+#define ID_IRQ     (56) /**< \brief IRQ Interrupt ID (IRQ) */\r
+#define ID_SFC     (57) /**< \brief Fuse Controller (SFC) */\r
+/**< \brief 58 reserved */\r
+#define ID_SECURAM     59      /**< \brief Secure RAM */\r
+#define ID_SMD     (61) /**< \brief SMD Soft Modem (SMD) */\r
+#define ID_TWI3    (62) /**< \brief Two-Wire Interface 3 (TWI3) */\r
+#define ID_CATB    (63) /**< \brief Capacitive Touch Controller (CATB) */\r
+#define ID_SFR     (64) /**< \brief Special Function Register  (SFR) */\r
+#define ID_AIC     (65) /**< \brief Advanced Interrupt Controller  (AIC) */\r
+#define ID_SAIC    (66) /**< \brief Secured Advanced Interrupt Controller  (SAIC) */\r
+#define ID_L2CC    (67) /**< \brief L2 Cache Controller  (L2CC) */\r
+\r
+#define ID_PERIPH_COUNT (68) /**< \brief Number of peripheral IDs */\r
+/*@}*/\r
+\r
+/* ************************************************************************** */\r
+/*   BASE ADDRESS DEFINITIONS FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+/** \addtogroup SAMA5D4_base Peripheral Base Address Definitions */\r
+/*@{*/\r
+\r
+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+#define AXIMX   (0x00700000U) /**< \brief (AXIMX  ) Base Address */\r
+#define SMD     (0x00900000U) /**< \brief (SMD    ) Base Address */\r
+#define L2CC    (0x00A00000U) /**< \brief (L2CC   ) Base Address */\r
+#define LCDC    (0xF0000000U) /**< \brief (LCDC   ) Base Address */\r
+#define AESB    (0xF0020000U) /**< \brief (AESB   ) Base Address */\r
+#define XDMAC1  (0xF0004000U) /**< \brief (XDMAC1 ) Base Address */\r
+#define ISI     (0xF0008000U) /**< \brief (ISI    ) Base Address */\r
+#define MPDDRC  (0xF0010000U) /**< \brief (MPDDRC ) Base Address */\r
+#define XDMAC0  (0xF0014000U) /**< \brief (XDMAC0 ) Base Address */\r
+#define PMC     (0xF0018000U) /**< \brief (PMC    ) Base Address */\r
+#define MATRIX0 (0xF001C000U) /**< \brief (MATRIX0) Base Address */\r
+#define HSMCI0  (0xF8000000U) /**< \brief (HSMCI0 ) Base Address */\r
+#define UART0   (0xF8004000U) /**< \brief (UART0  ) Base Address */\r
+#define SSC0    (0xF8008000U) /**< \brief (SSC0   ) Base Address */\r
+#define PWM     (0xF800C000U) /**< \brief (PWM    ) Base Address */\r
+#define SPI0    (0xF8010000U) /**< \brief (SPI0   ) Base Address */\r
+#define TWI0    (0xF8014000U) /**< \brief (TWI0   ) Base Address */\r
+#define TWI1    (0xF8018000U) /**< \brief (TWI1   ) Base Address */\r
+#define TC0     (0xF801C000U) /**< \brief (TC0    ) Base Address */\r
+#define GMAC0   (0xF8020000U) /**< \brief (GMAC0  ) Base Address */\r
+#define TWI2    (0xF8024000U) /**< \brief (TWI2   ) Base Address */\r
+#define SFR     (0xF8028000U) /**< \brief (SFR    ) Base Address */\r
+#define USART0  (0xF802C000U) /**< \brief (USART0 ) Base Address */\r
+#define USART1  (0xF8030000U) /**< \brief (USART1 ) Base Address */\r
+#define CATB    (0xF803C000U) /**< \brief (CATB   ) Base Address */\r
+#define HSMCI1  (0xFC000000U) /**< \brief (HSMCI1 ) Base Address */\r
+#define UART1   (0xFC004000U) /**< \brief (UART1  ) Base Address */\r
+#define USART2  (0xFC008000U) /**< \brief (USART2 ) Base Address */\r
+#define USART3  (0xFC00C000U) /**< \brief (USART3 ) Base Address */\r
+#define USART4  (0xFC010000U) /**< \brief (USART4 ) Base Address */\r
+#define SSC1    (0xFC014000U) /**< \brief (SSC1   ) Base Address */\r
+#define SPI1    (0xFC018000U) /**< \brief (SPI1   ) Base Address */\r
+#define SPI2    (0xFC01C000U) /**< \brief (SPI2   ) Base Address */\r
+#define TC1     (0xFC020000U) /**< \brief (TC1    ) Base Address */\r
+#define TC2     (0xFC024000U) /**< \brief (TC2    ) Base Address */\r
+#define GMAC1   (0xFC028000U) /**< \brief (GMAC1  ) Base Address */\r
+#define UDPHS   (0xFC02C000U) /**< \brief (UDPHS  ) Base Address */\r
+#define TRNG    (0xFC030000U) /**< \brief (TRNG   ) Base Address */\r
+#define ADC     (0xFC034000U) /**< \brief (ADC    ) Base Address */\r
+#define TWI3    (0xFC038000U) /**< \brief (TWI3   ) Base Address */\r
+#define ICM     (0xFC040000U) /**< \brief (ICM    ) Base Address */\r
+#define AES     (0xFC044000U) /**< \brief (AES    ) Base Address */\r
+#define TDES    (0xFC04C000U) /**< \brief (TDES   ) Base Address */\r
+#define SHA     (0xFC050000U) /**< \brief (SHA    ) Base Address */\r
+#define MATRIX1 (0xFC054000U) /**< \brief (MATRIX1) Base Address */\r
+#define HSMC    (0xFC05C000U) /**< \brief (HSMC   ) Base Address */\r
+#define SFC     (0xFC060000U) /**< \brief (SFC    ) Base Address */\r
+#define PIOD    (0xFC068000U) /**< \brief (PIOD   ) Base Address */\r
+#define SAIC    (0xFC068400U) /**< \brief (SAIC   ) Base Address */\r
+#define RSTC    (0xFC068600U) /**< \brief (RSTC   ) Base Address */\r
+#define SHDWC   (0xFC068610U) /**< \brief (SHDWC  ) Base Address */\r
+#define PIT     (0xFC068630U) /**< \brief (PIT    ) Base Address */\r
+#define WDT     (0xFC068640U) /**< \brief (WDT    ) Base Address */\r
+#define SCKC    (0xFC068650U) /**< \brief (SCKC   ) Base Address */\r
+#define RTC     (0xFC0686B0U) /**< \brief (RTC    ) Base Address */\r
+#define DBGU    (0xFC069000U) /**< \brief (DBGU   ) Base Address */\r
+#define PIOA    (0xFC06A000U) /**< \brief (PIOA   ) Base Address */\r
+#define PIOB    (0xFC06B000U) /**< \brief (PIOB   ) Base Address */\r
+#define PIOC    (0xFC06C000U) /**< \brief (PIOC   ) Base Address */\r
+#define PIOE    (0xFC06D000U) /**< \brief (PIOE   ) Base Address */\r
+#define AIC     (0xFC06E000U) /**< \brief (AIC    ) Base Address */\r
+#else\r
+#define AXIMX   ((Aximx   *)0x00700000U) /**< \brief (AXIMX  ) Base Address */\r
+#define SMD     ((Smd     *)0x00900000U) /**< \brief (SMD    ) Base Address */\r
+#define L2CC    ((L2cc    *)0x00A00000U) /**< \brief (L2CC   ) Base Address */\r
+#define LCDC    ((Lcdc    *)0xF0000000U) /**< \brief (LCDC   ) Base Address */\r
+#define AESB    ((Aesb    *)0xF0020000U) /**< \brief (AESB   ) Base Address */\r
+#define XDMAC1  ((Xdmac   *)0xF0004000U) /**< \brief (XDMAC1 ) Base Address */\r
+#define ISI     ((Isi     *)0xF0008000U) /**< \brief (ISI    ) Base Address */\r
+#define MPDDRC  ((Mpddrc  *)0xF0010000U) /**< \brief (MPDDRC ) Base Address */\r
+#define XDMAC0  ((Xdmac   *)0xF0014000U) /**< \brief (XDMAC0 ) Base Address */\r
+#define PMC     ((Pmc     *)0xF0018000U) /**< \brief (PMC    ) Base Address */\r
+#define MATRIX0 ((Matrix  *)0xF001C000U) /**< \brief (MATRIX0) Base Address */\r
+#define HSMCI0  ((Hsmci   *)0xF8000000U) /**< \brief (HSMCI0 ) Base Address */\r
+#define UART0   ((Uart    *)0xF8004000U) /**< \brief (UART0  ) Base Address */\r
+#define SSC0    ((Ssc     *)0xF8008000U) /**< \brief (SSC0   ) Base Address */\r
+#define PWM     ((Pwm     *)0xF800C000U) /**< \brief (PWM    ) Base Address */\r
+#define SPI0    ((Spi     *)0xF8010000U) /**< \brief (SPI0   ) Base Address */\r
+#define TWI0    ((Twi     *)0xF8014000U) /**< \brief (TWI0   ) Base Address */\r
+#define TWI1    ((Twi     *)0xF8018000U) /**< \brief (TWI1   ) Base Address */\r
+#define TC0     ((Tc      *)0xF801C000U) /**< \brief (TC0    ) Base Address */\r
+#define GMAC0   ((Gmac    *)0xF8020000U) /**< \brief (GMAC0  ) Base Address */\r
+#define TWI2    ((Twi     *)0xF8024000U) /**< \brief (TWI2   ) Base Address */\r
+#define SFR     ((Sfr     *)0xF8028000U) /**< \brief (SFR    ) Base Address */\r
+#define USART0  ((Usart   *)0xF802C000U) /**< \brief (USART0 ) Base Address */\r
+#define USART1  ((Usart   *)0xF8030000U) /**< \brief (USART1 ) Base Address */\r
+#define CATB    ((Catb    *)0xF803C000U) /**< \brief (CATB   ) Base Address */\r
+#define HSMCI1  ((Hsmci   *)0xFC000000U) /**< \brief (HSMCI1 ) Base Address */\r
+#define UART1   ((Uart    *)0xFC004000U) /**< \brief (UART1  ) Base Address */\r
+#define USART2  ((Usart   *)0xFC008000U) /**< \brief (USART2 ) Base Address */\r
+#define USART3  ((Usart   *)0xFC00C000U) /**< \brief (USART3 ) Base Address */\r
+#define USART4  ((Usart   *)0xFC010000U) /**< \brief (USART4 ) Base Address */\r
+#define SSC1    ((Ssc     *)0xFC014000U) /**< \brief (SSC1   ) Base Address */\r
+#define SPI1    ((Spi     *)0xFC018000U) /**< \brief (SPI1   ) Base Address */\r
+#define SPI2    ((Spi     *)0xFC01C000U) /**< \brief (SPI2   ) Base Address */\r
+#define TC1     ((Tc      *)0xFC020000U) /**< \brief (TC1    ) Base Address */\r
+#define TC2     ((Tc      *)0xFC024000U) /**< \brief (TC2    ) Base Address */\r
+#define GMAC1   ((Gmac    *)0xFC028000U) /**< \brief (GMAC1  ) Base Address */\r
+#define UDPHS   ((Udphs   *)0xFC02C000U) /**< \brief (UDPHS  ) Base Address */\r
+#define TRNG    ((Trng    *)0xFC030000U) /**< \brief (TRNG   ) Base Address */\r
+#define ADC     ((Adc     *)0xFC034000U) /**< \brief (ADC    ) Base Address */\r
+#define TWI3    ((Twi     *)0xFC038000U) /**< \brief (TWI3   ) Base Address */\r
+#define ICM     ((Icm     *)0xFC040000U) /**< \brief (ICM    ) Base Address */\r
+#define AES     ((Aes     *)0xFC044000U) /**< \brief (AES    ) Base Address */\r
+#define TDES    ((Tdes    *)0xFC04C000U) /**< \brief (TDES   ) Base Address */\r
+#define SHA     ((Sha     *)0xFC050000U) /**< \brief (SHA    ) Base Address */\r
+#define MATRIX1 ((Matrix  *)0xFC054000U) /**< \brief (MATRIX1) Base Address */\r
+#define HSMC    ((Hsmc    *)0xFC05C000U) /**< \brief (HSMC   ) Base Address */\r
+#define SFC     ((Sfc     *)0xFC060000U) /**< \brief (SFC    ) Base Address */\r
+#define PIOD    ((Pio     *)0xFC068000U) /**< \brief (PIOD   ) Base Address */\r
+#define SAIC    ((Aic     *)0xFC068400U) /**< \brief (SAIC   ) Base Address */\r
+#define RSTC    ((Rstc    *)0xFC068600U) /**< \brief (RSTC   ) Base Address */\r
+#define SHDWC   ((Shdwc   *)0xFC068610U) /**< \brief (SHDWC  ) Base Address */\r
+#define PIT     ((Pit     *)0xFC068630U) /**< \brief (PIT    ) Base Address */\r
+#define WDT     ((Wdt     *)0xFC068640U) /**< \brief (WDT    ) Base Address */\r
+#define SCKC    ((Sckc    *)0xFC068650U) /**< \brief (SCKC   ) Base Address */\r
+#define RTC     ((Rtc     *)0xFC0686B0U) /**< \brief (RTC    ) Base Address */\r
+#define DBGU    ((Dbgu    *)0xFC069000U) /**< \brief (DBGU   ) Base Address */\r
+#define PIOA    ((Pio     *)0xFC06A000U) /**< \brief (PIOA   ) Base Address */\r
+#define PIOB    ((Pio     *)0xFC06B000U) /**< \brief (PIOB   ) Base Address */\r
+#define PIOC    ((Pio     *)0xFC06C000U) /**< \brief (PIOC   ) Base Address */\r
+#define PIOE    ((Pio     *)0xFC06D000U) /**< \brief (PIOE   ) Base Address */\r
+#define AIC     ((Aic     *)0xFC06E000U) /**< \brief (AIC    ) Base Address */\r
+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+/*@}*/\r
+\r
+/* ************************************************************************** */\r
+/*   PIO DEFINITIONS FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+/** \addtogroup SAMA5D4_pio Peripheral Pio Definitions */\r
+/*@{*/\r
+\r
+#define PIO_PA0              (1u << 0)  /**< \brief Pin Controlled by PA0 */\r
+#define PIO_PA1              (1u << 1)  /**< \brief Pin Controlled by PA1 */\r
+#define PIO_PA2              (1u << 2)  /**< \brief Pin Controlled by PA2 */\r
+#define PIO_PA3              (1u << 3)  /**< \brief Pin Controlled by PA3 */\r
+#define PIO_PA4              (1u << 4)  /**< \brief Pin Controlled by PA4 */\r
+#define PIO_PA5              (1u << 5)  /**< \brief Pin Controlled by PA5 */\r
+#define PIO_PA6              (1u << 6)  /**< \brief Pin Controlled by PA6 */\r
+#define PIO_PA7              (1u << 7)  /**< \brief Pin Controlled by PA7 */\r
+#define PIO_PA8              (1u << 8)  /**< \brief Pin Controlled by PA8 */\r
+#define PIO_PA9              (1u << 9)  /**< \brief Pin Controlled by PA9 */\r
+#define PIO_PA10             (1u << 10) /**< \brief Pin Controlled by PA10 */\r
+#define PIO_PA11             (1u << 11) /**< \brief Pin Controlled by PA11 */\r
+#define PIO_PA12             (1u << 12) /**< \brief Pin Controlled by PA12 */\r
+#define PIO_PA13             (1u << 13) /**< \brief Pin Controlled by PA13 */\r
+#define PIO_PA14             (1u << 14) /**< \brief Pin Controlled by PA14 */\r
+#define PIO_PA15             (1u << 15) /**< \brief Pin Controlled by PA15 */\r
+#define PIO_PA16             (1u << 16) /**< \brief Pin Controlled by PA16 */\r
+#define PIO_PA17             (1u << 17) /**< \brief Pin Controlled by PA17 */\r
+#define PIO_PA18             (1u << 18) /**< \brief Pin Controlled by PA18 */\r
+#define PIO_PA19             (1u << 19) /**< \brief Pin Controlled by PA19 */\r
+#define PIO_PA20             (1u << 20) /**< \brief Pin Controlled by PA20 */\r
+#define PIO_PA21             (1u << 21) /**< \brief Pin Controlled by PA21 */\r
+#define PIO_PA22             (1u << 22) /**< \brief Pin Controlled by PA22 */\r
+#define PIO_PA23             (1u << 23) /**< \brief Pin Controlled by PA23 */\r
+#define PIO_PA24             (1u << 24) /**< \brief Pin Controlled by PA24 */\r
+#define PIO_PA25             (1u << 25) /**< \brief Pin Controlled by PA25 */\r
+#define PIO_PA26             (1u << 26) /**< \brief Pin Controlled by PA26 */\r
+#define PIO_PA27             (1u << 27) /**< \brief Pin Controlled by PA27 */\r
+#define PIO_PA28             (1u << 28) /**< \brief Pin Controlled by PA28 */\r
+#define PIO_PA29             (1u << 29) /**< \brief Pin Controlled by PA29 */\r
+#define PIO_PA30             (1u << 30) /**< \brief Pin Controlled by PA30 */\r
+#define PIO_PA31             (1u << 31) /**< \brief Pin Controlled by PA31 */\r
+#define PIO_PB0              (1u << 0)  /**< \brief Pin Controlled by PB0 */\r
+#define PIO_PB1              (1u << 1)  /**< \brief Pin Controlled by PB1 */\r
+#define PIO_PB2              (1u << 2)  /**< \brief Pin Controlled by PB2 */\r
+#define PIO_PB3              (1u << 3)  /**< \brief Pin Controlled by PB3 */\r
+#define PIO_PB4              (1u << 4)  /**< \brief Pin Controlled by PB4 */\r
+#define PIO_PB5              (1u << 5)  /**< \brief Pin Controlled by PB5 */\r
+#define PIO_PB6              (1u << 6)  /**< \brief Pin Controlled by PB6 */\r
+#define PIO_PB7              (1u << 7)  /**< \brief Pin Controlled by PB7 */\r
+#define PIO_PB8              (1u << 8)  /**< \brief Pin Controlled by PB8 */\r
+#define PIO_PB9              (1u << 9)  /**< \brief Pin Controlled by PB9 */\r
+#define PIO_PB10             (1u << 10) /**< \brief Pin Controlled by PB10 */\r
+#define PIO_PB11             (1u << 11) /**< \brief Pin Controlled by PB11 */\r
+#define PIO_PB12             (1u << 12) /**< \brief Pin Controlled by PB12 */\r
+#define PIO_PB13             (1u << 13) /**< \brief Pin Controlled by PB13 */\r
+#define PIO_PB14             (1u << 14) /**< \brief Pin Controlled by PB14 */\r
+#define PIO_PB15             (1u << 15) /**< \brief Pin Controlled by PB15 */\r
+#define PIO_PB16             (1u << 16) /**< \brief Pin Controlled by PB16 */\r
+#define PIO_PB17             (1u << 17) /**< \brief Pin Controlled by PB17 */\r
+#define PIO_PB18             (1u << 18) /**< \brief Pin Controlled by PB18 */\r
+#define PIO_PB19             (1u << 19) /**< \brief Pin Controlled by PB19 */\r
+#define PIO_PB20             (1u << 20) /**< \brief Pin Controlled by PB20 */\r
+#define PIO_PB21             (1u << 21) /**< \brief Pin Controlled by PB21 */\r
+#define PIO_PB22             (1u << 22) /**< \brief Pin Controlled by PB22 */\r
+#define PIO_PB23             (1u << 23) /**< \brief Pin Controlled by PB23 */\r
+#define PIO_PB24             (1u << 24) /**< \brief Pin Controlled by PB24 */\r
+#define PIO_PB25             (1u << 25) /**< \brief Pin Controlled by PB25 */\r
+#define PIO_PB26             (1u << 26) /**< \brief Pin Controlled by PB26 */\r
+#define PIO_PB27             (1u << 27) /**< \brief Pin Controlled by PB27 */\r
+#define PIO_PB28             (1u << 28) /**< \brief Pin Controlled by PB28 */\r
+#define PIO_PB29             (1u << 29) /**< \brief Pin Controlled by PB29 */\r
+#define PIO_PB30             (1u << 30) /**< \brief Pin Controlled by PB30 */\r
+#define PIO_PB31             (1u << 31) /**< \brief Pin Controlled by PB31 */\r
+#define PIO_PC0              (1u << 0)  /**< \brief Pin Controlled by PC0 */\r
+#define PIO_PC1              (1u << 1)  /**< \brief Pin Controlled by PC1 */\r
+#define PIO_PC2              (1u << 2)  /**< \brief Pin Controlled by PC2 */\r
+#define PIO_PC3              (1u << 3)  /**< \brief Pin Controlled by PC3 */\r
+#define PIO_PC4              (1u << 4)  /**< \brief Pin Controlled by PC4 */\r
+#define PIO_PC5              (1u << 5)  /**< \brief Pin Controlled by PC5 */\r
+#define PIO_PC6              (1u << 6)  /**< \brief Pin Controlled by PC6 */\r
+#define PIO_PC7              (1u << 7)  /**< \brief Pin Controlled by PC7 */\r
+#define PIO_PC8              (1u << 8)  /**< \brief Pin Controlled by PC8 */\r
+#define PIO_PC9              (1u << 9)  /**< \brief Pin Controlled by PC9 */\r
+#define PIO_PC10             (1u << 10) /**< \brief Pin Controlled by PC10 */\r
+#define PIO_PC11             (1u << 11) /**< \brief Pin Controlled by PC11 */\r
+#define PIO_PC12             (1u << 12) /**< \brief Pin Controlled by PC12 */\r
+#define PIO_PC13             (1u << 13) /**< \brief Pin Controlled by PC13 */\r
+#define PIO_PC14             (1u << 14) /**< \brief Pin Controlled by PC14 */\r
+#define PIO_PC15             (1u << 15) /**< \brief Pin Controlled by PC15 */\r
+#define PIO_PC16             (1u << 16) /**< \brief Pin Controlled by PC16 */\r
+#define PIO_PC17             (1u << 17) /**< \brief Pin Controlled by PC17 */\r
+#define PIO_PC18             (1u << 18) /**< \brief Pin Controlled by PC18 */\r
+#define PIO_PC19             (1u << 19) /**< \brief Pin Controlled by PC19 */\r
+#define PIO_PC20             (1u << 20) /**< \brief Pin Controlled by PC20 */\r
+#define PIO_PC21             (1u << 21) /**< \brief Pin Controlled by PC21 */\r
+#define PIO_PC22             (1u << 22) /**< \brief Pin Controlled by PC22 */\r
+#define PIO_PC23             (1u << 23) /**< \brief Pin Controlled by PC23 */\r
+#define PIO_PC24             (1u << 24) /**< \brief Pin Controlled by PC24 */\r
+#define PIO_PC25             (1u << 25) /**< \brief Pin Controlled by PC25 */\r
+#define PIO_PC26             (1u << 26) /**< \brief Pin Controlled by PC26 */\r
+#define PIO_PC27             (1u << 27) /**< \brief Pin Controlled by PC27 */\r
+#define PIO_PC28             (1u << 28) /**< \brief Pin Controlled by PC28 */\r
+#define PIO_PC29             (1u << 29) /**< \brief Pin Controlled by PC29 */\r
+#define PIO_PC30             (1u << 30) /**< \brief Pin Controlled by PC30 */\r
+#define PIO_PC31             (1u << 31) /**< \brief Pin Controlled by PC31 */\r
+#define PIO_PD0              (1u << 0)  /**< \brief Pin Controlled by PD0 */\r
+#define PIO_PD1              (1u << 1)  /**< \brief Pin Controlled by PD1 */\r
+#define PIO_PD2              (1u << 2)  /**< \brief Pin Controlled by PD2 */\r
+#define PIO_PD3              (1u << 3)  /**< \brief Pin Controlled by PD3 */\r
+#define PIO_PD4              (1u << 4)  /**< \brief Pin Controlled by PD4 */\r
+#define PIO_PD5              (1u << 5)  /**< \brief Pin Controlled by PD5 */\r
+#define PIO_PD6              (1u << 6)  /**< \brief Pin Controlled by PD6 */\r
+#define PIO_PD7              (1u << 7)  /**< \brief Pin Controlled by PD7 */\r
+#define PIO_PD8              (1u << 8)  /**< \brief Pin Controlled by PD8 */\r
+#define PIO_PD9              (1u << 9)  /**< \brief Pin Controlled by PD9 */\r
+#define PIO_PD10             (1u << 10) /**< \brief Pin Controlled by PD10 */\r
+#define PIO_PD11             (1u << 11) /**< \brief Pin Controlled by PD11 */\r
+#define PIO_PD12             (1u << 12) /**< \brief Pin Controlled by PD12 */\r
+#define PIO_PD13             (1u << 13) /**< \brief Pin Controlled by PD13 */\r
+#define PIO_PD14             (1u << 14) /**< \brief Pin Controlled by PD14 */\r
+#define PIO_PD15             (1u << 15) /**< \brief Pin Controlled by PD15 */\r
+#define PIO_PD16             (1u << 16) /**< \brief Pin Controlled by PD16 */\r
+#define PIO_PD17             (1u << 17) /**< \brief Pin Controlled by PD17 */\r
+#define PIO_PD18             (1u << 18) /**< \brief Pin Controlled by PD18 */\r
+#define PIO_PD19             (1u << 19) /**< \brief Pin Controlled by PD19 */\r
+#define PIO_PD20             (1u << 20) /**< \brief Pin Controlled by PD20 */\r
+#define PIO_PD21             (1u << 21) /**< \brief Pin Controlled by PD21 */\r
+#define PIO_PD22             (1u << 22) /**< \brief Pin Controlled by PD22 */\r
+#define PIO_PD23             (1u << 23) /**< \brief Pin Controlled by PD23 */\r
+#define PIO_PD24             (1u << 24) /**< \brief Pin Controlled by PD24 */\r
+#define PIO_PD25             (1u << 25) /**< \brief Pin Controlled by PD25 */\r
+#define PIO_PD26             (1u << 26) /**< \brief Pin Controlled by PD26 */\r
+#define PIO_PD27             (1u << 27) /**< \brief Pin Controlled by PD27 */\r
+#define PIO_PD28             (1u << 28) /**< \brief Pin Controlled by PD28 */\r
+#define PIO_PD29             (1u << 29) /**< \brief Pin Controlled by PD29 */\r
+#define PIO_PD30             (1u << 30) /**< \brief Pin Controlled by PD30 */\r
+#define PIO_PD31             (1u << 31) /**< \brief Pin Controlled by PD31 */\r
+#define PIO_PE0              (1u << 0)  /**< \brief Pin Controlled by PE0 */\r
+#define PIO_PE1              (1u << 1)  /**< \brief Pin Controlled by PE1 */\r
+#define PIO_PE2              (1u << 2)  /**< \brief Pin Controlled by PE2 */\r
+#define PIO_PE3              (1u << 3)  /**< \brief Pin Controlled by PE3 */\r
+#define PIO_PE4              (1u << 4)  /**< \brief Pin Controlled by PE4 */\r
+#define PIO_PE5              (1u << 5)  /**< \brief Pin Controlled by PE5 */\r
+#define PIO_PE6              (1u << 6)  /**< \brief Pin Controlled by PE6 */\r
+#define PIO_PE7              (1u << 7)  /**< \brief Pin Controlled by PE7 */\r
+#define PIO_PE8              (1u << 8)  /**< \brief Pin Controlled by PE8 */\r
+#define PIO_PE9              (1u << 9)  /**< \brief Pin Controlled by PE9 */\r
+#define PIO_PE10             (1u << 10) /**< \brief Pin Controlled by PE10 */\r
+#define PIO_PE11             (1u << 11) /**< \brief Pin Controlled by PE11 */\r
+#define PIO_PE12             (1u << 12) /**< \brief Pin Controlled by PE12 */\r
+#define PIO_PE13             (1u << 13) /**< \brief Pin Controlled by PE13 */\r
+#define PIO_PE14             (1u << 14) /**< \brief Pin Controlled by PE14 */\r
+#define PIO_PE15             (1u << 15) /**< \brief Pin Controlled by PE15 */\r
+#define PIO_PE16             (1u << 16) /**< \brief Pin Controlled by PE16 */\r
+#define PIO_PE17             (1u << 17) /**< \brief Pin Controlled by PE17 */\r
+#define PIO_PE18             (1u << 18) /**< \brief Pin Controlled by PE18 */\r
+#define PIO_PE19             (1u << 19) /**< \brief Pin Controlled by PE19 */\r
+#define PIO_PE20             (1u << 20) /**< \brief Pin Controlled by PE20 */\r
+#define PIO_PE21             (1u << 21) /**< \brief Pin Controlled by PE21 */\r
+#define PIO_PE22             (1u << 22) /**< \brief Pin Controlled by PE22 */\r
+#define PIO_PE23             (1u << 23) /**< \brief Pin Controlled by PE23 */\r
+#define PIO_PE24             (1u << 24) /**< \brief Pin Controlled by PE24 */\r
+#define PIO_PE25             (1u << 25) /**< \brief Pin Controlled by PE25 */\r
+#define PIO_PE26             (1u << 26) /**< \brief Pin Controlled by PE26 */\r
+#define PIO_PE27             (1u << 27) /**< \brief Pin Controlled by PE27 */\r
+#define PIO_PE28             (1u << 28) /**< \brief Pin Controlled by PE28 */\r
+#define PIO_PE29             (1u << 29) /**< \brief Pin Controlled by PE29 */\r
+#define PIO_PE30             (1u << 30) /**< \brief Pin Controlled by PE30 */\r
+#define PIO_PE31             (1u << 31) /**< \brief Pin Controlled by PE31 */\r
+/* ========== Pio definition for ADC peripheral ========== */\r
+#define PIO_PC27A_AD0        (1u << 27) /**< \brief Adc signal: AD0 */\r
+#define PIO_PC28A_AD1        (1u << 28) /**< \brief Adc signal: AD1 */\r
+#define PIO_PC29A_AD2        (1u << 29) /**< \brief Adc signal: AD2 */\r
+#define PIO_PC30A_AD3        (1u << 30) /**< \brief Adc signal: AD3 */\r
+#define PIO_PC31A_AD4        (1u << 31) /**< \brief Adc signal: AD4 */\r
+#define PIO_PE31A_ADTRG      (1u << 31) /**< \brief Adc signal: ADTRG */\r
+/* ========== Pio definition for AIC peripheral ========== */\r
+#define PIO_PD9A_FIQ         (1u << 9)  /**< \brief Aic signal: FIQ */\r
+#define PIO_PE25C_IRQ        (1u << 25) /**< \brief Aic signal: IRQ */\r
+/* ========== Pio definition for ARM peripheral ========== */\r
+#define PIO_PA16C_NTRST      (1u << 16) /**< \brief Arm signal: NTRST */\r
+#define PIO_PA8C_TCK         (1u << 8)  /**< \brief Arm signal: TCK */\r
+#define PIO_PB24C_TDI        (1u << 24) /**< \brief Arm signal: TDI */\r
+#define PIO_PB25C_TDO        (1u << 25) /**< \brief Arm signal: TDO */\r
+#define PIO_PA0C_TMS         (1u << 0)  /**< \brief Arm signal: TMS */\r
+/* ========== Pio definition for CATB peripheral ========== */\r
+#define PIO_PD29B_DIS        (1u << 29) /**< \brief Catb signal: DIS */\r
+#define PIO_PD18B_SENSE0     (1u << 18) /**< \brief Catb signal: SENSE0 */\r
+#define PIO_PD19B_SENSE1     (1u << 19) /**< \brief Catb signal: SENSE1 */\r
+#define PIO_PD20B_SENSE2     (1u << 20) /**< \brief Catb signal: SENSE2 */\r
+#define PIO_PD21B_SENSE3     (1u << 21) /**< \brief Catb signal: SENSE3 */\r
+#define PIO_PD22B_SENSE4     (1u << 22) /**< \brief Catb signal: SENSE4 */\r
+#define PIO_PD23B_SENSE5     (1u << 23) /**< \brief Catb signal: SENSE5 */\r
+#define PIO_PD24B_SENSE6     (1u << 24) /**< \brief Catb signal: SENSE6 */\r
+#define PIO_PD25B_SENSE7     (1u << 25) /**< \brief Catb signal: SENSE7 */\r
+#define PIO_PD26B_SENSE8     (1u << 26) /**< \brief Catb signal: SENSE8 */\r
+#define PIO_PD27B_SENSE9     (1u << 27) /**< \brief Catb signal: SENSE9 */\r
+/* ========== Pio definition for DBGU peripheral ========== */\r
+#define PIO_PB24A_DRXD       (1u << 24) /**< \brief Dbgu signal: DRXD */\r
+#define PIO_PB25A_DTXD       (1u << 25) /**< \brief Dbgu signal: DTXD */\r
+/* ========== Pio definition for EBI peripheral ========== */\r
+#define PIO_PE0A_A0          (1u << 0)  /**< \brief Ebi signal: A0/NBS0 */\r
+#define PIO_PE0A_NBS0        (1u << 0)  /**< \brief Ebi signal: A0/NBS0 */\r
+#define PIO_PE1A_A1          (1u << 1)  /**< \brief Ebi signal: A1 */\r
+#define PIO_PE10A_A10        (1u << 10) /**< \brief Ebi signal: A10 */\r
+#define PIO_PE11A_A11        (1u << 11) /**< \brief Ebi signal: A11 */\r
+#define PIO_PE12A_A12        (1u << 12) /**< \brief Ebi signal: A12 */\r
+#define PIO_PE13A_A13        (1u << 13) /**< \brief Ebi signal: A13 */\r
+#define PIO_PE14A_A14        (1u << 14) /**< \brief Ebi signal: A14 */\r
+#define PIO_PE15A_A15        (1u << 15) /**< \brief Ebi signal: A15 */\r
+#define PIO_PE16A_A16        (1u << 16) /**< \brief Ebi signal: A16 */\r
+#define PIO_PE17A_A17        (1u << 17) /**< \brief Ebi signal: A17 */\r
+#define PIO_PE18A_A18        (1u << 18) /**< \brief Ebi signal: A18 */\r
+#define PIO_PE26C_A18        (1u << 26) /**< \brief Ebi signal: A18 */\r
+#define PIO_PE19A_A19        (1u << 19) /**< \brief Ebi signal: A19 */\r
+#define PIO_PE28C_A19        (1u << 28) /**< \brief Ebi signal: A19 */\r
+#define PIO_PE2A_A2          (1u << 2)  /**< \brief Ebi signal: A2 */\r
+#define PIO_PE20A_A20        (1u << 20) /**< \brief Ebi signal: A20 */\r
+#define PIO_PC17A_A21        (1u << 17) /**< \brief Ebi signal: A21/NANDALE */\r
+#define PIO_PC17A_NANDALE    (1u << 17) /**< \brief Ebi signal: A21/NANDALE */\r
+#define PIO_PC18A_A22        (1u << 18) /**< \brief Ebi signal: A22/NANDCLE */\r
+#define PIO_PC18A_NANDCLE    (1u << 18) /**< \brief Ebi signal: A22/NANDCLE */\r
+#define PIO_PE21A_A23        (1u << 21) /**< \brief Ebi signal: A23 */\r
+#define PIO_PE22A_A24        (1u << 22) /**< \brief Ebi signal: A24 */\r
+#define PIO_PE23A_A25        (1u << 23) /**< \brief Ebi signal: A25 */\r
+#define PIO_PE3A_A3          (1u << 3)  /**< \brief Ebi signal: A3 */\r
+#define PIO_PE4A_A4          (1u << 4)  /**< \brief Ebi signal: A4 */\r
+#define PIO_PE5A_A5          (1u << 5)  /**< \brief Ebi signal: A5 */\r
+#define PIO_PE6A_A6          (1u << 6)  /**< \brief Ebi signal: A6 */\r
+#define PIO_PE7A_A7          (1u << 7)  /**< \brief Ebi signal: A7 */\r
+#define PIO_PE8A_A8          (1u << 8)  /**< \brief Ebi signal: A8 */\r
+#define PIO_PE9A_A9          (1u << 9)  /**< \brief Ebi signal: A9 */\r
+#define PIO_PC5A_D0          (1u << 5)  /**< \brief Ebi signal: D0 */\r
+#define PIO_PC6A_D1          (1u << 6)  /**< \brief Ebi signal: D1 */\r
+#define PIO_PB20B_D10        (1u << 20) /**< \brief Ebi signal: D10 */\r
+#define PIO_PB21B_D11        (1u << 21) /**< \brief Ebi signal: D11 */\r
+#define PIO_PB22B_D12        (1u << 22) /**< \brief Ebi signal: D12 */\r
+#define PIO_PB23B_D13        (1u << 23) /**< \brief Ebi signal: D13 */\r
+#define PIO_PB24B_D14        (1u << 24) /**< \brief Ebi signal: D14 */\r
+#define PIO_PB25B_D15        (1u << 25) /**< \brief Ebi signal: D15 */\r
+#define PIO_PC7A_D2          (1u << 7)  /**< \brief Ebi signal: D2 */\r
+#define PIO_PC8A_D3          (1u << 8)  /**< \brief Ebi signal: D3 */\r
+#define PIO_PC9A_D4          (1u << 9)  /**< \brief Ebi signal: D4 */\r
+#define PIO_PC10A_D5         (1u << 10) /**< \brief Ebi signal: D5 */\r
+#define PIO_PC11A_D6         (1u << 11) /**< \brief Ebi signal: D6 */\r
+#define PIO_PC12A_D7         (1u << 12) /**< \brief Ebi signal: D7 */\r
+#define PIO_PB18B_D8         (1u << 18) /**< \brief Ebi signal: D8 */\r
+#define PIO_PB19B_D9         (1u << 19) /**< \brief Ebi signal: D9 */\r
+#define PIO_PC16A_NANDRDY    (1u << 16) /**< \brief Ebi signal: NANDRDY */\r
+#define PIO_PE24A_NCS0       (1u << 24) /**< \brief Ebi signal: NCS0 */\r
+#define PIO_PE25A_NCS1       (1u << 25) /**< \brief Ebi signal: NCS1 */\r
+#define PIO_PE26A_NCS2       (1u << 26) /**< \brief Ebi signal: NCS2 */\r
+#define PIO_PC15A_NCS3       (1u << 15) /**< \brief Ebi signal: NCS3 */\r
+#define PIO_PC13A_NRD        (1u << 13) /**< \brief Ebi signal: NRD/NANDOE */\r
+#define PIO_PC13A_NANDOE     (1u << 13) /**< \brief Ebi signal: NRD/NANDOE */\r
+#define PIO_PE28A_NWAIT      (1u << 28) /**< \brief Ebi signal: NWAIT */\r
+#define PIO_PC14A_NWE        (1u << 14) /**< \brief Ebi signal: NWE/NANDWE */\r
+#define PIO_PC14A_NANDWE     (1u << 14) /**< \brief Ebi signal: NWE/NANDWE */\r
+#define PIO_PE27A_NWR1       (1u << 27) /**< \brief Ebi signal: NWR1/NBS1 */\r
+#define PIO_PE27A_NBS1       (1u << 27) /**< \brief Ebi signal: NWR1/NBS1 */\r
+/* ========== Pio definition for GMAC0 peripheral ========== */\r
+#define PIO_PB5A_G0_COL      (1u << 5)  /**< \brief Gmac0 signal: G0_COL */\r
+#define PIO_PB4A_G0_CRS      (1u << 4)  /**< \brief Gmac0 signal: G0_CRS */\r
+#define PIO_PB16A_G0_MDC     (1u << 16) /**< \brief Gmac0 signal: G0_MDC */\r
+#define PIO_PB17A_G0_MDIO    (1u << 17) /**< \brief Gmac0 signal: G0_MDIO */\r
+#define PIO_PB8A_G0_RX0      (1u << 8)  /**< \brief Gmac0 signal: G0_RX0 */\r
+#define PIO_PB9A_G0_RX1      (1u << 9)  /**< \brief Gmac0 signal: G0_RX1 */\r
+#define PIO_PB10A_G0_RX2     (1u << 10) /**< \brief Gmac0 signal: G0_RX2 */\r
+#define PIO_PB11A_G0_RX3     (1u << 11) /**< \brief Gmac0 signal: G0_RX3 */\r
+#define PIO_PB1A_G0_RXCK     (1u << 1)  /**< \brief Gmac0 signal: G0_RXCK */\r
+#define PIO_PB6A_G0_RXDV     (1u << 6)  /**< \brief Gmac0 signal: G0_RXDV */\r
+#define PIO_PB7A_G0_RXER     (1u << 7)  /**< \brief Gmac0 signal: G0_RXER */\r
+#define PIO_PB12A_G0_TX0     (1u << 12) /**< \brief Gmac0 signal: G0_TX0 */\r
+#define PIO_PB13A_G0_TX1     (1u << 13) /**< \brief Gmac0 signal: G0_TX1 */\r
+#define PIO_PB14A_G0_TX2     (1u << 14) /**< \brief Gmac0 signal: G0_TX2 */\r
+#define PIO_PB15A_G0_TX3     (1u << 15) /**< \brief Gmac0 signal: G0_TX3 */\r
+#define PIO_PB0A_G0_TXCK     (1u << 0)  /**< \brief Gmac0 signal: G0_TXCK */\r
+#define PIO_PB2A_G0_TXEN     (1u << 2)  /**< \brief Gmac0 signal: G0_TXEN */\r
+#define PIO_PB3A_G0_TXER     (1u << 3)  /**< \brief Gmac0 signal: G0_TXER */\r
+/* ========== Pio definition for GMAC1 peripheral ========== */\r
+#define PIO_PA9B_G1_COL      (1u << 9)  /**< \brief Gmac1 signal: G1_COL */\r
+#define PIO_PA6B_G1_CRS      (1u << 6)  /**< \brief Gmac1 signal: G1_CRS */\r
+#define PIO_PA22B_G1_MDC     (1u << 22) /**< \brief Gmac1 signal: G1_MDC */\r
+#define PIO_PA23B_G1_MDIO    (1u << 23) /**< \brief Gmac1 signal: G1_MDIO */\r
+#define PIO_PA12B_G1_RX0     (1u << 12) /**< \brief Gmac1 signal: G1_RX0 */\r
+#define PIO_PA13B_G1_RX1     (1u << 13) /**< \brief Gmac1 signal: G1_RX1 */\r
+#define PIO_PA18B_G1_RX2     (1u << 18) /**< \brief Gmac1 signal: G1_RX2 */\r
+#define PIO_PA19B_G1_RX3     (1u << 19) /**< \brief Gmac1 signal: G1_RX3 */\r
+#define PIO_PA3B_G1_RXCK     (1u << 3)  /**< \brief Gmac1 signal: G1_RXCK */\r
+#define PIO_PA10B_G1_RXDV    (1u << 10) /**< \brief Gmac1 signal: G1_RXDV */\r
+#define PIO_PA11B_G1_RXER    (1u << 11) /**< \brief Gmac1 signal: G1_RXER */\r
+#define PIO_PA14B_G1_TX0     (1u << 14) /**< \brief Gmac1 signal: G1_TX0 */\r
+#define PIO_PA15B_G1_TX1     (1u << 15) /**< \brief Gmac1 signal: G1_TX1 */\r
+#define PIO_PA20B_G1_TX2     (1u << 20) /**< \brief Gmac1 signal: G1_TX2 */\r
+#define PIO_PA21B_G1_TX3     (1u << 21) /**< \brief Gmac1 signal: G1_TX3 */\r
+#define PIO_PA2B_G1_TXCK     (1u << 2)  /**< \brief Gmac1 signal: G1_TXCK */\r
+#define PIO_PA4B_G1_TXEN     (1u << 4)  /**< \brief Gmac1 signal: G1_TXEN */\r
+#define PIO_PA5B_G1_TXER     (1u << 5)  /**< \brief Gmac1 signal: G1_TXER */\r
+/* ========== Pio definition for HSMCI0 peripheral ========== */\r
+#define PIO_PC5B_MCI0_CDA    (1u << 5)  /**< \brief Hsmci0 signal: MCI0_CDA */\r
+#define PIO_PE0B_MCI0_CDB    (1u << 0)  /**< \brief Hsmci0 signal: MCI0_CDB */\r
+#define PIO_PC4B_MCI0_CK     (1u << 4)  /**< \brief Hsmci0 signal: MCI0_CK */\r
+#define PIO_PC6B_MCI0_DA0    (1u << 6)  /**< \brief Hsmci0 signal: MCI0_DA0 */\r
+#define PIO_PC7B_MCI0_DA1    (1u << 7)  /**< \brief Hsmci0 signal: MCI0_DA1 */\r
+#define PIO_PC8B_MCI0_DA2    (1u << 8)  /**< \brief Hsmci0 signal: MCI0_DA2 */\r
+#define PIO_PC9B_MCI0_DA3    (1u << 9)  /**< \brief Hsmci0 signal: MCI0_DA3 */\r
+#define PIO_PC10B_MCI0_DA4   (1u << 10) /**< \brief Hsmci0 signal: MCI0_DA4 */\r
+#define PIO_PC11B_MCI0_DA5   (1u << 11) /**< \brief Hsmci0 signal: MCI0_DA5 */\r
+#define PIO_PC12B_MCI0_DA6   (1u << 12) /**< \brief Hsmci0 signal: MCI0_DA6 */\r
+#define PIO_PC13B_MCI0_DA7   (1u << 13) /**< \brief Hsmci0 signal: MCI0_DA7 */\r
+#define PIO_PE1B_MCI0_DB0    (1u << 1)  /**< \brief Hsmci0 signal: MCI0_DB0 */\r
+#define PIO_PE2B_MCI0_DB1    (1u << 2)  /**< \brief Hsmci0 signal: MCI0_DB1 */\r
+#define PIO_PE3B_MCI0_DB2    (1u << 3)  /**< \brief Hsmci0 signal: MCI0_DB2 */\r
+#define PIO_PE4B_MCI0_DB3    (1u << 4)  /**< \brief Hsmci0 signal: MCI0_DB3 */\r
+/* ========== Pio definition for HSMCI1 peripheral ========== */\r
+#define PIO_PE19C_MCI1_CDA   (1u << 19) /**< \brief Hsmci1 signal: MCI1_CDA */\r
+#define PIO_PE18C_MCI1_CK    (1u << 18) /**< \brief Hsmci1 signal: MCI1_CK */\r
+#define PIO_PE20C_MCI1_DA0   (1u << 20) /**< \brief Hsmci1 signal: MCI1_DA0 */\r
+#define PIO_PE21C_MCI1_DA1   (1u << 21) /**< \brief Hsmci1 signal: MCI1_DA1 */\r
+#define PIO_PE22C_MCI1_DA2   (1u << 22) /**< \brief Hsmci1 signal: MCI1_DA2 */\r
+#define PIO_PE23C_MCI1_DA3   (1u << 23) /**< \brief Hsmci1 signal: MCI1_DA3 */\r
+/* ========== Pio definition for ISI peripheral ========== */\r
+#define PIO_PC19A_ISI_D0     (1u << 19) /**< \brief Isi signal: ISI_D0 */\r
+#define PIO_PC20A_ISI_D1     (1u << 20) /**< \brief Isi signal: ISI_D1 */\r
+#define PIO_PC2C_ISI_D10     (1u << 2)  /**< \brief Isi signal: ISI_D10 */\r
+#define PIO_PC3C_ISI_D11     (1u << 3)  /**< \brief Isi signal: ISI_D11 */\r
+#define PIO_PC21A_ISI_D2     (1u << 21) /**< \brief Isi signal: ISI_D2 */\r
+#define PIO_PC22A_ISI_D3     (1u << 22) /**< \brief Isi signal: ISI_D3 */\r
+#define PIO_PC23A_ISI_D4     (1u << 23) /**< \brief Isi signal: ISI_D4 */\r
+#define PIO_PC24A_ISI_D5     (1u << 24) /**< \brief Isi signal: ISI_D5 */\r
+#define PIO_PC25A_ISI_D6     (1u << 25) /**< \brief Isi signal: ISI_D6 */\r
+#define PIO_PC26A_ISI_D7     (1u << 26) /**< \brief Isi signal: ISI_D7 */\r
+#define PIO_PC0C_ISI_D8      (1u << 0)  /**< \brief Isi signal: ISI_D8 */\r
+#define PIO_PC1C_ISI_D9      (1u << 1)  /**< \brief Isi signal: ISI_D9 */\r
+#define PIO_PB4C_ISI_HSYNC   (1u << 4)  /**< \brief Isi signal: ISI_HSYNC */\r
+#define PIO_PB1C_ISI_PCK     (1u << 1)  /**< \brief Isi signal: ISI_PCK */\r
+#define PIO_PB3C_ISI_VSYNC   (1u << 3)  /**< \brief Isi signal: ISI_VSYNC */\r
+/* ========== Pio definition for LCDC peripheral ========== */\r
+#define PIO_PA0A_LCDDAT0     (1u << 0)  /**< \brief Lcdc signal: LCDDAT0 */\r
+#define PIO_PA1A_LCDDAT1     (1u << 1)  /**< \brief Lcdc signal: LCDDAT1 */\r
+#define PIO_PA10A_LCDDAT10   (1u << 10) /**< \brief Lcdc signal: LCDDAT10 */\r
+#define PIO_PA11A_LCDDAT11   (1u << 11) /**< \brief Lcdc signal: LCDDAT11 */\r
+#define PIO_PA12A_LCDDAT12   (1u << 12) /**< \brief Lcdc signal: LCDDAT12 */\r
+#define PIO_PA13A_LCDDAT13   (1u << 13) /**< \brief Lcdc signal: LCDDAT13 */\r
+#define PIO_PA14A_LCDDAT14   (1u << 14) /**< \brief Lcdc signal: LCDDAT14 */\r
+#define PIO_PA15A_LCDDAT15   (1u << 15) /**< \brief Lcdc signal: LCDDAT15 */\r
+#define PIO_PA16A_LCDDAT16   (1u << 16) /**< \brief Lcdc signal: LCDDAT16 */\r
+#define PIO_PA17A_LCDDAT17   (1u << 17) /**< \brief Lcdc signal: LCDDAT17 */\r
+#define PIO_PA18A_LCDDAT18   (1u << 18) /**< \brief Lcdc signal: LCDDAT18 */\r
+#define PIO_PA19A_LCDDAT19   (1u << 19) /**< \brief Lcdc signal: LCDDAT19 */\r
+#define PIO_PA2A_LCDDAT2     (1u << 2)  /**< \brief Lcdc signal: LCDDAT2 */\r
+#define PIO_PA20A_LCDDAT20   (1u << 20) /**< \brief Lcdc signal: LCDDAT20 */\r
+#define PIO_PA21A_LCDDAT21   (1u << 21) /**< \brief Lcdc signal: LCDDAT21 */\r
+#define PIO_PA22A_LCDDAT22   (1u << 22) /**< \brief Lcdc signal: LCDDAT22 */\r
+#define PIO_PA23A_LCDDAT23   (1u << 23) /**< \brief Lcdc signal: LCDDAT23 */\r
+#define PIO_PA3A_LCDDAT3     (1u << 3)  /**< \brief Lcdc signal: LCDDAT3 */\r
+#define PIO_PA4A_LCDDAT4     (1u << 4)  /**< \brief Lcdc signal: LCDDAT4 */\r
+#define PIO_PA5A_LCDDAT5     (1u << 5)  /**< \brief Lcdc signal: LCDDAT5 */\r
+#define PIO_PA6A_LCDDAT6     (1u << 6)  /**< \brief Lcdc signal: LCDDAT6 */\r
+#define PIO_PA7A_LCDDAT7     (1u << 7)  /**< \brief Lcdc signal: LCDDAT7 */\r
+#define PIO_PA8A_LCDDAT8     (1u << 8)  /**< \brief Lcdc signal: LCDDAT8 */\r
+#define PIO_PA9A_LCDDAT9     (1u << 9)  /**< \brief Lcdc signal: LCDDAT9 */\r
+#define PIO_PA29A_LCDDEN     (1u << 29) /**< \brief Lcdc signal: LCDDEN */\r
+#define PIO_PA25A_LCDDISP    (1u << 25) /**< \brief Lcdc signal: LCDDISP */\r
+#define PIO_PA27A_LCDHSYNC   (1u << 27) /**< \brief Lcdc signal: LCDHSYNC */\r
+#define PIO_PA28A_LCDPCK     (1u << 28) /**< \brief Lcdc signal: LCDPCK */\r
+#define PIO_PA24A_LCDPWM     (1u << 24) /**< \brief Lcdc signal: LCDPWM */\r
+#define PIO_PA26A_LCDVSYNC   (1u << 26) /**< \brief Lcdc signal: LCDVSYNC */\r
+/* ========== Pio definition for PMC peripheral ========== */\r
+#define PIO_PA24B_PCK0       (1u << 24) /**< \brief Pmc signal: PCK0 */\r
+#define PIO_PB26A_PCK0       (1u << 26) /**< \brief Pmc signal: PCK0 */\r
+#define PIO_PD8A_PCK0        (1u << 8)  /**< \brief Pmc signal: PCK0 */\r
+#define PIO_PC4C_PCK1        (1u << 4)  /**< \brief Pmc signal: PCK1 */\r
+#define PIO_PC24C_PCK1       (1u << 24) /**< \brief Pmc signal: PCK1 */\r
+#define PIO_PD31B_PCK1       (1u << 31) /**< \brief Pmc signal: PCK1 */\r
+#define PIO_PB5C_PCK2        (1u << 5)  /**< \brief Pmc signal: PCK2 */\r
+#define PIO_PB10B_PCK2       (1u << 10) /**< \brief Pmc signal: PCK2 */\r
+/* ========== Pio definition for PWM peripheral ========== */\r
+#define PIO_PC29C_PWMFI0     (1u << 29) /**< \brief Pwm signal: PWMFI0 */\r
+#define PIO_PE7C_PWMFI1      (1u << 7)  /**< \brief Pwm signal: PWMFI1 */\r
+#define PIO_PA26B_PWMH0      (1u << 26) /**< \brief Pwm signal: PWMH0 */\r
+#define PIO_PB14C_PWMH0      (1u << 14) /**< \brief Pwm signal: PWMH0 */\r
+#define PIO_PB26C_PWMH0      (1u << 26) /**< \brief Pwm signal: PWMH0 */\r
+#define PIO_PC30C_PWMH0      (1u << 30) /**< \brief Pwm signal: PWMH0 */\r
+#define PIO_PA28B_PWMH1      (1u << 28) /**< \brief Pwm signal: PWMH1 */\r
+#define PIO_PB11C_PWMH1      (1u << 11) /**< \brief Pwm signal: PWMH1 */\r
+#define PIO_PB28C_PWMH1      (1u << 28) /**< \brief Pwm signal: PWMH1 */\r
+#define PIO_PC31C_PWMH1      (1u << 31) /**< \brief Pwm signal: PWMH1 */\r
+#define PIO_PC0B_PWMH2       (1u << 0)  /**< \brief Pwm signal: PWMH2 */\r
+#define PIO_PE12C_PWMH2      (1u << 12) /**< \brief Pwm signal: PWMH2 */\r
+#define PIO_PC2B_PWMH3       (1u << 2)  /**< \brief Pwm signal: PWMH3 */\r
+#define PIO_PE14C_PWMH3      (1u << 14) /**< \brief Pwm signal: PWMH3 */\r
+#define PIO_PA27B_PWML0      (1u << 27) /**< \brief Pwm signal: PWML0 */\r
+#define PIO_PB15C_PWML0      (1u << 15) /**< \brief Pwm signal: PWML0 */\r
+#define PIO_PB27C_PWML0      (1u << 27) /**< \brief Pwm signal: PWML0 */\r
+#define PIO_PC27C_PWML0      (1u << 27) /**< \brief Pwm signal: PWML0 */\r
+#define PIO_PA29B_PWML1      (1u << 29) /**< \brief Pwm signal: PWML1 */\r
+#define PIO_PB10C_PWML1      (1u << 10) /**< \brief Pwm signal: PWML1 */\r
+#define PIO_PB29C_PWML1      (1u << 29) /**< \brief Pwm signal: PWML1 */\r
+#define PIO_PC28C_PWML1      (1u << 28) /**< \brief Pwm signal: PWML1 */\r
+#define PIO_PC1B_PWML2       (1u << 1)  /**< \brief Pwm signal: PWML2 */\r
+#define PIO_PE13C_PWML2      (1u << 13) /**< \brief Pwm signal: PWML2 */\r
+#define PIO_PC3B_PWML3       (1u << 3)  /**< \brief Pwm signal: PWML3 */\r
+#define PIO_PE8C_PWML3       (1u << 8)  /**< \brief Pwm signal: PWML3 */\r
+/* ========== Pio definition for SMD peripheral ========== */\r
+#define PIO_PE30A_DIBN       (1u << 30) /**< \brief Smd signal: DIBN */\r
+#define PIO_PE29A_DIBP       (1u << 29) /**< \brief Smd signal: DIBP */\r
+/* ========== Pio definition for SPI0 peripheral ========== */\r
+#define PIO_PC0A_SPI0_MISO   (1u << 0)  /**< \brief Spi0 signal: SPI0_MISO */\r
+#define PIO_PC1A_SPI0_MOSI   (1u << 1)  /**< \brief Spi0 signal: SPI0_MOSI */\r
+#define PIO_PC3A_SPI0_NPCS0  (1u << 3)  /**< \brief Spi0 signal: SPI0_NPCS0 */\r
+#define PIO_PC4A_SPI0_NPCS1  (1u << 4)  /**< \brief Spi0 signal: SPI0_NPCS1 */\r
+#define PIO_PC27B_SPI0_NPCS1 (1u << 27) /**< \brief Spi0 signal: SPI0_NPCS1 */\r
+#define PIO_PC28B_SPI0_NPCS2 (1u << 28) /**< \brief Spi0 signal: SPI0_NPCS2 */\r
+#define PIO_PD31A_SPI0_NPCS2 (1u << 31) /**< \brief Spi0 signal: SPI0_NPCS2 */\r
+#define PIO_PC29B_SPI0_NPCS3 (1u << 29) /**< \brief Spi0 signal: SPI0_NPCS3 */\r
+#define PIO_PC2A_SPI0_SPCK   (1u << 2)  /**< \brief Spi0 signal: SPI0_SPCK */\r
+/* ========== Pio definition for SPI1 peripheral ========== */\r
+#define PIO_PB18A_SPI1_MISO  (1u << 18) /**< \brief Spi1 signal: SPI1_MISO */\r
+#define PIO_PB19A_SPI1_MOSI  (1u << 19) /**< \brief Spi1 signal: SPI1_MOSI */\r
+#define PIO_PB21A_SPI1_NPCS0 (1u << 21) /**< \brief Spi1 signal: SPI1_NPCS0 */\r
+#define PIO_PA26C_SPI1_NPCS1 (1u << 26) /**< \brief Spi1 signal: SPI1_NPCS1 */\r
+#define PIO_PB22A_SPI1_NPCS1 (1u << 22) /**< \brief Spi1 signal: SPI1_NPCS1 */\r
+#define PIO_PA27C_SPI1_NPCS2 (1u << 27) /**< \brief Spi1 signal: SPI1_NPCS2 */\r
+#define PIO_PB23A_SPI1_NPCS2 (1u << 23) /**< \brief Spi1 signal: SPI1_NPCS2 */\r
+#define PIO_PA28C_SPI1_NPCS3 (1u << 28) /**< \brief Spi1 signal: SPI1_NPCS3 */\r
+#define PIO_PB27A_SPI1_NPCS3 (1u << 27) /**< \brief Spi1 signal: SPI1_NPCS3 */\r
+#define PIO_PB20A_SPI1_SPCK  (1u << 20) /**< \brief Spi1 signal: SPI1_SPCK */\r
+/* ========== Pio definition for SPI2 peripheral ========== */\r
+#define PIO_PD11B_SPI2_MISO  (1u << 11) /**< \brief Spi2 signal: SPI2_MISO */\r
+#define PIO_PD13B_SPI2_MOSI  (1u << 13) /**< \brief Spi2 signal: SPI2_MOSI */\r
+#define PIO_PD17B_SPI2_NPCS0 (1u << 17) /**< \brief Spi2 signal: SPI2_NPCS0 */\r
+#define PIO_PB14B_SPI2_NPCS1 (1u << 14) /**< \brief Spi2 signal: SPI2_NPCS1 */\r
+#define PIO_PB15B_SPI2_NPCS2 (1u << 15) /**< \brief Spi2 signal: SPI2_NPCS2 */\r
+#define PIO_PB28A_SPI2_NPCS3 (1u << 28) /**< \brief Spi2 signal: SPI2_NPCS3 */\r
+#define PIO_PD15B_SPI2_SPCK  (1u << 15) /**< \brief Spi2 signal: SPI2_SPCK */\r
+/* ========== Pio definition for SSC0 peripheral ========== */\r
+#define PIO_PB29B_RD0        (1u << 29) /**< \brief Ssc0 signal: RD0 */\r
+#define PIO_PB30B_RF0        (1u << 30) /**< \brief Ssc0 signal: RF0 */\r
+#define PIO_PB26B_RK0        (1u << 26) /**< \brief Ssc0 signal: RK0 */\r
+#define PIO_PA25B_TD0        (1u << 25) /**< \brief Ssc0 signal: TD0 */\r
+#define PIO_PB28B_TD0        (1u << 28) /**< \brief Ssc0 signal: TD0 */\r
+#define PIO_PB31B_TF0        (1u << 31) /**< \brief Ssc0 signal: TF0 */\r
+#define PIO_PB27B_TK0        (1u << 27) /**< \brief Ssc0 signal: TK0 */\r
+/* ========== Pio definition for SSC1 peripheral ========== */\r
+#define PIO_PC23B_RD1        (1u << 23) /**< \brief Ssc1 signal: RD1 */\r
+#define PIO_PC22B_RF1        (1u << 22) /**< \brief Ssc1 signal: RF1 */\r
+#define PIO_PC24B_RK1        (1u << 24) /**< \brief Ssc1 signal: RK1 */\r
+#define PIO_PC21B_TD1        (1u << 21) /**< \brief Ssc1 signal: TD1 */\r
+#define PIO_PC20B_TF1        (1u << 20) /**< \brief Ssc1 signal: TF1 */\r
+#define PIO_PC19B_TK1        (1u << 19) /**< \brief Ssc1 signal: TK1 */\r
+/* ========== Pio definition for TC0 peripheral ========== */\r
+#define PIO_PE17C_TCLK0      (1u << 17) /**< \brief Tc0 signal: TCLK0 */\r
+#define PIO_PE14B_TCLK1      (1u << 14) /**< \brief Tc0 signal: TCLK1 */\r
+#define PIO_PE11B_TCLK2      (1u << 11) /**< \brief Tc0 signal: TCLK2 */\r
+#define PIO_PE15C_TIOA0      (1u << 15) /**< \brief Tc0 signal: TIOA0 */\r
+#define PIO_PE12B_TIOA1      (1u << 12) /**< \brief Tc0 signal: TIOA1 */\r
+#define PIO_PE9B_TIOA2       (1u << 9)  /**< \brief Tc0 signal: TIOA2 */\r
+#define PIO_PE16C_TIOB0      (1u << 16) /**< \brief Tc0 signal: TIOB0 */\r
+#define PIO_PE13B_TIOB1      (1u << 13) /**< \brief Tc0 signal: TIOB1 */\r
+#define PIO_PE10B_TIOB2      (1u << 10) /**< \brief Tc0 signal: TIOB2 */\r
+/* ========== Pio definition for TC1 peripheral ========== */\r
+#define PIO_PE8B_TCLK3       (1u << 8)  /**< \brief Tc1 signal: TCLK3 */\r
+#define PIO_PE23B_TCLK4      (1u << 23) /**< \brief Tc1 signal: TCLK4 */\r
+#define PIO_PE20B_TCLK5      (1u << 20) /**< \brief Tc1 signal: TCLK5 */\r
+#define PIO_PE6B_TIOA3       (1u << 6)  /**< \brief Tc1 signal: TIOA3 */\r
+#define PIO_PE21B_TIOA4      (1u << 21) /**< \brief Tc1 signal: TIOA4 */\r
+#define PIO_PE18B_TIOA5      (1u << 18) /**< \brief Tc1 signal: TIOA5 */\r
+#define PIO_PE7B_TIOB3       (1u << 7)  /**< \brief Tc1 signal: TIOB3 */\r
+#define PIO_PE22B_TIOB4      (1u << 22) /**< \brief Tc1 signal: TIOB4 */\r
+#define PIO_PE19B_TIOB5      (1u << 19) /**< \brief Tc1 signal: TIOB5 */\r
+/* ========== Pio definition for TWI0 peripheral ========== */\r
+#define PIO_PA31A_TWCK0      (1u << 31) /**< \brief Twi0 signal: TWCK0 */\r
+#define PIO_PA30A_TWD0       (1u << 30) /**< \brief Twi0 signal: TWD0 */\r
+/* ========== Pio definition for TWI1 peripheral ========== */\r
+#define PIO_PE30C_TWCK1      (1u << 30) /**< \brief Twi1 signal: TWCK1 */\r
+#define PIO_PE29C_TWD1       (1u << 29) /**< \brief Twi1 signal: TWD1 */\r
+/* ========== Pio definition for TWI2 peripheral ========== */\r
+#define PIO_PB30A_TWCK2      (1u << 30) /**< \brief Twi2 signal: TWCK2 */\r
+#define PIO_PB29A_TWD2       (1u << 29) /**< \brief Twi2 signal: TWD2 */\r
+/* ========== Pio definition for TWI3 peripheral ========== */\r
+#define PIO_PC26B_TWCK3      (1u << 26) /**< \brief Twi3 signal: TWCK3 */\r
+#define PIO_PC25B_TWD3       (1u << 25) /**< \brief Twi3 signal: TWD3 */\r
+/* ========== Pio definition for UART0 peripheral ========== */\r
+#define PIO_PE29B_URXD0      (1u << 29) /**< \brief Uart0 signal: URXD0 */\r
+#define PIO_PE30B_UTXD0      (1u << 30) /**< \brief Uart0 signal: UTXD0 */\r
+/* ========== Pio definition for UART1 peripheral ========== */\r
+#define PIO_PC25C_URXD1      (1u << 25) /**< \brief Uart1 signal: URXD1 */\r
+#define PIO_PC26C_UTXD1      (1u << 26) /**< \brief Uart1 signal: UTXD1 */\r
+/* ========== Pio definition for USART0 peripheral ========== */\r
+#define PIO_PD10A_CTS0       (1u << 10) /**< \brief Usart0 signal: CTS0 */\r
+#define PIO_PD11A_RTS0       (1u << 11) /**< \brief Usart0 signal: RTS0 */\r
+#define PIO_PD12A_RXD0       (1u << 12) /**< \brief Usart0 signal: RXD0 */\r
+#define PIO_PD28A_SCK0       (1u << 28) /**< \brief Usart0 signal: SCK0 */\r
+#define PIO_PD13A_TXD0       (1u << 13) /**< \brief Usart0 signal: TXD0 */\r
+/* ========== Pio definition for USART1 peripheral ========== */\r
+#define PIO_PD14A_CTS1       (1u << 14) /**< \brief Usart1 signal: CTS1 */\r
+#define PIO_PD15A_RTS1       (1u << 15) /**< \brief Usart1 signal: RTS1 */\r
+#define PIO_PD16A_RXD1       (1u << 16) /**< \brief Usart1 signal: RXD1 */\r
+#define PIO_PD29A_SCK1       (1u << 29) /**< \brief Usart1 signal: SCK1 */\r
+#define PIO_PD17A_TXD1       (1u << 17) /**< \brief Usart1 signal: TXD1 */\r
+/* ========== Pio definition for USART2 peripheral ========== */\r
+#define PIO_PB3B_CTS2        (1u << 3)  /**< \brief Usart2 signal: CTS2 */\r
+#define PIO_PB11B_RTS2       (1u << 11) /**< \brief Usart2 signal: RTS2 */\r
+#define PIO_PB4B_RXD2        (1u << 4)  /**< \brief Usart2 signal: RXD2 */\r
+#define PIO_PB1B_SCK2        (1u << 1)  /**< \brief Usart2 signal: SCK2 */\r
+#define PIO_PB5B_TXD2        (1u << 5)  /**< \brief Usart2 signal: TXD2 */\r
+/* ========== Pio definition for USART3 peripheral ========== */\r
+#define PIO_PE5B_CTS3        (1u << 5)  /**< \brief Usart3 signal: CTS3 */\r
+#define PIO_PE24B_RTS3       (1u << 24) /**< \brief Usart3 signal: RTS3 */\r
+#define PIO_PE16B_RXD3       (1u << 16) /**< \brief Usart3 signal: RXD3 */\r
+#define PIO_PE15B_SCK3       (1u << 15) /**< \brief Usart3 signal: SCK3 */\r
+#define PIO_PE17B_TXD3       (1u << 17) /**< \brief Usart3 signal: TXD3 */\r
+/* ========== Pio definition for USART4 peripheral ========== */\r
+#define PIO_PE0C_CTS4        (1u << 0)  /**< \brief Usart4 signal: CTS4 */\r
+#define PIO_PE28B_RTS4       (1u << 28) /**< \brief Usart4 signal: RTS4 */\r
+#define PIO_PE26B_RXD4       (1u << 26) /**< \brief Usart4 signal: RXD4 */\r
+#define PIO_PE25B_SCK4       (1u << 25) /**< \brief Usart4 signal: SCK4 */\r
+#define PIO_PE27B_TXD4       (1u << 27) /**< \brief Usart4 signal: TXD4 */\r
+/* ========== Pio indexes ========== */\r
+#define PIO_PA0_IDX          0\r
+#define PIO_PA1_IDX          1\r
+#define PIO_PA2_IDX          2\r
+#define PIO_PA3_IDX          3\r
+#define PIO_PA4_IDX          4\r
+#define PIO_PA5_IDX          5\r
+#define PIO_PA6_IDX          6\r
+#define PIO_PA7_IDX          7\r
+#define PIO_PA8_IDX          8\r
+#define PIO_PA9_IDX          9\r
+#define PIO_PA10_IDX         10\r
+#define PIO_PA11_IDX         11\r
+#define PIO_PA12_IDX         12\r
+#define PIO_PA13_IDX         13\r
+#define PIO_PA14_IDX         14\r
+#define PIO_PA15_IDX         15\r
+#define PIO_PA16_IDX         16\r
+#define PIO_PA17_IDX         17\r
+#define PIO_PA18_IDX         18\r
+#define PIO_PA19_IDX         19\r
+#define PIO_PA20_IDX         20\r
+#define PIO_PA21_IDX         21\r
+#define PIO_PA22_IDX         22\r
+#define PIO_PA23_IDX         23\r
+#define PIO_PA24_IDX         24\r
+#define PIO_PA25_IDX         25\r
+#define PIO_PA26_IDX         26\r
+#define PIO_PA27_IDX         27\r
+#define PIO_PA28_IDX         28\r
+#define PIO_PA29_IDX         29\r
+#define PIO_PA30_IDX         30\r
+#define PIO_PA31_IDX         31\r
+#define PIO_PB0_IDX          32\r
+#define PIO_PB1_IDX          33\r
+#define PIO_PB2_IDX          34\r
+#define PIO_PB3_IDX          35\r
+#define PIO_PB4_IDX          36\r
+#define PIO_PB5_IDX          37\r
+#define PIO_PB6_IDX          38\r
+#define PIO_PB7_IDX          39\r
+#define PIO_PB8_IDX          40\r
+#define PIO_PB9_IDX          41\r
+#define PIO_PB10_IDX         42\r
+#define PIO_PB11_IDX         43\r
+#define PIO_PB12_IDX         44\r
+#define PIO_PB13_IDX         45\r
+#define PIO_PB14_IDX         46\r
+#define PIO_PB15_IDX         47\r
+#define PIO_PB16_IDX         48\r
+#define PIO_PB17_IDX         49\r
+#define PIO_PB18_IDX         50\r
+#define PIO_PB19_IDX         51\r
+#define PIO_PB20_IDX         52\r
+#define PIO_PB21_IDX         53\r
+#define PIO_PB22_IDX         54\r
+#define PIO_PB23_IDX         55\r
+#define PIO_PB24_IDX         56\r
+#define PIO_PB25_IDX         57\r
+#define PIO_PB26_IDX         58\r
+#define PIO_PB27_IDX         59\r
+#define PIO_PB28_IDX         60\r
+#define PIO_PB29_IDX         61\r
+#define PIO_PB30_IDX         62\r
+#define PIO_PB31_IDX         63\r
+#define PIO_PC0_IDX          64\r
+#define PIO_PC1_IDX          65\r
+#define PIO_PC2_IDX          66\r
+#define PIO_PC3_IDX          67\r
+#define PIO_PC4_IDX          68\r
+#define PIO_PC5_IDX          69\r
+#define PIO_PC6_IDX          70\r
+#define PIO_PC7_IDX          71\r
+#define PIO_PC8_IDX          72\r
+#define PIO_PC9_IDX          73\r
+#define PIO_PC10_IDX         74\r
+#define PIO_PC11_IDX         75\r
+#define PIO_PC12_IDX         76\r
+#define PIO_PC13_IDX         77\r
+#define PIO_PC14_IDX         78\r
+#define PIO_PC15_IDX         79\r
+#define PIO_PC16_IDX         80\r
+#define PIO_PC17_IDX         81\r
+#define PIO_PC18_IDX         82\r
+#define PIO_PC19_IDX         83\r
+#define PIO_PC20_IDX         84\r
+#define PIO_PC21_IDX         85\r
+#define PIO_PC22_IDX         86\r
+#define PIO_PC23_IDX         87\r
+#define PIO_PC24_IDX         88\r
+#define PIO_PC25_IDX         89\r
+#define PIO_PC26_IDX         90\r
+#define PIO_PC27_IDX         91\r
+#define PIO_PC28_IDX         92\r
+#define PIO_PC29_IDX         93\r
+#define PIO_PC30_IDX         94\r
+#define PIO_PC31_IDX         95\r
+#define PIO_PD0_IDX          96\r
+#define PIO_PD1_IDX          97\r
+#define PIO_PD2_IDX          98\r
+#define PIO_PD3_IDX          99\r
+#define PIO_PD4_IDX          100\r
+#define PIO_PD5_IDX          101\r
+#define PIO_PD6_IDX          102\r
+#define PIO_PD7_IDX          103\r
+#define PIO_PD8_IDX          104\r
+#define PIO_PD9_IDX          105\r
+#define PIO_PD10_IDX         106\r
+#define PIO_PD11_IDX         107\r
+#define PIO_PD12_IDX         108\r
+#define PIO_PD13_IDX         109\r
+#define PIO_PD14_IDX         110\r
+#define PIO_PD15_IDX         111\r
+#define PIO_PD16_IDX         112\r
+#define PIO_PD17_IDX         113\r
+#define PIO_PD18_IDX         114\r
+#define PIO_PD19_IDX         115\r
+#define PIO_PD20_IDX         116\r
+#define PIO_PD21_IDX         117\r
+#define PIO_PD22_IDX         118\r
+#define PIO_PD23_IDX         119\r
+#define PIO_PD24_IDX         120\r
+#define PIO_PD25_IDX         121\r
+#define PIO_PD26_IDX         122\r
+#define PIO_PD27_IDX         123\r
+#define PIO_PD28_IDX         124\r
+#define PIO_PD29_IDX         125\r
+#define PIO_PD30_IDX         126\r
+#define PIO_PD31_IDX         127\r
+#define PIO_PE0_IDX          128\r
+#define PIO_PE1_IDX          129\r
+#define PIO_PE2_IDX          130\r
+#define PIO_PE3_IDX          131\r
+#define PIO_PE4_IDX          132\r
+#define PIO_PE5_IDX          133\r
+#define PIO_PE6_IDX          134\r
+#define PIO_PE7_IDX          135\r
+#define PIO_PE8_IDX          136\r
+#define PIO_PE9_IDX          137\r
+#define PIO_PE10_IDX         138\r
+#define PIO_PE11_IDX         139\r
+#define PIO_PE12_IDX         140\r
+#define PIO_PE13_IDX         141\r
+#define PIO_PE14_IDX         142\r
+#define PIO_PE15_IDX         143\r
+#define PIO_PE16_IDX         144\r
+#define PIO_PE17_IDX         145\r
+#define PIO_PE18_IDX         146\r
+#define PIO_PE19_IDX         147\r
+#define PIO_PE20_IDX         148\r
+#define PIO_PE21_IDX         149\r
+#define PIO_PE22_IDX         150\r
+#define PIO_PE23_IDX         151\r
+#define PIO_PE24_IDX         152\r
+#define PIO_PE25_IDX         153\r
+#define PIO_PE26_IDX         154\r
+#define PIO_PE27_IDX         155\r
+#define PIO_PE28_IDX         156\r
+#define PIO_PE29_IDX         157\r
+#define PIO_PE30_IDX         158\r
+#define PIO_PE31_IDX         159\r
+/*@}*/\r
+\r
+/* ************************************************************************** */\r
+/*   MEMORY MAPPING DEFINITIONS FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+\r
+#define IRAM_SIZE (0x20000u)\r
+#define IROM_SIZE (0x20000u)\r
+\r
+#define EBI_CS0_ADDR    (0x10000000u) /**< EBI Chip Select 0 base address */\r
+#define DDR_CS_ADDR     (0x20000000u) /**< DDR Chip Select base address */\r
+#define DDR_AES_CS_ADDR (0x40000000u) /**< DDR with AES Chip Select base address */\r
+#define EBI_CS1_ADDR    (0x60000000u) /**< EBI Chip Select 1 base address */\r
+#define EBI_CS2_ADDR    (0x70000000u) /**< EBI Chip Select 2 base address */\r
+#define EBI_CS3_ADDR    (0x80000000u) /**< EBI Chip Select 3 base address */\r
+#define NFC_ADDR        (0x90000000u) /**< NAND Flash Controller Command base address */\r
+#define IROM_ADDR       (0x00000000u) /**< Internal ROM base address */\r
+#define NFC_RAM_ADDR    (0x00100000u) /**< NAND Flash Controller RAM base address */\r
+#define IRAM_ADDR       (0x00200000u) /**< Internal RAM base address */\r
+#define UDPHS_RAM_ADDR  (0x00400000u) /**< USB High Speed Device Port RAM base address */\r
+#define UHP_OHCI_ADDR   (0x00500000u) /**< USB Host Port OHCI base address */\r
+#define UHP_EHCI_ADDR   (0x00600000u) /**< USB Host Port EHCI base address */\r
+#define AXIMX_ADDR      (0x00700000u) /**< AXI Bus Matrix base address */\r
+#define DAP_ADDR        (0x00800000u) /**< Debug Access Port base address */\r
+#define SMD_ADDR        (0x00900000u) /**< Software Modem Device base address */\r
+\r
+/* ************************************************************************** */\r
+/*   ELECTRICAL DEFINITIONS FOR SAMA5D4 */\r
+/* ************************************************************************** */\r
+\r
+/* %ATMEL_ELECTRICAL% */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+/*@}*/\r
+\r
+#endif /* _SAMA5D4_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/USBD_Config.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/USBD_Config.h
new file mode 100644 (file)
index 0000000..656ac5b
--- /dev/null
@@ -0,0 +1,305 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * USB Device Framework configurations.\r
+ *\r
+ */\r
+\r
+#ifndef USBD_CONFIG_H\r
+#define USBD_CONFIG_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/** \addtogroup usbd_config\r
+ *@{\r
+ */\r
+/*----------------------------------------------------------------------------\r
+ *      Constants\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_ids USBD Device IDs\r
+ *      @{\r
+ */\r
+#define USBD_VID_ATMEL              0x03EB  /**< Vendor ID: Atmel */\r
+\r
+#define USBD_PID_ENUM               0x0001  /**< Product ID: Enum (Core) */\r
+#define USBD_PID_CDCDSERIAL         0x6119  /**< Product ID: CDC Serial */\r
+#define USBD_PID_HIDKEYBOARD        0x6127  /**< Product ID: HID Keyboard */\r
+#define USBD_PID_AUDIO              0x6128  /**< Product ID: Audio devices */\r
+#define USBD_PID_MSD                0x6129  /**< Product ID: Massstorage */\r
+#define USBD_PID_CDCHID             0x6130  /**< Product ID: composite */\r
+#define USBD_PID_CDCAUDIO           0x6131  /**< Product ID: composite */\r
+#define USBD_PID_CDCMSD             0x6132  /**< Product ID: composite */\r
+#define USBD_PID_CDCCDC             0x6133  /**< Product ID: composite */\r
+#define USBD_PID_HIDAUDIO           0x6134  /**< Product ID: composite */\r
+#define USBD_PID_HIDMSD             0x6135  /**< Product ID: composite */\r
+#define USBD_PID_HIDMOUSE           0x6200  /**< Product ID: HID Mouse */\r
+#define USBD_PID_HIDTRANSFER        0x6201  /**< Product ID: HID Transfer */\r
+#define USBD_PID_CCID               0x6203  /**< Product ID: CCID */\r
+\r
+#define USBD_RELEASE_1_00           0x0100  /**< Release: 1.00 */\r
+/**     @}*/\r
+\r
+/** \addtogroup usbd_general_config USBD General Configure\r
+ *      @{\r
+ * This page lists general configurations for all USB device drivers.\r
+ * - \ref USBD_BMATTRIBUTES\r
+ */\r
+/** default USB Device attributes configuration descriptor\r
+ *  (bus or self powered, remote wakeup) */\r
+#define USBD_BMATTRIBUTES           BOARD_USB_BMATTRIBUTES\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - Mass storage\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_msdd_config USB MassStorage Configure\r
+ *      @{\r
+ * This page lists the defines used by the Mass Storage driver.\r
+ *\r
+ * \section msd_ep_addr Endpoint Addresses\r
+ * - \ref MSDDriverDescriptors_BULKOUT\r
+ * - \ref MSDDriverDescriptors_BULKIN\r
+ */\r
+/** Address of the Mass Storage bulk-out endpoint.*/\r
+#define MSDDriverDescriptors_BULKOUT                1\r
+/** Address of the Mass Storage bulk-in endpoint.*/\r
+#define MSDDriverDescriptors_BULKIN                 2\r
+/**      @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - CDC Serial\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_cdc_serial_config USB CDC Serial Configure\r
+ *      @{\r
+ * This page lists the defines used by the CDC Serial Device Driver.\r
+ *\r
+ * \section cdcd_ep_addr Endpoint Addresses\r
+ * - \ref CDCDSerialDriverDescriptors_DATAOUT\r
+ * - \ref CDCDSerialDriverDescriptors_DATAIN\r
+ * - \ref CDCDSerialDriverDescriptors_NOTIFICATION\r
+ */\r
+/** Data OUT endpoint number */\r
+#define CDCDSerialDriverDescriptors_DATAOUT             1\r
+/** Data IN endpoint number */\r
+#define CDCDSerialDriverDescriptors_DATAIN              2\r
+/** Notification endpoint number */\r
+#define CDCDSerialDriverDescriptors_NOTIFICATION        3\r
+/**      @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - Audio\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_audio_config USB Audio General Configure\r
+ *      @{\r
+ * This page lists definitions for USB Audio Devices Drivers.\r
+ * - \ref\r
+ */\r
+#if defined(at91sam7s) || defined(at91sam9xe)\r
+ /** Sample rate in Hz. */\r
+ #define AUDDevice_SAMPLERATE        32000UL\r
+ /** Number of channels in audio stream. */\r
+ #define AUDDevice_NUMCHANNELS       1\r
+ /** Number of bytes in one sample. */\r
+ #define AUDDevice_BYTESPERSAMPLE    2\r
+#else\r
+ /** Sample rate in Hz. */\r
+ #define AUDDevice_SAMPLERATE        48000UL\r
+ /** Number of channels in audio stream. */\r
+ #define AUDDevice_NUMCHANNELS       2\r
+ /** Number of bytes in one sample. */\r
+ #define AUDDevice_BYTESPERSAMPLE    2\r
+#endif\r
+/** Number of bits in one sample. */\r
+#define AUDDevice_BITSPERSAMPLE     (AUDDevice_BYTESPERSAMPLE * 8)\r
+/** Number of bytes in one USB subframe. */\r
+#define AUDDevice_BYTESPERSUBFRAME  (AUDDevice_NUMCHANNELS * \\r
+                                     AUDDevice_BYTESPERSAMPLE)\r
+/** Number of samples in one USB frame. */\r
+#define AUDDevice_SAMPLESPERFRAME   (AUDDevice_SAMPLERATE / 1000 \\r
+                                     * AUDDevice_NUMCHANNELS)\r
+/** Number of bytes in one USB frame. */\r
+#define AUDDevice_BYTESPERFRAME     (AUDDevice_SAMPLESPERFRAME * \\r
+                                     AUDDevice_BYTESPERSAMPLE)\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - Audio - Desktop Speaker\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_audio_speaker_config USB Speaker Configure\r
+ *      @{\r
+ * This page lists the definitions for USB Audio Speaker Device Driver.\r
+ * - \ref AUDDSpeakerDriverDescriptors_DATAOUT\r
+ * - \ref AUDDSpeakerDriverDescriptors_FS_INTERVAL\r
+ * - \ref AUDDSpeakerDriverDescriptors_HS_INTERVAL\r
+ *\r
+ * \note for UDP, uses IN EPs that support double buffer; for UDPHS, uses\r
+ *       IN EPs that support DMA and High bandwidth.\r
+ */\r
+/** Data out endpoint number. */\r
+#define AUDDSpeakerDriverDescriptors_DATAOUT            0x02\r
+/** Endpoint polling interval 2^(x-1) * 125us */\r
+#define AUDDSpeakerDriverDescriptors_HS_INTERVAL        0x02\r
+/** Endpoint polling interval 2^(x-1) * ms */\r
+#define AUDDSpeakerDriverDescriptors_FS_INTERVAL        0x01\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - Audio - Speaker Phone\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_audio_speakerphone_config USB Speaker Phone Configure\r
+ *      @{\r
+ * This page lists the definitions for USB Audio Speaker Phone Device Driver.\r
+ * - \ref AUDDSpeakerPhoneDriverDescriptors_DATAOUT\r
+ * - \ref AUDDSpeakerPhoneDriverDescriptors_DATAIN\r
+ * - \ref AUDDSpeakerPhoneDriverDescriptors_HS_INTERVAL\r
+ * - \ref AUDDSpeakerPhoneDriverDescriptors_FS_INTERVAL\r
+ */\r
+\r
+#if defined(at91sam7s) || defined(at91sam9xe)\r
+    /** Data out endpoint number, size 64B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAOUT        0x01\r
+    /** Data in endpoint number, size 64B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAIN         0x02\r
+#elif defined(CHIP_USB_UDP)\r
+    /** Data out endpoint number, size 192B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAOUT        0x04\r
+    /** Data in endpoint number, size 192B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAIN         0x05\r
+#elif defined(at91sam9m10ek)\r
+    /** Data out endpoint number, size 192B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAOUT        0x01\r
+    /** Data in endpoint number, size 192B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAIN         0x06\r
+#else\r
+    /** Data out endpoint number, size 192B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAOUT        0x05\r
+    /** Data in endpoint number, size 192B */\r
+    #define AUDDSpeakerPhoneDriverDescriptors_DATAIN         0x06\r
+#endif\r
+/** Endpoint polling interval 2^(x-1) * 125us */\r
+#define AUDDSpeakerPhoneDriverDescriptors_HS_INTERVAL        0x04\r
+/** Endpoint polling interval 2^(x-1) * ms */\r
+#define AUDDSpeakerPhoneDriverDescriptors_FS_INTERVAL        0x01\r
+/**      @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - HID - Keyboard\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_hid_keyboard_config USB HID Keyboard Device Configure\r
+ *      @{\r
+ * This page lists the defines used by the HID Keyboard Device Driver.\r
+ *\r
+ * \section hidd_k_ep_addr Endpoint Addresses\r
+ * - \ref HIDDKeyboardDriverDescriptors_INTERRUPTIN\r
+ * - \ref HIDDKeyboardDriverDescriptors_INTERRUPTOUT\r
+ * \section hidd_k_ep_polling Endpoint Polling Rate\r
+ * - \ref HIDDKeyboardDriverDescriptors_INTERRUPTIN_POLLING\r
+ * - \ref HIDDKeyboardDriverDescriptors_INTERRUPTOUT_POLLING\r
+ */\r
+/** Interrupt IN endpoint number */\r
+#define HIDDKeyboardDriverDescriptors_INTERRUPTIN           1\r
+/** Interrupt IN endpoint polling rate (in milliseconds) */\r
+#define HIDDKeyboardDriverDescriptors_INTERRUPTIN_POLLING   10\r
+/** Interrupt OUT endpoint number */\r
+#define HIDDKeyboardDriverDescriptors_INTERRUPTOUT          2\r
+/** Interrupt OUT endpoint polling rate (in milliseconds) */\r
+#define HIDDKeyboardDriverDescriptors_INTERRUPTOUT_POLLING  10\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - HID  - Mouse\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_hid_mouse_config USB HID Mouse Device Configure\r
+ *      @{\r
+ * This page lists the defines used by the HID Mouse Device Driver.\r
+ *\r
+ * \section hidd_m_ep_addr Endpoint Addresses\r
+ * - \ref HIDDMouseDriverDescriptors_INTERRUPTIN\r
+ * \section hidd_m_ep_polling Endpoint Polling Rate\r
+ * - \ref HIDDMouseDriverDescriptors_INTERRUPTIN_POLLING\r
+ */\r
+/** Interrupt IN endpoint number */\r
+#define HIDDMouseDriverDescriptors_INTERRUPTIN           1\r
+/** Interrupt IN endpoint polling rate (in milliseconds) */\r
+#define HIDDMouseDriverDescriptors_INTERRUPTIN_POLLING   10\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - HID  - Transfer (Customize device)\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_hid_xfr_config USB HID Transfer Device Configure\r
+ *      @{\r
+ * This page lists the defines used by the HID Transfer Device Driver.\r
+ *\r
+ * \section hidd_t_ep_addr Endpoint Addresses\r
+ * - \ref HIDDTransferDriverDescriptors_INTERRUPTIN\r
+ * - \ref HIDDTransferDriverDescriptors_INTERRUPTOUT\r
+ * \section hidd_t_ep_polling Endpoint Polling Rate\r
+ * - \ref HIDDTransferDriverDescriptors_INTERRUPTIN_POLLING\r
+ * - \ref HIDDTransferDriverDescriptors_INTERRUPTOUT_POLLING\r
+ */\r
+/** Interrupt IN endpoint number. */\r
+#define HIDDTransferDriverDescriptors_INTERRUPTIN           1\r
+/** Polling rate in ms */\r
+#define HIDDTransferDriverDescriptors_INTERRUPTIN_POLLING   50\r
+/** Interrupt IN endpoint polling rate (in milliseconds). */\r
+#define HIDDTransferDriverDescriptors_INTERRUPTOUT          2\r
+/** Polling rate in ms */\r
+#define HIDDTransferDriverDescriptors_INTERRUPTOUT_POLLING  50\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      USB Device - Composite\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_composite_config USB Composite Device Configure\r
+ *  @{\r
+ */\r
+/** @}*/\r
+\r
+/**@}*/\r
+#endif //#ifndef USBD_CONFIG_H\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/USBD_LEDs.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/USBD_LEDs.h
new file mode 100644 (file)
index 0000000..3772c96
--- /dev/null
@@ -0,0 +1,73 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Collection of LEDs for using the USB device controller on AT91\r
+ * microcontrollers.\r
+ */\r
+\r
+#ifndef USBDLEDS_H\r
+#define USBDLEDS_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *      Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "board.h"\r
+\r
+/** \addtogroup usbd_hal\r
+ *@{\r
+ */\r
+/*----------------------------------------------------------------------------\r
+ *      Constants\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup usbd_leds USB Device LEDs\r
+ *      @{\r
+ * This page lists the LEDs used in the USB %device driver.\r
+ *\r
+ * - USBD_LEDPOWER\r
+ * - USBD_LEDUSB\r
+ * - USBD_LEDOTHER\r
+ */\r
+\r
+/** LED for indicating that the device is powered. */\r
+#define USBD_LEDPOWER                   0\r
+/** LED for indicating USB activity. */\r
+#define USBD_LEDUSB                     1\r
+/** LED for custom usage. */\r
+#define USBD_LEDOTHER                   2\r
+/**     @}*/\r
+\r
+/**@}*/\r
+\r
+#endif //#ifndef USBDLEDS_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/adc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/adc.h
new file mode 100644 (file)
index 0000000..8a5ce2c
--- /dev/null
@@ -0,0 +1,159 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Interface for configuration the Analog-to-Digital Converter (ADC) peripheral.\r
+ *\r
+ *  \section Usage\r
+ *\r
+ *  -# Configurate the pins for ADC.\r
+ *  -# Initialize the ADC with ADC_Initialize().\r
+ *  -# Set ADC clock and timing with ADC_SetClock() and ADC_SetTiming().\r
+ *  -# Select the active channel using ADC_EnableChannel().\r
+ *  -# Start the conversion with ADC_StartConversion().\r
+ *  -# Wait the end of the conversion by polling status with ADC_GetStatus().\r
+ *  -# Finally, get the converted data using ADC_GetConvertedData() or ADC_GetLastConvertedData().\r
+ *\r
+*/\r
+#ifndef _ADC_\r
+#define _ADC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include <assert.h>\r
+#include <stdint.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Definitions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/* Max. ADC Clock Frequency (Hz) */\r
+#define ADC_CLOCK_MAX   20000000\r
+\r
+/* Max. normal ADC startup time (us) */\r
+#define ADC_STARTUP_NORMAL_MAX     40\r
+/* Max. fast ADC startup time (us) */\r
+#define ADC_STARTUP_FAST_MAX       12\r
+\r
+/* Definitions for ADC channels */\r
+#define ADC_CHANNEL_0  0\r
+#define ADC_CHANNEL_1  1\r
+#define ADC_CHANNEL_2  2\r
+#define ADC_CHANNEL_3  3\r
+#define ADC_CHANNEL_4  4\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Macros function of register access\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#define ADC_GetModeReg( pAdc )                ((pAdc)->ADC_MR)\r
+\r
+#define ADC_StartConversion( pAdc )           ((pAdc)->ADC_CR = ADC_CR_START)\r
+\r
+#define ADC_EnableChannel( pAdc, dwChannel )    {\\r
+            (pAdc)->ADC_CHER = (1 << (dwChannel));\\r
+        }\r
+\r
+#define ADC_DisableChannel(pAdc, dwChannel)  {\\r
+            (pAdc)->ADC_CHDR = (1 << (dwChannel));\\r
+        }\r
+\r
+#define ADC_EnableIt(pAdc, dwMode)            {\\r
+            (pAdc)->ADC_IER = (dwMode);\\r
+        }\r
+\r
+#define ADC_DisableIt(pAdc, dwMode)           {\\r
+            (pAdc)->ADC_IDR = (dwMode);\\r
+        }\r
+\r
+#define ADC_SetChannelGain(pAdc,dwMode)       {\\r
+            (pAdc)->ADC_CGR = dwMode;\\r
+        }\r
+\r
+#define ADC_EnableDataReadyIt(pAdc)         ((pAdc)->ADC_IER = ADC_IER_DRDY)\r
+\r
+#define ADC_GetStatus(pAdc)                 ((pAdc)->ADC_ISR)\r
+\r
+#define ADC_GetCompareMode(pAdc)            (((pAdc)->ADC_EMR)& (ADC_EMR_CMPMODE_Msk))\r
+\r
+#define ADC_GetChannelStatus(pAdc)          ((pAdc)->ADC_CHSR)\r
+\r
+#define ADC_GetInterruptMaskStatus(pAdc)    ((pAdc)->ADC_IMR)\r
+\r
+#define ADC_GetLastConvertedData(pAdc)      ((pAdc)->ADC_LCDR)\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+extern void ADC_Initialize( Adc* pAdc, uint32_t dwId );\r
+extern uint32_t ADC_SetClock( Adc* pAdc, uint32_t dwPres, uint32_t dwMck );\r
+extern void ADC_SetTiming( Adc* pAdc, uint32_t dwStartup, uint32_t dwTracking, uint32_t dwSettling );\r
+extern void ADC_SetTrigger( Adc* pAdc, uint32_t dwTrgSel );\r
+extern void ADC_SetTriggerMode(Adc *pAdc, uint32_t dwMode);\r
+extern void ADC_SetLowResolution( Adc* pAdc, uint32_t bEnDis );\r
+extern void ADC_SetSleepMode( Adc *pAdc, uint8_t bEnDis );\r
+extern void ADC_SetFastWakeup( Adc *pAdc, uint8_t bEnDis );\r
+extern void ADC_SetSequenceMode( Adc *pAdc, uint8_t bEnDis );\r
+extern void ADC_SetSequence( Adc *pAdc, uint32_t dwSEQ1, uint32_t dwSEQ2 );\r
+extern void ADC_SetSequenceByList( Adc *pAdc, uint8_t ucChList[], uint8_t ucNumCh );\r
+extern void ADC_SetTagEnable( Adc *pAdc, uint8_t bEnDis );\r
+extern void ADC_ConfigureExtMode( Adc *pAdc, uint32_t dwMode );\r
+extern void ADC_SetCompareChannel( Adc* pAdc, uint32_t dwChannel ) ;\r
+extern void ADC_SetCompareMode( Adc* pAdc, uint32_t dwMode ) ;\r
+extern void ADC_SetComparisonWindow( Adc* pAdc, uint32_t dwHi_Lo ) ;\r
+extern uint8_t ADC_CheckConfiguration( Adc* pAdc, uint32_t dwMcK ) ;\r
+extern uint32_t ADC_GetConvertedData( Adc* pAdc, uint32_t dwChannel ) ;\r
+extern void ADC_SetTsAverage(Adc* pADC, uint32_t dwAvg2Conv);\r
+extern uint32_t ADC_GetTsXPosition(Adc *pADC);\r
+extern uint32_t ADC_GetTsYPosition(Adc *pADC);\r
+extern uint32_t ADC_GetTsPressure(Adc *pADC);\r
+extern void ADC_SetTsDebounce(Adc *pADC, uint32_t dwTime);\r
+extern void ADC_SetTsPenDetect(Adc* pADC, uint8_t bEnDis);\r
+extern void ADC_SetStartupTime( Adc *pAdc, uint32_t dwUs );\r
+extern void ADC_SetTrackingTime( Adc *pAdc, uint32_t dwNs );\r
+extern void ADC_SetTriggerPeriod(Adc *pAdc, uint32_t dwPeriod);\r
+extern void ADC_SetTsMode(Adc* pADC, uint32_t dwMode);\r
+extern void ADC_TsCalibration( Adc *pAdc );\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _ADC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aes.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aes.h
new file mode 100644 (file)
index 0000000..d67940b
--- /dev/null
@@ -0,0 +1,68 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _AES_\r
+#define _AES_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Definition                                                           */\r
+/*------------------------------------------------------------------------------*/\r
+#define AES_MR_CIPHER_ENCRYPT 1\r
+#define AES_MR_CIPHER_DECRYPT 0\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+extern void AES_Start(void);\r
+extern void AES_SoftReset(void);\r
+extern void AES_Recount(void);\r
+extern void AES_Configure(uint32_t mode);\r
+extern void AES_EnableIt(uint32_t sources);\r
+extern void AES_DisableIt(uint32_t sources);\r
+extern uint32_t AES_GetStatus(void);\r
+extern void AES_WriteKey(const uint32_t *pKey, uint32_t keyLength);\r
+extern void AES_SetInput(uint32_t *data);\r
+extern void AES_GetOutput(uint32_t *data);\r
+extern void AES_SetVector(const uint32_t *pVector);\r
+extern void AES_SetAadLen(uint32_t len);\r
+extern void AES_SetDataLen(uint32_t len);\r
+extern void AES_SetGcmHash(uint32_t * hash);\r
+extern void AES_GetGcmTag(uint32_t * tag);\r
+extern void AES_GetGcmCounter(uint32_t * counter);\r
+extern void AES_GetGcmH(uint32_t *h);\r
+\r
+\r
+#endif /* #ifndef _AES_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aesb.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aesb.h
new file mode 100644 (file)
index 0000000..b4efd09
--- /dev/null
@@ -0,0 +1,61 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _AESB_\r
+#define _AESB_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Definition                                                           */\r
+/*------------------------------------------------------------------------------*/\r
+#define AESB_MR_CIPHER_ENCRYPT 1\r
+#define AESB_MR_CIPHER_DECRYPT 0\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+extern void AESB_Start(void);\r
+extern void AESB_SoftReset(void);\r
+extern void AESB_Recount(void);\r
+extern void AESB_Configure(uint32_t mode);\r
+extern void AESB_EnableIt(uint32_t sources);\r
+extern void AESB_DisableIt(uint32_t sources);\r
+extern uint32_t AESB_GetStatus(void);\r
+extern void AESB_WriteKey(const uint32_t *pKey);\r
+extern void AESB_SetInput(uint32_t *data);\r
+extern void AESB_GetOutput(uint32_t *data);\r
+extern void AESB_SetVector(const uint32_t *pVector);\r
+\r
+#endif /* #ifndef _AESB_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aic.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/aic.h
new file mode 100644 (file)
index 0000000..307b065
--- /dev/null
@@ -0,0 +1,69 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Methods and definitions for configuring interrupts.\r
+ *\r
+ *  \section Usage\r
+  *  -# Enable or disable interrupt generation of a particular source with\r
+ *    IRQ_EnableIT and IRQ_DisableIT.\r
+ *  -# Start or stop the timer clock using TC_Start() and TC_Stop().\r
+ */\r
\r
+#ifndef AIC_H\r
+#define AIC_H\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global functions\r
+ *------------------------------------------------------------------------------*/\r
\r
+ #ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+extern void AIC_EnableIT( uint32_t source);\r
+extern void AIC_DisableIT(uint32_t source);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif //#ifndef AIC_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/async.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/async.h
new file mode 100644 (file)
index 0000000..37d49b6
--- /dev/null
@@ -0,0 +1,80 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Provide a routine for asynchronous transfer.\r
+ *\r
+ */\r
+\r
+#ifndef _ASYNC_\r
+#define _ASYNC_\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+/** Transfer is still pending.*/\r
+#define ASYNC_STATUS_PENDING        0xFF\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Type\r
+ *----------------------------------------------------------------------------*/\r
+/** \brief Asynchronous transfer descriptor. */\r
+typedef struct _Async\r
+{\r
+    /** Asynchronous transfer status.*/\r
+    volatile uint32_t status ;\r
+    /** Callback function to invoke when transfer completes or fails.*/\r
+    void *callback ;\r
+    /** Driver storage area; do not use.*/\r
+    uint8_t pStorage[9] ;\r
+} Async ;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Global functions\r
+ *----------------------------------------------------------------------------*/\r
+extern uint32_t ASYNC_IsFinished( Async* pAsync ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _ASYNC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/catb.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/catb.h
new file mode 100644 (file)
index 0000000..16e719f
--- /dev/null
@@ -0,0 +1,79 @@
+/*-----------------------------------------------------------------------------\r
+ *           ATMEL Microcontroller Software Support  -  ROUSSET  -\r
+ *-----------------------------------------------------------------------------\r
+ * DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ *----------------------------------------------------------------------------\r
+ * File Name           : catb.h\r
+ * Object              :\r
+ * Creation            : DAL   21/Jun/2013\r
+ *----------------------------------------------------------------------------\r
+*/\r
+#ifndef _V_CATB_H\r
+#define _V_CATB_H\r
+\r
+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
+/** \brief Catb hardware registers */\r
+typedef struct {\r
+  __IO uint32_t CATB_CR;          /**< \brief (CATB Offset: 0x00) Control Register */\r
+  __IO uint32_t CATB_CNTCR;       /**< \brief (CATB Offset: 0x04) Counter Control Register */\r
+  __IO uint32_t CATB_IDLE;        /**< \brief (CATB Offset: 0x08) Sensor Idle Level */\r
+  __IO uint32_t CATB_LEVEL;       /**< \brief (CATB Offset: 0x0C) Sensor Relative Level */\r
+  __IO uint32_t CATB_RAW;         /**< \brief (CATB Offset: 0x10) Sensor Raw Value */\r
+  __IO uint32_t CATB_TIMING;      /**< \brief (CATB Offset: 0x14) Filter Timing Register */\r
+  __IO uint32_t CATB_THRESH;      /**< \brief (CATB Offset: 0x18) Threshold Register */\r
+  __IO uint32_t CATB_PINSEL;      /**< \brief (CATB Offset: 0x1C) Pin Selection Register */\r
+  __IO uint32_t CATB_DMA;         /**< \brief (CATB Offset: 0x20) Direct Memory Access Register */\r
+  __IO uint32_t CATB_ISR;         /**< \brief (CATB Offset: 0x24) Interrupt Status Register */\r
+  __IO uint32_t CATB_IER;         /**< \brief (CATB Offset: 0x28) Interrupt Enable Register */\r
+  __IO uint32_t CATB_IDR;         /**< \brief (CATB Offset: 0x2C) Interrupt Disable Register */\r
+  __IO uint32_t CATB_IMR;         /**< \brief (CATB Offset: 0x30) Interrupt Mask Register */\r
+  __IO uint32_t CATB_SCR;         /**< \brief (CATB Offset: 0x34) Status Clear Register */\r
+  __I  uint32_t Reserved1[2];\r
+  __IO uint32_t CATB_INTCHi;      /**< \brief (CATB Offset: 0x40) In-Touch Status Register i */\r
+  __I  uint32_t Reserved2[3];\r
+  __IO uint32_t CATB_INTCHCLRn;   /**< \brief (CATB Offset: 0x50) In-Touch Status Clear Register n */\r
+  __I  uint32_t Reserved3[3];\r
+  __IO uint32_t CATB_OUTTCHi;     /**< \brief (CATB Offset: 0x60) Out-of-Touch Status Register i */\r
+  __I  uint32_t Reserved4[3];\r
+  __IO uint32_t CATB_OUTTCHCLRn;  /**< \brief (CATB Offset: 0x70) Out-of-Touch Status Clear Register n */\r
+  __I  uint32_t Reserved5[33];\r
+  __IO uint32_t CATB_PARAMETER;   /**< \brief (CATB Offset: 0xF8) Parameter Register */\r
+} Catb;\r
+\r
+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
+\r
+\r
+#define LENGTH                  0x1F\r
+#define TLEVEL                  100\r
+#define TIDLE                   0\r
+#define CATB_THRESH_RTHRESH                                   12\r
+#define CATB_THRESH_FTHRESH                                    0\r
+#define CATB_ISR_INTCH (0x1u << 1) /**< \brief (CATB_ISR_INTCH) In-touch */\r
+#define CATB_ISR_OUTTCH (0x1u<< 2) /**< \brief (CATB_ISR_OUTTCH) Out-touch */\r
+#define CATB_IER_INTCH (0x1u << 1) /**< \brief (CATB_IER_INTCH) In-touch */\r
+#define CATB_IER_OUTTCH (0x1u<< 2) /**< \brief (CATB_IER_OUTTCH) Out-touch */\r
+#define CATB_CR_SWRST                                      (0x1u <<  31)\r
+#define CATB_CR_EN                                          ( 1u<<0 )\r
+#define CATB_CR_CHARGET_Pos 16\r
+#define CATB_CR_CHARGET_Msk (0xfu << CATB_CR_CHARGET_Pos) /**< \brief (CATB_CNTCR) Counter Top Value */\r
+#define CATB_CR_CHARGET(value) ((CATB_CR_CHARGET_Msk & ((value) << CATB_CR_CHARGET_Pos)))\r
+#define CATB_CNTCR_TOP                                         0\r
+#define CATB_SPREAD                                           24\r
+#define CATB_REPEAT                                           28\r
+#define CATB_TIMING_TIDLE                                     16\r
+#define CATB_TIMING_TLEVEL                                     0\r
+#define CATB_ISR_SAMPLE                                     (1 << 0)\r
+#define CATB_CR_RUN                                         (0x1u << 1)\r
+#define CATB_CR_IIDLE                                         (1<< 2)\r
+#define CATB_CR_DMAEN                                       (1 << 7)\r
+\r
+#endif //_V_CATB_H\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/emac.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/emac.h
new file mode 100644 (file)
index 0000000..151f859
--- /dev/null
@@ -0,0 +1,302 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup emac_module\r
+ * @{\r
+ * Provides the interface to configure and use the EMAC peripheral.\r
+ *\r
+ * \section emac_usage Usage\r
+ * - Configure Emac::EMAC_NCFG with EMAC_Configure(), some of related controls\r
+ *   are also available, such as:\r
+ *   - EMAC_SetSpeed(): Setup EMAC working clock.\r
+ *   - EMAC_FullDuplexEnable(): Working in full duplex or not.\r
+ *   - EMAC_CpyAllEnable(): Copying all valid frames (\ref EMAC_NCFG_CAF).\r
+ *   - ...\r
+ * - Setup Emac::EMAC_NCR with EMAC_NetworkControl(), more related controls\r
+ *   can modify with:\r
+ *   - EMAC_ReceiveEnable(): Enable/Disable Rx.\r
+ *   - EMAC_TransmitEnable(): Enable/Disable Tx.\r
+ *   - EMAC_BroadcastDisable(): Enable/Disable broadcast receiving.\r
+ *   - ...\r
+ * - Manage EMAC interrupts with EMAC_EnableIt(), EMAC_DisableIt(),\r
+ *   EMAC_GetItMask() and EMAC_GetItStatus().\r
+ * - Manage EMAC Tx/Rx status with EMAC_GetTxStatus(), EMAC_GetRxStatus()\r
+ *   EMAC_ClearTxStatus() and EMAC_ClearRxStatus().\r
+ * - Manage EMAC Queue with EMAC_SetTxQueue(), EMAC_GetTxQueue(),\r
+ *   EMAC_SetRxQueue() and EMAC_GetRxQueue(), the queue descriptor can define\r
+ *   by \ref sEmacRxDescriptor and \ref sEmacTxDescriptor.\r
+ * - Manage PHY through EMAC is performed by\r
+ *   - EMAC_ManagementEnable(): Enable/Disable PHY management.\r
+ *   - EMAC_PHYMaintain(): Execute PHY management commands.\r
+ *   - EMAC_PHYData(): Return PHY management data.\r
+ *   - EMAC_IsIdle(): Check if PHY is idle.\r
+ * - Setup EMAC parameters with following functions:\r
+ *   - EMAC_SetHash(): Set Hash value.\r
+ *   - EMAC_SetAddress(): Set MAC address.\r
+ * - Enable/Disable EMAC transceiver clock via EMAC_TransceiverClockEnable()\r
+ * - Switch EMAC MII/RMII mode through EMAC_RMIIEnable()\r
+ *\r
+ * For more accurate information, please look at the EMAC section of the\r
+ * Datasheet.\r
+ *\r
+ * \sa \ref emacd_module\r
+ *\r
+ * Related files:\n\r
+ * emac.c\n\r
+ * emac.h.\n\r
+ *\r
+ *   \defgroup emac_defines EMAC Defines\r
+ *   \defgroup emac_structs EMAC Data Structs\r
+ *   \defgroup emac_functions EMAC Functions\r
+ */\r
+/**@}*/\r
+\r
+#ifndef _EMAC_H\r
+#define _EMAC_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Defines\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup emac_defines\r
+        @{*/\r
+\r
+/** The buffer addresses written into the descriptors must be aligned so the\r
+    last few bits are zero.  These bits have special meaning for the EMAC\r
+    peripheral and cannot be used as part of the address. */\r
+#define EMAC_RXD_ADDR_MASK      0xFFFFFFFC\r
+#define EMAC_RXD_bmWRAP         (1ul << 1)  /**< Wrap bit */\r
+#define EMAC_RXD_bmOWNERSHIP    (1ul << 0)  /**< Ownership bit */\r
+\r
+#define EMAC_RXD_bmBROADCAST    (1ul << 31) /**< Broadcast detected */\r
+#define EMAC_RXD_bmMULTIHASH    (1ul << 30) /**< Multicast hash match */\r
+#define EMAC_RXD_bmUNIHASH      (1ul << 29) /**< Unicast hash match */\r
+#define EMAC_RXD_bmEXTADDR      (1ul << 28) /**< External address match */\r
+#define EMAC_RXD_bmADDR1        (1ul << 26) /**< Address 1 match */\r
+#define EMAC_RXD_bmADDR2        (1ul << 25) /**< Address 2 match */\r
+#define EMAC_RXD_bmADDR3        (1ul << 24) /**< Address 3 match */\r
+#define EMAC_RXD_bmADDR4        (1ul << 23) /**< Address 4 match */\r
+#define EMAC_RXD_bmTYPE         (1ul << 22) /**< Type ID match */\r
+#define EMAC_RXD_bmVLAN         (1ul << 21) /**< VLAN tag detected */\r
+#define EMAC_RXD_bmPRIORITY     (1ul << 20) /**< Prority tag detected */\r
+#define EMAC_RXD_PRIORITY_MASK  (3ul << 17) /**< VLAN prority */\r
+#define EMAC_RXD_bmCFI          (1ul << 16) /**< Concatenation Format Indicator\r
+                                                 only if bit 21 is set */\r
+#define EMAC_RXD_bmEOF          (1ul << 15) /**< End of frame */\r
+#define EMAC_RXD_bmSOF          (1ul << 14) /**< Start of frame */\r
+#define EMAC_RXD_OFFSET_MASK                /**< Receive buffer offset */\r
+#define EMAC_RXD_LEN_MASK       (0xFFF)     /**< Length of frame including FCS\r
+                                                 (if selected) */\r
+#define EMAC_RXD_LENJUMBO_MASK  (0x3FFF)    /**< Jumbo frame length */\r
+\r
+#define EMAC_TXD_bmUSED         (1ul << 31) /**< Frame is transmitted */\r
+#define EMAC_TXD_bmWRAP         (1ul << 30) /**< Last descriptor */\r
+#define EMAC_TXD_bmERROR        (1ul << 29) /**< Retry limit exceed, error */\r
+#define EMAC_TXD_bmUNDERRUN     (1ul << 28) /**< Transmit underrun */\r
+#define EMAC_TXD_bmEXHAUSTED    (1ul << 27) /**< Buffer exhausted */\r
+#define EMAC_TXD_bmNOCRC        (1ul << 16) /**< No CRC */\r
+#define EMAC_TXD_bmLAST         (1ul << 15) /**< Last buffer in frame */\r
+#define EMAC_TXD_LEN_MASK       (0x7FF)     /**< Length of buffer */\r
+\r
+\r
+/** The MAC can support frame lengths up to 1536 bytes. */\r
+#define EMAC_FRAME_LENTGH_MAX       1536\r
+\r
+/**     @}*/\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup emac_structs\r
+        @{*/\r
+#ifdef __ICCARM__          // IAR\r
+#define PACKED_ATTR \r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+#define PACKED_ATTR     __attribute__((packed, aligned(8))) \r
+#endif                     \r
+\r
+/** Receive buffer descriptor struct */\r
+typedef struct _EmacRxDescriptor {\r
+    union _EmacRxAddr {\r
+        uint32_t val;\r
+        struct _EmacRxAddrBM {\r
+            uint32_t bOwnership:1,  /**< User clear, EMAC set this to one once\r
+                                         it has successfully written a frame to\r
+                                         memory */\r
+                     bWrap:1,       /**< Marks last descriptor in receive buffer */\r
+                     addrDW:30;     /**< Address in number of DW */\r
+        } bm;\r
+    } addr;                    /**< Address, Wrap & Ownership */\r
+    union _EmacRxStatus {\r
+        uint32_t val;\r
+        struct _EmacRxStatusBM {\r
+            uint32_t len:12,                /** Length of frame including FCS */\r
+                     offset:2,              /** Receive buffer offset,\r
+                                                bits 13:12 of frame length for jumbo\r
+                                                frame */\r
+                     bSof:1,                /** Start of frame */\r
+                     bEof:1,                /** End of frame */\r
+                     bCFI:1,                /** Concatenation Format Indicator */\r
+                     vlanPriority:3,        /** VLAN priority (if VLAN detected) */\r
+                     bPriorityDetected:1,   /** Priority tag detected */\r
+                     bVlanDetected:1,       /**< VLAN tag detected */\r
+                     bTypeIDMatch:1,        /**< Type ID match */\r
+                     bAddr4Match:1,         /**< Address register 4 match */\r
+                     bAddr3Match:1,         /**< Address register 3 match */\r
+                     bAddr2Match:1,         /**< Address register 2 match */\r
+                     bAddr1Match:1,         /**< Address register 1 match */\r
+                     reserved:1,\r
+                     bExtAddrMatch:1,       /**< External address match */\r
+                     bUniHashMatch:1,       /**< Unicast hash match */\r
+                     bMultiHashMatch:1,     /**< Multicast hash match */\r
+                     bBroadcastDetected:1;  /**< Global all ones broadcast\r
+                                                 address detected */\r
+        } bm;\r
+    } status;\r
+}PACKED_ATTR sEmacRxDescriptor;    /* GCC */\r
+\r
+/** Transmit buffer descriptor struct */\r
+typedef struct _EmacTxDescriptor {\r
+    uint32_t addr;\r
+    union _EmacTxStatus {\r
+        uint32_t val;\r
+        struct _EmacTxStatusBM {\r
+            uint32_t len:11,        /**< Length of buffer */\r
+                     reserved:4,\r
+                     bLastBuffer:1, /**< Last buffer (in the current frame) */\r
+                     bNoCRC:1,      /**< No CRC */\r
+                     reserved1:10,\r
+                     bExhausted:1,  /**< Buffer exhausted in mid frame */\r
+                     bUnderrun:1,   /**< Transmit underrun */\r
+                     bError:1,      /**< Retry limit exceeded, error detected */\r
+                     bWrap:1,       /**< Marks last descriptor in TD list */\r
+                     bUsed:1;       /**< User clear, EMAC sets this once a frame\r
+                                         has been successfully transmitted */\r
+        } bm;\r
+    } status;\r
+} PACKED_ATTR sEmacTxDescriptor;     /* GCC */\r
+\r
+/**     @}*/\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup emac_functions\r
+        @{*/\r
+extern void EMAC_NetworkControl(Emac *pEmac, uint32_t bmNCR);\r
+extern uint32_t EMAC_GetNetworkControl(Emac * pEmac);\r
+extern void EMAC_ReceiveEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_TransmitEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_ManagementEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_ClearStatistics(Emac * pEmac);\r
+extern void EMAC_IncreaseStatistics(Emac * pEmac);\r
+extern void EMAC_StatisticsWriteEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_BackPressureEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_TransmissionStart(Emac * pEmac);\r
+extern void EMAC_TransmissionHalt(Emac * pEmac);\r
+\r
+extern void EMAC_Configure(Emac * pEmac,uint32_t dwCfg);\r
+extern uint32_t EMAC_GetConfigure(Emac * pEmac);\r
+extern void EMAC_SetSpeed(Emac * pEmac,uint8_t bSpeed);\r
+extern void EMAC_FullDuplexEnable(Emac * pEmac,uint8_t bFD);\r
+extern void EMAC_CpyAllEnable(Emac * pEmac,uint8_t bCAF);\r
+extern void EMAC_JumboFrameEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_BroadcastDisable(Emac * pEmac,uint8_t bDisEna);\r
+extern void EMAC_MulticastHashEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_BigFrameEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern uint8_t EMAC_SetClock(Emac * pEmac,uint32_t dwMck);\r
+extern void EMAC_RetryTestEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_PauseFrameEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_SetRxBufferOffset(Emac * pEmac,uint8_t bOffset);\r
+extern void EMAC_RxLenthCheckEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_DiscardFCSEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_EFRHD(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_IRXFCS(Emac * pEmac,uint8_t bEnaDis);\r
+\r
+extern uint32_t EMAC_GetStatus(Emac * pEmac);\r
+extern uint8_t EMAC_GetMDIO(Emac * pEmac);\r
+extern uint8_t EMAC_IsIdle(Emac * pEmac);\r
+\r
+extern uint32_t EMAC_GetTxStatus(Emac * pEmac);\r
+extern void EMAC_ClearTxStatus(Emac * pEmac,uint32_t dwStatus);\r
+\r
+extern uint32_t EMAC_GetRxStatus(Emac * pEmac);\r
+extern void EMAC_ClearRxStatus(Emac * pEmac,uint32_t dwStatus);\r
+\r
+extern void EMAC_SetTxQueue(Emac * pEmac,uint32_t dwAddr);\r
+extern uint32_t EMAC_GetTxQueue(Emac * pEmac);\r
+\r
+extern void EMAC_SetRxQueue(Emac * pEmac,uint32_t dwAddr);\r
+extern uint32_t EMAC_GetRxQueue(Emac * pEmac);\r
+\r
+extern void EMAC_EnableIt(Emac * pEmac,uint32_t dwSources);\r
+extern void EMAC_DisableIt(Emac * pEmac,uint32_t dwSources);\r
+extern uint32_t EMAC_GetItMask(Emac * pEmac);\r
+extern uint32_t EMAC_GetItStatus(Emac * pEmac);\r
+\r
+extern void EMAC_PHYMaintain(Emac * pEmac,\r
+                             uint8_t bPhyAddr, uint8_t bRegAddr,\r
+                             uint8_t bRW,\r
+                             uint16_t wData);\r
+extern uint16_t EMAC_PHYData(Emac * pEmac);\r
+\r
+extern void EMAC_SetPauseTime(Emac * pEmac,uint16_t wPTime);\r
+\r
+extern void EMAC_SetHash(Emac * pEmac,uint32_t dwHashTop,uint32_t dwHashBottom);\r
+extern void EMAC_SetHash64(Emac * pEmac,uint64_t ddwHash);\r
+\r
+extern void EMAC_SetAddress(Emac * pEmac,uint8_t bIndex,uint8_t * pMacAddr);\r
+extern void EMAC_SetAddress32(Emac * pEmac,uint8_t bIndex,\r
+                              uint32_t dwMacT,uint32_t dwMacB);\r
+extern void EMAC_SetAddress64(Emac * pEmac,uint8_t bIndex,uint64_t ddwMac);\r
+\r
+extern void EMAC_SetTypeID(Emac * pEmac,uint16_t wTID);\r
+extern uint16_t EMAC_GetTypeID(Emac * pEmac);\r
+\r
+extern void EMAC_RMIIEnable(Emac * pEmac,uint8_t bEnaDis);\r
+extern void EMAC_TransceiverClockEnable(Emac * pEmac,uint8_t bEnaDis);\r
+/**     @}*/\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _EMAC_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/fuse.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/fuse.h
new file mode 100644 (file)
index 0000000..aca9906
--- /dev/null
@@ -0,0 +1,62 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Synchronous Serial (SSC) controller.\r
+ *\r
+ */\r
+\r
+#ifndef _FUSE_\r
+#define _FUSE_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern uint32_t FUSE_Read (uint8_t wordPosition );\r
+extern void FUSE_Write (uint32_t data, uint8_t wordPosition );\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _FUSE_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/gmac.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/gmac.h
new file mode 100644 (file)
index 0000000..7b64723
--- /dev/null
@@ -0,0 +1,238 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup gmac_module\r
+ * @{\r
+ * Provides the interface to configure and use the GMAC peripheral.\r
+ *\r
+ * \section gmac_usage Usage\r
+ * - Configure Gmac::GMAC_NCFG with GMAC_Configure(), some of related controls\r
+ *   are also available, such as:\r
+ *   - GMAC_SetSpeed(): Setup GMAC working clock.\r
+ *   - GMAC_FullDuplexEnable(): Working in full duplex or not.\r
+ *   - GMAC_CpyAllEnable(): Copying all valid frames (\ref GMAC_NCFG_CAF).\r
+ *   - ...\r
+ * - Setup Gmac::GMAC_NCR with GMAC_NetworkControl(), more related controls\r
+ *   can modify with:\r
+ *   - GMAC_ReceiveEnable(): Enable/Disable Rx.\r
+ *   - GMAC_TransmitEnable(): Enable/Disable Tx.\r
+ *   - GMAC_BroadcastDisable(): Enable/Disable broadcast receiving.\r
+ *   - ...\r
+ * - Manage GMAC interrupts with GMAC_EnableIt(), GMAC_DisableIt(),\r
+ *   GMAC_GetItMask() and GMAC_GetItStatus().\r
+ * - Manage GMAC Tx/Rx status with GMAC_GetTxStatus(), GMAC_GetRxStatus()\r
+ *   GMAC_ClearTxStatus() and GMAC_ClearRxStatus().\r
+ * - Manage GMAC Queue with GMAC_SetTxQueue(), GMAC_GetTxQueue(),\r
+ *   GMAC_SetRxQueue() and GMAC_GetRxQueue(), the queue descriptor can define\r
+ *   by \ref sGmacRxDescriptor and \ref sGmacTxDescriptor.\r
+ * - Manage PHY through GMAC is performed by\r
+ *   - GMAC_ManagementEnable(): Enable/Disable PHY management.\r
+ *   - GMAC_PHYMaintain(): Execute PHY management commands.\r
+ *   - GMAC_PHYData(): Return PHY management data.\r
+ *   - GMAC_IsIdle(): Check if PHY is idle.\r
+ * - Setup GMAC parameters with following functions:\r
+ *   - GMAC_SetHash(): Set Hash value.\r
+ *   - GMAC_SetAddress(): Set MAC address.\r
+ * - Enable/Disable GMAC transceiver clock via GMAC_TransceiverClockEnable()\r
+ * - Switch GMAC MII/RMII mode through GMAC_RMIIEnable()\r
+ *\r
+ * For more accurate information, please look at the GMAC section of the\r
+ * Datasheet.\r
+ *\r
+ * \sa \ref gmacd_module\r
+ *\r
+ * Related files:\n\r
+ * gmac.c\n\r
+ * gmac.h.\n\r
+ *\r
+ *   \defgroup gmac_defines GMAC Defines\r
+ *   \defgroup gmac_structs GMAC Data Structs\r
+ *   \defgroup gmac_functions GMAC Functions\r
+ */\r
+/**@}*/\r
+\r
+#ifndef _GMAC_H\r
+#define _GMAC_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Defines\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup gmac_defines\r
+        @{*/\r
+\r
+/// Board GMAC base address\r
+\r
+/// Number of buffer for RX, be carreful: MUST be 2^n\r
+#define GRX_BUFFERS  16\r
+/// Number of buffer for TX, be carreful: MUST be 2^n\r
+#define GTX_BUFFERS   8\r
+\r
+/// Buffer Size\r
+#define GMAC_RX_UNITSIZE            128     /// Fixed size for RX buffer\r
+#define GMAC_TX_UNITSIZE            1518    /// Size for ETH frame length\r
+\r
+// The MAC can support frame lengths up to 1536 bytes.\r
+#define GMAC_FRAME_LENTGH_MAX       1536\r
+\r
+//\r
+#define GMAC_DUPLEX_HALF 0\r
+#define GMAC_DUPLEX_FULL 1\r
+\r
+//\r
+#define GMAC_SPEED_10M      0\r
+#define GMAC_SPEED_100M     1\r
+#define GMAC_SPEED_1000M    2\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup gmac_structs\r
+        @{*/\r
+/** Receive buffer descriptor struct */\r
+typedef struct _GmacRxDescriptor {\r
+    union _GmacRxAddr {\r
+        uint32_t val;\r
+        struct _GmacRxAddrBM {\r
+            uint32_t bOwnership:1,  /**< User clear, GMAC set this to one once\r
+                                         it has successfully written a frame to\r
+                                         memory */\r
+                     bWrap:1,       /**< Marks last descriptor in receive buffer */\r
+                     addrDW:30;     /**< Address in number of DW */\r
+        } bm;\r
+    } addr;                    /**< Address, Wrap & Ownership */\r
+    union _GmacRxStatus {\r
+        uint32_t val;\r
+        struct _GmacRxStatusBM {\r
+            uint32_t len:12,                /** Length of frame including FCS */\r
+                     offset:2,              /** Receive buffer offset,\r
+                                                bits 13:12 of frame length for jumbo\r
+                                                frame */\r
+                     bSof:1,                /** Start of frame */\r
+                     bEof:1,                /** End of frame */\r
+                     bCFI:1,                /** Concatenation Format Indicator */\r
+                     vlanPriority:3,        /** VLAN priority (if VLAN detected) */\r
+                     bPriorityDetected:1,   /** Priority tag detected */\r
+                     bVlanDetected:1,       /**< VLAN tag detected */\r
+                     bTypeIDMatch:1,        /**< Type ID match */\r
+                     bAddr4Match:1,         /**< Address register 4 match */\r
+                     bAddr3Match:1,         /**< Address register 3 match */\r
+                     bAddr2Match:1,         /**< Address register 2 match */\r
+                     bAddr1Match:1,         /**< Address register 1 match */\r
+                     reserved:1,\r
+                     bExtAddrMatch:1,       /**< External address match */\r
+                     bUniHashMatch:1,       /**< Unicast hash match */\r
+                     bMultiHashMatch:1,     /**< Multicast hash match */\r
+                     bBroadcastDetected:1;  /**< Global all ones broadcast\r
+                                                 address detected */\r
+        } bm;\r
+    } status;\r
+} sGmacRxDescriptor;    /* GCC */\r
+\r
+/** Transmit buffer descriptor struct */\r
+typedef struct _GmacTxDescriptor {\r
+    uint32_t addr;\r
+    union _GmacTxStatus {\r
+        uint32_t val;\r
+        struct _GmacTxStatusBM {\r
+            uint32_t len:11,        /**< Length of buffer */\r
+                     reserved:4,\r
+                     bLastBuffer:1, /**< Last buffer (in the current frame) */\r
+                     bNoCRC:1,      /**< No CRC */\r
+                     reserved1:10,\r
+                     bExhausted:1,  /**< Buffer exhausted in mid frame */\r
+                     bUnderrun:1,   /**< Transmit underrun */\r
+                     bError:1,      /**< Retry limit exceeded, error detected */\r
+                     bWrap:1,       /**< Marks last descriptor in TD list */\r
+                     bUsed:1;       /**< User clear, GMAC sets this once a frame\r
+                                         has been successfully transmitted */\r
+        } bm;\r
+    } status;\r
+} sGmacTxDescriptor;     /* GCC */\r
+\r
+/**     @}*/\r
+\r
+//-----------------------------------------------------------------------------\r
+//         PHY Exported functions\r
+//-----------------------------------------------------------------------------\r
+extern uint8_t GMAC_IsIdle(Gmac *pGmac);\r
+extern void GMAC_PHYMaintain(Gmac      *pGmac,\r
+                             uint8_t   bPhyAddr,\r
+                             uint8_t   bRegAddr,\r
+                             uint8_t   bRW,\r
+                             uint16_t  wData);\r
+extern uint16_t GMAC_PHYData(Gmac *pGmac);\r
+extern void GMAC_ClearStatistics(Gmac *pGmac);\r
+extern void GMAC_IncreaseStatistics(Gmac *pGmac);\r
+extern void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis);\r
+extern uint8_t GMAC_SetMdcClock(Gmac *pGmac, uint32_t mck );\r
+extern void GMAC_EnableMdio(Gmac *pGmac );\r
+extern void GMAC_DisableMdio(Gmac *pGmac );\r
+extern void GMAC_EnableMII(Gmac *pGmac );\r
+extern void GMAC_EnableRMII(Gmac *pGmac );\r
+extern void GMAC_EnableGMII( Gmac *pGmac );\r
+extern void GMAC_SetLinkSpeed(Gmac *pGmac, uint8_t speed, uint8_t fullduplex);\r
+extern void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources);\r
+extern void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources);\r
+extern uint32_t GMAC_GetItStatus(Gmac *pGmac);\r
+extern uint32_t GMAC_GetItMask(Gmac *pGmac);\r
+extern uint32_t GMAC_GetTxStatus(Gmac *pGmac);\r
+extern void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus);\r
+extern uint32_t GMAC_GetRxStatus(Gmac *pGmac);\r
+extern void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus);\r
+extern void GMAC_ReceiveEnable(Gmac* pGmac, uint8_t bEnaDis);\r
+extern void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis);\r
+extern void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr);\r
+extern uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac);\r
+extern uint32_t GMAC_GetRxQueue(Gmac *pGmac);\r
+extern void GMAC_SetTxQueue(Gmac *pGmac, uint32_t dwAddr);\r
+extern uint32_t GMAC_GetTxQueue(Gmac *pGmac);\r
+extern void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR);\r
+extern uint32_t GMAC_GetNetworkControl(Gmac *pGmac);\r
+extern void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr);\r
+extern void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT, uint32_t dwMacB);\r
+extern void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac);\r
+extern void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg);\r
+extern uint32_t GMAC_GetConfigure(Gmac *pGmac);\r
+extern void GMAC_TransmissionStart(Gmac *pGmac);\r
+extern void GMAC_TransmissionHalt(Gmac *pGmac);\r
+extern void GMAC_EnableRGMII(Gmac *pGmac, uint32_t duplex, uint32_t speed);\r
+#endif // #ifndef GMAC_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/hsmci.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/hsmci.h
new file mode 100644 (file)
index 0000000..ffff415
--- /dev/null
@@ -0,0 +1,151 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup hsmci_module Working with HSMCI\r
+ *  \ingroup mcid_module\r
+ *\r
+ * \section Purpose\r
+ *\r
+ * The HSMCI driver provides the interface to configure and use the HSMCI\r
+ * peripheral.\r
+ *\r
+ * \section Usage\r
+ *\r
+ * -# HSMCI_Enable(), MCI_Disable(): Enable/Disable HSMCI interface.\r
+ * -# HSMCI_Reset(): Reset HSMCI interface.\r
+ * -# HSMCI_Select(): HSMCI slot and buswidth selection\r
+ *                    (\ref Hsmci::HSMCI_SDCR).\r
+ * -# HSMCI_ConfigureMode(): Configure the  MCI CLKDIV in the _MR register\r
+ *                           (\ref Hsmci::HSMCI_MR).\r
+ * -# HSMCI_EnableIt(), HSMCI_DisableIt(), HSMCI_GetItMask(), HSMCI_GetStatus()\r
+ *      HSMCI Interrupt control (\ref Hsmci::HSMCI_IER, \ref Hsmci::HSMCI_IDR,\r
+ *      \ref Hsmci::HSMCI_IMR, \ref Hsmci::HSMCI_SR).\r
+ * -# HSMCI_ConfigureTransfer(): Setup block length and count for MCI transfer\r
+ *                               (\ref Hsmci::HSMCI_BLKR).\r
+ * -# HSMCI_SendCmd(): Send SD/MMC command with argument\r
+ *                     (\ref Hsmci::HSMCI_ARGR, \ref Hsmci::HSMCI_CMDR).\r
+ * -# HSMCI_GetResponse(): Get SD/MMC response after command finished\r
+ *                         (\ref Hsmci::HSMCI_RSPR).\r
+ * -# HSMCI_ConfigureDma(): Configure MCI DMA transfer\r
+ *                          (\ref Hsmci::HSMCI_DMA).\r
+ * -# HSMCI_Configure(): Configure the HSMCI interface (\ref Hsmci::HSMCI_CFG).\r
+ * -# HSMCI_HsEnable(), HSMCI_IsHsEnabled(): High Speed control.\r
+ *\r
+ * For more accurate information, please look at the HSMCI section of the\r
+ * Datasheet.\r
+ *\r
+ * \sa \ref mcid_module\r
+ *\r
+ * Related files :\n\r
+ * \ref hsmci.h\n\r
+ * \ref hsmci.c.\n\r
+ */\r
+\r
+#ifndef HSMCID_H\r
+#define HSMCID_H\r
+/** \addtogroup hsmci_module\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+/** \addtogroup hsmci_functions HSMCI Functions\r
+ *      @{\r
+ */\r
+\r
+extern void HSMCI_Enable(Hsmci* pRMci);\r
+extern void HSMCI_Disable(Hsmci* pRMci);\r
+extern void HSMCI_Reset(Hsmci* pRMci, uint8_t bBackup);\r
+\r
+extern void HSMCI_Select(Hsmci * pRMci,uint8_t bSlot,uint8_t bBusWidth);\r
+extern void HSMCI_SetSlot(Hsmci * pRMci,uint8_t bSlot);\r
+extern void HSMCI_SetBusWidth(Hsmci * pRMci,uint8_t bBusWidth);\r
+extern uint8_t HSMCI_GetBusWidth(Hsmci * pRMci);\r
+\r
+extern void HSMCI_ConfigureMode(Hsmci *pRMci, uint32_t dwMode);\r
+extern uint32_t HSMCI_GetMode(Hsmci *pRMci);\r
+extern void HSMCI_ProofEnable(Hsmci *pRMci, uint8_t bRdProof, uint8_t bWrProof);\r
+extern void HSMCI_PadvCtl(Hsmci *pRMci, uint8_t bPadv);\r
+extern void HSMCI_FByteEnable(Hsmci *pRMci, uint8_t bFByteEn);\r
+extern uint8_t HSMCI_IsFByteEnabled(Hsmci * pRMci);\r
+extern void HSMCI_DivCtrl(Hsmci *pRMci, uint32_t bClkDiv, uint8_t bPwsDiv);\r
+\r
+extern void HSMCI_EnableIt(Hsmci *pRMci, uint32_t dwSources);\r
+extern void HSMCI_DisableIt(Hsmci *pRMci, uint32_t dwSources);\r
+extern uint32_t HSMCI_GetItMask(Hsmci *pRMci);\r
+\r
+extern void HSMCI_ConfigureTransfer(Hsmci * pRMci,uint16_t wBlkLen,uint16_t wCnt);\r
+extern void HSMCI_SetBlockLen(Hsmci * pRMci,uint16_t wBlkSize);\r
+extern void HSMCI_SetBlockCount(Hsmci * pRMci,uint16_t wBlkCnt);\r
+\r
+extern void HSMCI_ConfigureCompletionTO(Hsmci *pRMci, uint32_t dwConfigure);\r
+extern void HSMCI_ConfigureDataTO(Hsmci *pRMci, uint32_t dwConfigure);\r
+\r
+extern void HSMCI_SendCmd(Hsmci * pRMci,uint32_t dwCmd,uint32_t dwArg);\r
+extern uint32_t HSMCI_GetResponse(Hsmci *pRMci);\r
+extern uint32_t HSMCI_Read(Hsmci *pRMci);\r
+extern void HSMCI_ReadFifo(Hsmci *pRMci, uint8_t *pdwData, uint32_t dwSize);\r
+extern void HSMCI_Write(Hsmci *pRMci, uint32_t dwData);\r
+extern void HSMCI_WriteFifo(Hsmci *pRMci, uint8_t *pdwData, uint32_t dwSize);\r
+\r
+extern uint32_t HSMCI_GetStatus(Hsmci *pRMci);\r
+\r
+extern void HSMCI_ConfigureDma(Hsmci *pRMci, uint32_t dwConfigure);\r
+extern void HSMCI_EnableDma(Hsmci * pRMci,uint8_t bEnable);\r
+\r
+extern void HSMCI_Configure(Hsmci *pRMci, uint32_t dwConfigure);\r
+extern void HSMCI_HsEnable(Hsmci *pRMci, uint8_t bHsEnable);\r
+extern uint8_t HSMCI_IsHsEnabled(Hsmci *pRMci);\r
+\r
+extern void HSMCI_BusWidthCtl(Hsmci *pRMci, uint8_t bBusWidth);\r
+extern void HSMCI_SlotCtl(Hsmci *pRMci, uint8_t bSlot);\r
+extern uint8_t HSMCI_GetSlot(Hsmci *pRMci);\r
+\r
+extern void HSMCI_ConfigureWP(Hsmci *pRMci, uint32_t dwConfigure);\r
+extern uint32_t HSMCI_GetWPStatus(Hsmci *pRMci);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+/**     @}*/\r
+/**@}*/\r
+#endif //#ifndef HSMCID_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/icm.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/icm.h
new file mode 100644 (file)
index 0000000..25221bc
--- /dev/null
@@ -0,0 +1,97 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _ICM_\r
+#define _ICM_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Definition                                                           */\r
+/*------------------------------------------------------------------------------*/\r
+#define ICM_RCFG_CDWBN (0x1u << 0) /**< \brief (ICM_RCFG) Compare Digest or Write Back Digest */\r
+#define ICM_RCFG_WRAP (0x1u << 1) /**< \brief (ICM_RCFG) Wrap Command */\r
+#define ICM_RCFG_EOM (0x1u << 2) /**< \brief (ICM_RCFG) End Of Monitoring */\r
+#define ICM_RCFG_RHIEN (0x1u << 4) /**< \brief (ICM_RCFG) Region Hash Completed interrupt enable */\r
+#define ICM_RCFG_DMIEN (0x1u << 5) /**< \brief (ICM_RCFG) Digest Mismatch interrupt enable */\r
+#define ICM_RCFG_BEIEN (0x1u << 6) /**< \brief (ICM_RCFG) Bus error interrupt enable  */\r
+#define ICM_RCFG_WCIEN (0x1u << 7) /**< \brief (ICM_RCFG) Warp condition interrupt enable  */\r
+#define ICM_RCFG_ECIEN (0x1u << 8) /**< \brief (ICM_RCFG) End bit condition interrupt enable  */\r
+#define ICM_RCFG_SUIEN (0x1u << 9) /**< \brief (ICM_RCFG) Monitoring Status Updated Condition Interrupt Enable  */\r
+#define ICM_RCFG_PROCDLY (0x1u << 10) /**< \brief (ICM_RCFG) Processing Delay*/\r
+#define ICM_RCFG_UALGO_Pos 12\r
+#define ICM_RCFG_UALGO_Msk (0x7u << ICM_RCFG_UALGO_Pos) /**< \brief (ICM_RCFG) User SHA Algorithm */\r
+#define   ICM_RCFG_ALGO_SHA1 (0x0u << 12) /**< \brief (ICM_RCFG) SHA1 algorithm processed */\r
+#define   ICM_RCFG_ALGO_SHA256 (0x1u << 12) /**< \brief (ICM_RCFG) SHA256 algorithm processed */\r
+#define   ICM_RCFG_ALGO_SHA224 (0x4u << 12) /**< \brief (ICM_RCFG) SHA224 algorithm processed */\r
+#define ICM_RCFG_MRPROT_Pos 24\r
+#define ICM_RCFG_MRPROT_Msk (0x3fu << ICM_RCFG_MRPROT_Pos) /**< \brief (ICM_RCFG) Memory Region AHB Protection */\r
+#define ICM_RCFG_MRPROT(value) ((ICM_RCFG_MRPROT_Msk & ((value) << ICM_RCFG_MRPROT_Pos)))\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Type                                                                 */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+/** \brief Structure ICM region descriptor area. */\r
+typedef struct _LinkedListDescriporIcmRegion\r
+{\r
+    /** the first byte address of the Region. */\r
+    uint32_t icm_raddr;\r
+    /** Configuration Structure Member. */\r
+    uint32_t icm_rcfg;\r
+    /** Control Structure Member. */\r
+    uint32_t icm_rctrl;\r
+    /** Next Address Structure Member. */\r
+    uint32_t icm_rnext;\r
+}LinkedListDescriporIcmRegion;\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+extern void ICM_Enable(void);\r
+extern void ICM_Disable(void);\r
+extern void ICM_SoftReset(void);\r
+extern void ICM_ReComputeHash(uint8_t region);\r
+extern void ICM_EnableMonitor(uint8_t region);\r
+extern void ICM_DisableMonitor(uint8_t region);\r
+extern void ICM_Configure(uint32_t mode);\r
+extern void ICM_EnableIt(uint32_t sources);\r
+extern void ICM_DisableIt(uint32_t sources);\r
+extern uint32_t ICM_GetIntStatus(void);\r
+extern uint32_t ICM_GetStatus(void);\r
+extern uint32_t ICM_GetUStatus(void);\r
+extern void ICM_SetDescStartAddress(uint32_t addr);\r
+extern void ICM_SetHashStartAddress(uint32_t addr);\r
+extern void ICM_SetInitHashValue(uint32_t val);\r
+#endif /* #ifndef _ICM_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/isi.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/isi.h
new file mode 100644 (file)
index 0000000..07d9313
--- /dev/null
@@ -0,0 +1,98 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup isi_module\r
+ * @{\r
+ * \section gmac_usage Usage\r
+ * - ISI_Init: initialize ISI with default parameters\r
+ * - ISI_EnableInterrupt: enable one or more interrupts\r
+ * - ISI_DisableInterrupt: disable one or more interrupts\r
+ * - ISI_Enable: enable isi module\r
+ * - ISI_Disable: disable isi module\r
+ * - ISI_CodecPathFull: enable codec path\r
+ * - ISI_SetFrame: set frame rate\r
+ * - ISI_BytesForOnePixel: return number of byte for one pixel\r
+ * - ISI_StatusRegister: return ISI status register\r
+ * - ISI_Reset: make a software reset\r
+ */\r
+/**@}*/\r
+\r
+#ifndef ISI_H\r
+#define ISI_H\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** ISI descriptors */\r
+typedef struct\r
+{\r
+    /** Current LCD index, used with AT91C_ISI_MAX_PREV_BUFFER */\r
+    uint32_t CurrentLcdIndex;\r
+    /** set if Fifo Codec Empty is present */\r
+    volatile uint32_t DisplayCodec;\r
+    /** upgrade for each Fifo Codec Overflow (statistics use) */\r
+    uint32_t nb_codec_ovf;\r
+    /** upgrade for each Fifo Preview Overflow (statistics use) */\r
+    uint32_t nb_prev_ovf;\r
+}ISI_Descriptors;\r
+\r
+/** Frame Buffer Descriptors */\r
+typedef struct\r
+{\r
+    /** Address of the Current FrameBuffer */\r
+    uint32_t Current;\r
+    /** Address of the Control */\r
+    uint32_t Control;\r
+    /** Address of the Next FrameBuffer */\r
+    uint32_t Next;\r
+}ISI_FrameBufferDescriptors;\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void ISI_Enable(void);\r
+extern void ISI_Disable(void);\r
+extern void ISI_DmaChannelEnable(uint32_t channel);\r
+extern void ISI_DmaChannelDisable(uint32_t channel);\r
+extern void ISI_EnableInterrupt(uint32_t flag);\r
+extern void ISI_DisableInterrupt(uint32_t flag);\r
+extern void ISI_CodecPathFull(void);\r
+extern void ISI_SetFrame(uint32_t frate);\r
+extern uint8_t ISI_BytesForOnePixel(uint8_t bmpRgb);\r
+extern void ISI_Reset(void);\r
+extern void ISI_Init(pIsi_Video pVideo);\r
+extern uint32_t ISI_StatusRegister(void);\r
+\r
+#endif //#ifndef ISI_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/l2cc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/l2cc.h
new file mode 100644 (file)
index 0000000..1e43e67
--- /dev/null
@@ -0,0 +1,191 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Level 2 cache (L2CC) controller.\r
+ *\r
+ */\r
+\r
+/** \addtogroup L2cc_module\r
+ * @{\r
+ * \section L2cc_usage Usage\r
+ * - L2CC_IsEnabled: Check if L2CC is enable\r
+ * - L2CC_Enable: Enable L2 cache controller with default parameters\r
+ * - ISI_DisableInterrupt: disable one or more interrupts\r
+ * - ISI_Enable: enable isi module\r
+ * - ISI_Disable: disable isi module\r
+ * - ISI_CodecPathFull: enable codec path\r
+ * - ISI_SetFrame: set frame rate\r
+ * - ISI_BytesForOnePixel: return number of byte for one pixel\r
+ * - ISI_StatusRegister: return ISI status register\r
+ * - ISI_Reset: make a software reset\r
+ */\r
+/**@}*/\r
+#ifndef _L2CC_H\r
+#define _L2CC_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+   \r
+#define ENABLE          1\r
+#define DISABLE         0   \r
+   \r
+#define OFFSET_BIT      5\r
+#define INDEX_BIT       9\r
+#define TAG_BIT         18          \r
+   \r
+#define DCACHE_CLEAN            0\r
+#define DCACHE_INVAL            1\r
+#define DCACHE_FLUSH            2   \r
+   \r
+#define RESET_EVCOUNTER0        0\r
+#define RESET_EVCOUNTER1        1   \r
+#define RESET_BOTH_COUNTER      3\r
+\r
+#define FWA_DEFAULT             0\r
+#define FWA_NO_ALLOCATE         1\r
+#define FWA_FORCE_ALLOCATE      2\r
+#define FWA_INTERNALLY_MAPPED   3\r
+ /*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+typedef struct\r
+{\r
+  uint8_t  SetupLAT;\r
+  uint8_t  ReadLAT;\r
+  uint8_t  WriteLAT;\r
+}Latency;\r
+\r
+typedef struct\r
+{\r
+  Latency       TagRAM;\r
+  Latency       DataRAM;  \r
+}RAMLatencyControl;\r
+   \r
+/** L2CC structur */\r
+typedef struct\r
+{\r
+    /** High Priority for SO and Dev Reads Enable */\r
+    uint32_t HPSO_Val;\r
+    /** Store Buffer Device Limitation Enable */\r
+    uint32_t SBDLE_Val;\r
+    /** Shared Attribute Invalidate Enable */\r
+    uint32_t SAIE_Val;\r
+    /** Event Monitor Bus Enable */\r
+    uint32_t EMBEN_Val;\r
+    /** Parity Enable */    \r
+    uint32_t PEN_Val;\r
+    /** Shared Attribute Override Enable */    \r
+    uint32_t SAOEN_Val;\r
+    /** Force Write Allocate */    \r
+    uint32_t FWA_Val;\r
+    /** Cache Replacement Policy */    \r
+    uint32_t CRPOL_Val;\r
+    /** Non-Secure Lockdown Enable*/    \r
+    uint32_t NSLEN_Val;\r
+    /** Non-Secure Interrupt Access Control */    \r
+    uint32_t NSIAC_Val;\r
+     /** Data Prefetch Enable*/\r
+    uint32_t DPEN_Val;\r
+    /** Instruction Prefetch Enable */\r
+    uint32_t IPEN_Val;\r
+    /** Prefetch Offset */\r
+    uint32_t OFFSET_Val;\r
+    /** Not Same ID on Exclusive Sequence Enable */\r
+    uint32_t NSIDEN_Val;\r
+    /** INCR Double Linefill Enable */\r
+    uint32_t IDLEN_Val;\r
+    /** Prefetch Drop Enable*/\r
+    uint32_t PDEN_Val;\r
+    /** Double Linefill on WRAP Read Disable */\r
+    uint32_t DLFWRDIS_Val;\r
+    /** Double linefill Enable */\r
+    uint32_t DLEN_Val;\r
+    /** Standby Mode Enable */\r
+    uint32_t STBYEN_Val;\r
+    /** Dynamic Clock Gating Enable */\r
+    uint32_t DCKGATEN_Val;\r
+    /** Disable Cache Linefill*/\r
+    uint32_t DCL_Val;\r
+    /** Disable Write-back, Force Write-through */\r
+    uint32_t DWB_Val;\r
+}L2CC_Control;\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+extern unsigned int L2CC_IsEnabled(L2cc* pL2CC);\r
+extern void L2CC_Enable(L2cc* pL2CC);\r
+extern void L2CC_Disable(L2cc* pL2CC);\r
+extern void L2CC_ExclusiveCache(L2cc* pL2CC, uint8_t Enable);\r
+extern void L2CC_ConfigLatRAM(L2cc* pL2CC, RAMLatencyControl  *pLat);\r
+extern void L2CC_Config(L2cc* pL2CC, L2CC_Control L2cc_Config);\r
+extern void L2CC_DataPrefetchEnable(L2cc* pL2CC );\r
+extern void L2CC_InstPrefetchEnable(L2cc* pL2CC );\r
+extern void L2CC_EnableResetCounter(L2cc* pL2CC , uint8_t EvenetCounter);\r
+extern void L2CC_EventConfig(L2cc* pL2CC, uint8_t EventCounter, uint8_t Source, uint8_t IntGen);\r
+extern unsigned int L2CC_EventCounterValue(L2cc* pL2CC, uint8_t EventCounter);\r
+extern void L2CC_EnableIT(L2cc* pL2CC, uint16_t ITSource);\r
+extern void L2CC_DisableIT(L2cc* pL2CC, uint16_t ITSource);\r
+extern unsigned short L2CC_ITStatusRaw(L2cc* pL2CC, uint16_t ITSource);\r
+extern unsigned short L2CC_ITStatusMask(L2cc* pL2CC, uint16_t ITSource);\r
+extern void L2CC_ITClear(L2cc* pL2CC, uint16_t ITSource);\r
+uint8_t L2CC_PollSPNIDEN(L2cc* pL2CC);\r
+extern void L2CC_CacheSync(L2cc* pL2CC);\r
+extern void L2CC_InvalidateWay(L2cc* pL2CC, uint8_t Way);\r
+extern void L2CC_CleanWay(L2cc* pL2CC, uint8_t Way);\r
+extern void L2CC_InvalidatePAL(L2cc* pL2CC, uint32_t P_Address);\r
+extern void L2CC_CleanPAL(L2cc* pL2CC, uint32_t P_Address);\r
+extern void L2CC_CleanIx(L2cc* pL2CC, uint32_t P_Address);\r
+\r
+extern void L2CC_CleanIndex(L2cc* pL2CC, uint32_t P_Address, uint8_t Way);\r
+extern void L2CC_CleanInvalidateIndex(L2cc* pL2CC, uint32_t P_Address, uint8_t Way);\r
+extern void L2CC_DataLockdown(L2cc* pL2CC, uint8_t Way);\r
+extern void L2CC_InstructionLockdown(L2cc* pL2CC, uint8_t Way);\r
+extern void L2CC_CacheMaintenance(uint8_t Maint_Op);\r
+extern void Enable_L2CC(void);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _L2CC_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/mmu.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/mmu.h
new file mode 100644 (file)
index 0000000..f516d11
--- /dev/null
@@ -0,0 +1,45 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _MMU_\r
+#define _MMU_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "../cp15/cp15.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void MMU_Initialize(uint32_t *pTB);\r
+\r
+#endif /* #ifndef _MMU_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pio.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pio.h
new file mode 100644 (file)
index 0000000..e265816
--- /dev/null
@@ -0,0 +1,221 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  This file provides a basic API for PIO configuration and usage of\r
+ *  user-controlled pins. Please refer to the board.h file for a list of\r
+ *  available pin definitions.\r
+ *\r
+ *  \section Usage\r
+ *\r
+ *  -# Define a constant pin description array such as the following one, using\r
+ *     the existing definitions provided by the board.h file if possible:\r
+ *     \code\r
+ *        const Pin pPins[] = {PIN_USART0_TXD, PIN_USART0_RXD};\r
+ *     \endcode\r
+ *     Alternatively, it is possible to add new pins by provided the full Pin\r
+ *     structure:\r
+ *     \code\r
+ *     // Pin instance to configure PA10 & PA11 as inputs with the internal\r
+ *     // pull-up enabled.\r
+ *     const Pin pPins = {\r
+ *          (1 << 10) | (1 << 11),\r
+ *          REG_PIOA,\r
+ *          ID_PIOA,\r
+ *          PIO_INPUT,\r
+ *          PIO_PULLUP\r
+ *     };\r
+ *     \endcode\r
+ *  -# Configure a pin array by calling PIO_Configure() with a pointer to the\r
+ *     array and its size (which is computed using the PIO_LISTSIZE macro).\r
+ *  -# Change and get the value of a user-controlled pin using the PIO_Set,\r
+ *     PIO_Clear and PIO_Get methods.\r
+ *  -# Get the level being currently output by a user-controlled pin configured\r
+ *     as an output using PIO_GetOutputDataStatus().\r
+ */\r
+\r
+#ifndef _PIO_\r
+#define _PIO_\r
+\r
+/*\r
+ *         Headers\r
+ */\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*\r
+ *         Global Definitions\r
+ */\r
+\r
+/*  The pin is controlled by the associated signal of peripheral A. */\r
+#define PIO_PERIPH_A                0\r
+/*  The pin is controlled by the associated signal of peripheral B. */\r
+#define PIO_PERIPH_B                1\r
+/*  The pin is controlled by the associated signal of peripheral C. */\r
+#define PIO_PERIPH_C                2\r
+/*  The pin is controlled by the associated signal of peripheral D. */\r
+#define PIO_PERIPH_D                3\r
+/*  The pin is an input. */\r
+#define PIO_INPUT                   4\r
+/*  The pin is an output and has a default level of 0. */\r
+#define PIO_OUTPUT_0                5\r
+/*  The pin is an output and has a default level of 1. */\r
+#define PIO_OUTPUT_1                6\r
+\r
+/*  Default pin configuration (no attribute). */\r
+#define PIO_DEFAULT                 (0 << 0)\r
+/*  The internal pin pull-up is active. */\r
+#define PIO_PULLUP                  (1 << 0)\r
+/*  The internal glitch filter is active. */\r
+#define PIO_DEGLITCH                (1 << 1)\r
+/*  The pin is open-drain. */\r
+#define PIO_OPENDRAIN               (1 << 2)\r
+/* The internal pin pull-down is active. */\r
+#define PIO_PULLDOWN                (1 << 3)\r
+/*  The internal debouncing filter is active. */\r
+#define PIO_DEBOUNCE                (1 << 3)\r
+\r
+/*  Enable additional interrupt modes. */\r
+#define PIO_IT_AIME                 (1 << 4)\r
+\r
+/*  Interrupt High Level/Rising Edge detection is active. */\r
+#define PIO_IT_RE_OR_HL             (1 << 5)\r
+/*  Interrupt Edge detection is active. */\r
+#define PIO_IT_EDGE                 (1 << 6)\r
+\r
+/*  Low level interrupt is active */\r
+#define PIO_IT_LOW_LEVEL            (0               | 0 | PIO_IT_AIME)\r
+/*  High level interrupt is active */\r
+#define PIO_IT_HIGH_LEVEL           (PIO_IT_RE_OR_HL | 0 | PIO_IT_AIME)\r
+/*  Falling edge interrupt is active */\r
+#define PIO_IT_FALL_EDGE            (0               | PIO_IT_EDGE | PIO_IT_AIME)\r
+/*  Rising edge interrupt is active */\r
+#define PIO_IT_RISE_EDGE            (PIO_IT_RE_OR_HL | PIO_IT_EDGE | PIO_IT_AIME)\r
+\r
+#define PIO_WPMR_WPEN_EN            ( 0x01     << 0 )\r
+\r
+#define PIO_WPMR_WPEN_DIS           ( 0x00     << 0 )\r
+\r
+#define PIO_WPMR_WPKEY_VALID        ( 0x50494F << 8 )\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*\r
+ *          Global Macros\r
+ */\r
+\r
+/**\r
+ *  Calculates the size of an array of Pin instances. The array must be defined\r
+ *  locally (i.e. not a pointer), otherwise the computation will not be correct.\r
+ *  \param pPins  Local array of Pin instances.\r
+ *  \return Number of elements in array.\r
+ */\r
+#define PIO_LISTSIZE(pPins)    (sizeof(pPins) / sizeof(Pin))\r
+\r
+/*\r
+ *         Global Types\r
+ */\r
+\r
+\r
+/*\r
+ *  Describes the type and attribute of one PIO pin or a group of similar pins.\r
+ *  The #type# field can have the following values:\r
+ *     - PIO_PERIPH_A\r
+ *     - PIO_PERIPH_B\r
+ *     - PIO_OUTPUT_0\r
+ *     - PIO_OUTPUT_1\r
+ *     - PIO_INPUT\r
+ *\r
+ *  The #attribute# field is a bitmask that can either be set to PIO_DEFAULt,\r
+ *  or combine (using bitwise OR '|') any number of the following constants:\r
+ *     - PIO_PULLUP\r
+ *     - PIO_DEGLITCH\r
+ *     - PIO_DEBOUNCE\r
+ *     - PIO_OPENDRAIN\r
+ *     - PIO_IT_LOW_LEVEL\r
+ *     - PIO_IT_HIGH_LEVEL\r
+ *     - PIO_IT_FALL_EDGE\r
+ *     - PIO_IT_RISE_EDGE\r
+ */\r
+typedef struct _Pin\r
+{\r
+    /*  Bitmask indicating which pin(s) to configure. */\r
+    uint32_t mask;\r
+    /*  Pointer to the PIO controller which has the pin(s). */\r
+    Pio    *pio;\r
+    /*  Peripheral ID of the PIO controller which has the pin(s). */\r
+    uint8_t id;\r
+    /*  Pin type. */\r
+    uint8_t type;\r
+    /*  Pin attribute. */\r
+    uint8_t attribute;\r
+} Pin ;\r
+\r
+/*\r
+ *         Global Access Macros\r
+ */\r
+\r
+/*\r
+ *         Global Functions\r
+ */\r
+\r
+extern uint8_t PIO_Configure( const Pin *list, uint32_t size ) ;\r
+\r
+extern void PIO_Set( const Pin *pin ) ;\r
+\r
+extern void PIO_Clear( const Pin *pin ) ;\r
+\r
+extern uint8_t PIO_Get( const Pin *pin ) ;\r
+\r
+extern uint8_t PIO_GetOutputDataStatus( const Pin *pin ) ;\r
+\r
+extern void PIO_SetDebounceFilter( const Pin *pin, uint32_t cuttoff );\r
+\r
+extern void PIO_EnableWriteProtect( const Pin *pin );\r
+\r
+extern void PIO_DisableWriteProtect( const Pin *pin );\r
+\r
+extern uint32_t PIO_GetWriteProtectViolationInfo( const Pin * pin );\r
+\r
+extern void PIO_Output_Low (Pio * pio, uint32_t pioId ,uint32_t mask);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _PIO_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pio_it.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pio_it.h
new file mode 100644 (file)
index 0000000..c892db5
--- /dev/null
@@ -0,0 +1,97 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \par Purpose\r
+ *\r
+ *  Configuration and handling of interrupts on PIO status changes. The API\r
+ *  provided here have several advantages over the traditional PIO interrupt\r
+ *  configuration approach:\r
+ *     - It is highly portable\r
+ *     - It automatically demultiplexes interrupts when multiples pins have been\r
+ *       configured on a single PIO controller\r
+ *     - It allows a group of pins to share the same interrupt\r
+ *\r
+ *  However, it also has several minor drawbacks that may prevent from using it\r
+ *  in particular applications:\r
+ *     - It enables the clocks of all PIO controllers\r
+ *     - PIO controllers all share the same interrupt handler, which does the\r
+ *       demultiplexing and can be slower than direct configuration\r
+ *     - It reserves space for a fixed number of interrupts, which can be\r
+ *       increased by modifying the appropriate constant in pio_it.c.\r
+ *\r
+ *  \par Usage\r
+ *\r
+ *  -# Initialize the PIO interrupt mechanism using PIO_InitializeInterrupts()\r
+ *     with the desired priority (0 ... 7).\r
+ *  -# Configure a status change interrupt on one or more pin(s) with\r
+ *     PIO_ConfigureIt().\r
+ *  -# Enable & disable interrupts on pins using PIO_EnableIt() and\r
+ *     PIO_DisableIt().\r
+ */\r
+\r
+#ifndef _PIO_IT_\r
+#define _PIO_IT_\r
+\r
+/*\r
+ *         Headers\r
+ */\r
+\r
+#include "pio.h"\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*\r
+ *         Global functions\r
+ */\r
+\r
+extern void PIO_InitializeInterrupts( uint32_t dwPriority ) ;\r
+\r
+extern void PIO_ConfigureIt( const Pin *pPin) ;\r
+\r
+extern void PIO_EnableIt( const Pin *pPin ) ;\r
+\r
+extern void PIO_DisableIt( const Pin *pPin ) ;\r
+\r
+extern void PIO_IT_InterruptHandler( void ) ;\r
+\r
+extern void PioInterruptHandler( uint32_t id, Pio *pPio ) ;\r
+\r
+extern void PIO_CaptureHandler( void ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _PIO_IT_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pit.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pit.h
new file mode 100644 (file)
index 0000000..b661cd4
--- /dev/null
@@ -0,0 +1,67 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+\r
+#ifndef _PIT_\r
+#define _PIT_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+extern void PIT_Init(uint32_t period, uint32_t pit_frequency);\r
+\r
+extern void PIT_SetPIV(uint32_t piv);\r
+\r
+extern void PIT_Enable(void);\r
+\r
+extern void PIT_Disable(void);\r
+\r
+extern void PIT_EnableIT(void);\r
+\r
+extern void PIT_DisableIT(void);\r
+\r
+extern uint32_t PIT_GetMode(void);\r
+\r
+extern uint32_t PIT_GetStatus(void);\r
+\r
+extern uint32_t PIT_GetPIIR(void);\r
+\r
+extern uint32_t PIT_GetPIVR(void);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _PIT_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pmc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pmc.h
new file mode 100644 (file)
index 0000000..6cba3e5
--- /dev/null
@@ -0,0 +1,84 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _PMC_\r
+#define _PMC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include <stdint.h>\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Peripheral clock maxinum frequency */\r
+typedef struct _PeripheralClockMaxFreq {\r
+    uint32_t bPeriphID;             /**< Peripheral ID */\r
+    uint32_t bMaxFrequency;         /**< Max frequency*/\r
+} PeripheralClockMaxFreq;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+extern void PMC_EnablePeripheral( uint32_t dwId ) ;\r
+extern void PMC_DisablePeripheral( uint32_t dwId ) ;\r
+\r
+extern void PMC_EnableAllPeripherals( void ) ;\r
+extern void PMC_DisableAllPeripherals( void ) ;\r
+\r
+extern uint32_t PMC_IsPeriphEnabled( uint32_t dwId ) ;\r
+\r
+extern void PMC_SelectExt32KCrystal(void);\r
+extern void PMC_SelectInt32kCrystal(void);\r
+extern void PMC_SelectExt12M_Osc(void);\r
+extern void PMC_SelectInt12M_Osc(void);\r
+extern void PMC_SwitchMck2Pll(void);\r
+extern void PMC_SwitchMck2Main(void);\r
+extern uint32_t PMC_SwitchMck2Slck(void);\r
+extern void PMC_SetPllA(uint32_t pll, uint32_t cpcr);\r
+extern void PMC_SetMckPrescaler(uint32_t prescaler);\r
+extern void PMC_SetMckDivider(uint32_t divider);\r
+extern void PMC_SetMckPllaDiv(uint32_t divider);\r
+extern void PMC_DisablePllA(void);\r
+extern uint32_t PMC_GetPeriMaxFreq( uint32_t dwId );\r
+extern uint32_t PMC_SetPeriMaxClock( uint32_t dwId, uint32_t mck);\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _PMC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pwmc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/pwmc.h
new file mode 100644 (file)
index 0000000..000533f
--- /dev/null
@@ -0,0 +1,96 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * \par Purpose\r
+ *\r
+ * Interface for configuration the Pulse Width Modulation Controller (PWM) peripheral.\r
+ *\r
+ * \par Usage\r
+ *\r
+ *    -# Configures PWM clocks A & B to run at the given frequencies using\r
+ *       \ref PWMC_ConfigureClocks().\r
+ *    -# Configure PWMC channel using \ref PWMC_ConfigureChannel(), \ref PWMC_ConfigureChannelExt()\r
+ *       \ref PWMC_SetPeriod(), \ref PWMC_SetDutyCycle() and \ref PWMC_SetDeadTime().\r
+ *    -# Enable & disable channel using \ref PWMC_EnableChannel() and\r
+ *       \ref PWMC_DisableChannel().\r
+ *    -# Enable & disable the period interrupt for the given PWM channel using\r
+ *       \ref PWMC_EnableChannelIt() and \ref PWMC_DisableChannelIt().\r
+ *    -# Enable & disable the selected interrupts sources on a PWMC peripheral\r
+ *       using  \ref PWMC_EnableIt() and \ref PWMC_DisableIt().\r
+ *    -# Control syncronous channel using \ref PWMC_ConfigureSyncChannel(),\r
+ *       \ref PWMC_SetSyncChannelUpdatePeriod() and \ref PWMC_SetSyncChannelUpdateUnlock().\r
+ *    -# Control PWM override output using \ref PWMC_SetOverrideValue(),\r
+ *       \ref PWMC_EnableOverrideOutput() and \ref PWMC_DisableOverrideOutput().\r
+ *    -# Send data through the transmitter using \ref PWMC_WriteBuffer().\r
+ *\r
+ */\r
+\r
+#ifndef _PWMC_\r
+#define _PWMC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void PWMC_ConfigureClocks(Pwm* pPwm, uint32_t mode);\r
+\r
+extern void PWMC_EnableChannel(Pwm* pPwm,uint8_t channel);\r
+\r
+extern void PWMC_DisableChannel(Pwm* pPwm,uint8_t channel);\r
+\r
+extern void PWMC_EnableChannelIt(Pwm* pPwm,uint8_t channel);\r
+\r
+extern void PWMC_DisableChannelIt(Pwm* pPwm,uint8_t channel);\r
+\r
+extern void PWMC_ConfigureChannel(Pwm* pPwm,uint8_t channel,uint32_t mode);\r
+\r
+extern void PWMC_SetPeriod( Pwm* pPwm, uint8_t channel, uint16_t period);\r
+\r
+extern void PWMC_SetDutyCycle( Pwm* pPwm, uint8_t channel, uint16_t duty);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _PWMC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/rstc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/rstc.h
new file mode 100644 (file)
index 0000000..367bf46
--- /dev/null
@@ -0,0 +1,66 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _RSTC_H\r
+#define _RSTC_H\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Includes\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <stdint.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+extern void RSTC_ConfigureMode(uint32_t rmr);\r
+\r
+extern void RSTC_SetUserResetEnable(uint8_t enable);\r
+\r
+extern void RSTC_SetUserResetInterruptEnable(uint8_t enable);\r
+\r
+extern void RSTC_SetExtResetLength(uint8_t powl);\r
+\r
+extern void RSTC_ProcessorReset(void);\r
+\r
+extern void RSTC_PeripheralReset(void);\r
+\r
+extern void RSTC_ExtReset(void);\r
+\r
+extern uint8_t RSTC_GetNrstLevel(void);\r
+\r
+extern uint8_t RSTC_IsUserResetDetected(void);\r
+\r
+extern uint8_t RSTC_IsBusy(void);\r
+\r
+extern uint32_t RSTC_GetStatus(void);\r
+\r
+#endif /* #ifndef _RSTC_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/rtc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/rtc.h
new file mode 100644 (file)
index 0000000..5dbe15c
--- /dev/null
@@ -0,0 +1,97 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Real Time Clock (RTC) controller.\r
+ *\r
+ */\r
+\r
+#ifndef _RTC_\r
+#define _RTC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#define RTC_HOUR_BIT_LEN_MASK   0x3F\r
+#define RTC_MIN_BIT_LEN_MASK    0x7F\r
+#define RTC_SEC_BIT_LEN_MASK    0x7F\r
+#define RTC_CENT_BIT_LEN_MASK   0x7F\r
+#define RTC_YEAR_BIT_LEN_MASK   0xFF\r
+#define RTC_MONTH_BIT_LEN_MASK  0x1F\r
+#define RTC_DATE_BIT_LEN_MASK   0x3F\r
+#define RTC_WEEK_BIT_LEN_MASK   0x07\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+extern void RTC_SetHourMode( Rtc* pRtc, uint32_t dwMode ) ;\r
+\r
+extern uint32_t RTC_GetHourMode( Rtc* pRtc ) ;\r
+\r
+extern void RTC_EnableIt( Rtc* pRtc, uint32_t dwSources ) ;\r
+\r
+extern void RTC_DisableIt( Rtc* pRtc, uint32_t dwSources ) ;\r
+\r
+extern int RTC_SetTime( Rtc* pRtc, uint8_t ucHour, uint8_t ucMinute, uint8_t ucSecond ) ;\r
+\r
+extern void RTC_GetTime( Rtc* pRtc, uint8_t *pucHour, uint8_t *pucMinute, uint8_t *pucSecond ) ;\r
+\r
+extern int RTC_SetTimeAlarm( Rtc* pRtc, uint8_t *pucHour, uint8_t *pucMinute, uint8_t *pucSecond ) ;\r
+\r
+extern void RTC_GetDate( Rtc* pRtc, uint16_t *pwYear, uint8_t *pucMonth, uint8_t *pucDay, uint8_t *pucWeek ) ;\r
+\r
+extern int RTC_SetDate( Rtc* pRtc, uint16_t wYear, uint8_t ucMonth, uint8_t ucDay, uint8_t ucWeek ) ;\r
+\r
+extern int RTC_SetDateAlarm( Rtc* pRtc, uint8_t *pucMonth, uint8_t *pucDay ) ;\r
+\r
+extern void RTC_ClearSCCR( Rtc* pRtc, uint32_t dwMask ) ;\r
+\r
+extern uint32_t RTC_GetSR( Rtc* pRtc, uint32_t dwMask ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _RTC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/sha.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/sha.h
new file mode 100644 (file)
index 0000000..ed9e230
--- /dev/null
@@ -0,0 +1,57 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _SHA_\r
+#define _SHA_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Definition                                                           */\r
+/*------------------------------------------------------------------------------*/\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+extern void SHA_Start(void);\r
+extern void SHA_SoftReset(void);\r
+extern void SHA_FirstBlock(void);\r
+extern void SHA_Configure(uint32_t mode);\r
+extern void SHA_EnableIt(uint32_t sources);\r
+extern void SHA_DisableIt(uint32_t sources);\r
+extern uint32_t SHA_GetStatus(void);\r
+extern void SHA_SetInput(uint32_t *data, uint8_t len);\r
+extern void SHA_GetOutput(uint32_t *data);\r
+\r
+#endif /* #ifndef _SHA_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/smcNfc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/smcNfc.h
new file mode 100644 (file)
index 0000000..2dd4fc0
--- /dev/null
@@ -0,0 +1,146 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/**\r
+*  \file\r
+*\r
+*  Definitions and function prototype for smc module\r
+*/\r
+\r
+#ifndef _SMC_\r
+#define _SMC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Types\r
+ *----------------------------------------------------------------------------*/\r
+typedef union _SmcStatus {\r
+    uint8_t BStatus;\r
+    struct _SmcStatusBits {\r
+        uint8_t smcSts:1,    /**< NAND Flash Controller Status */\r
+                xfrDone:1,   /**< NFC Data Transfer Terminated */\r
+                cmdDone:1,   /**< Command Done */\r
+                rbEdge: 1,   /**< Ready/Busy Line 3 Edge Detected*/\r
+           hammingReady:1;   /**< Hamming ecc ready */\r
+    } bStatus;\r
+} SmcStatus;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+/*\r
+ * NFC definitions\r
+ */\r
+\r
+/** Base address of NFC SRAM */\r
+#define NFC_SRAM_BASE_ADDRESS 0x100000\r
+/** Base address for NFC Address Command */\r
+#define NFC_CMD_BASE_ADDR     0x90000000\r
+\r
+\r
+/* -------- NFCADDR_CMD : NFC Address Command -------- */\r
+#define NFCADDR_CMD_CMD1      (0xFFu <<  2) /* Command Register Value for Cycle 1 */\r
+#define NFCADDR_CMD_CMD2      (0xFFu << 10) /* Command Register Value for Cycle 2 */\r
+#define NFCADDR_CMD_VCMD2     (0x1u << 18)  /* Valid Cycle 2 Command */\r
+#define NFCADDR_CMD_ACYCLE    (0x7u << 19)  /* Number of Address required for the current command */\r
+#define   NFCADDR_CMD_ACYCLE_NONE    (0x0u << 19) /* No address cycle */\r
+#define   NFCADDR_CMD_ACYCLE_ONE     (0x1u << 19) /* One address cycle */\r
+#define   NFCADDR_CMD_ACYCLE_TWO     (0x2u << 19) /* Two address cycles */\r
+#define   NFCADDR_CMD_ACYCLE_THREE   (0x3u << 19) /* Three address cycles */\r
+#define   NFCADDR_CMD_ACYCLE_FOUR    (0x4u << 19) /* Four address cycles */\r
+#define   NFCADDR_CMD_ACYCLE_FIVE    (0x5u << 19) /* Five address cycles */\r
+#define NFCADDR_CMD_CSID      (0x7u << 22)  /* Chip Select Identifier */\r
+#define   NFCADDR_CMD_CSID_0                    (0x0u << 22) /* CS0 */\r
+#define   NFCADDR_CMD_CSID_1                    (0x1u << 22) /* CS1 */\r
+#define   NFCADDR_CMD_CSID_2                    (0x2u << 22) /* CS2 */\r
+#define   NFCADDR_CMD_CSID_3                    (0x3u << 22) /* CS3 */\r
+#define   NFCADDR_CMD_CSID_4                    (0x4u << 22) /* CS4 */\r
+#define   NFCADDR_CMD_CSID_5                    (0x5u << 22) /* CS5 */\r
+#define   NFCADDR_CMD_CSID_6                    (0x6u << 22) /* CS6 */\r
+#define   NFCADDR_CMD_CSID_7                    (0x7u << 22) /* CS7 */\r
+#define NFCADDR_CMD_DATAEN   (0x1u << 25)  /* NFC Data Enable */\r
+#define NFCADDR_CMD_DATADIS  (0x0u << 25)  /* NFC Data disable */\r
+#define NFCADDR_CMD_NFCRD    (0x0u << 26)  /* NFC Read Enable */\r
+#define NFCADDR_CMD_NFCWR    (0x1u << 26)  /* NFC Write Enable */\r
+#define NFCADDR_CMD_NFCCMD   (0x1u << 27)  /* NFC Command Enable */\r
+\r
+/*\r
+ * ECC definitions (Hsiao Code Errors)\r
+ */\r
+\r
+/** A single bit was incorrect but has been recovered. */\r
+#define Hsiao_ERROR_SINGLEBIT         1\r
+\r
+/** The original code has been corrupted. */\r
+#define Hsiao_ERROR_ECC               2\r
+\r
+/** Multiple bits are incorrect in the data and they cannot be corrected. */\r
+#define Hsiao_ERROR_MULTIPLEBITS      3\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/*\r
+ * NFC functions\r
+ */\r
+\r
+extern void SMC_NFC_Configure(uint32_t mode);\r
+extern void SMC_NFC_Reset(void);\r
+extern void SMC_NFC_EnableNfc(void);\r
+extern void SMC_NFC_EnableSpareRead(void);\r
+extern void SMC_NFC_DisableSpareRead(void);\r
+extern void SMC_NFC_EnableSpareWrite(void);\r
+extern void SMC_NFC_DisableSpareWrite(void);\r
+extern uint8_t SMC_NFC_isSpareRead(void);\r
+extern uint8_t SMC_NFC_isSpareWrite(void);\r
+extern uint8_t SMC_NFC_isTransferComplete(void);\r
+extern uint8_t SMC_NFC_isReadyBusy(void);\r
+extern uint8_t SMC_NFC_isNfcBusy(void);\r
+extern uint32_t SMC_NFC_GetStatus(void);\r
+\r
+extern void SMC_NFC_SendCommand(uint32_t cmd, uint32_t addressCycle, uint32_t cycle0);\r
+extern void SMC_NFC_Wait_CommandDone(void);\r
+extern void SMC_NFC_Wait_XfrDone(void);\r
+extern void SMC_NFC_Wait_RBbusy(void);\r
+extern void SMC_NFC_Wait_HammingReady(void);\r
+\r
+extern void SMC_ECC_Configure(uint32_t type, uint32_t pageSize);\r
+extern uint32_t SMC_ECC_GetCorrectoinType(void);\r
+extern uint8_t SMC_ECC_GetStatus(uint8_t eccNumber);\r
+\r
+extern void SMC_ECC_GetValue(uint32_t *ecc);\r
+extern void SMC_ECC_GetEccParity(uint32_t pageDataSize, uint8_t *code, uint8_t busWidth);\r
+extern uint8_t SMC_ECC_VerifyHsiao(uint8_t *data, uint32_t size, const uint8_t *originalCode, const uint8_t *verifyCode, uint8_t busWidth);\r
+#endif /* #ifndef _SMC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/spi.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/spi.h
new file mode 100644 (file)
index 0000000..eddcd4f
--- /dev/null
@@ -0,0 +1,111 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Serial Peripheral Interface (SPI) controller.\r
+ *\r
+ */\r
+\r
+#ifndef _SPI_\r
+#define _SPI_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Macros\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ *\r
+ * Here are several macros which should be used when configuring a SPI\r
+ * peripheral.\r
+ *\r
+ * \section spi_configuration_macros SPI Configuration Macros\r
+ * - \ref SPI_PCS\r
+ * - \ref SPI_SCBR\r
+ * - \ref SPI_DLYBS\r
+ * - \ref SPI_DLYBCT\r
+ */\r
+\r
+/** Calculate the PCS field value given the chip select NPCS value */\r
+#define SPI_PCS(npcs)       SPI_MR_PCS((~(1 << npcs) & 0xF))\r
+\r
+/** Calculates the value of the CSR SCBR field given the baudrate and MCK. */\r
+#define SPI_SCBR(baudrate, masterClock) SPI_CSR_SCBR((uint32_t)(masterClock / baudrate))\r
+\r
+/** Calculates the value of the CSR DLYBS field given the desired delay (in ns) */\r
+#define SPI_DLYBS(delay, masterClock)  SPI_CSR_DLYBS((uint32_t) (((masterClock / 1000000) * delay) / 1000)+1)\r
+\r
+/** Calculates the value of the CSR DLYBCT field given the desired delay (in ns) */\r
+#define SPI_DLYBCT(delay, masterClock) SPI_CSR_DLYBCT ((uint32_t) (((masterClock / 1000000) * delay) / 32000)+1)\r
+\r
+/*------------------------------------------------------------------------------ */\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void SPI_Enable( Spi* spi ) ;\r
+extern void SPI_Disable( Spi* spi ) ;\r
+\r
+extern void SPI_EnableIt( Spi* spi, uint32_t dwSources ) ;\r
+extern void SPI_DisableIt( Spi* spi, uint32_t dwSources ) ;\r
+\r
+extern void SPI_Configure( Spi* spi, uint32_t dwId, uint32_t dwConfiguration ) ;\r
+extern void SPI_SetMode( Spi* spi, uint32_t dwConfiguration );\r
+\r
+extern void SPI_ChipSelect( Spi* spi, uint8_t cS);\r
+extern void SPI_ReleaseCS( Spi* spi );\r
+\r
+extern void SPI_ConfigureNPCS( Spi* spi, uint32_t dwNpcs, uint32_t dwConfiguration ) ;\r
+extern void SPI_ConfigureCSMode( Spi* spi, uint32_t dwNpcs, uint32_t bReleaseOnLast );\r
+\r
+extern uint32_t SPI_Read( Spi* spi ) ;\r
+extern void SPI_Write( Spi* spi, uint32_t dwNpcs, uint16_t wData ) ;\r
+extern void SPI_WriteLast( Spi* spi, uint32_t dwNpcs, uint16_t wData );\r
+\r
+extern uint32_t SPI_GetStatus( Spi* spi ) ;\r
+extern uint32_t SPI_IsFinished( Spi* pSpi ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _SPI_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/ssc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/ssc.h
new file mode 100644 (file)
index 0000000..fb66189
--- /dev/null
@@ -0,0 +1,72 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for Synchronous Serial (SSC) controller.\r
+ *\r
+ */\r
+\r
+#ifndef _SSC_\r
+#define _SSC_\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void SSC_Configure(Ssc *ssc, uint32_t bitRate, uint32_t masterClock);\r
+extern void SSC_ConfigureTransmitter(Ssc *ssc, uint32_t tcmr, uint32_t tfmr);\r
+extern void SSC_ConfigureReceiver(Ssc *ssc, uint32_t rcmr, uint32_t rfmr);\r
+extern void SSC_EnableTransmitter(Ssc *ssc);\r
+extern void SSC_DisableTransmitter(Ssc *ssc);\r
+extern void SSC_EnableReceiver(Ssc *ssc);\r
+extern void SSC_DisableReceiver(Ssc *ssc );\r
+extern void SSC_EnableInterrupts(Ssc *ssc, uint32_t sources);\r
+extern void SSC_DisableInterrupts(Ssc *ssc, uint32_t sources);\r
+extern void SSC_Write(Ssc *ssc, uint32_t frame);\r
+extern uint32_t SSC_Read(Ssc *ssc );\r
+extern uint8_t SSC_IsRxReady(Ssc *ssc);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _SSC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/tc.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/tc.h
new file mode 100644 (file)
index 0000000..352bd91
--- /dev/null
@@ -0,0 +1,76 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Interface for configuring and using Timer Counter (TC) peripherals.\r
+ *\r
+ *  \section Usage\r
+ *  -# Optionally, use TC_FindMckDivisor() to let the program find the best\r
+ *     TCCLKS field value automatically.\r
+ *  -# Configure a Timer Counter in the desired mode using TC_Configure().\r
+ *  -# Start or stop the timer clock using TC_Start() and TC_Stop().\r
+ */\r
+\r
+#ifndef _TC_\r
+#define _TC_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+extern void TC_Configure( Tc *pTc, uint32_t dwChannel, uint32_t dwMode ) ;\r
+\r
+extern void TC_Start( Tc *pTc, uint32_t dwChannel ) ;\r
+\r
+extern void TC_Stop( Tc *pTc, uint32_t dwChannel ) ;\r
+\r
+extern uint32_t TC_FindMckDivisor( uint32_t dwFreq, uint32_t dwMCk, uint32_t *dwDiv, uint32_t *dwTcClks, uint32_t dwBoardMCK ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _TC_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/tdes.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/tdes.h
new file mode 100644 (file)
index 0000000..33cfc7d
--- /dev/null
@@ -0,0 +1,66 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _TDES_\r
+#define _TDES_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Definition                                                           */\r
+/*------------------------------------------------------------------------------*/\r
+#define MODE_SINGLE_DES              0x00\r
+#define MODE_TRIPLE_DES              0x01\r
+#define MODE_XTEA                    0x02\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+extern void TDES_Start(void);\r
+extern void TDES_SoftReset(void);\r
+extern void TDES_Recount(void);\r
+extern void TDES_Configure(uint32_t mode);\r
+extern void TDES_EnableIt(uint32_t sources);\r
+extern void TDES_DisableIt(uint32_t sources);\r
+extern uint32_t TDES_GetStatus(void);\r
+extern void TDES_WriteKey1(uint32_t keyword0, uint32_t keyword1);\r
+extern void TDES_WriteKey2(uint32_t keyword0, uint32_t keyword1);\r
+extern void TDES_WriteKey3(uint32_t keyword0, uint32_t keyword1);\r
+extern void TDES_SetInput(uint32_t data0, uint32_t data1);\r
+extern void TDES_GetOutput(uint32_t *data0, uint32_t* data1);\r
+extern void TDES_SetVector(uint32_t v0, uint32_t v1);\r
+extern void TDES_SetXteaRounds(uint32_t rounds);\r
+\r
+#endif /* #ifndef _TDES_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/trace.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/trace.h
new file mode 100644 (file)
index 0000000..5af578f
--- /dev/null
@@ -0,0 +1,230 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ *  \file\r
+ *\r
+ *  \par Purpose\r
+ *\r
+ *  Standard output methods for reporting debug information, warnings and\r
+ *  errors, which can be easily be turned on/off.\r
+ *\r
+ *  \par Usage\r
+ *  -# Initialize the DBGU using TRACE_CONFIGURE() if you intend to eventually\r
+ *     disable ALL traces; otherwise use DBGU_Configure().\r
+ *  -# Uses the TRACE_DEBUG(), TRACE_INFO(), TRACE_WARNING(), TRACE_ERROR()\r
+ *     TRACE_FATAL() macros to output traces throughout the program.\r
+ *  -# Each type of trace has a level : Debug 5, Info 4, Warning 3, Error 2\r
+ *     and Fatal 1. Disable a group of traces by changing the value of\r
+ *     TRACE_LEVEL during compilation; traces with a level bigger than TRACE_LEVEL\r
+ *     are not generated. To generate no trace, use the reserved value 0.\r
+ *  -# Trace disabling can be static or dynamic. If dynamic disabling is selected\r
+ *     the trace level can be modified in runtime. If static disabling is selected\r
+ *     the disabled traces are not compiled.\r
+ *\r
+ *  \par traceLevels Trace level description\r
+ *  -# TRACE_DEBUG (5): Traces whose only purpose is for debugging the program,\r
+ *     and which do not produce meaningful information otherwise.\r
+ *  -# TRACE_INFO (4): Informational trace about the program execution. Should\r
+ *     enable the user to see the execution flow.\r
+ *  -# TRACE_WARNING (3): Indicates that a minor error has happened. In most case\r
+ *     it can be discarded safely; it may even be expected.\r
+ *  -# TRACE_ERROR (2): Indicates an error which may not stop the program execution,\r
+ *     but which indicates there is a problem with the code.\r
+ *  -# TRACE_FATAL (1): Indicates a major error which prevents the program from going\r
+ *     any further.\r
+ */\r
+\r
+#ifndef _TRACE_\r
+#define _TRACE_\r
+\r
+/*\r
+ *         Headers\r
+ */\r
+\r
+#include "pio.h"\r
+\r
+#include <stdio.h>\r
+\r
+/*\r
+ *         Global Definitions\r
+ */\r
+\r
+/**  Softpack Version */\r
+#define SOFTPACK_VERSION       "1.0"\r
+\r
+#define TRACE_LEVEL_DEBUG      5\r
+#define TRACE_LEVEL_INFO       4\r
+#define TRACE_LEVEL_WARNING    3\r
+#define TRACE_LEVEL_ERROR      2\r
+#define TRACE_LEVEL_FATAL      1\r
+#define TRACE_LEVEL_NO_TRACE   0\r
+\r
+/* By default, all traces are output except the debug one. */\r
+#if !defined(TRACE_LEVEL)\r
+#define TRACE_LEVEL TRACE_LEVEL_INFO\r
+#endif\r
+\r
+/* By default, trace level is static (not dynamic) */\r
+#if !defined(DYN_TRACES)\r
+#define DYN_TRACES 0\r
+#endif\r
+\r
+#if defined(NOTRACE)\r
+#error "Error: NOTRACE has to be not defined !"\r
+#endif\r
+\r
+#undef NOTRACE\r
+#if (DYN_TRACES==0)\r
+    #if (TRACE_LEVEL == TRACE_LEVEL_NO_TRACE)\r
+        #define NOTRACE\r
+    #endif\r
+#endif\r
+\r
+\r
+\r
+/* ------------------------------------------------------------------------------\r
+ *         Global Macros\r
+ * ------------------------------------------------------------------------------\r
+ */\r
+\r
+extern void TRACE_CONFIGURE( uint32_t dwBaudRate, uint32_t dwMCk ) ;\r
+\r
+/**\r
+ *  Initializes the DBGU for ISP project\r
+ *\r
+ *  \param mode  DBGU mode.\r
+ *  \param baudrate  DBGU baudrate.\r
+ *  \param mck  Master clock frequency.\r
+ */\r
+#ifndef DYNTRACE\r
+#define DYNTRACE 0\r
+#endif\r
+\r
+#if (TRACE_LEVEL==0) && (DYNTRACE==0)\r
+#define TRACE_CONFIGURE_ISP(mode, baudrate, mck) {}\r
+#else\r
+#define TRACE_CONFIGURE_ISP(mode, baudrate, mck) { \\r
+    const Pin pinsDBGU[] = {PINS_DBGU}; \\r
+    PIO_Configure(pinsDBGU, PIO_LISTSIZE(pinsDBGU)); \\r
+    DBGU_Configure( baudrate, mck ) ; \\r
+    }\r
+#endif\r
+\r
+/**\r
+ *  Outputs a formatted string using 'printf' if the log level is high\r
+ *  enough. Can be disabled by defining TRACE_LEVEL=0 during compilation.\r
+ *  \param ...  Additional parameters depending on formatted string.\r
+ */\r
+#if defined(NOTRACE)\r
+\r
+/* Empty macro */\r
+#define TRACE_DEBUG(...)      { }\r
+#define TRACE_INFO(...)       { }\r
+#define TRACE_WARNING(...)    { }\r
+#define TRACE_ERROR(...)      { }\r
+#define TRACE_FATAL(...)      { while(1); }\r
+\r
+#define TRACE_DEBUG_WP(...)   { }\r
+#define TRACE_INFO_WP(...)    { }\r
+#define TRACE_WARNING_WP(...) { }\r
+#define TRACE_ERROR_WP(...)   { }\r
+#define TRACE_FATAL_WP(...)   { while(1); }\r
+\r
+#elif (DYN_TRACES == 1)\r
+\r
+/* Trace output depends on dwTraceLevel value */\r
+#define TRACE_DEBUG(...)      { if (dwTraceLevel >= TRACE_LEVEL_DEBUG)   { printf("-D- " __VA_ARGS__); } }\r
+#define TRACE_INFO(...)       { if (dwTraceLevel >= TRACE_LEVEL_INFO)    { printf("-I- " __VA_ARGS__); } }\r
+#define TRACE_WARNING(...)    { if (dwTraceLevel >= TRACE_LEVEL_WARNING) { printf("-W- " __VA_ARGS__); } }\r
+#define TRACE_ERROR(...)      { if (dwTraceLevel >= TRACE_LEVEL_ERROR)   { printf("-E- " __VA_ARGS__); } }\r
+#define TRACE_FATAL(...)      { if (dwTraceLevel >= TRACE_LEVEL_FATAL)   { printf("-F- " __VA_ARGS__); while(1); } }\r
+\r
+#define TRACE_DEBUG_WP(...)   { if (dwTraceLevel >= TRACE_LEVEL_DEBUG)   { printf(__VA_ARGS__); } }\r
+#define TRACE_INFO_WP(...)    { if (dwTraceLevel >= TRACE_LEVEL_INFO)    { printf(__VA_ARGS__); } }\r
+#define TRACE_WARNING_WP(...) { if (dwTraceLevel >= TRACE_LEVEL_WARNING) { printf(__VA_ARGS__); } }\r
+#define TRACE_ERROR_WP(...)   { if (dwTraceLevel >= TRACE_LEVEL_ERROR)   { printf(__VA_ARGS__); } }\r
+#define TRACE_FATAL_WP(...)   { if (dwTraceLevel >= TRACE_LEVEL_FATAL)   { printf(__VA_ARGS__); while(1); } }\r
+\r
+#else\r
+\r
+/* Trace compilation depends on TRACE_LEVEL value */\r
+#if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)\r
+#define TRACE_DEBUG(...)      { printf("-D- " __VA_ARGS__); }\r
+#define TRACE_DEBUG_WP(...)   { printf(__VA_ARGS__); }\r
+#else\r
+#define TRACE_DEBUG(...)      { }\r
+#define TRACE_DEBUG_WP(...)   { }\r
+#endif\r
+\r
+#if (TRACE_LEVEL >= TRACE_LEVEL_INFO)\r
+#define TRACE_INFO(...)       { printf("-I- " __VA_ARGS__); }\r
+#define TRACE_INFO_WP(...)    { printf(__VA_ARGS__); }\r
+#else\r
+#define TRACE_INFO(...)       { }\r
+#define TRACE_INFO_WP(...)    { }\r
+#endif\r
+\r
+#if (TRACE_LEVEL >= TRACE_LEVEL_WARNING)\r
+#define TRACE_WARNING(...)    { printf("-W- " __VA_ARGS__); }\r
+#define TRACE_WARNING_WP(...) { printf(__VA_ARGS__); }\r
+#else\r
+#define TRACE_WARNING(...)    { }\r
+#define TRACE_WARNING_WP(...) { }\r
+#endif\r
+\r
+#if (TRACE_LEVEL >= TRACE_LEVEL_ERROR)\r
+#define TRACE_ERROR(...)      { printf("-E- " __VA_ARGS__); }\r
+#define TRACE_ERROR_WP(...)   { printf(__VA_ARGS__); }\r
+#else\r
+#define TRACE_ERROR(...)      { }\r
+#define TRACE_ERROR_WP(...)   { }\r
+#endif\r
+\r
+#if (TRACE_LEVEL >= TRACE_LEVEL_FATAL)\r
+#define TRACE_FATAL(...)      { printf("-F- " __VA_ARGS__); while(1); }\r
+#define TRACE_FATAL_WP(...)   { printf(__VA_ARGS__); while(1); }\r
+#else\r
+#define TRACE_FATAL(...)      { while(1); }\r
+#define TRACE_FATAL_WP(...)   { while(1); }\r
+#endif\r
+\r
+#endif\r
+\r
+\r
+/**\r
+ *        Exported variables\r
+ */\r
+/** Depending on DYN_TRACES, dwTraceLevel is a modifable runtime variable or a define */\r
+#if !defined(NOTRACE) && (DYN_TRACES == 1)\r
+    extern uint32_t dwTraceLevel ;\r
+#endif\r
+\r
+#endif //#ifndef TRACE_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/trng.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/trng.h
new file mode 100644 (file)
index 0000000..5e4aaba
--- /dev/null
@@ -0,0 +1,50 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _TRNG_\r
+#define _TRNG_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+void TRNG_Enable(uint32_t key);\r
+void TRNG_Disable(uint32_t key);\r
+void TRNG_EnableIt(void);\r
+void TRNG_DisableIt(void);\r
+uint32_t TRNG_GetStatus(void);\r
+uint32_t TRNG_GetRandData(void);\r
+\r
+#endif /* #ifndef _TRNG_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/twi.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/twi.h
new file mode 100644 (file)
index 0000000..3358d2e
--- /dev/null
@@ -0,0 +1,111 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Interface for configuration the Two Wire Interface (TWI) peripheral.\r
+ *\r
+ */\r
+\r
+#ifndef _TWI_\r
+#define _TWI_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Macros\r
+ *----------------------------------------------------------------------------*/\r
+/* Returns 1 if the TXRDY bit (ready to transmit data) is set in the given status register value.*/\r
+#define TWI_STATUS_TXRDY(status) ((status & TWI_SR_TXRDY) == TWI_SR_TXRDY)\r
+\r
+/* Returns 1 if the RXRDY bit (ready to receive data) is set in the given status register value.*/\r
+#define TWI_STATUS_RXRDY(status) ((status & TWI_SR_RXRDY) == TWI_SR_RXRDY)\r
+\r
+/* Returns 1 if the TXCOMP bit (transfer complete) is set in the given status register value.*/\r
+#define TWI_STATUS_TXCOMP(status) ((status & TWI_SR_TXCOMP) == TWI_SR_TXCOMP)\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        External function\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void TWI_ConfigureMaster(Twi *pTwi, uint32_t twck, uint32_t mck);\r
+\r
+extern void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress);\r
+\r
+extern void TWI_Stop(Twi *pTwi);\r
+\r
+extern void TWI_StartRead(\r
+    Twi *pTwi,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize);\r
+\r
+extern uint8_t TWI_ReadByte(Twi *pTwi);\r
+\r
+extern void TWI_WriteByte(Twi *pTwi, uint8_t byte);\r
+\r
+extern void TWI_StartWrite(\r
+    Twi *pTwi,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t byte);\r
+\r
+extern uint8_t TWI_ByteReceived(Twi *pTwi);\r
+\r
+extern uint8_t TWI_ByteSent(Twi *pTwi);\r
+\r
+extern uint8_t TWI_TransferComplete(Twi *pTwi);\r
+\r
+extern void TWI_EnableIt(Twi *pTwi, uint32_t sources);\r
+\r
+extern void TWI_DisableIt(Twi *pTwi, uint32_t sources);\r
+\r
+extern uint32_t TWI_GetStatus(Twi *pTwi);\r
+\r
+extern uint32_t TWI_GetMaskedStatus(Twi *pTwi);\r
+\r
+extern void TWI_SendSTOPCondition(Twi *pTwi);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _TWI_ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/udphs.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/udphs.h
new file mode 100644 (file)
index 0000000..2ba9462
--- /dev/null
@@ -0,0 +1,60 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2010, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+#ifndef UDPHS_H\r
+#define UDPHS_H\r
+/** addtogroup usbd_hal\r
+ *@{\r
+ */\r
+\r
+/** Indicates chip has an UDP High Speed. */\r
+#define CHIP_USB_UDPHS\r
+\r
+/** Indicates chip has an internal pull-up. */\r
+#define CHIP_USB_PULLUP_INTERNAL\r
+\r
+/** Number of USB endpoints */\r
+#define CHIP_USB_NUMENDPOINTS   16\r
+\r
+/** Endpoints max paxcket size */\r
+#define CHIP_USB_ENDPOINTS_MAXPACKETSIZE(i) \\r
+   ((i == 0) ? 64 : 1024)\r
+\r
+/** Endpoints Number of Bank */\r
+#define CHIP_USB_ENDPOINTS_BANKS(i) \\r
+   ((i == 0) ? 1 : ((i == 1) ? 3 : ((i == 2) ? 3 : 2)))\r
+\r
+/** Endpoints DMA support */\r
+#define CHIP_USB_ENDPOINTS_DMA(i) \\r
+    ((i == 0) ? 0 : ((i < 7) ? 1: 0 ))\r
+\r
+/**@}*/\r
+#endif /* #ifndef UDPHS_H */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/usart.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/usart.h
new file mode 100644 (file)
index 0000000..f367ba9
--- /dev/null
@@ -0,0 +1,131 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * \par Purpose\r
+ *\r
+ * This module provides several definitions and methods for using an USART\r
+ * peripheral.\r
+ *\r
+ * \par Usage\r
+ *\r
+ * -# Enable the USART peripheral clock in the PMC.\r
+ * -# Enable the required USART PIOs (see pio.h).\r
+ * -# Configure the UART by calling USART_Configure.\r
+ * -# Enable the transmitter and/or the receiver of the USART using\r
+ *    USART_SetTransmitterEnabled and USART_SetReceiverEnabled.\r
+ * -# Send data through the USART using the USART_Write methods.\r
+ * -# Receive data from the USART using the USART_Read functions; the availability of data can be polled\r
+ *    with USART_IsDataAvailable.\r
+ * -# Disable the transmitter and/or the receiver of the USART with\r
+ *    USART_SetTransmitterEnabled and USART_SetReceiverEnabled.\r
+ */\r
+\r
+#ifndef _USART_\r
+#define _USART_\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Definitions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/** \section USART_mode USART modes\r
+ * This section lists several common operating modes for an USART peripheral.\r
+ *\r
+ * \b Modes\r
+ * - USART_MODE_ASYNCHRONOUS\r
+ * - USART_MODE_IRDA\r
+ */\r
+\r
+/** Basic asynchronous mode, i.e. 8 bits no parity.*/\r
+#define USART_MODE_ASYNCHRONOUS        (US_MR_CHRL_8_BIT | US_MR_PAR_NO)\r
+\r
+/** IRDA mode*/\r
+#define USART_MODE_IRDA \\r
+    (US_MR_USART_MODE_IRDA | US_MR_CHRL_8_BIT | US_MR_PAR_NO | US_MR_FILTER)\r
+\r
+/** SPI mode*/\r
+#define AT91C_US_USMODE_SPIM     0xE\r
+#define US_SPI_CPOL_0           (0x0<<16)\r
+#define US_SPI_CPHA_0            (0x0<<8)\r
+#define US_SPI_CPOL_1            (0x1<<16)\r
+#define US_SPI_CPHA_1            (0x1<<8)\r
+#define US_SPI_BPMODE_0    (US_SPI_CPOL_0|US_SPI_CPHA_1)\r
+#define US_SPI_BPMODE_1    (US_SPI_CPOL_0|US_SPI_CPHA_0)\r
+#define US_SPI_BPMODE_2    (US_SPI_CPOL_1|US_SPI_CPHA_1)\r
+#define US_SPI_BPMODE_3    (US_SPI_CPOL_1|US_SPI_CPHA_0)\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*------------------------------------------------------------------------------*/\r
+/*         Exported functions                                                   */\r
+/*------------------------------------------------------------------------------*/\r
+\r
+extern void USART_Configure( Usart *usart, uint32_t mode, uint32_t baudrate, uint32_t masterClock ) ;\r
+extern uint32_t USART_GetStatus( Usart *usart ) ;\r
+extern void USART_EnableIt( Usart *usart,uint32_t mode ) ;\r
+extern void USART_DisableIt( Usart *usart,uint32_t mode ) ;\r
+extern uint32_t USART_GetItMask( Usart * usart ) ;\r
+extern void USART_SetTransmitterEnabled( Usart *usart, uint8_t enabled ) ;\r
+\r
+extern void USART_SetReceiverEnabled( Usart *usart, uint8_t enabled ) ;\r
+\r
+extern void USART_SetRTSEnabled(Usart *usart, uint8_t enabled);\r
+\r
+extern void USART_Write( Usart *usart, uint16_t data, volatile uint32_t timeOut ) ;\r
+\r
+extern uint16_t USART_Read( Usart *usart, volatile uint32_t timeOut ) ;\r
+\r
+extern uint8_t USART_IsDataAvailable( Usart *usart ) ;\r
+\r
+extern void USART_SetIrdaFilter(Usart *pUsart, uint8_t filter);\r
+\r
+extern void USART_PutChar( Usart *usart, uint8_t c ) ;\r
+\r
+extern uint32_t USART_IsRxReady( Usart *usart ) ;\r
+\r
+extern uint8_t USART_GetChar( Usart *usart ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _USART_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/video.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/video.h
new file mode 100644 (file)
index 0000000..f0bb6f9
--- /dev/null
@@ -0,0 +1,80 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+#ifndef _VIDEO_H\r
+#define _VIDEO_H\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+/** Type of video is YUV */\r
+#define YUV 0\r
+/** Type of video is RGB */\r
+#define RGB 1\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Type\r
+ *----------------------------------------------------------------------------*/\r
+typedef struct _isi_Video\r
+{\r
+    /** LCD Vertical Size */\r
+    uint32_t  lcd_vsize;\r
+    /** LCD Horizontal Size*/\r
+    uint32_t  lcd_hsize;\r
+    /** LCD Number of Bit Per Pixel*/\r
+    uint32_t  lcd_nbpp;\r
+    /** LCD Frame Buffer Address*/\r
+    uint32_t  lcd_fb_addr;\r
+    /** Base address for the frame buffer descriptors list*/\r
+    uint32_t  Isi_fbd_base;\r
+    /** Start of Line Delay*/\r
+    uint32_t  Hblank;\r
+    /** Start of frame Delay */\r
+    uint32_t  Vblank;\r
+    /** Vertical size of the Image sensor [0..2047]*/\r
+    uint32_t  codec_vsize;\r
+    /** Horizontal size of the Image sensor [0..2047]*/\r
+    uint32_t  codec_hsize;\r
+    /** Base address for codec DMA*/\r
+    uint32_t  codec_fb_addr;\r
+    /** Base address for the frame buffer descriptors list*/\r
+    uint32_t  codec_fbd_base;\r
+    /** Buffer index */\r
+    uint32_t  IsiPrevBuffIndex;\r
+    /** Type of video */\r
+    uint8_t rgb_or_yuv;\r
+}isi_Video, *pIsi_Video;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+extern void VIDEO_Ycc2Rgb(uint8_t *ycc, uint16_t *rgb, uint32_t len);\r
+\r
+#endif\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/wdt.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/wdt.h
new file mode 100644 (file)
index 0000000..b452eb0
--- /dev/null
@@ -0,0 +1,76 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * \section Purpose\r
+ * Interface for Watchdog Timer (WDT) controller.\r
+ *\r
+ * \section Usage\r
+ * -# Enable watchdog with given mode using \ref WDT_Enable().\r
+ * -# Disable watchdog using \ref WDT_Disable()\r
+ * -# Restart the watchdog using \ref WDT_Restart().\r
+ * -# Get watchdog status using \ref  WDT_GetStatus().\r
+ * -# Caculate watchdog period value using \ref WDT_GetPeriod().\r
+ */\r
+\r
+#ifndef _WDT_\r
+#define _WDT_\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+extern void WDT_Enable( Wdt* pWDT, uint32_t dwMode ) ;\r
+\r
+extern void WDT_Disable( Wdt* pWDT ) ;\r
+\r
+extern void WDT_Restart( Wdt* pWDT ) ;\r
+\r
+extern uint32_t WDT_GetStatus( Wdt* pWDT ) ;\r
+\r
+extern uint32_t WDT_GetPeriod( uint32_t dwMs ) ;\r
+\r
+extern uint32_t WDT_GetCounterValue( Wdt* pWDT ) ;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* #ifndef _WDT_ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/xdmac.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/include/xdmac.h
new file mode 100644 (file)
index 0000000..d50fc26
--- /dev/null
@@ -0,0 +1,163 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ * \r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/** \addtogroup dmac_module Working with DMAC\r
+ *\r
+ * \section Usage\r
+ * <ul>\r
+ * <li> Enable or disable the a DMAC controller with DMAC_Enable() and or DMAC_Disable().</li>\r
+ * <li> Enable or disable %Dma interrupt using DMAC_EnableIt()or DMAC_DisableIt().</li>\r
+ * <li> Get %Dma interrupt status by DMAC_GetStatus() and DMAC_GetInterruptMask().</li>\r
+ * <li> Enable or disable specified %Dma channel with DMAC_EnableChannel() or DMAC_DisableChannel().</li>\r
+ * <li> Get %Dma channel status by DMAC_GetChannelStatus().</li>\r
+ * <li> ControlA and ControlB register is set by DMAC_SetControlA() and DMAC_SetControlB().</li>\r
+ * <li> Configure source and/or destination start address with DMAC_SetSourceAddr() and/or DMAC_SetDestinationAddr().</li>\r
+ * <li> Set %Dma descriptor address using DMAC_SetDescriptorAddr().</li>\r
+ * <li> Set source transfer buffer size with DMAC_SetBufferSize().</li>\r
+ * <li> Configure source and/or destination Picture-In-Picutre mode with DMAC_SetSourcePip() and/or DMAC_SetDestPip().</li>\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the DMAC section of the\r
+ * Datasheet.\r
+ *\r
+ * \sa \ref dmad_module\r
+ *\r
+ * Related files :\n\r
+ * \ref dmac.c\n\r
+ * \ref dmac.h.\n\r
+ *\r
+ */\r
+\r
+#ifndef DMAC_H\r
+#define DMAC_H\r
+/**@{*/\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup dmac_defines DMAC Definitions\r
+ *      @{\r
+ */\r
+/** Number of DMA channels */\r
+#define XDMAC_CONTROLLER_NUM            2\r
+/** Number of DMA channels */\r
+#define XDMAC_CHANNEL_NUM               16\r
+/** Max DMA single transfer size */\r
+#define XDMAC_MAX_BT_SIZE               0xFFFF\r
+/**     @}*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Macro\r
+ *----------------------------------------------------------------------------*/\r
+#define XDMA_GET_DATASIZE(size) ((size==0)? XDMAC_CC_DWIDTH_BYTE : \\r
+                                ((size==1)? XDMAC_CC_DWIDTH_HALFWORD : \\r
+                                ((size==2)? XDMAC_CC_DWIDTH_WORD : XDMAC_CC_DWIDTH_DWORD )))\r
+#define XDMA_GET_CC_SAM(s)      ((s==0)? XDMAC_CC_SAM_FIXED_AM : \\r
+                                ((s==1)? XDMAC_CC_SAM_INCREMENTED_AM : \\r
+                                ((s==2)? XDMAC_CC_SAM_UBS_AM : XDMAC_CC_SAM_UBS_DS_AM )))\r
+#define XDMA_GET_CC_DAM(d)      ((d==0)? XDMAC_CC_DAM_FIXED_AM : \\r
+                                ((d==1)? XDMAC_CC_DAM_INCREMENTED_AM : \\r
+                                ((d==2)? XDMAC_CC_DAM_UBS_AM : XDMAC_CC_DAM_UBS_DS_AM )))\r
+#define XDMA_GET_CC_MEMSET(m)   ((m==0)? XDMAC_CC_MEMSET_NORMAL_MODE : XDMAC_CC_MEMSET_HW_MODE)\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Data structs\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup dmac_struct DMAC Data Structs\r
+ *      @{\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global functions\r
+ *------------------------------------------------------------------------------*/\r
+/** \addtogroup dmac_functions\r
+ *      @{\r
+ */\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif\r
+\r
+extern uint32_t XDMAC_GetType( Xdmac *pXdmac);\r
+extern uint32_t XDMAC_GetConfig( Xdmac *pXdmac);\r
+extern uint32_t XDMAC_GetArbiter( Xdmac *pXdmac);\r
+extern void XDMAC_EnableGIt (Xdmac *pXdmac, uint32_t dwInteruptMask );\r
+extern void XDMAC_DisableGIt (Xdmac *pXdmac, uint32_t dwInteruptMask );\r
+extern uint32_t XDMAC_GetGItMask( Xdmac *pXdmac );\r
+extern uint32_t XDMAC_GetGIsr( Xdmac *pXdmac );\r
+extern uint32_t XDMAC_GetMaskedGIsr( Xdmac *pXdmac );\r
+extern void XDMAC_EnableChannel( Xdmac *pXdmac, uint8_t channel );\r
+extern void XDMAC_EnableChannels( Xdmac *pXdmac, uint8_t bmChannels );\r
+extern void XDMAC_DisableChannel( Xdmac *pXdmac, uint8_t channel );\r
+extern void XDMAC_DisableChannels( Xdmac *pXdmac, uint8_t bmChannels );\r
+extern uint32_t XDMAC_GetGlobalChStatus(Xdmac *pXdmac);\r
+extern void XDMAC_SuspendReadChannel( Xdmac *pXdmac, uint8_t channel );\r
+extern void XDMAC_SuspendWriteChannel( Xdmac *pXdmac, uint8_t channel );\r
+extern void XDMAC_SuspendReadWriteChannel( Xdmac *pXdmac, uint8_t channel );\r
+extern void XDMAC_ResumeReadWriteChannel( Xdmac *pXdmac, uint8_t channel );\r
+extern void XDMAC_SoftwareTransferReq(Xdmac *pXdmac, uint8_t channel);\r
+extern uint32_t XDMAC_GetSoftwareTransferStatus(Xdmac *pXdmac);\r
+extern void XDMAC_SoftwareFlushReq(Xdmac *pXdmac, uint8_t channel);\r
+extern void XDMAC_EnableChannelIt (Xdmac *pXdmac, uint8_t channel, uint32_t dwInteruptMask );\r
+extern void XDMAC_DisableChannelIt (Xdmac *pXdmac, uint8_t channel, uint32_t dwInteruptMask );\r
+extern uint32_t XDMAC_GetChannelItMask (Xdmac *pXdmac, uint8_t channel);\r
+extern uint32_t XDMAC_GetChannelIsr (Xdmac *pXdmac, uint8_t channel);\r
+extern uint32_t XDMAC_GetMaskChannelIsr (Xdmac *pXdmac, uint8_t channel);\r
+extern void XDMAC_SetSourceAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr);\r
+extern void XDMAC_SetDestinationAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr);\r
+extern void XDMAC_SetDescriptorAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr, uint32_t ndaif);\r
+extern void XDMAC_SetDescriptorControl(Xdmac *pXdmac, uint8_t channel, uint32_t config);\r
+extern void XDMAC_SetMicroblockControl(Xdmac *pXdmac, uint8_t channel, uint32_t ublen);\r
+extern void XDMAC_SetBlockControl(Xdmac *pXdmac, uint8_t channel, uint32_t blen);\r
+extern void XDMAC_SetChannelConfig(Xdmac *pXdmac, uint8_t channel, uint32_t config);\r
+extern uint32_t XDMAC_GetChannelConfig(Xdmac *pXdmac, uint8_t channel);\r
+extern void XDMAC_SetDataStride_MemPattern(Xdmac *pXdmac, uint8_t channel, uint32_t dds_msp);\r
+extern void XDMAC_SetSourceMicroBlockStride(Xdmac *pXdmac, uint8_t channel, uint32_t subs);\r
+extern void XDMAC_SetDestinationMicroBlockStride(Xdmac *pXdmac, uint8_t channel, uint32_t dubs);\r
+extern uint32_t XDMAC_GetChDestinationAddr(Xdmac *pXdmac, uint8_t channel);\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+/**     @}*/\r
+/**@}*/\r
+#endif //#ifndef DMAC_H\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Initialized.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Initialized.c
new file mode 100644 (file)
index 0000000..ba0d991
--- /dev/null
@@ -0,0 +1,51 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include <USBD_Config.h>\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported function\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Invoked after the USB driver has been initialized. By default, configures\r
+ * the UDP/UDPHS interrupt.\r
+ */\r
+void USBDCallbacks_Initialized(void)\r
+{\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Resumed.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Resumed.c
new file mode 100644 (file)
index 0000000..68cc8fd
--- /dev/null
@@ -0,0 +1,49 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+ /** \file */\r
\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "USBD_LEDs.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Invoked when the USB device leaves the Suspended state. By default,\r
+ * configures the LEDs.\r
+ */\r
+void USBDCallbacks_Resumed(void)\r
+{\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Suspended.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBDCallbacks_Suspended.c
new file mode 100644 (file)
index 0000000..018b9d1
--- /dev/null
@@ -0,0 +1,49 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+ /** \file */\r
\r
+/*----------------------------------------------------------------------------\r
+ *         Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "USBD_LEDs.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Invoked when the USB device gets suspended. By default, turns off all LEDs.\r
+ */\r
+void USBDCallbacks_Suspended(void)\r
+{\r
+    \r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBD_HAL.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/USBD_HAL.c
new file mode 100644 (file)
index 0000000..720d5ad
--- /dev/null
@@ -0,0 +1,2192 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+\r
+ \file\r
+\r
+    Implementation of USB device functions on a UDP controller.\r
+\r
+    See \ref usbd_api_method USBD API Methods.\r
+*/\r
+\r
+/** \addtogroup usbd_hal\r
+ *@{*/\r
+\r
+/*---------------------------------------------------------------------------\r
+ *      Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+#include "USBD_HAL.h"\r
+\r
+#include <stdbool.h>\r
+#include <stdint.h>\r
+#include <stdio.h>\r
+#include <string.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *      Definitions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#define DMA\r
+\r
+/** Maximum number of endpoints interrupts. */\r
+#define NUM_IT_MAX       16\r
+/** Maximum number of endpoint DMA interrupts */\r
+#define NUM_IT_MAX_DMA   \\r
+    ((UDPHS->UDPHS_IPFEATURES \\r
+        & UDPHS_IPFEATURES_DMA_CHANNEL_NBR_Msk) \\r
+      >>UDPHS_IPFEATURES_DMA_CHANNEL_NBR_Pos)\r
+/** Bits that should be shifted to access DMA control bits. */\r
+#define SHIFT_DMA        24\r
+/** Bits that should be shifted to access interrupt bits. */\r
+#define SHIFT_INTERUPT    8\r
+\r
+/** Max size of the FMA FIFO */\r
+#define DMA_MAX_FIFO_SIZE     (65536/1)\r
+/** fifo space size in DW */\r
+#define EPT_VIRTUAL_SIZE      16384\r
+\r
+/**\r
+ * \section endpoint_states_sec "UDP Endpoint states"\r
+ *\r
+ *  This page lists the endpoint states.\r
+ *\r
+ *  \subsection States\r
+ *  - UDPHS_ENDPOINT_DISABLED\r
+ *  - UDPHS_ENDPOINT_HALTED\r
+ *  - UDPHS_ENDPOINT_IDLE\r
+ *  - UDPHS_ENDPOINT_SENDING\r
+ *  - UDPHS_ENDPOINT_RECEIVING\r
+ *  - UDPHS_ENDPOINT_SENDINGM\r
+ *  - UDPHS_ENDPOINT_RECEIVINGM\r
+ */\r
+\r
+/**  Endpoint states: Endpoint is disabled */\r
+#define UDPHS_ENDPOINT_DISABLED       0\r
+/**  Endpoint states: Endpoint is halted (i.e. STALLs every request) */\r
+#define UDPHS_ENDPOINT_HALTED         1\r
+/**  Endpoint states: Endpoint is idle (i.e. ready for transmission) */\r
+#define UDPHS_ENDPOINT_IDLE           2\r
+/**  Endpoint states: Endpoint is sending data */\r
+#define UDPHS_ENDPOINT_SENDING        3\r
+/**  Endpoint states: Endpoint is receiving data */\r
+#define UDPHS_ENDPOINT_RECEIVING      4\r
+/**  Endpoint states: Endpoint is sending MBL */\r
+#define UDPHS_ENDPOINT_SENDINGM       5\r
+/**  Endpoint states: Endpoint is receiving MBL */\r
+#define UDPHS_ENDPOINT_RECEIVINGM     6\r
+\r
+/** Get Number of buffer in Multi-Buffer-List\r
+ *  \param i    input index\r
+ *  \param o    output index\r
+ *  \param size list size\r
+ */\r
+#define MBL_NbBuffer(i, o, size) (((i)>(o))?((i)-(o)):((i)+(size)-(o)))\r
+\r
+/** Buffer list is full */\r
+#define MBL_FULL        1\r
+/** Buffer list is null */\r
+#define MBL_NULL        2\r
+\r
+/*---------------------------------------------------------------------------\r
+ *      Types\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/**  Describes header for UDP endpoint transfer. */\r
+typedef struct {\r
+    /**  Optional callback to invoke when the transfer completes. */\r
+    void*   fCallback;\r
+    /**  Optional argument to the callback function. */\r
+    void*   pArgument;\r
+    /**  Transfer type */\r
+    uint8_t transType;\r
+    /* Reserved to 32-b aligned */\r
+    uint8_t reserved[3];\r
+} TransferHeader;\r
+\r
+/**  Describes a transfer on a UDP endpoint. */\r
+typedef struct {\r
+\r
+    /**  Optional callback to invoke when the transfer completes. */\r
+    TransferCallback fCallback;\r
+    /**  Optional argument to the callback function. */\r
+    void             *pArgument;\r
+    /**  Transfer type */\r
+    uint8_t          transType;\r
+    uint8_t          reserved[3];\r
+    /**  Number of bytes which have been written into the UDP internal FIFO\r
+     *   buffers. */\r
+    int32_t          buffered;\r
+    /**  Pointer to a data buffer used for emission/reception. */\r
+    uint8_t          *pData;\r
+    /**  Number of bytes which have been sent/received. */\r
+    int32_t          transferred;\r
+    /**  Number of bytes which have not been buffered/transferred yet. */\r
+    int32_t          remaining;\r
+} Transfer;\r
+\r
+/**  Describes Multi Buffer List transfer on a UDP endpoint. */\r
+typedef struct {\r
+    /**  Optional callback to invoke when the transfer completes. */\r
+    MblTransferCallback fCallback;\r
+    /**  Optional argument to the callback function. */\r
+    void                *pArgument;\r
+    /** Transfer type */\r
+    uint8_t             transType;\r
+    /** List state (OK, FULL, NULL) (run time) */\r
+    uint8_t             listState;\r
+    /**  Multi-Buffer List size */\r
+    uint16_t            listSize;\r
+    /**  Pointer to multi-buffer list */\r
+    USBDTransferBuffer *pMbl;\r
+    /**  Offset number of buffers to start transfer */\r
+    uint16_t            offsetSize;\r
+    /**  Current processing buffer index (run time) */\r
+    uint16_t            outCurr;\r
+    /**  Loast loaded buffer index (run time) */\r
+    uint16_t            outLast;\r
+    /**  Current buffer for input (run time) */\r
+    uint16_t            inCurr;\r
+} MblTransfer;\r
+\r
+/**\r
+ *  Describes the state of an endpoint of the UDP controller.\r
+ */\r
+typedef struct {\r
+\r
+    /* CSR */\r
+    /**  Current endpoint state. */\r
+    volatile uint8_t  state;\r
+    /**  Current reception bank (0 or 1). */\r
+    volatile uint8_t  bank;\r
+    /**  Maximum packet size for the endpoint. */\r
+    volatile uint16_t size;\r
+    /**  Describes an ongoing transfer (if current state is either\r
+     *   UDPHS_ENDPOINT_SENDING or UDPHS_ENDPOINT_RECEIVING) */\r
+    union {\r
+        TransferHeader transHdr;\r
+        Transfer       singleTransfer;\r
+        MblTransfer    mblTransfer;\r
+    } transfer;\r
+    /** Special case for send a ZLP */\r
+    uint32_t sendZLP;\r
+} Endpoint;\r
+\r
+/**\r
+ * DMA Descriptor.\r
+ */\r
+typedef struct {\r
+    void    *pNxtDesc;\r
+    void    *pAddr;\r
+    uint32_t dwCtrl;\r
+    uint32_t dw;\r
+} UdphsDmaDescriptor;\r
+\r
+/*---------------------------------------------------------------------------\r
+ *      Internal variables\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/** Holds the internal state for each endpoint of the UDP. */\r
+static Endpoint endpoints[CHIP_USB_NUMENDPOINTS];\r
+\r
+/** 7.1.20 Test Mode Support\r
+ * Test codes for the USB HS test mode. */\r
+static const char test_packet_buffer[] = {\r
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,                // JKJKJKJK * 9\r
+    0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,                     // JJKKJJKK * 8\r
+    0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,                     // JJJJKKKK * 8\r
+    0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // JJJJJJJKKKKKKK * 8\r
+    0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,                          // JJJJJJJK * 8\r
+    0xFC,0x7E,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0x7E                 // {JKKKKKKK * 10}, JK\r
+};\r
+\r
+/** Force FS mode */\r
+static uint8_t forceUsbFS = 0;\r
+\r
+/** DMA link list */\r
+static UdphsDmaDescriptor  dmaLL[5];\r
+static UdphsDmaDescriptor *pDmaLL;\r
+\r
+/*---------------------------------------------------------------------------\r
+ *      Internal Functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Enables the clock of the UDP peripheral.\r
+ * \return 1 if peripheral status changed.\r
+ */\r
+static uint8_t UDPHS_EnablePeripheralClock(void)\r
+{\r
+    if (!PMC_IsPeriphEnabled(ID_UDPHS)) {\r
+        PMC_EnablePeripheral(ID_UDPHS);\r
+        return 1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Disables the UDP peripheral clock.\r
+ */\r
+static inline void UDPHS_DisablePeripheralClock(void)\r
+{\r
+    PMC_DisablePeripheral(ID_UDPHS);\r
+}\r
+\r
+/**\r
+ * Enables the 480MHz USB clock.\r
+ */\r
+static inline void UDPHS_EnableUsbClock(void)\r
+{\r
+    Pmc *pPmc = PMC;\r
+    /* Enable 480Mhz UPLL */\r
+    pPmc->CKGR_UCKR |= CKGR_UCKR_UPLLEN\r
+                       | CKGR_UCKR_UPLLCOUNT(0x3)\r
+                       | CKGR_UCKR_BIASCOUNT(0x1);\r
+    /* Wait until UPLL is locked */\r
+    while((pPmc->PMC_SR & PMC_SR_LOCKU) == 0);\r
+}\r
+\r
+/**\r
+ *  Disables the 480MHz USB clock.\r
+ */\r
+static inline void UDPHS_DisableUsbClock(void)\r
+{\r
+    Pmc *pPmc = PMC;\r
+    /* Disable System Clock */\r
+    //pPmc->PMC_SCDR = PMC_SCDR_UDP;\r
+    pPmc->CKGR_UCKR &= ~(uint32_t)CKGR_UCKR_UPLLEN;\r
+}\r
+\r
+/**\r
+ * Enables the BIAS.\r
+ */\r
+static inline void UDPHS_EnableBIAS(void)\r
+{\r
+    Pmc *pPmc = PMC;\r
+    pPmc->CKGR_UCKR |= CKGR_UCKR_BIASEN;\r
+}\r
+\r
+/**\r
+ * Disables the BIAS.\r
+ */\r
+static inline void UDPHS_DisableBIAS(void)\r
+{\r
+    Pmc *pPmc = PMC;\r
+    pPmc->CKGR_UCKR &= ~(uint32_t)CKGR_UCKR_BIASEN;\r
+}\r
+\r
+/**\r
+ * Handles a completed transfer on the given endpoint, invoking the\r
+ * configured callback if any.\r
+ * \param bEndpoint Number of the endpoint for which the transfer has completed.\r
+ * \param bStatus   Status code returned by the transfer operation\r
+ */\r
+static void UDPHS_EndOfTransfer(uint8_t bEndpoint, uint8_t bStatus)\r
+{\r
+    Endpoint *pEp = &(endpoints[bEndpoint]);\r
+\r
+    /* Check that endpoint was sending or receiving data */\r
+    if ( (pEp->state == UDPHS_ENDPOINT_RECEIVING)\r
+            || (pEp->state == UDPHS_ENDPOINT_SENDING) )\r
+    {\r
+        Transfer *pXfr = (Transfer*)&(pEp->transfer);\r
+        uint32_t transferred = pXfr->transferred;\r
+        uint32_t remaining   = pXfr->remaining + pXfr->buffered;\r
+        \r
+        TRACE_DEBUG_WP("EoT ");\r
+        if (pEp->state == UDPHS_ENDPOINT_SENDING)\r
+            pEp->sendZLP = 0;\r
+        pEp->state = UDPHS_ENDPOINT_IDLE;\r
+        pXfr->pData = 0;\r
+        pXfr->transferred = -1;\r
+        pXfr->buffered    = -1;\r
+        pXfr->remaining   = -1;\r
+\r
+        /* Invoke callback */\r
+        if (pXfr->fCallback)\r
+        {\r
+            pXfr->fCallback(pXfr->pArgument, bStatus, transferred, remaining);\r
+        }\r
+        else\r
+        {\r
+            TRACE_DEBUG_WP("NoCB ");\r
+        }\r
+    }\r
+    else if ( (pEp->state == UDPHS_ENDPOINT_RECEIVINGM)\r
+                || (pEp->state == UDPHS_ENDPOINT_SENDINGM) )\r
+    {\r
+        MblTransfer *pXfr = (MblTransfer*)&(pEp->transfer);\r
+        TRACE_DEBUG_WP("EoMT ");\r
+\r
+        pEp->state = UDPHS_ENDPOINT_IDLE;\r
+        pXfr->listState = 0;\r
+        pXfr->outCurr = pXfr->inCurr = pXfr->outLast = 0;\r
+        /* Invoke callback */\r
+        if (pXfr->fCallback)\r
+        {\r
+            pXfr->fCallback(pXfr->pArgument, bStatus);\r
+        }\r
+        else\r
+        {\r
+            TRACE_DEBUG_WP("NoCB ");\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * Update multi-buffer-transfer descriptors.\r
+ * \param pTransfer Pointer to instance MblTransfer.\r
+ * \param size      Size of bytes that processed.\r
+ * \param forceEnd  Force the buffer END.\r
+ * \return 1 if current buffer ended.\r
+ */\r
+static uint8_t UDPHS_MblUpdate(MblTransfer *pTransfer,\r
+                          USBDTransferBuffer * pBi,\r
+                          uint16_t size,\r
+                          uint8_t forceEnd)\r
+{\r
+    /* Update transfer descriptor */\r
+    pBi->remaining -= size;\r
+    /* Check if list NULL */\r
+    if (pTransfer->listState == MBL_NULL) {\r
+        return 1;\r
+    }\r
+    /* Check if current buffer ended */\r
+    if (pBi->remaining == 0 || forceEnd || size == 0) {\r
+\r
+        /* Process to next buffer */\r
+        if ((++ pTransfer->outCurr) == pTransfer->listSize)\r
+            pTransfer->outCurr = 0;\r
+        /* Check buffer NULL case */\r
+        if (pTransfer->outCurr == pTransfer->inCurr)\r
+            pTransfer->listState = MBL_NULL;\r
+        else {\r
+            pTransfer->listState = 0;\r
+            /* Continue transfer, prepare for next operation */\r
+            pBi = &pTransfer->pMbl[pTransfer->outCurr];\r
+            pBi->buffered    = 0;\r
+            pBi->transferred = 0;\r
+            pBi->remaining   = pBi->size;\r
+        }\r
+        return 1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Transfers a data payload from the current tranfer buffer to the endpoint\r
+ * FIFO\r
+ * \param bEndpoint Number of the endpoint which is sending data.\r
+ */\r
+static uint8_t UDPHS_MblWriteFifo(uint8_t bEndpoint)\r
+{\r
+    Endpoint    *pEndpoint   = &(endpoints[bEndpoint]);\r
+    MblTransfer *pTransfer   = (MblTransfer*)&(pEndpoint->transfer);\r
+    USBDTransferBuffer *pBi = &(pTransfer->pMbl[pTransfer->outCurr]);\r
+    uint8_t *pFifo;\r
+    int32_t size;\r
+\r
+    volatile uint8_t * pBytes;\r
+    volatile uint8_t bufferEnd = 1;\r
+\r
+    /* Get the number of bytes to send */\r
+    size = pEndpoint->size;\r
+    if (size > pBi->remaining) size = pBi->remaining;\r
+\r
+    TRACE_DEBUG_WP("w%d.%d ", pTransfer->outCurr, size);\r
+\r
+    /* Record last accessed buffer */\r
+    pTransfer->outLast = pTransfer->outCurr;\r
+\r
+    pBytes = &(pBi->pBuffer[pBi->transferred + pBi->buffered]);\r
+    pBi->buffered += size;\r
+    bufferEnd = UDPHS_MblUpdate(pTransfer, pBi, size, 0);\r
+\r
+    /* Write packet in the FIFO buffer */\r
+    pFifo = (uint8_t*)((uint32_t*)UDPHS_RAM_ADDR\r
+                                    + (EPT_VIRTUAL_SIZE * bEndpoint));\r
+    if (size) {\r
+        int32_t c8 = size >> 3;\r
+        int32_t c1 = size & 0x7;\r
+        for (; c8; c8 --) {\r
+            *(pFifo++) = *(pBytes ++);\r
+            *(pFifo++) = *(pBytes ++);\r
+            *(pFifo++) = *(pBytes ++);\r
+            *(pFifo++) = *(pBytes ++);\r
+\r
+            *(pFifo++) = *(pBytes ++);\r
+            *(pFifo++) = *(pBytes ++);\r
+            *(pFifo++) = *(pBytes ++);\r
+            *(pFifo++) = *(pBytes ++);\r
+        }\r
+        for (; c1; c1 --) {\r
+            *(pFifo++) = *(pBytes ++);\r
+        }\r
+    }\r
+    return bufferEnd;\r
+}\r
+\r
+#if 0\r
+/**\r
+ *  Transfers a data payload from an endpoint FIFO to the current transfer\r
+ *  buffer, if NULL packet received, the current buffer is ENDed.\r
+ *  \param bEndpoint Endpoint number.\r
+ *  \param wPacketSize Size of received data packet */\r
+ *  \return 1 if the buffer ENDed. */\r
+ */\r
+static uint8_t UDPHS_MblReadFifo(uint8_t bEndpoint, uint16_t wPacketSize)\r
+{\r
+   \r
+    return 0;\r
+}\r
+*/\r
+#endif\r
+/**\r
+ * Transfers a data payload from the current tranfer buffer to the endpoint\r
+ * FIFO\r
+ * \param bEndpoint Number of the endpoint which is sending data.\r
+ */\r
+static void UDPHS_WritePayload(uint8_t bEndpoint, int32_t size)\r
+{\r
+    Endpoint *pEndpoint = &(endpoints[bEndpoint]);\r
+    Transfer *pTransfer = (Transfer*)&(pEndpoint->transfer);\r
+    uint8_t  *pFifo;\r
+\r
+    /* Get the number of bytes to send */\r
+    if (size > pTransfer->remaining)\r
+    {\r
+        size = pTransfer->remaining;\r
+    }\r
+\r
+    /* Update transfer descriptor information */\r
+    pTransfer->buffered += size;\r
+    pTransfer->remaining -= size;\r
+\r
+    /* Write packet in the FIFO buffer */\r
+    pFifo = (uint8_t*)((uint32_t*)UDPHS_RAM_ADDR\r
+                                    + (EPT_VIRTUAL_SIZE * bEndpoint));\r
+    for (; size; size --)\r
+    {\r
+        *(pFifo ++) = *(pTransfer->pData ++);\r
+    }\r
+}\r
+\r
+/**\r
+ * Transfers a data payload from an endpoint FIFO to the current transfer buffer\r
+ * \param bEndpoint Endpoint number.\r
+ * \param wPacketSize Size of received data packet\r
+ */\r
+static void UDPHS_ReadPayload(uint8_t bEndpoint, int32_t wPacketSize)\r
+{\r
+    Endpoint *pEndpoint = &(endpoints[bEndpoint]);\r
+    Transfer *pTransfer = (Transfer*)&(pEndpoint->transfer);\r
+    uint8_t  *pFifo;\r
+    /* Check that the requested size is not bigger than the remaining transfer */\r
+    if (wPacketSize > pTransfer->remaining) {\r
+\r
+        pTransfer->buffered += wPacketSize - pTransfer->remaining;\r
+        wPacketSize = pTransfer->remaining;\r
+    }\r
+\r
+    /* Update transfer descriptor information */\r
+    pTransfer->remaining -= wPacketSize;\r
+    pTransfer->transferred += wPacketSize;\r
+\r
+    /* Retrieve packet */\r
+    pFifo = (uint8_t*)((uint32_t*)UDPHS_RAM_ADDR\r
+                                    + (EPT_VIRTUAL_SIZE * bEndpoint));\r
+    while (wPacketSize > 0)\r
+    {\r
+        *(pTransfer->pData ++) = *(pFifo ++);\r
+        wPacketSize--;\r
+    }\r
+}\r
+\r
+/**\r
+ * Received SETUP packet from endpoint 0 FIFO\r
+ * \param pRequest Generic USB SETUP request sent over Control endpoints\r
+ */\r
+static void UDPHS_ReadRequest(USBGenericRequest *pRequest)\r
+{\r
+    uint32_t *pData = (uint32_t *)(void*)pRequest;\r
+    volatile uint32_t *pFifo;\r
+    pFifo = (volatile uint32_t*)UDPHS_RAM_ADDR;\r
+    *pData ++ = *pFifo;\r
+    pFifo = (volatile uint32_t*)UDPHS_RAM_ADDR;\r
+    *pData    = *pFifo;\r
+}\r
+\r
+/**\r
+ * Endpoint interrupt handler.\r
+ * Handle IN/OUT transfers, received SETUP packets and STALLing\r
+ * \param bEndpoint Index of endpoint\r
+ */\r
+static void UDPHS_EndpointHandler(uint8_t bEndpoint)\r
+{\r
+    Udphs    *pUdp = UDPHS;\r
+    UdphsEpt *pEpt = &pUdp->UDPHS_EPT[bEndpoint];\r
+    //UdphsDma *pDma = &pUdp->UDPHS_DMA[bEndpoint];\r
+\r
+    Endpoint *pEp      = &(endpoints[bEndpoint]);\r
+    Transfer *pXfr     = (Transfer*)&(pEp->transfer);\r
+    //MblTransfer *pMblt = (MblTransfer*)&(pEp->transfer);\r
+    uint32_t status = pEpt->UDPHS_EPTSTA;\r
+    uint32_t type   = pEpt->UDPHS_EPTCFG & UDPHS_EPTCFG_EPT_TYPE_Msk;\r
+    uint32_t reqBuf[2];\r
+    USBGenericRequest *pReq = (USBGenericRequest *)reqBuf;\r
+    uint16_t wPktSize;\r
+\r
+    TRACE_DEBUG_WP("Ep%d ", bEndpoint);\r
+    //TRACE_DEBUG_WP("St:%x ", status);\r
+    /* IN packet sent */\r
+    if (   (pEpt->UDPHS_EPTCTL & UDPHS_EPTCTL_TXRDY)\r
+        && (0 == (status & UDPHS_EPTSTA_TXRDY)) )\r
+    {\r
+        TRACE_DEBUG_WP("Wr ");\r
+\r
+        /* Multi-buffer-list transfer state */\r
+        if ( pEp->state == UDPHS_ENDPOINT_SENDINGM )\r
+        {\r
+        }\r
+        /* Sending state */\r
+        else if ( pEp->state == UDPHS_ENDPOINT_SENDING )\r
+        {\r
+            if (pXfr->buffered)\r
+            {\r
+                pXfr->transferred += pXfr->buffered;\r
+                pXfr->buffered = 0;\r
+            }\r
+            if((pXfr->transferred % pEp->size == 0) && ( pXfr->remaining == 0) && ( pXfr->transferred > 0)&&(pEp->sendZLP == 0)) \r
+            { \r
+              pEp->sendZLP = 1; // Force ZLP transmission in total length is  a multiple of endpoint size \r
+  \r
+            } \r
+            if (   pXfr->buffered == 0\r
+                && pXfr->transferred == 0\r
+                && pXfr->remaining == 0\r
+                && pEp->sendZLP == 0 )\r
+            {\r
+                pEp->sendZLP = 1;\r
+            }\r
+\r
+            /* End of Xfr ? */\r
+            if (   pXfr->remaining\r
+                || pEp->sendZLP == 1)\r
+            {\r
+          if(pEp->sendZLP == 1)\r
+            { \r
+                // A null packet will be send, keep trace of it : Change this value only if ZLP will be send!!! \r
+                pEp->sendZLP = 2; \r
+            } \r
+\r
+                /* Transfer remaining */\r
+                TRACE_DEBUG_WP("%d ", pEp->size);\r
+                /* Send next packet */\r
+                UDPHS_WritePayload(bEndpoint, pEp->size);\r
+                pEpt->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_TXRDY;\r
+            }\r
+            else\r
+            {\r
+                TRACE_DEBUG_WP("l%d ", pXfr->transferred);\r
+                /* Disable interrupt on none-control EP */\r
+                if (type != UDPHS_EPTCFG_EPT_TYPE_CTRL8)\r
+                {\r
+                    pUdp->UDPHS_IEN &= ~(UDPHS_IEN_EPT_0 << bEndpoint);\r
+                }\r
+                pEpt->UDPHS_EPTCTLDIS = UDPHS_EPTCTLDIS_TXRDY;\r
+\r
+                UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);\r
+                pEp->sendZLP = 0;\r
+            }\r
+        }\r
+        else\r
+        {\r
+            TRACE_DEBUG("Err Wr %d\n\r", pEp->sendZLP);\r
+        }\r
+    }\r
+    /* OUT packet received */\r
+    if ( UDPHS_EPTSTA_RXRDY_TXKL & status )\r
+    {\r
+        TRACE_DEBUG_WP("Rd ");\r
+\r
+        /* NOT in receiving state */\r
+        if (pEp->state != UDPHS_ENDPOINT_RECEIVING)\r
+        {\r
+            /* Check if ACK received on a Control EP */\r
+            if (   (UDPHS_EPTCFG_EPT_TYPE_CTRL8 == type)\r
+                && (0 == (status & UDPHS_EPTSTA_BYTE_COUNT_Msk)) )\r
+            {\r
+                TRACE_DEBUG_WP("Ack ");\r
+                pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_RXRDY_TXKL;\r
+                UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);\r
+            }\r
+            /* data has been STALLed */\r
+            else if (UDPHS_EPTSTA_FRCESTALL & status)\r
+            {\r
+                TRACE_DEBUG_WP("Discard ");\r
+                pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_RXRDY_TXKL;\r
+            }\r
+            /* NAK the data */\r
+            else\r
+            {\r
+                TRACE_DEBUG_WP("Nak ");\r
+                pUdp->UDPHS_IEN &= ~(UDPHS_IEN_EPT_0 << bEndpoint);\r
+            }\r
+        }\r
+        /* In read state */\r
+        else\r
+        {\r
+            wPktSize = (uint16_t)((status & UDPHS_EPTSTA_BYTE_COUNT_Msk) >> UDPHS_EPTSTA_BYTE_COUNT_Pos);\r
+\r
+            TRACE_DEBUG_WP("%d ", wPktSize);\r
+            UDPHS_ReadPayload(bEndpoint, wPktSize);\r
+            pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_RXRDY_TXKL;\r
+            /* Check if transfer is finished */\r
+            if (pXfr->remaining == 0 || wPktSize < pEp->size)\r
+            {\r
+                pEpt->UDPHS_EPTCTLDIS = UDPHS_EPTCTLDIS_RXRDY_TXKL;\r
+\r
+                /* Disable interrupt if not control EP */\r
+                if (UDPHS_EPTCFG_EPT_TYPE_CTRL8 != type)\r
+                {\r
+                    pUdp->UDPHS_IEN &= ~(UDPHS_IEN_EPT_0 << bEndpoint);\r
+                }\r
+                UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);\r
+            }\r
+        }\r
+    }\r
+    /* STALL sent */\r
+    if ( UDPHS_EPTSTA_STALL_SNT & status )\r
+    {\r
+        /* Acknowledge */\r
+        pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_STALL_SNT;\r
+\r
+        /* ISO error */\r
+        if (type == UDPHS_EPTCFG_EPT_TYPE_ISO)\r
+        {\r
+            TRACE_WARNING("IsoE[%d]\n\r", bEndpoint);\r
+\r
+            UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_ABORTED);\r
+        }\r
+        /* If EP is not halted, clear STALL */\r
+        else\r
+        {\r
+            TRACE_WARNING("Stall[%d]\n\r", bEndpoint);\r
+\r
+            if (pEp->state != UDPHS_ENDPOINT_HALTED)\r
+            {\r
+                pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_FRCESTALL;\r
+            }\r
+        }\r
+    }\r
+    /* SETUP packet received */\r
+    if ( UDPHS_EPTSTA_RX_SETUP & status )\r
+    {\r
+        /* If a transfer was pending, complete it\r
+           Handles the case where during the status phase of a control write\r
+           transfer, the host receives the device ZLP and ack it, but the ack\r
+           is not received by the device */\r
+        if (pEp->state == UDPHS_ENDPOINT_RECEIVING\r
+            || pEp->state == UDPHS_ENDPOINT_RECEIVINGM\r
+            || pEp->state == UDPHS_ENDPOINT_SENDING\r
+            || pEp->state == UDPHS_ENDPOINT_SENDINGM)\r
+        {\r
+            UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_SUCCESS);\r
+        }\r
+\r
+        /* ISO Err Flow */\r
+        if (type == UDPHS_EPTCFG_EPT_TYPE_ISO)\r
+        {\r
+            TRACE_WARNING("IsoFE[%d]\n\r", bEndpoint);\r
+            /* Acknowledge setup packet */\r
+            pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_RX_SETUP;\r
+        }\r
+        else\r
+        {\r
+            TRACE_DEBUG_WP("Stup ");\r
+            \r
+            /* Copy setup */\r
+            UDPHS_ReadRequest(pReq);\r
+            /* Acknowledge setup packet */\r
+            pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_RX_SETUP;\r
+            /* Handler */\r
+            USBD_RequestHandler(bEndpoint, pReq);\r
+        }\r
+    }\r
+}\r
+#ifdef DMA\r
+/**\r
+ * DMA Single transfer\r
+ * \param bEndpoint EP number.\r
+ * \pXfr  Pointer to transfer instance.\r
+ * \dwCfg DMA Control configuration (excluding length).\r
+ */\r
+static inline void UDPHS_DmaSingle(uint8_t bEndpoint, Transfer *pXfr, uint32_t dwCfg)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+\r
+    /* Single transfer */\r
+    CP15_coherent_dcache_for_dma ((uint32_t)&pXfr->pData[pXfr->transferred], ((uint32_t)&pXfr->pData[pXfr->transferred]) + pXfr->buffered);\r
+    pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMAADDRESS =\r
+                (uint32_t)&pXfr->pData[pXfr->transferred];\r
+    pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMASTATUS;\r
+    /* Interrupt enable */\r
+    pUdp->UDPHS_IEN |= (1 << SHIFT_DMA << bEndpoint);\r
+    \r
+    TRACE_DEBUG_WP("Dma[B%d:T%d] ", pXfr->buffered, pXfr->transferred);\r
+    /* DMA Configure */\r
+    pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMACONTROL = 0;\r
+    pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMACONTROL = 0\r
+                            | UDPHS_DMACONTROL_BUFF_LENGTH(pXfr->buffered)\r
+                            | dwCfg;\r
+}\r
+/**\r
+ * Endpoint DMA interrupt handler.\r
+ * This function handles DMA interrupts.\r
+ * \param bEndpoint Index of endpoint\r
+ */\r
+static void UDPHS_DmaHandler(uint8_t bEndpoint)\r
+{\r
+    Udphs    *pUdp  = UDPHS;\r
+    //UdphsEpt *pHwEp = &pUdp->UDPHS_EPT[bEndpoint];\r
+\r
+    Endpoint *pEp  = &(endpoints[bEndpoint]);\r
+    Transfer *pXfr = (Transfer*)&(pEp->transfer);\r
+\r
+    uint32_t dwDmaSr;\r
+    int32_t iRemain, iXfred;\r
+    uint8_t bRc = USBD_STATUS_SUCCESS;\r
+\r
+    CP15_flush_dcache_for_dma ((uint32_t)&pXfr->pData[pXfr->transferred], ((uint32_t)&pXfr->pData[pXfr->transferred]) + pXfr->buffered);\r
+    dwDmaSr = pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMASTATUS;\r
+    TRACE_DEBUG_WP("iDma%d,%x ", bEndpoint, dwDmaSr);\r
+    /* Mbl transfer */\r
+    if (pEp->state == UDPHS_ENDPOINT_SENDINGM)\r
+    {\r
+        /* Not implemented */\r
+        return;\r
+    }\r
+    else if (pEp->state == UDPHS_ENDPOINT_RECEIVINGM)\r
+    {\r
+        /* Not implemented */\r
+        return;\r
+    }\r
+\r
+    /* Disable DMA interrupt to avoid receiving 2 (B_EN and TR_EN) */\r
+    pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMACONTROL &= ~(UDPHS_DMACONTROL_END_TR_EN\r
+                                                    |UDPHS_DMACONTROL_END_B_EN);\r
+    if (UDPHS_DMASTATUS_END_BF_ST & dwDmaSr)\r
+    {\r
+        TRACE_DEBUG_WP("EoDmaB ");\r
+        /* BUFF_COUNT holds the number of untransmitted bytes.\r
+           BUFF_COUNT is equal to zero in case of good transfer */\r
+        iRemain = (dwDmaSr & UDPHS_DMASTATUS_BUFF_COUNT_Msk)\r
+                        >> UDPHS_DMASTATUS_BUFF_COUNT_Pos;\r
+        TRACE_DEBUG_WP("C%d ", iRemain);\r
+        iXfred  = pXfr->buffered - iRemain;\r
+\r
+        pXfr->transferred += iXfred;\r
+        pXfr->buffered     = iRemain;\r
+        pXfr->remaining   -= iXfred;\r
+        TRACE_DEBUG_WP("[B%d:T%d:R%d] ", pXfr->buffered, pXfr->transferred, pXfr->remaining);\r
+        /* There is still data */\r
+        if (pXfr->remaining + pXfr->buffered > 0)\r
+        {   \r
+            if (pXfr->remaining > DMA_MAX_FIFO_SIZE)\r
+            {\r
+                pXfr->buffered = DMA_MAX_FIFO_SIZE;\r
+            }\r
+            else\r
+            {\r
+                pXfr->buffered = pXfr->remaining;\r
+            }\r
+            /* Single transfer again */\r
+            UDPHS_DmaSingle(bEndpoint, pXfr, UDPHS_DMACONTROL_END_TR_EN\r
+                                             | UDPHS_DMACONTROL_END_TR_IT\r
+                                             | UDPHS_DMACONTROL_END_B_EN\r
+                                             | UDPHS_DMACONTROL_END_BUFFIT\r
+                                             | UDPHS_DMACONTROL_CHANN_ENB);\r
+        }\r
+    }\r
+    else if (UDPHS_DMASTATUS_END_TR_ST & dwDmaSr)\r
+    {\r
+        TRACE_DEBUG_WP("EoDmaT ");\r
+        pXfr->transferred = pXfr->buffered -\r
+            ((dwDmaSr & UDPHS_DMASTATUS_BUFF_COUNT_Msk)\r
+                    >> UDPHS_DMASTATUS_BUFF_COUNT_Pos);\r
+        pXfr->remaining = 0;\r
+\r
+        TRACE_DEBUG_WP("[B%d:T%d] ", pXfr->buffered, pXfr->transferred);\r
+    }\r
+    else\r
+    {\r
+        TRACE_ERROR("UDPHS_DmaHandler: ST 0x%X\n\r", (unsigned int)dwDmaSr);\r
+        bRc = USBD_STATUS_ABORTED;\r
+    }\r
+    /* Callback */\r
+    if (pXfr->remaining == 0)\r
+    {\r
+        UDPHS_EndOfTransfer(bEndpoint, bRc);\r
+        \r
+    }\r
+    \r
+}\r
+#endif\r
+/**\r
+ * Sends data through a USB endpoint. Sets up the transfer descriptor,\r
+ * writes one or two data payloads (depending on the number of FIFO bank\r
+ * for the endpoint) and then starts the actual transfer. The operation is\r
+ * complete when all the data has been sent.\r
+ *\r
+ * *If the size of the buffer is greater than the size of the endpoint\r
+ *  (or twice the size if the endpoint has two FIFO banks), then the buffer\r
+ *  must be kept allocated until the transfer is finished*. This means that\r
+ *  it is not possible to declare it on the stack (i.e. as a local variable\r
+ *  of a function which returns after starting a transfer).\r
+ *\r
+ * \param pEndpoint Pointer to Endpoint struct.\r
+ * \param pData Pointer to a buffer with the data to send.\r
+ * \param dLength Size of the data buffer.\r
+ * \return USBD_STATUS_SUCCESS if the transfer has been started;\r
+ *         otherwise, the corresponding error status code.\r
+ */\r
+static inline uint8_t UDPHS_Write(uint8_t    bEndpoint,\r
+                                const void *pData,\r
+                                uint32_t   dLength)\r
+{\r
+    Udphs    *pUdp  = UDPHS;\r
+    UdphsEpt *pHwEp = &pUdp->UDPHS_EPT[bEndpoint];\r
+  \r
+    Endpoint *pEp  = &(endpoints[bEndpoint]);\r
+    Transfer *pXfr = (Transfer*)&(pEp->transfer);\r
+    /* Return if busy */\r
+    if (pEp->state != UDPHS_ENDPOINT_IDLE)\r
+    {\r
+        return USBD_STATUS_LOCKED;\r
+    }\r
+    /* Sending state */\r
+    pEp->state = UDPHS_ENDPOINT_SENDING;\r
+    TRACE_DEBUG_WP("Wr%d(%d) ", bEndpoint, dLength);\r
+    pEp->sendZLP = 0;\r
+    /* Setup transfer descriptor */\r
+    pXfr->pData       = (void*) pData;\r
+    pXfr->remaining   = dLength;\r
+    pXfr->buffered    = 0;\r
+    pXfr->transferred = 0;\r
+  #ifdef DMA\r
+    /* 1. DMA supported, 2. Not ZLP */\r
+    if (CHIP_USB_ENDPOINTS_DMA(bEndpoint)\r
+        && pXfr->remaining > 0)\r
+    {\r
+        if (pXfr->remaining > DMA_MAX_FIFO_SIZE)\r
+        {\r
+            /* Transfer the max */\r
+            pXfr->buffered = DMA_MAX_FIFO_SIZE;\r
+        }\r
+        else\r
+        {\r
+            /* Good size */\r
+            pXfr->buffered = pXfr->remaining;\r
+        }\r
+        /* Single transfer */\r
+        UDPHS_DmaSingle(bEndpoint, pXfr, UDPHS_DMACONTROL_END_B_EN\r
+                                         | UDPHS_DMACONTROL_END_BUFFIT\r
+                                         | UDPHS_DMACONTROL_CHANN_ENB);\r
+        return USBD_STATUS_SUCCESS;\r
+    }\r
+  #endif\r
+\r
+    /* Enable IT */\r
+    pUdp->UDPHS_IEN |= ( UDPHS_IEN_EPT_0 << bEndpoint );\r
+    pHwEp->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_TXRDY;\r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+\r
+/**\r
+ * Sends data through a USB endpoint. Sets up the transfer descriptor list,\r
+ * writes one or two data payloads (depending on the number of FIFO bank\r
+ * for the endpoint) and then starts the actual transfer. The operation is\r
+ * complete when all the transfer buffer in the list has been sent.\r
+ *\r
+ * *If the size of the buffer is greater than the size of the endpoint\r
+ *  (or twice the size if the endpoint has two FIFO banks), then the buffer\r
+ *  must be kept allocated until the transfer is finished*. This means that\r
+ *  it is not possible to declare it on the stack (i.e. as a local variable\r
+ *  of a function which returns after starting a transfer).\r
+ *\r
+ * \param pEndpoint Pointer to Endpoint struct.\r
+ * \param pData Pointer to a buffer with the data to send.\r
+ * \param dLength Size of the data buffer.\r
+ * \return USBD_STATUS_SUCCESS if the transfer has been started;\r
+ *         otherwise, the corresponding error status code.\r
+ */\r
+static inline uint8_t UDPHS_AddWr(uint8_t   bEndpoint,\r
+                                const void *pData,\r
+                                uint32_t    dLength)\r
+{\r
+    Udphs    *pUdp  = UDPHS;\r
+    UdphsEpt *pHwEp = &pUdp->UDPHS_EPT[bEndpoint];\r
+\r
+    Endpoint *pEp  = &(endpoints[bEndpoint]);\r
+    MblTransfer *pMbl = (MblTransfer*)&(pEp->transfer);\r
+    USBDTransferBuffer *pTx;\r
+    /* Check parameter */\r
+    if (dLength >= 0x10000)\r
+    {\r
+        return USBD_STATUS_INVALID_PARAMETER;\r
+    }\r
+    /* Data in process */\r
+    if (pEp->state > UDPHS_ENDPOINT_IDLE)\r
+    {   /* MBL transfer */\r
+        if (pMbl->transType)\r
+        {\r
+            if (pMbl->listState == MBL_FULL)\r
+            {\r
+                return USBD_STATUS_LOCKED;\r
+            }\r
+        }\r
+        else\r
+        {\r
+            return USBD_STATUS_LOCKED;\r
+        }\r
+    }\r
+\r
+    TRACE_DEBUG_WP("AddW%d(%d) ", bEndpoint, dLength);\r
+    /* Add buffer to buffer list and update index */\r
+    pTx = &(pMbl->pMbl[pMbl->inCurr]);\r
+    pTx->pBuffer = (uint8_t*)pData;\r
+    pTx->size = pTx->remaining = dLength;\r
+    pTx->transferred = pTx->buffered = 0;\r
+    /* Update input index */\r
+    if (pMbl->inCurr >= (pMbl->listSize-1)) pMbl->inCurr = 0;\r
+    else                                    pMbl->inCurr ++;\r
+    if (pMbl->inCurr == pMbl->outCurr)      pMbl->listState = MBL_FULL;\r
+    else                                    pMbl->listState = 0;\r
+    /* Start sending when offset achieved */\r
+    if (MBL_NbBuffer(pMbl->inCurr, pMbl->outCurr, pMbl->listSize)\r
+            >= pMbl->offsetSize\r
+        && pEp->state == UDPHS_ENDPOINT_IDLE)\r
+    {\r
+        uint8_t nbBanks = CHIP_USB_ENDPOINTS_BANKS(bEndpoint);\r
+\r
+        /* Change state */\r
+        pEp->state = UDPHS_ENDPOINT_SENDINGM;\r
+\r
+        TRACE_DEBUG_WP("StartM ");\r
+\r
+        /* Fill data into FIFO */\r
+        for (;\r
+             nbBanks && pMbl->pMbl[pMbl->inCurr].remaining;\r
+             nbBanks --)\r
+        {\r
+            UDPHS_MblWriteFifo(bEndpoint);\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_TXRDY;\r
+        }\r
+\r
+        /* Enable interrupt */\r
+        pUdp->UDPHS_IEN |= (UDPHS_IEN_EPT_0 << bEndpoint);\r
+        pHwEp->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_TXRDY;\r
+\r
+    }\r
+\r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+\r
+/**\r
+ * Reads incoming data on an USB endpoint This methods sets the transfer\r
+ * descriptor and activate the endpoint interrupt. The actual transfer is\r
+ * then carried out by the endpoint interrupt handler. The Read operation\r
+ * finishes either when the buffer is full, or a short packet (inferior to\r
+ * endpoint maximum  size) is received.\r
+ *\r
+ * *The buffer must be kept allocated until the transfer is finished*.\r
+ * \param bEndpoint Endpoint number.\r
+ * \param pData Pointer to a data buffer.\r
+ * \param dLength Size of the data buffer in bytes.\r
+ * \return USBD_STATUS_SUCCESS if the read operation has been started;\r
+ *         otherwise, the corresponding error code.\r
+ */\r
+static inline uint8_t UDPHS_Read(uint8_t  bEndpoint,\r
+                                 void     *pData,\r
+                                 uint32_t dLength)\r
+{\r
+    Udphs    *pUdp  = UDPHS;\r
+    UdphsEpt *pHwEp = &pUdp->UDPHS_EPT[bEndpoint];\r
+\r
+    Endpoint *pEp  = &(endpoints[bEndpoint]);\r
+    Transfer *pXfr = (Transfer*)&(pEp->transfer);\r
+    /* Return if busy */\r
+    if (pEp->state != UDPHS_ENDPOINT_IDLE)\r
+    {\r
+        return USBD_STATUS_LOCKED;\r
+    }\r
+    /* Receiving state */\r
+    pEp->state = UDPHS_ENDPOINT_RECEIVING;\r
+\r
+    TRACE_DEBUG_WP("Rd%d(%d) ", bEndpoint, dLength);\r
+    /* Setup transfer descriptor */\r
+    pXfr->pData       = (void*) pData;\r
+    pXfr->remaining   = dLength;\r
+    pXfr->buffered    = 0;\r
+    pXfr->transferred = 0;\r
+\r
+  #ifdef DMA\r
+    /* If: 1. DMA supported, 2. Has data */\r
+    if (CHIP_USB_ENDPOINTS_DMA(bEndpoint)\r
+        && pXfr->remaining > 0)\r
+    {\r
+        /* DMA XFR size adjust */\r
+        if (pXfr->remaining > DMA_MAX_FIFO_SIZE)\r
+            pXfr->buffered = DMA_MAX_FIFO_SIZE;\r
+        else\r
+            pXfr->buffered = pXfr->remaining;\r
+        /* Single transfer */\r
+        UDPHS_DmaSingle(bEndpoint, pXfr, UDPHS_DMACONTROL_END_TR_EN\r
+                                         | UDPHS_DMACONTROL_END_TR_IT\r
+                                         | UDPHS_DMACONTROL_END_B_EN\r
+                                         | UDPHS_DMACONTROL_END_BUFFIT\r
+                                         | UDPHS_DMACONTROL_CHANN_ENB);\r
+        return USBD_STATUS_SUCCESS;\r
+    }\r
+  #endif\r
+\r
+    /* Enable IT */\r
+    pUdp->UDPHS_IEN |= ( UDPHS_IEN_EPT_0 << bEndpoint );\r
+    pHwEp->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_RXRDY_TXKL;\r
+    \r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+#if 0\r
+/**\r
+ * Reads incoming data on an USB endpoint This methods sets the transfer\r
+ * descriptor and activate the endpoint interrupt. The actual transfer is\r
+ * then carried out by the endpoint interrupt handler. The Read operation\r
+ * finishes either when the buffer is full, or a short packet (inferior to\r
+ * endpoint maximum  size) is received.\r
+ *\r
+ * *The buffer must be kept allocated until the transfer is finished*.\r
+ * \param bEndpoint Endpoint number.\r
+ * \param pData Pointer to a data buffer.\r
+ * \param dLength Size of the data buffer in bytes.\r
+ * \return USBD_STATUS_SUCCESS if the read operation has been started;\r
+ *         otherwise, the corresponding error code.\r
+ */\r
+static inline uint8_t UDPHS_AddRd(uint8_t  bEndpoint,\r
+                                void     *pData,\r
+                                uint32_t dLength)\r
+{\r
+    return USBD_STATUS_SW_NOT_SUPPORTED;\r
+}\r
+#endif\r
+/*---------------------------------------------------------------------------\r
+ *      Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+extern void UDPHS_IrqHandler(void);\r
+extern void USBD_HAL_ForceFs(void);\r
+/**\r
+ * USBD (UDP) interrupt handler\r
+ * Manages device resume, suspend, end of bus reset.\r
+ * Forwards endpoint events to the appropriate handler.\r
+ */\r
+void UDPHS_IrqHandler(void)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+\r
+    uint32_t status;\r
+    uint8_t  numIt;\r
+\r
+    status  = pUdp->UDPHS_INTSTA;\r
+    status &= pUdp->UDPHS_IEN;\r
+\r
+    /* Handle all UDPHS interrupts */\r
+    TRACE_DEBUG_WP("\n\r%c ", USBD_HAL_IsHighSpeed() ? 'H' : 'F');\r
+    while( status )\r
+    {\r
+        /* SOF */\r
+        if (status & UDPHS_INTSTA_INT_SOF)\r
+        {\r
+            TRACE_DEBUG_WP("SOF ");\r
+            /* SOF handler */\r
+            //USBD_SofHandler();\r
+\r
+            /* Acknowledge interrupt */\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_INT_SOF;\r
+            status &= ~(uint32_t)UDPHS_INTSTA_INT_SOF;\r
+        }\r
+        /* Suspend, treated last */\r
+        else if (status == UDPHS_INTSTA_DET_SUSPD)\r
+        {\r
+            TRACE_WARNING_WP("Susp ");\r
+            /* Enable wakeup */\r
+            pUdp->UDPHS_IEN |= (UDPHS_IEN_WAKE_UP | UDPHS_IEN_ENDOFRSM);\r
+            pUdp->UDPHS_IEN &= ~(uint32_t)UDPHS_IEN_DET_SUSPD;\r
+\r
+            /* Acknowledge interrupt */\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_DET_SUSPD | UDPHS_CLRINT_WAKE_UP;\r
+\r
+            USBD_SuspendHandler();\r
+        }\r
+        /* Resume */\r
+        else if ( (status & UDPHS_INTSTA_WAKE_UP)\r
+               || (status & UDPHS_INTSTA_ENDOFRSM) )\r
+        {\r
+            USBD_ResumeHandler();\r
+\r
+            TRACE_INFO_WP("Rsm ");\r
+\r
+            /* Acknowledge interrupt */\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_WAKE_UP\r
+                               | UDPHS_CLRINT_ENDOFRSM\r
+                               | UDPHS_CLRINT_DET_SUSPD;\r
+\r
+            pUdp->UDPHS_IEN |= UDPHS_IEN_ENDOFRSM | UDPHS_IEN_DET_SUSPD;\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_WAKE_UP | UDPHS_CLRINT_ENDOFRSM;\r
+            pUdp->UDPHS_IEN &= ~(uint32_t)UDPHS_IEN_WAKE_UP;\r
+        }\r
+        /* Bus reset */\r
+        else if (status & UDPHS_INTSTA_ENDRESET)\r
+        {\r
+            TRACE_DEBUG_WP("EoB ");\r
+            /* Flush and enable the suspend interrupt */\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_WAKE_UP | UDPHS_CLRINT_DET_SUSPD;\r
+            pUdp->UDPHS_IEN |= UDPHS_IEN_DET_SUSPD;\r
+\r
+            /* Reset handler */\r
+            USBD_ResetHandler();\r
+\r
+            /* Acknowledge interrupt */\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_ENDRESET;\r
+        }\r
+        /* Upstream resume */\r
+        else if (status & UDPHS_INTSTA_UPSTR_RES)\r
+        {\r
+            TRACE_DEBUG_WP("ExtRes ");\r
+            /* Acknowledge interrupt */\r
+            pUdp->UDPHS_CLRINT = UDPHS_CLRINT_UPSTR_RES;\r
+        }\r
+        /* Endpoints */\r
+        else\r
+        {\r
+          #ifdef DMA\r
+            for (numIt = 0; numIt < NUM_IT_MAX; numIt ++)\r
+            {\r
+                if (status & (1 << SHIFT_DMA << numIt))\r
+                {\r
+                    UDPHS_DmaHandler(numIt);\r
+                }\r
+                else if (status & (UDPHS_INTSTA_EPT_0 << numIt))\r
+                {\r
+                    UDPHS_EndpointHandler(numIt);\r
+                }\r
+            }\r
+          #else\r
+            for (numIt = 0; numIt < NUM_IT_MAX; numIt ++)\r
+            {\r
+                if (status & (UDPHS_INTSTA_EPT_0 << numIt))\r
+                {\r
+                    UDPHS_EndpointHandler(numIt);\r
+                }\r
+            }\r
+          #endif\r
+        }\r
+\r
+        /* Update interrupt status */\r
+        status  = pUdp->UDPHS_INTSTA;\r
+        status &= pUdp->UDPHS_IEN;\r
+\r
+        TRACE_DEBUG_WP("\n\r");\r
+        if (status)\r
+        {\r
+            TRACE_DEBUG_WP(" - ");\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Reset endpoints and disable them.\r
+ * -# Terminate transfer if there is any, with given status;\r
+ * -# Reset the endpoint & disable it.\r
+ * \param bmEPs    Bitmap for endpoints to reset.\r
+ * \param bStatus  Status passed to terminate transfer on endpoint.\r
+ * \param bKeepCfg 1 to keep old endpoint configuration.\r
+ * \note Use USBD_HAL_ConfigureEP() to configure and enable endpoint\r
+         if not keeping old configuration.\r
+ * \sa USBD_HAL_ConfigureEP().\r
+ */\r
+void USBD_HAL_ResetEPs(uint32_t bmEPs, uint8_t bStatus, uint8_t bKeepCfg)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+    UdphsEpt *pHwEp;\r
+\r
+    Endpoint *pEndpoint;\r
+    uint32_t tmp = bmEPs & ((1<<CHIP_USB_NUMENDPOINTS)-1);\r
+    uint8_t  ep;\r
+    uint32_t epBit, epCfg;\r
+\r
+    for (ep = 0, epBit = 1; ep < CHIP_USB_NUMENDPOINTS; ep ++)\r
+    {\r
+        if (tmp & epBit)\r
+        {\r
+            pHwEp = &pUdp->UDPHS_EPT[ep];\r
+\r
+            /* Disable ISR */\r
+            pUdp->UDPHS_IEN &= ~(epBit << SHIFT_INTERUPT);\r
+            /* Kill pending Banks ?? */\r
+            #if 0\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_KILL_BANK;\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_KILL_BANK;\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_KILL_BANK;\r
+            #endif\r
+            \r
+            /* Reset transfer information */\r
+            pEndpoint = &(endpoints[ep]);\r
+            /* Reset endpoint state */\r
+            pEndpoint->bank = 0;\r
+            /* Endpoint configure */\r
+            epCfg = pHwEp->UDPHS_EPTCFG;\r
+            /* Reset endpoint */\r
+            pUdp->UDPHS_EPTRST = epBit;\r
+            /* Restore configure */\r
+            if (bKeepCfg)\r
+            {\r
+                pHwEp->UDPHS_EPTCFG = epCfg;\r
+            }\r
+            else\r
+            {\r
+                pEndpoint->state = UDPHS_ENDPOINT_DISABLED;\r
+            }\r
+\r
+            /* Terminate transfer on this EP */\r
+            UDPHS_EndOfTransfer(ep, bStatus);\r
+        }\r
+        epBit <<= 1;\r
+    }\r
+}\r
+\r
+/**\r
+ * Cancel pending READ/WRITE\r
+ * \param bmEPs    Bitmap for endpoints to reset.\r
+ * \note EP callback is invoked with USBD_STATUS_CANCELED.\r
+ */\r
+void USBD_HAL_CancelIo(uint32_t bmEPs)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+    //UdphsEpt *pHwEp = NULL;\r
+\r
+    uint32_t tmp = bmEPs & ((1<<CHIP_USB_NUMENDPOINTS)-1);\r
+    uint8_t  ep;\r
+    uint32_t epBit;\r
+    for (ep = 0, epBit = 1; ep < CHIP_USB_NUMENDPOINTS; ep ++)\r
+    {\r
+        if (tmp & epBit)\r
+        {\r
+            //pHwEp = &pUdp->UDPHS_EPT[ep];\r
+\r
+            /* Disable ISR */\r
+            pUdp->UDPHS_IEN &= ~(epBit << SHIFT_INTERUPT);\r
+            /* Kill pending Banks ?? */\r
+            #if 0\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_KILL_BANK;\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_KILL_BANK;\r
+            pHwEp->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_KILL_BANK;\r
+            #endif\r
+\r
+            /* Terminate transfer on this EP */\r
+            UDPHS_EndOfTransfer(ep, USBD_STATUS_CANCELED);\r
+        }\r
+        epBit <<= 1;\r
+    }\r
+}\r
+\r
+/**\r
+ * Configures an endpoint according to its endpoint Descriptor.\r
+ * \param pDescriptor Pointer to an endpoint descriptor.\r
+ * \return The endpoint address.\r
+ */\r
+uint8_t USBD_HAL_ConfigureEP(const USBEndpointDescriptor *pDescriptor)\r
+{\r
+    Udphs    *pUdp = UDPHS;\r
+    UdphsEpt *pEpt;\r
+    //UdphsDma *pDma;\r
+\r
+    Endpoint *pEndpoint;\r
+    uint8_t  bEndpoint;\r
+    uint8_t  bType;\r
+    uint8_t  bEndpointDir;\r
+    //uint8_t bInterval = 0;\r
+    uint8_t  bNbTrans  = 1;\r
+    uint8_t  bSizeEpt  = 0;\r
+    uint8_t  bHs = ((pUdp->UDPHS_INTSTA & UDPHS_INTSTA_SPEED) > 0);\r
+\r
+    /* NULL descriptor -> Control endpoint 0 */\r
+    if (pDescriptor == 0)\r
+    {\r
+\r
+        bEndpoint = 0;\r
+        pEndpoint = &(endpoints[bEndpoint]);\r
+        pEpt      = &(pUdp->UDPHS_EPT[0]);\r
+        bType = USBEndpointDescriptor_CONTROL;\r
+        bEndpointDir = 0;\r
+        pEndpoint->size = CHIP_USB_ENDPOINTS_MAXPACKETSIZE(0);\r
+        pEndpoint->bank = CHIP_USB_ENDPOINTS_BANKS(0);\r
+    }\r
+    /* Device descriptor -> Control endpoint 0 */\r
+    else if (pDescriptor->bDescriptorType == USBGenericDescriptor_DEVICE)\r
+    {\r
+        USBDeviceDescriptor *pDevDesc = (USBDeviceDescriptor*)pDescriptor;\r
+        bEndpoint = 0;\r
+        pEndpoint = &(endpoints[bEndpoint]);\r
+        pEpt      = &(pUdp->UDPHS_EPT[0]);\r
+        bType = USBEndpointDescriptor_CONTROL;\r
+        bEndpointDir = 0;\r
+        pEndpoint->size =pDevDesc->bMaxPacketSize0;\r
+        pEndpoint->bank = CHIP_USB_ENDPOINTS_BANKS(0);\r
+    }\r
+    /* Endpoint descriptor */\r
+    else\r
+    {\r
+        /* The endpoint number */\r
+        bEndpoint = USBEndpointDescriptor_GetNumber(pDescriptor);\r
+        pEndpoint = &(endpoints[bEndpoint]);\r
+        pEpt      = &(pUdp->UDPHS_EPT[bEndpoint]);\r
+        /* Transfer type: Control, Isochronous, Bulk, Interrupt */\r
+        bType = USBEndpointDescriptor_GetType(pDescriptor);\r
+        /* interval */\r
+        //bInterval = USBEndpointDescriptor_GetInterval(pDescriptor);\r
+        /* Direction, ignored for control endpoints */\r
+        bEndpointDir = USBEndpointDescriptor_GetDirection(pDescriptor);\r
+        pEndpoint->size = USBEndpointDescriptor_GetMaxPacketSize(pDescriptor);\r
+        pEndpoint->bank = CHIP_USB_ENDPOINTS_BANKS(bEndpoint);\r
+\r
+        /* Convert descriptor value to EP configuration */\r
+        if (bHs) {  /* HS Interval, *125us */\r
+\r
+            /* MPS: Bit12,11 specify NB_TRANS, as USB 2.0 Spec. */\r
+            bNbTrans = ((pEndpoint->size >> 11) & 0x3);\r
+            if (bNbTrans == 3)\r
+                bNbTrans = 1;\r
+            else\r
+                bNbTrans ++;\r
+\r
+            /* Mask, bit 10..0 is the size */\r
+            pEndpoint->size &= 0x7FF;\r
+        }\r
+    }\r
+\r
+    //TRACE_DEBUG_WP("CfgE%d ", bEndpoint);\r
+\r
+    /* Abort the current transfer is the endpoint was configured and in\r
+       Write or Read state */\r
+    if( (pEndpoint->state == UDPHS_ENDPOINT_RECEIVING)\r
+     || (pEndpoint->state == UDPHS_ENDPOINT_SENDING)\r
+     || (pEndpoint->state == UDPHS_ENDPOINT_RECEIVINGM)\r
+     || (pEndpoint->state == UDPHS_ENDPOINT_SENDINGM) ) {\r
+\r
+        UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_RESET);\r
+    }\r
+    pEndpoint->state = UDPHS_ENDPOINT_IDLE;\r
+\r
+    /* Disable endpoint */\r
+    pEpt->UDPHS_EPTCTLDIS = UDPHS_EPTCTLDIS_SHRT_PCKT\r
+                          | UDPHS_EPTCTLDIS_BUSY_BANK\r
+                          | UDPHS_EPTCTLDIS_NAK_OUT\r
+                          | UDPHS_EPTCTLDIS_NAK_IN\r
+                          | UDPHS_EPTCTLDIS_STALL_SNT\r
+                          | UDPHS_EPTCTLDIS_RX_SETUP\r
+                          | UDPHS_EPTCTLDIS_TXRDY\r
+                          | UDPHS_EPTCTLDIS_RXRDY_TXKL\r
+                          | UDPHS_EPTCTLDIS_ERR_OVFLW\r
+                          | UDPHS_EPTCTLDIS_MDATA_RX\r
+                          | UDPHS_EPTCTLDIS_DATAX_RX\r
+                          | UDPHS_EPTCTLDIS_NYET_DIS\r
+                          | UDPHS_EPTCTLDIS_INTDIS_DMA\r
+                          | UDPHS_EPTCTLDIS_AUTO_VALID\r
+                          | UDPHS_EPTCTLDIS_EPT_DISABL\r
+                          ;\r
+    /* Reset Endpoint Fifos */\r
+    pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_TOGGLESQ | UDPHS_EPTCLRSTA_FRCESTALL;\r
+    pUdp->UDPHS_EPTRST = 1 << bEndpoint;\r
+    /* Configure endpoint size */\r
+    if( pEndpoint->size <= 8 )\r
+        bSizeEpt = 0;\r
+    else if ( pEndpoint->size <= 16 )\r
+        bSizeEpt = 1;\r
+    else if ( pEndpoint->size <= 32 )\r
+        bSizeEpt = 2;\r
+    else if ( pEndpoint->size <= 64 )\r
+        bSizeEpt = 3;\r
+    else if ( pEndpoint->size <= 128 )\r
+        bSizeEpt = 4;\r
+    else if ( pEndpoint->size <= 256 )\r
+        bSizeEpt = 5;\r
+    else if ( pEndpoint->size <= 512 )\r
+        bSizeEpt = 6;\r
+    else if ( pEndpoint->size <= 1024 )\r
+        bSizeEpt = 7;\r
+\r
+    /* Configure endpoint */\r
+    if (bType == USBEndpointDescriptor_CONTROL)\r
+    {\r
+        pUdp->UDPHS_IEN |= (UDPHS_IEN_EPT_0 << bEndpoint);\r
+    }\r
+\r
+    pEpt->UDPHS_EPTCFG =    bSizeEpt \r
+                        | ( bEndpointDir << 3) \r
+                        | ( bType << 4) \r
+                        | ((pEndpoint->bank) << 6)\r
+                        | ( bNbTrans << 8)\r
+                        ;\r
+    while( (UDPHS_EPTCFG_EPT_MAPD & pEpt->UDPHS_EPTCFG) == 0 ) {\r
+\r
+        /* resolved by clearing the reset IT in good place */\r
+        TRACE_ERROR("PB bEndpoint: 0x%X\n\r", bEndpoint);\r
+        TRACE_ERROR("PB bSizeEpt: 0x%X\n\r", bSizeEpt);\r
+        TRACE_ERROR("PB bEndpointDir: 0x%X\n\r", bEndpointDir);\r
+        TRACE_ERROR("PB bType: 0x%X\n\r", bType);\r
+        TRACE_ERROR("PB pEndpoint->bank: 0x%X\n\r", pEndpoint->bank);\r
+        TRACE_ERROR("PB UDPHS_EPTCFG: 0x%X\n\r", (unsigned int)pEpt->UDPHS_EPTCFG);\r
+        for(;;);\r
+    }\r
+\r
+    if (bType == USBEndpointDescriptor_CONTROL)\r
+    {\r
+        pEpt->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_RXRDY_TXKL \r
+                              | UDPHS_EPTCTLENB_RX_SETUP\r
+                              | UDPHS_EPTCTLENB_EPT_ENABL;\r
+    }\r
+    else\r
+    {\r
+#ifndef DMA\r
+        pEpt->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_EPT_ENABL;\r
+#else\r
+        pEpt->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_AUTO_VALID | UDPHS_EPTCTLENB_EPT_ENABL;\r
+#endif\r
+    }\r
+\r
+    //TRACE_DEBUG_WP("<%x,%x,%x> ", pEpt->UDPHS_EPTCFG, pEpt->UDPHS_EPTCTL, pEpt->UDPHS_EPTSTA);\r
+    return bEndpoint;\r
+}\r
+\r
+/**\r
+ * Set callback for a USB endpoint for transfer (read/write).\r
+ *\r
+ * \param bEP       Endpoint number.\r
+ * \param fCallback Optional callback function to invoke when the transfer is\r
+ *                  complete.\r
+ * \param pCbData   Optional pointer to data to the callback function.\r
+ * \return USBD_STATUS_SUCCESS or USBD_STATUS_LOCKED if endpoint is busy.\r
+ */\r
+uint8_t USBD_HAL_SetTransferCallback(uint8_t          bEP,\r
+                                  TransferCallback fCallback,\r
+                                  void             *pCbData)\r
+{\r
+    Endpoint *pEndpoint = &(endpoints[bEP]);\r
+    TransferHeader *pTransfer = (TransferHeader*)&(pEndpoint->transfer);\r
+    /* Check that the endpoint is not transferring */\r
+    if (pEndpoint->state > UDPHS_ENDPOINT_IDLE) {\r
+        return USBD_STATUS_LOCKED;\r
+    }\r
+    TRACE_DEBUG_WP("sXfrCb ");\r
+    /* Setup the transfer callback and extension data */\r
+    pTransfer->fCallback = (void*)fCallback;\r
+    pTransfer->pArgument = pCbData;\r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+\r
+/**\r
+ * Configure an endpoint to use multi-buffer-list transfer mode.\r
+ * The buffers can be added by _Read/_Write function.\r
+ * \param pMbList  Pointer to a multi-buffer list used, NULL to disable MBL.\r
+ * \param mblSize  Multi-buffer list size (number of buffers can be queued)\r
+ * \param startOffset When number of buffer achieve this offset transfer start\r
+ */\r
+uint8_t USBD_HAL_SetupMblTransfer( uint8_t bEndpoint,\r
+                                   USBDTransferBuffer* pMbList,\r
+                                   uint16_t mblSize,\r
+                                   uint16_t startOffset)\r
+{\r
+    Endpoint *pEndpoint = &(endpoints[bEndpoint]);\r
+    MblTransfer *pXfr = (MblTransfer*)&(pEndpoint->transfer);\r
+    uint16_t i;\r
+    /* Check that the endpoint is not transferring */\r
+    if (pEndpoint->state > UDPHS_ENDPOINT_IDLE) {\r
+        return USBD_STATUS_LOCKED;\r
+    }\r
+    TRACE_DEBUG_WP("sMblXfr ");\r
+    /* Enable Multi-Buffer Transfer List */\r
+    if (pMbList) {\r
+        /* Reset list items */\r
+        for (i = 0; i < mblSize; i --) {\r
+            pMbList[i].pBuffer     = NULL;\r
+            pMbList[i].size        = 0;\r
+            pMbList[i].transferred = 0;\r
+            pMbList[i].buffered    = 0;\r
+            pMbList[i].remaining   = 0;\r
+        }\r
+        /* Setup transfer */\r
+        pXfr->transType  = 1;\r
+        pXfr->listState  = 0; /* OK */\r
+        pXfr->listSize   = mblSize;\r
+        pXfr->pMbl       = pMbList;\r
+        pXfr->outCurr = pXfr->outLast = 0;\r
+        pXfr->inCurr  = 0;\r
+        pXfr->offsetSize = startOffset;\r
+    }\r
+    /* Disable Multi-Buffer Transfer */\r
+    else {\r
+        pXfr->transType  = 0;\r
+        pXfr->pMbl       = NULL;\r
+        pXfr->listSize   = 0;\r
+        pXfr->offsetSize = 1;\r
+    }\r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+\r
+/**\r
+ * Sends data through a USB endpoint. Sets up the transfer descriptor,\r
+ * writes one or two data payloads (depending on the number of FIFO bank\r
+ * for the endpoint) and then starts the actual transfer. The operation is\r
+ * complete when all the data has been sent.\r
+ *\r
+ * *If the size of the buffer is greater than the size of the endpoint\r
+ *  (or twice the size if the endpoint has two FIFO banks), then the buffer\r
+ *  must be kept allocated until the transfer is finished*. This means that\r
+ *  it is not possible to declare it on the stack (i.e. as a local variable\r
+ *  of a function which returns after starting a transfer).\r
+ *\r
+ * \param bEndpoint Endpoint number.\r
+ * \param pData Pointer to a buffer with the data to send.\r
+ * \param dLength Size of the data buffer.\r
+ * \return USBD_STATUS_SUCCESS if the transfer has been started;\r
+ *         otherwise, the corresponding error status code.\r
+ */\r
+uint8_t USBD_HAL_Write( uint8_t          bEndpoint,\r
+                        const void       *pData,\r
+                        uint32_t         dLength)\r
+{\r
+    if (endpoints[bEndpoint].transfer.transHdr.transType)\r
+        return UDPHS_AddWr(bEndpoint, pData, dLength);\r
+    else\r
+        return UDPHS_Write(bEndpoint, pData, dLength);\r
+}\r
+\r
+/**\r
+ * Special write function.\r
+ * Sends data through a USB endpoint. Sets up the transfer descriptor,\r
+ * writes header and one or two data payloads (depending on the number of\r
+ * FIFO bank for the endpoint) and then starts the actual transfer. The\r
+ * operation is complete when all the data has been sent.\r
+ *\r
+ * *If the size of the buffer is greater than the size of the endpoint\r
+ *  (or twice the size if the endpoint has two FIFO banks), then the buffer\r
+ *  must be kept allocated until the transfer is finished*. This means that\r
+ *  it is not possible to declare it on the stack (i.e. as a local variable\r
+ *  of a function which returns after starting a transfer).\r
+ *\r
+ * \param bEndpoint Endpoint number.\r
+ * \param pData Pointer to a buffer with the data to send.\r
+ * \param dLength Size of the data buffer.\r
+ * \return USBD_STATUS_SUCCESS if the transfer has been started;\r
+ *         otherwise, the corresponding error status code.\r
+ */\r
+uint8_t USBD_HAL_WrWithHdr(uint8_t bEndpoint,\r
+                           const void * pHdr, uint8_t bHdrLen,\r
+                           const void * pData,uint32_t dLength)\r
+{\r
+    Udphs    *pUdp  = UDPHS;\r
+    UdphsEpt *pHwEp = &pUdp->UDPHS_EPT[bEndpoint];\r
+    Endpoint *pEp  = &(endpoints[bEndpoint]);\r
+    Transfer *pXfr = (Transfer*)&(pEp->transfer);\r
+    /* Return if DMA is not supported */\r
+    if (!CHIP_USB_ENDPOINTS_DMA(bEndpoint))\r
+    {\r
+       return USBD_STATUS_HW_NOT_SUPPORTED;\r
+    }\r
+\r
+#ifdef DMA\r
+    /* Return if busy */\r
+    if (pEp->state != UDPHS_ENDPOINT_IDLE)\r
+    {\r
+        return USBD_STATUS_LOCKED;\r
+    }\r
+    /* Sending state */\r
+    pEp->state = UDPHS_ENDPOINT_SENDING;\r
+    TRACE_DEBUG_WP("Wr%d(%d+%d) ", bEndpoint, bHdrLen, dLength);\r
+\r
+    pEp->sendZLP = 0;\r
+\r
+    /* Setup transfer descriptor */\r
+    pXfr->pData       = (void*) pData;\r
+    pXfr->remaining   = bHdrLen + dLength;\r
+    pXfr->buffered    = 0;\r
+    pXfr->transferred = 0;\r
+\r
+    /* 1. DMA supported always, 2. Not ZLP */\r
+    if (bHdrLen + dLength > 0)\r
+    {\r
+        uint8_t bNbTrans = (pHwEp->UDPHS_EPTCFG & UDPHS_EPTCFG_NB_TRANS_Msk)\r
+                                                  >> UDPHS_EPTCFG_NB_TRANS_Pos;\r
+        if (pXfr->remaining > DMA_MAX_FIFO_SIZE)\r
+        {\r
+            /* Transfer the max */\r
+            pXfr->buffered = DMA_MAX_FIFO_SIZE;\r
+        }\r
+        else\r
+        {\r
+            /* Good size, total size */\r
+            pXfr->buffered = pXfr->remaining;\r
+        }\r
+\r
+        /* LD1: header - load to fifo without interrupt */\r
+        /* Header discarded if exceed the DMA FIFO length */\r
+        //if (bHdrLen > DMA_MAX_FIFO_SIZE) bHdrLen = DMA_MAX_FIFO_SIZE;\r
+        pDmaLL[0].pNxtDesc = (void*)&pDmaLL[1];\r
+        pDmaLL[0].pAddr    = (void*)pHdr;\r
+        pDmaLL[0].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                           | UDPHS_DMACONTROL_BUFF_LENGTH(bHdrLen)\r
+                           | UDPHS_DMACONTROL_LDNXT_DSC;\r
+        /* High bandwidth ISO EP, max size n*ep_size */\r
+        if (bNbTrans > 1) {\r
+            uint8_t* pU8 = (uint8_t*)pData;\r
+            uint32_t maxSize = bNbTrans * pEp->size;\r
+            dLength = pXfr->buffered - bHdrLen;\r
+            if (dLength > maxSize) dLength = maxSize;\r
+          #if 0 /* Prepare banks by 1 DMA descriptor -- NK if not standard EP size, works! */\r
+            /* LD2: data   -  load to fifo with interrupt */\r
+            pDmaLL[1].pNxtDesc = (void*)NULL;\r
+            pDmaLL[1].pAddr    = (void*)pU8;\r
+            pDmaLL[1].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                               | UDPHS_DMACONTROL_BUFF_LENGTH(dLength)\r
+                               | UDPHS_DMACONTROL_END_B_EN\r
+                               | UDPHS_DMACONTROL_END_BUFFIT;\r
+          #else\r
+            uint32_t pktLen, ndxData = 0;\r
+            /* LD2: data   -  bank 0 */\r
+            pktLen = pEp->size - bHdrLen;\r
+            if (pktLen >= dLength) { /* It's the last DMA LLI */\r
+                pDmaLL[1].pNxtDesc = (void*)NULL;\r
+                pDmaLL[1].pAddr    = (void*)pU8;\r
+                pDmaLL[1].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                                   | UDPHS_DMACONTROL_BUFF_LENGTH(dLength)\r
+                                   | UDPHS_DMACONTROL_END_B_EN\r
+                                   | UDPHS_DMACONTROL_END_BUFFIT;\r
+            }\r
+            else {\r
+                pDmaLL[1].pNxtDesc = (void*)&pDmaLL[2];\r
+                pDmaLL[1].pAddr    = (void*)pU8;\r
+                pDmaLL[1].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                                   | UDPHS_DMACONTROL_BUFF_LENGTH(pktLen)\r
+                                   | UDPHS_DMACONTROL_END_B_EN\r
+                                   | UDPHS_DMACONTROL_LDNXT_DSC;\r
+                dLength -= pktLen; ndxData += pktLen;\r
+                /* LD3: data  - bank 1 */\r
+                pktLen = pEp->size;\r
+                if (pktLen >= dLength) { /* It's the last */\r
+                    pDmaLL[1].pNxtDesc = (void*) NULL;\r
+                    pDmaLL[1].pAddr    = (void*)&pU8[ndxData];\r
+                    pDmaLL[1].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                                       | UDPHS_DMACONTROL_BUFF_LENGTH(dLength)\r
+                                       | UDPHS_DMACONTROL_END_B_EN\r
+                                       | UDPHS_DMACONTROL_END_BUFFIT;\r
+                }\r
+                else {\r
+                    pDmaLL[2].pNxtDesc = (void*)&pDmaLL[3];\r
+                    pDmaLL[2].pAddr    = (void*)&pU8[ndxData];\r
+                    pDmaLL[2].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                                       | UDPHS_DMACONTROL_BUFF_LENGTH(pktLen)\r
+                                       | UDPHS_DMACONTROL_END_B_EN\r
+                                       | UDPHS_DMACONTROL_LDNXT_DSC;\r
+                    dLength -= pktLen; ndxData += pktLen;\r
+                    /* LD4: data  - bank 2 */\r
+                    pDmaLL[3].pNxtDesc = (void*) NULL;\r
+                    pDmaLL[3].pAddr    = (void*)&pU8[ndxData];\r
+                    pDmaLL[3].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                                       | UDPHS_DMACONTROL_BUFF_LENGTH(dLength)\r
+                                       | UDPHS_DMACONTROL_END_B_EN\r
+                                       | UDPHS_DMACONTROL_END_BUFFIT;\r
+                }\r
+            }\r
+          #endif\r
+        }\r
+        else { /* Normal, fill all data */\r
+            /* LD2: data   -  load to fifo with interrupt */\r
+            dLength = pXfr->buffered - bHdrLen;\r
+            pDmaLL[1].pNxtDesc = (void*)NULL;\r
+            pDmaLL[1].pAddr    = (void*)pData;\r
+            pDmaLL[1].dwCtrl   = UDPHS_DMACONTROL_CHANN_ENB\r
+                               | UDPHS_DMACONTROL_BUFF_LENGTH(dLength)\r
+                               | UDPHS_DMACONTROL_END_B_EN\r
+                               | UDPHS_DMACONTROL_END_BUFFIT;\r
+        }\r
+        /* Interrupt enable */\r
+        pUdp->UDPHS_IEN |= (1 << SHIFT_DMA << bEndpoint);\r
+        /* Start transfer with LLI */\r
+        pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMANXTDSC  = (uint32_t)pDmaLL;\r
+        pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMACONTROL = 0;\r
+        pUdp->UDPHS_DMA[bEndpoint].UDPHS_DMACONTROL = UDPHS_DMACONTROL_LDNXT_DSC;\r
+        return USBD_STATUS_SUCCESS;\r
+    }\r
+#endif\r
+    \r
+    /* Enable IT */\r
+    pUdp->UDPHS_IEN |= ( UDPHS_IEN_EPT_0 << bEndpoint );\r
+    pHwEp->UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_TXRDY;\r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+\r
+/**\r
+ * Reads incoming data on an USB endpoint This methods sets the transfer\r
+ * descriptor and activate the endpoint interrupt. The actual transfer is\r
+ * then carried out by the endpoint interrupt handler. The Read operation\r
+ * finishes either when the buffer is full, or a short packet (inferior to\r
+ * endpoint maximum  size) is received.\r
+ *\r
+ * *The buffer must be kept allocated until the transfer is finished*.\r
+ * \param bEndpoint Endpoint number.\r
+ * \param pData Pointer to a data buffer.\r
+ * \param dLength Size of the data buffer in bytes.\r
+ * \return USBD_STATUS_SUCCESS if the read operation has been started;\r
+ *         otherwise, the corresponding error code.\r
+ */\r
+uint8_t USBD_HAL_Read(uint8_t    bEndpoint,\r
+                      void       *pData,\r
+                      uint32_t   dLength)\r
+{\r
+    if (endpoints[bEndpoint].transfer.transHdr.transType)\r
+        return USBD_STATUS_SW_NOT_SUPPORTED;\r
+    else\r
+        return UDPHS_Read(bEndpoint, pData, dLength);\r
+}\r
+\r
+/**\r
+ *  \brief Enable Pull-up, connect.\r
+ *\r
+ *  -# Enable HW access if needed\r
+ *  -# Enable Pull-Up\r
+ *  -# Disable HW access if needed\r
+ */\r
+void USBD_HAL_Connect(void)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+\r
+    uint8_t dis = UDPHS_EnablePeripheralClock();\r
+    pUdp->UDPHS_CTRL |= UDPHS_CTRL_PULLD_DIS;\r
+    pUdp->UDPHS_CTRL &= ~(uint32_t)UDPHS_CTRL_DETACH;\r
+    if (dis) UDPHS_DisablePeripheralClock();\r
+}\r
+\r
+/**\r
+ *  \brief Disable Pull-up, disconnect.\r
+ *\r
+ *  -# Enable HW access if needed\r
+ *  -# Disable PULL-Up\r
+ *  -# Disable HW access if needed\r
+ */\r
+void USBD_HAL_Disconnect(void)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+\r
+    uint8_t dis = UDPHS_EnablePeripheralClock();\r
+    pUdp->UDPHS_CTRL |= UDPHS_CTRL_DETACH;\r
+    pUdp->UDPHS_CTRL &= ~(uint32_t)UDPHS_CTRL_PULLD_DIS;\r
+    if (dis) UDPHS_DisablePeripheralClock();\r
+}\r
+\r
+/**\r
+ * Starts a remote wake-up procedure.\r
+ */\r
+void USBD_HAL_RemoteWakeUp(void)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+\r
+    UDPHS_EnablePeripheralClock();\r
+    UDPHS_EnableUsbClock();\r
+\r
+    TRACE_INFO_WP("RWUp ");\r
+\r
+    /* Activates a remote wakeup (edge on ESR), then clear ESR */\r
+    pUdp->UDPHS_CTRL |= UDPHS_CTRL_REWAKEUP;\r
+    while(pUdp->UDPHS_CTRL & UDPHS_CTRL_REWAKEUP)\r
+    {\r
+        TRACE_DEBUG_WP("w");\r
+    }\r
+    UDPHS_EnableBIAS();\r
+}\r
+\r
+/**\r
+ * Sets the device address to the given value.\r
+ * \param address New device address.\r
+ */\r
+void USBD_HAL_SetAddress(uint8_t address)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+\r
+    if (address)\r
+    {\r
+        pUdp->UDPHS_CTRL &= ~(uint32_t)UDPHS_CTRL_DEV_ADDR_Msk;\r
+        pUdp->UDPHS_CTRL |= address | UDPHS_CTRL_FADDR_EN;\r
+    }\r
+    else\r
+    {\r
+        pUdp->UDPHS_CTRL &= ~(uint32_t)UDPHS_CTRL_FADDR_EN;\r
+    }\r
+}\r
+\r
+/**\r
+ * Sets the current device configuration.\r
+ * \param cfgnum - Configuration number to set.\r
+ */\r
+void USBD_HAL_SetConfiguration(uint8_t cfgnum)\r
+{\r
+    /* Nothing to do now */\r
+    cfgnum = cfgnum;\r
+}\r
+\r
+/**\r
+ * Initializes the USB HW Access driver.\r
+ */\r
+void USBD_HAL_Init(void)\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+    UdphsEpt *pEpt;\r
+    UdphsDma *pDma;\r
+    uint32_t i;\r
+#ifdef DMA\r
+    /* DMA Link list should be 16-bytes aligned */\r
+    if ((uint32_t)dmaLL & 0xFFFFFFF0)\r
+        pDmaLL = (UdphsDmaDescriptor*)((uint32_t)&dmaLL[1] & 0xFFFFFFF0);\r
+    else\r
+        pDmaLL = (UdphsDmaDescriptor*)((uint32_t)&dmaLL[0]);\r
+#endif\r
+    /* Must before USB & TXVC access! */\r
+    UDPHS_EnablePeripheralClock();\r
+\r
+    /* Reset & disable endpoints */\r
+    USBD_HAL_ResetEPs(0xFFFFFFFF, USBD_STATUS_RESET, 0);\r
+\r
+    /* Configure the pull-up on D+ and disconnect it */\r
+    pUdp->UDPHS_CTRL |= UDPHS_CTRL_DETACH;\r
+    pUdp->UDPHS_CTRL |= UDPHS_CTRL_PULLD_DIS;\r
+\r
+    /* Reset IP */\r
+    pUdp->UDPHS_CTRL &= ~(uint32_t)UDPHS_CTRL_EN_UDPHS;\r
+    pUdp->UDPHS_CTRL |= UDPHS_CTRL_EN_UDPHS;\r
+\r
+    /* (XCHQ[2010.1.21], IP recomendation, setup clock after reset IP) */\r
+    UDPHS_EnableUsbClock();\r
+\r
+    /* Initialize DMA */\r
+    for (i = 1; i < 7; i ++)\r
+    {\r
+        pEpt = &pUdp->UDPHS_EPT[i];\r
+        pDma = &pUdp->UDPHS_DMA[i];\r
+        /* DMA stop */\r
+        pDma->UDPHS_DMACONTROL = 0;\r
+        /* Disable endpoint */\r
+        pEpt->UDPHS_EPTCTLDIS = (uint32_t)UDPHS_EPTCTLDIS_SHRT_PCKT\r
+                              | UDPHS_EPTCTLDIS_BUSY_BANK\r
+                              | UDPHS_EPTCTLDIS_NAK_OUT\r
+                              | UDPHS_EPTCTLDIS_NAK_IN\r
+                              | UDPHS_EPTCTLDIS_STALL_SNT\r
+                              | UDPHS_EPTCTLDIS_RX_SETUP\r
+                              | UDPHS_EPTCTLDIS_TXRDY\r
+                              | UDPHS_EPTCTLDIS_TX_COMPLT\r
+                              | UDPHS_EPTCTLDIS_RXRDY_TXKL\r
+                              | UDPHS_EPTCTLDIS_ERR_OVFLW\r
+                              | UDPHS_EPTCTLDIS_MDATA_RX\r
+                              | UDPHS_EPTCTLDIS_DATAX_RX\r
+                              | UDPHS_EPTCTLDIS_NYET_DIS\r
+                              | UDPHS_EPTCTLDIS_INTDIS_DMA\r
+                              | UDPHS_EPTCTLDIS_AUTO_VALID\r
+                              | UDPHS_EPTCTLDIS_EPT_DISABL\r
+                              ;\r
+        /* Clear status endpoint */\r
+        pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_TOGGLESQ\r
+                              | UDPHS_EPTCLRSTA_FRCESTALL\r
+                              | UDPHS_EPTCLRSTA_RXRDY_TXKL\r
+                              | UDPHS_EPTCLRSTA_TX_COMPLT\r
+                              | UDPHS_EPTCLRSTA_RX_SETUP\r
+                              | UDPHS_EPTCLRSTA_STALL_SNT\r
+                              | UDPHS_EPTCLRSTA_NAK_IN\r
+                              | UDPHS_EPTCLRSTA_NAK_OUT\r
+                              ;\r
+        /* Reset endpoint config */\r
+        pEpt->UDPHS_EPTCTLENB = 0;\r
+        /* Reset DMA channel (Buffer count and Control field) */\r
+        pDma->UDPHS_DMACONTROL = UDPHS_DMACONTROL_LDNXT_DSC;\r
+        /* Reset DMA channel */\r
+        pDma->UDPHS_DMACONTROL = 0;\r
+        /* Clear DMA channel status (read to clear) */\r
+        pDma->UDPHS_DMASTATUS = pDma->UDPHS_DMASTATUS;\r
+    }\r
+\r
+    /* Force Full-Speed */\r
+    pUdp->UDPHS_TST = forceUsbFS ? UDPHS_TST_SPEED_CFG_FULL_SPEED : 0;\r
+\r
+    pUdp->UDPHS_IEN = 0;\r
+    pUdp->UDPHS_CLRINT = UDPHS_CLRINT_UPSTR_RES\r
+                       | UDPHS_CLRINT_ENDOFRSM\r
+                       | UDPHS_CLRINT_WAKE_UP\r
+                       | UDPHS_CLRINT_ENDRESET\r
+                       | UDPHS_CLRINT_INT_SOF\r
+                       | UDPHS_CLRINT_MICRO_SOF\r
+                       | UDPHS_CLRINT_DET_SUSPD\r
+                       ;\r
+\r
+    /* Enable interrupts */\r
+    pUdp->UDPHS_IEN = UDPHS_IEN_ENDOFRSM\r
+                    | UDPHS_IEN_WAKE_UP\r
+                    | UDPHS_IEN_DET_SUSPD;\r
+\r
+    /* Disable USB clocks */\r
+    UDPHS_DisableUsbClock();\r
+}\r
+\r
+/**\r
+ * Causes the given endpoint to acknowledge the next packet it receives\r
+ * with a STALL handshake except setup request.\r
+ * \param bEP Endpoint number.\r
+ * \return USBD_STATUS_SUCCESS or USBD_STATUS_LOCKED.\r
+ */\r
+uint8_t USBD_HAL_Stall(uint8_t bEP)\r
+{\r
+    Udphs    *pUdp = UDPHS;\r
+    UdphsEpt *pEpt = &pUdp->UDPHS_EPT[bEP];\r
+\r
+    Endpoint *pEndpoint = &(endpoints[bEP]);\r
+\r
+    /* Check that endpoint is in Idle state */\r
+    if (pEndpoint->state != UDPHS_ENDPOINT_IDLE)\r
+    {\r
+        TRACE_WARNING("UDP_Stall: EP%d locked\n\r", bEP);\r
+        return USBD_STATUS_LOCKED;\r
+    }\r
+    /* STALL endpoint */\r
+    pEpt->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_FRCESTALL;\r
+\r
+    TRACE_DEBUG_WP("Stall%d ", bEP);\r
+    return USBD_STATUS_SUCCESS;\r
+}\r
+\r
+/**\r
+ * Sets/Clear/Get the HALT state on the endpoint.\r
+ * In HALT state, the endpoint should keep stalling any packet.\r
+ * \param bEndpoint Endpoint number.\r
+ * \param ctl       Control code CLR/HALT/READ.\r
+ *                  0: Clear HALT state;\r
+ *                  1: Set HALT state;\r
+ *                  .: Return HALT status.\r
+ * \return USBD_STATUS_INVALID_PARAMETER if endpoint not exist,\r
+ *         otherwise endpoint halt status.\r
+ */\r
+uint8_t USBD_HAL_Halt(uint8_t bEndpoint, uint8_t ctl)\r
+{\r
+    Udphs    *pUdp = UDPHS;\r
+    UdphsEpt *pEpt = &pUdp->UDPHS_EPT[bEndpoint];\r
+\r
+    Endpoint *pEndpoint = &(endpoints[bEndpoint]);\r
+    uint8_t status = 0;\r
+\r
+    /* SET Halt */\r
+    if (ctl == 1)\r
+    {\r
+        /* Check that endpoint is enabled and not already in Halt state */\r
+        if ((pEndpoint->state != UDPHS_ENDPOINT_DISABLED)\r
+            && (pEndpoint->state != UDPHS_ENDPOINT_HALTED))\r
+        {\r
+\r
+            TRACE_DEBUG_WP("Halt%d ", bEndpoint);\r
+\r
+            /* Abort the current transfer if necessary */\r
+            UDPHS_EndOfTransfer(bEndpoint, USBD_STATUS_ABORTED);\r
+\r
+            /* Put endpoint into Halt state */\r
+            pEndpoint->state = UDPHS_ENDPOINT_HALTED;\r
+            pEpt->UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_FRCESTALL;\r
+\r
+          #ifdef DMA\r
+            if (CHIP_USB_ENDPOINTS_DMA(bEndpoint))\r
+            {\r
+                /* Enable the endpoint DMA interrupt */\r
+                pUdp->UDPHS_IEN |= ( 1 << SHIFT_DMA << bEndpoint );\r
+            }\r
+            else\r
+            {\r
+                /* Enable the endpoint interrupt */\r
+                pUdp->UDPHS_IEN |= ( UDPHS_IEN_EPT_0 << bEndpoint );\r
+            }\r
+          #else\r
+            /* Enable the endpoint interrupt */\r
+            pUdp->UDPHS_IEN |= ( UDPHS_IEN_EPT_0 << bEndpoint );\r
+          #endif\r
+        }\r
+    }\r
+    /* CLEAR Halt */\r
+    else if (ctl == 0)\r
+    {\r
+        /* Check if the endpoint is halted */\r
+        if (pEndpoint->state == UDPHS_ENDPOINT_HALTED)\r
+        {\r
+\r
+            TRACE_DEBUG_WP("Unhalt%d ", bEndpoint);\r
+\r
+            /* Return endpoint to Idle state */\r
+            pEndpoint->state = UDPHS_ENDPOINT_IDLE;\r
+\r
+            /* Clear FORCESTALL flag */\r
+            pEpt->UDPHS_EPTCLRSTA = UDPHS_EPTCLRSTA_TOGGLESQ\r
+                                  | UDPHS_EPTCLRSTA_FRCESTALL;\r
+\r
+            /* Reset Endpoint Fifos */\r
+            pUdp->UDPHS_EPTRST = (1 << bEndpoint);\r
+        }\r
+    }\r
+\r
+    /* Return Halt status */\r
+    if (pEndpoint->state == UDPHS_ENDPOINT_HALTED)\r
+    {\r
+        status = 1;\r
+    }\r
+    return( status );\r
+}\r
+\r
+/**\r
+ * Indicates if the device is running in high or full-speed. Always returns 0\r
+ * since UDP does not support high-speed mode.\r
+ */\r
+uint8_t USBD_HAL_IsHighSpeed(void)\r
+{\r
+    Udphs    *pUdp = UDPHS;\r
+    return (pUdp->UDPHS_INTSTA & UDPHS_INTSTA_SPEED);\r
+}\r
+\r
+/**\r
+ * Suspend USB Device HW Interface\r
+ *\r
+ * -# Disable transceiver\r
+ * -# Disable USB Clock\r
+ * -# Disable USB Peripheral\r
+ */\r
+void USBD_HAL_Suspend(void)\r
+{\r
+    /* The device enters the Suspended state */\r
+    UDPHS_DisableBIAS();\r
+    UDPHS_DisableUsbClock();\r
+    UDPHS_DisablePeripheralClock();\r
+}\r
+\r
+/**\r
+ * Activate USB Device HW Interface\r
+ * -# Enable USB Peripheral\r
+ * -# Enable USB Clock\r
+ * -# Enable transceiver\r
+ */\r
+void USBD_HAL_Activate(void)\r
+{\r
+    UDPHS_EnablePeripheralClock();\r
+    UDPHS_EnableUsbClock();\r
+    UDPHS_EnableBIAS();\r
+}\r
+\r
+/**\r
+ * Certification test for High Speed device.\r
+ * \param bIndex Test to be done\r
+ */\r
+void USBD_HAL_Test( uint8_t bIndex )\r
+{\r
+    Udphs *pUdp = UDPHS;\r
+    uint8_t      *pFifo;\r
+    uint32_t      i;\r
+\r
+    /* remove suspend for TEST */\r
+    pUdp->UDPHS_IEN &= ~UDPHS_IEN_DET_SUSPD;\r
+    /* force High Speed (remove suspend) */\r
+    pUdp->UDPHS_TST |= UDPHS_TST_SPEED_CFG_HIGH_SPEED;\r
+\r
+    switch( bIndex ) {\r
+\r
+        case USBFeatureRequest_TESTPACKET:\r
+            TRACE_DEBUG_WP("TEST_PACKET ");\r
+\r
+            pUdp->UDPHS_DMA[1].UDPHS_DMACONTROL = 0;\r
+            pUdp->UDPHS_DMA[2].UDPHS_DMACONTROL = 0;\r
+\r
+            /* Configure endpoint 2, 64 bytes, direction IN, type BULK, 1 bank */\r
+            pUdp->UDPHS_EPT[2].UDPHS_EPTCFG = UDPHS_EPTCFG_EPT_SIZE_64\r
+                                            | UDPHS_EPTCFG_EPT_DIR\r
+                                            | UDPHS_EPTCFG_EPT_TYPE_BULK\r
+                                            | UDPHS_EPTCFG_BK_NUMBER_1;\r
+            while( (pUdp->UDPHS_EPT[2].UDPHS_EPTCFG & UDPHS_EPTCFG_EPT_MAPD) != UDPHS_EPTCFG_EPT_MAPD );\r
+            pUdp->UDPHS_EPT[2].UDPHS_EPTCTLENB = UDPHS_EPTCTLENB_EPT_ENABL;\r
+\r
+            /* Write FIFO */\r
+            pFifo = (uint8_t*)((uint32_t *)(UDPHS_RAM_ADDR) + (EPT_VIRTUAL_SIZE * 2));\r
+            for( i=0; i<sizeof(test_packet_buffer); i++) {\r
+                pFifo[i] = test_packet_buffer[i];\r
+            }\r
+            /* Tst PACKET */\r
+            pUdp->UDPHS_TST |= UDPHS_TST_TST_PKT;\r
+            /* Send packet */\r
+            pUdp->UDPHS_EPT[2].UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_TXRDY;\r
+            break;\r
+\r
+        case USBFeatureRequest_TESTJ:\r
+            TRACE_DEBUG_WP("TEST_J ");\r
+            pUdp->UDPHS_TST = UDPHS_TST_TST_J;\r
+            break;\r
+\r
+        case USBFeatureRequest_TESTK:\r
+            TRACE_DEBUG_WP("TEST_K ");\r
+            pUdp->UDPHS_TST = UDPHS_TST_TST_K;\r
+            break;\r
+\r
+        case USBFeatureRequest_TESTSE0NAK:\r
+            TRACE_DEBUG_WP("TEST_SEO_NAK ");\r
+            pUdp->UDPHS_IEN = 0;  // for test\r
+            break;\r
+\r
+        case USBFeatureRequest_TESTSENDZLP:\r
+            //while( 0 != (pUdp->UDPHS_EPT[0].UDPHS_EPTSTA & UDPHS_EPTSETSTA_TXRDY ) ) {}\r
+            pUdp->UDPHS_EPT[0].UDPHS_EPTSETSTA = UDPHS_EPTSETSTA_TXRDY;\r
+            //while( 0 != (pUdp->UDPHS_EPT[0].UDPHS_EPTSTA & UDPHS_EPTSETSTA_TXRDY ) ) {}\r
+            TRACE_DEBUG_WP("SEND_ZLP ");\r
+            break;\r
+    }\r
+    TRACE_DEBUG_WP("\n\r");\r
+}\r
+\r
+extern void USBD_HAL_ForceFs(void)\r
+{\r
+   forceUsbFS = 1;\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/adc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/adc.c
new file mode 100644 (file)
index 0000000..41b8aec
--- /dev/null
@@ -0,0 +1,644 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup adc_module Working with ADC\r
+ * \ingroup peripherals_module\r
+ * The ADC driver provides the interface to configure and use the ADC peripheral.\r
+ * \n\r
+ *\r
+ * It converts the analog input to digital format. The converted result could be\r
+ * 12bit or 10bit. The ADC supports up to 16 analog lines.\r
+ *\r
+ * To Enable a ADC conversion,the user has to follow these few steps:\r
+ * <ul>\r
+ * <li> Select an appropriate reference voltage on ADVREF   </li>\r
+ * <li> Configure the ADC according to its requirements and special needs,which\r
+ * could be  broken down into several parts:\r
+ * -#   Select the resolution by setting or clearing ADC_MR_LOWRES bit in\r
+ *      ADC_MR (Mode Register)\r
+ * -#   Set ADC clock by setting ADC_MR_PRESCAL bits in ADC_MR, the clock is\r
+ *      calculated with ADCClock = MCK / ( (PRESCAL+1) * 2 )\r
+ * -#   Set Startup Time,Tracking Clock cycles and Transfer Clock respectively\r
+ *      in ADC_MR.\r
+ </li>\r
+ * <li> Start conversion by setting ADC_CR_START in ADC_CR. </li>\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the ADC section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref adc.c\n\r
+ * \ref adc.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Analog-to-Digital Converter (ADC).\r
+ *\r
+ */\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/** Current working clock */\r
+static uint32_t dwAdcClock = 0;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Initialize the ADC controller\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwID ADC Index\r
+ */\r
+extern void ADC_Initialize( Adc* pAdc, uint32_t dwID )\r
+{\r
+    /* Enable peripheral clock*/\r
+    PMC_EnablePeripheral(dwID);\r
+\r
+    /*  Reset the controller */\r
+    pAdc->ADC_CR = ADC_CR_SWRST;\r
+\r
+    /* Reset Mode Register */\r
+    pAdc->ADC_MR = 0;\r
+\r
+}\r
+\r
+/**\r
+ * \brief Set ADC clock.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwClk Desired ADC clock frequency.\r
+ * \param dwMck Current MCK (Hz)\r
+ *\r
+ * \return ADC clock\r
+ */\r
+//dwAdcClock = ADC_SetClock( ADC, 2, dwMaxAdcClock ) ;\r
+\r
+extern uint32_t ADC_SetClock( Adc* pAdc, uint32_t dwClk, uint32_t dwMck )\r
+{ \r
+    uint32_t dwPres, dwMr;\r
+    /* Formula for PRESCAL is:\r
+       ADCClock = MCK / ( (PRESCAL+1) * 2 )\r
+       PRESCAL = (MCK / (2 * ADCCLK)) + 1\r
+       First, we do the division, multiplied by 10 to get higher precision\r
+       If the last digit is not zero, we round up to avoid generating a higher\r
+       than required frequency. */\r
+    dwPres = (dwMck * 5) / dwClk;\r
+    if (dwPres % 10) dwPres = dwPres / 10;\r
+    else\r
+    {\r
+        if (dwPres == 0) return 0;\r
+        dwPres = dwPres / 10 - 1;\r
+    }\r
+\r
+    dwMr = ADC_MR_PRESCAL(dwPres);\r
+    if (dwMr == 0) return 0;\r
+\r
+    dwMr |= (pAdc->ADC_MR & ~ADC_MR_PRESCAL_Msk);\r
+    pAdc->ADC_MR = dwMr;\r
+\r
+    dwAdcClock = dwMck / (dwPres + 1) / 2;\r
+    //dwAdcClock = dwAdcClock / 1000 * 1000;\r
+    return dwAdcClock;\r
+}\r
+\r
+/**\r
+ * \brief Set ADC timing.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwStartup startup value\r
+ * \param dwTracking tracking value\r
+ * \param dwSettling settling value\r
+ */\r
+extern void ADC_SetTiming( Adc* pAdc, uint32_t dwStartup, uint32_t dwTracking, uint32_t dwSettling )\r
+{\r
+    uint32_t dwMr;\r
+\r
+    dwMr = pAdc->ADC_MR;\r
+    dwMr &= (~ADC_MR_STARTUP_Msk) & (~ADC_MR_TRACKTIM_Msk);\r
+\r
+    /* Formula:\r
+     *     Startup  Time = startup value / ADCClock\r
+     *     Transfer Time = (TRANSFER * 2 + 3) / ADCClock\r
+     *     Tracking Time = (TRACKTIM + 1) / ADCClock\r
+     *     Settling Time = settling value / ADCClock\r
+     */\r
+    dwMr |= dwStartup | dwTracking | dwSettling;\r
+    pAdc->ADC_MR |= dwMr;\r
+}\r
+\r
+/**\r
+ * \brief Set ADC trigger.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwTrgSel Trigger selection\r
+ */\r
+extern void ADC_SetTrigger( Adc* pAdc, uint32_t dwTrgSel )\r
+{\r
+    uint32_t dwMr;\r
+\r
+    dwMr = pAdc->ADC_MR;\r
+    dwMr &= ~ADC_MR_TRGSEL_Msk;\r
+    dwMr |= dwTrgSel;\r
+    pAdc->ADC_MR |= dwMr;\r
+}\r
+\r
+/**\r
+ * Sets the trigger mode to following:\r
+ * - \ref ADC_TRGR_TRGMOD_NO_TRIGGER\r
+ * - \ref ADC_TRGR_TRGMOD_EX_TRIG_RISE\r
+ * - \ref ADC_TRGR_TRGMOD_EX_TRIG_FALL\r
+ * - \ref ADC_TRGR_TRGMOD_EX_TRIG_ANY\r
+ * - \ref ADC_TRGR_TRGMOD_PEN_TIRG\r
+ * - \ref ADC_TRGR_TRGMOD_PERID_TRIG\r
+ * - \ref ADC_TRGR_TRGMOD_CONTINUOUS\r
+ * \param pAdc   Pointer to an Adc instance.\r
+ * \param dwMode Trigger mode.\r
+ */\r
+void ADC_SetTriggerMode(Adc *pAdc, uint32_t dwMode)\r
+{\r
+    uint32_t dwTrgr = pAdc->ADC_TRGR & ~ADC_TRGR_TRGMOD_Msk;\r
+    pAdc->ADC_TRGR = dwTrgr | dwMode;\r
+}\r
+\r
+/**\r
+ * \brief Enable/Disable low resolution.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param bEnDis Enable/Disable low resolution.\r
+ */\r
+extern void ADC_SetLowResolution( Adc* pAdc, uint32_t bEnDis )\r
+{\r
+    if ( bEnDis )\r
+    {\r
+        pAdc->ADC_MR |= ADC_MR_LOWRES;\r
+    }\r
+    else\r
+    {\r
+        pAdc->ADC_MR &= ~ADC_MR_LOWRES;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Enable/Disable sleep mode.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param bEnDis Enable/Disable sleep mode.\r
+ */\r
+extern void ADC_SetSleepMode( Adc *pAdc, uint8_t bEnDis )\r
+{\r
+    if ( bEnDis )\r
+    {\r
+        pAdc->ADC_MR |=  ADC_MR_SLEEP;\r
+    }\r
+    else\r
+    {\r
+        pAdc->ADC_MR &= ~ADC_MR_SLEEP;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Enable/Disable seqnence mode.\r
+ *\r
+ * \param pAdc  Pointer to an Adc instance.\r
+ * \param bEnDis Enable/Disable seqnence mode.\r
+ */\r
+extern void ADC_SetSequenceMode( Adc *pAdc, uint8_t bEnDis )\r
+{\r
+    if ( bEnDis )\r
+    {\r
+        /* User Sequence Mode: The sequence respects what is defined in\r
+        ADC_SEQR1 and ADC_SEQR2 */\r
+        pAdc->ADC_MR |=  ADC_MR_USEQ;\r
+    }\r
+    else\r
+    {\r
+        /* Normal Mode: The controller converts channels in a simple numeric order. */\r
+        pAdc->ADC_MR &= ~ADC_MR_USEQ;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Set channel sequence.\r
+ *\r
+ * \param pAdc   Pointer to an Adc instance.\r
+ * \param dwSEQ1 Sequence 1 ~ 8  channel number.\r
+ * \param dwSEQ2 Sequence 9 ~ 16 channel number.\r
+ */\r
+extern void ADC_SetSequence( Adc *pAdc, uint32_t dwSEQ1, uint32_t dwSEQ2 )\r
+{\r
+    pAdc->ADC_SEQR1 = dwSEQ1;\r
+    pAdc->ADC_SEQR2 = dwSEQ2;\r
+}\r
+\r
+/**\r
+ * \brief Set channel sequence by given channel list.\r
+ *\r
+ * \param pAdc    Pointer to an Adc instance.\r
+ * \param ucChList Channel list.\r
+ * \param ucNumCh  Number of channels in list.\r
+ */\r
+extern void ADC_SetSequenceByList( Adc *pAdc, uint8_t ucChList[], uint8_t ucNumCh )\r
+{\r
+    uint8_t i;\r
+    uint8_t ucShift;\r
+\r
+    pAdc->ADC_SEQR1 = 0;\r
+    for (i = 0, ucShift = 0; i < 8; i ++, ucShift += 4)\r
+    {\r
+        if (i >= ucNumCh) return;\r
+        pAdc->ADC_SEQR1 |= ucChList[i] << ucShift;\r
+\r
+    }\r
+    pAdc->ADC_SEQR2 = 0;\r
+    for (ucShift = 0; i < 16; i ++, ucShift += 4)\r
+    {\r
+        if (i >= ucNumCh) return;\r
+        pAdc->ADC_SEQR2 |= ucChList[i] << ucShift;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Set "TAG" mode, show channel number in last data or not.\r
+ *\r
+ * \param pAdc   Pointer to an Adc instance.\r
+ * \param bEnDis Enable/Disable TAG value.\r
+ */\r
+extern void ADC_SetTagEnable( Adc *pAdc, uint8_t bEnDis )\r
+{\r
+    if ( bEnDis )\r
+    {\r
+        pAdc->ADC_EMR |=  ADC_EMR_TAG;\r
+    }\r
+    else\r
+    {\r
+        pAdc->ADC_EMR &= ~ADC_EMR_TAG;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Set compare channel.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwChannel channel number to be set,16 for all channels\r
+ */\r
+extern void ADC_SetCompareChannel( Adc* pAdc, uint32_t dwChannel )\r
+{\r
+    assert( dwChannel <= 16 ) ;\r
+\r
+    if ( dwChannel < 16 )\r
+    {\r
+        pAdc->ADC_EMR &= ~(ADC_EMR_CMPALL);\r
+        pAdc->ADC_EMR &= ~(ADC_EMR_CMPSEL_Msk);\r
+        pAdc->ADC_EMR |= (dwChannel << ADC_EMR_CMPSEL_Pos);\r
+    }\r
+    else\r
+    {\r
+        pAdc->ADC_EMR |= ADC_EMR_CMPALL;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Set compare mode.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwMode compare mode\r
+ */\r
+extern void ADC_SetCompareMode( Adc* pAdc, uint32_t dwMode )\r
+{\r
+    pAdc->ADC_EMR &= ~(ADC_EMR_CMPMODE_Msk);\r
+    pAdc->ADC_EMR |= (dwMode & ADC_EMR_CMPMODE_Msk);\r
+}\r
+\r
+/**\r
+ * \brief Set comparsion window.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwHi_Lo Comparison Window\r
+ */\r
+extern void ADC_SetComparisonWindow( Adc* pAdc, uint32_t dwHi_Lo )\r
+{\r
+    pAdc->ADC_CWR = dwHi_Lo ;\r
+}\r
+\r
+/**\r
+ * \brief Check if ADC configuration is right.\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwMck Board MCK (Hz)\r
+ *\r
+ * \return 0 if check ok, others if not ok.\r
+ */\r
+extern uint8_t ADC_CheckConfiguration( Adc* pAdc, uint32_t dwMck )\r
+{\r
+    uint8_t  bOk = 0;\r
+    uint32_t dwMr;\r
+    uint32_t dwPres;\r
+    uint32_t dwClock;\r
+\r
+    dwMr = pAdc->ADC_MR;\r
+\r
+    dwPres = (dwMr & ADC_MR_PRESCAL_Msk) >> ADC_MR_PRESCAL_Pos;\r
+    /* Formula: ADCClock = MCK / ( (PRESCAL+1) * 2 ) */\r
+    dwClock = dwMck / ( (dwPres + 1) * 2 );\r
+    if (dwClock > ADC_CLOCK_MAX)\r
+    {\r
+        printf("ADC clock is too high (out of specification: %d Hz)\r\n", (int)ADC_CLOCK_MAX);\r
+        bOk = 1;\r
+    }\r
+\r
+    return bOk;\r
+}\r
+\r
+/**\r
+ * \brief Return the Channel Converted Data\r
+ *\r
+ * \param pAdc Pointer to an Adc instance.\r
+ * \param dwChannel channel to get converted value\r
+ */\r
+extern uint32_t ADC_GetConvertedData( Adc* pAdc, uint32_t dwChannel )\r
+{\r
+    uint32_t dwData = 0;\r
+\r
+    assert( dwChannel < 16 ) ;\r
+\r
+    dwData = pAdc->ADC_CDR[dwChannel];\r
+\r
+    return dwData ;\r
+}\r
+\r
+\r
+/**\r
+ * Sets the ADC startup time.\r
+ * \param pAdc  Pointer to an Adc instance.\r
+ * \param dwUs  Startup time in uS.\r
+ */\r
+void ADC_SetStartupTime( Adc *pAdc, uint32_t dwUs )\r
+{\r
+    uint32_t dwStart;\r
+    uint32_t dwMr;\r
+\r
+    if (dwAdcClock == 0) return;\r
+    /* Formula for STARTUP is:\r
+       STARTUP = (time x ADCCLK) / (1000000) - 1\r
+       Division multiplied by 10 for higher precision */\r
+    \r
+    dwStart = (dwUs * dwAdcClock) / (100000);\r
+    if (dwStart % 10) dwStart /= 10;\r
+    else\r
+    {\r
+        dwStart /= 10;\r
+        if (dwStart) dwStart --;\r
+    }\r
+    if      (dwStart >  896) dwMr = ADC_MR_STARTUP_SUT960;\r
+    else if (dwStart >  832) dwMr = ADC_MR_STARTUP_SUT896;\r
+    else if (dwStart >  768) dwMr = ADC_MR_STARTUP_SUT832;\r
+    else if (dwStart >  704) dwMr = ADC_MR_STARTUP_SUT768;\r
+    else if (dwStart >  640) dwMr = ADC_MR_STARTUP_SUT704;\r
+    else if (dwStart >  576) dwMr = ADC_MR_STARTUP_SUT640;\r
+    else if (dwStart >  512) dwMr = ADC_MR_STARTUP_SUT576;\r
+    else if (dwStart >  112) dwMr = ADC_MR_STARTUP_SUT512;\r
+    else if (dwStart >   96) dwMr = ADC_MR_STARTUP_SUT112;\r
+    else if (dwStart >   80) dwMr = ADC_MR_STARTUP_SUT96;\r
+    else if (dwStart >   64) dwMr = ADC_MR_STARTUP_SUT80;\r
+    else if (dwStart >   24) dwMr = ADC_MR_STARTUP_SUT64;\r
+    else if (dwStart >   16) dwMr = ADC_MR_STARTUP_SUT24;\r
+    else if (dwStart >    8) dwMr = ADC_MR_STARTUP_SUT16;\r
+    else if (dwStart >    0) dwMr = ADC_MR_STARTUP_SUT8;\r
+    else                     dwMr = ADC_MR_STARTUP_SUT0;\r
+\r
+    dwMr |= pAdc->ADC_MR & ~ADC_MR_STARTUP_Msk;\r
+    pAdc->ADC_MR = dwMr;\r
+}\r
+\r
+\r
+/**\r
+ * Set ADC tracking time\r
+ * \param pAdc  Pointer to an Adc instance.\r
+ * \param dwNs  Tracking time in nS.\r
+ */\r
+void ADC_SetTrackingTime( Adc *pAdc, uint32_t dwNs )\r
+{\r
+    uint32_t dwShtim;\r
+    uint32_t dwMr;\r
+\r
+    if (dwAdcClock == 0) return;\r
+    /* Formula for SHTIM is:\r
+       SHTIM = (time x ADCCLK) / (1000000000) - 1\r
+       Since 1 billion is close to the maximum value for an integer, we first\r
+       divide ADCCLK by 1000 to avoid an overflow */\r
+    dwShtim = (dwNs * (dwAdcClock / 1000)) / 100000;\r
+    if (dwShtim % 10) dwShtim /= 10;\r
+    else\r
+    {\r
+        dwShtim /= 10;\r
+        if (dwShtim) dwShtim --;\r
+    }\r
+    dwMr  = ADC_MR_TRACKTIM(dwShtim);\r
+    dwMr |= pAdc->ADC_MR & ~ADC_MR_TRACKTIM_Msk;\r
+    pAdc->ADC_MR = dwMr;\r
+}\r
+\r
+\r
+/**\r
+ * Sets the trigger period.\r
+ * \param pAdc   Pointer to an Adc instance.\r
+ * \param dwPeriod Trigger period in nS.\r
+ */\r
+void ADC_SetTriggerPeriod(Adc *pAdc, uint32_t dwPeriod)\r
+{\r
+    uint32_t dwTrgper;\r
+    uint32_t dwDiv = 100000000;\r
+    uint32_t dwTrgr;\r
+    if (dwAdcClock == 0) return;\r
+    while (dwPeriod >= 10 && dwDiv >= 10)\r
+    {\r
+        dwPeriod /= 10; dwDiv /= 10;\r
+    }\r
+    dwTrgper = (dwPeriod * dwAdcClock) / dwDiv;\r
+    if (dwTrgper % 10) dwTrgper /= 10;\r
+    else\r
+    {\r
+        dwTrgper /= 10;\r
+        if (dwTrgper) dwTrgper --;\r
+    }\r
+    dwTrgr = ADC_TRGR_TRGPER(dwTrgper);\r
+    dwTrgr |= pAdc->ADC_TRGR & ~ADC_TRGR_TRGPER_Msk;\r
+    pAdc->ADC_TRGR = dwTrgr;\r
+}\r
+\r
+\r
+/**\r
+ * Start screen calibration (VDD/GND measurement)\r
+ * \param pAdc Pointer to an Adc instance.\r
+ */\r
+void ADC_TsCalibration( Adc *pAdc )\r
+{\r
+    pAdc->ADC_CR = ADC_CR_TSCALIB;\r
+}\r
+\r
+/**\r
+ * Sets the operation mode of the touch screen ADC. The mode can be:\r
+ * - \ref ADC_TSMR_TSMODE_NONE (TSADC off)\r
+ * - \ref ADC_TSMR_TSMODE_4_WIRE_NO_PM\r
+ * - \ref ADC_TSMR_TSMODE_4_WIRE (CH 0~3 used)\r
+ * - \ref ADC_TSMR_TSMODE_5_WIRE (CH 0~4 used)\r
+ * \param pADC   Pointer to an Adc instance.\r
+ * \param dwMode Desired mode\r
+ */\r
+void ADC_SetTsMode(Adc* pADC, uint32_t dwMode)\r
+{\r
+    pADC->ADC_TSMR = (pADC->ADC_TSMR & ~ADC_TSMR_TSMODE_Msk) | dwMode;\r
+}\r
+\r
+\r
+/**\r
+ * Configure extended mode register\r
+ * \param pAdc Pointer to an Adc instance.\r
+ */\r
+void ADC_ConfigureExtMode( Adc *pAdc, uint32_t dwMode )\r
+{\r
+    pAdc->ADC_EMR = dwMode;\r
+}\r
+\r
+\r
+/**\r
+ * Sets the touchscreen pan debounce time.\r
+ * \param pADC   Pointer to an Adc instance.\r
+ * \param dwTime Debounce time in nS.\r
+ */\r
+void ADC_SetTsDebounce(Adc *pADC, uint32_t dwTime)\r
+{\r
+    uint32_t dwDiv = 1000000000;\r
+    uint32_t dwClk = dwAdcClock;\r
+    uint32_t dwPenbc = 0;\r
+    uint32_t dwTarget, dwCurrent;\r
+    uint32_t dwTsmr;\r
+    if (dwTime == 0 || dwAdcClock == 0) return;\r
+    /* Divide time & ADCCLK to avoid overflows */\r
+    while ((dwDiv > 1) && ((dwTime % 10) == 0))\r
+    {\r
+        dwTime /= 10; dwDiv /= 10;\r
+    }\r
+    while ((dwDiv > 1) && ((dwClk & 10) == 0))\r
+    {\r
+        dwClk /= 10; dwDiv /= 10;\r
+    }\r
+    /* Compute PENDBC */\r
+    dwTarget = dwTime * dwClk / dwDiv;\r
+    dwCurrent = 1;\r
+    while (dwCurrent < dwTarget)\r
+    {\r
+        dwPenbc ++; dwCurrent *= 2;\r
+    }\r
+    dwTsmr = ADC_TSMR_PENDBC(dwPenbc);\r
+    if (dwTsmr == 0) return;\r
+    dwTsmr |= pADC->ADC_TSMR & ~ADC_TSMR_PENDBC_Msk;\r
+    pADC->ADC_TSMR = dwTsmr;\r
+}\r
+\r
+/**\r
+ * Enable/Disable touch screen pen detection.\r
+ * \param pADC   Pointer to an Adc instance.\r
+ * \param bEnDis If true, pen detection is enabled;\r
+ *               in normal mode otherwise.\r
+ */\r
+void ADC_SetTsPenDetect(Adc* pADC, uint8_t bEnDis)\r
+{\r
+    if (bEnDis)\r
+        pADC->ADC_TSMR |=  ADC_TSMR_PENDET;\r
+    else\r
+        pADC->ADC_TSMR &= ~ADC_TSMR_PENDET;\r
+}\r
+\r
+\r
+/**\r
+ * Sets the average of the touch screen ADC. The mode can be:\r
+ * - \ref ADC_TSMR_TSAV_NO_FILTER (No filtering)\r
+ * - \ref ADC_TSMR_TSAV_AVG2CONV (Average 2 conversions)\r
+ * - \ref ADC_TSMR_TSAV_AVG4CONV (Average 4 conversions)\r
+ * - \ref ADC_TSMR_TSAV_AVG8CONV (Average 8 conversions)\r
+ * \param pADC   Pointer to an Adc instance.\r
+ * \param dwMode Desired mode\r
+ */\r
+void ADC_SetTsAverage(Adc* pADC, uint32_t dwAvg2Conv)\r
+{\r
+    uint32_t dwMr = pADC->ADC_TSMR & ~ADC_TSMR_TSAV_Msk;\r
+    uint32_t dwTSAV = dwAvg2Conv >> ADC_TSMR_TSAV_Pos;\r
+    uint32_t dwTSFREQ = (dwMr & ADC_TSMR_TSFREQ_Msk) >> ADC_TSMR_TSFREQ_Pos;\r
+    if (dwTSAV)\r
+    {\r
+        if (dwTSAV > dwTSFREQ)\r
+        {\r
+            dwMr &= ~ADC_TSMR_TSFREQ_Msk;\r
+            dwMr |=  ADC_TSMR_TSFREQ(dwTSAV);\r
+        }\r
+    }\r
+    pADC->ADC_TSMR = dwMr | dwAvg2Conv;\r
+}\r
+\r
+/**\r
+ * Return X measurement position value.\r
+ * \param pADC   Pointer to an Adc instance.\r
+ */\r
+uint32_t ADC_GetTsXPosition(Adc *pADC)\r
+{\r
+    return pADC->ADC_XPOSR;\r
+}\r
+\r
+/**\r
+ * Return Y measurement position value.\r
+ * \param pADC   Pointer to an Adc instance.\r
+ */\r
+uint32_t ADC_GetTsYPosition(Adc *pADC)\r
+{\r
+    return pADC->ADC_YPOSR;\r
+}\r
+\r
+/**\r
+ * Return Z measurement position value.\r
+ * \param pADC   Pointer to an Adc instance.\r
+ */\r
+uint32_t ADC_GetTsPressure(Adc *pADC)\r
+{\r
+    return pADC->ADC_PRESSR;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aes.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aes.c
new file mode 100644 (file)
index 0000000..4eb7d6f
--- /dev/null
@@ -0,0 +1,274 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup aes_module Working with AES\r
+ * \ingroup peripherals_module\r
+ * The AES driver provides the interface to configure and use the AES peripheral.\r
+ * \n\r
+ *\r
+ * The Advanced Encryption Standard (AES) specifies a FIPS-approved cryptographic algorithm\r
+ * that can be used to protect electronic data. The AES algorithm is a symmetric block \r
+ * cipher that can encrypt (encipher) and decrypt (decipher) information.\r
+ * Encryption converts data to an unintelligible form called ciphertext. \r
+ * Decrypting the ciphertext converts the data back into its original form, \r
+ * called plaintext. The CIPHER bit in the AES Mode Register (AES_MR) allows selection \r
+ * between the encryption and the decryption processes. The AES is capable of using cryptographic \r
+ * keys of 128/192/256 bits to encrypt and decrypt data in blocks of 128 bits. \r
+ * This 128-bit/192-bit/256-bit key is defined in the Key Registers (AES_KEYWRx) and set by \r
+ * AES_WriteKey(). The input to the encryption processes of the CBC, CFB, and OFB modes includes,\r
+ * in addition to the plaintext, a 128-bit data block called the initialization vector (IV), \r
+ * which must be set with AES_SetVector(). \r
+ * The initialization vector is used in an initial step in the encryption of a message and \r
+ * in the corresponding decryption of the message. The Initialization Vector Registers are \r
+ * also used by the CTR mode to set the counter value.\r
+ *\r
+  * To Enable a AES encryption and decryption,the user has to follow these few steps:\r
+ * <ul>\r
+ * <li> A software triggered hardware reset of the AES interface is performed by AES_SoftReset().</li>\r
+ * <li> Configure AES algorithm mode, key mode, start mode and operation mode by AES_Configure(). </li>\r
+ * <li> Input AES data for encryption and decryption with function AES_SetInput() </li>\r
+ * <li> Set AES key with fucntion AES_WriteKey(). </li>\r
+ * <li> To start the encryption or the decryption process with AES_Start()</li>\r
+ * <li> To get the encryption or decryption reslut by AES_GetOutput() </li>\r
+ * </ul>\r
+ *\r
+ *\r
+ * For more accurate information, please look at the AES section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref aes.c\n\r
+ * \ref aes.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Advanced Encryption Standard (AES)\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Starts Manual encryption/decryption process.\r
+ */\r
+void AES_Start(void)\r
+{\r
+    AES->AES_CR = AES_CR_START;\r
+}\r
+\r
+/**\r
+ * \brief Resets the AES. A software triggered hardware reset of the AES interface is performed.\r
+ */\r
+void AES_SoftReset(void)\r
+{\r
+    AES->AES_CR = AES_CR_SWRST;\r
+}\r
+\r
+/**\r
+ * \brief Restarts the countermeasures generator to an internal pre-defined value.\r
+ */\r
+void AES_Recount(void)\r
+{\r
+    AES->AES_CR = AES_CR_LOADSEED;\r
+}\r
+\r
+/**\r
+ * \brief Configures an AES peripheral with the specified parameters.\r
+ *  \param mode  Desired value for the AES mode register (see the datasheet).\r
+ */\r
+void AES_Configure(uint32_t mode)\r
+{\r
+    AES->AES_MR = mode; \r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a AES peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void AES_EnableIt(uint32_t sources)\r
+{\r
+    AES->AES_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a AES peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void AES_DisableIt(uint32_t sources)\r
+{\r
+    AES->AES_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given AES peripheral.\r
+ * \return  AES status register.\r
+ */\r
+uint32_t AES_GetStatus(void)\r
+{\r
+    return AES->AES_ISR;\r
+}\r
+\r
+/**\r
+ * \brief Set the 128-bit/192-bit/256-bit cryptographic key used for encryption/decryption.\r
+ * \param pKey Pointer to a 16/24/32 bytes cipher key.\r
+ * \param keyLength length of key\r
+ */\r
+void AES_WriteKey(const uint32_t *pKey, uint32_t keyLength)\r
+{\r
+    AES->AES_KEYWR[0] = pKey[0];\r
+    AES->AES_KEYWR[1] = pKey[1];\r
+    AES->AES_KEYWR[2] = pKey[2];\r
+    AES->AES_KEYWR[3] = pKey[3];\r
+\r
+    if( keyLength >= 24 ) {\r
+        AES->AES_KEYWR[4] = pKey[4];\r
+        AES->AES_KEYWR[5] = pKey[5];\r
+    }\r
+    if( keyLength == 32 ) {\r
+        AES->AES_KEYWR[6] = pKey[6];\r
+        AES->AES_KEYWR[7] = pKey[7];\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Set the for 32-bit input Data allow to set the 128-bit data block used for encryption/decryption.\r
+ * \param data Pointer to the 16-bytes data to cipher/decipher.\r
+ */\r
+void AES_SetInput(uint32_t *data)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i< 4; i++)\r
+        AES->AES_IDATAR[i] = data[i];\r
+}\r
+\r
+/**\r
+ * \brief Get the four 32-bit data contain the 128-bit data block which has been encrypted/decrypted.\r
+ * \param data pointer to the word that has been encrypted/decrypted..\r
+ */\r
+void AES_GetOutput(uint32_t *data)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i< 4; i++) \r
+        data[i] = AES->AES_ODATAR[i];\r
+}\r
+\r
+/**\r
+ * \brief Set four 64-bit initialization vector data block, which is used by some\r
+ * modes of operation as an additional initial input.\r
+ * \param pVector point to the word of the initialization vector.\r
+ */\r
+void AES_SetVector(const uint32_t *pVector)\r
+{\r
+    AES->AES_IVR[0] = pVector[0];\r
+    AES->AES_IVR[1] = pVector[1];\r
+    AES->AES_IVR[2] = pVector[2];\r
+    AES->AES_IVR[3] = pVector[3];\r
+}\r
+\r
+\r
+/**\r
+ * \brief Set Length in bytes of the AAD data that is to be processed.\r
+ * \param len Length.\r
+ */\r
+void AES_SetAadLen(uint32_t len)\r
+{\r
+    AES->AES_AADLENR = len;\r
+}\r
+\r
+/**\r
+ * \brief Set Length in bytes of the Length in bytes of the \r
+ * plaintext/ciphertext (C) data that is to be processed..\r
+ * \param len Length.\r
+ */\r
+void AES_SetDataLen(uint32_t len)\r
+{\r
+    AES->AES_CLENR = len;\r
+}\r
+\r
+/**\r
+ * \brief Set The four 32-bit Hash Word registers expose the intermediate GHASH value. \r
+ * May be read to save the current GHASH value so processing can later be resumed, \r
+ * presumably on a later message fragment. modes of operation as an additional initial input.\r
+ * \param hash point to the word of the hash.\r
+ */\r
+void AES_SetGcmHash(uint32_t * hash)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i< 4; i++) \r
+        AES->AES_GHASHR[i] = hash[i];\r
+}\r
+\r
+\r
+/**\r
+ * \brief Get The four 32-bit Tag which contain the final 128-bit GCM Authentication tag \r
+ * Â¡Â°T¡± when GCM processing is complete.\r
+ * \param tag point to the word of the tag.\r
+ */\r
+void AES_GetGcmTag(uint32_t * tag)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i< 4; i++) \r
+        tag[i] = AES->AES_TAGR[i] ;\r
+}\r
+\r
+/**\r
+ * \brief Reports the current value of the 32-bit GCM counter\r
+ * \param counter Point to value of GCM counter.\r
+ */\r
+void AES_GetGcmCounter(uint32_t * counter)\r
+{\r
+    *counter = AES->AES_CTRR;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Get the four 32-bit data contain the 128-bit H value computed from the KEYW value\r
+ * \param data point to the word that has been encrypted/decrypted..\r
+ */\r
+void AES_GetGcmH(uint32_t *h)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i< 4; i++) \r
+        h[i] = AES->AES_GCMHR[i];\r
+}\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aesb.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aesb.c
new file mode 100644 (file)
index 0000000..b2f6bbf
--- /dev/null
@@ -0,0 +1,197 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup aesb_module Working with AESB\r
+ * The TWI driver provides the interface to True Random Number Generator (AESB) passes the American NIST Special Publication 800-22 and Diehard\r
+Random Tests Suites.\r
+The AESB may be used as an entropy source for seeding an NIST approved DRNG (Deterministic RNG) as required by\r
+FIPS PUB 140-2 and 140-3. use the TWI\r
+ * peripheral.\r
+ *\r
+ * \section Usage\r
+ * <ul>\r
+ * <li> Configures a TWI peripheral to operate in master mode, at the given\r
+ * frequency (in Hz) using TWI_Configure(). </li>\r
+ * <li> Sends a STOP condition on the TWI using TWI_Stop().</li>\r
+ * <li> Starts a read operation on the TWI bus with the specified slave using\r
+ * TWI_StartRead(). Data must then be read using TWI_ReadByte() whenever\r
+ * a byte is available (poll using TWI_ByteReceived()).</li>\r
+ * <li> Starts a write operation on the TWI to access the selected slave using\r
+ * TWI_StartWrite(). A byte of data must be provided to start the write;\r
+ * other bytes are written next.</li>\r
+ * <li> Sends a byte of data to one of the TWI slaves on the bus using TWI_WriteByte().\r
+ * This function must be called once before TWI_StartWrite() with the first byte of data\r
+ * to send, then it shall be called repeatedly after that to send the remaining bytes.</li>\r
+ * <li> Check if a byte has been received and can be read on the given TWI\r
+ * peripheral using TWI_ByteReceived().<\r
+ * Check if a byte has been sent using TWI_ByteSent().</li>\r
+ * <li> Check if the current transmission is complete (the STOP has been sent)\r
+ * using TWI_TransferComplete().</li>\r
+ * <li> Enables & disable the selected interrupts sources on a TWI peripheral\r
+ * using TWI_EnableIt() and TWI_DisableIt().</li>\r
+ * <li> Get current status register of the given TWI peripheral using\r
+ * TWI_GetStatus(). Get current status register of the given TWI peripheral, but\r
+ * masking interrupt sources which are not currently enabled using\r
+ * TWI_GetMaskedStatus().</li>\r
+ * </ul>\r
+ * For more accurate information, please look at the TWI section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref twi.c\n\r
+ * \ref twi.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of True Random Number Generator (AESB)\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Starts Manual encryption/decryption process.\r
+ */\r
+void AESB_Start(void)\r
+{\r
+    AESB->AESB_CR = AESB_CR_START;\r
+}\r
+\r
+/**\r
+ * \brief Resets the AESB. A software triggered hardware reset of the AESB interface is performed.\r
+ */\r
+void AESB_SoftReset(void)\r
+{\r
+    AESB->AESB_CR = AESB_CR_SWRST;\r
+}\r
+\r
+/**\r
+ * \brief Restarts the countermeasures generator to an internal pre-defined value.\r
+ */\r
+void AESB_Recount(void)\r
+{\r
+    AESB->AESB_CR = AESB_CR_LOADSEED;\r
+}\r
+\r
+/**\r
+ * \brief Configures an AESB peripheral with the specified parameters.\r
+ *  \param mode  Desired value for the AESB mode register (see the datasheet).\r
+ */\r
+void AESB_Configure(uint32_t mode)\r
+{\r
+    AESB->AESB_MR = mode; \r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a AESB peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void AESB_EnableIt(uint32_t sources)\r
+{\r
+    AESB->AESB_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a AESB peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void AESB_DisableIt(uint32_t sources)\r
+{\r
+    AESB->AESB_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given AESB peripheral.\r
+ * \return  AESB status register.\r
+ */\r
+uint32_t AESB_GetStatus(void)\r
+{\r
+    return AESB->AESB_ISR;\r
+}\r
+\r
+/**\r
+ * \brief Set the 128-bit cryptographic key used for encryption/decryption.\r
+ * \param pKey Pointer to a 16 bytes cipher key.\r
+ * \param keyLength length of key\r
+ */\r
+void AESB_WriteKey(const uint32_t *pKey)\r
+{\r
+    AESB->AESB_KEYWR[0] = pKey[0];\r
+    AESB->AESB_KEYWR[1] = pKey[1];\r
+    AESB->AESB_KEYWR[2] = pKey[2];\r
+    AESB->AESB_KEYWR[3] = pKey[3];\r
+}\r
+\r
+/**\r
+ * \brief Set the for 32-bit input Data allow to set the 128-bit data block used for encryption/decryption.\r
+ * \param data Pointer to the 16-bytes data to cipher/decipher.\r
+ */\r
+void AESB_SetInput(uint32_t *data)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i < 4; i++)\r
+        AESB->AESB_IDATAR[i] = data[i];\r
+}\r
+\r
+/**\r
+ * \brief Get the four 32-bit data contain the 128-bit data block which has been encrypted/decrypted.\r
+ * \param data pointer to the word that has been encrypted/decrypted..\r
+ */\r
+void AESB_GetOutput(uint32_t *data)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i < 4; i++) \r
+        data[i] = AESB->AESB_ODATAR[i];\r
+}\r
+\r
+/**\r
+ * \brief Set four 64-bit initialization vector data block, which is used by some\r
+ * modes of operation as an additional initial input.\r
+ * \param pVector point to the word of the initialization vector.\r
+ */\r
+void AESB_SetVector(const uint32_t *pVector)\r
+{\r
+    AESB->AESB_IVR[0] = pVector[0];\r
+    AESB->AESB_IVR[1] = pVector[1];\r
+    AESB->AESB_IVR[2] = pVector[2];\r
+    AESB->AESB_IVR[3] = pVector[3];\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aic.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/aic.c
new file mode 100644 (file)
index 0000000..ea06833
--- /dev/null
@@ -0,0 +1,168 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup aic_module\r
+ *\r
+ * The Advanced Interrupt Controller (AIC) is an 8-level priority, individually \r
+ * maskable, vectored interrupt controller, providing handling of up to thirty-two interrupt sources. \r
+ *\r
+ * \section Usage\r
+ * <ul>\r
+ * <li> Each interrupt source can be enabled or disabled by using the IRQ_EnableIT() and IRQ_DisableIT()</li>\r
+ * <li> Configure the AIC interrupt to its requirements and special needs,such as priorty \r
+ * level, source type and configure the addresses of the corresponding handler for each interrupt source\r
+ * could be setting by  IRQ_ConfigureIT(). </li>\r
+ * <li> Start conversion by setting ADC_CR_START in ADC_CR. </li>\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the AIC section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref aic.c\n\r
+ * \ref irq.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+ /**\r
+ * \file\r
+ *\r
+ * Implementation of Advanced Interrupt Controller (AIC) controller.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Enables interrupts coming from the given AIC and (unique) source (ID_xxx).\r
+ *\r
+ * \param aic  AIC instance. \r
+ * \param source  Interrupt source to enable.\r
+ */\r
+static void _aic_EnableIT(Aic *aic, uint32_t source)\r
+{\r
+    aic->AIC_SSR  = AIC_SSR_INTSEL(source);\r
+    aic->AIC_IECR = AIC_IECR_INTEN;\r
+}\r
+\r
+/**\r
+ * \brief Disables interrupts coming from the given AIC and (unique) source (ID_xxx).\r
+ *\r
+ * \param aic  AIC instance.\r
+ * \param source  Interrupt source to disable.\r
+ */\r
+static void _aic_DisableIT(Aic *aic, uint32_t source)\r
+{\r
+    aic->AIC_SSR  =  AIC_SSR_INTSEL(source);\r
+    aic->AIC_IDCR = AIC_IDCR_INTD ;\r
+}\r
+\r
+/**\r
+ * \brief return if the giving peripheral is H64 Matrix\r
+ *\r
+ * \param pid  peripheral ID\r
+ */\r
+static uint8_t _isH64Matrix(uint32_t pid){\r
+    if ((pid == ID_ARM) || \r
+        (pid == ID_XDMAC0) ||\r
+        //(pid == ID_PKCC) ||\r
+        (pid == ID_AESB) ||\r
+        (pid == ID_MPDDRC) ||\r
+        (pid == ID_VDEC) ||\r
+        (pid == ID_XDMAC1) ||\r
+        (pid == ID_LCDC) ||\r
+        (pid == ID_ISI) ||\r
+        (pid == ID_L2CC)) \r
+    {\r
+        return 1;\r
+    } else {\r
+        return 0;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Enables interrupts coming from the given (unique) source (ID_xxx).\r
+ *\r
+ * \param source  Interrupt source to enable.\r
+ */\r
+void AIC_EnableIT( uint32_t source)\r
+{\r
+    volatile unsigned int * pAicFuse = (volatile unsigned int *) REG_SFR_AICREDIR;\r
+    \r
+    if(*pAicFuse)\r
+    {\r
+      _aic_EnableIT(AIC, source);\r
+    }\r
+    else\r
+    {\r
+      if (_isH64Matrix(source)) {\r
+          if ( MATRIX0->MATRIX_SPSELR[source / 32] & (1 << (source % 32)))\r
+              _aic_EnableIT(AIC, source);\r
+          else \r
+              _aic_EnableIT(SAIC, source);\r
+      } else {\r
+          if ( MATRIX1->MATRIX_SPSELR[source / 32] & (1 << (source % 32)))\r
+              _aic_EnableIT(AIC, source);\r
+          else \r
+              _aic_EnableIT(SAIC, source);\r
+      }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Disables interrupts coming from the given (unique) source (ID_xxx).\r
+ *\r
+ * \param source  Interrupt source to disable.\r
+ */\r
+void AIC_DisableIT(uint32_t source)\r
+{\r
+    if (_isH64Matrix(source)) {\r
+        if ( MATRIX0->MATRIX_SPSELR[source / 32] & (1 << (source % 32)))\r
+            _aic_DisableIT(AIC, source);\r
+        else \r
+            _aic_DisableIT(SAIC, source);\r
+    } else {\r
+        if ( MATRIX1->MATRIX_SPSELR[source / 32] & (1 << (source % 32)))\r
+            _aic_DisableIT(AIC, source);\r
+        else \r
+            _aic_DisableIT(SAIC, source);\r
+    }\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/async.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/async.c
new file mode 100644 (file)
index 0000000..2b52e83
--- /dev/null
@@ -0,0 +1,53 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Provide a routine for asynchronos transfer.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Global functions\r
+ *----------------------------------------------------------------------------*/\r
+ /**\r
+ * \brief Returns 1 if the given transfer has ended; otherwise returns 0.\r
+ * \param pAsync  Pointer to an Async instance.\r
+ */\r
+uint32_t ASYNC_IsFinished( Async* pAsync )\r
+{\r
+    return (pAsync->status != ASYNC_STATUS_PENDING) ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/can.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/can.c
new file mode 100644 (file)
index 0000000..0ef9d5c
--- /dev/null
@@ -0,0 +1,697 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file\r
+ *  Implements functions for Controller Area Network (CAN)\r
+ *  peripheral operations.\r
+ */\r
+/** \addtogroup can_module\r
+ *@{*/\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+#if defined(REG_CAN0_MR) || defined(REG_CAN_MR)\r
+\r
+/* ----------- CAN_MR Operations --------------- */\r
+/**\r
+ * \brief Set CAN Mode Register (CAN_MR)\r
+ * \param pCan Pointer to Can instance.\r
+ * \param dwMr Mode register settings.\r
+ */\r
+void CAN_ConfigureMode(Can *pCan, uint32_t dwMr)\r
+{\r
+    pCan->CAN_MR = dwMr;\r
+}\r
+\r
+/**\r
+ * \brief CAN Controller Enable/Disable\r
+ * \param pCan   Pointer to Can instance.\r
+ * \param bEnDis 1 to enable and 0 to disable.\r
+ */\r
+void CAN_Enable(Can *pCan, uint8_t bEnDis)\r
+{\r
+    if (bEnDis) pCan->CAN_MR |=  CAN_MR_CANEN;\r
+    else        pCan->CAN_MR &= ~CAN_MR_CANEN;\r
+}\r
+\r
+/**\r
+ * \brief CAN Low Power Mode Enable/Disable\r
+ * \param pCan   Pointer to Can instance.\r
+ * \param bEnDis 1 to enable and 0 to disable.\r
+ */\r
+void CAN_EnableLowPower(Can *pCan, uint8_t bEnDis)\r
+{\r
+    if (bEnDis) pCan->CAN_MR |=  CAN_MR_LPM;\r
+    else        pCan->CAN_MR &= ~CAN_MR_LPM;\r
+}\r
+\r
+/**\r
+ * \brief CAN Autobaud/Listen mode\r
+ * \param pCan   Pointer to Can instance.\r
+ * \param bEnDis 1 to enable and 0 to disable.\r
+ */\r
+void CAN_EnableAutobaud(Can *pCan, uint8_t bEnDis)\r
+{\r
+    if (bEnDis) pCan->CAN_MR |=  CAN_MR_ABM;\r
+    else        pCan->CAN_MR &= ~CAN_MR_ABM;\r
+}\r
+\r
+/**\r
+ * \brief CAN Overload Frame Enable/Disable\r
+ * \param pCan   Pointer to Can instance.\r
+ * \param bEnDis 1 to enable and 0 to disable.\r
+ */\r
+void CAN_EnableOverloadFrame(Can *pCan, uint8_t bEnDis)\r
+{\r
+    if (bEnDis) pCan->CAN_MR |=  CAN_MR_OVL;\r
+    else        pCan->CAN_MR &= ~CAN_MR_OVL;\r
+}\r
+\r
+/**\r
+ * \brief CAN Timestamp capture mode (@EOF/@SOF).\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param bEofSof   1 for EOF/0 for SOF.\r
+ */\r
+void CAN_EnableTimeStampEof(Can *pCan, uint8_t bEofSof)\r
+{\r
+    if (bEofSof) pCan->CAN_MR |=  CAN_MR_TEOF;\r
+    else         pCan->CAN_MR &= ~CAN_MR_TEOF;\r
+}\r
+\r
+/**\r
+ * \brief CAN Time Triggered Mode Enable/Disable\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param bEnDis    Enable/Disable Time Trigger Mode.\r
+ */\r
+void CAN_EnableTimeTriggerMode(Can *pCan, uint8_t bEnDis)\r
+{\r
+    if (bEnDis) pCan->CAN_MR |=  CAN_MR_TTM;\r
+    else        pCan->CAN_MR &= ~CAN_MR_TTM;\r
+}\r
+\r
+/**\r
+ * \brief CAN Timer Freeze Enable/Disable\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param bEnDis    Enable/Disable Timer Freeze.\r
+ */\r
+void CAN_EnableTimerFreeze(Can *pCan, uint8_t bEnDis)\r
+{\r
+    if (bEnDis) pCan->CAN_MR |=  CAN_MR_TIMFRZ;\r
+    else        pCan->CAN_MR &= ~CAN_MR_TIMFRZ;\r
+}\r
+\r
+/**\r
+ * \brief CAN Repeat Disable/Enable.\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param bEnDis    Disable/Enable Repeat.\r
+ */\r
+void CAN_DisableRepeat(Can *pCan, uint8_t bDisEn)\r
+{\r
+    if (bDisEn) pCan->CAN_MR |=  CAN_MR_DRPT;\r
+    else        pCan->CAN_MR &= ~CAN_MR_DRPT;\r
+}\r
+\r
+/* ---------- Interrupt settings ------------- */\r
+\r
+/**\r
+ * \brief CAN Interrupts Enable\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param dwSources Interrupt sources bits.\r
+ */\r
+void CAN_EnableIt(Can *pCan, uint32_t dwSources)\r
+{\r
+    pCan->CAN_IER = dwSources;\r
+}\r
+\r
+/**\r
+ * \brief CAN Interrupts Disable\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param dwSources Interrupt sources bits.\r
+ */\r
+void CAN_DisableIt(Can *pCan, uint32_t dwSources)\r
+{\r
+    pCan->CAN_IDR = dwSources;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Interrupts Masks\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetItMask(Can *pCan)\r
+{\r
+    return pCan->CAN_IMR;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Statuses\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetStatus(Can *pCan)\r
+{\r
+    return pCan->CAN_SR;\r
+}\r
+\r
+/**\r
+ * \brief Calculate and configure the baudrate\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param dwBaudrate Baudrate value (kB/s)\r
+ *                   allowed: 100, 800, 500, 250, 125, 50, 25, 10\r
+ * \param dwMck      MCK.\r
+ * \return 1 in success, otherwise return 0.\r
+ */\r
+uint8_t CAN_CalcBaudrate(Can *pCan, uint32_t dwBaudrate, uint32_t dwMck)\r
+{\r
+    uint32_t BRP, PROPAG, PHASE1, PHASE2, SJW;\r
+    uint8_t  TQ;\r
+    uint32_t t1t2;\r
+    uint32_t maxClock;\r
+    uint32_t id = ID_CAN0;\r
+\r
+    if ((uint32_t)pCan == (uint32_t)CAN0) id = ID_CAN0;\r
+       else if ((uint32_t)pCan == (uint32_t)CAN1) id = ID_CAN1;\r
+    maxClock = PMC_SetPeriMaxClock(id, dwMck);\r
+\r
+    if (dwBaudrate >= 1000) TQ = 8;\r
+    else                    TQ = 16;\r
+    BRP = (maxClock / (dwBaudrate * 1000 * TQ)) - 1;\r
+    if (BRP == 0) {\r
+        return 0;\r
+    }\r
+\r
+    /* Timing delay:\r
+       Delay Bus Driver     - 50ns\r
+       Delay Receiver       - 30ns\r
+       Delay Bus Line (20m) - 110ns */\r
+    if ( (TQ * dwBaudrate * 2 * (50+30+110)/1000000) >= 1 )\r
+        PROPAG = (TQ * dwBaudrate * 2 * (50+30+110)/1000000) - 1;\r
+    else\r
+        PROPAG = 0;\r
+    t1t2 = TQ - 1 - (PROPAG + 1);\r
+\r
+    if ( (t1t2 & 0x01) == 0x01 ) {\r
+        PHASE1 = ((t1t2 - 1) / 2) - 1;\r
+        PHASE2 = PHASE1 + 1;\r
+    }\r
+    else {\r
+        PHASE1 = ((t1t2) / 2) - 1;\r
+        PHASE2 = PHASE1;\r
+    }\r
+\r
+    if ( 1 > (4/(PHASE1 + 1)) ) SJW = 3;\r
+    else                        SJW = PHASE1;\r
+\r
+    if ( (PROPAG + PHASE1 + PHASE2) != (uint32_t)(TQ - 4) ) {\r
+        return 0;\r
+    }\r
+\r
+    pCan->CAN_BR = CAN_BR_PHASE2(PHASE2)\r
+                 | CAN_BR_PHASE1(PHASE1)\r
+                 | CAN_BR_PROPAG(PROPAG)\r
+                 | CAN_BR_SJW(SJW)\r
+                 | CAN_BR_BRP(BRP)\r
+                 | CAN_BR_SMP_ONCE;\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * \brief Set CAN baudrate register\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param dwBr      Setting value for CAN_BR.\r
+ */\r
+void CAN_ConfigureBaudrate(Can *pCan, uint32_t dwBr)\r
+{\r
+    pCan->CAN_BR = dwBr;\r
+}\r
+\r
+/**\r
+ * \brief Set CAN Sampling Mode\r
+ * \param pCan      Pointer to Can instance.\r
+ * \param bAvg3     Sample 3 times/sample once at sample point.\r
+ */\r
+void CAN_SetSamplingMode(Can *pCan, uint8_t bAvg3)\r
+{\r
+    if (bAvg3) pCan->CAN_BR |=  CAN_BR_SMP;\r
+    else       pCan->CAN_BR &= ~CAN_BR_SMP;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Timer Register\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetTimer(Can *pCan)\r
+{\r
+    return pCan->CAN_TIM;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN TimeStamp Register\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetTimestamp(Can *pCan)\r
+{\r
+    return pCan->CAN_TIMESTP;\r
+}\r
+\r
+/**\r
+ * \brief Return Error Count (TEC << 16) + REC\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetErrorCount(Can *pCan)\r
+{\r
+    return pCan->CAN_ECR;\r
+}\r
+\r
+/**\r
+ * \brief Return Receive Error Count\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetRxErrorCount(Can *pCan)\r
+{\r
+    return (pCan->CAN_ECR & CAN_ECR_REC_Msk) >> CAN_ECR_REC_Pos;\r
+}\r
+\r
+/**\r
+ * \brief Return Transmit Error Count\r
+ * \param pCan      Pointer to Can instance.\r
+ */\r
+uint32_t CAN_GetTxErrorCount(Can *pCan)\r
+{\r
+    return (pCan->CAN_ECR & CAN_ECR_TEC_Msk) >> CAN_ECR_TEC_Pos;\r
+}\r
+\r
+/**\r
+ * \brief Set Transfer Command Register to initialize transfer requests.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param dwRequests Transfer Command Requests.\r
+ */\r
+void CAN_Command(Can *pCan, uint32_t dwRequests)\r
+{\r
+    pCan->CAN_TCR = dwRequests;\r
+}\r
+\r
+/**\r
+ * \brief Resets CAN internal timer counter.\r
+ * \param pCan       Pointer to Can instance.\r
+ */\r
+void CAN_ResetTimer(Can *pCan)\r
+{\r
+    pCan->CAN_TCR = CAN_TCR_TIMRST;\r
+}\r
+\r
+/**\r
+ * \brief Request transfer on mailbox.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+void CAN_Tx(Can *pCan, uint8_t bMb)\r
+{\r
+    pCan->CAN_TCR = CAN_TCR_MB0 << bMb;\r
+}\r
+\r
+/**\r
+ * \brief Abort transfer on several mailboxes.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param dwAborts   Abort requests.\r
+ */\r
+void CAN_Abort(Can *pCan, uint32_t dwAborts)\r
+{\r
+    pCan->CAN_ACR = dwAborts;\r
+}\r
+\r
+/**\r
+ * \brief Abort transfer on single mailbox.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+void CAN_AbortMailbox(Can *pCan, uint8_t bMb)\r
+{\r
+    pCan->CAN_ACR = CAN_ACR_MB0 << bMb;\r
+}\r
+\r
+/**\r
+ * \brief Configure CAN Message Mode (_MMRx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMr       Mode settings.\r
+ */\r
+void CAN_ConfigureMessageMode(Can *pCan, uint8_t bMb, uint32_t dwMr)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MMR = dwMr;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Mode (_MMRx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetMessageMode(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MMR;\r
+}\r
+\r
+/**\r
+ * \brief Set Mailbox Timemark for Time Triggered Mode.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param bTimemarks Mailbox timemarks.\r
+ */\r
+void CAN_SetTimemark(Can *pCan, uint8_t bMb, uint8_t bTimemarks)\r
+{\r
+    uint32_t dwMmr = (pCan->CAN_MB[bMb].CAN_MMR) & (~0xFFu);\r
+    pCan->CAN_MB[bMb].CAN_MMR = dwMmr | ((bTimemarks << 0) & 0xFF);\r
+}\r
+\r
+/**\r
+ * \brief Set Mailbox Priority.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param bPriority  Mailbox Priority.\r
+ */\r
+void CAN_SetPriority(Can *pCan, uint8_t bMb, uint8_t bPriority)\r
+{\r
+    uint32_t dwMmr = (pCan->CAN_MB[bMb].CAN_MMR & ~CAN_MMR_PRIOR_Msk);\r
+    pCan->CAN_MB[bMb].CAN_MMR = dwMmr | CAN_MMR_PRIOR(bPriority);\r
+}\r
+\r
+/**\r
+ * \brief Set Mailbox Object Type.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param bType      Mailbox Object Type.\r
+ */\r
+void CAN_SetObjectType(Can *pCan, uint8_t bMb, uint8_t bType)\r
+{\r
+    uint32_t dwMr = (pCan->CAN_MB[bMb].CAN_MMR & CAN_MMR_MOT_Msk) >> CAN_MMR_MOT_Pos;\r
+    pCan->CAN_MB[bMb].CAN_MMR |= dwMr | ((bType << CAN_MMR_MOT_Pos) & CAN_MMR_MOT_Msk);\r
+}\r
+\r
+/**\r
+ * \brief Configure CAN Message Acceptance Mask (_MAMx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMam      The setting value for _MAMx.\r
+ */\r
+void CAN_ConfigureMessageAcceptanceMask(Can *pCan, uint8_t bMb, uint32_t dwMAM)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MAM = dwMAM;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Acceptance Mask (_MAMx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetMessageAcceptanceMask(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MAM;\r
+}\r
+\r
+/**\r
+ * \brief Configure Identifier Version in CAN Message Acceptance Mask (_MAMx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param bIdCfg     IDvA and IDvB/IDvA only Identify.\r
+ */\r
+void CAN_ConfigureIdentifierMask(Can *pCan, uint8_t bMb, uint8_t bIdCfg)\r
+{\r
+    if (bIdCfg) pCan->CAN_MB[bMb].CAN_MAM |=  CAN_MAM_MIDE;\r
+    else        pCan->CAN_MB[bMb].CAN_MAM &= ~CAN_MAM_MIDE;\r
+}\r
+\r
+/**\r
+ * \brief Set Identifier for standard frame mode (MIDvA) mask\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMIDvA    Identifier for standard frame mode.\r
+ */\r
+void CAN_SetMIDvAMask(Can *pCan, uint8_t bMb, uint32_t dwIDvA)\r
+{\r
+    uint32_t dwMam = pCan->CAN_MB[bMb].CAN_MAM & CAN_MAM_MIDvA_Msk;\r
+    pCan->CAN_MB[bMb].CAN_MAM = dwMam | CAN_MAM_MIDvA(dwIDvA);\r
+}\r
+\r
+/**\r
+ * \brief Set Complementary bits for identifier in extended frame mode (MIDvB) mask\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMIDvB    Identifier for extended frame mode.\r
+ */\r
+void CAN_SetMIDvBMask(Can *pCan, uint8_t bMb, uint32_t dwIDvA)\r
+{\r
+    uint32_t dwMam = pCan->CAN_MB[bMb].CAN_MAM & CAN_MAM_MIDvB_Msk;\r
+    pCan->CAN_MB[bMb].CAN_MAM = dwMam | CAN_MAM_MIDvB(dwIDvA);\r
+}\r
+\r
+/**\r
+ * \brief Configure CAN Message ID (_MIDx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMID      The setting value for _MIDx.\r
+ */\r
+void CAN_ConfigureMessageID(Can *pCan, uint8_t bMb, uint32_t dwMID)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MID = dwMID;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message ID (_MIDx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetMessageID(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MID;\r
+}\r
+\r
+/**\r
+ * \brief Configure Identifier Version in CAN Message ID register (_MIDx)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param bIdVer     2.0 Part B/2.0 Part A.\r
+ */\r
+void CAN_ConfigureIdVer(Can *pCan, uint8_t bMb, uint8_t bIdVer)\r
+{\r
+    uint32_t dwMid = pCan->CAN_MB[bMb].CAN_MID & CAN_MID_MIDE;\r
+    pCan->CAN_MB[bMb].CAN_MID = dwMid | (bIdVer ? CAN_MID_MIDE : 0);\r
+}\r
+\r
+/**\r
+ * \brief Set Identifier for standard frame mode (MIDvA) value\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMIDvA    Identifier for standard frame mode.\r
+ */\r
+void CAN_SetMIDvA(Can *pCan, uint8_t bMb, uint32_t dwIDvA)\r
+{\r
+    uint32_t dwMam = pCan->CAN_MB[bMb].CAN_MID & CAN_MID_MIDvA_Msk;\r
+    pCan->CAN_MB[bMb].CAN_MID = dwMam | CAN_MID_MIDvA(dwIDvA);\r
+}\r
+\r
+/**\r
+ * \brief Set Complementary bits for identifier in extended frame mode (MIDvB) value\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwMIDvB    Identifier for extended frame mode.\r
+ */\r
+void CAN_SetMIDvB(Can *pCan, uint8_t bMb, uint32_t dwIDvA)\r
+{\r
+    uint32_t dwMam = pCan->CAN_MB[bMb].CAN_MID & CAN_MID_MIDvB_Msk;\r
+    pCan->CAN_MB[bMb].CAN_MID = dwMam | CAN_MID_MIDvB(dwIDvA);\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Family ID (Masked ID)\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetFamilyID(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MFID;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Status\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetMessageStatus(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MSR;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Data Low\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetMessageDataL(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MDL;\r
+}\r
+\r
+/**\r
+ * \brief Set CAN Message Data Low\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwL        Data Low Value.\r
+ */\r
+void CAN_SetMessageDataL(Can *pCan, uint8_t bMb, uint32_t dwL)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MDL = dwL;\r
+}\r
+\r
+/**\r
+ * \brief Set CAN Message Data High\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwH        Data High Value.\r
+ */\r
+void CAN_SetMessageDataH(Can *pCan, uint8_t bMb, uint32_t dwH)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MDH = dwH;\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Data High\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint32_t CAN_GetMessageDataH(Can *pCan, uint8_t bMb)\r
+{\r
+    return pCan->CAN_MB[bMb].CAN_MDH;\r
+}\r
+\r
+/**\r
+ * \brief Copy DW array to CAN Message Data.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param pDwData    Pointer to a buffer for data.\r
+ */\r
+void CAN_SetMessage(Can *pCan, uint8_t bMb, uint32_t *pDwData)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MDL = pDwData[0];\r
+    pCan->CAN_MB[bMb].CAN_MDH = pDwData[1];\r
+}\r
+\r
+/**\r
+ * \brief Copy CAN Message Data to DW array.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param pDwData    Pointer to a buffer for data.\r
+ */\r
+void CAN_GetMessage(Can *pCan, uint8_t bMb, uint32_t *pDwData)\r
+{\r
+    pDwData[0] = pCan->CAN_MB[bMb].CAN_MDL;\r
+    pDwData[1] = pCan->CAN_MB[bMb].CAN_MDH;\r
+}\r
+\r
+/**\r
+ * \brief Set CAN Message Data in u64\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+void CAN_SetMessageData64(Can *pCan, uint8_t bMb, uint64_t u64)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MDL = (uint32_t)u64;\r
+    pCan->CAN_MB[bMb].CAN_MDH = (u64 >> 32);\r
+}\r
+\r
+/**\r
+ * \brief Return CAN Message Data in u64\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+uint64_t CAN_GetMessageData64(Can *pCan, uint8_t bMb)\r
+{\r
+    uint64_t ddwMd = (uint64_t)pCan->CAN_MB[bMb].CAN_MDH << 32;\r
+    ddwMd += pCan->CAN_MB[bMb].CAN_MDL;\r
+    return ddwMd;\r
+}\r
+\r
+/**\r
+ * \brief Set CAN Message Control Register (_MCRx).\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param dwCtrl     Control value.\r
+ */\r
+void CAN_MessageControl(Can *pCan, uint8_t bMb, uint32_t dwCtrl)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MCR = dwCtrl;\r
+}\r
+\r
+/**\r
+ * \brief Start remote frame.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+void CAN_MessageRemote(Can *pCan, uint8_t bMb)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MCR = CAN_MCR_MRTR;\r
+}\r
+\r
+/**\r
+ * \brief Abort transmission.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+void CAN_MessageAbort(Can *pCan, uint8_t bMb)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MCR = CAN_MCR_MACR;\r
+}\r
+\r
+/**\r
+ * \brief Start transmission.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ * \param bLen       Message length.\r
+ */\r
+void CAN_MessageTx(Can *pCan, uint8_t bMb, uint8_t bLen)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MCR = CAN_MCR_MTCR | CAN_MCR_MDLC(bLen);\r
+}\r
+\r
+/**\r
+ * \brief Start reception.\r
+ * \param pCan       Pointer to Can instance.\r
+ * \param bMb        Mailbox number.\r
+ */\r
+void CAN_MessageRx(Can *pCan, uint8_t bMb)\r
+{\r
+    pCan->CAN_MB[bMb].CAN_MCR = CAN_MCR_MTCR;\r
+}\r
+\r
+#endif\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/emac.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/emac.c
new file mode 100644 (file)
index 0000000..a7787eb
--- /dev/null
@@ -0,0 +1,562 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/** \file */\r
+\r
+/** \addtogroup emac_functions\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *       Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Write control value\r
+ */\r
+void EMAC_NetworkControl(Emac *pEmac, uint32_t bmNCR)\r
+{\r
+    pEmac->EMAC_NCR = bmNCR;\r
+}\r
+\r
+uint32_t EMAC_GetNetworkControl(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_NCR;\r
+}\r
+\r
+/**\r
+ * Enable/Disable EMAC receive.\r
+ */\r
+void EMAC_ReceiveEnable(Emac* pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCR |=  EMAC_NCR_RE;\r
+    else         pEmac->EMAC_NCR &= ~EMAC_NCR_RE;\r
+}\r
+\r
+/**\r
+ * Enable/Disable EMAC transmit.\r
+ */\r
+void EMAC_TransmitEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCR |=  EMAC_NCR_TE;\r
+    else         pEmac->EMAC_NCR &= ~EMAC_NCR_TE;\r
+}\r
+\r
+/**\r
+ * Enable/Disable EMAC management.\r
+ */\r
+void EMAC_ManagementEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCR |=  EMAC_NCR_MPE;\r
+    else         pEmac->EMAC_NCR &= ~EMAC_NCR_MPE;\r
+}\r
+\r
+/**\r
+ * Clear all statistics registers\r
+ */\r
+void EMAC_ClearStatistics(Emac *pEmac)\r
+{\r
+    pEmac->EMAC_NCR |=  EMAC_NCR_CLRSTAT;\r
+    //pEmac->EMAC_NCR &= ~EMAC_NCR_CLRSTAT;\r
+}\r
+\r
+/**\r
+ * Increase all statistics registers\r
+ */\r
+void EMAC_IncreaseStatistics(Emac *pEmac)\r
+{\r
+    pEmac->EMAC_NCR |=  EMAC_NCR_INCSTAT;\r
+    //pEmac->EMAC_NCR &= ~EMAC_NCR_INCSTAT;\r
+}\r
+\r
+/**\r
+ * Enable/Disable statistics registers writing.\r
+ */\r
+void EMAC_StatisticsWriteEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCR |=  EMAC_NCR_WESTAT;\r
+    else         pEmac->EMAC_NCR &= ~EMAC_NCR_WESTAT;\r
+}\r
+\r
+/**\r
+ * In half-duplex mode, forces collisions on all received frames.\r
+ */\r
+void EMAC_BackPressureEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCR |=  EMAC_NCR_BP;\r
+    else         pEmac->EMAC_NCR &= ~EMAC_NCR_BP;\r
+}\r
+\r
+/**\r
+ * Start transmission\r
+ */\r
+void EMAC_TransmissionStart(Emac *pEmac)\r
+{\r
+    pEmac->EMAC_NCR |= EMAC_NCR_TSTART;\r
+}\r
+\r
+/**\r
+ * Halt transmission\r
+ */\r
+void EMAC_TransmissionHalt(Emac *pEmac)\r
+{\r
+    pEmac->EMAC_NCR |= EMAC_NCR_THALT;\r
+}\r
+\r
+/**\r
+ * Setup network configuration register\r
+ */\r
+void EMAC_Configure(Emac *pEmac, uint32_t dwCfg)\r
+{\r
+    pEmac->EMAC_NCFGR = dwCfg;\r
+}\r
+\r
+/**\r
+ * Return network configuration.\r
+ */\r
+uint32_t EMAC_GetConfigure(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_NCFGR;\r
+}\r
+\r
+/**\r
+ * Set speed.\r
+ * \param bSpeed 1 to indicate 100Mbps, 0 for 10Mbps.\r
+ */\r
+void EMAC_SetSpeed(Emac *pEmac, uint8_t bSpeed)\r
+{\r
+    if (bSpeed) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_SPD;\r
+    else        pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_SPD;\r
+}\r
+\r
+\r
+/**\r
+ * Enable/Disable Full-Duplex mode\r
+ */\r
+void EMAC_FullDuplexEnable(Emac *pEmac, uint8_t bFD)\r
+{\r
+    if (bFD) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_FD;\r
+    else     pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_FD;\r
+}\r
+\r
+/**\r
+ * Enable/Disable Copy(Receive) All Valid Frames\r
+ */\r
+void EMAC_CpyAllEnable(Emac *pEmac, uint8_t bCAF)\r
+{\r
+    if (bCAF) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_CAF;\r
+    else      pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_CAF;\r
+}\r
+\r
+/**\r
+ * Enable/Disable jumbo frames (up to 10240 bytes).\r
+ */\r
+void EMAC_JumboFrameEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_JFRAME;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_JFRAME;\r
+}\r
+\r
+/**\r
+ * Disable/Enable broadcase receiving.\r
+ */\r
+void EMAC_BroadcastDisable(Emac *pEmac, uint8_t bDisEna)\r
+{\r
+    if (bDisEna) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_NBC;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_NBC;\r
+}\r
+\r
+/**\r
+ * Enable/Disable multicast hash\r
+ */\r
+void EMAC_MulticastHashEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_UNI;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_UNI;\r
+}\r
+\r
+/**\r
+ * Enable/Disable big frames (over 1518, up to 1536)\r
+ */\r
+void EMAC_BigFrameEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_BIG;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_BIG;\r
+}\r
+\r
+/**\r
+ * Set MDC clock divider\r
+ * \return 1 if success.\r
+ */\r
+uint8_t EMAC_SetClock(Emac *pEmac, uint32_t dwMck)\r
+{\r
+    uint8_t bCLK = 0;\r
+\r
+    /* Not supported */\r
+    if (dwMck > 160*1000*1000)\r
+    {\r
+        return 0;\r
+    }\r
+    else if (dwMck > 80*1000*1000)\r
+    {\r
+        bCLK = 3;\r
+    }\r
+    else if (dwMck > 40*1000*1000)\r
+    {\r
+        bCLK = 2;\r
+    }\r
+    else if (dwMck > 20*1000*1000)\r
+    {\r
+        bCLK = 1;\r
+    }\r
+\r
+    pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_CLK_Msk;\r
+    pEmac->EMAC_NCFGR |=  (EMAC_NCFGR_CLK_Msk & ((bCLK) << EMAC_NCFGR_CLK_Pos));\r
+\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * Enable/Disable retry test\r
+ */\r
+void EMAC_RetryTestEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_RTY;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_RTY;\r
+}\r
+\r
+/**\r
+ * Enable/Disable pause (when a valid pause frame received).\r
+ */\r
+void EMAC_PauseFrameEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_PAE;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_PAE;\r
+}\r
+\r
+/**\r
+ * Set receive buffer offset to 0 ~ 3.\r
+ */\r
+void EMAC_SetRxBufferOffset(Emac *pEmac, uint8_t bOffset)\r
+{\r
+    pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_RBOF_Msk;\r
+    pEmac->EMAC_NCFGR |=  (EMAC_NCFGR_RBOF_Msk & ((bOffset) << EMAC_NCFGR_RBOF_Pos));\r
+}\r
+\r
+/**\r
+ * Enable/Disable receive length field checking\r
+ */\r
+void EMAC_RxLenthCheckEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_RLCE;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_RLCE;\r
+}\r
+\r
+/**\r
+ * Enable/Disable discarding FCS field of received frames.\r
+ */\r
+void EMAC_DiscardFCSEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_DRFCS;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_DRFCS;\r
+}\r
+\r
+\r
+/**\r
+ * Enable/Disable frames to be received in half-duplex mode\r
+ * while transmitting.\r
+ */\r
+void EMAC_EFRHD(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_EFRHD;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_EFRHD;\r
+}\r
+\r
+/**\r
+ * Enable/Disable ignore RX FCS\r
+ */\r
+void EMAC_IRXFCS(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_NCFGR |=  EMAC_NCFGR_IRXFCS;\r
+    else         pEmac->EMAC_NCFGR &= ~EMAC_NCFGR_IRXFCS;\r
+}\r
+\r
+/**\r
+ * Return Network Status\r
+ */\r
+uint32_t EMAC_GetStatus(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_NSR;\r
+}\r
+\r
+/**\r
+ * Return mdio_in pin status\r
+ */\r
+uint8_t EMAC_GetMDIO(Emac *pEmac)\r
+{\r
+    return ((pEmac->EMAC_NSR & EMAC_NSR_MDIO) > 0);\r
+}\r
+\r
+/**\r
+ * Return 1 if PHY is idle\r
+ */\r
+uint8_t EMAC_IsIdle(Emac *pEmac)\r
+{\r
+    return ((pEmac->EMAC_NSR & EMAC_NSR_IDLE) > 0);\r
+}\r
+\r
+/**\r
+ * Return transmit status\r
+ */\r
+uint32_t EMAC_GetTxStatus(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_TSR;\r
+}\r
+\r
+/**\r
+ * Clear transmit status\r
+ */\r
+void EMAC_ClearTxStatus(Emac *pEmac, uint32_t dwStatus)\r
+{\r
+    pEmac->EMAC_TSR = dwStatus;\r
+}\r
+\r
+/**\r
+ * Return receive status\r
+ */\r
+uint32_t EMAC_GetRxStatus(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_RSR;\r
+}\r
+\r
+/**\r
+ * Clear receive status\r
+ */\r
+void EMAC_ClearRxStatus(Emac *pEmac, uint32_t dwStatus)\r
+{\r
+    pEmac->EMAC_RSR = dwStatus;\r
+}\r
+\r
+/**\r
+ * Set Rx Queue\r
+ */\r
+void EMAC_SetRxQueue(Emac *pEmac, uint32_t dwAddr)\r
+{\r
+    pEmac->EMAC_RBQP = EMAC_RBQP_ADDR_Msk & dwAddr;\r
+}\r
+\r
+/**\r
+ * Get Rx Queue Address\r
+ */\r
+uint32_t EMAC_GetRxQueue(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_RBQP;\r
+}\r
+\r
+/**\r
+ * Set Tx Queue\r
+ */\r
+void EMAC_SetTxQueue(Emac *pEmac, uint32_t dwAddr)\r
+{\r
+    pEmac->EMAC_TBQP = EMAC_TBQP_ADDR_Msk & dwAddr;\r
+}\r
+\r
+/**\r
+ * Get Tx Queue\r
+ */\r
+uint32_t EMAC_GetTxQueue(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_TBQP;\r
+}\r
+\r
+/**\r
+ * Enable interrupt(s).\r
+ */\r
+void EMAC_EnableIt(Emac *pEmac, uint32_t dwSources)\r
+{\r
+    pEmac->EMAC_IER = dwSources;\r
+}\r
+\r
+/**\r
+ * Disable interrupt(s).\r
+ */\r
+void EMAC_DisableIt(Emac *pEmac, uint32_t dwSources)\r
+{\r
+    pEmac->EMAC_IDR = dwSources;\r
+}\r
+\r
+/**\r
+ * Return interrupt status.\r
+ */\r
+uint32_t EMAC_GetItStatus(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_ISR;\r
+}\r
+\r
+/**\r
+ * Return interrupt mask.\r
+ */\r
+uint32_t EMAC_GetItMask(Emac *pEmac)\r
+{\r
+    return pEmac->EMAC_IMR;\r
+}\r
+\r
+/**\r
+ * Execute PHY maintanance command\r
+ */\r
+void EMAC_PHYMaintain(Emac      *pEmac,\r
+                      uint8_t   bPhyAddr,\r
+                      uint8_t   bRegAddr,\r
+                      uint8_t   bRW,\r
+                      uint16_t  wData)\r
+{\r
+    /* Wait until bus idle */\r
+    while((pEmac->EMAC_NSR & EMAC_NSR_IDLE) == 0);\r
+    /* Write maintain register */\r
+    pEmac->EMAC_MAN = EMAC_MAN_CODE(0x02) | EMAC_MAN_SOF(0x1)\r
+                    | EMAC_MAN_PHYA(bPhyAddr)\r
+                    | EMAC_MAN_REGA(bRegAddr)\r
+                    | EMAC_MAN_RW((bRW ? 0x2 : 0x1))\r
+                    | EMAC_MAN_DATA(wData)\r
+                    ;\r
+}\r
+\r
+/**\r
+ * Return PHY maintainance data returned\r
+ */\r
+uint16_t EMAC_PHYData(Emac *pEmac)\r
+{\r
+    /* Wait until bus idle */\r
+    while((pEmac->EMAC_NSR & EMAC_NSR_IDLE) == 0);\r
+    /* Return data */\r
+    return (uint16_t)(pEmac->EMAC_MAN & EMAC_MAN_DATA_Msk);\r
+}\r
+\r
+/**\r
+ * Set pause time.\r
+ */\r
+void EMAC_SetPauseTime(Emac *pEmac, uint16_t wPTime)\r
+{\r
+    pEmac->EMAC_PTR = wPTime;\r
+}\r
+\r
+/**\r
+ * Set Hash\r
+ */\r
+void EMAC_SetHash(Emac *pEmac, uint32_t dwHashTop, uint32_t dwHashBottom)\r
+{\r
+    pEmac->EMAC_HRB = dwHashBottom;\r
+    pEmac->EMAC_HRT = dwHashTop;\r
+}\r
+\r
+/**\r
+ * Set Hash\r
+ */\r
+void EMAC_SetHash64(Emac *pEmac, uint64_t ddwHash)\r
+{\r
+    pEmac->EMAC_HRB = (uint32_t)ddwHash;\r
+    pEmac->EMAC_HRT = (uint32_t)(ddwHash >> 32);\r
+}\r
+\r
+/**\r
+ * Set MAC Address\r
+ */\r
+void EMAC_SetAddress(Emac *pEmac, uint8_t bIndex, uint8_t *pMacAddr)\r
+{\r
+    pEmac->EMAC_SA[bIndex].EMAC_SAxB = (pMacAddr[3] << 24)\r
+                                     | (pMacAddr[2] << 16)\r
+                                     | (pMacAddr[1] <<  8)\r
+                                     | (pMacAddr[0]      )\r
+                                     ;\r
+    pEmac->EMAC_SA[bIndex].EMAC_SAxT = (pMacAddr[5] <<  8)\r
+                                     | (pMacAddr[4]      )\r
+                                     ;\r
+}\r
+\r
+/**\r
+ * Set MAC Address via 2 DW\r
+ */\r
+void EMAC_SetAddress32(Emac *pEmac, uint8_t bIndex, uint32_t dwMacT, uint32_t dwMacB)\r
+{\r
+    pEmac->EMAC_SA[bIndex].EMAC_SAxB = dwMacB;\r
+    pEmac->EMAC_SA[bIndex].EMAC_SAxT = dwMacT;\r
+}\r
+\r
+/**\r
+ * Set MAC Address via int64\r
+ */\r
+void EMAC_SetAddress64(Emac *pEmac, uint8_t bIndex, uint64_t ddwMac)\r
+{\r
+    pEmac->EMAC_SA[bIndex].EMAC_SAxB = (uint32_t)ddwMac;\r
+    pEmac->EMAC_SA[bIndex].EMAC_SAxT = (uint32_t)(ddwMac >> 32);    \r
+}\r
+\r
+/**\r
+ * Set Type ID\r
+ */\r
+void EMAC_SetTypeID(Emac *pEmac, uint16_t wTID)\r
+{\r
+    pEmac->EMAC_TID = EMAC_TID_TID(wTID);\r
+}\r
+\r
+/**\r
+ * Get Type ID\r
+ */\r
+uint16_t EMAC_GetTypeID(Emac *pEmac)\r
+{\r
+    return (pEmac->EMAC_TID & EMAC_TID_TID_Msk);\r
+}\r
+\r
+/**\r
+ * Enable/Disable RMII\r
+ */\r
+void EMAC_RMIIEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_USRIO |=  EMAC_USRIO_RMII;\r
+    else         pEmac->EMAC_USRIO &= ~EMAC_USRIO_RMII;\r
+}\r
+\r
+/**\r
+ * Enable/Disable transceiver input clock\r
+ */\r
+void EMAC_TransceiverClockEnable(Emac *pEmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pEmac->EMAC_USRIO |=  EMAC_USRIO_CLKEN;\r
+    else         pEmac->EMAC_USRIO &= ~EMAC_USRIO_CLKEN;\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/gmac.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/gmac.c
new file mode 100644 (file)
index 0000000..21df496
--- /dev/null
@@ -0,0 +1,494 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definitions\r
+ *----------------------------------------------------------------------------*/\r
+/** The buffer addresses written into the descriptors must be aligned so the\r
+    last few bits are zero.  These bits have special meaning for the GMAC\r
+     peripheral and cannot be used as part of the address.*/\r
+\r
+#define GMAC_ADDRESS_MASK   ((uint32_t)0xFFFFFFFC)\r
+#define GMAC_LENGTH_FRAME   ((uint32_t)0x3FFF)      /** Length of frame mask */\r
+/** receive buffer descriptor bits */\r
+#define GMAC_RX_OWNERSHIP_BIT   (1 <<  0)\r
+#define GMAC_RX_WRAP_BIT        (1 <<  1)\r
+#define GMAC_RX_SOF_BIT         (1 << 14)\r
+#define GMAC_RX_EOF_BIT         (1 << 15)\r
+\r
+/** Transmit buffer descriptor bits */\r
+#define GMAC_TX_LAST_BUFFER_BIT (1 << 15)\r
+#define GMAC_TX_WRAP_BIT        (1 << 30)\r
+#define GMAC_TX_USED_BIT        (1 << 31)\r
+#define GMAC_TX_RLE_BIT         (1 << 29) /** Retry Limit Exceeded */\r
+#define GMAC_TX_UND_BIT         (1 << 28) /** Tx Buffer Underrun */\r
+#define GMAC_TX_ERR_BIT         (1 << 27) /** Exhausted in mid-frame */\r
+#define GMAC_TX_ERR_BITS  \\r
+    (GMAC_TX_RLE_BIT | GMAC_TX_UND_BIT | GMAC_TX_ERR_BIT)\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Internal functions\r
+ *----------------------------------------------------------------------------*/\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
\r
+/**\r
+ * Return 1 if PHY is idle\r
+ */\r
+uint8_t GMAC_IsIdle(Gmac *pGmac)\r
+{\r
+    return ((pGmac->GMAC_NSR & GMAC_NSR_IDLE) > 0);\r
+}\r
+\r
+\r
+/**\r
+ * Execute PHY maintanance command\r
+ */\r
+void GMAC_PHYMaintain(Gmac      *pGmac,\r
+                      uint8_t   bPhyAddr,\r
+                      uint8_t   bRegAddr,\r
+                      uint8_t   bRW,\r
+                      uint16_t  wData)\r
+{\r
+    /* Wait until bus idle */\r
+    while((pGmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);\r
+    /* Write maintain register */\r
+    pGmac->GMAC_MAN = (~GMAC_MAN_WZO & GMAC_MAN_CLTTO)\r
+                      | (GMAC_MAN_OP(bRW ? 0x2 : 0x1))\r
+                      | GMAC_MAN_WTN(0x02)\r
+                      | GMAC_MAN_PHYA(bPhyAddr)\r
+                      | GMAC_MAN_REGA(bRegAddr)\r
+                      | GMAC_MAN_DATA(wData) ;\r
+}\r
+\r
+/**\r
+ * Return PHY maintainance data returned\r
+ */\r
+uint16_t GMAC_PHYData(Gmac *pGmac)\r
+{\r
+    /* Wait until bus idle */\r
+    while((pGmac->GMAC_NSR & GMAC_NSR_IDLE) == 0);\r
+    /* Return data */\r
+    return (uint16_t)(pGmac->GMAC_MAN & GMAC_MAN_DATA_Msk);\r
+}\r
+\r
+/**\r
+ *  \brief Set MDC clock according to current board clock. Per 802.3, MDC should be \r
+ *  less then 2.5MHz.\r
+ *  \param pGmac Pointer to an Gmac instance. \r
+ *  \param mck Mdc clock\r
+ *  \return 1 if successfully, 0 if MDC clock not found.\r
+ */\r
+uint8_t GMAC_SetMdcClock( Gmac *pGmac, uint32_t mck )\r
+{\r
+    uint32_t clock_dividor;\r
+    pGmac->GMAC_NCR &=  ~(GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    if (mck <= 20000000) {\r
+        clock_dividor = GMAC_NCFGR_CLK_MCK_8;          // MDC clock = MCK/8\r
+    }\r
+    else if (mck <= 40000000) {\r
+        clock_dividor = GMAC_NCFGR_CLK_MCK_16;         // MDC clock = MCK/16\r
+    }\r
+    else if (mck <= 80000000) {\r
+        clock_dividor = GMAC_NCFGR_CLK_MCK_32;         // MDC clock = MCK/32\r
+    }\r
+    else if (mck <= 160000000) {\r
+        clock_dividor = GMAC_NCFGR_CLK_MCK_64;         // MDC clock = MCK/64\r
+    }\r
+    else if (mck <= 240000000) {\r
+        clock_dividor = GMAC_NCFGR_CLK_MCK_96;         // MDC clock = MCK/96\r
+    }\r
+    else {\r
+        TRACE_ERROR("E: No valid MDC clock.\n\r");\r
+        return 0;\r
+    }\r
+    pGmac->GMAC_NCFGR = (pGmac->GMAC_NCFGR & (~GMAC_NCFGR_CLK_Msk)) | clock_dividor;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    return 1;\r
+}\r
+\r
+/**\r
+ *  \brief Enable MDI with PHY\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ */\r
+void GMAC_EnableMdio( Gmac *pGmac )\r
+{\r
+    pGmac->GMAC_NCR &=  ~(GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    pGmac->GMAC_NCR |= GMAC_NCR_MPE;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+}\r
+\r
+/**\r
+ *  \brief Enable MDI with PHY\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ */\r
+void GMAC_DisableMdio( Gmac *pGmac )\r
+{\r
+    pGmac->GMAC_NCR &=  ~(GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    pGmac->GMAC_NCR &= ~GMAC_NCR_MPE;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+}\r
+\r
+/**\r
+ *  \brief Enable MII mode for GMAC, called once after autonegotiate\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ */\r
+void GMAC_EnableMII( Gmac *pGmac )\r
+{\r
+    pGmac->GMAC_NCR &=  ~(GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    pGmac->GMAC_UR &= ~GMAC_UR_RMII;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+}\r
+\r
+/**\r
+ *  \brief Enable GMII mode for GMAC, called once after autonegotiate\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ */\r
+void GMAC_EnableGMII( Gmac *pGmac )\r
+{\r
+    pGmac->GMAC_NCR &=  ~(GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    /* RGMII disable */\r
+    pGmac->GMAC_UR &= ~GMAC_UR_RMII;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+}\r
+\r
+#define GMAC_NCFGR_GBE (0x1u << 10)\r
+/**\r
+ *  \brief Enable RGMII mode for GMAC, called once after autonegotiate\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ *  \param duplex: 1 full duplex 0 half duplex\r
+ *  \param speed:   0 10M 1 100M \r
+ */\r
+void GMAC_EnableRGMII(Gmac *pGmac, uint32_t duplex, uint32_t speed)\r
+{\r
+    pGmac->GMAC_NCR &=  ~(GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    if (duplex == GMAC_DUPLEX_HALF)\r
+    {\r
+        pGmac->GMAC_NCFGR &= ~GMAC_NCFGR_FD;\r
+    }\r
+    else \r
+    {\r
+        pGmac->GMAC_NCFGR |= GMAC_NCFGR_FD;\r
+    }\r
+\r
+\r
+    if (speed == GMAC_SPEED_10M)\r
+    {\r
+        pGmac->GMAC_NCFGR &= ~GMAC_NCFGR_SPD;\r
+    }\r
+    else if(speed == GMAC_SPEED_100M) \r
+    {\r
+        pGmac->GMAC_NCFGR |= GMAC_NCFGR_SPD;\r
+    }\r
+    else\r
+    {\r
+        pGmac->GMAC_NCFGR |= GMAC_NCFGR_SPD;\r
+    }\r
+  \r
+    /* RGMII enable */\r
+    pGmac->GMAC_UR |= GMAC_UR_RMII;\r
+    pGmac->GMAC_NCFGR &= ~GMAC_NCFGR_GBE;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+    return;\r
+}\r
+\r
+/**\r
+ *  \brief Setup the GMAC for the link : speed 100M/10M and Full/Half duplex\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ *  \param speed        Link speed, 0 for 10M, 1 for 100M\r
+ *  \param fullduplex   1 for Full Duplex mode\r
+ */\r
+void GMAC_SetLinkSpeed(Gmac *pGmac, uint8_t speed, uint8_t fullduplex)\r
+{\r
+    uint32_t ncfgr;\r
+    ncfgr = pGmac->GMAC_NCFGR;\r
+    ncfgr &= ~(GMAC_NCFGR_SPD | GMAC_NCFGR_FD);\r
+    if (speed) {\r
+\r
+        ncfgr |= GMAC_NCFGR_SPD;\r
+    }\r
+    if (fullduplex) {\r
+\r
+        ncfgr |= GMAC_NCFGR_FD;\r
+    }\r
+    pGmac->GMAC_NCFGR = ncfgr;\r
+    pGmac->GMAC_NCR |=  (GMAC_NCR_RXEN | GMAC_NCR_TXEN);\r
+}\r
+\r
+/**\r
+ *  \brief set local loop back\r
+ *  \param pGmac Pointer to an Gmac instance.\r
+ */\r
+uint32_t GMAC_SetLocalLoopBack(Gmac *pGmac)\r
+{\r
+    pGmac->GMAC_NCR |= GMAC_NCR_LBL;\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Return interrupt mask.\r
+ */\r
+uint32_t GMAC_GetItMask(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_IMR;\r
+}\r
+\r
+\r
+/**\r
+ * Return transmit status\r
+ */\r
+uint32_t GMAC_GetTxStatus(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_TSR;\r
+}\r
+\r
+/**\r
+ * Clear transmit status\r
+ */\r
+void GMAC_ClearTxStatus(Gmac *pGmac, uint32_t dwStatus)\r
+{\r
+    pGmac->GMAC_TSR = dwStatus;\r
+}\r
+\r
+/**\r
+ * Return receive status\r
+ */\r
+uint32_t GMAC_GetRxStatus(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_RSR;\r
+}\r
+\r
+/**\r
+ * Clear receive status\r
+ */\r
+void GMAC_ClearRxStatus(Gmac *pGmac, uint32_t dwStatus)\r
+{\r
+    pGmac->GMAC_RSR = dwStatus;\r
+}\r
+\r
+\r
+/**\r
+ * Enable/Disable GMAC receive.\r
+ */\r
+void GMAC_ReceiveEnable(Gmac* pGmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pGmac->GMAC_NCR |=  GMAC_NCR_RXEN;\r
+    else         pGmac->GMAC_NCR &= ~GMAC_NCR_RXEN;\r
+}\r
+\r
+/**\r
+ * Enable/Disable GMAC transmit.\r
+ */\r
+void GMAC_TransmitEnable(Gmac *pGmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pGmac->GMAC_NCR |=  GMAC_NCR_TXEN;\r
+    else         pGmac->GMAC_NCR &= ~GMAC_NCR_TXEN;\r
+}\r
\r
+\r
+/**\r
+ * Set Rx Queue\r
+ */\r
+void GMAC_SetRxQueue(Gmac *pGmac, uint32_t dwAddr)\r
+{\r
+    pGmac->GMAC_RBQB = GMAC_RBQB_ADDR_Msk & dwAddr;\r
+}\r
+           \r
+/**\r
+ * Get Rx Queue Address\r
+ */\r
+uint32_t GMAC_GetRxQueue(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_RBQB;\r
+}\r
+\r
+/**\r
+ * Set Tx Queue\r
+ */\r
+void GMAC_SetTxQueue(Gmac *pGmac, uint32_t dwAddr)\r
+{\r
+    pGmac->GMAC_TBQB = GMAC_TBQB_ADDR_Msk & dwAddr;\r
+}\r
+\r
+/**\r
+ * Get Tx Queue\r
+ */\r
+uint32_t GMAC_GetTxQueue(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_TBQB;\r
+}\r
+\r
+\r
+/**\r
+ * Write control value\r
+ */\r
+void GMAC_NetworkControl(Gmac *pGmac, uint32_t bmNCR)\r
+{\r
+    pGmac->GMAC_NCR = bmNCR;\r
+}\r
+\r
+\r
+/**\r
+ * Get control value\r
+ */\r
+uint32_t GMAC_GetNetworkControl(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_NCR;\r
+}\r
+\r
+\r
+/**\r
+ * Enable interrupt(s).\r
+ */\r
+void GMAC_EnableIt(Gmac *pGmac, uint32_t dwSources)\r
+{\r
+    pGmac->GMAC_IER = dwSources;\r
+}\r
+\r
+/**\r
+ * Disable interrupt(s).\r
+ */\r
+void GMAC_DisableIt(Gmac *pGmac, uint32_t dwSources)\r
+{\r
+    pGmac->GMAC_IDR = dwSources;\r
+}\r
+\r
+/**\r
+ * Return interrupt status.\r
+ */\r
+uint32_t GMAC_GetItStatus(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_ISR;\r
+}\r
+\r
+\r
+/**\r
+ * Set MAC Address\r
+ */\r
+void GMAC_SetAddress(Gmac *pGmac, uint8_t bIndex, uint8_t *pMacAddr)\r
+{\r
+    pGmac->GMAC_SA[bIndex].GMAC_SAB = (pMacAddr[3] << 24)\r
+                                     | (pMacAddr[2] << 16)\r
+                                     | (pMacAddr[1] <<  8)\r
+                                     | (pMacAddr[0]      )\r
+                                     ;\r
+    pGmac->GMAC_SA[bIndex].GMAC_SAT = (pMacAddr[5] <<  8)\r
+                                     | (pMacAddr[4]      )\r
+                                     ;\r
+}\r
+\r
+/**\r
+ * Set MAC Address via 2 DW\r
+ */\r
+void GMAC_SetAddress32(Gmac *pGmac, uint8_t bIndex, uint32_t dwMacT, uint32_t dwMacB)\r
+{\r
+    pGmac->GMAC_SA[bIndex].GMAC_SAB = dwMacB;\r
+    pGmac->GMAC_SA[bIndex].GMAC_SAT = dwMacT;\r
+}\r
+\r
+/**\r
+ * Set MAC Address via int64\r
+ */\r
+void GMAC_SetAddress64(Gmac *pGmac, uint8_t bIndex, uint64_t ddwMac)\r
+{\r
+    pGmac->GMAC_SA[bIndex].GMAC_SAB = (uint32_t)ddwMac;\r
+    pGmac->GMAC_SA[bIndex].GMAC_SAT = (uint32_t)(ddwMac >> 32);\r
+}\r
+\r
+\r
+/**\r
+ * Clear all statistics registers\r
+ */\r
+void GMAC_ClearStatistics(Gmac *pGmac)\r
+{\r
+    pGmac->GMAC_NCR |=  GMAC_NCR_CLRSTAT;\r
+}\r
+\r
+/**\r
+ * Increase all statistics registers\r
+ */\r
+void GMAC_IncreaseStatistics(Gmac *pGmac)\r
+{\r
+    pGmac->GMAC_NCR |=  GMAC_NCR_INCSTAT;\r
+}\r
+\r
+/**\r
+ * Enable/Disable statistics registers writing.\r
+ */\r
+void GMAC_StatisticsWriteEnable(Gmac *pGmac, uint8_t bEnaDis)\r
+{\r
+    if (bEnaDis) pGmac->GMAC_NCR |=  GMAC_NCR_WESTAT;\r
+    else         pGmac->GMAC_NCR &= ~GMAC_NCR_WESTAT;\r
+}\r
+\r
+\r
+/**\r
+ * Setup network configuration register\r
+ */\r
+void GMAC_Configure(Gmac *pGmac, uint32_t dwCfg)\r
+{\r
+    pGmac->GMAC_NCFGR = dwCfg;\r
+}\r
+\r
+/**\r
+ * Return network configuration.\r
+ */\r
+uint32_t GMAC_GetConfigure(Gmac *pGmac)\r
+{\r
+    return pGmac->GMAC_NCFGR;\r
+}\r
+\r
+\r
+/**\r
+ * Start transmission\r
+ */\r
+void GMAC_TransmissionStart(Gmac *pGmac)\r
+{\r
+    pGmac->GMAC_NCR |= GMAC_NCR_TSTART;\r
+}\r
+\r
+/**\r
+ * Halt transmission\r
+ */\r
+void GMAC_TransmissionHalt(Gmac *pGmac)\r
+{\r
+    pGmac->GMAC_NCR |= GMAC_NCR_THALT;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/hsmci.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/hsmci.c
new file mode 100644 (file)
index 0000000..d5e0644
--- /dev/null
@@ -0,0 +1,585 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file\r
+ *\r
+ * Implementation of High Speed MultiMedia Card Interface (HSMCI) controller.\r
+ */\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+#include <assert.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/** \addtogroup hsmci_functions\r
+ *@{\r
+ */\r
+\r
+/**\r
+ * \brief Enable Multi-Media Interface\r
+ *\r
+ * \param pRMci Pointer to a Hsmci instance\r
+ */\r
+extern void HSMCI_Enable(Hsmci* pRMci)\r
+{\r
+    pRMci->HSMCI_CR = HSMCI_CR_MCIEN;\r
+}\r
+\r
+/**\r
+ * \brief Disable Multi-Media Interface\r
+ *\r
+ * \param pRMci Pointer to a Hsmci instance\r
+ */\r
+extern void HSMCI_Disable(Hsmci* pRMci)\r
+{\r
+    pRMci->HSMCI_CR = HSMCI_CR_MCIDIS;\r
+}\r
+\r
+/**\r
+ * \brief Reset (& Disable) Multi-Media Interface\r
+ *\r
+ * \param mci Pointer to a Hsmci instance\r
+ * \param bBackup Backup registers values to keep previous settings, including\r
+ *                _MR, _SDCR, _DTOR, _CSTOR, _DMA and _CFG.\r
+ */\r
+extern void HSMCI_Reset(Hsmci* pRMci, uint8_t bBackup)\r
+{\r
+    if (bBackup)\r
+    {\r
+        uint32_t mr    = pRMci->HSMCI_MR;\r
+        uint32_t dtor  = pRMci->HSMCI_DTOR;\r
+        uint32_t sdcr  = pRMci->HSMCI_SDCR;\r
+        uint32_t cstor = pRMci->HSMCI_CSTOR;\r
+        uint32_t dma   = pRMci->HSMCI_DMA;\r
+        uint32_t cfg   = pRMci->HSMCI_CFG;\r
+\r
+        pRMci->HSMCI_CR = HSMCI_CR_SWRST;\r
+\r
+        pRMci->HSMCI_MR    = mr;\r
+        pRMci->HSMCI_DTOR  = dtor;\r
+        pRMci->HSMCI_SDCR  = sdcr;\r
+        pRMci->HSMCI_CSTOR = cstor;\r
+        pRMci->HSMCI_DMA   = dma;\r
+        pRMci->HSMCI_CFG   = cfg;\r
+    }\r
+    else\r
+    {\r
+        pRMci->HSMCI_CR = HSMCI_CR_SWRST;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Select slot\r
+ * \param pRMci Pointer to a Hsmci instance\r
+ * \param bSlot Slot ID (0~3 for A~D).\r
+ */\r
+extern void HSMCI_Select(Hsmci *pRMci, uint8_t bSlot, uint8_t bBusWidth)\r
+{\r
+    uint32_t dwSdcr;\r
+    dwSdcr = (HSMCI_SDCR_SDCSEL_Msk & bSlot);\r
+    switch(bBusWidth)\r
+    {\r
+        case 1:\r
+            pRMci->HSMCI_SDCR = dwSdcr | HSMCI_SDCR_SDCBUS_1;\r
+            break;\r
+        case 4:\r
+            pRMci->HSMCI_SDCR = dwSdcr | HSMCI_SDCR_SDCBUS_4;\r
+            break;\r
+        case 8:\r
+            pRMci->HSMCI_SDCR = dwSdcr | HSMCI_SDCR_SDCBUS_8;\r
+            break;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Set slot\r
+ * \param pRMci Pointer to a Hsmci instance\r
+ * \param bSlot Slot ID (0~3 for A~D).\r
+ */\r
+extern void HSMCI_SetSlot(Hsmci *pRMci, uint8_t bSlot)\r
+{\r
+    uint32_t dwSdcr = pRMci->HSMCI_SDCR & ~HSMCI_SDCR_SDCSEL_Msk;\r
+    pRMci->HSMCI_SDCR = dwSdcr | (HSMCI_SDCR_SDCSEL_Msk & bSlot);\r
+}\r
+\r
+/**\r
+ * \brief Set bus width of MCI\r
+ * \param pRMci Pointer to a Hsmci instance\r
+ * \param bBusWidth 1,4 or 8 (bits).\r
+ */\r
+extern void HSMCI_SetBusWidth(Hsmci * pRMci,uint8_t bBusWidth)\r
+{\r
+    uint32_t dwSdcr = pRMci->HSMCI_SDCR & ~HSMCI_SDCR_SDCBUS_Msk;\r
+    switch(bBusWidth)\r
+    {\r
+        case 1:\r
+            pRMci->HSMCI_SDCR = dwSdcr | HSMCI_SDCR_SDCBUS_1;\r
+            break;\r
+        case 4:\r
+            pRMci->HSMCI_SDCR = dwSdcr | HSMCI_SDCR_SDCBUS_4;\r
+            break;\r
+        case 8:\r
+            pRMci->HSMCI_SDCR = dwSdcr | HSMCI_SDCR_SDCBUS_8;\r
+            break;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Return bus width setting.\r
+ *\r
+ * \param pRMci  Pointer to an MCI instance.\r
+ * \return 1, 4 or 8.\r
+ */\r
+extern uint8_t HSMCI_GetBusWidth(Hsmci * pRMci)\r
+{\r
+    switch(pRMci->HSMCI_SDCR & HSMCI_SDCR_SDCBUS_Msk)\r
+    {\r
+        case HSMCI_SDCR_SDCBUS_1: return 1;\r
+        case HSMCI_SDCR_SDCBUS_4: return 4;\r
+        case HSMCI_SDCR_SDCBUS_8: return 8;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * \brief Configures a MCI peripheral as specified.\r
+ *\r
+ * \param pRMci  Pointer to an MCI instance.\r
+ * \param dwMode Value of the MCI Mode register.\r
+ */\r
+extern void HSMCI_ConfigureMode(Hsmci *pRMci, uint32_t dwMode)\r
+{\r
+    pRMci->HSMCI_MR = dwMode;\r
+}\r
+\r
+/**\r
+ * \brief Return mode register\r
+ * \param pRMci  Pointer to an MCI instance.\r
+ */\r
+extern uint32_t HSMCI_GetMode(Hsmci * pRMci)\r
+{\r
+    return pRMci->HSMCI_MR;\r
+}\r
+\r
+/**\r
+ * \brief Enable/Disable R/W proof\r
+ *\r
+ * \param pRMci    Pointer to an MCI instance.\r
+ * \param bRdProof Read proof enable/disable.\r
+ * \param bWrProof Write proof enable/disable.\r
+ */\r
+extern void HSMCI_ProofEnable(Hsmci *pRMci, uint8_t bRdProof, uint8_t bWrProof)\r
+{\r
+    uint32_t mr = pRMci->HSMCI_MR;\r
+    pRMci->HSMCI_MR = (mr & (~(HSMCI_MR_WRPROOF | HSMCI_MR_RDPROOF)))\r
+                    | (bRdProof ? HSMCI_MR_RDPROOF : 0)\r
+                    | (bWrProof ? HSMCI_MR_WRPROOF : 0)\r
+                    ;\r
+}\r
+\r
+/**\r
+ * \brief Padding value setting.\r
+ *\r
+ * \param pRMci    Pointer to an MCI instance.\r
+ * \param bPadvEn  Padding value 0xFF/0x00.\r
+ */\r
+extern void HSMCI_PadvCtl(Hsmci *pRMci, uint8_t bPadv)\r
+{\r
+    if (bPadv)\r
+    {\r
+        pRMci->HSMCI_MR |= HSMCI_MR_PADV;\r
+    }\r
+    else\r
+    {\r
+        pRMci->HSMCI_MR &= ~HSMCI_MR_PADV;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Force byte transfer enable/disable.\r
+ *\r
+ * \param pRMci    Pointer to an MCI instance.\r
+ * \param bFByteEn FBYTE enable/disable.\r
+ */\r
+extern void HSMCI_FByteEnable(Hsmci *pRMci, uint8_t bFByteEn)\r
+{\r
+    if (bFByteEn)\r
+    {\r
+        pRMci->HSMCI_MR |= HSMCI_MR_FBYTE;\r
+    }\r
+    else\r
+    {\r
+        pRMci->HSMCI_MR &= ~HSMCI_MR_FBYTE;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Check if Force Byte mode enabled.\r
+ *\r
+ * \param pRMci    Pointer to an MCI instance.\r
+ * \return 1 if _FBYTE is enabled.\r
+ */\r
+extern uint8_t HSMCI_IsFByteEnabled(Hsmci *pRMci)\r
+{\r
+    return ((pRMci->HSMCI_MR & HSMCI_MR_FBYTE) > 0);\r
+}\r
+\r
+/**\r
+ * \brief Set Clock Divider & Power save divider for MCI.\r
+ *\r
+ * \param pRMci    Pointer to an MCI instance.\r
+ * \param bClkDiv  Clock Divider value (0 ~ 255).\r
+ * \param bPwsDiv  Power Saving Divider (1 ~ 7).\r
+ */\r
+extern void HSMCI_DivCtrl(Hsmci *pRMci, uint32_t bClkDiv, uint8_t bPwsDiv)\r
+{\r
+    uint32_t mr = pRMci->HSMCI_MR;\r
+    uint32_t clkdiv ,clkodd;\r
+    clkdiv = bClkDiv - 2 ;\r
+    clkodd = (bClkDiv & 1)? HSMCI_MR_CLKODD: 0;\r
+    clkdiv = clkdiv >> 1;\r
+\r
+    pRMci->HSMCI_MR = (mr & ~(HSMCI_MR_CLKDIV_Msk | HSMCI_MR_PWSDIV_Msk))\r
+                    | HSMCI_MR_CLKDIV(clkdiv)\r
+                    | HSMCI_MR_PWSDIV(bPwsDiv)\r
+                    | clkodd\r
+                    ;\r
+}\r
+\r
+/**\r
+ * \brief Enables one or more interrupt sources of MCI peripheral.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param sources Bitwise OR of selected interrupt sources.\r
+ */\r
+extern void HSMCI_EnableIt(Hsmci *pRMci, uint32_t dwSources)\r
+{\r
+    pRMci->HSMCI_IER = dwSources;\r
+}\r
+\r
+/**\r
+ * \brief Disable one or more interrupt sources of MCI peripheral.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param sources Bitwise OR of selected interrupt sources.\r
+ */\r
+extern void HSMCI_DisableIt(Hsmci *pRMci, uint32_t dwSources)\r
+{\r
+    pRMci->HSMCI_IDR = dwSources;\r
+}\r
+\r
+/**\r
+ * \brief Return the interrupt mask register.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \return MCI interrupt mask register.\r
+ */\r
+extern uint32_t HSMCI_GetItMask(Hsmci *pRMci)\r
+{\r
+    return (pRMci->HSMCI_IMR) ;\r
+}\r
+\r
+/**\r
+ * \brief Set block len & count for transfer\r
+ * \r
+ * \param pRMci     Pointer to an Hsmci instance.\r
+ * \param wBlkLen   Block size.\r
+ * \param wCnt      Block(byte) count.\r
+ */\r
+extern void HSMCI_ConfigureTransfer(Hsmci *pRMci,\r
+                                    uint16_t wBlkLen,\r
+                                    uint16_t wCnt)\r
+{\r
+    pRMci->HSMCI_BLKR = (wBlkLen << 16) | wCnt;\r
+}\r
+\r
+/**\r
+ * \brief Set block length\r
+ *\r
+ *  Count is reset to 0.\r
+ *\r
+ * \param pRMci     Pointer to an Hsmci instance.\r
+ * \param wBlkSize  Block size.\r
+ */\r
+extern void HSMCI_SetBlockLen(Hsmci *pRMci, uint16_t wBlkSize)\r
+{\r
+    pRMci->HSMCI_BLKR = wBlkSize << 16;\r
+}\r
+\r
+/**\r
+ * \brief Set block (byte) count\r
+ *\r
+ * \param pRMci     Pointer to an Hsmci instance.\r
+ * \param wBlkCnt   Block(byte) count.\r
+ */\r
+extern void HSMCI_SetBlockCount(Hsmci *pRMci, uint16_t wBlkCnt)\r
+{\r
+    pRMci->HSMCI_BLKR |= wBlkCnt;\r
+}\r
+\r
+/**\r
+ * \brief Configure the Completion Signal Timeout\r
+ *\r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \param dwConfigure Completion Signal Timeout configure.\r
+ */\r
+extern void HSMCI_ConfigureCompletionTO(Hsmci *pRMci, uint32_t dwConfigure)\r
+{\r
+    pRMci->HSMCI_CSTOR = dwConfigure;\r
+}\r
+\r
+/**\r
+ * \brief Configure the Data Timeout\r
+ *\r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \param dwConfigure Data Timeout configure.\r
+ */\r
+extern void HSMCI_ConfigureDataTO(Hsmci *pRMci, uint32_t dwConfigure)\r
+{\r
+    pRMci->HSMCI_DTOR = dwConfigure;\r
+}\r
+\r
+/**\r
+ * \brief Send command\r
+ *\r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \param dwCmd Command register value.\r
+ * \param dwArg Argument register value.\r
+ */\r
+extern void HSMCI_SendCmd(Hsmci *pRMci, uint32_t dwCmd, uint32_t dwArg)\r
+{\r
+    pRMci->HSMCI_ARGR = dwArg;\r
+    pRMci->HSMCI_CMDR = dwCmd;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Return the response register.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \return MCI response register.\r
+ */\r
+extern uint32_t HSMCI_GetResponse(Hsmci *pRMci)\r
+{\r
+    return pRMci->HSMCI_RSPR[0];\r
+}\r
+\r
+/**\r
+ * \brief Return the receive data register.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \return MCI receive data register.\r
+ */\r
+extern uint32_t HSMCI_Read(Hsmci *pRMci)\r
+{\r
+    return pRMci->HSMCI_RDR;\r
+}\r
+\r
+/**\r
+ * \brief Read from FIFO\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param pdwData Pointer to data buffer.\r
+ * \param dwSize  Size of data buffer (in DWord).\r
+ */\r
+extern void HSMCI_ReadFifo(Hsmci *pRMci, uint8_t *pdwData, uint32_t dwSize)\r
+{\r
+    volatile uint32_t *pFIFO = (volatile uint32_t*)(pRMci->HSMCI_FIFO);\r
+    register uint32_t c4, c1;\r
+\r
+    if (dwSize == 0)\r
+        return;\r
+\r
+    c4 = dwSize >> 2;\r
+    c1 = dwSize & 0x3;\r
+\r
+    for(;c4;c4 --)\r
+    {\r
+        *pdwData ++ = *pFIFO ++;\r
+        *pdwData ++ = *pFIFO ++;\r
+        *pdwData ++ = *pFIFO ++;\r
+        *pdwData ++ = *pFIFO ++;\r
+    }\r
+    for(;c1;c1 --)\r
+    {\r
+        *pdwData ++ = *pFIFO ++;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Sends data through MCI peripheral.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param\r
+ */\r
+extern void HSMCI_Write(Hsmci *pRMci, uint32_t dwData)\r
+{\r
+    pRMci->HSMCI_TDR = dwData;\r
+}\r
+\r
+/**\r
+ * \brief Write to FIFO\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param pdwData Pointer to data buffer.\r
+ * \param dwSize  Size of data buffer (In DWord).\r
+ */\r
+extern void HSMCI_WriteFifo(Hsmci *pRMci, uint8_t *pdwData, uint32_t dwSize)\r
+{\r
+    volatile uint32_t *pFIFO = (volatile uint32_t*)(pRMci->HSMCI_FIFO);\r
+    register uint32_t c4, c1;\r
+\r
+    if (dwSize == 0)\r
+        return;\r
+\r
+    c4 = dwSize >> 2;\r
+    c1 = dwSize & 0x3;\r
+\r
+    for(;c4;c4 --)\r
+    {\r
+        *pFIFO ++ = *pdwData ++;\r
+        *pFIFO ++ = *pdwData ++;\r
+        *pFIFO ++ = *pdwData ++;\r
+        *pFIFO ++ = *pdwData ++;\r
+    }\r
+    for(;c1;c1 --)\r
+    {\r
+        *pFIFO ++ = *pdwData ++;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Return the status register.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \return MCI status register.\r
+ */\r
+extern uint32_t HSMCI_GetStatus(Hsmci *pRMci)\r
+{\r
+    return pRMci->HSMCI_SR;\r
+}\r
+\r
+/**\r
+ * \brief Configure the HSMCI DMA\r
+ *  \r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \param dwConfigure Configure value. \r
+ */\r
+extern void HSMCI_ConfigureDma(Hsmci *pRMci, uint32_t dwConfigure)\r
+{\r
+    pRMci->HSMCI_DMA = dwConfigure;\r
+}\r
+\r
+/**\r
+ * \brief Enable the HSMCI DMA\r
+ *  \r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \param bEnable 1 to enable, 0 to disable.\r
+ */\r
+extern void HSMCI_EnableDma(Hsmci *pRMci, uint8_t bEnable)\r
+{\r
+    if (bEnable)\r
+    {\r
+        pRMci->HSMCI_DMA |= HSMCI_DMA_DMAEN ;//| HSMCI_DMA_CHKSIZE_32;\r
+    }\r
+    else\r
+    {\r
+        pRMci->HSMCI_DMA &= ~HSMCI_DMA_DMAEN;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Configure the HSMCI\r
+ *  \r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param dwConfigure Configure value. \r
+ */\r
+extern void HSMCI_Configure(Hsmci *pRMci, uint32_t dwConfigure)\r
+{\r
+    pRMci->HSMCI_CFG = dwConfigure;\r
+}\r
+\r
+/**\r
+ * \brief Enable/Disable High-Speed mode for MCI\r
+ * \r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \param bHsEnable Enable/Disable high-speed.\r
+ */\r
+extern void HSMCI_HsEnable(Hsmci *pRMci, uint8_t bHsEnable)\r
+{\r
+    if (bHsEnable)\r
+    {\r
+        pRMci->HSMCI_CFG |= HSMCI_CFG_HSMODE;\r
+    }\r
+    else\r
+    {\r
+        pRMci->HSMCI_CFG &= ~HSMCI_CFG_HSMODE;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Check if High-speed mode is enabled on MCI\r
+ * \param pRMci Pointer to an Hsmci instance.\r
+ * \return 1 \r
+ */\r
+extern uint8_t HSMCI_IsHsEnabled(Hsmci * pRMci)\r
+{\r
+    return ((pRMci->HSMCI_CFG & HSMCI_CFG_HSMODE) > 0);\r
+}\r
+\r
+/**\r
+ * \brief Configure the Write Protection Mode\r
+ *  \r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \param dwConfigure WP mode configure value. \r
+ */\r
+extern void HSMCI_ConfigureWP(Hsmci *pRMci, uint32_t dwConfigure)\r
+{\r
+    pRMci->HSMCI_WPMR = dwConfigure;\r
+}\r
+\r
+/**\r
+ * \brief Return the write protect status register.\r
+ *\r
+ * \param pRMci   Pointer to an Hsmci instance.\r
+ * \return MCI write protect status register.\r
+ */\r
+extern uint32_t HSMCI_GetWPStatus(Hsmci *pRMci)\r
+{\r
+    return pRMci->HSMCI_WPSR;\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/icm.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/icm.c
new file mode 100644 (file)
index 0000000..6b21f39
--- /dev/null
@@ -0,0 +1,243 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT ICMLL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup icm_module Working with ICM\r
+ * The TWI driver provides the interface to True Random Number Generator (ICM) passes the American NIST Special Publication 800-22 and Diehard\r
+Random Tests Suites.\r
+The ICM may be used as an entropy source for seeding an NIST approved DRNG (Deterministic RNG) as required by\r
+FIPS PUB 140-2 and 140-3. use the TWI\r
+ * peripheral.\r
+ *\r
+ * \section Usage\r
+ * <ul>\r
+ * <li> Configures a TWI peripheral to operate in master mode, at the given\r
+ * frequency (in Hz) using TWI_Configure(). </li>\r
+ * <li> Sends a STOP condition on the TWI using TWI_Stop().</li>\r
+ * <li> Starts a read operation on the TWI bus with the specified slave using\r
+ * TWI_StartRead(). Data must then be read using TWI_ReadByte() whenever\r
+ * a byte is available (poll using TWI_ByteReceived()).</li>\r
+ * <li> Starts a write operation on the TWI to access the selected slave using\r
+ * TWI_StartWrite(). A byte of data must be provided to start the write;\r
+ * other bytes are written next.</li>\r
+ * <li> Sends a byte of data to one of the TWI slaves on the bus using TWI_WriteByte().\r
+ * This function must be called once before TWI_StartWrite() with the first byte of data\r
+ * to send, then it ICMll be called repeatedly after that to send the remaining bytes.</li>\r
+ * <li> Check if a byte has been received and can be read on the given TWI\r
+ * peripheral using TWI_ByteReceived().<\r
+ * Check if a byte has been sent using TWI_ByteSent().</li>\r
+ * <li> Check if the current transmission is complete (the STOP has been sent)\r
+ * using TWI_TransferComplete().</li>\r
+ * <li> Enables & disable the selected interrupts sources on a TWI peripheral\r
+ * using TWI_EnableIt() and TWI_DisableIt().</li>\r
+ * <li> Get current status register of the given TWI peripheral using\r
+ * TWI_GetStatus(). Get current status register of the given TWI peripheral, but\r
+ * masking interrupt sources which are not currently enabled using\r
+ * TWI_GetMaskedStatus().</li>\r
+ * </ul>\r
+ * For more accurate information, please look at the TWI section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref twi.c\n\r
+ * \ref twi.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of True Random Number Generator (ICM)\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/** \brief Structure for storing parameters for DMA view1 that can be\r
+ * performed by the DMA Master transfer.*/\r
+typedef struct _LinkedListDescriporView1\r
+{\r
+    /** Next Descriptor Address number. */\r
+    uint32_t mbr_nda;\r
+    /** Microblock Control Member. */\r
+    uint32_t mbr_ubc;\r
+    /** Source Address Member. */\r
+    uint32_t mbr_sa;\r
+    /** Destination Address Member. */\r
+    uint32_t mbr_da;\r
+}LinkedListDescriporView1;\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Enable ICM, the ICM controller is activated\r
+ */\r
+void ICM_Enable(void)\r
+{\r
+    ICM->ICM_CTRL = ICM_CTRL_ENABLE;\r
+}\r
+\r
+/**\r
+ * \brief Disable ICM, if a region is active, this region is terminated\r
+ */\r
+void ICM_Disable(void)\r
+{\r
+    ICM->ICM_CTRL = ICM_CTRL_DISABLE;\r
+}\r
+\r
+/**\r
+ * \brief Resets the ICM controller.\r
+ */\r
+void ICM_SoftReset(void)\r
+{\r
+    ICM->ICM_CTRL = ICM_CTRL_SWRST;\r
+}\r
+\r
+/**\r
+ * \brief Recompute Internal hash.\r
+ * \param region, When REHASH[region] is set to one, the region digest is re-computed. \r
+ * \note This bit is only available when Region monitoring is disabled.\r
+ */\r
+void ICM_ReComputeHash(uint8_t region)\r
+{\r
+    ICM->ICM_CTRL = ICM_CTRL_REHASH(region);\r
+}\r
+\r
+/**\r
+ * \brief Enable region monitoring for given region\r
+ * \param region, When bit RMEN[region] is set to one, the monitoring of Region is activated.\r
+ */\r
+void ICM_EnableMonitor(uint8_t region)\r
+{\r
+    ICM->ICM_CTRL = ICM_CTRL_RMEN(region);\r
+}\r
+\r
+/**\r
+ * \brief Disable region monitoring for given region\r
+ * \param region, When bit RMDIS[region] is set to one, the monitoring of Region is disabled.\r
+ */\r
+void ICM_DisableMonitor(uint8_t region)\r
+{\r
+    ICM->ICM_CTRL = ICM_CTRL_RMDIS(region);\r
+}\r
+\r
+/**\r
+ * \brief Configures an ICM peripheral with the specified parameters.\r
+ *  \param mode  Desired value for the ICM mode register (see the datasheet).\r
+ */\r
+void ICM_Configure(uint32_t mode)\r
+{\r
+    ICM->ICM_CFG = mode; \r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a ICM peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void ICM_EnableIt(uint32_t sources)\r
+{\r
+    ICM->ICM_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a ICM peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void ICM_DisableIt(uint32_t sources)\r
+{\r
+    ICM->ICM_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Get the current interrupt status register of the given ICM peripheral.\r
+ * \return  ICM status register.\r
+ */\r
+uint32_t ICM_GetIntStatus(void)\r
+{\r
+    return ICM->ICM_ISR;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given ICM peripheral.\r
+ * \return  ICM status register.\r
+ */\r
+uint32_t ICM_GetStatus(void)\r
+{\r
+    return ICM->ICM_SR;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Get the undefined access status register of the given ICM peripheral.\r
+ * \return  ICM status register.\r
+ */\r
+uint32_t ICM_GetUStatus(void)\r
+{\r
+    return ICM->ICM_UASR;\r
+}\r
+\r
+/**\r
+ * \brief Set descriptor area start address register.\r
+ * \param addr start address\r
+ * \note The start address is a multiple of the total size of the data structure (64 bytes).\r
+ */\r
+void ICM_SetDescStartAddress(uint32_t addr)\r
+{\r
+    ICM->ICM_DSCR = addr;\r
+}\r
+\r
+/**\r
+ * \brief Set hash area start address register.\r
+ * \param addr start address\r
+ * \note This field points at the Hash memory location. The address must be a multiple of 128 bytes.\r
+ */\r
+void ICM_SetHashStartAddress(uint32_t addr)\r
+{\r
+    ICM->ICM_HASH = addr;\r
+}\r
+\r
+/**\r
+ * \brief Set ICM user initial Hash value register.\r
+ * \param val Initial Hash Value\r
+ */\r
+void ICM_SetInitHashValue(uint32_t val)\r
+{\r
+    ICM->ICM_UIHVAL[0] = ICM_UIHVAL_VAL(val);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/isi.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/isi.c
new file mode 100644 (file)
index 0000000..360b88e
--- /dev/null
@@ -0,0 +1,257 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Export functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Enable ISI\r
+ */\r
+void ISI_Enable(void)\r
+{\r
+    /* Write one to this field to enable the module. */ \r
+    REG_ISI_CR |= ISI_CR_ISI_EN;\r
+    /* Software must poll ENABLE field in the ISI_STATUS register to verify that the command \r
+    has successfully completed.*/\r
+    while( (REG_ISI_SR & ISI_SR_ENABLE) != ISI_SR_ENABLE);\r
+}\r
+\r
+/**\r
+ * \brief Enable ISI Dma channel\r
+ * \param  channel to be enabled\r
+ */\r
+void ISI_DmaChannelEnable(uint32_t channel)\r
+{\r
+    REG_ISI_DMA_CHER |= channel;\r
+}\r
+\r
+/**\r
+ * \brief Disable ISI Dma channel\r
+ * \param  channel to be disabled\r
+ */\r
+void ISI_DmaChannelDisable(uint32_t channel)\r
+{\r
+    REG_ISI_DMA_CHDR |=channel;\r
+}\r
+\r
+/**\r
+ * \brief Disable ISI\r
+ */\r
+void ISI_Disable(void)\r
+{\r
+    /* Write one to this field to disable the module */\r
+    REG_ISI_CR |= ISI_CR_ISI_DIS;\r
+    /* Software must poll DIS_DONE field in the ISI_STATUS register to verify that the command \r
+    has successfully completed.*/\r
+    while( (REG_ISI_SR & ISI_SR_DIS_DONE) != ISI_SR_DIS_DONE);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Enable ISI interrupt\r
+ * \param  flag of interrupt to enable\r
+ */\r
+void ISI_EnableInterrupt(uint32_t flag)\r
+{\r
+    REG_ISI_IER = flag;\r
+}\r
+\r
+/**\r
+ * \brief Disable ISI interrupt\r
+ * \param  flag of interrupt to disable\r
+ */\r
+void ISI_DisableInterrupt(uint32_t flag)\r
+{\r
+    REG_ISI_IDR = flag;\r
+}\r
+\r
+/**\r
+ * \brief Return ISI status register\r
+ * \return Status of ISI register\r
+ */\r
+uint32_t ISI_StatusRegister(void)\r
+{\r
+    return(REG_ISI_SR);\r
+}\r
+\r
+/**\r
+ * \brief Enable Codec path for capture next frame\r
+ */\r
+void ISI_CodecPathFull(void)\r
+{\r
+    /* The codec path is enabled and the next frame is captured.\r
+       Both codec and preview datapaths are working simultaneously */\r
+    REG_ISI_CR |= ISI_CR_ISI_CDC;\r
+    REG_ISI_CFG1 |= ISI_CFG1_FULL;\r
+}\r
+\r
+/**\r
+ * \brief Set frame rate\r
+ * \param frate frame rate capture\r
+ */\r
+void ISI_SetFrame(uint32_t frate)\r
+{\r
+    if( frate > 7 ) {\r
+        TRACE_ERROR("FRate too big\n\r");\r
+        frate = 7;\r
+    }\r
+    REG_ISI_CFG1 |= ISI_CFG1_FRATE(frate);\r
+}\r
+\r
+/**\r
+ * \brief Get the number of byte per pixels\r
+ * \param bmpRgb BMP type can be YUV or RGB\r
+ */\r
+uint8_t ISI_BytesForOnePixel(uint8_t bmpRgb)\r
+{\r
+    uint8_t nbByte_Pixel;\r
+\r
+    if (bmpRgb == RGB) {\r
+        if ((REG_ISI_CFG2 & ISI_CFG2_RGB_MODE) == ISI_CFG2_RGB_MODE){\r
+            // RGB: 5:6:5 16bits/pixels\r
+            nbByte_Pixel = 2;\r
+        } \r
+        else {\r
+            // RGB: 8:8:8 24bits/pixels\r
+            nbByte_Pixel = 3;\r
+        }\r
+    } \r
+    else {\r
+        // YUV: 2 pixels for 4 bytes\r
+        nbByte_Pixel = 2;\r
+    }\r
+    return nbByte_Pixel;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Reset ISI\r
+ */\r
+void ISI_Reset(void)\r
+{\r
+    uint32_t timeout=0;\r
+\r
+    /* Resets the image sensor interface.\r
+       Finish capturing the current frame and then shut down the module.*/\r
+    REG_ISI_CR = ISI_CR_ISI_SRST | ISI_CR_ISI_DIS;\r
+    /* wait Software reset has completed successfully. */\r
+    while( (!(REG_ISI_SR & ISI_SR_SRST))\r
+        && (timeout < 0x5000) ){\r
+        timeout++;\r
+    }\r
+    if( timeout == 0x500000 ) {\r
+        TRACE_ERROR("ISI-Reset timeout\n\r");\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief ISI initialize\r
+ * \param pVideo structure of video driver\r
+ */\r
+void ISI_Init(pIsi_Video pVideo)\r
+{\r
+    uint32_t hRatio, vRatio;\r
+    ISI_Reset();\r
+\r
+    // SLD pixel clock periods to wait before the beginning of a line.\r
+    // SFD lines are skipped at the beginning of the frame.\r
+    REG_ISI_CFG1 |= ISI_CFG1_SLD(pVideo->Hblank) + ISI_CFG1_SFD(pVideo->Vblank);\r
+    TRACE_DEBUG("ISI_CFG1=0x%X\n\r", REG_ISI_CFG1);\r
+\r
+    // IM_VSIZE: Vertical size of the Image sensor [0..2047]\r
+    // Vertical size = IM_VSIZE + 1\r
+    // IM_HSIZE: Horizontal size of the Image sensor [0..2047]\r
+    // Horizontal size = IM_HSIZE + 1\r
+    // YCC_SWAP : YCC image data    \r
+    REG_ISI_CFG2 = ISI_CFG2_IM_VSIZE(pVideo->codec_vsize - 1)\r
+                 + ISI_CFG2_IM_HSIZE(pVideo->codec_hsize - 1);\r
+    \r
+    if (pVideo->rgb_or_yuv == RGB) {\r
+        REG_ISI_CFG2 |= ISI_CFG2_COL_SPACE | ISI_CFG2_RGB_MODE ;\r
+    }\r
+    else {\r
+         REG_ISI_CFG2|= ISI_CFG2_YCC_SWAP(2) ;\r
+    }\r
+    TRACE_DEBUG("ISI_CFG2=0x%X\n\r", REG_ISI_CFG2);\r
+\r
+    // Vertical Preview size = PREV_VSIZE + 1 (480 max only in RGB mode).\r
+    // Horizontal Preview size = PREV_HSIZE + 1 (640 max only in RGB mode).\r
+\r
+    if( (pVideo->lcd_vsize > 480) || (pVideo->lcd_hsize > 800)) {\r
+        TRACE_ERROR("Size LCD bad define %u, %u\n\r",(unsigned int)pVideo->lcd_vsize ,(unsigned int)pVideo->lcd_hsize);\r
+        REG_ISI_PSIZE = ((480 - 1) ) + (((800-1) << 16) );\r
+    }\r
+    else {\r
+        REG_ISI_PSIZE = ((pVideo->lcd_vsize -1)) + (((pVideo->lcd_hsize -1) << 16) );\r
+    }\r
+    \r
+    // DEC_FACTOR is 8-bit width, range is from 16 to 255. \r
+    // Values from 0 to 16 do not perform any decimation.\r
+    //REG_ISI_PDECF = (16 * pVideo->codec_hsize)/640;\r
+    hRatio = (16 * pVideo->codec_hsize)/(pVideo->lcd_hsize); \r
+    vRatio = (16 * pVideo->codec_vsize)/(pVideo->lcd_vsize); \r
+    REG_ISI_PDECF = (hRatio > vRatio )? vRatio: hRatio;\r
+\r
+    if (REG_ISI_PDECF < 16) REG_ISI_PDECF = 16;\r
+\r
+    REG_ISI_DMA_P_DSCR = pVideo->Isi_fbd_base;\r
+    REG_ISI_DMA_P_CTRL = ISI_DMA_P_CTRL_P_FETCH;\r
+    REG_ISI_DMA_P_ADDR = pVideo->lcd_fb_addr;\r
+\r
+    REG_ISI_DMA_C_DSCR = pVideo->codec_fbd_base;\r
+    REG_ISI_DMA_C_CTRL = ISI_DMA_C_CTRL_C_FETCH;\r
+    REG_ISI_DMA_C_ADDR = pVideo->codec_fb_addr;\r
+\r
+    // C0: Color Space Conversion Matrix Coefficient C0\r
+    // C1: Color Space Conversion Matrix Coefficient C1\r
+    // C2: Color Space Conversion Matrix Coefficient C2\r
+    // C3: Color Space Conversion Matrix Coefficient C3\r
+    REG_ISI_Y2R_SET0  = ISI_Y2R_SET0_C0(0x95)\r
+                      + ISI_Y2R_SET0_C1(0xFF)\r
+                      + ISI_Y2R_SET0_C2(0x68)\r
+                      + ISI_Y2R_SET0_C3(0x32);\r
+\r
+    // C4: Color Space Conversion Matrix coefficient C4\r
+    // Yoff: Color Space Conversion Luminance 128 offset\r
+    // Croff: Color Space Conversion Red Chrominance 16 offset\r
+    // Cboff: Color Space Conversion Blue Chrominance 16 offset\r
+    REG_ISI_Y2R_SET1  = ISI_Y2R_SET1_C4(0xCC)\r
+                      + ISI_Y2R_SET1_Yoff\r
+                      + ISI_Y2R_SET1_Croff\r
+                      + ISI_Y2R_SET1_Cboff;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/l2cc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/l2cc.c
new file mode 100644 (file)
index 0000000..bf54ffc
--- /dev/null
@@ -0,0 +1,565 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License  \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+\r
+\r
+\r
+/**\r
+ * \brief Check if Level 2 cache is enable.\r
+ */\r
+unsigned int L2CC_IsEnabled(L2cc* pL2CC)\r
+{\r
+  return ((pL2CC->L2CC_CR) & L2CC_CR_L2CEN);  \r
+}\r
+\r
+/**\r
+ * \brief Enable Level 2 cache.\r
+ */\r
+\r
+void L2CC_Enable(L2cc* pL2CC)\r
+{\r
+  pL2CC->L2CC_CR |= L2CC_CR_L2CEN;\r
+  TRACE_INFO("L2 cache is enabled");\r
+}\r
+\r
+/**\r
+ * \brief Disbale Level 2 cache.\r
+ */\r
+\r
+void L2CC_Disable(L2cc* pL2CC)\r
+{  \r
+  pL2CC->L2CC_CR &= (!L2CC_CR_L2CEN);\r
+  TRACE_INFO("L2 cache is Disabled");\r
+}\r
+   \r
+/**\r
+ * \brief Configures Level 2 cache as exclusive cache.\r
+ */\r
+void L2CC_ExclusiveCache(L2cc* pL2CC, uint8_t Enable)\r
+{\r
+  uint32_t Aux_Cfg;\r
+  if(L2CC_IsEnabled(pL2CC))\r
+  {\r
+    pL2CC->L2CC_CR = DISABLE;\r
+  }\r
+  Aux_Cfg = pL2CC->L2CC_ACR;\r
+  if(Enable)\r
+  {\r
+    CP15_ExclusiveCache();\r
+    Aux_Cfg |= L2CC_ACR_EXCC;\r
+    TRACE_INFO("L2 Exclusive mode Enabled\n\r");\r
+  }\r
+  else\r
+  {\r
+    CP15_NonExclusiveCache();\r
+    Aux_Cfg &= ~L2CC_ACR_EXCC;\r
+    TRACE_INFO("L2 Exclusive mode Disabled\n\r");\r
+  }\r
+  \r
+  pL2CC->L2CC_ACR |= Aux_Cfg;\r
+  \r
+}\r
+\r
+/**\r
+ * \brief Configures Level 2 cache RAM Latency (Tag and Data).\r
+ * \param pLat  Structure containing RAM Tag and Data latencies\r
+ */\r
+void L2CC_ConfigLatRAM(L2cc* pL2CC, RAMLatencyControl  *pLat)\r
+{\r
+  if(L2CC_IsEnabled(pL2CC))\r
+  {\r
+    pL2CC->L2CC_CR = DISABLE;\r
+  }\r
+  \r
+  pL2CC->L2CC_TRCR = (L2CC_TRCR_TSETLAT(pLat->TagRAM.SetupLAT) | L2CC_TRCR_TRDLAT(pLat->TagRAM.ReadLAT) | L2CC_TRCR_TWRLAT(pLat->TagRAM.WriteLAT));\r
+  pL2CC->L2CC_DRCR = (L2CC_DRCR_DSETLAT(pLat->DataRAM.SetupLAT) | L2CC_DRCR_DRDLAT(pLat->DataRAM.ReadLAT) | L2CC_DRCR_DWRLAT(pLat->DataRAM.WriteLAT));\r
+  \r
+}\r
+\r
+\r
+/**\r
+ * \brief Configures Level 2 cache.\r
+ * \param L2cc_Config  Configuration values to put in Auxiliary, prefetch, debug and powercontrol registers\r
+ */\r
+void L2CC_Config(L2cc* pL2CC, L2CC_Control L2cc_Config)\r
+{\r
+  uint32_t AuxiliaryControl, DebugControl, PrefetchControl, PowerControl;\r
+  \r
+  if(L2cc_Config.OFFSET_Val >31)\r
+  {\r
+    assert(0);\r
+  }\r
+  if((L2cc_Config.OFFSET_Val >7) && (L2cc_Config.OFFSET_Val <15))\r
+  {\r
+    assert(0);\r
+  }\r
+  if((L2cc_Config.OFFSET_Val >15) && (L2cc_Config.OFFSET_Val <23))\r
+  {\r
+    assert(0);\r
+  }\r
+  if((L2cc_Config.OFFSET_Val >23) && (L2cc_Config.OFFSET_Val <31))\r
+  {\r
+    assert(0);\r
+  }\r
+  \r
+//  if( ((L2cc_Config.IDLEN_Val==1) || (L2cc_Config.DLFWRDIS_Val==0)) && L2cc_Config.DLEN_Val==0)\r
+//  {\r
+//    TRACE_ERROR(" DLEN is not enabled for Double Line fill");\r
+//    assert(0);\r
+//  }\r
+  \r
+  if(L2CC_IsEnabled(pL2CC))\r
+  {\r
+    pL2CC->L2CC_CR = DISABLE;\r
+  }\r
+  \r
+  AuxiliaryControl = ((L2cc_Config.HPSO_Val  << 10)  | \r
+                      (L2cc_Config.SBDLE_Val << 11)  |\r
+                      (L2cc_Config.SAIE_Val  << 13)  |\r
+                      (L2cc_Config.EMBEN_Val << 20)  |\r
+                      (L2cc_Config.PEN_Val   << 21)  |\r
+                      (L2cc_Config.SAOEN_Val << 22)  |\r
+                      (L2CC_ACR_FWA(L2cc_Config.FWA_Val))   |\r
+                      (L2cc_Config.CRPOL_Val << 25) |\r
+                      (L2cc_Config.NSLEN_Val << 26) |\r
+                      (L2cc_Config.NSIAC_Val << 27) |\r
+                      (L2cc_Config.DPEN_Val  << 28) |\r
+                      (L2cc_Config.IPEN_Val  << 29) );\r
+                        \r
+                       \r
+\r
+    DebugControl =   ((L2cc_Config.DCL_Val   << 0)   | \r
+                      (L2cc_Config.DWB_Val <<   1) );\r
+                         \r
+    PrefetchControl = ((L2cc_Config.OFFSET_Val  << 0)   | \r
+                      (L2cc_Config.NSIDEN_Val   << 21)  |\r
+                      (L2cc_Config.IDLEN_Val    << 23)  |\r
+                      (L2cc_Config.PDEN_Val     << 24)  |\r
+                      (L2cc_Config.DLFWRDIS_Val << 27)  |\r
+                      (L2cc_Config.DPEN_Val     << 28)  |\r
+                      (L2cc_Config.IPEN_Val     << 29)  |\r
+                      (L2cc_Config.DLEN_Val     << 30));\r
+                            \r
+    PowerControl =    ((L2cc_Config.DCL_Val  << 0)  | \r
+                      (L2cc_Config.DWB_Val   << 1));\r
+                        \r
+  pL2CC->L2CC_ACR  = AuxiliaryControl;   \r
+  \r
+  pL2CC->L2CC_DCR = DebugControl;\r
+  \r
+  pL2CC->L2CC_PCR = PrefetchControl;\r
+  \r
+  pL2CC->L2CC_POWCR = PowerControl;\r
+   \r
+}\r
+\r
+\r
+/**\r
+ * \brief Enables Data prefetch on L2\r
+ */\r
+void L2CC_DataPrefetchEnable(L2cc* pL2CC )\r
+{  \r
+\r
+  pL2CC->L2CC_PCR |= L2CC_PCR_DATPEN;\r
+    \r
+}\r
+             \r
+\r
+/**\r
+ * \brief Enables instruction prefetch on L2\r
+ */\r
+void L2CC_InstPrefetchEnable(L2cc* pL2CC )\r
+{\r
+\r
+  pL2CC->L2CC_PCR |= L2CC_PCR_INSPEN;  \r
+  \r
+}\r
+\r
+\r
+/**\r
+ * \brief Enables instruction prefetch on L2\r
+ */\r
+void L2CC_EnableResetCounter(L2cc* pL2CC , uint8_t EvenetCounter)\r
+{\r
+\r
+  assert((EvenetCounter>3)?0:1);\r
+  \r
+  pL2CC->L2CC_ECR = (L2CC_ECR_EVCEN | (EvenetCounter << 1 ));  \r
+  \r
+}\r
+\r
+/**\r
+ * \brief Configures Event of Level 2 cache.\r
+ * \param EventCounter  Eventcounter 1 or 0\r
+ * \param Source  Event Genration source\r
+ * \param IntGen  Event Counter Interrupt Generation condition\r
+ */\r
+void L2CC_EventConfig(L2cc* pL2CC, uint8_t EventCounter, uint8_t Source, uint8_t IntGen)\r
+{\r
+  if(L2CC_IsEnabled(pL2CC))\r
+  {\r
+    pL2CC->L2CC_CR = DISABLE;\r
+  }\r
+  \r
+  assert((EventCounter > 1)?0:1);\r
+  \r
+  if(!EventCounter)\r
+  {\r
+    pL2CC->L2CC_ECFGR0 = (Source | IntGen);  \r
+  }\r
+  else\r
+  {\r
+    pL2CC->L2CC_ECFGR1 = (Source | IntGen );  \r
+  }\r
+   \r
+}\r
+\r
+\r
+/**\r
+ * \brief Reads Eventcounter value.\r
+ * \param EventCounter  choose Eventcounter 1 or 0\r
+ */\r
+unsigned int L2CC_EventCounterValue(L2cc* pL2CC, uint8_t EventCounter)\r
+{\r
+    \r
+\r
+  assert((EventCounter > 1)?0:1);\r
+  \r
+  if(!EventCounter)\r
+  {\r
+    return pL2CC->L2CC_EVR0;  \r
+  }\r
+  else\r
+  {\r
+    return pL2CC->L2CC_EVR1;\r
+  }\r
+  \r
+}\r
+\r
+/**\r
+ * \brief Enable interrupts\r
+ * \param ITSource  Interrupt source\r
+ */\r
+void L2CC_EnableIT(L2cc* pL2CC, uint16_t ITSource)\r
+{\r
+  pL2CC->L2CC_IMR  |= ITSource;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Disable interrupts\r
+ * \param ITSource  Interrupt source\r
+ */\r
+void L2CC_DisableIT(L2cc* pL2CC, uint16_t ITSource)\r
+{\r
+  pL2CC->L2CC_IMR  &= (!ITSource);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Enabled interrupt's raw status\r
+ * \param ITSource  Interrupt source\r
+ */\r
+unsigned short L2CC_ITStatusRaw(L2cc* pL2CC, uint16_t ITSource)\r
+{\r
+  return ((pL2CC->L2CC_RISR)  & ITSource)?1:0;\r
+}\r
+\r
+/**\r
+ * \brief Status of masked interrupts\r
+ * \param ITSource  Interrupt source\r
+ */\r
+unsigned short L2CC_ITStatusMask(L2cc* pL2CC, uint16_t ITSource)\r
+{\r
+   return ((pL2CC->L2CC_MISR)  & ITSource)?1:0;\r
+}\r
+\r
+/**\r
+ * \brief Clear interrupts\r
+ * \param ITSource  Interrupt source\r
+ */\r
+void L2CC_ITClear(L2cc* pL2CC, uint16_t ITSource)\r
+{\r
+    pL2CC->L2CC_ICR  |= ITSource;\r
+}\r
+\r
+                       \r
+/**\r
+ * \brief Poll SPNIDEN signal\r
+ */\r
+uint8_t L2CC_PollSPNIDEN(L2cc* pL2CC)\r
+{\r
+    return ((pL2CC->L2CC_DCR  & L2CC_DCR_SPNIDEN) >> 2);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Synchronizes the L2 cache\r
+ */\r
+void L2CC_CacheSync(L2cc* pL2CC)\r
+{\r
+   while((pL2CC->L2CC_CSR) & L2CC_CSR_C);\r
+   pL2CC->L2CC_CSR = L2CC_CSR_C;\r
+   while((pL2CC->L2CC_CSR) & L2CC_CSR_C);\r
+}\r
+\r
+/**\r
+ * \brief Invalidate cache by Physical addersse\r
+ * \param P_Address  Physical addresse\r
+ */\r
+void L2CC_InvalidatePAL(L2cc* pL2CC, uint32_t P_Address)\r
+{\r
+  static uint32_t Tag;\r
+  static uint16_t Index;\r
+  Tag   = (P_Address >> (OFFSET_BIT + INDEX_BIT));\r
+  Index = (P_Address >> OFFSET_BIT) & ((1 << INDEX_BIT) - 1);\r
+  \r
+  pL2CC->L2CC_IPALR = (L2CC_IPALR_TAG(Tag) | L2CC_IPALR_IDX(Index) | L2CC_IPALR_C);\r
+  \r
+  while((pL2CC->L2CC_IPALR) & L2CC_IPALR_C);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Clean cache by Physical addersse\r
+ * \param P_Address  Physical addresse\r
+ */\r
+void L2CC_CleanPAL(L2cc* pL2CC, uint32_t P_Address)\r
+{\r
+  static uint32_t Tag;\r
+  static uint16_t Index;\r
+  Tag   = (P_Address >> (OFFSET_BIT + INDEX_BIT));\r
+  Index = (P_Address >> OFFSET_BIT) & ((1 << INDEX_BIT) - 1);\r
+  \r
+  pL2CC->L2CC_CPALR = (L2CC_CPALR_TAG(Tag) | L2CC_CPALR_IDX(Index) | L2CC_CPALR_C);\r
+  \r
+  while((pL2CC->L2CC_CPALR) & L2CC_CPALR_C);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Clean index cache by Physical addersse\r
+ * \param P_Address  Physical addresse\r
+ */\r
+void L2CC_CleanIx(L2cc* pL2CC, uint32_t P_Address)\r
+{\r
+  static uint32_t Tag;\r
+  static uint16_t Index;\r
+  Tag   = (P_Address >> (OFFSET_BIT + INDEX_BIT));\r
+  Index = (P_Address >> OFFSET_BIT) & ((1 << INDEX_BIT) - 1);\r
+  \r
+  pL2CC->L2CC_CIPALR = (L2CC_CIPALR_TAG(Tag) | L2CC_CIPALR_IDX(Index) | L2CC_CIPALR_C);\r
+  \r
+  while((pL2CC->L2CC_CIPALR) & L2CC_CIPALR_C);\r
+}\r
+\r
+/**\r
+ * \brief Invalidate cache by way\r
+ * \param Way  Way number\r
+ */\r
+void L2CC_InvalidateWay(L2cc* pL2CC, uint8_t Way)\r
+{\r
+  pL2CC->L2CC_IWR = Way;\r
+  \r
+  while(pL2CC->L2CC_IWR);\r
+  while(pL2CC->L2CC_CSR);\r
+  \r
+}\r
+\r
+/**\r
+ * \brief Clean cache by way\r
+ * \param Way  Way number\r
+ */\r
+void L2CC_CleanWay(L2cc* pL2CC, uint8_t Way)\r
+{\r
+  pL2CC->L2CC_CWR = Way;\r
+  \r
+  while(pL2CC->L2CC_CWR);\r
+  while(pL2CC->L2CC_CSR);\r
+  \r
+}\r
+\r
+/**\r
+ * \brief Clean Invalidate cache by way\r
+ * \param Way  Way number\r
+ */\r
+static void L2CC_CleanInvalidateWay(L2cc* pL2CC, uint8_t Way)\r
+{\r
+  pL2CC->L2CC_CIWR = Way;\r
+  \r
+  while(pL2CC->L2CC_CSR);\r
+  \r
+}\r
+\r
+\r
+/**\r
+ * \brief Clean cache by Index\r
+ * \param P_Address  Physical addresse\r
+ * \param Way  Way number\r
+ */\r
+void L2CC_CleanIndex(L2cc* pL2CC, uint32_t P_Address, uint8_t Way)\r
+{  \r
+  static uint16_t Index;\r
+  Index = (P_Address >> OFFSET_BIT) & ((1 << INDEX_BIT) - 1);\r
+  \r
+  pL2CC->L2CC_CIR = (L2CC_CIR_IDX(Index) | L2CC_CIR_WAY(Way) | L2CC_CIR_C);\r
+  \r
+  while((pL2CC->L2CC_CIR) & L2CC_CIR_C);\r
+}\r
+\r
+\r
+/**\r
+ * \brief Clean Invalidate cache by index\r
+ * \param P_Address  Physical addresse\r
+ * \param Way  Way number\r
+ */\r
+void L2CC_CleanInvalidateIndex(L2cc* pL2CC, uint32_t P_Address, uint8_t Way)\r
+{  \r
+  static uint16_t Index;\r
+  Index = (P_Address >> OFFSET_BIT) & ((1 << INDEX_BIT) - 1);\r
+  \r
+  pL2CC->L2CC_CIIR = (L2CC_CIIR_IDX(Index) | L2CC_CIIR_WAY(Index) | L2CC_CIIR_C);\r
+  \r
+  while((pL2CC->L2CC_CIIR) & L2CC_CIIR_C);\r
+}\r
+\r
+\r
+/**\r
+ * \brief cache Data lockdown\r
+ * \param Way  Way number\r
+ */\r
+void L2CC_DataLockdown(L2cc* pL2CC, uint8_t Way)\r
+{\r
+  pL2CC->L2CC_DLKR = Way;\r
+  \r
+  while(pL2CC->L2CC_CSR);\r
+}\r
+\r
+/**\r
+ * \brief cache instruction lockdown\r
+ * \param Way  Way number\r
+ */\r
+void L2CC_InstructionLockdown(L2cc* pL2CC, uint8_t Way)\r
+{\r
+  pL2CC->L2CC_ILKR = Way;\r
+  \r
+  while(pL2CC->L2CC_CSR);\r
+}\r
+\r
+\r
+\r
+static void L2CC_Clean(void)\r
+{  \r
+  CP15_CacheClean(CP15_DCache);                 // Clean of L1; This is broadcast within the cluster\r
+  L2CC_CleanWay(L2CC, 0xFF);                    // forces the address out past level 2\r
+  L2CC_CacheSync(L2CC);                         // Ensures completion of the L2 clean\r
+}\r
+\r
+static void L2CC_Invalidate(void)\r
+{    \r
+  L2CC_InvalidateWay(L2CC, 0xFF);               // forces the address out past level 2\r
+  L2CC_CacheSync(L2CC);                         // Ensures completion of the L2 inval\r
+  CP15_CacheInvalidate(CP15_DCache);            // Inval of L1; This is broadcast within the cluster\r
+}\r
+\r
+static void L2CC_CleanInvalidate(void)\r
+{    \r
+  CP15_CacheClean(CP15_DCache);                 // Clean of L1; This is broadcast within the cluster\r
+  L2CC_CleanInvalidateWay(L2CC, 0xFF);          // forces the address out past level 2\r
+  L2CC_CacheSync(L2CC);                         // Ensures completion of the L2 inval\r
+  CP15_CacheInvalidate(CP15_DCache);            // Inval of L1; This is broadcast within the cluster    \r
+}\r
+\r
+void L2CC_CacheMaintenance(uint8_t Maint_Op)\r
+{\r
+  \r
+  switch(Maint_Op) {\r
+  case DCACHE_CLEAN:\r
+      L2CC_Clean();\r
+      break;\r
+  case DCACHE_INVAL:\r
+      L2CC_Invalidate();\r
+      break;\r
+  case DCACHE_FLUSH:\r
+      L2CC_CleanInvalidate();\r
+      break;\r
+  }\r
+}\r
+\r
+/**\r
+ *  \brief Enable level two cache controller (L2CC) \r
+ */\r
+void Enable_L2CC(void)\r
+{\r
+    L2CC_Control L2Config;\r
+    /*****1. configure L2CC ************/\r
+    L2Config.IPEN_Val = ENABLE;         // Instruction prefetch enable\r
+    L2Config.DPEN_Val = ENABLE;         // Data prefetch enable\r
+    \r
+    L2Config.DLEN_Val = ENABLE; \r
+    L2Config.IDLEN_Val = ENABLE;\r
+    //L2Config.DWB_Val = ENABLE;        // Disable Write back (enables write through, Use this setting if DDR2 mem is not write-back)\r
+    L2Config.FWA_Val =  FWA_NO_ALLOCATE;\r
+    \r
+    L2Config.OFFSET_Val= 31;\r
+    L2Config.PDEN_Val= ENABLE;\r
+    \r
+    L2Config.STBYEN_Val= ENABLE;\r
+    L2Config.DCKGATEN_Val= ENABLE;\r
+\r
+    L2CC_EventConfig(L2CC, 0, L2CC_ECFGR0_ESRC_SRC_DRHIT, L2CC_ECFGR0_EIGEN_INT_DIS);\r
+    L2CC_EventConfig(L2CC, 1, L2CC_ECFGR0_ESRC_SRC_DWHIT, L2CC_ECFGR0_EIGEN_INT_DIS);\r
+    L2CC_EnableResetCounter(L2CC, RESET_BOTH_COUNTER);\r
+     \r
+    L2CC_Config(L2CC, L2Config);\r
+\r
+    /* Enable Prefetch */\r
+    L2CC_InstPrefetchEnable(L2CC );\r
+    L2CC_DataPrefetchEnable(L2CC );\r
+    \r
+    /*2. Inavlidate whole L2C     ***********/ \r
+    L2CC_InvalidateWay(L2CC, 0xFF);\r
+    /*3. Diable all L2C Interrupt ***********/\r
+    L2CC_DisableIT(L2CC, 0x1FF);\r
+    /*4. Clear all L2C Interrupt ***********/    \r
+    L2CC_ITClear(L2CC, 0); \r
+\r
+    L2CC_ExclusiveCache(L2CC, ENABLE);\r
+    L2CC_Enable(L2CC);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/mmu.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/mmu.c
new file mode 100644 (file)
index 0000000..8e351f2
--- /dev/null
@@ -0,0 +1,246 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
\r
+/** \file */\r
+\r
+/** \r
+ * \addtogroup mmu MMU Initialization\r
+ *\r
+ * \section Usage\r
+ *\r
+ * Translation Lookaside Buffers (TLBs) are an implementation technique that caches translations or\r
+ * translation table entries. TLBs avoid the requirement for every memory access to perform a translation table\r
+ * lookup. The ARM architecture does not specify the exact form of the TLB structures for any design. In a\r
+ * similar way to the requirements for caches, the architecture only defines certain principles for TLBs:\r
+ * \r
+ * The MMU supports memory accesses based on memory sections or pages:\r
+ * Supersections Consist of 16MB blocks of memory. Support for Supersections is optional.\r
+ * -# Sections Consist of 1MB blocks of memory.\r
+ * -# Large pages Consist of 64KB blocks of memory.\r
+ * -# Small pages Consist of 4KB blocks of memory.\r
+ *\r
+ * Access to a memory region is controlled by the access permission bits and the domain field in the TLB entry.\r
+ * Memory region attributes\r
+ * Each TLB entry has an associated set of memory region attributes. These control accesses to the caches,\r
+ * how the write buffer is used, and if the memory region is Shareable and therefore must be kept coherent.\r
+ *\r
+ * Related files:\n\r
+ * \ref mmu.c\n\r
+ * \ref mmu.h \n\r
+ */\r
\r
+/*------------------------------------------------------------------------------ */\r
+/*         Headers                                                               */\r
+/*------------------------------------------------------------------------------ */\r
+#include <chip.h>\r
+\r
+/*------------------------------------------------------------------------------ */\r
+/*         Exported functions */\r
+/*------------------------------------------------------------------------------ */\r
+\r
+/**\r
+ * \brief Initializes MMU.\r
+ * \param pTB  Address of the translation table.\r
+ */\r
+void MMU_Initialize(uint32_t *pTB)\r
+{\r
+    unsigned int index;\r
+    unsigned int addr;\r
+\r
+    /* Reset table entries */\r
+    for (index = 0; index < 4096; index++)\r
+        pTB[index] = 0;\r
+\r
+    /* section Boot (code + data)*/\r
+    /* ROM address (after remap) 0x0000_0000*/\r
+    pTB[0x000] = (0x000 << 20)| // Physical Address\r
+                    ( 3 << 10)| // Access in supervisor mode (AP)\r
+                  ( 0xF <<  5)| // Domain 0xF\r
+                    ( 1 <<  4)| // (XN)\r
+                    ( 0 <<  3)| // C bit : cachable => NO\r
+                    ( 1 <<  2)| // B bit : write-back => YES\r
+                    ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section ROM (code + data) */\r
+    /* ROM address (after remap) 0x0010_0000 */\r
+    pTB[0x001] = (0x001 << 20)| // Physical Address\r
+                    ( 3 << 10)| // Access in supervisor mode (AP)\r
+                  ( 0xF <<  5)| // Domain 0xF\r
+                    ( 1 <<  4)| // (XN)\r
+                    ( 0 <<  3)| // C bit : cachable => NO\r
+                    ( 1 <<  2)| // B bit : write-back => YES\r
+                    ( 2 <<  0); // Set as 1 Mbyte section\r
+    /* section RAM 0 */\r
+    /* SRAM address (after remap) 0x0030_0000 */\r
+    pTB[0x002] = (0x002 << 20)| // Physical Address\r
+                    ( 1 << 12)| // TEX[0]\r
+                    ( 3 << 10)| // Access in supervisor mode (AP)\r
+                  ( 0xF <<  5)| // Domain 0xF\r
+                    ( 1 <<  4)| // (XN)\r
+                    ( 1 <<  3)| // C bit : cachable => YES\r
+                    ( 1 <<  2)| // B bit : write-back => YES\r
+                    ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section NFC SRAM  */\r
+    /* SRAM address 0x0040_0000 */\r
+    for(addr = 0x3; addr < 0xB; addr++)\r
+        pTB[addr] = (addr << 20)|   // Physical Address\r
+                      ( 3 << 10)|   // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)|   // Domain 0xF\r
+                      ( 1 <<  4)|   // (XN)\r
+                      ( 0 <<  3)|   // C bit : cachable => NO\r
+                      ( 1 <<  2)|   // B bit : write-back => YES\r
+                      ( 2 <<  0);   // Set as 1 Mbyte section\r
+\r
+    /* section PERIPH */\r
+    /* periph address 0xF000_0000 */\r
+    pTB[0xF00] = (0xF00ul << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section PERIPH */\r
+    /* periph address 0xF800_0000 */\r
+    pTB[0xF80] = (0xF80ul << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section PERIPH */\r
+    /* periph address 0xFC00_0000 */\r
+    pTB[0xFC0] = (0xFC0ul << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section EBI CS0 */\r
+    /* periph address 0x1000_0000 */\r
+    for(addr = 0x100; addr < 0x200; addr++)\r
+        pTB[addr] = (addr << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section EBI CS1 */\r
+    /* periph address 0x6000_0000 */\r
+    for(addr = 0x600; addr < 0x700; addr++)\r
+        pTB[addr] = (addr << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section EBI CS2 */\r
+    /* periph address 0x7000_0000 */\r
+    for(addr = 0x700; addr < 0x800; addr++)\r
+        pTB[addr] = (addr << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section EBI CS3 */\r
+    /* periph address 0x8000_0000 */\r
+    for(addr = 0x800; addr < 0x880; addr++)\r
+        pTB[addr] = (addr << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section NFC */\r
+    /* periph address 0x9000_0000 */\r
+    for(addr = 0x900; addr < 0xA00; addr++)\r
+        pTB[addr] = (addr << 20)| // Physical Address\r
+                      ( 3 << 10)| // Access in supervisor mode (AP)\r
+                    ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)| // (XN)\r
+                      ( 0 <<  3)| // C bit : cachable => NO\r
+                      ( 0 <<  2)| // B bit : write-back => NO\r
+                      ( 2 <<  0); // Set as 1 Mbyte section\r
+\r
+    /* section SDRAM/DDRAM */\r
+    /* periph address 0x2000_0000 */\r
+    for(addr = 0x200; addr < 0x240; addr++)\r
+        pTB[addr] = (addr << 20)|   // Physical Address\r
+                      ( 3 << 10)|   // Access in supervisor mode (AP)\r
+                      //(0x1 << 14)|   // TEX[2]\r
+                      (0x1 << 12)|   // TEX[1:0]\r
+                      (0xF <<  5)|   // Domain 0xF\r
+                      ( 1  <<  3)|   // C bit : cachable => YES\r
+                      ( 1  <<  2)|   // B bit : write-back => YES\r
+                      ( 2  <<  0);   // Set as 1 Mbyte section\r
+\r
+/* section SDRAM/DDRAM */\r
+    /* periph address 0x2400_0000 */\r
+    for(addr = 0x240; addr < 0x400; addr++)\r
+        pTB[addr] = (addr << 20)|   // Physical Address\r
+                      ( 1 << 19)|   // (NS)  Non-secure access is allowed        \r
+                      ( 3 << 10)|   // Access in supervisor mode (AP)\r
+                      ( 0xF <<  5)| // Domain 0xF\r
+                      ( 1 <<  4)|   // (XN)\r
+                      ( 0 <<  3)|   // C bit : cachable => No\r
+                      ( 0 <<  2)|   // B bit : write-back => No\r
+                      ( 2 <<  0);   // Set as 1 Mbyte section\r
+    \r
+    \r
+    /* section DDRCS/AES */\r
+    /* periph address 0x4000_0000 */\r
+    for(addr = 0x400; addr < 0x600; addr++)\r
+        pTB[addr] = (addr << 20)|   // Physical Address\r
+                      ( 3 << 10)|   // Access in supervisor mode (AP)\r
+                      ( 1 << 12)|   // TEX[0]\r
+                    ( 0xF <<  5)|   // Domain 0xF\r
+                      ( 1 <<  3)|   // C bit : cachable => YES\r
+                      ( 1 <<  2)|   // B bit : write-back => YES\r
+                      ( 2 <<  0);   // Set as 1 Mbyte section\r
+\r
+\r
+    CP15_WriteTTB((unsigned int)pTB);\r
+    /* Program the domain access register */\r
+    CP15_WriteDomainAccessControl(0xC0000000); // only domain 15: access are not checked\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pio.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pio.c
new file mode 100644 (file)
index 0000000..c985c06
--- /dev/null
@@ -0,0 +1,519 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures one or more pin(s) of a PIO controller as being controlled by\r
+ * peripheral A. Optionally, the corresponding internal pull-up(s) can be enabled.\r
+ *\r
+ * \param pio  Pointer to a PIO controller.\r
+ * \param mask  Bitmask of one or more pin(s) to configure.\r
+ * \param enablePullUp  Indicates if the pin(s) internal pull-up shall be\r
+ *                      configured.\r
+ */\r
+static void PIO_SetPeripheralA(\r
+    Pio *pio,\r
+    unsigned int mask,\r
+    unsigned char enablePullUp)\r
+{\r
+    unsigned int abcdsr;\r
+    /* Disable interrupts on the pin(s) */\r
+    pio->PIO_IDR = mask;\r
+\r
+    /* Enable the pull-up(s) if necessary */\r
+    if (enablePullUp) {\r
+        pio->PIO_PPDDR = mask;\r
+        pio->PIO_PUER = mask;\r
+    }\r
+    else {\r
+        //pio->PIO_PUDR = mask;\r
+        pio->PIO_PPDDR = mask;\r
+    }\r
+\r
+    abcdsr = pio->PIO_ABCDSR[0];\r
+    pio->PIO_ABCDSR[0] &= (~mask & abcdsr);\r
+    abcdsr = pio->PIO_ABCDSR[1];\r
+    pio->PIO_ABCDSR[1] &= (~mask & abcdsr);\r
+    pio->PIO_PDR = mask;\r
+\r
+}\r
+\r
+/**\r
+ * \brief Configures one or more pin(s) of a PIO controller as being controlled by\r
+ * peripheral B. Optionally, the corresponding internal pull-up(s) can be enabled.\r
+ *\r
+ * \param pio  Pointer to a PIO controller.\r
+ * \param mask  Bitmask of one or more pin(s) to configure.\r
+ * \param enablePullUp  Indicates if the pin(s) internal pull-up shall be\r
+ *                      configured.\r
+ */\r
+static void PIO_SetPeripheralB(\r
+    Pio *pio,\r
+    unsigned int mask,\r
+    unsigned char enablePullUp)\r
+{\r
+    unsigned int abcdsr;\r
+    /* Disable interrupts on the pin(s) */\r
+    pio->PIO_IDR = mask;\r
+\r
+    /* Enable the pull-up(s) if necessary */\r
+    if (enablePullUp) {\r
+        pio->PIO_PPDDR = mask;\r
+        pio->PIO_PUER = mask;\r
+    }\r
+    else {\r
+        pio->PIO_PUDR = mask;\r
+        pio->PIO_PPDDR = mask;\r
+    }\r
+\r
+    abcdsr = pio->PIO_ABCDSR[0];\r
+    pio->PIO_ABCDSR[0] = (mask | abcdsr);\r
+    abcdsr = pio->PIO_ABCDSR[1];\r
+    pio->PIO_ABCDSR[1] &= (~mask & abcdsr);\r
+\r
+    pio->PIO_PDR = mask;\r
+}\r
+\r
+/**\r
+ * \brief Configures one or more pin(s) of a PIO controller as being controlled by\r
+ * peripheral C. Optionally, the corresponding internal pull-up(s) can be enabled.\r
+ *\r
+ * \param pio  Pointer to a PIO controller.\r
+ * \param mask  Bitmask of one or more pin(s) to configure.\r
+ * \param enablePullUp  Indicates if the pin(s) internal pull-up shall be\r
+ *                      configured.\r
+ */\r
+static void PIO_SetPeripheralC(\r
+    Pio *pio,\r
+    unsigned int mask,\r
+    unsigned char enablePullUp)\r
+{\r
+    unsigned int abcdsr;\r
+    /* Disable interrupts on the pin(s) */\r
+    pio->PIO_IDR = mask;\r
+\r
+    /* Enable the pull-up(s) if necessary */\r
+    if (enablePullUp) {\r
+        pio->PIO_PPDDR = mask;\r
+        pio->PIO_PUER = mask;\r
+    }\r
+    else {\r
+        pio->PIO_PUDR = mask;\r
+      //  pio->PIO_PPDDR = mask;\r
+    }\r
+\r
+    abcdsr = pio->PIO_ABCDSR[0];\r
+    pio->PIO_ABCDSR[0] &= (~mask & abcdsr);\r
+    abcdsr = pio->PIO_ABCDSR[1];\r
+    pio->PIO_ABCDSR[1] = (mask | abcdsr);\r
+\r
+    pio->PIO_PDR = mask;\r
+}\r
+\r
+/**\r
+ * \brief Configures one or more pin(s) of a PIO controller as being controlled by\r
+ * peripheral D. Optionally, the corresponding internal pull-up(s) can be enabled.\r
+ *\r
+ * \param pio  Pointer to a PIO controller.\r
+ * \param mask  Bitmask of one or more pin(s) to configure.\r
+ * \param enablePullUp  Indicates if the pin(s) internal pull-up shall be\r
+ *                      configured.\r
+ */\r
+static void PIO_SetPeripheralD(\r
+    Pio *pio,\r
+    unsigned int mask,\r
+    unsigned char enablePullUp)\r
+{\r
+    unsigned int abcdsr;\r
+    /* Disable interrupts on the pin(s) */\r
+    pio->PIO_IDR = mask;\r
+\r
+    /* Enable the pull-up(s) if necessary */\r
+    if (enablePullUp) {\r
+        \r
+        pio->PIO_PPDDR = mask;\r
+        pio->PIO_PUER = mask;\r
+    }\r
+    else {\r
+        pio->PIO_PUDR = mask;\r
+    }\r
+\r
+    abcdsr = pio->PIO_ABCDSR[0];\r
+    pio->PIO_ABCDSR[0] = (mask | abcdsr);\r
+    abcdsr = pio->PIO_ABCDSR[1];\r
+    pio->PIO_ABCDSR[1] = (mask | abcdsr);\r
+\r
+    pio->PIO_PDR = mask;\r
+}\r
+\r
+/**\r
+ * \brief Configures one or more pin(s) or a PIO controller as inputs. Optionally,\r
+ * the corresponding internal pull-up(s) and glitch filter(s) can be enabled.\r
+ *\r
+ * \param pio  Pointer to a PIO controller.\r
+ * \param mask  Bitmask indicating which pin(s) to configure as input(s).\r
+ * \param enablePullUp  Indicates if the internal pull-up(s) must be enabled.\r
+ * \param enableFilter  Indicates if the glitch filter(s) must be enabled.\r
+ */\r
+static void PIO_SetInput(\r
+    Pio *pio,\r
+    unsigned int mask,\r
+    unsigned char attribute)\r
+{\r
+    /* Disable interrupts */\r
+    pio->PIO_IDR = mask;\r
+\r
+    /* Enable pull-up(s) if necessary */\r
+    if (attribute & PIO_PULLUP)\r
+    {\r
+        pio->PIO_PPDDR = mask;\r
+        pio->PIO_PUER = mask;\r
+    }\r
+    else\r
+    {\r
+        pio->PIO_PUDR = mask;\r
+    }\r
+    /* Enable Input Filter if necessary */\r
+    if (attribute & (PIO_DEGLITCH | PIO_DEBOUNCE))\r
+        pio->PIO_IFER = mask;\r
+    else\r
+        pio->PIO_IFDR = mask;\r
+\r
+    /* Enable de-glitch or de-bounce if necessary */\r
+    if (attribute & PIO_DEGLITCH) {\r
+        pio->PIO_IFSCDR = mask;\r
+    } else if (attribute & PIO_DEBOUNCE) {\r
+        pio->PIO_IFSCER = mask;\r
+    }\r
+\r
+    /* Configure pin as input */\r
+    pio->PIO_ODR = mask;\r
+    pio->PIO_PER = mask;\r
+}\r
+\r
+/**\r
+ * \brief Configures one or more pin(s) of a PIO controller as outputs, with the\r
+ * given default value. Optionally, the multi-drive feature can be enabled\r
+ * on the pin(s).\r
+ *\r
+ * \param pio  Pointer to a PIO controller.\r
+ * \param mask  Bitmask indicating which pin(s) to configure.\r
+ * \param defaultValue  Default level on the pin(s).\r
+ * \param enableMultiDrive  Indicates if the pin(s) shall be configured as\r
+ *                          open-drain.\r
+ * \param enablePullUp  Indicates if the pin shall have its pull-up activated.\r
+ */\r
+static void PIO_SetOutput(\r
+    Pio *pio,\r
+    unsigned int mask,\r
+    unsigned char defaultValue,\r
+    unsigned char enableMultiDrive,\r
+    unsigned char enablePullUp)\r
+{\r
+    /* Disable interrupts */\r
+    pio->PIO_IDR = mask;\r
+\r
+    /* Enable pull-up(s) if necessary */\r
+    if (enablePullUp) {\r
+        pio->PIO_PPDDR = mask;\r
+        pio->PIO_PUER = mask;\r
+    }\r
+    else {\r
+        pio->PIO_PUDR = mask;\r
+    }\r
+\r
+    /* Enable multi-drive if necessary */\r
+    if (enableMultiDrive) {\r
+\r
+        pio->PIO_MDER = mask;\r
+    }\r
+    else {\r
+\r
+        pio->PIO_MDDR = mask;\r
+    }\r
+\r
+    /* Set default value */\r
+    if (defaultValue) {\r
+\r
+        pio->PIO_SODR = mask;\r
+    }\r
+    else {\r
+\r
+        pio->PIO_CODR = mask;\r
+    }\r
+\r
+    /* Configure pin(s) as output(s) */\r
+    pio->PIO_OER = mask;\r
+    pio->PIO_PER = mask;\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *         Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures a list of Pin instances, each of which can either hold a single\r
+ * pin or a group of pins, depending on the mask value; all pins are configured\r
+ * by this function. The size of the array must also be provided and is easily\r
+ * computed using PIO_LISTSIZE whenever its length is not known in advance.\r
+ *\r
+ * \param list  Pointer to a list of Pin instances.\r
+ * \param size  Size of the Pin list (calculated using PIO_LISTSIZE).\r
+ *\r
+ * \return 1 if the pins have been configured properly; otherwise 0.\r
+ */\r
+uint8_t PIO_Configure( const Pin *list, uint32_t size )\r
+{\r
+    /* Configure pins */\r
+    while ( size > 0 )\r
+    {\r
+        switch ( list->type )\r
+        {\r
+\r
+            case PIO_PERIPH_A:\r
+                PIO_SetPeripheralA(list->pio,\r
+                                   list->mask,\r
+                                   (list->attribute & PIO_PULLUP) ? 1 : 0);\r
+            break;\r
+\r
+            case PIO_PERIPH_B:\r
+                PIO_SetPeripheralB(list->pio,\r
+                                   list->mask,\r
+                                   (list->attribute & PIO_PULLUP) ? 1 : 0);\r
+            break;\r
+\r
+            case PIO_PERIPH_C:\r
+                PIO_SetPeripheralC(list->pio,\r
+                                   list->mask,\r
+                                   (list->attribute & PIO_PULLUP) ? 1 : 0);\r
+            break;\r
+\r
+            case PIO_PERIPH_D:\r
+                PIO_SetPeripheralD(list->pio,\r
+                                   list->mask,\r
+                                   (list->attribute & PIO_PULLUP) ? 1 : 0);\r
+            break;\r
+            case PIO_INPUT:\r
+                PMC_EnablePeripheral(list->id);\r
+                PIO_SetInput(list->pio,\r
+                             list->mask,\r
+                             list->attribute);\r
+                break;\r
+\r
+            case PIO_OUTPUT_0:\r
+            case PIO_OUTPUT_1:\r
+                PIO_SetOutput(list->pio,\r
+                              list->mask,\r
+                              (list->type == PIO_OUTPUT_1),\r
+                              (list->attribute & PIO_OPENDRAIN) ? 1 : 0,\r
+                              (list->attribute & PIO_PULLUP) ? 1 : 0);\r
+                break;\r
+\r
+            default: return 0;\r
+        }\r
+\r
+        list++;\r
+        size--;\r
+    }\r
+\r
+    return 1;\r
+}\r
+\r
+/**\r
+ * \brief Sets a high output level on all the PIOs defined in the given Pin instance.\r
+ * This has no immediate effects on PIOs that are not output, but the PIO\r
+ * controller will memorize the value they are changed to outputs.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ */\r
+void PIO_Set(const Pin *pin)\r
+{\r
+    pin->pio->PIO_SODR = pin->mask;\r
+}\r
+\r
+/**\r
+ * \brief Sets a low output level on all the PIOs defined in the given Pin instance.\r
+ * This has no immediate effects on PIOs that are not output, but the PIO\r
+ * controller will memorize the value they are changed to outputs.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ */\r
+void PIO_Clear(const Pin *pin)\r
+{\r
+    pin->pio->PIO_CODR = pin->mask;\r
+}\r
+\r
+/**\r
+ * \brief Returns 1 if one or more PIO of the given Pin instance currently have\r
+ * a high level; otherwise returns 0. This method returns the actual value that\r
+ * is being read on the pin. To return the supposed output value of a pin, use\r
+ * PIO_GetOutputDataStatus() instead.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ *\r
+ * \return 1 if the Pin instance contains at least one PIO that currently has\r
+ * a high level; otherwise 0.\r
+ */\r
+unsigned char PIO_Get( const Pin *pin )\r
+{\r
+    unsigned int reg ;\r
+\r
+    if ( (pin->type == PIO_OUTPUT_0) || (pin->type == PIO_OUTPUT_1) )\r
+    {\r
+        reg = pin->pio->PIO_ODSR ;\r
+    }\r
+    else\r
+    {\r
+        reg = pin->pio->PIO_PDSR ;\r
+    }\r
+\r
+    if ( (reg & pin->mask) == 0 )\r
+    {\r
+        return 0 ;\r
+    }\r
+    else\r
+    {\r
+        return 1 ;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Returns 1 if one or more PIO of the given Pin are configured to output a\r
+ * high level (even if they are not output).\r
+ * To get the actual value of the pin, use PIO_Get() instead.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ *\r
+ * \return 1 if the Pin instance contains at least one PIO that is configured\r
+ * to output a high level; otherwise 0.\r
+ */\r
+unsigned char PIO_GetOutputDataStatus(const Pin *pin)\r
+{\r
+    if ((pin->pio->PIO_ODSR & pin->mask) == 0)\r
+    {\r
+        return 0;\r
+    }\r
+    else\r
+    {\r
+        return 1;\r
+    }\r
+}\r
+\r
+/*\r
+ * \brief Configures Glitch or Debouncing filter for input.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ * \param cuttoff  Cutt off frequency for debounce filter.\r
+ */\r
+void PIO_SetDebounceFilter( const Pin *pin, uint32_t cuttoff )\r
+{\r
+    Pio *pio = pin->pio;\r
+\r
+    if (cuttoff == 0)\r
+    {\r
+        pio->PIO_IFSCDR = pin->mask;\r
+        pio->PIO_SCDR = 0;\r
+    }\r
+    else\r
+    {\r
+        /* set Debouncing, 0 bit field no effect */\r
+        pio->PIO_IFSCER = pin->mask;\r
+        /* the lowest 14 bits work */\r
+        pio->PIO_SCDR = ((32678/(2*(cuttoff))) - 1) & 0x3FFF;\r
+    }\r
+}\r
+\r
+/*\r
+ * \brief Enable write protect.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ */\r
+\r
+\r
+void PIO_EnableWriteProtect( const Pin *pin )\r
+{\r
+   Pio *pio = pin->pio;\r
+\r
+   pio->PIO_WPMR = ( PIO_WPMR_WPKEY_VALID | PIO_WPMR_WPEN_EN );\r
+}\r
+\r
+/*\r
+ * \brief Disable write protect.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ */\r
+\r
+void PIO_DisableWriteProtect( const Pin *pin )\r
+{\r
+   Pio *pio = pin->pio;\r
+\r
+   pio->PIO_WPMR = ( PIO_WPMR_WPKEY_VALID | PIO_WPMR_WPEN_DIS );\r
+}\r
+\r
+/*\r
+ * \brief Get write protect violation information.\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ */\r
+\r
+uint32_t PIO_GetWriteProtectViolationInfo( const Pin * pin )\r
+{\r
+    Pio *pio = pin->pio;\r
+    return (pio->PIO_WPSR);\r
+}\r
+\r
+\r
+\r
+/*\r
+ * \brief Configure all pio output low\r
+ *\r
+ * \param pin  Pointer to a Pin instance describing one or more pins.\r
+ * \param pioId PIO ID\r
+ * \param mask  Bitmask of one or more pin(s) to configure.\r
+ */\r
+\r
+void PIO_Output_Low (Pio * pio, uint32_t pioId, uint32_t mask)\r
+{\r
+   PMC->PMC_PCER0 = 1 << pioId;\r
+   pio->PIO_PUDR  = mask;   // all Pull-up Disable\r
+   pio->PIO_PPDDR = mask;   // all Pull-down Disable\r
+   pio->PIO_PER   = mask;   // all PIO enable\r
+   pio->PIO_OER   = mask;   // all PIO output mode\r
+   pio->PIO_CODR  = mask;   // all PIO clear output\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pio_it.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pio_it.c
new file mode 100644 (file)
index 0000000..2d24966
--- /dev/null
@@ -0,0 +1,293 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+ /** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local definitions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/* Maximum number of interrupt sources that can be defined. This\r
+ * constant can be increased, but the current value is the smallest possible\r
+ * that will be compatible with all existing projects. */\r
+#define MAX_INTERRUPT_SOURCES       7\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local types\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Describes a PIO interrupt source, including the PIO instance triggering the\r
+ * interrupt and the associated interrupt handler.\r
+ */\r
+typedef struct _InterruptSource\r
+{\r
+    /* Pointer to the source pin instance. */\r
+    const Pin *pPin;\r
+\r
+    /* Interrupt handler. */\r
+    void (*handler)( const Pin* ) ;\r
+} InterruptSource ;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local variables\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/* List of interrupt sources. */\r
+static InterruptSource _aIntSources[MAX_INTERRUPT_SOURCES] ;\r
+\r
+/* Number of currently defined interrupt sources. */\r
+static uint32_t _dwNumSources = 0;\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local Functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Handles all interrupts on the given PIO controller.\r
+ * \param id  PIO controller ID.\r
+ * \param pPio  PIO controller base address.\r
+ */\r
+extern void PioInterruptHandler( uint32_t id, Pio *pPio )\r
+{\r
+    uint32_t status;\r
+    uint32_t i;\r
+\r
+    /* Read PIO controller status */\r
+    status = pPio->PIO_ISR;\r
+    status &= pPio->PIO_IMR;\r
+\r
+    /* Check pending events */\r
+    if ( status != 0 )\r
+    {\r
+        TRACE_DEBUG( "PIO interrupt on PIO controller #%d\n\r", id ) ;\r
+\r
+        /* Find triggering source */\r
+        i = 0;\r
+        while ( status != 0 )\r
+        {\r
+            /* There cannot be an unconfigured source enabled. */\r
+            assert(i < _dwNumSources);\r
+\r
+            /* Source is configured on the same controller */\r
+            if (_aIntSources[i].pPin->id == id)\r
+            {\r
+                /* Source has PIOs whose statuses have changed */\r
+                if ( (status & _aIntSources[i].pPin->mask) != 0 )\r
+                {\r
+                    TRACE_DEBUG( "Interrupt source #%d triggered\n\r", i ) ;\r
+\r
+                    _aIntSources[i].handler(_aIntSources[i].pPin);\r
+                    status &= ~(_aIntSources[i].pPin->mask);\r
+                }\r
+            }\r
+            i++;\r
+        }\r
+    }\r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Global Functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Generic PIO interrupt handler. Single entry point for interrupts coming\r
+ * from any PIO controller (PIO A, B, C ...). Dispatches the interrupt to\r
+ * the user-configured handlers.\r
+ */\r
+void PIO_IT_InterruptHandler(void)\r
+{\r
+    PioInterruptHandler(ID_PIOA, PIOA);\r
+    PioInterruptHandler(ID_PIOB, PIOB);\r
+    PioInterruptHandler(ID_PIOC, PIOC);\r
+    PioInterruptHandler(ID_PIOD, PIOD);\r
+    PioInterruptHandler(ID_PIOE, PIOE);\r
+}\r
+\r
+/**\r
+ * \brief Initializes the PIO interrupt management logic\r
+ *\r
+ * The desired priority of PIO interrupts must be provided.\r
+ * Calling this function multiple times result in the reset of currently\r
+ * configured interrupts.\r
+ *\r
+ * \param priority  PIO controller interrupts priority.\r
+ */\r
+extern void PIO_InitializeInterrupts( uint32_t dwPriority )\r
+{\r
+    TRACE_DEBUG( "PIO_Initialize()\n\r" ) ;\r
+\r
+    /* Reset sources */\r
+    _dwNumSources = 0 ;\r
+\r
+    /* Configure PIO interrupt sources */\r
+    TRACE_DEBUG( "PIO_Initialize: Configuring PIOA\n\r" ) ;\r
+    PMC_EnablePeripheral( ID_PIOA ) ;\r
+    PIOA->PIO_ISR ;\r
+    PIOA->PIO_IDR = 0xFFFFFFFF ;\r
+    //IRQ_ConfigureIT(ID_PIOA, dwPriority, PIO_IT_InterruptHandler);\r
+    AIC_EnableIT(ID_PIOA);\r
+\r
+    /* Configure PIO interrupt sources */\r
+    TRACE_DEBUG( "PIO_Initialize: Configuring PIOB\n\r" ) ;\r
+    PMC_EnablePeripheral( ID_PIOB ) ;\r
+    PIOB->PIO_ISR ;\r
+    PIOB->PIO_IDR = 0xFFFFFFFF ;\r
+    AIC_EnableIT(ID_PIOB);\r
+\r
+    /* Configure PIO interrupt sources */\r
+    TRACE_DEBUG( "PIO_Initialize: Configuring PIOC\n\r" ) ;\r
+    PMC_EnablePeripheral( ID_PIOC ) ;\r
+    PIOC->PIO_ISR ;\r
+    PIOC->PIO_IDR = 0xFFFFFFFF ;\r
+    //IRQ_ConfigureIT(ID_PIOC, dwPriority, PIO_IT_InterruptHandler);\r
+    AIC_EnableIT(ID_PIOC);\r
+\r
+    /* Configure PIO interrupt sources */\r
+    TRACE_DEBUG( "PIO_Initialize: Configuring PIOD\n\r" ) ;\r
+    PMC_EnablePeripheral( ID_PIOD ) ;\r
+    PIOD->PIO_ISR ;\r
+    PIOD->PIO_IDR = 0xFFFFFFFF ;\r
+    //IRQ_ConfigureIT(ID_PIOD, dwPriority, PIO_IT_InterruptHandler);\r
+    AIC_EnableIT(ID_PIOD);\r
+\r
+    /* Configure PIO interrupt sources */\r
+    TRACE_DEBUG( "PIO_Initialize: Configuring PIOC\n\r" ) ;\r
+    PMC_EnablePeripheral( ID_PIOE ) ;\r
+    PIOE->PIO_ISR ;\r
+    PIOE->PIO_IDR = 0xFFFFFFFF ;\r
+    //IRQ_ConfigureIT(ID_PIOE, dwPriority, PIO_IT_InterruptHandler);\r
+    AIC_EnableIT(ID_PIOE);\r
+}\r
+\r
+/**\r
+ * Configures a PIO or a group of PIO to generate an interrupt on status\r
+ * change. The provided interrupt handler will be called with the triggering\r
+ * pin as its parameter (enabling different pin instances to share the same\r
+ * handler).\r
+ * \param pPin  Pointer to a Pin instance.\r
+ */\r
+extern void PIO_ConfigureIt( const Pin *pPin )\r
+{\r
+    Pio* pio ;\r
+    InterruptSource* pSource ;\r
+\r
+    TRACE_DEBUG( "PIO_ConfigureIt()\n\r" ) ;\r
+\r
+    assert( pPin ) ;\r
+    pio = pPin->pio ;\r
+    assert( _dwNumSources < MAX_INTERRUPT_SOURCES ) ;\r
+\r
+    pSource = &(_aIntSources[_dwNumSources]) ;\r
+    pSource->pPin = pPin ;\r
+    _dwNumSources++ ;\r
+\r
+    /* PIO with additional interrupt support\r
+     * Configure additional interrupt mode registers */\r
+    if ( pPin->attribute & PIO_IT_AIME )\r
+    {\r
+        /* enable additional interrupt mode */\r
+        pio->PIO_AIMER = pPin->mask ;\r
+\r
+        /* if bit field of selected pin is 1, set as Rising Edge/High level detection event */\r
+        if ( pPin->attribute & PIO_IT_RE_OR_HL )\r
+        {\r
+            pio->PIO_REHLSR = pPin->mask ;\r
+        }\r
+        else\r
+        {\r
+            pio->PIO_FELLSR = pPin->mask;\r
+        }\r
+\r
+        /* if bit field of selected pin is 1, set as edge detection source */\r
+        if (pPin->attribute & PIO_IT_EDGE) \r
+            pio->PIO_ESR = pPin->mask;\r
+        else\r
+            pio->PIO_LSR = pPin->mask;\r
+    }\r
+    else\r
+    {\r
+        /* disable additional interrupt mode */\r
+        pio->PIO_AIMDR = pPin->mask;\r
+    }\r
+}\r
+\r
+/**\r
+ * Enables the given interrupt source if it has been configured. The status\r
+ * register of the corresponding PIO controller is cleared prior to enabling\r
+ * the interrupt.\r
+ * \param pPin  Interrupt source to enable.\r
+ */\r
+extern void PIO_EnableIt( const Pin *pPin )\r
+{\r
+    TRACE_DEBUG( "PIO_EnableIt()\n\r" ) ;\r
+\r
+    assert( pPin != NULL ) ;\r
+\r
+#ifndef NOASSERT\r
+    uint32_t i = 0;\r
+    uint32_t dwFound = 0;\r
+\r
+    while ( (i < _dwNumSources) && !dwFound )\r
+    {\r
+        if ( _aIntSources[i].pPin == pPin )\r
+        {\r
+            dwFound = 1 ;\r
+        }\r
+        i++ ;\r
+    }\r
+    assert( dwFound != 0 ) ;\r
+#endif\r
+\r
+    pPin->pio->PIO_ISR;\r
+    pPin->pio->PIO_IER = pPin->mask ;\r
+}\r
+\r
+/**\r
+ * Disables a given interrupt source, with no added side effects.\r
+ *\r
+ * \param pPin  Interrupt source to disable.\r
+ */\r
+extern void PIO_DisableIt( const Pin *pPin )\r
+{\r
+    assert( pPin != NULL ) ;\r
+\r
+    TRACE_DEBUG( "PIO_DisableIt()\n\r" ) ;\r
+\r
+    pPin->pio->PIO_IDR = pPin->mask;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pit.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pit.c
new file mode 100644 (file)
index 0000000..51a1be4
--- /dev/null
@@ -0,0 +1,174 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
\r
+/** \addtogroup pit_module Working with PIT\r
+ * The PIT driver provides the Interface for configuration the Periodic \r
+ *  Interval Timer (PIT) peripheral.\r
+ *\r
+ * <ul>\r
+ * <li>  Initialize the PIT with the desired period using PIT_Init().\r
+ *    Alternatively, the Periodic Interval Value (PIV) can be configured\r
+ *    manually using PIT_SetPIV(). </li> \r
+ * <li>  Start the PIT counting using PIT_Enable().\r
+ * <li>  Enable & disable the PIT interrupt using PIT_EnableIT() and\r
+ *    PIT_DisableIT(). </li> \r
+ * <li>  Retrieve the current status of the PIT using PIT_GetStatus(). </li> \r
+ * <li>  To get the current value of the internal counter and the number of ticks\r
+ *    that have occurred, use either PIT_GetPIVR() or PIT_GetPIIR() depending\r
+ *    on whether you want the values to be cleared or not. </li> \r
+ *\r
+ * </ul>\r
+ * For more accurate information, please look at the PIT section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref pit.c\n\r
+ * \ref pit.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of PIT (Periodic Interval Timer) controller.\r
+ *\r
+ */\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+ /**\r
+ * \brief Initialize the Periodic Interval Timer to generate a tick at the \r
+ * specified period, given the current master clock frequency.\r
+ *\r
+ *  \param uperiod  Period in uSecond.\r
+ *  \param pit_frequency  Master clock frequency in MHz.\r
+ */\r
+\r
+void PIT_Init(uint32_t period, uint32_t pit_frequency)\r
+{\r
+    PIT->PIT_MR = period? (period * pit_frequency + 8) >> 4 : 0;\r
+    PIT->PIT_MR |= PIT_MR_PITEN;\r
+}\r
+\r
+/**\r
+ * \brief Set the Periodic Interval Value of the PIT.\r
+ *\r
+ *  \param piv  PIV value to set.\r
+ */\r
+void PIT_SetPIV(uint32_t piv)\r
+{\r
+    uint32_t dwMr = PIT->PIT_MR & (~PIT_MR_PIV_Msk);\r
+    PIT->PIT_MR = dwMr | PIT_MR_PIV(piv);\r
+}\r
+\r
+/**\r
+ * \brief Enables the PIT if this is not already the case.\r
+ *\r
+ */\r
+void PIT_Enable(void)\r
+{\r
+    PIT->PIT_MR |= PIT_MR_PITEN;\r
+}\r
+\r
+/**\r
+ * \brief Disnables the PIT when PIV value is reached.\r
+ *\r
+ */\r
+void PIT_Disable(void)\r
+{\r
+    PIT->PIT_MR &= ~PIT_MR_PITEN;\r
+}\r
+\r
+/**\r
+ * \brief Enable the PIT periodic interrupt.\r
+ *\r
+ */\r
+void PIT_EnableIT(void) \r
+{\r
+    PIT->PIT_MR |= PIT_MR_PITIEN;\r
+}\r
+\r
+/**\r
+ * \brief Disables the PIT periodic interrupt.\r
+ *\r
+ */\r
+void PIT_DisableIT(void)\r
+{\r
+    PIT->PIT_MR &= ~PIT_MR_PITIEN;\r
+}\r
+\r
+/**\r
+ * \brief Returns the value of the PIT mode register.\r
+ *\r
+ * \return PIT_MR value.\r
+ */\r
+uint32_t PIT_GetMode(void)\r
+{\r
+    return PIT->PIT_MR;\r
+}\r
+\r
+/**\r
+ * \brief Returns the value of the PIT status register, clearing it as a side effect.\r
+ *\r
+ * \return PIT_SR value.\r
+ */\r
+uint32_t PIT_GetStatus(void)\r
+{\r
+    return PIT->PIT_SR;\r
+}\r
+\r
+/**\r
+ * \brief Returns the value of the PIT Image Register, to read PICNT and CPIV without\r
+ *  clearing the current values.\r
+ * \r
+ * \return PIT_PIIR value.\r
+ */\r
+uint32_t PIT_GetPIIR(void)\r
+{\r
+    return PIT->PIT_PIIR;\r
+}\r
+\r
+/**\r
+ * \brief Returns the value of the PIT Value Register, clearing it as a side effect.\r
+ * \r
+ * \return PITC_PIVR value.\r
+ */\r
+uint32_t PIT_GetPIVR(void)\r
+{\r
+    return PIT->PIT_PIVR;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pmc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pmc.c
new file mode 100644 (file)
index 0000000..e10fa5a
--- /dev/null
@@ -0,0 +1,342 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Definition\r
+ *----------------------------------------------------------------------------*/\r
+#define MAX_PERI_ID  ID_L2CC\r
+\r
+extern const PeripheralClockMaxFreq periClkMaxFreq[];\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Get maxinum frequency clock for giving pripheral ID.\r
+ *\r
+ * \param id  Peripheral ID (ID_xxx).\r
+ */\r
+extern uint32_t PMC_GetPeriMaxFreq( uint32_t dwId )\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i < MAX_PERI_ID; i++) {\r
+        if ( dwId == periClkMaxFreq[i].bPeriphID) return periClkMaxFreq[i].bMaxFrequency;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * \brief Set maxinum frequency clock for giving pripheral ID.\r
+ *\r
+ * \param id  Peripheral ID (ID_xxx).\r
+ * \param mck  Master clock.\r
+ * \return Peripheral clock.\r
+ */\r
+extern uint32_t PMC_SetPeriMaxClock( uint32_t dwId, uint32_t mck)\r
+{\r
+    uint32_t maxClock;\r
+    uint8_t i;\r
+    /* Disable peripher clocl */\r
+    PMC->PMC_PCR = PMC_PCR_PID(dwId) | PMC_PCR_CMD;\r
+    maxClock = PMC_GetPeriMaxFreq(dwId);\r
+    for ( i = 0; i < 4; i++) {\r
+        if ( mck / (1 << i ) <= maxClock) break;\r
+    }\r
+    PMC->PMC_PCR = PMC_PCR_PID(dwId) | PMC_PCR_CMD | (i << PMC_PCR_DIV_Pos) | PMC_PCR_EN;\r
+    return maxClock;\r
+}\r
+\r
+/**\r
+ * \brief Enables the clock of a peripheral. The peripheral ID is used\r
+ * to identify which peripheral is targetted.\r
+ *\r
+ * \note The ID must NOT be shifted (i.e. 1 << ID_xxx).\r
+ *\r
+ * \param id  Peripheral ID (ID_xxx).\r
+ */\r
+extern void PMC_EnablePeripheral( uint32_t dwId )\r
+{\r
+    if (dwId < 32)\r
+    {\r
+        if ( (PMC->PMC_PCSR0 & ((uint32_t)1 << dwId)) == ((uint32_t)1 << dwId) )\r
+        {\r
+         //   TRACE_DEBUG( "PMC_EnablePeripheral: clock of peripheral"  " %u is already enabled\n\r", dwId ) ;\r
+        }\r
+        else\r
+        {\r
+            PMC->PMC_PCER0 = (1 << dwId) ;\r
+        }\r
+    } else {\r
+        if ( (PMC->PMC_PCSR1 & ((uint32_t)1 << ( dwId - 32))) == ((uint32_t)1 << (dwId - 32)) )\r
+        {\r
+           // TRACE_DEBUG( "PMC_EnablePeripheral: clock of peripheral"  " %u is already enabled\n\r", dwId ) ;\r
+        }\r
+        else\r
+        {\r
+            PMC->PMC_PCER1 = 1 << (dwId - 32) ;\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Disables the clock of a peripheral. The peripheral ID is used\r
+ * to identify which peripheral is targetted.\r
+ *\r
+ * \note The ID must NOT be shifted (i.e. 1 << ID_xxx).\r
+ *\r
+ * \param id  Peripheral ID (ID_xxx).\r
+ */\r
+extern void PMC_DisablePeripheral( uint32_t dwId )\r
+{\r
+    if (dwId < 32)\r
+    {\r
+        if ( (PMC->PMC_PCSR0 & ((uint32_t)1 << dwId)) != ((uint32_t)1 << dwId) )\r
+        {\r
+            TRACE_DEBUG("PMC_DisablePeripheral: clock of peripheral" " %u is not enabled\n\r", (unsigned int)dwId ) ;\r
+        }\r
+        else\r
+        {\r
+            PMC->PMC_PCDR0 = 1 << dwId ;\r
+        }\r
+    } else {\r
+        if ( (PMC->PMC_PCSR1 & ((uint32_t)1 << (dwId - 32))) != ((uint32_t)1 << (dwId - 32)) )\r
+        {\r
+            TRACE_DEBUG("PMC_DisablePeripheral: clock of peripheral" " %u is not enabled\n\r", (unsigned int)dwId ) ;\r
+        }\r
+        else\r
+        {\r
+            PMC->PMC_PCDR1 = 1 << (dwId - 32) ;\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Enable all the periph clock via PMC.\r
+ */\r
+extern void PMC_EnableAllPeripherals( void )\r
+{\r
+    PMC->PMC_PCER0 = 0xFFFFFFFF ;\r
+    PMC->PMC_PCER1 = 0xFFFFFFFF ;\r
+    TRACE_DEBUG( "Enable all periph clocks\n\r" ) ;\r
+}\r
+\r
+/**\r
+ * \brief Disable all the periph clock via PMC.\r
+ */\r
+extern void PMC_DisableAllPeripherals( void )\r
+{\r
+    TRACE_DEBUG( "Disable all periph clocks\n\r" ) ;\r
+    PMC->PMC_PCDR0 = 0xFFFFFFFF ;\r
+    PMC->PMC_PCDR1 = 0xFFFFFFFF ;\r
+}\r
+\r
+/**\r
+ * \brief Get Periph Status for the given peripheral ID.\r
+ *\r
+ * \param id  Peripheral ID (ID_xxx).\r
+ */\r
+extern uint32_t PMC_IsPeriphEnabled( uint32_t dwId )\r
+{\r
+    if (dwId < 32) {\r
+        return ( PMC->PMC_PCSR0 & (1 << dwId) ) ;\r
+    } else {\r
+        return ( PMC->PMC_PCSR1 & (1 << (dwId - 32)) ) ;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Select external 32K crystal.\r
+ */\r
+extern void PMC_SelectExt32KCrystal(void)\r
+{ \r
+    volatile uint32_t count;\r
+    SCKC->SCKC_CR = (SCKC->SCKC_CR & ~SCKC_CR_OSCSEL) | SCKC_CR_OSCSEL_XTAL;\r
+    /* Wait 5 slow clock cycles for internal resynchronization*/\r
+    for (count = 0; count < 0x1000; count++);\r
+    /* wait slow clock status change for external OSC 32 kHz selection */\r
+}\r
+\r
+/**\r
+ * \brief Select internal 32K crystal.\r
+ */\r
+extern void PMC_SelectInt32kCrystal(void)\r
+{\r
+    /* switch from external RC 32kHz to internal OSC 32 kHz */\r
+    volatile uint32_t  count;\r
+    /* switch slow clock source to internal OSC 32 kHz */\r
+    SCKC->SCKC_CR = (SCKC->SCKC_CR & ~SCKC_CR_OSCSEL) | SCKC_CR_OSCSEL_RC;\r
+    /* Wait 5 slow clock cycles for internal resynchronization */\r
+    for (count = 0; count < 0x1000; count++);\r
+    /* wait slow clock status change for internal RC 32 kHz selection */\r
+    //   while(PMC->PMC_SR & PMC_SR_OSCSELS);\r
+}\r
+\r
+/**\r
+ * \brief Select external 12M OSC.\r
+ */\r
+extern void PMC_SelectExt12M_Osc(void)\r
+{ \r
+    /* switch from internal RC 12 MHz to external OSC 12 MHz */\r
+    /* wait Main XTAL Oscillator stabilisation*/\r
+    if ((PMC->CKGR_MOR & CKGR_MOR_MOSCSEL ) == CKGR_MOR_MOSCSEL) return;\r
+    /* enable external OSC 12 MHz */\r
+    PMC->CKGR_MOR |= CKGR_MOR_MOSCXTEN | CKGR_MOR_KEY_PASSWD; \r
+    /* wait Main CLK Ready */\r
+    while(!(PMC->CKGR_MCFR & CKGR_MCFR_MAINFRDY)); \r
+    /* switch MAIN clock to external OSC 12 MHz*/\r
+    PMC->CKGR_MOR |= CKGR_MOR_MOSCSEL | CKGR_MOR_KEY_PASSWD;\r
+    /* wait MAIN clock status change for external OSC 12 MHz selection*/\r
+    while(!(PMC->PMC_SR & PMC_SR_MOSCSELS));\r
+    /* in case where MCK is running on MAIN CLK */\r
+    while(!(PMC->PMC_SR & PMC_SR_MCKRDY));\r
+}\r
+\r
+/**\r
+ * \brief Select internal 12M OSC.\r
+ */\r
+extern void PMC_SelectInt12M_Osc(void)\r
+{\r
+    /* switch from external OSC 12 MHz to internal RC 12 MHz*/\r
+    /* Wait internal 12 MHz RC Startup Time for clock stabilization (software loop) */\r
+    while(!(PMC->PMC_SR & PMC_SR_MOSCRCS));\r
+    /* switch MAIN clock to internal RC 12 MHz */\r
+    PMC->CKGR_MOR = (PMC->CKGR_MOR & ~CKGR_MOR_MOSCSEL) | CKGR_MOR_KEY_PASSWD;\r
+    /* in case where MCK is running on MAIN CLK */\r
+    while(!(PMC->PMC_SR & PMC_SR_MCKRDY));\r
+    /* disable external OSC 12 MHz   */\r
+    PMC->CKGR_MOR = (PMC->CKGR_MOR & ~CKGR_MOR_MOSCXTEN) | CKGR_MOR_KEY_PASSWD;\r
+    while(!(PMC->PMC_SR & PMC_SR_MCKRDY));\r
+}\r
+\r
+/**\r
+ * \brief Switch PMC from MCK to PLL clock.\r
+ */\r
+extern void PMC_SwitchMck2Pll(void)\r
+{\r
+    /* Select PLL as input clock for PCK and MCK */\r
+    PMC->PMC_MCKR = (PMC->PMC_MCKR & ~PMC_MCKR_CSS_Msk) | PMC_MCKR_CSS_PLLA_CLK ;\r
+    while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+}\r
+\r
+\r
+/**\r
+ * \brief Switch PMC from MCK to main clock.\r
+ */\r
+extern void PMC_SwitchMck2Main(void)\r
+{\r
+    /* Select Main Oscillator as input clock for PCK and MCK */\r
+    PMC->PMC_MCKR = (PMC->PMC_MCKR & ~PMC_MCKR_CSS_Msk) | PMC_PCK_CSS_MAIN_CLK ;\r
+    while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+}\r
+\r
+\r
+/**\r
+ * \brief Switch PMC from MCK to slow clock.\r
+ */\r
+extern uint32_t PMC_SwitchMck2Slck(void)\r
+{\r
+    /* Select Slow Clock as input clock for PCK and MCK */\r
+    PMC->PMC_MCKR = (PMC->PMC_MCKR & ~PMC_MCKR_CSS_Msk) | PMC_PCK_CSS_SLOW_CLK ;\r
+    while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+    return PMC->PMC_MCKR;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Configure MCK Prescaler.\r
+ * \param prescaler prescaler value.\r
+ */\r
+extern void PMC_SetMckPrescaler(uint32_t prescaler)\r
+{\r
+    /* Change MCK Prescaler divider in PMC_MCKR register */\r
+    PMC->PMC_MCKR = (PMC->PMC_MCKR & ~PMC_MCKR_PRES_Msk) | prescaler;\r
+    while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+}\r
+\r
+/**\r
+ * \brief Configure MCK PLLA divider.\r
+ * \param divider PLL divider value.\r
+ */\r
+extern void PMC_SetMckPllaDiv(uint32_t divider)\r
+{\r
+    if ((PMC->PMC_MCKR & PMC_MCKR_PLLADIV2) == PMC_MCKR_PLLADIV2)\r
+    {\r
+        if(divider == 0) {\r
+            PMC->PMC_MCKR = (PMC->PMC_MCKR & ~PMC_MCKR_PLLADIV2);\r
+            while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+        }\r
+    } else {\r
+        if(divider == PMC_MCKR_PLLADIV2) {\r
+            PMC->PMC_MCKR = (PMC->PMC_MCKR | PMC_MCKR_PLLADIV2);\r
+            while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+        }\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Configure MCK Divider.\r
+ * \param divider divider value.\r
+ */\r
+extern void PMC_SetMckDivider(uint32_t divider)\r
+{\r
+    /* change MCK Prescaler divider in PMC_MCKR register */\r
+    PMC->PMC_MCKR = (PMC->PMC_MCKR & ~PMC_MCKR_MDIV_Msk) | divider;\r
+    while( !(PMC->PMC_SR & PMC_SR_MCKRDY) );\r
+}\r
+\r
+/**\r
+ * \brief Configure PLL Register.\r
+ * \param pll pll value.\r
+ * \param cpcr cpcr value.\r
+ */\r
+extern void PMC_SetPllA(uint32_t pll, uint32_t cpcr)\r
+{\r
+    PMC->CKGR_PLLAR = pll;\r
+    PMC->PMC_PLLICPR = cpcr;\r
+    while( !(PMC->PMC_SR & PMC_SR_LOCKA) );\r
+}\r
+\r
+/**\r
+ * \brief Disable PLLA Register.\r
+ */\r
+extern void PMC_DisablePllA(void)\r
+{\r
+    PMC->CKGR_PLLAR = (PMC->CKGR_PLLAR & ~CKGR_PLLAR_MULA_Msk) | CKGR_PLLAR_MULA(0);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pwmc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/pwmc.c
new file mode 100644 (file)
index 0000000..9b2d314
--- /dev/null
@@ -0,0 +1,192 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup pwm_module Working with PWM\r
+ * The PWM driver provides the interface to configure and use the PWM\r
+ * peripheral.\r
+ *\r
+ * The PWM macrocell controls square output waveforms of 4 channels.\r
+ * Characteristics of output waveforms such as period, duty-cycle can be configured.\n\r
+ *\r
+ * Before enabling the channels, they must have been configured first.\r
+ * The main settings include:\r
+ * <ul>\r
+ * <li>Configuration of the clock generator.</li>\r
+ * <li>Selection of the clock for each channel.</li>\r
+ * <li>Configuration of output waveform characteristics, such as period, duty-cycle etc.</li>\r
+ * </ul>\r
+ *\r
+ * After the channels is enabled, the user must use respective update registers\r
+ * to change the wave characteristics to prevent unexpected output waveform.\r
+ * i.e. PWM_CUPDx register should be used if user want to change duty-cycle\r
+ * when the channel is enabled.\r
+ *\r
+ * For more accurate information, please look at the PWM section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref pwmc.c\n\r
+ * \ref pwmc.h.\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of the Pulse Width Modulation Controller (PWM) peripheral.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures PWM clocks  \r
+ */\r
+void PWMC_ConfigureClocks(Pwm* pPwm, uint32_t mode)\r
+{\r
+    pPwm->PWM_CLK= mode;\r
+}\r
+\r
+/**\r
+ * \brief Enables the given PWM channel.\r
+ *\r
+ * This does NOT enable the corresponding pin;this must be done in the user code.\r
+ *\r
+ * \param channel  Channel number.\r
+ */\r
+void PWMC_EnableChannel(Pwm* pPwm,uint8_t channel)\r
+{\r
+    pPwm->PWM_ENA= 0x1ul<<channel;  \r
+}\r
+\r
+/**\r
+ * \brief Disables the given PWM channel.\r
+ *\r
+ * Beware, channel will be effectively disabled at the end of the current period.\r
+ * Application can check channel is disabled using the following wait loop:\r
+ * while ((PWM->PWM_SR & (1 << channel)) != 0);\r
+ *\r
+ * \param channel  Channel number.\r
+ */\r
+void PWMC_DisableChannel(Pwm* pPwm,uint8_t channel)\r
+{\r
+    pPwm->PWM_DIS= 0x1ul<<channel;    \r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a PWMC peripheral. \r
+ */\r
+void PWMC_EnableChannelIt(Pwm* pPwm,uint8_t channel)\r
+{\r
+    pPwm->PWM_IER1= 0x1ul<<channel;  \r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a PWMC peripheral. \r
+ */\r
+void PWMC_DisableChannelIt(Pwm* pPwm,uint8_t channel)\r
+{\r
+   pPwm->PWM_IDR1 = 0x1ul<<channel;\r
+}\r
+\r
+/**\r
+ * \brief Configures PWM a channel with the given parameters, basic configure function.\r
+ *\r
+ * The PWM controller must have been clocked in the PMC prior to calling this\r
+ * function.\r
+ * Beware: this function disables the channel. It waits until disable is effective.\r
+ *\r
+ * \param channel  Channel number.\r
+ * \param prescaler  Channel prescaler.\r
+ * \param alignment  Channel alignment.\r
+ * \param polarity  Channel polarity.\r
+ */\r
+void PWMC_ConfigureChannel(Pwm* pPwm,uint8_t channel,uint32_t mode)\r
+{\r
+    pPwm->PWM_CH_NUM[channel].PWM_CMR= mode;\r
+}\r
+\r
+/**\r
+ * \brief Sets the period value used by a PWM channel.\r
+ *\r
+ * This function writes directly to the CPRD register if the channel is disabled;\r
+ * otherwise, it uses the update register CPRDUPD.\r
+ *\r
+ * \param channel Channel number.\r
+ * \param period  Period value.\r
+ */\r
+void PWMC_SetPeriod( Pwm* pPwm, uint8_t channel, uint16_t period)\r
+{\r
+    /* If channel is disabled, write to CPRD */\r
+    if ((pPwm->PWM_SR & (1 << channel)) == 0) {\r
+        pPwm->PWM_CH_NUM[channel].PWM_CPRD = period;\r
+    }\r
+    /* Otherwise use update register */\r
+    else {\r
+        pPwm->PWM_CH_NUM[channel].PWM_CPRDUPD = period;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Sets the duty cycle used by a PWM channel.\r
+ * This function writes directly to the CDTY register if the channel is disabled;\r
+ * otherwise it uses the update register CDTYUPD.\r
+ * Note that the duty cycle must always be inferior or equal to the channel\r
+ * period.\r
+ *\r
+ * \param channel  Channel number.\r
+ * \param duty     Duty cycle value.\r
+ */\r
+void PWMC_SetDutyCycle( Pwm* pPwm, uint8_t channel, uint16_t duty)\r
+{\r
+    assert(duty <= pPwm->PWM_CH_NUM[channel].PWM_CPRD);\r
+\r
+    /* If channel is disabled, write to CDTY */\r
+    if ((pPwm->PWM_SR & (1 << channel)) == 0) {\r
+        pPwm->PWM_CH_NUM[channel].PWM_CDTY = duty;\r
+    }\r
+    /* Otherwise use update register */\r
+    else {\r
+        pPwm->PWM_CH_NUM[channel].PWM_CDTYUPD = duty;\r
+    }\r
+}\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/rstc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/rstc.c
new file mode 100644 (file)
index 0000000..b1f3ade
--- /dev/null
@@ -0,0 +1,185 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \file */\r
+/*---------------------------------------------------------------------------\r
+ *         Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include <chip.h>\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Defines\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/** Keywords to write to the reset registers */\r
+#define RSTC_KEY_PASSWORD           RSTC_MR_KEY(0xA5U)\r
+\r
+/*---------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *---------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * Configure the mode of the RSTC peripheral.\r
+ * The configuration is computed by the lib (RSTC_RMR_*).\r
+ * \param mr Desired mode configuration.\r
+ */\r
+void RSTC_ConfigureMode(uint32_t mr)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    mr &= ~RSTC_MR_KEY_Msk;\r
+    pHw->RSTC_MR = mr | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+/**\r
+ * Enable/Disable the detection of a low level on the pin NRST as User Reset\r
+ * \param enable 1 to enable & 0 to disable.\r
+ */\r
+void RSTC_SetUserResetEnable(uint8_t enable)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    uint32_t mr = pHw->RSTC_MR & (~RSTC_MR_KEY_Msk);\r
+    if (enable)\r
+    {\r
+        mr |=  RSTC_MR_URSTEN;\r
+    }\r
+    else\r
+    {\r
+        mr &= ~RSTC_MR_URSTEN;\r
+    }\r
+    pHw->RSTC_MR = mr | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+/**\r
+ * Enable/Disable the interrupt of a User Reset (USRTS bit in RSTC_RST).\r
+ * \param enable 1 to enable & 0 to disable.\r
+ */\r
+void RSTC_SetUserResetInterruptEnable(uint8_t enable)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    uint32_t mr = pHw->RSTC_MR & (~RSTC_MR_KEY_Msk);\r
+    if (enable)\r
+    {\r
+        mr |=  RSTC_MR_URSTIEN;\r
+    }\r
+    else {\r
+\r
+        mr &= ~RSTC_MR_URSTIEN;\r
+    }\r
+    pHw->RSTC_MR = mr | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+/**\r
+ * Setup the external reset length. The length is asserted during a time of\r
+ * pow(2, powl+1) Slow Clock(32KHz). The duration is between 60us and 2s.\r
+ * \param powl   Power length defined.\r
+ */\r
+void RSTC_SetExtResetLength(uint8_t powl)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    uint32_t mr = pHw->RSTC_MR;\r
+    mr &= ~(RSTC_MR_KEY_Msk | RSTC_MR_ERSTL_Msk);\r
+    mr |=  RSTC_MR_ERSTL(powl);\r
+    pHw->RSTC_MR = mr | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+\r
+/**\r
+ * Resets the processor.\r
+ */\r
+void RSTC_ProcessorReset(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    pHw->RSTC_CR = RSTC_CR_PROCRST | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+/**\r
+ * Resets the peripherals.\r
+ */\r
+void RSTC_PeripheralReset(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    pHw->RSTC_CR = RSTC_CR_PERRST | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+/**\r
+ * Asserts the NRST pin for external resets.\r
+ */\r
+void RSTC_ExtReset(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    pHw->RSTC_CR = RSTC_CR_EXTRST | RSTC_KEY_PASSWORD;\r
+}\r
+\r
+/**\r
+ * Return NRST pin level ( 1 or 0 ).\r
+ */\r
+uint8_t RSTC_GetNrstLevel(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    return ((pHw->RSTC_SR & RSTC_SR_NRSTL) > 0);\r
+}\r
+\r
+/**\r
+ * Returns 1 if at least one high-to-low transition of NRST (User Reset) has\r
+ * been detected since the last read of RSTC_RSR.\r
+ */\r
+uint8_t RSTC_IsUserResetDetected(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    if (pHw->RSTC_SR & RSTC_SR_URSTS)\r
+    {\r
+        return 1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Return 1 if a software reset command is being performed by the reset\r
+ * controller. The reset controller is busy.\r
+ */\r
+uint8_t RSTC_IsBusy(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    if (pHw->RSTC_SR & RSTC_SR_SRCMP)\r
+    {\r
+        return 1;\r
+    }\r
+    return 0;\r
+}\r
+\r
+/**\r
+ * Get the status\r
+ */\r
+uint32_t RSTC_GetStatus(void)\r
+{\r
+    Rstc *pHw = RSTC;\r
+    return (pHw->RSTC_SR);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/rtc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/rtc.c
new file mode 100644 (file)
index 0000000..7348001
--- /dev/null
@@ -0,0 +1,464 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup rtc_module Working with RTC\r
+ * The RTC driver provides the interface to configure and use the RTC\r
+ * peripheral.\r
+ *\r
+ * It manages date, time, and alarms.\n\r
+ * This timer is clocked by the 32kHz system clock, and is not impacted by\r
+ * power management settings (PMC). To be accurate, it is better to use an\r
+ * external 32kHz crystal instead of the internal 32kHz RC.\n\r
+ *\r
+ * It uses BCD format, and time can be set in AM/PM or 24h mode through a\r
+ * configuration bit in the mode register.\n\r
+ *\r
+ * To update date or time, the user has to follow these few steps :\r
+ * <ul>\r
+ * <li>Set UPDTIM and/or UPDCAL bit(s) in RTC_CR,</li>\r
+ * <li>Polling or IRQ on the ACKUPD bit of RTC_CR,</li>\r
+ * <li>Clear ACKUPD bit in RTC_SCCR,</li>\r
+ * <li>Update Time and/or Calendar values in RTC_TIMR/RTC_CALR (BCD format),</li>\r
+ * <li>Clear UPDTIM and/or UPDCAL bit in RTC_CR.</li>\r
+ * </ul>\r
+ * An alarm can be set to happen on month, date, hours, minutes or seconds,\r
+ * by setting the proper "Enable" bit of each of these fields in the Time and\r
+ * Calendar registers.\r
+ * This allows a large number of configurations to be available for the user.\r
+ * Alarm occurence can be detected even by polling or interrupt.\r
+ *\r
+ * A check of the validity of the date and time format and values written by the user is automatically done.\r
+ * Errors are reported through the Valid Entry Register.\r
+ *\r
+ * For more accurate information, please look at the RTC section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref rtc.c\n\r
+ * \ref rtc.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Real Time Clock (RTC) controller.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Sets the RTC in either 12 or 24 hour mode.\r
+ *\r
+ * \param mode  Hour mode.\r
+ */\r
+extern void RTC_SetHourMode( Rtc* pRtc, uint32_t dwMode )\r
+{\r
+    assert((dwMode & 0xFFFFFFFE) == 0);\r
+\r
+    pRtc->RTC_MR = dwMode ;\r
+}\r
+\r
+/**\r
+ * \brief Gets the RTC mode.\r
+ *\r
+ * \return Hour mode.\r
+ */\r
+extern uint32_t RTC_GetHourMode( Rtc* pRtc )\r
+{\r
+    uint32_t dwMode ;\r
+\r
+    TRACE_DEBUG( "RTC_SetHourMode()\n\r" ) ;\r
+\r
+    dwMode = pRtc->RTC_MR;\r
+    dwMode &= 0xFFFFFFFE;\r
+\r
+    return dwMode ;\r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupt sources of the RTC.\r
+ *\r
+ * \param sources  Interrupt sources to enable.\r
+ */\r
+extern void RTC_EnableIt( Rtc* pRtc, uint32_t dwSources )\r
+{\r
+    assert((dwSources & (uint32_t)(~0x1F)) == 0);\r
+\r
+    TRACE_DEBUG( "RTC_EnableIt()\n\r" ) ;\r
+\r
+    pRtc->RTC_IER = dwSources ;\r
+}\r
+\r
+/**\r
+* \brief Disables the selected interrupt sources of the RTC.\r
+*\r
+* \param sources  Interrupt sources to disable.\r
+*/\r
+extern void RTC_DisableIt( Rtc* pRtc, uint32_t dwSources )\r
+{\r
+    assert((dwSources & (uint32_t)(~0x1F)) == 0);\r
+\r
+    TRACE_DEBUG( "RTC_DisableIt()\n\r" ) ;\r
+\r
+    pRtc->RTC_IDR = dwSources ;\r
+}\r
+\r
+/**\r
+ * \brief Sets the current time in the RTC.\r
+ *\r
+ * \note In successive update operations, the user must wait at least one second\r
+ * after resetting the UPDTIM/UPDCAL bit in the RTC_CR before setting these\r
+ * bits again. Please look at the RTC section of the datasheet for detail.\r
+ *\r
+ * \param ucHour    Current hour in 12 or 24 hour mode.\r
+ * \param ucMinute  Current minute.\r
+ * \param ucSecond  Current second.\r
+ *\r
+ * \return 0 sucess, 1 fail to set\r
+ */\r
+extern int RTC_SetTime( Rtc* pRtc, uint8_t ucHour, uint8_t ucMinute, uint8_t ucSecond )\r
+{\r
+    uint32_t dwTime=0 ;\r
+    uint8_t ucHour_bcd ;\r
+    uint8_t ucMin_bcd ;\r
+    uint8_t ucSec_bcd ;\r
+\r
+    TRACE_DEBUG( "RTC_SetTime(%02d:%02d:%02d)\n\r", ucHour, ucMinute, ucSecond ) ;\r
+\r
+    /* if 12-hour mode, set AMPM bit */\r
+    if ( (pRtc->RTC_MR & RTC_MR_HRMOD) == RTC_MR_HRMOD )\r
+    {\r
+        if ( ucHour > 12 )\r
+        {\r
+            ucHour -= 12 ;\r
+            dwTime |= RTC_TIMR_AMPM ;\r
+        }\r
+    }\r
+    ucHour_bcd = (ucHour%10)   | ((ucHour/10)<<4) ;\r
+    ucMin_bcd  = (ucMinute%10) | ((ucMinute/10)<<4) ;\r
+    ucSec_bcd  = (ucSecond%10) | ((ucSecond/10)<<4) ;\r
+\r
+    /* value overflow */\r
+    if ( (ucHour_bcd & (uint8_t)(~RTC_HOUR_BIT_LEN_MASK)) |\r
+         (ucMin_bcd & (uint8_t)(~RTC_MIN_BIT_LEN_MASK)) |\r
+         (ucSec_bcd & (uint8_t)(~RTC_SEC_BIT_LEN_MASK)))\r
+    {\r
+        return 1 ;\r
+    }\r
+\r
+    dwTime = ucSec_bcd | (ucMin_bcd << 8) | (ucHour_bcd<<16) ;\r
+\r
+    pRtc->RTC_CR |= RTC_CR_UPDTIM ;\r
+    while ((pRtc->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD) ;\r
+    pRtc->RTC_SCCR = RTC_SCCR_ACKCLR ;\r
+    pRtc->RTC_TIMR = dwTime ;\r
+    pRtc->RTC_CR &= (uint32_t)(~RTC_CR_UPDTIM) ;\r
+    pRtc->RTC_SCCR |= RTC_SCCR_SECCLR ;\r
+\r
+    return (int)(pRtc->RTC_VER & RTC_VER_NVTIM) ;\r
+}\r
+\r
+/**\r
+ * \brief Retrieves the current time as stored in the RTC in several variables.\r
+ *\r
+ * \param pucHour    If not null, current hour is stored in this variable.\r
+ * \param pucMinute  If not null, current minute is stored in this variable.\r
+ * \param pucSecond  If not null, current second is stored in this variable.\r
+ */\r
+extern void RTC_GetTime( Rtc* pRtc, uint8_t *pucHour, uint8_t *pucMinute, uint8_t *pucSecond )\r
+{\r
+    uint32_t dwTime ;\r
+\r
+    TRACE_DEBUG( "RTC_GetTime()\n\r" ) ;\r
+\r
+    /* Get current RTC time */\r
+    dwTime = pRtc->RTC_TIMR ;\r
+    while ( dwTime != pRtc->RTC_TIMR )\r
+    {\r
+        dwTime = pRtc->RTC_TIMR ;\r
+    }\r
+\r
+    /* Hour */\r
+    if ( pucHour )\r
+    {\r
+        *pucHour = ((dwTime & 0x00300000) >> 20) * 10\r
+                 + ((dwTime & 0x000F0000) >> 16);\r
+\r
+        if ( (dwTime & RTC_TIMR_AMPM) == RTC_TIMR_AMPM )\r
+        {\r
+            *pucHour += 12 ;\r
+        }\r
+    }\r
+\r
+    /* Minute */\r
+    if ( pucMinute )\r
+    {\r
+        *pucMinute = ((dwTime & 0x00007000) >> 12) * 10\r
+                   + ((dwTime & 0x00000F00) >> 8);\r
+    }\r
+\r
+    /* Second */\r
+    if ( pucSecond )\r
+    {\r
+        *pucSecond = ((dwTime & 0x00000070) >> 4) * 10\r
+                   + (dwTime & 0x0000000F);\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Sets a time alarm on the RTC.\r
+ * The match is performed only on the provided variables;\r
+ * Setting all pointers to 0 disables the time alarm.\r
+ *\r
+ * \note In AM/PM mode, the hour value must have bit #7 set for PM, cleared for\r
+ * AM (as expected in the time registers).\r
+ *\r
+ * \param pucHour    If not null, the time alarm will hour-match this value.\r
+ * \param pucMinute  If not null, the time alarm will minute-match this value.\r
+ * \param pucSecond  If not null, the time alarm will second-match this value.\r
+ *\r
+ * \return 0 success, 1 fail to set\r
+ */\r
+extern int RTC_SetTimeAlarm( Rtc* pRtc, uint8_t *pucHour, uint8_t *pucMinute, uint8_t *pucSecond )\r
+{\r
+    uint32_t dwAlarm=0 ;\r
+\r
+    TRACE_DEBUG( "RTC_SetTimeAlarm()\n\r" ) ;\r
+\r
+    /* Hour */\r
+    if ( pucHour )\r
+    {\r
+        dwAlarm |= RTC_TIMALR_HOUREN | ((*pucHour / 10) << 20) | ((*pucHour % 10) << 16);\r
+    }\r
+\r
+    /* Minute */\r
+    if ( pucMinute )\r
+    {\r
+        dwAlarm |= RTC_TIMALR_MINEN | ((*pucMinute / 10) << 12) | ((*pucMinute % 10) << 8);\r
+    }\r
+\r
+    /* Second */\r
+    if ( pucSecond )\r
+    {\r
+        dwAlarm |= RTC_TIMALR_SECEN | ((*pucSecond / 10) << 4) | (*pucSecond % 10);\r
+    }\r
+\r
+    pRtc->RTC_TIMALR = dwAlarm ;\r
+\r
+    return (int)(pRtc->RTC_VER & RTC_VER_NVTIMALR) ;\r
+}\r
+\r
+/**\r
+ * \brief Retrieves the current year, month and day from the RTC.\r
+ * Month, day and week values are numbered starting at 1.\r
+ *\r
+ * \param pYwear  Current year (optional).\r
+ * \param pucMonth  Current month (optional).\r
+ * \param pucDay  Current day (optional).\r
+ * \param pucWeek  Current day in current week (optional).\r
+ */\r
+extern void RTC_GetDate( Rtc* pRtc, uint16_t *pwYear, uint8_t *pucMonth, uint8_t *pucDay, uint8_t *pucWeek )\r
+{\r
+    uint32_t dwDate ;\r
+\r
+    /* Get current date (multiple reads are necessary to insure a stable value) */\r
+    do\r
+    {\r
+        dwDate = pRtc->RTC_CALR ;\r
+    }\r
+    while ( dwDate != pRtc->RTC_CALR ) ;\r
+\r
+    /* Retrieve year */\r
+    if ( pwYear )\r
+    {\r
+        *pwYear = (((dwDate  >> 4) & 0x7) * 1000)\r
+                 + ((dwDate & 0xF) * 100)\r
+                 + (((dwDate >> 12) & 0xF) * 10)\r
+                 + ((dwDate >> 8) & 0xF);\r
+    }\r
+\r
+    /* Retrieve month */\r
+    if ( pucMonth )\r
+    {\r
+        *pucMonth = (((dwDate >> 20) & 1) * 10) + ((dwDate >> 16) & 0xF);\r
+    }\r
+\r
+    /* Retrieve day */\r
+    if ( pucDay )\r
+    {\r
+        *pucDay = (((dwDate >> 28) & 0x3) * 10) + ((dwDate >> 24) & 0xF);\r
+    }\r
+\r
+    /* Retrieve week */\r
+    if ( pucWeek )\r
+    {\r
+        *pucWeek = ((dwDate >> 21) & 0x7);\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Sets the current year, month and day in the RTC.\r
+ * Month, day and week values must be numbered starting from 1.\r
+ *\r
+ * \note In successive update operations, the user must wait at least one second\r
+ * after resetting the UPDTIM/UPDCAL bit in the RTC_CR before setting these\r
+ * bits again. Please look at the RTC section of the datasheet for detail.\r
+ *\r
+ * \param wYear  Current year.\r
+ * \param ucMonth Current month.\r
+ * \param ucDay   Current day.\r
+ * \param ucWeek  Day number in current week.\r
+ *\r
+ * \return 0 success, 1 fail to set\r
+ */\r
+extern int RTC_SetDate( Rtc* pRtc, uint16_t wYear, uint8_t ucMonth, uint8_t ucDay, uint8_t ucWeek )\r
+{\r
+    uint32_t wDate ;\r
+    uint8_t ucCent_bcd ;\r
+    uint8_t ucYear_bcd ;\r
+    uint8_t ucMonth_bcd ;\r
+    uint8_t ucDay_bcd ;\r
+    uint8_t ucWeek_bcd ;\r
+\r
+    ucCent_bcd  = ((wYear/100)%10) | ((wYear/1000)<<4);\r
+    ucYear_bcd  = (wYear%10) | (((wYear/10)%10)<<4);\r
+    ucMonth_bcd = ((ucMonth%10) | (ucMonth/10)<<4);\r
+    ucDay_bcd   = ((ucDay%10) | (ucDay/10)<<4);\r
+    ucWeek_bcd  = ((ucWeek%10) | (ucWeek/10)<<4);\r
+\r
+    /* value over flow */\r
+    if ( (ucCent_bcd & (uint8_t)(~RTC_CENT_BIT_LEN_MASK)) |\r
+         (ucYear_bcd & (uint8_t)(~RTC_YEAR_BIT_LEN_MASK)) |\r
+         (ucMonth_bcd & (uint8_t)(~RTC_MONTH_BIT_LEN_MASK)) |\r
+         (ucWeek_bcd & (uint8_t)(~RTC_WEEK_BIT_LEN_MASK)) |\r
+         (ucDay_bcd & (uint8_t)(~RTC_DATE_BIT_LEN_MASK))\r
+       )\r
+    {\r
+        return 1 ;\r
+    }\r
+\r
+\r
+    /* Convert values to date register value */\r
+    wDate = ucCent_bcd |\r
+            (ucYear_bcd << 8) |\r
+            (ucMonth_bcd << 16) |\r
+            (ucWeek_bcd << 21) |\r
+            (ucDay_bcd << 24);\r
+\r
+    /* Update calendar register  */\r
+    pRtc->RTC_CR |= RTC_CR_UPDCAL ;\r
+    while ((pRtc->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD) ;\r
+\r
+    pRtc->RTC_SCCR = RTC_SCCR_ACKCLR;\r
+    pRtc->RTC_CALR = wDate ;\r
+    pRtc->RTC_CR &= (uint32_t)(~RTC_CR_UPDCAL) ;\r
+    pRtc->RTC_SCCR |= RTC_SCCR_SECCLR; /* clear SECENV in SCCR */\r
+\r
+    return (int)(pRtc->RTC_VER & RTC_VER_NVCAL) ;\r
+}\r
+\r
+/**\r
+ * \brief Sets a date alarm in the RTC.\r
+ * The alarm will match only the provided values;\r
+ * Passing a null-pointer disables the corresponding field match.\r
+ *\r
+ * \param pucMonth If not null, the RTC alarm will month-match this value.\r
+ * \param pucDay   If not null, the RTC alarm will day-match this value.\r
+ *\r
+ * \return 0 success, 1 fail to set\r
+ */\r
+extern int RTC_SetDateAlarm( Rtc* pRtc, uint8_t *pucMonth, uint8_t *pucDay )\r
+{\r
+    uint32_t dwAlarm ;\r
+\r
+    dwAlarm = ((pucMonth) || (pucDay)) ? (0) : (0x01010000);\r
+\r
+    TRACE_DEBUG( "RTC_SetDateAlarm()\n\r" ) ;\r
+\r
+    /* Compute alarm field value */\r
+    if ( pucMonth )\r
+    {\r
+        dwAlarm |= RTC_CALALR_MTHEN | ((*pucMonth / 10) << 20) | ((*pucMonth % 10) << 16);\r
+    }\r
+\r
+    if ( pucDay )\r
+    {\r
+        dwAlarm |= RTC_CALALR_DATEEN | ((*pucDay / 10) << 28) | ((*pucDay % 10) << 24);\r
+    }\r
+\r
+    /* Set alarm */\r
+    pRtc->RTC_CALALR = dwAlarm ;\r
+\r
+    return (int)(pRtc->RTC_VER & RTC_VER_NVCALALR) ;\r
+}\r
+\r
+/**\r
+ * \brief Clear flag bits of status clear command register in the RTC.\r
+ *\r
+ * \param mask Bits mask of cleared events\r
+ */\r
+extern void RTC_ClearSCCR( Rtc* pRtc, uint32_t dwMask )\r
+{\r
+    /* Clear all flag bits in status clear command register */\r
+    dwMask &= RTC_SCCR_ACKCLR | RTC_SCCR_ALRCLR | RTC_SCCR_SECCLR | RTC_SCCR_TIMCLR | RTC_SCCR_CALCLR ;\r
+\r
+    pRtc->RTC_SCCR = dwMask ;\r
+}\r
+\r
+/**\r
+ * \brief Get flag bits of status register in the RTC.\r
+ *\r
+ * \param mask Bits mask of Status Register\r
+ *\r
+ * \return Status register & mask\r
+ */\r
+extern uint32_t RTC_GetSR( Rtc* pRtc, uint32_t dwMask )\r
+{\r
+    uint32_t dwEvent ;\r
+\r
+    dwEvent = pRtc->RTC_SR ;\r
+\r
+    return (dwEvent & dwMask) ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/sha.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/sha.c
new file mode 100644 (file)
index 0000000..5691ea8
--- /dev/null
@@ -0,0 +1,170 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup sha_module Working with SHA\r
+ * \ingroup peripherals_module\r
+ * The SHA driver provides the interface to configure and use the SHA peripheral.\r
+ * \n\r
+ *\r
+ * The Secure Hash Algorithm (SHA) module requires a padded message according to FIPS180-2\r
+ * specification. The first block of the message must be indicated to the module by a specific \r
+ * command. The SHA module produces a N-bit message digest each time a block is written and\r
+ * processing period ends. N is 160 for SHA1, 224 for SHA224, 256 for SHA256, 384 for SHA384,\r
+ * 512 for SHA512.\r
+ *\r
+ * To Enable a SHA encryption and decrypt,the user has to follow these few steps:\r
+ * <ul>\r
+ * <li> Configure SHA algorithm mode, key mode, start mode and operation mode by SHA_Configure(). </li>\r
+ * <li> Set SHA_FirstBlock() to indicates that the next block to process is the first one of a message.</li>\r
+ * <li> Input data for encryption by SHA_SetInput(). </li>\r
+ * <li> To start the encryption process with SHA_Start()</li>\r
+ * <li> To get the encryption reslut by SHA_GetOutput() </li>\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the SHA section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref sha.c\n\r
+ * \ref sha.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Secure Hash Algorithm (SHA)\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Starts Manual hash algorithm process.\r
+ */\r
+void SHA_Start(void)\r
+{\r
+    SHA->SHA_CR = SHA_CR_START;\r
+}\r
+\r
+/**\r
+ * \brief Resets the SHA. A software triggered hardware reset of the SHA interface is performed.\r
+ */\r
+void SHA_SoftReset(void)\r
+{\r
+    SHA->SHA_CR = SHA_CR_SWRST;\r
+}\r
+\r
+/**\r
+ * \brief Indicates that the next block to process is the first one of a message.\r
+ */\r
+void SHA_FirstBlock(void)\r
+{\r
+    SHA->SHA_CR = SHA_CR_FIRST;\r
+}\r
+\r
+/**\r
+ * \brief Configures an SHA peripheral with the specified parameters.\r
+ *  \param mode  Desired value for the SHA mode register (see the datasheet).\r
+ */\r
+void SHA_Configure(uint32_t mode)\r
+{\r
+    SHA->SHA_MR = mode; \r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a SHA peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void SHA_EnableIt(uint32_t sources)\r
+{\r
+    SHA->SHA_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a SHA peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void SHA_DisableIt(uint32_t sources)\r
+{\r
+    SHA->SHA_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given SHA peripheral.\r
+ * \return  SHA status register.\r
+ */\r
+uint32_t SHA_GetStatus(void)\r
+{\r
+    return SHA->SHA_ISR;\r
+}\r
+\r
+/**\r
+ * \brief Set the 32-bit Input Data registers allow to load the data block used for hash processing.\r
+ * \param data Pointer data block.\r
+ * \param len 512/1024-bits block size\r
+ */\r
+void SHA_SetInput(uint32_t *data, uint8_t len)\r
+{\r
+    uint8_t i;\r
+    uint8_t num;\r
+    num = len <= 16 ? len: 16;\r
+    for (i = 0; i < num ; i++)\r
+        SHA->SHA_IDATAR[i] = (data[i]);\r
+    num = len > 16 ? len - 16: 0;\r
+    for (i = 0; i < num; i++)\r
+        SHA->SHA_IODATAR[i] = (data[i+16]);\r
+}\r
+\r
+/**\r
+ * \brief Getread the resulting message digest and to write the second part of the message block when the\r
+* SHA algorithm is SHA-384 or SHA-512.\r
+ * \param data pointer to the word that has been encrypted/decrypted..\r
+ */\r
+void SHA_GetOutput(uint32_t *data)\r
+{\r
+    uint8_t i;\r
+    for (i = 0; i < 16; i++) \r
+        data[i] = SHA->SHA_IODATAR[i];\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/smcNfc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/smcNfc.c
new file mode 100644 (file)
index 0000000..0ee1d96
--- /dev/null
@@ -0,0 +1,743 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+  *  \file\r
+  *\r
+  *  Implementation of NFC functions.\r
+  */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+static SmcStatus smcStatus;\r
+/*----------------------------------------------------------------------------\r
+ *        Local functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Counts and return the number of bits set to '1' in the given hsiao code.\r
+ * \param code  Hsizo code.\r
+ */\r
+static unsigned char CountBitsInByte(unsigned char byte)\r
+{\r
+    unsigned char count = 0;\r
+    while (byte > 0) {\r
+\r
+        if (byte & 1) {\r
+\r
+            count++;\r
+        }\r
+        byte >>= 1;\r
+    }\r
+\r
+    return count;\r
+}\r
+\r
+/**\r
+ * \brief Counts and return the number of bits set to '1' in the given hsiao code.\r
+ * \param code  Hsizo code.\r
+ */\r
+static unsigned char CountBitsInCode(unsigned char *code)\r
+{\r
+    return CountBitsInByte(code[0])\r
+           + CountBitsInByte(code[1])\r
+           + CountBitsInByte(code[2]);\r
+}\r
+\r
+/**\r
+  * \brief Clear the corresponding interrupt flag.\r
+ */\r
+static void SMC_Clear_Status (void)\r
+{\r
+    smcStatus.BStatus = 0;\r
+}\r
+\r
+/**\r
+ * \brief Check the STATUS and set the corresponding interrupt flag.\r
+ */\r
+static void SMC_Handler(void)\r
+{\r
+    uint32_t status;\r
+    status = HSMC->HSMC_SR;\r
+#if 0\r
+    if ((status & HSMC_SR_SMCSTS) == HSMC_SR_SMCSTS) \r
+    /* NAND Flash Controller is enabled */\r
+        smcStatus.bStatus.smcSts = 1; \r
+#endif\r
+    if ((status & HSMC_SR_XFRDONE) == HSMC_SR_XFRDONE)\r
+    /* When set to one, this flag indicates that the NFC has terminated the Data Transfer. This flag is reset after a status read\r
+       operation. */\r
+        smcStatus.bStatus.xfrDone = 1; \r
+    if ((status & HSMC_SR_CMDDONE) == HSMC_SR_CMDDONE)\r
+    /* When set to one, this flag indicates that the NFC has terminated the Command. This flag is reset after a status read\r
+       operation.*/\r
+        smcStatus.bStatus.cmdDone = 1; \r
+    if ((status & (1<<24)) == (1<<24)) \r
+    /* If set to one, this flag indicates that an edge has been detected on the Ready/Busy Line x. Depending on the EDGE CTRL\r
+       field located in the SMC_CFG register, only rising or falling edge is detected. This flag is reset after a status read operation. */\r
+        smcStatus.bStatus.rbEdge = 1; \r
+    if ((status & HSMC_SR_ECCRDY) == HSMC_SR_ECCRDY)\r
+    /* When set to one, this flag indicates that the Hamming ECC computation is completed. This flag is reset after a status read\r
+       operation.*/\r
+        smcStatus.bStatus.hammingReady = 1; \r
+}\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Sets NFC configuration.\r
+ * \param cfg  NFC configuration.\r
+ */\r
+void SMC_NFC_Configure(uint32_t cfg)\r
+{\r
+    HSMC->HSMC_CFG = cfg;\r
+}\r
+\r
+/**\r
+ * \brief Reset NFC controller.\r
+ */\r
+void SMC_NFC_Reset(void)\r
+{\r
+    /* Disable all the SMC NFC interrupts */\r
+    HSMC->HSMC_IDR = 0xFFFFFFFF;\r
+    HSMC->HSMC_CTRL = 0;\r
+}\r
+\r
+/**\r
+ * \brief Enable NFC controller.\r
+ */\r
+void SMC_NFC_EnableNfc(void)\r
+{\r
+    HSMC->HSMC_CTRL |= HSMC_CTRL_NFCEN;\r
+}\r
+\r
+/**\r
+ * \brief Enable NFC controller reads both main and spare area in read mode.\r
+ */\r
+void SMC_NFC_EnableSpareRead(void)\r
+{\r
+    HSMC->HSMC_CFG |= HSMC_CFG_RSPARE;\r
+}\r
+\r
+/**\r
+ * \brief The NFC controller skips spare area in read mode.\r
+ */\r
+void SMC_NFC_DisableSpareRead(void)\r
+{\r
+    HSMC->HSMC_CFG &= (~HSMC_CFG_RSPARE);\r
+}\r
+\r
+/**\r
+ * \brief Enables the NFC controller writes both main and spare area in write\r
+ */\r
+void SMC_NFC_EnableSpareWrite(void)\r
+{\r
+    HSMC->HSMC_CFG |= HSMC_CFG_WSPARE;\r
+}\r
+\r
+/**\r
+ * \brief The NFC controller skips spare area in write mode.\r
+ */\r
+void SMC_NFC_DisableSpareWrite(void)\r
+{\r
+    HSMC->HSMC_CFG &= (~HSMC_CFG_WSPARE);\r
+}\r
+\r
+/**\r
+ * \brief Check if spare area be read in read mode.\r
+ *\r
+ * \return Returns 1 if NFC controller reads both main and spare area in\r
+ *         read mode, otherwise returns 0.\r
+ */\r
+uint8_t SMC_NFC_isSpareRead(void)\r
+{\r
+    return (((HSMC->HSMC_CFG) >> 9) & 0x1);\r
+}\r
+\r
+/**\r
+ * \brief Check if spare area be written in write mode.\r
+ *\r
+ * \return Returns 1 if NFC controller writes both main and spare area in\r
+ *         write mode, otherwise returns 0.\r
+ */\r
+uint8_t SMC_NFC_isSpareWrite(void)\r
+{\r
+    return (((HSMC->HSMC_CFG) >> 8) & 0x1);\r
+}\r
+\r
+/**\r
+ * \brief Check if NFC transfer complete.\r
+ * \return Returns 1 if NFC controller has terminated the data transmission,\r
+ *         otherwise returns 0.\r
+ */\r
+uint8_t SMC_NFC_isTransferComplete(void)\r
+{\r
+    return ((HSMC->HSMC_SR & HSMC_SR_XFRDONE) == HSMC_SR_XFRDONE);\r
+}\r
+\r
+/**\r
+ * \brief Check Ready/Busy line.\r
+ *\r
+ * \return Returns 1 if  edge has been detected on the Ready/Busy line,\r
+ *         otherwise returns 0.\r
+ */\r
+uint8_t SMC_NFC_isReadyBusy(void)\r
+{\r
+    return ((HSMC->HSMC_SR &  (1<<24)) ==  (1<<24));\r
+}\r
+\r
+/**\r
+ * \brief Check if NFC Controller is busy.\r
+ *\r
+ * \return Returns 1 if NFC Controller is activated and accesses the memory device,\r
+ *         otherwise returns 0.\r
+ */\r
+uint8_t SMC_NFC_isNfcBusy(void)\r
+{\r
+    return ((HSMC->HSMC_SR & HSMC_SR_NFCBUSY) == HSMC_SR_NFCBUSY);\r
+}\r
+\r
+/**\r
+ * \brief Get NFC Status.\r
+ *\r
+ * \return Returns the current status register of SMC NFC Status Register.\r
+ *         This resets the internal value of the status register, so further\r
+ *         read may yield different values.\r
+ */\r
+uint32_t SMC_NFC_GetStatus(void)\r
+{\r
+    return HSMC->HSMC_SR;\r
+}\r
+\r
+/*\r
+ * HOST command functions\r
+ */\r
+\r
+/**\r
+ * \brief Check if the host controller is busy.\r
+ * \return Returns 1 if the host controller is busy, otherwise returns 0.\r
+ */\r
+static uint8_t SMC_NFC_isHostBusy(void)\r
+{\r
+    return (((*((volatile uint32_t *) (NFC_CMD_BASE_ADDR + NFCADDR_CMD_NFCCMD))) & 0x8000000) == 0x8000000);\r
+}\r
+\r
+/**\r
+ * \brief Wait for NFC command has done.\r
+*/\r
+void SMC_NFC_Wait_CommandDone(void)\r
+{\r
+    while (smcStatus.bStatus.cmdDone == 0)\r
+    {\r
+        SMC_Handler();\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Wait for NFC Data Transfer Terminated.\r
+*/\r
+void SMC_NFC_Wait_XfrDone(void)\r
+{\r
+    while (smcStatus.bStatus.xfrDone == 0)\r
+    {\r
+        SMC_Handler();\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Wait for NFC Data Transfer Terminated.\r
+*/\r
+void SMC_NFC_Wait_HammingReady(void)\r
+{\r
+    while (smcStatus.bStatus.hammingReady ==0)\r
+    {\r
+        SMC_Handler();\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Wait for NFC Ready/Busy Line 3 Edge Detected.\r
+*/\r
+void SMC_NFC_Wait_RBbusy(void)\r
+{\r
+    while (smcStatus.bStatus.rbEdge == 0)\r
+    {\r
+        SMC_Handler();\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Uses the HOST nandflash conntroller to send a command to the NFC.\r
+ * \param cmd  command to send.\r
+ * \param addressCycle  address cycle when command access id decoded.\r
+ * \param cycle0  address at first cycle.\r
+ */\r
+void SMC_NFC_SendCommand(uint32_t cmd, uint32_t addressCycle, uint32_t cycle0)\r
+{\r
+    volatile uint32_t *pCommandAddress;\r
+    SMC_Clear_Status();\r
+    /* Wait until host controller is not busy. */\r
+    while(SMC_NFC_isHostBusy());\r
+    /* Send the command plus the ADDR_CYCLE */\r
+    pCommandAddress = (volatile uint32_t *) (cmd + NFC_CMD_BASE_ADDR);\r
+    HSMC->HSMC_ADDR = cycle0;\r
+    *pCommandAddress = addressCycle;\r
+    SMC_NFC_Wait_CommandDone();\r
+}\r
+\r
+/* ECC function */\r
+\r
+/**\r
+ * \brief Get 24-bit ECC code for 8-bit data path NAND flash.\r
+ * 24-bit ECC is generated in order to perform one bit correction\r
+ * for 512 byte in page 512/1024/2048/4096 for 8-bit words\r
+ *\r
+ * \param size  Data size in bytes.\r
+ * \param code  Codes buffer.\r
+ */\r
+static void _smc_ecc_GetW9BitPer512Ecc(uint32_t pageDataSize, uint8_t *code)\r
+{\r
+    uint8_t i;\r
+    uint8_t numEcc;\r
+    uint32_t eccParity;\r
+    uint32_t ecc[16];\r
+\r
+    SMC_ECC_GetValue(ecc);\r
+    numEcc = pageDataSize / 512;\r
+    /*  P2048' P1024' P512' P256' P128'   P64'  P32' P16'  ---  3rd. Ecc Byte to store */\r
+    /*  P8'    P4'    P2'   P1'   P2048   P1024 P512 P256  ---  2nd. Ecc Byte to store */\r
+    /*  P128   P64    P32   P16   P8      P4    P2   P1    ---  1st. Ecc Byte to store */\r
+    for (i = 0; i < numEcc; i++) {\r
+        /* Get Parity and NParity value. */\r
+        eccParity = ecc[i];\r
+        eccParity = ~eccParity;\r
+        code[i * 3] = eccParity & 0xff;\r
+        code[i * 3 + 1] = (eccParity >> 8) & 0xff;\r
+        code[i * 3 + 2] = (eccParity >> 16) & 0xff;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Get 24-bit ECC code for 8-bit data path NAND flash.\r
+ * 24-bit ECC is generated in order to perform one bit correction\r
+ * for 256 byte in page 512/1024/2048/4096 for 8-bit words\r
+ *\r
+ * \param size  Data size in bytes.\r
+ * \param code  Codes buffer.\r
+ */\r
+static void _smc_ecc_GetW8BitPer256Ecc(uint32_t pageDataSize, uint8_t *code)\r
+{\r
+    uint8_t i;\r
+    uint8_t numEcc;\r
+    uint32_t eccParity;\r
+    uint32_t ecc[16];\r
+\r
+    SMC_ECC_GetValue(ecc);\r
+    numEcc = pageDataSize / 256;\r
+\r
+    /*  P2048' P1024' P512' P256' P128'   P64'  P32' P16'  ---  3rd. Ecc Byte to store */\r
+    /*  P8'    P4'    P2'   P1'   P2048   P1024 P512 P256  ---  2nd. Ecc Byte to store */\r
+    /*  P128   P64    P32   P16   P8      P4    P2   P1    ---  1st. Ecc Byte to store */\r
+    for (i = 0; i < numEcc; i++) {\r
+        /* Get Parity and NParity value. */\r
+        eccParity = ecc[i];\r
+        eccParity = ~eccParity; \r
+        TRACE_DEBUG("ecc Parity%d is 0x%08x \n\r", (int)i, (uint32_t)eccParity);\r
+        code[i * 3] = eccParity & 0xff;\r
+        code[i * 3 + 1] = (eccParity >> 8) & 0xff;\r
+        code[i * 3 + 2] = (eccParity >> 16) & 0xff;\r
+    }\r
+}\r
+\r
+/**\r
+ * \breif Get 32-bit ECC code for 16-bit data path NAND flash.\r
+ * 32-bit ECC is generated in order to perform one bit correction\r
+ * for a page in page 512/1024/2048/4096 for 16-bit words\r
+ *\r
+ * \param size  Data size in bytes.\r
+ * \param code  Codes buffer.\r
+ */\r
+static void _smc_ecc_GetW12BitPerPageEcc(uint32_t pageDataSize, uint8_t *code)\r
+{\r
+    uint32_t eccParity;\r
+    uint32_t eccNparity;\r
+    uint32_t ecc[16];\r
+\r
+    pageDataSize = pageDataSize; /* stop warning */\r
+    /* Get Parity value. */\r
+    SMC_ECC_GetValue(ecc);\r
+\r
+    /*  ----   P16384'P8192'P4096'P2048'  P1024'P512'P256' ---  4th. Ecc Byte to store */\r
+    /*  P128'  P64'   P32'  P16'  P8'     P4'   P2'  P1'   ---  3rd. Ecc Byte to store */\r
+    /*  ----   P16384 P8192 P4096 P2048   P1024 P512 P256  ---  2nd. Ecc Byte to store */\r
+    /*  P128   P64    P32   P16   P8      P4    P2   P1    ---  1st. Ecc Byte to store */\r
+\r
+    /* Invert codes (linux compatibility) */\r
+    eccParity = ecc[0];\r
+    eccNparity = ecc[1];\r
+    code[0] = eccParity & 0xff;\r
+    code[1] = (eccParity >> 8 )& 0xff;\r
+    code[2] = eccNparity & 0xff;\r
+    code[3] = (eccNparity >> 8 )& 0xff;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Configures ECC mode.\r
+ * \param type  Type of correction.\r
+ * \param pageSize  Page size of NAND flash device.\r
+ */\r
+void SMC_ECC_Configure(uint32_t type, uint32_t pageSize)\r
+{\r
+    /* Software Reset ECC. */\r
+    HSMC->HSMC_ECC_CTRL = (0x1 <<  1) ;\r
+    HSMC->HSMC_ECC_MD = type | pageSize;\r
+}\r
+\r
+/**\r
+ * \brief Get ECC correction type.\r
+ *\r
+ * \return Returns type of ECC correction setting.\r
+ */\r
+uint32_t SMC_ECC_GetCorrectoinType(void)\r
+{\r
+    return ((HSMC->HSMC_ECC_MD)& HSMC_ECC_MD_TYPCORREC_Msk);\r
+}\r
+\r
+/**\r
+ * \brief Get ECC status.\r
+ * \param eccNumber  ecc parity number from 0 to 15.\r
+ *\r
+ * \return Returns ECC status by giving ecc number.\r
+ */\r
+uint8_t SMC_ECC_GetStatus(uint8_t eccNumber)\r
+{\r
+    uint32_t status;\r
+\r
+    if (eccNumber < 8){\r
+        status = HSMC->HSMC_ECC_SR1;\r
+    }\r
+    else {\r
+        status = HSMC->HSMC_ECC_SR2;\r
+        eccNumber -=8;\r
+    }\r
+    return ((status >> (eccNumber * 4)) & 0x07);\r
+}\r
+\r
+/**\r
+ * \brief Get all ECC parity and Nparity value.\r
+ */\r
+void SMC_ECC_GetValue(uint32_t *ecc)\r
+{\r
+   ecc[0] = HSMC->HSMC_ECC_PR0;\r
+   ecc[1] = HSMC->HSMC_ECC_PR1;\r
+   ecc[2] = HSMC->HSMC_ECC_PR2;\r
+   ecc[3] = HSMC->HSMC_ECC_PR3;\r
+   ecc[4] = HSMC->HSMC_ECC_PR4;\r
+   ecc[5] = HSMC->HSMC_ECC_PR5;\r
+   ecc[6] = HSMC->HSMC_ECC_PR6;\r
+   ecc[7] = HSMC->HSMC_ECC_PR7;\r
+   ecc[8] = HSMC->HSMC_ECC_PR8;\r
+   ecc[9] = HSMC->HSMC_ECC_PR9;\r
+   ecc[10] = HSMC->HSMC_ECC_PR10;\r
+   ecc[11] = HSMC->HSMC_ECC_PR11;\r
+   ecc[12] = HSMC->HSMC_ECC_PR12;\r
+   ecc[13] = HSMC->HSMC_ECC_PR13;\r
+   ecc[14] = HSMC->HSMC_ECC_PR14;\r
+   ecc[15] = HSMC->HSMC_ECC_PR15;\r
+}\r
+\r
+/**\r
+ * \brief verifies 4-bytes hsiao codes for a data block whose size is a page Size\r
+ * word. Page words block is verified between the given HSIAO code \r
+ * generated by hardware and original HSIAO codes store has been previously stored.\r
+ * Returns 0 if the data is correct, Hsiao_ERROR_SINGLEBIT if one or more\r
+ * block(s) have had a single bit corrected, or either Hsiao_ERROR_ECC\r
+ * or Hsiao_ERROR_MULTIPLEBITS.\r
+ * \param data  Data buffer to verify.\r
+ * \param originalCode  Original codes.\r
+ * \param verifyCode  codes to be verified.\r
+ */\r
+static uint8_t _smc_ecc_VerifyW12BitPerPageEcc(\r
+    uint8_t *data,\r
+    const uint8_t *originalCode,\r
+    const uint8_t *verifyCode)\r
+{\r
+    uint8_t correctionCode[4];\r
+    uint8_t bitCount;\r
+    // Xor both codes together\r
+    correctionCode[0] = verifyCode[0] ^ originalCode[0];\r
+    correctionCode[1] = verifyCode[1] ^ originalCode[1];\r
+    correctionCode[2] = verifyCode[2] ^ originalCode[2];\r
+    correctionCode[3] = verifyCode[3] ^ originalCode[3];\r
+    TRACE_DEBUG("Correction code = %02X %02X %02X %02X\n\r",\r
+                correctionCode[0], correctionCode[1], correctionCode[2], correctionCode[3]);\r
+    /* If all bytes are 0, there is no error */\r
+    if ((correctionCode[0] == 0)\r
+        && (correctionCode[1] == 0)\r
+        && (correctionCode[2] == 0)\r
+        && (correctionCode[3] == 0)) {\r
+\r
+        return 0;\r
+    }\r
+    /* If there is a single bit error, there are 15 bits set to 1 */\r
+    bitCount = CountBitsInByte(correctionCode[0]) + \r
+               CountBitsInByte(correctionCode[1]) + \r
+               CountBitsInByte(correctionCode[2]) + \r
+               CountBitsInByte(correctionCode[3]);\r
+    if (bitCount == 15) {\r
+        /* Get byte and bit indexes */\r
+        uint16_t byte = (correctionCode[0] & 0xf0) >> 4;\r
+        byte |= (correctionCode[1] & 0xff) << 4;\r
+        uint8_t bit = correctionCode[0] & 0x0f;\r
+        /* Correct bit */\r
+        printf("Correcting byte #%d at bit %d\n\r", byte, bit);\r
+        data[byte] ^= (1 << bit);\r
+\r
+        return Hsiao_ERROR_SINGLEBIT;\r
+    }\r
+   \r
+    /* Check if ECC has been corrupted */\r
+    if (bitCount == 1) {\r
+        return Hsiao_ERROR_ECC;\r
+    }\r
+    /* Otherwise, this is a multi-bit error */\r
+    else {\r
+        return Hsiao_ERROR_MULTIPLEBITS;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief erifies 3-bytes hsiao codes for a data block whose size is a page Size\r
+ * word. Page words block is verified between the given HSIAO code \r
+ * generated by hardware and original HSIAO codes store has been previously stored.\r
+ * Returns 0 if the data is correct, Hsiao_ERROR_SINGLEBIT if one or more\r
+ * block(s) have had a single bit corrected, or either Hsiao_ERROR_ECC\r
+ * or Hsiao_ERROR_MULTIPLEBITS.\r
+ * \param data  Data buffer to verify.\r
+ * \param originalCode  Original codes.\r
+ * \param verifyCode  codes to be verified.\r
+ */\r
+static uint8_t _smc_ecc_VerifyW8BitPer256Ecc(\r
+    uint8_t *data,\r
+    uint32_t size,\r
+    const uint8_t *originalCode,\r
+    const uint8_t *verifyCode)\r
+{\r
+    uint8_t correctionCode[3];\r
+    uint32_t position = 0;\r
+    uint8_t byte;\r
+    uint8_t bit;\r
+    uint8_t error = 0;\r
+    \r
+    TRACE_DEBUG("_smc_ecc_VerifyW8BitPer256Ecc()\n\r");\r
+    while (position < size) {\r
+        /* Xor both codes together */\r
+        correctionCode[0] = verifyCode[0] ^ originalCode[0];\r
+        correctionCode[1] = verifyCode[1] ^ originalCode[1];\r
+        correctionCode[2] = verifyCode[2] ^ originalCode[2];\r
+        TRACE_DEBUG("Correction code = %02X %02X %02X\n\r",\r
+            correctionCode[0], correctionCode[1], correctionCode[2]);\r
+            \r
+        /* If all bytes are 0, there is no error */\r
+        if ( correctionCode[0] || correctionCode[1] || correctionCode[2]) {\r
+            /* If there is a single bit error, there are 11 bits set to 1 */\r
+            if (CountBitsInCode(correctionCode) == 11) {\r
+                /* Get byte and bit indexes */\r
+                byte = (correctionCode[0] & 0xf8) >> 3;\r
+                byte |= (correctionCode[1] & 0x07) << 5;\r
+                bit = correctionCode[0] & 0x07;\r
+                /* Correct bit */\r
+                printf("Correcting byte #%u at bit %u\n\r", (unsigned int)(position + byte),  (unsigned int)bit);\r
+                data[byte] ^= (1 << bit);\r
+                error = Hsiao_ERROR_SINGLEBIT;\r
+            }\r
+            /* Check if ECC has been corrupted */\r
+            else if (CountBitsInCode(correctionCode) == 1) {\r
+                return Hsiao_ERROR_ECC;\r
+            }\r
+            else {\r
+                /* Otherwise, this is a multi-bit error */\r
+                return Hsiao_ERROR_MULTIPLEBITS;\r
+            }\r
+        }\r
+        data += 256;\r
+        originalCode += 3;\r
+        verifyCode += 3;\r
+        position += 256;\r
+    }\r
+    return error;\r
+}\r
+\r
+/**\r
+ * \brief 3-bytes hsiao codes for a data block whose size is multiple of\r
+ * 512 bytes. Each 512-bytes block is verified between the given HSIAO code \r
+ * generated by hardware and original HSIAO codes store has been previously stored.\r
+ * Returns 0 if the data is correct, Hsiao_ERROR_SINGLEBIT if one or more\r
+ * block(s) have had a single bit corrected, or either Hsiao_ERROR_ECC\r
+ * or Hsiao_ERROR_MULTIPLEBITS.\r
+ * \param data  Data buffer to verify.\r
+ * \param originalCode  Original codes.\r
+ * \param verifyCode  codes to be verified.\r
+ */\r
+static uint8_t _smc_ecc_VerifyW9BitPer512Ecc(\r
+    uint8_t *data,\r
+    uint32_t size,\r
+    const uint8_t *originalCode,\r
+    const uint8_t *verifyCode)\r
+{\r
+    uint8_t correctionCode[3];\r
+    uint32_t position = 0;\r
+    uint16_t byte;\r
+    uint8_t bit;\r
+    uint8_t error = 0;\r
+    \r
+    TRACE_DEBUG("_smc_ecc_VerifyW9BitPer512Ecc()\n\r");\r
+    while (position < size) {\r
+        /* Xor both codes together */\r
+        correctionCode[0] = verifyCode[0] ^ originalCode[0];\r
+        correctionCode[1] = verifyCode[1] ^ originalCode[1];\r
+        correctionCode[2] = verifyCode[2] ^ originalCode[2];\r
+        TRACE_DEBUG("Correction code = %02X %02X %02X\n\r",\r
+            correctionCode[0], correctionCode[1], correctionCode[2]);\r
+            \r
+        /* If all bytes are 0, there is no error */\r
+        if ( correctionCode[0] || correctionCode[1] || correctionCode[2]) {\r
+            // If there is a single bit error, there are 11 bits set to 1\r
+            if (CountBitsInCode(correctionCode) == 12) {\r
+                /* Get byte and bit indexes */\r
+                byte = (correctionCode[0] & 0xf8) >> 3;\r
+                byte |= (correctionCode[1] & 0x0f) << 5;\r
+                bit = correctionCode[0] & 0x07;\r
+                /* Correct bit */\r
+                printf("Correcting byte #%u at bit %u\n\r",  (unsigned int)(position + byte),  (unsigned int)bit);\r
+                data[byte] ^= (1 << bit);\r
+                error = Hsiao_ERROR_SINGLEBIT;\r
+            }\r
+            /* Check if ECC has been corrupted */\r
+            else if (CountBitsInCode(correctionCode) == 1) {\r
+                return Hsiao_ERROR_ECC;\r
+            }\r
+            else {\r
+                /* Otherwise, this is a multi-bit error */\r
+                return Hsiao_ERROR_MULTIPLEBITS;\r
+            }\r
+        }\r
+        data += 512;\r
+        originalCode += 3;\r
+        verifyCode += 3;\r
+        position += 512;\r
+    }\r
+    return error;\r
+}\r
+\r
+/**\r
+ * Get ECC code for 8bit/16-bit data path NAND flash by giving data path.\r
+ * 24-bit or 32-bit ECC is generated in order to perform one bit correction\r
+ * for a page in page 512/1024/2048/4096.\r
+ *\r
+ * \param size  Data size in bytes.\r
+ * \param code  Codes buffer.\r
+ * \param busWidth 8bit/16bit data path.\r
+ */\r
+void SMC_ECC_GetEccParity(uint32_t pageDataSize, uint8_t *code, uint8_t busWidth)\r
+{\r
+    uint8_t correctionType;\r
+\r
+    correctionType = SMC_ECC_GetCorrectoinType();\r
+    /* For 16-bit data path */\r
+    if (busWidth == 16 && correctionType == HSMC_ECC_MD_TYPCORREC_CPAGE )\r
+        _smc_ecc_GetW12BitPerPageEcc(pageDataSize, code);\r
+    /* For 8-bit data path */\r
+    else {\r
+        switch (correctionType){\r
+            case HSMC_ECC_MD_TYPCORREC_CPAGE:\r
+                _smc_ecc_GetW12BitPerPageEcc(pageDataSize, code);\r
+                break;\r
+            case HSMC_ECC_MD_TYPCORREC_C256B:\r
+                 _smc_ecc_GetW8BitPer256Ecc(pageDataSize, code);\r
+                 break;\r
+            case HSMC_ECC_MD_TYPCORREC_C512B:\r
+                _smc_ecc_GetW9BitPer512Ecc(pageDataSize, code);\r
+                break;\r
+        }\r
+    }\r
+}\r
+\r
+\r
+/**\r
+ *  Verifies hsiao codes for a data block. The block is verified between the given \r
+ *  HSIAO code generated by hardware and original HSIAO codes store has been \r
+ *  previously stored.\r
+ *  Returns 0 if the data is correct, Hsiao_ERROR_SINGLEBIT if one or more\r
+ *  block(s) have had a single bit corrected, or either Hsiao_ERROR_ECC\r
+ *  or Hsiao_ERROR_MULTIPLEBITS.\r
+ *  \param data  Data buffer to verify.\r
+ *  \param size  Size of the data in words.\r
+ *  \param originalCode  Original codes.\r
+ *  \param verifyCode  codes to be verified.\r
+ *  \param dataPath 8bit/16bit data path.\r
+*/\r
+uint8_t SMC_ECC_VerifyHsiao(\r
+    uint8_t *data,\r
+    uint32_t size,\r
+    const uint8_t *originalCode,\r
+    const uint8_t *verifyCode,\r
+    uint8_t busWidth)\r
+{\r
+    uint8_t correctionType;\r
+    uint8_t error = 0;\r
+    correctionType = SMC_ECC_GetCorrectoinType();\r
+    /* For 16-bit data path */\r
+    if (busWidth == 16 && (correctionType == HSMC_ECC_MD_TYPCORREC_CPAGE) ) {\r
+        error = _smc_ecc_VerifyW12BitPerPageEcc((uint8_t*)data, originalCode, verifyCode);\r
+    }\r
+    /* For 8-bit data path */\r
+    else {\r
+        switch (correctionType){\r
+            case HSMC_ECC_MD_TYPCORREC_CPAGE:\r
+                error = _smc_ecc_VerifyW12BitPerPageEcc(data, originalCode, verifyCode);\r
+\r
+                break;\r
+            case HSMC_ECC_MD_TYPCORREC_C256B:\r
+                 error = _smc_ecc_VerifyW8BitPer256Ecc(data, size, originalCode, verifyCode);\r
+                 break;\r
+            case HSMC_ECC_MD_TYPCORREC_C512B:\r
+                error = _smc_ecc_VerifyW9BitPer512Ecc(data, size, originalCode, verifyCode);\r
+                break;\r
+        }\r
+    }\r
+    return error;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/spi.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/spi.c
new file mode 100644 (file)
index 0000000..bd25749
--- /dev/null
@@ -0,0 +1,279 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup spi_module Working with SPI\r
+ * The SPI driver provides the interface to configure and use the SPI\r
+ * peripheral.\r
+ *\r
+ * The Serial Peripheral Interface (SPI) circuit is a synchronous serial\r
+ * data link that provides communication with external devices in Master\r
+ * or Slave Mode.\r
+ *\r
+ * To use the SPI, the user has to follow these few steps:\r
+ * -# Enable the SPI pins required by the application (see pio.h).\r
+ * -# Configure the SPI using the \ref SPI_Configure(). This enables the\r
+ *    peripheral clock. The mode register is loaded with the given value.\r
+ * -# Configure all the necessary chip selects with \ref SPI_ConfigureNPCS().\r
+ * -# Enable the SPI by calling \ref SPI_Enable().\r
+ * -# Send/receive data using \ref SPI_Write() and \ref SPI_Read(). Note that \ref SPI_Read()\r
+ *    must be called after \ref SPI_Write() to retrieve the last value read. \r
+ * -# Disable the SPI by calling \ref SPI_Disable().\r
+ *\r
+ * For more accurate information, please look at the SPI section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref spi.c\n\r
+ * \ref spi.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Serial Peripheral Interface (SPI) controller.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Enables a SPI peripheral.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ */\r
+extern void SPI_Enable( Spi* spi )\r
+{\r
+    spi->SPI_CR = SPI_CR_SPIEN ;\r
+}\r
+\r
+/**\r
+ * \brief Disables a SPI peripheral.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ */\r
+extern void SPI_Disable( Spi* spi )\r
+{\r
+    spi->SPI_CR = SPI_CR_SPIDIS ;\r
+}\r
+\r
+/**\r
+ * \brief Enables one or more interrupt sources of a SPI peripheral.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ * \param sources Bitwise OR of selected interrupt sources.\r
+ */\r
+extern void SPI_EnableIt( Spi* spi, uint32_t dwSources )\r
+{\r
+    spi->SPI_IER = dwSources ;\r
+}\r
+\r
+/**\r
+ * \brief Disables one or more interrupt sources of a SPI peripheral.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ * \param sources Bitwise OR of selected interrupt sources.\r
+ */\r
+extern void SPI_DisableIt( Spi* spi, uint32_t dwSources )\r
+{\r
+    spi->SPI_IDR = dwSources ;\r
+}\r
+\r
+/**\r
+ * \brief Configures a SPI peripheral as specified. The configuration can be computed\r
+ * using several macros (see \ref spi_configuration_macros).\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ * \param id   Peripheral ID of the SPI.\r
+ * \param configuration  Value of the SPI configuration register.\r
+ */\r
+extern void SPI_Configure( Spi* spi, uint32_t dwId, uint32_t dwConfiguration )\r
+{\r
+    PMC_EnablePeripheral( dwId ) ;\r
+    spi->SPI_CR = SPI_CR_SPIDIS ;\r
+\r
+    /* Execute a software reset of the SPI twice */\r
+    spi->SPI_CR = SPI_CR_SWRST ;\r
+    spi->SPI_CR = SPI_CR_SWRST ;\r
+    spi->SPI_MR = dwConfiguration ;\r
+}\r
+\r
+/**\r
+ * \brief Configures SPI chip select.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ * \param cS  Chip select of NPSCx.\r
+ */\r
+extern void SPI_ChipSelect( Spi* spi, uint8_t cS)\r
+{\r
+    spi->SPI_MR |= SPI_MR_PCS_Msk ;\r
+    spi->SPI_MR &= ~(SPI_MR_PCS ( cS )) ;\r
+}\r
+\r
+/**\r
+ * \brief Configures SPI Mode Register.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ * \param configuration  Value of the SPI mode register.\r
+ */\r
+extern void SPI_SetMode( Spi* spi, \r
+                         uint32_t dwConfiguration )\r
+{\r
+    spi->SPI_MR = dwConfiguration ;\r
+}\r
+\r
+/**\r
+ * \brief Configures SPI to release last used CS line.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ */\r
+extern void SPI_ReleaseCS( Spi* spi )\r
+{\r
+    spi->SPI_CR = SPI_CR_LASTXFER ;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Configures a chip select of a SPI peripheral. The chip select configuration\r
+ * is computed using several macros (see \ref spi_configuration_macros).\r
+ *\r
+ * \param spi   Pointer to an Spi instance.\r
+ * \param npcs  Chip select to configure (0, 1, 2 or 3).\r
+ * \param configuration  Desired chip select configuration.\r
+ */\r
+void SPI_ConfigureNPCS( Spi* spi, uint32_t dwNpcs, uint32_t dwConfiguration )\r
+{\r
+    spi->SPI_CSR[dwNpcs] = dwConfiguration ;\r
+}\r
+\r
+/**\r
+ * \brief Configures a chip select active mode of a SPI peripheral.\r
+ *\r
+ * \param spi   Pointer to an Spi instance.\r
+ * \param dwNpcs  Chip select to configure (0, 1, 2 or 3).\r
+ * \param bReleaseOnLast CS controlled by last transfer.\r
+ *                       SPI_ReleaseCS() is used to deactive CS. \r
+ */\r
+void SPI_ConfigureCSMode( Spi* spi, uint32_t dwNpcs, uint32_t bReleaseOnLast )\r
+{\r
+    if (bReleaseOnLast)\r
+    {\r
+        spi->SPI_CSR[dwNpcs] |=  SPI_CSR_CSAAT;\r
+    }\r
+    else\r
+    {\r
+        spi->SPI_CSR[dwNpcs] &= ~SPI_CSR_CSAAT;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given SPI peripheral.\r
+ * \note This resets the internal value of the status register, so further\r
+ * read may yield different values.\r
+ * \param spi   Pointer to a Spi instance.\r
+ * \return  SPI status register.\r
+ */\r
+extern uint32_t SPI_GetStatus( Spi* spi )\r
+{\r
+    return spi->SPI_SR ;\r
+}\r
+\r
+/**\r
+ * \brief Reads and returns the last word of data received by a SPI peripheral. This\r
+ * method must be called after a successful SPI_Write call.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ *\r
+ * \return readed data.\r
+ */\r
+extern uint32_t SPI_Read( Spi* spi )\r
+{\r
+    while ( (spi->SPI_SR & SPI_SR_RDRF) == 0 ) ;\r
+\r
+    return spi->SPI_RDR & 0xFFFF ;\r
+}\r
+\r
+/**\r
+ * \brief Sends data through a SPI peripheral. If the SPI is configured to use a fixed\r
+ * peripheral select, the npcs value is meaningless. Otherwise, it identifies\r
+ * the component which shall be addressed.\r
+ *\r
+ * \param spi   Pointer to an Spi instance.\r
+ * \param npcs  Chip select of the component to address (0, 1, 2 or 3).\r
+ * \param data  Word of data to send.\r
+ */\r
+extern void SPI_Write( Spi* spi, uint32_t dwNpcs, uint16_t wData )\r
+{\r
+    /* Send data */\r
+    while ( (spi->SPI_SR & SPI_SR_TXEMPTY) == 0 ) ;\r
+    spi->SPI_TDR = wData | SPI_PCS( dwNpcs ) ;\r
+    while ( (spi->SPI_SR & SPI_SR_TDRE) == 0 ) ;\r
+}\r
+\r
+/**\r
+ * \brief Sends last data through a SPI peripheral.\r
+ * If the SPI is configured to use a fixed peripheral select, the npcs value is\r
+ * meaningless. Otherwise, it identifies the component which shall be addressed.\r
+ *\r
+ * \param spi   Pointer to an Spi instance.\r
+ * \param npcs  Chip select of the component to address (0, 1, 2 or 3).\r
+ * \param data  Word of data to send.\r
+ */\r
+extern void SPI_WriteLast( Spi* spi, uint32_t dwNpcs, uint16_t wData )\r
+{\r
+    /* Send data */\r
+    while ( (spi->SPI_SR & SPI_SR_TXEMPTY) == 0 ) ;\r
+    spi->SPI_TDR = wData | SPI_PCS( dwNpcs ) | SPI_TDR_LASTXFER ;\r
+    while ( (spi->SPI_SR & SPI_SR_TDRE) == 0 ) ;\r
+}\r
+\r
+/**\r
+ * \brief Check if SPI transfer finish.\r
+ *\r
+ * \param spi  Pointer to an Spi instance.\r
+ *\r
+ * \return Returns 1 if there is no pending write operation on the SPI; otherwise\r
+ * returns 0.\r
+ */\r
+extern uint32_t SPI_IsFinished( Spi* spi )\r
+{\r
+    return ((spi->SPI_SR & SPI_SR_TXEMPTY) != 0) ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/ssc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/ssc.c
new file mode 100644 (file)
index 0000000..de01842
--- /dev/null
@@ -0,0 +1,219 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup ssc_module Working with SSC\r
+ * The SSC driver provides the interface to configure and use the SSC\r
+ * peripheral.\r
+ *\r
+ * !Usage\r
+ *\r
+ * -# Enable the SSC interface pins.\r
+ * -# Configure the SSC to operate at a specific frequency by calling\r
+ *    SSC_Configure(). This function enables the peripheral clock of the SSC,\r
+ *    but not its PIOs.\r
+ * -# Configure the transmitter and/or the receiver using the\r
+ *    SSC_ConfigureTransmitter() and SSC_ConfigureEmitter() functions.\r
+ * -# Enable the PIOs or the transmitter and/or the received.\r
+ * -# Enable the transmitter and/or the receiver using SSC_EnableTransmitter()\r
+ *    and SSC_EnableReceiver()\r
+ * -# Send data through the transmitter using SSC_Write() \r
+ * -# Receive data from the receiver using SSC_Read() \r
+ * -# Disable the transmitter and/or the receiver using SSC_DisableTransmitter()\r
+ *    and SSC_DisableReceiver()\r
+ *\r
+ * For more accurate information, please look at the SSC section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref ssc.c\n\r
+ * \ref ssc.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Synchronous Serial (SSC) controller.\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *       Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures a SSC peripheral.If the divided clock is not used, the master\r
+ * clock frequency can be set to 0.\r
+ * \note The emitter and transmitter are disabled by this function.\r
+ * \param ssc  Pointer to an SSC instance.\r
+ * \param bitRate  bit rate.\r
+ * \param masterClock  master clock.\r
+ */\r
+void SSC_Configure(Ssc *ssc, uint32_t bitRate, uint32_t masterClock)\r
+{\r
+    uint32_t id;\r
+    uint32_t maxClock;\r
+    id = (ssc == SSC0 )? ID_SSC0 : ID_SSC1;\r
+    maxClock = PMC_SetPeriMaxClock(id, masterClock);\r
+    \r
+    /* Reset, disable receiver & transmitter */\r
+    ssc->SSC_CR = SSC_CR_RXDIS | SSC_CR_TXDIS | SSC_CR_SWRST;\r
+\r
+    /* Configure clock frequency */\r
+    if (bitRate != 0) {\r
+\r
+        ssc->SSC_CMR = maxClock / (2 * bitRate);\r
+    }\r
+    else {\r
+\r
+        ssc->SSC_CMR = 0;\r
+    }\r
+    /* Enable SSC peripheral clock */\r
+    //PMC_EnablePeripheral(id);\r
+}\r
+\r
+/**\r
+ * \brief Configures the transmitter of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ * \param tcmr Transmit Clock Mode Register value.\r
+ * \param tfmr Transmit Frame Mode Register value.\r
+ */\r
+void SSC_ConfigureTransmitter(Ssc *ssc,uint32_t tcmr, uint32_t tfmr)\r
+{\r
+    ssc->SSC_TCMR = tcmr;\r
+    ssc->SSC_TFMR = tfmr;\r
+}\r
+\r
+/**\r
+ * \brief Configures the receiver of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ * \param rcmr Receive Clock Mode Register value.\r
+ * \param rfmr Receive Frame Mode Register value.\r
+ */\r
+void SSC_ConfigureReceiver(Ssc *ssc, uint32_t rcmr, uint32_t rfmr)\r
+{\r
+    ssc->SSC_RCMR = rcmr;\r
+    ssc->SSC_RFMR = rfmr;\r
+}\r
+\r
+/**\r
+ * \brief Enables the transmitter of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ */\r
+void SSC_EnableTransmitter(Ssc *ssc)\r
+{\r
+    ssc->SSC_CR = SSC_CR_TXEN;\r
+}\r
+\r
+/**\r
+ * \brief Disables the transmitter of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ */\r
+void SSC_DisableTransmitter(Ssc *ssc)\r
+{\r
+    ssc->SSC_CR = SSC_CR_TXDIS;\r
+}\r
+\r
+/**\r
+ * \brief Enables the receiver of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ */\r
+void SSC_EnableReceiver(Ssc *ssc)\r
+{\r
+    ssc->SSC_CR = SSC_CR_RXEN;\r
+}\r
+\r
+/**\r
+ * \brief Disables the receiver of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ */\r
+void SSC_DisableReceiver(Ssc *ssc)\r
+{\r
+    ssc->SSC_CR = SSC_CR_RXDIS;\r
+}\r
+\r
+/**\r
+ * \brief Enables one or more interrupt sources of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ * \param sources Bitwise OR of selected interrupt sources.\r
+ */\r
+void SSC_EnableInterrupts(Ssc *ssc, uint32_t sources)\r
+{\r
+    ssc->SSC_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables one or more interrupt sources of a SSC peripheral.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ * \param sources Bitwise OR of selected interrupt sources.\r
+ */\r
+void SSC_DisableInterrupts(Ssc *ssc, uint32_t sources)\r
+{\r
+    ssc->SSC_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Sends one data frame through a SSC peripheral. If another frame is currently\r
+ * being sent, this function waits for the previous transfer to complete.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ * \param frame Data frame to send.\r
+ */\r
+void SSC_Write(Ssc *ssc, uint32_t frame)\r
+{\r
+    while ((ssc->SSC_SR & SSC_SR_TXRDY) == 0);\r
+    ssc->SSC_THR = frame;\r
+}\r
+\r
+/**\r
+ * \brief Waits until one frame is received on a SSC peripheral, and returns it.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ */\r
+uint32_t SSC_Read(Ssc *ssc)\r
+{\r
+    while ((ssc->SSC_SR & SSC_SR_RXRDY) == 0);\r
+    return ssc->SSC_RHR;\r
+}\r
+\r
+/**\r
+ * \brief Return 1 if one frame is received, 0 otherwise.\r
+ * \param ssc  Pointer to an SSC instance. \r
+ */\r
+uint8_t SSC_IsRxReady(Ssc *ssc)\r
+{\r
+    return ((ssc->SSC_SR & SSC_SR_RXRDY) > 0);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/tc.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/tc.c
new file mode 100644 (file)
index 0000000..f19e312
--- /dev/null
@@ -0,0 +1,207 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup tc_module \r
+ * The TC driver provides the Interface to configure the Timer Counter (TC).\r
+ *\r
+ *  \section Usage\r
+ * <ul>\r
+ *  <li> Optionally, use TC_FindMckDivisor() to let the program find the best\r
+ *     TCCLKS field value automatically.</li>\r
+ *  <li> Configure a Timer Counter in the desired mode using TC_Configure().</li>\r
+ *  <li> Start or stop the timer clock using TC_Start() and TC_Stop().</li>\r
+ *\r
+ * </ul>\r
+ * For more accurate information, please look at the TC section of the Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref tc.c\n\r
+ * \ref tc.h.\n\r
+*/\r
+\r
+ /**\r
+ *  \file\r
+ *\r
+ *  \section Purpose\r
+ *\r
+ *  Interface for configuring and using Timer Counter (TC) peripherals.\r
+ *\r
+ *  \section Usage\r
+ *  -# Optionally, use TC_FindMckDivisor() to let the program find the best\r
+ *     TCCLKS field value automatically.\r
+ *  -# Configure a Timer Counter in the desired mode using TC_Configure().\r
+ *  -# Start or stop the timer clock using TC_Start() and TC_Stop().\r
+ */\r
\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Timer Counter (TC).\r
+ *\r
+ */\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Global functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures a Timer Counter Channel\r
+ *\r
+ * Configures a Timer Counter to operate in the given mode. Timer is stopped\r
+ * after configuration and must be restarted with TC_Start(). All the\r
+ * interrupts of the timer are also disabled.\r
+ *\r
+ * \param pTc  Pointer to a Tc instance.\r
+ * \param channel Channel number.\r
+ * \param mode  Operating mode (TC_CMR value).\r
+ */\r
+extern void TC_Configure( Tc *pTc, uint32_t dwChannel, uint32_t dwMode )\r
+{\r
+    TcChannel* pTcCh ;\r
+\r
+    assert( dwChannel < (sizeof( pTc->TC_CHANNEL )/sizeof( pTc->TC_CHANNEL[0] )) ) ;\r
+    pTcCh = pTc->TC_CHANNEL+dwChannel ;\r
+\r
+    /*  Disable TC clock */\r
+    pTcCh->TC_CCR = TC_CCR_CLKDIS ;\r
+\r
+    /*  Disable interrupts */\r
+    pTcCh->TC_IDR = 0xFFFFFFFF ;\r
+\r
+    /*  Clear status register */\r
+    pTcCh->TC_SR ;\r
+\r
+    /*  Set mode */\r
+    pTcCh->TC_CMR = dwMode ;\r
+}\r
+\r
+/**\r
+ * \brief Reset and Start the TC Channel\r
+ *\r
+ * Enables the timer clock and performs a software reset to start the counting.\r
+ *\r
+ * \param pTc  Pointer to a Tc instance.\r
+ * \param dwChannel Channel number.\r
+ */\r
+extern void TC_Start( Tc *pTc, uint32_t dwChannel )\r
+{\r
+    TcChannel* pTcCh ;\r
+\r
+    assert( dwChannel < (sizeof( pTc->TC_CHANNEL )/sizeof( pTc->TC_CHANNEL[0] )) ) ;\r
+\r
+    pTcCh = pTc->TC_CHANNEL+dwChannel ;\r
+    pTcCh->TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG ;\r
+}\r
+\r
+/**\r
+ * \brief Stop TC Channel\r
+ *\r
+ * Disables the timer clock, stopping the counting.\r
+ *\r
+ * \param pTc     Pointer to a Tc instance.\r
+ * \param dwChannel Channel number.\r
+ */\r
+extern void TC_Stop(Tc *pTc, uint32_t dwChannel )\r
+{\r
+    TcChannel* pTcCh ;\r
+\r
+    assert( dwChannel < (sizeof( pTc->TC_CHANNEL )/sizeof( pTc->TC_CHANNEL[0] )) ) ;\r
+\r
+    pTcCh = pTc->TC_CHANNEL+dwChannel ;\r
+    pTcCh->TC_CCR = TC_CCR_CLKDIS ;\r
+}\r
+\r
+/**\r
+ * \brief Find best MCK divisor\r
+ *\r
+ * Finds the best MCK divisor given the timer frequency and MCK. The result\r
+ * is guaranteed to satisfy the following equation:\r
+ * \code\r
+ *   (MCK / (DIV * 65536)) <= freq <= (MCK / DIV)\r
+ * \endcode\r
+ * with DIV being the highest possible value.\r
+ *\r
+ * \param dwFreq  Desired timer frequency.\r
+ * \param dwMCk  Master clock frequency.\r
+ * \param dwDiv  Divisor value.\r
+ * \param dwTcClks  TCCLKS field value for divisor.\r
+ * \param dwBoardMCK  Board clock frequency.\r
+ *\r
+ * \return 1 if a proper divisor has been found, otherwise 0.\r
+ */\r
+extern uint32_t TC_FindMckDivisor( uint32_t dwFreq, uint32_t dwMCk, uint32_t *dwDiv, uint32_t *dwTcClks, uint32_t dwBoardMCK )\r
+{\r
+    const uint32_t adwDivisors[5] = { 2, 8, 32, 128, dwBoardMCK / 32768 } ;\r
+\r
+    uint32_t dwIndex = 0 ;\r
+\r
+    /*  Satisfy lower bound */\r
+    while ( dwFreq < ((dwMCk / adwDivisors[dwIndex]) / 65536) )\r
+    {\r
+        dwIndex++ ;\r
+\r
+        /*  If no divisor can be found, return 0 */\r
+        if ( dwIndex == (sizeof( adwDivisors )/sizeof( adwDivisors[0] ))  )\r
+        {\r
+            return 0 ;\r
+        }\r
+    }\r
+\r
+    /*  Try to maximize DIV while satisfying upper bound */\r
+    while ( dwIndex < 4 )\r
+    {\r
+\r
+        if ( dwFreq > (dwMCk / adwDivisors[dwIndex + 1]) )\r
+        {\r
+            break ;\r
+        }\r
+        dwIndex++ ;\r
+    }\r
+\r
+    /*  Store results */\r
+    if ( dwDiv )\r
+    {\r
+        *dwDiv = adwDivisors[dwIndex] ;\r
+    }\r
+    if ( dwTcClks )\r
+    {\r
+        *dwTcClks = dwIndex ;\r
+    }\r
+\r
+    return 1 ;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/tdes.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/tdes.c
new file mode 100644 (file)
index 0000000..c8b8f09
--- /dev/null
@@ -0,0 +1,218 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup tdes_module Working with TDES\r
+ * \ingroup peripherals_module\r
+ * The ADC driver provides the interface to configure and use the TDES peripheral.\r
+ * \n\r
+ *\r
+ * The Data Encryption Standard (DES) and the Triple Data Encryption Algorithm (TDES) specify\r
+ * FIPS-approved cryptographic algorithms that can be used to protect electronic data. The TDES\r
+ * bit in the TDES Mode Register (TDES_MR) is used to select either the single DES or the Triple\r
+ * DES mode by function TDES_Configure().\r
+ * A DES is capable of using cryptographic keys of 64 bits to encrypt and decrypt data in blocks of\r
+ * 64 bits, Date input can be set with TDES_SetInput(). This 64-bit key is defined in the Key 1 Word \r
+ * Registers (TDES_KEY1WRx) and set by TDES_WriteKey1. A TDES key consists of three DES keys, \r
+ * which is also referred to as a key bundle. These three 64-bit keys are defined, respectively, \r
+ * in the Key 1, 2 and 3 Word Registers (TDES_KEY1WRx, TDES_KEY2WRx and TDES_KEY3WRx). \r
+ * In Triple DES mode (TDESMOD set to 1), the KEYMOD bit in the TDES Mode Register is used to choose between a two- and a three-key\r
+ * algorithm:\r
+ *\r
+ * To Enable a TDES encryption and decrypt,the user has to follow these few steps:\r
+ * <ul>\r
+ * <li> A software triggered hardware reset of the TDES interface is performed by TDES_SoftReset().</li>\r
+ * <li> Configure TDES algorithm mode, key mode, start mode and operation mode by TDES_Configure(). </li>\r
+ * <li> Set DES key with fucntion TDES_WriteKey1(), TDES_WriteKey2(), or TDES_WriteKey3(). </li>\r
+ * <li> To start the encryption or the decryption process with TDES_Start()</li>\r
+ * <li> To get the encryption or decryption reslut by TDES_GetOutput() </li>\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the TDES section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref tdes.c\n\r
+ * \ref tdes.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Triple Data Encryption Standard (TDES).\r
+ *\r
+ */\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Starts Manual encryption/decryption process.\r
+ */\r
+void TDES_Start(void)\r
+{\r
+    TDES->TDES_CR = TDES_CR_START;\r
+}\r
+\r
+/**\r
+ * \brief Resets the TDES. A software triggered hardware reset of the TDES interface is performed.\r
+ */\r
+void TDES_SoftReset(void)\r
+{\r
+    TDES->TDES_CR = TDES_CR_SWRST;\r
+}\r
+\r
+/**\r
+ * \brief Restarts the countermeasures generator to an internal pre-defined value.\r
+ */\r
+void TDES_Recount(void)\r
+{\r
+    TDES->TDES_CR = TDES_CR_LOADSEED;\r
+}\r
+\r
+/**\r
+ * \brief Configures an TDES peripheral with the specified parameters.\r
+ *  \param mode  Desired value for the TDES mode register (see the datasheet).\r
+ */\r
+void TDES_Configure(uint32_t mode)\r
+{\r
+    TDES->TDES_MR = mode; \r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a TDES peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void TDES_EnableIt(uint32_t sources)\r
+{\r
+    TDES->TDES_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a TDES peripheral.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void TDES_DisableIt(uint32_t sources)\r
+{\r
+    TDES->TDES_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given TDES peripheral.\r
+ * \return  TDES status register.\r
+ */\r
+uint32_t TDES_GetStatus(void)\r
+{\r
+    return TDES->TDES_ISR;\r
+}\r
+\r
+/**\r
+ * \brief Set KEY1.\r
+ * \param keyword0 key word 0\r
+ * \param keyword0 key word 1\r
+ */\r
+void TDES_WriteKey1(uint32_t keyword0, uint32_t keyword1)\r
+{\r
+    TDES->TDES_KEY1WR[0] = keyword0;\r
+    TDES->TDES_KEY1WR[1] = keyword1;\r
+}\r
+\r
+/**\r
+ * \brief Set KEY2.\r
+ * \param keyword0 key word 0\r
+ * \param keyword0 key word 1\r
+ */\r
+void TDES_WriteKey2(uint32_t keyword0, uint32_t keyword1)\r
+{\r
+    TDES->TDES_KEY2WR[0] = keyword0;\r
+    TDES->TDES_KEY2WR[1] = keyword1;\r
+}\r
+\r
+/**\r
+ * \brief Set KEY3.\r
+ * \param keyword0 key word 0\r
+ * \param keyword0 key word 1\r
+ */\r
+void TDES_WriteKey3(uint32_t keyword0, uint32_t keyword1)\r
+{\r
+    TDES->TDES_KEY3WR[0] = keyword0;\r
+    TDES->TDES_KEY3WR[1] = keyword1;\r
+}\r
+\r
+/**\r
+ * \brief Set the two 32-bit input Data allow to set the 64-bit data block used for encryption/decryption.\r
+ * \param data0 corresponds to the first word of the data to be encrypted/decrypted\r
+ * \param data1 corresponds to the last word of the data to be encrypted/decrypted\r
+ */\r
+void TDES_SetInput(uint32_t data0, uint32_t data1)\r
+{\r
+    TDES->TDES_IDATAR[0] = data0;\r
+    TDES->TDES_IDATAR[1] = data1;\r
+}\r
+\r
+/**\r
+ * \brief Get the two 32-bit data contain the 64-bit data block which has been encrypted/decrypted.\r
+ * \param data0 point to the first word.\r
+ * \param data1 point to the last word.\r
+ */\r
+void TDES_GetOutput(uint32_t *data0, uint32_t *data1)\r
+{\r
+    *data0 = TDES->TDES_ODATAR[0];\r
+    *data1 = TDES->TDES_ODATAR[1];\r
+}\r
+\r
+/**\r
+ * \brief Set the 64-bit initialization vector data block, which is used by some\r
+ * modes of operation as an additional initial input.\r
+ * \param v0 corresponds to the first word of the initialization vector.\r
+ * \param v1 corresponds to the last word  of the initialization vector.\r
+ */\r
+void TDES_SetVector(uint32_t v0, uint32_t v1)\r
+{\r
+    TDES->TDES_IVR[0] = v0;\r
+    TDES->TDES_IVR[1] = v1;\r
+}\r
+\r
+/**\r
+ * \brief Set the 6-bit complete rounds.\r
+ * \param rounds corresponds to rounds+1 complete round.\r
+ */\r
+void TDES_SetXteaRounds(uint32_t rounds)\r
+{\r
+    TDES->TDES_XTEA_RNDR = TDES_XTEA_RNDR_XTEA_RNDS(rounds);\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/trng.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/trng.c
new file mode 100644 (file)
index 0000000..4fcc452
--- /dev/null
@@ -0,0 +1,121 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup rtng_module Working with RTNG\r
+ * \ingroup peripherals_module\r
+ * The TRNG driver provides the interface to configure and use the TRNG peripheral.\r
+ * \n\r
+ *\r
+ * The True Random Number Generator (TRNG) passes the American NIST Special Publication\r
+ * 800-22 and Diehard Random Tests Suites. As soon as the TRNG is enabled (TRNG_Enable()), \r
+ * the generator provides one 32-bit value every 84 clock cycles. \r
+ * Interrupt trng_int can be enabled through TRNG_EnableIt()(respectively disabled in TRNG_IDR).\r
+ * This interrupt is set when a new random value is available and is cleared when the status \r
+ * register is read (TRNG_SR register). The flag DATRDY of the status register (TRNG_ISR) is set\r
+ * when the random data is ready to be read out on the 32-bit output data through TRNG_GetRandData().\r
+ *\r
+ * For more accurate information, please look at the SHA section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref trng.c\n\r
+ * \ref trng.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of True Random Number Generator (TRNG)\r
+ *\r
+ */\r
+\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Enables the TRNG to provide Random Values.\r
+ * \param key  This key is to be written when the ENABLE bit is set.\r
+ */\r
+void TRNG_Enable(uint32_t key)\r
+{\r
+    TRNG->TRNG_CR = TRNG_CR_ENABLE | TRNG_CR_KEY(key);\r
+}\r
+\r
+/**\r
+ * \brief Disables the TRNG to provide Random Values.\r
+ * \param key  This key is to be written when the DISABLE bit is set.\r
+ */\r
+void TRNG_Disable(uint32_t key)\r
+{\r
+    TRNG->TRNG_CR = TRNG_CR_KEY(key);\r
+}\r
+\r
+/**\r
+ * \brief Data Ready Interrupt enable.\r
+ */\r
+void TRNG_EnableIt(void)\r
+{\r
+    TRNG->TRNG_IER = TRNG_IER_DATRDY;\r
+}\r
+\r
+/**\r
+ * \brief Data Ready Interrupt Disable.\r
+ */\r
+void TRNG_DisableIt(void)\r
+{\r
+    TRNG->TRNG_IDR = TRNG_IDR_DATRDY;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given TRNG peripheral.\r
+ * \return  TRNG status register.\r
+ */\r
+uint32_t TRNG_GetStatus(void)\r
+{\r
+    return TRNG->TRNG_ISR;\r
+}\r
+\r
+/**\r
+ * \brief Get the  32-bit Output Data from TRNG peripheral.\r
+ * \return  TRNG output data.\r
+ */\r
+uint32_t TRNG_GetRandData(void)\r
+{\r
+    return TRNG->TRNG_ODATA;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/twi.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/twi.c
new file mode 100644 (file)
index 0000000..ce0a879
--- /dev/null
@@ -0,0 +1,386 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup twi_module Working with TWI\r
+ * The TWI driver provides the interface to configure and use the TWI\r
+ * peripheral.\r
+ *\r
+ * \section Usage\r
+ * <ul>\r
+ * <li> Configures a TWI peripheral to operate in master mode, at the given\r
+ * frequency (in Hz) using TWI_Configure(). </li>\r
+ * <li> Sends a STOP condition on the TWI using TWI_Stop().</li>\r
+ * <li> Starts a read operation on the TWI bus with the specified slave using\r
+ * TWI_StartRead(). Data must then be read using TWI_ReadByte() whenever\r
+ * a byte is available (poll using TWI_ByteReceived()).</li>\r
+ * <li> Starts a write operation on the TWI to access the selected slave using\r
+ * TWI_StartWrite(). A byte of data must be provided to start the write;\r
+ * other bytes are written next.</li>\r
+ * <li> Sends a byte of data to one of the TWI slaves on the bus using TWI_WriteByte().\r
+ * This function must be called once before TWI_StartWrite() with the first byte of data\r
+ * to send, then it shall be called repeatedly after that to send the remaining bytes.</li>\r
+ * <li> Check if a byte has been received and can be read on the given TWI\r
+ * peripheral using TWI_ByteReceived().<\r
+ * Check if a byte has been sent using TWI_ByteSent().</li>\r
+ * <li> Check if the current transmission is complete (the STOP has been sent)\r
+ * using TWI_TransferComplete().</li>\r
+ * <li> Enables & disable the selected interrupts sources on a TWI peripheral\r
+ * using TWI_EnableIt() and TWI_DisableIt().</li>\r
+ * <li> Get current status register of the given TWI peripheral using\r
+ * TWI_GetStatus(). Get current status register of the given TWI peripheral, but\r
+ * masking interrupt sources which are not currently enabled using\r
+ * TWI_GetMaskedStatus().</li>\r
+ * </ul>\r
+ * For more accurate information, please look at the TWI section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref twi.c\n\r
+ * \ref twi.h.\n\r
+*/\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Two Wire Interface (TWI).\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures a TWI peripheral to operate in master mode, at the given\r
+ * frequency (in Hz). The duty cycle of the TWI clock is set to 50%.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param twck  Desired TWI clock frequency.\r
+ * \param mck  Master clock frequency.\r
+ */\r
+void TWI_ConfigureMaster( Twi* pTwi, uint32_t dwTwCk, uint32_t dwMCk )\r
+{\r
+    uint32_t dwCkDiv = 0 ;\r
+    uint32_t dwClDiv ;\r
+    uint32_t dwOk = 0 ;\r
+    uint32_t id = ID_TWI0;\r
+    uint32_t maxClock;\r
+\r
+    TRACE_DEBUG( "TWI_ConfigureMaster()\n\r" ) ;\r
+    assert( pTwi ) ;\r
+\r
+    /* SVEN: TWI Slave Mode Enabled */\r
+    pTwi->TWI_CR = TWI_CR_SVEN ;\r
+    /* Reset the TWI */\r
+    pTwi->TWI_CR = TWI_CR_SWRST ;\r
+    pTwi->TWI_RHR ;\r
+\r
+    /* TWI Slave Mode Disabled, TWI Master Mode Disabled. */\r
+    pTwi->TWI_CR = TWI_CR_SVDIS ;\r
+    pTwi->TWI_CR = TWI_CR_MSDIS ;\r
+\r
+    /* Set master mode */\r
+    pTwi->TWI_CR = TWI_CR_MSEN ;\r
+    if ((uint32_t)pTwi == (uint32_t)TWI0) id = ID_TWI0;\r
+       else if ((uint32_t)pTwi == (uint32_t)TWI1) id = ID_TWI1;\r
+              else if ((uint32_t)pTwi == (uint32_t)TWI2) id = ID_TWI2;\r
+\r
+    maxClock = PMC_SetPeriMaxClock(id, dwMCk);\r
+    \r
+    /* Configure clock */\r
+    while ( !dwOk )\r
+    {\r
+        dwClDiv = ((maxClock / (2 * dwTwCk)) - 8) / (1<<dwCkDiv) ;\r
+        if ( dwClDiv <= 255 )\r
+        {\r
+            dwOk = 1 ;\r
+        }\r
+        else\r
+        {\r
+            dwCkDiv++ ;\r
+        }\r
+    }\r
+\r
+    assert( dwCkDiv < 8 ) ;\r
+    TRACE_DEBUG( "Using CKDIV = %u and CLDIV/CHDIV = %u\n\r", dwCkDiv, dwClDiv ) ;\r
+\r
+    pTwi->TWI_CWGR = 0 ;\r
+    pTwi->TWI_CWGR = (dwCkDiv << 16) | (dwClDiv << 8) | dwClDiv ;\r
+}\r
+\r
+/**\r
+ * \brief Configures a TWI peripheral to operate in slave mode.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param slaveAddress Slave address.\r
+ */\r
+void TWI_ConfigureSlave(Twi *pTwi, uint8_t slaveAddress)\r
+{\r
+    uint32_t i;\r
+\r
+    /* TWI software reset */\r
+    pTwi->TWI_CR = TWI_CR_SWRST;\r
+    pTwi->TWI_RHR;\r
+\r
+    /* Wait at least 10 ms */\r
+    for (i=0; i < 1000000; i++);\r
+\r
+    /* TWI Slave Mode Disabled, TWI Master Mode Disabled*/\r
+    pTwi->TWI_CR = TWI_CR_SVDIS | TWI_CR_MSDIS;\r
+\r
+    /* Configure slave address. */\r
+    pTwi->TWI_SMR = 0;\r
+    pTwi->TWI_SMR = TWI_SMR_SADR(slaveAddress);\r
+\r
+    /* SVEN: TWI Slave Mode Enabled */\r
+    pTwi->TWI_CR = TWI_CR_SVEN;\r
+\r
+    /* Wait at least 10 ms */\r
+    for (i=0; i < 1000000; i++);\r
+    assert( (pTwi->TWI_CR & TWI_CR_SVDIS)!= TWI_CR_SVDIS ) ;\r
+}\r
+\r
+/**\r
+ * \brief Sends a STOP condition on the TWI.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ */\r
+void TWI_Stop( Twi *pTwi )\r
+{\r
+    assert( pTwi != NULL ) ;\r
+\r
+    pTwi->TWI_CR = TWI_CR_STOP;\r
+}\r
+\r
+/**\r
+ * \brief Starts a read operation on the TWI bus with the specified slave, it returns\r
+ * immediately. Data must then be read using TWI_ReadByte() whenever a byte is\r
+ * available (poll using TWI_ByteReceived()).\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param address  Slave address on the bus.\r
+ * \param iaddress  Optional internal address bytes.\r
+ * \param isize  Number of internal address bytes.\r
+ */\r
+void TWI_StartRead(\r
+    Twi *pTwi,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+    assert( (address & 0x80) == 0 ) ;\r
+    assert( (iaddress & 0xFF000000) == 0 ) ;\r
+    assert( isize < 4 ) ;\r
+\r
+    /* Set slave address and number of internal address bytes. */\r
+    pTwi->TWI_MMR = 0;\r
+    pTwi->TWI_MMR = (isize << 8) | TWI_MMR_MREAD | (address << 16);\r
+\r
+    /* Set internal address bytes */\r
+    pTwi->TWI_IADR = 0;\r
+    pTwi->TWI_IADR = iaddress;\r
+\r
+    /* Send START condition */\r
+    pTwi->TWI_CR = TWI_CR_START;\r
+}\r
+\r
+/**\r
+ * \brief Reads a byte from the TWI bus. The read operation must have been started\r
+ * using TWI_StartRead() and a byte must be available (check with TWI_ByteReceived()).\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \return byte read.\r
+ */\r
+uint8_t TWI_ReadByte(Twi *pTwi)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+\r
+    return pTwi->TWI_RHR;\r
+}\r
+\r
+/**\r
+ * \brief Sends a byte of data to one of the TWI slaves on the bus.\r
+ * \note This function must be called once before TWI_StartWrite() with\r
+ * the first byte of data  to send, then it shall be called repeatedly\r
+ * after that to send the remaining bytes.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param byte  Byte to send.\r
+ */\r
+void TWI_WriteByte(Twi *pTwi, uint8_t byte)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+\r
+    pTwi->TWI_THR = byte;\r
+}\r
+\r
+/**\r
+ * \brief Starts a write operation on the TWI to access the selected slave, then\r
+ *  returns immediately. A byte of data must be provided to start the write;\r
+ * other bytes are written next.\r
+ * after that to send the remaining bytes.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param address  Address of slave to acccess on the bus.\r
+ * \param iaddress  Optional slave internal address.\r
+ * \param isize  Number of internal address bytes.\r
+ * \param byte  First byte to send.\r
+ */\r
+void TWI_StartWrite(\r
+    Twi *pTwi,\r
+    uint8_t address,\r
+    uint32_t iaddress,\r
+    uint8_t isize,\r
+    uint8_t byte)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+    assert( (address & 0x80) == 0 ) ;\r
+    assert( (iaddress & 0xFF000000) == 0 ) ;\r
+    assert( isize < 4 ) ;\r
+\r
+    /* Set slave address and number of internal address bytes. */\r
+    pTwi->TWI_MMR = 0;\r
+    pTwi->TWI_MMR = (isize << 8) | (address << 16);\r
+\r
+    /* Set internal address bytes. */\r
+    pTwi->TWI_IADR = 0;\r
+    pTwi->TWI_IADR = iaddress;\r
+\r
+    /* Write first byte to send.*/\r
+    TWI_WriteByte(pTwi, byte);\r
+}\r
+\r
+/**\r
+ * \brief Check if a byte have been receiced from TWI.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \return 1 if a byte has been received and can be read on the given TWI\r
+ * peripheral; otherwise, returns 0. This function resets the status register.\r
+ */\r
+uint8_t TWI_ByteReceived(Twi *pTwi)\r
+{\r
+    return ((pTwi->TWI_SR & TWI_SR_RXRDY) == TWI_SR_RXRDY);\r
+}\r
+\r
+/**\r
+ * \brief Check if a byte have been sent to TWI.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \return 1 if a byte has been sent  so another one can be stored for\r
+ * transmission; otherwise returns 0. This function clears the status register.\r
+ */\r
+uint8_t TWI_ByteSent(Twi *pTwi)\r
+{\r
+    return ((pTwi->TWI_SR & TWI_SR_TXRDY) == TWI_SR_TXRDY);\r
+}\r
+\r
+/**\r
+ * \brief Check if current transmission is complet.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \return  1 if the current transmission is complete (the STOP has been sent);\r
+ * otherwise returns 0.\r
+ */\r
+uint8_t TWI_TransferComplete(Twi *pTwi)\r
+{\r
+    return ((pTwi->TWI_SR & TWI_SR_TXCOMP) == TWI_SR_TXCOMP);\r
+}\r
+\r
+/**\r
+ * \brief Enables the selected interrupts sources on a TWI peripheral.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void TWI_EnableIt(Twi *pTwi, uint32_t sources)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+    assert( (sources & 0xFFFFF088) == 0 ) ;\r
+\r
+    pTwi->TWI_IER = sources;\r
+}\r
+\r
+/**\r
+ * \brief Disables the selected interrupts sources on a TWI peripheral.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \param sources  Bitwise OR of selected interrupt sources.\r
+ */\r
+void TWI_DisableIt(Twi *pTwi, uint32_t sources)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+    assert( (sources & 0xFFFFF088) == 0 ) ;\r
+\r
+    pTwi->TWI_IDR = sources;\r
+}\r
+\r
+/**\r
+ * \brief Get the current status register of the given TWI peripheral.\r
+ * \note This resets the internal value of the status register, so further\r
+ * read may yield different values.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ * \return  TWI status register.\r
+ */\r
+uint32_t TWI_GetStatus(Twi *pTwi)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+\r
+    return pTwi->TWI_SR;\r
+}\r
+\r
+/**\r
+ * \brief Returns the current status register of the given TWI peripheral, but\r
+ * masking interrupt sources which are not currently enabled.\r
+ * \note This resets the internal value of the status register, so further\r
+ * read may yield different values.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ */\r
+uint32_t TWI_GetMaskedStatus(Twi *pTwi)\r
+{\r
+    uint32_t status;\r
+\r
+    assert( pTwi != NULL ) ;\r
+\r
+    status = pTwi->TWI_SR;\r
+    status &= pTwi->TWI_IMR;\r
+\r
+    return status;\r
+}\r
+\r
+/**\r
+ * \brief  Sends a STOP condition. STOP Condition is sent just after completing\r
+ *  the current byte transmission in master read mode.\r
+ * \param pTwi  Pointer to an Twi instance.\r
+ */\r
+void TWI_SendSTOPCondition(Twi *pTwi)\r
+{\r
+    assert( pTwi != NULL ) ;\r
+\r
+    pTwi->TWI_CR |= TWI_CR_STOP;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/usart.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/usart.c
new file mode 100644 (file)
index 0000000..350d879
--- /dev/null
@@ -0,0 +1,350 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2011, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup usart_module Working with USART\r
+ * The USART driver provides the interface to configure and use the USART peripheral.\n\r
+ *\r
+ * The USART supports several kinds of comminication modes such as full-duplex asynchronous/\r
+ * synchronous serial commnunication,RS485 with driver control signal,ISO7816,SPI and Test modes.\r
+ *\r
+ * To start a USART transfer with \ref dmad_module "DMA" support, the user could follow these steps:\r
+ * <ul>\r
+ * <li> Configure USART with expected mode and baudrate(see \ref USART_Configure), which could be done by:\r
+ * -# Resetting and disabling transmitter and receiver by setting US_CR(Control Register). </li>\r
+ * -# Conifguring the USART in a specific mode by setting USART_MODE bits in US_MR(Mode Register) </li>\r
+ * -# Setting baudrate which is different from mode to mode.\r
+   </li>\r
+ * <li> Enable transmitter or receiver respectively by set US_CR_TXEN or US_CR_RXEN in US_CR.</li>\r
+ * <li> Read from or write to the peripheral with  \ref dmad_module </li> \r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the USART section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref usart.c\n\r
+ * \ref usart.h\n\r
+*/\r
+\r
+\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of USART (Universal Synchronous Asynchronous Receiver Transmitter)\r
+ * controller.\r
+ *\r
+ */\r
+/*------------------------------------------------------------------------------\r
+ *         Headers\r
+ *------------------------------------------------------------------------------*/\r
+#include "chip.h"\r
+\r
+#include <assert.h>\r
+#include <string.h>\r
+\r
+/*------------------------------------------------------------------------------\r
+ *         Exported functions\r
+ *------------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Configures an USART peripheral with the specified parameters.\r
+ *\r
+ *\r
+ *  \param usart  Pointer to the USART peripheral to configure.\r
+ *  \param mode  Desired value for the USART mode register (see the datasheet).\r
+ *  \param baudrate  Baudrate at which the USART should operate (in Hz).\r
+ *  \param masterClock  Frequency of the system master clock (in Hz).\r
+ */\r
+void USART_Configure(Usart *usart,\r
+                     uint32_t mode,\r
+                     uint32_t baudrate,\r
+                     uint32_t masterClock)\r
+{\r
+    /* Reset and disable receiver & transmitter*/\r
+    usart->US_CR = US_CR_RSTRX | US_CR_RSTTX\r
+                   | US_CR_RXDIS | US_CR_TXDIS;\r
+    /* Configure mode*/\r
+    usart->US_MR = mode;\r
+    /* Configure baudrate*/\r
+    /* Asynchronous, no oversampling*/\r
+    if (((mode & US_MR_SYNC) == 0)\r
+        && ((mode & US_MR_OVER) == 0))\r
+    {\r
+        usart->US_BRGR = (masterClock / baudrate) / 16;\r
+    }\r
+    if( ((mode & US_MR_USART_MODE_SPI_MASTER) == US_MR_USART_MODE_SPI_MASTER)\r
+     || ((mode & US_MR_SYNC) == US_MR_SYNC))\r
+    {\r
+        if( (mode & US_MR_USCLKS_Msk) == US_MR_USCLKS_MCK)\r
+        {\r
+            usart->US_BRGR = masterClock / baudrate;\r
+        }\r
+        else\r
+        {\r
+            if ( (mode & US_MR_USCLKS_DIV) == US_MR_USCLKS_DIV)\r
+            {\r
+                usart->US_BRGR = masterClock / baudrate / 8;\r
+            }\r
+        }\r
+    }\r
+    /* TODO other modes*/\r
+}\r
+/**\r
+ * \brief Enables or disables the transmitter of an USART peripheral.\r
+ *\r
+ *\r
+ * \param usart  Pointer to an USART peripheral\r
+ * \param enabled  If true, the transmitter is enabled; otherwise it is\r
+ *                disabled.\r
+ */\r
+void USART_SetTransmitterEnabled(Usart *usart, uint8_t enabled)\r
+{\r
+    if (enabled) {\r
+\r
+        usart->US_CR = US_CR_TXEN;\r
+    }\r
+    else {\r
+\r
+        usart->US_CR = US_CR_TXDIS;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Enables or disables the receiver of an USART peripheral\r
+ *\r
+ *\r
+ * \param usart  Pointer to an USART peripheral\r
+ * \param enabled  If true, the receiver is enabled; otherwise it is disabled.\r
+ */\r
+void USART_SetReceiverEnabled(Usart *usart, uint8_t enabled)\r
+{\r
+    if (enabled) {\r
+\r
+        usart->US_CR = US_CR_RXEN;\r
+    }\r
+    else {\r
+\r
+        usart->US_CR = US_CR_RXDIS;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Enables or disables the Request To Send (RTS) of an USART peripheral\r
+ *\r
+ *\r
+ * \param usart  Pointer to an USART peripheral\r
+ * \param enabled  If true, the RTS is enabled (0); otherwise it is disabled.\r
+ */\r
+void USART_SetRTSEnabled( Usart *usart, uint8_t enabled)\r
+{\r
+    if (enabled) {\r
+    \r
+        usart->US_CR = US_CR_RTSEN;\r
+    }\r
+    else {\r
+        \r
+        usart->US_CR = US_CR_RTSDIS;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief Sends one packet of data through the specified USART peripheral. This\r
+ * function operates synchronously, so it only returns when the data has been\r
+ * actually sent.\r
+ *\r
+ *\r
+ * \param usart  Pointer to an USART peripheral.\r
+ * \param data  Data to send including 9nth bit and sync field if necessary (in\r
+ *        the same format as the US_THR register in the datasheet).\r
+ * \param timeOut  Time out value (0 = no timeout).\r
+ */\r
+void USART_Write( Usart *usart, uint16_t data, volatile uint32_t timeOut)\r
+{\r
+    if (timeOut == 0) {\r
+\r
+        while ((usart->US_CSR & US_CSR_TXEMPTY) == 0);\r
+    }\r
+    else {\r
+\r
+        while ((usart->US_CSR & US_CSR_TXEMPTY) == 0) {\r
+\r
+            if (timeOut == 0) {\r
+\r
+                TRACE_ERROR("USART_Write: Timed out.\n\r");\r
+                return;\r
+            }\r
+            timeOut--;\r
+        }\r
+    }\r
+\r
+    usart->US_THR = data;\r
+}\r
+\r
+\r
+/**\r
+ * \brief  Reads and return a packet of data on the specified USART peripheral. This\r
+ * function operates asynchronously, so it waits until some data has been\r
+ * received.\r
+ *\r
+ * \param usart  Pointer to an USART peripheral.\r
+ * \param timeOut  Time out value (0 -> no timeout).\r
+ */\r
+uint16_t USART_Read( Usart *usart, volatile uint32_t timeOut)\r
+{\r
+    if (timeOut == 0) {\r
+\r
+        while ((usart->US_CSR & US_CSR_RXRDY) == 0);\r
+    }\r
+    else {\r
+\r
+        while ((usart->US_CSR & US_CSR_RXRDY) == 0) {\r
+\r
+            if (timeOut == 0) {\r
+\r
+                TRACE_ERROR( "USART_Read: Timed out.\n\r" ) ;\r
+                return 0;\r
+            }\r
+            timeOut--;\r
+        }\r
+    }\r
+\r
+    return usart->US_RHR;\r
+}\r
+\r
+/**\r
+ * \brief  Returns 1 if some data has been received and can be read from an USART;\r
+ * otherwise returns 0.\r
+ *\r
+ * \param usart  Pointer to an Usart instance.\r
+ */\r
+uint8_t USART_IsDataAvailable(Usart *usart)\r
+{\r
+    if ((usart->US_CSR & US_CSR_RXRDY) != 0) {\r
+\r
+        return 1;\r
+    }\r
+    else {\r
+\r
+        return 0;\r
+    }\r
+}\r
+\r
+/**\r
+ * \brief  Sets the filter value for the IRDA demodulator.\r
+ *\r
+ * \param pUsart  Pointer to an Usart instance.\r
+ * \param filter  Filter value.\r
+ */\r
+void USART_SetIrdaFilter(Usart *pUsart, uint8_t filter)\r
+{\r
+    assert( pUsart != NULL ) ;\r
+\r
+    pUsart->US_IF = filter;\r
+}\r
+\r
+/**\r
+ * \brief  Sends one packet of data through the specified USART peripheral. This\r
+ * function operates synchronously, so it only returns when the data has been\r
+ * actually sent.\r
+ *\r
+ * \param usart  Pointer to an USART peripheral.\r
+ * \param c  Character to send\r
+ */\r
+void USART_PutChar( Usart *usart, uint8_t c)\r
+{\r
+    /* Wait for the transmitter to be ready*/\r
+    while ((usart->US_CSR & US_CSR_TXEMPTY) == 0);\r
+\r
+    /* Send character*/\r
+    usart->US_THR = c;\r
+\r
+    /* Wait for the transfer to complete*/\r
+    while ((usart->US_CSR & US_CSR_TXEMPTY) == 0);\r
+}\r
+\r
+/**\r
+ * \brief   Return 1 if a character can be read in USART\r
+ * \param usart  Pointer to an USART peripheral.\r
+ */\r
+uint32_t USART_IsRxReady(Usart *usart)\r
+{\r
+    return (usart->US_CSR & US_CSR_RXRDY);\r
+}\r
+\r
+/**\r
+ * \brief   Get present status\r
+ * \param usart  Pointer to an USART peripheral.\r
+ */\r
+uint32_t USART_GetStatus(Usart *usart)\r
+{\r
+    return usart->US_CSR;\r
+}\r
+\r
+/**\r
+ * \brief   Enable interrupt\r
+ * \param usart  Pointer to an USART peripheral.\r
+ * \param mode  Interrupt mode.\r
+ */\r
+void USART_EnableIt(Usart *usart,uint32_t mode)\r
+{\r
+    usart->US_IER = mode;\r
+}\r
+\r
+/**\r
+ * \brief   Disable interrupt\r
+ * \param usart  Pointer to an USART peripheral.\r
+ * \param mode  Interrupt mode.\r
+ */\r
+void USART_DisableIt(Usart *usart,uint32_t mode)\r
+{\r
+    usart->US_IDR = mode;\r
+}\r
+\r
+/**\r
+ * \brief   Return interrupt mask\r
+ * \param usart  Pointer to an USART peripheral.\r
+ */\r
+uint32_t USART_GetItMask(Usart *usart)\r
+{\r
+    return usart->US_IMR;\r
+}\r
+\r
+/**\r
+ * \brief  Reads and returns a character from the USART.\r
+ *\r
+ * \note This function is synchronous (i.e. uses polling).\r
+ * \param usart  Pointer to an USART peripheral.\r
+ * \return Character received.\r
+ */\r
+uint8_t USART_GetChar(Usart *usart)\r
+{\r
+    while ((usart->US_CSR & US_CSR_RXRDY) == 0);\r
+    return usart->US_RHR;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/wdt.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/wdt.c
new file mode 100644 (file)
index 0000000..fdf50b3
--- /dev/null
@@ -0,0 +1,140 @@
+/* ----------------------------------------------------------------------------\r
+ *        SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Watchdog Timer (WDT) controller.\r
+ *\r
+ */\r
+\r
+/** \addtogroup wdt_module Working with WDT\r
+ * The WDT driver provides the interface to configure and use the WDT\r
+ * peripheral.\r
+ *\r
+ * The WDT can be used to prevent system lock-up if the software becomes\r
+ * trapped in a deadlock. It can generate a general reset or a processor\r
+ * reset only. It is clocked by slow clock divided by 128.\r
+ *\r
+ * The WDT is running at reset with 16 seconds watchdog period (slow clock at 32.768 kHz)\r
+ * and external reset generation enabled. The user must either disable it or\r
+ * reprogram it to meet the application requires.\r
+ *\r
+ * To use the WDT, the user could follow these few steps:\r
+ * <ul>\r
+ * <li>Enable watchdog with given mode using \ref WDT_Enable().\r
+ * <li>Restart the watchdog using \ref WDT_Restart() within the watchdog period.\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the WDT section of the\r
+ * Datasheet.\r
+ *\r
+ * \note\r
+ * The Watchdog Mode Register (WDT_MR) can be written only once.\n\r
+ *\r
+ * Related files :\n\r
+ * \ref wdt.c\n\r
+ * \ref wdt.h.\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+/*---------------------------------------------------------------------------\r
+ *        Headers\r
+ *---------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+/**\r
+ * \brief Enable watchdog with given mode.\r
+ *\r
+ * \note The Watchdog Mode Register (WDT_MR) can be written only once.\r
+ * Only a processor reset resets it.\r
+ *\r
+ * \param dwMode   WDT mode to be set\r
+ */\r
+extern void WDT_Enable( Wdt* pWDT, uint32_t dwMode )\r
+{\r
+    pWDT->WDT_MR = dwMode ;\r
+}\r
+\r
+/**\r
+ * \brief Disable watchdog.\r
+ *\r
+ * \note The Watchdog Mode Register (WDT_MR) can be written only once.\r
+ * Only a processor reset resets it.\r
+ */\r
+extern void WDT_Disable( Wdt* pWDT )\r
+{\r
+    pWDT->WDT_MR = WDT_MR_WDDIS;\r
+}\r
+\r
+/**\r
+ * \brief Watchdog restart.\r
+ */\r
+extern void WDT_Restart( Wdt* pWDT )\r
+{\r
+    pWDT->WDT_CR = 0xA5000001;\r
+}\r
+\r
+/**\r
+ * \brief Watchdog get status.\r
+ */\r
+extern uint32_t WDT_GetStatus( Wdt* pWDT )\r
+{\r
+    return (pWDT->WDT_SR & 0x3) ;\r
+}\r
+\r
+/**\r
+ * \brief Watchdog get status.\r
+ */\r
+extern uint32_t WDT_GetCounterValue( Wdt* pWDT )\r
+{\r
+    return (pWDT->WDT_MR & WDT_MR_WDV_Msk) ;\r
+}\r
+\r
+/**\r
+ * \brief Watchdog get period.\r
+ *\r
+ * \param dwMs   desired watchdog period in millisecond.\r
+ */\r
+extern uint32_t WDT_GetPeriod( uint32_t dwMs )\r
+{\r
+    if ( (dwMs < 4) || (dwMs > 16000) )\r
+    {\r
+        return 0 ;\r
+    }\r
+    return ((dwMs << 8) / 1000) ;\r
+}\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/xdmac.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/source/xdmac.c
new file mode 100644 (file)
index 0000000..da1e44a
--- /dev/null
@@ -0,0 +1,362 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of xDMA controller (XDMAC).\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+\r
+#include <stdint.h>\r
+#include <assert.h>\r
+/** \addtogroup dmac_functions XDMAC Functions\r
+ *@{\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+uint32_t XDMAC_GetType( Xdmac *pXdmac)\r
+{\r
+    assert(pXdmac);\r
+    return pXdmac->XDMAC_GTYPE;\r
+}\r
+\r
+uint32_t XDMAC_GetConfig( Xdmac *pXdmac)\r
+{\r
+    assert(pXdmac);\r
+    return pXdmac->XDMAC_GCFG;\r
+}\r
+\r
+uint32_t XDMAC_GetArbiter( Xdmac *pXdmac)\r
+{\r
+    assert(pXdmac);\r
+    return pXdmac->XDMAC_GWAC;\r
+}\r
+\r
+/**\r
+ * \brief Enables XDMAC global interrupt.\r
+ *\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ * \param dwInteruptMask IT to be enabled.\r
+ */\r
+void XDMAC_EnableGIt (Xdmac *pXdmac, uint32_t dwInteruptMask )\r
+{\r
+    assert(pXdmac);\r
+    pXdmac->XDMAC_GIE = dwInteruptMask;\r
+}\r
+\r
+/**\r
+ * \brief Disables XDMAC global interrupt\r
+ *\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ * \param dwInteruptMask IT to be enabled\r
+ */\r
+void XDMAC_DisableGIt (Xdmac *pXdmac, uint32_t dwInteruptMask )\r
+{\r
+    assert(pXdmac);\r
+    pXdmac->XDMAC_GID = dwInteruptMask;\r
+}\r
+\r
+uint32_t XDMAC_GetGItMask( Xdmac *pXdmac )\r
+{\r
+    assert(pXdmac);\r
+    return (pXdmac->XDMAC_GIM);\r
+}\r
+\r
+uint32_t XDMAC_GetGIsr( Xdmac *pXdmac )\r
+{\r
+    assert(pXdmac);\r
+    return (pXdmac->XDMAC_GIS);\r
+}\r
+\r
+uint32_t XDMAC_GetMaskedGIsr( Xdmac *pXdmac )\r
+{\r
+    uint32_t _dwStatus;\r
+    assert(pXdmac);\r
+    _dwStatus = pXdmac->XDMAC_GIS;\r
+    _dwStatus &= pXdmac->XDMAC_GIM;\r
+    return _dwStatus;\r
+}\r
+\r
+/**\r
+ * \brief enables the relevant channel of given XDMAC.\r
+ *\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ * \param channel Particular channel number.\r
+ */\r
+void XDMAC_EnableChannel( Xdmac *pXdmac, uint8_t channel )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GE |= XDMAC_GE_EN0 << channel;\r
+}\r
+\r
+/**\r
+ * \brief enables the relevant channels of given XDMAC.\r
+ *\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ * \param bmChannels Channels bitmap.\r
+ */\r
+void XDMAC_EnableChannels( Xdmac *pXdmac, uint8_t bmChannels )\r
+{\r
+    assert(pXdmac);\r
+    pXdmac->XDMAC_GE = bmChannels;\r
+}\r
+\r
+/**\r
+ * \brief Disables the relevant channel of given XDMAC.\r
+ *\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ * \param channel Particular channel number.\r
+ */\r
+void XDMAC_DisableChannel( Xdmac *pXdmac, uint8_t channel )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GD |= XDMAC_GD_DI0 << channel;\r
+}\r
+\r
+/**\r
+ * \brief Disables the relevant channels of given XDMAC.\r
+ *\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ * \param bmChannels Channels bitmap.\r
+ */\r
+void XDMAC_DisableChannels( Xdmac *pXdmac, uint8_t bmChannels )\r
+{\r
+    assert(pXdmac);\r
+    pXdmac->XDMAC_GD = bmChannels;\r
+}\r
+\r
+\r
+/**\r
+ * \brief Get Global channel status of given XDMAC.\r
+ * \Note: When set to 1, this bit indicates that the channel x is enabled. If a channel disable request is issued, this bit remains asserted\r
+    until pending transaction is completed.\r
+ * \param pXdmac Pointer to the XDMAC peripheral.\r
+ */\r
+uint32_t XDMAC_GetGlobalChStatus(Xdmac *pXdmac)\r
+{\r
+\r
+    assert(pXdmac);\r
+    return pXdmac->XDMAC_GS;\r
+}\r
+\r
+void XDMAC_SuspendReadChannel( Xdmac *pXdmac, uint8_t channel )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GRS |= XDMAC_GRS_RS0 << channel;\r
+}\r
+\r
+\r
+void XDMAC_SuspendWriteChannel( Xdmac *pXdmac, uint8_t channel )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GWS |= XDMAC_GWS_WS0 << channel;\r
+}\r
+\r
+void XDMAC_SuspendReadWriteChannel( Xdmac *pXdmac, uint8_t channel )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GRWS |= XDMAC_GRWS_RWS0 << channel;\r
+}\r
+\r
+void XDMAC_ResumeReadWriteChannel( Xdmac *pXdmac, uint8_t channel )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GRWR |= XDMAC_GRWR_RWR0 << channel;\r
+}\r
+\r
+void XDMAC_SoftwareTransferReq(Xdmac *pXdmac, uint8_t channel)\r
+{\r
+\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GSWR |= (XDMAC_GSWR_SWREQ0 << channel);\r
+}\r
+\r
+uint32_t XDMAC_GetSoftwareTransferStatus(Xdmac *pXdmac)\r
+{\r
+\r
+    assert(pXdmac);\r
+    return pXdmac->XDMAC_GSWS;\r
+}\r
+\r
+void XDMAC_SoftwareFlushReq(Xdmac *pXdmac, uint8_t channel)\r
+{\r
+\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_GSWF |= XDMAC_GSWF_SWF0 << channel;\r
+}\r
+\r
+void XDMAC_EnableChannelIt (Xdmac *pXdmac, uint8_t channel, uint32_t dwInteruptMask )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CIE = dwInteruptMask;\r
+}\r
+\r
+void XDMAC_DisableChannelIt (Xdmac *pXdmac, uint8_t channel, uint32_t dwInteruptMask )\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CID = dwInteruptMask;\r
+}\r
+\r
+uint32_t XDMAC_GetChannelItMask (Xdmac *pXdmac, uint8_t channel)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    return pXdmac->XDMAC_CHID[channel].XDMAC_CIM;\r
+}\r
+\r
+uint32_t XDMAC_GetChannelIsr (Xdmac *pXdmac, uint8_t channel)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    return pXdmac->XDMAC_CHID[channel].XDMAC_CIS;\r
+}\r
+\r
+uint32_t XDMAC_GetMaskChannelIsr (Xdmac *pXdmac, uint8_t channel)\r
+{\r
+    uint32_t status;\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    status = pXdmac->XDMAC_CHID[channel].XDMAC_CIS;\r
+    status &= pXdmac->XDMAC_CHID[channel].XDMAC_CIM;\r
+\r
+    return status;\r
+}\r
+\r
+void XDMAC_SetSourceAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CSA = addr;\r
+}\r
+\r
+void XDMAC_SetDestinationAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CDA = addr;\r
+}\r
+\r
+void XDMAC_SetDescriptorAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr, uint32_t ndaif)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CNDA =  ( addr & 0xFFFFFFFC ) | ndaif;\r
+}\r
+\r
+void XDMAC_SetDescriptorControl(Xdmac *pXdmac, uint8_t channel, uint32_t config)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CNDC = config;\r
+}\r
+\r
+void XDMAC_SetMicroblockControl(Xdmac *pXdmac, uint8_t channel, uint32_t ublen)\r
+{\r
+\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CUBC = ublen;\r
+}\r
+\r
+void XDMAC_SetBlockControl(Xdmac *pXdmac, uint8_t channel, uint32_t blen)\r
+{\r
+\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CBC = blen;\r
+}\r
+\r
+void XDMAC_SetChannelConfig(Xdmac *pXdmac, uint8_t channel, uint32_t config)\r
+{\r
+\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CC = config;\r
+}\r
+\r
+uint32_t XDMAC_GetChannelConfig(Xdmac *pXdmac, uint8_t channel)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    return pXdmac->XDMAC_CHID[channel].XDMAC_CC;\r
+}\r
+\r
+void XDMAC_SetDataStride_MemPattern(Xdmac *pXdmac, uint8_t channel, uint32_t dds_msp)\r
+{\r
+\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CDS_MSP = dds_msp;\r
+}\r
+\r
+void XDMAC_SetSourceMicroBlockStride(Xdmac *pXdmac, uint8_t channel, uint32_t subs)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CSUS = subs;\r
+}\r
+\r
+void XDMAC_SetDestinationMicroBlockStride(Xdmac *pXdmac, uint8_t channel, uint32_t dubs)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    pXdmac->XDMAC_CHID[channel].XDMAC_CDUS = dubs;\r
+}\r
+\r
+\r
+uint32_t XDMAC_GetChDestinationAddr(Xdmac *pXdmac, uint8_t channel)\r
+{\r
+    assert(pXdmac);\r
+    assert(channel < XDMAC_CHANNEL_NUM);\r
+    return pXdmac->XDMAC_CHID[channel].XDMAC_CDA;\r
+}\r
+\r
+/**@}*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/matrix.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/matrix.c
new file mode 100644 (file)
index 0000000..d581a97
--- /dev/null
@@ -0,0 +1,803 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+#include "chip.h"\r
+\r
+#define MATRIX_AXIMX   1\r
+#define MATRIX_H64MX   2\r
+#define MATRIX_H32MX   3\r
+\r
+#define SECURITY_TYPE_AS       1\r
+#define SECURITY_TYPE_NS       2\r
+#define        SECURITY_TYPE_PS        3\r
+\r
+struct peri_security {\r
+       unsigned int    peri_id;\r
+       unsigned int    matrix;\r
+       unsigned int    security_type;\r
+};\r
+\r
+static const struct peri_security peri_security_array[] = {\r
+       /* SAIC */\r
+       {\r
+               .peri_id = ID_FIQ,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* SYS */\r
+       {\r
+               .peri_id = ID_SYS,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* ARM */\r
+       {\r
+               .peri_id = ID_ARM,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* PIT */\r
+       {\r
+               .peri_id = ID_PIT,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* WDT */\r
+       {\r
+               .peri_id = ID_WDT,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* PIOD */\r
+       {\r
+               .peri_id = ID_PIOD,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* USART0 */\r
+       {\r
+               .peri_id = ID_USART0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* USART1 */\r
+       {\r
+               .peri_id = ID_USART1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* XDMAC0 */\r
+       {\r
+               .peri_id = ID_XDMAC0,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* ICM */\r
+       {\r
+               .peri_id = ID_ICM,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* PKCC */\r
+       {\r
+               .peri_id = ID_PKCC,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },      \r
+       /* AES */\r
+       {\r
+               .peri_id = ID_AES,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* AESB */\r
+       {\r
+               .peri_id = ID_AESB,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* TDES */\r
+       {\r
+               .peri_id = ID_TDES,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* SHA */\r
+       {\r
+               .peri_id = ID_SHA,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* MPDDRC */\r
+       {\r
+               .peri_id = ID_MPDDRC,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* MATRIX1 */\r
+       {\r
+               .peri_id = ID_MATRIX1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* MATRIX0 */\r
+       {\r
+               .peri_id = ID_MATRIX0,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* VDEC */\r
+       {\r
+               .peri_id = ID_VDEC,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* HSMC */\r
+       {\r
+               .peri_id = ID_HSMC,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* PIOA*/\r
+       {\r
+               .peri_id = ID_PIOA,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* PIOB*/\r
+       {\r
+               .peri_id = ID_PIOB,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* PIOC*/\r
+       {\r
+               .peri_id = ID_PIOC,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* PIOE*/\r
+       {\r
+               .peri_id = ID_PIOE,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* UART0 */\r
+       {\r
+               .peri_id = ID_UART0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* UART1 */\r
+       {\r
+               .peri_id = ID_UART1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* USART2 */\r
+       {\r
+               .peri_id = ID_USART2,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* USART3 */\r
+       {\r
+               .peri_id = ID_USART3,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* USART4 */\r
+       {\r
+               .peri_id = ID_USART4,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TWI0 */\r
+       {\r
+               .peri_id = ID_TWI0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TWI1 */\r
+       {\r
+               .peri_id = ID_TWI1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TWI2 */\r
+       {\r
+               .peri_id = ID_TWI2,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* HSMCI0 */\r
+       {\r
+               .peri_id = ID_HSMCI0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* HSMCI1 */\r
+       {\r
+               .peri_id = ID_HSMCI1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* SPI0 */\r
+       {\r
+               .peri_id = ID_SPI0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* SPI1 */\r
+       {\r
+               .peri_id = ID_SPI1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* SPI2 */\r
+       {\r
+               .peri_id = ID_SPI2,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TC0 */\r
+       {\r
+               .peri_id = ID_TC0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TC1 */\r
+       {\r
+               .peri_id = ID_TC1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TC2 */\r
+       {\r
+               .peri_id = ID_TC2,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* PWM */\r
+       {\r
+               .peri_id = ID_PWM,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* ADC */\r
+       {\r
+               .peri_id = ID_ADC,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* DBGU */\r
+       {\r
+               .peri_id = ID_DBGU,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* UHPHS */\r
+       {\r
+               .peri_id = ID_UHPHS,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* UDPHS */\r
+       {\r
+               .peri_id = ID_UDPHS,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* SSC0 */\r
+       {\r
+               .peri_id = ID_SSC0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* SSC1 */\r
+       {\r
+               .peri_id = ID_SSC1,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* XDMAC1 */\r
+       {\r
+               .peri_id = ID_XDMAC1,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_NS,\r
+       },\r
+       /* LCDC */\r
+       {\r
+               .peri_id = ID_LCDC,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* ISI */\r
+       {\r
+               .peri_id = ID_ISI,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TRNG */\r
+       {\r
+               .peri_id = ID_TRNG,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* GMAC */\r
+       {\r
+               .peri_id = ID_GMAC0,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* IRQ */\r
+       {\r
+               .peri_id = ID_IRQ,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_NS,\r
+       },\r
+       /* SFC */\r
+       {\r
+               .peri_id = ID_SFC,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* SECURAM */\r
+       {\r
+               .peri_id = ID_SECURAM,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* SMD */\r
+       {\r
+               .peri_id = ID_SMD,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* TWI3 */\r
+       {\r
+               .peri_id = ID_TWI3,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_PS,\r
+       },\r
+       /* CATB */\r
+       {\r
+               .peri_id = ID_CATB,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* SFR */\r
+       {\r
+               .peri_id = ID_SFR,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* AIC */\r
+       {\r
+               .peri_id = ID_AIC,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_NS,\r
+       },\r
+       /* SAIC */\r
+       {\r
+               .peri_id = ID_SAIC,\r
+               .matrix = MATRIX_H32MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+       /* L2CC */\r
+       {\r
+               .peri_id = ID_L2CC,\r
+               .matrix = MATRIX_H64MX,\r
+               .security_type = SECURITY_TYPE_AS,\r
+       },\r
+};\r
+\r
+void matrix_configure_slave_security(Matrix *matrix_base,\r
+                               unsigned int slave,\r
+                               unsigned int srtop_setting,\r
+                               unsigned int srsplit_setting,\r
+                               unsigned int ssr_setting)\r
+{\r
+        matrix_base->MATRIX_SSR[slave] = ssr_setting;\r
+       matrix_base->MATRIX_SRTSR[slave] = srtop_setting;\r
+       matrix_base->MATRIX_SASSR[slave] = srsplit_setting;\r
+}\r
+\r
+\r
+\r
+static struct peri_security *get_peri_security(unsigned int peri_id)\r
+{\r
+       unsigned int i;\r
+\r
+       for (i = 0; i < ARRAY_SIZE(peri_security_array); i++) {\r
+               if (peri_id == peri_security_array[i].peri_id)\r
+                       break;\r
+       }\r
+\r
+       return ((i == ARRAY_SIZE(peri_security_array))) ?\r
+                       NULL : (struct peri_security *)&peri_security_array[i];\r
+}\r
+\r
+static int matrix_set_peri_security(unsigned int matrix, unsigned peri_id)\r
+{\r
+       Matrix *base;\r
+       uint32_t spselr;\r
+       uint32_t idx;\r
+       uint32_t bit;\r
+\r
+       idx = peri_id / 32;\r
+       if (idx > 3)\r
+               return -1;\r
+\r
+       bit = (0x01 << (peri_id % 32));\r
+       if (matrix == MATRIX_H32MX)\r
+               base = MATRIX1;\r
+       else if (matrix == MATRIX_H64MX)\r
+               base = MATRIX0;\r
+       else\r
+               return -1;\r
+\r
+       spselr = base->MATRIX_SPSELR[idx];\r
+       spselr |= bit;\r
+       base->MATRIX_SPSELR[idx] =  spselr;\r
+\r
+       return 0;\r
+}\r
+\r
+int matrix_configure_peri_security(unsigned int *peri_id_array,\r
+                                       unsigned int size)\r
+{\r
+       unsigned int i;\r
+       unsigned int *peri_id_p;\r
+       unsigned int matrix;\r
+       unsigned int peri_id;\r
+       struct peri_security *periperal_sec;\r
+       int ret;\r
+\r
+       if ((peri_id_array == NULL) || (size == 0))\r
+               return -1;\r
+\r
+       peri_id_p = peri_id_array;\r
+       for (i = 0; i < size; i++) {\r
+               periperal_sec = get_peri_security(*peri_id_p);\r
+               if (periperal_sec == NULL)\r
+                       return -1;\r
+\r
+               if (periperal_sec->security_type != SECURITY_TYPE_PS)\r
+                       return -1;\r
+\r
+               matrix = periperal_sec->matrix;\r
+               peri_id = *peri_id_p;\r
+               ret = matrix_set_peri_security(matrix, peri_id);\r
+               if (ret)\r
+                       return -1;\r
+\r
+               peri_id_p++;\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+/*\r
+ * is_peripheral_secure - tell if the peripheral is in secure mode\r
+ * @periph_id: the peripheral id that is checked\r
+ *\r
+ * Check security of a particular peripheral by providing its ID.\r
+ * Note that a wrong preripheral ID leads to the "true" return code.\r
+ */\r
+int is_peripheral_secure(unsigned int periph_id)\r
+{\r
+       struct peri_security *periperal_sec;\r
+       uint32_t matrix;\r
+       Matrix *base;\r
+       uint32_t mask;\r
+        \r
+       if ((periph_id > ID_FIQ) && (periph_id < ID_PERIPH_COUNT)) {\r
+               /* special cases here */\r
+               if ((periph_id == ID_IRQ)\r
+                || (periph_id == ID_AIC)\r
+                || (periph_id == ID_XDMAC1))\r
+                       return 0;\r
+\r
+               periperal_sec = get_peri_security(periph_id);\r
+               if (periperal_sec == NULL)\r
+                       return -1;\r
+\r
+               matrix = periperal_sec->matrix;\r
+               if (matrix == MATRIX_H32MX)\r
+                       base = MATRIX1;\r
+               else if (matrix == MATRIX_H64MX)\r
+                       base = MATRIX0;\r
+               else\r
+                       return -1;\r
+\r
+               mask = 1 << (periph_id % 32);\r
+               if (base->MATRIX_SPSELR[periph_id / 32] & mask)\r
+                       return 0;\r
+\r
+       }\r
+       return 1;\r
+}\r
+\r
+int is_sys_clk_secure(unsigned int sys_mask)\r
+{\r
+       unsigned int periph_id = sys_mask_to_per_id(sys_mask);\r
+\r
+       return is_peripheral_secure(periph_id);\r
+}\r
+\r
+int is_usb_hs_secure(void)\r
+{\r
+       return (is_peripheral_secure(ID_UHPHS)\r
+               || is_peripheral_secure(ID_UDPHS));\r
+}\r
+\r
+int is_usb_host_secure(void)\r
+{\r
+       return is_peripheral_secure(ID_UHPHS);\r
+}\r
+\r
+int is_switching_clock_forbiden(unsigned int periph_id, unsigned int is_on, unsigned int *silent)\r
+{\r
+       /* disable console clock : forbiden */\r
+       if ((periph_id == ID_USART3) && (is_on == 0)) {\r
+               /* keep it silent */\r
+               *silent = 1;\r
+               return 1;\r
+       } else {\r
+               return 0;\r
+       }\r
+}\r
+\r
+\r
+static int matrix_configure_slave(void)\r
+{\r
+       unsigned int ddr_port;\r
+       unsigned int ssr_setting, sasplit_setting, srtop_setting;\r
+\r
+       /*\r
+        * Matrix 0 (H64MX)\r
+        */\r
+\r
+       /* 0: Bridge from H64MX to AXIMX */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX0,\r
+                                       H64MX_SLAVE_BRIDGE_TO_AXIMX,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 1: H64MX Peripheral Bridge: Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX0,\r
+                                       H64MX_SLAVE_PERI_BRIDGE,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 2: Video Decoder 128K: Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX0,\r
+                                       H64MX_SLAVE_VIDEO_DECODER,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 4 ~ 10 DDR2 Port1 ~ 7: Non-Secure */\r
+       srtop_setting = MATRIX_SRTOP(0, MATRIX_SRTOP_VALUE_128M);\r
+       sasplit_setting = (MATRIX_SASPLIT(0, MATRIX_SASPLIT_VALUE_128M)\r
+                               | MATRIX_SASPLIT(1, MATRIX_SASPLIT_VALUE_128M)\r
+                               | MATRIX_SASPLIT(2, MATRIX_SASPLIT_VALUE_128M)\r
+                               | MATRIX_SASPLIT(3, MATRIX_SASPLIT_VALUE_128M));\r
+       ssr_setting = (MATRIX_LANSECH_NS(0)\r
+                       | MATRIX_LANSECH_NS(1)\r
+                       | MATRIX_LANSECH_NS(2)\r
+                       | MATRIX_LANSECH_NS(3)\r
+                       | MATRIX_RDNSECH_NS(0)\r
+                       | MATRIX_RDNSECH_NS(1)\r
+                       | MATRIX_RDNSECH_NS(2)\r
+                       | MATRIX_RDNSECH_NS(3)\r
+                       | MATRIX_WRNSECH_NS(0)\r
+                       | MATRIX_WRNSECH_NS(1)\r
+                       | MATRIX_WRNSECH_NS(2)\r
+                       | MATRIX_WRNSECH_NS(3));\r
+       /* DDR port 0 not used from NWd */\r
+       for (ddr_port = 1; ddr_port < 8; ddr_port++) {\r
+               matrix_configure_slave_security(MATRIX0,\r
+                                       (H64MX_SLAVE_DDR2_PORT_0 + ddr_port),\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+       }\r
+\r
+       /* 11: Internal SRAM 128K\r
+        * TOP0 is set to 128K\r
+        * SPLIT0 is set to 64K\r
+        * LANSECH0 is set to 0, the low area of region 0 is the Securable one\r
+        * RDNSECH0 is set to 0, region 0 Securable area is secured for reads.\r
+        * WRNSECH0 is set to 0, region 0 Securable area is secured for writes\r
+        */\r
+       srtop_setting = MATRIX_SRTOP(0, MATRIX_SRTOP_VALUE_128K);\r
+       sasplit_setting = MATRIX_SASPLIT(0, MATRIX_SASPLIT_VALUE_64K);\r
+       ssr_setting = (MATRIX_LANSECH_S(0)\r
+                       | MATRIX_RDNSECH_S(0)\r
+                       | MATRIX_WRNSECH_S(0));\r
+       matrix_configure_slave_security(MATRIX0,\r
+                                       H64MX_SLAVE_INTERNAL_SRAM,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 12:  Bridge from H64MX to H32MX: Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX0,\r
+                                       H64MX_SLAVE_BRIDGE_TO_H32MX,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /*\r
+        * Matrix 1 (H32MX)\r
+        */\r
+\r
+       /* 0: Bridge from H32MX to H64MX */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_BRIDGE_TO_H64MX,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 1: H32MX Peripheral Bridge 0 */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_PERI_BRIDGE_0,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 2: H32MX Peripheral Bridge 1 */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_PERI_BRIDGE_1,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 3: External Bus Interface: Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_EXTERNAL_EBI,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 4: NFC SRAM (4K): Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_NFC_SRAM,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 5: DPHS RAM(1M), UHP OHCI (1M), UHP EHCI (1M): Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_USB,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+\r
+       /* 6: Soft Modem (1M): Non-Secure */\r
+       srtop_setting = 0xffffffff;\r
+       sasplit_setting = 0xffffffff;\r
+       ssr_setting = 0xffffffff;\r
+       matrix_configure_slave_security(MATRIX1,\r
+                                       H32MX_SMD,\r
+                                       srtop_setting,\r
+                                       sasplit_setting,\r
+                                       ssr_setting);\r
+       return 0;\r
+}\r
+\r
+static unsigned int security_ps_peri_id[] = {\r
+       ID_VDEC,\r
+       ID_PIOA,\r
+       ID_PIOB,\r
+       ID_PIOC,\r
+       ID_PIOE,\r
+       ID_USART2,\r
+       ID_USART3,\r
+       ID_USART4,\r
+       ID_TWI0,\r
+       ID_TWI2,\r
+       ID_HSMCI0,\r
+       ID_HSMCI1,\r
+       ID_TC0,\r
+       ID_TC1,\r
+       ID_UHPHS,\r
+       ID_UDPHS,\r
+       ID_LCDC,\r
+       ID_GMAC0,\r
+       ID_SPI0,\r
+       ID_SPI1,\r
+       ID_SMD,\r
+};\r
+\r
+static int matrix_config_periheral(void)\r
+{\r
+       unsigned int *peri_id = security_ps_peri_id;\r
+       unsigned int array_size = sizeof(security_ps_peri_id) / sizeof(unsigned int);\r
+       int ret;\r
+\r
+       ret = matrix_configure_peri_security(peri_id, array_size);\r
+       if (ret)\r
+               return -1;\r
+\r
+       return 0;\r
+}\r
+\r
+int matrix_init(void)\r
+{\r
+       int ret;\r
+\r
+    /* Disable write protection */\r
+    MATRIX0->MATRIX_WPMR = MATRIX_WPMR_WPKEY(MATRIX_KEY_VAL);\r
+    MATRIX1->MATRIX_WPMR = MATRIX_WPMR_WPKEY(MATRIX_KEY_VAL);\r
+\r
+       ret = matrix_configure_slave();\r
+       if (ret)\r
+               return -1;\r
+\r
+       ret = matrix_config_periheral();\r
+       if (ret)\r
+               return -1;\r
+\r
+       return 0;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon.h
new file mode 100644 (file)
index 0000000..a0e9683
--- /dev/null
@@ -0,0 +1,67 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+#ifndef __MON_H__\r
+#define __MON_H__\r
+\r
+\r
+#if defined(__ICCARM__)\r
+  #include <intrinsics.h>\r
+#endif\r
+   \r
+typedef struct {\r
+  unsigned int Mode_SPSR;\r
+  unsigned int Mode_SP;\r
+  unsigned int Mode_LR;\r
+} Mode_Regs;\r
+\r
+typedef struct\r
+{\r
+    unsigned int        r4;\r
+    unsigned int        r5;\r
+    unsigned int        r6;\r
+    unsigned int        r7;\r
+    unsigned int        r8;\r
+    unsigned int        r9;\r
+    unsigned int        r10;\r
+    unsigned int        r11;\r
+    unsigned int        r12;\r
+    Mode_Regs           Mon;\r
+    Mode_Regs           Svc;\r
+    Mode_Regs           Fiq;\r
+    Mode_Regs           Irq;\r
+    \r
+} WorldContext, *pWorldContext;\r
+   \r
+\r
+extern void monitor_init(void);\r
+extern void SecureMonitor_init(void);\r
+extern void nw_start(void);\r
+extern void InitMonitor(void);\r
+extern void SwitchToNormalWorld(void);\r
+extern void SwitchToSecureWorld(void);\r
+\r
+#endif\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_macros.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_macros.h
new file mode 100644 (file)
index 0000000..887501b
--- /dev/null
@@ -0,0 +1,111 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2012, Atmel Corporation\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+/*\r
+ *------------------------------------------------------------------------------\r
+ * MON_DATA_BASE area is used by the monitor to save and restore\r
+ * all resources affected by the context switching.\r
+ * - All general purpose ARM registers\r
+ * - Any coprocessor registers, such as NEON or VFP\r
+ *   (not needed in our case as we are not dealing with floating point in SWd)\r
+ * - Any world-dependant processor configuration state in CP15\r
+ *   (TODO: what does it cover?)\r
+ *\r
+ * Note: we consider that there is no IRQ nor FIQ management in SWd.\r
+ *\r
+ * r0-r7, r12 registers are considered as corruptbile\r
+ * r8-r11 and lr, sp and cpsr needs to be properly saved and restored\r
+ * NWd call to SWd function:\r
+ *      Save    -> r8-r11, svc_lr and svc_sp, cpsr\r
+ *      Restore -> svc_sp, and cpsr\r
+ * SWd return after completing service function execution:\r
+ *      Save    -> svc_lr, svc_sp, and cpsr\r
+ *      Restore -> r8-r11, svc_lr and svc_sp, cpsr\r
+ *------------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+\r
+#ifndef __MON_MACROS_H__\r
+#define __MON_MACROS_H__\r
+\r
+\r
+/*\r
+ * Secure Configuration Register\r
+ */\r
+\r
+#define NS_BIT                 0x01\r
+#define SCR_NW_BIT             0x25\r
+#define SCR_SW_BIT             0x22\r
+\r
+/*\r
+ *----------------------------------------------------------------------------\r
+ * Standard definitions of ARM processor mode bits\r
+ *----------------------------------------------------------------------------\r
+ */\r
+#define MODE_MSK         0x1F            // Bit mask for mode bits in CPSR\r
+#define ARM_MODE_ABT     0x17\r
+#define ARM_MODE_FIQ     0x11\r
+#define ARM_MODE_IRQ     0x12\r
+#define ARM_MODE_SVC     0x13\r
+#define ARM_MODE_MON     0x16\r
+#define ARM_MODE_SYS     0x1F\r
+#define ARM_MODE_UND     0x1B\r
+#define I_BIT            0x80\r
+#define F_BIT            0x40\r
+\r
+#define CHANGE_TO_SVC_MODE    asm volatile ("CPS   #0x13");\r
+#define CHANGE_TO_MON_MODE    asm volatile ("CPS   #0x16");\r
+\r
+\r
+#define INITIAL_NWD_STATE      0x1D3\r
+   \r
+\r
+\r
+#define Struct_size            0x54\r
+   \r
+/* Stacks configuration */\r
+#define STACK_SIZE             0x1FF\r
+#define MON_DATA_BASE_SIZE     0x100\r
+\r
+/* Stacks are descending */\r
+#if defined (ddram)   \r
+    #define MON_DATA_BASE       0x23FFFE00\r
+    #define MON_DATA_END        0x24000000\r
+#elif defined (sram)   \r
+   #define MON_DATA_BASE        0x21FE00\r
+   #define MON_DATA_END         0x220000   \r
+#else\r
+    #define MON_DATA_BASE       0x23FFFE00\r
+    #define MON_DATA_END        0x24000000\r
+#endif\r
+\r
+\r
+#define MON_DATA_SIZE           ((MON_DATA_END - MON_DATA_BASE) >> 2)\r
+\r
+#endif /* #ifndef __MON_MACROS_H__ */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_vectors_gcc.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_vectors_gcc.s
new file mode 100644 (file)
index 0000000..7209896
--- /dev/null
@@ -0,0 +1,214 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+\r
+                               SECTION MSTACK:DATA:NOROOT(3)\r
+                SECTION CSTACK:DATA:NOROOT(3)\r
+#include "mon_macros.h"\r
+\r
+#define __ASSEMBLY__\r
+\r
+\r
+AIC         DEFINE 0xFC06E000\r
+AIC_IVR     DEFINE 0x10\r
+AIC_EOICR   DEFINE 0x38\r
+SAIC        DEFINE   0xFC068400\r
+AIC_FVR     DEFINE   0x14\r
+\r
+\r
+        SECTION monitor_vector:CODE:NOROOT(2)\r
+        PUBLIC monitor_vectors\r
+        PUBLIC SM_Handler\r
+        EXTERN NWVector\r
+        EXTERN SwitchToNormalWorld\r
+        EXTERN SwitchToSecureWorld\r
+        EXTERN TZ_FIQ_Handler\r
+        EXTERN TZ_IRQ_Handler\r
+        EXTERN TzResetVector\r
+        ARM\r
+\r
+/*\r
+ *-----------------------------------------------------------------------------\r
+ * Monitor exception vector table\r
+ *      Most of these exceptions does not do anything other than branching to\r
+ *      itself except smc vector. The SMC vector jumps to smc handler which\r
+ *      takes care of proper switching from NWd to SWd and from SWd to NWd.\r
+ * -----------------------------------------------------------------------------\r
+ */\r
+monitor_vectors:\r
+       B       .                       ; Reset: not used by Monitor \r
+       B       .                       ; Undef: not used by Monitor\r
+       LDR     pc, =SM_Handler\r
+       B       .                       ; Prefetch: can be used by Monitor \r
+       B       .                       ; Data abort: can be used by Monitor \r
+       B       .                       ; RESERVED */\r
+       B       .                       ; IRQ: can be used by Monitor \r
+       B       .                       ; FIQ - can be used by Monitor \r
+\r
+\r
+\r
+        SECTION monitor:CODE:NOROOT(2)\r
+        SECTION MSTACK:DATA:NOROOT(3)\r
+\r
+        \r
+        \r
+SM_Handler:\r
+\r
+    CPSID         IF\r
+    PUSH   {r0-r3}                       ; r0-r3 contain args to be passed between worlds\r
+                                         ; Temporarily stack, so can be used as scratch regs\r
+\r
+    ; Which world have we come from\r
+    ; ------------------------------\r
+    MRC     p15, 0, r0, c1, c1, 0        ; Read Secure Configuration Register data\r
+    TST     r0, #NS_BIT                  ; Is the NS bit set?\r
+    BIC     r0, r0, #NS_BIT              ; Make sure the SCR.NS bit is now clear\r
+//    LDRNE   r0, =SCR_SW_BIT\r
+    MCR     p15, 0, r0, c1, c1, 0        ; Write Secure Configuration Register data\r
+    ISB\r
+    \r
+    LDREQ   r2, =MON_DATA_BASE              \r
+    LDRNE   r3, =MON_DATA_BASE \r
+    \r
+    ADDEQ   r3, r2, #Struct_size\r
+    ADDNE   r2, r3, #Struct_size\r
+\r
+    STM        r2!, {r4-r12}                   ; Save r4 to r12 registers of current world\r
+    LDM     r3!, {r4-r12}               ; Restore r4 to r12 registers of world we need to switch\r
+    \r
+    ; Save current world MON_LR MON_SP and MON_SPSR and restore for other world\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1\r
+    \r
+    ; Save current world SVC_LR, SVC_SP and SVC_SPSR and restore for other world\r
+    CPS            #ARM_MODE_SVC\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1   \r
+    \r
+    ; Save current world FIQ_LR FIQ_SP and FIQ_SPSR and restore for other world\r
+    CPS            #ARM_MODE_FIQ\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1   \r
+    \r
+    ; Save current world IRQ_LR IRQ_SP and IRQ_SPSR and restore for other world\r
+    CPS            #ARM_MODE_IRQ\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1   \r
+\r
+    ; Change to SVC mode before going to MON mode\r
+    CPS            #ARM_MODE_SVC\r
+    CPS            #ARM_MODE_MON    \r
+   \r
+    CLREX                               ; Clear local monitor\r
+\r
+    LDREQ     r0, =SCR_NW_BIT           ; set FIQ to moitor exception(optional) and NS bit to 1 if comming from secure\r
+    MCREQ     p15, 0, r0, c1, c1, 0     ; Write Secure Configuration Register data  \r
+    ISB\r
+    \r
+    /* set the monitor vector base */\r
+    LDREQ     r2, =NWVector\r
+    MCREQ     p15, 0, r2, c12, c0, 0    ; non secure copy of VBAR\r
+    \r
+    BNE       secureworld  \r
+  \r
+nonsecureworld:  \r
+    CPSIE     IF\r
+\r
+secureworld:  \r
+    CPSIE     F\r
+  \r
+    ; Now restore args (r0-r3)\r
+    ; -------------------------\r
+    POP     {r0-r3}\r
+\r
+    \r
+    ; exception return\r
+    ; -------------------------\r
+    MOVS    pc, lr\r
+  \r
+  \r
+  \r
+//***************************************************//\r
+; Monitor initialization code\r
+//***************************************************//\r
+\r
+        SECTION monitor:CODE:NOROOT(2)\r
+        SECTION MSTACK:DATA:NOROOT(3)\r
+        \r
+        PUBLIC SecureMonitor_init\r
+        EXTERN nw_start\r
+        EXTERN TzResetVector\r
+        \r
+        ARM\r
+\r
+SecureMonitor_init:\r
+        \r
+       \r
+       /* Switch to MON mode */\r
+       MRS     r4, cpsr\r
+       CPS     #ARM_MODE_MON           ; change back to SVC mode\r
+\r
+        /* set the monitor stack */\r
+       LDR     sp, =SFE(MSTACK)\r
+        BIC     sp,sp,#0x7                      ; Make sure SP is 8 aligned\r
+        \r
+        /* set the monitor vector base */\r
+       LDR     r2, =monitor_vectors            ; Update monitor exception vector table addr\r
+       MCR     p15, 0, r2, c12, c0, 1        \r
+\r
+        MSR     cpsr_c, r4                  ; change back to SVC mode\r
+        \r
+         /* set the monitor vector base */\r
+       LDR     r2, =TzResetVector              ; Update secure exception vector table addr\r
+       MCR     p15, 0, r2, c12, c0, 0\r
+        \r
+        // Load zero to context memory block\r
+        MOV     r3, #0\r
+        LDR     r0, =MON_DATA_SIZE\r
+        LDR     r1, =MON_DATA_BASE\r
+        MOV     r2, #0  \r
+        \r
+loop_init:        \r
+        CMP     r2, r0\r
+        STRNE   r3,[r1]\r
+        ADD     r1, r1, #4\r
+        ADD     r2, r2, #1\r
+        BNE     loop_init\r
+        \r
+        BX      lr       \r
+\r
+\r
+  END
\ No newline at end of file
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_vectors_iar.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/mon_vectors_iar.s
new file mode 100644 (file)
index 0000000..4c1f514
--- /dev/null
@@ -0,0 +1,214 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+\r
+               SECTION MSTACK:DATA:NOROOT(3)\r
+                SECTION CSTACK:DATA:NOROOT(3)\r
+#include "mon_macros.h"\r
+\r
+#define __ASSEMBLY__\r
+\r
+\r
+AIC         DEFINE 0xFC06E000\r
+AIC_IVR     DEFINE 0x10\r
+AIC_EOICR   DEFINE 0x38\r
+SAIC        DEFINE   0xFC068400\r
+AIC_FVR     DEFINE   0x14\r
+\r
+\r
+        SECTION monitor_vector:CODE:NOROOT(2)\r
+        PUBLIC monitor_vectors\r
+        PUBLIC SM_Handler\r
+        EXTERN NWVector\r
+        EXTERN SwitchToNormalWorld\r
+        EXTERN SwitchToSecureWorld\r
+        EXTERN TZ_FIQ_Handler\r
+        EXTERN TZ_IRQ_Handler\r
+        EXTERN TzResetVector\r
+        ARM\r
+\r
+/*\r
+ *-----------------------------------------------------------------------------\r
+ * Monitor exception vector table\r
+ *      Most of these exceptions does not do anything other than branching to\r
+ *      itself except smc vector. The SMC vector jumps to smc handler which\r
+ *      takes care of proper switching from NWd to SWd and from SWd to NWd.\r
+ * -----------------------------------------------------------------------------\r
+ */\r
+monitor_vectors:\r
+       B       .                       ; Reset: not used by Monitor \r
+       B       .                       ; Undef: not used by Monitor\r
+       LDR     pc, =SM_Handler\r
+       B       .                       ; Prefetch: can be used by Monitor \r
+       B       .                       ; Data abort: can be used by Monitor \r
+       B       .                       ; RESERVED */\r
+       B       .                       ; IRQ: can be used by Monitor \r
+       B       .                       ; FIQ - can be used by Monitor \r
+\r
+\r
+\r
+        SECTION monitor:CODE:NOROOT(2)\r
+        SECTION MSTACK:DATA:NOROOT(3)\r
+\r
+        \r
+        \r
+SM_Handler:\r
+\r
+    CPSID         IF\r
+    PUSH   {r0-r3}                       ; r0-r3 contain args to be passed between worlds\r
+                                         ; Temporarily stack, so can be used as scratch regs\r
+\r
+    ; Which world have we come from\r
+    ; ------------------------------\r
+    MRC     p15, 0, r0, c1, c1, 0        ; Read Secure Configuration Register data\r
+    TST     r0, #NS_BIT                  ; Is the NS bit set?\r
+    BIC     r0, r0, #NS_BIT              ; Make sure the SCR.NS bit is now clear\r
+//    LDRNE   r0, =SCR_SW_BIT\r
+    MCR     p15, 0, r0, c1, c1, 0        ; Write Secure Configuration Register data\r
+    ISB\r
+    \r
+    LDREQ   r2, =MON_DATA_BASE              \r
+    LDRNE   r3, =MON_DATA_BASE \r
+    \r
+    ADDEQ   r3, r2, #Struct_size\r
+    ADDNE   r2, r3, #Struct_size\r
+\r
+    STM        r2!, {r4-r12}                   ; Save r4 to r12 registers of current world\r
+    LDM     r3!, {r4-r12}               ; Restore r4 to r12 registers of world we need to switch\r
+    \r
+    ; Save current world MON_LR MON_SP and MON_SPSR and restore for other world\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1\r
+    \r
+    ; Save current world SVC_LR, SVC_SP and SVC_SPSR and restore for other world\r
+    CPS            #ARM_MODE_SVC\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1   \r
+    \r
+    ; Save current world FIQ_LR FIQ_SP and FIQ_SPSR and restore for other world\r
+    CPS            #ARM_MODE_FIQ\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1   \r
+    \r
+    ; Save current world IRQ_LR IRQ_SP and IRQ_SPSR and restore for other world\r
+    CPS            #ARM_MODE_IRQ\r
+    MRS     r1, SPSR\r
+    STM     r2!, {r1, sp, lr}\r
+    LDM     r3!, {r1, sp, lr}\r
+    MSR     spsr_cxsf, r1   \r
+\r
+    ; Change to SVC mode before going to MON mode\r
+    CPS            #ARM_MODE_SVC\r
+    CPS            #ARM_MODE_MON    \r
+   \r
+    CLREX                               ; Clear local monitor\r
+\r
+    LDREQ     r0, =SCR_NW_BIT           ; set FIQ to moitor exception(optional) and NS bit to 1 if comming from secure\r
+    MCREQ     p15, 0, r0, c1, c1, 0     ; Write Secure Configuration Register data  \r
+    ISB\r
+    \r
+    /* set the monitor vector base */\r
+    LDREQ     r2, =NWVector\r
+    MCREQ     p15, 0, r2, c12, c0, 0    ; non secure copy of VBAR\r
+    \r
+    BNE       secureworld  \r
+  \r
+nonsecureworld:  \r
+    CPSIE     IF\r
+\r
+secureworld:  \r
+    CPSIE     F\r
+  \r
+    ; Now restore args (r0-r3)\r
+    ; -------------------------\r
+    POP     {r0-r3}\r
+\r
+    \r
+    ; exception return\r
+    ; -------------------------\r
+    MOVS    pc, lr\r
+  \r
+  \r
+  \r
+//***************************************************//\r
+; Monitor initialization code\r
+//***************************************************//\r
+\r
+        SECTION monitor:CODE:NOROOT(2)\r
+        SECTION MSTACK:DATA:NOROOT(3)\r
+        \r
+        PUBLIC SecureMonitor_init\r
+        EXTERN nw_start\r
+        EXTERN TzResetVector\r
+        \r
+        ARM\r
+\r
+SecureMonitor_init:\r
+        \r
+       \r
+       /* Switch to MON mode */\r
+       MRS     r4, cpsr\r
+       CPS     #ARM_MODE_MON           ; change back to SVC mode\r
+\r
+        /* set the monitor stack */\r
+       LDR     sp, =SFE(MSTACK)\r
+        BIC     sp,sp,#0x7                      ; Make sure SP is 8 aligned\r
+        \r
+        /* set the monitor vector base */\r
+       LDR     r2, =monitor_vectors            ; Update monitor exception vector table addr\r
+       MCR     p15, 0, r2, c12, c0, 1        \r
+\r
+        MSR     cpsr_c, r4                  ; change back to SVC mode\r
+        \r
+         /* set the monitor vector base */\r
+       LDR     r2, =TzResetVector              ; Update secure exception vector table addr\r
+       MCR     p15, 0, r2, c12, c0, 0\r
+        \r
+        // Load zero to context memory block\r
+        MOV     r3, #0\r
+        LDR     r0, =MON_DATA_SIZE\r
+        LDR     r1, =MON_DATA_BASE\r
+        MOV     r2, #0  \r
+        \r
+loop_init:        \r
+        CMP     r2, r0\r
+        STRNE   r3,[r1]\r
+        ADD     r1, r1, #4\r
+        ADD     r2, r2, #1\r
+        BNE     loop_init\r
+        \r
+        BX      lr       \r
+\r
+\r
+  END
\ No newline at end of file
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/monitor.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/monitor.c
new file mode 100644 (file)
index 0000000..bfc4e1d
--- /dev/null
@@ -0,0 +1,66 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License  \r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+\r
+/** \file */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+\r
+#if defined(__ICCARM__)\r
+  #include <intrinsics.h>\r
+#endif\r
+#include "mon.h"\r
+#include "mon_macros.h"\r
+   \r
+#if defined ( __ICCARM__ ) /* IAR Ewarm */\r
+    #pragma default_variable_attributes = @ "region_context_switch"\r
+      WorldContext SW_Context;\r
+      WorldContext NSW_Context;    \r
+    #pragma default_variable_attributes = \r
+    \r
+#elif defined (  __GNUC__  ) /* GCC CS3 */\r
+    WorldContext SW_Context __attribute__((__section__("region_context_switch")));\r
+    WorldContext NSW_Context __attribute__((__section__("region_context_switch")));\r
+#endif \r
+/*----------------------------------------------------------------------------\r
+ *        Global functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+void InitMonitor(void)\r
+{\r
+  SW_Context.Mon.Mode_SPSR = 0;\r
+  SecureMonitor_init();\r
+  \r
+  NSW_Context.Mon.Mode_SPSR = INITIAL_NWD_STATE;\r
+  NSW_Context.Mon.Mode_LR = (unsigned int)&nw_start;  \r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/nw_entry_gcc.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/nw_entry_gcc.s
new file mode 100644 (file)
index 0000000..0eb6ee6
--- /dev/null
@@ -0,0 +1,155 @@
+\r
+#define AIC         0xFC06E000\r
+#define AIC_IVR     0x10\r
+#define AIC_EOICR   0x38\r
+\r
+\r
+/*\r
+   Exception vectors\r
+ */\r
+        SECTION .ns_vectors:CODE:NOROOT(2)\r
+\r
+        PUBLIC  NWVector\r
+        EXTERN  TZ_FIQ_Handler\r
+        EXTERN  TZ_Undefined_Handler\r
+        EXTERN  TZ_SWI_Handler\r
+        EXTERN  Prefetch_C_Handler\r
+        EXTERN  Abort_C_Handler\r
+\r
+        ARM\r
+\r
+__iar_init$$done:               ; The interrupt vector is not needed\r
+                                ; until after copy initialization is done\r
+\r
+NWVector:\r
+        ; All default exception handlers (except reset) are\r
+        ; defined as weak symbol definitions.\r
+        ; If a handler is defined by the application it will take precedence.\r
+        LDR     pc, =nw_start      ; Reset\r
+        LDR     pc, Undefined_Addr       ; Undefined instructions\r
+        B       .                        ; Software interrupt (SWI/SYS)\r
+        LDR     pc, Prefetch_Addr        ; Prefetch abort\r
+        LDR     pc, Abort_Addr           ; Data abort\r
+        B       .                        ; RESERVED\r
+        LDR     PC,IRQ_Addr              ; 0x18 IRQ\r
+        LDR     PC,FIQ_Addr              ; 0x1c FIQ\r
+\r
+Undefined_Addr: DCD   TZ_Undefined_Handler\r
+Prefetch_Addr:  DCD   Prefetch_C_Handler\r
+Abort_Addr:     DCD   Abort_C_Handler\r
+IRQ_Addr:       DCD   TZ_IRQ_Handler\r
+FIQ_Addr:       DCD   TZ_FIQ_Handler\r
+\r
+\r
+\r
+\r
+        SECTION .cstartup:CODE:NOROOT(2)\r
+        SECTION IRQ_STACK:DATA:NOROOT(2)        \r
+        SECTION NW_CSTACK:DATA:NOROOT(3)\r
+        \r
+        PUBLIC  nw_start\r
+        PUBLIC  TZ_IRQ_Handler\r
+        EXTERN  main_nw\r
+        EXTERN  LowLevelInit\r
+        ARM\r
+\r
+\r
+MODE_MSK DEFINE 0x1F            ; Bit mask for mode bits in CPSR\r
+\r
+ARM_MODE_USR  DEFINE   0x10\r
+ARM_MODE_FIQ  DEFINE   0x11\r
+ARM_MODE_IRQ  DEFINE   0x12\r
+ARM_MODE_SVC  DEFINE   0x13\r
+ARM_MODE_MON  DEFINE   0x16\r
+ARM_MODE_ABT  DEFINE   0x17\r
+ARM_MODE_UND  DEFINE   0x1B\r
+ARM_MODE_SYS  DEFINE   0x1F\r
+\r
+#define I_BIT            0x80\r
+#define F_BIT            0x40\r
+\r
+\r
+nw_start:\r
+        \r
+        ;- Keep IRQ disable, Keep FIQ(F) disable and switch back in SVC mode        \r
+        MSR     CPSR_c, #ARM_MODE_SVC | I_BIT\r
+        LDR     sp, =SFE(NW_CSTACK)        ; End of CSTACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+              \r
+        MRS     r0, cpsr                ; Original PSR value\r
+         ;; Set up the sys stack pointer.\r
+\r
+        BIC     r0 ,r0, #MODE_MSK       ; Clear the mode bits\r
+        ORR     r0 ,r0, #ARM_MODE_SYS   ; Set System mode bits\r
+        MSR     cpsr_c, r0              ; Change the mode\r
+        LDR     sp, =SFE(NW_CSTACK-0x1900); End of CSTACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+        \r
+         ;; Set up the sys stack pointer.\r
+\r
+        BIC     r0 ,r0, #MODE_MSK       ; Clear the mode bits\r
+        ORR     r0 ,r0, #ARM_MODE_IRQ   ; Set System mode bits\r
+        MSR     cpsr_c, r0              ; Change the mode\r
+        LDR     sp, =SFE(IRQ_STACK); End of CSTACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+               \r
+       ;; Set up the normal stack pointer.\r
+\r
+        BIC     r0 ,r0, #MODE_MSK       ; Clear the mode bits\r
+        ORR     r0 ,r0, #ARM_MODE_SVC   ; Set System mode bits\r
+        MSR     cpsr_c, r0              ; Change the mode\r
+        CPSIE   I\r
+        \r
+                /* Branch to main() */\r
+        LDR     r0, =main_nw\r
+        BLX     r0\r
+       \r
+       \r
+\r
+\r
+/*\r
+   Handles incoming interrupt requests by branching to the corresponding\r
+   handler, as defined in the AIC. Supports interrupt nesting.\r
+ */\r
+TZ_IRQ_Handler:\r
+        \r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        MRS     lr, SPSR\r
+        STMFD   sp!, {r0, lr}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =AIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        /* Check for 8-byte alignment and save lr plus a */\r
+        /* word to indicate the stack adjustment used (0 or 4) */\r
+        AND     r1, sp, #4\r
+        SUB     sp, sp, r1\r
+        STMFD   sp!, {r1, lr}\r
+\r
+        BLX     r0\r
+\r
+        LDMIA   sp!, {r1, lr}\r
+        ADD     sp, sp, r1\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        \r
+        ;- Keep IRQ disable, Keep FIQ(F) disable and switch back in IRQ mode        \r
+        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =AIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0, lr}\r
+        MSR     SPSR_cxsf, lr\r
+        LDMIA   sp!, {pc}^\r
+       \r
+  END
\ No newline at end of file
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/nw_entry_iar.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/nw_entry_iar.s
new file mode 100644 (file)
index 0000000..0eb6ee6
--- /dev/null
@@ -0,0 +1,155 @@
+\r
+#define AIC         0xFC06E000\r
+#define AIC_IVR     0x10\r
+#define AIC_EOICR   0x38\r
+\r
+\r
+/*\r
+   Exception vectors\r
+ */\r
+        SECTION .ns_vectors:CODE:NOROOT(2)\r
+\r
+        PUBLIC  NWVector\r
+        EXTERN  TZ_FIQ_Handler\r
+        EXTERN  TZ_Undefined_Handler\r
+        EXTERN  TZ_SWI_Handler\r
+        EXTERN  Prefetch_C_Handler\r
+        EXTERN  Abort_C_Handler\r
+\r
+        ARM\r
+\r
+__iar_init$$done:               ; The interrupt vector is not needed\r
+                                ; until after copy initialization is done\r
+\r
+NWVector:\r
+        ; All default exception handlers (except reset) are\r
+        ; defined as weak symbol definitions.\r
+        ; If a handler is defined by the application it will take precedence.\r
+        LDR     pc, =nw_start      ; Reset\r
+        LDR     pc, Undefined_Addr       ; Undefined instructions\r
+        B       .                        ; Software interrupt (SWI/SYS)\r
+        LDR     pc, Prefetch_Addr        ; Prefetch abort\r
+        LDR     pc, Abort_Addr           ; Data abort\r
+        B       .                        ; RESERVED\r
+        LDR     PC,IRQ_Addr              ; 0x18 IRQ\r
+        LDR     PC,FIQ_Addr              ; 0x1c FIQ\r
+\r
+Undefined_Addr: DCD   TZ_Undefined_Handler\r
+Prefetch_Addr:  DCD   Prefetch_C_Handler\r
+Abort_Addr:     DCD   Abort_C_Handler\r
+IRQ_Addr:       DCD   TZ_IRQ_Handler\r
+FIQ_Addr:       DCD   TZ_FIQ_Handler\r
+\r
+\r
+\r
+\r
+        SECTION .cstartup:CODE:NOROOT(2)\r
+        SECTION IRQ_STACK:DATA:NOROOT(2)        \r
+        SECTION NW_CSTACK:DATA:NOROOT(3)\r
+        \r
+        PUBLIC  nw_start\r
+        PUBLIC  TZ_IRQ_Handler\r
+        EXTERN  main_nw\r
+        EXTERN  LowLevelInit\r
+        ARM\r
+\r
+\r
+MODE_MSK DEFINE 0x1F            ; Bit mask for mode bits in CPSR\r
+\r
+ARM_MODE_USR  DEFINE   0x10\r
+ARM_MODE_FIQ  DEFINE   0x11\r
+ARM_MODE_IRQ  DEFINE   0x12\r
+ARM_MODE_SVC  DEFINE   0x13\r
+ARM_MODE_MON  DEFINE   0x16\r
+ARM_MODE_ABT  DEFINE   0x17\r
+ARM_MODE_UND  DEFINE   0x1B\r
+ARM_MODE_SYS  DEFINE   0x1F\r
+\r
+#define I_BIT            0x80\r
+#define F_BIT            0x40\r
+\r
+\r
+nw_start:\r
+        \r
+        ;- Keep IRQ disable, Keep FIQ(F) disable and switch back in SVC mode        \r
+        MSR     CPSR_c, #ARM_MODE_SVC | I_BIT\r
+        LDR     sp, =SFE(NW_CSTACK)        ; End of CSTACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+              \r
+        MRS     r0, cpsr                ; Original PSR value\r
+         ;; Set up the sys stack pointer.\r
+\r
+        BIC     r0 ,r0, #MODE_MSK       ; Clear the mode bits\r
+        ORR     r0 ,r0, #ARM_MODE_SYS   ; Set System mode bits\r
+        MSR     cpsr_c, r0              ; Change the mode\r
+        LDR     sp, =SFE(NW_CSTACK-0x1900); End of CSTACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+        \r
+         ;; Set up the sys stack pointer.\r
+\r
+        BIC     r0 ,r0, #MODE_MSK       ; Clear the mode bits\r
+        ORR     r0 ,r0, #ARM_MODE_IRQ   ; Set System mode bits\r
+        MSR     cpsr_c, r0              ; Change the mode\r
+        LDR     sp, =SFE(IRQ_STACK); End of CSTACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+               \r
+       ;; Set up the normal stack pointer.\r
+\r
+        BIC     r0 ,r0, #MODE_MSK       ; Clear the mode bits\r
+        ORR     r0 ,r0, #ARM_MODE_SVC   ; Set System mode bits\r
+        MSR     cpsr_c, r0              ; Change the mode\r
+        CPSIE   I\r
+        \r
+                /* Branch to main() */\r
+        LDR     r0, =main_nw\r
+        BLX     r0\r
+       \r
+       \r
+\r
+\r
+/*\r
+   Handles incoming interrupt requests by branching to the corresponding\r
+   handler, as defined in the AIC. Supports interrupt nesting.\r
+ */\r
+TZ_IRQ_Handler:\r
+        \r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        MRS     lr, SPSR\r
+        STMFD   sp!, {r0, lr}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =AIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        /* Check for 8-byte alignment and save lr plus a */\r
+        /* word to indicate the stack adjustment used (0 or 4) */\r
+        AND     r1, sp, #4\r
+        SUB     sp, sp, r1\r
+        STMFD   sp!, {r1, lr}\r
+\r
+        BLX     r0\r
+\r
+        LDMIA   sp!, {r1, lr}\r
+        ADD     sp, sp, r1\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        \r
+        ;- Keep IRQ disable, Keep FIQ(F) disable and switch back in IRQ mode        \r
+        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =AIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0, lr}\r
+        MSR     SPSR_cxsf, lr\r
+        LDMIA   sp!, {pc}^\r
+       \r
+  END
\ No newline at end of file
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/tz_matrix.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/libchip_sama5d4x/tz/tz_matrix.h
new file mode 100644 (file)
index 0000000..57cbb63
--- /dev/null
@@ -0,0 +1,70 @@
+/* ----------------------------------------------------------------------------\r
+ *         ATMEL Microcontroller Software Support\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2013, Atmel Corporation\r
+\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+#ifndef __TZ_MATRIX_H__\r
+#define __TZ_MATRIX_H__\r
+\r
+#define MATRIX_MCFG(n) (0x0000 + (n) * 4)/* Master Configuration Register */\r
+#define MATRIX_SCFG(n) (0x0040 + (n) * 4)/* Slave Configuration Register */\r
+#define MATRIX_PRAS(n) (0x0080 + (n) * 8)/* Priority Register A for Slave */\r
+#define MATRIX_PRBS(n) (0x0084 + (n) * 8)/* Priority Register B for Slave */\r
+\r
+#define MATRIX_MRCR    0x0100  /* Master Remap Control Register */\r
+#define MATRIX_MEIER   0x0150  /* Master Error Interrupt Enable Register */\r
+#define MATRIX_MEIDR   0x0154  /* Master Error Interrupt Disable Register */\r
+#define MATRIX_MEIMR   0x0158  /* Master Error Interrupt Mask Register */\r
+#define MATRIX_MESR    0x015c  /* Master Error Statue Register */\r
+\r
+/* Master n Error Address Register */\r
+#define MATRIX_MEAR(n) (0x0160 + (n) * 4)\r
+\r
+//#define MATRIX_WPMR  0x01E4          /* Write Protect Mode Register */\r
+//#define MATRIX_WPSR  0x01E8          /* Write Protect Status Register */\r
+\r
+/* Security Slave n Register */\r
+#define MATRIX_SSR(n)  (0x0200 + (n) * 4)\r
+/* Security Area Split Slave n Register */\r
+#define MATRIX_SASSR(n)        (0x0240 + (n) * 4)\r
+/* Security Region Top Slave n Register */\r
+#define MATRIX_SRTSR(n)        (0x0280 + (n) * 4)\r
+\r
+/* Security Peripheral Select n Register */\r
+#define MATRIX_SPSELR(n)       (0x02c0 + (n) * 4)\r
+\r
+/**************************************************************************/\r
+/* Write Protect Mode Register (MATRIX_WPMR) */\r
+\r
+#define                MATRIX_WPMR_WPEN_DISABLE        (0 << 0)\r
+#define                MATRIX_WPMR_WPEN_ENABLE         (1 << 0)\r
+#define                MATRIX_WPMR_WPKEY_PASSWD        (0x4D4154 << 8)\r
+\r
+\r
+\r
+\r
+\r
+\r
+#endif /* #ifndef __TZ_MATRIX_H__ */\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Blinky_Demo/main_blinky.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Blinky_Demo/main_blinky.c
new file mode 100644 (file)
index 0000000..a60914b
--- /dev/null
@@ -0,0 +1,232 @@
+/*\r
+    FreeRTOS V8.0.1 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/******************************************************************************\r
+ * NOTE 1:  This project provides three demo applications.  A simple blinky\r
+ * style project, a more comprehensive test and demo application, and an\r
+ * lwIP example.  The mainSELECTED_APPLICATION setting in main.c is used to\r
+ * select between the three.  See the notes on using mainSELECTED_APPLICATION\r
+ * in main.c.  This file implements the simply blinky style version.\r
+ *\r
+ * NOTE 2:  This file only contains the source code that is specific to the\r
+ * basic demo.  Generic functions, such FreeRTOS hook functions, and functions\r
+ * required to configure the hardware are defined in main.c.\r
+ ******************************************************************************\r
+ *\r
+ * main_blinky() creates one queue, and two tasks.  It then starts the\r
+ * scheduler.\r
+ *\r
+ * The Queue Send Task:\r
+ * The queue send task is implemented by the prvQueueSendTask() function in\r
+ * this file.  prvQueueSendTask() sits in a loop that causes it to repeatedly\r
+ * block for 200 milliseconds, before sending the value 100 to the queue that\r
+ * was created within main_blinky().  Once the value is sent, the task loops\r
+ * back around to block for another 200 milliseconds...and so on.\r
+ *\r
+ * The Queue Receive Task:\r
+ * The queue receive task is implemented by the prvQueueReceiveTask() function\r
+ * in this file.  prvQueueReceiveTask() sits in a loop where it repeatedly\r
+ * blocks on attempts to read data from the queue that was created within\r
+ * main_blinky().  When data is received, the task checks the value of the\r
+ * data, and if the value equals the expected 100, toggles an LED.  The 'block\r
+ * time' parameter passed to the queue receive function specifies that the\r
+ * task should be held in the Blocked state indefinitely to wait for data to\r
+ * be available on the queue.  The queue receive task will only leave the\r
+ * Blocked state when the queue send task writes to the queue.  As the queue\r
+ * send task writes to the queue every 200 milliseconds, the queue receive\r
+ * task leaves the Blocked state every 200 milliseconds, and therefore toggles\r
+ * the LED every 200 milliseconds.\r
+ */\r
+\r
+/* Kernel includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "semphr.h"\r
+\r
+/* Standard demo includes. */\r
+#include "partest.h"\r
+\r
+/* Priorities at which the tasks are created. */\r
+#define mainQUEUE_RECEIVE_TASK_PRIORITY                ( tskIDLE_PRIORITY + 2 )\r
+#define        mainQUEUE_SEND_TASK_PRIORITY            ( tskIDLE_PRIORITY + 1 )\r
+\r
+/* The rate at which data is sent to the queue.  The 200ms value is converted\r
+to ticks using the portTICK_PERIOD_MS constant. */\r
+#define mainQUEUE_SEND_FREQUENCY_MS                    ( 200 / portTICK_PERIOD_MS )\r
+\r
+/* The number of items the queue can hold.  This is 1 as the receive task\r
+will remove items as they are added, meaning the send task should always find\r
+the queue empty. */\r
+#define mainQUEUE_LENGTH                                       ( 1 )\r
+\r
+/* The LED toggled by the Rx task. */\r
+#define mainTASK_LED                                           ( 0 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Called by main when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1 in\r
+ * main.c.\r
+ */\r
+void main_blinky( void );\r
+\r
+/*\r
+ * The tasks as described in the comments at the top of this file.\r
+ */\r
+static void prvQueueReceiveTask( void *pvParameters );\r
+static void prvQueueSendTask( void *pvParameters );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The queue used by both tasks. */\r
+static QueueHandle_t xQueue = NULL;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void main_blinky( void )\r
+{\r
+       /* Create the queue. */\r
+       xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( uint32_t ) );\r
+\r
+       if( xQueue != NULL )\r
+       {\r
+               /* Start the two tasks as described in the comments at the top of this\r
+               file. */\r
+               xTaskCreate( prvQueueReceiveTask,                               /* The function that implements the task. */\r
+                                       "Rx",                                                           /* The text name assigned to the task - for debug only as it is not used by the kernel. */\r
+                                       configMINIMAL_STACK_SIZE,                       /* The size of the stack to allocate to the task. */\r
+                                       NULL,                                                           /* The parameter passed to the task - not used in this case. */\r
+                                       mainQUEUE_RECEIVE_TASK_PRIORITY,        /* The priority assigned to the task. */\r
+                                       NULL );                                                         /* The task handle is not required, so NULL is passed. */\r
+\r
+               xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );\r
+\r
+               /* Start the tasks and timer running. */\r
+               vTaskStartScheduler();\r
+       }\r
+\r
+       /* If all is well, the scheduler will now be running, and the following\r
+       line will never be reached.  If the following line does execute, then\r
+       there was either insufficient FreeRTOS heap memory available for the idle\r
+       and/or timer tasks to be created, or vTaskStartScheduler() was called from\r
+       User mode.  See the memory management section on the FreeRTOS web site for\r
+       more details on the FreeRTOS heap http://www.freertos.org/a00111.html.  The\r
+       mode from which main() is called is set in the C start up code and must be\r
+       a privileged mode (not user mode). */\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvQueueSendTask( void *pvParameters )\r
+{\r
+TickType_t xNextWakeTime;\r
+const unsigned long ulValueToSend = 100UL;\r
+\r
+       /* Remove compiler warning about unused parameter. */\r
+       ( void ) pvParameters;\r
+\r
+       /* Initialise xNextWakeTime - this only needs to be done once. */\r
+       xNextWakeTime = xTaskGetTickCount();\r
+\r
+       for( ;; )\r
+       {\r
+               /* Place this task in the blocked state until it is time to run again. */\r
+               vTaskDelayUntil( &xNextWakeTime, mainQUEUE_SEND_FREQUENCY_MS );\r
+\r
+               /* Send to the queue - causing the queue receive task to unblock and\r
+               toggle the LED.  0 is used as the block time so the sending operation\r
+               will not block - it shouldn't need to block as the queue should always\r
+               be empty at this point in the code. */\r
+               xQueueSend( xQueue, &ulValueToSend, 0U );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvQueueReceiveTask( void *pvParameters )\r
+{\r
+unsigned long ulReceivedValue;\r
+const unsigned long ulExpectedValue = 100UL;\r
+\r
+       /* Remove compiler warning about unused parameter. */\r
+       ( void ) pvParameters;\r
+\r
+       for( ;; )\r
+       {\r
+               /* Wait until something arrives in the queue - this task will block\r
+               indefinitely provided INCLUDE_vTaskSuspend is set to 1 in\r
+               FreeRTOSConfig.h. */\r
+               xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );\r
+\r
+               /*  To get here something must have been received from the queue, but\r
+               is it the expected value?  If it is, toggle the LED. */\r
+               if( ulReceivedValue == ulExpectedValue )\r
+               {\r
+                       vParTestToggleLED( mainTASK_LED );\r
+                       ulReceivedValue = 0U;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/CDCCommandConsole.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/CDCCommandConsole.c
new file mode 100644 (file)
index 0000000..83f0a90
--- /dev/null
@@ -0,0 +1,501 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/*\r
+ * NOTE:  This file uses a third party USB CDC driver.\r
+ */\r
+\r
+/* Standard includes. */\r
+#include "string.h"\r
+#include "stdio.h"\r
+\r
+/* FreeRTOS includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "event_groups.h"\r
+\r
+/* Example includes. */\r
+#include "FreeRTOS_CLI.h"\r
+\r
+/* Library includes. */\r
+#include "board.h"\r
+#include "chip.h"\r
+#include "USBD.h"\r
+#include "CDCDSerialDriver.h"\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Dimensions the buffer into which input characters are placed. */\r
+#define cmdMAX_INPUT_SIZE              50\r
+\r
+/* DEL acts as a backspace. */\r
+#define cmdASCII_DEL           ( 0x7F )\r
+\r
+/* The bits in the event group used to signal USB interrupt events to this\r
+task. */\r
+#define cmdRX_COMPLETE_BIT     ( 0x01 )\r
+#define cmdTX_COMPLETE_BIT     ( 0x02 )\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * The task that implements the command console processing.\r
+ */\r
+static void prvCDCCommandConsoleTask( void *pvParameters );\r
+\r
+/*\r
+ * Initialise the USB hardware and driver.\r
+ */\r
+static void prvCDCInit( void );\r
+\r
+/*\r
+ * Handler installed on the VBUS pin to detect connect() and disconnect()\r
+ * events.\r
+ */\r
+static void prvVBusISRHandler( const Pin *pxPin );\r
+\r
+/*\r
+ * USB handler defined by the driver, installed after the CDC driver has been\r
+ * initialised.\r
+ */\r
+extern void USBD_IrqHandler( void );\r
+\r
+/*\r
+ * The function that creates the CLI task.\r
+ */\r
+void vUSBCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );\r
+\r
+/*\r
+ * Send xDataLength bytes from pcData to the CDC port.\r
+ */\r
+static void prvCDCSend( const char *pcData, size_t xDataLenth );\r
+\r
+/*\r
+ * Initiate a receive into the Rx buffer from the CDC port, then wait for a\r
+ * period for characters to be received.\r
+ */\r
+static void prvCDCGetChar( void );\r
+\r
+/*\r
+ * Configure VBus pins and interrupts, and check for connection.\r
+ */\r
+static void prvConfigureVBus( void );\r
+\r
+/*\r
+ * Callback which is invoked when a CDC read completes.  This callback is\r
+ * passed as a parameter to the CDC receive function.\r
+ */\r
+static void prvCDCDataReceivedCallback( uint32_t ulUnused, uint8_t ucStatus, uint32_t ulBytesReceived, uint32_t ulBytesRemaining );\r
+\r
+/*\r
+ * Callback which is invoked when a CDC write completes.  This callback is\r
+ * passed as a parameter to the CDC send function.\r
+ */\r
+static void prvCDCDataTransmittedCallback( uint32_t ulUnused, uint8_t ucStatus, uint32_t ulBytesSent, uint32_t ulBytesRemaining );\r
+\r
+/*\r
+ * Keep trying to initiate an Rx until it is started successfully\r
+ */\r
+static void prvStartRx( void );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Const messages output by the command console. */\r
+static const char * const pcWelcomeMessage = "FreeRTOS command server.\r\nType Help to view a list of registered commands.\r\n\r\n>";\r
+static const char * const pcEndOfOutputMessage = "\r\n[Press ENTER to execute the previous command again]\r\n>";\r
+static const char * const pcNewLine = "\r\n";\r
+\r
+/* Buffer into which received characters are placed. */\r
+static char pcRxBuffer[ cmdMAX_INPUT_SIZE ];\r
+\r
+/* The number of bytes in pcRxBuffer that have not yet been read. */\r
+static uint32_t ulBytesAvailable = 0;\r
+\r
+/* Used to unblock the task when bytes are received and when bytes have\r
+completed sending. */\r
+static EventGroupHandle_t xCDCEventBits;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vUSBCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority )\r
+{\r
+       /* Event group used to indicate that bytes are available in the Rx buffer\r
+       or that bytes have finished sending. */\r
+       xCDCEventBits = xEventGroupCreate();\r
+       configASSERT( xCDCEventBits );\r
+\r
+       /* Create the task that handles the console itself. */\r
+       xTaskCreate(    prvCDCCommandConsoleTask,       /* The task that implements the command console. */\r
+                                       "CLI",                                          /* Text name assigned to the task.  This is just to assist debugging.  The kernel does not use this name itself. */\r
+                                       usStackSize,                            /* The size of the stack allocated to the task. */\r
+                                       NULL,                                           /* The parameter is not used, so NULL is passed. */\r
+                                       uxPriority,                                     /* The priority allocated to the task. */\r
+                                       NULL );                                         /* A handle is not required, so just pass NULL. */\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCDCCommandConsoleTask( void *pvParameters )\r
+{\r
+uint8_t ucInputIndex = 0;\r
+char *pcOutputString, cRxedChar;\r
+static char cInputString[ cmdMAX_INPUT_SIZE ], cLastInputString[ cmdMAX_INPUT_SIZE ];\r
+BaseType_t xReturned;\r
+uint32_t ulBufferIndex = 0;\r
+\r
+       ( void ) pvParameters;\r
+\r
+       /* Obtain the address of the output buffer.  Note there is no mutual\r
+       exclusion on this buffer as it is assumed only one command console interface\r
+       will be used at any one time. */\r
+       pcOutputString = FreeRTOS_CLIGetOutputBuffer();\r
+\r
+       /* Initialise the CDC driver. */\r
+       prvCDCInit();\r
+\r
+       /* Start receiving into the buffer. */\r
+       prvStartRx();\r
+\r
+       /* Send the welcome message. */\r
+       prvCDCSend( pcWelcomeMessage, strlen( pcWelcomeMessage ) );\r
+\r
+       for( ;; )\r
+       {\r
+               /* Wait for my characters to be available. */\r
+               prvCDCGetChar();\r
+\r
+               /* Process the bytes char for char on the assumption that as input comes\r
+               from typing it is unlikely that more than a single byte will be received\r
+               at a time anyway. */\r
+               while( ulBytesAvailable > 0 )\r
+               {\r
+                       /* Read next byte from the rx buffer. */\r
+                       cRxedChar = pcRxBuffer[ ulBufferIndex ];\r
+\r
+                       taskENTER_CRITICAL();\r
+                       {\r
+                               ulBytesAvailable--;\r
+                       }\r
+                       taskEXIT_CRITICAL();\r
+\r
+                       /* Echo the character back. */\r
+                       prvCDCSend( &cRxedChar, sizeof( cRxedChar ) );\r
+\r
+                       /* Was it the end of the line? */\r
+                       if( cRxedChar == '\n' || cRxedChar == '\r' )\r
+                       {\r
+                               /* Just to space the output from the input. */\r
+                               prvCDCSend( pcNewLine, strlen( pcNewLine ) );\r
+\r
+                               /* See if the command is empty, indicating that the last command\r
+                               is to be executed again. */\r
+                               if( ucInputIndex == 0 )\r
+                               {\r
+                                       /* Copy the last command back into the input string. */\r
+                                       strcpy( cInputString, cLastInputString );\r
+                               }\r
+\r
+                               /* Pass the received command to the command interpreter.  The\r
+                               command interpreter is called repeatedly until it returns\r
+                               pdFALSE (indicating there is no more output) as it might\r
+                               generate more than one string. */\r
+                               do\r
+                               {\r
+                                       /* Get the next output string from the command interpreter. */\r
+                                       xReturned = FreeRTOS_CLIProcessCommand( cInputString, pcOutputString, configCOMMAND_INT_MAX_OUTPUT_SIZE );\r
+\r
+                                       /* Write the generated string to the UART. */\r
+                                       prvCDCSend( pcOutputString, strlen( pcOutputString ) );\r
+\r
+                               } while( xReturned != pdFALSE );\r
+\r
+                               /* All the strings generated by the input command have been\r
+                               sent.  Clear the input string ready to receive the next command.\r
+                               Remember the command that was just processed first in case it is\r
+                               to be processed again. */\r
+                               strcpy( cLastInputString, cInputString );\r
+                               ucInputIndex = 0;\r
+                               memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );\r
+\r
+                               prvCDCSend( pcEndOfOutputMessage, strlen( pcEndOfOutputMessage ) );\r
+                       }\r
+                       else\r
+                       {\r
+                               if( cRxedChar == '\r' )\r
+                               {\r
+                                       /* Ignore the character. */\r
+                               }\r
+                               else if( ( cRxedChar == '\b' ) || ( cRxedChar == cmdASCII_DEL ) )\r
+                               {\r
+                                       /* Backspace was pressed.  Erase the last character in the\r
+                                       string - if any. */\r
+                                       if( ucInputIndex > 0 )\r
+                                       {\r
+                                               ucInputIndex--;\r
+                                               cInputString[ ucInputIndex ] = '\0';\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       /* A character was entered.  Add it to the string entered so\r
+                                       far.  When a \n is entered the complete string will be\r
+                                       passed to the command interpreter. */\r
+                                       if( ( cRxedChar >= ' ' ) && ( cRxedChar <= '~' ) )\r
+                                       {\r
+                                               if( ucInputIndex < cmdMAX_INPUT_SIZE )\r
+                                               {\r
+                                                       cInputString[ ucInputIndex ] = cRxedChar;\r
+                                                       ucInputIndex++;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       /* Move onto the next byte the next time around. */\r
+                       ulBufferIndex++;\r
+                       if( ulBufferIndex >= cmdMAX_INPUT_SIZE )\r
+                       {\r
+                               ulBufferIndex = 0;\r
+                       }\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCDCInit( void )\r
+{\r
+extern WEAK const USBDDriverDescriptors cdcdSerialDriverDescriptors;\r
+\r
+       /* If they are present, configure Vbus & Wake-up pins */\r
+       PIO_InitializeInterrupts( 0 );\r
+\r
+       /* CDC serial driver initialization */\r
+       CDCDSerialDriver_Initialize( &cdcdSerialDriverDescriptors );\r
+\r
+       /* Configure VBus pins and interrupts, and check for connection. */\r
+       prvConfigureVBus();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCDCSend( const char *pcData, size_t xDataLength )\r
+{\r
+const TickType_t xTransferCompleteDelay = pdMS_TO_TICKS( 500UL );\r
+\r
+       ( void ) pcData;\r
+       ( void ) xDataLength;\r
+\r
+       if( xDataLength > 0 )\r
+       {\r
+               if( CDCDSerialDriver_Write( ( void * ) pcData, xDataLength, ( TransferCallback ) prvCDCDataTransmittedCallback, 0 ) == USBD_STATUS_SUCCESS )\r
+               {\r
+                       /* Wait for the transfer to complete. */\r
+                       xEventGroupWaitBits(    xCDCEventBits,\r
+                                                                       cmdTX_COMPLETE_BIT, /* The bit to wait for. */\r
+                                                                       pdTRUE, /* Clear the bit before exiting the function. */\r
+                                                                       pdFALSE, /* Only need to wait for one bit anyway. */\r
+                                                                       xTransferCompleteDelay ); /* The maximum time to wait for the event. */\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvStartRx( void )\r
+{\r
+const TickType_t xFailedReadDelay = pdMS_TO_TICKS( 150UL );\r
+\r
+       while( CDCDSerialDriver_Read( pcRxBuffer, cmdMAX_INPUT_SIZE, ( TransferCallback ) prvCDCDataReceivedCallback, 0 ) != USBD_STATUS_SUCCESS )\r
+       {\r
+               /* Maybe the CDC is not connected. */\r
+               vTaskDelay( xFailedReadDelay );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCDCGetChar( void )\r
+{\r
+const TickType_t xTransferCompleteDelay = pdMS_TO_TICKS( 750UL );\r
+\r
+       if( ulBytesAvailable == 0 )\r
+       {\r
+               /* Wait for a transfer to complete. */\r
+               xEventGroupWaitBits(    xCDCEventBits,\r
+                                                               cmdRX_COMPLETE_BIT, /* The bit to wait for. */\r
+                                                               pdTRUE, /* Clear the bit before exiting the function. */\r
+                                                               pdFALSE, /* Only need to wait for one bit anyway. */\r
+                                                               xTransferCompleteDelay ); /* The maximum time to wait for the event. */\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvVBusISRHandler( const Pin *pxPin )\r
+{\r
+       /* NOTE: As this was written for the XPlained board, which is powered\r
+       through the USB and cannot be on without the USB connected, this function\r
+       has not been exercised. */\r
+\r
+    /* Check current level on VBus to detect a connect/disconnect. */\r
+    if( PIO_Get( pxPin ) != 0 )\r
+    {\r
+        USBD_Connect();\r
+    }\r
+    else\r
+    {\r
+        USBD_Disconnect();\r
+    }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCDCDataReceivedCallback( uint32_t ulUnused, uint8_t ucStatus, uint32_t ulBytesReceived, uint32_t ulBytesRemaining )\r
+{\r
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+static uint32_t ulNextRxPosition = 0;\r
+\r
+       ( void ) ulUnused;\r
+       ( void ) ucStatus;\r
+       ( void ) ulBytesRemaining;\r
+\r
+       /* If bytes were received then store the number of bytes placed into the Rx\r
+       buffer. */\r
+       if( ucStatus == USBD_STATUS_SUCCESS )\r
+       {\r
+               ulBytesAvailable += ulBytesReceived;\r
+\r
+               /* Restart the Rx position from a buffer position past the newly\r
+               received data. */\r
+               ulNextRxPosition += ulBytesReceived;\r
+\r
+               if( ulNextRxPosition >= cmdMAX_INPUT_SIZE )\r
+               {\r
+                       ulNextRxPosition = 0;\r
+               }\r
+               CDCDSerialDriver_Read( pcRxBuffer + ulNextRxPosition, cmdMAX_INPUT_SIZE - ulNextRxPosition, ( TransferCallback ) prvCDCDataReceivedCallback, 0 );\r
+\r
+               /* Ensure the task knows new data is available. */\r
+               xEventGroupSetBitsFromISR( xCDCEventBits, cmdRX_COMPLETE_BIT, &xHigherPriorityTaskWoken );\r
+               portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCDCDataTransmittedCallback( uint32_t ulUnused, uint8_t ucStatus, uint32_t ulBytesSent, uint32_t ulBytesRemaining )\r
+{\r
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
+\r
+       ( void ) ulUnused;\r
+       ( void ) ucStatus;\r
+       ( void ) ulBytesRemaining;\r
+       ( void ) ulBytesSent;\r
+\r
+       xEventGroupSetBitsFromISR( xCDCEventBits, cmdTX_COMPLETE_BIT, &xHigherPriorityTaskWoken );\r
+       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvConfigureVBus( void )\r
+{\r
+const Pin xVBusPin = PIN_USB_VBUS;\r
+\r
+       /* Configure PIO to generate an interrupt on status change. */\r
+       PIO_Configure( &xVBusPin, 1 );\r
+       PIO_ConfigureIt( &xVBusPin, prvVBusISRHandler );\r
+       PIO_EnableIt( &xVBusPin );\r
+\r
+       /* Check current level on VBus */\r
+       if( PIO_Get( &xVBusPin ) != pdFALSE )\r
+       {\r
+               /* if VBUS present, force the connect */\r
+               USBD_Connect();\r
+       }\r
+       else\r
+       {\r
+               USBD_Disconnect();\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void USBDCallbacks_Initialized( void )\r
+{\r
+       /* CDC specific re-implementation of weak callback function.  Invoked after\r
+       the USB driver has been initialised. By default, configures the UDP/UDPHS\r
+       interrupt.  The interrupt priority is set to the highest to ensure the\r
+       interrupt nesting tests interfer as little as possible with the USB. */\r
+       IRQ_ConfigureIT( ID_UDPHS, 7, USBD_IrqHandler );\r
+       IRQ_EnableIT( ID_UDPHS );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void USBDDriverCallbacks_ConfigurationChanged( uint8_t ucConfigNumber )\r
+{\r
+       /* CDC specific re-implementation of weak callback function.  Invoked when\r
+       the configuration of the device changes. Parse used endpoints. */\r
+       CDCDSerialDriver_ConfigurationChangedHandler( ucConfigNumber );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void USBDCallbacks_RequestReceived( const USBGenericRequest *pxRequest )\r
+{\r
+       /* CDC specific re-implementation of weak callback function.  Invoked when\r
+       a new SETUP request is received from the host. */\r
+       CDCDSerialDriver_RequestHandler( pxRequest );\r
+}\r
+/*-----------------------------------------------------------*/\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOSConfig.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOSConfig.h
new file mode 100644 (file)
index 0000000..9fc6a65
--- /dev/null
@@ -0,0 +1,195 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+#ifndef FREERTOS_CONFIG_H\r
+#define FREERTOS_CONFIG_H\r
+\r
+/*-----------------------------------------------------------\r
+ * Application specific definitions.\r
+ *\r
+ * These definitions should be adjusted for your particular hardware and\r
+ * application requirements.\r
+ *\r
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
+ *\r
+ * See http://www.freertos.org/a00110.html.\r
+ *----------------------------------------------------------*/\r
+\r
+#define configCPU_CLOCK_HZ                                             /* Not used in this port as the value comes from the Atmel libraries. */\r
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION        1\r
+#define configUSE_TICKLESS_IDLE                                        0\r
+#define configTICK_RATE_HZ                                             ( ( TickType_t ) 1000 )\r
+#define configUSE_PREEMPTION                                   1\r
+#define configUSE_IDLE_HOOK                                            1\r
+#define configUSE_TICK_HOOK                                            1\r
+#define configMAX_PRIORITIES                                   ( 5 )\r
+#define configMINIMAL_STACK_SIZE                               ( ( unsigned short ) 100 )\r
+#define configTOTAL_HEAP_SIZE                                  ( ( size_t ) ( 42 * 1024 ) )\r
+#define configMAX_TASK_NAME_LEN                                        ( 10 )\r
+#define configUSE_TRACE_FACILITY                               1\r
+#define configUSE_16_BIT_TICKS                                 0\r
+#define configIDLE_SHOULD_YIELD                                        1\r
+#define configUSE_MUTEXES                                              1\r
+#define configQUEUE_REGISTRY_SIZE                              8\r
+#define configCHECK_FOR_STACK_OVERFLOW                 2\r
+#define configUSE_RECURSIVE_MUTEXES                            1\r
+#define configUSE_MALLOC_FAILED_HOOK                   1\r
+#define configUSE_APPLICATION_TASK_TAG                 0\r
+#define configUSE_COUNTING_SEMAPHORES                  1\r
+\r
+/* Co-routine definitions. */\r
+#define configUSE_CO_ROUTINES                                  0\r
+#define configMAX_CO_ROUTINE_PRIORITIES                ( 2 )\r
+\r
+/* Software timer definitions. */\r
+#define configUSE_TIMERS                                               1\r
+#define configTIMER_TASK_PRIORITY                              ( configMAX_PRIORITIES - 1 )\r
+#define configTIMER_QUEUE_LENGTH                               5\r
+#define configTIMER_TASK_STACK_DEPTH                   ( configMINIMAL_STACK_SIZE * 2 )\r
+\r
+/* Set the following definitions to 1 to include the API function, or zero\r
+to exclude the API function. */\r
+#define INCLUDE_vTaskPrioritySet                               1\r
+#define INCLUDE_uxTaskPriorityGet                              1\r
+#define INCLUDE_vTaskDelete                                            1\r
+#define INCLUDE_vTaskCleanUpResources                  1\r
+#define INCLUDE_vTaskSuspend                                   1\r
+#define INCLUDE_vTaskDelayUntil                                        1\r
+#define INCLUDE_vTaskDelay                                             1\r
+#define INCLUDE_eTaskGetState                                  1\r
+#define INCLUDE_xEventGroupSetBitFromISR               1\r
+#define INCLUDE_xTimerPendFunctionCall                 1\r
+\r
+/* This demo makes use of one or more example stats formatting functions.  These\r
+format the raw data provided by the uxTaskGetSystemState() function in to human\r
+readable ASCII form.  See the notes in the implementation of vTaskList() within\r
+FreeRTOS/Source/tasks.c for limitations. */\r
+#define configUSE_STATS_FORMATTING_FUNCTIONS   1\r
+\r
+/* Cortex-A specific setting:  FPU has 16 (rather than 32) d registers.  See:\r
+http://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-MPUs-without-a-GIC.html */\r
+#define configFPU_D32  0\r
+\r
+/* Cortex-A specific setting:  The address of the register within the interrupt\r
+controller from which the address of the current interrupt's handling function\r
+can be obtained.  See:\r
+http://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-MPUs-without-a-GIC.html */\r
+#define configINTERRUPT_VECTOR_ADDRESS 0xFC06E010UL\r
+\r
+/* Cortex-A specific setting:  The address of End of Interrupt register within\r
+the interrupt controller.  See:\r
+http://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-MPUs-without-a-GIC.html */\r
+#define configEOI_ADDRESS      0xFC06E038UL\r
+\r
+/* Cortex-A specific setting: configCLEAR_TICK_INTERRUPT() is a macro that is\r
+called by the RTOS kernel's tick handler to clear the source of the tick\r
+interrupt.  See:\r
+http://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-MPUs-without-a-GIC.html */\r
+#define configCLEAR_TICK_INTERRUPT() ( void ) ( *( ( volatile uint32_t * ) 0xFC068638UL ) ) /* Read PIT_PIVR to clear interrupt. */\r
+\r
+/* Prevent C code being included in assembly files when the IAR compiler is\r
+used. */\r
+#ifndef __IASMARM__\r
+\r
+       /* The interrupt nesting test creates a 20KHz timer.  For convenience the\r
+       20KHz timer is also used to generate the run time stats time base, removing\r
+       the need to use a separate timer for that purpose.  The 20KHz timer\r
+       increments ulHighFrequencyTimerCounts, which is used as the time base.\r
+       Therefore the following macro is not implemented. */\r
+       #define configGENERATE_RUN_TIME_STATS   0\r
+//_RB_ extern volatile uint32_t ulHighFrequencyTimerCounts;\r
+//_RB_ #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()\r
+//_RB_ #define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerCounts\r
+\r
+       /* The size of the global output buffer that is available for use when there\r
+       are multiple command interpreters running at once (for example, one on a UART\r
+       and one on TCP/IP).  This is done to prevent an output buffer being defined by\r
+       each implementation - which would waste RAM.  In this case, there is only one\r
+       command interpreter running. */\r
+       #define configCOMMAND_INT_MAX_OUTPUT_SIZE 3000\r
+\r
+       /* Normal assert() semantics without relying on the provision of an assert.h\r
+       header file. */\r
+       void vAssertCalled( const char * pcFile, unsigned long ulLine );\r
+       #define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ );\r
+\r
+\r
+\r
+       /****** Hardware specific settings. *******************************************/\r
+\r
+       /*\r
+        * The application must provide a function that configures a peripheral to\r
+        * create the FreeRTOS tick interrupt, then define configSETUP_TICK_INTERRUPT()\r
+        * in FreeRTOSConfig.h to call the function.  FreeRTOS_Tick_Handler() must\r
+        * be installed as the peripheral's interrupt handler.\r
+        */\r
+       void vConfigureTickInterrupt( void );\r
+       #define configSETUP_TICK_INTERRUPT() vConfigureTickInterrupt()\r
+\r
+#endif /* __IASMARM__ */\r
+\r
+#endif /* FREERTOS_CONFIG_H */\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOS_tick_config.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOS_tick_config.c
new file mode 100644 (file)
index 0000000..65debb4
--- /dev/null
@@ -0,0 +1,158 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/* FreeRTOS includes. */\r
+#include "FreeRTOS.h"\r
+#include "Task.h"\r
+\r
+/* Library includes. */\r
+#include "board.h"\r
+\r
+/*\r
+ * The FreeRTOS tick handler.  This function must be installed as the handler\r
+ * for the timer used to generate the tick interrupt.  Note that the interrupt\r
+ * generated by the PIT is shared by other system peripherals, so if the PIT is\r
+ * used for Tick generation then FreeRTOS_Tick_Handler() can only be installed\r
+ * directly as the PIT handler if no other system interrupts need to be\r
+ * serviced.  If system interrupts other than the PIT need to be serviced then\r
+ * install System_Handler() as the PIT interrupt handler in place of\r
+ * FreeRTOS_Tick_Handler() and add additional interrupt processing into the\r
+ * implementation of System_Handler().\r
+ */\r
+extern void FreeRTOS_Tick_Handler( void );\r
+static void System_Handler( void );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+static void System_Handler( void )\r
+{\r
+       /* See the comments above the function prototype in this file. */\r
+       FreeRTOS_Tick_Handler();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * The application must provide a function that configures a peripheral to\r
+ * create the FreeRTOS tick interrupt, then define configSETUP_TICK_INTERRUPT()\r
+ * in FreeRTOSConfig.h to call the function.  This file contains a function\r
+ * that is suitable for use on the Atmel SAMA5.\r
+ */\r
+\r
+/*_RB_*/\r
+uint32_t IRQ_ConfigureIT(uint32_t source,\r
+                     uint32_t mode,\r
+                     void( *handler )( void ));\r
+\r
+uint32_t IRQ_ConfigureIT(uint32_t source,\r
+                     uint32_t mode,\r
+                     void( *handler )( void ))\r
+{\r
+    uint32_t prevHandler;\r
+    PMC->PMC_PCER1 = (1 << ( ID_IRQ - 32));\r
+    AIC->AIC_SSR  = source;\r
+    prevHandler = AIC->AIC_SVR;\r
+    /* Disable the interrupt first */\r
+    AIC->AIC_IDCR = AIC_IDCR_INTD;\r
+    /* Configure mode and handler */\r
+    AIC->AIC_SMR  = mode;\r
+    AIC->AIC_SVR = (uint32_t) handler;\r
+    /* Clear interrupt */\r
+    AIC->AIC_ICCR = AIC_ICCR_INTCLR;\r
+    return prevHandler;\r
+}\r
+\r
+\r
+void vConfigureTickInterrupt( void )\r
+{\r
+       /* NOTE:  The PIT interrupt is cleared by the configCLEAR_TICK_INTERRUPT()\r
+       macro in FreeRTOSConfig.h. */\r
+\r
+       /* Enable the PIT clock. */\r
+       PMC->PMC_PCER0 = 1 << ID_PIT;\r
+\r
+       /* Initialize the PIT to the desired frequency - specified in uS. */\r
+       PIT_Init( 1000000UL / configTICK_RATE_HZ, ( BOARD_MCK / 2 ) / 1000000 );\r
+\r
+       /* Configure interrupt on PIT.  Note this is on the system interrupt, which\r
+       is shared with other system peripherals, so System_Handler() must be\r
+       installed in place of FreeRTOS_Tick_Handler() if other system handlers are\r
+       required.  The tick must be given the lowest priority (0 in the SAMA5 AIC) */\r
+       IRQ_ConfigureIT( ID_PIT, 0, FreeRTOS_Tick_Handler );\r
+       /* See commend directly above IRQ_ConfigureIT( ID_PIT, 0, System_Handler ); */\r
+//_RB_ IRQ_EnableIT( ID_PIT );\r
+AIC_EnableIT( ID_PIT );\r
+\r
+       PIT_EnableIT();\r
+\r
+       /* Enable the pit. */\r
+       PIT_Enable();\r
+\r
+       /* Prevent compiler warnings in the case where System_Handler() is not used\r
+       as the handler.  See the comments above the System_Handler() function\r
+       prototype at the top of this file. */\r
+       ( void ) System_Handler;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.c
new file mode 100644 (file)
index 0000000..0bc907c
--- /dev/null
@@ -0,0 +1,203 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/*\r
+ * This file initialises three timers as follows:\r
+ *\r
+ * TC0 channels 0 and 1 provide the interrupts that are used with the IntQ\r
+ * standard demo tasks, which test interrupt nesting and using queues from\r
+ * interrupts.  As the interrupt is shared the nesting achieved is not as deep\r
+ * as normal when this test is executed, but still worth while.\r
+ *\r
+ * TC2 channel 0 provides a much higher frequency timer that tests the nesting\r
+ * of interrupts that don't use the FreeRTOS API.  For convenience, the high\r
+ * frequency timer also keeps a count of the number of time it executes, and the\r
+ * count is used as the time base for the run time stats (which can be viewed\r
+ * through the CLI).\r
+ *\r
+ * All the timers can nest with the tick interrupt - creating a maximum\r
+ * interrupt nesting depth of 3 (normally 4, if the first two timers used\r
+ * separate interrupts).\r
+ *\r
+ */\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+\r
+/* Demo includes. */\r
+#include "IntQueueTimer.h"\r
+#include "IntQueue.h"\r
+\r
+/* Library includes. */\r
+#include "board.h"\r
+\r
+/* The frequencies at which the first two timers expire are slightly offset to\r
+ensure they don't remain synchronised.  The frequency of the highest priority\r
+interrupt is 20 times faster so really hammers the interrupt entry and exit\r
+code. */\r
+#define tmrTIMER_0_FREQUENCY   ( 2000UL )\r
+#define tmrTIMER_1_FREQUENCY   ( 2003UL )\r
+#define tmrTIMER_2_FREQUENCY   ( 20000UL )\r
+\r
+/* The channels used in TC0 for generating the three interrupts. */\r
+#define tmrTC0_CHANNEL_0               0 /* At tmrTIMER_0_FREQUENCY */\r
+#define tmrTC0_CHANNEL_1               1 /* At tmrTIMER_1_FREQUENCY */\r
+#define tmrTC1_CHANNEL_0               0 /* At tmrTIMER_2_FREQUENCY */\r
+\r
+/* The bit within the RC_SR register that indicates an RC compare. */\r
+#define tmrRC_COMPARE                  ( 1UL << 4UL )\r
+\r
+/* The high frequency interrupt given the highest priority or all.  The priority\r
+of the lower frequency timers must still be above the tick interrupt priority. */\r
+#define tmrLOWER_PRIORITY              1\r
+#define tmrHIGHER_PRIORITY             5\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Handlers for the two timer peripherals - two channels are used in the TC0\r
+timer. */\r
+static void prvTC0_Handler( void );\r
+static void prvTC1_Handler( void );\r
+\r
+/* Used to provide a means of ensuring the intended interrupt nesting depth is\r
+actually being reached. */\r
+extern uint32_t ulPortInterruptNesting;\r
+static uint32_t ulMaxRecordedNesting = 0;\r
+\r
+/* For convenience the high frequency timer increments a variable that is then\r
+used as the time base for the run time stats. */\r
+volatile uint32_t ulHighFrequencyTimerCounts = 0;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vInitialiseTimerForIntQueueTest( void )\r
+{\r
+const uint32_t ulDivider = 128UL, ulTCCLKS = 3UL;\r
+\r
+       /* Enable the TC clocks. */\r
+       PMC->PMC_PCER0 = 1 << ID_TC0;\r
+       PMC->PMC_PCER0 = 1 << ID_TC1;\r
+\r
+       /* Configure TC0 channel 0 for a tmrTIMER_0_FREQUENCY frequency and trigger\r
+       on RC compare. */\r
+       TC_Configure( TC0, tmrTC0_CHANNEL_0, ulTCCLKS | TC_CMR_CPCTRG );\r
+       TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_RC = BOARD_MCK / ( tmrTIMER_0_FREQUENCY * ulDivider );\r
+       TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_IER = TC_IER_CPCS;\r
+\r
+       /* Configure TC0 channel 1 for a tmrTIMER_1_FREQUENCY frequency and trigger\r
+       on RC compare. */\r
+       TC_Configure( TC0, tmrTC0_CHANNEL_1, ulTCCLKS | TC_CMR_CPCTRG );\r
+       TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_RC = BOARD_MCK / ( tmrTIMER_1_FREQUENCY * ulDivider );\r
+       TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_IER = TC_IER_CPCS;\r
+\r
+       /* Configure TC1 channel 0 tmrTIMER_2_FREQUENCY frequency and trigger on\r
+       RC compare. */\r
+       TC_Configure( TC1, tmrTC1_CHANNEL_0, ulTCCLKS | TC_CMR_CPCTRG );\r
+       TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_RC = BOARD_MCK / ( tmrTIMER_2_FREQUENCY * ulDivider );\r
+       TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_IER = TC_IER_CPCS;\r
+\r
+       /* Enable interrupts and start the timers. */\r
+       IRQ_ConfigureIT( ID_TC0, tmrLOWER_PRIORITY, prvTC0_Handler );\r
+       IRQ_ConfigureIT( ID_TC1, tmrHIGHER_PRIORITY, prvTC1_Handler );\r
+       IRQ_EnableIT( ID_TC0 );\r
+       IRQ_EnableIT( ID_TC1 );\r
+       TC_Start( TC0, tmrTC0_CHANNEL_0 );\r
+       TC_Start( TC0, tmrTC0_CHANNEL_1 );\r
+       TC_Start( TC1, tmrTC1_CHANNEL_0 );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvTC0_Handler( void )\r
+{\r
+    /* Read will clear the status bit. */\r
+       if( ( TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_SR & tmrRC_COMPARE ) != 0 )\r
+       {\r
+               portYIELD_FROM_ISR( xFirstTimerHandler() );\r
+       }\r
+\r
+       if( ( TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_SR & tmrRC_COMPARE ) != 0 )\r
+       {\r
+               portYIELD_FROM_ISR( xSecondTimerHandler() );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvTC1_Handler( void )\r
+{\r
+volatile uint32_t ulDummy;\r
+\r
+    /* Dummy read to clear status bit. */\r
+    ulDummy = TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_SR;\r
+\r
+       /* Latch the maximum nesting count. */\r
+       if( ulPortInterruptNesting > ulMaxRecordedNesting )\r
+       {\r
+               ulMaxRecordedNesting = ulPortInterruptNesting;\r
+       }\r
+\r
+       /* Keep a count of the number of interrupts to use as a time base for the\r
+       run-time stats. */\r
+       ulHighFrequencyTimerCounts++;\r
+}\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.h b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/IntQueueTimer.h
new file mode 100644 (file)
index 0000000..0afe32a
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+#ifndef INT_QUEUE_TIMER_H\r
+#define INT_QUEUE_TIMER_H\r
+\r
+void vInitialiseTimerForIntQueueTest( void );\r
+BaseType_t xTimer0Handler( void );\r
+BaseType_t xTimer1Handler( void );\r
+\r
+#endif\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/main_full.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/main_full.c
new file mode 100644 (file)
index 0000000..99a0563
--- /dev/null
@@ -0,0 +1,523 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/******************************************************************************\r
+ * NOTE 1:  This project provides two demo applications.  A simple blinky style\r
+ * project, and a more comprehensive test and demo application.  The\r
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting in main.c is used to select\r
+ * between the two.  See the notes on using mainCREATE_SIMPLE_BLINKY_DEMO_ONLY\r
+ * in main.c.  This file implements the comprehensive test and demo version.\r
+ *\r
+ * NOTE 2:  This file only contains the source code that is specific to the\r
+ * full demo.  Generic functions, such FreeRTOS hook functions, and functions\r
+ * required to configure the hardware, are defined in main.c.\r
+ *\r
+ ******************************************************************************\r
+ *\r
+ * main_full() creates all the demo application tasks and software timers, then\r
+ * starts the scheduler.  The web documentation provides more details of the\r
+ * standard demo application tasks, which provide no particular functionality,\r
+ * but do provide a good example of how to use the FreeRTOS API.\r
+ *\r
+ * In addition to the standard demo tasks, the following tasks and tests are\r
+ * defined and/or created within this file:\r
+ *\r
+ * "FreeRTOS+CLI command console" -  The command console is access using the USB\r
+ * CDC driver provided by Atmel.  It is accessed through the USB connector\r
+ * marked J6 SAMA5D3 Xplained board.  Type "help" to see a list of registered\r
+ * commands.  The FreeRTOS+CLI license is different to the FreeRTOS license, see\r
+ * http://www.FreeRTOS.org/cli for license and usage details.  The default baud\r
+ * rate is 115200.\r
+ *\r
+ * "Reg test" tasks - These fill both the core and floating point registers with\r
+ * known values, then check that each register maintains its expected value for\r
+ * the lifetime of the task.  Each task uses a different set of values.  The reg\r
+ * test tasks execute with a very low priority, so get preempted very\r
+ * frequently.  A register containing an unexpected value is indicative of an\r
+ * error in the context switching mechanism.\r
+ *\r
+ * "Check" task - The check task period is initially set to three seconds.  The\r
+ * task checks that all the standard demo tasks, and the register check tasks,\r
+ * are not only still executing, but are executing without reporting any errors.\r
+ * If the check task discovers that a task has either stalled, or reported an\r
+ * error, then it changes its own execution period from the initial three\r
+ * seconds, to just 200ms.  The check task also toggles an LED each time it is\r
+ * called.  This provides a visual indication of the system status:  If the LED\r
+ * toggles every three seconds, then no issues have been discovered.  If the LED\r
+ * toggles every 200ms, then an issue has been discovered with at least one\r
+ * task.\r
+ */\r
+\r
+/* Standard includes. */\r
+#include <stdio.h>\r
+\r
+/* Kernel includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "timers.h"\r
+#include "semphr.h"\r
+\r
+/* Standard demo application includes. */\r
+#include "flop.h"\r
+#include "semtest.h"\r
+#include "dynamic.h"\r
+#include "BlockQ.h"\r
+#include "blocktim.h"\r
+#include "countsem.h"\r
+#include "GenQTest.h"\r
+#include "recmutex.h"\r
+#include "death.h"\r
+#include "partest.h"\r
+#include "comtest2.h"\r
+#include "serial.h"\r
+#include "TimerDemo.h"\r
+#include "QueueOverwrite.h"\r
+#include "IntQueue.h"\r
+#include "EventGroupsDemo.h"\r
+\r
+/* Priorities for the demo application tasks. */\r
+#define mainSEM_TEST_PRIORITY                          ( tskIDLE_PRIORITY + 1UL )\r
+#define mainBLOCK_Q_PRIORITY                           ( tskIDLE_PRIORITY + 2UL )\r
+#define mainCREATOR_TASK_PRIORITY                      ( tskIDLE_PRIORITY + 3UL )\r
+#define mainFLOP_TASK_PRIORITY                         ( tskIDLE_PRIORITY )\r
+#define mainCDC_COMMAND_CONSOLE_STACK_SIZE     ( configMINIMAL_STACK_SIZE * 2UL )\r
+#define mainCOM_TEST_TASK_PRIORITY                     ( tskIDLE_PRIORITY + 2 )\r
+#define mainCHECK_TASK_PRIORITY                                ( configMAX_PRIORITIES - 1 )\r
+#define mainQUEUE_OVERWRITE_PRIORITY           ( tskIDLE_PRIORITY )\r
+\r
+/* The initial priority used by the UART command console task. */\r
+#define mainUART_COMMAND_CONSOLE_TASK_PRIORITY ( configMAX_PRIORITIES - 2 )\r
+\r
+/* The LED used by the check timer. */\r
+#define mainCHECK_LED                                          ( 0 )\r
+\r
+/* A block time of zero simply means "don't block". */\r
+#define mainDONT_BLOCK                                         ( 0UL )\r
+\r
+/* The period after which the check timer will expire, in ms, provided no errors\r
+have been reported by any of the standard demo tasks.  ms are converted to the\r
+equivalent in ticks using the portTICK_PERIOD_MS constant. */\r
+#define mainNO_ERROR_CHECK_TASK_PERIOD         ( 3000UL / portTICK_PERIOD_MS )\r
+\r
+/* The period at which the check timer will expire, in ms, if an error has been\r
+reported in one of the standard demo tasks.  ms are converted to the equivalent\r
+in ticks using the portTICK_PERIOD_MS constant. */\r
+#define mainERROR_CHECK_TASK_PERIOD            ( 200UL / portTICK_PERIOD_MS )\r
+\r
+/* Parameters that are passed into the register check tasks solely for the\r
+purpose of ensuring parameters are passed into tasks correctly. */\r
+#define mainREG_TEST_TASK_1_PARAMETER          ( ( void * ) 0x12345678 )\r
+#define mainREG_TEST_TASK_2_PARAMETER          ( ( void * ) 0x87654321 )\r
+\r
+/* The base period used by the timer test tasks. */\r
+#define mainTIMER_TEST_PERIOD                          ( 50 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Called by main() to run the full demo (as opposed to the blinky demo) when\r
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.\r
+ */\r
+void main_full( void );\r
+\r
+/*\r
+ * The check task, as described at the top of this file.\r
+ */\r
+static void prvCheckTask( void *pvParameters );\r
+\r
+/*\r
+ * Register check tasks, and the tasks used to write over and check the contents\r
+ * of the FPU registers, as described at the top of this file.  The nature of\r
+ * these files necessitates that they are written in an assembly file, but the\r
+ * entry points are kept in the C file for the convenience of checking the task\r
+ * parameter.\r
+ */\r
+static void prvRegTestTaskEntry1( void *pvParameters );\r
+extern void vRegTest1Implementation( void );\r
+static void prvRegTestTaskEntry2( void *pvParameters );\r
+extern void vRegTest2Implementation( void );\r
+\r
+/*\r
+ * Register commands that can be used with FreeRTOS+CLI.  The commands are\r
+ * defined in CLI-Commands.c and File-Related-CLI-Command.c respectively.\r
+ */\r
+extern void vRegisterSampleCLICommands( void );\r
+\r
+/*\r
+ * The task that manages the FreeRTOS+CLI input and output.\r
+ */\r
+extern void vUSBCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );\r
+\r
+/*\r
+ * A high priority task that does nothing other than execute at a pseudo random\r
+ * time to ensure the other test tasks don't just execute in a repeating\r
+ * pattern.\r
+ */\r
+static void prvPseudoRandomiser( void *pvParameters );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The following two variables are used to communicate the status of the\r
+register check tasks to the check task.  If the variables keep incrementing,\r
+then the register check tasks has not discovered any errors.  If a variable\r
+stops incrementing, then an error has been found. */\r
+volatile unsigned long ulRegTest1LoopCounter = 0UL, ulRegTest2LoopCounter = 0UL;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void main_full( void )\r
+{\r
+       /* Start all the other standard demo/test tasks.  They have not particular\r
+       functionality, but do demonstrate how to use the FreeRTOS API and test the\r
+       kernel port. */\r
+       vStartInterruptQueueTasks();\r
+       vStartDynamicPriorityTasks();\r
+       vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
+       vCreateBlockTimeTasks();\r
+       vStartCountingSemaphoreTasks();\r
+       vStartGenericQueueTasks( tskIDLE_PRIORITY );\r
+       vStartRecursiveMutexTasks();\r
+       vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
+       vStartMathTasks( mainFLOP_TASK_PRIORITY );\r
+       vStartTimerDemoTask( mainTIMER_TEST_PERIOD );\r
+       vStartQueueOverwriteTask( mainQUEUE_OVERWRITE_PRIORITY );\r
+       vStartEventGroupTasks();\r
+\r
+       /* Start the tasks that implements the command console on the UART, as\r
+       described above. */\r
+       vUSBCommandConsoleStart( mainCDC_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );\r
+\r
+       /* Register the standard CLI commands. */\r
+       vRegisterSampleCLICommands();\r
+\r
+       /* Create the register check tasks, as described at the top of this     file */\r
+       xTaskCreate( prvRegTestTaskEntry1, "Reg1", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_1_PARAMETER, tskIDLE_PRIORITY, NULL );\r
+       xTaskCreate( prvRegTestTaskEntry2, "Reg2", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_2_PARAMETER, tskIDLE_PRIORITY, NULL );\r
+\r
+       /* Create the task that just adds a little random behaviour. */\r
+       xTaskCreate( prvPseudoRandomiser, "Rnd", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL );\r
+\r
+       /* Create the task that performs the 'check' functionality,     as described at\r
+       the top of this file. */\r
+       xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
+\r
+       /* The set of tasks created by the following function call have to be\r
+       created last as they keep account of the number of tasks they expect to see\r
+       running. */\r
+       vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
+\r
+       /* Start the scheduler. */\r
+       vTaskStartScheduler();\r
+\r
+       /* If all is well, the scheduler will now be running, and the following\r
+       line will never be reached.  If the following line does execute, then\r
+       there was either insufficient FreeRTOS heap memory available for the idle\r
+       and/or timer tasks to be created, or vTaskStartScheduler() was called from\r
+       User mode.  See the memory management section on the FreeRTOS web site for\r
+       more details on the FreeRTOS heap http://www.freertos.org/a00111.html.  The\r
+       mode from which main() is called is set in the C start up code and must be\r
+       a privileged mode (not user mode). */\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvCheckTask( void *pvParameters )\r
+{\r
+TickType_t xDelayPeriod = mainNO_ERROR_CHECK_TASK_PERIOD;\r
+TickType_t xLastExecutionTime;\r
+static unsigned long ulLastRegTest1Value = 0, ulLastRegTest2Value = 0;\r
+unsigned long ulErrorFound = pdFALSE;\r
+\r
+       /* Just to stop compiler warnings. */\r
+       ( void ) pvParameters;\r
+\r
+       /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()\r
+       works correctly. */\r
+       xLastExecutionTime = xTaskGetTickCount();\r
+\r
+       /* Cycle for ever, delaying then checking all the other tasks are still\r
+       operating without error.  The onboard LED is toggled on each iteration.\r
+       If an error is detected then the delay period is decreased from\r
+       mainNO_ERROR_CHECK_TASK_PERIOD to mainERROR_CHECK_TASK_PERIOD.  This has the\r
+       effect of increasing the rate at which the onboard LED toggles, and in so\r
+       doing gives visual feedback of the system status. */\r
+       for( ;; )\r
+       {\r
+               /* Delay until it is time to execute again. */\r
+               vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );\r
+\r
+               /* Check all the demo tasks (other than the flash tasks) to ensure\r
+               that they are all still running, and that none have detected an error. */\r
+               if( xAreIntQueueTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreMathsTaskStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if ( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if ( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if ( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xIsCreateTaskStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreTimerDemoTasksStillRunning( ( TickType_t ) mainNO_ERROR_CHECK_TASK_PERIOD ) != pdPASS )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xIsQueueOverwriteTaskStillRunning() != pdPASS )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               if( xAreEventGroupTasksStillRunning() != pdPASS )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+\r
+               /* Check that the register test 1 task is still running. */\r
+               if( ulLastRegTest1Value == ulRegTest1LoopCounter )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+               ulLastRegTest1Value = ulRegTest1LoopCounter;\r
+\r
+               /* Check that the register test 2 task is still running. */\r
+               if( ulLastRegTest2Value == ulRegTest2LoopCounter )\r
+               {\r
+                       ulErrorFound = pdTRUE;\r
+               }\r
+               ulLastRegTest2Value = ulRegTest2LoopCounter;\r
+\r
+               /* Toggle the check LED to give an indication of the system status.  If\r
+               the LED toggles every mainNO_ERROR_CHECK_TASK_PERIOD milliseconds then\r
+               everything is ok.  A faster toggle indicates an error. */\r
+               vParTestToggleLED( mainCHECK_LED );\r
+\r
+               if( ulErrorFound != pdFALSE )\r
+               {\r
+                       /* An error has been detected in one of the tasks - flash the LED\r
+                       at a higher frequency to give visible feedback that something has\r
+                       gone wrong (it might just be that the loop back connector required\r
+                       by the comtest tasks has not been fitted). */\r
+                       xDelayPeriod = mainERROR_CHECK_TASK_PERIOD;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvRegTestTaskEntry1( void *pvParameters )\r
+{\r
+       /* Although the regtest task is written in assembler, its entry point is\r
+       written in C for convenience of checking the task parameter is being passed\r
+       in correctly. */\r
+       if( pvParameters == mainREG_TEST_TASK_1_PARAMETER )\r
+       {\r
+               /* The reg test task also tests the floating point registers.  Tasks\r
+               that use the floating point unit must call vPortTaskUsesFPU() before\r
+               any floating point instructions are executed. */\r
+               vPortTaskUsesFPU();\r
+\r
+               /* Start the part of the test that is written in assembler. */\r
+               vRegTest1Implementation();\r
+       }\r
+\r
+       /* The following line will only execute if the task parameter is found to\r
+       be incorrect.  The check timer will detect that the regtest loop counter is\r
+       not being incremented and flag an error. */\r
+       vTaskDelete( NULL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvRegTestTaskEntry2( void *pvParameters )\r
+{\r
+       /* Although the regtest task is written in assembler, its entry point is\r
+       written in C for convenience of checking the task parameter is being passed\r
+       in correctly. */\r
+       if( pvParameters == mainREG_TEST_TASK_2_PARAMETER )\r
+       {\r
+               /* The reg test task also tests the floating point registers.  Tasks\r
+               that use the floating point unit must call vPortTaskUsesFPU() before\r
+               any floating point instructions are executed. */\r
+               vPortTaskUsesFPU();\r
+\r
+               /* Start the part of the test that is written in assembler. */\r
+               vRegTest2Implementation();\r
+       }\r
+\r
+       /* The following line will only execute if the task parameter is found to\r
+       be incorrect.  The check timer will detect that the regtest loop counter is\r
+       not being incremented and flag an error. */\r
+       vTaskDelete( NULL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvPseudoRandomiser( void *pvParameters )\r
+{\r
+const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL, ulMinDelay = ( 35 / portTICK_PERIOD_MS ), ulIBit = ( 1UL << 7UL );\r
+volatile uint32_t ulNextRand = ( uint32_t ) &pvParameters, ulValue;\r
+\r
+       /* A few minor port tests before entering the randomiser loop.\r
+\r
+       At this point interrupts should be enabled. */\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == 0 );\r
+\r
+       /* The CPU does not have an interrupt mask register, so critical sections\r
+       have to globally disable interrupts.  Therefore entering a critical section\r
+       should leave the I bit set. */\r
+       taskENTER_CRITICAL();\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );\r
+\r
+       /* Nest the critical sections. */\r
+       taskENTER_CRITICAL();\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );\r
+\r
+       /* After yielding the I bit should still be set.  Note yielding is possible\r
+       in a critical section as each task maintains its own critical section\r
+       nesting count so some tasks are in critical sections and others are not -\r
+       however this is *not* something task code should do! */\r
+       taskYIELD();\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );\r
+\r
+       /* The I bit should not be cleared again until both critical sections have\r
+       been exited. */\r
+       taskEXIT_CRITICAL();\r
+       taskYIELD();\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );\r
+       taskEXIT_CRITICAL();\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == 0 );\r
+       taskYIELD();\r
+       configASSERT( ( __get_CPSR() & ulIBit ) == 0 );\r
+\r
+       /* This task does nothing other than ensure there is a little bit of\r
+       disruption in the scheduling pattern of the other tasks.  Normally this is\r
+       done by generating interrupts at pseudo random times. */\r
+       for( ;; )\r
+       {\r
+               ulNextRand = ( ulMultiplier * ulNextRand ) + ulIncrement;\r
+               ulValue = ( ulNextRand >> 16UL ) & 0xffUL;\r
+\r
+               if( ulValue < ulMinDelay )\r
+               {\r
+                       ulValue = ulMinDelay;\r
+               }\r
+\r
+               vTaskDelay( ulValue );\r
+\r
+               while( ulValue > 0 )\r
+               {\r
+                       __asm volatile( "NOP" );\r
+                       __asm volatile( "NOP" );\r
+                       __asm volatile( "NOP" );\r
+                       __asm volatile( "NOP" );\r
+\r
+                       ulValue--;\r
+               }\r
+       }\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/reg_test.S b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/Full_Demo/reg_test.S
new file mode 100644 (file)
index 0000000..e7772b8
--- /dev/null
@@ -0,0 +1,468 @@
+;/*\r
+;    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+;\r
+;    FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME.  PLEASE VISIT\r
+;    http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+;\r
+;    ***************************************************************************\r
+;     *                                                                       *\r
+;     *    FreeRTOS tutorial books are available in pdf and paperback.        *\r
+;     *    Complete, revised, and edited pdf reference manuals are also       *\r
+;     *    available.                                                         *\r
+;     *                                                                       *\r
+;     *    Purchasing FreeRTOS documentation will not only help you, by       *\r
+;     *    ensuring you get running as quickly as possible and with an        *\r
+;     *    in-depth knowledge of how to use FreeRTOS, it will also help       *\r
+;     *    the FreeRTOS project to continue with its mission of providing     *\r
+;     *    professional grade, cross platform, de facto standard solutions    *\r
+;     *    for microcontrollers - completely free of charge!                  *\r
+;     *                                                                       *\r
+;     *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *\r
+;     *                                                                       *\r
+;     *    Thank you for using FreeRTOS, and thank you for your support!      *\r
+;     *                                                                       *\r
+;    ***************************************************************************\r
+;\r
+;\r
+;    This file is part of the FreeRTOS distribution.\r
+;\r
+;    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+;    the terms of the GNU General Public License (version 2) as published by the\r
+;    Free Software Foundation AND MODIFIED BY the FreeRTOS exception.\r
+;\r
+;    >>>>>>NOTE<<<<<< The modification to the GPL is included to allow you to\r
+;    distribute a combined work that includes FreeRTOS without being obliged to\r
+;    provide the source code for proprietary components outside of the FreeRTOS\r
+;    kernel.\r
+;\r
+;    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+;    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+;    FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\r
+;    details. You should have received a copy of the GNU General Public License\r
+;    and the FreeRTOS license exception along with FreeRTOS; if not itcan be\r
+;    viewed here: http://www.freertos.org/a00114.html and also obtained by\r
+;    writing to Real Time Engineers Ltd., contact details for whom are available\r
+;    on the FreeRTOS WEB site.\r
+;\r
+;    1 tab == 4 spaces!\r
+;\r
+;    ***************************************************************************\r
+;     *                                                                       *\r
+;     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+;     *    not run, what could be wrong?"                                     *\r
+;     *                                                                       *\r
+;     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+;     *                                                                       *\r
+;    ***************************************************************************\r
+;\r
+;\r
+;    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+;    license and Real Time Engineers Ltd. contact details.\r
+;\r
+;    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+;    including FreeRTOS+Trace - an indispensable productivity tool, and our new\r
+;    fully thread aware and reentrant UDP/IP stack.\r
+;\r
+;    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+;    Integrity Systems, who sell the code with commercial support,\r
+;    indemnification and middleware, under the OpenRTOS brand.\r
+;\r
+;    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+;    engineered and independently SIL3 certified version for use in safety and\r
+;    mission critical applications that require provable dependability.\r
+;*/\r
+\r
+       EXPORT vRegTest1Implementation\r
+       EXPORT vRegTest2Implementation\r
+\r
+       ; This file is built with IAR and ARM compilers.  When the ARM compiler\r
+       ; is used the compiler options must define __IASMARM__ as 0 using the\r
+       ; --predefine "__IASMARM__ SETA 0" command line option.  When compiling\r
+       ; with IAR __IASMARM__ is automatically set to 1 so no additional assembler\r
+       ; options are required.\r
+       SECTION .text:CODE:ROOT(2)\r
+       ARM\r
+\r
+       ; This function is explained in the comments at the top of main-full.c.\r
+vRegTest1Implementation\r
+\r
+       PRESERVE8\r
+       IMPORT ulRegTest1LoopCounter\r
+\r
+       ; Fill each general purpose register with a known value.\r
+       mov             r0,  #0xFF\r
+       mov             r1,  #0x11\r
+       mov             r2,  #0x22\r
+       mov             r3,  #0x33\r
+       mov     r4,  #0x44\r
+       mov     r5,  #0x55\r
+       mov     r6,  #0x66\r
+       mov     r7,  #0x77\r
+       mov     r8,  #0x88\r
+       mov     r9,  #0x99\r
+       mov     r10, #0xAA\r
+       mov     r11, #0xBB\r
+       mov     r12, #0xCC\r
+       mov             r14, #0xEE\r
+\r
+       ; Fill each FPU register with a known value.\r
+       vmov    d0, r0, r1\r
+       vmov    d1, r2, r3\r
+       vmov    d2, r4, r5\r
+       vmov    d3, r6, r7\r
+       vmov    d4, r8, r9\r
+       vmov    d5, r10, r11\r
+       vmov    d6, r0, r1\r
+       vmov    d7, r2, r3\r
+       vmov    d8, r4, r5\r
+       vmov    d9, r6, r7\r
+       vmov    d10, r8, r9\r
+       vmov    d11, r10, r11\r
+       vmov    d12, r0, r1\r
+       vmov    d13, r2, r3\r
+       vmov    d14, r4, r5\r
+       vmov    d15, r6, r7\r
+\r
+       ; Loop, checking each itteration that each register still contains the\r
+       ; expected value.\r
+reg1_loop\r
+       ; Yield to increase test coverage\r
+       svc 0\r
+\r
+       ; Check all the VFP registers still contain the values set above.\r
+       ; First save registers that are clobbered by the test.\r
+       push { r0-r1 }\r
+\r
+       vmov    r0, r1, d0\r
+       cmp     r0, #0xFF\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x11\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d1\r
+       cmp     r0, #0x22\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x33\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d2\r
+       cmp     r0, #0x44\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x55\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d3\r
+       cmp     r0, #0x66\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x77\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d4\r
+       cmp     r0, #0x88\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x99\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d5\r
+       cmp     r0, #0xAA\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0xBB\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d6\r
+       cmp     r0, #0xFF\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x11\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d7\r
+       cmp     r0, #0x22\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x33\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d8\r
+       cmp     r0, #0x44\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x55\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d9\r
+       cmp     r0, #0x66\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x77\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d10\r
+       cmp     r0, #0x88\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x99\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d11\r
+       cmp     r0, #0xAA\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0xBB\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d12\r
+       cmp     r0, #0xFF\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x11\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d13\r
+       cmp     r0, #0x22\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x33\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d14\r
+       cmp     r0, #0x44\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x55\r
+       bne     reg1_error_loopf\r
+       vmov    r0, r1, d15\r
+       cmp     r0, #0x66\r
+       bne     reg1_error_loopf\r
+       cmp     r1, #0x77\r
+       bne     reg1_error_loopf\r
+\r
+       ; Restore the registers that were clobbered by the test.\r
+       pop     {r0-r1}\r
+\r
+       ; VFP register test passed.  Jump to the core register test.\r
+       b               reg1_loopf_pass\r
+\r
+reg1_error_loopf\r
+       ; If this line is hit then a VFP register value was found to be\r
+       ; incorrect.\r
+       b reg1_error_loopf\r
+\r
+reg1_loopf_pass\r
+\r
+       ; Test each general purpose register to check that it still contains the\r
+       ; expected known value, jumping to reg1_error_loop if any register contains\r
+       ; an unexpected value.\r
+       cmp             r0, #0xFF\r
+       bne             reg1_error_loop\r
+       cmp             r1, #0x11\r
+       bne             reg1_error_loop\r
+       cmp             r2, #0x22\r
+       bne             reg1_error_loop\r
+       cmp             r3, #0x33\r
+       bne             reg1_error_loop\r
+       cmp             r4, #0x44\r
+       bne             reg1_error_loop\r
+       cmp             r5, #0x55\r
+       bne             reg1_error_loop\r
+       cmp             r6, #0x66\r
+       bne             reg1_error_loop\r
+       cmp             r7, #0x77\r
+       bne             reg1_error_loop\r
+       cmp             r8, #0x88\r
+       bne             reg1_error_loop\r
+       cmp             r9, #0x99\r
+       bne             reg1_error_loop\r
+       cmp             r10, #0xAA\r
+       bne             reg1_error_loop\r
+       cmp             r11, #0xBB\r
+       bne             reg1_error_loop\r
+       cmp             r12, #0xCC\r
+       bne             reg1_error_loop\r
+       cmp             r14, #0xEE\r
+       bne             reg1_error_loop\r
+\r
+       ; Everything passed, increment the loop counter.\r
+       push { r0-r1 }\r
+       ldr     r0, =ulRegTest1LoopCounter\r
+       ldr r1, [r0]\r
+       adds r1, r1, #1\r
+       str r1, [r0]\r
+       pop { r0-r1 }\r
+\r
+       ; Start again.\r
+       b reg1_loop\r
+\r
+reg1_error_loop\r
+       ; If this line is hit then there was an error in a core register value.\r
+       ; The loop ensures the loop counter stops incrementing.\r
+       b reg1_error_loop\r
+       nop\r
+\r
+;/*-----------------------------------------------------------*/\r
+\r
+vRegTest2Implementation\r
+\r
+       PRESERVE8\r
+       IMPORT ulRegTest2LoopCounter\r
+\r
+       ; Put a known value in each register.\r
+       mov             r0,  #0xFF000000\r
+       mov             r1,  #0x11000000\r
+       mov             r2,  #0x22000000\r
+       mov             r3,  #0x33000000\r
+       mov     r4,  #0x44000000\r
+       mov     r5,  #0x55000000\r
+       mov     r6,  #0x66000000\r
+       mov     r7,  #0x77000000\r
+       mov     r8,  #0x88000000\r
+       mov     r9,  #0x99000000\r
+       mov     r10, #0xAA000000\r
+       mov     r11, #0xBB000000\r
+       mov     r12, #0xCC000000\r
+       mov     r14, #0xEE000000\r
+\r
+       ; Likewise the floating point registers\r
+       vmov    d0, r0, r1\r
+       vmov    d1, r2, r3\r
+       vmov    d2, r4, r5\r
+       vmov    d3, r6, r7\r
+       vmov    d4, r8, r9\r
+       vmov    d5, r10, r11\r
+       vmov    d6, r0, r1\r
+       vmov    d7, r2, r3\r
+       vmov    d8, r4, r5\r
+       vmov    d9, r6, r7\r
+       vmov    d10, r8, r9\r
+       vmov    d11, r10, r11\r
+       vmov    d12, r0, r1\r
+       vmov    d13, r2, r3\r
+       vmov    d14, r4, r5\r
+       vmov    d15, r6, r7\r
+\r
+       ; Loop, checking each itteration that each register still contains the\r
+       ; expected value.\r
+reg2_loop\r
+       ; Check all the VFP registers still contain the values set above.\r
+       ; First save registers that are clobbered by the test.\r
+       push    { r0-r1 }\r
+\r
+       vmov    r0, r1, d0\r
+       cmp     r0, #0xFF000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x11000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d1\r
+       cmp     r0, #0x22000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x33000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d2\r
+       cmp     r0, #0x44000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x55000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d3\r
+       cmp     r0, #0x66000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x77000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d4\r
+       cmp     r0, #0x88000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x99000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d5\r
+       cmp     r0, #0xAA000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0xBB000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d6\r
+       cmp     r0, #0xFF000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x11000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d7\r
+       cmp     r0, #0x22000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x33000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d8\r
+       cmp     r0, #0x44000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x55000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d9\r
+       cmp     r0, #0x66000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x77000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d10\r
+       cmp     r0, #0x88000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x99000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d11\r
+       cmp     r0, #0xAA000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0xBB000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d12\r
+       cmp     r0, #0xFF000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x11000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d13\r
+       cmp     r0, #0x22000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x33000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d14\r
+       cmp     r0, #0x44000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x55000000\r
+       bne     reg2_error_loopf\r
+       vmov    r0, r1, d15\r
+       cmp     r0, #0x66000000\r
+       bne     reg2_error_loopf\r
+       cmp     r1, #0x77000000\r
+       bne     reg2_error_loopf\r
+\r
+       ; Restore the registers that were clobbered by the test.\r
+       pop     {r0-r1}\r
+\r
+       ; VFP register test passed.  Jump to the core register test.\r
+       b               reg2_loopf_pass\r
+\r
+reg2_error_loopf\r
+       ; If this line is hit then a VFP register value was found to be\r
+       ; incorrect.\r
+       b               reg2_error_loopf\r
+\r
+reg2_loopf_pass\r
+\r
+       cmp             r0, #0xFF000000\r
+       bne             reg2_error_loop\r
+       cmp             r1, #0x11000000\r
+       bne             reg2_error_loop\r
+       cmp             r2, #0x22000000\r
+       bne             reg2_error_loop\r
+       cmp             r3, #0x33000000\r
+       bne             reg2_error_loop\r
+       cmp             r4, #0x44000000\r
+       bne             reg2_error_loop\r
+       cmp             r5, #0x55000000\r
+       bne             reg2_error_loop\r
+       cmp             r6, #0x66000000\r
+       bne             reg2_error_loop\r
+       cmp             r7, #0x77000000\r
+       bne             reg2_error_loop\r
+       cmp             r8, #0x88000000\r
+       bne             reg2_error_loop\r
+       cmp             r9, #0x99000000\r
+       bne             reg2_error_loop\r
+       cmp             r10, #0xAA000000\r
+       bne             reg2_error_loop\r
+       cmp             r11, #0xBB000000\r
+       bne             reg2_error_loop\r
+       cmp             r12, #0xCC000000\r
+       bne             reg2_error_loop\r
+       cmp     r14, #0xEE000000\r
+       bne             reg2_error_loop\r
+\r
+       ; Everything passed, increment the loop counter.\r
+       push    { r0-r1 }\r
+       ldr             r0, =ulRegTest2LoopCounter\r
+       ldr     r1, [r0]\r
+       adds    r1, r1, #1\r
+       str     r1, [r0]\r
+       pop     { r0-r1 }\r
+\r
+       ; Start again.\r
+       b               reg2_loop\r
+\r
+reg2_error_loop\r
+       ; If this line is hit then there was an error in a core register value.\r
+       ; The loop ensures the loop counter stops incrementing.\r
+       b               reg2_error_loop\r
+       nop\r
+\r
+\r
+       END\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/LEDs.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/LEDs.c
new file mode 100644 (file)
index 0000000..41b8d02
--- /dev/null
@@ -0,0 +1,110 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/*-----------------------------------------------------------\r
+ * Simple IO routines to control the LEDs.\r
+ * This file is called ParTest.c for historic reasons.  Originally it stood for\r
+ * PARallel port TEST.\r
+ *-----------------------------------------------------------*/\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+\r
+/* Demo includes. */\r
+#include "partest.h"\r
+\r
+/* Library includes. */\r
+#include "board.h"\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestInitialise( void )\r
+{\r
+       LED_Configure( 0 );\r
+       LED_Configure( 1 );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestSetLED( UBaseType_t uxLED, BaseType_t xValue )\r
+{\r
+       if( xValue == pdTRUE )\r
+       {\r
+               LED_Set( uxLED );\r
+       }\r
+       else\r
+       {\r
+               LED_Clear( uxLED );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
+{\r
+       LED_Toggle( uxLED );\r
+}\r
+\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.ewd b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.ewd
new file mode 100644 (file)
index 0000000..82989b0
--- /dev/null
@@ -0,0 +1,2697 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r
+\r
+<project>\r
+  <fileVersion>2</fileVersion>\r
+  <configuration>\r
+    <name>sram</name>\r
+    <toolchain>\r
+      <name>ARM</name>\r
+    </toolchain>\r
+    <debug>1</debug>\r
+    <settings>\r
+      <name>C-SPY</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>26</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>FlashLoadersV3</name>\r
+          <state>$TOOLKIT_DIR$\config\flashloader\</state>\r
+        </option>\r
+        <option>\r
+          <name>CInput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CEndian</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCVariant</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacFile</name>\r
+          <state>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\resources\ewarm\sama5d4x-ek-sram.mac</state>\r
+        </option>\r
+        <option>\r
+          <name>MemOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MemFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>RunToEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RunToName</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CExtraOptionsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDDFArgumentProducer</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadSuppressDownload</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadVerifyAll</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProductVersion</name>\r
+          <state>5.50.0.51907</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDynDriverList</name>\r
+          <state>JLINK_ID</state>\r
+        </option>\r
+        <option>\r
+          <name>OCLastSavedByProductVersion</name>\r
+          <state>7.20.2.7418</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadAttachToProgram</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>UseFlashLoader</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CLowLevel</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCBE8Slave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacFile2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CDevice</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck1</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck3</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OverrideDefFlashBoard</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse1</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse3</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDeviceConfigMacroFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDebuggerExtraOption</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCAllMTBOptions</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreNrOfCores</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreMaster</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticorePort</name>\r
+          <state>53461</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreWorkspace</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreSlaveProject</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreSlaveConfiguration</name>\r
+          <state></state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ARMSIM_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCSimDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimEnablePSP</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimPspOverrideConfig</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimPspConfigFile</name>\r
+          <state></state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ANGEL_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CCAngelHeartbeat</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommunication</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommBaud</name>\r
+          <version>0</version>\r
+          <state>3</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ANGELTCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoAngelLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AngelLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>CMSISDAP_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCIarProbeScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPResetList</name>\r
+          <version>1</version>\r
+          <state>10</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPHWResetDuration</name>\r
+          <state>300</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPHWResetDelay</name>\r
+          <state>200</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiTargetEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPJtagSpeedList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPRestoreBreakpointsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPUpdateBreakpointsEdit</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchUndef</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchData</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchPrefetch</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchMMERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchNOCPERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCHKERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchSTATERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchBUSERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchINTERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchHARDERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiCPUEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiCPUNumber</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeCfgOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeConfig</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPProbeConfigRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPSelectedCPUBehaviour</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ICpuName</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCJetEmuParams</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>GDBSERVER_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagUpdateBreakpoints</name>\r
+          <state>main</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IARROM_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CRomLogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomLogFileEditB</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomCommBaud</name>\r
+          <version>0</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IJET_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>3</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCIarProbeScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetResetList</name>\r
+          <version>1</version>\r
+          <state>10</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetHWResetDuration</name>\r
+          <state>300</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetHWResetDelay</name>\r
+          <state>200</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetPowerFromProbe</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetPowerRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiTargetEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetScanChainNonARMDevices</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetIRLength</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetJtagSpeedList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetProtocolRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetSwoPin</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetSwoPrescalerList</name>\r
+          <version>1</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetRestoreBreakpointsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetUpdateBreakpointsEdit</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchUndef</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchData</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchPrefetch</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchMMERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchNOCPERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCHKERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchSTATERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchBUSERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchINTERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchHARDERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeCfgOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeConfig</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IjetProbeConfigRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiCPUEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiCPUNumber</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetSelectedCPUBehaviour</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ICpuName</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCJetEmuParams</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>JLINK_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>15</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>JLinkSpeed</name>\r
+          <state>32</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkHWResetDelay</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>JLinkInitialSpeed</name>\r
+          <state>32</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDoJlinkMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCScanChainNonARMDevices</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkIRLength</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkCommRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkTCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkSpeedRadioV2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCUSBDevice</name>\r
+          <version>1</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchUndef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchData</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchPrefetch</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkUpdateBreakpoints</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkResetList</name>\r
+          <version>6</version>\r
+          <state>5</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchMMERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchNOCPERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchCHRERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchSTATERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchBUSERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchINTERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchHARDERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkUsbSerialNo</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCTcpIpAlt</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkTcpIpSerialNo</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockAuto</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockEdit</name>\r
+          <state>2000</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkTraceSource</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkTraceSourceDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkDeviceName</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>LMIFTDI_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>LmiftdiSpeed</name>\r
+          <state>500</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiftdiDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiftdiLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiFtdiInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiFtdiInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>MACRAIGOR_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>3</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>jtag</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuSpeed</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>DoEmuMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuMultiTarget</name>\r
+          <state>0@ARM7TDMI</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuHWReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CEmuCommBaud</name>\r
+          <version>0</version>\r
+          <state>4</state>\r
+        </option>\r
+        <option>\r
+          <name>CEmuCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>jtago</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>UnusedAddr</name>\r
+          <state>0x00800000</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorHWResetDelay</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagUpdateBreakpoints</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>PEMICRO_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCPEMicroAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroInterfaceList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroResetDelay</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroJtagSpeed</name>\r
+          <state>#UNINITIALIZED#</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJPEMicroShowSettings</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroUSBDevice</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroSerialPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJPEMicroTCPIPAutoScanNetwork</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroTCPIP</name>\r
+          <state>10.0.0.1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroCommCmdLineProducer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>RDI_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CRDIDriverDll</name>\r
+          <state>###Uninitialized###</state>\r
+        </option>\r
+        <option>\r
+          <name>CRDILogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRDILogFileEdit</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDIHWReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchUndef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchData</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchPrefetch</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>STLINK_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkResetList</name>\r
+          <version>1</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockAuto</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockEdit</name>\r
+          <state>2000</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>THIRDPARTY_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CThirdPartyDriverDll</name>\r
+          <state>###Uninitialized###</state>\r
+        </option>\r
+        <option>\r
+          <name>CThirdPartyLogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CThirdPartyLogFileEditB</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>XDS100_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCXDS100AttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TIPackageOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>TIPackage</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCXds100InterfaceList</name>\r
+          <version>2</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>BoardFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <debuggerPlugins>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+    </debuggerPlugins>\r
+  </configuration>\r
+  <configuration>\r
+    <name>ddram</name>\r
+    <toolchain>\r
+      <name>ARM</name>\r
+    </toolchain>\r
+    <debug>1</debug>\r
+    <settings>\r
+      <name>C-SPY</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>26</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>FlashLoadersV3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CInput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CEndian</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCVariant</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacFile</name>\r
+          <state>$PROJ_DIR$\..\..\..\..\libraries\libboard_sama5d4x-ek\resources\ewarm\sama5d4x-ek-ddram.mac</state>\r
+        </option>\r
+        <option>\r
+          <name>MemOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MemFile</name>\r
+          <state>$TOOLKIT_DIR$\CONFIG\debugger\Atmel\iosama5d4x.ddf</state>\r
+        </option>\r
+        <option>\r
+          <name>RunToEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RunToName</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CExtraOptionsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDDFArgumentProducer</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadSuppressDownload</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadVerifyAll</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProductVersion</name>\r
+          <state>5.41.2.51798</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDynDriverList</name>\r
+          <state>JLINK_ID</state>\r
+        </option>\r
+        <option>\r
+          <name>OCLastSavedByProductVersion</name>\r
+          <state>6.30.1.53141</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDownloadAttachToProgram</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>UseFlashLoader</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CLowLevel</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCBE8Slave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacFile2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CDevice</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck1</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesSuppressCheck3</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesPath3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OverrideDefFlashBoard</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesOffset3</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse1</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCImagesUse3</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDeviceConfigMacroFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDebuggerExtraOption</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCAllMTBOptions</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreNrOfCores</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreMaster</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticorePort</name>\r
+          <state>53461</state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreWorkspace</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreSlaveProject</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCMulticoreSlaveConfiguration</name>\r
+          <state></state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ARMSIM_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCSimDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimEnablePSP</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimPspOverrideConfig</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCSimPspConfigFile</name>\r
+          <state></state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ANGEL_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CCAngelHeartbeat</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommunication</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommBaud</name>\r
+          <version>0</version>\r
+          <state>3</state>\r
+        </option>\r
+        <option>\r
+          <name>CAngelCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ANGELTCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoAngelLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AngelLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>CMSISDAP_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCIarProbeScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPResetList</name>\r
+          <version>1</version>\r
+          <state>10</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPHWResetDuration</name>\r
+          <state>300</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPHWResetDelay</name>\r
+          <state>200</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiTargetEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPJtagSpeedList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPRestoreBreakpointsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPUpdateBreakpointsEdit</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchUndef</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchData</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchPrefetch</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchMMERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchNOCPERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCHKERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchSTATERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchBUSERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchINTERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchHARDERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiCPUEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPMultiCPUNumber</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeCfgOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeConfig</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPProbeConfigRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CMSISDAPSelectedCPUBehaviour</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ICpuName</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCJetEmuParams</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>GDBSERVER_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagUpdateBreakpoints</name>\r
+          <state>main</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IARROM_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CRomLogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomLogFileEditB</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRomCommBaud</name>\r
+          <version>0</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IJET_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>3</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCIarProbeScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetResetList</name>\r
+          <version>1</version>\r
+          <state>10</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetHWResetDuration</name>\r
+          <state>300</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetHWResetDelay</name>\r
+          <state>200</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetPowerFromProbe</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetPowerRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiTargetEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetScanChainNonARMDevices</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetIRLength</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetJtagSpeedList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetProtocolRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetSwoPin</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetSwoPrescalerList</name>\r
+          <version>1</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetRestoreBreakpointsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetUpdateBreakpointsEdit</name>\r
+          <state>_call_main</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchUndef</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchData</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchPrefetch</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>RDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchMMERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchNOCPERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchCHKERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchSTATERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchBUSERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchINTERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchHARDERR</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeCfgOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCProbeConfig</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IjetProbeConfigRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiCPUEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetMultiCPUNumber</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IjetSelectedCPUBehaviour</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ICpuName</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OCJetEmuParams</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>JLINK_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>15</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>JLinkSpeed</name>\r
+          <state>100</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkHWResetDelay</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>JLinkInitialSpeed</name>\r
+          <state>32</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDoJlinkMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCScanChainNonARMDevices</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkIRLength</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkCommRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkTCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkSpeedRadioV2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCUSBDevice</name>\r
+          <version>1</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchUndef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchData</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchPrefetch</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkUpdateBreakpoints</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkResetList</name>\r
+          <version>6</version>\r
+          <state>5</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchCORERESET</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchMMERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchNOCPERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchCHRERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchSTATERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchBUSERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchINTERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchHARDERR</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCatchDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkScriptFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkUsbSerialNo</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCTcpIpAlt</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJLinkTcpIpSerialNo</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockAuto</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockEdit</name>\r
+          <state>2000</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkTraceSource</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkTraceSourceDummy</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCJLinkDeviceName</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>LMIFTDI_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>LmiftdiSpeed</name>\r
+          <state>500</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiftdiDoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiftdiLogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiFtdiInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLmiFtdiInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>MACRAIGOR_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>3</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>jtag</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuSpeed</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TCPIP</name>\r
+          <state>aaa.bbb.ccc.ddd</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>DoEmuMultiTarget</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuMultiTarget</name>\r
+          <state>0@ARM7TDMI</state>\r
+        </option>\r
+        <option>\r
+          <name>EmuHWReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CEmuCommBaud</name>\r
+          <version>0</version>\r
+          <state>4</state>\r
+        </option>\r
+        <option>\r
+          <name>CEmuCommPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>jtago</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>UnusedAddr</name>\r
+          <state>0x00800000</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorHWResetDelay</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagBreakpointRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagDoUpdateBreakpoints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJTagUpdateBreakpoints</name>\r
+          <state>main</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMacraigorInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>PEMICRO_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCPEMicroAttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroInterfaceList</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroResetDelay</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroJtagSpeed</name>\r
+          <state>#UNINITIALIZED#</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJPEMicroShowSettings</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroUSBDevice</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroSerialPort</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCJPEMicroTCPIPAutoScanNetwork</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroTCPIP</name>\r
+          <state>10.0.0.1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPEMicroCommCmdLineProducer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>RDI_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CRDIDriverDll</name>\r
+          <state>###Uninitialized###</state>\r
+        </option>\r
+        <option>\r
+          <name>CRDILogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CRDILogFileEdit</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDIHWReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchReset</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchUndef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchSWI</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchData</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchPrefetch</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchIRQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRDICatchFIQ</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>STLINK_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceRadio</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkInterfaceCmdLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSTLinkResetList</name>\r
+          <version>1</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCpuClockEdit</name>\r
+          <state>72.0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockAuto</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSwoClockEdit</name>\r
+          <state>2000</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>THIRDPARTY_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CThirdPartyDriverDll</name>\r
+          <state>###Uninitialized###</state>\r
+        </option>\r
+        <option>\r
+          <name>CThirdPartyLogFileCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CThirdPartyLogFileEditB</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>XDS100_ID</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>2</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OCDriverInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OCXDS100AttachSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>TIPackageOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>TIPackage</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCXds100InterfaceList</name>\r
+          <version>2</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>BoardFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>DoLogfile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>LogFile</name>\r
+          <state>$PROJ_DIR$\cspycomm.log</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <debuggerPlugins>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>\r
+        <loadFlag>1</loadFlag>\r
+      </plugin>\r
+      <plugin>\r
+        <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>\r
+        <loadFlag>0</loadFlag>\r
+      </plugin>\r
+    </debuggerPlugins>\r
+  </configuration>\r
+</project>\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.ewp b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.ewp
new file mode 100644 (file)
index 0000000..a150014
--- /dev/null
@@ -0,0 +1,2092 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r
+\r
+<project>\r
+  <fileVersion>2</fileVersion>\r
+  <configuration>\r
+    <name>sram</name>\r
+    <toolchain>\r
+      <name>ARM</name>\r
+    </toolchain>\r
+    <debug>1</debug>\r
+    <settings>\r
+      <name>General</name>\r
+      <archiveVersion>3</archiveVersion>\r
+      <data>\r
+        <version>22</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>Variant</name>\r
+          <version>20</version>\r
+          <state>48</state>\r
+        </option>\r
+        <option>\r
+          <name>ExePath</name>\r
+          <state>sram\bin</state>\r
+        </option>\r
+        <option>\r
+          <name>ObjPath</name>\r
+          <state>sram\obj</state>\r
+        </option>\r
+        <option>\r
+          <name>ListPath</name>\r
+          <state>sram\obj</state>\r
+        </option>\r
+        <option>\r
+          <name>GEndianMode</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>Input variant</name>\r
+          <version>3</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>Input description</name>\r
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>\r
+        </option>\r
+        <option>\r
+          <name>Output variant</name>\r
+          <version>2</version>\r
+          <state>7</state>\r
+        </option>\r
+        <option>\r
+          <name>Output description</name>\r
+          <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>\r
+        </option>\r
+        <option>\r
+          <name>GOutputBinary</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>FPU</name>\r
+          <version>2</version>\r
+          <state>6</state>\r
+        </option>\r
+        <option>\r
+          <name>OGCoreOrChip</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibSelect</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibSelectSlave</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RTDescription</name>\r
+          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>\r
+        </option>\r
+        <option>\r
+          <name>OGProductVersion</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>OGLastSavedByProductVersion</name>\r
+          <state>7.20.2.7418</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralEnableMisra</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraVerbose</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGChipSelectEditMenu</name>\r
+          <state>Default       None</state>\r
+        </option>\r
+        <option>\r
+          <name>GenLowLevelInterface</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GEndianModeBE</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OGBufferedTerminalOutput</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GenStdoutInterface</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraRules98</name>\r
+          <version>0</version>\r
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraVer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraRules04</name>\r
+          <version>0</version>\r
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>RTConfigPath2</name>\r
+          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>\r
+        </option>\r
+        <option>\r
+          <name>GFPUCoreSlave</name>\r
+          <version>20</version>\r
+          <state>48</state>\r
+        </option>\r
+        <option>\r
+          <name>GBECoreSlave</name>\r
+          <version>20</version>\r
+          <state>48</state>\r
+        </option>\r
+        <option>\r
+          <name>OGUseCmsis</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGUseCmsisDspLib</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibThreads</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ICCARM</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>31</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CCOptimizationNoSizeConstraints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDefines</name>\r
+          <state>sama5d4x</state>\r
+          <state>sram</state>\r
+          <state>TRACE_LEVEL=0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocComments</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCMnemonics</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCMessages</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListAssFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListAssSource</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCEnableRemarks</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagSuppress</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagRemark</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagWarning</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagError</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCObjPrefix</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCAllowList</name>\r
+          <version>1</version>\r
+          <state>00000000</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDebugInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IEndianMode</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IExtraOptionsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCLangConformance</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSignedPlainChar</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRequirePrototypes</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMultibyteSupport</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagWarnAreErr</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCompilerRuntimeInfo</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OutputFile</name>\r
+          <state>$FILE_BNAME$.o</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLibConfigHeader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>PreInclude</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCIncludePath2</name>\r
+          <state>$PROJ_DIR$/AtmelFiles/libboard_sama5d4x-ek</state>\r
+          <state>$PROJ_DIR$/AtmelFiles/libchip_sama5d4x</state>\r
+          <state>$PROJ_DIR$/AtmelFiles/libchip_sama5d4x/include</state>\r
+          <state>$PROJ_DIR$/.</state>\r
+          <state>$PROJ_DIR$\..\..\Source\include</state>\r
+          <state>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC</state>\r
+          <state>$PROJ_DIR$\..\Common\include</state>\r
+          <state>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-CLI</state>\r
+        </option>\r
+        <option>\r
+          <name>CCStdIncCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCodeSection</name>\r
+          <state>SOFTPACK</state>\r
+        </option>\r
+        <option>\r
+          <name>IInterwork2</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IProcessorMode2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptLevel</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptStrategy</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptLevelSlave</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraRules98</name>\r
+          <version>0</version>\r
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraRules04</name>\r
+          <version>0</version>\r
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndRopi</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndRwpi</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndNoDynInit</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccLang</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCDialect</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccAllowVLA</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCppDialect</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccExceptions</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccRTTI</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccStaticDestr</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCppInlineSemantics</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCmsis</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccFloatSemantics</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCNoLiteralPool</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptStrategySlave</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCGuardCalls</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>AARM</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>9</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>AObjPrefix</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AEndian</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>ACaseSensitivity</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacroChars</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnWhat</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnOne</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnRange1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnRange2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>ADebug</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AltRegisterNames</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ADefines</name>\r
+          <state>sama5d4x</state>\r
+          <state>sram</state>\r
+          <state>__ASSEMBLY__</state>\r
+        </option>\r
+        <option>\r
+          <name>AList</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AListHeader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AListing</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>Includes</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacDefs</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacExps</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacExec</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OnlyAssed</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MultiLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>PageLengthCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>PageLength</name>\r
+          <state>80</state>\r
+        </option>\r
+        <option>\r
+          <name>TabSpacing</name>\r
+          <state>8</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefDefines</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefInternal</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefDual</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AOutputFile</name>\r
+          <state>$FILE_BNAME$.o</state>\r
+        </option>\r
+        <option>\r
+          <name>AMultibyteSupport</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ALimitErrorsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ALimitErrorsEdit</name>\r
+          <state>100</state>\r
+        </option>\r
+        <option>\r
+          <name>AIgnoreStdInclude</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AUserIncludes</name>\r
+          <state>$PROJ_DIR$/.</state>\r
+        </option>\r
+        <option>\r
+          <name>AExtraOptionsCheckV2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AExtraOptionsV2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AsmNoLiteralPool</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>OBJCOPY</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OOCOutputFormat</name>\r
+          <version>2</version>\r
+          <state>2</state>\r
+        </option>\r
+        <option>\r
+          <name>OCOutputOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCOutputFile</name>\r
+          <state>sram.bin</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCCommandLineProducer</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCObjCopyEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>CUSTOM</name>\r
+      <archiveVersion>3</archiveVersion>\r
+      <data>\r
+        <extensions></extensions>\r
+        <cmdline></cmdline>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>BICOMP</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data/>\r
+    </settings>\r
+    <settings>\r
+      <name>BUILDACTION</name>\r
+      <archiveVersion>1</archiveVersion>\r
+      <data>\r
+        <prebuild></prebuild>\r
+        <postbuild></postbuild>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ILINK</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>16</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>IlinkLibIOConfig</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>XLinkMisraHandler</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkInputFileSlave</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOutputFile</name>\r
+          <state>sram.out</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkDebugInfoEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkKeepSymbols</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinaryFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinarySymbol</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinarySegment</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinaryAlign</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkDefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkConfigDefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkMapFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogInitialization</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogModule</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogSection</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogVeneer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfFile</name>\r
+          <state>$PROJ_DIR$/AtmelFiles\libboard_sama5d4x-ek\resources\ewarm\sama5d4x\sram.icf</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfFileSlave</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkEnableRemarks</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkSuppressDiags</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsRem</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsWarn</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsErr</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkWarningsAreErrors</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkUseExtraOptions</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLowLevelInterfaceSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkAutoLibEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkAdditionalLibs</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOverrideProgramEntryLabel</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkProgramEntryLabelSelect</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkProgramEntryLabel</name>\r
+          <state>resetHandler</state>\r
+        </option>\r
+        <option>\r
+          <name>DoFill</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerByte</name>\r
+          <state>0xFF</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerStart</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerEnd</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcSize</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcAlign</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcPoly</name>\r
+          <state>0x11021</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcCompl</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcBitOrder</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcInitialValue</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>DoCrc</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkBE8Slave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkBufferedTerminalOutput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStdoutInterfaceSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcFullSize</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIElfToolPostProcess</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogAutoLibSelect</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogRedirSymbols</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogUnusedFragments</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCrcReverseByteOrder</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCrcUseAsInput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptInline</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptExceptionsAllow</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptExceptionsForce</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCmsis</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptMergeDuplSections</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptUseVfe</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptForceVfe</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStackAnalysisEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStackControlFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStackCallGraphFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CrcAlgorithm</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcUnitSize</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkThreadsSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IARCHIVE</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>IarchiveInputs</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IarchiveOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IarchiveOutput</name>\r
+          <state>###Unitialized###</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>BILINK</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data/>\r
+    </settings>\r
+  </configuration>\r
+  <configuration>\r
+    <name>ddram</name>\r
+    <toolchain>\r
+      <name>ARM</name>\r
+    </toolchain>\r
+    <debug>1</debug>\r
+    <settings>\r
+      <name>General</name>\r
+      <archiveVersion>3</archiveVersion>\r
+      <data>\r
+        <version>22</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>Variant</name>\r
+          <version>20</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ExePath</name>\r
+          <state>ddram\bin</state>\r
+        </option>\r
+        <option>\r
+          <name>ObjPath</name>\r
+          <state>ddram\obj</state>\r
+        </option>\r
+        <option>\r
+          <name>ListPath</name>\r
+          <state>ddram\obj</state>\r
+        </option>\r
+        <option>\r
+          <name>GEndianMode</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>Input variant</name>\r
+          <version>3</version>\r
+          <state>6</state>\r
+        </option>\r
+        <option>\r
+          <name>Input description</name>\r
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>\r
+        </option>\r
+        <option>\r
+          <name>Output variant</name>\r
+          <version>2</version>\r
+          <state>5</state>\r
+        </option>\r
+        <option>\r
+          <name>Output description</name>\r
+          <state>No specifier a, A, no specifier n, no float nor long long.</state>\r
+        </option>\r
+        <option>\r
+          <name>GOutputBinary</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>FPU</name>\r
+          <version>2</version>\r
+          <state>5</state>\r
+        </option>\r
+        <option>\r
+          <name>OGCoreOrChip</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibSelect</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibSelectSlave</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>RTDescription</name>\r
+          <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>\r
+        </option>\r
+        <option>\r
+          <name>OGProductVersion</name>\r
+          <state>4.30A</state>\r
+        </option>\r
+        <option>\r
+          <name>OGLastSavedByProductVersion</name>\r
+          <state>6.30.1.53141</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralEnableMisra</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraVerbose</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGChipSelectEditMenu</name>\r
+          <state>sama5d4x      Atmel sama5d4x</state>\r
+        </option>\r
+        <option>\r
+          <name>GenLowLevelInterface</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GEndianModeBE</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OGBufferedTerminalOutput</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GenStdoutInterface</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraRules98</name>\r
+          <version>0</version>\r
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraVer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GeneralMisraRules04</name>\r
+          <version>0</version>\r
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>RTConfigPath2</name>\r
+          <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>\r
+        </option>\r
+        <option>\r
+          <name>GFPUCoreSlave</name>\r
+          <version>20</version>\r
+          <state>47</state>\r
+        </option>\r
+        <option>\r
+          <name>GBECoreSlave</name>\r
+          <version>20</version>\r
+          <state>47</state>\r
+        </option>\r
+        <option>\r
+          <name>OGUseCmsis</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OGUseCmsisDspLib</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>GRuntimeLibThreads</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ICCARM</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>31</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>CCOptimizationNoSizeConstraints</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDefines</name>\r
+          <state>sama5d4x</state>\r
+          <state>ddram</state>\r
+          <state>TRACE_LEVEL=4</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocComments</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPreprocLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCMnemonics</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListCMessages</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListAssFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCListAssSource</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCEnableRemarks</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagSuppress</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagRemark</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagWarning</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagError</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCObjPrefix</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCAllowList</name>\r
+          <version>1</version>\r
+          <state>11111110</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDebugInfo</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IEndianMode</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IExtraOptionsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CCLangConformance</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCSignedPlainChar</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCRequirePrototypes</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCMultibyteSupport</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCDiagWarnAreErr</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCompilerRuntimeInfo</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OutputFile</name>\r
+          <state>$FILE_BNAME$.o</state>\r
+        </option>\r
+        <option>\r
+          <name>CCLibConfigHeader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>PreInclude</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCIncludePath2</name>\r
+          <state>$PROJ_DIR$/../../../../libraries</state>\r
+          <state>$PROJ_DIR$/../../../../libraries/libboard_sama5d4x-ek</state>\r
+          <state>$PROJ_DIR$/../../../../libraries/libchip_sama5d4x</state>\r
+        </option>\r
+        <option>\r
+          <name>CCStdIncCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCCodeSection</name>\r
+          <state>SOFTPACK</state>\r
+        </option>\r
+        <option>\r
+          <name>IInterwork2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IProcessorMode2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptLevel</name>\r
+          <state>3</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptStrategy</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptLevelSlave</name>\r
+          <state>3</state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraRules98</name>\r
+          <version>0</version>\r
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>CompilerMisraRules04</name>\r
+          <version>0</version>\r
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndRopi</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndRwpi</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCPosIndNoDynInit</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccLang</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCDialect</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccAllowVLA</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCppDialect</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccExceptions</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccRTTI</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccStaticDestr</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCppInlineSemantics</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccCmsis</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IccFloatSemantics</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCNoLiteralPool</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CCOptStrategySlave</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CCGuardCalls</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>AARM</name>\r
+      <archiveVersion>2</archiveVersion>\r
+      <data>\r
+        <version>9</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>AObjPrefix</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AEndian</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>ACaseSensitivity</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacroChars</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnWhat</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnOne</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnRange1</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AWarnRange2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>ADebug</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AltRegisterNames</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ADefines</name>\r
+          <state>sama5d4x</state>\r
+          <state>ddram</state>\r
+          <state>__ASSEMBLY__</state>\r
+        </option>\r
+        <option>\r
+          <name>AList</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AListHeader</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AListing</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>Includes</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacDefs</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MacExps</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>MacExec</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>OnlyAssed</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>MultiLine</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>PageLengthCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>PageLength</name>\r
+          <state>80</state>\r
+        </option>\r
+        <option>\r
+          <name>TabSpacing</name>\r
+          <state>8</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRef</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefDefines</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefInternal</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AXRefDual</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AFpuProcessor</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>AOutputFile</name>\r
+          <state>$FILE_BNAME$.o</state>\r
+        </option>\r
+        <option>\r
+          <name>AMultibyteSupport</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ALimitErrorsCheck</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>ALimitErrorsEdit</name>\r
+          <state>100</state>\r
+        </option>\r
+        <option>\r
+          <name>AIgnoreStdInclude</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AUserIncludes</name>\r
+          <state>$PROJ_DIR$\..\..\..\libraries</state>\r
+        </option>\r
+        <option>\r
+          <name>AExtraOptionsCheckV2</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>AExtraOptionsV2</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>AsmNoLiteralPool</name>\r
+          <state>0</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>OBJCOPY</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>1</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>OOCOutputFormat</name>\r
+          <version>2</version>\r
+          <state>2</state>\r
+        </option>\r
+        <option>\r
+          <name>OCOutputOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCOutputFile</name>\r
+          <state>ddram.bin</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCCommandLineProducer</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>OOCObjCopyEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>CUSTOM</name>\r
+      <archiveVersion>3</archiveVersion>\r
+      <data>\r
+        <extensions></extensions>\r
+        <cmdline></cmdline>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>BICOMP</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data/>\r
+    </settings>\r
+    <settings>\r
+      <name>BUILDACTION</name>\r
+      <archiveVersion>1</archiveVersion>\r
+      <data>\r
+        <prebuild></prebuild>\r
+        <postbuild></postbuild>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>ILINK</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>16</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>IlinkLibIOConfig</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>XLinkMisraHandler</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkInputFileSlave</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOutputFile</name>\r
+          <state>ddram.out</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkDebugInfoEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkKeepSymbols</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinaryFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinarySymbol</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinarySegment</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkRawBinaryAlign</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkDefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkConfigDefines</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkMapFile</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogFile</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogInitialization</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogModule</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogSection</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogVeneer</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfOverride</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfFile</name>\r
+          <state>$PROJ_DIR$/../../../../libraries/libboard_sama5d4x-ek/resources/ewarm/sama5d4x/ddram.icf</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIcfFileSlave</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkEnableRemarks</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkSuppressDiags</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsRem</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsWarn</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkTreatAsErr</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkWarningsAreErrors</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkUseExtraOptions</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkExtraOptions</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLowLevelInterfaceSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkAutoLibEnable</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkAdditionalLibs</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOverrideProgramEntryLabel</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkProgramEntryLabelSelect</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkProgramEntryLabel</name>\r
+          <state>resetHandler</state>\r
+        </option>\r
+        <option>\r
+          <name>DoFill</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerByte</name>\r
+          <state>0xFF</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerStart</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>FillerEnd</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcSize</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcAlign</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcPoly</name>\r
+          <state>0x11021</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcCompl</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcBitOrder</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcInitialValue</name>\r
+          <state>0x0</state>\r
+        </option>\r
+        <option>\r
+          <name>DoCrc</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkBE8Slave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkBufferedTerminalOutput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStdoutInterfaceSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcFullSize</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkIElfToolPostProcess</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogAutoLibSelect</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogRedirSymbols</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkLogUnusedFragments</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCrcReverseByteOrder</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCrcUseAsInput</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptInline</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptExceptionsAllow</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptExceptionsForce</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkCmsis</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptMergeDuplSections</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptUseVfe</name>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkOptForceVfe</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStackAnalysisEnable</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStackControlFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkStackCallGraphFile</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>CrcAlgorithm</name>\r
+          <version>0</version>\r
+          <state>1</state>\r
+        </option>\r
+        <option>\r
+          <name>CrcUnitSize</name>\r
+          <version>0</version>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IlinkThreadsSlave</name>\r
+          <state>1</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>IARCHIVE</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data>\r
+        <version>0</version>\r
+        <wantNonLocal>1</wantNonLocal>\r
+        <debug>1</debug>\r
+        <option>\r
+          <name>IarchiveInputs</name>\r
+          <state></state>\r
+        </option>\r
+        <option>\r
+          <name>IarchiveOverride</name>\r
+          <state>0</state>\r
+        </option>\r
+        <option>\r
+          <name>IarchiveOutput</name>\r
+          <state>###Unitialized###</state>\r
+        </option>\r
+      </data>\r
+    </settings>\r
+    <settings>\r
+      <name>BILINK</name>\r
+      <archiveVersion>0</archiveVersion>\r
+      <data/>\r
+    </settings>\r
+  </configuration>\r
+  <group>\r
+    <name>Atmel Files</name>\r
+    <group>\r
+      <name>libboard_sama5d4x-ek</name>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_cstartup_iar.s</name>\r
+        <excluded>\r
+          <configuration>sram</configuration>\r
+        </excluded>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_lowlevel.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_memories.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\dbg_util.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\dbgu_console.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\led.c</name>\r
+      </file>\r
+    </group>\r
+    <group>\r
+      <name>libchip_sama5d4x</name>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\aic.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\cp15\cp15_asm_iar.s</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\pio.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\pio_it.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\pit.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\pmc.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\tc.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\AtmelFiles\libchip_sama5d4x\source\wdt.c</name>\r
+      </file>\r
+    </group>\r
+  </group>\r
+  <group>\r
+    <name>Blinky Demo</name>\r
+    <file>\r
+      <name>$PROJ_DIR$\Blinky_Demo\main_blinky.c</name>\r
+    </file>\r
+  </group>\r
+  <group>\r
+    <name>FreeRTOS Source</name>\r
+    <group>\r
+      <name>portable</name>\r
+      <group>\r
+        <name>MemMang</name>\r
+        <file>\r
+          <name>$PROJ_DIR$\..\..\Source\portable\MemMang\heap_4.c</name>\r
+        </file>\r
+      </group>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\port.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portASM.s</name>\r
+      </file>\r
+    </group>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\event_groups.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\list.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\queue.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\tasks.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\Source\timers.c</name>\r
+    </file>\r
+  </group>\r
+  <group>\r
+    <name>FreeRTOS+CLI</name>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-CLI\FreeRTOS_CLI.c</name>\r
+    </file>\r
+  </group>\r
+  <group>\r
+    <name>Full Demo</name>\r
+    <group>\r
+      <name>Common Demo Tasks</name>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\BlockQ.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\blocktim.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\countsem.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\death.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\EventGroupsDemo.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\flop.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\GenQTest.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\IntQueue.c</name>\r
+        <excluded>\r
+          <configuration>sram</configuration>\r
+        </excluded>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\QueueOverwrite.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\recmutex.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name>\r
+      </file>\r
+      <file>\r
+        <name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>\r
+      </file>\r
+    </group>\r
+    <file>\r
+      <name>$PROJ_DIR$\CDCCommandConsole.c</name>\r
+      <excluded>\r
+        <configuration>sram</configuration>\r
+      </excluded>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\Full_Demo\IntQueueTimer.c</name>\r
+      <excluded>\r
+        <configuration>sram</configuration>\r
+      </excluded>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\Full_Demo\main_full.c</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\Full_Demo\reg_test.S</name>\r
+    </file>\r
+    <file>\r
+      <name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Demo\Common\FreeRTOS_Plus_CLI_Demos\Sample-CLI-commands.c</name>\r
+    </file>\r
+  </group>\r
+  <file>\r
+    <name>$PROJ_DIR$\atmel_main.c</name>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\cstartup_with_FreeRTOS_vectors.s</name>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\FreeRTOS_tick_config.c</name>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\FreeRTOSConfig.h</name>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\LEDs.c</name>\r
+  </file>\r
+  <file>\r
+    <name>$PROJ_DIR$\main.c</name>\r
+  </file>\r
+</project>\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.eww b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/RTOSDemo.eww
new file mode 100644 (file)
index 0000000..aa66692
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r
+\r
+<workspace>\r
+  <project>\r
+    <path>$WS_DIR$\RTOSDemo.ewp</path>\r
+  </project>\r
+  <batchBuild>\r
+    <batchDefinition>\r
+      <name>ddram</name>\r
+      <member>\r
+        <project>libchip_sama5d4x</project>\r
+        <configuration>Debug</configuration>\r
+      </member>\r
+      <member>\r
+        <project>libboard_sama5d4x</project>\r
+        <configuration>Debug</configuration>\r
+      </member>\r
+      <member>\r
+        <project>RTOSDemo</project>\r
+        <configuration>ddram</configuration>\r
+      </member>\r
+    </batchDefinition>\r
+    <batchDefinition>\r
+      <name>sram</name>\r
+      <member>\r
+        <project>libchip_sama5d4x</project>\r
+        <configuration>Debug</configuration>\r
+      </member>\r
+      <member>\r
+        <project>libboard_sama5d4x</project>\r
+        <configuration>Debug</configuration>\r
+      </member>\r
+      <member>\r
+        <project>RTOSDemo</project>\r
+        <configuration>sram</configuration>\r
+      </member>\r
+    </batchDefinition>\r
+    <batchDefinition>\r
+      <name>all</name>\r
+      <member>\r
+        <project>libchip_sama5d4x</project>\r
+        <configuration>Debug</configuration>\r
+      </member>\r
+      <member>\r
+        <project>libchip_sama5d4x</project>\r
+        <configuration>Release</configuration>\r
+      </member>\r
+      <member>\r
+        <project>libboard_sama5d4x</project>\r
+        <configuration>Debug</configuration>\r
+      </member>\r
+      <member>\r
+        <project>libboard_sama5d4x</project>\r
+        <configuration>Release</configuration>\r
+      </member>\r
+      <member>\r
+        <project>RTOSDemo</project>\r
+        <configuration>sram</configuration>\r
+      </member>\r
+      <member>\r
+        <project>RTOSDemo</project>\r
+        <configuration>ddram</configuration>\r
+      </member>\r
+    </batchDefinition>\r
+  </batchBuild>\r
+</workspace>\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/cstartup_with_FreeRTOS_vectors.s b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/cstartup_with_FreeRTOS_vectors.s
new file mode 100644 (file)
index 0000000..56dbb27
--- /dev/null
@@ -0,0 +1,315 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2014, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/*\r
+     IAR startup file for SAMA5D4X microcontrollers.\r
+ */\r
+\r
+        MODULE  ?cstartup\r
+\r
+        ;; Forward declaration of sections.\r
+        SECTION IRQ_STACK:DATA:NOROOT(2)\r
+        SECTION FIQ_STACK:DATA:NOROOT(2)\r
+        SECTION UND_STACK:DATA:NOROOT(2)\r
+        SECTION ABT_STACK:DATA:NOROOT(2)\r
+        SECTION CSTACK:DATA:NOROOT(3)\r
+\r
+//------------------------------------------------------------------------------\r
+//         Headers\r
+//------------------------------------------------------------------------------\r
+\r
+#define __ASSEMBLY__\r
+\r
+//------------------------------------------------------------------------------\r
+//         Definitions\r
+//------------------------------------------------------------------------------\r
+\r
+#define AIC         0xFC06E000\r
+#define AIC_IVR     0x10\r
+#define AIC_EOICR   0x38\r
+#define L2CC_CR     0x00A00100\r
+\r
+#define REG_SFR_AICREDIR        0xF8028054\r
+#define REG_SFR_UID             0xF8028050\r
+#define AICREDIR_KEY            0x5F67B102\r
+\r
+\r
+MODE_MSK DEFINE 0x1F            ; Bit mask for mode bits in CPSR\r
+#define ARM_MODE_ABT     0x17\r
+#define ARM_MODE_FIQ     0x11\r
+#define ARM_MODE_IRQ     0x12\r
+#define ARM_MODE_SVC     0x13\r
+#define ARM_MODE_SYS     0x1F\r
+#define ARM_MODE_UND     0x1B\r
+#define I_BIT            0x80\r
+#define F_BIT            0x40\r
+\r
+\r
+\r
+//------------------------------------------------------------------------------\r
+//         Startup routine\r
+//------------------------------------------------------------------------------\r
+\r
+/*\r
+   Exception vectors\r
+ */\r
+        SECTION .vectors:CODE:NOROOT(2)\r
+\r
+        PUBLIC  resetVector\r
+        PUBLIC  IRQ_Handler\r
+        EXTERN  FreeRTOS_IRQ_Handler\r
+        EXTERN  Undefined_C_Handler\r
+        EXTERN  FreeRTOS_SWI_Handler\r
+        EXTERN  Prefetch_C_Handler\r
+        EXTERN  Abort_C_Handler\r
+        PUBLIC  FIQ_Handler\r
+\r
+        ARM\r
+\r
+__iar_init$$done:               ; The interrupt vector is not needed\r
+                                ; until after copy initialization is done\r
+\r
+resetVector:\r
+        ; All default exception handlers (except reset) are\r
+        ; defined as weak symbol definitions.\r
+        ; If a handler is defined by the application it will take precedence.\r
+        LDR     pc, =resetHandler        ; Reset\r
+        LDR     pc, Undefined_Addr       ; Undefined instructions\r
+        LDR     pc, SWI_Addr             ; Software interrupt (SWI/SYS)\r
+        LDR     pc, Prefetch_Addr        ; Prefetch abort\r
+        LDR     pc, Abort_Addr           ; Data abort\r
+        B       .                        ; RESERVED\r
+        LDR     PC,IRQ_Addr              ; 0x18 IRQ\r
+        LDR     PC,FIQ_Addr              ; 0x1c FIQ\r
+\r
+IRQ_Addr:       DCD   FreeRTOS_IRQ_Handler\r
+Undefined_Addr: DCD   Undefined_C_Handler\r
+SWI_Addr:       DCD   FreeRTOS_SWI_Handler\r
+Abort_Addr:     DCD   Abort_C_Handler\r
+Prefetch_Addr:  DCD   Prefetch_C_Handler\r
+;IRQ_Addr:       DCD   IRQ_Handler\r
+FIQ_Addr:       DCD   FIQ_Handler\r
+/*\r
+   Handles incoming interrupt requests by branching to the corresponding\r
+   handler, as defined in the AIC. Supports interrupt nesting.\r
+ */\r
+IRQ_Handler:\r
+        /* Save interrupt context on the stack to allow nesting */\r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        MRS     lr, SPSR\r
+        STMFD   sp!, {r0, lr}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =AIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        /* Check for 8-byte alignment and save lr plus a */\r
+        /* word to indicate the stack adjustment used (0 or 4) */\r
+        AND     r1, sp, #4\r
+        SUB     sp, sp, r1\r
+        STMFD   sp!, {r1, lr}\r
+\r
+        BLX     r0\r
+\r
+        LDMIA   sp!, {r1, lr}\r
+        ADD     sp, sp, r1\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        MSR     CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =AIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0, lr}\r
+        MSR     SPSR_cxsf, lr\r
+        LDMIA   sp!, {pc}^\r
+\r
+\r
+/*\r
+   After a reset, execution starts here, the mode is ARM, supervisor\r
+   with interrupts disabled.\r
+   Initializes the chip and branches to the main() function.\r
+ */\r
+        SECTION .cstartup:CODE:NOROOT(2)\r
+\r
+        PUBLIC  resetHandler\r
+        EXTERN  LowLevelInit\r
+        EXTERN  ?main\r
+        REQUIRE resetVector\r
+        EXTERN  CP15_InvalidateBTB\r
+        EXTERN  CP15_InvalidateTranslationTable\r
+        EXTERN  CP15_InvalidateIcache\r
+        EXTERN  CP15_InvalidateDcacheBySetWay\r
+        ARM\r
+\r
+resetHandler:\r
+\r
+        LDR     r4, =SFE(CSTACK)     ; End of SVC stack\r
+        BIC     r4,r4,#0x7           ; Make sure SP is 8 aligned\r
+        MOV     sp, r4\r
+\r
+\r
+        ;; Set up the normal interrupt stack pointer.\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_IRQ | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(IRQ_STACK)     ; End of IRQ_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+\r
+\r
+        ;; Set up the fast interrupt stack pointer.\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_FIQ | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(FIQ_STACK)     ; End of FIQ_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_ABT | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(ABT_STACK)     ; End of ABT_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_UND | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(UND_STACK)     ; End of UND_STACK\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_SYS | F_BIT | I_BIT)\r
+        LDR     sp, =SFE(CSTACK-0x3000) ; 0x1000 bytes of SYS stack\r
+        BIC     sp,sp,#0x7              ; Make sure SP is 8 aligned\r
+\r
+\r
+        MSR     CPSR_c, #(ARM_MODE_SVC | F_BIT | I_BIT)\r
+\r
+        CPSIE   A\r
+\r
+        /* Enable VFP */\r
+        /* - Enable access to CP10 and CP11 in CP15.CACR */\r
+        MRC     p15, 0, r0, c1, c0, 2\r
+        ORR     r0, r0, #0xf00000\r
+        MCR     p15, 0, r0, c1, c0, 2\r
+        /* - Enable access to CP10 and CP11 in CP15.NSACR */\r
+        /* - Set FPEXC.EN (B30) */\r
+#ifdef __ARMVFP__\r
+        MOV     r3, #0x40000000\r
+        VMSR    FPEXC, r3\r
+#endif\r
+\r
+         // Redirect FIQ to IRQ\r
+        LDR  r0,  =AICREDIR_KEY\r
+        LDR  r1, = REG_SFR_UID\r
+        LDR  r2, = REG_SFR_AICREDIR\r
+        LDR  r3,[r1]\r
+        EORS r0, r0, r3\r
+        ORRS r0, r0, #0x01\r
+        STR  r0, [r2]\r
+\r
+         /* Perform low-level initialization of the chip using LowLevelInit() */\r
+        LDR     r0, =LowLevelInit\r
+        BLX     r0\r
+\r
+\r
+        MRC     p15, 0, r0, c1, c0, 0       ; Read CP15 Control Regsiter into r0\r
+        TST     r0, #0x1                    ; Is the MMU enabled?\r
+        BICNE   r0, r0, #0x1                ; Clear bit 0\r
+        TST     r0, #0x4                    ; Is the Dcache enabled?\r
+        BICNE   r0, r0, #0x4                ; Clear bit 2\r
+        MCRNE   p15, 0, r0, c1, c0, 0       ; Write value back\r
+\r
+        // Disbale L2 cache\r
+        LDR r1,=L2CC_CR\r
+        MOV r2,#0\r
+        STR r2, [r1]\r
+\r
+        DMB\r
+        BL      CP15_InvalidateTranslationTable\r
+        BL      CP15_InvalidateBTB\r
+        BL      CP15_InvalidateIcache\r
+        BL      CP15_InvalidateDcacheBySetWay\r
+        DMB\r
+        ISB\r
+\r
+\r
+        /* Branch to main() */\r
+        LDR     r0, =?main\r
+        BLX     r0\r
+\r
+        /* Loop indefinitely when program is finished */\r
+loop4:\r
+        B       loop4\r
+\r
+\r
+\r
+;------------------------------------------------------------------------------\r
+;- Function             : FIQ_Handler\r
+;- Treatments           : FIQ Controller Interrupt Handler.\r
+;- Called Functions     : AIC_IVR[interrupt]\r
+;------------------------------------------------------------------------------\r
+SAIC   DEFINE   0xFC068400\r
+AIC_FVR           DEFINE   0x14\r
+\r
+        SECTION .text:CODE:NOROOT(2)\r
+        ARM\r
+FIQ_Handler:\r
+  /* Save interrupt context on the stack to allow nesting */\r
+        SUB     lr, lr, #4\r
+        STMFD   sp!, {lr}\r
+        /* MRS     lr, SPSR */\r
+        STMFD   sp!, {r0}\r
+\r
+        /* Write in the IVR to support Protect Mode */\r
+        LDR     lr, =SAIC\r
+        LDR     r0, [r14, #AIC_IVR]\r
+        STR     lr, [r14, #AIC_IVR]\r
+\r
+        /* Branch to interrupt handler in Supervisor mode */\r
+        MSR     CPSR_c, #ARM_MODE_SVC\r
+        STMFD   sp!, {r1-r3, r4, r12, lr}\r
+\r
+        MOV     r14, pc\r
+        BX      r0\r
+\r
+        LDMIA   sp!, {r1-r3, r4, r12, lr}\r
+        MSR     CPSR_c, #ARM_MODE_FIQ | I_BIT | F_BIT\r
+\r
+        /* Acknowledge interrupt */\r
+        LDR     lr, =SAIC\r
+        STR     lr, [r14, #AIC_EOICR]\r
+\r
+        /* Restore interrupt context and branch back to calling code */\r
+        LDMIA   sp!, {r0}\r
+        /* MSR     SPSR_cxsf, lr */\r
+        LDMIA   sp!, {pc}^\r
+\r
+\r
+ END\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/main.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/main.c
new file mode 100644 (file)
index 0000000..20ff22c
--- /dev/null
@@ -0,0 +1,280 @@
+/*\r
+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that has become a de facto standard.             *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly and support the FreeRTOS         *\r
+     *    project by purchasing a FreeRTOS tutorial book, reference          *\r
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *\r
+     *                                                                       *\r
+     *    Thank you!                                                         *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    1 tab == 4 spaces!\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    Having a problem?  Start by reading the FAQ "My application does   *\r
+     *    not run, what could be wrong?"                                     *\r
+     *                                                                       *\r
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
+    license and Real Time Engineers Ltd. contact details.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/******************************************************************************\r
+ * This project provides two demo applications.  A simple blinky style project,\r
+ * and a more comprehensive test and demo application.  The\r
+ * mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting (defined in this file) is used to\r
+ * select between the two.  The simply blinky demo is implemented and described\r
+ * in main_blinky.c.  The more comprehensive test and demo application is\r
+ * implemented and described in main_full.c.\r
+ *\r
+ * This file implements the code that is not demo specific, including the\r
+ * hardware setup, standard FreeRTOS hook functions, and the ISR hander called\r
+ * by the RTOS after interrupt entry (including nesting) has been taken care of.\r
+ *\r
+ * ENSURE TO READ THE DOCUMENTATION PAGE FOR THIS PORT AND DEMO APPLICATION ON\r
+ * THE http://www.FreeRTOS.org WEB SITE FOR FULL INFORMATION ON USING THIS DEMO\r
+ * APPLICATION, AND ITS ASSOCIATE FreeRTOS ARCHITECTURE PORT!\r
+ *\r
+ */\r
+\r
+/* Scheduler include files. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+#include "semphr.h"\r
+\r
+/* Standard demo includes. */\r
+#include "partest.h"\r
+#include "TimerDemo.h"\r
+#include "QueueOverwrite.h"\r
+#include "EventGroupsDemo.h"\r
+\r
+/* Library includes. */\r
+#include "chip.h"\r
+\r
+/* Set mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to one to run the simple blinky demo,\r
+or 0 to run the more comprehensive test and demo application. */\r
+#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY     1\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Configure the hardware as necessary to run this demo.\r
+ */\r
+static void prvSetupHardware( void );\r
+\r
+/*\r
+ * main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.\r
+ * main_full() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 0.\r
+ */\r
+#if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1\r
+       extern void main_blinky( void );\r
+#else\r
+       extern void main_full( void );\r
+#endif /* #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 */\r
+\r
+/* Prototypes for the standard FreeRTOS callback/hook functions implemented\r
+within this file. */\r
+void vApplicationMallocFailedHook( void );\r
+void vApplicationIdleHook( void );\r
+void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );\r
+void vApplicationTickHook( void );\r
+\r
+/* Prototype for the IRQ handler called by the generic Cortex-A5 RTOS port\r
+layer.  The address of the ISR is passed into this function as a parameter.\r
+Note this level of indirection could be removed by creating a SAMA5 specific\r
+port layer that calls the IRQ directly from the port layer rather than via this\r
+application callback. */\r
+void vApplicationIRQHandler( uint32_t ulInterruptVectorAddress );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+int main( void )\r
+{\r
+//extern int atmel_main( void );\r
+//atmel_main();\r
+\r
+       /* Configure the hardware ready to run the demo. */\r
+       prvSetupHardware();\r
+\r
+       /* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top\r
+       of this file. */\r
+       #if( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )\r
+       {\r
+               main_blinky();\r
+       }\r
+       #else\r
+       {\r
+               main_full();\r
+       }\r
+       #endif\r
+\r
+       return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetupHardware( void )\r
+{\r
+    /* Disable watchdog */\r
+    WDT_Disable( WDT );\r
+\r
+       /* Set protect mode in the AIC for easier debugging. */\r
+//     AIC->AIC_DCR |= AIC_DCR_PROT;\r
+\r
+       /* Configure ports used by LEDs. */\r
+       vParTestInitialise();\r
+\r
+//_RB_ CP15_EnableIcache();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationMallocFailedHook( void )\r
+{\r
+       /* Called if a call to pvPortMalloc() fails because there is insufficient\r
+       free memory available in the FreeRTOS heap.  pvPortMalloc() is called\r
+       internally by FreeRTOS API functions that create tasks, queues, software\r
+       timers, and semaphores.  The size of the FreeRTOS heap is set by the\r
+       configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */\r
+       taskDISABLE_INTERRUPTS();\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )\r
+{\r
+       ( void ) pcTaskName;\r
+       ( void ) pxTask;\r
+\r
+       /* Run time stack overflow checking is performed if\r
+       configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook\r
+       function is called if a stack overflow is detected. */\r
+       taskDISABLE_INTERRUPTS();\r
+       for( ;; );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationIdleHook( void )\r
+{\r
+volatile size_t xFreeHeapSpace;\r
+\r
+       /* This is just a trivial example of an idle hook.  It is called on each\r
+       cycle of the idle task.  It must *NOT* attempt to block.  In this case the\r
+       idle task just queries the amount of FreeRTOS heap that remains.  See the\r
+       memory management section on the http://www.FreeRTOS.org web site for memory\r
+       management options.  If there is a lot of heap memory free then the\r
+       configTOTAL_HEAP_SIZE value in FreeRTOSConfig.h can be reduced to free up\r
+       RAM. */\r
+       xFreeHeapSpace = xPortGetFreeHeapSize();\r
+\r
+       /* Remove compiler warning about xFreeHeapSpace being set but never used. */\r
+       ( void ) xFreeHeapSpace;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vAssertCalled( const char * pcFile, unsigned long ulLine )\r
+{\r
+volatile unsigned long ul = 0;\r
+\r
+       ( void ) pcFile;\r
+       ( void ) ulLine;\r
+\r
+       taskENTER_CRITICAL();\r
+       {\r
+               /* Set ul to a non-zero value using the debugger to step out of this\r
+               function. */\r
+               while( ul == 0 )\r
+               {\r
+                       portNOP();\r
+               }\r
+       }\r
+       taskEXIT_CRITICAL();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationTickHook( void )\r
+{\r
+       #if mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 0\r
+       {\r
+               /* The full demo includes a software timer demo/test that requires\r
+               prodding periodically from the tick interrupt. */\r
+               vTimerPeriodicISRTests();\r
+\r
+               /* Call the periodic queue overwrite from ISR demo. */\r
+               vQueueOverwritePeriodicISRDemo();\r
+\r
+               /* Call the periodic event group from ISR demo. */\r
+               vPeriodicEventGroupsProcessing();\r
+       }\r
+       #endif\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* The function called by the RTOS port layer after it has managed interrupt\r
+entry. */\r
+void vApplicationIRQHandler( uint32_t ulInterruptVectorAddress )\r
+{\r
+typedef void (*ISRFunction_t)( void );\r
+ISRFunction_t pxISRFunction;\r
+volatile uint32_t * pulAIC_IVR = ( uint32_t * ) configINTERRUPT_VECTOR_ADDRESS;\r
+\r
+       /* On the SAMA5 the parameter is a pointer to the ISR handling function. */\r
+       pxISRFunction = ( ISRFunction_t ) ulInterruptVectorAddress;\r
+\r
+       /* Write back to the SAMA5's interrupt controller's IVR register in case the\r
+       CPU is in protect mode.  If the interrupt controller is not in protect mode\r
+       then this write is not necessary. */\r
+       *pulAIC_IVR = 0;\r
+\r
+       /* Ensure the write takes before re-enabling interrupts. */\r
+       __DSB();\r
+       __ISB();\r
+    __enable_irq();\r
+\r
+       /* Call the installed ISR. */\r
+       pxISRFunction();\r
+}\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.crun b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.crun
new file mode 100644 (file)
index 0000000..5bb5acc
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r
+\r
+<crun>\r
+  <version>1</version>\r
+  <filter_entries>\r
+    <filter index="0" type="default">\r
+      <type>*</type>\r
+      <start_file>*</start_file>\r
+      <end_file>*</end_file>\r
+      <action_debugger>0</action_debugger>\r
+      <action_log>1</action_log>\r
+    </filter>\r
+  </filter_entries>\r
+</crun>\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.dbgdt b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.dbgdt
new file mode 100644 (file)
index 0000000..e7d8ac5
--- /dev/null
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r
+\r
+<Project>\r
+  <Desktop>\r
+    <Static>\r
+      <Debug-Log>\r
+        \r
+        \r
+      <ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>\r
+      <Build>\r
+        <ColumnWidth0>20</ColumnWidth0>\r
+        <ColumnWidth1>1216</ColumnWidth1>\r
+        <ColumnWidth2>324</ColumnWidth2>\r
+        <ColumnWidth3>81</ColumnWidth3>\r
+      </Build>\r
+      <Workspace>\r
+        <ColumnWidths>\r
+          \r
+          \r
+          \r
+          \r
+        <Column0>214</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
+      </Workspace>\r
+      <Disassembly>\r
+        <col-names>\r
+          \r
+          \r
+        <item>Disassembly</item><item>_I0</item></col-names>\r
+        <col-widths>\r
+          \r
+          \r
+        <item>500</item><item>20</item></col-widths>\r
+        <DisasmHistory/>\r
+        \r
+        \r
+      <PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ShowCodeCoverage>1</ShowCodeCoverage><ShowInstrProfiling>1</ShowInstrProfiling></Disassembly>\r
+    <Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints><STACK_1><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><stack>CSTACK</stack><width>4</width><vars>1</vars><offset>0</offset><col-names><item>Data</item><item>Frame</item><item>Location</item><item>Type</item><item>Value</item><item>Variable</item></col-names><col-widths><item>100</item><item>100</item><item>100</item><item>100</item><item>100</item><item>100</item></col-widths></STACK_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><WATCH_1><expressions><item>ulx</item><item></item></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>100</item><item>150</item><item>100</item><item>100</item></col-widths></WATCH_1><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register></Static>\r
+    <Windows>\r
+      \r
+      \r
+      \r
+    <Wnd1>\r
+        <Tabs>\r
+          <Tab>\r
+            <Identity>TabID-19841-18771</Identity>\r
+            <TabName>Debug Log</TabName>\r
+            <Factory>Debug-Log</Factory>\r
+            <Session/>\r
+          </Tab>\r
+          <Tab>\r
+            <Identity>TabID-19319-18781</Identity>\r
+            <TabName>Build</TabName>\r
+            <Factory>Build</Factory>\r
+            <Session/>\r
+          </Tab>\r
+        </Tabs>\r
+        \r
+      <SelectedTab>0</SelectedTab></Wnd1><Wnd2>\r
+        <Tabs>\r
+          <Tab>\r
+            <Identity>TabID-30590-18775</Identity>\r
+            <TabName>Workspace</TabName>\r
+            <Factory>Workspace</Factory>\r
+            <Session>\r
+              \r
+            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Atmel Files</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable/MemMang</ExpandedNode><ExpandedNode>RTOSDemo/Output</ExpandedNode></NodeDict></Session>\r
+          </Tab>\r
+        </Tabs>\r
+        \r
+      <SelectedTab>0</SelectedTab></Wnd2><Wnd6><Tabs><Tab><Identity>TabID-19127-2470</Identity><TabName>Watch 1</TabName><Factory>WATCH_1</Factory></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd6><Wnd7><Tabs><Tab><Identity>TabID-26530-4583</Identity><TabName>Disassembly</TabName><Factory>Disassembly</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd7></Windows>\r
+    <Editor>\r
+      \r
+      \r
+      \r
+      \r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libchip_sama5d4x\source\pio_it.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>161</YPos2><SelStart2>7114</SelStart2><SelEnd2>7114</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\cstartup_with_FreeRTOS_vectors.s</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>96</YPos2><SelStart2>4249</SelStart2><SelEnd2>4249</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\LEDs.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>65</YPos2><SelStart2>4250</SelStart2><SelEnd2>4250</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\Blinky_Demo\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>190</YPos2><SelStart2>7316</SelStart2><SelEnd2>7316</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_lowlevel.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>165</YPos2><SelStart2>8844</SelStart2><SelEnd2>8844</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOS_tick_config.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>96</YPos2><SelStart2>5865</SelStart2><SelEnd2>5891</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portASM.s</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>112</YPos2><SelStart2>5364</SelStart2><SelEnd2>5381</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>137</YPos2><SelStart2>8285</SelStart2><SelEnd2>8285</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libboard_sama5d4x-ek\board.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>195</YPos2><SelStart2>6643</SelStart2><SelEnd2>6643</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\atmel_main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>191</YPos2><SelStart2>7564</SelStart2><SelEnd2>7564</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>114</YPos2><SelStart2>6411</SelStart2><SelEnd2>6411</SelEnd2></Tab><ActiveTab>10</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\port.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>280</YPos2><SelStart2>12414</SelStart2><SelEnd2>12440</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libchip_sama5d4x\include\SAMA5D4.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>82</YPos2><SelStart2>7569</SelStart2><SelEnd2>7569</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Positions>\r
+      \r
+      \r
+      \r
+      \r
+      \r
+    <Top><Row0><Sizes><Toolbar-00BB53D0><key>iaridepm.enu1</key></Toolbar-00BB53D0></Sizes></Row0><Row1><Sizes><Toolbar-08E1E7B8><key>debuggergui.enu1</key></Toolbar-08E1E7B8></Sizes></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>718</Bottom><Right>288</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>172619</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes><Wnd6><Rect><Top>-2</Top><Left>-2</Left><Bottom>718</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd6></Sizes></Row0><Row1><Sizes><Wnd7><Rect><Top>-2</Top><Left>196</Left><Bottom>718</Bottom><Right>684</Right><x>196</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>290476</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd7></Sizes></Row1></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+  </Desktop>\r
+</Project>\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.dni b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.dni
new file mode 100644 (file)
index 0000000..bac3938
--- /dev/null
@@ -0,0 +1,48 @@
+[Stack]\r
+FillEnabled=0\r
+OverflowWarningsEnabled=1\r
+WarningThreshold=90\r
+SpWarningsEnabled=1\r
+WarnLogOnly=1\r
+UseTrigger=1\r
+TriggerName=main\r
+LimitSize=0\r
+ByteLimit=50\r
+[JLinkDriver]\r
+WatchCond=_ 0\r
+Watch0=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0\r
+Watch1=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0\r
+CStepIntDis=_ 0\r
+[DebugChecksum]\r
+Checksum=-1721229099\r
+[Exceptions]\r
+StopOnUncaught=_ 0\r
+StopOnThrow=_ 0\r
+[CallStack]\r
+ShowArgs=0\r
+[Disassembly]\r
+MixedMode=1\r
+[Log file]\r
+LoggingEnabled=_ 0\r
+LogFile=_ ""\r
+Category=_ 0\r
+[TermIOLog]\r
+LoggingEnabled=_ 0\r
+LogFile=_ ""\r
+[CallStackLog]\r
+Enabled=0\r
+[DriverProfiling]\r
+Enabled=0\r
+Mode=0\r
+Graph=0\r
+Symbiont=0\r
+Exclusions=\r
+[Disassemble mode]\r
+mode=0\r
+[Breakpoints2]\r
+Bp0=_ 1 "EMUL_CODE" "{$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_lowlevel.c}.293.3" 0 0 1 "" 0 "" 0\r
+Bp1=_ 1 "EMUL_CODE" "{$PROJ_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_lowlevel.c}.302.3" 0 0 1 "" 0 "" 0\r
+Count=2\r
+[Aliases]\r
+Count=0\r
+SuppressDialog=0\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.sram.cspy.bat b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.sram.cspy.bat
new file mode 100644 (file)
index 0000000..ba61822
--- /dev/null
@@ -0,0 +1,24 @@
+@REM This batch file has been generated by the IAR Embedded Workbench\r
+@REM C-SPY Debugger, as an aid to preparing a command line for running\r
+@REM the cspybat command line utility using the appropriate settings.\r
+@REM\r
+@REM Note that this file is generated every time a new debug session\r
+@REM is initialized, so you may want to move or rename the file before\r
+@REM making changes.\r
+@REM\r
+@REM You can launch cspybat by typing the name of this batch file followed\r
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).\r
+@REM\r
+@REM Read about available command line parameters in the C-SPY Debugging\r
+@REM Guide. Hints about additional command line parameters that may be\r
+@REM useful in specific cases:\r
+@REM   --download_only   Downloads a code image without starting a debug\r
+@REM                     session afterwards.\r
+@REM   --silent          Omits the sign-on message.\r
+@REM   --timeout         Limits the maximum allowed execution time.\r
+@REM \r
+\r
+\r
+"C:\DevTools\IAR Systems\Embedded Workbench 7.0\common\bin\cspybat" "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\bin\armproc.dll" "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\bin\armjlink.dll"  %1 --plugin "C:\DevTools\IAR Systems\Embedded Workbench 7.0\arm\bin\armbat.dll" --macro "C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Demo\CORTEX_A5_SAMA5D4x_EK_IAR\AtmelFiles\libboard_sama5d4x-ek\resources\ewarm\sama5d4x-ek-sram.mac" --backend -B "--endian=little" "--cpu=Cortex-A5F" "--fpu=VFPv4Neon" "--drv_verify_download" "--semihosting=none" "--drv_communication=USB0" "--jlink_speed=auto" "--jlink_initial_speed=32" "--drv_catch_exceptions=0x000" \r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.wsdt b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.wsdt
new file mode 100644 (file)
index 0000000..82bf76a
--- /dev/null
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="iso-8859-1"?>\r
+\r
+<Workspace>\r
+  <ConfigDictionary>\r
+    \r
+  <CurrentConfigs><Project>RTOSDemo/sram</Project></CurrentConfigs></ConfigDictionary>\r
+  <Desktop>\r
+    <Static>\r
+      <Workspace>\r
+        <ColumnWidths>\r
+          \r
+          \r
+          \r
+          \r
+        <Column0>247</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
+      </Workspace>\r
+      <Build>\r
+        \r
+        \r
+        \r
+        \r
+      <ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1216</ColumnWidth1><ColumnWidth2>324</ColumnWidth2><ColumnWidth3>81</ColumnWidth3></Build>\r
+    <Find-in-Files><ColumnWidth0>497</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>746</ColumnWidth2><ColumnWidth3>331</ColumnWidth3></Find-in-Files><TerminalIO/><Debug-Log><ColumnWidth0>19</ColumnWidth0><ColumnWidth1>1623</ColumnWidth1></Debug-Log></Static>\r
+    <Windows>\r
+      \r
+      \r
+    <Wnd0>\r
+        <Tabs>\r
+          <Tab>\r
+            <Identity>TabID-423-28504</Identity>\r
+            <TabName>Workspace</TabName>\r
+            <Factory>Workspace</Factory>\r
+            <Session>\r
+              \r
+            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable</ExpandedNode><ExpandedNode>RTOSDemo/documentation</ExpandedNode><ExpandedNode>RTOSDemo/libraries</ExpandedNode><ExpandedNode>RTOSDemo/resources</ExpandedNode></NodeDict></Session>\r
+          </Tab>\r
+        </Tabs>\r
+        \r
+      <SelectedTab>0</SelectedTab></Wnd0><Wnd1>\r
+        <Tabs>\r
+          <Tab>\r
+            <Identity>TabID-6281-15071</Identity>\r
+            <TabName>Build</TabName>\r
+            <Factory>Build</Factory>\r
+            <Session/>\r
+          </Tab>\r
+        <Tab><Identity>TabID-13526-15205</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-32406-174</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs>\r
+        \r
+      <SelectedTab>0</SelectedTab></Wnd1></Windows>\r
+    <Editor>\r
+      \r
+      \r
+      \r
+      \r
+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libchip_sama5d4x\source\pio_it.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>161</YPos2><SelStart2>7114</SelStart2><SelEnd2>7114</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\cstartup_with_FreeRTOS_vectors.s</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>96</YPos2><SelStart2>4249</SelStart2><SelEnd2>4249</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\LEDs.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>65</YPos2><SelStart2>4250</SelStart2><SelEnd2>4250</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\Blinky_Demo\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>190</YPos2><SelStart2>7316</SelStart2><SelEnd2>7316</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libboard_sama5d4x-ek\source\board_lowlevel.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>165</YPos2><SelStart2>8844</SelStart2><SelEnd2>8844</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOS_tick_config.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>96</YPos2><SelStart2>5865</SelStart2><SelEnd2>5891</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portASM.s</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>112</YPos2><SelStart2>5364</SelStart2><SelEnd2>5381</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>137</YPos2><SelStart2>8285</SelStart2><SelEnd2>8285</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libboard_sama5d4x-ek\board.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>195</YPos2><SelStart2>6643</SelStart2><SelEnd2>6643</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\atmel_main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>191</YPos2><SelStart2>7564</SelStart2><SelEnd2>7564</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>114</YPos2><SelStart2>6411</SelStart2><SelEnd2>6411</SelEnd2></Tab><ActiveTab>10</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\port.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>280</YPos2><SelStart2>12414</SelStart2><SelEnd2>12440</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\libchip_sama5d4x\include\SAMA5D4.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>82</YPos2><SelStart2>7569</SelStart2><SelEnd2>7569</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+    <Positions>\r
+      \r
+      \r
+      \r
+      \r
+      \r
+    <Top><Row0><Sizes><Toolbar-00BB53D0><key>iaridepm.enu1</key></Toolbar-00BB53D0></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>653</Bottom><Right>321</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>192262</sizeVertCX><sizeVertCY>665650</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>287</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>289</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>293699</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+  </Desktop>\r
+</Workspace>\r
+\r
+\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.wspos b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo.wspos
new file mode 100644 (file)
index 0000000..ba29501
--- /dev/null
@@ -0,0 +1,2 @@
+[MainWindow]\r
+WindowPlacement=_ 90 4 1190 900 3\r
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo_sram.jlink b/FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/settings/RTOSDemo_sram.jlink
new file mode 100644 (file)
index 0000000..de1b137
--- /dev/null
@@ -0,0 +1,34 @@
+[BREAKPOINTS]\r
+ShowInfoWin = 1\r
+EnableFlashBP = 2\r
+BPDuringExecution = 0\r
+[CFI]\r
+CFISize = 0x00\r
+CFIAddr = 0x00\r
+[CPU]\r
+OverrideMemMap = 0\r
+AllowSimulation = 1\r
+ScriptFile=""\r
+[FLASH]\r
+CacheExcludeSize = 0x00\r
+CacheExcludeAddr = 0x00\r
+MinNumBytesFlashDL = 0\r
+SkipProgOnCRCMatch = 1\r
+VerifyDownload = 1\r
+AllowCaching = 1\r
+EnableFlashDL = 2\r
+Override = 0\r
+Device="UNSPECIFIED"\r
+[GENERAL]\r
+WorkRAMSize = 0x00\r
+WorkRAMAddr = 0x00\r
+RAMUsageLimit = 0x00\r
+[SWO]\r
+SWOLogFile=""\r
+[MEM]\r
+RdOverrideOrMask = 0x00\r
+RdOverrideAndMask = 0xFFFFFFFF\r
+RdOverrideAddr = 0xFFFFFFFF\r
+WrOverrideOrMask = 0x00\r
+WrOverrideAndMask = 0xFFFFFFFF\r
+WrOverrideAddr = 0xFFFFFFFF\r
index 3f2cef08a17b6930dfedae08799702e200ed32e9..6aec779272e093de98214126068827d84d1c74b8 100644 (file)
@@ -277,7 +277,7 @@ static TickType_t xIterationsWithoutCounterIncrement = ( TickType_t ) 0, xLastCy
 \r
 static void prvTest1_CreateTimersWithoutSchedulerRunning( void )\r
 {\r
-UBaseType_t xTimer;\r
+TickType_t xTimer;\r
 \r
        for( xTimer = 0; xTimer < configTIMER_QUEUE_LENGTH; xTimer++ )\r
        {\r
index 6c77ba2cff36c73aa6cca761563eb8ee224a4b7b..5b9f031079c05d915c6bba2b561f9eff69e0030b 100644 (file)
@@ -719,6 +719,10 @@ extern "C" {
        #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0\r
 #endif\r
 \r
+#ifndef configAPPLICATION_ALLOCATED_HEAP\r
+       #define configAPPLICATION_ALLOCATED_HEAP 0\r
+#endif\r
+\r
 /* Definitions to allow backward compatibility with FreeRTOS versions prior to\r
 V8 if desired. */\r
 #ifndef configENABLE_BACKWARD_COMPATIBILITY\r
index 26a21de15b6fd0c8448fde9425e12d077a00e0e7..9ce95e6362bab77e941e32e8eb789090179f9cd5 100644 (file)
@@ -532,7 +532,6 @@ uint32_t ulReturn;
 \r
                FreeRTOS maintains separate thread and ISR API functions to ensure\r
                interrupt entry is as fast and simple as possible. */\r
-\r
                configASSERT( portICCRPR_RUNNING_PRIORITY_REGISTER >= ( uint32_t ) ( configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT ) );\r
 \r
                /* Priority grouping:  The interrupt controller (GIC) allows the bits\r
@@ -551,5 +550,3 @@ uint32_t ulReturn;
 #endif /* configASSERT_DEFINED */\r
 /*-----------------------------------------------------------*/\r
 \r
-\r
-\r
index c86478f56cf684f3d5ca274838d782cfbe9e2a3f..294b3c0677faad814d810e49a319a2b0f755131e 100644 (file)
@@ -153,6 +153,7 @@ extern void vPortYield( void );
 #define portSTACK_GROWTH                       ( -1 )\r
 #define portTICK_PERIOD_MS                     ( ( TickType_t ) 1000 / configTICK_RATE_HZ )\r
 #define portNOP()\r
+#define portPOINTER_SIZE_TYPE          uint16_t\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Task function macros as described on the FreeRTOS.org WEB site. */\r
index 2582cd2b48f77dba08c9228185d657fef5af23c4..a9cc2d74eb13f2cc6f38b7b8d962c09fa78c6e7a 100644 (file)
     1 tab == 4 spaces!\r
 */\r
 \r
+/* Standard includes. */\r
+#include <stdio.h>\r
+\r
 /* Scheduler includes. */\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include <stdio.h>\r
 \r
 #ifdef __GNUC__\r
        #include "mmsystem.h"\r
index ee282c8c0ea2a6abc40a3f74caada4aa013bf0d6..952d4afa086ab5a35dfb6767a8d03eb466339b42 100644 (file)
@@ -90,7 +90,13 @@ task.h is included from an application file. */
 #define heapBITS_PER_BYTE              ( ( size_t ) 8 )\r
 \r
 /* Allocate the memory for the heap. */\r
-static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];\r
+#if( configAPPLICATION_ALLOCATED_HEAP == 1 )\r
+       /* The application writer has already defined the array used for the RTOS\r
+       heap - probably so it can be placed in a special segment or address. */\r
+       extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];\r
+#else\r
+       static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];\r
+#endif /* configAPPLICATION_ALLOCATED_HEAP */\r
 \r
 /* Define the linked list structure.  This is used to link free blocks in order\r
 of their memory address. */\r
index 2bdbdcf2b53aca1060324a8bbac46417a66ce5c4..5ef81adc43092d65be027fbc2763229bcfe65aba 100644 (file)
@@ -120,7 +120,8 @@ zero. */
 \r
 /*\r
  * Definition of the queue used by the scheduler.\r
- * Items are queued by copy, not reference.\r
+ * Items are queued by copy, not reference.  See the following link for the\r
+ * rationale: http://www.freertos.org/Embedded-RTOS-Queues.html\r
  */\r
 typedef struct QueueDefinition\r
 {\r
@@ -310,55 +311,68 @@ QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseT
 Queue_t *pxNewQueue;\r
 size_t xQueueSizeInBytes;\r
 QueueHandle_t xReturn = NULL;\r
+int8_t *pcAllocatedBuffer;\r
 \r
        /* Remove compiler warnings about unused parameters should\r
        configUSE_TRACE_FACILITY not be set to 1. */\r
        ( void ) ucQueueType;\r
 \r
-       /* Allocate the new queue structure. */\r
-       if( uxQueueLength > ( UBaseType_t ) 0 )\r
-       {\r
-               pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) );\r
-               if( pxNewQueue != NULL )\r
-               {\r
-                       /* Create the list of pointers to queue items.  The queue is one byte\r
-                       longer than asked for to make wrap checking easier/faster. */\r
-                       xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ) + ( size_t ) 1; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */\r
+       configASSERT( uxQueueLength > ( UBaseType_t ) 0 );\r
 \r
-                       pxNewQueue->pcHead = ( int8_t * ) pvPortMalloc( xQueueSizeInBytes );\r
-                       if( pxNewQueue->pcHead != NULL )\r
-                       {\r
-                               /* Initialise the queue members as described above where the\r
-                               queue type is defined. */\r
-                               pxNewQueue->uxLength = uxQueueLength;\r
-                               pxNewQueue->uxItemSize = uxItemSize;\r
-                               ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );\r
+       if( uxItemSize == ( UBaseType_t ) 0 )\r
+       {\r
+               /* There is not going to be a queue storage area. */\r
+               xQueueSizeInBytes = ( size_t ) 0;\r
+       }\r
+       else\r
+       {\r
+               /* The queue is one byte longer than asked for to make wrap checking\r
+               easier/faster. */\r
+               xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ) + ( size_t ) 1; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */\r
+       }\r
 \r
-                               #if ( configUSE_TRACE_FACILITY == 1 )\r
-                               {\r
-                                       pxNewQueue->ucQueueType = ucQueueType;\r
-                               }\r
-                               #endif /* configUSE_TRACE_FACILITY */\r
+       /* Allocate the new queue structure and storage area. */\r
+       pcAllocatedBuffer = ( int8_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes );\r
 \r
-                               #if( configUSE_QUEUE_SETS == 1 )\r
-                               {\r
-                                       pxNewQueue->pxQueueSetContainer = NULL;\r
-                               }\r
-                               #endif /* configUSE_QUEUE_SETS */\r
+       if( pcAllocatedBuffer != NULL )\r
+       {\r
+               pxNewQueue = ( Queue_t * ) pcAllocatedBuffer; /*lint !e826 MISRA The buffer cannot be to small because it was dimensioned by sizeof( Queue_t ) + xQueueSizeInBytes. */\r
 \r
-                               traceQUEUE_CREATE( pxNewQueue );\r
-                               xReturn = pxNewQueue;\r
-                       }\r
-                       else\r
-                       {\r
-                               traceQUEUE_CREATE_FAILED( ucQueueType );\r
-                               vPortFree( pxNewQueue );\r
-                       }\r
+               if( uxItemSize == ( UBaseType_t ) 0 )\r
+               {\r
+                       /* No RAM was allocated for the queue storage area, but PC head\r
+                       cannot be set to NULL because NULL is used as a key to say the queue\r
+                       is used as a mutex.  Therefore just set pcHead to point to the queue\r
+                       as a benign value that is known to be within the memory map. */\r
+                       pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;\r
                }\r
                else\r
                {\r
-                       mtCOVERAGE_TEST_MARKER();\r
+                       /* Jump past the queue structure to find the location of the queue\r
+                       storage area - adding the padding bytes to get a better alignment. */\r
+                       pxNewQueue->pcHead = pcAllocatedBuffer + sizeof( Queue_t );\r
+               }\r
+\r
+               /* Initialise the queue members as described above where the queue type\r
+               is defined. */\r
+               pxNewQueue->uxLength = uxQueueLength;\r
+               pxNewQueue->uxItemSize = uxItemSize;\r
+               ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );\r
+\r
+               #if ( configUSE_TRACE_FACILITY == 1 )\r
+               {\r
+                       pxNewQueue->ucQueueType = ucQueueType;\r
+               }\r
+               #endif /* configUSE_TRACE_FACILITY */\r
+\r
+               #if( configUSE_QUEUE_SETS == 1 )\r
+               {\r
+                       pxNewQueue->pxQueueSetContainer = NULL;\r
                }\r
+               #endif /* configUSE_QUEUE_SETS */\r
+\r
+               traceQUEUE_CREATE( pxNewQueue );\r
+               xReturn = pxNewQueue;\r
        }\r
        else\r
        {\r
@@ -943,7 +957,7 @@ Queue_t * const pxQueue = ( Queue_t * ) xQueue;
                                        {\r
                                                traceQUEUE_PEEK( pxQueue );\r
 \r
-                                               /* We are not removing the data, so reset our read\r
+                                               /* The data is not being removed, so reset our read\r
                                                pointer. */\r
                                                pxQueue->u.pcReadFrom = pcOriginalReadPosition;\r
 \r
@@ -1334,7 +1348,7 @@ Queue_t * const pxQueue = ( Queue_t * ) xQueue;
                        xReturn = errQUEUE_FULL;\r
                }\r
        }\r
-       portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); //0.36\r
+       portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );\r
 \r
        return xReturn;\r
 }\r
@@ -1625,6 +1639,7 @@ Queue_t * const pxQueue = ( Queue_t * ) xQueue;
 \r
        configASSERT( pxQueue );\r
        configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );\r
+       configASSERT( pxQueue->uxItemSize != 0 ); /* Can't peek a semaphore. */\r
 \r
        /* RTOS ports that support interrupt nesting have the concept of a maximum\r
        system call (or maximum API call) interrupt priority.  Interrupts that are\r
@@ -1727,10 +1742,6 @@ Queue_t * const pxQueue = ( Queue_t * ) xQueue;
                vQueueUnregisterQueue( pxQueue );\r
        }\r
        #endif\r
-       if( pxQueue->pcHead != NULL )\r
-       {\r
-               vPortFree( pxQueue->pcHead );\r
-       }\r
        vPortFree( pxQueue );\r
 }\r
 /*-----------------------------------------------------------*/\r
index 565b65c34449c65f07fb56793da6e9917bca9c48..801555d75fd0220d76fd499e6d533bafcfab1356 100644 (file)
@@ -412,7 +412,9 @@ static void prvInitialiseTCBVariables( TCB_t * const pxTCB, const char * const p
  * currently in the Suspended state, or pdFALSE if the task referenced by xTask\r
  * is in any other state.\r
  */\r
-static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\r
+#if ( INCLUDE_vTaskSuspend == 1 )\r
+       static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\r
+#endif /* INCLUDE_vTaskSuspend */\r
 \r
 /*\r
  * Utility to ready all the lists used by the scheduler.  This is called\r
@@ -2915,33 +2917,71 @@ static TCB_t *prvAllocateTCBAndStack( const uint16_t usStackDepth, StackType_t *
 {\r
 TCB_t *pxNewTCB;\r
 \r
-       /* Allocate space for the TCB.  Where the memory comes from depends on\r
-       the implementation of the port malloc function. */\r
-       pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );\r
-\r
-       if( pxNewTCB != NULL )\r
+       /* If the stack grows down then allocate the stack then the TCB so the stack\r
+       does not grow into the TCB.  Likewise if the stack grows up then allocate\r
+       the TCB then the stack. */\r
+       #if( portSTACK_GROWTH > 0 )\r
        {\r
-               /* Allocate space for the stack used by the task being created.\r
-               The base of the stack memory stored in the TCB so the task can\r
-               be deleted later if required. */\r
-               pxNewTCB->pxStack = ( StackType_t * ) pvPortMallocAligned( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ), puxStackBuffer ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */\r
+               /* Allocate space for the TCB.  Where the memory comes from depends on\r
+               the implementation of the port malloc function. */\r
+               pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );\r
 \r
-               if( pxNewTCB->pxStack == NULL )\r
+               if( pxNewTCB != NULL )\r
                {\r
-                       /* Could not allocate the stack.  Delete the allocated TCB. */\r
-                       vPortFree( pxNewTCB );\r
-                       pxNewTCB = NULL;\r
+                       /* Allocate space for the stack used by the task being created.\r
+                       The base of the stack memory stored in the TCB so the task can\r
+                       be deleted later if required. */\r
+                       pxNewTCB->pxStack = ( StackType_t * ) pvPortMallocAligned( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ), puxStackBuffer ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */\r
+\r
+                       if( pxNewTCB->pxStack == NULL )\r
+                       {\r
+                               /* Could not allocate the stack.  Delete the allocated TCB. */\r
+                               vPortFree( pxNewTCB );\r
+                               pxNewTCB = NULL;\r
+                       }\r
                }\r
-               else\r
+       }\r
+       #else /* portSTACK_GROWTH */\r
+       {\r
+       StackType_t *pxStack;\r
+\r
+               /* Allocate space for the stack used by the task being created. */\r
+               pxStack = ( StackType_t * ) pvPortMallocAligned( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ), puxStackBuffer ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */\r
+\r
+               if( pxStack != NULL )\r
                {\r
-                       /* Avoid dependency on memset() if it is not required. */\r
-                       #if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) )\r
+                       /* Allocate space for the TCB.  Where the memory comes from depends\r
+                       on the implementation of the port malloc function. */\r
+                       pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );\r
+\r
+                       if( pxNewTCB != NULL )\r
                        {\r
-                               /* Just to help debugging. */\r
-                               ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) usStackDepth * sizeof( StackType_t ) );\r
+                               /* Store the stack location in the TCB. */\r
+                               pxNewTCB->pxStack = pxStack;\r
                        }\r
-                       #endif /* ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) ) */\r
+                       else\r
+                       {\r
+                               /* The stack cannot be used as the TCB was not created.  Free it\r
+                               again. */\r
+                               vPortFree( pxStack );\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       pxNewTCB = NULL;\r
+               }\r
+       }\r
+       #endif /* portSTACK_GROWTH */\r
+\r
+       if( pxNewTCB != NULL )\r
+       {\r
+               /* Avoid dependency on memset() if it is not required. */\r
+               #if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) )\r
+               {\r
+                       /* Just to help debugging. */\r
+                       ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) usStackDepth * sizeof( StackType_t ) );\r
                }\r
+               #endif /* ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) ) ) */\r
        }\r
 \r
        return pxNewTCB;\r